Name: series-workflowd529s Phase: Succeeded StartedAt: 2026-09-14 02:23:50 +0000 UTC FinishedAt: 2026-09-14 06:33:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd529s[0] Phase: Succeeded StartedAt: 2026-09-14 02:23:50 +0000 UTC FinishedAt: 2026-09-14 02:50:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd529s[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 02:23:50 +0000 UTC FinishedAt: 2026-09-14 02:50:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3783364ce6f883b5020b031e65cab6d3cd450b82", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3783364ce6f883b5020b031e65cab6d3cd450b82", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "126d126d-97cc-4859-8fa6-8ce03046af1a" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_journalled_invalidate_folio", "__ext4_journalled_invalidate_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "3783364ce6f883b5020b031e65cab6d3cd450b82", "base_tree": "torvalds" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAyOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIHRvIGhhbmRsZSAtRUJVU1kgcmV0dXJucyBmcm9tIF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oKSBieSB3YWl0aW5nIGZvciB0aGUgY29tbWl0dGluZyB0cmFuc2FjdGlvbiB2aWEgamJkMl9sb2dfd2FpdF9jb21taXQoKSBpbiBhIGxvb3AuXG5cbkFsbCBsb2NhbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBpbiB0aGUgcGF0Y2ggKHJldCwgaGFzX3RyYW5zYWN0aW9uLCBjb21taXRfdGlkKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZTogaGFzX3RyYW5zYWN0aW9uIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlLCBhbmQgY29tbWl0X3RpZCBpcyBvbmx5IHJlYWQgd2hlbiBoYXNfdHJhbnNhY3Rpb24gaXMgdHJ1ZSAod2hlcmUgaXQgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGJlZW4gc2V0KS4gTm8gbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgY29waWVzLCBwYWRkaW5nLCBvciB1c2VyLXNwYWNlIHRyYW5zZmVycyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IGNvbmN1cnJlbmN5LCBkZWFkbG9jaywgb3IgbGl2ZWxvY2sgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBsb29wIG9yIHdhaXRpbmcgb24gdHJhbnNhY3Rpb25zIGFyZSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBMT0NLREVQIGFuZCBoYW5nL3dhdGNoZG9nIGRldGVjdG9ycywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyBpbiBmcy9leHQ0L2lub2RlLmMsIHJlcGxhY2luZyBhbiBhc3NlcnRpb24gd2l0aCBhIHJldHJ5IGxvb3AgdGhhdCBzeW5jaHJvbml6ZXMgd2l0aCBKQkQyIHRyYW5zYWN0aW9ucyB3aGVuIF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8gcmV0dXJucyAtRUJVU1kuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGZvbGlvIGludmFsaWRhdGlvbiBvcGVyYXRpb25zIChzdWNoIGFzIHRydW5jYXRlIG9yIGhvbGUgcHVuY2hpbmcpIG9uIGV4dDQgaW5vZGVzIHdpdGggZGF0YSBqb3VybmFsbGluZyBlbmFibGVkLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uLCBkZWFkbG9ja3MsIG9yIGluZmluaXRlIGxvb3BzIGlmIGEgdHJhbnNhY3Rpb24gY29tbWl0IGlzIHBlbmRpbmcgb3IgbWlzc2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDkzOGQ4ZTM1MmZlODBlNTIxYTdhZTRkN2I2OWQ5NjdjOTlkMTY3NWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAwMjo0ODowOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGMyYzJkNmFjN2YzZDEuLjZiYjk0YWZkNTEwMDYgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5vZGUuY1xuQEAgLTM0MjksNyAmIzQzOzM0MjksMjcgQEAgc3RhdGljIHZvaWQgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0XHRcdFx0ICAgc2l6ZV90IG9mZnNldCxcbiBcdFx0XHRcdFx0ICAgc2l6ZV90IGxlbmd0aClcbiB7XG4tXHRXQVJOX09OKF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCwgbGVuZ3RoKSBcdTAwM2MgMCk7XG4mIzQzO1x0dGlkX3QgY29tbWl0X3RpZDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGJvb2wgaGFzX3RyYW5zYWN0aW9uO1xuJiM0MztcdGpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfSk9VUk5BTChmb2xpby1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3QpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoMSkge1xuJiM0MztcdFx0cmV0ID0gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xuJiM0MztcdFx0aWYgKHJldCAhPSAtRUJVU1kpIHtcbiYjNDM7XHRcdFx0V0FSTl9PTihyZXQgXHUwMDNjIDApO1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRoYXNfdHJhbnNhY3Rpb24gPSBmYWxzZTtcbiYjNDM7XHRcdHJlYWRfbG9jayhcdTAwMjZqb3VybmFsLVx1MDAzZWpfc3RhdGVfbG9jayk7XG4mIzQzO1x0XHRpZiAoam91cm5hbC1cdTAwM2VqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24pIHtcbiYjNDM7XHRcdFx0Y29tbWl0X3RpZCA9IGpvdXJuYWwtXHUwMDNlal9jb21taXR0aW5nX3RyYW5zYWN0aW9uLVx1MDAzZXRfdGlkO1xuJiM0MztcdFx0XHRoYXNfdHJhbnNhY3Rpb24gPSB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmVhZF91bmxvY2soXHUwMDI2am91cm5hbC1cdTAwM2VqX3N0YXRlX2xvY2spO1xuJiM0MztcdFx0aWYgKGhhc190cmFuc2FjdGlvbilcbiYjNDM7XHRcdFx0amJkMl9sb2dfd2FpdF9jb21taXQoam91cm5hbCwgY29tbWl0X3RpZCk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgYm9vbCBleHQ0X3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3Qgd2FpdClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8mIzM0OywKICAgICYjMzQ7X19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyBpbiBmcy9leHQ0L2lub2RlLmMsIHJlcGxhY2luZyBhbiBhc3NlcnRpb24gd2l0aCBhIHJldHJ5IGxvb3AgdGhhdCBzeW5jaHJvbml6ZXMgd2l0aCBKQkQyIHRyYW5zYWN0aW9ucyB3aGVuIF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8gcmV0dXJucyAtRUJVU1kuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGZvbGlvIGludmFsaWRhdGlvbiBvcGVyYXRpb25zIChzdWNoIGFzIHRydW5jYXRlIG9yIGhvbGUgcHVuY2hpbmcpIG9uIGV4dDQgaW5vZGVzIHdpdGggZGF0YSBqb3VybmFsbGluZyBlbmFibGVkLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uLCBkZWFkbG9ja3MsIG9yIGluZmluaXRlIGxvb3BzIGlmIGEgdHJhbnNhY3Rpb24gY29tbWl0IGlzIHBlbmRpbmcgb3IgbWlzc2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkzOGQ4ZTM1MmZlODBlNTIxYTdhZTRkN2I2OWQ5NjdjOTlkMTY3NWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAwMjo0ODowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCBjMmMyZDZhYzdmM2QxLi42YmI5NGFmZDUxMDA2IDEwMDY0NAotLS0gYS9mcy9leHQ0L2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jCkBAIC0zNDI5LDcgJiM0MzszNDI5LDI3IEBAIHN0YXRpYyB2b2lkIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCQkJCSAgIHNpemVfdCBvZmZzZXQsCiAJCQkJCSAgIHNpemVfdCBsZW5ndGgpCiB7Ci0JV0FSTl9PTihfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCkgJmx0OyAwKTsKJiM0MzsJdGlkX3QgY29tbWl0X3RpZDsKJiM0MzsJaW50IHJldDsKJiM0MzsJYm9vbCBoYXNfdHJhbnNhY3Rpb247CiYjNDM7CWpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfSk9VUk5BTChmb2xpby0mZ3Q7bWFwcGluZy0mZ3Q7aG9zdCk7CiYjNDM7CiYjNDM7CXdoaWxlICgxKSB7CiYjNDM7CQlyZXQgPSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7CiYjNDM7CQlpZiAocmV0ICE9IC1FQlVTWSkgewomIzQzOwkJCVdBUk5fT04ocmV0ICZsdDsgMCk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwkJaGFzX3RyYW5zYWN0aW9uID0gZmFsc2U7CiYjNDM7CQlyZWFkX2xvY2soJmFtcDtqb3VybmFsLSZndDtqX3N0YXRlX2xvY2spOwomIzQzOwkJaWYgKGpvdXJuYWwtJmd0O2pfY29tbWl0dGluZ190cmFuc2FjdGlvbikgewomIzQzOwkJCWNvbW1pdF90aWQgPSBqb3VybmFsLSZndDtqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24tJmd0O3RfdGlkOwomIzQzOwkJCWhhc190cmFuc2FjdGlvbiA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CQlyZWFkX3VubG9jaygmYW1wO2pvdXJuYWwtJmd0O2pfc3RhdGVfbG9jayk7CiYjNDM7CQlpZiAoaGFzX3RyYW5zYWN0aW9uKQomIzQzOwkJCWpiZDJfbG9nX3dhaXRfY29tbWl0KGpvdXJuYWwsIGNvbW1pdF90aWQpOwomIzQzOwl9CiB9CiAKIHN0YXRpYyBib29sIGV4dDRfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCB3YWl0KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDgxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcGxheWluZyB0aGUgcm9sZSBvZiBhbiBleHBlcnQ6CgoqKkFuYWx5emluZyB0aGUgRXh0NCBKb3VybmFsbGVkIEludmFsaWRhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgY2hhbmdlIGlzIHR1Y2tlZCBhd2F5IGluIGBmcy9leHQ0L2lub2RlLmNgLCBzcGVjaWZpY2FsbHkgd2l0aCBhIG1vZGlmaWNhdGlvbiB0byBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gLiBSaWdodCwgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIGpvdXJuYWwtcmVsYXRlZCBmb2xpbyBoYW5kbGluZy4gTGV0JiMzOTtzIGdldCBjcmFja2luZy4gSSYjMzk7bSBnb2luZyB0byBncmFiIHRoZSBwYXRjaCBhbmQgdGhhdCBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlLiBJ4oCZbGwgcHJvYmFibHkgdXNlIGByZWFkLWZpbGVgIHRvIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZiBmaXJzdCwgZ2V0IGEgZmVlbCBmb3IgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBUaGVuLCBJJiMzOTtsbCBkaXZlIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGlub2RlLmNgIHdpdGggc29tZXRoaW5nIGxpa2UgYGdyZXBwZXJgIOKAkyB0aGF0JiMzOTtzIHRoZSBiZXN0IHdheSB0byByYXBpZGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGlzIG1vZGlmaWNhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBpbnZhbGlkYXRpb24gZnVuY3Rpb24gbmVlZGVkIGFkanVzdG1lbnQg4oCTIHdoYXQgc2NlbmFyaW8gaXMgYmVpbmcgYWRkcmVzc2VkPyBJcyBpdCByZWxhdGVkIHRvIGEgc3BlY2lmaWMgYnVnLCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yIG5ldyBmZWF0dXJlPyBHb3R0YSBnZXQgdGhlIGZ1bGwgcGljdHVyZSBiZWZvcmUgSSBjYW4ganVkZ2UgaXRzIHF1YWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM0MTU6XHRcbjM0MTY6XHRcdHRyYWNlX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG4zNDE3Olx0XG4zNDE4Olx0XHQvKlxuMzQxOTpcdFx0ICogSWYgaXQmIzM5O3MgYSBmdWxsIHRydW5jYXRlIHdlIGp1c3QgZm9yZ2V0IGFib3V0IHRoZSBwZW5kaW5nIGRpcnR5aW5nXG4zNDIwOlx0XHQgKi9cbjM0MjE6XHRcdGlmIChvZmZzZXQgPT0gMCBcdTAwMjZcdTAwMjYgbGVuZ3RoID09IGZvbGlvX3NpemUoZm9saW8pKVxuMzQyMjpcdFx0XHRmb2xpb19jbGVhcl9jaGVja2VkKGZvbGlvKTtcbjM0MjM6XHRcbjM0MjQ6XHRcdHJldHVybiBqYmQyX2pvdXJuYWxfaW52YWxpZGF0ZV9mb2xpbyhqb3VybmFsLCBmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xuMzQyNTpcdH1cbjM0MjY6XHRcbjM0Mjc6XHQvKiBXcmFwcGVyIGZvciBhb3BzLi4uICovXG4zNDI4Olx0c3RhdGljIHZvaWQgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbjM0Mjk6XHRcdFx0XHRcdFx0ICAgc2l6ZV90IG9mZnNldCxcbjM0MzA6XHRcdFx0XHRcdFx0ICAgc2l6ZV90IGxlbmd0aClcbjM0MzE6XHR7XG4zNDMyOlx0XHR0aWRfdCBjb21taXRfdGlkO1xuMzQzMzpcdFx0aW50IHJldDtcbjM0MzQ6XHRcdGJvb2wgaGFzX3RyYW5zYWN0aW9uO1xuMzQzNTpcdFx0am91cm5hbF90ICpqb3VybmFsID0gRVhUNF9KT1VSTkFMKGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdCk7XG4zNDM2Olx0XG4zNDM3Olx0XHR3aGlsZSAoMSkge1xuMzQzODpcdFx0XHRyZXQgPSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG4zNDM5Olx0XHRcdGlmIChyZXQgIT0gLUVCVVNZKSB7XG4zNDQwOlx0XHRcdFx0V0FSTl9PTihyZXQgXHUwMDNjIDApO1xuMzQ0MTpcdFx0XHRcdHJldHVybjtcbjM0NDI6XHRcdFx0fVxuMzQ0MzpcdFx0XHRoYXNfdHJhbnNhY3Rpb24gPSBmYWxzZTtcbjM0NDQ6XHRcdFx0cmVhZF9sb2NrKFx1MDAyNmpvdXJuYWwtXHUwMDNlal9zdGF0ZV9sb2NrKTtcbjM0NDU6XHRcdFx0aWYgKGpvdXJuYWwtXHUwMDNlal9jb21taXR0aW5nX3RyYW5zYWN0aW9uKSB7XG4zNDQ2Olx0XHRcdFx0Y29tbWl0X3RpZCA9IGpvdXJuYWwtXHUwMDNlal9jb21taXR0aW5nX3RyYW5zYWN0aW9uLVx1MDAzZXRfdGlkO1xuMzQ0NzpcdFx0XHRcdGhhc190cmFuc2FjdGlvbiA9IHRydWU7XG4zNDQ4Olx0XHRcdH1cbjM0NDk6XHRcdFx0cmVhZF91bmxvY2soXHUwMDI2am91cm5hbC1cdTAwM2VqX3N0YXRlX2xvY2spO1xuMzQ1MDpcdFx0XHRpZiAoaGFzX3RyYW5zYWN0aW9uKVxuMzQ1MTpcdFx0XHRcdGpiZDJfbG9nX3dhaXRfY29tbWl0KGpvdXJuYWwsIGNvbW1pdF90aWQpO1xuMzQ1MjpcdFx0fVxuMzQ1MzpcdH1cbjM0NTQ6XHRcbjM0NTU6XHRzdGF0aWMgYm9vbCBleHQ0X3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3Qgd2FpdClcbjM0NTY6XHR7XG4zNDU3Olx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0O1xuMzQ1ODpcdFx0am91cm5hbF90ICpqb3VybmFsID0gRVhUNF9KT1VSTkFMKGlub2RlKTtcbjM0NTk6XHRcbjM0NjA6XHRcdHRyYWNlX2V4dDRfcmVsZWFzZV9mb2xpbyhpbm9kZSwgZm9saW8pO1xuMzQ2MTpcdFxuMzQ2MjpcdFx0LyogUGFnZSBoYXMgZGlydHkgam91cm5hbGxlZCBkYXRhIC1cdTAwM2UgY2Fubm90IHJlbGVhc2UgKi9cbjM0NjM6XHRcdGlmIChmb2xpb190ZXN0X2NoZWNrZWQoZm9saW8pKVxuMzQ2NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBleHQ0IERhdGEgSm91cm5hbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gLi4uIHJpZ2h0LCB0aGF0JiMzOTtzIGluIGBmcy9leHQ0L2lub2RlLmNgLCBzbyBpdCYjMzk7cyBleHQ0LXNwZWNpZmljIGFuZCwgY3J1Y2lhbGx5LCBpdCYjMzk7cyByZWxldmFudCB3aGVuIGRhdGEgam91cm5hbGluZyAoYGRhdGE9am91cm5hbGApIGlzIGVuYWJsZWQuIEdvb2QsIGJlY2F1c2UgZXh0NCBpcyBhIHdvcmtob3JzZSwgYSBjb3JlIGZpbGVzeXN0ZW0sIGFuZCBpdCYjMzk7cyBzb21ldGhpbmcgd2UgKmNhbiogaGl0IHJlbGlhYmx5IHdpdGggUUVNVSwgR0NFLCBhbmQgb2YgY291cnNlLCBzeXprYWxsZXIuIFRoYXQgbWVhbnMgd2UgaGF2ZSBhIHZpYWJsZSBmdXp6aW5nIHRhcmdldC4KCk5vdywgdGhpcyBwYXRjaCBtb2RpZmllcyBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gLCB3aGljaCBzZWVtcyB0byBiZSBsb29waW5nIHdoaWxlIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCByZXR1cm5zIGAtRUJVU1lgLiBJdCYjMzk7cyB3YWl0aW5nIGZvciBgal9jb21taXR0aW5nX3RyYW5zYWN0aW9uYCB0byBmaW5pc2ggdXAuIEhvbGQgb24uLi4gdGhlcmUmIzM5O3MgYSBwb3RlbnRpYWwgaXNzdWUuIFdoYXQgaWYgYF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIHJldHVybnMgYC1FQlVTWWAsICpidXQqIGBoYXNfdHJhbnNhY3Rpb25gIGlzICpmYWxzZSo/CgpMZXQgbWUgbG9vayBhdCB0aGF0IGxvb3AgYWdhaW46CgpgYGBjCgl3aGlsZSAoMSkgewoJCXJldCA9IF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCwgbGVuZ3RoKTsKCQlpZiAocmV0ICE9IC1FQlVTWSkgewoJCQlXQVJOX09OKHJldCAmbHQ7IDApOwoJCQlyZXR1cm47CgkJfQoJCWhhc190cmFuc2FjdGlvbiA9IGZhbHNlOwoJCXJlYWRfbG9jaygmYW1wO2pvdXJuYWwtJmd0O2pfc3RhdGVfbG9jayk7CgkJaWYgKGpvdXJuYWwtJmd0O2pfY29tbWl0dGluZ190cmFuc2FjdGlvbikgewoJCQljb21taXRfdGlkID0gam91cm5hbC0mZ3Q7al9jb21taXR0aW5nX3RyYW5zYWN0aW9uLSZndDt0X3RpZDsKCQkJaGFzX3RyYW5zYWN0aW9uID0gdHJ1ZTsKCQl9CgkJcmVhZF91bmxvY2soJmFtcDtqb3VybmFsLSZndDtqX3N0YXRlX2xvY2spOwoJCWlmIChoYXNfdHJhbnNhY3Rpb24pCgkJCWpiZDJfbG9nX3dhaXRfY29tbWl0KGpvdXJuYWwsIGNvbW1pdF90aWQpOwoJfQpgYGAKCk9rYXksIEkgc2VlIGl0LiBJZiBgaGFzX3RyYW5zYWN0aW9uYCBpcyBmYWxzZSwgdGhpcyBsb29wIHdpbGwganVzdCAqYnVzeSB3YWl0KiB3aXRob3V0IHlpZWxkaW5nIG9yIHNsZWVwaW5nLiBUaGF0JiMzOTtzIGEgaHVnZSByZWQgZmxhZy4gQSBidXN5IGxvb3AgaW4gdGhlIGtlcm5lbCBpcyBuZXZlciBnb29kLiBPciB3aGF0IGlmIGBqYmQyYCBpdHNlbGYgcmV0dXJucyBgLUVCVVNZYCBpbiBhIGRpZmZlcmVudCBzY2VuYXJpbz8gQWxzbywgdGhpcyBzdHJ1Y3R1cmUgaXMgYSB0aWNraW5nIHRpbWUgYm9tYiBmb3IgcG90ZW50aWFsIGRlYWRsb2NrLCBpbmZpbml0ZSBsb29wcywgb3IgZXZlbiBsb2NrZGVwIGlzc3Vlcy4KClRoaXMgbG9va3MgbGlrZSBpdOKAmXMgc2NyZWFtaW5nIGZvciBmdXp6aW5nLiBEZWZpbml0ZWx5IHdvcnRoIHRoZSBlZmZvcnQuIE5vdywgbGV04oCZcyBzZWUgd2hlcmUgYGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCBpcyBhY3R1YWxseSB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2lub2RlLmM9MzQwMD1zdGF0aWMgdm9pZCBleHQ0X2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcbi0tXG5mcy9leHQ0L2lub2RlLmMtMzQxMC1cbmZzL2V4dDQvaW5vZGUuYzozNDExOnN0YXRpYyBpbnQgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuZnMvZXh0NC9pbm9kZS5jLTM0MTItXHRcdFx0XHRcdCAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy0zNDE1LVxuZnMvZXh0NC9pbm9kZS5jOjM0MTY6XHR0cmFjZV9leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xuZnMvZXh0NC9pbm9kZS5jLTM0MTctXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTM0MjctLyogV3JhcHBlciBmb3IgYW9wcy4uLiAqL1xuZnMvZXh0NC9pbm9kZS5jOjM0Mjg6c3RhdGljIHZvaWQgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbmZzL2V4dDQvaW5vZGUuYy0zNDI5LVx0XHRcdFx0XHQgICBzaXplX3Qgb2Zmc2V0LFxuLS1cbmZzL2V4dDQvaW5vZGUuYy0zNDM3LVx0d2hpbGUgKDEpIHtcbmZzL2V4dDQvaW5vZGUuYzozNDM4Olx0XHRyZXQgPSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG5mcy9leHQ0L2lub2RlLmMtMzQzOS1cdFx0aWYgKHJldCAhPSAtRUJVU1kpIHtcbi0tXG5mcy9leHQ0L2lub2RlLmM9Mzk4NT1zdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBleHQ0X2pvdXJuYWxsZWRfYW9wcyA9IHtcbi0tXG5mcy9leHQ0L2lub2RlLmMtMzk5Mi1cdC5ibWFwXHRcdFx0PSBleHQ0X2JtYXAsXG5mcy9leHQ0L2lub2RlLmM6Mzk5MzpcdC5pbnZhbGlkYXRlX2ZvbGlvXHQ9IGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvLFxuZnMvZXh0NC9pbm9kZS5jLTM5OTQtXHQucmVsZWFzZV9mb2xpb1x0XHQ9IGV4dDRfcmVsZWFzZV9mb2xpbyxcbi0tXG5mcy9leHQ0L2lub2RlLmM9NTc4MD1pbnQgZXh0NF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTgzMC0vKlxuZnMvZXh0NC9pbm9kZS5jOjU4MzE6ICogSW4gZGF0YT1qb3VybmFsIG1vZGUgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oKSBtYXkgZmFpbCB0byBpbnZhbGlkYXRlXG5mcy9leHQ0L2lub2RlLmMtNTgzMi0gKiBidWZmZXJzIHRoYXQgYXJlIGF0dGFjaGVkIHRvIGEgZm9saW8gc3RyYWRkbGluZyBpX3NpemUgYW5kIGFyZSB1bmRlcmdvaW5nXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTU4MzU9c3RhdGljIHZvaWQgZXh0NF93YWl0X2Zvcl90YWlsX3BhZ2VfY29tbWl0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTU4NDUtXHQgKiBJZiB0aGUgZm9saW8gaXMgZnVsbHkgdHJ1bmNhdGVkLCB3ZSBkb24mIzM5O3QgbmVlZCB0byB3YWl0IGZvciBhbnkgY29tbWl0XG5mcy9leHQ0L2lub2RlLmM6NTg0NjpcdCAqIChhbmQgd2UgZXZlbiBzaG91bGQgbm90IGFzIF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oKSBtYXlcbmZzL2V4dDQvaW5vZGUuYy01ODQ3LVx0ICogc3RyaXAgYWxsIGJ1ZmZlcnMgZnJvbSB0aGUgZm9saW8gYnV0IGtlZXAgdGhlIGZvbGlvIGRpcnR5IHdoaWNoIGNhbiB0aGVuXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTU4NTktXHRcdFx0cmV0dXJuO1xuZnMvZXh0NC9pbm9kZS5jOjU4NjA6XHRcdHJldCA9IF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCxcbmZzL2V4dDQvaW5vZGUuYy01ODYxLVx0XHRcdFx0XHRcdGZvbGlvX3NpemUoZm9saW8pIC0gb2Zmc2V0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTE3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIGZvciBTeXprYWxsZXIgVGFyZ2V0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gLCB3aGljaCBpcyBhIGZ1bmN0aW9uIHVzZWQgYXMgdGhlIGBpbnZhbGlkYXRlX2ZvbGlvYCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbiBpbiBgZXh0NF9qb3VybmFsbGVkX2FvcHNgLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQmIzM5O3Mgc3RhdGljLiBZZXMsIGl0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgLiBOb3csIHRoZSBrZXkgcXVlc3Rpb246IGNhbiBTeXprYWxsZXIgZGlyZWN0bHkgdGFyZ2V0IHRoaXMgZnVuY3Rpb24/CgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGxvb2sgZm9yIGNsdWVzIGluIG15IHBhc3QgZXhwZXJpZW5jZSB3aXRoIHN0YXRpYyBmdW5jdGlvbnMgYW5kIFN5emthbGxlci4gSG1tLCBTZWN0aW9uIDQgb2YgbXkgbm90ZXMgb24gdGhlIHN1YmplY3QgdGFsa3MgYWJvdXQgaG93IGNvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyBpbiBoZWFkZXJzIGRvbiYjMzk7dCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gYHZtbGludXhgLCBzbyB0aGV5IGFyZSBtaXNzZWQgYnkgU3l6a2FsbGVyJiMzOTtzIHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLiBCdXQsIHdhaXQuLi4gYGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCByZXNpZGVzIGluIGBmcy9leHQ0L2lub2RlLmNgLCBub3QgYSBoZWFkZXIuIERvZXMgdGhhdCBtZWFuIGl0JiMzOTtzIGlubGluZWQsIG9yIGlzIGl0IGEgc2VwYXJhdGUgc3ltYm9sIGluIHRoZSBrZXJuZWw/CgpBaCwgcmlnaHQsIG5vdyBJIHJlbWVtYmVyLiBJdCYjMzk7cyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlcjogYC5pbnZhbGlkYXRlX2ZvbGlvID0gZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8sYC4gU2luY2UgdGhlIGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uIGlzIHRha2VuIChgJmFtcDtleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2ApLCB0aGUgY29tcGlsZXIgKmNhbm5vdCogaW5saW5lIGl0LiBUaGUgY29tcGlsZXIgKm11c3QqIGFsbG9jYXRlIGEgc3ltYm9sIGVudHJ5IGZvciB0aGUgZnVuY3Rpb24gd2l0aGluIGB2bWxpbnV4YCEgVGhlcmVmb3JlLCBpdCBzaG91bGQgYmUgdGFyZ2V0YWJsZS4gTm93LCB0aGVyZSBtaWdodCBiZSBhIHNpbWlsYXIgaXNzdWUgd2l0aCBgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgYnV0IHRoYXQgaXMgYSBzZWNvbmRhcnkgY29uc2lkZXJhdGlvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IHRoYXQgaXMgcHJvcGVybHkgYWNjb3VudGVkIGZvciBpbiB0aGUgY2hlY2suCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBLY29uZmlnIGZvciBleHQ0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBvcHRpb25zIGFyZSBlbmFibGVkIHRvIG1ha2Ugc3VyZSB0aGUgc3ltYm9sIGlzIHByZXNlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVYVDRfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg2OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBleHQ0IEtjb25maWcgRmlsZSoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgZnMvZXh0NC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gc29tZSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGluaXRpYWwgcGFydCBvZiB0aGUgZmlsZSwgcm91Z2hseSBhcm91bmQgbGluZXMgMSB0byAzMC4gVGhlcmUmIzM5O3MgcHJvYmFibHkgc29tZXRoaW5nIHNwZWNpZmljIEkmIzM5O20gbG9va2luZyBmb3IgdGhlcmUg4oCTIHBlcmhhcHMgYSBkZXBlbmRlbmN5IGNoZWNrIG9yIGEgZGVmYXVsdCBzZXR0aW5nIEkgd2FudCB0byBjb25maXJtLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhvc2UgZmlyc3QgZmV3IGxpbmVzIGFuZCBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbi4gSSYjMzk7bSBob3BpbmcgSSBjYW4gemVybyBpbiBvbiBpdCBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBFWFQ0X0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuICAgNDpcdFx0c2VsZWN0IEJVRkZFUl9IRUFEXG4gICA1Olx0XHRzZWxlY3QgSkJEMlxuICAgNjpcdFx0c2VsZWN0IENSQzE2XG4gICA3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgIDg6XHRcdHNlbGVjdCBGU19JT01BUFxuICAgOTpcdFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFRoaXMgaXMgdGhlIG5leHQgZ2VuZXJhdGlvbiBvZiB0aGUgZXh0MyBmaWxlc3lzdGVtLlxuICAxMjpcdFxuICAxMzpcdFx0ICBVbmxpa2UgdGhlIGNoYW5nZSBmcm9tIGV4dDIgZmlsZXN5c3RlbSB0byBleHQzIGZpbGVzeXN0ZW0sXG4gIDE0Olx0XHQgIHRoZSBvbi1kaXNrIGZvcm1hdCBvZiBleHQ0IGlzIG5vdCBmb3J3YXJkcyBjb21wYXRpYmxlIHdpdGhcbiAgMTU6XHRcdCAgZXh0MzsgaXQgaXMgYmFzZWQgb24gZXh0ZW50IG1hcHMgYW5kIGl0IHN1cHBvcnRzIDQ4LWJpdFxuICAxNjpcdFx0ICBwaHlzaWNhbCBibG9jayBudW1iZXJzLiAgVGhlIGV4dDQgZmlsZXN5c3RlbSBhbHNvIHN1cHBvcnRzIGRlbGF5ZWRcbiAgMTc6XHRcdCAgYWxsb2NhdGlvbiwgcGVyc2lzdGVudCBwcmVhbGxvY2F0aW9uLCBoaWdoIHJlc29sdXRpb24gdGltZSBzdGFtcHMsXG4gIDE4Olx0XHQgIGFuZCBhIG51bWJlciBvZiBvdGhlciBmZWF0dXJlcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCBzcGVlZFxuICAxOTpcdFx0ICB1cCBmc2NrIHRpbWUuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSB0aGUgd2ViIHBhZ2VzIGF0XG4gIDIwOlx0XHQgIGh0dHA6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy5cbiAgMjE6XHRcbiAgMjI6XHRcdCAgVGhlIGV4dDQgZmlsZXN5c3RlbSBzdXBwb3J0cyBtb3VudGluZyBhbiBleHQzIGZpbGVzeXN0ZW07IHdoaWxlIHRoZXJlXG4gIDIzOlx0XHQgIGFyZSBzb21lIHBlcmZvcm1hbmNlIGdhaW5zIGZyb20gdGhlIGRlbGF5ZWQgYWxsb2NhdGlvbiBhbmQgaW5vZGVcbiAgMjQ6XHRcdCAgdGFibGUgcmVhZGFoZWFkLCB0aGUgYmVzdCBwZXJmb3JtYW5jZSBnYWlucyByZXF1aXJlIGVuYWJsaW5nIGV4dDRcbiAgMjU6XHRcdCAgZmVhdHVyZXMgaW4gdGhlIGZpbGVzeXN0ZW0gdXNpbmcgdHVuZTJmcywgb3IgZm9ybWF0dGluZyBhIG5ld1xuICAyNjpcdFx0ICBmaWxlc3lzdGVtIGFzIGFuIGV4dDQgZmlsZXN5c3RlbSBpbml0aWFsbHkuIFdpdGhvdXQgZXhwbGljaXQgZW5hYmxpbmdcbiAgMjc6XHRcdCAgb2YgZXh0NCBmZWF0dXJlcywgdGhlIG9uIGRpc2sgZmlsZXN5c3RlbSBmb3JtYXQgc3RheXMgZnVsbHkgYmFja3dhcmRcbiAgMjg6XHRcdCAgY29tcGF0aWJsZS5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZVxuICAzMTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZXh0NC5cbiAgMzI6XHRcbiAgMzM6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU5MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgRVhUNCBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKgoKT2theSwgc28gdGhlIGJhc2UgY29uZmlndXJhdGlvbiBJJiMzOTttIGxvb2tpbmcgYXQgaGVyZSBpcyBgRVhUNF9GU2AuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZSBmdW5jdGlvbiBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIHdpdGhpbiB0aGUgRVhUNCBmaWxlc3lzdGVtIGNvZGUgaGFzIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gU3BlY2lmaWNhbGx5LCBhcmUgdGhlcmUgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGF0IGZ1bmN0aW9uIHRvIGV2ZW4gYmUgY29tcGlsZWQgb3IgY29uc2lkZXJlZD8gTGV0JiMzOTtzIGRyaWxsIGludG8gdGhlIGBmcy9leHQ0L01ha2VmaWxlYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIHJlbGF0ZWQgdG8gdGhhdCBmdW5jdGlvbi4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUsIG9mIGNvdXJzZS4gSSYjMzk7bGwgcXVpY2tseSBjaGVjayBmb3IgYW55IHJlbGF0ZWQgYCNpZmRlZmAgb3Igc2ltaWxhciBjb25zdHJ1Y3RzLiBUaGlzIGlzIHdoZXJlIHRoZSBhbnN3ZXIgdHlwaWNhbGx5IHJlc2lkZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGV4dDQtZmlsZXN5c3RlbSByb3V0aW5lcy5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLSQoQ09ORklHX0VYVDRfRlMpICYjNDM7PSBleHQ0Lm9cbiAgIDc6XHRcbiAgIDg6XHRleHQ0LXlcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXG4gICA5Olx0XHRcdGV4dGVudHNfc3RhdHVzLm8gZmlsZS5vIGZzbWFwLm8gZnN5bmMubyBoYXNoLm8gaWFsbG9jLm8gXFxcbiAgMTA6XHRcdFx0aW5kaXJlY3QubyBpbmxpbmUubyBpbm9kZS5vIGlvY3RsLm8gbWJhbGxvYy5vIG1pZ3JhdGUubyBcXFxuICAxMTpcdFx0XHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcbiAgMTI6XHRcdFx0c3VwZXIubyBzeW1saW5rLm8gc3lzZnMubyB4YXR0ci5vIHhhdHRyX2h1cmQubyB4YXR0cl90cnVzdGVkLm8gXFxcbiAgMTM6XHRcdFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cbiAgMTQ6XHRcbiAgMTU6XHRleHQ0LSQoQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMKVx0JiM0Mzs9IGFjbC5vXG4gIDE2Olx0ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZKVx0XHQmIzQzOz0geGF0dHJfc2VjdXJpdHkub1xuICAxNzpcdGV4dDQtdGVzdC1vYmpzXHRcdFx0XHQmIzQzOz0gaW5vZGUtdGVzdC5vIG1iYWxsb2MtdGVzdC5vIFxcXG4gIDE4Olx0XHRcdFx0XHRcdCAgIGV4dGVudHMtdGVzdC5vXG4gIDE5Olx0b2JqLSQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXHRcdCYjNDM7PSBleHQ0LXRlc3Qub1xuICAyMDpcdGV4dDQtJChDT05GSUdfRlNfVkVSSVRZKVx0XHQmIzQzOz0gdmVyaXR5Lm9cbiAgMjE6XHRleHQ0LSQoQ09ORklHX0ZTX0VOQ1JZUFRJT04pXHRcdCYjNDM7PSBjcnlwdG8ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjUxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRVhUNCBKb3VybmFsaW5nIEludmFsaWRhdGlvbioqCgpPa2F5LCBzbyBgaW5vZGUub2AgaW4gYGV4dDQteWAgaXMgY29udGluZ2VudCBvbiBgQ09ORklHX0VYVDRfRlNgLiBUaGF0IG1ha2VzIHNlbnNlLiBgQ09ORklHX0VYVDRfRlNgIHB1bGxzIGluIGBKQkQyYCBhbmQgYEJVRkZFUl9IRUFEYCDigJMgdGhlIHVzdWFsIHN1c3BlY3RzLiBJIGRvbiYjMzk7dCB0aGluayB0aGVyZSYjMzk7cyBhbnl0aGluZyB1bnVzdWFsIGNvbmZpZy13aXNlIGZvciBkYXRhIGpvdXJuYWxpbmc7IGl0JiMzOTtzIGp1c3QgdGhlIGBkYXRhPWpvdXJuYWxgIG1vdW50IG9wdGlvbiBvciB1c2luZyBgY2hhdHRyICYjNDM7amAsIGFzIGV4cGVjdGVkLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuIExldCBtZSBjaGVjayB0aGUgZ2l0IGNvbW1pdCBsb2csIHNlZSBpZiBJIGNhbiBnZXQgc29tZSBjb250ZXh0LiBIbW0sIG5vIGBnaXQgbG9nYCBhdmFpbGFibGUsIGJ1dCBJIGhhdmUgdGhlIGRpZmYuIEdvb2QgZW5vdWdoLiBJIGNhbiBzZWUgdGhlIGNvbW1pdDoKCmBgYApjb21taXQgOTM4ZDhlMzUyZmU4MGU1MjFhN2FlNGQ3YjY5ZDk2N2M5OWQxNjc1ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDAyOjQ4OjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jCmluZGV4IGMyYzJkNmFjN2YzZDEuLjZiYjk0YWZkNTEwMDYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTM0MjksNyAmIzQzOzM0MjksMjcgQEAgc3RhdGljIHZvaWQgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywKIAkJCQkJICAgc2l6ZV90IG9mZnNldCwKIAkJCQkJICAgc2l6ZV90IGxlbmd0aCkKIHsKLQlXQVJOX09OKF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCwgbGVuZ3RoKSAmbHQ7IDApOwomIzQzOwl0aWRfdCBjb21taXRfdGlkOwomIzQzOwlpbnQgcmV0OwomIzQzOwlib29sIGhhc190cmFuc2FjdGlvbjsKJiM0MzsJam91cm5hbF90ICpqb3VybmFsID0gRVhUNF9KT1VSTkFMKGZvbGlvLSZndDttYXBwaW5nLSZndDtob3N0KTsKJiM0MzsKJiM0MzsJd2hpbGUgKDEpIHsKJiM0MzsJCXJldCA9IF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCwgbGVuZ3RoKTsKJiM0MzsJCWlmIChyZXQgIT0gLUVCVVNZKSB7CiYjNDM7CQkJV0FSTl9PTihyZXQgJmx0OyAwKTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CQloYXNfdHJhbnNhY3Rpb24gPSBmYWxzZTsKJiM0MzsJCXJlYWRfbG9jaygmYW1wO2pvdXJuYWwtJmd0O2pfc3RhdGVfbG9jayk7CiYjNDM7CQlpZiAoam91cm5hbC0mZ3Q7al9jb21taXR0aW5nX3RyYW5zYWN0aW9uKSB7CiYjNDM7CQkJY29tbWl0X3RpZCA9IGpvdXJuYWwtJmd0O2pfY29tbWl0dGluZ190cmFuc2FjdGlvbi0mZ3Q7dF90aWQ7CiYjNDM7CQkJaGFzX3RyYW5zYWN0aW9uID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJCXJlYWRfdW5sb2NrKCZhbXA7am91cm5hbC0mZ3Q7al9zdGF0ZV9sb2NrKTsKJiM0MzsJCWlmIChoYXNfdHJhbnNhY3Rpb24pCiYjNDM7CQkJamJkMl9sb2dfd2FpdF9jb21taXQoam91cm5hbCwgY29tbWl0X3RpZCk7CiYjNDM7CX0KIH0KIGBgYAoKQWgsIGl0IHNlZW1zIHdlJiMzOTtyZSBoYW5kbGluZyB0aGUgY2FzZSB3aGVyZSBgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgcmV0dXJucyAtRUJVU1kuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGl0JiMzOTtzIGJ1c3kgYW5kIHdoYXQgdGhpcyB3aGlsZSBsb29wIGRvZXMuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3Mgd2FpdGluZyBmb3IgYSB0cmFuc2FjdGlvbiB0byBjb21wbGV0ZS4gU3BlY2lmaWNhbGx5IGl0IGNoZWNrcyB0byBzZWUgaWYgdGhlIGBqb3VybmFsLSZndDtqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb25gIGV4aXN0czsgaWYgaXQgZG9lcywgaXQgcmV0cmlldmVzIHRoZSBgY29tbWl0X3RpZGAgYW5kIHRoZW4gY2FsbHMgYGpiZDJfbG9nX3dhaXRfY29tbWl0YC4gT2theSwgSSB3aWxsIG5vdyBpbnZlc3RpZ2F0ZSBob3cgYF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5vZGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzQxMDpcdFxuMzQxMTpcdHN0YXRpYyBpbnQgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuMzQxMjpcdFx0XHRcdFx0XHQgICAgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aClcbjM0MTM6XHR7XG4zNDE0Olx0XHRqb3VybmFsX3QgKmpvdXJuYWwgPSBFWFQ0X0pPVVJOQUwoZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0KTtcbjM0MTU6XHRcbjM0MTY6XHRcdHRyYWNlX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG4zNDE3Olx0XG4zNDE4Olx0XHQvKlxuMzQxOTpcdFx0ICogSWYgaXQmIzM5O3MgYSBmdWxsIHRydW5jYXRlIHdlIGp1c3QgZm9yZ2V0IGFib3V0IHRoZSBwZW5kaW5nIGRpcnR5aW5nXG4zNDIwOlx0XHQgKi9cbjM0MjE6XHRcdGlmIChvZmZzZXQgPT0gMCBcdTAwMjZcdTAwMjYgbGVuZ3RoID09IGZvbGlvX3NpemUoZm9saW8pKVxuMzQyMjpcdFx0XHRmb2xpb19jbGVhcl9jaGVja2VkKGZvbGlvKTtcbjM0MjM6XHRcbjM0MjQ6XHRcdHJldHVybiBqYmQyX2pvdXJuYWxfaW52YWxpZGF0ZV9mb2xpbyhqb3VybmFsLCBmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xuMzQyNTpcdH1cbjM0MjY6XHRcbjM0Mjc6XHQvKiBXcmFwcGVyIGZvciBhb3BzLi4uICovXG4zNDI4Olx0c3RhdGljIHZvaWQgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbjM0Mjk6XHRcdFx0XHRcdFx0ICAgc2l6ZV90IG9mZnNldCxcbjM0MzA6XHRcdFx0XHRcdFx0ICAgc2l6ZV90IGxlbmd0aClcbjM0MzE6XHR7XG4zNDMyOlx0XHR0aWRfdCBjb21taXRfdGlkO1xuMzQzMzpcdFx0aW50IHJldDtcbjM0MzQ6XHRcdGJvb2wgaGFzX3RyYW5zYWN0aW9uO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDExOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGV4dDRfd2FpdF9mb3JfdGFpbF9wYWdlX2NvbW1pdGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgZXh0NF93YWl0X2Zvcl90YWlsX3BhZ2VfY29tbWl0YC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZXhhbWluZSB0aGlzIGZ1bmN0aW9uLCB3aGljaCBpcyBsb2NhdGVkIGluIGBmcy9leHQ0L2lub2RlLmNgLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgZnVuY3Rpb25zIGxpa2UgdGhlc2UsIGRlYWxpbmcgd2l0aCB0YWlsIHBhZ2UgY29tbWl0cywgYXJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBleHQ0IGZpbGVzeXN0ZW0gaGFuZGxlcyBkYXRhIHBlcnNpc3RlbmNlIGFuZCBzeW5jaHJvbml6YXRpb24gYXQgYSB2ZXJ5IGdyYW51bGFyIGxldmVsLiBJIHN1c3BlY3QgdGhpcyBpcyB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgdGFpbCBwYWdlIHdyaXRlYmFjayBwcm9jZXNzIHJlc2lkZXMuIEkgYW50aWNpcGF0ZSBpdCYjMzk7bGwgYmUgY2VudHJhbCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZmlsZXN5c3RlbSBlbnN1cmVzIGRhdGEgaW50ZWdyaXR5IHdoZW4gZGVhbGluZyB3aXRoIHBhcnRpYWxseSB3cml0dGVuIGJsb2Nrcy4gSSYjMzk7bSBrZWVuIHRvIGRpc3NlY3QgaXRzIGxvZ2ljLCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgSS9PIHBhdGguIFRoaXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvZiBleHQ0IHVuZGVyIGRpZmZlcmVudCB3b3JrbG9hZHMgYW5kIGNvbmZpZ3VyYXRpb25zLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggZnJhZ21lbnRlZCBmaWxlcyBvciBwb3dlciBmYWlsdXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU4MzA6XHQvKlxuNTgzMTpcdCAqIEluIGRhdGE9am91cm5hbCBtb2RlIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKCkgbWF5IGZhaWwgdG8gaW52YWxpZGF0ZVxuNTgzMjpcdCAqIGJ1ZmZlcnMgdGhhdCBhcmUgYXR0YWNoZWQgdG8gYSBmb2xpbyBzdHJhZGRsaW5nIGlfc2l6ZSBhbmQgYXJlIHVuZGVyZ29pbmdcbjU4MzM6XHQgKiBjb21taXQuIEluIHRoYXQgY2FzZSB3ZSBoYXZlIHRvIHdhaXQgZm9yIGNvbW1pdCB0byBmaW5pc2ggYW5kIHRyeSBhZ2Fpbi5cbjU4MzQ6XHQgKi9cbjU4MzU6XHRzdGF0aWMgdm9pZCBleHQ0X3dhaXRfZm9yX3RhaWxfcGFnZV9jb21taXQoc3RydWN0IGlub2RlICppbm9kZSlcbjU4MzY6XHR7XG41ODM3Olx0XHR1bnNpZ25lZCBvZmZzZXQ7XG41ODM4Olx0XHRqb3VybmFsX3QgKmpvdXJuYWwgPSBFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfam91cm5hbDtcbjU4Mzk6XHRcdHRpZF90IGNvbW1pdF90aWQ7XG41ODQwOlx0XHRpbnQgcmV0O1xuNTg0MTpcdFx0Ym9vbCBoYXNfdHJhbnNhY3Rpb247XG41ODQyOlx0XG41ODQzOlx0XHRvZmZzZXQgPSBpbm9kZS1cdTAwM2VpX3NpemUgXHUwMDI2IChQQUdFX1NJWkUgLSAxKTtcbjU4NDQ6XHRcdC8qXG41ODQ1Olx0XHQgKiBJZiB0aGUgZm9saW8gaXMgZnVsbHkgdHJ1bmNhdGVkLCB3ZSBkb24mIzM5O3QgbmVlZCB0byB3YWl0IGZvciBhbnkgY29tbWl0XG41ODQ2Olx0XHQgKiAoYW5kIHdlIGV2ZW4gc2hvdWxkIG5vdCBhcyBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKCkgbWF5XG41ODQ3Olx0XHQgKiBzdHJpcCBhbGwgYnVmZmVycyBmcm9tIHRoZSBmb2xpbyBidXQga2VlcCB0aGUgZm9saW8gZGlydHkgd2hpY2ggY2FuIHRoZW5cbjU4NDg6XHRcdCAqIGNvbmZ1c2UgZS5nLiBjb25jdXJyZW50IGV4dDRfd3JpdGVwYWdlcygpIHNlZWluZyBkaXJ0eSBmb2xpbyB3aXRob3V0XG41ODQ5Olx0XHQgKiBidWZmZXJzKS4gQWxzbyB3ZSBkb24mIzM5O3QgbmVlZCB0byB3YWl0IGZvciBhbnkgY29tbWl0IGlmIGFsbCBidWZmZXJzIGluXG41ODUwOlx0XHQgKiB0aGUgZm9saW8gcmVtYWluIHZhbGlkLiBUaGlzIGlzIG1vc3QgYmVuZWZpY2lhbCBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mXG41ODUxOlx0XHQgKiBibG9ja3NpemUgPT0gUEFHRVNJWkUuXG41ODUyOlx0XHQgKi9cbjU4NTM6XHRcdGlmICghb2Zmc2V0IHx8IG9mZnNldCBcdTAwM2UgKFBBR0VfU0laRSAtIGlfYmxvY2tzaXplKGlub2RlKSkpXG41ODU0Olx0XHRcdHJldHVybjtcbjU4NTU6XHRcdHdoaWxlICgxKSB7XG41ODU2Olx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8oaW5vZGUtXHUwMDNlaV9tYXBwaW5nLFxuNTg1NzpcdFx0XHRcdFx0ICAgICAgaW5vZGUtXHUwMDNlaV9zaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbjU4NTg6XHRcdFx0aWYgKElTX0VSUihmb2xpbykpXG41ODU5Olx0XHRcdFx0cmV0dXJuO1xuNTg2MDpcdFx0XHRyZXQgPSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsXG41ODYxOlx0XHRcdFx0XHRcdFx0Zm9saW9fc2l6ZShmb2xpbykgLSBvZmZzZXQpO1xuNTg2MjpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuNTg2MzpcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuNTg2NDpcdFx0XHRpZiAocmV0ICE9IC1FQlVTWSlcbjU4NjU6XHRcdFx0XHRyZXR1cm47XG41ODY2Olx0XHRcdGhhc190cmFuc2FjdGlvbiA9IGZhbHNlO1xuNTg2NzpcdFx0XHRyZWFkX2xvY2soXHUwMDI2am91cm5hbC1cdTAwM2VqX3N0YXRlX2xvY2spO1xuNTg2ODpcdFx0XHRpZiAoam91cm5hbC1cdTAwM2VqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24pIHtcbjU4Njk6XHRcdFx0XHRjb21taXRfdGlkID0gam91cm5hbC1cdTAwM2VqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24tXHUwMDNldF90aWQ7XG41ODcwOlx0XHRcdFx0aGFzX3RyYW5zYWN0aW9uID0gdHJ1ZTtcbjU4NzE6XHRcdFx0fVxuNTg3MjpcdFx0XHRyZWFkX3VubG9jayhcdTAwMjZqb3VybmFsLVx1MDAzZWpfc3RhdGVfbG9jayk7XG41ODczOlx0XHRcdGlmIChoYXNfdHJhbnNhY3Rpb24pXG41ODc0Olx0XHRcdFx0amJkMl9sb2dfd2FpdF9jb21taXQoam91cm5hbCwgY29tbWl0X3RpZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTcxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogODI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbGx5IFJpc2t5IGV4dDQgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGludHVpdGlvbiBraWNrcyBpbi4gVGhpcyBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIGZ1bmN0aW9uIGp1c3QgZ290IGEgc2lnbmlmaWNhbnQgbG9naWMgY2hhbmdlLiBQcmV2aW91c2x5LCBpZiBgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgZmFpbGVkLCBpdCBzaW1wbHkgdHJpZ2dlcmVkIGEgYFdBUk5fT05gLiBOb3csIGl0JiMzOTtzIGEgbG9vcCB3aXRoIHJldHJpZXMhIFNwZWNpZmljYWxseSwgaXQgY2hlY2tzIGZvciBgLUVCVVNZYCBhbmQsIGlmIGl0IGdldHMgdGhhdCwgaXQgZ3JhYnMgdGhlIGBqb3VybmFsLSZndDtqX3N0YXRlX2xvY2tgLCBjaGVja3MgaWYgdGhlcmUmIzM5O3MgYW4gb25nb2luZyBjb21taXQgKGBqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb25gKSwgYW5kIHRoZW4gKndhaXRzKiBmb3IgdGhhdCBjb21taXQgdXNpbmcgYGpiZDJfbG9nX3dhaXRfY29tbWl0YC4KClRoZSB0aGluZyB0aGF0IGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhdCBtZSBpcywgJiMzNDtXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZD8mIzM0OyBJIGtub3cgdGhpcyBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoaW4gZm9saW8gaW52YWxpZGF0aW9uIHBhdGhzLiBUaGluayB0cnVuY2F0ZSwgaG9sZSBwdW5jaGluZywgYGludmFsaWRhdGVfbWFwcGluZ19wYWdlc2AsIGBmaWxlbWFwX2ludmFsaWRhdGVfZm9saW9gIOKAkyBhbGwgdGhlIHVzdWFsIHN1c3BlY3RzLiBBbmQsIGNydWNpYWxseSwgaXQmIzM5O3Mgb2Z0ZW4gY2FsbGVkIHdoaWxlICpob2xkaW5nKiBmb2xpbyBsb2NrcyBvciBvdGhlciByZWxldmFudCBsb2Nrcy4gVGhpcyBoYXMgbXkgYWxhcm0gYmVsbHMgcmluZ2luZy4gVGhpcyBuZXcgcmV0cnkgbG9vcCAqaW5zaWRlKiB0aGlzIGNvbnRleHQuLi4gQ291bGQgdGhpcyBjYXVzZSBhIGxvY2sgaW52ZXJzaW9uIG9yIGV2ZW4gYSBkZWFkbG9jayB3aXRoIHRoZSBgamJkMmAgY29tbWl0IHByb2Nlc3M/IE9yIGlmIHRoZXJlIGlzIG5vIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24sIGlzIHRoaXMgYW4gaW5maW5pdGUgYnVzeSBsb29wPyBJdCBpcy4KCkkga25vdyB0aGUgc3lzdGVtIGhhcyBnb29kIGZ1enppbmcgY2FwYWJpbGl0aWVzLCBlc3BlY2lhbGx5IHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkgd29uZGVyIGlmIHRoaXMgY29kZSBjaGFuZ2UgaXMgZXZlbiB3b3J0aCBmdXp6aW5nPwoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gUmVhY2hhYmlsaXR5PyBleHQ0IGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHRoZSBzdGFuZGFyZCBlbnZpcm9ubWVudHMuIENvcmUgc3Vic3lzdGVtPyBJdCYjMzk7cyBWRlMvZXh0NCwgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSBmaWxlc3lzdGVtLiBSZWZhY3RvcmluZy9Mb2dpYyBjaGFuZ2VzPyBJdCBpcyBpbnRyb2R1Y2luZyBhIHJldHJ5IGxvb3Agd2l0aCBsb2NraW5nIGFuZCB3YWl0aW5nLiBXb3J0aCBmdXp6aW5nOiB5ZXMsIGl0IHNlZW1zIHdvcnRod2hpbGUuCgpOb3csIHdoaWNoIHN5bWJvbHMgZG8gSSBuZWVkIHRvIGZvY3VzIG9uIGR1cmluZyBmdXp6aW5nPyBPYnZpb3VzbHksIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIGFuZCBgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AuIEJ1dCBJIG5lZWQgdG8gbG9vayBhdCB3aGF0IGNhbGxzIHRoZW0uIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgY2FsbGVkIHZpYSBgYW9wcy0mZ3Q7aW52YWxpZGF0ZV9mb2xpb2AuIExldCYjMzk7cyBjaGVjayBgZXh0NF93YWl0X2Zvcl90YWlsX3BhZ2VfY29tbWl0YCBhcyB3ZWxsLiBUaGUgcHJpbWFyeSBmb2N1cyBpcyBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gLiBJdCBhcHBlYXJzIHRvIGJlIG5vbi1pbmxpbmVkIGJlY2F1c2UgaXQgaXMgc3RvcmVkIGluIHRoZSBgZXh0NF9qb3VybmFsbGVkX2FvcHNgIHN0cnVjdC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZnVuY3Rpb25zIGluIGV4dDQgaW50ZXJhY3Rpbmcgd2l0aCBqb3VybmFsbGVkIGludmFsaWRhdGUgb3IgZGF0YSBqb3VybmFsaW5nIHRydW5jYXRlLiBJJiMzOTtsbCBuZWVkIHRvIGdyZXBwZXIgZm9yIGBleHQ0X2pvdXJuYWxsZWRfYW9wc2AgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2pvdXJuYWxsZWRfYW9wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9pbm9kZS5jPTM5Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXh0NF9hb3BzID0ge1xuLS1cbmZzL2V4dDQvaW5vZGUuYy0zOTg0LVxuZnMvZXh0NC9pbm9kZS5jOjM5ODU6c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXh0NF9qb3VybmFsbGVkX2FvcHMgPSB7XG5mcy9leHQ0L2lub2RlLmMtMzk4Ni1cdC5yZWFkX2ZvbGlvXHRcdD0gZXh0NF9yZWFkX2ZvbGlvLFxuLS1cbmZzL2V4dDQvaW5vZGUuYz00MDI0PXZvaWQgZXh0NF9zZXRfYW9wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy00MDMwLVx0Y2FzZSBFWFQ0X0lOT0RFX0pPVVJOQUxfREFUQV9NT0RFOlxuZnMvZXh0NC9pbm9kZS5jOjQwMzE6XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmV4dDRfam91cm5hbGxlZF9hb3BzO1xuZnMvZXh0NC9pbm9kZS5jLTQwMzItXHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NDcKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogNTg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IEludmFsaWRhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRvdWNoaW5nIGBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AsIHNwZWNpZmljYWxseSBpbiBgZnMvZXh0NC9pbm9kZS5jYC4gVGhhdCYjMzk7cyBteSBtYWluIGZvY3VzIOKAkyBteSAmIzM0O0ZvY3VzU3ltYm9sLCYjMzQ7IGFjdHVhbGx5LiBUaGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhpcyBmdW5jdGlvbiB0byBpbmNsdWRlIGEgcmV0cnkgbG9vcCB0aGF0IHdhaXRzIGZvciBKQkQyIHRyYW5zYWN0aW9ucyB0byBjb21taXQgd2hlbiBpdCByZWNlaXZlcyBhbiBgLUVCVVNZYCBlcnJvciBmcm9tIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYC4gRXZlbiBpZiBgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgaXMgaW5saW5lZCwgaXQmIzM5O3Mgc2FmZSBhbmQgaGVscGZ1bCB0byBsaXN0IGJvdGggc3ltYm9scy4gSSYjMzk7dmUgYWxzbyB2ZXJpZmllZCB0aGF0IGBqYmQyX2pvdXJuYWxfaW52YWxpZGF0ZV9mb2xpb2AgaXNuJiMzOTt0IG1vZGlmaWVkLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBDbGVhcmx5LCBgQ09ORklHX0VYVDRfRlNgIGlzIGEgbXVzdC1oYXZlOyB3aXRob3V0IGl0LCB0aGUgd2hvbGUgZXh0NCBmaWxlc3lzdGVtIGlzbiYjMzk7dCBldmVuIGNvbXBpbGVkLiBJIGNoZWNrZWQgdGhlIGBmcy9leHQ0L0tjb25maWdgIGZpbGUgYW5kIGNvbmZpcm1lZCB0aGF0IGBFWFQ0X0ZTYCBkb2VzbiYjMzk7dCBkZXBlbmQgb24gYW55dGhpbmcgZWxzZS4gVGhhdCYjMzk7cyBnb29kLgoKU28sIGluIHN1bW1hcnk6CgoqICAgKipXb3J0aEZ1enppbmc6KiogWWVzLCBhYnNvbHV0ZWx5LiBUaGlzIG1vZGlmaWNhdGlvbiBzZWVtcyBsaWtlIGl0IGludHJvZHVjZXMgY29tcGxleGl0eSByZWxhdGVkIHRvIHdhaXRpbmcgZm9yIHRyYW5zYWN0aW9ucywgd2hpY2ggcmFpc2VzIGNvbmNlcm5zIGFib3V0IHBvdGVudGlhbCBpc3N1ZXMuCiogICAqKkZvY3VzU3ltYm9sczoqKiBJJiMzOTt2ZSBpZGVudGlmaWVkIGBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgYW5kIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCBhcyB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIHBheSBhdHRlbnRpb24gdG8uCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYENPTkZJR19FWFQ0X0ZTYCBpcyB0aGUgb25seSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0JiMzOTtzIHRydWx5IGVzc2VudGlhbCBoZXJlLgoqICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoJiMzOTtzIGNoYW5nZSBpbnZvbHZlcyBhIHJldHJ5IGxvb3AuIEkmIzM5O20gY29uY2VybmVkIGFib3V0IHBvdGVudGlhbCBkZWFkbG9ja3MsIGxvY2sgaW52ZXJzaW9ucywgb3IgaW5maW5pdGUgYnVzeS1sb29wcyBpZiBgaGFzX3RyYW5zYWN0aW9uYCByZW1haW5zIGZhbHNlLiBUaGlzIGlzIGEgY2xhc3NpYyBjYXNlIHdoZXJlIGZ1enppbmcgaXMgd2FycmFudGVkIHRvIHVuY292ZXIgc3VidGxlIGNvbmN1cnJlbmN5IHByb2JsZW1zIHJlbGF0ZWQgdG8gdGhlIGpvdXJuYWwgYW5kIGZvbGlvIGludmFsaWRhdGlvbi4gSSYjMzk7bSByZWFkeSB0byBtb3ZlIGZvcndhcmQuIFRpbWUgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8mIzM0OywKICAgICYjMzQ7X19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyBpbiBmcy9leHQ0L2lub2RlLmMsIHJlcGxhY2luZyBhbiBhc3NlcnRpb24gd2l0aCBhIHJldHJ5IGxvb3AgdGhhdCBzeW5jaHJvbml6ZXMgd2l0aCBKQkQyIHRyYW5zYWN0aW9ucyB3aGVuIF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8gcmV0dXJucyAtRUJVU1kuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGZvbGlvIGludmFsaWRhdGlvbiBvcGVyYXRpb25zIChzdWNoIGFzIHRydW5jYXRlIG9yIGhvbGUgcHVuY2hpbmcpIG9uIGV4dDQgaW5vZGVzIHdpdGggZGF0YSBqb3VybmFsbGluZyBlbmFibGVkLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uLCBkZWFkbG9ja3MsIG9yIGluZmluaXRlIGxvb3BzIGlmIGEgdHJhbnNhY3Rpb24gY29tbWl0IGlzIHBlbmRpbmcgb3IgbWlzc2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvJiMzNDssCiAgICAmIzM0O19fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8gaW4gZnMvZXh0NC9pbm9kZS5jLCByZXBsYWNpbmcgYW4gYXNzZXJ0aW9uIHdpdGggYSByZXRyeSBsb29wIHRoYXQgc3luY2hyb25pemVzIHdpdGggSkJEMiB0cmFuc2FjdGlvbnMgd2hlbiBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvIHJldHVybnMgLUVCVVNZLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGR1cmluZyBmb2xpbyBpbnZhbGlkYXRpb24gb3BlcmF0aW9ucyAoc3VjaCBhcyB0cnVuY2F0ZSBvciBob2xlIHB1bmNoaW5nKSBvbiBleHQ0IGlub2RlcyB3aXRoIGRhdGEgam91cm5hbGxpbmcgZW5hYmxlZC4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgcG90ZW50aWFsIGxvY2sgY29udGVudGlvbiwgZGVhZGxvY2tzLCBvciBpbmZpbml0ZSBsb29wcyBpZiBhIHRyYW5zYWN0aW9uIGNvbW1pdCBpcyBwZW5kaW5nIG9yIG1pc3NpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAyOjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDI6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKCkgdG8gaGFuZGxlIC1FQlVTWSByZXR1cm5zIGZyb20gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIGJ5IHdhaXRpbmcgZm9yIHRoZSBjb21taXR0aW5nIHRyYW5zYWN0aW9uIHZpYSBqYmQyX2xvZ193YWl0X2NvbW1pdCgpIGluIGEgbG9vcC5cblxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGluIHRoZSBwYXRjaCAocmV0LCBoYXNfdHJhbnNhY3Rpb24sIGNvbW1pdF90aWQpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlOiBoYXNfdHJhbnNhY3Rpb24gaXMgZXhwbGljaXRseSBzZXQgdG8gZmFsc2UsIGFuZCBjb21taXRfdGlkIGlzIG9ubHkgcmVhZCB3aGVuIGhhc190cmFuc2FjdGlvbiBpcyB0cnVlICh3aGVyZSBpdCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgYmVlbiBzZXQpLiBObyBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBjb3BpZXMsIHBhZGRpbmcsIG9yIHVzZXItc3BhY2UgdHJhbnNmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgY29uY3VycmVuY3ksIGRlYWRsb2NrLCBvciBsaXZlbG9jayByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxvb3Agb3Igd2FpdGluZyBvbiB0cmFuc2FjdGlvbnMgYXJlIHdpdGhpbiB0aGUgZG9tYWluIG9mIExPQ0tERVAgYW5kIGhhbmcvd2F0Y2hkb2cgZGV0ZWN0b3JzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MzhkOGUzNTJmZTgwZTUyMWE3YWU0ZDdiNjlkOTY3Yzk5ZDE2NzVlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMDI6NDg6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggYzJjMmQ2YWM3ZjNkMS4uNmJiOTRhZmQ1MTAwNiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtMzQyOSw3ICYjNDM7MzQyOSwyNyBAQCBzdGF0aWMgdm9pZCBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQkJCQkgICBzaXplX3Qgb2Zmc2V0LAogCQkJCQkgICBzaXplX3QgbGVuZ3RoKQogewotCVdBUk5fT04oX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LCBsZW5ndGgpICZsdDsgMCk7CiYjNDM7CXRpZF90IGNvbW1pdF90aWQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CWJvb2wgaGFzX3RyYW5zYWN0aW9uOwomIzQzOwlqb3VybmFsX3QgKmpvdXJuYWwgPSBFWFQ0X0pPVVJOQUwoZm9saW8tJmd0O21hcHBpbmctJmd0O2hvc3QpOwomIzQzOwomIzQzOwl3aGlsZSAoMSkgewomIzQzOwkJcmV0ID0gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LCBsZW5ndGgpOwomIzQzOwkJaWYgKHJldCAhPSAtRUJVU1kpIHsKJiM0MzsJCQlXQVJOX09OKHJldCAmbHQ7IDApOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsJCWhhc190cmFuc2FjdGlvbiA9IGZhbHNlOwomIzQzOwkJcmVhZF9sb2NrKCZhbXA7am91cm5hbC0mZ3Q7al9zdGF0ZV9sb2NrKTsKJiM0MzsJCWlmIChqb3VybmFsLSZndDtqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24pIHsKJiM0MzsJCQljb21taXRfdGlkID0gam91cm5hbC0mZ3Q7al9jb21taXR0aW5nX3RyYW5zYWN0aW9uLSZndDt0X3RpZDsKJiM0MzsJCQloYXNfdHJhbnNhY3Rpb24gPSB0cnVlOwomIzQzOwkJfQomIzQzOwkJcmVhZF91bmxvY2soJmFtcDtqb3VybmFsLSZndDtqX3N0YXRlX2xvY2spOwomIzQzOwkJaWYgKGhhc190cmFuc2FjdGlvbikKJiM0MzsJCQlqYmQyX2xvZ193YWl0X2NvbW1pdChqb3VybmFsLCBjb21taXRfdGlkKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgYm9vbCBleHQ0X3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3Qgd2FpdCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAyOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIGV4dDQgSW5vZGUgQ2FjaGUgSW52YWxpZGF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoZSBwYXRjaCBJJiMzOTttIGxvb2tpbmcgYXQgZm9jdXNlcyBvbiBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIHdpdGhpbiBgZnMvZXh0NC9pbm9kZS5jYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoYXQgZnVuY3Rpb24gYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIHRoYXQgZmlsZSwgcGFydGljdWxhcmx5IGFyb3VuZCBsaW5lIDM0MjksIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBiZWluZyBtb2RpZmllZCBhbmQgd2h5LiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIG9uIHRoZSBqb3VybmFsaW5nIHByb2Nlc3MgYW5kIGlub2RlIGhhbmRsaW5nIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDI6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM0MTU6XHRcbjM0MTY6XHRcdHRyYWNlX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG4zNDE3Olx0XG4zNDE4Olx0XHQvKlxuMzQxOTpcdFx0ICogSWYgaXQmIzM5O3MgYSBmdWxsIHRydW5jYXRlIHdlIGp1c3QgZm9yZ2V0IGFib3V0IHRoZSBwZW5kaW5nIGRpcnR5aW5nXG4zNDIwOlx0XHQgKi9cbjM0MjE6XHRcdGlmIChvZmZzZXQgPT0gMCBcdTAwMjZcdTAwMjYgbGVuZ3RoID09IGZvbGlvX3NpemUoZm9saW8pKVxuMzQyMjpcdFx0XHRmb2xpb19jbGVhcl9jaGVja2VkKGZvbGlvKTtcbjM0MjM6XHRcbjM0MjQ6XHRcdHJldHVybiBqYmQyX2pvdXJuYWxfaW52YWxpZGF0ZV9mb2xpbyhqb3VybmFsLCBmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xuMzQyNTpcdH1cbjM0MjY6XHRcbjM0Mjc6XHQvKiBXcmFwcGVyIGZvciBhb3BzLi4uICovXG4zNDI4Olx0c3RhdGljIHZvaWQgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbjM0Mjk6XHRcdFx0XHRcdFx0ICAgc2l6ZV90IG9mZnNldCxcbjM0MzA6XHRcdFx0XHRcdFx0ICAgc2l6ZV90IGxlbmd0aClcbjM0MzE6XHR7XG4zNDMyOlx0XHR0aWRfdCBjb21taXRfdGlkO1xuMzQzMzpcdFx0aW50IHJldDtcbjM0MzQ6XHRcdGJvb2wgaGFzX3RyYW5zYWN0aW9uO1xuMzQzNTpcdFx0am91cm5hbF90ICpqb3VybmFsID0gRVhUNF9KT1VSTkFMKGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdCk7XG4zNDM2Olx0XG4zNDM3Olx0XHR3aGlsZSAoMSkge1xuMzQzODpcdFx0XHRyZXQgPSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG4zNDM5Olx0XHRcdGlmIChyZXQgIT0gLUVCVVNZKSB7XG4zNDQwOlx0XHRcdFx0V0FSTl9PTihyZXQgXHUwMDNjIDApO1xuMzQ0MTpcdFx0XHRcdHJldHVybjtcbjM0NDI6XHRcdFx0fVxuMzQ0MzpcdFx0XHRoYXNfdHJhbnNhY3Rpb24gPSBmYWxzZTtcbjM0NDQ6XHRcdFx0cmVhZF9sb2NrKFx1MDAyNmpvdXJuYWwtXHUwMDNlal9zdGF0ZV9sb2NrKTtcbjM0NDU6XHRcdFx0aWYgKGpvdXJuYWwtXHUwMDNlal9jb21taXR0aW5nX3RyYW5zYWN0aW9uKSB7XG4zNDQ2Olx0XHRcdFx0Y29tbWl0X3RpZCA9IGpvdXJuYWwtXHUwMDNlal9jb21taXR0aW5nX3RyYW5zYWN0aW9uLVx1MDAzZXRfdGlkO1xuMzQ0NzpcdFx0XHRcdGhhc190cmFuc2FjdGlvbiA9IHRydWU7XG4zNDQ4Olx0XHRcdH1cbjM0NDk6XHRcdFx0cmVhZF91bmxvY2soXHUwMDI2am91cm5hbC1cdTAwM2VqX3N0YXRlX2xvY2spO1xuMzQ1MDpcdFx0XHRpZiAoaGFzX3RyYW5zYWN0aW9uKVxuMzQ1MTpcdFx0XHRcdGpiZDJfbG9nX3dhaXRfY29tbWl0KGpvdXJuYWwsIGNvbW1pdF90aWQpO1xuMzQ1MjpcdFx0fVxuMzQ1MzpcdH1cbjM0NTQ6XHRcbjM0NTU6XHRzdGF0aWMgYm9vbCBleHQ0X3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3Qgd2FpdClcbjM0NTY6XHR7XG4zNDU3Olx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0O1xuMzQ1ODpcdFx0am91cm5hbF90ICpqb3VybmFsID0gRVhUNF9KT1VSTkFMKGlub2RlKTtcbjM0NTk6XHRcbjM0NjA6XHRcdHRyYWNlX2V4dDRfcmVsZWFzZV9mb2xpbyhpbm9kZSwgZm9saW8pO1xuMzQ2MTpcdFxuMzQ2MjpcdFx0LyogUGFnZSBoYXMgZGlydHkgam91cm5hbGxlZCBkYXRhIC1cdTAwM2UgY2Fubm90IHJlbGVhc2UgKi9cbjM0NjM6XHRcdGlmIChmb2xpb190ZXN0X2NoZWNrZWQoZm9saW8pKVxuMzQ2NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAyOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZ1bmN0aW9uIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYC4gTGV0JiMzOTtzIGRpZyBiYWNrIGludG8gdGhlIHNvdXJjZSBjb2RlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkganVtcCB0byBsaW5lcyAzNDAwIHRocm91Z2ggMzQyNS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciBzaG91bGQgYmUuIE5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB3aGF0IHdhcyBnb2luZyBvbiByaWdodCBiZWZvcmUgdGhpcyBmdW5jdGlvbi4gRmlndXJlIG91dCB0aGUgc3RhdGUgb2YgdGhpbmdzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBzZWN0aW9uIGlzIHRlbGxpbmcgdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDAwOlx0c3RhdGljIHZvaWQgZXh0NF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG4zNDAxOlx0XHRcdFx0XHRzaXplX3QgbGVuZ3RoKVxuMzQwMjpcdHtcbjM0MDM6XHRcdHRyYWNlX2V4dDRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xuMzQwNDpcdFxuMzQwNTpcdFx0LyogTm8gam91cm5hbGxpbmcgaGFwcGVucyBvbiBkYXRhIGJ1ZmZlcnMgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgKi9cbjM0MDY6XHRcdFdBUk5fT04oZm9saW9fYnVmZmVycyhmb2xpbykgXHUwMDI2XHUwMDI2IGJ1ZmZlcl9qYmQoZm9saW9fYnVmZmVycyhmb2xpbykpKTtcbjM0MDc6XHRcbjM0MDg6XHRcdGJsb2NrX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcbjM0MDk6XHR9XG4zNDEwOlx0XG4zNDExOlx0c3RhdGljIGludCBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4zNDEyOlx0XHRcdFx0XHRcdCAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKVxuMzQxMzpcdHtcbjM0MTQ6XHRcdGpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfSk9VUk5BTChmb2xpby1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3QpO1xuMzQxNTpcdFxuMzQxNjpcdFx0dHJhY2VfZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcbjM0MTc6XHRcbjM0MTg6XHRcdC8qXG4zNDE5Olx0XHQgKiBJZiBpdCYjMzk7cyBhIGZ1bGwgdHJ1bmNhdGUgd2UganVzdCBmb3JnZXQgYWJvdXQgdGhlIHBlbmRpbmcgZGlydHlpbmdcbjM0MjA6XHRcdCAqL1xuMzQyMTpcdFx0aWYgKG9mZnNldCA9PSAwIFx1MDAyNlx1MDAyNiBsZW5ndGggPT0gZm9saW9fc2l6ZShmb2xpbykpXG4zNDIyOlx0XHRcdGZvbGlvX2NsZWFyX2NoZWNrZWQoZm9saW8pO1xuMzQyMzpcdFxuMzQyNDpcdFx0cmV0dXJuIGpiZDJfam91cm5hbF9pbnZhbGlkYXRlX2ZvbGlvKGpvdXJuYWwsIGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG4zNDI1Olx0fVxuMzQyNjpcdFxuMzQyNzpcdC8qIFdyYXBwZXIgZm9yIGFvcHMuLi4gKi9cbjM0Mjg6XHRzdGF0aWMgdm9pZCBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuMzQyOTpcdFx0XHRcdFx0XHQgICBzaXplX3Qgb2Zmc2V0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTMwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29kZSBNb2RpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIG9yaWdpbmFsIGNvZGUgbG9va2VkIGxpa2UgKmJlZm9yZSogdGhpcyBwYXRjaCB3YXMgYXBwbGllZC4gVGhlIGRpZmYgc2hvd3MgYSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gdGhlIGBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgZnVuY3Rpb24gaW4gYGZzL2V4dDQvaW5vZGUuY2AuIFRoZSBjb3JlIG1vZGlmaWNhdGlvbiBzZWVtcyB0byBpbnZvbHZlIGhhbmRsaW5nIGEgYC1FQlVTWWAgZXJyb3IgcmV0dXJuIGZyb20gYF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gLgoKRXNzZW50aWFsbHksIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIHNpbXBsZSBgV0FSTl9PTmAgY2hlY2suIE5vdywgdGhlcmUmIzM5O3MgYSBsb29wIHdpdGggYSByZXRyeSBtZWNoYW5pc20uIEl0IGFwcGVhcnMgdGhhdCBpZiBgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgcmV0dXJucyBgLUVCVVNZYCwgd2hpY2ggcHJvYmFibHkgbWVhbnMgdGhlIGpvdXJuYWwgaXMgYnVzeSwgdGhlIGNvZGUgbm93IHdhaXRzLiBJIGNhbiBzZWUgdGhhdCBpdCYjMzk7cyBjaGVja2luZyBmb3IgYSBjb21taXR0aW5nIHRyYW5zYWN0aW9uIHVzaW5nIGBqYmQyX2xvZ193YWl0X2NvbW1pdGAgYW5kIHJldHJ5aW5nLiBUaGlzIGluZGljYXRlcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSByYWNlIGNvbmRpdGlvbiBvciBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgam91cm5hbCBpcyB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZS4KClRvIGZ1bGx5IGdyYXNwIHRoZSBjb250ZXh0IGFuZCBtb3RpdmF0aW9uIGJlaGluZCB0aGlzIGNoYW5nZSwgSSYjMzk7bGwgbmVlZCBtb3JlIGluZm9ybWF0aW9uLiBJJiMzOTtsbCBjaGVjayB0aGUgY29tbWl0IGhpc3RvcnkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbW9kaWZpY2F0aW9uLiBJJiMzOTtsbCBleGVjdXRlIGEgYGdpdCBsb2dgIG9uIHRoZSBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIGZ1bmN0aW9uIHRvIHNlZSB0aGUgY29tbWl0IG1lc3NhZ2VzLiBIb3BlZnVsbHksIHRoYXQgc2hvdWxkIGdpdmUgbWUgaW5zaWdodCBpbnRvIHdoYXQgcHJvYmxlbSB0aGlzIHBhdGNoIGlzIGZpeGluZy4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gam91cm5hbCBjb250ZW50aW9uIG9yIGEgc2ltaWxhciBjb25jdXJyZW5jeSBpc3N1ZSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gTWF5YmUgaXQmIzM5O3MgYSBkZWFkbG9jay4gSSYjMzk7bGwgYWxzbyB0cnkgYSBicm9hZGVyIHNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5vZGUuYz0zNDAwPXN0YXRpYyB2b2lkIGV4dDRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxuLS1cbmZzL2V4dDQvaW5vZGUuYy0zNDEwLVxuZnMvZXh0NC9pbm9kZS5jOjM0MTE6c3RhdGljIGludCBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5mcy9leHQ0L2lub2RlLmMtMzQxMi1cdFx0XHRcdFx0ICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTM0MTUtXG5mcy9leHQ0L2lub2RlLmM6MzQxNjpcdHRyYWNlX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG5mcy9leHQ0L2lub2RlLmMtMzQxNy1cbi0tXG5mcy9leHQ0L2lub2RlLmMtMzQyNy0vKiBXcmFwcGVyIGZvciBhb3BzLi4uICovXG5mcy9leHQ0L2lub2RlLmM6MzQyODpzdGF0aWMgdm9pZCBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuZnMvZXh0NC9pbm9kZS5jLTM0MjktXHRcdFx0XHRcdCAgIHNpemVfdCBvZmZzZXQsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTM0MzctXHR3aGlsZSAoMSkge1xuZnMvZXh0NC9pbm9kZS5jOjM0Mzg6XHRcdHJldCA9IF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcbmZzL2V4dDQvaW5vZGUuYy0zNDM5LVx0XHRpZiAocmV0ICE9IC1FQlVTWSkge1xuLS1cbmZzL2V4dDQvaW5vZGUuYz0zOTg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGV4dDRfam91cm5hbGxlZF9hb3BzID0ge1xuLS1cbmZzL2V4dDQvaW5vZGUuYy0zOTkyLVx0LmJtYXBcdFx0XHQ9IGV4dDRfYm1hcCxcbmZzL2V4dDQvaW5vZGUuYzozOTkzOlx0LmludmFsaWRhdGVfZm9saW9cdD0gZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8sXG5mcy9leHQ0L2lub2RlLmMtMzk5NC1cdC5yZWxlYXNlX2ZvbGlvXHRcdD0gZXh0NF9yZWxlYXNlX2ZvbGlvLFxuLS1cbmZzL2V4dDQvaW5vZGUuYz01NzgwPWludCBleHQ0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy01ODMwLS8qXG5mcy9leHQ0L2lub2RlLmM6NTgzMTogKiBJbiBkYXRhPWpvdXJuYWwgbW9kZSBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIG1heSBmYWlsIHRvIGludmFsaWRhdGVcbmZzL2V4dDQvaW5vZGUuYy01ODMyLSAqIGJ1ZmZlcnMgdGhhdCBhcmUgYXR0YWNoZWQgdG8gYSBmb2xpbyBzdHJhZGRsaW5nIGlfc2l6ZSBhbmQgYXJlIHVuZGVyZ29pbmdcbi0tXG5mcy9leHQ0L2lub2RlLmM9NTgzNT1zdGF0aWMgdm9pZCBleHQ0X3dhaXRfZm9yX3RhaWxfcGFnZV9jb21taXQoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTg0NS1cdCAqIElmIHRoZSBmb2xpbyBpcyBmdWxseSB0cnVuY2F0ZWQsIHdlIGRvbiYjMzk7dCBuZWVkIHRvIHdhaXQgZm9yIGFueSBjb21taXRcbmZzL2V4dDQvaW5vZGUuYzo1ODQ2Olx0ICogKGFuZCB3ZSBldmVuIHNob3VsZCBub3QgYXMgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIG1heVxuZnMvZXh0NC9pbm9kZS5jLTU4NDctXHQgKiBzdHJpcCBhbGwgYnVmZmVycyBmcm9tIHRoZSBmb2xpbyBidXQga2VlcCB0aGUgZm9saW8gZGlydHkgd2hpY2ggY2FuIHRoZW5cbi0tXG5mcy9leHQ0L2lub2RlLmMtNTg1OS1cdFx0XHRyZXR1cm47XG5mcy9leHQ0L2lub2RlLmM6NTg2MDpcdFx0cmV0ID0gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LFxuZnMvZXh0NC9pbm9kZS5jLTU4NjEtXHRcdFx0XHRcdFx0Zm9saW9fc2l6ZShmb2xpbykgLSBvZmZzZXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDk3CgkJCQkJCQlvdXRwdXQ6IDIwNAoJCQkJCQkJdGhvdWdodHM6IDk4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50IG9mIGV4dDQgSm91cm5hbGxlZCBGb2xpbyBJbnZhbGlkYXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgaXMgb24gd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgb3IgZXhhY2VyYmF0ZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MsIHRoZSBkb21haW4gb2YgS01TQU4uIFRoZSBjb2RlIGluIHF1ZXN0aW9uIGlzIGZvciBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gLCB3aGljaCBoYW5kbGVzIGZvbGlvIGludmFsaWRhdGlvbiB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSB3aGVuIGluIGBkYXRhPWpvdXJuYWxgIG1vZGUuCgpGaXJzdCwgSSBzZWUgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSBzaW1wbHkgY2FsbHMgYF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIGFuZCBXQVJOcyBvbiBuZWdhdGl2ZSByZXR1cm4gdmFsdWVzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJldHJ5IGxvb3AuIEl0IGNhbGxzIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCwgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgKGByZXRgKS4gSWYgYHJldGAgaXNuJiMzOTt0IGAtRUJVU1lgLCBpdCBoYW5kbGVzIGVycm9ycyBvciByZXR1cm5zLiBJZiBpdCAqaXMqIGAtRUJVU1lgLCBpdCBjaGVja3MgZm9yIGEgY29tbWl0dGluZyB0cmFuc2FjdGlvbiAoYGpvdXJuYWwtJmd0O2pfY29tbWl0dGluZ190cmFuc2FjdGlvbmApLgoKSGVyZSwgSSB6ZXJvIGluIG9uIGBjb21taXRfdGlkYC4gVGhlIGBjb21taXRfdGlkYCB2YXJpYWJsZSBpcyBhIGxvY2FsIHZhcmlhYmxlLCBkZWNsYXJlZCBhcyBgdGlkX3QgY29tbWl0X3RpZDtgLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgY29kZSBleHBsaWNpdGx5IHJlYWRzIGZyb20gYGpvdXJuYWwtJmd0O2pfY29tbWl0dGluZ190cmFuc2FjdGlvbi0mZ3Q7dF90aWRgLCAqb25seSogaWYgYGpvdXJuYWwtJmd0O2pfY29tbWl0dGluZ190cmFuc2FjdGlvbmAgaXMgdmFsaWQsIHNvIGBjb21taXRfdGlkYCBpcyBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkIHdoZW4gdXNlZC4gSXQgdGhlbiB1c2VzIHRoaXMgYGNvbW1pdF90aWRgIHdpdGggYGpiZDJfbG9nX3dhaXRfY29tbWl0KClgLiBJZiBubyB0cmFuc2FjdGlvbiBpcyBjb21taXR0aW5nLCB0aGUgY29kZSBkb2VzbiYjMzk7dCB3YWl0IGFuZCBnb2VzIGJhY2sgdG8gY2FsbGluZyBgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AuCgpOb3csIHRoZSBpbXBvcnRhbnQgY2hlY2sgZm9yIG1lOiBpcyBgY29tbWl0X3RpZGAgb3IgYW55IG90aGVyIHZhcmlhYmxlIHVzZWQgaW4gYSB3YXkgdGhhdCBpbnRyb2R1Y2VzIHRoZSBwb3NzaWJpbGl0eSBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIGxvZ2ljIGluaXRpYWxpemVzIGBjb21taXRfdGlkYCBhbmQgdXNlcyBpdCBvbmx5IGlmIGEgY29tbWl0dGluZyB0cmFuc2FjdGlvbiBpcyBhY3RpdmUuIEl0JiMzOTtzIHRoZSBgaGFzX3RyYW5zYWN0aW9uYCBmbGFnIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIHdhaXQuIElmIGBoYXNfdHJhbnNhY3Rpb25gIGlzIGZhbHNlLCBpdCBtZWFucyBgam91cm5hbC0mZ3Q7al9jb21taXR0aW5nX3RyYW5zYWN0aW9uYCB3YXMgbnVsbCwgYW5kIHRoZSBjb2RlIHJldHJpZXMgd2l0aG91dCB3YWl0aW5nLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBsaXZlbG9jayBvciBpbmZpbml0ZSBsb29wIGlmIGAtRUJVU1lgIHBlcnNpc3RzLCBidXQgdGhhdCYjMzk7cyBub3QgYSBLTVNBTiBpc3N1ZTsgaXQmIzM5O3MgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kvZGVhZGxvY2svbGl2ZWxvY2sgcHJvYmxlbS4KCk5leHQsIEkgc2NhbiBmb3IgdHlwaWNhbCBLTVNBTiBjb25jZXJuczoga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgbGVha2VkIHRvIHVzZXIgc3BhY2UsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0aW9uIG9mIGNvbXBsZXggc3RydWN0dXJlcywgb3IgYW55IG9wZXJhdGlvbnMgb24gYnVmZmVycyB3aGVyZSB1bmluaXRpYWxpemVkIGJ5dGVzIG1pZ2h0IGJlIGFjY2Vzc2VkLiBJIHNlZSBub25lIG9mIHRob3NlIGhlcmUuIE5vIGtlcm5lbCBtZW1vcnkgaXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBubyBidWZmZXJzIGFyZSBiZWluZyBtYW5pcHVsYXRlZCwgYW5kIGFsbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgS01TQU4gcmlza3MuIFRoZSBwb3RlbnRpYWwgaXNzdWVzIGhlcmUgYXJlIHJlbGF0ZWQgdG8gY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbjogZGVhZGxvY2tzLCBsaXZlbG9ja3MsIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhvc2UgYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAsIHdhdGNoZG9nIHRpbWVycywgb3Igc3RhbmRhcmQga2VybmVsIGhhbmcvbG9ja3VwIGRldGVjdG9ycy4gVGhleSBhcmUgbm90IG1lbW9yeSBpbml0aWFsaXphdGlvbiBpc3N1ZXMgd2hpY2ggYXJlIHRoZSBwdXJ2aWV3IG9mIEtNU0FOLgoKSW4gc3VtbWFyeSwgbXkgYW5hbHlzaXMgaW5kaWNhdGVzIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJdCYjMzk7cyBhIGNvbmN1cnJlbmN5LXJlbGF0ZWQgY2hhbmdlLCBidXQgbm90IGEgS01TQU4tcmVsZXZhbnQgb25lLiBUaGUgY29kZSBpbml0aWFsaXplcyBpdHMgdmFyaWFibGVzIHByb3Blcmx5LCB1c2VzIHRoZW0gY29ycmVjdGx5LCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKCkgdG8gaGFuZGxlIC1FQlVTWSByZXR1cm5zIGZyb20gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIGJ5IHdhaXRpbmcgZm9yIHRoZSBjb21taXR0aW5nIHRyYW5zYWN0aW9uIHZpYSBqYmQyX2xvZ193YWl0X2NvbW1pdCgpIGluIGEgbG9vcC5cblxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGluIHRoZSBwYXRjaCAocmV0LCBoYXNfdHJhbnNhY3Rpb24sIGNvbW1pdF90aWQpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlOiBoYXNfdHJhbnNhY3Rpb24gaXMgZXhwbGljaXRseSBzZXQgdG8gZmFsc2UsIGFuZCBjb21taXRfdGlkIGlzIG9ubHkgcmVhZCB3aGVuIGhhc190cmFuc2FjdGlvbiBpcyB0cnVlICh3aGVyZSBpdCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgYmVlbiBzZXQpLiBObyBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBjb3BpZXMsIHBhZGRpbmcsIG9yIHVzZXItc3BhY2UgdHJhbnNmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgY29uY3VycmVuY3ksIGRlYWRsb2NrLCBvciBsaXZlbG9jayByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxvb3Agb3Igd2FpdGluZyBvbiB0cmFuc2FjdGlvbnMgYXJlIHdpdGhpbiB0aGUgZG9tYWluIG9mIExPQ0tERVAgYW5kIGhhbmcvd2F0Y2hkb2cgZGV0ZWN0b3JzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKCkgdG8gaGFuZGxlIC1FQlVTWSByZXR1cm5zIGZyb20gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIGJ5IHdhaXRpbmcgZm9yIHRoZSBjb21taXR0aW5nIHRyYW5zYWN0aW9uIHZpYSBqYmQyX2xvZ193YWl0X2NvbW1pdCgpIGluIGEgbG9vcC5cblxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGluIHRoZSBwYXRjaCAocmV0LCBoYXNfdHJhbnNhY3Rpb24sIGNvbW1pdF90aWQpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlOiBoYXNfdHJhbnNhY3Rpb24gaXMgZXhwbGljaXRseSBzZXQgdG8gZmFsc2UsIGFuZCBjb21taXRfdGlkIGlzIG9ubHkgcmVhZCB3aGVuIGhhc190cmFuc2FjdGlvbiBpcyB0cnVlICh3aGVyZSBpdCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgYmVlbiBzZXQpLiBObyBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBjb3BpZXMsIHBhZGRpbmcsIG9yIHVzZXItc3BhY2UgdHJhbnNmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgY29uY3VycmVuY3ksIGRlYWRsb2NrLCBvciBsaXZlbG9jayByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxvb3Agb3Igd2FpdGluZyBvbiB0cmFuc2FjdGlvbnMgYXJlIHdpdGhpbiB0aGUgZG9tYWluIG9mIExPQ0tERVAgYW5kIGhhbmcvd2F0Y2hkb2cgZGV0ZWN0b3JzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAyOjQ4OjA5LjEwODA3OTY0OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDM3MTA1MjQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9cIixcbiAgICBcIl9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oKSB0byBoYW5kbGUgLUVCVVNZIHJldHVybnMgZnJvbSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKCkgYnkgd2FpdGluZyBmb3IgdGhlIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24gdmlhIGpiZDJfbG9nX3dhaXRfY29tbWl0KCkgaW4gYSBsb29wLlxcblxcbkFsbCBsb2NhbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBpbiB0aGUgcGF0Y2ggKHJldCwgaGFzX3RyYW5zYWN0aW9uLCBjb21taXRfdGlkKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZTogaGFzX3RyYW5zYWN0aW9uIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlLCBhbmQgY29tbWl0X3RpZCBpcyBvbmx5IHJlYWQgd2hlbiBoYXNfdHJhbnNhY3Rpb24gaXMgdHJ1ZSAod2hlcmUgaXQgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGJlZW4gc2V0KS4gTm8gbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgY29waWVzLCBwYWRkaW5nLCBvciB1c2VyLXNwYWNlIHRyYW5zZmVycyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IGNvbmN1cnJlbmN5LCBkZWFkbG9jaywgb3IgbGl2ZWxvY2sgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBsb29wIG9yIHdhaXRpbmcgb24gdHJhbnNhY3Rpb25zIGFyZSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBMT0NLREVQIGFuZCBoYW5nL3dhdGNoZG9nIGRldGVjdG9ycywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvIGluIGZzL2V4dDQvaW5vZGUuYywgcmVwbGFjaW5nIGFuIGFzc2VydGlvbiB3aXRoIGEgcmV0cnkgbG9vcCB0aGF0IHN5bmNocm9uaXplcyB3aXRoIEpCRDIgdHJhbnNhY3Rpb25zIHdoZW4gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyByZXR1cm5zIC1FQlVTWS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgZm9saW8gaW52YWxpZGF0aW9uIG9wZXJhdGlvbnMgKHN1Y2ggYXMgdHJ1bmNhdGUgb3IgaG9sZSBwdW5jaGluZykgb24gZXh0NCBpbm9kZXMgd2l0aCBkYXRhIGpvdXJuYWxsaW5nIGVuYWJsZWQuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIHBvdGVudGlhbCBsb2NrIGNvbnRlbnRpb24sIGRlYWRsb2Nrcywgb3IgaW5maW5pdGUgbG9vcHMgaWYgYSB0cmFuc2FjdGlvbiBjb21taXQgaXMgcGVuZGluZyBvciBtaXNzaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMjo0ODowOS4xMDgwODQwMTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDU1NTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDkzOGQ4ZTM1MmZlODBlNTIxYTdhZTRkN2I2OWQ5NjdjOTlkMTY3NWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDI6NDg6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXFxuaW5kZXggYzJjMmQ2YWM3ZjNkMS4uNmJiOTRhZmQ1MTAwNiAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcXG4rKysgYi9mcy9leHQ0L2lub2RlLmNcXG5AQCAtMzQyOSw3ICszNDI5LDI3IEBAIHN0YXRpYyB2b2lkIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHNpemVfdCBvZmZzZXQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHNpemVfdCBsZW5ndGgpXFxuIHtcXG4tXFx0V0FSTl9PTihfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCkgXFx1MDAzYyAwKTtcXG4rXFx0dGlkX3QgY29tbWl0X3RpZDtcXG4rXFx0aW50IHJldDtcXG4rXFx0Ym9vbCBoYXNfdHJhbnNhY3Rpb247XFxuK1xcdGpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfSk9VUk5BTChmb2xpby1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuK1xcbitcXHR3aGlsZSAoMSkge1xcbitcXHRcXHRyZXQgPSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XFxuK1xcdFxcdGlmIChyZXQgIT0gLUVCVVNZKSB7XFxuK1xcdFxcdFxcdFdBUk5fT04ocmV0IFxcdTAwM2MgMCk7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXHRcXHRoYXNfdHJhbnNhY3Rpb24gPSBmYWxzZTtcXG4rXFx0XFx0cmVhZF9sb2NrKFxcdTAwMjZqb3VybmFsLVxcdTAwM2VqX3N0YXRlX2xvY2spO1xcbitcXHRcXHRpZiAoam91cm5hbC1cXHUwMDNlal9jb21taXR0aW5nX3RyYW5zYWN0aW9uKSB7XFxuK1xcdFxcdFxcdGNvbW1pdF90aWQgPSBqb3VybmFsLVxcdTAwM2VqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24tXFx1MDAzZXRfdGlkO1xcbitcXHRcXHRcXHRoYXNfdHJhbnNhY3Rpb24gPSB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJlYWRfdW5sb2NrKFxcdTAwMjZqb3VybmFsLVxcdTAwM2VqX3N0YXRlX2xvY2spO1xcbitcXHRcXHRpZiAoaGFzX3RyYW5zYWN0aW9uKVxcbitcXHRcXHRcXHRqYmQyX2xvZ193YWl0X2NvbW1pdChqb3VybmFsLCBjb21taXRfdGlkKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBleHQ0X3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3Qgd2FpdClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NDg6MDkuNjQ5NjExNzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjYwNTU5NzU4NTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb1wiLFxuICAgIFwiX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvIGluIGZzL2V4dDQvaW5vZGUuYywgcmVwbGFjaW5nIGFuIGFzc2VydGlvbiB3aXRoIGEgcmV0cnkgbG9vcCB0aGF0IHN5bmNocm9uaXplcyB3aXRoIEpCRDIgdHJhbnNhY3Rpb25zIHdoZW4gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyByZXR1cm5zIC1FQlVTWS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgZm9saW8gaW52YWxpZGF0aW9uIG9wZXJhdGlvbnMgKHN1Y2ggYXMgdHJ1bmNhdGUgb3IgaG9sZSBwdW5jaGluZykgb24gZXh0NCBpbm9kZXMgd2l0aCBkYXRhIGpvdXJuYWxsaW5nIGVuYWJsZWQuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIHBvdGVudGlhbCBsb2NrIGNvbnRlbnRpb24sIGRlYWRsb2Nrcywgb3IgaW5maW5pdGUgbG9vcHMgaWYgYSB0cmFuc2FjdGlvbiBjb21taXQgaXMgcGVuZGluZyBvciBtaXNzaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDkzOGQ4ZTM1MmZlODBlNTIxYTdhZTRkN2I2OWQ5NjdjOTlkMTY3NWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAwMjo0ODowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xuaW5kZXggYzJjMmQ2YWM3ZjNkMS4uNmJiOTRhZmQ1MTAwNiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtMzQyOSw3ICszNDI5LDI3IEBAIHN0YXRpYyB2b2lkIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0XHRcdCAgIHNpemVfdCBvZmZzZXQsXG4gXHRcdFx0XHRcdCAgIHNpemVfdCBsZW5ndGgpXG4ge1xuLVx0V0FSTl9PTihfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCkgXHUwMDNjIDApO1xuK1x0dGlkX3QgY29tbWl0X3RpZDtcbitcdGludCByZXQ7XG4rXHRib29sIGhhc190cmFuc2FjdGlvbjtcbitcdGpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfSk9VUk5BTChmb2xpby1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3QpO1xuK1xuK1x0d2hpbGUgKDEpIHtcbitcdFx0cmV0ID0gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xuK1x0XHRpZiAocmV0ICE9IC1FQlVTWSkge1xuK1x0XHRcdFdBUk5fT04ocmV0IFx1MDAzYyAwKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbitcdFx0aGFzX3RyYW5zYWN0aW9uID0gZmFsc2U7XG4rXHRcdHJlYWRfbG9jayhcdTAwMjZqb3VybmFsLVx1MDAzZWpfc3RhdGVfbG9jayk7XG4rXHRcdGlmIChqb3VybmFsLVx1MDAzZWpfY29tbWl0dGluZ190cmFuc2FjdGlvbikge1xuK1x0XHRcdGNvbW1pdF90aWQgPSBqb3VybmFsLVx1MDAzZWpfY29tbWl0dGluZ190cmFuc2FjdGlvbi1cdTAwM2V0X3RpZDtcbitcdFx0XHRoYXNfdHJhbnNhY3Rpb24gPSB0cnVlO1xuK1x0XHR9XG4rXHRcdHJlYWRfdW5sb2NrKFx1MDAyNmpvdXJuYWwtXHUwMDNlal9zdGF0ZV9sb2NrKTtcbitcdFx0aWYgKGhhc190cmFuc2FjdGlvbilcbitcdFx0XHRqYmQyX2xvZ193YWl0X2NvbW1pdChqb3VybmFsLCBjb21taXRfdGlkKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIGJvb2wgZXh0NF9yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IHdhaXQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMjo0ODowOS42NDk2MTQxMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0MTkxOTM4MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcGxheWluZyB0aGUgcm9sZSBvZiBhbiBleHBlcnQ6XG5cbioqQW5hbHl6aW5nIHRoZSBFeHQ0IEpvdXJuYWxsZWQgSW52YWxpZGF0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhlIGNoYW5nZSBpcyB0dWNrZWQgYXdheSBpbiBgZnMvZXh0NC9pbm9kZS5jYCwgc3BlY2lmaWNhbGx5IHdpdGggYSBtb2RpZmljYXRpb24gdG8gYGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYC4gUmlnaHQsIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgam91cm5hbC1yZWxhdGVkIGZvbGlvIGhhbmRsaW5nLiBMZXQncyBnZXQgY3JhY2tpbmcuIEknbSBnb2luZyB0byBncmFiIHRoZSBwYXRjaCBhbmQgdGhhdCBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlLiBJ4oCZbGwgcHJvYmFibHkgdXNlIGByZWFkLWZpbGVgIHRvIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZiBmaXJzdCwgZ2V0IGEgZmVlbCBmb3IgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBUaGVuLCBJJ2xsIGRpdmUgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgaW5vZGUuY2Agd2l0aCBzb21ldGhpbmcgbGlrZSBgZ3JlcHBlcmAg4oCTIHRoYXQncyB0aGUgYmVzdCB3YXkgdG8gcmFwaWRseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBtb2RpZmljYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgaW52YWxpZGF0aW9uIGZ1bmN0aW9uIG5lZWRlZCBhZGp1c3RtZW50IOKAkyB3aGF0IHNjZW5hcmlvIGlzIGJlaW5nIGFkZHJlc3NlZD8gSXMgaXQgcmVsYXRlZCB0byBhIHNwZWNpZmljIGJ1ZywgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBvciBuZXcgZmVhdHVyZT8gR290dGEgZ2V0IHRoZSBmdWxsIHBpY3R1cmUgYmVmb3JlIEkgY2FuIGp1ZGdlIGl0cyBxdWFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDgxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMjo0ODozMy44NDE1NTcyMjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzI2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0MTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM0MTU6XFx0XFxuMzQxNjpcXHRcXHR0cmFjZV9leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xcbjM0MTc6XFx0XFxuMzQxODpcXHRcXHQvKlxcbjM0MTk6XFx0XFx0ICogSWYgaXQncyBhIGZ1bGwgdHJ1bmNhdGUgd2UganVzdCBmb3JnZXQgYWJvdXQgdGhlIHBlbmRpbmcgZGlydHlpbmdcXG4zNDIwOlxcdFxcdCAqL1xcbjM0MjE6XFx0XFx0aWYgKG9mZnNldCA9PSAwIFxcdTAwMjZcXHUwMDI2IGxlbmd0aCA9PSBmb2xpb19zaXplKGZvbGlvKSlcXG4zNDIyOlxcdFxcdFxcdGZvbGlvX2NsZWFyX2NoZWNrZWQoZm9saW8pO1xcbjM0MjM6XFx0XFxuMzQyNDpcXHRcXHRyZXR1cm4gamJkMl9qb3VybmFsX2ludmFsaWRhdGVfZm9saW8oam91cm5hbCwgZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcXG4zNDI1OlxcdH1cXG4zNDI2OlxcdFxcbjM0Mjc6XFx0LyogV3JhcHBlciBmb3IgYW9wcy4uLiAqL1xcbjM0Mjg6XFx0c3RhdGljIHZvaWQgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4zNDI5OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHNpemVfdCBvZmZzZXQsXFxuMzQzMDpcXHRcXHRcXHRcXHRcXHRcXHQgICBzaXplX3QgbGVuZ3RoKVxcbjM0MzE6XFx0e1xcbjM0MzI6XFx0XFx0dGlkX3QgY29tbWl0X3RpZDtcXG4zNDMzOlxcdFxcdGludCByZXQ7XFxuMzQzNDpcXHRcXHRib29sIGhhc190cmFuc2FjdGlvbjtcXG4zNDM1OlxcdFxcdGpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfSk9VUk5BTChmb2xpby1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuMzQzNjpcXHRcXG4zNDM3OlxcdFxcdHdoaWxlICgxKSB7XFxuMzQzODpcXHRcXHRcXHRyZXQgPSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XFxuMzQzOTpcXHRcXHRcXHRpZiAocmV0ICE9IC1FQlVTWSkge1xcbjM0NDA6XFx0XFx0XFx0XFx0V0FSTl9PTihyZXQgXFx1MDAzYyAwKTtcXG4zNDQxOlxcdFxcdFxcdFxcdHJldHVybjtcXG4zNDQyOlxcdFxcdFxcdH1cXG4zNDQzOlxcdFxcdFxcdGhhc190cmFuc2FjdGlvbiA9IGZhbHNlO1xcbjM0NDQ6XFx0XFx0XFx0cmVhZF9sb2NrKFxcdTAwMjZqb3VybmFsLVxcdTAwM2VqX3N0YXRlX2xvY2spO1xcbjM0NDU6XFx0XFx0XFx0aWYgKGpvdXJuYWwtXFx1MDAzZWpfY29tbWl0dGluZ190cmFuc2FjdGlvbikge1xcbjM0NDY6XFx0XFx0XFx0XFx0Y29tbWl0X3RpZCA9IGpvdXJuYWwtXFx1MDAzZWpfY29tbWl0dGluZ190cmFuc2FjdGlvbi1cXHUwMDNldF90aWQ7XFxuMzQ0NzpcXHRcXHRcXHRcXHRoYXNfdHJhbnNhY3Rpb24gPSB0cnVlO1xcbjM0NDg6XFx0XFx0XFx0fVxcbjM0NDk6XFx0XFx0XFx0cmVhZF91bmxvY2soXFx1MDAyNmpvdXJuYWwtXFx1MDAzZWpfc3RhdGVfbG9jayk7XFxuMzQ1MDpcXHRcXHRcXHRpZiAoaGFzX3RyYW5zYWN0aW9uKVxcbjM0NTE6XFx0XFx0XFx0XFx0amJkMl9sb2dfd2FpdF9jb21taXQoam91cm5hbCwgY29tbWl0X3RpZCk7XFxuMzQ1MjpcXHRcXHR9XFxuMzQ1MzpcXHR9XFxuMzQ1NDpcXHRcXG4zNDU1OlxcdHN0YXRpYyBib29sIGV4dDRfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCB3YWl0KVxcbjM0NTY6XFx0e1xcbjM0NTc6XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZvbGlvLVxcdTAwM2VtYXBwaW5nLVxcdTAwM2Vob3N0O1xcbjM0NTg6XFx0XFx0am91cm5hbF90ICpqb3VybmFsID0gRVhUNF9KT1VSTkFMKGlub2RlKTtcXG4zNDU5OlxcdFxcbjM0NjA6XFx0XFx0dHJhY2VfZXh0NF9yZWxlYXNlX2ZvbGlvKGlub2RlLCBmb2xpbyk7XFxuMzQ2MTpcXHRcXG4zNDYyOlxcdFxcdC8qIFBhZ2UgaGFzIGRpcnR5IGpvdXJuYWxsZWQgZGF0YSAtXFx1MDAzZSBjYW5ub3QgcmVsZWFzZSAqL1xcbjM0NjM6XFx0XFx0aWYgKGZvbGlvX3Rlc3RfY2hlY2tlZChmb2xpbykpXFxuMzQ2NDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAyOjQ4OjMzLjg0MTg5Mzc5NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQxMDg2NTg4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkgaW4gZXh0NCBEYXRhIEpvdXJuYWxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AuLi4gcmlnaHQsIHRoYXQncyBpbiBgZnMvZXh0NC9pbm9kZS5jYCwgc28gaXQncyBleHQ0LXNwZWNpZmljIGFuZCwgY3J1Y2lhbGx5LCBpdCdzIHJlbGV2YW50IHdoZW4gZGF0YSBqb3VybmFsaW5nIChgZGF0YT1qb3VybmFsYCkgaXMgZW5hYmxlZC4gR29vZCwgYmVjYXVzZSBleHQ0IGlzIGEgd29ya2hvcnNlLCBhIGNvcmUgZmlsZXN5c3RlbSwgYW5kIGl0J3Mgc29tZXRoaW5nIHdlICpjYW4qIGhpdCByZWxpYWJseSB3aXRoIFFFTVUsIEdDRSwgYW5kIG9mIGNvdXJzZSwgc3l6a2FsbGVyLiBUaGF0IG1lYW5zIHdlIGhhdmUgYSB2aWFibGUgZnV6emluZyB0YXJnZXQuXG5cbk5vdywgdGhpcyBwYXRjaCBtb2RpZmllcyBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gLCB3aGljaCBzZWVtcyB0byBiZSBsb29waW5nIHdoaWxlIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCByZXR1cm5zIGAtRUJVU1lgLiBJdCdzIHdhaXRpbmcgZm9yIGBqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb25gIHRvIGZpbmlzaCB1cC4gSG9sZCBvbi4uLiB0aGVyZSdzIGEgcG90ZW50aWFsIGlzc3VlLiBXaGF0IGlmIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCByZXR1cm5zIGAtRUJVU1lgLCAqYnV0KiBgaGFzX3RyYW5zYWN0aW9uYCBpcyAqZmFsc2UqP1xuXG5MZXQgbWUgbG9vayBhdCB0aGF0IGxvb3AgYWdhaW46XG5cbmBgYGNcblx0d2hpbGUgKDEpIHtcblx0XHRyZXQgPSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG5cdFx0aWYgKHJldCAhPSAtRUJVU1kpIHtcblx0XHRcdFdBUk5fT04ocmV0IFx1MDAzYyAwKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aGFzX3RyYW5zYWN0aW9uID0gZmFsc2U7XG5cdFx0cmVhZF9sb2NrKFx1MDAyNmpvdXJuYWwtXHUwMDNlal9zdGF0ZV9sb2NrKTtcblx0XHRpZiAoam91cm5hbC1cdTAwM2VqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24pIHtcblx0XHRcdGNvbW1pdF90aWQgPSBqb3VybmFsLVx1MDAzZWpfY29tbWl0dGluZ190cmFuc2FjdGlvbi1cdTAwM2V0X3RpZDtcblx0XHRcdGhhc190cmFuc2FjdGlvbiA9IHRydWU7XG5cdFx0fVxuXHRcdHJlYWRfdW5sb2NrKFx1MDAyNmpvdXJuYWwtXHUwMDNlal9zdGF0ZV9sb2NrKTtcblx0XHRpZiAoaGFzX3RyYW5zYWN0aW9uKVxuXHRcdFx0amJkMl9sb2dfd2FpdF9jb21taXQoam91cm5hbCwgY29tbWl0X3RpZCk7XG5cdH1cbmBgYFxuXG5Pa2F5LCBJIHNlZSBpdC4gSWYgYGhhc190cmFuc2FjdGlvbmAgaXMgZmFsc2UsIHRoaXMgbG9vcCB3aWxsIGp1c3QgKmJ1c3kgd2FpdCogd2l0aG91dCB5aWVsZGluZyBvciBzbGVlcGluZy4gVGhhdCdzIGEgaHVnZSByZWQgZmxhZy4gQSBidXN5IGxvb3AgaW4gdGhlIGtlcm5lbCBpcyBuZXZlciBnb29kLiBPciB3aGF0IGlmIGBqYmQyYCBpdHNlbGYgcmV0dXJucyBgLUVCVVNZYCBpbiBhIGRpZmZlcmVudCBzY2VuYXJpbz8gQWxzbywgdGhpcyBzdHJ1Y3R1cmUgaXMgYSB0aWNraW5nIHRpbWUgYm9tYiBmb3IgcG90ZW50aWFsIGRlYWRsb2NrLCBpbmZpbml0ZSBsb29wcywgb3IgZXZlbiBsb2NrZGVwIGlzc3Vlcy5cblxuVGhpcyBsb29rcyBsaWtlIGl04oCZcyBzY3JlYW1pbmcgZm9yIGZ1enppbmcuIERlZmluaXRlbHkgd29ydGggdGhlIGVmZm9ydC4gTm93LCBsZXTigJlzIHNlZSB3aGVyZSBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIGlzIGFjdHVhbGx5IHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMTgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMjo0ODozNy45NTA1NTU1MTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU2NDU0NTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9pbm9kZS5jPTM0MDA9c3RhdGljIHZvaWQgZXh0NF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtMzQxMC1cXG5mcy9leHQ0L2lub2RlLmM6MzQxMTpzdGF0aWMgaW50IF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG5mcy9leHQ0L2lub2RlLmMtMzQxMi1cXHRcXHRcXHRcXHRcXHQgICAgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aClcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0zNDE1LVxcbmZzL2V4dDQvaW5vZGUuYzozNDE2OlxcdHRyYWNlX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XFxuZnMvZXh0NC9pbm9kZS5jLTM0MTctXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtMzQyNy0vKiBXcmFwcGVyIGZvciBhb3BzLi4uICovXFxuZnMvZXh0NC9pbm9kZS5jOjM0Mjg6c3RhdGljIHZvaWQgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG5mcy9leHQ0L2lub2RlLmMtMzQyOS1cXHRcXHRcXHRcXHRcXHQgICBzaXplX3Qgb2Zmc2V0LFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTM0MzctXFx0d2hpbGUgKDEpIHtcXG5mcy9leHQ0L2lub2RlLmM6MzQzODpcXHRcXHRyZXQgPSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XFxuZnMvZXh0NC9pbm9kZS5jLTM0MzktXFx0XFx0aWYgKHJldCAhPSAtRUJVU1kpIHtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz0zOTg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGV4dDRfam91cm5hbGxlZF9hb3BzID0ge1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTM5OTItXFx0LmJtYXBcXHRcXHRcXHQ9IGV4dDRfYm1hcCxcXG5mcy9leHQ0L2lub2RlLmM6Mzk5MzpcXHQuaW52YWxpZGF0ZV9mb2xpb1xcdD0gZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8sXFxuZnMvZXh0NC9pbm9kZS5jLTM5OTQtXFx0LnJlbGVhc2VfZm9saW9cXHRcXHQ9IGV4dDRfcmVsZWFzZV9mb2xpbyxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01NzgwPWludCBleHQ0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTU4MzAtLypcXG5mcy9leHQ0L2lub2RlLmM6NTgzMTogKiBJbiBkYXRhPWpvdXJuYWwgbW9kZSBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIG1heSBmYWlsIHRvIGludmFsaWRhdGVcXG5mcy9leHQ0L2lub2RlLmMtNTgzMi0gKiBidWZmZXJzIHRoYXQgYXJlIGF0dGFjaGVkIHRvIGEgZm9saW8gc3RyYWRkbGluZyBpX3NpemUgYW5kIGFyZSB1bmRlcmdvaW5nXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NTgzNT1zdGF0aWMgdm9pZCBleHQ0X3dhaXRfZm9yX3RhaWxfcGFnZV9jb21taXQoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy01ODQ1LVxcdCAqIElmIHRoZSBmb2xpbyBpcyBmdWxseSB0cnVuY2F0ZWQsIHdlIGRvbid0IG5lZWQgdG8gd2FpdCBmb3IgYW55IGNvbW1pdFxcbmZzL2V4dDQvaW5vZGUuYzo1ODQ2OlxcdCAqIChhbmQgd2UgZXZlbiBzaG91bGQgbm90IGFzIF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oKSBtYXlcXG5mcy9leHQ0L2lub2RlLmMtNTg0Ny1cXHQgKiBzdHJpcCBhbGwgYnVmZmVycyBmcm9tIHRoZSBmb2xpbyBidXQga2VlcCB0aGUgZm9saW8gZGlydHkgd2hpY2ggY2FuIHRoZW5cXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy01ODU5LVxcdFxcdFxcdHJldHVybjtcXG5mcy9leHQ0L2lub2RlLmM6NTg2MDpcXHRcXHRyZXQgPSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsXFxuZnMvZXh0NC9pbm9kZS5jLTU4NjEtXFx0XFx0XFx0XFx0XFx0XFx0Zm9saW9fc2l6ZShmb2xpbykgLSBvZmZzZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMjo0ODozOC4zMDcwMTU0NzJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2Mjg2MzgwNzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIGZvciBTeXprYWxsZXIgVGFyZ2V0aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCwgd2hpY2ggaXMgYSBmdW5jdGlvbiB1c2VkIGFzIHRoZSBgaW52YWxpZGF0ZV9mb2xpb2AgYWRkcmVzc19zcGFjZV9vcGVyYXRpb24gaW4gYGV4dDRfam91cm5hbGxlZF9hb3BzYC4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIGl0J3Mgc3RhdGljLiBZZXMsIGl0J3MgZGVjbGFyZWQgYHN0YXRpY2AuIE5vdywgdGhlIGtleSBxdWVzdGlvbjogY2FuIFN5emthbGxlciBkaXJlY3RseSB0YXJnZXQgdGhpcyBmdW5jdGlvbj9cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIGxvb2sgZm9yIGNsdWVzIGluIG15IHBhc3QgZXhwZXJpZW5jZSB3aXRoIHN0YXRpYyBmdW5jdGlvbnMgYW5kIFN5emthbGxlci4gSG1tLCBTZWN0aW9uIDQgb2YgbXkgbm90ZXMgb24gdGhlIHN1YmplY3QgdGFsa3MgYWJvdXQgaG93IGNvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyBpbiBoZWFkZXJzIGRvbid0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiBgdm1saW51eGAsIHNvIHRoZXkgYXJlIG1pc3NlZCBieSBTeXprYWxsZXIncyBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4gQnV0LCB3YWl0Li4uIGBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgcmVzaWRlcyBpbiBgZnMvZXh0NC9pbm9kZS5jYCwgbm90IGEgaGVhZGVyLiBEb2VzIHRoYXQgbWVhbiBpdCdzIGlubGluZWQsIG9yIGlzIGl0IGEgc2VwYXJhdGUgc3ltYm9sIGluIHRoZSBrZXJuZWw/XG5cbkFoLCByaWdodCwgbm93IEkgcmVtZW1iZXIuIEl0J3MgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXI6IGAuaW52YWxpZGF0ZV9mb2xpbyA9IGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvLGAuIFNpbmNlIHRoZSBhZGRyZXNzIG9mIHRoZSBmdW5jdGlvbiBpcyB0YWtlbiAoYFx1MDAyNmV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCksIHRoZSBjb21waWxlciAqY2Fubm90KiBpbmxpbmUgaXQuIFRoZSBjb21waWxlciAqbXVzdCogYWxsb2NhdGUgYSBzeW1ib2wgZW50cnkgZm9yIHRoZSBmdW5jdGlvbiB3aXRoaW4gYHZtbGludXhgISBUaGVyZWZvcmUsIGl0IHNob3VsZCBiZSB0YXJnZXRhYmxlLiBOb3csIHRoZXJlIG1pZ2h0IGJlIGEgc2ltaWxhciBpc3N1ZSB3aXRoIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCBidXQgdGhhdCBpcyBhIHNlY29uZGFyeSBjb25zaWRlcmF0aW9uLiBMZXQncyBtYWtlIHN1cmUgdGhhdCB0aGF0IGlzIHByb3Blcmx5IGFjY291bnRlZCBmb3IgaW4gdGhlIGNoZWNrLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBLY29uZmlnIGZvciBleHQ0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBvcHRpb25zIGFyZSBlbmFibGVkIHRvIG1ha2Ugc3VyZSB0aGUgc3ltYm9sIGlzIHByZXNlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MTcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NDg6NDQuNTkzNDAwMDA2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MDgwMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQ0X0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNDUtXFxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvS2NvbmZpZy00Ny1cXHRib29sIFxcXCJFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTU1LVxcbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQvS2NvbmZpZy01Ny1cXHRib29sIFxcXCJFeHQ0IFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NDg6NDQuNjY3NDg3ODVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTI0MDYzNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgZXh0NCBLY29uZmlnIEZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgZnMvZXh0NC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gc29tZSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGluaXRpYWwgcGFydCBvZiB0aGUgZmlsZSwgcm91Z2hseSBhcm91bmQgbGluZXMgMSB0byAzMC4gVGhlcmUncyBwcm9iYWJseSBzb21ldGhpbmcgc3BlY2lmaWMgSSdtIGxvb2tpbmcgZm9yIHRoZXJlIOKAkyBwZXJoYXBzIGEgZGVwZW5kZW5jeSBjaGVjayBvciBhIGRlZmF1bHQgc2V0dGluZyBJIHdhbnQgdG8gY29uZmlybS4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aG9zZSBmaXJzdCBmZXcgbGluZXMgYW5kIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGF0J3MgZ29pbmcgb24uIEknbSBob3BpbmcgSSBjYW4gemVybyBpbiBvbiBpdCBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NDg6NDYuNTkxNTU1NDUxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBFWFQ0X0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuICAgNDpcXHRcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4gICA1OlxcdFxcdHNlbGVjdCBKQkQyXFxuICAgNjpcXHRcXHRzZWxlY3QgQ1JDMTZcXG4gICA3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgIDg6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICAgOTpcXHRcXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgVGhpcyBpcyB0aGUgbmV4dCBnZW5lcmF0aW9uIG9mIHRoZSBleHQzIGZpbGVzeXN0ZW0uXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCAgVW5saWtlIHRoZSBjaGFuZ2UgZnJvbSBleHQyIGZpbGVzeXN0ZW0gdG8gZXh0MyBmaWxlc3lzdGVtLFxcbiAgMTQ6XFx0XFx0ICB0aGUgb24tZGlzayBmb3JtYXQgb2YgZXh0NCBpcyBub3QgZm9yd2FyZHMgY29tcGF0aWJsZSB3aXRoXFxuICAxNTpcXHRcXHQgIGV4dDM7IGl0IGlzIGJhc2VkIG9uIGV4dGVudCBtYXBzIGFuZCBpdCBzdXBwb3J0cyA0OC1iaXRcXG4gIDE2OlxcdFxcdCAgcGh5c2ljYWwgYmxvY2sgbnVtYmVycy4gIFRoZSBleHQ0IGZpbGVzeXN0ZW0gYWxzbyBzdXBwb3J0cyBkZWxheWVkXFxuICAxNzpcXHRcXHQgIGFsbG9jYXRpb24sIHBlcnNpc3RlbnQgcHJlYWxsb2NhdGlvbiwgaGlnaCByZXNvbHV0aW9uIHRpbWUgc3RhbXBzLFxcbiAgMTg6XFx0XFx0ICBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgc3BlZWRcXG4gIDE5OlxcdFxcdCAgdXAgZnNjayB0aW1lLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHdlYiBwYWdlcyBhdFxcbiAgMjA6XFx0XFx0ICBodHRwOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcuXFxuICAyMTpcXHRcXG4gIDIyOlxcdFxcdCAgVGhlIGV4dDQgZmlsZXN5c3RlbSBzdXBwb3J0cyBtb3VudGluZyBhbiBleHQzIGZpbGVzeXN0ZW07IHdoaWxlIHRoZXJlXFxuICAyMzpcXHRcXHQgIGFyZSBzb21lIHBlcmZvcm1hbmNlIGdhaW5zIGZyb20gdGhlIGRlbGF5ZWQgYWxsb2NhdGlvbiBhbmQgaW5vZGVcXG4gIDI0OlxcdFxcdCAgdGFibGUgcmVhZGFoZWFkLCB0aGUgYmVzdCBwZXJmb3JtYW5jZSBnYWlucyByZXF1aXJlIGVuYWJsaW5nIGV4dDRcXG4gIDI1OlxcdFxcdCAgZmVhdHVyZXMgaW4gdGhlIGZpbGVzeXN0ZW0gdXNpbmcgdHVuZTJmcywgb3IgZm9ybWF0dGluZyBhIG5ld1xcbiAgMjY6XFx0XFx0ICBmaWxlc3lzdGVtIGFzIGFuIGV4dDQgZmlsZXN5c3RlbSBpbml0aWFsbHkuIFdpdGhvdXQgZXhwbGljaXQgZW5hYmxpbmdcXG4gIDI3OlxcdFxcdCAgb2YgZXh0NCBmZWF0dXJlcywgdGhlIG9uIGRpc2sgZmlsZXN5c3RlbSBmb3JtYXQgc3RheXMgZnVsbHkgYmFja3dhcmRcXG4gIDI4OlxcdFxcdCAgY29tcGF0aWJsZS5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlXFxuICAzMTpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQ0LlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMjo0ODo0Ni41OTE3MTQ2NDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDE4OTIyMzUzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEVYVDQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KipcblxuT2theSwgc28gdGhlIGJhc2UgY29uZmlndXJhdGlvbiBJJ20gbG9va2luZyBhdCBoZXJlIGlzIGBFWFQ0X0ZTYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2Agd2l0aGluIHRoZSBFWFQ0IGZpbGVzeXN0ZW0gY29kZSBoYXMgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBTcGVjaWZpY2FsbHksIGFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoYXQgZnVuY3Rpb24gdG8gZXZlbiBiZSBjb21waWxlZCBvciBjb25zaWRlcmVkPyBMZXQncyBkcmlsbCBpbnRvIHRoZSBgZnMvZXh0NC9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyByZWxhdGVkIHRvIHRoYXQgZnVuY3Rpb24uIFRoaXMgaXMgc3RhbmRhcmQgcHJvY2VkdXJlLCBvZiBjb3Vyc2UuIEknbGwgcXVpY2tseSBjaGVjayBmb3IgYW55IHJlbGF0ZWQgYCNpZmRlZmAgb3Igc2ltaWxhciBjb25zdHJ1Y3RzLiBUaGlzIGlzIHdoZXJlIHRoZSBhbnN3ZXIgdHlwaWNhbGx5IHJlc2lkZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1OTAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAyOjQ4OjUwLjc4MDk0MTMyMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGV4dDQtZmlsZXN5c3RlbSByb3V0aW5lcy5cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0VYVDRfRlMpICs9IGV4dDQub1xcbiAgIDc6XFx0XFxuICAgODpcXHRleHQ0LXlcXHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxcXFxuICAgOTpcXHRcXHRcXHRleHRlbnRzX3N0YXR1cy5vIGZpbGUubyBmc21hcC5vIGZzeW5jLm8gaGFzaC5vIGlhbGxvYy5vIFxcXFxcXG4gIDEwOlxcdFxcdFxcdGluZGlyZWN0Lm8gaW5saW5lLm8gaW5vZGUubyBpb2N0bC5vIG1iYWxsb2MubyBtaWdyYXRlLm8gXFxcXFxcbiAgMTE6XFx0XFx0XFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXFxcXG4gIDEyOlxcdFxcdFxcdHN1cGVyLm8gc3ltbGluay5vIHN5c2ZzLm8geGF0dHIubyB4YXR0cl9odXJkLm8geGF0dHJfdHJ1c3RlZC5vIFxcXFxcXG4gIDEzOlxcdFxcdFxcdHhhdHRyX3VzZXIubyBmYXN0X2NvbW1pdC5vIG9ycGhhbi5vXFxuICAxNDpcXHRcXG4gIDE1OlxcdGV4dDQtJChDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wpXFx0Kz0gYWNsLm9cXG4gIDE2OlxcdGV4dDQtJChDT05GSUdfRVhUNF9GU19TRUNVUklUWSlcXHRcXHQrPSB4YXR0cl9zZWN1cml0eS5vXFxuICAxNzpcXHRleHQ0LXRlc3Qtb2Jqc1xcdFxcdFxcdFxcdCs9IGlub2RlLXRlc3QubyBtYmFsbG9jLXRlc3QubyBcXFxcXFxuICAxODpcXHRcXHRcXHRcXHRcXHRcXHQgICBleHRlbnRzLXRlc3Qub1xcbiAgMTk6XFx0b2JqLSQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXFx0XFx0Kz0gZXh0NC10ZXN0Lm9cXG4gIDIwOlxcdGV4dDQtJChDT05GSUdfRlNfVkVSSVRZKVxcdFxcdCs9IHZlcml0eS5vXFxuICAyMTpcXHRleHQ0LSQoQ09ORklHX0ZTX0VOQ1JZUFRJT04pXFx0XFx0Kz0gY3J5cHRvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NDg6NTAuNzgxMDQzNDEyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU2MDAwOTc4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFWFQ0IEpvdXJuYWxpbmcgSW52YWxpZGF0aW9uKipcblxuT2theSwgc28gYGlub2RlLm9gIGluIGBleHQ0LXlgIGlzIGNvbnRpbmdlbnQgb24gYENPTkZJR19FWFQ0X0ZTYC4gVGhhdCBtYWtlcyBzZW5zZS4gYENPTkZJR19FWFQ0X0ZTYCBwdWxscyBpbiBgSkJEMmAgYW5kIGBCVUZGRVJfSEVBRGAg4oCTIHRoZSB1c3VhbCBzdXNwZWN0cy4gSSBkb24ndCB0aGluayB0aGVyZSdzIGFueXRoaW5nIHVudXN1YWwgY29uZmlnLXdpc2UgZm9yIGRhdGEgam91cm5hbGluZzsgaXQncyBqdXN0IHRoZSBgZGF0YT1qb3VybmFsYCBtb3VudCBvcHRpb24gb3IgdXNpbmcgYGNoYXR0ciAramAsIGFzIGV4cGVjdGVkLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiBoZXJlLiBMZXQgbWUgY2hlY2sgdGhlIGdpdCBjb21taXQgbG9nLCBzZWUgaWYgSSBjYW4gZ2V0IHNvbWUgY29udGV4dC4gSG1tLCBubyBgZ2l0IGxvZ2AgYXZhaWxhYmxlLCBidXQgSSBoYXZlIHRoZSBkaWZmLiBHb29kIGVub3VnaC4gSSBjYW4gc2VlIHRoZSBjb21taXQ6XG5cbmBgYFxuY29tbWl0IDkzOGQ4ZTM1MmZlODBlNTIxYTdhZTRkN2I2OWQ5NjdjOTlkMTY3NWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAwMjo0ODowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xuaW5kZXggYzJjMmQ2YWM3ZjNkMS4uNmJiOTRhZmQ1MTAwNiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtMzQyOSw3ICszNDI5LDI3IEBAIHN0YXRpYyB2b2lkIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0XHRcdCAgIHNpemVfdCBvZmZzZXQsXG4gXHRcdFx0XHRcdCAgIHNpemVfdCBsZW5ndGgpXG4ge1xuLVx0V0FSTl9PTihfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCkgXHUwMDNjIDApO1xuK1x0dGlkX3QgY29tbWl0X3RpZDtcbitcdGludCByZXQ7XG4rXHRib29sIGhhc190cmFuc2FjdGlvbjtcbitcdGpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfSk9VUk5BTChmb2xpby1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3QpO1xuK1xuK1x0d2hpbGUgKDEpIHtcbitcdFx0cmV0ID0gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xuK1x0XHRpZiAocmV0ICE9IC1FQlVTWSkge1xuK1x0XHRcdFdBUk5fT04ocmV0IFx1MDAzYyAwKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbitcdFx0aGFzX3RyYW5zYWN0aW9uID0gZmFsc2U7XG4rXHRcdHJlYWRfbG9jayhcdTAwMjZqb3VybmFsLVx1MDAzZWpfc3RhdGVfbG9jayk7XG4rXHRcdGlmIChqb3VybmFsLVx1MDAzZWpfY29tbWl0dGluZ190cmFuc2FjdGlvbikge1xuK1x0XHRcdGNvbW1pdF90aWQgPSBqb3VybmFsLVx1MDAzZWpfY29tbWl0dGluZ190cmFuc2FjdGlvbi1cdTAwM2V0X3RpZDtcbitcdFx0XHRoYXNfdHJhbnNhY3Rpb24gPSB0cnVlO1xuK1x0XHR9XG4rXHRcdHJlYWRfdW5sb2NrKFx1MDAyNmpvdXJuYWwtXHUwMDNlal9zdGF0ZV9sb2NrKTtcbitcdFx0aWYgKGhhc190cmFuc2FjdGlvbilcbitcdFx0XHRqYmQyX2xvZ193YWl0X2NvbW1pdChqb3VybmFsLCBjb21taXRfdGlkKTtcbitcdH1cbiB9XG4gYGBgXG5cbkFoLCBpdCBzZWVtcyB3ZSdyZSBoYW5kbGluZyB0aGUgY2FzZSB3aGVyZSBgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgcmV0dXJucyAtRUJVU1kuIFRoYXQncyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgaXQncyBidXN5IGFuZCB3aGF0IHRoaXMgd2hpbGUgbG9vcCBkb2VzLiBJdCBsb29rcyBsaWtlIGl0J3Mgd2FpdGluZyBmb3IgYSB0cmFuc2FjdGlvbiB0byBjb21wbGV0ZS4gU3BlY2lmaWNhbGx5IGl0IGNoZWNrcyB0byBzZWUgaWYgdGhlIGBqb3VybmFsLVx1MDAzZWpfY29tbWl0dGluZ190cmFuc2FjdGlvbmAgZXhpc3RzOyBpZiBpdCBkb2VzLCBpdCByZXRyaWV2ZXMgdGhlIGBjb21taXRfdGlkYCBhbmQgdGhlbiBjYWxscyBgamJkMl9sb2dfd2FpdF9jb21taXRgLiBPa2F5LCBJIHdpbGwgbm93IGludmVzdGlnYXRlIGhvdyBgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2Agd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMjo0ODo1Ni4zODExNDU5MzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA1NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDEwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNDEwOlxcdFxcbjM0MTE6XFx0c3RhdGljIGludCBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuMzQxMjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aClcXG4zNDEzOlxcdHtcXG4zNDE0OlxcdFxcdGpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfSk9VUk5BTChmb2xpby1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuMzQxNTpcXHRcXG4zNDE2OlxcdFxcdHRyYWNlX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XFxuMzQxNzpcXHRcXG4zNDE4OlxcdFxcdC8qXFxuMzQxOTpcXHRcXHQgKiBJZiBpdCdzIGEgZnVsbCB0cnVuY2F0ZSB3ZSBqdXN0IGZvcmdldCBhYm91dCB0aGUgcGVuZGluZyBkaXJ0eWluZ1xcbjM0MjA6XFx0XFx0ICovXFxuMzQyMTpcXHRcXHRpZiAob2Zmc2V0ID09IDAgXFx1MDAyNlxcdTAwMjYgbGVuZ3RoID09IGZvbGlvX3NpemUoZm9saW8pKVxcbjM0MjI6XFx0XFx0XFx0Zm9saW9fY2xlYXJfY2hlY2tlZChmb2xpbyk7XFxuMzQyMzpcXHRcXG4zNDI0OlxcdFxcdHJldHVybiBqYmQyX2pvdXJuYWxfaW52YWxpZGF0ZV9mb2xpbyhqb3VybmFsLCBmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xcbjM0MjU6XFx0fVxcbjM0MjY6XFx0XFxuMzQyNzpcXHQvKiBXcmFwcGVyIGZvciBhb3BzLi4uICovXFxuMzQyODpcXHRzdGF0aWMgdm9pZCBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbjM0Mjk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc2l6ZV90IG9mZnNldCxcXG4zNDMwOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHNpemVfdCBsZW5ndGgpXFxuMzQzMTpcXHR7XFxuMzQzMjpcXHRcXHR0aWRfdCBjb21taXRfdGlkO1xcbjM0MzM6XFx0XFx0aW50IHJldDtcXG4zNDM0OlxcdFxcdGJvb2wgaGFzX3RyYW5zYWN0aW9uO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMjo0ODo1Ni4zODE0NTQ0MTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMzMzQ3OTQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgZXh0NF93YWl0X2Zvcl90YWlsX3BhZ2VfY29tbWl0YCoqXG5cbkFscmlnaHQsIGxldCdzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgZXh0NF93YWl0X2Zvcl90YWlsX3BhZ2VfY29tbWl0YC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZXhhbWluZSB0aGlzIGZ1bmN0aW9uLCB3aGljaCBpcyBsb2NhdGVkIGluIGBmcy9leHQ0L2lub2RlLmNgLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgZnVuY3Rpb25zIGxpa2UgdGhlc2UsIGRlYWxpbmcgd2l0aCB0YWlsIHBhZ2UgY29tbWl0cywgYXJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBleHQ0IGZpbGVzeXN0ZW0gaGFuZGxlcyBkYXRhIHBlcnNpc3RlbmNlIGFuZCBzeW5jaHJvbml6YXRpb24gYXQgYSB2ZXJ5IGdyYW51bGFyIGxldmVsLiBJIHN1c3BlY3QgdGhpcyBpcyB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgdGFpbCBwYWdlIHdyaXRlYmFjayBwcm9jZXNzIHJlc2lkZXMuIEkgYW50aWNpcGF0ZSBpdCdsbCBiZSBjZW50cmFsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBmaWxlc3lzdGVtIGVuc3VyZXMgZGF0YSBpbnRlZ3JpdHkgd2hlbiBkZWFsaW5nIHdpdGggcGFydGlhbGx5IHdyaXR0ZW4gYmxvY2tzLiBJJ20ga2VlbiB0byBkaXNzZWN0IGl0cyBsb2dpYywgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIEkvTyBwYXRoLiBUaGlzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgZXh0NCB1bmRlciBkaWZmZXJlbnQgd29ya2xvYWRzIGFuZCBjb25maWd1cmF0aW9ucywgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIGZyYWdtZW50ZWQgZmlsZXMgb3IgcG93ZXIgZmFpbHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTE4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMjo0ODo1OC43MTQ5MzU3NzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODMwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1ODMwOlxcdC8qXFxuNTgzMTpcXHQgKiBJbiBkYXRhPWpvdXJuYWwgbW9kZSBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIG1heSBmYWlsIHRvIGludmFsaWRhdGVcXG41ODMyOlxcdCAqIGJ1ZmZlcnMgdGhhdCBhcmUgYXR0YWNoZWQgdG8gYSBmb2xpbyBzdHJhZGRsaW5nIGlfc2l6ZSBhbmQgYXJlIHVuZGVyZ29pbmdcXG41ODMzOlxcdCAqIGNvbW1pdC4gSW4gdGhhdCBjYXNlIHdlIGhhdmUgdG8gd2FpdCBmb3IgY29tbWl0IHRvIGZpbmlzaCBhbmQgdHJ5IGFnYWluLlxcbjU4MzQ6XFx0ICovXFxuNTgzNTpcXHRzdGF0aWMgdm9pZCBleHQ0X3dhaXRfZm9yX3RhaWxfcGFnZV9jb21taXQoc3RydWN0IGlub2RlICppbm9kZSlcXG41ODM2OlxcdHtcXG41ODM3OlxcdFxcdHVuc2lnbmVkIG9mZnNldDtcXG41ODM4OlxcdFxcdGpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX2pvdXJuYWw7XFxuNTgzOTpcXHRcXHR0aWRfdCBjb21taXRfdGlkO1xcbjU4NDA6XFx0XFx0aW50IHJldDtcXG41ODQxOlxcdFxcdGJvb2wgaGFzX3RyYW5zYWN0aW9uO1xcbjU4NDI6XFx0XFxuNTg0MzpcXHRcXHRvZmZzZXQgPSBpbm9kZS1cXHUwMDNlaV9zaXplIFxcdTAwMjYgKFBBR0VfU0laRSAtIDEpO1xcbjU4NDQ6XFx0XFx0LypcXG41ODQ1OlxcdFxcdCAqIElmIHRoZSBmb2xpbyBpcyBmdWxseSB0cnVuY2F0ZWQsIHdlIGRvbid0IG5lZWQgdG8gd2FpdCBmb3IgYW55IGNvbW1pdFxcbjU4NDY6XFx0XFx0ICogKGFuZCB3ZSBldmVuIHNob3VsZCBub3QgYXMgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIG1heVxcbjU4NDc6XFx0XFx0ICogc3RyaXAgYWxsIGJ1ZmZlcnMgZnJvbSB0aGUgZm9saW8gYnV0IGtlZXAgdGhlIGZvbGlvIGRpcnR5IHdoaWNoIGNhbiB0aGVuXFxuNTg0ODpcXHRcXHQgKiBjb25mdXNlIGUuZy4gY29uY3VycmVudCBleHQ0X3dyaXRlcGFnZXMoKSBzZWVpbmcgZGlydHkgZm9saW8gd2l0aG91dFxcbjU4NDk6XFx0XFx0ICogYnVmZmVycykuIEFsc28gd2UgZG9uJ3QgbmVlZCB0byB3YWl0IGZvciBhbnkgY29tbWl0IGlmIGFsbCBidWZmZXJzIGluXFxuNTg1MDpcXHRcXHQgKiB0aGUgZm9saW8gcmVtYWluIHZhbGlkLiBUaGlzIGlzIG1vc3QgYmVuZWZpY2lhbCBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mXFxuNTg1MTpcXHRcXHQgKiBibG9ja3NpemUgPT0gUEFHRVNJWkUuXFxuNTg1MjpcXHRcXHQgKi9cXG41ODUzOlxcdFxcdGlmICghb2Zmc2V0IHx8IG9mZnNldCBcXHUwMDNlIChQQUdFX1NJWkUgLSBpX2Jsb2Nrc2l6ZShpbm9kZSkpKVxcbjU4NTQ6XFx0XFx0XFx0cmV0dXJuO1xcbjU4NTU6XFx0XFx0d2hpbGUgKDEpIHtcXG41ODU2OlxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8oaW5vZGUtXFx1MDAzZWlfbWFwcGluZyxcXG41ODU3OlxcdFxcdFxcdFxcdFxcdCAgICAgIGlub2RlLVxcdTAwM2VpX3NpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuNTg1ODpcXHRcXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG41ODU5OlxcdFxcdFxcdFxcdHJldHVybjtcXG41ODYwOlxcdFxcdFxcdHJldCA9IF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCxcXG41ODYxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGZvbGlvX3NpemUoZm9saW8pIC0gb2Zmc2V0KTtcXG41ODYyOlxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuNTg2MzpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjU4NjQ6XFx0XFx0XFx0aWYgKHJldCAhPSAtRUJVU1kpXFxuNTg2NTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuNTg2NjpcXHRcXHRcXHRoYXNfdHJhbnNhY3Rpb24gPSBmYWxzZTtcXG41ODY3OlxcdFxcdFxcdHJlYWRfbG9jayhcXHUwMDI2am91cm5hbC1cXHUwMDNlal9zdGF0ZV9sb2NrKTtcXG41ODY4OlxcdFxcdFxcdGlmIChqb3VybmFsLVxcdTAwM2VqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24pIHtcXG41ODY5OlxcdFxcdFxcdFxcdGNvbW1pdF90aWQgPSBqb3VybmFsLVxcdTAwM2VqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24tXFx1MDAzZXRfdGlkO1xcbjU4NzA6XFx0XFx0XFx0XFx0aGFzX3RyYW5zYWN0aW9uID0gdHJ1ZTtcXG41ODcxOlxcdFxcdFxcdH1cXG41ODcyOlxcdFxcdFxcdHJlYWRfdW5sb2NrKFxcdTAwMjZqb3VybmFsLVxcdTAwM2VqX3N0YXRlX2xvY2spO1xcbjU4NzM6XFx0XFx0XFx0aWYgKGhhc190cmFuc2FjdGlvbilcXG41ODc0OlxcdFxcdFxcdFxcdGpiZDJfbG9nX3dhaXRfY29tbWl0KGpvdXJuYWwsIGNvbW1pdF90aWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMjo0ODo1OC43MTUxODU1MDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTgzODI3MzQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWxseSBSaXNreSBleHQ0IENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBleHBlcnQgaW50dWl0aW9uIGtpY2tzIGluLiBUaGlzIGBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgZnVuY3Rpb24ganVzdCBnb3QgYSBzaWduaWZpY2FudCBsb2dpYyBjaGFuZ2UuIFByZXZpb3VzbHksIGlmIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCBmYWlsZWQsIGl0IHNpbXBseSB0cmlnZ2VyZWQgYSBgV0FSTl9PTmAuIE5vdywgaXQncyBhIGxvb3Agd2l0aCByZXRyaWVzISBTcGVjaWZpY2FsbHksIGl0IGNoZWNrcyBmb3IgYC1FQlVTWWAgYW5kLCBpZiBpdCBnZXRzIHRoYXQsIGl0IGdyYWJzIHRoZSBgam91cm5hbC1cdTAwM2VqX3N0YXRlX2xvY2tgLCBjaGVja3MgaWYgdGhlcmUncyBhbiBvbmdvaW5nIGNvbW1pdCAoYGpfY29tbWl0dGluZ190cmFuc2FjdGlvbmApLCBhbmQgdGhlbiAqd2FpdHMqIGZvciB0aGF0IGNvbW1pdCB1c2luZyBgamJkMl9sb2dfd2FpdF9jb21taXRgLlxuXG5UaGUgdGhpbmcgdGhhdCBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXQgbWUgaXMsIFwiV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQ/XCIgSSBrbm93IHRoaXMgYGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aGluIGZvbGlvIGludmFsaWRhdGlvbiBwYXRocy4gVGhpbmsgdHJ1bmNhdGUsIGhvbGUgcHVuY2hpbmcsIGBpbnZhbGlkYXRlX21hcHBpbmdfcGFnZXNgLCBgZmlsZW1hcF9pbnZhbGlkYXRlX2ZvbGlvYCDigJMgYWxsIHRoZSB1c3VhbCBzdXNwZWN0cy4gQW5kLCBjcnVjaWFsbHksIGl0J3Mgb2Z0ZW4gY2FsbGVkIHdoaWxlICpob2xkaW5nKiBmb2xpbyBsb2NrcyBvciBvdGhlciByZWxldmFudCBsb2Nrcy4gVGhpcyBoYXMgbXkgYWxhcm0gYmVsbHMgcmluZ2luZy4gVGhpcyBuZXcgcmV0cnkgbG9vcCAqaW5zaWRlKiB0aGlzIGNvbnRleHQuLi4gQ291bGQgdGhpcyBjYXVzZSBhIGxvY2sgaW52ZXJzaW9uIG9yIGV2ZW4gYSBkZWFkbG9jayB3aXRoIHRoZSBgamJkMmAgY29tbWl0IHByb2Nlc3M/IE9yIGlmIHRoZXJlIGlzIG5vIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24sIGlzIHRoaXMgYW4gaW5maW5pdGUgYnVzeSBsb29wPyBJdCBpcy5cblxuSSBrbm93IHRoZSBzeXN0ZW0gaGFzIGdvb2QgZnV6emluZyBjYXBhYmlsaXRpZXMsIGVzcGVjaWFsbHkgd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSB3b25kZXIgaWYgdGhpcyBjb2RlIGNoYW5nZSBpcyBldmVuIHdvcnRoIGZ1enppbmc/XG5cbkxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gUmVhY2hhYmlsaXR5PyBleHQ0IGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHRoZSBzdGFuZGFyZCBlbnZpcm9ubWVudHMuIENvcmUgc3Vic3lzdGVtPyBJdCdzIFZGUy9leHQ0LCByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIGZpbGVzeXN0ZW0uIFJlZmFjdG9yaW5nL0xvZ2ljIGNoYW5nZXM/IEl0IGlzIGludHJvZHVjaW5nIGEgcmV0cnkgbG9vcCB3aXRoIGxvY2tpbmcgYW5kIHdhaXRpbmcuIFdvcnRoIGZ1enppbmc6IHllcywgaXQgc2VlbXMgd29ydGh3aGlsZS5cblxuTm93LCB3aGljaCBzeW1ib2xzIGRvIEkgbmVlZCB0byBmb2N1cyBvbiBkdXJpbmcgZnV6emluZz8gT2J2aW91c2x5LCBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gYGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCBhbmQgYF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gLiBCdXQgSSBuZWVkIHRvIGxvb2sgYXQgd2hhdCBjYWxscyB0aGVtLiBJdCBzZWVtcyBsaWtlIGl0J3MgY2FsbGVkIHZpYSBgYW9wcy1cdTAwM2VpbnZhbGlkYXRlX2ZvbGlvYC4gTGV0J3MgY2hlY2sgYGV4dDRfd2FpdF9mb3JfdGFpbF9wYWdlX2NvbW1pdGAgYXMgd2VsbC4gVGhlIHByaW1hcnkgZm9jdXMgaXMgYGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYC4gSXQgYXBwZWFycyB0byBiZSBub24taW5saW5lZCBiZWNhdXNlIGl0IGlzIHN0b3JlZCBpbiB0aGUgYGV4dDRfam91cm5hbGxlZF9hb3BzYCBzdHJ1Y3QuIExldCdzIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZnVuY3Rpb25zIGluIGV4dDQgaW50ZXJhY3Rpbmcgd2l0aCBqb3VybmFsbGVkIGludmFsaWRhdGUgb3IgZGF0YSBqb3VybmFsaW5nIHRydW5jYXRlLiBJJ2xsIG5lZWQgdG8gZ3JlcHBlciBmb3IgYGV4dDRfam91cm5hbGxlZF9hb3BzYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTcxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NDk6MDQuNTUzNDYzNzU5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTIyMzE3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2pvdXJuYWxsZWRfYW9wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvaW5vZGUuYz0zOTY5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGV4dDRfYW9wcyA9IHtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0zOTg0LVxcbmZzL2V4dDQvaW5vZGUuYzozOTg1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGV4dDRfam91cm5hbGxlZF9hb3BzID0ge1xcbmZzL2V4dDQvaW5vZGUuYy0zOTg2LVxcdC5yZWFkX2ZvbGlvXFx0XFx0PSBleHQ0X3JlYWRfZm9saW8sXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NDAyND12b2lkIGV4dDRfc2V0X2FvcHMoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy00MDMwLVxcdGNhc2UgRVhUNF9JTk9ERV9KT1VSTkFMX0RBVEFfTU9ERTpcXG5mcy9leHQ0L2lub2RlLmM6NDAzMTpcXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZleHQ0X2pvdXJuYWxsZWRfYW9wcztcXG5mcy9leHQ0L2lub2RlLmMtNDAzMi1cXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAyOjQ5OjA0LjYyNDY5MzY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU0NDk2NjY2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEV4dDQgSW52YWxpZGF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBJdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgYGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCwgc3BlY2lmaWNhbGx5IGluIGBmcy9leHQ0L2lub2RlLmNgLiBUaGF0J3MgbXkgbWFpbiBmb2N1cyDigJMgbXkgXCJGb2N1c1N5bWJvbCxcIiBhY3R1YWxseS4gVGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoaXMgZnVuY3Rpb24gdG8gaW5jbHVkZSBhIHJldHJ5IGxvb3AgdGhhdCB3YWl0cyBmb3IgSkJEMiB0cmFuc2FjdGlvbnMgdG8gY29tbWl0IHdoZW4gaXQgcmVjZWl2ZXMgYW4gYC1FQlVTWWAgZXJyb3IgZnJvbSBgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AuIEV2ZW4gaWYgYF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIGlzIGlubGluZWQsIGl0J3Mgc2FmZSBhbmQgaGVscGZ1bCB0byBsaXN0IGJvdGggc3ltYm9scy4gSSd2ZSBhbHNvIHZlcmlmaWVkIHRoYXQgYGpiZDJfam91cm5hbF9pbnZhbGlkYXRlX2ZvbGlvYCBpc24ndCBtb2RpZmllZC5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIENsZWFybHksIGBDT05GSUdfRVhUNF9GU2AgaXMgYSBtdXN0LWhhdmU7IHdpdGhvdXQgaXQsIHRoZSB3aG9sZSBleHQ0IGZpbGVzeXN0ZW0gaXNuJ3QgZXZlbiBjb21waWxlZC4gSSBjaGVja2VkIHRoZSBgZnMvZXh0NC9LY29uZmlnYCBmaWxlIGFuZCBjb25maXJtZWQgdGhhdCBgRVhUNF9GU2AgZG9lc24ndCBkZXBlbmQgb24gYW55dGhpbmcgZWxzZS4gVGhhdCdzIGdvb2QuXG5cblNvLCBpbiBzdW1tYXJ5OlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogWWVzLCBhYnNvbHV0ZWx5LiBUaGlzIG1vZGlmaWNhdGlvbiBzZWVtcyBsaWtlIGl0IGludHJvZHVjZXMgY29tcGxleGl0eSByZWxhdGVkIHRvIHdhaXRpbmcgZm9yIHRyYW5zYWN0aW9ucywgd2hpY2ggcmFpc2VzIGNvbmNlcm5zIGFib3V0IHBvdGVudGlhbCBpc3N1ZXMuXG4qICAgKipGb2N1c1N5bWJvbHM6KiogSSd2ZSBpZGVudGlmaWVkIGBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgYW5kIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCBhcyB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIHBheSBhdHRlbnRpb24gdG8uXG4qICAgKipFbmFibGVDb25maWdzOioqIGBDT05GSUdfRVhUNF9GU2AgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCdzIHRydWx5IGVzc2VudGlhbCBoZXJlLlxuKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCdzIGNoYW5nZSBpbnZvbHZlcyBhIHJldHJ5IGxvb3AuIEknbSBjb25jZXJuZWQgYWJvdXQgcG90ZW50aWFsIGRlYWRsb2NrcywgbG9jayBpbnZlcnNpb25zLCBvciBpbmZpbml0ZSBidXN5LWxvb3BzIGlmIGBoYXNfdHJhbnNhY3Rpb25gIHJlbWFpbnMgZmFsc2UuIFRoaXMgaXMgYSBjbGFzc2ljIGNhc2Ugd2hlcmUgZnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdW5jb3ZlciBzdWJ0bGUgY29uY3VycmVuY3kgcHJvYmxlbXMgcmVsYXRlZCB0byB0aGUgam91cm5hbCBhbmQgZm9saW8gaW52YWxpZGF0aW9uLiBJJ20gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLiBUaW1lIHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg0NywiT3V0cHV0VG9rZW5zIjoxNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NDk6MTAuMDc0MzYzNjA5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MDAyMjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9cIixcbiAgICBcIl9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyBpbiBmcy9leHQ0L2lub2RlLmMsIHJlcGxhY2luZyBhbiBhc3NlcnRpb24gd2l0aCBhIHJldHJ5IGxvb3AgdGhhdCBzeW5jaHJvbml6ZXMgd2l0aCBKQkQyIHRyYW5zYWN0aW9ucyB3aGVuIF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8gcmV0dXJucyAtRUJVU1kuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGZvbGlvIGludmFsaWRhdGlvbiBvcGVyYXRpb25zIChzdWNoIGFzIHRydW5jYXRlIG9yIGhvbGUgcHVuY2hpbmcpIG9uIGV4dDQgaW5vZGVzIHdpdGggZGF0YSBqb3VybmFsbGluZyBlbmFibGVkLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uLCBkZWFkbG9ja3MsIG9yIGluZmluaXRlIGxvb3BzIGlmIGEgdHJhbnNhY3Rpb24gY29tbWl0IGlzIHBlbmRpbmcgb3IgbWlzc2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9cIixcbiAgICBcIl9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyBpbiBmcy9leHQ0L2lub2RlLmMsIHJlcGxhY2luZyBhbiBhc3NlcnRpb24gd2l0aCBhIHJldHJ5IGxvb3AgdGhhdCBzeW5jaHJvbml6ZXMgd2l0aCBKQkQyIHRyYW5zYWN0aW9ucyB3aGVuIF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8gcmV0dXJucyAtRUJVU1kuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGZvbGlvIGludmFsaWRhdGlvbiBvcGVyYXRpb25zIChzdWNoIGFzIHRydW5jYXRlIG9yIGhvbGUgcHVuY2hpbmcpIG9uIGV4dDQgaW5vZGVzIHdpdGggZGF0YSBqb3VybmFsbGluZyBlbmFibGVkLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uLCBkZWFkbG9ja3MsIG9yIGluZmluaXRlIGxvb3BzIGlmIGEgdHJhbnNhY3Rpb24gY29tbWl0IGlzIHBlbmRpbmcgb3IgbWlzc2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NDk6MTAuMjA5Mzc0NTE0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTI2OTc0MzIwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAyOjQ5OjEwLjIwOTg1OTAxNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU5MjY5MjUyNzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKCkgdG8gaGFuZGxlIC1FQlVTWSByZXR1cm5zIGZyb20gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIGJ5IHdhaXRpbmcgZm9yIHRoZSBjb21taXR0aW5nIHRyYW5zYWN0aW9uIHZpYSBqYmQyX2xvZ193YWl0X2NvbW1pdCgpIGluIGEgbG9vcC5cXG5cXG5BbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgaW4gdGhlIHBhdGNoIChyZXQsIGhhc190cmFuc2FjdGlvbiwgY29tbWl0X3RpZCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2U6IGhhc190cmFuc2FjdGlvbiBpcyBleHBsaWNpdGx5IHNldCB0byBmYWxzZSwgYW5kIGNvbW1pdF90aWQgaXMgb25seSByZWFkIHdoZW4gaGFzX3RyYW5zYWN0aW9uIGlzIHRydWUgKHdoZXJlIGl0IGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBiZWVuIHNldCkuIE5vIG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGNvcGllcywgcGFkZGluZywgb3IgdXNlci1zcGFjZSB0cmFuc2ZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBjb25jdXJyZW5jeSwgZGVhZGxvY2ssIG9yIGxpdmVsb2NrIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbG9vcCBvciB3YWl0aW5nIG9uIHRyYW5zYWN0aW9ucyBhcmUgd2l0aGluIHRoZSBkb21haW4gb2YgTE9DS0RFUCBhbmQgaGFuZy93YXRjaGRvZyBkZXRlY3RvcnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MzhkOGUzNTJmZTgwZTUyMWE3YWU0ZDdiNjlkOTY3Yzk5ZDE2NzVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDI6NDg6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGMyYzJkNmFjN2YzZDEuLjZiYjk0YWZkNTEwMDYgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xuQEAgLTM0MjksNyArMzQyOSwyNyBAQCBzdGF0aWMgdm9pZCBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdFx0XHQgICBzaXplX3Qgb2Zmc2V0LFxuIFx0XHRcdFx0XHQgICBzaXplX3QgbGVuZ3RoKVxuIHtcbi1cdFdBUk5fT04oX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LCBsZW5ndGgpIFx1MDAzYyAwKTtcbitcdHRpZF90IGNvbW1pdF90aWQ7XG4rXHRpbnQgcmV0O1xuK1x0Ym9vbCBoYXNfdHJhbnNhY3Rpb247XG4rXHRqb3VybmFsX3QgKmpvdXJuYWwgPSBFWFQ0X0pPVVJOQUwoZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0KTtcbitcbitcdHdoaWxlICgxKSB7XG4rXHRcdHJldCA9IF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcbitcdFx0aWYgKHJldCAhPSAtRUJVU1kpIHtcbitcdFx0XHRXQVJOX09OKHJldCBcdTAwM2MgMCk7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHRcdGhhc190cmFuc2FjdGlvbiA9IGZhbHNlO1xuK1x0XHRyZWFkX2xvY2soXHUwMDI2am91cm5hbC1cdTAwM2VqX3N0YXRlX2xvY2spO1xuK1x0XHRpZiAoam91cm5hbC1cdTAwM2VqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24pIHtcbitcdFx0XHRjb21taXRfdGlkID0gam91cm5hbC1cdTAwM2VqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24tXHUwMDNldF90aWQ7XG4rXHRcdFx0aGFzX3RyYW5zYWN0aW9uID0gdHJ1ZTtcbitcdFx0fVxuK1x0XHRyZWFkX3VubG9jayhcdTAwMjZqb3VybmFsLVx1MDAzZWpfc3RhdGVfbG9jayk7XG4rXHRcdGlmIChoYXNfdHJhbnNhY3Rpb24pXG4rXHRcdFx0amJkMl9sb2dfd2FpdF9jb21taXQoam91cm5hbCwgY29tbWl0X3RpZCk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBib29sIGV4dDRfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCB3YWl0KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NDk6MTAuMjA5ODU5ODA1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM5MzA3NDI1OTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgZXh0NCBJbm9kZSBDYWNoZSBJbnZhbGlkYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgZm9jdXNlcyBvbiBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIHdpdGhpbiBgZnMvZXh0NC9pbm9kZS5jYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhhdCBmdW5jdGlvbiBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhhdCBmaWxlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGxpbmUgMzQyOSwgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgYmVpbmcgbW9kaWZpZWQgYW5kIHdoeS4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIG9uIHRoZSBqb3VybmFsaW5nIHByb2Nlc3MgYW5kIGlub2RlIGhhbmRsaW5nIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAyOjQ5OjQ5LjUxNzI5MTU0NloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzU5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0MTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM0MTU6XFx0XFxuMzQxNjpcXHRcXHR0cmFjZV9leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xcbjM0MTc6XFx0XFxuMzQxODpcXHRcXHQvKlxcbjM0MTk6XFx0XFx0ICogSWYgaXQncyBhIGZ1bGwgdHJ1bmNhdGUgd2UganVzdCBmb3JnZXQgYWJvdXQgdGhlIHBlbmRpbmcgZGlydHlpbmdcXG4zNDIwOlxcdFxcdCAqL1xcbjM0MjE6XFx0XFx0aWYgKG9mZnNldCA9PSAwIFxcdTAwMjZcXHUwMDI2IGxlbmd0aCA9PSBmb2xpb19zaXplKGZvbGlvKSlcXG4zNDIyOlxcdFxcdFxcdGZvbGlvX2NsZWFyX2NoZWNrZWQoZm9saW8pO1xcbjM0MjM6XFx0XFxuMzQyNDpcXHRcXHRyZXR1cm4gamJkMl9qb3VybmFsX2ludmFsaWRhdGVfZm9saW8oam91cm5hbCwgZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcXG4zNDI1OlxcdH1cXG4zNDI2OlxcdFxcbjM0Mjc6XFx0LyogV3JhcHBlciBmb3IgYW9wcy4uLiAqL1xcbjM0Mjg6XFx0c3RhdGljIHZvaWQgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4zNDI5OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHNpemVfdCBvZmZzZXQsXFxuMzQzMDpcXHRcXHRcXHRcXHRcXHRcXHQgICBzaXplX3QgbGVuZ3RoKVxcbjM0MzE6XFx0e1xcbjM0MzI6XFx0XFx0dGlkX3QgY29tbWl0X3RpZDtcXG4zNDMzOlxcdFxcdGludCByZXQ7XFxuMzQzNDpcXHRcXHRib29sIGhhc190cmFuc2FjdGlvbjtcXG4zNDM1OlxcdFxcdGpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfSk9VUk5BTChmb2xpby1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuMzQzNjpcXHRcXG4zNDM3OlxcdFxcdHdoaWxlICgxKSB7XFxuMzQzODpcXHRcXHRcXHRyZXQgPSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XFxuMzQzOTpcXHRcXHRcXHRpZiAocmV0ICE9IC1FQlVTWSkge1xcbjM0NDA6XFx0XFx0XFx0XFx0V0FSTl9PTihyZXQgXFx1MDAzYyAwKTtcXG4zNDQxOlxcdFxcdFxcdFxcdHJldHVybjtcXG4zNDQyOlxcdFxcdFxcdH1cXG4zNDQzOlxcdFxcdFxcdGhhc190cmFuc2FjdGlvbiA9IGZhbHNlO1xcbjM0NDQ6XFx0XFx0XFx0cmVhZF9sb2NrKFxcdTAwMjZqb3VybmFsLVxcdTAwM2VqX3N0YXRlX2xvY2spO1xcbjM0NDU6XFx0XFx0XFx0aWYgKGpvdXJuYWwtXFx1MDAzZWpfY29tbWl0dGluZ190cmFuc2FjdGlvbikge1xcbjM0NDY6XFx0XFx0XFx0XFx0Y29tbWl0X3RpZCA9IGpvdXJuYWwtXFx1MDAzZWpfY29tbWl0dGluZ190cmFuc2FjdGlvbi1cXHUwMDNldF90aWQ7XFxuMzQ0NzpcXHRcXHRcXHRcXHRoYXNfdHJhbnNhY3Rpb24gPSB0cnVlO1xcbjM0NDg6XFx0XFx0XFx0fVxcbjM0NDk6XFx0XFx0XFx0cmVhZF91bmxvY2soXFx1MDAyNmpvdXJuYWwtXFx1MDAzZWpfc3RhdGVfbG9jayk7XFxuMzQ1MDpcXHRcXHRcXHRpZiAoaGFzX3RyYW5zYWN0aW9uKVxcbjM0NTE6XFx0XFx0XFx0XFx0amJkMl9sb2dfd2FpdF9jb21taXQoam91cm5hbCwgY29tbWl0X3RpZCk7XFxuMzQ1MjpcXHRcXHR9XFxuMzQ1MzpcXHR9XFxuMzQ1NDpcXHRcXG4zNDU1OlxcdHN0YXRpYyBib29sIGV4dDRfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCB3YWl0KVxcbjM0NTY6XFx0e1xcbjM0NTc6XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZvbGlvLVxcdTAwM2VtYXBwaW5nLVxcdTAwM2Vob3N0O1xcbjM0NTg6XFx0XFx0am91cm5hbF90ICpqb3VybmFsID0gRVhUNF9KT1VSTkFMKGlub2RlKTtcXG4zNDU5OlxcdFxcbjM0NjA6XFx0XFx0dHJhY2VfZXh0NF9yZWxlYXNlX2ZvbGlvKGlub2RlLCBmb2xpbyk7XFxuMzQ2MTpcXHRcXG4zNDYyOlxcdFxcdC8qIFBhZ2UgaGFzIGRpcnR5IGpvdXJuYWxsZWQgZGF0YSAtXFx1MDAzZSBjYW5ub3QgcmVsZWFzZSAqL1xcbjM0NjM6XFx0XFx0aWYgKGZvbGlvX3Rlc3RfY2hlY2tlZChmb2xpbykpXFxuMzQ2NDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAyOjQ5OjQ5LjUxNzk3MjQyNloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTQxNTk4NzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZnVuY3Rpb24gYF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gLiBMZXQncyBkaWcgYmFjayBpbnRvIHRoZSBzb3VyY2UgY29kZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkganVtcCB0byBsaW5lcyAzNDAwIHRocm91Z2ggMzQyNS4gVGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIHNob3VsZCBiZS4gTmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHdoYXQgd2FzIGdvaW5nIG9uIHJpZ2h0IGJlZm9yZSB0aGlzIGZ1bmN0aW9uLiBGaWd1cmUgb3V0IHRoZSBzdGF0ZSBvZiB0aGluZ3MuIExldCdzIHNlZSB3aGF0IHRoYXQgc2VjdGlvbiBpcyB0ZWxsaW5nIHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjU3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMjo0OTo1MS4wNTk1NzYxODVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzczODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNDAwOlxcdHN0YXRpYyB2b2lkIGV4dDRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxcbjM0MDE6XFx0XFx0XFx0XFx0XFx0c2l6ZV90IGxlbmd0aClcXG4zNDAyOlxcdHtcXG4zNDAzOlxcdFxcdHRyYWNlX2V4dDRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xcbjM0MDQ6XFx0XFxuMzQwNTpcXHRcXHQvKiBObyBqb3VybmFsbGluZyBoYXBwZW5zIG9uIGRhdGEgYnVmZmVycyB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCAqL1xcbjM0MDY6XFx0XFx0V0FSTl9PTihmb2xpb19idWZmZXJzKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBidWZmZXJfamJkKGZvbGlvX2J1ZmZlcnMoZm9saW8pKSk7XFxuMzQwNzpcXHRcXG4zNDA4OlxcdFxcdGJsb2NrX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcXG4zNDA5OlxcdH1cXG4zNDEwOlxcdFxcbjM0MTE6XFx0c3RhdGljIGludCBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuMzQxMjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aClcXG4zNDEzOlxcdHtcXG4zNDE0OlxcdFxcdGpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfSk9VUk5BTChmb2xpby1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuMzQxNTpcXHRcXG4zNDE2OlxcdFxcdHRyYWNlX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XFxuMzQxNzpcXHRcXG4zNDE4OlxcdFxcdC8qXFxuMzQxOTpcXHRcXHQgKiBJZiBpdCdzIGEgZnVsbCB0cnVuY2F0ZSB3ZSBqdXN0IGZvcmdldCBhYm91dCB0aGUgcGVuZGluZyBkaXJ0eWluZ1xcbjM0MjA6XFx0XFx0ICovXFxuMzQyMTpcXHRcXHRpZiAob2Zmc2V0ID09IDAgXFx1MDAyNlxcdTAwMjYgbGVuZ3RoID09IGZvbGlvX3NpemUoZm9saW8pKVxcbjM0MjI6XFx0XFx0XFx0Zm9saW9fY2xlYXJfY2hlY2tlZChmb2xpbyk7XFxuMzQyMzpcXHRcXG4zNDI0OlxcdFxcdHJldHVybiBqYmQyX2pvdXJuYWxfaW52YWxpZGF0ZV9mb2xpbyhqb3VybmFsLCBmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xcbjM0MjU6XFx0fVxcbjM0MjY6XFx0XFxuMzQyNzpcXHQvKiBXcmFwcGVyIGZvciBhb3BzLi4uICovXFxuMzQyODpcXHRzdGF0aWMgdm9pZCBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbjM0Mjk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc2l6ZV90IG9mZnNldCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NDk6NTEuMDU5OTU0NTI1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEwNDU2MDcwMjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29kZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBvcmlnaW5hbCBjb2RlIGxvb2tlZCBsaWtlICpiZWZvcmUqIHRoaXMgcGF0Y2ggd2FzIGFwcGxpZWQuIFRoZSBkaWZmIHNob3dzIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIHRoZSBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIGZ1bmN0aW9uIGluIGBmcy9leHQ0L2lub2RlLmNgLiBUaGUgY29yZSBtb2RpZmljYXRpb24gc2VlbXMgdG8gaW52b2x2ZSBoYW5kbGluZyBhIGAtRUJVU1lgIGVycm9yIHJldHVybiBmcm9tIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYC5cblxuRXNzZW50aWFsbHksIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIHNpbXBsZSBgV0FSTl9PTmAgY2hlY2suIE5vdywgdGhlcmUncyBhIGxvb3Agd2l0aCBhIHJldHJ5IG1lY2hhbmlzbS4gSXQgYXBwZWFycyB0aGF0IGlmIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCByZXR1cm5zIGAtRUJVU1lgLCB3aGljaCBwcm9iYWJseSBtZWFucyB0aGUgam91cm5hbCBpcyBidXN5LCB0aGUgY29kZSBub3cgd2FpdHMuIEkgY2FuIHNlZSB0aGF0IGl0J3MgY2hlY2tpbmcgZm9yIGEgY29tbWl0dGluZyB0cmFuc2FjdGlvbiB1c2luZyBgamJkMl9sb2dfd2FpdF9jb21taXRgIGFuZCByZXRyeWluZy4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggYSByYWNlIGNvbmRpdGlvbiBvciBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgam91cm5hbCBpcyB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZS5cblxuVG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnRleHQgYW5kIG1vdGl2YXRpb24gYmVoaW5kIHRoaXMgY2hhbmdlLCBJJ2xsIG5lZWQgbW9yZSBpbmZvcm1hdGlvbi4gSSdsbCBjaGVjayB0aGUgY29tbWl0IGhpc3RvcnkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbW9kaWZpY2F0aW9uLiBJJ2xsIGV4ZWN1dGUgYSBgZ2l0IGxvZ2Agb24gdGhlIGBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgZnVuY3Rpb24gdG8gc2VlIHRoZSBjb21taXQgbWVzc2FnZXMuIEhvcGVmdWxseSwgdGhhdCBzaG91bGQgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gd2hhdCBwcm9ibGVtIHRoaXMgcGF0Y2ggaXMgZml4aW5nLiBJdCdzIGxpa2VseSByZWxhdGVkIHRvIGpvdXJuYWwgY29udGVudGlvbiBvciBhIHNpbWlsYXIgY29uY3VycmVuY3kgaXNzdWUgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIE1heWJlIGl0J3MgYSBkZWFkbG9jay4gSSdsbCBhbHNvIHRyeSBhIGJyb2FkZXIgc2VhcmNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTMwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NTA6MDEuNTE2MDI4NzIxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDk1NjQxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2lub2RlLmM9MzQwMD1zdGF0aWMgdm9pZCBleHQ0X2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0zNDEwLVxcbmZzL2V4dDQvaW5vZGUuYzozNDExOnN0YXRpYyBpbnQgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmZzL2V4dDQvaW5vZGUuYy0zNDEyLVxcdFxcdFxcdFxcdFxcdCAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTM0MTUtXFxuZnMvZXh0NC9pbm9kZS5jOjM0MTY6XFx0dHJhY2VfZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcXG5mcy9leHQ0L2lub2RlLmMtMzQxNy1cXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0zNDI3LS8qIFdyYXBwZXIgZm9yIGFvcHMuLi4gKi9cXG5mcy9leHQ0L2lub2RlLmM6MzQyODpzdGF0aWMgdm9pZCBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmZzL2V4dDQvaW5vZGUuYy0zNDI5LVxcdFxcdFxcdFxcdFxcdCAgIHNpemVfdCBvZmZzZXQsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtMzQzNy1cXHR3aGlsZSAoMSkge1xcbmZzL2V4dDQvaW5vZGUuYzozNDM4OlxcdFxcdHJldCA9IF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcXG5mcy9leHQ0L2lub2RlLmMtMzQzOS1cXHRcXHRpZiAocmV0ICE9IC1FQlVTWSkge1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTM5ODU9c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXh0NF9qb3VybmFsbGVkX2FvcHMgPSB7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtMzk5Mi1cXHQuYm1hcFxcdFxcdFxcdD0gZXh0NF9ibWFwLFxcbmZzL2V4dDQvaW5vZGUuYzozOTkzOlxcdC5pbnZhbGlkYXRlX2ZvbGlvXFx0PSBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyxcXG5mcy9leHQ0L2lub2RlLmMtMzk5NC1cXHQucmVsZWFzZV9mb2xpb1xcdFxcdD0gZXh0NF9yZWxlYXNlX2ZvbGlvLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTU3ODA9aW50IGV4dDRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTgzMC0vKlxcbmZzL2V4dDQvaW5vZGUuYzo1ODMxOiAqIEluIGRhdGE9am91cm5hbCBtb2RlIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKCkgbWF5IGZhaWwgdG8gaW52YWxpZGF0ZVxcbmZzL2V4dDQvaW5vZGUuYy01ODMyLSAqIGJ1ZmZlcnMgdGhhdCBhcmUgYXR0YWNoZWQgdG8gYSBmb2xpbyBzdHJhZGRsaW5nIGlfc2l6ZSBhbmQgYXJlIHVuZGVyZ29pbmdcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01ODM1PXN0YXRpYyB2b2lkIGV4dDRfd2FpdF9mb3JfdGFpbF9wYWdlX2NvbW1pdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTU4NDUtXFx0ICogSWYgdGhlIGZvbGlvIGlzIGZ1bGx5IHRydW5jYXRlZCwgd2UgZG9uJ3QgbmVlZCB0byB3YWl0IGZvciBhbnkgY29tbWl0XFxuZnMvZXh0NC9pbm9kZS5jOjU4NDY6XFx0ICogKGFuZCB3ZSBldmVuIHNob3VsZCBub3QgYXMgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIG1heVxcbmZzL2V4dDQvaW5vZGUuYy01ODQ3LVxcdCAqIHN0cmlwIGFsbCBidWZmZXJzIGZyb20gdGhlIGZvbGlvIGJ1dCBrZWVwIHRoZSBmb2xpbyBkaXJ0eSB3aGljaCBjYW4gdGhlblxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTU4NTktXFx0XFx0XFx0cmV0dXJuO1xcbmZzL2V4dDQvaW5vZGUuYzo1ODYwOlxcdFxcdHJldCA9IF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCxcXG5mcy9leHQ0L2lub2RlLmMtNTg2MS1cXHRcXHRcXHRcXHRcXHRcXHRmb2xpb19zaXplKGZvbGlvKSAtIG9mZnNldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAyOjUwOjAyLjAyNTU5ODg3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc0NTM0ODA0NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudCBvZiBleHQ0IEpvdXJuYWxsZWQgRm9saW8gSW52YWxpZGF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmb2N1cyBpcyBvbiB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBvciBleGFjZXJiYXRlcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcywgdGhlIGRvbWFpbiBvZiBLTVNBTi4gVGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgZm9yIGBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AsIHdoaWNoIGhhbmRsZXMgZm9saW8gaW52YWxpZGF0aW9uIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIHdoZW4gaW4gYGRhdGE9am91cm5hbGAgbW9kZS5cblxuRmlyc3QsIEkgc2VlIHRoYXQgdGhlIG9yaWdpbmFsIGNvZGUgc2ltcGx5IGNhbGxzIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCBhbmQgV0FSTnMgb24gbmVnYXRpdmUgcmV0dXJuIHZhbHVlcy4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSByZXRyeSBsb29wLiBJdCBjYWxscyBgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AsIGNoZWNrcyB0aGUgcmV0dXJuIHZhbHVlIChgcmV0YCkuIElmIGByZXRgIGlzbid0IGAtRUJVU1lgLCBpdCBoYW5kbGVzIGVycm9ycyBvciByZXR1cm5zLiBJZiBpdCAqaXMqIGAtRUJVU1lgLCBpdCBjaGVja3MgZm9yIGEgY29tbWl0dGluZyB0cmFuc2FjdGlvbiAoYGpvdXJuYWwtXHUwMDNlal9jb21taXR0aW5nX3RyYW5zYWN0aW9uYCkuXG5cbkhlcmUsIEkgemVybyBpbiBvbiBgY29tbWl0X3RpZGAuIFRoZSBgY29tbWl0X3RpZGAgdmFyaWFibGUgaXMgYSBsb2NhbCB2YXJpYWJsZSwgZGVjbGFyZWQgYXMgYHRpZF90IGNvbW1pdF90aWQ7YCwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgaXQncyBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgY29kZSBleHBsaWNpdGx5IHJlYWRzIGZyb20gYGpvdXJuYWwtXHUwMDNlal9jb21taXR0aW5nX3RyYW5zYWN0aW9uLVx1MDAzZXRfdGlkYCwgKm9ubHkqIGlmIGBqb3VybmFsLVx1MDAzZWpfY29tbWl0dGluZ190cmFuc2FjdGlvbmAgaXMgdmFsaWQsIHNvIGBjb21taXRfdGlkYCBpcyBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkIHdoZW4gdXNlZC4gSXQgdGhlbiB1c2VzIHRoaXMgYGNvbW1pdF90aWRgIHdpdGggYGpiZDJfbG9nX3dhaXRfY29tbWl0KClgLiBJZiBubyB0cmFuc2FjdGlvbiBpcyBjb21taXR0aW5nLCB0aGUgY29kZSBkb2Vzbid0IHdhaXQgYW5kIGdvZXMgYmFjayB0byBjYWxsaW5nIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IGNoZWNrIGZvciBtZTogaXMgYGNvbW1pdF90aWRgIG9yIGFueSBvdGhlciB2YXJpYWJsZSB1c2VkIGluIGEgd2F5IHRoYXQgaW50cm9kdWNlcyB0aGUgcG9zc2liaWxpdHkgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIFRoZSBsb2dpYyBpbml0aWFsaXplcyBgY29tbWl0X3RpZGAgYW5kIHVzZXMgaXQgb25seSBpZiBhIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24gaXMgYWN0aXZlLiBJdCdzIHRoZSBgaGFzX3RyYW5zYWN0aW9uYCBmbGFnIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIHdhaXQuIElmIGBoYXNfdHJhbnNhY3Rpb25gIGlzIGZhbHNlLCBpdCBtZWFucyBgam91cm5hbC1cdTAwM2VqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb25gIHdhcyBudWxsLCBhbmQgdGhlIGNvZGUgcmV0cmllcyB3aXRob3V0IHdhaXRpbmcuIFRoaXMgY291bGQgbGVhZCB0byBhIGxpdmVsb2NrIG9yIGluZmluaXRlIGxvb3AgaWYgYC1FQlVTWWAgcGVyc2lzdHMsIGJ1dCB0aGF0J3Mgbm90IGEgS01TQU4gaXNzdWU7IGl0J3MgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kvZGVhZGxvY2svbGl2ZWxvY2sgcHJvYmxlbS5cblxuTmV4dCwgSSBzY2FuIGZvciB0eXBpY2FsIEtNU0FOIGNvbmNlcm5zOiBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBsZWFrZWQgdG8gdXNlciBzcGFjZSwgY29uZGl0aW9uYWwgYnJhbmNoZXMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsbG9jYXRpb24gb2YgY29tcGxleCBzdHJ1Y3R1cmVzLCBvciBhbnkgb3BlcmF0aW9ucyBvbiBidWZmZXJzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgbWlnaHQgYmUgYWNjZXNzZWQuIEkgc2VlIG5vbmUgb2YgdGhvc2UgaGVyZS4gTm8ga2VybmVsIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vIGJ1ZmZlcnMgYXJlIGJlaW5nIG1hbmlwdWxhdGVkLCBhbmQgYWxsIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgS01TQU4gcmlza3MuIFRoZSBwb3RlbnRpYWwgaXNzdWVzIGhlcmUgYXJlIHJlbGF0ZWQgdG8gY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbjogZGVhZGxvY2tzLCBsaXZlbG9ja3MsIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhvc2UgYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAsIHdhdGNoZG9nIHRpbWVycywgb3Igc3RhbmRhcmQga2VybmVsIGhhbmcvbG9ja3VwIGRldGVjdG9ycy4gVGhleSBhcmUgbm90IG1lbW9yeSBpbml0aWFsaXphdGlvbiBpc3N1ZXMgd2hpY2ggYXJlIHRoZSBwdXJ2aWV3IG9mIEtNU0FOLlxuXG5JbiBzdW1tYXJ5LCBteSBhbmFseXNpcyBpbmRpY2F0ZXMgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEl0J3MgYSBjb25jdXJyZW5jeS1yZWxhdGVkIGNoYW5nZSwgYnV0IG5vdCBhIEtNU0FOLXJlbGV2YW50IG9uZS4gVGhlIGNvZGUgaW5pdGlhbGl6ZXMgaXRzIHZhcmlhYmxlcyBwcm9wZXJseSwgdXNlcyB0aGVtIGNvcnJlY3RseSwgYW5kIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ5NywiT3V0cHV0VG9rZW5zIjoyMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NTA6MDkuNDc5MDgzODU5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKCkgdG8gaGFuZGxlIC1FQlVTWSByZXR1cm5zIGZyb20gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIGJ5IHdhaXRpbmcgZm9yIHRoZSBjb21taXR0aW5nIHRyYW5zYWN0aW9uIHZpYSBqYmQyX2xvZ193YWl0X2NvbW1pdCgpIGluIGEgbG9vcC5cXG5cXG5BbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgaW4gdGhlIHBhdGNoIChyZXQsIGhhc190cmFuc2FjdGlvbiwgY29tbWl0X3RpZCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2U6IGhhc190cmFuc2FjdGlvbiBpcyBleHBsaWNpdGx5IHNldCB0byBmYWxzZSwgYW5kIGNvbW1pdF90aWQgaXMgb25seSByZWFkIHdoZW4gaGFzX3RyYW5zYWN0aW9uIGlzIHRydWUgKHdoZXJlIGl0IGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBiZWVuIHNldCkuIE5vIG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGNvcGllcywgcGFkZGluZywgb3IgdXNlci1zcGFjZSB0cmFuc2ZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBjb25jdXJyZW5jeSwgZGVhZGxvY2ssIG9yIGxpdmVsb2NrIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbG9vcCBvciB3YWl0aW5nIG9uIHRyYW5zYWN0aW9ucyBhcmUgd2l0aGluIHRoZSBkb21haW4gb2YgTE9DS0RFUCBhbmQgaGFuZy93YXRjaGRvZyBkZXRlY3RvcnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKCkgdG8gaGFuZGxlIC1FQlVTWSByZXR1cm5zIGZyb20gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIGJ5IHdhaXRpbmcgZm9yIHRoZSBjb21taXR0aW5nIHRyYW5zYWN0aW9uIHZpYSBqYmQyX2xvZ193YWl0X2NvbW1pdCgpIGluIGEgbG9vcC5cXG5cXG5BbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgaW4gdGhlIHBhdGNoIChyZXQsIGhhc190cmFuc2FjdGlvbiwgY29tbWl0X3RpZCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2U6IGhhc190cmFuc2FjdGlvbiBpcyBleHBsaWNpdGx5IHNldCB0byBmYWxzZSwgYW5kIGNvbW1pdF90aWQgaXMgb25seSByZWFkIHdoZW4gaGFzX3RyYW5zYWN0aW9uIGlzIHRydWUgKHdoZXJlIGl0IGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBiZWVuIHNldCkuIE5vIG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGNvcGllcywgcGFkZGluZywgb3IgdXNlci1zcGFjZSB0cmFuc2ZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBjb25jdXJyZW5jeSwgZGVhZGxvY2ssIG9yIGxpdmVsb2NrIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbG9vcCBvciB3YWl0aW5nIG9uIHRyYW5zYWN0aW9ucyBhcmUgd2l0aGluIHRoZSBkb21haW4gb2YgTE9DS0RFUCBhbmQgaGFuZy93YXRjaGRvZyBkZXRlY3RvcnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd529s[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 02:23:50 +0000 UTC FinishedAt: 2026-09-14 02:50:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3783364ce6f883b5020b031e65cab6d3cd450b82", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3783364ce6f883b5020b031e65cab6d3cd450b82", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "126d126d-97cc-4859-8fa6-8ce03046af1a" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_journalled_invalidate_folio", "__ext4_journalled_invalidate_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "3783364ce6f883b5020b031e65cab6d3cd450b82", "base_tree": "torvalds" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAyOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIHRvIGhhbmRsZSAtRUJVU1kgcmV0dXJucyBmcm9tIF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oKSBieSB3YWl0aW5nIGZvciB0aGUgY29tbWl0dGluZyB0cmFuc2FjdGlvbiB2aWEgamJkMl9sb2dfd2FpdF9jb21taXQoKSBpbiBhIGxvb3AuXG5cbkFsbCBsb2NhbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBpbiB0aGUgcGF0Y2ggKHJldCwgaGFzX3RyYW5zYWN0aW9uLCBjb21taXRfdGlkKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZTogaGFzX3RyYW5zYWN0aW9uIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlLCBhbmQgY29tbWl0X3RpZCBpcyBvbmx5IHJlYWQgd2hlbiBoYXNfdHJhbnNhY3Rpb24gaXMgdHJ1ZSAod2hlcmUgaXQgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGJlZW4gc2V0KS4gTm8gbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgY29waWVzLCBwYWRkaW5nLCBvciB1c2VyLXNwYWNlIHRyYW5zZmVycyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IGNvbmN1cnJlbmN5LCBkZWFkbG9jaywgb3IgbGl2ZWxvY2sgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBsb29wIG9yIHdhaXRpbmcgb24gdHJhbnNhY3Rpb25zIGFyZSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBMT0NLREVQIGFuZCBoYW5nL3dhdGNoZG9nIGRldGVjdG9ycywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyBpbiBmcy9leHQ0L2lub2RlLmMsIHJlcGxhY2luZyBhbiBhc3NlcnRpb24gd2l0aCBhIHJldHJ5IGxvb3AgdGhhdCBzeW5jaHJvbml6ZXMgd2l0aCBKQkQyIHRyYW5zYWN0aW9ucyB3aGVuIF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8gcmV0dXJucyAtRUJVU1kuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGZvbGlvIGludmFsaWRhdGlvbiBvcGVyYXRpb25zIChzdWNoIGFzIHRydW5jYXRlIG9yIGhvbGUgcHVuY2hpbmcpIG9uIGV4dDQgaW5vZGVzIHdpdGggZGF0YSBqb3VybmFsbGluZyBlbmFibGVkLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uLCBkZWFkbG9ja3MsIG9yIGluZmluaXRlIGxvb3BzIGlmIGEgdHJhbnNhY3Rpb24gY29tbWl0IGlzIHBlbmRpbmcgb3IgbWlzc2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDkzOGQ4ZTM1MmZlODBlNTIxYTdhZTRkN2I2OWQ5NjdjOTlkMTY3NWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAwMjo0ODowOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGMyYzJkNmFjN2YzZDEuLjZiYjk0YWZkNTEwMDYgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5vZGUuY1xuQEAgLTM0MjksNyAmIzQzOzM0MjksMjcgQEAgc3RhdGljIHZvaWQgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0XHRcdFx0ICAgc2l6ZV90IG9mZnNldCxcbiBcdFx0XHRcdFx0ICAgc2l6ZV90IGxlbmd0aClcbiB7XG4tXHRXQVJOX09OKF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCwgbGVuZ3RoKSBcdTAwM2MgMCk7XG4mIzQzO1x0dGlkX3QgY29tbWl0X3RpZDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGJvb2wgaGFzX3RyYW5zYWN0aW9uO1xuJiM0MztcdGpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfSk9VUk5BTChmb2xpby1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3QpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoMSkge1xuJiM0MztcdFx0cmV0ID0gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xuJiM0MztcdFx0aWYgKHJldCAhPSAtRUJVU1kpIHtcbiYjNDM7XHRcdFx0V0FSTl9PTihyZXQgXHUwMDNjIDApO1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRoYXNfdHJhbnNhY3Rpb24gPSBmYWxzZTtcbiYjNDM7XHRcdHJlYWRfbG9jayhcdTAwMjZqb3VybmFsLVx1MDAzZWpfc3RhdGVfbG9jayk7XG4mIzQzO1x0XHRpZiAoam91cm5hbC1cdTAwM2VqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24pIHtcbiYjNDM7XHRcdFx0Y29tbWl0X3RpZCA9IGpvdXJuYWwtXHUwMDNlal9jb21taXR0aW5nX3RyYW5zYWN0aW9uLVx1MDAzZXRfdGlkO1xuJiM0MztcdFx0XHRoYXNfdHJhbnNhY3Rpb24gPSB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmVhZF91bmxvY2soXHUwMDI2am91cm5hbC1cdTAwM2VqX3N0YXRlX2xvY2spO1xuJiM0MztcdFx0aWYgKGhhc190cmFuc2FjdGlvbilcbiYjNDM7XHRcdFx0amJkMl9sb2dfd2FpdF9jb21taXQoam91cm5hbCwgY29tbWl0X3RpZCk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgYm9vbCBleHQ0X3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3Qgd2FpdClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8mIzM0OywKICAgICYjMzQ7X19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyBpbiBmcy9leHQ0L2lub2RlLmMsIHJlcGxhY2luZyBhbiBhc3NlcnRpb24gd2l0aCBhIHJldHJ5IGxvb3AgdGhhdCBzeW5jaHJvbml6ZXMgd2l0aCBKQkQyIHRyYW5zYWN0aW9ucyB3aGVuIF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8gcmV0dXJucyAtRUJVU1kuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGZvbGlvIGludmFsaWRhdGlvbiBvcGVyYXRpb25zIChzdWNoIGFzIHRydW5jYXRlIG9yIGhvbGUgcHVuY2hpbmcpIG9uIGV4dDQgaW5vZGVzIHdpdGggZGF0YSBqb3VybmFsbGluZyBlbmFibGVkLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uLCBkZWFkbG9ja3MsIG9yIGluZmluaXRlIGxvb3BzIGlmIGEgdHJhbnNhY3Rpb24gY29tbWl0IGlzIHBlbmRpbmcgb3IgbWlzc2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkzOGQ4ZTM1MmZlODBlNTIxYTdhZTRkN2I2OWQ5NjdjOTlkMTY3NWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAwMjo0ODowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCBjMmMyZDZhYzdmM2QxLi42YmI5NGFmZDUxMDA2IDEwMDY0NAotLS0gYS9mcy9leHQ0L2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jCkBAIC0zNDI5LDcgJiM0MzszNDI5LDI3IEBAIHN0YXRpYyB2b2lkIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCQkJCSAgIHNpemVfdCBvZmZzZXQsCiAJCQkJCSAgIHNpemVfdCBsZW5ndGgpCiB7Ci0JV0FSTl9PTihfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCkgJmx0OyAwKTsKJiM0MzsJdGlkX3QgY29tbWl0X3RpZDsKJiM0MzsJaW50IHJldDsKJiM0MzsJYm9vbCBoYXNfdHJhbnNhY3Rpb247CiYjNDM7CWpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfSk9VUk5BTChmb2xpby0mZ3Q7bWFwcGluZy0mZ3Q7aG9zdCk7CiYjNDM7CiYjNDM7CXdoaWxlICgxKSB7CiYjNDM7CQlyZXQgPSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7CiYjNDM7CQlpZiAocmV0ICE9IC1FQlVTWSkgewomIzQzOwkJCVdBUk5fT04ocmV0ICZsdDsgMCk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwkJaGFzX3RyYW5zYWN0aW9uID0gZmFsc2U7CiYjNDM7CQlyZWFkX2xvY2soJmFtcDtqb3VybmFsLSZndDtqX3N0YXRlX2xvY2spOwomIzQzOwkJaWYgKGpvdXJuYWwtJmd0O2pfY29tbWl0dGluZ190cmFuc2FjdGlvbikgewomIzQzOwkJCWNvbW1pdF90aWQgPSBqb3VybmFsLSZndDtqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24tJmd0O3RfdGlkOwomIzQzOwkJCWhhc190cmFuc2FjdGlvbiA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CQlyZWFkX3VubG9jaygmYW1wO2pvdXJuYWwtJmd0O2pfc3RhdGVfbG9jayk7CiYjNDM7CQlpZiAoaGFzX3RyYW5zYWN0aW9uKQomIzQzOwkJCWpiZDJfbG9nX3dhaXRfY29tbWl0KGpvdXJuYWwsIGNvbW1pdF90aWQpOwomIzQzOwl9CiB9CiAKIHN0YXRpYyBib29sIGV4dDRfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCB3YWl0KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDgxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcGxheWluZyB0aGUgcm9sZSBvZiBhbiBleHBlcnQ6CgoqKkFuYWx5emluZyB0aGUgRXh0NCBKb3VybmFsbGVkIEludmFsaWRhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgY2hhbmdlIGlzIHR1Y2tlZCBhd2F5IGluIGBmcy9leHQ0L2lub2RlLmNgLCBzcGVjaWZpY2FsbHkgd2l0aCBhIG1vZGlmaWNhdGlvbiB0byBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gLiBSaWdodCwgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIGpvdXJuYWwtcmVsYXRlZCBmb2xpbyBoYW5kbGluZy4gTGV0JiMzOTtzIGdldCBjcmFja2luZy4gSSYjMzk7bSBnb2luZyB0byBncmFiIHRoZSBwYXRjaCBhbmQgdGhhdCBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlLiBJ4oCZbGwgcHJvYmFibHkgdXNlIGByZWFkLWZpbGVgIHRvIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZiBmaXJzdCwgZ2V0IGEgZmVlbCBmb3IgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBUaGVuLCBJJiMzOTtsbCBkaXZlIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGlub2RlLmNgIHdpdGggc29tZXRoaW5nIGxpa2UgYGdyZXBwZXJgIOKAkyB0aGF0JiMzOTtzIHRoZSBiZXN0IHdheSB0byByYXBpZGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGlzIG1vZGlmaWNhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBpbnZhbGlkYXRpb24gZnVuY3Rpb24gbmVlZGVkIGFkanVzdG1lbnQg4oCTIHdoYXQgc2NlbmFyaW8gaXMgYmVpbmcgYWRkcmVzc2VkPyBJcyBpdCByZWxhdGVkIHRvIGEgc3BlY2lmaWMgYnVnLCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yIG5ldyBmZWF0dXJlPyBHb3R0YSBnZXQgdGhlIGZ1bGwgcGljdHVyZSBiZWZvcmUgSSBjYW4ganVkZ2UgaXRzIHF1YWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM0MTU6XHRcbjM0MTY6XHRcdHRyYWNlX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG4zNDE3Olx0XG4zNDE4Olx0XHQvKlxuMzQxOTpcdFx0ICogSWYgaXQmIzM5O3MgYSBmdWxsIHRydW5jYXRlIHdlIGp1c3QgZm9yZ2V0IGFib3V0IHRoZSBwZW5kaW5nIGRpcnR5aW5nXG4zNDIwOlx0XHQgKi9cbjM0MjE6XHRcdGlmIChvZmZzZXQgPT0gMCBcdTAwMjZcdTAwMjYgbGVuZ3RoID09IGZvbGlvX3NpemUoZm9saW8pKVxuMzQyMjpcdFx0XHRmb2xpb19jbGVhcl9jaGVja2VkKGZvbGlvKTtcbjM0MjM6XHRcbjM0MjQ6XHRcdHJldHVybiBqYmQyX2pvdXJuYWxfaW52YWxpZGF0ZV9mb2xpbyhqb3VybmFsLCBmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xuMzQyNTpcdH1cbjM0MjY6XHRcbjM0Mjc6XHQvKiBXcmFwcGVyIGZvciBhb3BzLi4uICovXG4zNDI4Olx0c3RhdGljIHZvaWQgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbjM0Mjk6XHRcdFx0XHRcdFx0ICAgc2l6ZV90IG9mZnNldCxcbjM0MzA6XHRcdFx0XHRcdFx0ICAgc2l6ZV90IGxlbmd0aClcbjM0MzE6XHR7XG4zNDMyOlx0XHR0aWRfdCBjb21taXRfdGlkO1xuMzQzMzpcdFx0aW50IHJldDtcbjM0MzQ6XHRcdGJvb2wgaGFzX3RyYW5zYWN0aW9uO1xuMzQzNTpcdFx0am91cm5hbF90ICpqb3VybmFsID0gRVhUNF9KT1VSTkFMKGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdCk7XG4zNDM2Olx0XG4zNDM3Olx0XHR3aGlsZSAoMSkge1xuMzQzODpcdFx0XHRyZXQgPSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG4zNDM5Olx0XHRcdGlmIChyZXQgIT0gLUVCVVNZKSB7XG4zNDQwOlx0XHRcdFx0V0FSTl9PTihyZXQgXHUwMDNjIDApO1xuMzQ0MTpcdFx0XHRcdHJldHVybjtcbjM0NDI6XHRcdFx0fVxuMzQ0MzpcdFx0XHRoYXNfdHJhbnNhY3Rpb24gPSBmYWxzZTtcbjM0NDQ6XHRcdFx0cmVhZF9sb2NrKFx1MDAyNmpvdXJuYWwtXHUwMDNlal9zdGF0ZV9sb2NrKTtcbjM0NDU6XHRcdFx0aWYgKGpvdXJuYWwtXHUwMDNlal9jb21taXR0aW5nX3RyYW5zYWN0aW9uKSB7XG4zNDQ2Olx0XHRcdFx0Y29tbWl0X3RpZCA9IGpvdXJuYWwtXHUwMDNlal9jb21taXR0aW5nX3RyYW5zYWN0aW9uLVx1MDAzZXRfdGlkO1xuMzQ0NzpcdFx0XHRcdGhhc190cmFuc2FjdGlvbiA9IHRydWU7XG4zNDQ4Olx0XHRcdH1cbjM0NDk6XHRcdFx0cmVhZF91bmxvY2soXHUwMDI2am91cm5hbC1cdTAwM2VqX3N0YXRlX2xvY2spO1xuMzQ1MDpcdFx0XHRpZiAoaGFzX3RyYW5zYWN0aW9uKVxuMzQ1MTpcdFx0XHRcdGpiZDJfbG9nX3dhaXRfY29tbWl0KGpvdXJuYWwsIGNvbW1pdF90aWQpO1xuMzQ1MjpcdFx0fVxuMzQ1MzpcdH1cbjM0NTQ6XHRcbjM0NTU6XHRzdGF0aWMgYm9vbCBleHQ0X3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3Qgd2FpdClcbjM0NTY6XHR7XG4zNDU3Olx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0O1xuMzQ1ODpcdFx0am91cm5hbF90ICpqb3VybmFsID0gRVhUNF9KT1VSTkFMKGlub2RlKTtcbjM0NTk6XHRcbjM0NjA6XHRcdHRyYWNlX2V4dDRfcmVsZWFzZV9mb2xpbyhpbm9kZSwgZm9saW8pO1xuMzQ2MTpcdFxuMzQ2MjpcdFx0LyogUGFnZSBoYXMgZGlydHkgam91cm5hbGxlZCBkYXRhIC1cdTAwM2UgY2Fubm90IHJlbGVhc2UgKi9cbjM0NjM6XHRcdGlmIChmb2xpb190ZXN0X2NoZWNrZWQoZm9saW8pKVxuMzQ2NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBleHQ0IERhdGEgSm91cm5hbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gLi4uIHJpZ2h0LCB0aGF0JiMzOTtzIGluIGBmcy9leHQ0L2lub2RlLmNgLCBzbyBpdCYjMzk7cyBleHQ0LXNwZWNpZmljIGFuZCwgY3J1Y2lhbGx5LCBpdCYjMzk7cyByZWxldmFudCB3aGVuIGRhdGEgam91cm5hbGluZyAoYGRhdGE9am91cm5hbGApIGlzIGVuYWJsZWQuIEdvb2QsIGJlY2F1c2UgZXh0NCBpcyBhIHdvcmtob3JzZSwgYSBjb3JlIGZpbGVzeXN0ZW0sIGFuZCBpdCYjMzk7cyBzb21ldGhpbmcgd2UgKmNhbiogaGl0IHJlbGlhYmx5IHdpdGggUUVNVSwgR0NFLCBhbmQgb2YgY291cnNlLCBzeXprYWxsZXIuIFRoYXQgbWVhbnMgd2UgaGF2ZSBhIHZpYWJsZSBmdXp6aW5nIHRhcmdldC4KCk5vdywgdGhpcyBwYXRjaCBtb2RpZmllcyBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gLCB3aGljaCBzZWVtcyB0byBiZSBsb29waW5nIHdoaWxlIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCByZXR1cm5zIGAtRUJVU1lgLiBJdCYjMzk7cyB3YWl0aW5nIGZvciBgal9jb21taXR0aW5nX3RyYW5zYWN0aW9uYCB0byBmaW5pc2ggdXAuIEhvbGQgb24uLi4gdGhlcmUmIzM5O3MgYSBwb3RlbnRpYWwgaXNzdWUuIFdoYXQgaWYgYF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIHJldHVybnMgYC1FQlVTWWAsICpidXQqIGBoYXNfdHJhbnNhY3Rpb25gIGlzICpmYWxzZSo/CgpMZXQgbWUgbG9vayBhdCB0aGF0IGxvb3AgYWdhaW46CgpgYGBjCgl3aGlsZSAoMSkgewoJCXJldCA9IF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCwgbGVuZ3RoKTsKCQlpZiAocmV0ICE9IC1FQlVTWSkgewoJCQlXQVJOX09OKHJldCAmbHQ7IDApOwoJCQlyZXR1cm47CgkJfQoJCWhhc190cmFuc2FjdGlvbiA9IGZhbHNlOwoJCXJlYWRfbG9jaygmYW1wO2pvdXJuYWwtJmd0O2pfc3RhdGVfbG9jayk7CgkJaWYgKGpvdXJuYWwtJmd0O2pfY29tbWl0dGluZ190cmFuc2FjdGlvbikgewoJCQljb21taXRfdGlkID0gam91cm5hbC0mZ3Q7al9jb21taXR0aW5nX3RyYW5zYWN0aW9uLSZndDt0X3RpZDsKCQkJaGFzX3RyYW5zYWN0aW9uID0gdHJ1ZTsKCQl9CgkJcmVhZF91bmxvY2soJmFtcDtqb3VybmFsLSZndDtqX3N0YXRlX2xvY2spOwoJCWlmIChoYXNfdHJhbnNhY3Rpb24pCgkJCWpiZDJfbG9nX3dhaXRfY29tbWl0KGpvdXJuYWwsIGNvbW1pdF90aWQpOwoJfQpgYGAKCk9rYXksIEkgc2VlIGl0LiBJZiBgaGFzX3RyYW5zYWN0aW9uYCBpcyBmYWxzZSwgdGhpcyBsb29wIHdpbGwganVzdCAqYnVzeSB3YWl0KiB3aXRob3V0IHlpZWxkaW5nIG9yIHNsZWVwaW5nLiBUaGF0JiMzOTtzIGEgaHVnZSByZWQgZmxhZy4gQSBidXN5IGxvb3AgaW4gdGhlIGtlcm5lbCBpcyBuZXZlciBnb29kLiBPciB3aGF0IGlmIGBqYmQyYCBpdHNlbGYgcmV0dXJucyBgLUVCVVNZYCBpbiBhIGRpZmZlcmVudCBzY2VuYXJpbz8gQWxzbywgdGhpcyBzdHJ1Y3R1cmUgaXMgYSB0aWNraW5nIHRpbWUgYm9tYiBmb3IgcG90ZW50aWFsIGRlYWRsb2NrLCBpbmZpbml0ZSBsb29wcywgb3IgZXZlbiBsb2NrZGVwIGlzc3Vlcy4KClRoaXMgbG9va3MgbGlrZSBpdOKAmXMgc2NyZWFtaW5nIGZvciBmdXp6aW5nLiBEZWZpbml0ZWx5IHdvcnRoIHRoZSBlZmZvcnQuIE5vdywgbGV04oCZcyBzZWUgd2hlcmUgYGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCBpcyBhY3R1YWxseSB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2lub2RlLmM9MzQwMD1zdGF0aWMgdm9pZCBleHQ0X2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcbi0tXG5mcy9leHQ0L2lub2RlLmMtMzQxMC1cbmZzL2V4dDQvaW5vZGUuYzozNDExOnN0YXRpYyBpbnQgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuZnMvZXh0NC9pbm9kZS5jLTM0MTItXHRcdFx0XHRcdCAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy0zNDE1LVxuZnMvZXh0NC9pbm9kZS5jOjM0MTY6XHR0cmFjZV9leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xuZnMvZXh0NC9pbm9kZS5jLTM0MTctXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTM0MjctLyogV3JhcHBlciBmb3IgYW9wcy4uLiAqL1xuZnMvZXh0NC9pbm9kZS5jOjM0Mjg6c3RhdGljIHZvaWQgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbmZzL2V4dDQvaW5vZGUuYy0zNDI5LVx0XHRcdFx0XHQgICBzaXplX3Qgb2Zmc2V0LFxuLS1cbmZzL2V4dDQvaW5vZGUuYy0zNDM3LVx0d2hpbGUgKDEpIHtcbmZzL2V4dDQvaW5vZGUuYzozNDM4Olx0XHRyZXQgPSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG5mcy9leHQ0L2lub2RlLmMtMzQzOS1cdFx0aWYgKHJldCAhPSAtRUJVU1kpIHtcbi0tXG5mcy9leHQ0L2lub2RlLmM9Mzk4NT1zdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBleHQ0X2pvdXJuYWxsZWRfYW9wcyA9IHtcbi0tXG5mcy9leHQ0L2lub2RlLmMtMzk5Mi1cdC5ibWFwXHRcdFx0PSBleHQ0X2JtYXAsXG5mcy9leHQ0L2lub2RlLmM6Mzk5MzpcdC5pbnZhbGlkYXRlX2ZvbGlvXHQ9IGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvLFxuZnMvZXh0NC9pbm9kZS5jLTM5OTQtXHQucmVsZWFzZV9mb2xpb1x0XHQ9IGV4dDRfcmVsZWFzZV9mb2xpbyxcbi0tXG5mcy9leHQ0L2lub2RlLmM9NTc4MD1pbnQgZXh0NF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTgzMC0vKlxuZnMvZXh0NC9pbm9kZS5jOjU4MzE6ICogSW4gZGF0YT1qb3VybmFsIG1vZGUgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oKSBtYXkgZmFpbCB0byBpbnZhbGlkYXRlXG5mcy9leHQ0L2lub2RlLmMtNTgzMi0gKiBidWZmZXJzIHRoYXQgYXJlIGF0dGFjaGVkIHRvIGEgZm9saW8gc3RyYWRkbGluZyBpX3NpemUgYW5kIGFyZSB1bmRlcmdvaW5nXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTU4MzU9c3RhdGljIHZvaWQgZXh0NF93YWl0X2Zvcl90YWlsX3BhZ2VfY29tbWl0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTU4NDUtXHQgKiBJZiB0aGUgZm9saW8gaXMgZnVsbHkgdHJ1bmNhdGVkLCB3ZSBkb24mIzM5O3QgbmVlZCB0byB3YWl0IGZvciBhbnkgY29tbWl0XG5mcy9leHQ0L2lub2RlLmM6NTg0NjpcdCAqIChhbmQgd2UgZXZlbiBzaG91bGQgbm90IGFzIF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oKSBtYXlcbmZzL2V4dDQvaW5vZGUuYy01ODQ3LVx0ICogc3RyaXAgYWxsIGJ1ZmZlcnMgZnJvbSB0aGUgZm9saW8gYnV0IGtlZXAgdGhlIGZvbGlvIGRpcnR5IHdoaWNoIGNhbiB0aGVuXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTU4NTktXHRcdFx0cmV0dXJuO1xuZnMvZXh0NC9pbm9kZS5jOjU4NjA6XHRcdHJldCA9IF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCxcbmZzL2V4dDQvaW5vZGUuYy01ODYxLVx0XHRcdFx0XHRcdGZvbGlvX3NpemUoZm9saW8pIC0gb2Zmc2V0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTE3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIGZvciBTeXprYWxsZXIgVGFyZ2V0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gLCB3aGljaCBpcyBhIGZ1bmN0aW9uIHVzZWQgYXMgdGhlIGBpbnZhbGlkYXRlX2ZvbGlvYCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbiBpbiBgZXh0NF9qb3VybmFsbGVkX2FvcHNgLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQmIzM5O3Mgc3RhdGljLiBZZXMsIGl0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgLiBOb3csIHRoZSBrZXkgcXVlc3Rpb246IGNhbiBTeXprYWxsZXIgZGlyZWN0bHkgdGFyZ2V0IHRoaXMgZnVuY3Rpb24/CgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGxvb2sgZm9yIGNsdWVzIGluIG15IHBhc3QgZXhwZXJpZW5jZSB3aXRoIHN0YXRpYyBmdW5jdGlvbnMgYW5kIFN5emthbGxlci4gSG1tLCBTZWN0aW9uIDQgb2YgbXkgbm90ZXMgb24gdGhlIHN1YmplY3QgdGFsa3MgYWJvdXQgaG93IGNvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyBpbiBoZWFkZXJzIGRvbiYjMzk7dCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gYHZtbGludXhgLCBzbyB0aGV5IGFyZSBtaXNzZWQgYnkgU3l6a2FsbGVyJiMzOTtzIHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLiBCdXQsIHdhaXQuLi4gYGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCByZXNpZGVzIGluIGBmcy9leHQ0L2lub2RlLmNgLCBub3QgYSBoZWFkZXIuIERvZXMgdGhhdCBtZWFuIGl0JiMzOTtzIGlubGluZWQsIG9yIGlzIGl0IGEgc2VwYXJhdGUgc3ltYm9sIGluIHRoZSBrZXJuZWw/CgpBaCwgcmlnaHQsIG5vdyBJIHJlbWVtYmVyLiBJdCYjMzk7cyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlcjogYC5pbnZhbGlkYXRlX2ZvbGlvID0gZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8sYC4gU2luY2UgdGhlIGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uIGlzIHRha2VuIChgJmFtcDtleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2ApLCB0aGUgY29tcGlsZXIgKmNhbm5vdCogaW5saW5lIGl0LiBUaGUgY29tcGlsZXIgKm11c3QqIGFsbG9jYXRlIGEgc3ltYm9sIGVudHJ5IGZvciB0aGUgZnVuY3Rpb24gd2l0aGluIGB2bWxpbnV4YCEgVGhlcmVmb3JlLCBpdCBzaG91bGQgYmUgdGFyZ2V0YWJsZS4gTm93LCB0aGVyZSBtaWdodCBiZSBhIHNpbWlsYXIgaXNzdWUgd2l0aCBgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgYnV0IHRoYXQgaXMgYSBzZWNvbmRhcnkgY29uc2lkZXJhdGlvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IHRoYXQgaXMgcHJvcGVybHkgYWNjb3VudGVkIGZvciBpbiB0aGUgY2hlY2suCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBLY29uZmlnIGZvciBleHQ0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBvcHRpb25zIGFyZSBlbmFibGVkIHRvIG1ha2Ugc3VyZSB0aGUgc3ltYm9sIGlzIHByZXNlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVYVDRfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg2OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBleHQ0IEtjb25maWcgRmlsZSoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgZnMvZXh0NC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gc29tZSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGluaXRpYWwgcGFydCBvZiB0aGUgZmlsZSwgcm91Z2hseSBhcm91bmQgbGluZXMgMSB0byAzMC4gVGhlcmUmIzM5O3MgcHJvYmFibHkgc29tZXRoaW5nIHNwZWNpZmljIEkmIzM5O20gbG9va2luZyBmb3IgdGhlcmUg4oCTIHBlcmhhcHMgYSBkZXBlbmRlbmN5IGNoZWNrIG9yIGEgZGVmYXVsdCBzZXR0aW5nIEkgd2FudCB0byBjb25maXJtLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhvc2UgZmlyc3QgZmV3IGxpbmVzIGFuZCBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbi4gSSYjMzk7bSBob3BpbmcgSSBjYW4gemVybyBpbiBvbiBpdCBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBFWFQ0X0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuICAgNDpcdFx0c2VsZWN0IEJVRkZFUl9IRUFEXG4gICA1Olx0XHRzZWxlY3QgSkJEMlxuICAgNjpcdFx0c2VsZWN0IENSQzE2XG4gICA3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgIDg6XHRcdHNlbGVjdCBGU19JT01BUFxuICAgOTpcdFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFRoaXMgaXMgdGhlIG5leHQgZ2VuZXJhdGlvbiBvZiB0aGUgZXh0MyBmaWxlc3lzdGVtLlxuICAxMjpcdFxuICAxMzpcdFx0ICBVbmxpa2UgdGhlIGNoYW5nZSBmcm9tIGV4dDIgZmlsZXN5c3RlbSB0byBleHQzIGZpbGVzeXN0ZW0sXG4gIDE0Olx0XHQgIHRoZSBvbi1kaXNrIGZvcm1hdCBvZiBleHQ0IGlzIG5vdCBmb3J3YXJkcyBjb21wYXRpYmxlIHdpdGhcbiAgMTU6XHRcdCAgZXh0MzsgaXQgaXMgYmFzZWQgb24gZXh0ZW50IG1hcHMgYW5kIGl0IHN1cHBvcnRzIDQ4LWJpdFxuICAxNjpcdFx0ICBwaHlzaWNhbCBibG9jayBudW1iZXJzLiAgVGhlIGV4dDQgZmlsZXN5c3RlbSBhbHNvIHN1cHBvcnRzIGRlbGF5ZWRcbiAgMTc6XHRcdCAgYWxsb2NhdGlvbiwgcGVyc2lzdGVudCBwcmVhbGxvY2F0aW9uLCBoaWdoIHJlc29sdXRpb24gdGltZSBzdGFtcHMsXG4gIDE4Olx0XHQgIGFuZCBhIG51bWJlciBvZiBvdGhlciBmZWF0dXJlcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCBzcGVlZFxuICAxOTpcdFx0ICB1cCBmc2NrIHRpbWUuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSB0aGUgd2ViIHBhZ2VzIGF0XG4gIDIwOlx0XHQgIGh0dHA6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy5cbiAgMjE6XHRcbiAgMjI6XHRcdCAgVGhlIGV4dDQgZmlsZXN5c3RlbSBzdXBwb3J0cyBtb3VudGluZyBhbiBleHQzIGZpbGVzeXN0ZW07IHdoaWxlIHRoZXJlXG4gIDIzOlx0XHQgIGFyZSBzb21lIHBlcmZvcm1hbmNlIGdhaW5zIGZyb20gdGhlIGRlbGF5ZWQgYWxsb2NhdGlvbiBhbmQgaW5vZGVcbiAgMjQ6XHRcdCAgdGFibGUgcmVhZGFoZWFkLCB0aGUgYmVzdCBwZXJmb3JtYW5jZSBnYWlucyByZXF1aXJlIGVuYWJsaW5nIGV4dDRcbiAgMjU6XHRcdCAgZmVhdHVyZXMgaW4gdGhlIGZpbGVzeXN0ZW0gdXNpbmcgdHVuZTJmcywgb3IgZm9ybWF0dGluZyBhIG5ld1xuICAyNjpcdFx0ICBmaWxlc3lzdGVtIGFzIGFuIGV4dDQgZmlsZXN5c3RlbSBpbml0aWFsbHkuIFdpdGhvdXQgZXhwbGljaXQgZW5hYmxpbmdcbiAgMjc6XHRcdCAgb2YgZXh0NCBmZWF0dXJlcywgdGhlIG9uIGRpc2sgZmlsZXN5c3RlbSBmb3JtYXQgc3RheXMgZnVsbHkgYmFja3dhcmRcbiAgMjg6XHRcdCAgY29tcGF0aWJsZS5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZVxuICAzMTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZXh0NC5cbiAgMzI6XHRcbiAgMzM6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU5MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgRVhUNCBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKgoKT2theSwgc28gdGhlIGJhc2UgY29uZmlndXJhdGlvbiBJJiMzOTttIGxvb2tpbmcgYXQgaGVyZSBpcyBgRVhUNF9GU2AuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZSBmdW5jdGlvbiBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIHdpdGhpbiB0aGUgRVhUNCBmaWxlc3lzdGVtIGNvZGUgaGFzIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gU3BlY2lmaWNhbGx5LCBhcmUgdGhlcmUgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGF0IGZ1bmN0aW9uIHRvIGV2ZW4gYmUgY29tcGlsZWQgb3IgY29uc2lkZXJlZD8gTGV0JiMzOTtzIGRyaWxsIGludG8gdGhlIGBmcy9leHQ0L01ha2VmaWxlYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIHJlbGF0ZWQgdG8gdGhhdCBmdW5jdGlvbi4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUsIG9mIGNvdXJzZS4gSSYjMzk7bGwgcXVpY2tseSBjaGVjayBmb3IgYW55IHJlbGF0ZWQgYCNpZmRlZmAgb3Igc2ltaWxhciBjb25zdHJ1Y3RzLiBUaGlzIGlzIHdoZXJlIHRoZSBhbnN3ZXIgdHlwaWNhbGx5IHJlc2lkZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGV4dDQtZmlsZXN5c3RlbSByb3V0aW5lcy5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLSQoQ09ORklHX0VYVDRfRlMpICYjNDM7PSBleHQ0Lm9cbiAgIDc6XHRcbiAgIDg6XHRleHQ0LXlcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXG4gICA5Olx0XHRcdGV4dGVudHNfc3RhdHVzLm8gZmlsZS5vIGZzbWFwLm8gZnN5bmMubyBoYXNoLm8gaWFsbG9jLm8gXFxcbiAgMTA6XHRcdFx0aW5kaXJlY3QubyBpbmxpbmUubyBpbm9kZS5vIGlvY3RsLm8gbWJhbGxvYy5vIG1pZ3JhdGUubyBcXFxuICAxMTpcdFx0XHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcbiAgMTI6XHRcdFx0c3VwZXIubyBzeW1saW5rLm8gc3lzZnMubyB4YXR0ci5vIHhhdHRyX2h1cmQubyB4YXR0cl90cnVzdGVkLm8gXFxcbiAgMTM6XHRcdFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cbiAgMTQ6XHRcbiAgMTU6XHRleHQ0LSQoQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMKVx0JiM0Mzs9IGFjbC5vXG4gIDE2Olx0ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZKVx0XHQmIzQzOz0geGF0dHJfc2VjdXJpdHkub1xuICAxNzpcdGV4dDQtdGVzdC1vYmpzXHRcdFx0XHQmIzQzOz0gaW5vZGUtdGVzdC5vIG1iYWxsb2MtdGVzdC5vIFxcXG4gIDE4Olx0XHRcdFx0XHRcdCAgIGV4dGVudHMtdGVzdC5vXG4gIDE5Olx0b2JqLSQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXHRcdCYjNDM7PSBleHQ0LXRlc3Qub1xuICAyMDpcdGV4dDQtJChDT05GSUdfRlNfVkVSSVRZKVx0XHQmIzQzOz0gdmVyaXR5Lm9cbiAgMjE6XHRleHQ0LSQoQ09ORklHX0ZTX0VOQ1JZUFRJT04pXHRcdCYjNDM7PSBjcnlwdG8ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjUxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRVhUNCBKb3VybmFsaW5nIEludmFsaWRhdGlvbioqCgpPa2F5LCBzbyBgaW5vZGUub2AgaW4gYGV4dDQteWAgaXMgY29udGluZ2VudCBvbiBgQ09ORklHX0VYVDRfRlNgLiBUaGF0IG1ha2VzIHNlbnNlLiBgQ09ORklHX0VYVDRfRlNgIHB1bGxzIGluIGBKQkQyYCBhbmQgYEJVRkZFUl9IRUFEYCDigJMgdGhlIHVzdWFsIHN1c3BlY3RzLiBJIGRvbiYjMzk7dCB0aGluayB0aGVyZSYjMzk7cyBhbnl0aGluZyB1bnVzdWFsIGNvbmZpZy13aXNlIGZvciBkYXRhIGpvdXJuYWxpbmc7IGl0JiMzOTtzIGp1c3QgdGhlIGBkYXRhPWpvdXJuYWxgIG1vdW50IG9wdGlvbiBvciB1c2luZyBgY2hhdHRyICYjNDM7amAsIGFzIGV4cGVjdGVkLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuIExldCBtZSBjaGVjayB0aGUgZ2l0IGNvbW1pdCBsb2csIHNlZSBpZiBJIGNhbiBnZXQgc29tZSBjb250ZXh0LiBIbW0sIG5vIGBnaXQgbG9nYCBhdmFpbGFibGUsIGJ1dCBJIGhhdmUgdGhlIGRpZmYuIEdvb2QgZW5vdWdoLiBJIGNhbiBzZWUgdGhlIGNvbW1pdDoKCmBgYApjb21taXQgOTM4ZDhlMzUyZmU4MGU1MjFhN2FlNGQ3YjY5ZDk2N2M5OWQxNjc1ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDAyOjQ4OjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jCmluZGV4IGMyYzJkNmFjN2YzZDEuLjZiYjk0YWZkNTEwMDYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTM0MjksNyAmIzQzOzM0MjksMjcgQEAgc3RhdGljIHZvaWQgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywKIAkJCQkJICAgc2l6ZV90IG9mZnNldCwKIAkJCQkJICAgc2l6ZV90IGxlbmd0aCkKIHsKLQlXQVJOX09OKF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCwgbGVuZ3RoKSAmbHQ7IDApOwomIzQzOwl0aWRfdCBjb21taXRfdGlkOwomIzQzOwlpbnQgcmV0OwomIzQzOwlib29sIGhhc190cmFuc2FjdGlvbjsKJiM0MzsJam91cm5hbF90ICpqb3VybmFsID0gRVhUNF9KT1VSTkFMKGZvbGlvLSZndDttYXBwaW5nLSZndDtob3N0KTsKJiM0MzsKJiM0MzsJd2hpbGUgKDEpIHsKJiM0MzsJCXJldCA9IF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCwgbGVuZ3RoKTsKJiM0MzsJCWlmIChyZXQgIT0gLUVCVVNZKSB7CiYjNDM7CQkJV0FSTl9PTihyZXQgJmx0OyAwKTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CQloYXNfdHJhbnNhY3Rpb24gPSBmYWxzZTsKJiM0MzsJCXJlYWRfbG9jaygmYW1wO2pvdXJuYWwtJmd0O2pfc3RhdGVfbG9jayk7CiYjNDM7CQlpZiAoam91cm5hbC0mZ3Q7al9jb21taXR0aW5nX3RyYW5zYWN0aW9uKSB7CiYjNDM7CQkJY29tbWl0X3RpZCA9IGpvdXJuYWwtJmd0O2pfY29tbWl0dGluZ190cmFuc2FjdGlvbi0mZ3Q7dF90aWQ7CiYjNDM7CQkJaGFzX3RyYW5zYWN0aW9uID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJCXJlYWRfdW5sb2NrKCZhbXA7am91cm5hbC0mZ3Q7al9zdGF0ZV9sb2NrKTsKJiM0MzsJCWlmIChoYXNfdHJhbnNhY3Rpb24pCiYjNDM7CQkJamJkMl9sb2dfd2FpdF9jb21taXQoam91cm5hbCwgY29tbWl0X3RpZCk7CiYjNDM7CX0KIH0KIGBgYAoKQWgsIGl0IHNlZW1zIHdlJiMzOTtyZSBoYW5kbGluZyB0aGUgY2FzZSB3aGVyZSBgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgcmV0dXJucyAtRUJVU1kuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGl0JiMzOTtzIGJ1c3kgYW5kIHdoYXQgdGhpcyB3aGlsZSBsb29wIGRvZXMuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3Mgd2FpdGluZyBmb3IgYSB0cmFuc2FjdGlvbiB0byBjb21wbGV0ZS4gU3BlY2lmaWNhbGx5IGl0IGNoZWNrcyB0byBzZWUgaWYgdGhlIGBqb3VybmFsLSZndDtqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb25gIGV4aXN0czsgaWYgaXQgZG9lcywgaXQgcmV0cmlldmVzIHRoZSBgY29tbWl0X3RpZGAgYW5kIHRoZW4gY2FsbHMgYGpiZDJfbG9nX3dhaXRfY29tbWl0YC4gT2theSwgSSB3aWxsIG5vdyBpbnZlc3RpZ2F0ZSBob3cgYF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5vZGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzQxMDpcdFxuMzQxMTpcdHN0YXRpYyBpbnQgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuMzQxMjpcdFx0XHRcdFx0XHQgICAgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aClcbjM0MTM6XHR7XG4zNDE0Olx0XHRqb3VybmFsX3QgKmpvdXJuYWwgPSBFWFQ0X0pPVVJOQUwoZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0KTtcbjM0MTU6XHRcbjM0MTY6XHRcdHRyYWNlX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG4zNDE3Olx0XG4zNDE4Olx0XHQvKlxuMzQxOTpcdFx0ICogSWYgaXQmIzM5O3MgYSBmdWxsIHRydW5jYXRlIHdlIGp1c3QgZm9yZ2V0IGFib3V0IHRoZSBwZW5kaW5nIGRpcnR5aW5nXG4zNDIwOlx0XHQgKi9cbjM0MjE6XHRcdGlmIChvZmZzZXQgPT0gMCBcdTAwMjZcdTAwMjYgbGVuZ3RoID09IGZvbGlvX3NpemUoZm9saW8pKVxuMzQyMjpcdFx0XHRmb2xpb19jbGVhcl9jaGVja2VkKGZvbGlvKTtcbjM0MjM6XHRcbjM0MjQ6XHRcdHJldHVybiBqYmQyX2pvdXJuYWxfaW52YWxpZGF0ZV9mb2xpbyhqb3VybmFsLCBmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xuMzQyNTpcdH1cbjM0MjY6XHRcbjM0Mjc6XHQvKiBXcmFwcGVyIGZvciBhb3BzLi4uICovXG4zNDI4Olx0c3RhdGljIHZvaWQgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbjM0Mjk6XHRcdFx0XHRcdFx0ICAgc2l6ZV90IG9mZnNldCxcbjM0MzA6XHRcdFx0XHRcdFx0ICAgc2l6ZV90IGxlbmd0aClcbjM0MzE6XHR7XG4zNDMyOlx0XHR0aWRfdCBjb21taXRfdGlkO1xuMzQzMzpcdFx0aW50IHJldDtcbjM0MzQ6XHRcdGJvb2wgaGFzX3RyYW5zYWN0aW9uO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDExOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGV4dDRfd2FpdF9mb3JfdGFpbF9wYWdlX2NvbW1pdGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgZXh0NF93YWl0X2Zvcl90YWlsX3BhZ2VfY29tbWl0YC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZXhhbWluZSB0aGlzIGZ1bmN0aW9uLCB3aGljaCBpcyBsb2NhdGVkIGluIGBmcy9leHQ0L2lub2RlLmNgLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgZnVuY3Rpb25zIGxpa2UgdGhlc2UsIGRlYWxpbmcgd2l0aCB0YWlsIHBhZ2UgY29tbWl0cywgYXJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBleHQ0IGZpbGVzeXN0ZW0gaGFuZGxlcyBkYXRhIHBlcnNpc3RlbmNlIGFuZCBzeW5jaHJvbml6YXRpb24gYXQgYSB2ZXJ5IGdyYW51bGFyIGxldmVsLiBJIHN1c3BlY3QgdGhpcyBpcyB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgdGFpbCBwYWdlIHdyaXRlYmFjayBwcm9jZXNzIHJlc2lkZXMuIEkgYW50aWNpcGF0ZSBpdCYjMzk7bGwgYmUgY2VudHJhbCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZmlsZXN5c3RlbSBlbnN1cmVzIGRhdGEgaW50ZWdyaXR5IHdoZW4gZGVhbGluZyB3aXRoIHBhcnRpYWxseSB3cml0dGVuIGJsb2Nrcy4gSSYjMzk7bSBrZWVuIHRvIGRpc3NlY3QgaXRzIGxvZ2ljLCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgSS9PIHBhdGguIFRoaXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvZiBleHQ0IHVuZGVyIGRpZmZlcmVudCB3b3JrbG9hZHMgYW5kIGNvbmZpZ3VyYXRpb25zLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggZnJhZ21lbnRlZCBmaWxlcyBvciBwb3dlciBmYWlsdXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU4MzA6XHQvKlxuNTgzMTpcdCAqIEluIGRhdGE9am91cm5hbCBtb2RlIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKCkgbWF5IGZhaWwgdG8gaW52YWxpZGF0ZVxuNTgzMjpcdCAqIGJ1ZmZlcnMgdGhhdCBhcmUgYXR0YWNoZWQgdG8gYSBmb2xpbyBzdHJhZGRsaW5nIGlfc2l6ZSBhbmQgYXJlIHVuZGVyZ29pbmdcbjU4MzM6XHQgKiBjb21taXQuIEluIHRoYXQgY2FzZSB3ZSBoYXZlIHRvIHdhaXQgZm9yIGNvbW1pdCB0byBmaW5pc2ggYW5kIHRyeSBhZ2Fpbi5cbjU4MzQ6XHQgKi9cbjU4MzU6XHRzdGF0aWMgdm9pZCBleHQ0X3dhaXRfZm9yX3RhaWxfcGFnZV9jb21taXQoc3RydWN0IGlub2RlICppbm9kZSlcbjU4MzY6XHR7XG41ODM3Olx0XHR1bnNpZ25lZCBvZmZzZXQ7XG41ODM4Olx0XHRqb3VybmFsX3QgKmpvdXJuYWwgPSBFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfam91cm5hbDtcbjU4Mzk6XHRcdHRpZF90IGNvbW1pdF90aWQ7XG41ODQwOlx0XHRpbnQgcmV0O1xuNTg0MTpcdFx0Ym9vbCBoYXNfdHJhbnNhY3Rpb247XG41ODQyOlx0XG41ODQzOlx0XHRvZmZzZXQgPSBpbm9kZS1cdTAwM2VpX3NpemUgXHUwMDI2IChQQUdFX1NJWkUgLSAxKTtcbjU4NDQ6XHRcdC8qXG41ODQ1Olx0XHQgKiBJZiB0aGUgZm9saW8gaXMgZnVsbHkgdHJ1bmNhdGVkLCB3ZSBkb24mIzM5O3QgbmVlZCB0byB3YWl0IGZvciBhbnkgY29tbWl0XG41ODQ2Olx0XHQgKiAoYW5kIHdlIGV2ZW4gc2hvdWxkIG5vdCBhcyBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKCkgbWF5XG41ODQ3Olx0XHQgKiBzdHJpcCBhbGwgYnVmZmVycyBmcm9tIHRoZSBmb2xpbyBidXQga2VlcCB0aGUgZm9saW8gZGlydHkgd2hpY2ggY2FuIHRoZW5cbjU4NDg6XHRcdCAqIGNvbmZ1c2UgZS5nLiBjb25jdXJyZW50IGV4dDRfd3JpdGVwYWdlcygpIHNlZWluZyBkaXJ0eSBmb2xpbyB3aXRob3V0XG41ODQ5Olx0XHQgKiBidWZmZXJzKS4gQWxzbyB3ZSBkb24mIzM5O3QgbmVlZCB0byB3YWl0IGZvciBhbnkgY29tbWl0IGlmIGFsbCBidWZmZXJzIGluXG41ODUwOlx0XHQgKiB0aGUgZm9saW8gcmVtYWluIHZhbGlkLiBUaGlzIGlzIG1vc3QgYmVuZWZpY2lhbCBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mXG41ODUxOlx0XHQgKiBibG9ja3NpemUgPT0gUEFHRVNJWkUuXG41ODUyOlx0XHQgKi9cbjU4NTM6XHRcdGlmICghb2Zmc2V0IHx8IG9mZnNldCBcdTAwM2UgKFBBR0VfU0laRSAtIGlfYmxvY2tzaXplKGlub2RlKSkpXG41ODU0Olx0XHRcdHJldHVybjtcbjU4NTU6XHRcdHdoaWxlICgxKSB7XG41ODU2Olx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8oaW5vZGUtXHUwMDNlaV9tYXBwaW5nLFxuNTg1NzpcdFx0XHRcdFx0ICAgICAgaW5vZGUtXHUwMDNlaV9zaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbjU4NTg6XHRcdFx0aWYgKElTX0VSUihmb2xpbykpXG41ODU5Olx0XHRcdFx0cmV0dXJuO1xuNTg2MDpcdFx0XHRyZXQgPSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsXG41ODYxOlx0XHRcdFx0XHRcdFx0Zm9saW9fc2l6ZShmb2xpbykgLSBvZmZzZXQpO1xuNTg2MjpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuNTg2MzpcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuNTg2NDpcdFx0XHRpZiAocmV0ICE9IC1FQlVTWSlcbjU4NjU6XHRcdFx0XHRyZXR1cm47XG41ODY2Olx0XHRcdGhhc190cmFuc2FjdGlvbiA9IGZhbHNlO1xuNTg2NzpcdFx0XHRyZWFkX2xvY2soXHUwMDI2am91cm5hbC1cdTAwM2VqX3N0YXRlX2xvY2spO1xuNTg2ODpcdFx0XHRpZiAoam91cm5hbC1cdTAwM2VqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24pIHtcbjU4Njk6XHRcdFx0XHRjb21taXRfdGlkID0gam91cm5hbC1cdTAwM2VqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24tXHUwMDNldF90aWQ7XG41ODcwOlx0XHRcdFx0aGFzX3RyYW5zYWN0aW9uID0gdHJ1ZTtcbjU4NzE6XHRcdFx0fVxuNTg3MjpcdFx0XHRyZWFkX3VubG9jayhcdTAwMjZqb3VybmFsLVx1MDAzZWpfc3RhdGVfbG9jayk7XG41ODczOlx0XHRcdGlmIChoYXNfdHJhbnNhY3Rpb24pXG41ODc0Olx0XHRcdFx0amJkMl9sb2dfd2FpdF9jb21taXQoam91cm5hbCwgY29tbWl0X3RpZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTcxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogODI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbGx5IFJpc2t5IGV4dDQgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGludHVpdGlvbiBraWNrcyBpbi4gVGhpcyBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIGZ1bmN0aW9uIGp1c3QgZ290IGEgc2lnbmlmaWNhbnQgbG9naWMgY2hhbmdlLiBQcmV2aW91c2x5LCBpZiBgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgZmFpbGVkLCBpdCBzaW1wbHkgdHJpZ2dlcmVkIGEgYFdBUk5fT05gLiBOb3csIGl0JiMzOTtzIGEgbG9vcCB3aXRoIHJldHJpZXMhIFNwZWNpZmljYWxseSwgaXQgY2hlY2tzIGZvciBgLUVCVVNZYCBhbmQsIGlmIGl0IGdldHMgdGhhdCwgaXQgZ3JhYnMgdGhlIGBqb3VybmFsLSZndDtqX3N0YXRlX2xvY2tgLCBjaGVja3MgaWYgdGhlcmUmIzM5O3MgYW4gb25nb2luZyBjb21taXQgKGBqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb25gKSwgYW5kIHRoZW4gKndhaXRzKiBmb3IgdGhhdCBjb21taXQgdXNpbmcgYGpiZDJfbG9nX3dhaXRfY29tbWl0YC4KClRoZSB0aGluZyB0aGF0IGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhdCBtZSBpcywgJiMzNDtXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZD8mIzM0OyBJIGtub3cgdGhpcyBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoaW4gZm9saW8gaW52YWxpZGF0aW9uIHBhdGhzLiBUaGluayB0cnVuY2F0ZSwgaG9sZSBwdW5jaGluZywgYGludmFsaWRhdGVfbWFwcGluZ19wYWdlc2AsIGBmaWxlbWFwX2ludmFsaWRhdGVfZm9saW9gIOKAkyBhbGwgdGhlIHVzdWFsIHN1c3BlY3RzLiBBbmQsIGNydWNpYWxseSwgaXQmIzM5O3Mgb2Z0ZW4gY2FsbGVkIHdoaWxlICpob2xkaW5nKiBmb2xpbyBsb2NrcyBvciBvdGhlciByZWxldmFudCBsb2Nrcy4gVGhpcyBoYXMgbXkgYWxhcm0gYmVsbHMgcmluZ2luZy4gVGhpcyBuZXcgcmV0cnkgbG9vcCAqaW5zaWRlKiB0aGlzIGNvbnRleHQuLi4gQ291bGQgdGhpcyBjYXVzZSBhIGxvY2sgaW52ZXJzaW9uIG9yIGV2ZW4gYSBkZWFkbG9jayB3aXRoIHRoZSBgamJkMmAgY29tbWl0IHByb2Nlc3M/IE9yIGlmIHRoZXJlIGlzIG5vIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24sIGlzIHRoaXMgYW4gaW5maW5pdGUgYnVzeSBsb29wPyBJdCBpcy4KCkkga25vdyB0aGUgc3lzdGVtIGhhcyBnb29kIGZ1enppbmcgY2FwYWJpbGl0aWVzLCBlc3BlY2lhbGx5IHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkgd29uZGVyIGlmIHRoaXMgY29kZSBjaGFuZ2UgaXMgZXZlbiB3b3J0aCBmdXp6aW5nPwoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gUmVhY2hhYmlsaXR5PyBleHQ0IGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHRoZSBzdGFuZGFyZCBlbnZpcm9ubWVudHMuIENvcmUgc3Vic3lzdGVtPyBJdCYjMzk7cyBWRlMvZXh0NCwgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSBmaWxlc3lzdGVtLiBSZWZhY3RvcmluZy9Mb2dpYyBjaGFuZ2VzPyBJdCBpcyBpbnRyb2R1Y2luZyBhIHJldHJ5IGxvb3Agd2l0aCBsb2NraW5nIGFuZCB3YWl0aW5nLiBXb3J0aCBmdXp6aW5nOiB5ZXMsIGl0IHNlZW1zIHdvcnRod2hpbGUuCgpOb3csIHdoaWNoIHN5bWJvbHMgZG8gSSBuZWVkIHRvIGZvY3VzIG9uIGR1cmluZyBmdXp6aW5nPyBPYnZpb3VzbHksIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIGFuZCBgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AuIEJ1dCBJIG5lZWQgdG8gbG9vayBhdCB3aGF0IGNhbGxzIHRoZW0uIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgY2FsbGVkIHZpYSBgYW9wcy0mZ3Q7aW52YWxpZGF0ZV9mb2xpb2AuIExldCYjMzk7cyBjaGVjayBgZXh0NF93YWl0X2Zvcl90YWlsX3BhZ2VfY29tbWl0YCBhcyB3ZWxsLiBUaGUgcHJpbWFyeSBmb2N1cyBpcyBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gLiBJdCBhcHBlYXJzIHRvIGJlIG5vbi1pbmxpbmVkIGJlY2F1c2UgaXQgaXMgc3RvcmVkIGluIHRoZSBgZXh0NF9qb3VybmFsbGVkX2FvcHNgIHN0cnVjdC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZnVuY3Rpb25zIGluIGV4dDQgaW50ZXJhY3Rpbmcgd2l0aCBqb3VybmFsbGVkIGludmFsaWRhdGUgb3IgZGF0YSBqb3VybmFsaW5nIHRydW5jYXRlLiBJJiMzOTtsbCBuZWVkIHRvIGdyZXBwZXIgZm9yIGBleHQ0X2pvdXJuYWxsZWRfYW9wc2AgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2pvdXJuYWxsZWRfYW9wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9pbm9kZS5jPTM5Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXh0NF9hb3BzID0ge1xuLS1cbmZzL2V4dDQvaW5vZGUuYy0zOTg0LVxuZnMvZXh0NC9pbm9kZS5jOjM5ODU6c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXh0NF9qb3VybmFsbGVkX2FvcHMgPSB7XG5mcy9leHQ0L2lub2RlLmMtMzk4Ni1cdC5yZWFkX2ZvbGlvXHRcdD0gZXh0NF9yZWFkX2ZvbGlvLFxuLS1cbmZzL2V4dDQvaW5vZGUuYz00MDI0PXZvaWQgZXh0NF9zZXRfYW9wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy00MDMwLVx0Y2FzZSBFWFQ0X0lOT0RFX0pPVVJOQUxfREFUQV9NT0RFOlxuZnMvZXh0NC9pbm9kZS5jOjQwMzE6XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmV4dDRfam91cm5hbGxlZF9hb3BzO1xuZnMvZXh0NC9pbm9kZS5jLTQwMzItXHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NDcKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogNTg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IEludmFsaWRhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRvdWNoaW5nIGBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AsIHNwZWNpZmljYWxseSBpbiBgZnMvZXh0NC9pbm9kZS5jYC4gVGhhdCYjMzk7cyBteSBtYWluIGZvY3VzIOKAkyBteSAmIzM0O0ZvY3VzU3ltYm9sLCYjMzQ7IGFjdHVhbGx5LiBUaGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhpcyBmdW5jdGlvbiB0byBpbmNsdWRlIGEgcmV0cnkgbG9vcCB0aGF0IHdhaXRzIGZvciBKQkQyIHRyYW5zYWN0aW9ucyB0byBjb21taXQgd2hlbiBpdCByZWNlaXZlcyBhbiBgLUVCVVNZYCBlcnJvciBmcm9tIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYC4gRXZlbiBpZiBgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgaXMgaW5saW5lZCwgaXQmIzM5O3Mgc2FmZSBhbmQgaGVscGZ1bCB0byBsaXN0IGJvdGggc3ltYm9scy4gSSYjMzk7dmUgYWxzbyB2ZXJpZmllZCB0aGF0IGBqYmQyX2pvdXJuYWxfaW52YWxpZGF0ZV9mb2xpb2AgaXNuJiMzOTt0IG1vZGlmaWVkLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBDbGVhcmx5LCBgQ09ORklHX0VYVDRfRlNgIGlzIGEgbXVzdC1oYXZlOyB3aXRob3V0IGl0LCB0aGUgd2hvbGUgZXh0NCBmaWxlc3lzdGVtIGlzbiYjMzk7dCBldmVuIGNvbXBpbGVkLiBJIGNoZWNrZWQgdGhlIGBmcy9leHQ0L0tjb25maWdgIGZpbGUgYW5kIGNvbmZpcm1lZCB0aGF0IGBFWFQ0X0ZTYCBkb2VzbiYjMzk7dCBkZXBlbmQgb24gYW55dGhpbmcgZWxzZS4gVGhhdCYjMzk7cyBnb29kLgoKU28sIGluIHN1bW1hcnk6CgoqICAgKipXb3J0aEZ1enppbmc6KiogWWVzLCBhYnNvbHV0ZWx5LiBUaGlzIG1vZGlmaWNhdGlvbiBzZWVtcyBsaWtlIGl0IGludHJvZHVjZXMgY29tcGxleGl0eSByZWxhdGVkIHRvIHdhaXRpbmcgZm9yIHRyYW5zYWN0aW9ucywgd2hpY2ggcmFpc2VzIGNvbmNlcm5zIGFib3V0IHBvdGVudGlhbCBpc3N1ZXMuCiogICAqKkZvY3VzU3ltYm9sczoqKiBJJiMzOTt2ZSBpZGVudGlmaWVkIGBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgYW5kIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCBhcyB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIHBheSBhdHRlbnRpb24gdG8uCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYENPTkZJR19FWFQ0X0ZTYCBpcyB0aGUgb25seSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0JiMzOTtzIHRydWx5IGVzc2VudGlhbCBoZXJlLgoqICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoJiMzOTtzIGNoYW5nZSBpbnZvbHZlcyBhIHJldHJ5IGxvb3AuIEkmIzM5O20gY29uY2VybmVkIGFib3V0IHBvdGVudGlhbCBkZWFkbG9ja3MsIGxvY2sgaW52ZXJzaW9ucywgb3IgaW5maW5pdGUgYnVzeS1sb29wcyBpZiBgaGFzX3RyYW5zYWN0aW9uYCByZW1haW5zIGZhbHNlLiBUaGlzIGlzIGEgY2xhc3NpYyBjYXNlIHdoZXJlIGZ1enppbmcgaXMgd2FycmFudGVkIHRvIHVuY292ZXIgc3VidGxlIGNvbmN1cnJlbmN5IHByb2JsZW1zIHJlbGF0ZWQgdG8gdGhlIGpvdXJuYWwgYW5kIGZvbGlvIGludmFsaWRhdGlvbi4gSSYjMzk7bSByZWFkeSB0byBtb3ZlIGZvcndhcmQuIFRpbWUgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8mIzM0OywKICAgICYjMzQ7X19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyBpbiBmcy9leHQ0L2lub2RlLmMsIHJlcGxhY2luZyBhbiBhc3NlcnRpb24gd2l0aCBhIHJldHJ5IGxvb3AgdGhhdCBzeW5jaHJvbml6ZXMgd2l0aCBKQkQyIHRyYW5zYWN0aW9ucyB3aGVuIF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8gcmV0dXJucyAtRUJVU1kuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGZvbGlvIGludmFsaWRhdGlvbiBvcGVyYXRpb25zIChzdWNoIGFzIHRydW5jYXRlIG9yIGhvbGUgcHVuY2hpbmcpIG9uIGV4dDQgaW5vZGVzIHdpdGggZGF0YSBqb3VybmFsbGluZyBlbmFibGVkLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uLCBkZWFkbG9ja3MsIG9yIGluZmluaXRlIGxvb3BzIGlmIGEgdHJhbnNhY3Rpb24gY29tbWl0IGlzIHBlbmRpbmcgb3IgbWlzc2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvJiMzNDssCiAgICAmIzM0O19fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8gaW4gZnMvZXh0NC9pbm9kZS5jLCByZXBsYWNpbmcgYW4gYXNzZXJ0aW9uIHdpdGggYSByZXRyeSBsb29wIHRoYXQgc3luY2hyb25pemVzIHdpdGggSkJEMiB0cmFuc2FjdGlvbnMgd2hlbiBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvIHJldHVybnMgLUVCVVNZLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGR1cmluZyBmb2xpbyBpbnZhbGlkYXRpb24gb3BlcmF0aW9ucyAoc3VjaCBhcyB0cnVuY2F0ZSBvciBob2xlIHB1bmNoaW5nKSBvbiBleHQ0IGlub2RlcyB3aXRoIGRhdGEgam91cm5hbGxpbmcgZW5hYmxlZC4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgcG90ZW50aWFsIGxvY2sgY29udGVudGlvbiwgZGVhZGxvY2tzLCBvciBpbmZpbml0ZSBsb29wcyBpZiBhIHRyYW5zYWN0aW9uIGNvbW1pdCBpcyBwZW5kaW5nIG9yIG1pc3NpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAyOjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDI6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKCkgdG8gaGFuZGxlIC1FQlVTWSByZXR1cm5zIGZyb20gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIGJ5IHdhaXRpbmcgZm9yIHRoZSBjb21taXR0aW5nIHRyYW5zYWN0aW9uIHZpYSBqYmQyX2xvZ193YWl0X2NvbW1pdCgpIGluIGEgbG9vcC5cblxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGluIHRoZSBwYXRjaCAocmV0LCBoYXNfdHJhbnNhY3Rpb24sIGNvbW1pdF90aWQpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlOiBoYXNfdHJhbnNhY3Rpb24gaXMgZXhwbGljaXRseSBzZXQgdG8gZmFsc2UsIGFuZCBjb21taXRfdGlkIGlzIG9ubHkgcmVhZCB3aGVuIGhhc190cmFuc2FjdGlvbiBpcyB0cnVlICh3aGVyZSBpdCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgYmVlbiBzZXQpLiBObyBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBjb3BpZXMsIHBhZGRpbmcsIG9yIHVzZXItc3BhY2UgdHJhbnNmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgY29uY3VycmVuY3ksIGRlYWRsb2NrLCBvciBsaXZlbG9jayByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxvb3Agb3Igd2FpdGluZyBvbiB0cmFuc2FjdGlvbnMgYXJlIHdpdGhpbiB0aGUgZG9tYWluIG9mIExPQ0tERVAgYW5kIGhhbmcvd2F0Y2hkb2cgZGV0ZWN0b3JzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MzhkOGUzNTJmZTgwZTUyMWE3YWU0ZDdiNjlkOTY3Yzk5ZDE2NzVlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMDI6NDg6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggYzJjMmQ2YWM3ZjNkMS4uNmJiOTRhZmQ1MTAwNiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtMzQyOSw3ICYjNDM7MzQyOSwyNyBAQCBzdGF0aWMgdm9pZCBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQkJCQkgICBzaXplX3Qgb2Zmc2V0LAogCQkJCQkgICBzaXplX3QgbGVuZ3RoKQogewotCVdBUk5fT04oX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LCBsZW5ndGgpICZsdDsgMCk7CiYjNDM7CXRpZF90IGNvbW1pdF90aWQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CWJvb2wgaGFzX3RyYW5zYWN0aW9uOwomIzQzOwlqb3VybmFsX3QgKmpvdXJuYWwgPSBFWFQ0X0pPVVJOQUwoZm9saW8tJmd0O21hcHBpbmctJmd0O2hvc3QpOwomIzQzOwomIzQzOwl3aGlsZSAoMSkgewomIzQzOwkJcmV0ID0gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LCBsZW5ndGgpOwomIzQzOwkJaWYgKHJldCAhPSAtRUJVU1kpIHsKJiM0MzsJCQlXQVJOX09OKHJldCAmbHQ7IDApOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsJCWhhc190cmFuc2FjdGlvbiA9IGZhbHNlOwomIzQzOwkJcmVhZF9sb2NrKCZhbXA7am91cm5hbC0mZ3Q7al9zdGF0ZV9sb2NrKTsKJiM0MzsJCWlmIChqb3VybmFsLSZndDtqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24pIHsKJiM0MzsJCQljb21taXRfdGlkID0gam91cm5hbC0mZ3Q7al9jb21taXR0aW5nX3RyYW5zYWN0aW9uLSZndDt0X3RpZDsKJiM0MzsJCQloYXNfdHJhbnNhY3Rpb24gPSB0cnVlOwomIzQzOwkJfQomIzQzOwkJcmVhZF91bmxvY2soJmFtcDtqb3VybmFsLSZndDtqX3N0YXRlX2xvY2spOwomIzQzOwkJaWYgKGhhc190cmFuc2FjdGlvbikKJiM0MzsJCQlqYmQyX2xvZ193YWl0X2NvbW1pdChqb3VybmFsLCBjb21taXRfdGlkKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgYm9vbCBleHQ0X3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3Qgd2FpdCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAyOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIGV4dDQgSW5vZGUgQ2FjaGUgSW52YWxpZGF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoZSBwYXRjaCBJJiMzOTttIGxvb2tpbmcgYXQgZm9jdXNlcyBvbiBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIHdpdGhpbiBgZnMvZXh0NC9pbm9kZS5jYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoYXQgZnVuY3Rpb24gYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIHRoYXQgZmlsZSwgcGFydGljdWxhcmx5IGFyb3VuZCBsaW5lIDM0MjksIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBiZWluZyBtb2RpZmllZCBhbmQgd2h5LiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIG9uIHRoZSBqb3VybmFsaW5nIHByb2Nlc3MgYW5kIGlub2RlIGhhbmRsaW5nIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDI6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM0MTU6XHRcbjM0MTY6XHRcdHRyYWNlX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG4zNDE3Olx0XG4zNDE4Olx0XHQvKlxuMzQxOTpcdFx0ICogSWYgaXQmIzM5O3MgYSBmdWxsIHRydW5jYXRlIHdlIGp1c3QgZm9yZ2V0IGFib3V0IHRoZSBwZW5kaW5nIGRpcnR5aW5nXG4zNDIwOlx0XHQgKi9cbjM0MjE6XHRcdGlmIChvZmZzZXQgPT0gMCBcdTAwMjZcdTAwMjYgbGVuZ3RoID09IGZvbGlvX3NpemUoZm9saW8pKVxuMzQyMjpcdFx0XHRmb2xpb19jbGVhcl9jaGVja2VkKGZvbGlvKTtcbjM0MjM6XHRcbjM0MjQ6XHRcdHJldHVybiBqYmQyX2pvdXJuYWxfaW52YWxpZGF0ZV9mb2xpbyhqb3VybmFsLCBmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xuMzQyNTpcdH1cbjM0MjY6XHRcbjM0Mjc6XHQvKiBXcmFwcGVyIGZvciBhb3BzLi4uICovXG4zNDI4Olx0c3RhdGljIHZvaWQgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbjM0Mjk6XHRcdFx0XHRcdFx0ICAgc2l6ZV90IG9mZnNldCxcbjM0MzA6XHRcdFx0XHRcdFx0ICAgc2l6ZV90IGxlbmd0aClcbjM0MzE6XHR7XG4zNDMyOlx0XHR0aWRfdCBjb21taXRfdGlkO1xuMzQzMzpcdFx0aW50IHJldDtcbjM0MzQ6XHRcdGJvb2wgaGFzX3RyYW5zYWN0aW9uO1xuMzQzNTpcdFx0am91cm5hbF90ICpqb3VybmFsID0gRVhUNF9KT1VSTkFMKGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdCk7XG4zNDM2Olx0XG4zNDM3Olx0XHR3aGlsZSAoMSkge1xuMzQzODpcdFx0XHRyZXQgPSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG4zNDM5Olx0XHRcdGlmIChyZXQgIT0gLUVCVVNZKSB7XG4zNDQwOlx0XHRcdFx0V0FSTl9PTihyZXQgXHUwMDNjIDApO1xuMzQ0MTpcdFx0XHRcdHJldHVybjtcbjM0NDI6XHRcdFx0fVxuMzQ0MzpcdFx0XHRoYXNfdHJhbnNhY3Rpb24gPSBmYWxzZTtcbjM0NDQ6XHRcdFx0cmVhZF9sb2NrKFx1MDAyNmpvdXJuYWwtXHUwMDNlal9zdGF0ZV9sb2NrKTtcbjM0NDU6XHRcdFx0aWYgKGpvdXJuYWwtXHUwMDNlal9jb21taXR0aW5nX3RyYW5zYWN0aW9uKSB7XG4zNDQ2Olx0XHRcdFx0Y29tbWl0X3RpZCA9IGpvdXJuYWwtXHUwMDNlal9jb21taXR0aW5nX3RyYW5zYWN0aW9uLVx1MDAzZXRfdGlkO1xuMzQ0NzpcdFx0XHRcdGhhc190cmFuc2FjdGlvbiA9IHRydWU7XG4zNDQ4Olx0XHRcdH1cbjM0NDk6XHRcdFx0cmVhZF91bmxvY2soXHUwMDI2am91cm5hbC1cdTAwM2VqX3N0YXRlX2xvY2spO1xuMzQ1MDpcdFx0XHRpZiAoaGFzX3RyYW5zYWN0aW9uKVxuMzQ1MTpcdFx0XHRcdGpiZDJfbG9nX3dhaXRfY29tbWl0KGpvdXJuYWwsIGNvbW1pdF90aWQpO1xuMzQ1MjpcdFx0fVxuMzQ1MzpcdH1cbjM0NTQ6XHRcbjM0NTU6XHRzdGF0aWMgYm9vbCBleHQ0X3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3Qgd2FpdClcbjM0NTY6XHR7XG4zNDU3Olx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0O1xuMzQ1ODpcdFx0am91cm5hbF90ICpqb3VybmFsID0gRVhUNF9KT1VSTkFMKGlub2RlKTtcbjM0NTk6XHRcbjM0NjA6XHRcdHRyYWNlX2V4dDRfcmVsZWFzZV9mb2xpbyhpbm9kZSwgZm9saW8pO1xuMzQ2MTpcdFxuMzQ2MjpcdFx0LyogUGFnZSBoYXMgZGlydHkgam91cm5hbGxlZCBkYXRhIC1cdTAwM2UgY2Fubm90IHJlbGVhc2UgKi9cbjM0NjM6XHRcdGlmIChmb2xpb190ZXN0X2NoZWNrZWQoZm9saW8pKVxuMzQ2NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAyOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZ1bmN0aW9uIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYC4gTGV0JiMzOTtzIGRpZyBiYWNrIGludG8gdGhlIHNvdXJjZSBjb2RlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkganVtcCB0byBsaW5lcyAzNDAwIHRocm91Z2ggMzQyNS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciBzaG91bGQgYmUuIE5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB3aGF0IHdhcyBnb2luZyBvbiByaWdodCBiZWZvcmUgdGhpcyBmdW5jdGlvbi4gRmlndXJlIG91dCB0aGUgc3RhdGUgb2YgdGhpbmdzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBzZWN0aW9uIGlzIHRlbGxpbmcgdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDAwOlx0c3RhdGljIHZvaWQgZXh0NF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG4zNDAxOlx0XHRcdFx0XHRzaXplX3QgbGVuZ3RoKVxuMzQwMjpcdHtcbjM0MDM6XHRcdHRyYWNlX2V4dDRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xuMzQwNDpcdFxuMzQwNTpcdFx0LyogTm8gam91cm5hbGxpbmcgaGFwcGVucyBvbiBkYXRhIGJ1ZmZlcnMgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgKi9cbjM0MDY6XHRcdFdBUk5fT04oZm9saW9fYnVmZmVycyhmb2xpbykgXHUwMDI2XHUwMDI2IGJ1ZmZlcl9qYmQoZm9saW9fYnVmZmVycyhmb2xpbykpKTtcbjM0MDc6XHRcbjM0MDg6XHRcdGJsb2NrX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcbjM0MDk6XHR9XG4zNDEwOlx0XG4zNDExOlx0c3RhdGljIGludCBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4zNDEyOlx0XHRcdFx0XHRcdCAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKVxuMzQxMzpcdHtcbjM0MTQ6XHRcdGpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfSk9VUk5BTChmb2xpby1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3QpO1xuMzQxNTpcdFxuMzQxNjpcdFx0dHJhY2VfZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcbjM0MTc6XHRcbjM0MTg6XHRcdC8qXG4zNDE5Olx0XHQgKiBJZiBpdCYjMzk7cyBhIGZ1bGwgdHJ1bmNhdGUgd2UganVzdCBmb3JnZXQgYWJvdXQgdGhlIHBlbmRpbmcgZGlydHlpbmdcbjM0MjA6XHRcdCAqL1xuMzQyMTpcdFx0aWYgKG9mZnNldCA9PSAwIFx1MDAyNlx1MDAyNiBsZW5ndGggPT0gZm9saW9fc2l6ZShmb2xpbykpXG4zNDIyOlx0XHRcdGZvbGlvX2NsZWFyX2NoZWNrZWQoZm9saW8pO1xuMzQyMzpcdFxuMzQyNDpcdFx0cmV0dXJuIGpiZDJfam91cm5hbF9pbnZhbGlkYXRlX2ZvbGlvKGpvdXJuYWwsIGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG4zNDI1Olx0fVxuMzQyNjpcdFxuMzQyNzpcdC8qIFdyYXBwZXIgZm9yIGFvcHMuLi4gKi9cbjM0Mjg6XHRzdGF0aWMgdm9pZCBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuMzQyOTpcdFx0XHRcdFx0XHQgICBzaXplX3Qgb2Zmc2V0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTMwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29kZSBNb2RpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIG9yaWdpbmFsIGNvZGUgbG9va2VkIGxpa2UgKmJlZm9yZSogdGhpcyBwYXRjaCB3YXMgYXBwbGllZC4gVGhlIGRpZmYgc2hvd3MgYSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gdGhlIGBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgZnVuY3Rpb24gaW4gYGZzL2V4dDQvaW5vZGUuY2AuIFRoZSBjb3JlIG1vZGlmaWNhdGlvbiBzZWVtcyB0byBpbnZvbHZlIGhhbmRsaW5nIGEgYC1FQlVTWWAgZXJyb3IgcmV0dXJuIGZyb20gYF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gLgoKRXNzZW50aWFsbHksIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIHNpbXBsZSBgV0FSTl9PTmAgY2hlY2suIE5vdywgdGhlcmUmIzM5O3MgYSBsb29wIHdpdGggYSByZXRyeSBtZWNoYW5pc20uIEl0IGFwcGVhcnMgdGhhdCBpZiBgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgcmV0dXJucyBgLUVCVVNZYCwgd2hpY2ggcHJvYmFibHkgbWVhbnMgdGhlIGpvdXJuYWwgaXMgYnVzeSwgdGhlIGNvZGUgbm93IHdhaXRzLiBJIGNhbiBzZWUgdGhhdCBpdCYjMzk7cyBjaGVja2luZyBmb3IgYSBjb21taXR0aW5nIHRyYW5zYWN0aW9uIHVzaW5nIGBqYmQyX2xvZ193YWl0X2NvbW1pdGAgYW5kIHJldHJ5aW5nLiBUaGlzIGluZGljYXRlcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSByYWNlIGNvbmRpdGlvbiBvciBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgam91cm5hbCBpcyB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZS4KClRvIGZ1bGx5IGdyYXNwIHRoZSBjb250ZXh0IGFuZCBtb3RpdmF0aW9uIGJlaGluZCB0aGlzIGNoYW5nZSwgSSYjMzk7bGwgbmVlZCBtb3JlIGluZm9ybWF0aW9uLiBJJiMzOTtsbCBjaGVjayB0aGUgY29tbWl0IGhpc3RvcnkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbW9kaWZpY2F0aW9uLiBJJiMzOTtsbCBleGVjdXRlIGEgYGdpdCBsb2dgIG9uIHRoZSBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIGZ1bmN0aW9uIHRvIHNlZSB0aGUgY29tbWl0IG1lc3NhZ2VzLiBIb3BlZnVsbHksIHRoYXQgc2hvdWxkIGdpdmUgbWUgaW5zaWdodCBpbnRvIHdoYXQgcHJvYmxlbSB0aGlzIHBhdGNoIGlzIGZpeGluZy4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gam91cm5hbCBjb250ZW50aW9uIG9yIGEgc2ltaWxhciBjb25jdXJyZW5jeSBpc3N1ZSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gTWF5YmUgaXQmIzM5O3MgYSBkZWFkbG9jay4gSSYjMzk7bGwgYWxzbyB0cnkgYSBicm9hZGVyIHNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5vZGUuYz0zNDAwPXN0YXRpYyB2b2lkIGV4dDRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxuLS1cbmZzL2V4dDQvaW5vZGUuYy0zNDEwLVxuZnMvZXh0NC9pbm9kZS5jOjM0MTE6c3RhdGljIGludCBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5mcy9leHQ0L2lub2RlLmMtMzQxMi1cdFx0XHRcdFx0ICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTM0MTUtXG5mcy9leHQ0L2lub2RlLmM6MzQxNjpcdHRyYWNlX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG5mcy9leHQ0L2lub2RlLmMtMzQxNy1cbi0tXG5mcy9leHQ0L2lub2RlLmMtMzQyNy0vKiBXcmFwcGVyIGZvciBhb3BzLi4uICovXG5mcy9leHQ0L2lub2RlLmM6MzQyODpzdGF0aWMgdm9pZCBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuZnMvZXh0NC9pbm9kZS5jLTM0MjktXHRcdFx0XHRcdCAgIHNpemVfdCBvZmZzZXQsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTM0MzctXHR3aGlsZSAoMSkge1xuZnMvZXh0NC9pbm9kZS5jOjM0Mzg6XHRcdHJldCA9IF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcbmZzL2V4dDQvaW5vZGUuYy0zNDM5LVx0XHRpZiAocmV0ICE9IC1FQlVTWSkge1xuLS1cbmZzL2V4dDQvaW5vZGUuYz0zOTg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGV4dDRfam91cm5hbGxlZF9hb3BzID0ge1xuLS1cbmZzL2V4dDQvaW5vZGUuYy0zOTkyLVx0LmJtYXBcdFx0XHQ9IGV4dDRfYm1hcCxcbmZzL2V4dDQvaW5vZGUuYzozOTkzOlx0LmludmFsaWRhdGVfZm9saW9cdD0gZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8sXG5mcy9leHQ0L2lub2RlLmMtMzk5NC1cdC5yZWxlYXNlX2ZvbGlvXHRcdD0gZXh0NF9yZWxlYXNlX2ZvbGlvLFxuLS1cbmZzL2V4dDQvaW5vZGUuYz01NzgwPWludCBleHQ0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy01ODMwLS8qXG5mcy9leHQ0L2lub2RlLmM6NTgzMTogKiBJbiBkYXRhPWpvdXJuYWwgbW9kZSBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIG1heSBmYWlsIHRvIGludmFsaWRhdGVcbmZzL2V4dDQvaW5vZGUuYy01ODMyLSAqIGJ1ZmZlcnMgdGhhdCBhcmUgYXR0YWNoZWQgdG8gYSBmb2xpbyBzdHJhZGRsaW5nIGlfc2l6ZSBhbmQgYXJlIHVuZGVyZ29pbmdcbi0tXG5mcy9leHQ0L2lub2RlLmM9NTgzNT1zdGF0aWMgdm9pZCBleHQ0X3dhaXRfZm9yX3RhaWxfcGFnZV9jb21taXQoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTg0NS1cdCAqIElmIHRoZSBmb2xpbyBpcyBmdWxseSB0cnVuY2F0ZWQsIHdlIGRvbiYjMzk7dCBuZWVkIHRvIHdhaXQgZm9yIGFueSBjb21taXRcbmZzL2V4dDQvaW5vZGUuYzo1ODQ2Olx0ICogKGFuZCB3ZSBldmVuIHNob3VsZCBub3QgYXMgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIG1heVxuZnMvZXh0NC9pbm9kZS5jLTU4NDctXHQgKiBzdHJpcCBhbGwgYnVmZmVycyBmcm9tIHRoZSBmb2xpbyBidXQga2VlcCB0aGUgZm9saW8gZGlydHkgd2hpY2ggY2FuIHRoZW5cbi0tXG5mcy9leHQ0L2lub2RlLmMtNTg1OS1cdFx0XHRyZXR1cm47XG5mcy9leHQ0L2lub2RlLmM6NTg2MDpcdFx0cmV0ID0gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LFxuZnMvZXh0NC9pbm9kZS5jLTU4NjEtXHRcdFx0XHRcdFx0Zm9saW9fc2l6ZShmb2xpbykgLSBvZmZzZXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDk3CgkJCQkJCQlvdXRwdXQ6IDIwNAoJCQkJCQkJdGhvdWdodHM6IDk4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50IG9mIGV4dDQgSm91cm5hbGxlZCBGb2xpbyBJbnZhbGlkYXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgaXMgb24gd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgb3IgZXhhY2VyYmF0ZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MsIHRoZSBkb21haW4gb2YgS01TQU4uIFRoZSBjb2RlIGluIHF1ZXN0aW9uIGlzIGZvciBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gLCB3aGljaCBoYW5kbGVzIGZvbGlvIGludmFsaWRhdGlvbiB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSB3aGVuIGluIGBkYXRhPWpvdXJuYWxgIG1vZGUuCgpGaXJzdCwgSSBzZWUgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSBzaW1wbHkgY2FsbHMgYF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIGFuZCBXQVJOcyBvbiBuZWdhdGl2ZSByZXR1cm4gdmFsdWVzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJldHJ5IGxvb3AuIEl0IGNhbGxzIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCwgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgKGByZXRgKS4gSWYgYHJldGAgaXNuJiMzOTt0IGAtRUJVU1lgLCBpdCBoYW5kbGVzIGVycm9ycyBvciByZXR1cm5zLiBJZiBpdCAqaXMqIGAtRUJVU1lgLCBpdCBjaGVja3MgZm9yIGEgY29tbWl0dGluZyB0cmFuc2FjdGlvbiAoYGpvdXJuYWwtJmd0O2pfY29tbWl0dGluZ190cmFuc2FjdGlvbmApLgoKSGVyZSwgSSB6ZXJvIGluIG9uIGBjb21taXRfdGlkYC4gVGhlIGBjb21taXRfdGlkYCB2YXJpYWJsZSBpcyBhIGxvY2FsIHZhcmlhYmxlLCBkZWNsYXJlZCBhcyBgdGlkX3QgY29tbWl0X3RpZDtgLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgY29kZSBleHBsaWNpdGx5IHJlYWRzIGZyb20gYGpvdXJuYWwtJmd0O2pfY29tbWl0dGluZ190cmFuc2FjdGlvbi0mZ3Q7dF90aWRgLCAqb25seSogaWYgYGpvdXJuYWwtJmd0O2pfY29tbWl0dGluZ190cmFuc2FjdGlvbmAgaXMgdmFsaWQsIHNvIGBjb21taXRfdGlkYCBpcyBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkIHdoZW4gdXNlZC4gSXQgdGhlbiB1c2VzIHRoaXMgYGNvbW1pdF90aWRgIHdpdGggYGpiZDJfbG9nX3dhaXRfY29tbWl0KClgLiBJZiBubyB0cmFuc2FjdGlvbiBpcyBjb21taXR0aW5nLCB0aGUgY29kZSBkb2VzbiYjMzk7dCB3YWl0IGFuZCBnb2VzIGJhY2sgdG8gY2FsbGluZyBgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AuCgpOb3csIHRoZSBpbXBvcnRhbnQgY2hlY2sgZm9yIG1lOiBpcyBgY29tbWl0X3RpZGAgb3IgYW55IG90aGVyIHZhcmlhYmxlIHVzZWQgaW4gYSB3YXkgdGhhdCBpbnRyb2R1Y2VzIHRoZSBwb3NzaWJpbGl0eSBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIGxvZ2ljIGluaXRpYWxpemVzIGBjb21taXRfdGlkYCBhbmQgdXNlcyBpdCBvbmx5IGlmIGEgY29tbWl0dGluZyB0cmFuc2FjdGlvbiBpcyBhY3RpdmUuIEl0JiMzOTtzIHRoZSBgaGFzX3RyYW5zYWN0aW9uYCBmbGFnIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIHdhaXQuIElmIGBoYXNfdHJhbnNhY3Rpb25gIGlzIGZhbHNlLCBpdCBtZWFucyBgam91cm5hbC0mZ3Q7al9jb21taXR0aW5nX3RyYW5zYWN0aW9uYCB3YXMgbnVsbCwgYW5kIHRoZSBjb2RlIHJldHJpZXMgd2l0aG91dCB3YWl0aW5nLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBsaXZlbG9jayBvciBpbmZpbml0ZSBsb29wIGlmIGAtRUJVU1lgIHBlcnNpc3RzLCBidXQgdGhhdCYjMzk7cyBub3QgYSBLTVNBTiBpc3N1ZTsgaXQmIzM5O3MgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kvZGVhZGxvY2svbGl2ZWxvY2sgcHJvYmxlbS4KCk5leHQsIEkgc2NhbiBmb3IgdHlwaWNhbCBLTVNBTiBjb25jZXJuczoga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgbGVha2VkIHRvIHVzZXIgc3BhY2UsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0aW9uIG9mIGNvbXBsZXggc3RydWN0dXJlcywgb3IgYW55IG9wZXJhdGlvbnMgb24gYnVmZmVycyB3aGVyZSB1bmluaXRpYWxpemVkIGJ5dGVzIG1pZ2h0IGJlIGFjY2Vzc2VkLiBJIHNlZSBub25lIG9mIHRob3NlIGhlcmUuIE5vIGtlcm5lbCBtZW1vcnkgaXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBubyBidWZmZXJzIGFyZSBiZWluZyBtYW5pcHVsYXRlZCwgYW5kIGFsbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgS01TQU4gcmlza3MuIFRoZSBwb3RlbnRpYWwgaXNzdWVzIGhlcmUgYXJlIHJlbGF0ZWQgdG8gY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbjogZGVhZGxvY2tzLCBsaXZlbG9ja3MsIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhvc2UgYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAsIHdhdGNoZG9nIHRpbWVycywgb3Igc3RhbmRhcmQga2VybmVsIGhhbmcvbG9ja3VwIGRldGVjdG9ycy4gVGhleSBhcmUgbm90IG1lbW9yeSBpbml0aWFsaXphdGlvbiBpc3N1ZXMgd2hpY2ggYXJlIHRoZSBwdXJ2aWV3IG9mIEtNU0FOLgoKSW4gc3VtbWFyeSwgbXkgYW5hbHlzaXMgaW5kaWNhdGVzIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJdCYjMzk7cyBhIGNvbmN1cnJlbmN5LXJlbGF0ZWQgY2hhbmdlLCBidXQgbm90IGEgS01TQU4tcmVsZXZhbnQgb25lLiBUaGUgY29kZSBpbml0aWFsaXplcyBpdHMgdmFyaWFibGVzIHByb3Blcmx5LCB1c2VzIHRoZW0gY29ycmVjdGx5LCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKCkgdG8gaGFuZGxlIC1FQlVTWSByZXR1cm5zIGZyb20gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIGJ5IHdhaXRpbmcgZm9yIHRoZSBjb21taXR0aW5nIHRyYW5zYWN0aW9uIHZpYSBqYmQyX2xvZ193YWl0X2NvbW1pdCgpIGluIGEgbG9vcC5cblxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGluIHRoZSBwYXRjaCAocmV0LCBoYXNfdHJhbnNhY3Rpb24sIGNvbW1pdF90aWQpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlOiBoYXNfdHJhbnNhY3Rpb24gaXMgZXhwbGljaXRseSBzZXQgdG8gZmFsc2UsIGFuZCBjb21taXRfdGlkIGlzIG9ubHkgcmVhZCB3aGVuIGhhc190cmFuc2FjdGlvbiBpcyB0cnVlICh3aGVyZSBpdCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgYmVlbiBzZXQpLiBObyBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBjb3BpZXMsIHBhZGRpbmcsIG9yIHVzZXItc3BhY2UgdHJhbnNmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgY29uY3VycmVuY3ksIGRlYWRsb2NrLCBvciBsaXZlbG9jayByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxvb3Agb3Igd2FpdGluZyBvbiB0cmFuc2FjdGlvbnMgYXJlIHdpdGhpbiB0aGUgZG9tYWluIG9mIExPQ0tERVAgYW5kIGhhbmcvd2F0Y2hkb2cgZGV0ZWN0b3JzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKCkgdG8gaGFuZGxlIC1FQlVTWSByZXR1cm5zIGZyb20gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIGJ5IHdhaXRpbmcgZm9yIHRoZSBjb21taXR0aW5nIHRyYW5zYWN0aW9uIHZpYSBqYmQyX2xvZ193YWl0X2NvbW1pdCgpIGluIGEgbG9vcC5cblxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGluIHRoZSBwYXRjaCAocmV0LCBoYXNfdHJhbnNhY3Rpb24sIGNvbW1pdF90aWQpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlOiBoYXNfdHJhbnNhY3Rpb24gaXMgZXhwbGljaXRseSBzZXQgdG8gZmFsc2UsIGFuZCBjb21taXRfdGlkIGlzIG9ubHkgcmVhZCB3aGVuIGhhc190cmFuc2FjdGlvbiBpcyB0cnVlICh3aGVyZSBpdCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgYmVlbiBzZXQpLiBObyBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBjb3BpZXMsIHBhZGRpbmcsIG9yIHVzZXItc3BhY2UgdHJhbnNmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgY29uY3VycmVuY3ksIGRlYWRsb2NrLCBvciBsaXZlbG9jayByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxvb3Agb3Igd2FpdGluZyBvbiB0cmFuc2FjdGlvbnMgYXJlIHdpdGhpbiB0aGUgZG9tYWluIG9mIExPQ0tERVAgYW5kIGhhbmcvd2F0Y2hkb2cgZGV0ZWN0b3JzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAyOjQ4OjA5LjEwODA3OTY0OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDM3MTA1MjQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9cIixcbiAgICBcIl9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oKSB0byBoYW5kbGUgLUVCVVNZIHJldHVybnMgZnJvbSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKCkgYnkgd2FpdGluZyBmb3IgdGhlIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24gdmlhIGpiZDJfbG9nX3dhaXRfY29tbWl0KCkgaW4gYSBsb29wLlxcblxcbkFsbCBsb2NhbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBpbiB0aGUgcGF0Y2ggKHJldCwgaGFzX3RyYW5zYWN0aW9uLCBjb21taXRfdGlkKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZTogaGFzX3RyYW5zYWN0aW9uIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlLCBhbmQgY29tbWl0X3RpZCBpcyBvbmx5IHJlYWQgd2hlbiBoYXNfdHJhbnNhY3Rpb24gaXMgdHJ1ZSAod2hlcmUgaXQgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGJlZW4gc2V0KS4gTm8gbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgY29waWVzLCBwYWRkaW5nLCBvciB1c2VyLXNwYWNlIHRyYW5zZmVycyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IGNvbmN1cnJlbmN5LCBkZWFkbG9jaywgb3IgbGl2ZWxvY2sgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBsb29wIG9yIHdhaXRpbmcgb24gdHJhbnNhY3Rpb25zIGFyZSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBMT0NLREVQIGFuZCBoYW5nL3dhdGNoZG9nIGRldGVjdG9ycywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvIGluIGZzL2V4dDQvaW5vZGUuYywgcmVwbGFjaW5nIGFuIGFzc2VydGlvbiB3aXRoIGEgcmV0cnkgbG9vcCB0aGF0IHN5bmNocm9uaXplcyB3aXRoIEpCRDIgdHJhbnNhY3Rpb25zIHdoZW4gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyByZXR1cm5zIC1FQlVTWS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgZm9saW8gaW52YWxpZGF0aW9uIG9wZXJhdGlvbnMgKHN1Y2ggYXMgdHJ1bmNhdGUgb3IgaG9sZSBwdW5jaGluZykgb24gZXh0NCBpbm9kZXMgd2l0aCBkYXRhIGpvdXJuYWxsaW5nIGVuYWJsZWQuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIHBvdGVudGlhbCBsb2NrIGNvbnRlbnRpb24sIGRlYWRsb2Nrcywgb3IgaW5maW5pdGUgbG9vcHMgaWYgYSB0cmFuc2FjdGlvbiBjb21taXQgaXMgcGVuZGluZyBvciBtaXNzaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMjo0ODowOS4xMDgwODQwMTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDU1NTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDkzOGQ4ZTM1MmZlODBlNTIxYTdhZTRkN2I2OWQ5NjdjOTlkMTY3NWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDI6NDg6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXFxuaW5kZXggYzJjMmQ2YWM3ZjNkMS4uNmJiOTRhZmQ1MTAwNiAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcXG4rKysgYi9mcy9leHQ0L2lub2RlLmNcXG5AQCAtMzQyOSw3ICszNDI5LDI3IEBAIHN0YXRpYyB2b2lkIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHNpemVfdCBvZmZzZXQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHNpemVfdCBsZW5ndGgpXFxuIHtcXG4tXFx0V0FSTl9PTihfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCkgXFx1MDAzYyAwKTtcXG4rXFx0dGlkX3QgY29tbWl0X3RpZDtcXG4rXFx0aW50IHJldDtcXG4rXFx0Ym9vbCBoYXNfdHJhbnNhY3Rpb247XFxuK1xcdGpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfSk9VUk5BTChmb2xpby1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuK1xcbitcXHR3aGlsZSAoMSkge1xcbitcXHRcXHRyZXQgPSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XFxuK1xcdFxcdGlmIChyZXQgIT0gLUVCVVNZKSB7XFxuK1xcdFxcdFxcdFdBUk5fT04ocmV0IFxcdTAwM2MgMCk7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXHRcXHRoYXNfdHJhbnNhY3Rpb24gPSBmYWxzZTtcXG4rXFx0XFx0cmVhZF9sb2NrKFxcdTAwMjZqb3VybmFsLVxcdTAwM2VqX3N0YXRlX2xvY2spO1xcbitcXHRcXHRpZiAoam91cm5hbC1cXHUwMDNlal9jb21taXR0aW5nX3RyYW5zYWN0aW9uKSB7XFxuK1xcdFxcdFxcdGNvbW1pdF90aWQgPSBqb3VybmFsLVxcdTAwM2VqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24tXFx1MDAzZXRfdGlkO1xcbitcXHRcXHRcXHRoYXNfdHJhbnNhY3Rpb24gPSB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJlYWRfdW5sb2NrKFxcdTAwMjZqb3VybmFsLVxcdTAwM2VqX3N0YXRlX2xvY2spO1xcbitcXHRcXHRpZiAoaGFzX3RyYW5zYWN0aW9uKVxcbitcXHRcXHRcXHRqYmQyX2xvZ193YWl0X2NvbW1pdChqb3VybmFsLCBjb21taXRfdGlkKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBleHQ0X3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3Qgd2FpdClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NDg6MDkuNjQ5NjExNzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjYwNTU5NzU4NTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb1wiLFxuICAgIFwiX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvIGluIGZzL2V4dDQvaW5vZGUuYywgcmVwbGFjaW5nIGFuIGFzc2VydGlvbiB3aXRoIGEgcmV0cnkgbG9vcCB0aGF0IHN5bmNocm9uaXplcyB3aXRoIEpCRDIgdHJhbnNhY3Rpb25zIHdoZW4gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyByZXR1cm5zIC1FQlVTWS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgZm9saW8gaW52YWxpZGF0aW9uIG9wZXJhdGlvbnMgKHN1Y2ggYXMgdHJ1bmNhdGUgb3IgaG9sZSBwdW5jaGluZykgb24gZXh0NCBpbm9kZXMgd2l0aCBkYXRhIGpvdXJuYWxsaW5nIGVuYWJsZWQuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIHBvdGVudGlhbCBsb2NrIGNvbnRlbnRpb24sIGRlYWRsb2Nrcywgb3IgaW5maW5pdGUgbG9vcHMgaWYgYSB0cmFuc2FjdGlvbiBjb21taXQgaXMgcGVuZGluZyBvciBtaXNzaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDkzOGQ4ZTM1MmZlODBlNTIxYTdhZTRkN2I2OWQ5NjdjOTlkMTY3NWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAwMjo0ODowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xuaW5kZXggYzJjMmQ2YWM3ZjNkMS4uNmJiOTRhZmQ1MTAwNiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtMzQyOSw3ICszNDI5LDI3IEBAIHN0YXRpYyB2b2lkIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0XHRcdCAgIHNpemVfdCBvZmZzZXQsXG4gXHRcdFx0XHRcdCAgIHNpemVfdCBsZW5ndGgpXG4ge1xuLVx0V0FSTl9PTihfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCkgXHUwMDNjIDApO1xuK1x0dGlkX3QgY29tbWl0X3RpZDtcbitcdGludCByZXQ7XG4rXHRib29sIGhhc190cmFuc2FjdGlvbjtcbitcdGpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfSk9VUk5BTChmb2xpby1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3QpO1xuK1xuK1x0d2hpbGUgKDEpIHtcbitcdFx0cmV0ID0gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xuK1x0XHRpZiAocmV0ICE9IC1FQlVTWSkge1xuK1x0XHRcdFdBUk5fT04ocmV0IFx1MDAzYyAwKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbitcdFx0aGFzX3RyYW5zYWN0aW9uID0gZmFsc2U7XG4rXHRcdHJlYWRfbG9jayhcdTAwMjZqb3VybmFsLVx1MDAzZWpfc3RhdGVfbG9jayk7XG4rXHRcdGlmIChqb3VybmFsLVx1MDAzZWpfY29tbWl0dGluZ190cmFuc2FjdGlvbikge1xuK1x0XHRcdGNvbW1pdF90aWQgPSBqb3VybmFsLVx1MDAzZWpfY29tbWl0dGluZ190cmFuc2FjdGlvbi1cdTAwM2V0X3RpZDtcbitcdFx0XHRoYXNfdHJhbnNhY3Rpb24gPSB0cnVlO1xuK1x0XHR9XG4rXHRcdHJlYWRfdW5sb2NrKFx1MDAyNmpvdXJuYWwtXHUwMDNlal9zdGF0ZV9sb2NrKTtcbitcdFx0aWYgKGhhc190cmFuc2FjdGlvbilcbitcdFx0XHRqYmQyX2xvZ193YWl0X2NvbW1pdChqb3VybmFsLCBjb21taXRfdGlkKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIGJvb2wgZXh0NF9yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IHdhaXQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMjo0ODowOS42NDk2MTQxMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0MTkxOTM4MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcGxheWluZyB0aGUgcm9sZSBvZiBhbiBleHBlcnQ6XG5cbioqQW5hbHl6aW5nIHRoZSBFeHQ0IEpvdXJuYWxsZWQgSW52YWxpZGF0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhlIGNoYW5nZSBpcyB0dWNrZWQgYXdheSBpbiBgZnMvZXh0NC9pbm9kZS5jYCwgc3BlY2lmaWNhbGx5IHdpdGggYSBtb2RpZmljYXRpb24gdG8gYGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYC4gUmlnaHQsIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgam91cm5hbC1yZWxhdGVkIGZvbGlvIGhhbmRsaW5nLiBMZXQncyBnZXQgY3JhY2tpbmcuIEknbSBnb2luZyB0byBncmFiIHRoZSBwYXRjaCBhbmQgdGhhdCBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlLiBJ4oCZbGwgcHJvYmFibHkgdXNlIGByZWFkLWZpbGVgIHRvIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZiBmaXJzdCwgZ2V0IGEgZmVlbCBmb3IgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBUaGVuLCBJJ2xsIGRpdmUgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgaW5vZGUuY2Agd2l0aCBzb21ldGhpbmcgbGlrZSBgZ3JlcHBlcmAg4oCTIHRoYXQncyB0aGUgYmVzdCB3YXkgdG8gcmFwaWRseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBtb2RpZmljYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgaW52YWxpZGF0aW9uIGZ1bmN0aW9uIG5lZWRlZCBhZGp1c3RtZW50IOKAkyB3aGF0IHNjZW5hcmlvIGlzIGJlaW5nIGFkZHJlc3NlZD8gSXMgaXQgcmVsYXRlZCB0byBhIHNwZWNpZmljIGJ1ZywgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBvciBuZXcgZmVhdHVyZT8gR290dGEgZ2V0IHRoZSBmdWxsIHBpY3R1cmUgYmVmb3JlIEkgY2FuIGp1ZGdlIGl0cyBxdWFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDgxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMjo0ODozMy44NDE1NTcyMjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzI2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0MTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM0MTU6XFx0XFxuMzQxNjpcXHRcXHR0cmFjZV9leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xcbjM0MTc6XFx0XFxuMzQxODpcXHRcXHQvKlxcbjM0MTk6XFx0XFx0ICogSWYgaXQncyBhIGZ1bGwgdHJ1bmNhdGUgd2UganVzdCBmb3JnZXQgYWJvdXQgdGhlIHBlbmRpbmcgZGlydHlpbmdcXG4zNDIwOlxcdFxcdCAqL1xcbjM0MjE6XFx0XFx0aWYgKG9mZnNldCA9PSAwIFxcdTAwMjZcXHUwMDI2IGxlbmd0aCA9PSBmb2xpb19zaXplKGZvbGlvKSlcXG4zNDIyOlxcdFxcdFxcdGZvbGlvX2NsZWFyX2NoZWNrZWQoZm9saW8pO1xcbjM0MjM6XFx0XFxuMzQyNDpcXHRcXHRyZXR1cm4gamJkMl9qb3VybmFsX2ludmFsaWRhdGVfZm9saW8oam91cm5hbCwgZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcXG4zNDI1OlxcdH1cXG4zNDI2OlxcdFxcbjM0Mjc6XFx0LyogV3JhcHBlciBmb3IgYW9wcy4uLiAqL1xcbjM0Mjg6XFx0c3RhdGljIHZvaWQgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4zNDI5OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHNpemVfdCBvZmZzZXQsXFxuMzQzMDpcXHRcXHRcXHRcXHRcXHRcXHQgICBzaXplX3QgbGVuZ3RoKVxcbjM0MzE6XFx0e1xcbjM0MzI6XFx0XFx0dGlkX3QgY29tbWl0X3RpZDtcXG4zNDMzOlxcdFxcdGludCByZXQ7XFxuMzQzNDpcXHRcXHRib29sIGhhc190cmFuc2FjdGlvbjtcXG4zNDM1OlxcdFxcdGpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfSk9VUk5BTChmb2xpby1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuMzQzNjpcXHRcXG4zNDM3OlxcdFxcdHdoaWxlICgxKSB7XFxuMzQzODpcXHRcXHRcXHRyZXQgPSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XFxuMzQzOTpcXHRcXHRcXHRpZiAocmV0ICE9IC1FQlVTWSkge1xcbjM0NDA6XFx0XFx0XFx0XFx0V0FSTl9PTihyZXQgXFx1MDAzYyAwKTtcXG4zNDQxOlxcdFxcdFxcdFxcdHJldHVybjtcXG4zNDQyOlxcdFxcdFxcdH1cXG4zNDQzOlxcdFxcdFxcdGhhc190cmFuc2FjdGlvbiA9IGZhbHNlO1xcbjM0NDQ6XFx0XFx0XFx0cmVhZF9sb2NrKFxcdTAwMjZqb3VybmFsLVxcdTAwM2VqX3N0YXRlX2xvY2spO1xcbjM0NDU6XFx0XFx0XFx0aWYgKGpvdXJuYWwtXFx1MDAzZWpfY29tbWl0dGluZ190cmFuc2FjdGlvbikge1xcbjM0NDY6XFx0XFx0XFx0XFx0Y29tbWl0X3RpZCA9IGpvdXJuYWwtXFx1MDAzZWpfY29tbWl0dGluZ190cmFuc2FjdGlvbi1cXHUwMDNldF90aWQ7XFxuMzQ0NzpcXHRcXHRcXHRcXHRoYXNfdHJhbnNhY3Rpb24gPSB0cnVlO1xcbjM0NDg6XFx0XFx0XFx0fVxcbjM0NDk6XFx0XFx0XFx0cmVhZF91bmxvY2soXFx1MDAyNmpvdXJuYWwtXFx1MDAzZWpfc3RhdGVfbG9jayk7XFxuMzQ1MDpcXHRcXHRcXHRpZiAoaGFzX3RyYW5zYWN0aW9uKVxcbjM0NTE6XFx0XFx0XFx0XFx0amJkMl9sb2dfd2FpdF9jb21taXQoam91cm5hbCwgY29tbWl0X3RpZCk7XFxuMzQ1MjpcXHRcXHR9XFxuMzQ1MzpcXHR9XFxuMzQ1NDpcXHRcXG4zNDU1OlxcdHN0YXRpYyBib29sIGV4dDRfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCB3YWl0KVxcbjM0NTY6XFx0e1xcbjM0NTc6XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZvbGlvLVxcdTAwM2VtYXBwaW5nLVxcdTAwM2Vob3N0O1xcbjM0NTg6XFx0XFx0am91cm5hbF90ICpqb3VybmFsID0gRVhUNF9KT1VSTkFMKGlub2RlKTtcXG4zNDU5OlxcdFxcbjM0NjA6XFx0XFx0dHJhY2VfZXh0NF9yZWxlYXNlX2ZvbGlvKGlub2RlLCBmb2xpbyk7XFxuMzQ2MTpcXHRcXG4zNDYyOlxcdFxcdC8qIFBhZ2UgaGFzIGRpcnR5IGpvdXJuYWxsZWQgZGF0YSAtXFx1MDAzZSBjYW5ub3QgcmVsZWFzZSAqL1xcbjM0NjM6XFx0XFx0aWYgKGZvbGlvX3Rlc3RfY2hlY2tlZChmb2xpbykpXFxuMzQ2NDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAyOjQ4OjMzLjg0MTg5Mzc5NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQxMDg2NTg4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkgaW4gZXh0NCBEYXRhIEpvdXJuYWxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AuLi4gcmlnaHQsIHRoYXQncyBpbiBgZnMvZXh0NC9pbm9kZS5jYCwgc28gaXQncyBleHQ0LXNwZWNpZmljIGFuZCwgY3J1Y2lhbGx5LCBpdCdzIHJlbGV2YW50IHdoZW4gZGF0YSBqb3VybmFsaW5nIChgZGF0YT1qb3VybmFsYCkgaXMgZW5hYmxlZC4gR29vZCwgYmVjYXVzZSBleHQ0IGlzIGEgd29ya2hvcnNlLCBhIGNvcmUgZmlsZXN5c3RlbSwgYW5kIGl0J3Mgc29tZXRoaW5nIHdlICpjYW4qIGhpdCByZWxpYWJseSB3aXRoIFFFTVUsIEdDRSwgYW5kIG9mIGNvdXJzZSwgc3l6a2FsbGVyLiBUaGF0IG1lYW5zIHdlIGhhdmUgYSB2aWFibGUgZnV6emluZyB0YXJnZXQuXG5cbk5vdywgdGhpcyBwYXRjaCBtb2RpZmllcyBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gLCB3aGljaCBzZWVtcyB0byBiZSBsb29waW5nIHdoaWxlIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCByZXR1cm5zIGAtRUJVU1lgLiBJdCdzIHdhaXRpbmcgZm9yIGBqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb25gIHRvIGZpbmlzaCB1cC4gSG9sZCBvbi4uLiB0aGVyZSdzIGEgcG90ZW50aWFsIGlzc3VlLiBXaGF0IGlmIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCByZXR1cm5zIGAtRUJVU1lgLCAqYnV0KiBgaGFzX3RyYW5zYWN0aW9uYCBpcyAqZmFsc2UqP1xuXG5MZXQgbWUgbG9vayBhdCB0aGF0IGxvb3AgYWdhaW46XG5cbmBgYGNcblx0d2hpbGUgKDEpIHtcblx0XHRyZXQgPSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG5cdFx0aWYgKHJldCAhPSAtRUJVU1kpIHtcblx0XHRcdFdBUk5fT04ocmV0IFx1MDAzYyAwKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aGFzX3RyYW5zYWN0aW9uID0gZmFsc2U7XG5cdFx0cmVhZF9sb2NrKFx1MDAyNmpvdXJuYWwtXHUwMDNlal9zdGF0ZV9sb2NrKTtcblx0XHRpZiAoam91cm5hbC1cdTAwM2VqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24pIHtcblx0XHRcdGNvbW1pdF90aWQgPSBqb3VybmFsLVx1MDAzZWpfY29tbWl0dGluZ190cmFuc2FjdGlvbi1cdTAwM2V0X3RpZDtcblx0XHRcdGhhc190cmFuc2FjdGlvbiA9IHRydWU7XG5cdFx0fVxuXHRcdHJlYWRfdW5sb2NrKFx1MDAyNmpvdXJuYWwtXHUwMDNlal9zdGF0ZV9sb2NrKTtcblx0XHRpZiAoaGFzX3RyYW5zYWN0aW9uKVxuXHRcdFx0amJkMl9sb2dfd2FpdF9jb21taXQoam91cm5hbCwgY29tbWl0X3RpZCk7XG5cdH1cbmBgYFxuXG5Pa2F5LCBJIHNlZSBpdC4gSWYgYGhhc190cmFuc2FjdGlvbmAgaXMgZmFsc2UsIHRoaXMgbG9vcCB3aWxsIGp1c3QgKmJ1c3kgd2FpdCogd2l0aG91dCB5aWVsZGluZyBvciBzbGVlcGluZy4gVGhhdCdzIGEgaHVnZSByZWQgZmxhZy4gQSBidXN5IGxvb3AgaW4gdGhlIGtlcm5lbCBpcyBuZXZlciBnb29kLiBPciB3aGF0IGlmIGBqYmQyYCBpdHNlbGYgcmV0dXJucyBgLUVCVVNZYCBpbiBhIGRpZmZlcmVudCBzY2VuYXJpbz8gQWxzbywgdGhpcyBzdHJ1Y3R1cmUgaXMgYSB0aWNraW5nIHRpbWUgYm9tYiBmb3IgcG90ZW50aWFsIGRlYWRsb2NrLCBpbmZpbml0ZSBsb29wcywgb3IgZXZlbiBsb2NrZGVwIGlzc3Vlcy5cblxuVGhpcyBsb29rcyBsaWtlIGl04oCZcyBzY3JlYW1pbmcgZm9yIGZ1enppbmcuIERlZmluaXRlbHkgd29ydGggdGhlIGVmZm9ydC4gTm93LCBsZXTigJlzIHNlZSB3aGVyZSBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIGlzIGFjdHVhbGx5IHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMTgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMjo0ODozNy45NTA1NTU1MTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU2NDU0NTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9pbm9kZS5jPTM0MDA9c3RhdGljIHZvaWQgZXh0NF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtMzQxMC1cXG5mcy9leHQ0L2lub2RlLmM6MzQxMTpzdGF0aWMgaW50IF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG5mcy9leHQ0L2lub2RlLmMtMzQxMi1cXHRcXHRcXHRcXHRcXHQgICAgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aClcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0zNDE1LVxcbmZzL2V4dDQvaW5vZGUuYzozNDE2OlxcdHRyYWNlX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XFxuZnMvZXh0NC9pbm9kZS5jLTM0MTctXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtMzQyNy0vKiBXcmFwcGVyIGZvciBhb3BzLi4uICovXFxuZnMvZXh0NC9pbm9kZS5jOjM0Mjg6c3RhdGljIHZvaWQgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG5mcy9leHQ0L2lub2RlLmMtMzQyOS1cXHRcXHRcXHRcXHRcXHQgICBzaXplX3Qgb2Zmc2V0LFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTM0MzctXFx0d2hpbGUgKDEpIHtcXG5mcy9leHQ0L2lub2RlLmM6MzQzODpcXHRcXHRyZXQgPSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XFxuZnMvZXh0NC9pbm9kZS5jLTM0MzktXFx0XFx0aWYgKHJldCAhPSAtRUJVU1kpIHtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz0zOTg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGV4dDRfam91cm5hbGxlZF9hb3BzID0ge1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTM5OTItXFx0LmJtYXBcXHRcXHRcXHQ9IGV4dDRfYm1hcCxcXG5mcy9leHQ0L2lub2RlLmM6Mzk5MzpcXHQuaW52YWxpZGF0ZV9mb2xpb1xcdD0gZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8sXFxuZnMvZXh0NC9pbm9kZS5jLTM5OTQtXFx0LnJlbGVhc2VfZm9saW9cXHRcXHQ9IGV4dDRfcmVsZWFzZV9mb2xpbyxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01NzgwPWludCBleHQ0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTU4MzAtLypcXG5mcy9leHQ0L2lub2RlLmM6NTgzMTogKiBJbiBkYXRhPWpvdXJuYWwgbW9kZSBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIG1heSBmYWlsIHRvIGludmFsaWRhdGVcXG5mcy9leHQ0L2lub2RlLmMtNTgzMi0gKiBidWZmZXJzIHRoYXQgYXJlIGF0dGFjaGVkIHRvIGEgZm9saW8gc3RyYWRkbGluZyBpX3NpemUgYW5kIGFyZSB1bmRlcmdvaW5nXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NTgzNT1zdGF0aWMgdm9pZCBleHQ0X3dhaXRfZm9yX3RhaWxfcGFnZV9jb21taXQoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy01ODQ1LVxcdCAqIElmIHRoZSBmb2xpbyBpcyBmdWxseSB0cnVuY2F0ZWQsIHdlIGRvbid0IG5lZWQgdG8gd2FpdCBmb3IgYW55IGNvbW1pdFxcbmZzL2V4dDQvaW5vZGUuYzo1ODQ2OlxcdCAqIChhbmQgd2UgZXZlbiBzaG91bGQgbm90IGFzIF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oKSBtYXlcXG5mcy9leHQ0L2lub2RlLmMtNTg0Ny1cXHQgKiBzdHJpcCBhbGwgYnVmZmVycyBmcm9tIHRoZSBmb2xpbyBidXQga2VlcCB0aGUgZm9saW8gZGlydHkgd2hpY2ggY2FuIHRoZW5cXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy01ODU5LVxcdFxcdFxcdHJldHVybjtcXG5mcy9leHQ0L2lub2RlLmM6NTg2MDpcXHRcXHRyZXQgPSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsXFxuZnMvZXh0NC9pbm9kZS5jLTU4NjEtXFx0XFx0XFx0XFx0XFx0XFx0Zm9saW9fc2l6ZShmb2xpbykgLSBvZmZzZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMjo0ODozOC4zMDcwMTU0NzJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2Mjg2MzgwNzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIGZvciBTeXprYWxsZXIgVGFyZ2V0aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCwgd2hpY2ggaXMgYSBmdW5jdGlvbiB1c2VkIGFzIHRoZSBgaW52YWxpZGF0ZV9mb2xpb2AgYWRkcmVzc19zcGFjZV9vcGVyYXRpb24gaW4gYGV4dDRfam91cm5hbGxlZF9hb3BzYC4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIGl0J3Mgc3RhdGljLiBZZXMsIGl0J3MgZGVjbGFyZWQgYHN0YXRpY2AuIE5vdywgdGhlIGtleSBxdWVzdGlvbjogY2FuIFN5emthbGxlciBkaXJlY3RseSB0YXJnZXQgdGhpcyBmdW5jdGlvbj9cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIGxvb2sgZm9yIGNsdWVzIGluIG15IHBhc3QgZXhwZXJpZW5jZSB3aXRoIHN0YXRpYyBmdW5jdGlvbnMgYW5kIFN5emthbGxlci4gSG1tLCBTZWN0aW9uIDQgb2YgbXkgbm90ZXMgb24gdGhlIHN1YmplY3QgdGFsa3MgYWJvdXQgaG93IGNvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyBpbiBoZWFkZXJzIGRvbid0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiBgdm1saW51eGAsIHNvIHRoZXkgYXJlIG1pc3NlZCBieSBTeXprYWxsZXIncyBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4gQnV0LCB3YWl0Li4uIGBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgcmVzaWRlcyBpbiBgZnMvZXh0NC9pbm9kZS5jYCwgbm90IGEgaGVhZGVyLiBEb2VzIHRoYXQgbWVhbiBpdCdzIGlubGluZWQsIG9yIGlzIGl0IGEgc2VwYXJhdGUgc3ltYm9sIGluIHRoZSBrZXJuZWw/XG5cbkFoLCByaWdodCwgbm93IEkgcmVtZW1iZXIuIEl0J3MgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXI6IGAuaW52YWxpZGF0ZV9mb2xpbyA9IGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvLGAuIFNpbmNlIHRoZSBhZGRyZXNzIG9mIHRoZSBmdW5jdGlvbiBpcyB0YWtlbiAoYFx1MDAyNmV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCksIHRoZSBjb21waWxlciAqY2Fubm90KiBpbmxpbmUgaXQuIFRoZSBjb21waWxlciAqbXVzdCogYWxsb2NhdGUgYSBzeW1ib2wgZW50cnkgZm9yIHRoZSBmdW5jdGlvbiB3aXRoaW4gYHZtbGludXhgISBUaGVyZWZvcmUsIGl0IHNob3VsZCBiZSB0YXJnZXRhYmxlLiBOb3csIHRoZXJlIG1pZ2h0IGJlIGEgc2ltaWxhciBpc3N1ZSB3aXRoIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCBidXQgdGhhdCBpcyBhIHNlY29uZGFyeSBjb25zaWRlcmF0aW9uLiBMZXQncyBtYWtlIHN1cmUgdGhhdCB0aGF0IGlzIHByb3Blcmx5IGFjY291bnRlZCBmb3IgaW4gdGhlIGNoZWNrLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBLY29uZmlnIGZvciBleHQ0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBvcHRpb25zIGFyZSBlbmFibGVkIHRvIG1ha2Ugc3VyZSB0aGUgc3ltYm9sIGlzIHByZXNlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MTcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NDg6NDQuNTkzNDAwMDA2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MDgwMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQ0X0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNDUtXFxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvS2NvbmZpZy00Ny1cXHRib29sIFxcXCJFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTU1LVxcbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQvS2NvbmZpZy01Ny1cXHRib29sIFxcXCJFeHQ0IFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NDg6NDQuNjY3NDg3ODVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTI0MDYzNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgZXh0NCBLY29uZmlnIEZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgZnMvZXh0NC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gc29tZSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGluaXRpYWwgcGFydCBvZiB0aGUgZmlsZSwgcm91Z2hseSBhcm91bmQgbGluZXMgMSB0byAzMC4gVGhlcmUncyBwcm9iYWJseSBzb21ldGhpbmcgc3BlY2lmaWMgSSdtIGxvb2tpbmcgZm9yIHRoZXJlIOKAkyBwZXJoYXBzIGEgZGVwZW5kZW5jeSBjaGVjayBvciBhIGRlZmF1bHQgc2V0dGluZyBJIHdhbnQgdG8gY29uZmlybS4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aG9zZSBmaXJzdCBmZXcgbGluZXMgYW5kIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGF0J3MgZ29pbmcgb24uIEknbSBob3BpbmcgSSBjYW4gemVybyBpbiBvbiBpdCBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NDg6NDYuNTkxNTU1NDUxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBFWFQ0X0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuICAgNDpcXHRcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4gICA1OlxcdFxcdHNlbGVjdCBKQkQyXFxuICAgNjpcXHRcXHRzZWxlY3QgQ1JDMTZcXG4gICA3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgIDg6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICAgOTpcXHRcXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgVGhpcyBpcyB0aGUgbmV4dCBnZW5lcmF0aW9uIG9mIHRoZSBleHQzIGZpbGVzeXN0ZW0uXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCAgVW5saWtlIHRoZSBjaGFuZ2UgZnJvbSBleHQyIGZpbGVzeXN0ZW0gdG8gZXh0MyBmaWxlc3lzdGVtLFxcbiAgMTQ6XFx0XFx0ICB0aGUgb24tZGlzayBmb3JtYXQgb2YgZXh0NCBpcyBub3QgZm9yd2FyZHMgY29tcGF0aWJsZSB3aXRoXFxuICAxNTpcXHRcXHQgIGV4dDM7IGl0IGlzIGJhc2VkIG9uIGV4dGVudCBtYXBzIGFuZCBpdCBzdXBwb3J0cyA0OC1iaXRcXG4gIDE2OlxcdFxcdCAgcGh5c2ljYWwgYmxvY2sgbnVtYmVycy4gIFRoZSBleHQ0IGZpbGVzeXN0ZW0gYWxzbyBzdXBwb3J0cyBkZWxheWVkXFxuICAxNzpcXHRcXHQgIGFsbG9jYXRpb24sIHBlcnNpc3RlbnQgcHJlYWxsb2NhdGlvbiwgaGlnaCByZXNvbHV0aW9uIHRpbWUgc3RhbXBzLFxcbiAgMTg6XFx0XFx0ICBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgc3BlZWRcXG4gIDE5OlxcdFxcdCAgdXAgZnNjayB0aW1lLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHdlYiBwYWdlcyBhdFxcbiAgMjA6XFx0XFx0ICBodHRwOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcuXFxuICAyMTpcXHRcXG4gIDIyOlxcdFxcdCAgVGhlIGV4dDQgZmlsZXN5c3RlbSBzdXBwb3J0cyBtb3VudGluZyBhbiBleHQzIGZpbGVzeXN0ZW07IHdoaWxlIHRoZXJlXFxuICAyMzpcXHRcXHQgIGFyZSBzb21lIHBlcmZvcm1hbmNlIGdhaW5zIGZyb20gdGhlIGRlbGF5ZWQgYWxsb2NhdGlvbiBhbmQgaW5vZGVcXG4gIDI0OlxcdFxcdCAgdGFibGUgcmVhZGFoZWFkLCB0aGUgYmVzdCBwZXJmb3JtYW5jZSBnYWlucyByZXF1aXJlIGVuYWJsaW5nIGV4dDRcXG4gIDI1OlxcdFxcdCAgZmVhdHVyZXMgaW4gdGhlIGZpbGVzeXN0ZW0gdXNpbmcgdHVuZTJmcywgb3IgZm9ybWF0dGluZyBhIG5ld1xcbiAgMjY6XFx0XFx0ICBmaWxlc3lzdGVtIGFzIGFuIGV4dDQgZmlsZXN5c3RlbSBpbml0aWFsbHkuIFdpdGhvdXQgZXhwbGljaXQgZW5hYmxpbmdcXG4gIDI3OlxcdFxcdCAgb2YgZXh0NCBmZWF0dXJlcywgdGhlIG9uIGRpc2sgZmlsZXN5c3RlbSBmb3JtYXQgc3RheXMgZnVsbHkgYmFja3dhcmRcXG4gIDI4OlxcdFxcdCAgY29tcGF0aWJsZS5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlXFxuICAzMTpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQ0LlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMjo0ODo0Ni41OTE3MTQ2NDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDE4OTIyMzUzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEVYVDQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KipcblxuT2theSwgc28gdGhlIGJhc2UgY29uZmlndXJhdGlvbiBJJ20gbG9va2luZyBhdCBoZXJlIGlzIGBFWFQ0X0ZTYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2Agd2l0aGluIHRoZSBFWFQ0IGZpbGVzeXN0ZW0gY29kZSBoYXMgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBTcGVjaWZpY2FsbHksIGFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoYXQgZnVuY3Rpb24gdG8gZXZlbiBiZSBjb21waWxlZCBvciBjb25zaWRlcmVkPyBMZXQncyBkcmlsbCBpbnRvIHRoZSBgZnMvZXh0NC9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyByZWxhdGVkIHRvIHRoYXQgZnVuY3Rpb24uIFRoaXMgaXMgc3RhbmRhcmQgcHJvY2VkdXJlLCBvZiBjb3Vyc2UuIEknbGwgcXVpY2tseSBjaGVjayBmb3IgYW55IHJlbGF0ZWQgYCNpZmRlZmAgb3Igc2ltaWxhciBjb25zdHJ1Y3RzLiBUaGlzIGlzIHdoZXJlIHRoZSBhbnN3ZXIgdHlwaWNhbGx5IHJlc2lkZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1OTAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAyOjQ4OjUwLjc4MDk0MTMyMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGV4dDQtZmlsZXN5c3RlbSByb3V0aW5lcy5cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0VYVDRfRlMpICs9IGV4dDQub1xcbiAgIDc6XFx0XFxuICAgODpcXHRleHQ0LXlcXHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxcXFxuICAgOTpcXHRcXHRcXHRleHRlbnRzX3N0YXR1cy5vIGZpbGUubyBmc21hcC5vIGZzeW5jLm8gaGFzaC5vIGlhbGxvYy5vIFxcXFxcXG4gIDEwOlxcdFxcdFxcdGluZGlyZWN0Lm8gaW5saW5lLm8gaW5vZGUubyBpb2N0bC5vIG1iYWxsb2MubyBtaWdyYXRlLm8gXFxcXFxcbiAgMTE6XFx0XFx0XFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXFxcXG4gIDEyOlxcdFxcdFxcdHN1cGVyLm8gc3ltbGluay5vIHN5c2ZzLm8geGF0dHIubyB4YXR0cl9odXJkLm8geGF0dHJfdHJ1c3RlZC5vIFxcXFxcXG4gIDEzOlxcdFxcdFxcdHhhdHRyX3VzZXIubyBmYXN0X2NvbW1pdC5vIG9ycGhhbi5vXFxuICAxNDpcXHRcXG4gIDE1OlxcdGV4dDQtJChDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wpXFx0Kz0gYWNsLm9cXG4gIDE2OlxcdGV4dDQtJChDT05GSUdfRVhUNF9GU19TRUNVUklUWSlcXHRcXHQrPSB4YXR0cl9zZWN1cml0eS5vXFxuICAxNzpcXHRleHQ0LXRlc3Qtb2Jqc1xcdFxcdFxcdFxcdCs9IGlub2RlLXRlc3QubyBtYmFsbG9jLXRlc3QubyBcXFxcXFxuICAxODpcXHRcXHRcXHRcXHRcXHRcXHQgICBleHRlbnRzLXRlc3Qub1xcbiAgMTk6XFx0b2JqLSQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXFx0XFx0Kz0gZXh0NC10ZXN0Lm9cXG4gIDIwOlxcdGV4dDQtJChDT05GSUdfRlNfVkVSSVRZKVxcdFxcdCs9IHZlcml0eS5vXFxuICAyMTpcXHRleHQ0LSQoQ09ORklHX0ZTX0VOQ1JZUFRJT04pXFx0XFx0Kz0gY3J5cHRvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NDg6NTAuNzgxMDQzNDEyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU2MDAwOTc4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFWFQ0IEpvdXJuYWxpbmcgSW52YWxpZGF0aW9uKipcblxuT2theSwgc28gYGlub2RlLm9gIGluIGBleHQ0LXlgIGlzIGNvbnRpbmdlbnQgb24gYENPTkZJR19FWFQ0X0ZTYC4gVGhhdCBtYWtlcyBzZW5zZS4gYENPTkZJR19FWFQ0X0ZTYCBwdWxscyBpbiBgSkJEMmAgYW5kIGBCVUZGRVJfSEVBRGAg4oCTIHRoZSB1c3VhbCBzdXNwZWN0cy4gSSBkb24ndCB0aGluayB0aGVyZSdzIGFueXRoaW5nIHVudXN1YWwgY29uZmlnLXdpc2UgZm9yIGRhdGEgam91cm5hbGluZzsgaXQncyBqdXN0IHRoZSBgZGF0YT1qb3VybmFsYCBtb3VudCBvcHRpb24gb3IgdXNpbmcgYGNoYXR0ciAramAsIGFzIGV4cGVjdGVkLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiBoZXJlLiBMZXQgbWUgY2hlY2sgdGhlIGdpdCBjb21taXQgbG9nLCBzZWUgaWYgSSBjYW4gZ2V0IHNvbWUgY29udGV4dC4gSG1tLCBubyBgZ2l0IGxvZ2AgYXZhaWxhYmxlLCBidXQgSSBoYXZlIHRoZSBkaWZmLiBHb29kIGVub3VnaC4gSSBjYW4gc2VlIHRoZSBjb21taXQ6XG5cbmBgYFxuY29tbWl0IDkzOGQ4ZTM1MmZlODBlNTIxYTdhZTRkN2I2OWQ5NjdjOTlkMTY3NWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAwMjo0ODowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xuaW5kZXggYzJjMmQ2YWM3ZjNkMS4uNmJiOTRhZmQ1MTAwNiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtMzQyOSw3ICszNDI5LDI3IEBAIHN0YXRpYyB2b2lkIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0XHRcdCAgIHNpemVfdCBvZmZzZXQsXG4gXHRcdFx0XHRcdCAgIHNpemVfdCBsZW5ndGgpXG4ge1xuLVx0V0FSTl9PTihfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCkgXHUwMDNjIDApO1xuK1x0dGlkX3QgY29tbWl0X3RpZDtcbitcdGludCByZXQ7XG4rXHRib29sIGhhc190cmFuc2FjdGlvbjtcbitcdGpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfSk9VUk5BTChmb2xpby1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3QpO1xuK1xuK1x0d2hpbGUgKDEpIHtcbitcdFx0cmV0ID0gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xuK1x0XHRpZiAocmV0ICE9IC1FQlVTWSkge1xuK1x0XHRcdFdBUk5fT04ocmV0IFx1MDAzYyAwKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbitcdFx0aGFzX3RyYW5zYWN0aW9uID0gZmFsc2U7XG4rXHRcdHJlYWRfbG9jayhcdTAwMjZqb3VybmFsLVx1MDAzZWpfc3RhdGVfbG9jayk7XG4rXHRcdGlmIChqb3VybmFsLVx1MDAzZWpfY29tbWl0dGluZ190cmFuc2FjdGlvbikge1xuK1x0XHRcdGNvbW1pdF90aWQgPSBqb3VybmFsLVx1MDAzZWpfY29tbWl0dGluZ190cmFuc2FjdGlvbi1cdTAwM2V0X3RpZDtcbitcdFx0XHRoYXNfdHJhbnNhY3Rpb24gPSB0cnVlO1xuK1x0XHR9XG4rXHRcdHJlYWRfdW5sb2NrKFx1MDAyNmpvdXJuYWwtXHUwMDNlal9zdGF0ZV9sb2NrKTtcbitcdFx0aWYgKGhhc190cmFuc2FjdGlvbilcbitcdFx0XHRqYmQyX2xvZ193YWl0X2NvbW1pdChqb3VybmFsLCBjb21taXRfdGlkKTtcbitcdH1cbiB9XG4gYGBgXG5cbkFoLCBpdCBzZWVtcyB3ZSdyZSBoYW5kbGluZyB0aGUgY2FzZSB3aGVyZSBgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgcmV0dXJucyAtRUJVU1kuIFRoYXQncyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgaXQncyBidXN5IGFuZCB3aGF0IHRoaXMgd2hpbGUgbG9vcCBkb2VzLiBJdCBsb29rcyBsaWtlIGl0J3Mgd2FpdGluZyBmb3IgYSB0cmFuc2FjdGlvbiB0byBjb21wbGV0ZS4gU3BlY2lmaWNhbGx5IGl0IGNoZWNrcyB0byBzZWUgaWYgdGhlIGBqb3VybmFsLVx1MDAzZWpfY29tbWl0dGluZ190cmFuc2FjdGlvbmAgZXhpc3RzOyBpZiBpdCBkb2VzLCBpdCByZXRyaWV2ZXMgdGhlIGBjb21taXRfdGlkYCBhbmQgdGhlbiBjYWxscyBgamJkMl9sb2dfd2FpdF9jb21taXRgLiBPa2F5LCBJIHdpbGwgbm93IGludmVzdGlnYXRlIGhvdyBgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2Agd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMjo0ODo1Ni4zODExNDU5MzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA1NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDEwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNDEwOlxcdFxcbjM0MTE6XFx0c3RhdGljIGludCBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuMzQxMjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aClcXG4zNDEzOlxcdHtcXG4zNDE0OlxcdFxcdGpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfSk9VUk5BTChmb2xpby1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuMzQxNTpcXHRcXG4zNDE2OlxcdFxcdHRyYWNlX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XFxuMzQxNzpcXHRcXG4zNDE4OlxcdFxcdC8qXFxuMzQxOTpcXHRcXHQgKiBJZiBpdCdzIGEgZnVsbCB0cnVuY2F0ZSB3ZSBqdXN0IGZvcmdldCBhYm91dCB0aGUgcGVuZGluZyBkaXJ0eWluZ1xcbjM0MjA6XFx0XFx0ICovXFxuMzQyMTpcXHRcXHRpZiAob2Zmc2V0ID09IDAgXFx1MDAyNlxcdTAwMjYgbGVuZ3RoID09IGZvbGlvX3NpemUoZm9saW8pKVxcbjM0MjI6XFx0XFx0XFx0Zm9saW9fY2xlYXJfY2hlY2tlZChmb2xpbyk7XFxuMzQyMzpcXHRcXG4zNDI0OlxcdFxcdHJldHVybiBqYmQyX2pvdXJuYWxfaW52YWxpZGF0ZV9mb2xpbyhqb3VybmFsLCBmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xcbjM0MjU6XFx0fVxcbjM0MjY6XFx0XFxuMzQyNzpcXHQvKiBXcmFwcGVyIGZvciBhb3BzLi4uICovXFxuMzQyODpcXHRzdGF0aWMgdm9pZCBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbjM0Mjk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc2l6ZV90IG9mZnNldCxcXG4zNDMwOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHNpemVfdCBsZW5ndGgpXFxuMzQzMTpcXHR7XFxuMzQzMjpcXHRcXHR0aWRfdCBjb21taXRfdGlkO1xcbjM0MzM6XFx0XFx0aW50IHJldDtcXG4zNDM0OlxcdFxcdGJvb2wgaGFzX3RyYW5zYWN0aW9uO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMjo0ODo1Ni4zODE0NTQ0MTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMzMzQ3OTQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgZXh0NF93YWl0X2Zvcl90YWlsX3BhZ2VfY29tbWl0YCoqXG5cbkFscmlnaHQsIGxldCdzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgZXh0NF93YWl0X2Zvcl90YWlsX3BhZ2VfY29tbWl0YC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZXhhbWluZSB0aGlzIGZ1bmN0aW9uLCB3aGljaCBpcyBsb2NhdGVkIGluIGBmcy9leHQ0L2lub2RlLmNgLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgZnVuY3Rpb25zIGxpa2UgdGhlc2UsIGRlYWxpbmcgd2l0aCB0YWlsIHBhZ2UgY29tbWl0cywgYXJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBleHQ0IGZpbGVzeXN0ZW0gaGFuZGxlcyBkYXRhIHBlcnNpc3RlbmNlIGFuZCBzeW5jaHJvbml6YXRpb24gYXQgYSB2ZXJ5IGdyYW51bGFyIGxldmVsLiBJIHN1c3BlY3QgdGhpcyBpcyB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgdGFpbCBwYWdlIHdyaXRlYmFjayBwcm9jZXNzIHJlc2lkZXMuIEkgYW50aWNpcGF0ZSBpdCdsbCBiZSBjZW50cmFsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBmaWxlc3lzdGVtIGVuc3VyZXMgZGF0YSBpbnRlZ3JpdHkgd2hlbiBkZWFsaW5nIHdpdGggcGFydGlhbGx5IHdyaXR0ZW4gYmxvY2tzLiBJJ20ga2VlbiB0byBkaXNzZWN0IGl0cyBsb2dpYywgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIEkvTyBwYXRoLiBUaGlzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgZXh0NCB1bmRlciBkaWZmZXJlbnQgd29ya2xvYWRzIGFuZCBjb25maWd1cmF0aW9ucywgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIGZyYWdtZW50ZWQgZmlsZXMgb3IgcG93ZXIgZmFpbHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTE4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMjo0ODo1OC43MTQ5MzU3NzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODMwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1ODMwOlxcdC8qXFxuNTgzMTpcXHQgKiBJbiBkYXRhPWpvdXJuYWwgbW9kZSBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIG1heSBmYWlsIHRvIGludmFsaWRhdGVcXG41ODMyOlxcdCAqIGJ1ZmZlcnMgdGhhdCBhcmUgYXR0YWNoZWQgdG8gYSBmb2xpbyBzdHJhZGRsaW5nIGlfc2l6ZSBhbmQgYXJlIHVuZGVyZ29pbmdcXG41ODMzOlxcdCAqIGNvbW1pdC4gSW4gdGhhdCBjYXNlIHdlIGhhdmUgdG8gd2FpdCBmb3IgY29tbWl0IHRvIGZpbmlzaCBhbmQgdHJ5IGFnYWluLlxcbjU4MzQ6XFx0ICovXFxuNTgzNTpcXHRzdGF0aWMgdm9pZCBleHQ0X3dhaXRfZm9yX3RhaWxfcGFnZV9jb21taXQoc3RydWN0IGlub2RlICppbm9kZSlcXG41ODM2OlxcdHtcXG41ODM3OlxcdFxcdHVuc2lnbmVkIG9mZnNldDtcXG41ODM4OlxcdFxcdGpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX2pvdXJuYWw7XFxuNTgzOTpcXHRcXHR0aWRfdCBjb21taXRfdGlkO1xcbjU4NDA6XFx0XFx0aW50IHJldDtcXG41ODQxOlxcdFxcdGJvb2wgaGFzX3RyYW5zYWN0aW9uO1xcbjU4NDI6XFx0XFxuNTg0MzpcXHRcXHRvZmZzZXQgPSBpbm9kZS1cXHUwMDNlaV9zaXplIFxcdTAwMjYgKFBBR0VfU0laRSAtIDEpO1xcbjU4NDQ6XFx0XFx0LypcXG41ODQ1OlxcdFxcdCAqIElmIHRoZSBmb2xpbyBpcyBmdWxseSB0cnVuY2F0ZWQsIHdlIGRvbid0IG5lZWQgdG8gd2FpdCBmb3IgYW55IGNvbW1pdFxcbjU4NDY6XFx0XFx0ICogKGFuZCB3ZSBldmVuIHNob3VsZCBub3QgYXMgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIG1heVxcbjU4NDc6XFx0XFx0ICogc3RyaXAgYWxsIGJ1ZmZlcnMgZnJvbSB0aGUgZm9saW8gYnV0IGtlZXAgdGhlIGZvbGlvIGRpcnR5IHdoaWNoIGNhbiB0aGVuXFxuNTg0ODpcXHRcXHQgKiBjb25mdXNlIGUuZy4gY29uY3VycmVudCBleHQ0X3dyaXRlcGFnZXMoKSBzZWVpbmcgZGlydHkgZm9saW8gd2l0aG91dFxcbjU4NDk6XFx0XFx0ICogYnVmZmVycykuIEFsc28gd2UgZG9uJ3QgbmVlZCB0byB3YWl0IGZvciBhbnkgY29tbWl0IGlmIGFsbCBidWZmZXJzIGluXFxuNTg1MDpcXHRcXHQgKiB0aGUgZm9saW8gcmVtYWluIHZhbGlkLiBUaGlzIGlzIG1vc3QgYmVuZWZpY2lhbCBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mXFxuNTg1MTpcXHRcXHQgKiBibG9ja3NpemUgPT0gUEFHRVNJWkUuXFxuNTg1MjpcXHRcXHQgKi9cXG41ODUzOlxcdFxcdGlmICghb2Zmc2V0IHx8IG9mZnNldCBcXHUwMDNlIChQQUdFX1NJWkUgLSBpX2Jsb2Nrc2l6ZShpbm9kZSkpKVxcbjU4NTQ6XFx0XFx0XFx0cmV0dXJuO1xcbjU4NTU6XFx0XFx0d2hpbGUgKDEpIHtcXG41ODU2OlxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8oaW5vZGUtXFx1MDAzZWlfbWFwcGluZyxcXG41ODU3OlxcdFxcdFxcdFxcdFxcdCAgICAgIGlub2RlLVxcdTAwM2VpX3NpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuNTg1ODpcXHRcXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG41ODU5OlxcdFxcdFxcdFxcdHJldHVybjtcXG41ODYwOlxcdFxcdFxcdHJldCA9IF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCxcXG41ODYxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGZvbGlvX3NpemUoZm9saW8pIC0gb2Zmc2V0KTtcXG41ODYyOlxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuNTg2MzpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjU4NjQ6XFx0XFx0XFx0aWYgKHJldCAhPSAtRUJVU1kpXFxuNTg2NTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuNTg2NjpcXHRcXHRcXHRoYXNfdHJhbnNhY3Rpb24gPSBmYWxzZTtcXG41ODY3OlxcdFxcdFxcdHJlYWRfbG9jayhcXHUwMDI2am91cm5hbC1cXHUwMDNlal9zdGF0ZV9sb2NrKTtcXG41ODY4OlxcdFxcdFxcdGlmIChqb3VybmFsLVxcdTAwM2VqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24pIHtcXG41ODY5OlxcdFxcdFxcdFxcdGNvbW1pdF90aWQgPSBqb3VybmFsLVxcdTAwM2VqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24tXFx1MDAzZXRfdGlkO1xcbjU4NzA6XFx0XFx0XFx0XFx0aGFzX3RyYW5zYWN0aW9uID0gdHJ1ZTtcXG41ODcxOlxcdFxcdFxcdH1cXG41ODcyOlxcdFxcdFxcdHJlYWRfdW5sb2NrKFxcdTAwMjZqb3VybmFsLVxcdTAwM2VqX3N0YXRlX2xvY2spO1xcbjU4NzM6XFx0XFx0XFx0aWYgKGhhc190cmFuc2FjdGlvbilcXG41ODc0OlxcdFxcdFxcdFxcdGpiZDJfbG9nX3dhaXRfY29tbWl0KGpvdXJuYWwsIGNvbW1pdF90aWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMjo0ODo1OC43MTUxODU1MDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTgzODI3MzQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWxseSBSaXNreSBleHQ0IENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBleHBlcnQgaW50dWl0aW9uIGtpY2tzIGluLiBUaGlzIGBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgZnVuY3Rpb24ganVzdCBnb3QgYSBzaWduaWZpY2FudCBsb2dpYyBjaGFuZ2UuIFByZXZpb3VzbHksIGlmIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCBmYWlsZWQsIGl0IHNpbXBseSB0cmlnZ2VyZWQgYSBgV0FSTl9PTmAuIE5vdywgaXQncyBhIGxvb3Agd2l0aCByZXRyaWVzISBTcGVjaWZpY2FsbHksIGl0IGNoZWNrcyBmb3IgYC1FQlVTWWAgYW5kLCBpZiBpdCBnZXRzIHRoYXQsIGl0IGdyYWJzIHRoZSBgam91cm5hbC1cdTAwM2VqX3N0YXRlX2xvY2tgLCBjaGVja3MgaWYgdGhlcmUncyBhbiBvbmdvaW5nIGNvbW1pdCAoYGpfY29tbWl0dGluZ190cmFuc2FjdGlvbmApLCBhbmQgdGhlbiAqd2FpdHMqIGZvciB0aGF0IGNvbW1pdCB1c2luZyBgamJkMl9sb2dfd2FpdF9jb21taXRgLlxuXG5UaGUgdGhpbmcgdGhhdCBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXQgbWUgaXMsIFwiV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQ/XCIgSSBrbm93IHRoaXMgYGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aGluIGZvbGlvIGludmFsaWRhdGlvbiBwYXRocy4gVGhpbmsgdHJ1bmNhdGUsIGhvbGUgcHVuY2hpbmcsIGBpbnZhbGlkYXRlX21hcHBpbmdfcGFnZXNgLCBgZmlsZW1hcF9pbnZhbGlkYXRlX2ZvbGlvYCDigJMgYWxsIHRoZSB1c3VhbCBzdXNwZWN0cy4gQW5kLCBjcnVjaWFsbHksIGl0J3Mgb2Z0ZW4gY2FsbGVkIHdoaWxlICpob2xkaW5nKiBmb2xpbyBsb2NrcyBvciBvdGhlciByZWxldmFudCBsb2Nrcy4gVGhpcyBoYXMgbXkgYWxhcm0gYmVsbHMgcmluZ2luZy4gVGhpcyBuZXcgcmV0cnkgbG9vcCAqaW5zaWRlKiB0aGlzIGNvbnRleHQuLi4gQ291bGQgdGhpcyBjYXVzZSBhIGxvY2sgaW52ZXJzaW9uIG9yIGV2ZW4gYSBkZWFkbG9jayB3aXRoIHRoZSBgamJkMmAgY29tbWl0IHByb2Nlc3M/IE9yIGlmIHRoZXJlIGlzIG5vIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24sIGlzIHRoaXMgYW4gaW5maW5pdGUgYnVzeSBsb29wPyBJdCBpcy5cblxuSSBrbm93IHRoZSBzeXN0ZW0gaGFzIGdvb2QgZnV6emluZyBjYXBhYmlsaXRpZXMsIGVzcGVjaWFsbHkgd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSB3b25kZXIgaWYgdGhpcyBjb2RlIGNoYW5nZSBpcyBldmVuIHdvcnRoIGZ1enppbmc/XG5cbkxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gUmVhY2hhYmlsaXR5PyBleHQ0IGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHRoZSBzdGFuZGFyZCBlbnZpcm9ubWVudHMuIENvcmUgc3Vic3lzdGVtPyBJdCdzIFZGUy9leHQ0LCByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIGZpbGVzeXN0ZW0uIFJlZmFjdG9yaW5nL0xvZ2ljIGNoYW5nZXM/IEl0IGlzIGludHJvZHVjaW5nIGEgcmV0cnkgbG9vcCB3aXRoIGxvY2tpbmcgYW5kIHdhaXRpbmcuIFdvcnRoIGZ1enppbmc6IHllcywgaXQgc2VlbXMgd29ydGh3aGlsZS5cblxuTm93LCB3aGljaCBzeW1ib2xzIGRvIEkgbmVlZCB0byBmb2N1cyBvbiBkdXJpbmcgZnV6emluZz8gT2J2aW91c2x5LCBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gYGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCBhbmQgYF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gLiBCdXQgSSBuZWVkIHRvIGxvb2sgYXQgd2hhdCBjYWxscyB0aGVtLiBJdCBzZWVtcyBsaWtlIGl0J3MgY2FsbGVkIHZpYSBgYW9wcy1cdTAwM2VpbnZhbGlkYXRlX2ZvbGlvYC4gTGV0J3MgY2hlY2sgYGV4dDRfd2FpdF9mb3JfdGFpbF9wYWdlX2NvbW1pdGAgYXMgd2VsbC4gVGhlIHByaW1hcnkgZm9jdXMgaXMgYGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYC4gSXQgYXBwZWFycyB0byBiZSBub24taW5saW5lZCBiZWNhdXNlIGl0IGlzIHN0b3JlZCBpbiB0aGUgYGV4dDRfam91cm5hbGxlZF9hb3BzYCBzdHJ1Y3QuIExldCdzIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZnVuY3Rpb25zIGluIGV4dDQgaW50ZXJhY3Rpbmcgd2l0aCBqb3VybmFsbGVkIGludmFsaWRhdGUgb3IgZGF0YSBqb3VybmFsaW5nIHRydW5jYXRlLiBJJ2xsIG5lZWQgdG8gZ3JlcHBlciBmb3IgYGV4dDRfam91cm5hbGxlZF9hb3BzYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTcxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NDk6MDQuNTUzNDYzNzU5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTIyMzE3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2pvdXJuYWxsZWRfYW9wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvaW5vZGUuYz0zOTY5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGV4dDRfYW9wcyA9IHtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0zOTg0LVxcbmZzL2V4dDQvaW5vZGUuYzozOTg1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGV4dDRfam91cm5hbGxlZF9hb3BzID0ge1xcbmZzL2V4dDQvaW5vZGUuYy0zOTg2LVxcdC5yZWFkX2ZvbGlvXFx0XFx0PSBleHQ0X3JlYWRfZm9saW8sXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NDAyND12b2lkIGV4dDRfc2V0X2FvcHMoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy00MDMwLVxcdGNhc2UgRVhUNF9JTk9ERV9KT1VSTkFMX0RBVEFfTU9ERTpcXG5mcy9leHQ0L2lub2RlLmM6NDAzMTpcXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZleHQ0X2pvdXJuYWxsZWRfYW9wcztcXG5mcy9leHQ0L2lub2RlLmMtNDAzMi1cXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAyOjQ5OjA0LjYyNDY5MzY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU0NDk2NjY2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEV4dDQgSW52YWxpZGF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBJdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgYGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCwgc3BlY2lmaWNhbGx5IGluIGBmcy9leHQ0L2lub2RlLmNgLiBUaGF0J3MgbXkgbWFpbiBmb2N1cyDigJMgbXkgXCJGb2N1c1N5bWJvbCxcIiBhY3R1YWxseS4gVGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoaXMgZnVuY3Rpb24gdG8gaW5jbHVkZSBhIHJldHJ5IGxvb3AgdGhhdCB3YWl0cyBmb3IgSkJEMiB0cmFuc2FjdGlvbnMgdG8gY29tbWl0IHdoZW4gaXQgcmVjZWl2ZXMgYW4gYC1FQlVTWWAgZXJyb3IgZnJvbSBgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AuIEV2ZW4gaWYgYF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIGlzIGlubGluZWQsIGl0J3Mgc2FmZSBhbmQgaGVscGZ1bCB0byBsaXN0IGJvdGggc3ltYm9scy4gSSd2ZSBhbHNvIHZlcmlmaWVkIHRoYXQgYGpiZDJfam91cm5hbF9pbnZhbGlkYXRlX2ZvbGlvYCBpc24ndCBtb2RpZmllZC5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIENsZWFybHksIGBDT05GSUdfRVhUNF9GU2AgaXMgYSBtdXN0LWhhdmU7IHdpdGhvdXQgaXQsIHRoZSB3aG9sZSBleHQ0IGZpbGVzeXN0ZW0gaXNuJ3QgZXZlbiBjb21waWxlZC4gSSBjaGVja2VkIHRoZSBgZnMvZXh0NC9LY29uZmlnYCBmaWxlIGFuZCBjb25maXJtZWQgdGhhdCBgRVhUNF9GU2AgZG9lc24ndCBkZXBlbmQgb24gYW55dGhpbmcgZWxzZS4gVGhhdCdzIGdvb2QuXG5cblNvLCBpbiBzdW1tYXJ5OlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogWWVzLCBhYnNvbHV0ZWx5LiBUaGlzIG1vZGlmaWNhdGlvbiBzZWVtcyBsaWtlIGl0IGludHJvZHVjZXMgY29tcGxleGl0eSByZWxhdGVkIHRvIHdhaXRpbmcgZm9yIHRyYW5zYWN0aW9ucywgd2hpY2ggcmFpc2VzIGNvbmNlcm5zIGFib3V0IHBvdGVudGlhbCBpc3N1ZXMuXG4qICAgKipGb2N1c1N5bWJvbHM6KiogSSd2ZSBpZGVudGlmaWVkIGBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgYW5kIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCBhcyB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIHBheSBhdHRlbnRpb24gdG8uXG4qICAgKipFbmFibGVDb25maWdzOioqIGBDT05GSUdfRVhUNF9GU2AgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCdzIHRydWx5IGVzc2VudGlhbCBoZXJlLlxuKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCdzIGNoYW5nZSBpbnZvbHZlcyBhIHJldHJ5IGxvb3AuIEknbSBjb25jZXJuZWQgYWJvdXQgcG90ZW50aWFsIGRlYWRsb2NrcywgbG9jayBpbnZlcnNpb25zLCBvciBpbmZpbml0ZSBidXN5LWxvb3BzIGlmIGBoYXNfdHJhbnNhY3Rpb25gIHJlbWFpbnMgZmFsc2UuIFRoaXMgaXMgYSBjbGFzc2ljIGNhc2Ugd2hlcmUgZnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdW5jb3ZlciBzdWJ0bGUgY29uY3VycmVuY3kgcHJvYmxlbXMgcmVsYXRlZCB0byB0aGUgam91cm5hbCBhbmQgZm9saW8gaW52YWxpZGF0aW9uLiBJJ20gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLiBUaW1lIHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg0NywiT3V0cHV0VG9rZW5zIjoxNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NDk6MTAuMDc0MzYzNjA5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MDAyMjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9cIixcbiAgICBcIl9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyBpbiBmcy9leHQ0L2lub2RlLmMsIHJlcGxhY2luZyBhbiBhc3NlcnRpb24gd2l0aCBhIHJldHJ5IGxvb3AgdGhhdCBzeW5jaHJvbml6ZXMgd2l0aCBKQkQyIHRyYW5zYWN0aW9ucyB3aGVuIF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8gcmV0dXJucyAtRUJVU1kuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGZvbGlvIGludmFsaWRhdGlvbiBvcGVyYXRpb25zIChzdWNoIGFzIHRydW5jYXRlIG9yIGhvbGUgcHVuY2hpbmcpIG9uIGV4dDQgaW5vZGVzIHdpdGggZGF0YSBqb3VybmFsbGluZyBlbmFibGVkLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uLCBkZWFkbG9ja3MsIG9yIGluZmluaXRlIGxvb3BzIGlmIGEgdHJhbnNhY3Rpb24gY29tbWl0IGlzIHBlbmRpbmcgb3IgbWlzc2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9cIixcbiAgICBcIl9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyBpbiBmcy9leHQ0L2lub2RlLmMsIHJlcGxhY2luZyBhbiBhc3NlcnRpb24gd2l0aCBhIHJldHJ5IGxvb3AgdGhhdCBzeW5jaHJvbml6ZXMgd2l0aCBKQkQyIHRyYW5zYWN0aW9ucyB3aGVuIF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8gcmV0dXJucyAtRUJVU1kuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGZvbGlvIGludmFsaWRhdGlvbiBvcGVyYXRpb25zIChzdWNoIGFzIHRydW5jYXRlIG9yIGhvbGUgcHVuY2hpbmcpIG9uIGV4dDQgaW5vZGVzIHdpdGggZGF0YSBqb3VybmFsbGluZyBlbmFibGVkLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uLCBkZWFkbG9ja3MsIG9yIGluZmluaXRlIGxvb3BzIGlmIGEgdHJhbnNhY3Rpb24gY29tbWl0IGlzIHBlbmRpbmcgb3IgbWlzc2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NDk6MTAuMjA5Mzc0NTE0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTI2OTc0MzIwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAyOjQ5OjEwLjIwOTg1OTAxNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU5MjY5MjUyNzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKCkgdG8gaGFuZGxlIC1FQlVTWSByZXR1cm5zIGZyb20gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIGJ5IHdhaXRpbmcgZm9yIHRoZSBjb21taXR0aW5nIHRyYW5zYWN0aW9uIHZpYSBqYmQyX2xvZ193YWl0X2NvbW1pdCgpIGluIGEgbG9vcC5cXG5cXG5BbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgaW4gdGhlIHBhdGNoIChyZXQsIGhhc190cmFuc2FjdGlvbiwgY29tbWl0X3RpZCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2U6IGhhc190cmFuc2FjdGlvbiBpcyBleHBsaWNpdGx5IHNldCB0byBmYWxzZSwgYW5kIGNvbW1pdF90aWQgaXMgb25seSByZWFkIHdoZW4gaGFzX3RyYW5zYWN0aW9uIGlzIHRydWUgKHdoZXJlIGl0IGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBiZWVuIHNldCkuIE5vIG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGNvcGllcywgcGFkZGluZywgb3IgdXNlci1zcGFjZSB0cmFuc2ZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBjb25jdXJyZW5jeSwgZGVhZGxvY2ssIG9yIGxpdmVsb2NrIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbG9vcCBvciB3YWl0aW5nIG9uIHRyYW5zYWN0aW9ucyBhcmUgd2l0aGluIHRoZSBkb21haW4gb2YgTE9DS0RFUCBhbmQgaGFuZy93YXRjaGRvZyBkZXRlY3RvcnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MzhkOGUzNTJmZTgwZTUyMWE3YWU0ZDdiNjlkOTY3Yzk5ZDE2NzVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDI6NDg6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGMyYzJkNmFjN2YzZDEuLjZiYjk0YWZkNTEwMDYgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xuQEAgLTM0MjksNyArMzQyOSwyNyBAQCBzdGF0aWMgdm9pZCBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdFx0XHQgICBzaXplX3Qgb2Zmc2V0LFxuIFx0XHRcdFx0XHQgICBzaXplX3QgbGVuZ3RoKVxuIHtcbi1cdFdBUk5fT04oX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LCBsZW5ndGgpIFx1MDAzYyAwKTtcbitcdHRpZF90IGNvbW1pdF90aWQ7XG4rXHRpbnQgcmV0O1xuK1x0Ym9vbCBoYXNfdHJhbnNhY3Rpb247XG4rXHRqb3VybmFsX3QgKmpvdXJuYWwgPSBFWFQ0X0pPVVJOQUwoZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0KTtcbitcbitcdHdoaWxlICgxKSB7XG4rXHRcdHJldCA9IF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcbitcdFx0aWYgKHJldCAhPSAtRUJVU1kpIHtcbitcdFx0XHRXQVJOX09OKHJldCBcdTAwM2MgMCk7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHRcdGhhc190cmFuc2FjdGlvbiA9IGZhbHNlO1xuK1x0XHRyZWFkX2xvY2soXHUwMDI2am91cm5hbC1cdTAwM2VqX3N0YXRlX2xvY2spO1xuK1x0XHRpZiAoam91cm5hbC1cdTAwM2VqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24pIHtcbitcdFx0XHRjb21taXRfdGlkID0gam91cm5hbC1cdTAwM2VqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24tXHUwMDNldF90aWQ7XG4rXHRcdFx0aGFzX3RyYW5zYWN0aW9uID0gdHJ1ZTtcbitcdFx0fVxuK1x0XHRyZWFkX3VubG9jayhcdTAwMjZqb3VybmFsLVx1MDAzZWpfc3RhdGVfbG9jayk7XG4rXHRcdGlmIChoYXNfdHJhbnNhY3Rpb24pXG4rXHRcdFx0amJkMl9sb2dfd2FpdF9jb21taXQoam91cm5hbCwgY29tbWl0X3RpZCk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBib29sIGV4dDRfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCB3YWl0KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NDk6MTAuMjA5ODU5ODA1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM5MzA3NDI1OTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgZXh0NCBJbm9kZSBDYWNoZSBJbnZhbGlkYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgZm9jdXNlcyBvbiBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIHdpdGhpbiBgZnMvZXh0NC9pbm9kZS5jYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhhdCBmdW5jdGlvbiBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhhdCBmaWxlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGxpbmUgMzQyOSwgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgYmVpbmcgbW9kaWZpZWQgYW5kIHdoeS4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIG9uIHRoZSBqb3VybmFsaW5nIHByb2Nlc3MgYW5kIGlub2RlIGhhbmRsaW5nIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAyOjQ5OjQ5LjUxNzI5MTU0NloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzU5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0MTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM0MTU6XFx0XFxuMzQxNjpcXHRcXHR0cmFjZV9leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xcbjM0MTc6XFx0XFxuMzQxODpcXHRcXHQvKlxcbjM0MTk6XFx0XFx0ICogSWYgaXQncyBhIGZ1bGwgdHJ1bmNhdGUgd2UganVzdCBmb3JnZXQgYWJvdXQgdGhlIHBlbmRpbmcgZGlydHlpbmdcXG4zNDIwOlxcdFxcdCAqL1xcbjM0MjE6XFx0XFx0aWYgKG9mZnNldCA9PSAwIFxcdTAwMjZcXHUwMDI2IGxlbmd0aCA9PSBmb2xpb19zaXplKGZvbGlvKSlcXG4zNDIyOlxcdFxcdFxcdGZvbGlvX2NsZWFyX2NoZWNrZWQoZm9saW8pO1xcbjM0MjM6XFx0XFxuMzQyNDpcXHRcXHRyZXR1cm4gamJkMl9qb3VybmFsX2ludmFsaWRhdGVfZm9saW8oam91cm5hbCwgZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcXG4zNDI1OlxcdH1cXG4zNDI2OlxcdFxcbjM0Mjc6XFx0LyogV3JhcHBlciBmb3IgYW9wcy4uLiAqL1xcbjM0Mjg6XFx0c3RhdGljIHZvaWQgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4zNDI5OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHNpemVfdCBvZmZzZXQsXFxuMzQzMDpcXHRcXHRcXHRcXHRcXHRcXHQgICBzaXplX3QgbGVuZ3RoKVxcbjM0MzE6XFx0e1xcbjM0MzI6XFx0XFx0dGlkX3QgY29tbWl0X3RpZDtcXG4zNDMzOlxcdFxcdGludCByZXQ7XFxuMzQzNDpcXHRcXHRib29sIGhhc190cmFuc2FjdGlvbjtcXG4zNDM1OlxcdFxcdGpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfSk9VUk5BTChmb2xpby1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuMzQzNjpcXHRcXG4zNDM3OlxcdFxcdHdoaWxlICgxKSB7XFxuMzQzODpcXHRcXHRcXHRyZXQgPSBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XFxuMzQzOTpcXHRcXHRcXHRpZiAocmV0ICE9IC1FQlVTWSkge1xcbjM0NDA6XFx0XFx0XFx0XFx0V0FSTl9PTihyZXQgXFx1MDAzYyAwKTtcXG4zNDQxOlxcdFxcdFxcdFxcdHJldHVybjtcXG4zNDQyOlxcdFxcdFxcdH1cXG4zNDQzOlxcdFxcdFxcdGhhc190cmFuc2FjdGlvbiA9IGZhbHNlO1xcbjM0NDQ6XFx0XFx0XFx0cmVhZF9sb2NrKFxcdTAwMjZqb3VybmFsLVxcdTAwM2VqX3N0YXRlX2xvY2spO1xcbjM0NDU6XFx0XFx0XFx0aWYgKGpvdXJuYWwtXFx1MDAzZWpfY29tbWl0dGluZ190cmFuc2FjdGlvbikge1xcbjM0NDY6XFx0XFx0XFx0XFx0Y29tbWl0X3RpZCA9IGpvdXJuYWwtXFx1MDAzZWpfY29tbWl0dGluZ190cmFuc2FjdGlvbi1cXHUwMDNldF90aWQ7XFxuMzQ0NzpcXHRcXHRcXHRcXHRoYXNfdHJhbnNhY3Rpb24gPSB0cnVlO1xcbjM0NDg6XFx0XFx0XFx0fVxcbjM0NDk6XFx0XFx0XFx0cmVhZF91bmxvY2soXFx1MDAyNmpvdXJuYWwtXFx1MDAzZWpfc3RhdGVfbG9jayk7XFxuMzQ1MDpcXHRcXHRcXHRpZiAoaGFzX3RyYW5zYWN0aW9uKVxcbjM0NTE6XFx0XFx0XFx0XFx0amJkMl9sb2dfd2FpdF9jb21taXQoam91cm5hbCwgY29tbWl0X3RpZCk7XFxuMzQ1MjpcXHRcXHR9XFxuMzQ1MzpcXHR9XFxuMzQ1NDpcXHRcXG4zNDU1OlxcdHN0YXRpYyBib29sIGV4dDRfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCB3YWl0KVxcbjM0NTY6XFx0e1xcbjM0NTc6XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZvbGlvLVxcdTAwM2VtYXBwaW5nLVxcdTAwM2Vob3N0O1xcbjM0NTg6XFx0XFx0am91cm5hbF90ICpqb3VybmFsID0gRVhUNF9KT1VSTkFMKGlub2RlKTtcXG4zNDU5OlxcdFxcbjM0NjA6XFx0XFx0dHJhY2VfZXh0NF9yZWxlYXNlX2ZvbGlvKGlub2RlLCBmb2xpbyk7XFxuMzQ2MTpcXHRcXG4zNDYyOlxcdFxcdC8qIFBhZ2UgaGFzIGRpcnR5IGpvdXJuYWxsZWQgZGF0YSAtXFx1MDAzZSBjYW5ub3QgcmVsZWFzZSAqL1xcbjM0NjM6XFx0XFx0aWYgKGZvbGlvX3Rlc3RfY2hlY2tlZChmb2xpbykpXFxuMzQ2NDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAyOjQ5OjQ5LjUxNzk3MjQyNloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTQxNTk4NzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZnVuY3Rpb24gYF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gLiBMZXQncyBkaWcgYmFjayBpbnRvIHRoZSBzb3VyY2UgY29kZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkganVtcCB0byBsaW5lcyAzNDAwIHRocm91Z2ggMzQyNS4gVGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIHNob3VsZCBiZS4gTmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHdoYXQgd2FzIGdvaW5nIG9uIHJpZ2h0IGJlZm9yZSB0aGlzIGZ1bmN0aW9uLiBGaWd1cmUgb3V0IHRoZSBzdGF0ZSBvZiB0aGluZ3MuIExldCdzIHNlZSB3aGF0IHRoYXQgc2VjdGlvbiBpcyB0ZWxsaW5nIHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjU3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwMjo0OTo1MS4wNTk1NzYxODVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzczODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNDAwOlxcdHN0YXRpYyB2b2lkIGV4dDRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxcbjM0MDE6XFx0XFx0XFx0XFx0XFx0c2l6ZV90IGxlbmd0aClcXG4zNDAyOlxcdHtcXG4zNDAzOlxcdFxcdHRyYWNlX2V4dDRfaW52YWxpZGF0ZV9mb2xpbyhmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xcbjM0MDQ6XFx0XFxuMzQwNTpcXHRcXHQvKiBObyBqb3VybmFsbGluZyBoYXBwZW5zIG9uIGRhdGEgYnVmZmVycyB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCAqL1xcbjM0MDY6XFx0XFx0V0FSTl9PTihmb2xpb19idWZmZXJzKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBidWZmZXJfamJkKGZvbGlvX2J1ZmZlcnMoZm9saW8pKSk7XFxuMzQwNzpcXHRcXG4zNDA4OlxcdFxcdGJsb2NrX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcXG4zNDA5OlxcdH1cXG4zNDEwOlxcdFxcbjM0MTE6XFx0c3RhdGljIGludCBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuMzQxMjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aClcXG4zNDEzOlxcdHtcXG4zNDE0OlxcdFxcdGpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfSk9VUk5BTChmb2xpby1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuMzQxNTpcXHRcXG4zNDE2OlxcdFxcdHRyYWNlX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XFxuMzQxNzpcXHRcXG4zNDE4OlxcdFxcdC8qXFxuMzQxOTpcXHRcXHQgKiBJZiBpdCdzIGEgZnVsbCB0cnVuY2F0ZSB3ZSBqdXN0IGZvcmdldCBhYm91dCB0aGUgcGVuZGluZyBkaXJ0eWluZ1xcbjM0MjA6XFx0XFx0ICovXFxuMzQyMTpcXHRcXHRpZiAob2Zmc2V0ID09IDAgXFx1MDAyNlxcdTAwMjYgbGVuZ3RoID09IGZvbGlvX3NpemUoZm9saW8pKVxcbjM0MjI6XFx0XFx0XFx0Zm9saW9fY2xlYXJfY2hlY2tlZChmb2xpbyk7XFxuMzQyMzpcXHRcXG4zNDI0OlxcdFxcdHJldHVybiBqYmQyX2pvdXJuYWxfaW52YWxpZGF0ZV9mb2xpbyhqb3VybmFsLCBmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xcbjM0MjU6XFx0fVxcbjM0MjY6XFx0XFxuMzQyNzpcXHQvKiBXcmFwcGVyIGZvciBhb3BzLi4uICovXFxuMzQyODpcXHRzdGF0aWMgdm9pZCBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbjM0Mjk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc2l6ZV90IG9mZnNldCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NDk6NTEuMDU5OTU0NTI1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEwNDU2MDcwMjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29kZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBvcmlnaW5hbCBjb2RlIGxvb2tlZCBsaWtlICpiZWZvcmUqIHRoaXMgcGF0Y2ggd2FzIGFwcGxpZWQuIFRoZSBkaWZmIHNob3dzIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIHRoZSBgZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9gIGZ1bmN0aW9uIGluIGBmcy9leHQ0L2lub2RlLmNgLiBUaGUgY29yZSBtb2RpZmljYXRpb24gc2VlbXMgdG8gaW52b2x2ZSBoYW5kbGluZyBhIGAtRUJVU1lgIGVycm9yIHJldHVybiBmcm9tIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYC5cblxuRXNzZW50aWFsbHksIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIHNpbXBsZSBgV0FSTl9PTmAgY2hlY2suIE5vdywgdGhlcmUncyBhIGxvb3Agd2l0aCBhIHJldHJ5IG1lY2hhbmlzbS4gSXQgYXBwZWFycyB0aGF0IGlmIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCByZXR1cm5zIGAtRUJVU1lgLCB3aGljaCBwcm9iYWJseSBtZWFucyB0aGUgam91cm5hbCBpcyBidXN5LCB0aGUgY29kZSBub3cgd2FpdHMuIEkgY2FuIHNlZSB0aGF0IGl0J3MgY2hlY2tpbmcgZm9yIGEgY29tbWl0dGluZyB0cmFuc2FjdGlvbiB1c2luZyBgamJkMl9sb2dfd2FpdF9jb21taXRgIGFuZCByZXRyeWluZy4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggYSByYWNlIGNvbmRpdGlvbiBvciBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgam91cm5hbCBpcyB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZS5cblxuVG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnRleHQgYW5kIG1vdGl2YXRpb24gYmVoaW5kIHRoaXMgY2hhbmdlLCBJJ2xsIG5lZWQgbW9yZSBpbmZvcm1hdGlvbi4gSSdsbCBjaGVjayB0aGUgY29tbWl0IGhpc3RvcnkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbW9kaWZpY2F0aW9uLiBJJ2xsIGV4ZWN1dGUgYSBgZ2l0IGxvZ2Agb24gdGhlIGBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AgZnVuY3Rpb24gdG8gc2VlIHRoZSBjb21taXQgbWVzc2FnZXMuIEhvcGVmdWxseSwgdGhhdCBzaG91bGQgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gd2hhdCBwcm9ibGVtIHRoaXMgcGF0Y2ggaXMgZml4aW5nLiBJdCdzIGxpa2VseSByZWxhdGVkIHRvIGpvdXJuYWwgY29udGVudGlvbiBvciBhIHNpbWlsYXIgY29uY3VycmVuY3kgaXNzdWUgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIE1heWJlIGl0J3MgYSBkZWFkbG9jay4gSSdsbCBhbHNvIHRyeSBhIGJyb2FkZXIgc2VhcmNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTMwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NTA6MDEuNTE2MDI4NzIxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDk1NjQxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2lub2RlLmM9MzQwMD1zdGF0aWMgdm9pZCBleHQ0X2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0zNDEwLVxcbmZzL2V4dDQvaW5vZGUuYzozNDExOnN0YXRpYyBpbnQgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmZzL2V4dDQvaW5vZGUuYy0zNDEyLVxcdFxcdFxcdFxcdFxcdCAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTM0MTUtXFxuZnMvZXh0NC9pbm9kZS5jOjM0MTY6XFx0dHJhY2VfZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcXG5mcy9leHQ0L2lub2RlLmMtMzQxNy1cXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0zNDI3LS8qIFdyYXBwZXIgZm9yIGFvcHMuLi4gKi9cXG5mcy9leHQ0L2lub2RlLmM6MzQyODpzdGF0aWMgdm9pZCBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmZzL2V4dDQvaW5vZGUuYy0zNDI5LVxcdFxcdFxcdFxcdFxcdCAgIHNpemVfdCBvZmZzZXQsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtMzQzNy1cXHR3aGlsZSAoMSkge1xcbmZzL2V4dDQvaW5vZGUuYzozNDM4OlxcdFxcdHJldCA9IF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcXG5mcy9leHQ0L2lub2RlLmMtMzQzOS1cXHRcXHRpZiAocmV0ICE9IC1FQlVTWSkge1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTM5ODU9c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXh0NF9qb3VybmFsbGVkX2FvcHMgPSB7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtMzk5Mi1cXHQuYm1hcFxcdFxcdFxcdD0gZXh0NF9ibWFwLFxcbmZzL2V4dDQvaW5vZGUuYzozOTkzOlxcdC5pbnZhbGlkYXRlX2ZvbGlvXFx0PSBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbyxcXG5mcy9leHQ0L2lub2RlLmMtMzk5NC1cXHQucmVsZWFzZV9mb2xpb1xcdFxcdD0gZXh0NF9yZWxlYXNlX2ZvbGlvLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTU3ODA9aW50IGV4dDRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTgzMC0vKlxcbmZzL2V4dDQvaW5vZGUuYzo1ODMxOiAqIEluIGRhdGE9am91cm5hbCBtb2RlIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKCkgbWF5IGZhaWwgdG8gaW52YWxpZGF0ZVxcbmZzL2V4dDQvaW5vZGUuYy01ODMyLSAqIGJ1ZmZlcnMgdGhhdCBhcmUgYXR0YWNoZWQgdG8gYSBmb2xpbyBzdHJhZGRsaW5nIGlfc2l6ZSBhbmQgYXJlIHVuZGVyZ29pbmdcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01ODM1PXN0YXRpYyB2b2lkIGV4dDRfd2FpdF9mb3JfdGFpbF9wYWdlX2NvbW1pdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTU4NDUtXFx0ICogSWYgdGhlIGZvbGlvIGlzIGZ1bGx5IHRydW5jYXRlZCwgd2UgZG9uJ3QgbmVlZCB0byB3YWl0IGZvciBhbnkgY29tbWl0XFxuZnMvZXh0NC9pbm9kZS5jOjU4NDY6XFx0ICogKGFuZCB3ZSBldmVuIHNob3VsZCBub3QgYXMgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIG1heVxcbmZzL2V4dDQvaW5vZGUuYy01ODQ3LVxcdCAqIHN0cmlwIGFsbCBidWZmZXJzIGZyb20gdGhlIGZvbGlvIGJ1dCBrZWVwIHRoZSBmb2xpbyBkaXJ0eSB3aGljaCBjYW4gdGhlblxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTU4NTktXFx0XFx0XFx0cmV0dXJuO1xcbmZzL2V4dDQvaW5vZGUuYzo1ODYwOlxcdFxcdHJldCA9IF9fZXh0NF9qb3VybmFsbGVkX2ludmFsaWRhdGVfZm9saW8oZm9saW8sIG9mZnNldCxcXG5mcy9leHQ0L2lub2RlLmMtNTg2MS1cXHRcXHRcXHRcXHRcXHRcXHRmb2xpb19zaXplKGZvbGlvKSAtIG9mZnNldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDAyOjUwOjAyLjAyNTU5ODg3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc0NTM0ODA0NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudCBvZiBleHQ0IEpvdXJuYWxsZWQgRm9saW8gSW52YWxpZGF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmb2N1cyBpcyBvbiB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBvciBleGFjZXJiYXRlcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcywgdGhlIGRvbWFpbiBvZiBLTVNBTi4gVGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgZm9yIGBleHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AsIHdoaWNoIGhhbmRsZXMgZm9saW8gaW52YWxpZGF0aW9uIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIHdoZW4gaW4gYGRhdGE9am91cm5hbGAgbW9kZS5cblxuRmlyc3QsIEkgc2VlIHRoYXQgdGhlIG9yaWdpbmFsIGNvZGUgc2ltcGx5IGNhbGxzIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYCBhbmQgV0FSTnMgb24gbmVnYXRpdmUgcmV0dXJuIHZhbHVlcy4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSByZXRyeSBsb29wLiBJdCBjYWxscyBgX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpb2AsIGNoZWNrcyB0aGUgcmV0dXJuIHZhbHVlIChgcmV0YCkuIElmIGByZXRgIGlzbid0IGAtRUJVU1lgLCBpdCBoYW5kbGVzIGVycm9ycyBvciByZXR1cm5zLiBJZiBpdCAqaXMqIGAtRUJVU1lgLCBpdCBjaGVja3MgZm9yIGEgY29tbWl0dGluZyB0cmFuc2FjdGlvbiAoYGpvdXJuYWwtXHUwMDNlal9jb21taXR0aW5nX3RyYW5zYWN0aW9uYCkuXG5cbkhlcmUsIEkgemVybyBpbiBvbiBgY29tbWl0X3RpZGAuIFRoZSBgY29tbWl0X3RpZGAgdmFyaWFibGUgaXMgYSBsb2NhbCB2YXJpYWJsZSwgZGVjbGFyZWQgYXMgYHRpZF90IGNvbW1pdF90aWQ7YCwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgaXQncyBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgY29kZSBleHBsaWNpdGx5IHJlYWRzIGZyb20gYGpvdXJuYWwtXHUwMDNlal9jb21taXR0aW5nX3RyYW5zYWN0aW9uLVx1MDAzZXRfdGlkYCwgKm9ubHkqIGlmIGBqb3VybmFsLVx1MDAzZWpfY29tbWl0dGluZ190cmFuc2FjdGlvbmAgaXMgdmFsaWQsIHNvIGBjb21taXRfdGlkYCBpcyBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkIHdoZW4gdXNlZC4gSXQgdGhlbiB1c2VzIHRoaXMgYGNvbW1pdF90aWRgIHdpdGggYGpiZDJfbG9nX3dhaXRfY29tbWl0KClgLiBJZiBubyB0cmFuc2FjdGlvbiBpcyBjb21taXR0aW5nLCB0aGUgY29kZSBkb2Vzbid0IHdhaXQgYW5kIGdvZXMgYmFjayB0byBjYWxsaW5nIGBfX2V4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IGNoZWNrIGZvciBtZTogaXMgYGNvbW1pdF90aWRgIG9yIGFueSBvdGhlciB2YXJpYWJsZSB1c2VkIGluIGEgd2F5IHRoYXQgaW50cm9kdWNlcyB0aGUgcG9zc2liaWxpdHkgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIFRoZSBsb2dpYyBpbml0aWFsaXplcyBgY29tbWl0X3RpZGAgYW5kIHVzZXMgaXQgb25seSBpZiBhIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24gaXMgYWN0aXZlLiBJdCdzIHRoZSBgaGFzX3RyYW5zYWN0aW9uYCBmbGFnIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIHdhaXQuIElmIGBoYXNfdHJhbnNhY3Rpb25gIGlzIGZhbHNlLCBpdCBtZWFucyBgam91cm5hbC1cdTAwM2VqX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb25gIHdhcyBudWxsLCBhbmQgdGhlIGNvZGUgcmV0cmllcyB3aXRob3V0IHdhaXRpbmcuIFRoaXMgY291bGQgbGVhZCB0byBhIGxpdmVsb2NrIG9yIGluZmluaXRlIGxvb3AgaWYgYC1FQlVTWWAgcGVyc2lzdHMsIGJ1dCB0aGF0J3Mgbm90IGEgS01TQU4gaXNzdWU7IGl0J3MgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kvZGVhZGxvY2svbGl2ZWxvY2sgcHJvYmxlbS5cblxuTmV4dCwgSSBzY2FuIGZvciB0eXBpY2FsIEtNU0FOIGNvbmNlcm5zOiBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBsZWFrZWQgdG8gdXNlciBzcGFjZSwgY29uZGl0aW9uYWwgYnJhbmNoZXMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsbG9jYXRpb24gb2YgY29tcGxleCBzdHJ1Y3R1cmVzLCBvciBhbnkgb3BlcmF0aW9ucyBvbiBidWZmZXJzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgbWlnaHQgYmUgYWNjZXNzZWQuIEkgc2VlIG5vbmUgb2YgdGhvc2UgaGVyZS4gTm8ga2VybmVsIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vIGJ1ZmZlcnMgYXJlIGJlaW5nIG1hbmlwdWxhdGVkLCBhbmQgYWxsIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgS01TQU4gcmlza3MuIFRoZSBwb3RlbnRpYWwgaXNzdWVzIGhlcmUgYXJlIHJlbGF0ZWQgdG8gY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbjogZGVhZGxvY2tzLCBsaXZlbG9ja3MsIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhvc2UgYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAsIHdhdGNoZG9nIHRpbWVycywgb3Igc3RhbmRhcmQga2VybmVsIGhhbmcvbG9ja3VwIGRldGVjdG9ycy4gVGhleSBhcmUgbm90IG1lbW9yeSBpbml0aWFsaXphdGlvbiBpc3N1ZXMgd2hpY2ggYXJlIHRoZSBwdXJ2aWV3IG9mIEtNU0FOLlxuXG5JbiBzdW1tYXJ5LCBteSBhbmFseXNpcyBpbmRpY2F0ZXMgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEl0J3MgYSBjb25jdXJyZW5jeS1yZWxhdGVkIGNoYW5nZSwgYnV0IG5vdCBhIEtNU0FOLXJlbGV2YW50IG9uZS4gVGhlIGNvZGUgaW5pdGlhbGl6ZXMgaXRzIHZhcmlhYmxlcyBwcm9wZXJseSwgdXNlcyB0aGVtIGNvcnJlY3RseSwgYW5kIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ5NywiT3V0cHV0VG9rZW5zIjoyMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDI6NTA6MDkuNDc5MDgzODU5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKCkgdG8gaGFuZGxlIC1FQlVTWSByZXR1cm5zIGZyb20gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIGJ5IHdhaXRpbmcgZm9yIHRoZSBjb21taXR0aW5nIHRyYW5zYWN0aW9uIHZpYSBqYmQyX2xvZ193YWl0X2NvbW1pdCgpIGluIGEgbG9vcC5cXG5cXG5BbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgaW4gdGhlIHBhdGNoIChyZXQsIGhhc190cmFuc2FjdGlvbiwgY29tbWl0X3RpZCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2U6IGhhc190cmFuc2FjdGlvbiBpcyBleHBsaWNpdGx5IHNldCB0byBmYWxzZSwgYW5kIGNvbW1pdF90aWQgaXMgb25seSByZWFkIHdoZW4gaGFzX3RyYW5zYWN0aW9uIGlzIHRydWUgKHdoZXJlIGl0IGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBiZWVuIHNldCkuIE5vIG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGNvcGllcywgcGFkZGluZywgb3IgdXNlci1zcGFjZSB0cmFuc2ZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBjb25jdXJyZW5jeSwgZGVhZGxvY2ssIG9yIGxpdmVsb2NrIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbG9vcCBvciB3YWl0aW5nIG9uIHRyYW5zYWN0aW9ucyBhcmUgd2l0aGluIHRoZSBkb21haW4gb2YgTE9DS0RFUCBhbmQgaGFuZy93YXRjaGRvZyBkZXRlY3RvcnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGV4dDRfam91cm5hbGxlZF9pbnZhbGlkYXRlX2ZvbGlvKCkgdG8gaGFuZGxlIC1FQlVTWSByZXR1cm5zIGZyb20gX19leHQ0X2pvdXJuYWxsZWRfaW52YWxpZGF0ZV9mb2xpbygpIGJ5IHdhaXRpbmcgZm9yIHRoZSBjb21taXR0aW5nIHRyYW5zYWN0aW9uIHZpYSBqYmQyX2xvZ193YWl0X2NvbW1pdCgpIGluIGEgbG9vcC5cXG5cXG5BbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgaW4gdGhlIHBhdGNoIChyZXQsIGhhc190cmFuc2FjdGlvbiwgY29tbWl0X3RpZCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2U6IGhhc190cmFuc2FjdGlvbiBpcyBleHBsaWNpdGx5IHNldCB0byBmYWxzZSwgYW5kIGNvbW1pdF90aWQgaXMgb25seSByZWFkIHdoZW4gaGFzX3RyYW5zYWN0aW9uIGlzIHRydWUgKHdoZXJlIGl0IGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBiZWVuIHNldCkuIE5vIG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGNvcGllcywgcGFkZGluZywgb3IgdXNlci1zcGFjZSB0cmFuc2ZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFueSBjb25jdXJyZW5jeSwgZGVhZGxvY2ssIG9yIGxpdmVsb2NrIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbG9vcCBvciB3YWl0aW5nIG9uIHRyYW5zYWN0aW9ucyBhcmUgd2l0aGluIHRoZSBkb21haW4gb2YgTE9DS0RFUCBhbmQgaGFuZy93YXRjaGRvZyBkZXRlY3RvcnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd529s[1] Phase: Succeeded StartedAt: 2026-09-14 02:50:20 +0000 UTC FinishedAt: 2026-09-14 02:50:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd529s[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-14 02:50:20 +0000 UTC FinishedAt: 2026-09-14 02:50:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd529s[2] Phase: Succeeded StartedAt: 2026-09-14 02:50:20 +0000 UTC FinishedAt: 2026-09-14 06:33:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-14 02:50:20 +0000 UTC FinishedAt: 2026-09-14 06:33:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-14 02:50:20 +0000 UTC FinishedAt: 2026-09-14 02:50:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-14 02:50:20 +0000 UTC FinishedAt: 2026-09-14 02:50:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd529s/series-workflowd529s-convert-artifact-2922405741/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-14 02:50:30 +0000 UTC FinishedAt: 2026-09-14 03:08:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-14 02:50:30 +0000 UTC FinishedAt: 2026-09-14 03:08:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e6fdb8d8-9fc7-455e-b719-f5d1ea122261,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd529s/series-workflowd529s-convert-artifact-2922405741/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "212cdd33-9a18-45f4-9380-6f7d86989579", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd529s/series-workflowd529s-build-action-615827811/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-14 02:50:30 +0000 UTC FinishedAt: 2026-09-14 03:08:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e6fdb8d8-9fc7-455e-b719-f5d1ea122261,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd529s/series-workflowd529s-convert-artifact-2922405741/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "212cdd33-9a18-45f4-9380-6f7d86989579", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd529s/series-workflowd529s-build-action-615827811/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-14 03:08:44 +0000 UTC FinishedAt: 2026-09-14 03:08:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-14 03:08:44 +0000 UTC FinishedAt: 2026-09-14 03:08:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-14 03:08:44 +0000 UTC FinishedAt: 2026-09-14 03:09:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-14 03:08:44 +0000 UTC FinishedAt: 2026-09-14 03:08:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd529s/series-workflowd529s-convert-artifact-3661303752/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-14 03:09:05 +0000 UTC FinishedAt: 2026-09-14 03:10:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-14 03:09:05 +0000 UTC FinishedAt: 2026-09-14 03:10:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*212cdd33-9a18-45f4-9380-6f7d86989579,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd529s/series-workflowd529s-build-action-615827811/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-14 03:10:50 +0000 UTC FinishedAt: 2026-09-14 03:10:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-14 03:10:50 +0000 UTC FinishedAt: 2026-09-14 03:10:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-14 03:10:50 +0000 UTC FinishedAt: 2026-09-14 03:29:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-14 03:10:50 +0000 UTC FinishedAt: 2026-09-14 03:29:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e6fdb8d8-9fc7-455e-b719-f5d1ea122261,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd529s/series-workflowd529s-convert-artifact-3661303752/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "eefccf68-adf3-4d9d-b52c-57b989b692d3", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd529s/series-workflowd529s-build-action-1579435124/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-14 03:10:50 +0000 UTC FinishedAt: 2026-09-14 03:28:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e6fdb8d8-9fc7-455e-b719-f5d1ea122261,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd529s/series-workflowd529s-convert-artifact-3661303752/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "eefccf68-adf3-4d9d-b52c-57b989b692d3", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd529s/series-workflowd529s-build-action-1579435124/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-14 03:29:05 +0000 UTC FinishedAt: 2026-09-14 03:29:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-14 03:29:05 +0000 UTC FinishedAt: 2026-09-14 03:29:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-14 03:29:05 +0000 UTC FinishedAt: 2026-09-14 03:30:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-14 03:29:05 +0000 UTC FinishedAt: 2026-09-14 03:30:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*eefccf68-adf3-4d9d-b52c-57b989b692d3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd529s/series-workflowd529s-build-action-1579435124/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-14 03:30:51 +0000 UTC FinishedAt: 2026-09-14 06:33:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-14 03:30:51 +0000 UTC FinishedAt: 2026-09-14 06:33:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*212cdd33-9a18-45f4-9380-6f7d86989579,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*eefccf68-adf3-4d9d-b52c-57b989b692d3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd529s/series-workflowd529s-build-action-615827811/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd529s/series-workflowd529s-build-action-1579435124/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-14 03:30:51 +0000 UTC FinishedAt: 2026-09-14 03:31:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-14 03:30:51 +0000 UTC FinishedAt: 2026-09-14 03:30:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd529s/series-workflowd529s-convert-artifact-1968275329/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-14 03:30:51 +0000 UTC FinishedAt: 2026-09-14 03:30:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-14 03:30:51 +0000 UTC FinishedAt: 2026-09-14 03:30:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-14 03:30:51 +0000 UTC FinishedAt: 2026-09-14 03:30:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-14 03:31:01 +0000 UTC FinishedAt: 2026-09-14 06:33:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd529s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"base_commit":"3783364ce6f883b5020b031e65cab6d3cd450b82","base_tree":"torvalds","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_journalled_invalidate_folio","__ext4_journalled_invalidate_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3783364ce6f883b5020b031e65cab6d3cd450b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"126d126d-97cc-4859-8fa6-8ce03046af1a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-14 03:31:01 +0000 UTC FinishedAt: 2026-09-14 06:33:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*212cdd33-9a18-45f4-9380-6f7d86989579,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*eefccf68-adf3-4d9d-b52c-57b989b692d3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd529s/series-workflowd529s-build-action-615827811/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd529s/series-workflowd529s-build-action-1579435124/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd529s/series-workflowd529s-convert-artifact-1968275329/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}