Name: series-workflown8kjs Phase: Succeeded StartedAt: 2026-09-04 14:20:20 +0000 UTC FinishedAt: 2026-09-04 19:07:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8kjs[0] Phase: Succeeded StartedAt: 2026-09-04 14:20:20 +0000 UTC FinishedAt: 2026-09-04 15:21:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8kjs[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 14:20:20 +0000 UTC FinishedAt: 2026-09-04 15:21:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "series_id": "675503d5-40fa-429d-b086-e980589175c1" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "netdev_rx_csum_fault", "skb_checksum_help", "xfs_file_ioctl", "xfs_fs_fill_super" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZGV2X3J4X2NzdW1fZmF1bHQmIzM0OywKICAgICYjMzQ7c2tiX2NoZWNrc3VtX2hlbHAmIzM0OywKICAgICYjMzQ7eGZzX2ZpbGVfaW9jdGwmIzM0OywKICAgICYjMzQ7eGZzX2ZzX2ZpbGxfc3VwZXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBfX09OQ0VfTElURV9JRmAgbWFjcm8gaW4gYGluY2x1ZGUvbGludXgvb25jZV9saXRlLmhgIGludG8gYSBzdGFuZGFsb25lIGBfX09OQ0VfTElURSgpYCBoZWxwZXIgYW5kIHNob3J0LWNpcmN1aXRpbmcgYF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilgLlxuXG5BbGwgdmFyaWFibGVzIHVzZWQgd2l0aGluIHRoZSBtYWNyb3MgKGBfX2FscmVhZHlfZG9uZWAgaW4gYC5kYXRhLi5vbmNlYCBhbmQgbG9jYWwgYm9vbGVhbiBgX19yZXRfb25jZSA9IGZhbHNlYCkgYXJlIHN0YXRpYyBvciBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgdG91Y2ggZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSwgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMsIG1lbW9yeSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm9sZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgRE9fT05DRV9MSVRFIC8gX19PTkNFX0xJVEVfSUYgaGVscGVyIG1hY3JvIGRlZmluaXRpb25zIGluIGluY2x1ZGUvbGludXgvb25jZV9saXRlLmgsIHNlcGFyYXRpbmcgb3V0IF9fT05DRV9MSVRFKCkgYW5kIGFsdGVyaW5nIHRoZSBjb25kaXRpb24gZXZhbHVhdGlvbiBsb2dpYyBmb3Igb25lLXRpbWUgZXhlY3V0aW9uIGFjcm9zcyB0aGUga2VybmVsLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGluZnJhc3RydWN0dXJlIHVzZWQgaW4gbmV0d29ya2luZywgZmlsZXN5c3RlbXMsIGFuZCBnZW5lcmljIGJ1Zy93YXJuaW5nIG1hY3Jvcywgd2FycmFudGluZyBmdXp6aW5nIHRvIHZlcmlmeSBydW50aW1lIGV2YWx1YXRpb24gYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTU6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1MjExNmM3Yjk1OGY4ODVhZmE3MzRhOWVkYWQzN2UwZDBjNzE5NGJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxNToxODozNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oIGIvaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaFxuaW5kZXggMjM2NTkyYzRlZWIxYS4uNWUyYjY3MDM5YWFmMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvb25jZV9saXRlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvb25jZV9saXRlLmhcbkBAIC0xMCwxOSAmIzQzOzEwLDIxIEBAXG4gI2RlZmluZSBET19PTkNFX0xJVEUoZnVuYywgLi4uKVx0XHRcdFx0XHRcdFxcXG4gXHRET19PTkNFX0xJVEVfSUYodHJ1ZSwgZnVuYywgIyNfX1ZBX0FSR1NfXylcbiBcbi0jZGVmaW5lIF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilcdFx0XHRcdFx0XFxcbiYjNDM7I2RlZmluZSBfX09OQ0VfTElURSgpXHRcdFx0XHRcdFx0XHRcXFxuIFx0KHtcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdFx0c3RhdGljIGJvb2wgX19zZWN0aW9uKFwmIzM0Oy5kYXRhLi5vbmNlXCYjMzQ7KSBfX2FscmVhZHlfZG9uZTtcdFxcXG4tXHRcdGJvb2wgX19yZXRfY29uZCA9ICEhKGNvbmRpdGlvbik7XHRcdFx0XFxcbiBcdFx0Ym9vbCBfX3JldF9vbmNlID0gZmFsc2U7XHRcdFx0XHRcXFxuIFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdGlmICh1bmxpa2VseShfX3JldF9jb25kKSBcdTAwMjZcdTAwMjYgdW5saWtlbHkoIV9fYWxyZWFkeV9kb25lKSkge1xcXG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIV9fYWxyZWFkeV9kb25lKSkge1x0XHRcdFxcXG4gXHRcdFx0X19hbHJlYWR5X2RvbmUgPSB0cnVlO1x0XHRcdFx0XFxcbiBcdFx0XHRfX3JldF9vbmNlID0gdHJ1ZTtcdFx0XHRcdFxcXG4gXHRcdH1cdFx0XHRcdFx0XHRcdFxcXG4gXHRcdHVubGlrZWx5KF9fcmV0X29uY2UpO1x0XHRcdFx0XHRcXFxuIFx0fSlcbiBcbiYjNDM7I2RlZmluZSBfX09OQ0VfTElURV9JRihjb25kaXRpb24pXHRcdFx0XHRcdFxcXG4mIzQzO1x0KHVubGlrZWx5KGNvbmRpdGlvbikgXHUwMDI2XHUwMDI2IF9fT05DRV9MSVRFKCkpXG4mIzQzO1xuICNkZWZpbmUgRE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgZnVuYywgLi4uKVx0XHRcdFx0XFxcbiBcdCh7XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRcdGJvb2wgX19yZXRfZG9fb25jZSA9ICEhKGNvbmRpdGlvbik7XHRcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGRldl9yeF9jc3VtX2ZhdWx0JiMzNDssCiAgICAmIzM0O3NrYl9jaGVja3N1bV9oZWxwJiMzNDssCiAgICAmIzM0O3hmc19maWxlX2lvY3RsJiMzNDssCiAgICAmIzM0O3hmc19mc19maWxsX3N1cGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgRE9fT05DRV9MSVRFIC8gX19PTkNFX0xJVEVfSUYgaGVscGVyIG1hY3JvIGRlZmluaXRpb25zIGluIGluY2x1ZGUvbGludXgvb25jZV9saXRlLmgsIHNlcGFyYXRpbmcgb3V0IF9fT05DRV9MSVRFKCkgYW5kIGFsdGVyaW5nIHRoZSBjb25kaXRpb24gZXZhbHVhdGlvbiBsb2dpYyBmb3Igb25lLXRpbWUgZXhlY3V0aW9uIGFjcm9zcyB0aGUga2VybmVsLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGluZnJhc3RydWN0dXJlIHVzZWQgaW4gbmV0d29ya2luZywgZmlsZXN5c3RlbXMsIGFuZCBnZW5lcmljIGJ1Zy93YXJuaW5nIG1hY3Jvcywgd2FycmFudGluZyBmdXp6aW5nIHRvIHZlcmlmeSBydW50aW1lIGV2YWx1YXRpb24gYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MjExNmM3Yjk1OGY4ODVhZmE3MzRhOWVkYWQzN2UwZDBjNzE5NGJkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxNToxODozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb25jZV9saXRlLmggYi9pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oCmluZGV4IDIzNjU5MmM0ZWViMWEuLjVlMmI2NzAzOWFhZjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvb25jZV9saXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaApAQCAtMTAsMTkgJiM0MzsxMCwyMSBAQAogI2RlZmluZSBET19PTkNFX0xJVEUoZnVuYywgLi4uKQkJCQkJCVwKIAlET19PTkNFX0xJVEVfSUYodHJ1ZSwgZnVuYywgIyNfX1ZBX0FSR1NfXykKIAotI2RlZmluZSBfX09OQ0VfTElURV9JRihjb25kaXRpb24pCQkJCQlcCiYjNDM7I2RlZmluZSBfX09OQ0VfTElURSgpCQkJCQkJCVwKIAkoewkJCQkJCQkJXAogCQlzdGF0aWMgYm9vbCBfX3NlY3Rpb24oJiMzNDsuZGF0YS4ub25jZSYjMzQ7KSBfX2FscmVhZHlfZG9uZTsJXAotCQlib29sIF9fcmV0X2NvbmQgPSAhIShjb25kaXRpb24pOwkJCVwKIAkJYm9vbCBfX3JldF9vbmNlID0gZmFsc2U7CQkJCVwKIAkJCQkJCQkJCVwKLQkJaWYgKHVubGlrZWx5KF9fcmV0X2NvbmQpICZhbXA7JmFtcDsgdW5saWtlbHkoIV9fYWxyZWFkeV9kb25lKSkge1wKJiM0MzsJCWlmICh1bmxpa2VseSghX19hbHJlYWR5X2RvbmUpKSB7CQkJXAogCQkJX19hbHJlYWR5X2RvbmUgPSB0cnVlOwkJCQlcCiAJCQlfX3JldF9vbmNlID0gdHJ1ZTsJCQkJXAogCQl9CQkJCQkJCVwKIAkJdW5saWtlbHkoX19yZXRfb25jZSk7CQkJCQlcCiAJfSkKIAomIzQzOyNkZWZpbmUgX19PTkNFX0xJVEVfSUYoY29uZGl0aW9uKQkJCQkJXAomIzQzOwkodW5saWtlbHkoY29uZGl0aW9uKSAmYW1wOyZhbXA7IF9fT05DRV9MSVRFKCkpCiYjNDM7CiAjZGVmaW5lIERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIGZ1bmMsIC4uLikJCQkJXAogCSh7CQkJCQkJCQlcCiAJCWJvb2wgX19yZXRfZG9fb25jZSA9ICEhKGNvbmRpdGlvbik7CQkJXAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDQ5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyBwYXRjaCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKlBhdGNoIEFuYWx5c2lzIGFuZCBJbXBhY3QgQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgSSBkbyBpcyBhbmFseXplIHRoZSBwYXRjaC4gSXQgc2VlbXMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBtb2RpZmljYXRpb24gdG8gYGluY2x1ZGUvbGludXgvb25jZV9saXRlLmhgLiBTbywgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoYXQgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBvbmNlX2xpdGUuaGAgaXMgYWxsIGFib3V0LiBJcyBpdCBhIGNyaXRpY2FsIHBpZWNlIG9mIGluZnJhc3RydWN0dXJlLCBzb21ldGhpbmcgdXNlZCB0aHJvdWdob3V0IHRoZSBrZXJuZWwsIG9yIG1vcmUgbG9jYWxpemVkPyBLbm93aW5nIHRoZSBzY29wZSBpcyBlc3NlbnRpYWwuCgpOZXh0LCBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNoYW5nZXMgd2l0aGluIGBvbmNlX2xpdGUuaGAgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hhdCogaGFzIGNoYW5nZWQuIElzIGl0IGp1c3Qgd2hpdGVzcGFjZSwgYSBidWcgZml4LCBhbiBvcHRpbWl6YXRpb24sIG9yIGlzIGl0IGEgZnVuZGFtZW50YWwgYWx0ZXJhdGlvbiBvZiB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgYG9uY2VfbGl0ZWAgbWVjaGFuaXNtPyBJIG5lZWQgdG8gbG9vayBmb3IgYW55IG5ldyBBUEkgY2FsbHMsIGNoYW5nZXMgdG8gZGF0YSBzdHJ1Y3R1cmVzLCBvciBtb2RpZmljYXRpb25zIHRoYXQgY291bGQgYWZmZWN0IGV4aXN0aW5nIGNvZGUuIEZpbmFsbHksIHdoZXJlIGlzIHRoaXMgaGVhZGVyIGZpbGUgdXNlZD8gQSBxdWljayBncmVwIHRocm91Z2ggdGhlIGNvZGUgYmFzZSB3aWxsIGhpZ2hsaWdodCBhbGwgb2YgdGhlIHJlZmVyZW5jZXMgdG8gdGhpcyBmaWxlLCBhbmQgcmV2ZWFsIHRoZSBhcmVhcyBvZiB0aGUga2VybmVsIHRoYXQgZGVwZW5kIG9uIHRoaXMgbWVjaGFuaXNtLiBJIHdpbGwgdGhlbiBwZXJmb3JtIGEgY29kZSByZXZpZXcgb24gdGhvc2UgZmlsZXMsIHRvIGV4YW1pbmUgaG93IHRoZXkgYXJlIGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2VzLiBPbmx5IHRoZW4gY2FuIEkgdHJ1bHkgYXNzZXNzIHRoZSBpbXBhY3QgYW5kIHJpc2sgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiAgIDI6XHQjaWZuZGVmIF9MSU5VWF9PTkNFX0xJVEVfSFxuICAgMzpcdCNkZWZpbmUgX0xJTlVYX09OQ0VfTElURV9IXG4gICA0Olx0XG4gICA1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICAgNjpcdFxuICAgNzpcdC8qIENhbGwgYSBmdW5jdGlvbiBvbmNlLiBTaW1pbGFyIHRvIERPX09OQ0UoKSwgYnV0IGRvZXMgbm90IHVzZSBqdW1wIGxhYmVsXG4gICA4Olx0ICogcGF0Y2hpbmcgdmlhIHN0YXRpYyBrZXlzLlxuICAgOTpcdCAqL1xuICAxMDpcdCNkZWZpbmUgRE9fT05DRV9MSVRFKGZ1bmMsIC4uLilcdFx0XHRcdFx0XHRcXFxuICAxMTpcdFx0RE9fT05DRV9MSVRFX0lGKHRydWUsIGZ1bmMsICMjX19WQV9BUkdTX18pXG4gIDEyOlx0XG4gIDEzOlx0I2RlZmluZSBfX09OQ0VfTElURSgpXHRcdFx0XHRcdFx0XHRcXFxuICAxNDpcdFx0KHtcdFx0XHRcdFx0XHRcdFx0XFxcbiAgMTU6XHRcdFx0c3RhdGljIGJvb2wgX19zZWN0aW9uKFwmIzM0Oy5kYXRhLi5vbmNlXCYjMzQ7KSBfX2FscmVhZHlfZG9uZTtcdFxcXG4gIDE2Olx0XHRcdGJvb2wgX19yZXRfb25jZSA9IGZhbHNlO1x0XHRcdFx0XFxcbiAgMTc6XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuICAxODpcdFx0XHRpZiAodW5saWtlbHkoIV9fYWxyZWFkeV9kb25lKSkge1x0XHRcdFxcXG4gIDE5Olx0XHRcdFx0X19hbHJlYWR5X2RvbmUgPSB0cnVlO1x0XHRcdFx0XFxcbiAgMjA6XHRcdFx0XHRfX3JldF9vbmNlID0gdHJ1ZTtcdFx0XHRcdFxcXG4gIDIxOlx0XHRcdH1cdFx0XHRcdFx0XHRcdFxcXG4gIDIyOlx0XHRcdHVubGlrZWx5KF9fcmV0X29uY2UpO1x0XHRcdFx0XHRcXFxuICAyMzpcdFx0fSlcbiAgMjQ6XHRcbiAgMjU6XHQjZGVmaW5lIF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilcdFx0XHRcdFx0XFxcbiAgMjY6XHRcdCh1bmxpa2VseShjb25kaXRpb24pIFx1MDAyNlx1MDAyNiBfX09OQ0VfTElURSgpKVxuICAyNzpcdFxuICAyODpcdCNkZWZpbmUgRE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgZnVuYywgLi4uKVx0XHRcdFx0XFxcbiAgMjk6XHRcdCh7XHRcdFx0XHRcdFx0XHRcdFxcXG4gIDMwOlx0XHRcdGJvb2wgX19yZXRfZG9fb25jZSA9ICEhKGNvbmRpdGlvbik7XHRcdFx0XFxcbiAgMzE6XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuICAzMjpcdFx0XHRpZiAoX19PTkNFX0xJVEVfSUYoX19yZXRfZG9fb25jZSkpXHRcdFx0XFxcbiAgMzM6XHRcdFx0XHRmdW5jKF9fVkFfQVJHU19fKTtcdFx0XHRcdFxcXG4gIDM0Olx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAgMzU6XHRcdFx0dW5saWtlbHkoX19yZXRfZG9fb25jZSk7XHRcdFx0XHRcXFxuICAzNjpcdFx0fSlcbiAgMzc6XHRcbiAgMzg6XHQjZW5kaWYgLyogX0xJTlVYX09OQ0VfTElURV9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk1OAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBgb25jZV9saXRlLmhgIFVzYWdlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiBgb25jZV9saXRlLmhgIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gcGlucG9pbnQgZXZlcnkgaW5zdGFuY2Ugd2hlcmUgdGhpcyBoZWFkZXIgZmlsZSBpcyBpbmNsdWRlZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICpob3cqIGl0JiMzOTtzIGJlaW5nIHVzZWQgd2l0aGluIHRob3NlIGNvbnRleHRzLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGZpbmRpbmcgdGhlIGluY2x1ZGVzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBhbnkgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gaXQuIEkmIzM5O2xsIG5lZWQgdG8gZ28gYmV5b25kIGEgc2ltcGxlIGBncmVwYCBvciBgZmluZGAgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgb25jZV9saXRlLmhgIGluIHRoZSBrZXJuZWwuIEFyZSB0aGVyZSBhbnkgdW51c3VhbCBjYWxsaW5nIHBhdHRlcm5zPyBBcmUgdGhlcmUgYW55IGFyZWFzIHRoYXQgbG9vayByaXBlIGZvciBvcHRpbWl6YXRpb24gcmVsYXRlZCB0byBpdHMgdXNhZ2U/IFRpbWUgdG8gZGlnIGluIGFuZCBkbyBzb21lIHNlcmlvdXMgc3RhdGljIGFuYWx5c2lzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIHVuY292ZXIhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b25jZV9saXRlXFwuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy94ZnMveGZzX21lc3NhZ2UuaC00LVxuZnMveGZzL3hmc19tZXNzYWdlLmg6NTojaW5jbHVkZSBcdTAwM2NsaW51eC9vbmNlX2xpdGUuaFx1MDAzZVxuZnMveGZzL3hmc19tZXNzYWdlLmgtNi1cbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTYtI2luY2x1ZGUgXHUwMDNjbGludXgvaW5zdHJ1bWVudGF0aW9uLmhcdTAwM2VcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmg6NzojaW5jbHVkZSBcdTAwM2NsaW51eC9vbmNlX2xpdGUuaFx1MDAzZVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaC04LVxuLS1cbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtOS0jaW5jbHVkZSBcdTAwM2NsaW51eC9yYXRlbGltaXRfdHlwZXMuaFx1MDAzZVxuaW5jbHVkZS9saW51eC9wcmludGsuaDoxMDojaW5jbHVkZSBcdTAwM2NsaW51eC9vbmNlX2xpdGUuaFx1MDAzZVxuaW5jbHVkZS9saW51eC9wcmludGsuaC0xMS1cbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0yMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9jdHlwZS5oXHUwMDNlXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoyMzojaW5jbHVkZSBcdTAwM2NsaW51eC9vbmNlX2xpdGUuaFx1MDAzZVxua2VybmVsL3RyYWNlL3RyYWNlLmgtMjQtI2luY2x1ZGUgXHUwMDNjbGludXgvZnRyYWNlX3JlZ3MuaFx1MDAzZVxuLS1cbm5ldC9jb3JlL2Rldi5jLTE1Ny0jaW5jbHVkZSBcdTAwM2NsaW51eC9wcmFuZG9tLmhcdTAwM2Vcbm5ldC9jb3JlL2Rldi5jOjE1ODojaW5jbHVkZSBcdTAwM2NsaW51eC9vbmNlX2xpdGUuaFx1MDAzZVxubmV0L2NvcmUvZGV2LmMtMTU5LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtNy0jZGVmaW5lIF9fTUFDODAyMTFfREVCVUdfSFxubmV0L21hYzgwMjExL2RlYnVnLmg6ODojaW5jbHVkZSBcdTAwM2NsaW51eC9vbmNlX2xpdGUuaFx1MDAzZVxubmV0L21hYzgwMjExL2RlYnVnLmgtOS0jaW5jbHVkZSBcdTAwM2NuZXQvY2ZnODAyMTEuaFx1MDAzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1OTMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyB0aGUgJiMzNDtPTkNFX0xJVEUmIzM0OyBNYWNyb3MqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIHVzYWdlIG9mIHRoZXNlIGBfX09OQ0VfTElURV9JRmAsIGBfX09OQ0VfTElURWAsIGBET19PTkNFX0xJVEVgLCBhbmQgYERPX09OQ0VfTElURV9JRmAgbWFjcm9zLiAgVGhlIGdvYWwgaGVyZSBpcyBwcm9iYWJseSB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBiZWluZyB1c2VkIHdpdGhpbiB0aGUgY29kZWJhc2UuIEZpcnN0LCBhIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdG8gY2hlY2sgaG93IGBidWcuaGAgaW4gdGhlIGdlbmVyaWMgYXNzZW1ibHkgaW5jbHVkZXMgdXRpbGl6ZXMgdGhlbSBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBpbnZlc3RpZ2F0aW9uIHN0YXJ0ZWQuIExldCYjMzk7cyBkaWcgaW50byBgaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaGAgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fT05DRV9MSVRFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL2V4dGFibGUuYz0xNjY9c3RhdGljIGJvb2wgZXhfaGFuZGxlcl9tc3IoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZml4dXAsXG4tLVxuYXJjaC94ODYvbW0vZXh0YWJsZS5jLTE2OC17XG5hcmNoL3g4Ni9tbS9leHRhYmxlLmM6MTY5Olx0aWYgKF9fT05DRV9MSVRFX0lGKCFzYWZlIFx1MDAyNlx1MDAyNiB3cm1zcikpIHtcbmFyY2gveDg2L21tL2V4dGFibGUuYy0xNzAtXHRcdHByX3dhcm4oXCYjMzQ7dW5jaGVja2VkIE1TUiBhY2Nlc3MgZXJyb3I6IFdSTVNSIHRvIDB4JXggKHRyaWVkIHRvIHdyaXRlIDB4JTA4eCUwOHgpIGF0IHJJUDogMHglbHggKCVwUylcXG5cJiMzNDssXG4tLVxuYXJjaC94ODYvbW0vZXh0YWJsZS5jLTE3NS1cbmFyY2gveDg2L21tL2V4dGFibGUuYzoxNzY6XHRpZiAoX19PTkNFX0xJVEVfSUYoIXNhZmUgXHUwMDI2XHUwMDI2ICF3cm1zcikpIHtcbmFyY2gveDg2L21tL2V4dGFibGUuYy0xNzctXHRcdHByX3dhcm4oXCYjMzQ7dW5jaGVja2VkIE1TUiBhY2Nlc3MgZXJyb3I6IFJETVNSIGZyb20gMHgleCBhdCBySVA6IDB4JWx4ICglcFMpXFxuXCYjMzQ7LFxuLS1cbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMTItXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjEzOiNkZWZpbmUgX19PTkNFX0xJVEUoKVx0XHRcdFx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMTQtXHQoe1x0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMjQtXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjI1OiNkZWZpbmUgX19PTkNFX0xJVEVfSUYoY29uZGl0aW9uKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoyNjpcdCh1bmxpa2VseShjb25kaXRpb24pIFx1MDAyNlx1MDAyNiBfX09OQ0VfTElURSgpKVxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0yNy1cbi0tXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTMxLVx0XHRcdFx0XHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjMyOlx0XHRpZiAoX19PTkNFX0xJVEVfSUYoX19yZXRfZG9fb25jZSkpXHRcdFx0XFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMzMtXHRcdFx0ZnVuYyhfX1ZBX0FSR1NfXyk7XHRcdFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNDEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgaWYgdGhleSYjMzk7cmUgbWluZToKCioqRGlnZ2luZyBpbnRvIHRoZSAmIzM0O09uY2UmIzM0OyBNZWNoYW5pc20qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyAmIzM0O29uY2UmIzM0OyBtZWNoYW5pc20gYmV0dGVyLCBzcGVjaWZpY2FsbHkgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZWJhc2UgZm9yIGluc3RhbmNlcyBvZiBgRE9fT05DRV9MSVRFYCwgYFdBUk5fT05DRWAsIG9yIGV2ZW4gaG93IHRoYXQgYG9uY2VfbGl0ZS5oYCBoZWFkZXIgZmlsZSBpcyB1dGlsaXplZC4gSSBmaWd1cmUgaWYgSSB0cmFjayBkb3duIHdoZXJlIHRob3NlIG1hY3JvcyBhcmUgYmVpbmcgKnVzZWQqLCBJJiMzOTtsbCBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSB1bmRlcmx5aW5nIGNvbmNlcHRzLiBJIGFsc28gbWlnaHQgbG9vayBhdCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIGltcG9ydGFudCBmaWxlcyBsaWtlIGBidWcuaGAgb3IgYHByaW50ay5oYCBzaW5jZSB0aGV5IGFyZSBlc3NlbnRpYWwgaW4ga2VybmVsIGRlYnVnZ2luZy4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBncmVwIGNhbiBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtET19PTkNFX0xJVEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYz0xMjM0PXN0YXRpYyBpbnQgd2FpdF9vbl9zZW0oc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHU2NCBkYXRhKVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMTI1NC1cdFx0aWYgKGFtZF9pb21tdV9kdW1wKVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYzoxMjU1Olx0XHRcdERPX09OQ0VfTElURShkdW1wX2NvbW1hbmRfYnVmZmVyLCBpb21tdSk7XG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTEyNTYtXG4tLVxuZnMvZXJvZnMvaW50ZXJuYWwuaD00NDY9ZXJvZnNfZ2V0X2FvcHMoc3RydWN0IGlub2RlICpyZWFsaW5vZGUpXG4tLVxuZnMvZXJvZnMvaW50ZXJuYWwuaC00NTAtXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApO1xuZnMvZXJvZnMvaW50ZXJuYWwuaDo0NTE6XHRcdERPX09OQ0VfTElURV9JRihyZWFsaW5vZGUtXHUwMDNlaV9ibGtiaXRzICE9IFBBR0VfU0hJRlQsXG5mcy9lcm9mcy9pbnRlcm5hbC5oLTQ1Mi1cdFx0XHQgIGVyb2ZzX2luZm8sIHJlYWxpbm9kZS1cdTAwM2VpX3NiLFxuLS1cbmZzL3hmcy94ZnNfbWVzc2FnZS5oPTUwPWRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmZzL3hmcy94ZnNfbWVzc2FnZS5oLTU4LSNkZWZpbmUgeGZzX3ByaW50a19vbmNlKGZ1bmMsIGRldiwgZm10LCAuLi4pXHRcdFx0XFxcbmZzL3hmcy94ZnNfbWVzc2FnZS5oOjU5Olx0RE9fT05DRV9MSVRFKGZ1bmMsIGRldiwgZm10LCAjI19fVkFfQVJHU19fKVxuZnMveGZzL3hmc19tZXNzYWdlLmgtNjAtXG4tLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaD0xMDM9ZXh0ZXJuIF9fcHJpbnRmKDEsIDIpIHZvaWQgX193YXJuX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7XG4tLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaC0xNzktI2RlZmluZSBXQVJOX09OX09OQ0UoY29uZGl0aW9uKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaDoxODA6XHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOX09OLCAxKVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaC0xODEtI2VuZGlmXG4tLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaC0xODQtI2RlZmluZSBXQVJOX09OQ0UoY29uZGl0aW9uLCBmb3JtYXQuLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaDoxODU6XHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOLCAxLCBmb3JtYXQpXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE4Ni0jZW5kaWZcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE4OC0jZGVmaW5lIFdBUk5fVEFJTlRfT05DRShjb25kaXRpb24sIHRhaW50LCBmb3JtYXQuLi4pXHRcdFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oOjE4OTpcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk5fVEFJTlQsIDEsIHRhaW50LCBmb3JtYXQpXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE5MC1cbi0tXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTktICovXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjEwOiNkZWZpbmUgRE9fT05DRV9MSVRFKGZ1bmMsIC4uLilcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoxMTpcdERPX09OQ0VfTElURV9JRih0cnVlLCBmdW5jLCAjI19fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0xMi1cbi0tXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTI3LVxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoyODojZGVmaW5lIERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIGZ1bmMsIC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTI5LVx0KHtcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oPTQwNz1zdHJ1Y3QgcGlfZW50cnkge1xuLS1cbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjQ5LSNkZWZpbmUgcHJpbnRrX29uY2UoZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oOjY1MDpcdERPX09OQ0VfTElURShwcmludGssIGZtdCwgIyNfX1ZBX0FSR1NfXylcbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjUxLSNkZWZpbmUgcHJpbnRrX2RlZmVycmVkX29uY2UoZm10LCAuLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9wcmludGsuaDo2NTI6XHRET19PTkNFX0xJVEUocHJpbnRrX2RlZmVycmVkLCBmbXQsICMjX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oLTY1My0jZWxzZVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9Mjc1MD1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2Fzc2VydF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI3NTMtXHRpZiAoV0FSTl9PTkNFKCFza2ItXHUwMDNlbGVuLCBcJiMzNDslc1xcblwmIzM0OywgX19mdW5jX18pKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoyNzU0Olx0XHRET19PTkNFX0xJVEUoc2tiX2R1bXAsIEtFUk5fRVJSLCBza2IsIGZhbHNlKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjc1NS0jZW5kaWYgLyogQ09ORklHX0RFQlVHX05FVCAqL1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oPTM3PWVudW0gdHJhY2VfdHlwZSB7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTI5LSNkZWZpbmUgTUVNX0ZBSUwoY29uZGl0aW9uLCBmbXQsIC4uLilcdFx0XHRcdFx0XFxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEzMDpcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIHByX2VyciwgXCYjMzQ7RVJST1I6IFwmIzM0OyBmbXQsICMjX19WQV9BUkdTX18pXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMzEtXG4tLVxubmV0L2NvcmUvZGV2LmM9MzYxNz1pbnQgc2tiX2NoZWNrc3VtX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9kZXYuYy0zNjQ1LVx0aWYgKHVubGlrZWx5KG9mZnNldCBcdTAwM2U9IHNrYl9oZWFkbGVuKHNrYikpKSB7XG5uZXQvY29yZS9kZXYuYzozNjQ2Olx0XHRET19PTkNFX0xJVEUoc2tiX2R1bXAsIEtFUk5fRVJSLCBza2IsIGZhbHNlKTtcbm5ldC9jb3JlL2Rldi5jLTM2NDctXHRcdFdBUk5fT05DRSh0cnVlLCBcJiMzNDtvZmZzZXQgKCVkKSBcdTAwM2U9IHNrYl9oZWFkbGVuKCkgKCV1KVxcblwmIzM0Oyxcbi0tXG5uZXQvY29yZS9kZXYuYy0zNjU0LVx0aWYgKHVubGlrZWx5KG9mZnNldCAmIzQzOyBzaXplb2YoX19zdW0xNikgXHUwMDNlIHNrYl9oZWFkbGVuKHNrYikpKSB7XG5uZXQvY29yZS9kZXYuYzozNjU1Olx0XHRET19PTkNFX0xJVEUoc2tiX2R1bXAsIEtFUk5fRVJSLCBza2IsIGZhbHNlKTtcbm5ldC9jb3JlL2Rldi5jLTM2NTYtXHRcdFdBUk5fT05DRSh0cnVlLCBcJiMzNDtvZmZzZXQmIzQzOzIgKCV6dSkgXHUwMDNlIHNrYl9oZWFkbGVuKCkgKCV1KVxcblwmIzM0Oyxcbi0tXG5uZXQvY29yZS9kZXYuYz0zNzQwPXZvaWQgbmV0ZGV2X3J4X2NzdW1fZmF1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL2Rldi5jLTM3NDEte1xubmV0L2NvcmUvZGV2LmM6Mzc0MjpcdERPX09OQ0VfTElURShkb19uZXRkZXZfcnhfY3N1bV9mYXVsdCwgZGV2LCBza2IpO1xubmV0L2NvcmUvZGV2LmMtMzc0My19XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9MjI3PXN0YXRpYyB2b2lkIHRjcF9tZWFzdXJlX3Jjdl9tc3Moc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI2My1cdFx0LyogQWNjb3VudCBmb3IgcG9zc2libHktcmVtb3ZlZCBvcHRpb25zICovXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzoyNjQ6XHRcdERPX09OQ0VfTElURV9JRihsZW4gXHUwMDNlIGljc2stXHUwMDNlaWNza19hY2sucmN2X21zcyAmIzQzOyBNQVhfVENQX09QVElPTl9TUEFDRSxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI2NS1cdFx0XHRcdHRjcF9ncm9fZGV2X3dhcm4sIHNrLCBza2IsIGxlbik7XG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmg9MTI1PWRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE1Ni0jZGVmaW5lIGxpbmtfZXJyX29uY2UobGluaywgZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxNTc6XHRET19PTkNFX0xJVEUobGlua19lcnIsIGxpbmssIGZtdCwgIyNfX1ZBX0FSR1NfXylcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE1OC0jZGVmaW5lIGxpbmtfaWRfaW5mbyhzZGF0YSwgbGlua19pZCwgZm10LCAuLi4pXHRcdFx0XHRcXFxuLS1cbnJ1c3Qva2VybmVsL3ByaW50LnJzPTQyNj1tYWNyb19ydWxlcyEgcHJfY29udCAoXG4tLVxucnVzdC9rZXJuZWwvcHJpbnQucnMtNDMzLS8vL1xucnVzdC9rZXJuZWwvcHJpbnQucnM6NDM0Oi8vLyBUaGlzIHN0cnVjdHVyZSBwcm92aWRlcyB0aGUgUnVzdCBlcXVpdmFsZW50IG9mIHRoZSBrZXJuZWwmIzM5O3MgYERPX09OQ0VfTElURWAgbWFjcm8uXG5ydXN0L2tlcm5lbC9wcmludC5ycy00MzUtLy8vIFdoaWxlIGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGltcGxlbWVudCB0aGUgZmVhdHVyZSBlbnRpcmVseSBhcyBhIFJ1c3QgbWFjcm8sXG4tLVxucnVzdC9rZXJuZWwvcHJpbnQucnM9NDY4PSAgICBwdWIgZm4gY2FsbF9vbmNlXHUwMDNjRlx1MDAzZShcdTAwMjZzZWxmLCBmOiBGKSAtXHUwMDNlIGJvb2xcbi0tXG5ydXN0L2tlcm5lbC9wcmludC5ycy00OTEtLy8vXG5ydXN0L2tlcm5lbC9wcmludC5yczo0OTI6Ly8vIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUga2VybmVsJiMzOTtzIGBET19PTkNFX0xJVEVgIG1hY3JvLlxucnVzdC9rZXJuZWwvcHJpbnQucnMtNDkzLS8vL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjcwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT3B0aW1pemF0aW9uIG9mIHRoZSBgX19PTkNFX0xJVEVgIE1hY3JvcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGNvZGUgY2hhbmdlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBhbHRlcmF0aW9uIGFuZCBpdHMgaW1wbGljYXRpb25zLiBJIHNlZSB0aGUgb3JpZ2luYWwgYF9fT05DRV9MSVRFX0lGYCBtYWNybyBhbmQgdGhlbiB0aGUgbmV3IGltcGxlbWVudGF0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgbWFjcm8sIGBfX09OQ0VfTElURSgpYC4KCkluIHRoZSBvbGQgY29kZSwgYF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilgIHdyYXBwZWQgdGhlIGBfX2FscmVhZHlfZG9uZWAgY2hlY2sgZGlyZWN0bHkgd2l0aGluIHRoZSBjb25kaXRpb25hbCBsb2dpYy4gVGhlIGBfX2FscmVhZHlfZG9uZWAgZmxhZyB3YXMgbG9jYWwgdG8gdGhhdCBtYWNyby4gVGhpcyBtZWFudCB0aGUgY2hlY2sgYW5kIHNldHRpbmcgb2YgdGhlIGZsYWcgb25seSBvY2N1cnJlZCBpZiB0aGUgYGNvbmRpdGlvbmAgd2FzIHRydWUuIEhvd2V2ZXIsIHRoZSBmbGFnIHdhcyBkZWNsYXJlZCAqaW5zaWRlKiB0aGUgbWFjcm8uCgpUaGUgbmV3IGNvZGUgcmVmYWN0b3JzIHRoaXMuIGBfX09OQ0VfTElURSgpYCBpcyBub3cgYSBzdGFuZGFsb25lIG1hY3JvIHJlc3BvbnNpYmxlIHNvbGVseSBmb3IgdGhlICYjMzQ7ZG8tb25jZSYjMzQ7IGJlaGF2aW9yIOKAkyBjaGVja2luZyBhbmQgc2V0dGluZyBgX19hbHJlYWR5X2RvbmVgLiBDcnVjaWFsbHksIGBfX09OQ0VfTElURV9JRihjb25kaXRpb24pYCBub3cgKmNhbGxzKiBgX19PTkNFX0xJVEUoKWAsIGJ1dCB1c2VzIHNob3J0LWNpcmN1aXRpbmcuIFRoaXMgbWVhbnMgdGhhdCBpZiBgY29uZGl0aW9uYCBpcyBmYWxzZSwgYF9fT05DRV9MSVRFKClgIGlzbiYjMzk7dCBldmFsdWF0ZWQgYXQgYWxsLiBUaGUgaW1wYWN0IGlzIHdlIGdldCB0aGUgc2FtZSBiZWhhdmlvciBvZiBleGVjdXRpbmcgYF9fYWxyZWFkeV9kb25lYCBvbmx5IGlmIHRoZSBjb25kaXRpb24gaXMgbWV0LCBidXQgbm93IHRoZSBmbGFnIGlzIHNlcGFyYXRlIGFuZCBwb3RlbnRpYWxseSByZXVzYWJsZS4KCkFoYSEgVGhpcyBhbHNvIGNsYXJpZmllcyB0aGUgbGlrZWx5IGludGVudC4gVGhlIGludHJvZHVjdGlvbiBvZiBgX19PTkNFX0xJVEUoKWAgb2ZmZXJzIGEgd2F5IHRvIGludm9rZSB0aGUgJiMzNDtkby1vbmNlJiMzNDsgbG9naWMgd2l0aG91dCBhbiBleHBsaWNpdCBjb25kaXRpb24sIHdoaWNoIHdhc24mIzM5O3QgYXMgY2xlYW4gaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uIE5vdywgSSBzZWUgdGhhdCB0aGUgb3JpZ2luYWwgYERPX09OQ0VfTElURWAgbWFjcm8gdXNlZCBgRE9fT05DRV9MSVRFX0lGKHRydWUsIC4uLilgOyBub3cgd2UgY2FuIHNpbXBseSBjYWxsIHRoZSBiYXNlIGZ1bmN0aW9uLgoKQnV0LCBhIHF1aWNrIHJlYWxpdHkgY2hlY2s6IGlzIHRoaXMgZXZlbiB1c2VkIGFueXdoZXJlPyBMZXQgbWUgY2hlY2sgdGhlIGNhbGwgc2l0ZXMgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJiMzOTt0IGRlYWQgY29kZSEgSSByZWNhbGwgYFdBUk5fT05fT05DRWAgbGV2ZXJhZ2VzIHRoaXMsIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhbmQgaXQmIzM5O3MgdXNlZCBpbiBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcy4uLiBTcGVjaWZpY2FsbHksIEkga25vdyB0aGF0IGBhc20tZ2VuZXJpYy9idWcuaGAgbWlnaHQgdXNlIHRoaXMsIGFuZCB0aGUgQU1ENjQgYXJjaGl0ZWN0dXJlIGlzIGFuIGltcG9ydGFudCBjYXNlIGZvciBtZSwgc28gbGV0JiMzOTtzIGNoZWNrIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9idWcuaGAgdG8gY29uZmlybSB0aGUgaW1wbGVtZW50YXRpb24uIEdvdHRhIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBhY3R1YWxseSByZWxldmFudCBhbmQgbm90IGEgaHlwb3RoZXRpY2FsIG9wdGltaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7V0FSTl9PTl9PTkNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDM1NTQgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmFyY2gveDg2L2NvY28vc2V2L3ZjLWhhbmRsZS5jPTM5PXN0YXRpYyBlbnVtIGVzX3Jlc3VsdCB2Y19zbG93X3ZpcnRfdG9fcGh5cyhzdHJ1Y3QgZ2hjYiAqZ2hjYiwgc3RydWN0IGVzX2VtX2N0eHQgKmN0eHQsXG4tLVxuYXJjaC94ODYvY29jby9zZXYvdmMtaGFuZGxlLmMtNjEtXG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1oYW5kbGUuYzo2MjpcdGlmIChXQVJOX09OX09OQ0UocHRlX3ZhbCgqcHRlKSBcdTAwMjYgX1BBR0VfRU5DKSlcbmFyY2gveDg2L2NvY28vc2V2L3ZjLWhhbmRsZS5jLTYzLVx0XHQvKiBFbXVsYXRlZCBNTUlPIHRvL2Zyb20gZW5jcnlwdGVkIG1lbW9yeSBub3Qgc3VwcG9ydGVkICovXG4tLVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM9NTc4PXN0YXRpYyBpbnQgaGFuZGxlX21taW8oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB2ZV9pbmZvICp2ZSlcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy01ODctXHQvKiBPbmx5IGluLWtlcm5lbCBNTUlPIGlzIHN1cHBvcnRlZCAqL1xuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6NTg4Olx0aWYgKFdBUk5fT05fT05DRSh1c2VyX21vZGUocmVncykpKVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtNTg5LVx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy01OTctXHRtbWlvID0gaW5zbl9kZWNvZGVfbW1pbyhcdTAwMjZpbnNuLCBcdTAwMjZzaXplKTtcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjU5ODpcdGlmIChXQVJOX09OX09OQ0UobW1pbyA9PSBJTlNOX01NSU9fREVDT0RFX0ZBSUxFRCkpXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy01OTktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTY3Ny1cdFx0LyogQWxsIG90aGVyIGNhc2VzIGhhcyB0byBiZSBjb3ZlcmVkIHdpdGggdGhlIGZpcnN0IHN3aXRjaCgpICovXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzo2Nzg6XHRcdFdBUk5fT05fT05DRSgxKTtcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTY3OS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC94ODYvZW50cnkvY29tbW9uLmM9MTg9bm9pbnN0ciB2b2lkIHg4Nl9lbnRyeV9mcm9tX2t2bSh1bnNpZ25lZCBpbnQgZXZlbnRfdHlwZSwgdW5zaWduZWQgaW50IHZlY3Rvcilcbi0tXG5hcmNoL3g4Ni9lbnRyeS9jb21tb24uYy00NS1cbmFyY2gveDg2L2VudHJ5L2NvbW1vbi5jOjQ2Olx0V0FSTl9PTl9PTkNFKGV2ZW50X3R5cGUgIT0gRVZFTlRfVFlQRV9OTUkpO1xuYXJjaC94ODYvZW50cnkvY29tbW9uLmMtNDctXG4tLVxuYXJjaC94ODYvZW50cnkvZW50cnlfZnJlZC5jPTEyNz12b2lkIF9faW5pdCBmcmVkX2luc3RhbGxfc3lzdmVjKHVuc2lnbmVkIGludCBzeXN2ZWMsIGlkdGVudHJ5X3QgaGFuZGxlcilcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYy0xMjgte1xuYXJjaC94ODYvZW50cnkvZW50cnlfZnJlZC5jOjEyOTpcdGlmIChXQVJOX09OX09OQ0Uoc3lzdmVjIFx1MDAzYyBGSVJTVF9TWVNURU1fVkVDVE9SKSlcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYy0xMzAtXHRcdHJldHVybjtcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYy0xMzEtXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV9mcmVkLmM6MTMyOlx0aWYgKFdBUk5fT05fT05DRShmcmVkX3NldHVwX2RvbmUpKVxuYXJjaC94ODYvZW50cnkvZW50cnlfZnJlZC5jLTEzMy1cdFx0cmV0dXJuO1xuYXJjaC94ODYvZW50cnkvZW50cnlfZnJlZC5jLTEzNC1cbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYzoxMzU6XHRpZiAoIVdBUk5fT05fT05DRShzeXN2ZWNfdGFibGVbc3lzdmVjIC0gRklSU1RfU1lTVEVNX1ZFQ1RPUl0pKVxuYXJjaC94ODYvZW50cnkvZW50cnlfZnJlZC5jLTEzNi1cdFx0IHN5c3ZlY190YWJsZVtzeXN2ZWMgLSBGSVJTVF9TWVNURU1fVkVDVE9SXSA9IGhhbmRsZXI7XG4tLVxuYXJjaC94ODYvZW50cnkvZW50cnlfZnJlZC5jPTE2MD1zdGF0aWMgbm9pbnN0ciB2b2lkIGZyZWRfZXh0aW50KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYy0xNjMtXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV9mcmVkLmM6MTY0Olx0aWYgKFdBUk5fT05fT05DRSh2ZWN0b3IgXHUwMDNjIEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUikpXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV9mcmVkLmMtMTY1LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvZW50cnkvZW50cnlfZnJlZC5jPTI4OT1fX3Zpc2libGUgbm9pbnN0ciB2b2lkIF9fZnJlZF9lbnRyeV9mcm9tX2t2bShzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV9mcmVkLmMtMjk2LVx0ZGVmYXVsdDpcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYzoyOTc6XHRcdFdBUk5fT05fT05DRSgxKTtcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYy0yOTgtXHR9XG4tLVxuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYz0yNTc9Ym9vbCBlbXVsYXRlX3ZzeXNjYWxsX3BmKHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4tLVxuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYy0yODUtXHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9OWCkpXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jOjI4NjpcdFx0V0FSTl9PTl9PTkNFKCEoZXJyb3JfY29kZSBcdTAwMjYgWDg2X1BGX0lOU1RSKSk7XG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jLTI4Ny1cbi0tXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jPTI4MT12b2lkIGFtZF9icnNfZHJhaW4odm9pZClcbi0tXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jLTMwMS1cdC8qIFNhbml0eSBjaGVjayBbMC14ODZfcG11Lmxicl9ucl0gKi9cbmFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmM6MzAyOlx0aWYgKFdBUk5fT05fT05DRShjZmcubXNyb2ZmIFx1MDAzZT0geDg2X3BtdS5sYnJfbnIpKVxuYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuYy0zMDMtXHRcdGdvdG8gZW1wdHk7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmM9NTgwPXN0YXRpYyBpbnQgYW1kX3BtdV9jcHVfcHJlcGFyZShpbnQgY3B1KVxuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jLTU4OC1cbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jOjU4OTpcdFdBUk5fT05fT05DRShjcHVjLVx1MDAzZWFtZF9uYik7XG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYy01OTAtXG4tLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmM9NjA0PXN0YXRpYyB2b2lkIGFtZF9wbXVfY3B1X3N0YXJ0aW5nKGludCBjcHUpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmMtNjE3LVx0bmJfaWQgPSB0b3BvbG9neV9hbWRfbm9kZV9pZChjcHUpO1xuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmM6NjE4Olx0V0FSTl9PTl9PTkNFKG5iX2lkID09IEJBRF9BUElDSUQpO1xuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmMtNjE5LVxuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jLTYyMS1cdFx0bmIgPSBwZXJfY3B1KGNwdV9od19ldmVudHMsIGkpLmFtZF9uYjtcbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jOjYyMjpcdFx0aWYgKFdBUk5fT05fT05DRSghbmIpKVxuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmMtNjIzLVx0XHRcdGNvbnRpbnVlO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmM9NTU1PXN0YXRpYyB2b2lkIHBlcmZfaWJzX3N0YXJ0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKVxuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmMtNTYxLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9pYnMuYzo1NjI6XHRpZiAoV0FSTl9PTl9PTkNFKCEoaHdjLVx1MDAzZXN0YXRlIFx1MDAyNiBQRVJGX0hFU19TVE9QUEVEKSkpXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2licy5jLTU2My1cdFx0cmV0dXJuO1xuYXJjaC94ODYvZXZlbnRzL2FtZC9pYnMuYy01NjQtXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2licy5jOjU2NTpcdFdBUk5fT05fT05DRSghKGh3Yy1cdTAwM2VzdGF0ZSBcdTAwMjYgUEVSRl9IRVNfVVBUT0RBVEUpKTtcbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmMtNTY2LVx0aHdjLVx1MDAzZXN0YXRlID0gMDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2licy5jPTU5Nz1zdGF0aWMgdm9pZCBwZXJmX2lic19zdG9wKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKVxuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmMtNjMzLVx0XHRjbGVhcl9iaXQoSUJTX1NUQVJURUQsIHBjcHUtXHUwMDNlc3RhdGUpO1xuYXJjaC94ODYvZXZlbnRzL2FtZC9pYnMuYzo2MzQ6XHRcdFdBUk5fT05fT05DRShod2MtXHUwMDNlc3RhdGUgXHUwMDI2IFBFUkZfSEVTX1NUT1BQRUQpO1xuYXJjaC94ODYvZXZlbnRzL2FtZC9pYnMuYy02MzUtXHRcdGh3Yy1cdTAwM2VzdGF0ZSB8PSBQRVJGX0hFU19TVE9QUEVEO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmM9MTQwNj1zdGF0aWMgaW50IHBlcmZfaWJzX2hhbmRsZV9pcnEoc3RydWN0IHBlcmZfaWJzICpwZXJmX2licywgc3RydWN0IHB0X3JlZ3MgKmlyZWdzKVxuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmMtMTQzMy1cbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmM6MTQzNDpcdGlmIChXQVJOX09OX09OQ0UoIWV2ZW50KSlcbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmMtMTQzNS1cdFx0Z290byBmYWlsO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvaW9tbXUuYz0yNzk9c3RhdGljIHZvaWQgcGVyZl9pb21tdV9zdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncylcbi0tXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2lvbW11LmMtMjgyLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9pb21tdS5jOjI4MzpcdGlmIChXQVJOX09OX09OQ0UoIShod2MtXHUwMDNlc3RhdGUgXHUwMDI2IFBFUkZfSEVTX1NUT1BQRUQpKSlcbmFyY2gveDg2L2V2ZW50cy9hbWQvaW9tbXUuYy0yODQtXHRcdHJldHVybjtcbmFyY2gveDg2L2V2ZW50cy9hbWQvaW9tbXUuYy0yODUtXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2lvbW11LmM6Mjg2Olx0V0FSTl9PTl9PTkNFKCEoaHdjLVx1MDAzZXN0YXRlIFx1MDAyNiBQRVJGX0hFU19VUFRPREFURSkpO1xuYXJjaC94ODYvZXZlbnRzL2FtZC9pb21tdS5jLTI4Ny1cdGh3Yy1cdTAwM2VzdGF0ZSA9IDA7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9pb21tdS5jPTMzMT1zdGF0aWMgdm9pZCBwZXJmX2lvbW11X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9pb21tdS5jLTM0NS1cdHBlcmZfaW9tbXVfZGlzYWJsZV9ldmVudChldmVudCk7XG5hcmNoL3g4Ni9ldmVudHMvYW1kL2lvbW11LmM6MzQ2Olx0V0FSTl9PTl9PTkNFKGh3Yy1cdTAwM2VzdGF0ZSBcdTAwMjYgUEVSRl9IRVNfU1RPUFBFRCk7XG5hcmNoL3g4Ni9ldmVudHMvYW1kL2lvbW11LmMtMzQ3LVx0aHdjLVx1MDAzZXN0YXRlIHw9IFBFUkZfSEVTX1NUT1BQRUQ7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYz0zNjM9dm9pZCBhbWRfcG11X2xicl9kZWwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmMtMzczLVx0Y3B1Yy1cdTAwM2VsYnJfdXNlcnMtLTtcbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmM6Mzc0Olx0V0FSTl9PTl9PTkNFKGNwdWMtXHUwMDNlbGJyX3VzZXJzIFx1MDAzYyAwKTtcbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmMtMzc1LVx0cGVyZl9zY2hlZF9jYl9kZWMoZXZlbnQtXHUwMDNlcG11KTtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvYW1kL3Bvd2VyLmM9NzU9c3RhdGljIHZvaWQgX19wbXVfZXZlbnRfc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxuYXJjaC94ODYvZXZlbnRzL2FtZC9wb3dlci5jLTc2LXtcbmFyY2gveDg2L2V2ZW50cy9hbWQvcG93ZXIuYzo3NzpcdGlmIChXQVJOX09OX09OQ0UoIShldmVudC1cdTAwM2Vody5zdGF0ZSBcdTAwMjYgUEVSRl9IRVNfU1RPUFBFRCkpKVxuYXJjaC94ODYvZXZlbnRzL2FtZC9wb3dlci5jLTc4LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYz03OTY9c3RydWN0IHBtdSAqeDg2X2dldF9wbXUodW5zaWduZWQgaW50IGNwdSlcbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTgwMy1cdCAqL1xuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzo4MDQ6XHRpZiAoV0FSTl9PTl9PTkNFKCFjcHVjLVx1MDAzZXBtdSkpXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTgwNS1cdFx0cmV0dXJuIFx1MDAyNnBtdTtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jPTg2Mj1zdGF0aWMgdm9pZCBwZXJmX3NjaGVkX3NhdmVfc3RhdGUoc3RydWN0IHBlcmZfc2NoZWQgKnNjaGVkKVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy04NjMte1xuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzo4NjQ6XHRpZiAoV0FSTl9PTl9PTkNFKHNjaGVkLVx1MDAzZXNhdmVkX3N0YXRlcyBcdTAwM2U9IFNDSEVEX1NUQVRFU19NQVgpKVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy04NjUtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jPTEwMDg9aW50IHg4Nl9zY2hlZHVsZV9ldmVudHMoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIGludCBuLCBpbnQgKmFzc2lnbilcbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTEwMzUtXHRcdCAqL1xuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzoxMDM2Olx0XHRXQVJOX09OX09OQ0UoKGMgXHUwMDI2XHUwMDI2IGkgXHUwMDNlPSBuMCkgfHwgKCFjIFx1MDAyNlx1MDAyNiBpIFx1MDAzYyBuMCkpO1xuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0xMDM3LVxuLS1cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmM9MTU1MT1zdGF0aWMgdm9pZCB4ODZfcG11X3N0YXJ0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKVxuLS1cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmMtMTU1NS1cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmM6MTU1NjpcdGlmIChXQVJOX09OX09OQ0UoIShldmVudC1cdTAwM2Vody5zdGF0ZSBcdTAwMjYgUEVSRl9IRVNfU1RPUFBFRCkpKVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0xNTU3LVx0XHRyZXR1cm47XG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTE1NTgtXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjE1NTk6XHRpZiAoV0FSTl9PTl9PTkNFKGlkeCA9PSAtMSkpXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTE1NjAtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTE1NjItXHRpZiAoZmxhZ3MgXHUwMDI2IFBFUkZfRUZfUkVMT0FEKSB7XG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjE1NjM6XHRcdFdBUk5fT05fT05DRSghKGV2ZW50LVx1MDAzZWh3LnN0YXRlIFx1MDAyNiBQRVJGX0hFU19VUFRPREFURSkpO1xuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0xNTY0LVx0XHRzdGF0aWNfY2FsbCh4ODZfcG11X3NldF9wZXJpb2QpKGV2ZW50KTtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jPTE2Mzc9dm9pZCB4ODZfcG11X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0xNjQ0LVx0XHRfX2NsZWFyX2JpdChod2MtXHUwMDNlaWR4LCBjcHVjLVx1MDAzZWFjdGl2ZV9tYXNrKTtcbmFyY2gveDg2L2V2ZW50cy9jb3JlLmM6MTY0NTpcdFx0V0FSTl9PTl9PTkNFKGh3Yy1cdTAwM2VzdGF0ZSBcdTAwMjYgUEVSRl9IRVNfU1RPUFBFRCk7XG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTE2NDYtXHRcdGh3Yy1cdTAwM2VzdGF0ZSB8PSBQRVJGX0hFU19TVE9QUEVEO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmM9MTY1OT1zdGF0aWMgdm9pZCB4ODZfcG11X2RlbChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncylcbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTE2ODgtXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjE2ODk6XHRpZiAoV0FSTl9PTl9PTkNFKGkgPT0gY3B1Yy1cdTAwM2VuX2V2ZW50cykpIC8qIGNhbGxlZCAtXHUwMDNlZGVsKCkgd2l0aG91dCAtXHUwMDNlYWRkKCkgPyAqL1xuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0xNjkwLVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYz0yMzE5PXN0YXRpYyB2b2lkIHg4Nl9wbXVfc3RhcnRfdHhuKHN0cnVjdCBwbXUgKnBtdSwgdW5zaWduZWQgaW50IHR4bl9mbGFncylcbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTIzMjItXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjIzMjM6XHRXQVJOX09OX09OQ0UoY3B1Yy1cdTAwM2V0eG5fZmxhZ3MpO1x0XHQvKiB0eG4gYWxyZWFkeSBpbiBmbGlnaHQgKi9cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmMtMjMyNC1cbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jPTIzNDA9c3RhdGljIHZvaWQgeDg2X3BtdV9jYW5jZWxfdHhuKHN0cnVjdCBwbXUgKnBtdSlcbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTIzNDQtXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjIzNDU6XHRXQVJOX09OX09OQ0UoIWNwdWMtXHUwMDNldHhuX2ZsYWdzKTtcdC8qIG5vIHR4biBpbiBmbGlnaHQgKi9cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmMtMjM0Ni1cbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jPTIzNzA9c3RhdGljIGludCB4ODZfcG11X2NvbW1pdF90eG4oc3RydWN0IHBtdSAqcG11KVxuLS1cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmMtMjM3NS1cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmM6MjM3NjpcdFdBUk5fT05fT05DRSghY3B1Yy1cdTAwM2V0eG5fZmxhZ3MpO1x0Lyogbm8gdHhuIGluIGZsaWdodCAqL1xuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0yMzc3LVxuLS1cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmM9MzE0ND12b2lkIHBlcmZfZ2V0X3g4Nl9wbXVfY2FwYWJpbGl0eShzdHJ1Y3QgeDg2X3BtdV9jYXBhYmlsaXR5ICpjYXApXG4tLVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0zMTQ2LVx0LyogVGhpcyBBUEkgZG9lc24mIzM5O3QgY3VycmVudGx5IHN1cHBvcnQgZW51bWVyYXRpbmcgaHlicmlkIFBNVXMuICovXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjMxNDc6XHRpZiAoV0FSTl9PTl9PTkNFKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfSFlCUklEX0NQVSkpIHx8XG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTMxNDgtXHQgICAgIXg4Nl9wbXVfaW5pdGlhbGl6ZWQoKSkge1xuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9idHMuYz0zNDA9dm9pZCBpbnRlbF9idHNfZW5hYmxlX2xvY2FsKHZvaWQpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2J0cy5jLTM1NC1cdCAqL1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2J0cy5jOjM1NTpcdGlmIChXQVJOX09OX09OQ0Uoc3RhdGUgPT0gQlRTX1NUQVRFX0FDVElWRSkpXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvYnRzLmMtMzU2LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYz0yNzc3PXN0YXRpYyB2b2lkIF9faW50ZWxfcG11X2VuYWJsZV9hbGwoaW50IGFkZGVkLCBib29sIHBtaSlcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTI3OTUtXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjI3OTY6XHRcdGlmIChXQVJOX09OX09OQ0UoIWV2ZW50KSlcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtMjc5Ny1cdFx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYz00MjgwPWludGVsX3N0YXJ0X3NjaGVkdWxpbmcoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00Mjk0LVx0ICovXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjQyOTU6XHRpZiAoV0FSTl9PTl9PTkNFKCFleGNsX2NudHJzKSlcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNDI5Ni1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9NDMwOT1zdGF0aWMgdm9pZCBpbnRlbF9jb21taXRfc2NoZWR1bGluZyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywgaW50IGlkeCwgaW50IGNudHIpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00MzE4LVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYzo0MzE5Olx0aWYgKFdBUk5fT05fT05DRSghZXhjbF9jbnRycykpXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTQzMjAtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jPTQzMzY9aW50ZWxfc3RvcF9zY2hlZHVsaW5nKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjKVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNDM0OS1cdCAqL1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYzo0MzUwOlx0aWYgKFdBUk5fT05fT05DRSghZXhjbF9jbnRycykpXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTQzNTEtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jPTQzNjM9ZHluX2NvbnN0cmFpbnQoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIHN0cnVjdCBldmVudF9jb25zdHJhaW50ICpjLCBpbnQgaWR4KVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00MzY0LXtcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM6NDM2NTpcdFdBUk5fT05fT05DRSghY3B1Yy1cdTAwM2Vjb25zdHJhaW50X2xpc3QpO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00MzY2LVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9NDM5Mj1pbnRlbF9nZXRfZXhjbF9jb25zdHJhaW50cyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yywgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNDQwOS1cdCAqL1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYzo0NDEwOlx0aWYgKFdBUk5fT05fT05DRSghZXhjbF9jbnRycykpXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTQ0MTEtXHRcdHJldHVybiBjO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9NDQ5Mj1pbnRlbF9nZXRfZXZlbnRfY29uc3RyYWludHMoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIGludCBpZHgsXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00NTA1LVx0aWYgKGMxKSB7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjQ1MDY6XHQgICAgICAgIFdBUk5fT05fT05DRSghKGMxLVx1MDAzZWZsYWdzIFx1MDAyNiBQRVJGX1g4Nl9FVkVOVF9EWU5BTUlDKSk7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTQ1MDctXHRcdGJpdG1hcF9jb3B5KGMxLVx1MDAzZWlkeG1zaywgYzItXHUwMDNlaWR4bXNrLCBYODZfUE1DX0lEWF9NQVgpO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9NDUyND1zdGF0aWMgdm9pZCBpbnRlbF9wdXRfZXhjbF9jb25zdHJhaW50cyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yyxcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTQ1MzctXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjQ1Mzg6XHRpZiAoV0FSTl9PTl9PTkNFKCFleGNsX2NudHJzKSlcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNDUzOS1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9NjMzOD1zdGF0aWMgYm9vbCBpbml0X2h5YnJpZF9wbXUoaW50IGNwdSlcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTYzNDItXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjYzNDM6XHRpZiAoV0FSTl9PTl9PTkNFKCFwbXUgfHwgKHBtdS1cdTAwM2VwbXUudHlwZSA9PSAtMSkpKSB7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTYzNDQtXHRcdGNwdWMtXHUwMDNlcG11ID0gTlVMTDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jPTYzNzM9c3RhdGljIHZvaWQgaW50ZWxfcG11X2NwdV9zdGFydGluZyhpbnQgY3B1KVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNjM5NC1cdGlmICh4ODZfcG11LmZsYWdzIFx1MDAyNiBQTVVfRkxfVEZBKSB7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjYzOTU6XHRcdFdBUk5fT05fT05DRShjcHVjLVx1MDAzZXRmYV9zaGFkb3cpO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy02Mzk2LVx0XHRjcHVjLVx1MDAzZXRmYV9zaGFkb3cgPSB+MFVMTDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jPTY3NjU9c3RhdGljIF9faW5pdCB2b2lkIGludGVsX3BlYnNfaXNvbGF0aW9uX3F1aXJrKHZvaWQpXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTY3NjYte1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYzo2NzY3Olx0V0FSTl9PTl9PTkNFKHg4Nl9wbXUuY2hlY2tfbWljcm9jb2RlKTtcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNjc2OC1cdHg4Nl9wbXUuY2hlY2tfbWljcm9jb2RlID0gaW50ZWxfY2hlY2tfcGVic19pc29sYXRpb247XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM9NDU1PXN0YXRpYyB1NjQgX19ncnRfbGF0ZW5jeV9kYXRhKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IHN0YXR1cyxcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYy00NTktXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYzo0NjA6XHRXQVJOX09OX09OQ0UoaXNfaHlicmlkKCkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYy00NjEtXHRcdCAgICAgaHlicmlkX3BtdShldmVudC1cdTAwM2VwbXUpLVx1MDAzZXBtdV90eXBlID09IGh5YnJpZF9iaWcpO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jPTI5NDc9c3RhdGljIHZvaWQgaW50ZWxfcG11X2RyYWluX3BlYnNfY29yZShzdHJ1Y3QgcHRfcmVncyAqaXJlZ3MsIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhKVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jLTI5NjgtXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYzoyOTY5Olx0V0FSTl9PTl9PTkNFKCFldmVudCk7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYy0yOTcwLVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jPTMwMDU9c3RhdGljIHZvaWQgaW50ZWxfcG11X2RyYWluX3BlYnNfbmhtKHN0cnVjdCBwdF9yZWdzICppcmVncywgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMtMzA5OC1cdFx0ZXZlbnQgPSBjcHVjLVx1MDAzZWV2ZW50c1tiaXRdO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM6MzA5OTpcdFx0aWYgKFdBUk5fT05fT05DRSghZXZlbnQpKVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMtMzEwMC1cdFx0XHRjb250aW51ZTtcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jLTMxMDEtXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYzozMTAyOlx0XHRpZiAoV0FSTl9PTl9PTkNFKCFldmVudC1cdTAwM2VhdHRyLnByZWNpc2VfaXApKVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMtMzEwMy1cdFx0XHRjb250aW51ZTtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYz0zMTIyPV9faW50ZWxfcG11X2hhbmRsZV9wZWJzX3JlY29yZChzdHJ1Y3QgcHRfcmVncyAqaXJlZ3MsXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMtMzEzNS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jOjMxMzY6XHRcdGlmIChXQVJOX09OX09OQ0UoIWV2ZW50KSB8fFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM6MzEzNzpcdFx0ICAgIFdBUk5fT05fT05DRSghZXZlbnQtXHUwMDNlYXR0ci5wcmVjaXNlX2lwKSlcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jLTMxMzgtXHRcdFx0Y29udGludWU7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM9MzIyMj1zdGF0aWMgdm9pZCBpbnRlbF9wbXVfZHJhaW5fYXJjaF9wZWJzKHN0cnVjdCBwdF9yZWdzICppcmVncyxcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYy0zMjY1LVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM6MzI2NjpcdFx0aWYgKFdBUk5fT05fT05DRSghaGVhZGVyLVx1MDAzZXNpemUpKVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMtMzI2Ny1cdFx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM9NjYxPXZvaWQgaW50ZWxfcG11X2xicl9kZWwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYy02ODctXHRjcHVjLVx1MDAzZWxicl91c2Vycy0tO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jOjY4ODpcdFdBUk5fT05fT05DRShjcHVjLVx1MDAzZWxicl91c2VycyBcdTAwM2MgMCk7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM6Njg5Olx0V0FSTl9PTl9PTkNFKGNwdWMtXHUwMDNlbGJyX3BlYnNfdXNlcnMgXHUwMDNjIDApO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTY5MC1cdHBlcmZfc2NoZWRfY2JfZGVjKGV2ZW50LVx1MDAzZXBtdSk7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jPTk1MT1zdGF0aWMgdm9pZCBpbnRlbF9wbXVfbGJyX2NvdW50ZXJzX3Jlb3JkZXIoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTk2Ny1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYzo5Njg6XHRXQVJOX09OX09OQ0UoIXBvcyk7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtOTY5LVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wNC5jPTk1Mj1zdGF0aWMgdm9pZCBfX3A0X3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wNC5jLTk2Ny1cdCAqL1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL3A0LmM6OTY4Olx0V0FSTl9PTl9PTkNFKHA0X2lzX2V2ZW50X2Nhc2NhZGVkKGh3Yy1cdTAwM2Vjb25maWcpKTtcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wNC5jOjk2OTpcdFdBUk5fT05fT05DRShod2MtXHUwMDNlaWR4ID09IDEpO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL3A0LmMtOTcwLVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wNC5jPTEwMzQ9c3RhdGljIGludCBwNF9wbXVfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcDQuYy0xMDU3LVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3A0LmM6MTA1ODpcdFx0V0FSTl9PTl9PTkNFKGh3Yy1cdTAwM2VpZHggIT0gaWR4KTtcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wNC5jLTEwNTktXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmM9MTAxMT1wdF90b3BhX2VudHJ5X2Zvcl9wYWdlKHN0cnVjdCBwdF9idWZmZXIgKmJ1ZiwgdW5zaWduZWQgaW50IHBnKVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTEwMTktXHQgKi9cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jOjEwMjA6XHRpZiAoV0FSTl9PTl9PTkNFKHBnIFx1MDAzZT0gYnVmLVx1MDAzZW5yX3BhZ2VzKSlcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTEwMjEtXHRcdHJldHVybiBOVUxMO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTEwMzUtXHQgKi9cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jOjEwMzY6XHRXQVJOX09OX09OQ0UoMSk7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYy0xMDM3LVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTEwNDMtXHQgKi9cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jOjEwNDQ6XHRpZiAoV0FSTl9PTl9PTkNFKHRvcGEtXHUwMDNlbGFzdCA9PSAtMSkpXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYy0xMDQ1LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYy0xMDc1LVx0ICovXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYzoxMDc2Olx0V0FSTl9PTl9PTkNFKDEpO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmMtMTA3Ny1cbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYz0xNjcxPXN0YXRpYyB2b2lkIHB0X2V2ZW50X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgbW9kZSlcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYy0xNzE3LVx0aWYgKChtb2RlIFx1MDAyNiBQRVJGX0VGX1VQREFURSkgfHwgIWJ1Zi1cdTAwM2VzbmFwc2hvdCkge1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmM6MTcxODpcdFx0aWYgKFdBUk5fT05fT05DRShwdC1cdTAwM2VoYW5kbGUuZXZlbnQgIT0gZXZlbnQpKVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmMtMTcxOS1cdFx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmM9MTczNj1zdGF0aWMgbG9uZyBwdF9ldmVudF9zbmFwc2hvdF9hdXgoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTE3NDQtXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYzoxNzQ1Olx0aWYgKFdBUk5fT05fT05DRSghYnVmKSlcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTE3NDYtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTE3NTEtXHQgKi9cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jOjE3NTI6XHRpZiAoV0FSTl9PTl9PTkNFKCFidWYtXHUwMDNlc25hcHNob3QpKVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmMtMTc1My1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jPTUyMz12b2lkIHVuY29yZV9wbXVfZXZlbnRfc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jLTUyNy1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYzo1Mjg6XHRpZiAoV0FSTl9PTl9PTkNFKGlkeCA9PSAtMSB8fCBpZHggXHUwMDNlPSBVTkNPUkVfUE1DX0lEWF9NQVgpKVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jLTUyOS1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYy01NDUtXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmM6NTQ2Olx0aWYgKFdBUk5fT05fT05DRSghKGV2ZW50LVx1MDAzZWh3LnN0YXRlIFx1MDAyNiBQRVJGX0hFU19TVE9QUEVEKSkpXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmMtNTQ3LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jPTU2MT12b2lkIHVuY29yZV9wbXVfZXZlbnRfc3RvcChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncylcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmMtNTc4LVx0XHRib3gtXHUwMDNlZXZlbnRzW2h3Yy1cdTAwM2VpZHhdID0gTlVMTDtcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYzo1Nzk6XHRcdFdBUk5fT05fT05DRShod2MtXHUwMDNlc3RhdGUgXHUwMDI2IFBFUkZfSEVTX1NUT1BQRUQpO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jLTU4MC1cdFx0aHdjLVx1MDAzZXN0YXRlIHw9IFBFUkZfSEVTX1NUT1BQRUQ7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jPTExOTg9c3RhdGljIGludCB1bmNvcmVfcGNpX3BtdV9yZWdpc3RlcihzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmMtMTIwNS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYzoxMjA2Olx0aWYgKFdBUk5fT05fT05DRShwbXUtXHUwMDNlYm94ZXNbZGllXSAhPSBOVUxMKSlcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYy0xMjA3LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmM9MTUxND1zdGF0aWMgdm9pZCB1bmNvcmVfY2hhbmdlX3R5cGVfY3R4KHN0cnVjdCBpbnRlbF91bmNvcmVfdHlwZSAqdHlwZSwgaW50IG9sZF9jcHUsXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jLTE1MjctXHRcdGlmIChvbGRfY3B1IFx1MDAzYyAwKSB7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmM6MTUyODpcdFx0XHRXQVJOX09OX09OQ0UoYm94LVx1MDAzZWNwdSAhPSAtMSk7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmMtMTUyOS1cdFx0XHRpZiAodW5jb3JlX2RpZV9oYXNfYm94KHR5cGUsIGRpZSwgcG11LVx1MDAzZXBtdV9pZHgpIFx1MDAyNlx1MDAyNlxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYy0xNTM2LVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jOjE1Mzc6XHRcdFdBUk5fT05fT05DRShib3gtXHUwMDNlY3B1ICE9IC0xIFx1MDAyNlx1MDAyNiBib3gtXHUwMDNlY3B1ICE9IG9sZF9jcHUpO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jLTE1MzgtXHRcdGNwdW1hc2tfY2xlYXJfY3B1KG9sZF9jcHUsIFx1MDAyNnBtdS1cdTAwM2VjcHVfbWFzayk7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jPTU1Nj1zdGF0aWMgYm9vbCBuaG1leF9tYm94X2dldF9zaGFyZWRfcmVnKHN0cnVjdCBpbnRlbF91bmNvcmVfYm94ICpib3gsIGludCBpZHgsIHU2NCBjb25maWcpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jLTU4MC1cdGlkeCAtPSBFWFRSQV9SRUdfTkhNRVhfTV9aRFBfQ1RMX0ZWQztcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmVfbmhtZXguYzo1ODE6XHRpZiAoV0FSTl9PTl9PTkNFKGlkeCBcdTAwM2U9IDQpKVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jLTU4Mi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmVfbmhtZXguYz03Njg9c3RhdGljIGludCBuaG1leF9tYm94X2h3X2NvbmZpZyhzdHJ1Y3QgaW50ZWxfdW5jb3JlX2JveCAqYm94LCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jLTc4Ny1cdFx0bXNyID0gZXItXHUwMDNlbXNyICYjNDM7IHR5cGUtXHUwMDNlbXNyX29mZnNldCAqIGJveC1cdTAwM2VwbXUtXHUwMDNlcG11X2lkeDtcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmVfbmhtZXguYzo3ODg6XHRcdGlmIChXQVJOX09OX09OQ0UobXNyIFx1MDAzZT0gMHhmZmZmIHx8IGVyLVx1MDAzZWlkeCBcdTAwM2U9IDB4ZmYpKVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jLTc4OS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlX25obWV4LmMtNzkzLVx0XHRcdHJlZ19pZHggPSAxO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jOjc5NDpcdFx0ZWxzZSBpZiAoV0FSTl9PTl9PTkNFKHJlZ19pZHggXHUwMDNlIDApKVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jLTc5NS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvcGVyZl9ldmVudC5oPTE1MTM9c3RhdGljIGlubGluZSB2b2lkIGFtZF9wbXVfYnJzX2RlbChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpXG4tLVxuYXJjaC94ODYvZXZlbnRzL3BlcmZfZXZlbnQuaC0xNTE3LVx0Y3B1Yy1cdTAwM2VsYnJfdXNlcnMtLTtcbmFyY2gveDg2L2V2ZW50cy9wZXJmX2V2ZW50Lmg6MTUxODpcdFdBUk5fT05fT05DRShjcHVjLVx1MDAzZWxicl91c2VycyBcdTAwM2MgMCk7XG5hcmNoL3g4Ni9ldmVudHMvcGVyZl9ldmVudC5oLTE1MTktXG4tLVxuYXJjaC94ODYvZXZlbnRzL3JhcGwuYz0yODE9c3RhdGljIHZvaWQgX19yYXBsX3BtdV9ldmVudF9zdGFydChzdHJ1Y3QgcmFwbF9wbXUgKnJhcGxfcG11LFxuLS1cbmFyY2gveDg2L2V2ZW50cy9yYXBsLmMtMjgzLXtcbmFyY2gveDg2L2V2ZW50cy9yYXBsLmM6Mjg0Olx0aWYgKFdBUk5fT05fT05DRSghKGV2ZW50LVx1MDAzZWh3LnN0YXRlIFx1MDAyNiBQRVJGX0hFU19TVE9QUEVEKSkpXG5hcmNoL3g4Ni9ldmVudHMvcmFwbC5jLTI4NS1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9yYXBsLmM9MzA4PXN0YXRpYyB2b2lkIHJhcGxfcG11X2V2ZW50X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgbW9kZSlcbi0tXG5hcmNoL3g4Ni9ldmVudHMvcmFwbC5jLTMxNy1cdGlmICghKGh3Yy1cdTAwM2VzdGF0ZSBcdTAwMjYgUEVSRl9IRVNfU1RPUFBFRCkpIHtcbmFyY2gveDg2L2V2ZW50cy9yYXBsLmM6MzE4Olx0XHRXQVJOX09OX09OQ0UocmFwbF9wbXUtXHUwMDNlbl9hY3RpdmUgXHUwMDNjPSAwKTtcbmFyY2gveDg2L2V2ZW50cy9yYXBsLmMtMzE5LVx0XHRyYXBsX3BtdS1cdTAwM2VuX2FjdGl2ZS0tO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9yYXBsLmMtMzI0LVxuYXJjaC94ODYvZXZlbnRzL3JhcGwuYzozMjU6XHRcdFdBUk5fT05fT05DRShod2MtXHUwMDNlc3RhdGUgXHUwMDI2IFBFUkZfSEVTX1NUT1BQRUQpO1xuYXJjaC94ODYvZXZlbnRzL3JhcGwuYy0zMjYtXHRcdGh3Yy1cdTAwM2VzdGF0ZSB8PSBQRVJGX0hFU19TVE9QUEVEO1xuLS1cbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmM9MTE4PXN0YXRpYyBpbnQgaHZfY3B1X2luaXQodW5zaWduZWQgaW50IGNwdSlcbi0tXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jLTE1OC1cdFx0XHRpZiAoKmh2cCBcdTAwMjZcdTAwMjYgIW1zX2h5cGVydi5wYXJhdmlzb3JfcHJlc2VudCBcdTAwMjZcdTAwMjYgaHZfaXNvbGF0aW9uX3R5cGVfc25wKCkpIHtcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmM6MTU5Olx0XHRcdFx0V0FSTl9PTl9PTkNFKHNldF9tZW1vcnlfZGVjcnlwdGVkKCh1bnNpZ25lZCBsb25nKSgqaHZwKSwgMSkpO1xuYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuYy0xNjAtXHRcdFx0XHRtZW1zZXQoKmh2cCwgMCwgUEFHRV9TSVpFKTtcbi0tXG5hcmNoL3g4Ni9oeXBlcnYvaXJxZG9tYWluLmM9MzYxPXN0YXRpYyB2b2lkIGh2X21zaV9kb21haW5fZnJlZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZCwgdW5zaWduZWQgaW50IHZpcnEsXG4tLVxuYXJjaC94ODYvaHlwZXJ2L2lycWRvbWFpbi5jLTM2OC1cdFx0ZGVzYyA9IGlycV9kYXRhX2dldF9tc2lfZGVzYyhpcnFkKTtcbmFyY2gveDg2L2h5cGVydi9pcnFkb21haW4uYzozNjk6XHRcdGlmICghZGVzYyB8fCAhZGVzYy1cdTAwM2VpcnEgfHwgV0FSTl9PTl9PTkNFKCFkZXZfaXNfcGNpKGRlc2MtXHUwMDNlZGV2KSkpXG5hcmNoL3g4Ni9oeXBlcnYvaXJxZG9tYWluLmMtMzcwLVx0XHRcdGNvbnRpbnVlO1xuLS1cbmFyY2gveDg2L2h5cGVydi9pdm0uYz02MzI9c3RhdGljIHZvaWQgaHZfdnRvbV9rZXhlY19maW5pc2godm9pZClcbi0tXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmMtNjU4LVx0XHRcdFx0XHRjdXIsIDAsIGlucHV0LCBOVUxMKTtcbmFyY2gveDg2L2h5cGVydi9pdm0uYzo2NTk6XHRcdFx0XHRXQVJOX09OX09OQ0UoIWh2X3Jlc3VsdF9zdWNjZXNzKGh2X3N0YXR1cykpO1xuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTY2MC1cdFx0XHRcdGN1ciA9IDA7XG4tLVxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jPTY3Nz1zdGF0aWMgaW50IGh2X21hcmtfZ3BhX3Zpc2liaWxpdHkodTE2IGNvdW50LCBjb25zdCB1NjQgcGZuW10sXG4tLVxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTczMC1cdCAqL1xuYXJjaC94ODYvaHlwZXJ2L2l2bS5jOjczMTpcdFdBUk5fT05fT05DRShyZXQpO1xuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTczMi1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmg9NDg3PXN0YXRpYyBpbmxpbmUgdTMyIHNhZmVfYXBpY193YWl0X2ljcl9pZGxlKHZvaWQpIHsgcmV0dXJuIDA7IH1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaDo0ODg6c3RhdGljIGlubGluZSB2b2lkIGFwaWNfbmF0aXZlX2VvaSh2b2lkKSB7IFdBUk5fT05fT05DRSgxKTsgfVxuYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oLTQ4OS1zdGF0aWMgaW5saW5lIHZvaWQgYXBpY19zZXR1cF9hcGljX2NhbGxzKHZvaWQpIHsgfVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oPTEzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhcmNoX2VudGVyX2Zyb21fdXNlcl9tb2RlKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oLTMwLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmg6MzE6XHRcdFdBUk5fT05fT05DRShmbGFncyBcdTAwMjYgbWFzayk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaC0zMi1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oLTMzLVx0XHQvKiBXZSB0aGluayB3ZSBjYW1lIGZyb20gdXNlciBtb2RlLiBNYWtlIHN1cmUgcHRfcmVncyBhZ3JlZXMuICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaDozNDpcdFx0V0FSTl9PTl9PTkNFKCF1c2VyX21vZGUocmVncykpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmgtMzUtXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmgtNDAtXHRcdCAqL1xuYXJjaC94ODYvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmg6NDE6XHRcdFdBUk5fT05fT05DRSghb25fdGhyZWFkX3N0YWNrKCkpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmg6NDI6XHRcdFdBUk5fT05fT05DRShyZWdzICE9IHRhc2tfcHRfcmVncyhjdXJyZW50KSk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaC00My1cdH1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9NzMwPXN0YXRpYyBpbmxpbmUgcHRlX3QgcGZuX3B0ZSh1bnNpZ25lZCBsb25nIHBhZ2VfbnIsIHBncHJvdF90IHBncHJvdClcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtNzMzLVx0LyogVGhpcyBiaXQgY29tYmluYXRpb24gaXMgdXNlZCB0byBtYXJrIHNoYWRvdyBzdGFja3MgKi9cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDo3MzQ6XHRXQVJOX09OX09OQ0UoKHBncHJvdF92YWwocGdwcm90KSBcdTAwMjYgKF9QQUdFX0RJUlRZIHwgX1BBR0VfUlcpKSA9PVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTczNS1cdFx0XHRfUEFHRV9ESVJUWSk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTE3MDM9Ym9vbCBhcmNoX2lzX3BsYXRmb3JtX3BhZ2UodTY0IHBhZGRyKTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTcxNi0oeyBcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjE3MTc6XHRXQVJOX09OX09OQ0UocHRlX3ByZXNlbnQoKnB0ZXApIFx1MDAyNlx1MDAyNiAhcHRlX3NhbWUoKnB0ZXAsIHB0ZSkpOyBcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE3MTgtXHRzZXRfcHRlKHB0ZXAsIHB0ZSk7IFxcXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE3MjItKHsgXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxNzIzOlx0V0FSTl9PTl9PTkNFKHBtZF9wcmVzZW50KCpwbWRwKSBcdTAwMjZcdTAwMjYgIXBtZF9zYW1lKCpwbWRwLCBwbWQpKTsgXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNzI0LVx0c2V0X3BtZChwbWRwLCBwbWQpOyBcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNzI4LSh7IFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTcyOTpcdFdBUk5fT05fT05DRShwdWRfcHJlc2VudCgqcHVkcCkgXHUwMDI2XHUwMDI2ICFwdWRfc2FtZSgqcHVkcCwgcHVkKSk7IFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTczMC1cdHNldF9wdWQocHVkcCwgcHVkKTsgXFxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTczNC0oeyBcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjE3MzU6XHRXQVJOX09OX09OQ0UocDRkX3ByZXNlbnQoKnA0ZHApIFx1MDAyNlx1MDAyNiAhcDRkX3NhbWUoKnA0ZHAsIHA0ZCkpOyBcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE3MzYtXHRzZXRfcDRkKHA0ZHAsIHA0ZCk7IFxcXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE3NDAtKHsgXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxNzQxOlx0V0FSTl9PTl9PTkNFKHBnZF9wcmVzZW50KCpwZ2RwKSBcdTAwMjZcdTAwMjYgIXBnZF9zYW1lKCpwZ2RwLCBwZ2QpKTsgXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNzQyLVx0c2V0X3BnZChwZ2RwLCBwZ2QpOyBcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Bvc3RlZF9pbnRyLmg9MTcwPXN0YXRpYyBpbmxpbmUgYm9vbCBwaV9wZW5kaW5nX3RoaXNfY3B1KHVuc2lnbmVkIGludCB2ZWN0b3IpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcG9zdGVkX2ludHIuaC0xNzMtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wb3N0ZWRfaW50ci5oOjE3NDpcdGlmIChXQVJOX09OX09OQ0UodmVjdG9yIFx1MDAzZSBOUl9WRUNUT1JTIHx8IHZlY3RvciBcdTAwM2MgRklSU1RfRVhURVJOQUxfVkVDVE9SKSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Bvc3RlZF9pbnRyLmgtMTc1LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTc4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBLZXJuZWwgTVNSIEFjY2VzcyBhbmQgUG90ZW50aWFsIEJ1Z3MqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGxvb2tpbmcgYXQgYGFyY2gveDg2L21tL2V4dGFibGUuY2AgcmlnaHQgbm93LCBzcGVjaWZpY2FsbHkgdGhlIGBleF9oYW5kbGVyX21zcmAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgc2VjdGlvbiBpcyBjcml0aWNhbCBmb3IgaGFuZGxpbmcgZXhjZXB0aW9ucyByZWxhdGVkIHRvIE1vZGVsIFNwZWNpZmljIFJlZ2lzdGVyIChNU1IpIGFjY2Vzcywgd2hpY2ggaXMgYSBzZW5zaXRpdmUgYXJlYS4gVGhlIGNvZGUgaXMgY2xlYXJseSBjaGVja2luZyBmb3IgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGJvdGggYFdSTVNSYCAod3JpdGUpIGFuZCBgUkRNU1JgIChyZWFkKSBpbnN0cnVjdGlvbnMsIGVzcGVjaWFsbHkgd2hlbiB0aGUgYWNjZXNzIGlzbiYjMzk7dCBkZWVtZWQgJiMzNDtzYWZlLiYjMzQ7IFRoZSBgX19PTkNFX0xJVEVfSUZgIG1hY3JvIGlzIGludGVyZXN0aW5nOyBpdCBzdWdnZXN0cyB0aGlzIGNoZWNrIGlzIG9wdGltaXplZCBmb3IgcGVyZm9ybWFuY2UsIGJ1dCBvbmx5IHBlcmZvcm1zIHRoZSBjaGVjayBvbmNlIGluIGEgd2hpbGUuIFRoZSBgcHJfd2FybmAgY2FsbHMgYXJlIGNvbmNlcm5pbmcsIG9mIGNvdXJzZSwgYXMgdGhleSBpbmRpY2F0ZSBhIHBvdGVudGlhbCB1bmNoZWNrZWQgTVNSIGFjY2VzcyBlcnJvciBpcyBoYXBwZW5pbmcuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHJlZ2lzdGVyIHN0YXRlIChgc3RydWN0IHB0X3JlZ3MgKnJlZ3NgKSwgdGhlIHNhZmV0eSBmbGFnLCBhbmQgd2hldGhlciBpdCYjMzk7cyBhIHJlYWQgb3Igd3JpdGUgb3BlcmF0aW9uIChgd3Jtc3JgKSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZXNlIHdhcm5pbmdzLiBUaGUgbG9nZ2VkIE1TUiBhZGRyZXNzIGFuZCBpbnN0cnVjdGlvbiBwb2ludGVyIChgcklQYCkgYXJlIGVzc2VudGlhbCBmb3IgZGVidWdnaW5nIHNob3VsZCBhIHdhcm5pbmcgYmUgZW5jb3VudGVyZWQuIE5vdywgSSYjMzk7bSBnb2luZyB0byBzaGlmdCBteSBmb2N1cyB0byBgaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaGAg4oCTIEkgbmVlZCB0byBjaGVjayB0aGUgZ2VuZXJpYyBidWcgaGFuZGxpbmcgbWVjaGFuaXNtcyB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyB3aGVuIG9uZSBvZiB0aGVzZSBNU1IgYWNjZXNzIGlzc3VlcyB0cmlwcyBhIGJ1Zy4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgdHdvIGZpbGVzIGlzIGtleSB0byBhc3Nlc3NpbmcgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIHN5c3RlbSB3aXRoIHJlc3BlY3QgdG8gTVNSIGFjY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRcbiAxNzE6XHQjZGVmaW5lIFdBUk5fVEFJTlQoY29uZGl0aW9uLCB0YWludCwgZm9ybWF0Li4uKSAoe1x0XHRcdFxcXG4gMTcyOlx0XHRpbnQgX19yZXRfd2Fybl9vbiA9ICEhKGNvbmRpdGlvbik7XHRcdFx0XHRcXFxuIDE3MzpcdFx0aWYgKHVubGlrZWx5KF9fcmV0X3dhcm5fb24pKVx0XHRcdFx0XHRcXFxuIDE3NDpcdFx0XHRfX1dBUk5fcHJpbnRmKHRhaW50LCBmb3JtYXQpO1x0XHRcdFx0XFxcbiAxNzU6XHRcdHVubGlrZWx5KF9fcmV0X3dhcm5fb24pO1x0XHRcdFx0XHRcXFxuIDE3NjpcdH0pXG4gMTc3Olx0XG4gMTc4Olx0I2lmbmRlZiBXQVJOX09OX09OQ0VcbiAxNzk6XHQjZGVmaW5lIFdBUk5fT05fT05DRShjb25kaXRpb24pXHRcdFx0XHRcdFxcXG4gMTgwOlx0XHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOX09OLCAxKVxuIDE4MTpcdCNlbmRpZlxuIDE4MjpcdFxuIDE4MzpcdCNpZm5kZWYgV0FSTl9PTkNFXG4gMTg0Olx0I2RlZmluZSBXQVJOX09OQ0UoY29uZGl0aW9uLCBmb3JtYXQuLi4pXHRcdFx0XHRcXFxuIDE4NTpcdFx0RE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgV0FSTiwgMSwgZm9ybWF0KVxuIDE4NjpcdCNlbmRpZlxuIDE4NzpcdFxuIDE4ODpcdCNkZWZpbmUgV0FSTl9UQUlOVF9PTkNFKGNvbmRpdGlvbiwgdGFpbnQsIGZvcm1hdC4uLilcdFx0XFxcbiAxODk6XHRcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk5fVEFJTlQsIDEsIHRhaW50LCBmb3JtYXQpXG4gMTkwOlx0XG4gMTkxOlx0I2Vsc2UgLyogIUNPTkZJR19CVUcgKi9cbiAxOTI6XHQjaWZuZGVmIEhBVkVfQVJDSF9CVUdcbiAxOTM6XHQjZGVmaW5lIEJVRygpIGRvIHtcdFx0XFxcbiAxOTQ6XHRcdGRvIHt9IHdoaWxlICgxKTtcdFxcXG4gMTk1Olx0XHR1bnJlYWNoYWJsZSgpO1x0XHRcXFxuIDE5NjpcdH0gd2hpbGUgKDApXG4gMTk3Olx0I2VuZGlmXG4gMTk4Olx0XG4gMTk5Olx0I2lmbmRlZiBIQVZFX0FSQ0hfQlVHX09OXG4gMjAwOlx0I2RlZmluZSBCVUdfT04oY29uZGl0aW9uKSBkbyB7IGlmICh1bmxpa2VseShjb25kaXRpb24pKSBCVUcoKTsgfSB3aGlsZSAoMClcbiAyMDE6XHQjZW5kaWZcbiAyMDI6XHRcbiAyMDM6XHQjaWZuZGVmIEhBVkVfQVJDSF9XQVJOX09OXG4gMjA0Olx0I2RlZmluZSBXQVJOX09OKGNvbmRpdGlvbikgKHtcdFx0XHRcdFx0XHRcXFxuIDIwNTpcdFx0aW50IF9fcmV0X3dhcm5fb24gPSAhIShjb25kaXRpb24pO1x0XHRcdFx0XFxcbiAyMDY6XHRcdHVubGlrZWx5KF9fcmV0X3dhcm5fb24pO1x0XHRcdFx0XHRcXFxuIDIwNzpcdH0pXG4gMjA4Olx0I2VuZGlmXG4gMjA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzg1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIE9uY2UtT25seSBQcmludCBNYWNyb3MqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGVzZSBtYWNyb3M6IGBXQVJOX09OX09OQ0VgLCBgV0FSTl9PTkNFYCwgYW5kIGBXQVJOX1RBSU5UX09OQ0VgLiBUaGV5JiMzOTtyZSBhbGwgZGVmaW5lZCBpbiBgYXNtLWdlbmVyaWMvYnVnLmhgLCBhbmQgaXQgbG9va3MgbGlrZSB0aGV5IGxldmVyYWdlIGBET19PTkNFX0xJVEVfSUZgLiBSaWdodCwgYW5kIGBET19PTkNFX0xJVEVfSUZgIGluIHR1cm4gdXNlcyBgX19PTkNFX0xJVEVfSUZgLiAgSG1tLCBzZWVtcyBsaWtlIGEgcGF0dGVybiBoZXJlIGZvciAmIzM0O3ByaW50IHRoaXMgbWVzc2FnZSBvbmNlIGFuZCBvbmx5IG9uY2UmIzM0Oy4gVGhlbiB0aGVyZSYjMzk7cyBgcHJpbnRrX29uY2VgLCB3aGljaCB1c2VzIGBET19PTkNFX0xJVEVgLCBhbmQgZXZlbiBgZXhfaGFuZGxlcl9tc3JgIGlzIGluIG9uIHRoZSBhY3Rpb24gdXNpbmcgYF9fT05DRV9MSVRFX0lGYC4gSW50ZXJlc3RpbmcuICBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaGlzdG9yeSBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlaXIgaW50cm9kdWN0aW9uIGFuZCB1c2FnZSwgc28gdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNvbnN1bHQgdGhlIGdpdCBjb21taXQgbG9nLCBwcm9iYWJseSBieSBjaGVja2luZyB0aGUgY29udGV4dCBvZiB0aGUgZmlsZXMsIHRvIGZpbmQgdGhlIGNvbW1pdCB3aGVyZSB0aGVzZSB3ZXJlIGZpcnN0IGludHJvZHVjZWQgdG8gdXBzdHJlYW0gTGludXguIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGV5JiMzOTtyZSBhY3R1YWxseSB0cnlpbmcgdG8gYWNoaWV2ZSBhbmQgYW55IHBvdGVudGlhbCBnb3RjaGFzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgX19PTkNFX0xJVEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0xMi1cbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MTM6I2RlZmluZSBfX09OQ0VfTElURSgpXHRcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0xNC1cdCh7XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0yNC1cbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MjU6I2RlZmluZSBfX09OQ0VfTElURV9JRihjb25kaXRpb24pXHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTI2LVx0KHVubGlrZWx5KGNvbmRpdGlvbikgXHUwMDI2XHUwMDI2IF9fT05DRV9MSVRFKCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzI1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTc5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEV2YWx1YXRpb246IG9uY2VfbGl0ZS5oIE1hY3JvIFJlZmFjdG9yaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIGBfX09OQ0VfTElURSgpYCBhbmQgYF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilgIG1hY3JvcyBpbiBgaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaGAgYXJlIGZvdW5kYXRpb25hbCDigJMgdGhleSBzcGF3biBhIGxvdCBvZiBvdGhlciBpbXBvcnRhbnQgY29uc3RydWN0cyBsaWtlIGBET19PTkNFX0xJVEVgLCBgV0FSTl9PTl9PTkNFYCwgYW5kIHNvIG9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzICYjMzQ7SXMgdGhpcyBtYWNybyBhIGJpZyBkZWFsLCBpcyBpdCB3aWRlbHkgdXNlZD8mIzM0OywgYW5kIHRoZSBhbnN3ZXIgaXMgeWVzLCB2ZXJ5LiBUaGlzIG1lYW5zIHRoaXMgY2hhbmdlIGhhcyBwb3RlbnRpYWxseSBmYXItcmVhY2hpbmcgY29uc2VxdWVuY2VzIGFjcm9zcyB0aGUga2VybmVsLgoKTm93LCBsZXQmIzM5O3MgY2FyZWZ1bGx5IGFwcGx5IHRoZSBlc3RhYmxpc2hlZCBmdXp6aW5nIGd1aWRlbGluZXMuIFJlYWNoYWJpbGl0eSBpcyB0aGUgY29yZSBjb25jZXB0LCBzbyBsZXQmIzM5O3MgZm9jdXMgb24gaWYgdGhlIGNvZGUgaXMgYWN0dWFsbHkgKmV4ZWN1dGVkKi4gRnJvbSB0aGUgZ3VpZGVsaW5lcywgSSBrbm93IEkgY2FuJiMzOTt0IHRha2UgY2xhaW1zIG9mICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyBhdCBmYWNlIHZhbHVlLCByZWZhY3RvcmluZ3MgYXJlIG9mdGVuIHdoZXJlIHRoZSBzdWJ0bGUgYnVncyBoaWRlLCBzbyB0aGlzIGlzIGNyaXRpY2FsLiBJdCYjMzk7cyBhIHJlZmFjdG9yaW5nIG9mIGBfX09OQ0VfTElURV9JRihjb25kaXRpb24pYCB0byBzZXBhcmF0ZSB0aGUgYF9fT05DRV9MSVRFKClgIGxvZ2ljIGFuZCByZWRlZmluZSBgX19PTkNFX0xJVEVfSUZgIHRvIHdyYXAgaXQgaW4gYW4gYHVubGlrZWx5KGNvbmRpdGlvbilgLiBUaGUgY29uZGl0aW9uYWwgbG9naWMgY2hhbmdlcyBpbiBhbGwgdGhlIGNhbGxlcnMsIHNvIEkmIzM5O20gYWxyZWFkeSBpbiAmIzM0O2Z1enogdGhpcyYjMzQ7IHRlcnJpdG9yeS4KClNpbmNlIHRoaXMgdG91Y2hlcyByZWFjaGFibGUgYW5kICpleGVjdXRhYmxlKiBjb2RlLCB0aGUgYW5zd2VyIGlzICp5ZXMqLCB0aGlzIHBhdGNoICpkb2VzKiBtb2RpZnkgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZS4gVGhpcyB3YXJyYW50cyBmdXp6aW5nLiBUaGUgZ3VpZGVsaW5lcyBpbnN0cnVjdCBtZSB0byBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBgRm9jdXNTeW1ib2xzYCB0byBwcmV2ZW50IHRoZSBmdXp6ZXIgZnJvbSBiZWluZyBkaWx1dGVkLiBObyB1YmlxdWl0b3VzIGxpZmVjeWNsZSBmdW5jdGlvbnMgc2hvdWxkIGJlIGxpc3RlZCwgc28gZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycywgcGFnZSBmYXVsdCwgZXRjLiBhcmUgcmlnaHQgb3V0LiBJIG5lZWQgdG8gZ2V0IGFzIHNwZWNpZmljIGFzIHBvc3NpYmxlLiBUaGUgcHJpbWFyeSBjaGFuZ2VzIGFyZSBpbiBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBpbiB0aGUgLmggZmlsZS4gVGhpcyBtZWFucyBJIG5lZWQgdG8gaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIgZnVuY3Rpb25zIHRoYXQgYWN0dWFsbHkgKnVzZSogdGhlbS4gSSYjMzk7dmUgYWxyZWFkeSBkb25lIHRoYXQgYnkgaWRlbnRpZnlpbmcgYERPX09OQ0VfTElURWAgLyBgX19PTkNFX0xJVEVfSUZgIC8gYERPX09OQ0VfTElURV9JRmAgdXNlcnMsIHNvIG5vdyBJIG5lZWQgdG8gY2hvb3NlIHRoZSBiZXN0IHN5bWJvbHMuCgpGcm9tIHRoZSBleGlzdGluZyBsaXN0IEkmIzM5O3ZlIGdvdCwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcgZm9yIGBGb2N1c1N5bWJvbHNgOgoKKiAgIGBuZXQvaXB2NC90Y3BfaW5wdXQuYzp0Y3BfZ3JvX2Rldl93YXJuYCBzaW5jZSBpdCBpcyB0aGUgZnVuY3Rpb24gcGFzc2VkIHRvIGBET19PTkNFX0xJVEVfSUZgLiBUaGlzIGlzIGEgdmVyeSBzcGVjaWZpYyB1c2UtY2FzZSBJIGNhbiBmb2N1cyBvbi4KKiAgIGBhcmNoL3g4Ni9tbS9leHRhYmxlLmM6ZXhfaGFuZGxlcl9tc3JgLiBUaGlzIGhhbmRsZXMgdGhlIE1TUiBleGNlcHRpb25zLgoqICAgYG5ldC9jb3JlL2Rldi5jOnNrYl9jaGVja3N1bV9oZWxwYCBhbmQgYG5ldC9jb3JlL2Rldi5jOm5ldGRldl9yeF9jc3VtX2ZhdWx0YCwgdGhlc2UgYXJlIG5ldHdvcmsgZm9jdXNlZCBmdW5jdGlvbnMsIGFuZCBub3Qgb3Zlcmx5IGdlbmVyYWwsIGFuZCBzaG91bGQgcmV2ZWFsIGludGVyZXN0aW5nIGludGVyYWN0aW9ucy4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgYENPTkZJR19gIG9wdGlvbnMgdG8gZW5hYmxlIGFuZCBpbmNsdWRlIHRoZW0gYXMgdGhlIGBFbmFibGVDb25maWdzYC4gVGhpcyBzaG91bGQgYmUgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgYnkgY2hlY2tpbmcgdGhlIGBLY29uZmlnYCBmaWxlcyBhbmQgYCNpZmRlZmBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoRE9fT05DRV9MSVRFfF9fT05DRV9MSVRFKSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9leHRhYmxlLmM9MTY2PXN0YXRpYyBib29sIGV4X2hhbmRsZXJfbXNyKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmZpeHVwLFxuLS1cbmFyY2gveDg2L21tL2V4dGFibGUuYy0xNjgte1xuYXJjaC94ODYvbW0vZXh0YWJsZS5jOjE2OTpcdGlmIChfX09OQ0VfTElURV9JRighc2FmZSBcdTAwMjZcdTAwMjYgd3Jtc3IpKSB7XG5hcmNoL3g4Ni9tbS9leHRhYmxlLmMtMTcwLVx0XHRwcl93YXJuKFwmIzM0O3VuY2hlY2tlZCBNU1IgYWNjZXNzIGVycm9yOiBXUk1TUiB0byAweCV4ICh0cmllZCB0byB3cml0ZSAweCUwOHglMDh4KSBhdCBySVA6IDB4JWx4ICglcFMpXFxuXCYjMzQ7LFxuLS1cbmFyY2gveDg2L21tL2V4dGFibGUuYy0xNzUtXG5hcmNoL3g4Ni9tbS9leHRhYmxlLmM6MTc2Olx0aWYgKF9fT05DRV9MSVRFX0lGKCFzYWZlIFx1MDAyNlx1MDAyNiAhd3Jtc3IpKSB7XG5hcmNoL3g4Ni9tbS9leHRhYmxlLmMtMTc3LVx0XHRwcl93YXJuKFwmIzM0O3VuY2hlY2tlZCBNU1IgYWNjZXNzIGVycm9yOiBSRE1TUiBmcm9tIDB4JXggYXQgcklQOiAweCVseCAoJXBTKVxcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTEyMzQ9c3RhdGljIGludCB3YWl0X29uX3NlbShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgdTY0IGRhdGEpXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy0xMjU0LVx0XHRpZiAoYW1kX2lvbW11X2R1bXApXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jOjEyNTU6XHRcdFx0RE9fT05DRV9MSVRFKGR1bXBfY29tbWFuZF9idWZmZXIsIGlvbW11KTtcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMTI1Ni1cbi0tXG5mcy9lcm9mcy9pbnRlcm5hbC5oPTQ0Nj1lcm9mc19nZXRfYW9wcyhzdHJ1Y3QgaW5vZGUgKnJlYWxpbm9kZSlcbi0tXG5mcy9lcm9mcy9pbnRlcm5hbC5oLTQ1MC1cdFx0XHRyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7XG5mcy9lcm9mcy9pbnRlcm5hbC5oOjQ1MTpcdFx0RE9fT05DRV9MSVRFX0lGKHJlYWxpbm9kZS1cdTAwM2VpX2Jsa2JpdHMgIT0gUEFHRV9TSElGVCxcbmZzL2Vyb2ZzL2ludGVybmFsLmgtNDUyLVx0XHRcdCAgZXJvZnNfaW5mbywgcmVhbGlub2RlLVx1MDAzZWlfc2IsXG4tLVxuZnMveGZzL3hmc19tZXNzYWdlLmg9NTA9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuZnMveGZzL3hmc19tZXNzYWdlLmgtNTgtI2RlZmluZSB4ZnNfcHJpbnRrX29uY2UoZnVuYywgZGV2LCBmbXQsIC4uLilcdFx0XHRcXFxuZnMveGZzL3hmc19tZXNzYWdlLmg6NTk6XHRET19PTkNFX0xJVEUoZnVuYywgZGV2LCBmbXQsICMjX19WQV9BUkdTX18pXG5mcy94ZnMveGZzX21lc3NhZ2UuaC02MC1cbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oPTEwMz1leHRlcm4gX19wcmludGYoMSwgMikgdm9pZCBfX3dhcm5fcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTtcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE3OS0jZGVmaW5lIFdBUk5fT05fT05DRShjb25kaXRpb24pXHRcdFx0XHRcdFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oOjE4MDpcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk5fT04sIDEpXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE4MS0jZW5kaWZcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE4NC0jZGVmaW5lIFdBUk5fT05DRShjb25kaXRpb24sIGZvcm1hdC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oOjE4NTpcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk4sIDEsIGZvcm1hdClcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTg2LSNlbmRpZlxuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTg4LSNkZWZpbmUgV0FSTl9UQUlOVF9PTkNFKGNvbmRpdGlvbiwgdGFpbnQsIGZvcm1hdC4uLilcdFx0XFxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmg6MTg5Olx0RE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgV0FSTl9UQUlOVCwgMSwgdGFpbnQsIGZvcm1hdClcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTkwLVxuLS1cbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtOS0gKi9cbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MTA6I2RlZmluZSBET19PTkNFX0xJVEUoZnVuYywgLi4uKVx0XHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjExOlx0RE9fT05DRV9MSVRFX0lGKHRydWUsIGZ1bmMsICMjX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTEyLVxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoxMzojZGVmaW5lIF9fT05DRV9MSVRFKClcdFx0XHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTE0LVx0KHtcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTI0LVxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoyNTojZGVmaW5lIF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilcdFx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MjY6XHQodW5saWtlbHkoY29uZGl0aW9uKSBcdTAwMjZcdTAwMjYgX19PTkNFX0xJVEUoKSlcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMjctXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjI4OiNkZWZpbmUgRE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgZnVuYywgLi4uKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMjktXHQoe1x0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMzEtXHRcdFx0XHRcdFx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MzI6XHRcdGlmIChfX09OQ0VfTElURV9JRihfX3JldF9kb19vbmNlKSlcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0zMy1cdFx0XHRmdW5jKF9fVkFfQVJHU19fKTtcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9wcmludGsuaD00MDc9c3RydWN0IHBpX2VudHJ5IHtcbi0tXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oLTY0OS0jZGVmaW5lIHByaW50a19vbmNlKGZtdCwgLi4uKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9wcmludGsuaDo2NTA6XHRET19PTkNFX0xJVEUocHJpbnRrLCBmbXQsICMjX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oLTY1MS0jZGVmaW5lIHByaW50a19kZWZlcnJlZF9vbmNlKGZtdCwgLi4uKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmg6NjUyOlx0RE9fT05DRV9MSVRFKHByaW50a19kZWZlcnJlZCwgZm10LCAjI19fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9wcmludGsuaC02NTMtI2Vsc2Vcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTI3NTA9c3RhdGljIGlubGluZSB2b2lkIHNrYl9hc3NlcnRfbGVuKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yNzUzLVx0aWYgKFdBUk5fT05DRSghc2tiLVx1MDAzZWxlbiwgXCYjMzQ7JXNcXG5cJiMzNDssIF9fZnVuY19fKSlcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6Mjc1NDpcdFx0RE9fT05DRV9MSVRFKHNrYl9kdW1wLCBLRVJOX0VSUiwgc2tiLCBmYWxzZSk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI3NTUtI2VuZGlmIC8qIENPTkZJR19ERUJVR19ORVQgKi9cbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD0zNz1lbnVtIHRyYWNlX3R5cGUge1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oLTEyOS0jZGVmaW5lIE1FTV9GQUlMKGNvbmRpdGlvbiwgZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMzA6XHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBwcl9lcnIsIFwmIzM0O0VSUk9SOiBcJiMzNDsgZm10LCAjI19fVkFfQVJHU19fKVxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTMxLVxuLS1cbm5ldC9jb3JlL2Rldi5jPTM2MTc9aW50IHNrYl9jaGVja3N1bV9oZWxwKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZGV2LmMtMzY0NS1cdGlmICh1bmxpa2VseShvZmZzZXQgXHUwMDNlPSBza2JfaGVhZGxlbihza2IpKSkge1xubmV0L2NvcmUvZGV2LmM6MzY0NjpcdFx0RE9fT05DRV9MSVRFKHNrYl9kdW1wLCBLRVJOX0VSUiwgc2tiLCBmYWxzZSk7XG5uZXQvY29yZS9kZXYuYy0zNjQ3LVx0XHRXQVJOX09OQ0UodHJ1ZSwgXCYjMzQ7b2Zmc2V0ICglZCkgXHUwMDNlPSBza2JfaGVhZGxlbigpICgldSlcXG5cJiMzNDssXG4tLVxubmV0L2NvcmUvZGV2LmMtMzY1NC1cdGlmICh1bmxpa2VseShvZmZzZXQgJiM0Mzsgc2l6ZW9mKF9fc3VtMTYpIFx1MDAzZSBza2JfaGVhZGxlbihza2IpKSkge1xubmV0L2NvcmUvZGV2LmM6MzY1NTpcdFx0RE9fT05DRV9MSVRFKHNrYl9kdW1wLCBLRVJOX0VSUiwgc2tiLCBmYWxzZSk7XG5uZXQvY29yZS9kZXYuYy0zNjU2LVx0XHRXQVJOX09OQ0UodHJ1ZSwgXCYjMzQ7b2Zmc2V0JiM0MzsyICglenUpIFx1MDAzZSBza2JfaGVhZGxlbigpICgldSlcXG5cJiMzNDssXG4tLVxubmV0L2NvcmUvZGV2LmM9Mzc0MD12b2lkIG5ldGRldl9yeF9jc3VtX2ZhdWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9kZXYuYy0zNzQxLXtcbm5ldC9jb3JlL2Rldi5jOjM3NDI6XHRET19PTkNFX0xJVEUoZG9fbmV0ZGV2X3J4X2NzdW1fZmF1bHQsIGRldiwgc2tiKTtcbm5ldC9jb3JlL2Rldi5jLTM3NDMtfVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTIyNz1zdGF0aWMgdm9pZCB0Y3BfbWVhc3VyZV9yY3ZfbXNzKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0yNjMtXHRcdC8qIEFjY291bnQgZm9yIHBvc3NpYmx5LXJlbW92ZWQgb3B0aW9ucyAqL1xubmV0L2lwdjQvdGNwX2lucHV0LmM6MjY0Olx0XHRET19PTkNFX0xJVEVfSUYobGVuIFx1MDAzZSBpY3NrLVx1MDAzZWljc2tfYWNrLnJjdl9tc3MgJiM0MzsgTUFYX1RDUF9PUFRJT05fU1BBQ0UsXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0yNjUtXHRcdFx0XHR0Y3BfZ3JvX2Rldl93YXJuLCBzaywgc2tiLCBsZW4pO1xuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oPTEyNT1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xNTYtI2RlZmluZSBsaW5rX2Vycl9vbmNlKGxpbmssIGZtdCwgLi4uKVx0XHRcdFx0XHRcXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MTU3Olx0RE9fT05DRV9MSVRFKGxpbmtfZXJyLCBsaW5rLCBmbXQsICMjX19WQV9BUkdTX18pXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xNTgtI2RlZmluZSBsaW5rX2lkX2luZm8oc2RhdGEsIGxpbmtfaWQsIGZtdCwgLi4uKVx0XHRcdFx0XFxcbi0tXG5ydXN0L2tlcm5lbC9wcmludC5ycz00MjY9bWFjcm9fcnVsZXMhIHByX2NvbnQgKFxuLS1cbnJ1c3Qva2VybmVsL3ByaW50LnJzLTQzMy0vLy9cbnJ1c3Qva2VybmVsL3ByaW50LnJzOjQzNDovLy8gVGhpcyBzdHJ1Y3R1cmUgcHJvdmlkZXMgdGhlIFJ1c3QgZXF1aXZhbGVudCBvZiB0aGUga2VybmVsJiMzOTtzIGBET19PTkNFX0xJVEVgIG1hY3JvLlxucnVzdC9rZXJuZWwvcHJpbnQucnMtNDM1LS8vLyBXaGlsZSBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBpbXBsZW1lbnQgdGhlIGZlYXR1cmUgZW50aXJlbHkgYXMgYSBSdXN0IG1hY3JvLFxuLS1cbnJ1c3Qva2VybmVsL3ByaW50LnJzPTQ2OD0gICAgcHViIGZuIGNhbGxfb25jZVx1MDAzY0ZcdTAwM2UoXHUwMDI2c2VsZiwgZjogRikgLVx1MDAzZSBib29sXG4tLVxucnVzdC9rZXJuZWwvcHJpbnQucnMtNDkxLS8vL1xucnVzdC9rZXJuZWwvcHJpbnQucnM6NDkyOi8vLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGtlcm5lbCYjMzk7cyBgRE9fT05DRV9MSVRFYCBtYWNyby5cbnJ1c3Qva2VybmVsL3ByaW50LnJzLTQ5My0vLy9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczNjcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIGFmZmFpcnMsIHNvIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgc29tZSBrZXkgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JrIGNoZWNrc3VtIG9mZmxvYWQgYW5kIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pLiBJJiMzOTttIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCBgZXhfaGFuZGxlcl9tc3JgLCBgbmV0ZGV2X3J4X2NzdW1fZmF1bHRgLCBgc2tiX2NoZWNrc3VtX2hlbHBgLCBhbmQgYHRjcF9ncm9fZGV2X3dhcm5gLiBUaGVzZSBzZWVtIGxpa2UgdGhlIHByaW1lIHN1c3BlY3RzIGluIHdoYXRldmVyIEkmIzM5O20gdHJvdWJsZXNob290aW5nLgoKTm93LCBhIGNydWNpYWwgZGV0YWlsIHRvIHZlcmlmeSBpcyB3aGV0aGVyIGB0Y3BfZ3JvX2Rldl93YXJuYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMgb3Igbm9uLXN0YXRpYy4gVGhlIHNjb3BlIGFuZCB2aXNpYmlsaXR5IG9mIHRoYXQgZnVuY3Rpb24gd2lsbCBzaWduaWZpY2FudGx5IGltcGFjdCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCBhbmQgcG90ZW50aWFsbHkgd2hlcmUgdGhlIHByb2JsZW0gbGllcy4gVGhhdOKAmXMgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24gdGhhdCB3aWxsIGRpcmVjdCBteSBuZXh0IGludmVzdGlnYXRpdmUgc3RlcHMuIFN0YXRpYyBvciBub3QsIHRoYXQmIzM5O2xsIGJlIHRlbGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9ncm9fZGV2X3dhcm4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmM9MjA1PXN0YXRpYyB2b2lkIGJwZl9za29wc19lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIGludCBicGZfb3AsXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtMjEwLVxubmV0L2lwdjQvdGNwX2lucHV0LmM6MjExOnN0YXRpYyBfX2NvbGQgdm9pZCB0Y3BfZ3JvX2Rldl93YXJuKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTIxMi1cdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTIyNz1zdGF0aWMgdm9pZCB0Y3BfbWVhc3VyZV9yY3ZfbXNzKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0yNjQtXHRcdERPX09OQ0VfTElURV9JRihsZW4gXHUwMDNlIGljc2stXHUwMDNlaWNza19hY2sucmN2X21zcyAmIzQzOyBNQVhfVENQX09QVElPTl9TUEFDRSxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjI2NTpcdFx0XHRcdHRjcF9ncm9fZGV2X3dhcm4sIHNrLCBza2IsIGxlbik7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0yNjYtXHRcdC8qIElmIHRoZSBza2IgaGFzIGEgbGVuIG9mIGV4YWN0bHkgMSpNU1MgYW5kIGhhcyB0aGUgUFNIIGJpdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzkzMQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDIxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBOZXR3b3JrIENoZWNrc3VtIElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgYG5ldGRldl9yeF9jc3VtX2ZhdWx0YC4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gZm9yIGhhbmRsaW5nIGNoZWNrc3VtIGZhdWx0cywgYW5kIGZyb20gdGhlIGNvZGUgc25pcHBldCwgaXQgbG9va3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQganVzdCBjYWxscyBgRE9fT05DRV9MSVRFYC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBleHBvcnRlZCwgb3IgYXQgbGVhc3Qgbm90IHN0YXRpYywgaW1tZWRpYXRlbHkgbWFrZXMgaXQgaW50ZXJlc3RpbmcgZnJvbSBhIGRlcGVuZGVuY3kgc3RhbmRwb2ludC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLgoKTmV4dCwgSSYjMzk7bGwgZXhhbWluZSBgc2tiX2NoZWNrc3VtX2hlbHBgLiBUaGlzIG9uZSBpcyAqZXhwbGljaXRseSogZXhwb3J0ZWQgdmlhIGBFWFBPUlRfU1lNQk9MYCwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgdXNlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGF0JiMzOTtzIGEgc3Ryb25nIHNpZ25hbCwgYW5kIEkgbmVlZCB0byBjb25zaWRlciBpdHMgaW1wbGljYXRpb25zLiBUaGlzIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHBpY3R1cmUuCgpUaGVuLCB0aGVyZSYjMzk7cyBgZXhfaGFuZGxlcl9tc3JgLCB3aGljaCBpcyB3aGVyZSB0aGluZ3MgZ2V0IGEgYml0IG1vcmUgbnVhbmNlZC4gSXTigJlzIGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggdHlwaWNhbGx5IGxpbWl0cyBpdHMgc2NvcGUsIGJ1dCBJIHNlZSB0aGF0IGl04oCZcyBjYWxsZWQgYnkgYGZpeHVwX2V4Y2VwdGlvbmAuIFRoYXTigJlzIHdvcnRoIG5vdGluZywgYXMgaW50ZXJuYWwgY2FsbHMgY2FuIHN0aWxsIGhhdmUgaW1wbGljYXRpb25zIGRlcGVuZGluZyBvbiBob3cgdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBleGNlcHRpb24gZnJhbWV3b3JrIHdvcmtzLiBTbywgZXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCBpdCYjMzk7cyBzdGlsbCBiZWluZyB1c2VkLCBqdXN0IGludGVybmFsbHksIHNvIEkmIzM5O2xsIGNvbnNpZGVyIGl0cyByb2xlIGluIHRoZSBleGNlcHRpb24gcGF0aC4KCkZpbmFsbHksIEkmIzM5O2xsIHBpdm90IGFuZCBjaGVjayB0aGUgY2FsbGVycyBvZiBgeGZzX3ByaW50a19vbmNlYCB3aXRoaW4gdGhlIFhGUyBmaWxlc3lzdGVtIGNvZGUuIFRoaXMgbWlnaHQgcHJvdmlkZSBmdXJ0aGVyIGluc2lnaHRzIGludG8gaG93IGNoZWNrc3VtIGVycm9ycyBvciByZWxhdGVkIGlzc3VlcyBhcmUgYmVpbmcgaGFuZGxlZCBvciBsb2dnZWQgd2l0aGluIHRoZSBmaWxlIHN5c3RlbSBpdHNlbGYsIHdoaWNoIG1pZ2h0IGJlIGhlbHBmdWwgZnJvbSBhIGRpYWdub3N0aWNzIHBvaW50IG9mIHZpZXcuIEkgd2FudCB0byBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2Ygd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnNfLipfb25jZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy94ZnMveGZzX2lvY3RsLmM9MTIxOT14ZnNfZmlsZV9pb2N0bChcbi0tXG5mcy94ZnMveGZzX2lvY3RsLmMtMTI0Mi1cdGNhc2UgWEZTX0lPQ19GUkVFU1A2NDpcbmZzL3hmcy94ZnNfaW9jdGwuYzoxMjQzOlx0XHR4ZnNfd2Fybl9vbmNlKG1wLFxuZnMveGZzL3hmc19pb2N0bC5jLTEyNDQtXHRcJiMzNDslcyBzaG91bGQgdXNlIGZhbGxvY2F0ZTsgWEZTX0lPQ197QUxMT0MsRlJFRX1TUCBpb2N0bCB1bnN1cHBvcnRlZFwmIzM0Oyxcbi0tXG5mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmM9Mjg4OD14bG9nX3JlY292ZXJfcHJvY2Vzcyhcbi0tXG5mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMtMjkwOC1cdFx0aWYgKG90aGVyX2NyYyA9PSBleHBlY3RlZF9jcmMpIHtcbmZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYzoyOTA5Olx0XHRcdHhmc19ub3RpY2Vfb25jZShsb2ctXHUwMDNlbF9tcCxcbmZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYy0yOTEwLVx0XCYjMzQ7Rml4aW5nIHVwIGluY29ycmVjdCBDUkMgZHVlIHRvIHBhZGRpbmcuXCYjMzQ7KTtcbi0tXG5mcy94ZnMveGZzX21lc3NhZ2UuaD01MD1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5mcy94ZnMveGZzX21lc3NhZ2UuaC01Ny1cbmZzL3hmcy94ZnNfbWVzc2FnZS5oOjU4OiNkZWZpbmUgeGZzX3ByaW50a19vbmNlKGZ1bmMsIGRldiwgZm10LCAuLi4pXHRcdFx0XFxcbmZzL3hmcy94ZnNfbWVzc2FnZS5oLTU5LVx0RE9fT05DRV9MSVRFKGZ1bmMsIGRldiwgZm10LCAjI19fVkFfQVJHU19fKVxuLS1cbmZzL3hmcy94ZnNfbWVzc2FnZS5oLTc3LVxuZnMveGZzL3hmc19tZXNzYWdlLmg6Nzg6I2RlZmluZSB4ZnNfd2Fybl9vbmNlKGRldiwgZm10LCAuLi4pXHRcdFx0XHRcXFxuZnMveGZzL3hmc19tZXNzYWdlLmg6Nzk6XHR4ZnNfcHJpbnRrX29uY2UoeGZzX3dhcm4sIGRldiwgZm10LCAjI19fVkFfQVJHU19fKVxuZnMveGZzL3hmc19tZXNzYWdlLmg6ODA6I2RlZmluZSB4ZnNfbm90aWNlX29uY2UoZGV2LCBmbXQsIC4uLilcdFx0XHRcdFxcXG5mcy94ZnMveGZzX21lc3NhZ2UuaDo4MTpcdHhmc19wcmludGtfb25jZSh4ZnNfbm90aWNlLCBkZXYsIGZtdCwgIyNfX1ZBX0FSR1NfXylcbmZzL3hmcy94ZnNfbWVzc2FnZS5oOjgyOiNkZWZpbmUgeGZzX2luZm9fb25jZShkZXYsIGZtdCwgLi4uKVx0XHRcdFx0XFxcbmZzL3hmcy94ZnNfbWVzc2FnZS5oOjgzOlx0eGZzX3ByaW50a19vbmNlKHhmc19pbmZvLCBkZXYsIGZtdCwgIyNfX1ZBX0FSR1NfXylcbmZzL3hmcy94ZnNfbWVzc2FnZS5oLTg0LVxuLS1cbmZzL3hmcy94ZnNfbW91bnQuYz0xNDQ3PXhmc19kZWNfZnJlZWNvdW50ZXIoXG4tLVxuZnMveGZzL3hmc19tb3VudC5jLTE0OTYtXHRcdFx0aWYgKGN0ciA9PSBYQ19GUkVFX0JMT0NLUylcbmZzL3hmcy94ZnNfbW91bnQuYzoxNDk3Olx0XHRcdFx0eGZzX3dhcm5fb25jZShtcCxcbmZzL3hmcy94ZnNfbW91bnQuYy0xNDk4LVwmIzM0O1Jlc2VydmUgYmxvY2tzIGRlcGxldGVkISBDb25zaWRlciBpbmNyZWFzaW5nIHJlc2VydmUgcG9vbCBzaXplLlwmIzM0Oyk7XG4tLVxuZnMveGZzL3hmc19zdXBlci5jPTc3OD1TVEFUSUMgdm9pZFxuZnMveGZzL3hmc19zdXBlci5jOjc3OTp4ZnNfZnNfaW5vZGVfaW5pdF9vbmNlKFxuZnMveGZzL3hmc19zdXBlci5jLTc4MC1cdHZvaWRcdFx0XHQqaW5vZGUpXG4tLVxuZnMveGZzL3hmc19zdXBlci5jPTE3MDI9eGZzX2ZzX2ZpbGxfc3VwZXIoXG4tLVxuZnMveGZzL3hmc19zdXBlci5jLTE4MTItXHRcdH1cbmZzL3hmcy94ZnNfc3VwZXIuYzoxODEzOlx0XHR4ZnNfd2Fybl9vbmNlKG1wLFxuZnMveGZzL3hmc19zdXBlci5jLTE4MTQtXHRcJiMzNDtEZXByZWNhdGVkIFY0IGZvcm1hdCAoY3JjPTApIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBhZnRlciBTZXB0ZW1iZXIgMjAzMC5cJiMzNDspO1xuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYy0xODE5LSNpZmRlZiBDT05GSUdfWEZTX1NVUFBPUlRfQVNDSUlfQ0lcbmZzL3hmcy94ZnNfc3VwZXIuYzoxODIwOlx0XHR4ZnNfd2Fybl9vbmNlKG1wLFxuZnMveGZzL3hmc19zdXBlci5jLTE4MjEtXHRcJiMzNDtEZXByZWNhdGVkIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdml0eSBmZWF0dXJlIChhc2NpaS1jaT0xKSB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgYWZ0ZXIgU2VwdGVtYmVyIDIwMzAuXCYjMzQ7KTtcbi0tXG5mcy94ZnMveGZzX3N1cGVyLmM9MjM1Mz14ZnNfaW5pdF9jYWNoZXModm9pZClcbi0tXG5mcy94ZnMveGZzX3N1cGVyLmMtMjQyOC1cdFx0XHRcdFx0ICAgIFNMQUJfQUNDT1VOVCksXG5mcy94ZnMveGZzX3N1cGVyLmM6MjQyOTpcdFx0XHRcdFx0ICAgeGZzX2ZzX2lub2RlX2luaXRfb25jZSk7XG5mcy94ZnMveGZzX3N1cGVyLmMtMjQzMC1cdGlmICgheGZzX2lub2RlX2NhY2hlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTY2NwoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiA1NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBEZWNpc2lvbiBmb3IgYG9uY2VfbGl0ZS5oYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYG9uY2VfbGl0ZS5oYCByZXF1aXJlcyBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9uIHRvIGJlIGVuYWJsZWQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWx3YXlzIGluY2x1ZGVkIHdpdGhvdXQgYW55IHNwZWNpZmljIGNvbmZpZyBndWFyZCwgc28gbm8sIG5vIHNwZWNpZmljIGNvbmZpZ3MgYXJlIHJlcXVpcmVkIOKAkyBpdCB1c2VzIHRoZSBzdGFuZGFyZCBrZXJuZWwgY29uZmlndXJhdGlvbnMuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBUaGUgY2hhbmdlcyBhcmUgbW9kaWZ5aW5nIGNvcmUga2VybmVsIGluZnJhc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgYGluY2x1ZGUvbGludXgvb25jZV9saXRlLmhgLCBhbmQgdGhhdCYjMzk7cyB1c2VkIHRocm91Z2hvdXQgdGhlIGtlcm5lbCDigJMgbmV0d29ya2luZywgYnVnIGhhbmRsaW5nLCBmaWxlc3lzdGVtcyDigJMgdGhlIHdvcmtzLiBHaXZlbiB0aGUgZ3VpZGVsaW5lcyBJIGhhdmUsIHRoZSBhbnN3ZXIgaXMgYSBkZWZpbml0aXZlICp5ZXMqLiBUaGUgY3JpdGVyaWEgZXhwbGljaXRseSBzdGF0ZSB0aGF0IGFueSBtb2RpZmljYXRpb24gdG8gJiMzNDtjb3JlIHN1YnN5c3RlbXMmIzM0OyBsaWtlIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIG9yIHJlZmFjdG9yaW5ncyB0aGF0IHJlc3RydWN0dXJlIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMgb3IgYWxnb3JpdGhtIGZsb3dzIHdhcnJhbnQgZnV6emluZy4gVGhpcyBkZWZpbml0ZWx5IGZhbGxzIGludG8gYm90aCBjYXRlZ29yaWVzLiBTbywgYFdvcnRoRnV6emluZ2AgaXMgYHRydWVgLgoKTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHN1aXRhYmxlIGZvY3VzIHN5bWJvbHMuIEkmIzM5O20gbG9va2luZyBmb3Igbm9uLXViaXF1aXRvdXMsIGZlYXR1cmUtc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgZXhlcmNpc2UgYF9fT05DRV9MSVRFX0lGYCBvciByZWxhdGVkIG1hY3Jvcy4gSSYjMzk7dmUgZ290IGEgbGlzdCBvZiBwb3RlbnRpYWwgY2FuZGlkYXRlczogYG5ldGRldl9yeF9jc3VtX2ZhdWx0YCwgYHNrYl9jaGVja3N1bV9oZWxwYCwgYHhmc19maWxlX2lvY3RsYCwgYW5kIGB4ZnNfZnNfZmlsbF9zdXBlcmAuIEFmdGVyIHJldmlld2luZyB0aGVtLCB0aGVzZSBhcmUgZ29vZCBjaG9pY2VzLiBUaGV5IGFsbCBkaXJlY3RseSBpbnZva2UgYERPX09OQ0VfTElURWAgb3IgYERPX09OQ0VfTElURV9JRmAuIFBlcmZlY3QuCgpGaW5hbGx5LCBsZXQmIzM5O3MgYXNzZW1ibGUgdGhlIGBzZXQtcmVzdWx0c2AgZGF0YS4KCiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgCiogICBgUmVhc29uaW5nYDogTW9kaWZpY2F0aW9uIG9mIGNvcmUga2VybmVsIGluZnJhc3RydWN0dXJlIChgaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaGApLCBkaXJlY3RseSBpbXBhY3Rpbmcgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCBhY3Jvc3MgY29yZSBzdWJzeXN0ZW1zIChuZXR3b3JraW5nLCBidWcgaGFuZGxpbmcsIGZpbGVzeXN0ZW1zKS4gUmVmYWN0b3Jpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtIGZsb3dzLgoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtuZXRkZXZfcnhfY3N1bV9mYXVsdCYjMzQ7LCAmIzM0O3NrYl9jaGVja3N1bV9oZWxwJiMzNDssICYjMzQ7eGZzX2ZpbGVfaW9jdGwmIzM0OywgJiMzNDt4ZnNfZnNfZmlsbF9zdXBlciYjMzQ7XWAKKiAgIGBFbmFibGVDb25maWdzYDogYFtdYCAoYmVjYXVzZSBgb25jZV9saXRlLmhgIGlzIGFsd2F5cyBpbmNsdWRlZCkKClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZGV2X3J4X2NzdW1fZmF1bHQmIzM0OywKICAgICYjMzQ7c2tiX2NoZWNrc3VtX2hlbHAmIzM0OywKICAgICYjMzQ7eGZzX2ZpbGVfaW9jdGwmIzM0OywKICAgICYjMzQ7eGZzX2ZzX2ZpbGxfc3VwZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBET19PTkNFX0xJVEUgLyBfX09OQ0VfTElURV9JRiBoZWxwZXIgbWFjcm8gZGVmaW5pdGlvbnMgaW4gaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaCwgc2VwYXJhdGluZyBvdXQgX19PTkNFX0xJVEUoKSBhbmQgYWx0ZXJpbmcgdGhlIGNvbmRpdGlvbiBldmFsdWF0aW9uIGxvZ2ljIGZvciBvbmUtdGltZSBleGVjdXRpb24gYWNyb3NzIHRoZSBrZXJuZWwuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUgdXNlZCBpbiBuZXR3b3JraW5nLCBmaWxlc3lzdGVtcywgYW5kIGdlbmVyaWMgYnVnL3dhcm5pbmcgbWFjcm9zLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gdmVyaWZ5IHJ1bnRpbWUgZXZhbHVhdGlvbiBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRkZXZfcnhfY3N1bV9mYXVsdCYjMzQ7LAogICAgJiMzNDtza2JfY2hlY2tzdW1faGVscCYjMzQ7LAogICAgJiMzNDt4ZnNfZmlsZV9pb2N0bCYjMzQ7LAogICAgJiMzNDt4ZnNfZnNfZmlsbF9zdXBlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIERPX09OQ0VfTElURSAvIF9fT05DRV9MSVRFX0lGIGhlbHBlciBtYWNybyBkZWZpbml0aW9ucyBpbiBpbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLCBzZXBhcmF0aW5nIG91dCBfX09OQ0VfTElURSgpIGFuZCBhbHRlcmluZyB0aGUgY29uZGl0aW9uIGV2YWx1YXRpb24gbG9naWMgZm9yIG9uZS10aW1lIGV4ZWN1dGlvbiBhY3Jvc3MgdGhlIGtlcm5lbC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBpbmZyYXN0cnVjdHVyZSB1c2VkIGluIG5ldHdvcmtpbmcsIGZpbGVzeXN0ZW1zLCBhbmQgZ2VuZXJpYyBidWcvd2FybmluZyBtYWNyb3MsIHdhcnJhbnRpbmcgZnV6emluZyB0byB2ZXJpZnkgcnVudGltZSBldmFsdWF0aW9uIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgX19PTkNFX0xJVEVfSUZgIG1hY3JvIGluIGBpbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oYCBpbnRvIGEgc3RhbmRhbG9uZSBgX19PTkNFX0xJVEUoKWAgaGVscGVyIGFuZCBzaG9ydC1jaXJjdWl0aW5nIGBfX09OQ0VfTElURV9JRihjb25kaXRpb24pYC5cblxuQWxsIHZhcmlhYmxlcyB1c2VkIHdpdGhpbiB0aGUgbWFjcm9zIChgX19hbHJlYWR5X2RvbmVgIGluIGAuZGF0YS4ub25jZWAgYW5kIGxvY2FsIGJvb2xlYW4gYF9fcmV0X29uY2UgPSBmYWxzZWApIGFyZSBzdGF0aWMgb3IgZXhwbGljaXRseSBpbml0aWFsaXplZC4gVGhlIHBhdGNoIGRvZXMgbm90IHRvdWNoIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBtZW1vcnksIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzLCBtZW1vcnkgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvbGVha3MsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIHVubmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTIxMTZjN2I5NThmODg1YWZhNzM0YTllZGFkMzdlMGQwYzcxOTRiZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMTU6MTg6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oIGIvaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaAppbmRleCAyMzY1OTJjNGVlYjFhLi41ZTJiNjcwMzlhYWYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvb25jZV9saXRlLmgKQEAgLTEwLDE5ICYjNDM7MTAsMjEgQEAKICNkZWZpbmUgRE9fT05DRV9MSVRFKGZ1bmMsIC4uLikJCQkJCQlcCiAJRE9fT05DRV9MSVRFX0lGKHRydWUsIGZ1bmMsICMjX19WQV9BUkdTX18pCiAKLSNkZWZpbmUgX19PTkNFX0xJVEVfSUYoY29uZGl0aW9uKQkJCQkJXAomIzQzOyNkZWZpbmUgX19PTkNFX0xJVEUoKQkJCQkJCQlcCiAJKHsJCQkJCQkJCVwKIAkJc3RhdGljIGJvb2wgX19zZWN0aW9uKCYjMzQ7LmRhdGEuLm9uY2UmIzM0OykgX19hbHJlYWR5X2RvbmU7CVwKLQkJYm9vbCBfX3JldF9jb25kID0gISEoY29uZGl0aW9uKTsJCQlcCiAJCWJvb2wgX19yZXRfb25jZSA9IGZhbHNlOwkJCQlcCiAJCQkJCQkJCQlcCi0JCWlmICh1bmxpa2VseShfX3JldF9jb25kKSAmYW1wOyZhbXA7IHVubGlrZWx5KCFfX2FscmVhZHlfZG9uZSkpIHtcCiYjNDM7CQlpZiAodW5saWtlbHkoIV9fYWxyZWFkeV9kb25lKSkgewkJCVwKIAkJCV9fYWxyZWFkeV9kb25lID0gdHJ1ZTsJCQkJXAogCQkJX19yZXRfb25jZSA9IHRydWU7CQkJCVwKIAkJfQkJCQkJCQlcCiAJCXVubGlrZWx5KF9fcmV0X29uY2UpOwkJCQkJXAogCX0pCiAKJiM0MzsjZGVmaW5lIF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbikJCQkJCVwKJiM0MzsJKHVubGlrZWx5KGNvbmRpdGlvbikgJmFtcDsmYW1wOyBfX09OQ0VfTElURSgpKQomIzQzOwogI2RlZmluZSBET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBmdW5jLCAuLi4pCQkJCVwKIAkoewkJCQkJCQkJXAogCQlib29sIF9fcmV0X2RvX29uY2UgPSAhIShjb25kaXRpb24pOwkJCVwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgb25jZV9saXRlLmhgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgcmVsYXRlZCB0byBzb21lIG9wdGltaXphdGlvbiBvciBwZXJoYXBzIHNpbXBsaWZpY2F0aW9uIG9mIGEgJiMzNDtvbmNlJiMzNDsgZXhlY3V0aW9uIHBhdHRlcm4gd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBkaWZmIHN1Z2dlc3RzIHRoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBoZWFkZXIgZmlsZSwgc28gdGhpcyBsaWtlbHkgcHJvdmlkZXMgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMuCgpJIHNlZSBhIHJldmlzZWQgaW1wbGVtZW50YXRpb24gb2YgYF9fT05DRV9MSVRFX0lGYC4gUHJldmlvdXNseSwgaXQgYXBwZWFycyB0byBoYXZlIGEgYm9vbGVhbiBgY29uZGl0aW9uYCBwYXNzZWQgaW50byB0aGUgbWFjcm87IG5vdyB0aGVyZSYjMzk7cyBhbiBgX19PTkNFX0xJVEUoKWAgbWFjcm8uIFRoZSBnb2FsIGlzIGxpa2VseSB0byBleGVjdXRlIHNvbWUgY29kZSAqb25seSBvbmNlKiBpZiBhIGNvbmRpdGlvbiBpcyBtZXQsIHNvIGBET19PTkNFX0xJVEVfSUZgIG11c3QgYmUgY3JpdGljYWwgaW4gYWxsb3dpbmcgdGhhdCBjb250cm9sLiBJIHNlZSB0aGUgdXNhZ2Ugb2YgYHVubGlrZWx5KClgIHdoaWNoIGluZGljYXRlcyBvcHRpbWl6YXRpb24gdG93YXJkIHBlcmZvcm1hbmNlIGJhc2VkIG9uIGFuIGV4cGVjdGVkLCBidXQgbm90IGNlcnRhaW4sIGNvbmRpdGlvbi4gSSBhbHNvIG5vdGljZSB0aGUgdXNlIG9mIGEgc3RhdGljIGJvb2xlYW4gdmFyaWFibGUgYF9fYWxyZWFkeV9kb25lYCBsb2NhdGVkIGluIGAuZGF0YS4ub25jZWAuIFB1dHRpbmcgaXQgdGhlcmUgcHJvYmFibHkgZ3VhcmFudGVlcyBpbml0aWFsaXphdGlvbiB0byB6ZXJvIGFuZCBwbGFjZW1lbnQgd2l0aGluIGEgc2VjdGlvbiBsaWtlbHkgbWVhbnQgZm9yIGluaXRpYWxpemVkIGRhdGEgdGhhdCB3b24mIzM5O3QgYmUgbW9kaWZpZWQuCgpJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIGEgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuIEJ5IHB1bGxpbmcgdGhlIGluaXRpYWwgYGNvbmRpdGlvbmAgY2hlY2sgb3V0IGludG8gdGhlIG1hY3JvIGRlZmluaXRpb24sIHRoZXJlJiMzOTtzIHBvc3NpYmx5IGxlc3Mgb3ZlcmhlYWQuIE5vdywgdGhlIGNvbmRpdGlvbiBpcyBldmFsdWF0ZWQgb25seSB3aXRoaW4gdGhlIGBET19PTkNFX0xJVEVfSUZgIG1hY3JvIGFuZCBvbmx5IG9uY2UuIElmIHRoZSBjb25kaXRpb24gaXMgYWx3YXlzIGZhbHNlLCB0aGVyZSBpcyBubyBvdmVyaGVhZCBmcm9tIHRoZSBvbmNlIGNvZGUuIEFsc28sIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBjYWxscyB0byB0aGUgc2FtZSBvbmNlIGNvbmRpdGlvbiwgdGhpcyB3aWxsIHNob3J0LWNpcmN1aXQgYW55IGxhdGVyIGludm9jYXRpb25zLgoKVGhpcyBzZWVtcyBsaWtlIGEgY2FyZWZ1bCBhbmQgZm9jdXNlZCBwYXRjaC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZnVsbCBjb250ZXh0IHRvIGVuc3VyZSB0aGF0IGl0IGhhcyBubyB1bmludGVuZGVkIHNpZGUgZWZmZWN0cywgYnV0IGl0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIG9wdGltaXphdGlvbiBvciBzaW1wbGlmaWNhdGlvbiBvZiB0aGUgYG9uY2VgIHBhdHRlcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4gICAyOlx0I2lmbmRlZiBfTElOVVhfT05DRV9MSVRFX0hcbiAgIDM6XHQjZGVmaW5lIF9MSU5VWF9PTkNFX0xJVEVfSFxuICAgNDpcdFxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiAgIDY6XHRcbiAgIDc6XHQvKiBDYWxsIGEgZnVuY3Rpb24gb25jZS4gU2ltaWxhciB0byBET19PTkNFKCksIGJ1dCBkb2VzIG5vdCB1c2UganVtcCBsYWJlbFxuICAgODpcdCAqIHBhdGNoaW5nIHZpYSBzdGF0aWMga2V5cy5cbiAgIDk6XHQgKi9cbiAgMTA6XHQjZGVmaW5lIERPX09OQ0VfTElURShmdW5jLCAuLi4pXHRcdFx0XHRcdFx0XFxcbiAgMTE6XHRcdERPX09OQ0VfTElURV9JRih0cnVlLCBmdW5jLCAjI19fVkFfQVJHU19fKVxuICAxMjpcdFxuICAxMzpcdCNkZWZpbmUgX19PTkNFX0xJVEUoKVx0XHRcdFx0XHRcdFx0XFxcbiAgMTQ6XHRcdCh7XHRcdFx0XHRcdFx0XHRcdFxcXG4gIDE1Olx0XHRcdHN0YXRpYyBib29sIF9fc2VjdGlvbihcJiMzNDsuZGF0YS4ub25jZVwmIzM0OykgX19hbHJlYWR5X2RvbmU7XHRcXFxuICAxNjpcdFx0XHRib29sIF9fcmV0X29uY2UgPSBmYWxzZTtcdFx0XHRcdFxcXG4gIDE3Olx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAgMTg6XHRcdFx0aWYgKHVubGlrZWx5KCFfX2FscmVhZHlfZG9uZSkpIHtcdFx0XHRcXFxuICAxOTpcdFx0XHRcdF9fYWxyZWFkeV9kb25lID0gdHJ1ZTtcdFx0XHRcdFxcXG4gIDIwOlx0XHRcdFx0X19yZXRfb25jZSA9IHRydWU7XHRcdFx0XHRcXFxuICAyMTpcdFx0XHR9XHRcdFx0XHRcdFx0XHRcXFxuICAyMjpcdFx0XHR1bmxpa2VseShfX3JldF9vbmNlKTtcdFx0XHRcdFx0XFxcbiAgMjM6XHRcdH0pXG4gIDI0Olx0XG4gIDI1Olx0I2RlZmluZSBfX09OQ0VfTElURV9JRihjb25kaXRpb24pXHRcdFx0XHRcdFxcXG4gIDI2Olx0XHQodW5saWtlbHkoY29uZGl0aW9uKSBcdTAwMjZcdTAwMjYgX19PTkNFX0xJVEUoKSlcbiAgMjc6XHRcbiAgMjg6XHQjZGVmaW5lIERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIGZ1bmMsIC4uLilcdFx0XHRcdFxcXG4gIDI5Olx0XHQoe1x0XHRcdFx0XHRcdFx0XHRcXFxuICAzMDpcdFx0XHRib29sIF9fcmV0X2RvX29uY2UgPSAhIShjb25kaXRpb24pO1x0XHRcdFxcXG4gIDMxOlx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAgMzI6XHRcdFx0aWYgKF9fT05DRV9MSVRFX0lGKF9fcmV0X2RvX29uY2UpKVx0XHRcdFxcXG4gIDMzOlx0XHRcdFx0ZnVuYyhfX1ZBX0FSR1NfXyk7XHRcdFx0XHRcXFxuICAzNDpcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gIDM1Olx0XHRcdHVubGlrZWx5KF9fcmV0X2RvX29uY2UpO1x0XHRcdFx0XFxcbiAgMzY6XHRcdH0pXG4gIDM3Olx0XG4gIDM4Olx0I2VuZGlmIC8qIF9MSU5VWF9PTkNFX0xJVEVfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjU4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG9uY2VfbGl0ZS5oYCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG9uY2VfbGl0ZS5oYCBoZWFkZXIgYW5kIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UuIEkgc2VlIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBvZiBgX19PTkNFX0xJVEVfSUZgIHVzZXMgYSBzdGF0aWMgYm9vbGVhbiBmbGFnLCBgX19hbHJlYWR5X2RvbmVgLCBwbGFjZWQgaW4gdGhlIGAuZGF0YS4ub25jZWAgc2VjdGlvbi4gSXQgc2VlbXMgdG8gYmUgaW1wbGVtZW50aW5nIGEgbGlnaHR3ZWlnaHQgJiMzNDtvbmNlJiMzNDsgZXhlY3V0aW9uIHBhcmFkaWdtLCBsaWtlbHkgZm9yIGluaXRpYWxpemF0aW9uIG9yIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbiB0aGF0IHNob3VsZCBoYXBwZW4gb25seSBvbmNlLiBUaGUgb3JpZ2luYWwgY29kZSYjMzk7cyBhcHByb2FjaCBpcyBpbnRlcmVzdGluZzsgaXQmIzM5O3MgdXNpbmcgdGhlIGAoeyAuLi4gfSlgIEdDQyBzdGF0ZW1lbnQgZXhwcmVzc2lvbiB0byBwcm92aWRlIHNvbWUgc29ydCBvZiBhdG9taWMgKG9yIGFzIGF0b21pYyBhcyB0aGUgY29tcGlsZXIgYWxsb3dzKSB0ZXN0LWFuZC1zZXQgb3BlcmF0aW9uLCBhbG9uZyB3aXRoIGEgcmV0dXJuIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbmRpdGlvbiB3YXMgdHJ1ZSBhbmQgdGhlIGFjdGlvbiB3YXMgdGFrZW4gZm9yIHRoZSBmaXJzdCB0aW1lLgoKVGhlIHBhdGNoIHNpbXBsaWZpZXMgdGhpbmdzIGJ5IGRlZmluaW5nIGBfX09OQ0VfTElURSgpYCBhbmQgdXNpbmcgaXQgd2l0aGluIGBfX09OQ0VfTElURV9JRihjb25kaXRpb24pYC4gSXQmIzM5O3Mgc3RpbGwgdXNpbmcgdGhlIHNhbWUgYF9fYWxyZWFkeV9kb25lYCBzdGF0aWMgYm9vbGVhbiwgYnV0IG5vdyBpdCBjaGVja3MgZm9yIGEgYGNvbmRpdGlvbmAgYmVmb3JlIGNhbGxpbmcgdGhlICYjMzQ7b25jZSYjMzQ7IGNoZWNrLiBUaGUgbG9naWMgaW4gdGhlIHBhdGNoZWQgdmVyc2lvbiBpcyBjbGVhcmVyOyB0aGUgaW50ZW50IGlzIHRvIG9ubHkgZXhlY3V0ZSBzb21ldGhpbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyAqdW5saWtlbHkqIHRvIGJlIHRydWUgYW5kIHRoZSAmIzM0O29uY2UmIzM0OyBjaGVjayBoYXNuJiMzOTt0IGhhcHBlbmVkLgoKTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIG1hY3JvIGlzIGFjdHVhbGx5IHVzZWQgaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dCB0byByZWFsbHkgZ3Jhc3AgaXRzIHByYWN0aWNhbCBhcHBsaWNhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGluc3RhbmNlcyBvZiBgX19PTkNFX0xJVEVgLCBgX19PTkNFX0xJVEVfSUZgLCBhbmQgYERPX09OQ0VfTElURWAgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgbGV2ZXJhZ2VkIGluIHByYWN0aWNlLiBUaGF0IHdpbGwgaWxsdW1pbmF0ZSB0aGUgb3B0aW1pemF0aW9ucyBvciBzcGVjaWZpYyB1c2UgY2FzZXMgdGhpcyBpcyBkZXNpZ25lZCBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O09OQ0VfTElURSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9leHRhYmxlLmM9MTY2PXN0YXRpYyBib29sIGV4X2hhbmRsZXJfbXNyKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmZpeHVwLFxuLS1cbmFyY2gveDg2L21tL2V4dGFibGUuYy0xNjgte1xuYXJjaC94ODYvbW0vZXh0YWJsZS5jOjE2OTpcdGlmIChfX09OQ0VfTElURV9JRighc2FmZSBcdTAwMjZcdTAwMjYgd3Jtc3IpKSB7XG5hcmNoL3g4Ni9tbS9leHRhYmxlLmMtMTcwLVx0XHRwcl93YXJuKFwmIzM0O3VuY2hlY2tlZCBNU1IgYWNjZXNzIGVycm9yOiBXUk1TUiB0byAweCV4ICh0cmllZCB0byB3cml0ZSAweCUwOHglMDh4KSBhdCBySVA6IDB4JWx4ICglcFMpXFxuXCYjMzQ7LFxuLS1cbmFyY2gveDg2L21tL2V4dGFibGUuYy0xNzUtXG5hcmNoL3g4Ni9tbS9leHRhYmxlLmM6MTc2Olx0aWYgKF9fT05DRV9MSVRFX0lGKCFzYWZlIFx1MDAyNlx1MDAyNiAhd3Jtc3IpKSB7XG5hcmNoL3g4Ni9tbS9leHRhYmxlLmMtMTc3LVx0XHRwcl93YXJuKFwmIzM0O3VuY2hlY2tlZCBNU1IgYWNjZXNzIGVycm9yOiBSRE1TUiBmcm9tIDB4JXggYXQgcklQOiAweCVseCAoJXBTKVxcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTEyMzQ9c3RhdGljIGludCB3YWl0X29uX3NlbShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgdTY0IGRhdGEpXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy0xMjU0LVx0XHRpZiAoYW1kX2lvbW11X2R1bXApXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jOjEyNTU6XHRcdFx0RE9fT05DRV9MSVRFKGR1bXBfY29tbWFuZF9idWZmZXIsIGlvbW11KTtcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMTI1Ni1cbi0tXG5mcy9lcm9mcy9pbnRlcm5hbC5oPTQ0Nj1lcm9mc19nZXRfYW9wcyhzdHJ1Y3QgaW5vZGUgKnJlYWxpbm9kZSlcbi0tXG5mcy9lcm9mcy9pbnRlcm5hbC5oLTQ1MC1cdFx0XHRyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7XG5mcy9lcm9mcy9pbnRlcm5hbC5oOjQ1MTpcdFx0RE9fT05DRV9MSVRFX0lGKHJlYWxpbm9kZS1cdTAwM2VpX2Jsa2JpdHMgIT0gUEFHRV9TSElGVCxcbmZzL2Vyb2ZzL2ludGVybmFsLmgtNDUyLVx0XHRcdCAgZXJvZnNfaW5mbywgcmVhbGlub2RlLVx1MDAzZWlfc2IsXG4tLVxuZnMveGZzL3hmc19tZXNzYWdlLmg9NTA9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuZnMveGZzL3hmc19tZXNzYWdlLmgtNTgtI2RlZmluZSB4ZnNfcHJpbnRrX29uY2UoZnVuYywgZGV2LCBmbXQsIC4uLilcdFx0XHRcXFxuZnMveGZzL3hmc19tZXNzYWdlLmg6NTk6XHRET19PTkNFX0xJVEUoZnVuYywgZGV2LCBmbXQsICMjX19WQV9BUkdTX18pXG5mcy94ZnMveGZzX21lc3NhZ2UuaC02MC1cbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oPTEwMz1leHRlcm4gX19wcmludGYoMSwgMikgdm9pZCBfX3dhcm5fcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTtcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE3OS0jZGVmaW5lIFdBUk5fT05fT05DRShjb25kaXRpb24pXHRcdFx0XHRcdFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oOjE4MDpcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk5fT04sIDEpXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE4MS0jZW5kaWZcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE4NC0jZGVmaW5lIFdBUk5fT05DRShjb25kaXRpb24sIGZvcm1hdC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oOjE4NTpcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk4sIDEsIGZvcm1hdClcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTg2LSNlbmRpZlxuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTg4LSNkZWZpbmUgV0FSTl9UQUlOVF9PTkNFKGNvbmRpdGlvbiwgdGFpbnQsIGZvcm1hdC4uLilcdFx0XFxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmg6MTg5Olx0RE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgV0FSTl9UQUlOVCwgMSwgdGFpbnQsIGZvcm1hdClcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTkwLVxuLS1cbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoyOiNpZm5kZWYgX0xJTlVYX09OQ0VfTElURV9IXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjM6I2RlZmluZSBfTElOVVhfT05DRV9MSVRFX0hcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtNC1cbi0tXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTktICovXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjEwOiNkZWZpbmUgRE9fT05DRV9MSVRFKGZ1bmMsIC4uLilcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoxMTpcdERPX09OQ0VfTElURV9JRih0cnVlLCBmdW5jLCAjI19fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0xMi1cbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MTM6I2RlZmluZSBfX09OQ0VfTElURSgpXHRcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0xNC1cdCh7XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0yNC1cbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MjU6I2RlZmluZSBfX09OQ0VfTElURV9JRihjb25kaXRpb24pXHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjI2Olx0KHVubGlrZWx5KGNvbmRpdGlvbikgXHUwMDI2XHUwMDI2IF9fT05DRV9MSVRFKCkpXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTI3LVxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoyODojZGVmaW5lIERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIGZ1bmMsIC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTI5LVx0KHtcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTMxLVx0XHRcdFx0XHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjMyOlx0XHRpZiAoX19PTkNFX0xJVEVfSUYoX19yZXRfZG9fb25jZSkpXHRcdFx0XFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMzMtXHRcdFx0ZnVuYyhfX1ZBX0FSR1NfXyk7XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMzctXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjM4OiNlbmRpZiAvKiBfTElOVVhfT05DRV9MSVRFX0ggKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oPTQwNz1zdHJ1Y3QgcGlfZW50cnkge1xuLS1cbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjQ5LSNkZWZpbmUgcHJpbnRrX29uY2UoZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oOjY1MDpcdERPX09OQ0VfTElURShwcmludGssIGZtdCwgIyNfX1ZBX0FSR1NfXylcbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjUxLSNkZWZpbmUgcHJpbnRrX2RlZmVycmVkX29uY2UoZm10LCAuLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9wcmludGsuaDo2NTI6XHRET19PTkNFX0xJVEUocHJpbnRrX2RlZmVycmVkLCBmbXQsICMjX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oLTY1My0jZWxzZVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9Mjc1MD1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2Fzc2VydF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI3NTMtXHRpZiAoV0FSTl9PTkNFKCFza2ItXHUwMDNlbGVuLCBcJiMzNDslc1xcblwmIzM0OywgX19mdW5jX18pKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoyNzU0Olx0XHRET19PTkNFX0xJVEUoc2tiX2R1bXAsIEtFUk5fRVJSLCBza2IsIGZhbHNlKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjc1NS0jZW5kaWYgLyogQ09ORklHX0RFQlVHX05FVCAqL1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oPTM3PWVudW0gdHJhY2VfdHlwZSB7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTI5LSNkZWZpbmUgTUVNX0ZBSUwoY29uZGl0aW9uLCBmbXQsIC4uLilcdFx0XHRcdFx0XFxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEzMDpcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIHByX2VyciwgXCYjMzQ7RVJST1I6IFwmIzM0OyBmbXQsICMjX19WQV9BUkdTX18pXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMzEtXG4tLVxubmV0L2NvcmUvZGV2LmM9MzYxNz1pbnQgc2tiX2NoZWNrc3VtX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9kZXYuYy0zNjQ1LVx0aWYgKHVubGlrZWx5KG9mZnNldCBcdTAwM2U9IHNrYl9oZWFkbGVuKHNrYikpKSB7XG5uZXQvY29yZS9kZXYuYzozNjQ2Olx0XHRET19PTkNFX0xJVEUoc2tiX2R1bXAsIEtFUk5fRVJSLCBza2IsIGZhbHNlKTtcbm5ldC9jb3JlL2Rldi5jLTM2NDctXHRcdFdBUk5fT05DRSh0cnVlLCBcJiMzNDtvZmZzZXQgKCVkKSBcdTAwM2U9IHNrYl9oZWFkbGVuKCkgKCV1KVxcblwmIzM0Oyxcbi0tXG5uZXQvY29yZS9kZXYuYy0zNjU0LVx0aWYgKHVubGlrZWx5KG9mZnNldCAmIzQzOyBzaXplb2YoX19zdW0xNikgXHUwMDNlIHNrYl9oZWFkbGVuKHNrYikpKSB7XG5uZXQvY29yZS9kZXYuYzozNjU1Olx0XHRET19PTkNFX0xJVEUoc2tiX2R1bXAsIEtFUk5fRVJSLCBza2IsIGZhbHNlKTtcbm5ldC9jb3JlL2Rldi5jLTM2NTYtXHRcdFdBUk5fT05DRSh0cnVlLCBcJiMzNDtvZmZzZXQmIzQzOzIgKCV6dSkgXHUwMDNlIHNrYl9oZWFkbGVuKCkgKCV1KVxcblwmIzM0Oyxcbi0tXG5uZXQvY29yZS9kZXYuYz0zNzQwPXZvaWQgbmV0ZGV2X3J4X2NzdW1fZmF1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL2Rldi5jLTM3NDEte1xubmV0L2NvcmUvZGV2LmM6Mzc0MjpcdERPX09OQ0VfTElURShkb19uZXRkZXZfcnhfY3N1bV9mYXVsdCwgZGV2LCBza2IpO1xubmV0L2NvcmUvZGV2LmMtMzc0My19XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9MjI3PXN0YXRpYyB2b2lkIHRjcF9tZWFzdXJlX3Jjdl9tc3Moc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI2My1cdFx0LyogQWNjb3VudCBmb3IgcG9zc2libHktcmVtb3ZlZCBvcHRpb25zICovXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzoyNjQ6XHRcdERPX09OQ0VfTElURV9JRihsZW4gXHUwMDNlIGljc2stXHUwMDNlaWNza19hY2sucmN2X21zcyAmIzQzOyBNQVhfVENQX09QVElPTl9TUEFDRSxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI2NS1cdFx0XHRcdHRjcF9ncm9fZGV2X3dhcm4sIHNrLCBza2IsIGxlbik7XG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmg9MTI1PWRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE1Ni0jZGVmaW5lIGxpbmtfZXJyX29uY2UobGluaywgZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxNTc6XHRET19PTkNFX0xJVEUobGlua19lcnIsIGxpbmssIGZtdCwgIyNfX1ZBX0FSR1NfXylcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE1OC0jZGVmaW5lIGxpbmtfaWRfaW5mbyhzZGF0YSwgbGlua19pZCwgZm10LCAuLi4pXHRcdFx0XHRcXFxuLS1cbnJ1c3Qva2VybmVsL3ByaW50LnJzPTQyNj1tYWNyb19ydWxlcyEgcHJfY29udCAoXG4tLVxucnVzdC9rZXJuZWwvcHJpbnQucnMtNDMzLS8vL1xucnVzdC9rZXJuZWwvcHJpbnQucnM6NDM0Oi8vLyBUaGlzIHN0cnVjdHVyZSBwcm92aWRlcyB0aGUgUnVzdCBlcXVpdmFsZW50IG9mIHRoZSBrZXJuZWwmIzM5O3MgYERPX09OQ0VfTElURWAgbWFjcm8uXG5ydXN0L2tlcm5lbC9wcmludC5ycy00MzUtLy8vIFdoaWxlIGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGltcGxlbWVudCB0aGUgZmVhdHVyZSBlbnRpcmVseSBhcyBhIFJ1c3QgbWFjcm8sXG4tLVxucnVzdC9rZXJuZWwvcHJpbnQucnM9NDY4PSAgICBwdWIgZm4gY2FsbF9vbmNlXHUwMDNjRlx1MDAzZShcdTAwMjZzZWxmLCBmOiBGKSAtXHUwMDNlIGJvb2xcbi0tXG5ydXN0L2tlcm5lbC9wcmludC5ycy00OTEtLy8vXG5ydXN0L2tlcm5lbC9wcmludC5yczo0OTI6Ly8vIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUga2VybmVsJiMzOTtzIGBET19PTkNFX0xJVEVgIG1hY3JvLlxucnVzdC9rZXJuZWwvcHJpbnQucnMtNDkzLS8vL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTk0CgkJCQkJCQlvdXRwdXQ6IDE3MQoJCQkJCQkJdGhvdWdodHM6IDY4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlZmFjdG9yaW5nIG9mIGBfX09OQ0VfTElURV9JRmAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZyBvZiB0aGUgYF9fT05DRV9MSVRFX0lGYCBtYWNybyBpbiBgaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaGAuIFRoZSBvcmlnaW5hbCB2ZXJzaW9uIHdhcyBhIGJpdCBjbHVua3ksIGNvbWJpbmluZyB0aGUgY29uZGl0aW9uIGNoZWNrIGFuZCB0aGUgJiMzNDtvbmNlJiMzNDsgZXhlY3V0aW9uIHdpdGhpbiBhIHNpbmdsZSBtYWNyby4gVGhpcyByZWZhY3RvcmluZyBjbGVhbmx5IHNlcGFyYXRlcyB0aGUgY29uZGl0aW9uIGV2YWx1YXRpb24gZnJvbSB0aGUgJiMzNDtvbmNlJiMzNDsgZXhlY3V0aW9uIGludG8gdHdvIG1hY3JvczogYF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilgIGFuZCBgX19PTkNFX0xJVEUoKWAuCgpUaGUga2V5IGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBfX09OQ0VfTElURSgpYCwgd2hpY2ggZW5jYXBzdWxhdGVzIHRoZSBsb2dpYyBmb3IgdGhlICYjMzQ7b25jZSYjMzQ7IGV4ZWN1dGlvbi4gIEl0IGNoZWNrcyBhIHN0YXRpYyBib29sZWFuIHZhcmlhYmxlLCBgX19hbHJlYWR5X2RvbmVgLCBpbiB0aGUgYC5kYXRhLi5vbmNlYCBzZWN0aW9uLiBDcml0aWNhbGx5LCB0aGlzIHN0YXRpYyB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCB0byBgZmFsc2VgICh6ZXJvLWluaXRpYWxpemVkKSwgYXMgaXQgcmVzaWRlcyBpbiBhIEJTUy9kYXRhIHNlY3Rpb24uIFRoZSBjb25kaXRpb24gY2hlY2sgaW4gdGhlIG5ldyBgX19PTkNFX0xJVEVfSUZgIGlzIG5vdyBhIHNpbXBsZSBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb246IGB1bmxpa2VseShjb25kaXRpb24pICZhbXA7JmFtcDsgX19PTkNFX0xJVEUoKWAuIFRoaXMgbWVhbnMgaWYgdGhlIGNvbmRpdGlvbiBpcyAqdW5saWtlbHkqIHRvIGJlIHRydWUgYW5kIHRoZSAqY29uZGl0aW9uKiBpcyAqdHJ1ZSosIHRoZW4gYF9fT05DRV9MSVRFKClgIHJ1bnMgb25seSBvbmNlLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIG9mIGNvdXJzZSwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEJ1dCwgcmV2aWV3aW5nIHRoZSBjb2RlLCBpdCYjMzk7cyBjbGVhciB0aGVyZSBhcmUgbm9uZS4KCiogICBObyBuZXcgbWVtb3J5IGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBvbiBlaXRoZXIgdGhlIHN0YWNrIG9yIHRoZSBoZWFwLgoqICAgTm8gZGF0YSBpcyBjb3BpZWQgdG8gb3IgZnJvbSB1c2Vyc3BhY2UsIHNvIHRoZXJlIGFyZSBubyBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuCiogICBUaGUgYF9fYWxyZWFkeV9kb25lYCB2YXJpYWJsZSBpcyBzdGF0aWMgYW5kIHRodXMgaW5pdGlhbGl6ZWQgYnkgdGhlIGxpbmtlciB0byBgZmFsc2VgLgoqICAgVGhlIGBfX3JldF9vbmNlYCB2YXJpYWJsZSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAuCiogICBUaGUgbG9naWMgaXRzZWxmIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGJvb2xlYW4gZXZhbHVhdGlvbiB3aXRoIGEgc3RhdGljIGZsYWcmIzM5O3Mgc3RhdGUgY2hhbmdlLCBzbyB0aGVyZSYjMzk7cyBubyB3YXkgaXQgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCBLQVNBTiBhbmQgS01TQU4gaGVyZS4gS0FTQU4gd2lsbCBjYXRjaCBnZW5lcmFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBpbmNsdWRpbmcgcHJvYmxlbXMgd2l0aCBzdGF0aWMgdmFyaWFibGVzLCBhbmQgS01TQU4gaXMgYWxsIGFib3V0IGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoaGVhcCwgc3RhY2ssIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBsZWFrcyB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yOyBpdCBvcHRpbWl6ZXMgdGhlIGV4aXN0aW5nIGxvZ2ljLiBJdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnksIG5vciBkb2VzIGl0IHJlYWQgdW5pbml0aWFsaXplZCB2YWx1ZXMuCgpUaGVyZWZvcmUsIHRoaXMgcmVmYWN0b3JpbmcgZG9lcyBub3QgbmVlZCBLTVNBTiBhbmFseXNpcywgYW5kIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuIEkgY2FuIGdvIGFoZWFkIGFuZCBjb25zdHJ1Y3QgdGhlIHJlc3BvbnNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBfX09OQ0VfTElURV9JRmAgbWFjcm8gaW4gYGluY2x1ZGUvbGludXgvb25jZV9saXRlLmhgIGludG8gYSBzdGFuZGFsb25lIGBfX09OQ0VfTElURSgpYCBoZWxwZXIgYW5kIHNob3J0LWNpcmN1aXRpbmcgYF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilgLlxuXG5BbGwgdmFyaWFibGVzIHVzZWQgd2l0aGluIHRoZSBtYWNyb3MgKGBfX2FscmVhZHlfZG9uZWAgaW4gYC5kYXRhLi5vbmNlYCBhbmQgbG9jYWwgYm9vbGVhbiBgX19yZXRfb25jZSA9IGZhbHNlYCkgYXJlIHN0YXRpYyBvciBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgdG91Y2ggZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSwgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMsIG1lbW9yeSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm9sZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBfX09OQ0VfTElURV9JRmAgbWFjcm8gaW4gYGluY2x1ZGUvbGludXgvb25jZV9saXRlLmhgIGludG8gYSBzdGFuZGFsb25lIGBfX09OQ0VfTElURSgpYCBoZWxwZXIgYW5kIHNob3J0LWNpcmN1aXRpbmcgYF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilgLlxuXG5BbGwgdmFyaWFibGVzIHVzZWQgd2l0aGluIHRoZSBtYWNyb3MgKGBfX2FscmVhZHlfZG9uZWAgaW4gYC5kYXRhLi5vbmNlYCBhbmQgbG9jYWwgYm9vbGVhbiBgX19yZXRfb25jZSA9IGZhbHNlYCkgYXJlIHN0YXRpYyBvciBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgdG91Y2ggZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSwgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMsIG1lbW9yeSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm9sZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE1OjE4OjM2LjE1NDkyODA1NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjY0MTQ4MDIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfcnhfY3N1bV9mYXVsdFwiLFxuICAgIFwic2tiX2NoZWNrc3VtX2hlbHBcIixcbiAgICBcInhmc19maWxlX2lvY3RsXCIsXG4gICAgXCJ4ZnNfZnNfZmlsbF9zdXBlclwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgX19PTkNFX0xJVEVfSUZgIG1hY3JvIGluIGBpbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oYCBpbnRvIGEgc3RhbmRhbG9uZSBgX19PTkNFX0xJVEUoKWAgaGVscGVyIGFuZCBzaG9ydC1jaXJjdWl0aW5nIGBfX09OQ0VfTElURV9JRihjb25kaXRpb24pYC5cXG5cXG5BbGwgdmFyaWFibGVzIHVzZWQgd2l0aGluIHRoZSBtYWNyb3MgKGBfX2FscmVhZHlfZG9uZWAgaW4gYC5kYXRhLi5vbmNlYCBhbmQgbG9jYWwgYm9vbGVhbiBgX19yZXRfb25jZSA9IGZhbHNlYCkgYXJlIHN0YXRpYyBvciBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgdG91Y2ggZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSwgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMsIG1lbW9yeSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm9sZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBET19PTkNFX0xJVEUgLyBfX09OQ0VfTElURV9JRiBoZWxwZXIgbWFjcm8gZGVmaW5pdGlvbnMgaW4gaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaCwgc2VwYXJhdGluZyBvdXQgX19PTkNFX0xJVEUoKSBhbmQgYWx0ZXJpbmcgdGhlIGNvbmRpdGlvbiBldmFsdWF0aW9uIGxvZ2ljIGZvciBvbmUtdGltZSBleGVjdXRpb24gYWNyb3NzIHRoZSBrZXJuZWwuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUgdXNlZCBpbiBuZXR3b3JraW5nLCBmaWxlc3lzdGVtcywgYW5kIGdlbmVyaWMgYnVnL3dhcm5pbmcgbWFjcm9zLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gdmVyaWZ5IHJ1bnRpbWUgZXZhbHVhdGlvbiBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTU6MTg6MzYuMTU0OTM0ODk1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQwMTIyNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MjExNmM3Yjk1OGY4ODVhZmE3MzRhOWVkYWQzN2UwZDBjNzE5NGJkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMTU6MTg6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaCBiL2luY2x1ZGUvbGludXgvb25jZV9saXRlLmhcXG5pbmRleCAyMzY1OTJjNGVlYjFhLi41ZTJiNjcwMzlhYWYwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvb25jZV9saXRlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oXFxuQEAgLTEwLDE5ICsxMCwyMSBAQFxcbiAjZGVmaW5lIERPX09OQ0VfTElURShmdW5jLCAuLi4pXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRET19PTkNFX0xJVEVfSUYodHJ1ZSwgZnVuYywgIyNfX1ZBX0FSR1NfXylcXG4gXFxuLSNkZWZpbmUgX19PTkNFX0xJVEVfSUYoY29uZGl0aW9uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rI2RlZmluZSBfX09OQ0VfTElURSgpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHQoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0c3RhdGljIGJvb2wgX19zZWN0aW9uKFxcXCIuZGF0YS4ub25jZVxcXCIpIF9fYWxyZWFkeV9kb25lO1xcdFxcXFxcXG4tXFx0XFx0Ym9vbCBfX3JldF9jb25kID0gISEoY29uZGl0aW9uKTtcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdGJvb2wgX19yZXRfb25jZSA9IGZhbHNlO1xcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHRpZiAodW5saWtlbHkoX19yZXRfY29uZCkgXFx1MDAyNlxcdTAwMjYgdW5saWtlbHkoIV9fYWxyZWFkeV9kb25lKSkge1xcXFxcXG4rXFx0XFx0aWYgKHVubGlrZWx5KCFfX2FscmVhZHlfZG9uZSkpIHtcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdFxcdF9fYWxyZWFkeV9kb25lID0gdHJ1ZTtcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdFxcdF9fcmV0X29uY2UgPSB0cnVlO1xcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0dW5saWtlbHkoX19yZXRfb25jZSk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHR9KVxcbiBcXG4rI2RlZmluZSBfX09OQ0VfTElURV9JRihjb25kaXRpb24pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQodW5saWtlbHkoY29uZGl0aW9uKSBcXHUwMDI2XFx1MDAyNiBfX09OQ0VfTElURSgpKVxcbitcXG4gI2RlZmluZSBET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBmdW5jLCAuLi4pXFx0XFx0XFx0XFx0XFxcXFxcbiBcXHQoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0Ym9vbCBfX3JldF9kb19vbmNlID0gISEoY29uZGl0aW9uKTtcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE1OjE4OjM2LjcxOTY2MTcxM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTExMTcxNTcwMjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGRldl9yeF9jc3VtX2ZhdWx0XCIsXG4gICAgXCJza2JfY2hlY2tzdW1faGVscFwiLFxuICAgIFwieGZzX2ZpbGVfaW9jdGxcIixcbiAgICBcInhmc19mc19maWxsX3N1cGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBET19PTkNFX0xJVEUgLyBfX09OQ0VfTElURV9JRiBoZWxwZXIgbWFjcm8gZGVmaW5pdGlvbnMgaW4gaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaCwgc2VwYXJhdGluZyBvdXQgX19PTkNFX0xJVEUoKSBhbmQgYWx0ZXJpbmcgdGhlIGNvbmRpdGlvbiBldmFsdWF0aW9uIGxvZ2ljIGZvciBvbmUtdGltZSBleGVjdXRpb24gYWNyb3NzIHRoZSBrZXJuZWwuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUgdXNlZCBpbiBuZXR3b3JraW5nLCBmaWxlc3lzdGVtcywgYW5kIGdlbmVyaWMgYnVnL3dhcm5pbmcgbWFjcm9zLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gdmVyaWZ5IHJ1bnRpbWUgZXZhbHVhdGlvbiBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MjExNmM3Yjk1OGY4ODVhZmE3MzRhOWVkYWQzN2UwZDBjNzE5NGJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxNToxODozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb25jZV9saXRlLmggYi9pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oXG5pbmRleCAyMzY1OTJjNGVlYjFhLi41ZTJiNjcwMzlhYWYwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaFxuQEAgLTEwLDE5ICsxMCwyMSBAQFxuICNkZWZpbmUgRE9fT05DRV9MSVRFKGZ1bmMsIC4uLilcdFx0XHRcdFx0XHRcXFxuIFx0RE9fT05DRV9MSVRFX0lGKHRydWUsIGZ1bmMsICMjX19WQV9BUkdTX18pXG4gXG4tI2RlZmluZSBfX09OQ0VfTElURV9JRihjb25kaXRpb24pXHRcdFx0XHRcdFxcXG4rI2RlZmluZSBfX09OQ0VfTElURSgpXHRcdFx0XHRcdFx0XHRcXFxuIFx0KHtcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdFx0c3RhdGljIGJvb2wgX19zZWN0aW9uKFwiLmRhdGEuLm9uY2VcIikgX19hbHJlYWR5X2RvbmU7XHRcXFxuLVx0XHRib29sIF9fcmV0X2NvbmQgPSAhIShjb25kaXRpb24pO1x0XHRcdFxcXG4gXHRcdGJvb2wgX19yZXRfb25jZSA9IGZhbHNlO1x0XHRcdFx0XFxcbiBcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLVx0XHRpZiAodW5saWtlbHkoX19yZXRfY29uZCkgXHUwMDI2XHUwMDI2IHVubGlrZWx5KCFfX2FscmVhZHlfZG9uZSkpIHtcXFxuK1x0XHRpZiAodW5saWtlbHkoIV9fYWxyZWFkeV9kb25lKSkge1x0XHRcdFxcXG4gXHRcdFx0X19hbHJlYWR5X2RvbmUgPSB0cnVlO1x0XHRcdFx0XFxcbiBcdFx0XHRfX3JldF9vbmNlID0gdHJ1ZTtcdFx0XHRcdFxcXG4gXHRcdH1cdFx0XHRcdFx0XHRcdFxcXG4gXHRcdHVubGlrZWx5KF9fcmV0X29uY2UpO1x0XHRcdFx0XHRcXFxuIFx0fSlcbiBcbisjZGVmaW5lIF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilcdFx0XHRcdFx0XFxcbitcdCh1bmxpa2VseShjb25kaXRpb24pIFx1MDAyNlx1MDAyNiBfX09OQ0VfTElURSgpKVxuK1xuICNkZWZpbmUgRE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgZnVuYywgLi4uKVx0XHRcdFx0XFxcbiBcdCh7XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRcdGJvb2wgX19yZXRfZG9fb25jZSA9ICEhKGNvbmRpdGlvbik7XHRcdFx0XFxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE1OjE4OjM2LjcxOTY2NDAwM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwMjM5NTY0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgcGF0Y2gsIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKlBhdGNoIEFuYWx5c2lzIGFuZCBJbXBhY3QgQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJIGRvIGlzIGFuYWx5emUgdGhlIHBhdGNoLiBJdCBzZWVtcyB3ZSdyZSBsb29raW5nIGF0IGEgbW9kaWZpY2F0aW9uIHRvIGBpbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oYC4gU28sIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGF0IGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgb25jZV9saXRlLmhgIGlzIGFsbCBhYm91dC4gSXMgaXQgYSBjcml0aWNhbCBwaWVjZSBvZiBpbmZyYXN0cnVjdHVyZSwgc29tZXRoaW5nIHVzZWQgdGhyb3VnaG91dCB0aGUga2VybmVsLCBvciBtb3JlIGxvY2FsaXplZD8gS25vd2luZyB0aGUgc2NvcGUgaXMgZXNzZW50aWFsLlxuXG5OZXh0LCBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgY2hhbmdlcyB3aXRoaW4gYG9uY2VfbGl0ZS5oYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aGF0KiBoYXMgY2hhbmdlZC4gSXMgaXQganVzdCB3aGl0ZXNwYWNlLCBhIGJ1ZyBmaXgsIGFuIG9wdGltaXphdGlvbiwgb3IgaXMgaXQgYSBmdW5kYW1lbnRhbCBhbHRlcmF0aW9uIG9mIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBgb25jZV9saXRlYCBtZWNoYW5pc20/IEkgbmVlZCB0byBsb29rIGZvciBhbnkgbmV3IEFQSSBjYWxscywgY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMsIG9yIG1vZGlmaWNhdGlvbnMgdGhhdCBjb3VsZCBhZmZlY3QgZXhpc3RpbmcgY29kZS4gRmluYWxseSwgd2hlcmUgaXMgdGhpcyBoZWFkZXIgZmlsZSB1c2VkPyBBIHF1aWNrIGdyZXAgdGhyb3VnaCB0aGUgY29kZSBiYXNlIHdpbGwgaGlnaGxpZ2h0IGFsbCBvZiB0aGUgcmVmZXJlbmNlcyB0byB0aGlzIGZpbGUsIGFuZCByZXZlYWwgdGhlIGFyZWFzIG9mIHRoZSBrZXJuZWwgdGhhdCBkZXBlbmQgb24gdGhpcyBtZWNoYW5pc20uIEkgd2lsbCB0aGVuIHBlcmZvcm0gYSBjb2RlIHJldmlldyBvbiB0aG9zZSBmaWxlcywgdG8gZXhhbWluZSBob3cgdGhleSBhcmUgYWZmZWN0ZWQgYnkgdGhlIGNoYW5nZXMuIE9ubHkgdGhlbiBjYW4gSSB0cnVseSBhc3Nlc3MgdGhlIGltcGFjdCBhbmQgcmlzayBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA0OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTU6MTg6NDMuNzQzNjIzMzkxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuICAgMjpcXHQjaWZuZGVmIF9MSU5VWF9PTkNFX0xJVEVfSFxcbiAgIDM6XFx0I2RlZmluZSBfTElOVVhfT05DRV9MSVRFX0hcXG4gICA0OlxcdFxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuICAgNjpcXHRcXG4gICA3OlxcdC8qIENhbGwgYSBmdW5jdGlvbiBvbmNlLiBTaW1pbGFyIHRvIERPX09OQ0UoKSwgYnV0IGRvZXMgbm90IHVzZSBqdW1wIGxhYmVsXFxuICAgODpcXHQgKiBwYXRjaGluZyB2aWEgc3RhdGljIGtleXMuXFxuICAgOTpcXHQgKi9cXG4gIDEwOlxcdCNkZWZpbmUgRE9fT05DRV9MSVRFKGZ1bmMsIC4uLilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAxMTpcXHRcXHRET19PTkNFX0xJVEVfSUYodHJ1ZSwgZnVuYywgIyNfX1ZBX0FSR1NfXylcXG4gIDEyOlxcdFxcbiAgMTM6XFx0I2RlZmluZSBfX09OQ0VfTElURSgpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMTQ6XFx0XFx0KHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAxNTpcXHRcXHRcXHRzdGF0aWMgYm9vbCBfX3NlY3Rpb24oXFxcIi5kYXRhLi5vbmNlXFxcIikgX19hbHJlYWR5X2RvbmU7XFx0XFxcXFxcbiAgMTY6XFx0XFx0XFx0Ym9vbCBfX3JldF9vbmNlID0gZmFsc2U7XFx0XFx0XFx0XFx0XFxcXFxcbiAgMTc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMTg6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFfX2FscmVhZHlfZG9uZSkpIHtcXHRcXHRcXHRcXFxcXFxuICAxOTpcXHRcXHRcXHRcXHRfX2FscmVhZHlfZG9uZSA9IHRydWU7XFx0XFx0XFx0XFx0XFxcXFxcbiAgMjA6XFx0XFx0XFx0XFx0X19yZXRfb25jZSA9IHRydWU7XFx0XFx0XFx0XFx0XFxcXFxcbiAgMjE6XFx0XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDIyOlxcdFxcdFxcdHVubGlrZWx5KF9fcmV0X29uY2UpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDIzOlxcdFxcdH0pXFxuICAyNDpcXHRcXG4gIDI1OlxcdCNkZWZpbmUgX19PTkNFX0xJVEVfSUYoY29uZGl0aW9uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDI2OlxcdFxcdCh1bmxpa2VseShjb25kaXRpb24pIFxcdTAwMjZcXHUwMDI2IF9fT05DRV9MSVRFKCkpXFxuICAyNzpcXHRcXG4gIDI4OlxcdCNkZWZpbmUgRE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgZnVuYywgLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG4gIDI5OlxcdFxcdCh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzA6XFx0XFx0XFx0Ym9vbCBfX3JldF9kb19vbmNlID0gISEoY29uZGl0aW9uKTtcXHRcXHRcXHRcXFxcXFxuICAzMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAzMjpcXHRcXHRcXHRpZiAoX19PTkNFX0xJVEVfSUYoX19yZXRfZG9fb25jZSkpXFx0XFx0XFx0XFxcXFxcbiAgMzM6XFx0XFx0XFx0XFx0ZnVuYyhfX1ZBX0FSR1NfXyk7XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzU6XFx0XFx0XFx0dW5saWtlbHkoX19yZXRfZG9fb25jZSk7XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzY6XFx0XFx0fSlcXG4gIDM3OlxcdFxcbiAgMzg6XFx0I2VuZGlmIC8qIF9MSU5VWF9PTkNFX0xJVEVfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToxODo0My43NDM2OTE5NzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDg2MjE2MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgYG9uY2VfbGl0ZS5oYCBVc2FnZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIGBvbmNlX2xpdGUuaGAgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBwaW5wb2ludCBldmVyeSBpbnN0YW5jZSB3aGVyZSB0aGlzIGhlYWRlciBmaWxlIGlzIGluY2x1ZGVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmhvdyogaXQncyBiZWluZyB1c2VkIHdpdGhpbiB0aG9zZSBjb250ZXh0cy4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGZpbmRpbmcgdGhlIGluY2x1ZGVzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBhbnkgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gaXQuIEknbGwgbmVlZCB0byBnbyBiZXlvbmQgYSBzaW1wbGUgYGdyZXBgIG9yIGBmaW5kYCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBvbmNlX2xpdGUuaGAgaW4gdGhlIGtlcm5lbC4gQXJlIHRoZXJlIGFueSB1bnVzdWFsIGNhbGxpbmcgcGF0dGVybnM/IEFyZSB0aGVyZSBhbnkgYXJlYXMgdGhhdCBsb29rIHJpcGUgZm9yIG9wdGltaXphdGlvbiByZWxhdGVkIHRvIGl0cyB1c2FnZT8gVGltZSB0byBkaWcgaW4gYW5kIGRvIHNvbWUgc2VyaW91cyBzdGF0aWMgYW5hbHlzaXMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiB1bmNvdmVyIVxuXG5cbiIsIklucHV0VG9rZW5zIjozOTU4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToxODo0Ni44Mjk5MTExMTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5NDQzOTQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvbmNlX2xpdGVcXFxcLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMveGZzL3hmc19tZXNzYWdlLmgtNC1cXG5mcy94ZnMveGZzX21lc3NhZ2UuaDo1OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9vbmNlX2xpdGUuaFxcdTAwM2VcXG5mcy94ZnMveGZzX21lc3NhZ2UuaC02LVxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaC02LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnN0cnVtZW50YXRpb24uaFxcdTAwM2VcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oOjc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29uY2VfbGl0ZS5oXFx1MDAzZVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtOC1cXG4tLVxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvcmF0ZWxpbWl0X3R5cGVzLmhcXHUwMDNlXFxuaW5jbHVkZS9saW51eC9wcmludGsuaDoxMDojaW5jbHVkZSBcXHUwMDNjbGludXgvb25jZV9saXRlLmhcXHUwMDNlXFxuaW5jbHVkZS9saW51eC9wcmludGsuaC0xMS1cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTIyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9jdHlwZS5oXFx1MDAzZVxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjIzOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9vbmNlX2xpdGUuaFxcdTAwM2VcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0yNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvZnRyYWNlX3JlZ3MuaFxcdTAwM2VcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTE1Ny0jaW5jbHVkZSBcXHUwMDNjbGludXgvcHJhbmRvbS5oXFx1MDAzZVxcbm5ldC9jb3JlL2Rldi5jOjE1ODojaW5jbHVkZSBcXHUwMDNjbGludXgvb25jZV9saXRlLmhcXHUwMDNlXFxubmV0L2NvcmUvZGV2LmMtMTU5LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFxcdTAwM2VcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTctI2RlZmluZSBfX01BQzgwMjExX0RFQlVHX0hcXG5uZXQvbWFjODAyMTEvZGVidWcuaDo4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9vbmNlX2xpdGUuaFxcdTAwM2VcXG5uZXQvbWFjODAyMTEvZGVidWcuaC05LSNpbmNsdWRlIFxcdTAwM2NuZXQvY2ZnODAyMTEuaFxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTU6MTg6NDkuMzI0MzYxODE4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA5NDA0NDA2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFwiT05DRV9MSVRFXCIgTWFjcm9zKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIHVzYWdlIG9mIHRoZXNlIGBfX09OQ0VfTElURV9JRmAsIGBfX09OQ0VfTElURWAsIGBET19PTkNFX0xJVEVgLCBhbmQgYERPX09OQ0VfTElURV9JRmAgbWFjcm9zLiAgVGhlIGdvYWwgaGVyZSBpcyBwcm9iYWJseSB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBiZWluZyB1c2VkIHdpdGhpbiB0aGUgY29kZWJhc2UuIEZpcnN0LCBhIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdG8gY2hlY2sgaG93IGBidWcuaGAgaW4gdGhlIGdlbmVyaWMgYXNzZW1ibHkgaW5jbHVkZXMgdXRpbGl6ZXMgdGhlbSBzaW5jZSB0aGF0J3Mgd2hlcmUgdGhlIGludmVzdGlnYXRpb24gc3RhcnRlZC4gTGV0J3MgZGlnIGludG8gYGluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmhgIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTkzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTU6MTg6NTIuNDE4NDA5MjE0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDY0MzI0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19PTkNFX0xJVEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vZXh0YWJsZS5jPTE2Nj1zdGF0aWMgYm9vbCBleF9oYW5kbGVyX21zcihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpmaXh1cCxcXG4tLVxcbmFyY2gveDg2L21tL2V4dGFibGUuYy0xNjgte1xcbmFyY2gveDg2L21tL2V4dGFibGUuYzoxNjk6XFx0aWYgKF9fT05DRV9MSVRFX0lGKCFzYWZlIFxcdTAwMjZcXHUwMDI2IHdybXNyKSkge1xcbmFyY2gveDg2L21tL2V4dGFibGUuYy0xNzAtXFx0XFx0cHJfd2FybihcXFwidW5jaGVja2VkIE1TUiBhY2Nlc3MgZXJyb3I6IFdSTVNSIHRvIDB4JXggKHRyaWVkIHRvIHdyaXRlIDB4JTA4eCUwOHgpIGF0IHJJUDogMHglbHggKCVwUylcXFxcblxcXCIsXFxuLS1cXG5hcmNoL3g4Ni9tbS9leHRhYmxlLmMtMTc1LVxcbmFyY2gveDg2L21tL2V4dGFibGUuYzoxNzY6XFx0aWYgKF9fT05DRV9MSVRFX0lGKCFzYWZlIFxcdTAwMjZcXHUwMDI2ICF3cm1zcikpIHtcXG5hcmNoL3g4Ni9tbS9leHRhYmxlLmMtMTc3LVxcdFxcdHByX3dhcm4oXFxcInVuY2hlY2tlZCBNU1IgYWNjZXNzIGVycm9yOiBSRE1TUiBmcm9tIDB4JXggYXQgcklQOiAweCVseCAoJXBTKVxcXFxuXFxcIixcXG4tLVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMTItXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoxMzojZGVmaW5lIF9fT05DRV9MSVRFKClcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0xNC1cXHQoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMjQtXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoyNTojZGVmaW5lIF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoyNjpcXHQodW5saWtlbHkoY29uZGl0aW9uKSBcXHUwMDI2XFx1MDAyNiBfX09OQ0VfTElURSgpKVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMjctXFxuLS1cXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTMxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjMyOlxcdFxcdGlmIChfX09OQ0VfTElURV9JRihfX3JldF9kb19vbmNlKSlcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0zMy1cXHRcXHRcXHRmdW5jKF9fVkFfQVJHU19fKTtcXHRcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE1OjE4OjU0LjQyNDg0ODc5OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTE2ODQyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgaWYgdGhleSdyZSBtaW5lOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgXCJPbmNlXCIgTWVjaGFuaXNtKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSB0aGlua2luZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIFwib25jZVwiIG1lY2hhbmlzbSBiZXR0ZXIsIHNwZWNpZmljYWxseSBob3cgaXQncyBpbXBsZW1lbnRlZC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZWJhc2UgZm9yIGluc3RhbmNlcyBvZiBgRE9fT05DRV9MSVRFYCwgYFdBUk5fT05DRWAsIG9yIGV2ZW4gaG93IHRoYXQgYG9uY2VfbGl0ZS5oYCBoZWFkZXIgZmlsZSBpcyB1dGlsaXplZC4gSSBmaWd1cmUgaWYgSSB0cmFjayBkb3duIHdoZXJlIHRob3NlIG1hY3JvcyBhcmUgYmVpbmcgKnVzZWQqLCBJJ2xsIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHVuZGVybHlpbmcgY29uY2VwdHMuIEkgYWxzbyBtaWdodCBsb29rIGF0IGhvdyB0aGV5IGludGVyYWN0IHdpdGggaW1wb3J0YW50IGZpbGVzIGxpa2UgYGJ1Zy5oYCBvciBgcHJpbnRrLmhgIHNpbmNlIHRoZXkgYXJlIGVzc2VudGlhbCBpbiBrZXJuZWwgZGVidWdnaW5nLiBUaGF0J3MgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCdzIHNlZSB3aGF0IHRoZSBncmVwIGNhbiBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzQxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTU6MTg6NTYuNjM2NTM1NTcxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzgyODQ1ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRPX09OQ0VfTElURVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTEyMzQ9c3RhdGljIGludCB3YWl0X29uX3NlbShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgdTY0IGRhdGEpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTEyNTQtXFx0XFx0aWYgKGFtZF9pb21tdV9kdW1wKVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6MTI1NTpcXHRcXHRcXHRET19PTkNFX0xJVEUoZHVtcF9jb21tYW5kX2J1ZmZlciwgaW9tbXUpO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMTI1Ni1cXG4tLVxcbmZzL2Vyb2ZzL2ludGVybmFsLmg9NDQ2PWVyb2ZzX2dldF9hb3BzKHN0cnVjdCBpbm9kZSAqcmVhbGlub2RlKVxcbi0tXFxuZnMvZXJvZnMvaW50ZXJuYWwuaC00NTAtXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApO1xcbmZzL2Vyb2ZzL2ludGVybmFsLmg6NDUxOlxcdFxcdERPX09OQ0VfTElURV9JRihyZWFsaW5vZGUtXFx1MDAzZWlfYmxrYml0cyAhPSBQQUdFX1NISUZULFxcbmZzL2Vyb2ZzL2ludGVybmFsLmgtNDUyLVxcdFxcdFxcdCAgZXJvZnNfaW5mbywgcmVhbGlub2RlLVxcdTAwM2VpX3NiLFxcbi0tXFxuZnMveGZzL3hmc19tZXNzYWdlLmg9NTA9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmZzL3hmcy94ZnNfbWVzc2FnZS5oLTU4LSNkZWZpbmUgeGZzX3ByaW50a19vbmNlKGZ1bmMsIGRldiwgZm10LCAuLi4pXFx0XFx0XFx0XFxcXFxcbmZzL3hmcy94ZnNfbWVzc2FnZS5oOjU5OlxcdERPX09OQ0VfTElURShmdW5jLCBkZXYsIGZtdCwgIyNfX1ZBX0FSR1NfXylcXG5mcy94ZnMveGZzX21lc3NhZ2UuaC02MC1cXG4tLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmg9MTAzPWV4dGVybiBfX3ByaW50ZigxLCAyKSB2b2lkIF9fd2Fybl9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pO1xcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaC0xNzktI2RlZmluZSBXQVJOX09OX09OQ0UoY29uZGl0aW9uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oOjE4MDpcXHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOX09OLCAxKVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTgxLSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaC0xODQtI2RlZmluZSBXQVJOX09OQ0UoY29uZGl0aW9uLCBmb3JtYXQuLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmg6MTg1OlxcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk4sIDEsIGZvcm1hdClcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE4Ni0jZW5kaWZcXG4tLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTg4LSNkZWZpbmUgV0FSTl9UQUlOVF9PTkNFKGNvbmRpdGlvbiwgdGFpbnQsIGZvcm1hdC4uLilcXHRcXHRcXFxcXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaDoxODk6XFx0RE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgV0FSTl9UQUlOVCwgMSwgdGFpbnQsIGZvcm1hdClcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE5MC1cXG4tLVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtOS0gKi9cXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjEwOiNkZWZpbmUgRE9fT05DRV9MSVRFKGZ1bmMsIC4uLilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoxMTpcXHRET19PTkNFX0xJVEVfSUYodHJ1ZSwgZnVuYywgIyNfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTEyLVxcbi0tXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0yNy1cXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjI4OiNkZWZpbmUgRE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgZnVuYywgLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTI5LVxcdCh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9wcmludGsuaD00MDc9c3RydWN0IHBpX2VudHJ5IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjQ5LSNkZWZpbmUgcHJpbnRrX29uY2UoZm10LCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmg6NjUwOlxcdERPX09OQ0VfTElURShwcmludGssIGZtdCwgIyNfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oLTY1MS0jZGVmaW5lIHByaW50a19kZWZlcnJlZF9vbmNlKGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oOjY1MjpcXHRET19PTkNFX0xJVEUocHJpbnRrX2RlZmVycmVkLCBmbXQsICMjX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9wcmludGsuaC02NTMtI2Vsc2VcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9Mjc1MD1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2Fzc2VydF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjc1My1cXHRpZiAoV0FSTl9PTkNFKCFza2ItXFx1MDAzZWxlbiwgXFxcIiVzXFxcXG5cXFwiLCBfX2Z1bmNfXykpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoyNzU0OlxcdFxcdERPX09OQ0VfTElURShza2JfZHVtcCwgS0VSTl9FUlIsIHNrYiwgZmFsc2UpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjc1NS0jZW5kaWYgLyogQ09ORklHX0RFQlVHX05FVCAqL1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmg9Mzc9ZW51bSB0cmFjZV90eXBlIHtcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTEyOS0jZGVmaW5lIE1FTV9GQUlMKGNvbmRpdGlvbiwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEzMDpcXHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBwcl9lcnIsIFxcXCJFUlJPUjogXFxcIiBmbXQsICMjX19WQV9BUkdTX18pXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTMxLVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MzYxNz1pbnQgc2tiX2NoZWNrc3VtX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTM2NDUtXFx0aWYgKHVubGlrZWx5KG9mZnNldCBcXHUwMDNlPSBza2JfaGVhZGxlbihza2IpKSkge1xcbm5ldC9jb3JlL2Rldi5jOjM2NDY6XFx0XFx0RE9fT05DRV9MSVRFKHNrYl9kdW1wLCBLRVJOX0VSUiwgc2tiLCBmYWxzZSk7XFxubmV0L2NvcmUvZGV2LmMtMzY0Ny1cXHRcXHRXQVJOX09OQ0UodHJ1ZSwgXFxcIm9mZnNldCAoJWQpIFxcdTAwM2U9IHNrYl9oZWFkbGVuKCkgKCV1KVxcXFxuXFxcIixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTM2NTQtXFx0aWYgKHVubGlrZWx5KG9mZnNldCArIHNpemVvZihfX3N1bTE2KSBcXHUwMDNlIHNrYl9oZWFkbGVuKHNrYikpKSB7XFxubmV0L2NvcmUvZGV2LmM6MzY1NTpcXHRcXHRET19PTkNFX0xJVEUoc2tiX2R1bXAsIEtFUk5fRVJSLCBza2IsIGZhbHNlKTtcXG5uZXQvY29yZS9kZXYuYy0zNjU2LVxcdFxcdFdBUk5fT05DRSh0cnVlLCBcXFwib2Zmc2V0KzIgKCV6dSkgXFx1MDAzZSBza2JfaGVhZGxlbigpICgldSlcXFxcblxcXCIsXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0zNzQwPXZvaWQgbmV0ZGV2X3J4X2NzdW1fZmF1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9kZXYuYy0zNzQxLXtcXG5uZXQvY29yZS9kZXYuYzozNzQyOlxcdERPX09OQ0VfTElURShkb19uZXRkZXZfcnhfY3N1bV9mYXVsdCwgZGV2LCBza2IpO1xcbm5ldC9jb3JlL2Rldi5jLTM3NDMtfVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9MjI3PXN0YXRpYyB2b2lkIHRjcF9tZWFzdXJlX3Jjdl9tc3Moc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMjYzLVxcdFxcdC8qIEFjY291bnQgZm9yIHBvc3NpYmx5LXJlbW92ZWQgb3B0aW9ucyAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjI2NDpcXHRcXHRET19PTkNFX0xJVEVfSUYobGVuIFxcdTAwM2UgaWNzay1cXHUwMDNlaWNza19hY2sucmN2X21zcyArIE1BWF9UQ1BfT1BUSU9OX1NQQUNFLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI2NS1cXHRcXHRcXHRcXHR0Y3BfZ3JvX2Rldl93YXJuLCBzaywgc2tiLCBsZW4pO1xcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmg9MTI1PWRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xNTYtI2RlZmluZSBsaW5rX2Vycl9vbmNlKGxpbmssIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxNTc6XFx0RE9fT05DRV9MSVRFKGxpbmtfZXJyLCBsaW5rLCBmbXQsICMjX19WQV9BUkdTX18pXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMTU4LSNkZWZpbmUgbGlua19pZF9pbmZvKHNkYXRhLCBsaW5rX2lkLCBmbXQsIC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5ydXN0L2tlcm5lbC9wcmludC5ycz00MjY9bWFjcm9fcnVsZXMhIHByX2NvbnQgKFxcbi0tXFxucnVzdC9rZXJuZWwvcHJpbnQucnMtNDMzLS8vL1xcbnJ1c3Qva2VybmVsL3ByaW50LnJzOjQzNDovLy8gVGhpcyBzdHJ1Y3R1cmUgcHJvdmlkZXMgdGhlIFJ1c3QgZXF1aXZhbGVudCBvZiB0aGUga2VybmVsJ3MgYERPX09OQ0VfTElURWAgbWFjcm8uXFxucnVzdC9rZXJuZWwvcHJpbnQucnMtNDM1LS8vLyBXaGlsZSBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBpbXBsZW1lbnQgdGhlIGZlYXR1cmUgZW50aXJlbHkgYXMgYSBSdXN0IG1hY3JvLFxcbi0tXFxucnVzdC9rZXJuZWwvcHJpbnQucnM9NDY4PSAgICBwdWIgZm4gY2FsbF9vbmNlXFx1MDAzY0ZcXHUwMDNlKFxcdTAwMjZzZWxmLCBmOiBGKSAtXFx1MDAzZSBib29sXFxuLS1cXG5ydXN0L2tlcm5lbC9wcmludC5ycy00OTEtLy8vXFxucnVzdC9rZXJuZWwvcHJpbnQucnM6NDkyOi8vLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGtlcm5lbCdzIGBET19PTkNFX0xJVEVgIG1hY3JvLlxcbnJ1c3Qva2VybmVsL3ByaW50LnJzLTQ5My0vLy9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTU6MTg6NTguNDE5Mzg5OTkxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4OTkxNDU3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPcHRpbWl6YXRpb24gb2YgdGhlIGBfX09OQ0VfTElURWAgTWFjcm9zKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGNvZGUgY2hhbmdlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBhbHRlcmF0aW9uIGFuZCBpdHMgaW1wbGljYXRpb25zLiBJIHNlZSB0aGUgb3JpZ2luYWwgYF9fT05DRV9MSVRFX0lGYCBtYWNybyBhbmQgdGhlbiB0aGUgbmV3IGltcGxlbWVudGF0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgbWFjcm8sIGBfX09OQ0VfTElURSgpYC5cblxuSW4gdGhlIG9sZCBjb2RlLCBgX19PTkNFX0xJVEVfSUYoY29uZGl0aW9uKWAgd3JhcHBlZCB0aGUgYF9fYWxyZWFkeV9kb25lYCBjaGVjayBkaXJlY3RseSB3aXRoaW4gdGhlIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGUgYF9fYWxyZWFkeV9kb25lYCBmbGFnIHdhcyBsb2NhbCB0byB0aGF0IG1hY3JvLiBUaGlzIG1lYW50IHRoZSBjaGVjayBhbmQgc2V0dGluZyBvZiB0aGUgZmxhZyBvbmx5IG9jY3VycmVkIGlmIHRoZSBgY29uZGl0aW9uYCB3YXMgdHJ1ZS4gSG93ZXZlciwgdGhlIGZsYWcgd2FzIGRlY2xhcmVkICppbnNpZGUqIHRoZSBtYWNyby5cblxuVGhlIG5ldyBjb2RlIHJlZmFjdG9ycyB0aGlzLiBgX19PTkNFX0xJVEUoKWAgaXMgbm93IGEgc3RhbmRhbG9uZSBtYWNybyByZXNwb25zaWJsZSBzb2xlbHkgZm9yIHRoZSBcImRvLW9uY2VcIiBiZWhhdmlvciDigJMgY2hlY2tpbmcgYW5kIHNldHRpbmcgYF9fYWxyZWFkeV9kb25lYC4gQ3J1Y2lhbGx5LCBgX19PTkNFX0xJVEVfSUYoY29uZGl0aW9uKWAgbm93ICpjYWxscyogYF9fT05DRV9MSVRFKClgLCBidXQgdXNlcyBzaG9ydC1jaXJjdWl0aW5nLiBUaGlzIG1lYW5zIHRoYXQgaWYgYGNvbmRpdGlvbmAgaXMgZmFsc2UsIGBfX09OQ0VfTElURSgpYCBpc24ndCBldmFsdWF0ZWQgYXQgYWxsLiBUaGUgaW1wYWN0IGlzIHdlIGdldCB0aGUgc2FtZSBiZWhhdmlvciBvZiBleGVjdXRpbmcgYF9fYWxyZWFkeV9kb25lYCBvbmx5IGlmIHRoZSBjb25kaXRpb24gaXMgbWV0LCBidXQgbm93IHRoZSBmbGFnIGlzIHNlcGFyYXRlIGFuZCBwb3RlbnRpYWxseSByZXVzYWJsZS5cblxuQWhhISBUaGlzIGFsc28gY2xhcmlmaWVzIHRoZSBsaWtlbHkgaW50ZW50LiBUaGUgaW50cm9kdWN0aW9uIG9mIGBfX09OQ0VfTElURSgpYCBvZmZlcnMgYSB3YXkgdG8gaW52b2tlIHRoZSBcImRvLW9uY2VcIiBsb2dpYyB3aXRob3V0IGFuIGV4cGxpY2l0IGNvbmRpdGlvbiwgd2hpY2ggd2Fzbid0IGFzIGNsZWFuIGluIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLiBOb3csIEkgc2VlIHRoYXQgdGhlIG9yaWdpbmFsIGBET19PTkNFX0xJVEVgIG1hY3JvIHVzZWQgYERPX09OQ0VfTElURV9JRih0cnVlLCAuLi4pYDsgbm93IHdlIGNhbiBzaW1wbHkgY2FsbCB0aGUgYmFzZSBmdW5jdGlvbi5cblxuQnV0LCBhIHF1aWNrIHJlYWxpdHkgY2hlY2s6IGlzIHRoaXMgZXZlbiB1c2VkIGFueXdoZXJlPyBMZXQgbWUgY2hlY2sgdGhlIGNhbGwgc2l0ZXMgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJ3QgZGVhZCBjb2RlISBJIHJlY2FsbCBgV0FSTl9PTl9PTkNFYCBsZXZlcmFnZXMgdGhpcywgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFuZCBpdCdzIHVzZWQgaW4gZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuLi4gU3BlY2lmaWNhbGx5LCBJIGtub3cgdGhhdCBgYXNtLWdlbmVyaWMvYnVnLmhgIG1pZ2h0IHVzZSB0aGlzLCBhbmQgdGhlIEFNRDY0IGFyY2hpdGVjdHVyZSBpcyBhbiBpbXBvcnRhbnQgY2FzZSBmb3IgbWUsIHNvIGxldCdzIGNoZWNrIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9idWcuaGAgdG8gY29uZmlybSB0aGUgaW1wbGVtZW50YXRpb24uIEdvdHRhIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBhY3R1YWxseSByZWxldmFudCBhbmQgbm90IGEgaHlwb3RoZXRpY2FsIG9wdGltaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY3MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToxOTowNi4zMTg1NDAyODhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NzE1NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIldBUk5fT05fT05DRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDM1NTQgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmFyY2gveDg2L2NvY28vc2V2L3ZjLWhhbmRsZS5jPTM5PXN0YXRpYyBlbnVtIGVzX3Jlc3VsdCB2Y19zbG93X3ZpcnRfdG9fcGh5cyhzdHJ1Y3QgZ2hjYiAqZ2hjYiwgc3RydWN0IGVzX2VtX2N0eHQgKmN0eHQsXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1oYW5kbGUuYy02MS1cXG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1oYW5kbGUuYzo2MjpcXHRpZiAoV0FSTl9PTl9PTkNFKHB0ZV92YWwoKnB0ZSkgXFx1MDAyNiBfUEFHRV9FTkMpKVxcbmFyY2gveDg2L2NvY28vc2V2L3ZjLWhhbmRsZS5jLTYzLVxcdFxcdC8qIEVtdWxhdGVkIE1NSU8gdG8vZnJvbSBlbmNyeXB0ZWQgbWVtb3J5IG5vdCBzdXBwb3J0ZWQgKi9cXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jPTU3OD1zdGF0aWMgaW50IGhhbmRsZV9tbWlvKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdmVfaW5mbyAqdmUpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy01ODctXFx0LyogT25seSBpbi1rZXJuZWwgTU1JTyBpcyBzdXBwb3J0ZWQgKi9cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzo1ODg6XFx0aWYgKFdBUk5fT05fT05DRSh1c2VyX21vZGUocmVncykpKVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTU4OS1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTU5Ny1cXHRtbWlvID0gaW5zbl9kZWNvZGVfbW1pbyhcXHUwMDI2aW5zbiwgXFx1MDAyNnNpemUpO1xcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjU5ODpcXHRpZiAoV0FSTl9PTl9PTkNFKG1taW8gPT0gSU5TTl9NTUlPX0RFQ09ERV9GQUlMRUQpKVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTU5OS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTY3Ny1cXHRcXHQvKiBBbGwgb3RoZXIgY2FzZXMgaGFzIHRvIGJlIGNvdmVyZWQgd2l0aCB0aGUgZmlyc3Qgc3dpdGNoKCkgKi9cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzo2Nzg6XFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTY3OS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2VudHJ5L2NvbW1vbi5jPTE4PW5vaW5zdHIgdm9pZCB4ODZfZW50cnlfZnJvbV9rdm0odW5zaWduZWQgaW50IGV2ZW50X3R5cGUsIHVuc2lnbmVkIGludCB2ZWN0b3IpXFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS9jb21tb24uYy00NS1cXG5hcmNoL3g4Ni9lbnRyeS9jb21tb24uYzo0NjpcXHRXQVJOX09OX09OQ0UoZXZlbnRfdHlwZSAhPSBFVkVOVF9UWVBFX05NSSk7XFxuYXJjaC94ODYvZW50cnkvY29tbW9uLmMtNDctXFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV9mcmVkLmM9MTI3PXZvaWQgX19pbml0IGZyZWRfaW5zdGFsbF9zeXN2ZWModW5zaWduZWQgaW50IHN5c3ZlYywgaWR0ZW50cnlfdCBoYW5kbGVyKVxcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYy0xMjgte1xcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYzoxMjk6XFx0aWYgKFdBUk5fT05fT05DRShzeXN2ZWMgXFx1MDAzYyBGSVJTVF9TWVNURU1fVkVDVE9SKSlcXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV9mcmVkLmMtMTMwLVxcdFxcdHJldHVybjtcXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV9mcmVkLmMtMTMxLVxcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYzoxMzI6XFx0aWYgKFdBUk5fT05fT05DRShmcmVkX3NldHVwX2RvbmUpKVxcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYy0xMzMtXFx0XFx0cmV0dXJuO1xcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYy0xMzQtXFxuYXJjaC94ODYvZW50cnkvZW50cnlfZnJlZC5jOjEzNTpcXHRpZiAoIVdBUk5fT05fT05DRShzeXN2ZWNfdGFibGVbc3lzdmVjIC0gRklSU1RfU1lTVEVNX1ZFQ1RPUl0pKVxcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYy0xMzYtXFx0XFx0IHN5c3ZlY190YWJsZVtzeXN2ZWMgLSBGSVJTVF9TWVNURU1fVkVDVE9SXSA9IGhhbmRsZXI7XFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV9mcmVkLmM9MTYwPXN0YXRpYyBub2luc3RyIHZvaWQgZnJlZF9leHRpbnQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV9mcmVkLmMtMTYzLVxcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYzoxNjQ6XFx0aWYgKFdBUk5fT05fT05DRSh2ZWN0b3IgXFx1MDAzYyBGSVJTVF9FWFRFUk5BTF9WRUNUT1IpKVxcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYy0xNjUtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvZW50cnkvZW50cnlfZnJlZC5jPTI4OT1fX3Zpc2libGUgbm9pbnN0ciB2b2lkIF9fZnJlZF9lbnRyeV9mcm9tX2t2bShzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYy0yOTYtXFx0ZGVmYXVsdDpcXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV9mcmVkLmM6Mjk3OlxcdFxcdFdBUk5fT05fT05DRSgxKTtcXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV9mcmVkLmMtMjk4LVxcdH1cXG4tLVxcbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmM9MjU3PWJvb2wgZW11bGF0ZV92c3lzY2FsbF9wZih1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbi0tXFxuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYy0yODUtXFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfTlgpKVxcbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmM6Mjg2OlxcdFxcdFdBUk5fT05fT05DRSghKGVycm9yX2NvZGUgXFx1MDAyNiBYODZfUEZfSU5TVFIpKTtcXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jLTI4Ny1cXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmM9MjgxPXZvaWQgYW1kX2Jyc19kcmFpbih2b2lkKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuYy0zMDEtXFx0LyogU2FuaXR5IGNoZWNrIFswLXg4Nl9wbXUubGJyX25yXSAqL1xcbmFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmM6MzAyOlxcdGlmIChXQVJOX09OX09OQ0UoY2ZnLm1zcm9mZiBcXHUwMDNlPSB4ODZfcG11Lmxicl9ucikpXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuYy0zMDMtXFx0XFx0Z290byBlbXB0eTtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jPTU4MD1zdGF0aWMgaW50IGFtZF9wbXVfY3B1X3ByZXBhcmUoaW50IGNwdSlcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jLTU4OC1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYzo1ODk6XFx0V0FSTl9PTl9PTkNFKGNwdWMtXFx1MDAzZWFtZF9uYik7XFxuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmMtNTkwLVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmM9NjA0PXN0YXRpYyB2b2lkIGFtZF9wbXVfY3B1X3N0YXJ0aW5nKGludCBjcHUpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYy02MTctXFx0bmJfaWQgPSB0b3BvbG9neV9hbWRfbm9kZV9pZChjcHUpO1xcbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jOjYxODpcXHRXQVJOX09OX09OQ0UobmJfaWQgPT0gQkFEX0FQSUNJRCk7XFxuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmMtNjE5LVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmMtNjIxLVxcdFxcdG5iID0gcGVyX2NwdShjcHVfaHdfZXZlbnRzLCBpKS5hbWRfbmI7XFxuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmM6NjIyOlxcdFxcdGlmIChXQVJOX09OX09OQ0UoIW5iKSlcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYy02MjMtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2licy5jPTU1NT1zdGF0aWMgdm9pZCBwZXJmX2lic19zdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncylcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmMtNTYxLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmM6NTYyOlxcdGlmIChXQVJOX09OX09OQ0UoIShod2MtXFx1MDAzZXN0YXRlIFxcdTAwMjYgUEVSRl9IRVNfU1RPUFBFRCkpKVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmMtNTYzLVxcdFxcdHJldHVybjtcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2licy5jLTU2NC1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2licy5jOjU2NTpcXHRXQVJOX09OX09OQ0UoIShod2MtXFx1MDAzZXN0YXRlIFxcdTAwMjYgUEVSRl9IRVNfVVBUT0RBVEUpKTtcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2licy5jLTU2Ni1cXHRod2MtXFx1MDAzZXN0YXRlID0gMDtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmM9NTk3PXN0YXRpYyB2b2lkIHBlcmZfaWJzX3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2licy5jLTYzMy1cXHRcXHRjbGVhcl9iaXQoSUJTX1NUQVJURUQsIHBjcHUtXFx1MDAzZXN0YXRlKTtcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2licy5jOjYzNDpcXHRcXHRXQVJOX09OX09OQ0UoaHdjLVxcdTAwM2VzdGF0ZSBcXHUwMDI2IFBFUkZfSEVTX1NUT1BQRUQpO1xcbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmMtNjM1LVxcdFxcdGh3Yy1cXHUwMDNlc3RhdGUgfD0gUEVSRl9IRVNfU1RPUFBFRDtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmM9MTQwNj1zdGF0aWMgaW50IHBlcmZfaWJzX2hhbmRsZV9pcnEoc3RydWN0IHBlcmZfaWJzICpwZXJmX2licywgc3RydWN0IHB0X3JlZ3MgKmlyZWdzKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9pYnMuYy0xNDMzLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmM6MTQzNDpcXHRpZiAoV0FSTl9PTl9PTkNFKCFldmVudCkpXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9pYnMuYy0xNDM1LVxcdFxcdGdvdG8gZmFpbDtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvaW9tbXUuYz0yNzk9c3RhdGljIHZvaWQgcGVyZl9pb21tdV9zdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncylcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvaW9tbXUuYy0yODItXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9pb21tdS5jOjI4MzpcXHRpZiAoV0FSTl9PTl9PTkNFKCEoaHdjLVxcdTAwM2VzdGF0ZSBcXHUwMDI2IFBFUkZfSEVTX1NUT1BQRUQpKSlcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2lvbW11LmMtMjg0LVxcdFxcdHJldHVybjtcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2lvbW11LmMtMjg1LVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvaW9tbXUuYzoyODY6XFx0V0FSTl9PTl9PTkNFKCEoaHdjLVxcdTAwM2VzdGF0ZSBcXHUwMDI2IFBFUkZfSEVTX1VQVE9EQVRFKSk7XFxuYXJjaC94ODYvZXZlbnRzL2FtZC9pb21tdS5jLTI4Ny1cXHRod2MtXFx1MDAzZXN0YXRlID0gMDtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvaW9tbXUuYz0zMzE9c3RhdGljIHZvaWQgcGVyZl9pb21tdV9zdG9wKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9pb21tdS5jLTM0NS1cXHRwZXJmX2lvbW11X2Rpc2FibGVfZXZlbnQoZXZlbnQpO1xcbmFyY2gveDg2L2V2ZW50cy9hbWQvaW9tbXUuYzozNDY6XFx0V0FSTl9PTl9PTkNFKGh3Yy1cXHUwMDNlc3RhdGUgXFx1MDAyNiBQRVJGX0hFU19TVE9QUEVEKTtcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2lvbW11LmMtMzQ3LVxcdGh3Yy1cXHUwMDNlc3RhdGUgfD0gUEVSRl9IRVNfU1RPUFBFRDtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmM9MzYzPXZvaWQgYW1kX3BtdV9sYnJfZGVsKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudClcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmMtMzczLVxcdGNwdWMtXFx1MDAzZWxicl91c2Vycy0tO1xcbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmM6Mzc0OlxcdFdBUk5fT05fT05DRShjcHVjLVxcdTAwM2VsYnJfdXNlcnMgXFx1MDAzYyAwKTtcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jLTM3NS1cXHRwZXJmX3NjaGVkX2NiX2RlYyhldmVudC1cXHUwMDNlcG11KTtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvcG93ZXIuYz03NT1zdGF0aWMgdm9pZCBfX3BtdV9ldmVudF9zdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9wb3dlci5jLTc2LXtcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL3Bvd2VyLmM6Nzc6XFx0aWYgKFdBUk5fT05fT05DRSghKGV2ZW50LVxcdTAwM2Vody5zdGF0ZSBcXHUwMDI2IFBFUkZfSEVTX1NUT1BQRUQpKSlcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL3Bvd2VyLmMtNzgtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYz03OTY9c3RydWN0IHBtdSAqeDg2X2dldF9wbXUodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9jb3JlLmMtODAzLVxcdCAqL1xcbmFyY2gveDg2L2V2ZW50cy9jb3JlLmM6ODA0OlxcdGlmIChXQVJOX09OX09OQ0UoIWNwdWMtXFx1MDAzZXBtdSkpXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy04MDUtXFx0XFx0cmV0dXJuIFxcdTAwMjZwbXU7XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jPTg2Mj1zdGF0aWMgdm9pZCBwZXJmX3NjaGVkX3NhdmVfc3RhdGUoc3RydWN0IHBlcmZfc2NoZWQgKnNjaGVkKVxcbmFyY2gveDg2L2V2ZW50cy9jb3JlLmMtODYzLXtcXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjg2NDpcXHRpZiAoV0FSTl9PTl9PTkNFKHNjaGVkLVxcdTAwM2VzYXZlZF9zdGF0ZXMgXFx1MDAzZT0gU0NIRURfU1RBVEVTX01BWCkpXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy04NjUtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYz0xMDA4PWludCB4ODZfc2NoZWR1bGVfZXZlbnRzKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBpbnQgbiwgaW50ICphc3NpZ24pXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTEwMzUtXFx0XFx0ICovXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzoxMDM2OlxcdFxcdFdBUk5fT05fT05DRSgoYyBcXHUwMDI2XFx1MDAyNiBpIFxcdTAwM2U9IG4wKSB8fCAoIWMgXFx1MDAyNlxcdTAwMjYgaSBcXHUwMDNjIG4wKSk7XFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0xMDM3LVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYz0xNTUxPXN0YXRpYyB2b2lkIHg4Nl9wbXVfc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTE1NTUtXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzoxNTU2OlxcdGlmIChXQVJOX09OX09OQ0UoIShldmVudC1cXHUwMDNlaHcuc3RhdGUgXFx1MDAyNiBQRVJGX0hFU19TVE9QUEVEKSkpXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0xNTU3LVxcdFxcdHJldHVybjtcXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTE1NTgtXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzoxNTU5OlxcdGlmIChXQVJOX09OX09OQ0UoaWR4ID09IC0xKSlcXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTE1NjAtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0xNTYyLVxcdGlmIChmbGFncyBcXHUwMDI2IFBFUkZfRUZfUkVMT0FEKSB7XFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzoxNTYzOlxcdFxcdFdBUk5fT05fT05DRSghKGV2ZW50LVxcdTAwM2Vody5zdGF0ZSBcXHUwMDI2IFBFUkZfSEVTX1VQVE9EQVRFKSk7XFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0xNTY0LVxcdFxcdHN0YXRpY19jYWxsKHg4Nl9wbXVfc2V0X3BlcmlvZCkoZXZlbnQpO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYz0xNjM3PXZvaWQgeDg2X3BtdV9zdG9wKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0xNjQ0LVxcdFxcdF9fY2xlYXJfYml0KGh3Yy1cXHUwMDNlaWR4LCBjcHVjLVxcdTAwM2VhY3RpdmVfbWFzayk7XFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzoxNjQ1OlxcdFxcdFdBUk5fT05fT05DRShod2MtXFx1MDAzZXN0YXRlIFxcdTAwMjYgUEVSRl9IRVNfU1RPUFBFRCk7XFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0xNjQ2LVxcdFxcdGh3Yy1cXHUwMDNlc3RhdGUgfD0gUEVSRl9IRVNfU1RPUFBFRDtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9jb3JlLmM9MTY1OT1zdGF0aWMgdm9pZCB4ODZfcG11X2RlbChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncylcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9jb3JlLmMtMTY4OC1cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjE2ODk6XFx0aWYgKFdBUk5fT05fT05DRShpID09IGNwdWMtXFx1MDAzZW5fZXZlbnRzKSkgLyogY2FsbGVkIC1cXHUwMDNlZGVsKCkgd2l0aG91dCAtXFx1MDAzZWFkZCgpID8gKi9cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTE2OTAtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYz0yMzE5PXN0YXRpYyB2b2lkIHg4Nl9wbXVfc3RhcnRfdHhuKHN0cnVjdCBwbXUgKnBtdSwgdW5zaWduZWQgaW50IHR4bl9mbGFncylcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9jb3JlLmMtMjMyMi1cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjIzMjM6XFx0V0FSTl9PTl9PTkNFKGNwdWMtXFx1MDAzZXR4bl9mbGFncyk7XFx0XFx0LyogdHhuIGFscmVhZHkgaW4gZmxpZ2h0ICovXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0yMzI0LVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYz0yMzQwPXN0YXRpYyB2b2lkIHg4Nl9wbXVfY2FuY2VsX3R4bihzdHJ1Y3QgcG11ICpwbXUpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTIzNDQtXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzoyMzQ1OlxcdFdBUk5fT05fT05DRSghY3B1Yy1cXHUwMDNldHhuX2ZsYWdzKTtcXHQvKiBubyB0eG4gaW4gZmxpZ2h0ICovXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0yMzQ2LVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYz0yMzcwPXN0YXRpYyBpbnQgeDg2X3BtdV9jb21taXRfdHhuKHN0cnVjdCBwbXUgKnBtdSlcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9jb3JlLmMtMjM3NS1cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjIzNzY6XFx0V0FSTl9PTl9PTkNFKCFjcHVjLVxcdTAwM2V0eG5fZmxhZ3MpO1xcdC8qIG5vIHR4biBpbiBmbGlnaHQgKi9cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTIzNzctXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jPTMxNDQ9dm9pZCBwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHkoc3RydWN0IHg4Nl9wbXVfY2FwYWJpbGl0eSAqY2FwKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0zMTQ2LVxcdC8qIFRoaXMgQVBJIGRvZXNuJ3QgY3VycmVudGx5IHN1cHBvcnQgZW51bWVyYXRpbmcgaHlicmlkIFBNVXMuICovXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzozMTQ3OlxcdGlmIChXQVJOX09OX09OQ0UoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9IWUJSSURfQ1BVKSkgfHxcXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTMxNDgtXFx0ICAgICF4ODZfcG11X2luaXRpYWxpemVkKCkpIHtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9idHMuYz0zNDA9dm9pZCBpbnRlbF9idHNfZW5hYmxlX2xvY2FsKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvYnRzLmMtMzU0LVxcdCAqL1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9idHMuYzozNTU6XFx0aWYgKFdBUk5fT05fT05DRShzdGF0ZSA9PSBCVFNfU1RBVEVfQUNUSVZFKSlcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvYnRzLmMtMzU2LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9Mjc3Nz1zdGF0aWMgdm9pZCBfX2ludGVsX3BtdV9lbmFibGVfYWxsKGludCBhZGRlZCwgYm9vbCBwbWkpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTI3OTUtXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYzoyNzk2OlxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWV2ZW50KSlcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTI3OTctXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYz00MjgwPWludGVsX3N0YXJ0X3NjaGVkdWxpbmcoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTQyOTQtXFx0ICovXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYzo0Mjk1OlxcdGlmIChXQVJOX09OX09OQ0UoIWV4Y2xfY250cnMpKVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNDI5Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jPTQzMDk9c3RhdGljIHZvaWQgaW50ZWxfY29tbWl0X3NjaGVkdWxpbmcoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIGludCBpZHgsIGludCBjbnRyKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00MzE4LVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM6NDMxOTpcXHRpZiAoV0FSTl9PTl9PTkNFKCFleGNsX2NudHJzKSlcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTQzMjAtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYz00MzM2PWludGVsX3N0b3Bfc2NoZWR1bGluZyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YylcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNDM0OS1cXHQgKi9cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjQzNTA6XFx0aWYgKFdBUk5fT05fT05DRSghZXhjbF9jbnRycykpXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00MzUxLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9NDM2Mz1keW5fY29uc3RyYWludChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yywgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgKmMsIGludCBpZHgpXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00MzY0LXtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjQzNjU6XFx0V0FSTl9PTl9PTkNFKCFjcHVjLVxcdTAwM2Vjb25zdHJhaW50X2xpc3QpO1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNDM2Ni1cXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9NDM5Mj1pbnRlbF9nZXRfZXhjbF9jb25zdHJhaW50cyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yywgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00NDA5LVxcdCAqL1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM6NDQxMDpcXHRpZiAoV0FSTl9PTl9PTkNFKCFleGNsX2NudHJzKSlcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTQ0MTEtXFx0XFx0cmV0dXJuIGM7XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jPTQ0OTI9aW50ZWxfZ2V0X2V2ZW50X2NvbnN0cmFpbnRzKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBpbnQgaWR4LFxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00NTA1LVxcdGlmIChjMSkge1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM6NDUwNjpcXHQgICAgICAgIFdBUk5fT05fT05DRSghKGMxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFBFUkZfWDg2X0VWRU5UX0RZTkFNSUMpKTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTQ1MDctXFx0XFx0Yml0bWFwX2NvcHkoYzEtXFx1MDAzZWlkeG1zaywgYzItXFx1MDAzZWlkeG1zaywgWDg2X1BNQ19JRFhfTUFYKTtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9NDUyND1zdGF0aWMgdm9pZCBpbnRlbF9wdXRfZXhjbF9jb25zdHJhaW50cyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyxcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNDUzNy1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjQ1Mzg6XFx0aWYgKFdBUk5fT05fT05DRSghZXhjbF9jbnRycykpXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00NTM5LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9NjMzOD1zdGF0aWMgYm9vbCBpbml0X2h5YnJpZF9wbXUoaW50IGNwdSlcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNjM0Mi1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjYzNDM6XFx0aWYgKFdBUk5fT05fT05DRSghcG11IHx8IChwbXUtXFx1MDAzZXBtdS50eXBlID09IC0xKSkpIHtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTYzNDQtXFx0XFx0Y3B1Yy1cXHUwMDNlcG11ID0gTlVMTDtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9NjM3Mz1zdGF0aWMgdm9pZCBpbnRlbF9wbXVfY3B1X3N0YXJ0aW5nKGludCBjcHUpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTYzOTQtXFx0aWYgKHg4Nl9wbXUuZmxhZ3MgXFx1MDAyNiBQTVVfRkxfVEZBKSB7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYzo2Mzk1OlxcdFxcdFdBUk5fT05fT05DRShjcHVjLVxcdTAwM2V0ZmFfc2hhZG93KTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTYzOTYtXFx0XFx0Y3B1Yy1cXHUwMDNldGZhX3NoYWRvdyA9IH4wVUxMO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYz02NzY1PXN0YXRpYyBfX2luaXQgdm9pZCBpbnRlbF9wZWJzX2lzb2xhdGlvbl9xdWlyayh2b2lkKVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNjc2Ni17XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYzo2NzY3OlxcdFdBUk5fT05fT05DRSh4ODZfcG11LmNoZWNrX21pY3JvY29kZSk7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy02NzY4LVxcdHg4Nl9wbXUuY2hlY2tfbWljcm9jb2RlID0gaW50ZWxfY2hlY2tfcGVic19pc29sYXRpb247XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYz00NTU9c3RhdGljIHU2NCBfX2dydF9sYXRlbmN5X2RhdGEoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1NjQgc3RhdHVzLFxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMtNDU5LVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jOjQ2MDpcXHRXQVJOX09OX09OQ0UoaXNfaHlicmlkKCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYy00NjEtXFx0XFx0ICAgICBoeWJyaWRfcG11KGV2ZW50LVxcdTAwM2VwbXUpLVxcdTAwM2VwbXVfdHlwZSA9PSBoeWJyaWRfYmlnKTtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jPTI5NDc9c3RhdGljIHZvaWQgaW50ZWxfcG11X2RyYWluX3BlYnNfY29yZShzdHJ1Y3QgcHRfcmVncyAqaXJlZ3MsIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMtMjk2OC1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYzoyOTY5OlxcdFdBUk5fT05fT05DRSghZXZlbnQpO1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jLTI5NzAtXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYz0zMDA1PXN0YXRpYyB2b2lkIGludGVsX3BtdV9kcmFpbl9wZWJzX25obShzdHJ1Y3QgcHRfcmVncyAqaXJlZ3MsIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMtMzA5OC1cXHRcXHRldmVudCA9IGNwdWMtXFx1MDAzZWV2ZW50c1tiaXRdO1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jOjMwOTk6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghZXZlbnQpKVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jLTMxMDAtXFx0XFx0XFx0Y29udGludWU7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMtMzEwMS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYzozMTAyOlxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWV2ZW50LVxcdTAwM2VhdHRyLnByZWNpc2VfaXApKVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jLTMxMDMtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYz0zMTIyPV9faW50ZWxfcG11X2hhbmRsZV9wZWJzX3JlY29yZChzdHJ1Y3QgcHRfcmVncyAqaXJlZ3MsXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYy0zMTM1LVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jOjMxMzY6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghZXZlbnQpIHx8XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM6MzEzNzpcXHRcXHQgICAgV0FSTl9PTl9PTkNFKCFldmVudC1cXHUwMDNlYXR0ci5wcmVjaXNlX2lwKSlcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYy0zMTM4LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM9MzIyMj1zdGF0aWMgdm9pZCBpbnRlbF9wbXVfZHJhaW5fYXJjaF9wZWJzKHN0cnVjdCBwdF9yZWdzICppcmVncyxcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jLTMyNjUtXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM6MzI2NjpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFoZWFkZXItXFx1MDAzZXNpemUpKVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jLTMyNjctXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM9NjYxPXZvaWQgaW50ZWxfcG11X2xicl9kZWwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTY4Ny1cXHRjcHVjLVxcdTAwM2VsYnJfdXNlcnMtLTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM6Njg4OlxcdFdBUk5fT05fT05DRShjcHVjLVxcdTAwM2VsYnJfdXNlcnMgXFx1MDAzYyAwKTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM6Njg5OlxcdFdBUk5fT05fT05DRShjcHVjLVxcdTAwM2VsYnJfcGVic191c2VycyBcXHUwMDNjIDApO1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYy02OTAtXFx0cGVyZl9zY2hlZF9jYl9kZWMoZXZlbnQtXFx1MDAzZXBtdSk7XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM9OTUxPXN0YXRpYyB2b2lkIGludGVsX3BtdV9sYnJfY291bnRlcnNfcmVvcmRlcihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyxcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYy05NjctXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jOjk2ODpcXHRXQVJOX09OX09OQ0UoIXBvcyk7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTk2OS1cXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wNC5jPTk1Mj1zdGF0aWMgdm9pZCBfX3A0X3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3A0LmMtOTY3LVxcdCAqL1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wNC5jOjk2ODpcXHRXQVJOX09OX09OQ0UocDRfaXNfZXZlbnRfY2FzY2FkZWQoaHdjLVxcdTAwM2Vjb25maWcpKTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcDQuYzo5Njk6XFx0V0FSTl9PTl9PTkNFKGh3Yy1cXHUwMDNlaWR4ID09IDEpO1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wNC5jLTk3MC1cXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wNC5jPTEwMzQ9c3RhdGljIGludCBwNF9wbXVfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wNC5jLTEwNTctXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3A0LmM6MTA1ODpcXHRcXHRXQVJOX09OX09OQ0UoaHdjLVxcdTAwM2VpZHggIT0gaWR4KTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcDQuYy0xMDU5LVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmM9MTAxMT1wdF90b3BhX2VudHJ5X2Zvcl9wYWdlKHN0cnVjdCBwdF9idWZmZXIgKmJ1ZiwgdW5zaWduZWQgaW50IHBnKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmMtMTAxOS1cXHQgKi9cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYzoxMDIwOlxcdGlmIChXQVJOX09OX09OQ0UocGcgXFx1MDAzZT0gYnVmLVxcdTAwM2Vucl9wYWdlcykpXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmMtMTAyMS1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTEwMzUtXFx0ICovXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmM6MTAzNjpcXHRXQVJOX09OX09OQ0UoMSk7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmMtMTAzNy1cXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTEwNDMtXFx0ICovXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmM6MTA0NDpcXHRpZiAoV0FSTl9PTl9PTkNFKHRvcGEtXFx1MDAzZWxhc3QgPT0gLTEpKVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTEwNDUtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYy0xMDc1LVxcdCAqL1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jOjEwNzY6XFx0V0FSTl9PTl9PTkNFKDEpO1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTEwNzctXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYz0xNjcxPXN0YXRpYyB2b2lkIHB0X2V2ZW50X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgbW9kZSlcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTE3MTctXFx0aWYgKChtb2RlIFxcdTAwMjYgUEVSRl9FRl9VUERBVEUpIHx8ICFidWYtXFx1MDAzZXNuYXBzaG90KSB7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmM6MTcxODpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKHB0LVxcdTAwM2VoYW5kbGUuZXZlbnQgIT0gZXZlbnQpKVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTE3MTktXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmM9MTczNj1zdGF0aWMgbG9uZyBwdF9ldmVudF9zbmFwc2hvdF9hdXgoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmMtMTc0NC1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYzoxNzQ1OlxcdGlmIChXQVJOX09OX09OQ0UoIWJ1ZikpXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmMtMTc0Ni1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTE3NTEtXFx0ICovXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmM6MTc1MjpcXHRpZiAoV0FSTl9PTl9PTkNFKCFidWYtXFx1MDAzZXNuYXBzaG90KSlcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYy0xNzUzLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jPTUyMz12b2lkIHVuY29yZV9wbXVfZXZlbnRfc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmMtNTI3LVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYzo1Mjg6XFx0aWYgKFdBUk5fT05fT05DRShpZHggPT0gLTEgfHwgaWR4IFxcdTAwM2U9IFVOQ09SRV9QTUNfSURYX01BWCkpXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jLTUyOS1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmMtNTQ1LVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYzo1NDY6XFx0aWYgKFdBUk5fT05fT05DRSghKGV2ZW50LVxcdTAwM2Vody5zdGF0ZSBcXHUwMDI2IFBFUkZfSEVTX1NUT1BQRUQpKSlcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmMtNTQ3LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYz01NjE9dm9pZCB1bmNvcmVfcG11X2V2ZW50X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmMtNTc4LVxcdFxcdGJveC1cXHUwMDNlZXZlbnRzW2h3Yy1cXHUwMDNlaWR4XSA9IE5VTEw7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jOjU3OTpcXHRcXHRXQVJOX09OX09OQ0UoaHdjLVxcdTAwM2VzdGF0ZSBcXHUwMDI2IFBFUkZfSEVTX1NUT1BQRUQpO1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYy01ODAtXFx0XFx0aHdjLVxcdTAwM2VzdGF0ZSB8PSBQRVJGX0hFU19TVE9QUEVEO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jPTExOTg9c3RhdGljIGludCB1bmNvcmVfcGNpX3BtdV9yZWdpc3RlcihzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYy0xMjA1LVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYzoxMjA2OlxcdGlmIChXQVJOX09OX09OQ0UocG11LVxcdTAwM2Vib3hlc1tkaWVdICE9IE5VTEwpKVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYy0xMjA3LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jPTE1MTQ9c3RhdGljIHZvaWQgdW5jb3JlX2NoYW5nZV90eXBlX2N0eChzdHJ1Y3QgaW50ZWxfdW5jb3JlX3R5cGUgKnR5cGUsIGludCBvbGRfY3B1LFxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jLTE1MjctXFx0XFx0aWYgKG9sZF9jcHUgXFx1MDAzYyAwKSB7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jOjE1Mjg6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKGJveC1cXHUwMDNlY3B1ICE9IC0xKTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmMtMTUyOS1cXHRcXHRcXHRpZiAodW5jb3JlX2RpZV9oYXNfYm94KHR5cGUsIGRpZSwgcG11LVxcdTAwM2VwbXVfaWR4KSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jLTE1MzYtXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jOjE1Mzc6XFx0XFx0V0FSTl9PTl9PTkNFKGJveC1cXHUwMDNlY3B1ICE9IC0xIFxcdTAwMjZcXHUwMDI2IGJveC1cXHUwMDNlY3B1ICE9IG9sZF9jcHUpO1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYy0xNTM4LVxcdFxcdGNwdW1hc2tfY2xlYXJfY3B1KG9sZF9jcHUsIFxcdTAwMjZwbXUtXFx1MDAzZWNwdV9tYXNrKTtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmVfbmhtZXguYz01NTY9c3RhdGljIGJvb2wgbmhtZXhfbWJveF9nZXRfc2hhcmVkX3JlZyhzdHJ1Y3QgaW50ZWxfdW5jb3JlX2JveCAqYm94LCBpbnQgaWR4LCB1NjQgY29uZmlnKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jLTU4MC1cXHRpZHggLT0gRVhUUkFfUkVHX05ITUVYX01fWkRQX0NUTF9GVkM7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jOjU4MTpcXHRpZiAoV0FSTl9PTl9PTkNFKGlkeCBcXHUwMDNlPSA0KSlcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlX25obWV4LmMtNTgyLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmVfbmhtZXguYz03Njg9c3RhdGljIGludCBuaG1leF9tYm94X2h3X2NvbmZpZyhzdHJ1Y3QgaW50ZWxfdW5jb3JlX2JveCAqYm94LCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlX25obWV4LmMtNzg3LVxcdFxcdG1zciA9IGVyLVxcdTAwM2Vtc3IgKyB0eXBlLVxcdTAwM2Vtc3Jfb2Zmc2V0ICogYm94LVxcdTAwM2VwbXUtXFx1MDAzZXBtdV9pZHg7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jOjc4ODpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKG1zciBcXHUwMDNlPSAweGZmZmYgfHwgZXItXFx1MDAzZWlkeCBcXHUwMDNlPSAweGZmKSlcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlX25obWV4LmMtNzg5LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jLTc5My1cXHRcXHRcXHRyZWdfaWR4ID0gMTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlX25obWV4LmM6Nzk0OlxcdFxcdGVsc2UgaWYgKFdBUk5fT05fT05DRShyZWdfaWR4IFxcdTAwM2UgMCkpXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jLTc5NS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9wZXJmX2V2ZW50Lmg9MTUxMz1zdGF0aWMgaW5saW5lIHZvaWQgYW1kX3BtdV9icnNfZGVsKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudClcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9wZXJmX2V2ZW50LmgtMTUxNy1cXHRjcHVjLVxcdTAwM2VsYnJfdXNlcnMtLTtcXG5hcmNoL3g4Ni9ldmVudHMvcGVyZl9ldmVudC5oOjE1MTg6XFx0V0FSTl9PTl9PTkNFKGNwdWMtXFx1MDAzZWxicl91c2VycyBcXHUwMDNjIDApO1xcbmFyY2gveDg2L2V2ZW50cy9wZXJmX2V2ZW50LmgtMTUxOS1cXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9yYXBsLmM9MjgxPXN0YXRpYyB2b2lkIF9fcmFwbF9wbXVfZXZlbnRfc3RhcnQoc3RydWN0IHJhcGxfcG11ICpyYXBsX3BtdSxcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9yYXBsLmMtMjgzLXtcXG5hcmNoL3g4Ni9ldmVudHMvcmFwbC5jOjI4NDpcXHRpZiAoV0FSTl9PTl9PTkNFKCEoZXZlbnQtXFx1MDAzZWh3LnN0YXRlIFxcdTAwMjYgUEVSRl9IRVNfU1RPUFBFRCkpKVxcbmFyY2gveDg2L2V2ZW50cy9yYXBsLmMtMjg1LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9yYXBsLmM9MzA4PXN0YXRpYyB2b2lkIHJhcGxfcG11X2V2ZW50X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgbW9kZSlcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9yYXBsLmMtMzE3LVxcdGlmICghKGh3Yy1cXHUwMDNlc3RhdGUgXFx1MDAyNiBQRVJGX0hFU19TVE9QUEVEKSkge1xcbmFyY2gveDg2L2V2ZW50cy9yYXBsLmM6MzE4OlxcdFxcdFdBUk5fT05fT05DRShyYXBsX3BtdS1cXHUwMDNlbl9hY3RpdmUgXFx1MDAzYz0gMCk7XFxuYXJjaC94ODYvZXZlbnRzL3JhcGwuYy0zMTktXFx0XFx0cmFwbF9wbXUtXFx1MDAzZW5fYWN0aXZlLS07XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvcmFwbC5jLTMyNC1cXG5hcmNoL3g4Ni9ldmVudHMvcmFwbC5jOjMyNTpcXHRcXHRXQVJOX09OX09OQ0UoaHdjLVxcdTAwM2VzdGF0ZSBcXHUwMDI2IFBFUkZfSEVTX1NUT1BQRUQpO1xcbmFyY2gveDg2L2V2ZW50cy9yYXBsLmMtMzI2LVxcdFxcdGh3Yy1cXHUwMDNlc3RhdGUgfD0gUEVSRl9IRVNfU1RPUFBFRDtcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmM9MTE4PXN0YXRpYyBpbnQgaHZfY3B1X2luaXQodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmMtMTU4LVxcdFxcdFxcdGlmICgqaHZwIFxcdTAwMjZcXHUwMDI2ICFtc19oeXBlcnYucGFyYXZpc29yX3ByZXNlbnQgXFx1MDAyNlxcdTAwMjYgaHZfaXNvbGF0aW9uX3R5cGVfc25wKCkpIHtcXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jOjE1OTpcXHRcXHRcXHRcXHRXQVJOX09OX09OQ0Uoc2V0X21lbW9yeV9kZWNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpKCpodnApLCAxKSk7XFxuYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuYy0xNjAtXFx0XFx0XFx0XFx0bWVtc2V0KCpodnAsIDAsIFBBR0VfU0laRSk7XFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvaXJxZG9tYWluLmM9MzYxPXN0YXRpYyB2b2lkIGh2X21zaV9kb21haW5fZnJlZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZCwgdW5zaWduZWQgaW50IHZpcnEsXFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvaXJxZG9tYWluLmMtMzY4LVxcdFxcdGRlc2MgPSBpcnFfZGF0YV9nZXRfbXNpX2Rlc2MoaXJxZCk7XFxuYXJjaC94ODYvaHlwZXJ2L2lycWRvbWFpbi5jOjM2OTpcXHRcXHRpZiAoIWRlc2MgfHwgIWRlc2MtXFx1MDAzZWlycSB8fCBXQVJOX09OX09OQ0UoIWRldl9pc19wY2koZGVzYy1cXHUwMDNlZGV2KSkpXFxuYXJjaC94ODYvaHlwZXJ2L2lycWRvbWFpbi5jLTM3MC1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYz02MzI9c3RhdGljIHZvaWQgaHZfdnRvbV9rZXhlY19maW5pc2godm9pZClcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYy02NTgtXFx0XFx0XFx0XFx0XFx0Y3VyLCAwLCBpbnB1dCwgTlVMTCk7XFxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jOjY1OTpcXHRcXHRcXHRcXHRXQVJOX09OX09OQ0UoIWh2X3Jlc3VsdF9zdWNjZXNzKGh2X3N0YXR1cykpO1xcbmFyY2gveDg2L2h5cGVydi9pdm0uYy02NjAtXFx0XFx0XFx0XFx0Y3VyID0gMDtcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYz02Nzc9c3RhdGljIGludCBodl9tYXJrX2dwYV92aXNpYmlsaXR5KHUxNiBjb3VudCwgY29uc3QgdTY0IHBmbltdLFxcbi0tXFxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTczMC1cXHQgKi9cXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmM6NzMxOlxcdFdBUk5fT05fT05DRShyZXQpO1xcbmFyY2gveDg2L2h5cGVydi9pdm0uYy03MzItXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmg9NDg3PXN0YXRpYyBpbmxpbmUgdTMyIHNhZmVfYXBpY193YWl0X2ljcl9pZGxlKHZvaWQpIHsgcmV0dXJuIDA7IH1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmg6NDg4OnN0YXRpYyBpbmxpbmUgdm9pZCBhcGljX25hdGl2ZV9lb2kodm9pZCkgeyBXQVJOX09OX09OQ0UoMSk7IH1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgtNDg5LXN0YXRpYyBpbmxpbmUgdm9pZCBhcGljX3NldHVwX2FwaWNfY2FsbHModm9pZCkgeyB9XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaD0xMz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYXJjaF9lbnRlcl9mcm9tX3VzZXJfbW9kZShzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oLTMwLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oOjMxOlxcdFxcdFdBUk5fT05fT05DRShmbGFncyBcXHUwMDI2IG1hc2spO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oLTMyLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oLTMzLVxcdFxcdC8qIFdlIHRoaW5rIHdlIGNhbWUgZnJvbSB1c2VyIG1vZGUuIE1ha2Ugc3VyZSBwdF9yZWdzIGFncmVlcy4gKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaDozNDpcXHRcXHRXQVJOX09OX09OQ0UoIXVzZXJfbW9kZShyZWdzKSk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmgtMzUtXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaC00MC1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaDo0MTpcXHRcXHRXQVJOX09OX09OQ0UoIW9uX3RocmVhZF9zdGFjaygpKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaDo0MjpcXHRcXHRXQVJOX09OX09OQ0UocmVncyAhPSB0YXNrX3B0X3JlZ3MoY3VycmVudCkpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oLTQzLVxcdH1cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaD03MzA9c3RhdGljIGlubGluZSBwdGVfdCBwZm5fcHRlKHVuc2lnbmVkIGxvbmcgcGFnZV9uciwgcGdwcm90X3QgcGdwcm90KVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTczMy1cXHQvKiBUaGlzIGJpdCBjb21iaW5hdGlvbiBpcyB1c2VkIHRvIG1hcmsgc2hhZG93IHN0YWNrcyAqL1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDo3MzQ6XFx0V0FSTl9PTl9PTkNFKChwZ3Byb3RfdmFsKHBncHJvdCkgXFx1MDAyNiAoX1BBR0VfRElSVFkgfCBfUEFHRV9SVykpID09XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTczNS1cXHRcXHRcXHRfUEFHRV9ESVJUWSk7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTcwMz1ib29sIGFyY2hfaXNfcGxhdGZvcm1fcGFnZSh1NjQgcGFkZHIpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE3MTYtKHsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxNzE3OlxcdFdBUk5fT05fT05DRShwdGVfcHJlc2VudCgqcHRlcCkgXFx1MDAyNlxcdTAwMjYgIXB0ZV9zYW1lKCpwdGVwLCBwdGUpKTsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNzE4LVxcdHNldF9wdGUocHRlcCwgcHRlKTsgXFxcXFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE3MjItKHsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxNzIzOlxcdFdBUk5fT05fT05DRShwbWRfcHJlc2VudCgqcG1kcCkgXFx1MDAyNlxcdTAwMjYgIXBtZF9zYW1lKCpwbWRwLCBwbWQpKTsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNzI0LVxcdHNldF9wbWQocG1kcCwgcG1kKTsgXFxcXFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE3MjgtKHsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxNzI5OlxcdFdBUk5fT05fT05DRShwdWRfcHJlc2VudCgqcHVkcCkgXFx1MDAyNlxcdTAwMjYgIXB1ZF9zYW1lKCpwdWRwLCBwdWQpKTsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNzMwLVxcdHNldF9wdWQocHVkcCwgcHVkKTsgXFxcXFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE3MzQtKHsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxNzM1OlxcdFdBUk5fT05fT05DRShwNGRfcHJlc2VudCgqcDRkcCkgXFx1MDAyNlxcdTAwMjYgIXA0ZF9zYW1lKCpwNGRwLCBwNGQpKTsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNzM2LVxcdHNldF9wNGQocDRkcCwgcDRkKTsgXFxcXFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE3NDAtKHsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxNzQxOlxcdFdBUk5fT05fT05DRShwZ2RfcHJlc2VudCgqcGdkcCkgXFx1MDAyNlxcdTAwMjYgIXBnZF9zYW1lKCpwZ2RwLCBwZ2QpKTsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNzQyLVxcdHNldF9wZ2QocGdkcCwgcGdkKTsgXFxcXFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcG9zdGVkX2ludHIuaD0xNzA9c3RhdGljIGlubGluZSBib29sIHBpX3BlbmRpbmdfdGhpc19jcHUodW5zaWduZWQgaW50IHZlY3RvcilcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Bvc3RlZF9pbnRyLmgtMTczLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Bvc3RlZF9pbnRyLmg6MTc0OlxcdGlmIChXQVJOX09OX09OQ0UodmVjdG9yIFxcdTAwM2UgTlJfVkVDVE9SUyB8fCB2ZWN0b3IgXFx1MDAzYyBGSVJTVF9FWFRFUk5BTF9WRUNUT1IpKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Bvc3RlZF9pbnRyLmgtMTc1LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToxOTowNi40MDUyNjEyMzJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODA1ODI5OTQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgS2VybmVsIE1TUiBBY2Nlc3MgYW5kIFBvdGVudGlhbCBCdWdzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBsb29raW5nIGF0IGBhcmNoL3g4Ni9tbS9leHRhYmxlLmNgIHJpZ2h0IG5vdywgc3BlY2lmaWNhbGx5IHRoZSBgZXhfaGFuZGxlcl9tc3JgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIHNlY3Rpb24gaXMgY3JpdGljYWwgZm9yIGhhbmRsaW5nIGV4Y2VwdGlvbnMgcmVsYXRlZCB0byBNb2RlbCBTcGVjaWZpYyBSZWdpc3RlciAoTVNSKSBhY2Nlc3MsIHdoaWNoIGlzIGEgc2Vuc2l0aXZlIGFyZWEuIFRoZSBjb2RlIGlzIGNsZWFybHkgY2hlY2tpbmcgZm9yIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBib3RoIGBXUk1TUmAgKHdyaXRlKSBhbmQgYFJETVNSYCAocmVhZCkgaW5zdHJ1Y3Rpb25zLCBlc3BlY2lhbGx5IHdoZW4gdGhlIGFjY2VzcyBpc24ndCBkZWVtZWQgXCJzYWZlLlwiIFRoZSBgX19PTkNFX0xJVEVfSUZgIG1hY3JvIGlzIGludGVyZXN0aW5nOyBpdCBzdWdnZXN0cyB0aGlzIGNoZWNrIGlzIG9wdGltaXplZCBmb3IgcGVyZm9ybWFuY2UsIGJ1dCBvbmx5IHBlcmZvcm1zIHRoZSBjaGVjayBvbmNlIGluIGEgd2hpbGUuIFRoZSBgcHJfd2FybmAgY2FsbHMgYXJlIGNvbmNlcm5pbmcsIG9mIGNvdXJzZSwgYXMgdGhleSBpbmRpY2F0ZSBhIHBvdGVudGlhbCB1bmNoZWNrZWQgTVNSIGFjY2VzcyBlcnJvciBpcyBoYXBwZW5pbmcuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHJlZ2lzdGVyIHN0YXRlIChgc3RydWN0IHB0X3JlZ3MgKnJlZ3NgKSwgdGhlIHNhZmV0eSBmbGFnLCBhbmQgd2hldGhlciBpdCdzIGEgcmVhZCBvciB3cml0ZSBvcGVyYXRpb24gKGB3cm1zcmApIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2Ugd2FybmluZ3MuIFRoZSBsb2dnZWQgTVNSIGFkZHJlc3MgYW5kIGluc3RydWN0aW9uIHBvaW50ZXIgKGBySVBgKSBhcmUgZXNzZW50aWFsIGZvciBkZWJ1Z2dpbmcgc2hvdWxkIGEgd2FybmluZyBiZSBlbmNvdW50ZXJlZC4gTm93LCBJJ20gZ29pbmcgdG8gc2hpZnQgbXkgZm9jdXMgdG8gYGluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmhgIOKAkyBJIG5lZWQgdG8gY2hlY2sgdGhlIGdlbmVyaWMgYnVnIGhhbmRsaW5nIG1lY2hhbmlzbXMgdG8gdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgd2hlbiBvbmUgb2YgdGhlc2UgTVNSIGFjY2VzcyBpc3N1ZXMgdHJpcHMgYSBidWcuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZXNlIHR3byBmaWxlcyBpcyBrZXkgdG8gYXNzZXNzaW5nIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBzeXN0ZW0gd2l0aCByZXNwZWN0IHRvIE1TUiBhY2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTc4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE1OjE5OjE0LjQ2MzU2MzgzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcwOlxcdFxcbiAxNzE6XFx0I2RlZmluZSBXQVJOX1RBSU5UKGNvbmRpdGlvbiwgdGFpbnQsIGZvcm1hdC4uLikgKHtcXHRcXHRcXHRcXFxcXFxuIDE3MjpcXHRcXHRpbnQgX19yZXRfd2Fybl9vbiA9ICEhKGNvbmRpdGlvbik7XFx0XFx0XFx0XFx0XFxcXFxcbiAxNzM6XFx0XFx0aWYgKHVubGlrZWx5KF9fcmV0X3dhcm5fb24pKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMTc0OlxcdFxcdFxcdF9fV0FSTl9wcmludGYodGFpbnQsIGZvcm1hdCk7XFx0XFx0XFx0XFx0XFxcXFxcbiAxNzU6XFx0XFx0dW5saWtlbHkoX19yZXRfd2Fybl9vbik7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxNzY6XFx0fSlcXG4gMTc3OlxcdFxcbiAxNzg6XFx0I2lmbmRlZiBXQVJOX09OX09OQ0VcXG4gMTc5OlxcdCNkZWZpbmUgV0FSTl9PTl9PTkNFKGNvbmRpdGlvbilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDE4MDpcXHRcXHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOX09OLCAxKVxcbiAxODE6XFx0I2VuZGlmXFxuIDE4MjpcXHRcXG4gMTgzOlxcdCNpZm5kZWYgV0FSTl9PTkNFXFxuIDE4NDpcXHQjZGVmaW5lIFdBUk5fT05DRShjb25kaXRpb24sIGZvcm1hdC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuIDE4NTpcXHRcXHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOLCAxLCBmb3JtYXQpXFxuIDE4NjpcXHQjZW5kaWZcXG4gMTg3OlxcdFxcbiAxODg6XFx0I2RlZmluZSBXQVJOX1RBSU5UX09OQ0UoY29uZGl0aW9uLCB0YWludCwgZm9ybWF0Li4uKVxcdFxcdFxcXFxcXG4gMTg5OlxcdFxcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk5fVEFJTlQsIDEsIHRhaW50LCBmb3JtYXQpXFxuIDE5MDpcXHRcXG4gMTkxOlxcdCNlbHNlIC8qICFDT05GSUdfQlVHICovXFxuIDE5MjpcXHQjaWZuZGVmIEhBVkVfQVJDSF9CVUdcXG4gMTkzOlxcdCNkZWZpbmUgQlVHKCkgZG8ge1xcdFxcdFxcXFxcXG4gMTk0OlxcdFxcdGRvIHt9IHdoaWxlICgxKTtcXHRcXFxcXFxuIDE5NTpcXHRcXHR1bnJlYWNoYWJsZSgpO1xcdFxcdFxcXFxcXG4gMTk2OlxcdH0gd2hpbGUgKDApXFxuIDE5NzpcXHQjZW5kaWZcXG4gMTk4OlxcdFxcbiAxOTk6XFx0I2lmbmRlZiBIQVZFX0FSQ0hfQlVHX09OXFxuIDIwMDpcXHQjZGVmaW5lIEJVR19PTihjb25kaXRpb24pIGRvIHsgaWYgKHVubGlrZWx5KGNvbmRpdGlvbikpIEJVRygpOyB9IHdoaWxlICgwKVxcbiAyMDE6XFx0I2VuZGlmXFxuIDIwMjpcXHRcXG4gMjAzOlxcdCNpZm5kZWYgSEFWRV9BUkNIX1dBUk5fT05cXG4gMjA0OlxcdCNkZWZpbmUgV0FSTl9PTihjb25kaXRpb24pICh7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMDU6XFx0XFx0aW50IF9fcmV0X3dhcm5fb24gPSAhIShjb25kaXRpb24pO1xcdFxcdFxcdFxcdFxcXFxcXG4gMjA2OlxcdFxcdHVubGlrZWx5KF9fcmV0X3dhcm5fb24pO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMjA3OlxcdH0pXFxuIDIwODpcXHQjZW5kaWZcXG4gMjA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToxOToxNC40NjM2Mzk4OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzM1NDUwMzMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBPbmNlLU9ubHkgUHJpbnQgTWFjcm9zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZXNlIG1hY3JvczogYFdBUk5fT05fT05DRWAsIGBXQVJOX09OQ0VgLCBhbmQgYFdBUk5fVEFJTlRfT05DRWAuIFRoZXkncmUgYWxsIGRlZmluZWQgaW4gYGFzbS1nZW5lcmljL2J1Zy5oYCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhleSBsZXZlcmFnZSBgRE9fT05DRV9MSVRFX0lGYC4gUmlnaHQsIGFuZCBgRE9fT05DRV9MSVRFX0lGYCBpbiB0dXJuIHVzZXMgYF9fT05DRV9MSVRFX0lGYC4gIEhtbSwgc2VlbXMgbGlrZSBhIHBhdHRlcm4gaGVyZSBmb3IgXCJwcmludCB0aGlzIG1lc3NhZ2Ugb25jZSBhbmQgb25seSBvbmNlXCIuIFRoZW4gdGhlcmUncyBgcHJpbnRrX29uY2VgLCB3aGljaCB1c2VzIGBET19PTkNFX0xJVEVgLCBhbmQgZXZlbiBgZXhfaGFuZGxlcl9tc3JgIGlzIGluIG9uIHRoZSBhY3Rpb24gdXNpbmcgYF9fT05DRV9MSVRFX0lGYC4gSW50ZXJlc3RpbmcuICBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaGlzdG9yeSBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlaXIgaW50cm9kdWN0aW9uIGFuZCB1c2FnZSwgc28gdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNvbnN1bHQgdGhlIGdpdCBjb21taXQgbG9nLCBwcm9iYWJseSBieSBjaGVja2luZyB0aGUgY29udGV4dCBvZiB0aGUgZmlsZXMsIHRvIGZpbmQgdGhlIGNvbW1pdCB3aGVyZSB0aGVzZSB3ZXJlIGZpcnN0IGludHJvZHVjZWQgdG8gdXBzdHJlYW0gTGludXguIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGV5J3JlIGFjdHVhbGx5IHRyeWluZyB0byBhY2hpZXZlIGFuZCBhbnkgcG90ZW50aWFsIGdvdGNoYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzg1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTU6MTk6MzEuODE4MTQ2MjUyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkyMTA5OTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBfX09OQ0VfTElURVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTEyLVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MTM6I2RlZmluZSBfX09OQ0VfTElURSgpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMTQtXFx0KHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTI0LVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MjU6I2RlZmluZSBfX09OQ0VfTElURV9JRihjb25kaXRpb24pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMjYtXFx0KHVubGlrZWx5KGNvbmRpdGlvbikgXFx1MDAyNlxcdTAwMjYgX19PTkNFX0xJVEUoKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTU6MTk6MzMuODEwMjY1Mzc3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1MDQ3NDM2NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRXZhbHVhdGlvbjogb25jZV9saXRlLmggTWFjcm8gUmVmYWN0b3JpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIGBfX09OQ0VfTElURSgpYCBhbmQgYF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilgIG1hY3JvcyBpbiBgaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaGAgYXJlIGZvdW5kYXRpb25hbCDigJMgdGhleSBzcGF3biBhIGxvdCBvZiBvdGhlciBpbXBvcnRhbnQgY29uc3RydWN0cyBsaWtlIGBET19PTkNFX0xJVEVgLCBgV0FSTl9PTl9PTkNFYCwgYW5kIHNvIG9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIFwiSXMgdGhpcyBtYWNybyBhIGJpZyBkZWFsLCBpcyBpdCB3aWRlbHkgdXNlZD9cIiwgYW5kIHRoZSBhbnN3ZXIgaXMgeWVzLCB2ZXJ5LiBUaGlzIG1lYW5zIHRoaXMgY2hhbmdlIGhhcyBwb3RlbnRpYWxseSBmYXItcmVhY2hpbmcgY29uc2VxdWVuY2VzIGFjcm9zcyB0aGUga2VybmVsLlxuXG5Ob3csIGxldCdzIGNhcmVmdWxseSBhcHBseSB0aGUgZXN0YWJsaXNoZWQgZnV6emluZyBndWlkZWxpbmVzLiBSZWFjaGFiaWxpdHkgaXMgdGhlIGNvcmUgY29uY2VwdCwgc28gbGV0J3MgZm9jdXMgb24gaWYgdGhlIGNvZGUgaXMgYWN0dWFsbHkgKmV4ZWN1dGVkKi4gRnJvbSB0aGUgZ3VpZGVsaW5lcywgSSBrbm93IEkgY2FuJ3QgdGFrZSBjbGFpbXMgb2YgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIGF0IGZhY2UgdmFsdWUsIHJlZmFjdG9yaW5ncyBhcmUgb2Z0ZW4gd2hlcmUgdGhlIHN1YnRsZSBidWdzIGhpZGUsIHNvIHRoaXMgaXMgY3JpdGljYWwuIEl0J3MgYSByZWZhY3RvcmluZyBvZiBgX19PTkNFX0xJVEVfSUYoY29uZGl0aW9uKWAgdG8gc2VwYXJhdGUgdGhlIGBfX09OQ0VfTElURSgpYCBsb2dpYyBhbmQgcmVkZWZpbmUgYF9fT05DRV9MSVRFX0lGYCB0byB3cmFwIGl0IGluIGFuIGB1bmxpa2VseShjb25kaXRpb24pYC4gVGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGNoYW5nZXMgaW4gYWxsIHRoZSBjYWxsZXJzLCBzbyBJJ20gYWxyZWFkeSBpbiBcImZ1enogdGhpc1wiIHRlcnJpdG9yeS5cblxuU2luY2UgdGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBhbmQgKmV4ZWN1dGFibGUqIGNvZGUsIHRoZSBhbnN3ZXIgaXMgKnllcyosIHRoaXMgcGF0Y2ggKmRvZXMqIG1vZGlmeSByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLiBUaGlzIHdhcnJhbnRzIGZ1enppbmcuIFRoZSBndWlkZWxpbmVzIGluc3RydWN0IG1lIHRvIGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIGBGb2N1c1N5bWJvbHNgIHRvIHByZXZlbnQgdGhlIGZ1enplciBmcm9tIGJlaW5nIGRpbHV0ZWQuIE5vIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGZ1bmN0aW9ucyBzaG91bGQgYmUgbGlzdGVkLCBzbyBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzLCBwYWdlIGZhdWx0LCBldGMuIGFyZSByaWdodCBvdXQuIEkgbmVlZCB0byBnZXQgYXMgc3BlY2lmaWMgYXMgcG9zc2libGUuIFRoZSBwcmltYXJ5IGNoYW5nZXMgYXJlIGluIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGluIHRoZSAuaCBmaWxlLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlciBmdW5jdGlvbnMgdGhhdCBhY3R1YWxseSAqdXNlKiB0aGVtLiBJJ3ZlIGFscmVhZHkgZG9uZSB0aGF0IGJ5IGlkZW50aWZ5aW5nIGBET19PTkNFX0xJVEVgIC8gYF9fT05DRV9MSVRFX0lGYCAvIGBET19PTkNFX0xJVEVfSUZgIHVzZXJzLCBzbyBub3cgSSBuZWVkIHRvIGNob29zZSB0aGUgYmVzdCBzeW1ib2xzLlxuXG5Gcm9tIHRoZSBleGlzdGluZyBsaXN0IEkndmUgZ290LCBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcgZm9yIGBGb2N1c1N5bWJvbHNgOlxuXG4qICAgYG5ldC9pcHY0L3RjcF9pbnB1dC5jOnRjcF9ncm9fZGV2X3dhcm5gIHNpbmNlIGl0IGlzIHRoZSBmdW5jdGlvbiBwYXNzZWQgdG8gYERPX09OQ0VfTElURV9JRmAuIFRoaXMgaXMgYSB2ZXJ5IHNwZWNpZmljIHVzZS1jYXNlIEkgY2FuIGZvY3VzIG9uLlxuKiAgIGBhcmNoL3g4Ni9tbS9leHRhYmxlLmM6ZXhfaGFuZGxlcl9tc3JgLiBUaGlzIGhhbmRsZXMgdGhlIE1TUiBleGNlcHRpb25zLlxuKiAgIGBuZXQvY29yZS9kZXYuYzpza2JfY2hlY2tzdW1faGVscGAgYW5kIGBuZXQvY29yZS9kZXYuYzpuZXRkZXZfcnhfY3N1bV9mYXVsdGAsIHRoZXNlIGFyZSBuZXR3b3JrIGZvY3VzZWQgZnVuY3Rpb25zLCBhbmQgbm90IG92ZXJseSBnZW5lcmFsLCBhbmQgc2hvdWxkIHJldmVhbCBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgYENPTkZJR19gIG9wdGlvbnMgdG8gZW5hYmxlIGFuZCBpbmNsdWRlIHRoZW0gYXMgdGhlIGBFbmFibGVDb25maWdzYC4gVGhpcyBzaG91bGQgYmUgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgYnkgY2hlY2tpbmcgdGhlIGBLY29uZmlnYCBmaWxlcyBhbmQgYCNpZmRlZmBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjMyNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTU6MTk6NDguODU3NzA0NzhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMzgzNDIzMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKERPX09OQ0VfTElURXxfX09OQ0VfTElURSlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vZXh0YWJsZS5jPTE2Nj1zdGF0aWMgYm9vbCBleF9oYW5kbGVyX21zcihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpmaXh1cCxcXG4tLVxcbmFyY2gveDg2L21tL2V4dGFibGUuYy0xNjgte1xcbmFyY2gveDg2L21tL2V4dGFibGUuYzoxNjk6XFx0aWYgKF9fT05DRV9MSVRFX0lGKCFzYWZlIFxcdTAwMjZcXHUwMDI2IHdybXNyKSkge1xcbmFyY2gveDg2L21tL2V4dGFibGUuYy0xNzAtXFx0XFx0cHJfd2FybihcXFwidW5jaGVja2VkIE1TUiBhY2Nlc3MgZXJyb3I6IFdSTVNSIHRvIDB4JXggKHRyaWVkIHRvIHdyaXRlIDB4JTA4eCUwOHgpIGF0IHJJUDogMHglbHggKCVwUylcXFxcblxcXCIsXFxuLS1cXG5hcmNoL3g4Ni9tbS9leHRhYmxlLmMtMTc1LVxcbmFyY2gveDg2L21tL2V4dGFibGUuYzoxNzY6XFx0aWYgKF9fT05DRV9MSVRFX0lGKCFzYWZlIFxcdTAwMjZcXHUwMDI2ICF3cm1zcikpIHtcXG5hcmNoL3g4Ni9tbS9leHRhYmxlLmMtMTc3LVxcdFxcdHByX3dhcm4oXFxcInVuY2hlY2tlZCBNU1IgYWNjZXNzIGVycm9yOiBSRE1TUiBmcm9tIDB4JXggYXQgcklQOiAweCVseCAoJXBTKVxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM9MTIzND1zdGF0aWMgaW50IHdhaXRfb25fc2VtKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11LCB1NjQgZGF0YSlcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMTI1NC1cXHRcXHRpZiAoYW1kX2lvbW11X2R1bXApXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYzoxMjU1OlxcdFxcdFxcdERPX09OQ0VfTElURShkdW1wX2NvbW1hbmRfYnVmZmVyLCBpb21tdSk7XFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy0xMjU2LVxcbi0tXFxuZnMvZXJvZnMvaW50ZXJuYWwuaD00NDY9ZXJvZnNfZ2V0X2FvcHMoc3RydWN0IGlub2RlICpyZWFsaW5vZGUpXFxuLS1cXG5mcy9lcm9mcy9pbnRlcm5hbC5oLTQ1MC1cXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7XFxuZnMvZXJvZnMvaW50ZXJuYWwuaDo0NTE6XFx0XFx0RE9fT05DRV9MSVRFX0lGKHJlYWxpbm9kZS1cXHUwMDNlaV9ibGtiaXRzICE9IFBBR0VfU0hJRlQsXFxuZnMvZXJvZnMvaW50ZXJuYWwuaC00NTItXFx0XFx0XFx0ICBlcm9mc19pbmZvLCByZWFsaW5vZGUtXFx1MDAzZWlfc2IsXFxuLS1cXG5mcy94ZnMveGZzX21lc3NhZ2UuaD01MD1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuZnMveGZzL3hmc19tZXNzYWdlLmgtNTgtI2RlZmluZSB4ZnNfcHJpbnRrX29uY2UoZnVuYywgZGV2LCBmbXQsIC4uLilcXHRcXHRcXHRcXFxcXFxuZnMveGZzL3hmc19tZXNzYWdlLmg6NTk6XFx0RE9fT05DRV9MSVRFKGZ1bmMsIGRldiwgZm10LCAjI19fVkFfQVJHU19fKVxcbmZzL3hmcy94ZnNfbWVzc2FnZS5oLTYwLVxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaD0xMDM9ZXh0ZXJuIF9fcHJpbnRmKDEsIDIpIHZvaWQgX193YXJuX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7XFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE3OS0jZGVmaW5lIFdBUk5fT05fT05DRShjb25kaXRpb24pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmg6MTgwOlxcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk5fT04sIDEpXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaC0xODEtI2VuZGlmXFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE4NC0jZGVmaW5lIFdBUk5fT05DRShjb25kaXRpb24sIGZvcm1hdC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaDoxODU6XFx0RE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgV0FSTiwgMSwgZm9ybWF0KVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTg2LSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaC0xODgtI2RlZmluZSBXQVJOX1RBSU5UX09OQ0UoY29uZGl0aW9uLCB0YWludCwgZm9ybWF0Li4uKVxcdFxcdFxcXFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oOjE4OTpcXHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOX1RBSU5ULCAxLCB0YWludCwgZm9ybWF0KVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTkwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC05LSAqL1xcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MTA6I2RlZmluZSBET19PTkNFX0xJVEUoZnVuYywgLi4uKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjExOlxcdERPX09OQ0VfTElURV9JRih0cnVlLCBmdW5jLCAjI19fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMTItXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoxMzojZGVmaW5lIF9fT05DRV9MSVRFKClcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0xNC1cXHQoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMjQtXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoyNTojZGVmaW5lIF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoyNjpcXHQodW5saWtlbHkoY29uZGl0aW9uKSBcXHUwMDI2XFx1MDAyNiBfX09OQ0VfTElURSgpKVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMjctXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoyODojZGVmaW5lIERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIGZ1bmMsIC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0yOS1cXHQoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMzEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MzI6XFx0XFx0aWYgKF9fT05DRV9MSVRFX0lGKF9fcmV0X2RvX29uY2UpKVxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTMzLVxcdFxcdFxcdGZ1bmMoX19WQV9BUkdTX18pO1xcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmg9NDA3PXN0cnVjdCBwaV9lbnRyeSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oLTY0OS0jZGVmaW5lIHByaW50a19vbmNlKGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oOjY1MDpcXHRET19PTkNFX0xJVEUocHJpbnRrLCBmbXQsICMjX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9wcmludGsuaC02NTEtI2RlZmluZSBwcmludGtfZGVmZXJyZWRfb25jZShmbXQsIC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9wcmludGsuaDo2NTI6XFx0RE9fT05DRV9MSVRFKHByaW50a19kZWZlcnJlZCwgZm10LCAjI19fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjUzLSNlbHNlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTI3NTA9c3RhdGljIGlubGluZSB2b2lkIHNrYl9hc3NlcnRfbGVuKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI3NTMtXFx0aWYgKFdBUk5fT05DRSghc2tiLVxcdTAwM2VsZW4sIFxcXCIlc1xcXFxuXFxcIiwgX19mdW5jX18pKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6Mjc1NDpcXHRcXHRET19PTkNFX0xJVEUoc2tiX2R1bXAsIEtFUk5fRVJSLCBza2IsIGZhbHNlKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI3NTUtI2VuZGlmIC8qIENPTkZJR19ERUJVR19ORVQgKi9cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5oPTM3PWVudW0gdHJhY2VfdHlwZSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMjktI2RlZmluZSBNRU1fRkFJTChjb25kaXRpb24sIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMzA6XFx0RE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgcHJfZXJyLCBcXFwiRVJST1I6IFxcXCIgZm10LCAjI19fVkFfQVJHU19fKVxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTEzMS1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTM2MTc9aW50IHNrYl9jaGVja3N1bV9oZWxwKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0zNjQ1LVxcdGlmICh1bmxpa2VseShvZmZzZXQgXFx1MDAzZT0gc2tiX2hlYWRsZW4oc2tiKSkpIHtcXG5uZXQvY29yZS9kZXYuYzozNjQ2OlxcdFxcdERPX09OQ0VfTElURShza2JfZHVtcCwgS0VSTl9FUlIsIHNrYiwgZmFsc2UpO1xcbm5ldC9jb3JlL2Rldi5jLTM2NDctXFx0XFx0V0FSTl9PTkNFKHRydWUsIFxcXCJvZmZzZXQgKCVkKSBcXHUwMDNlPSBza2JfaGVhZGxlbigpICgldSlcXFxcblxcXCIsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0zNjU0LVxcdGlmICh1bmxpa2VseShvZmZzZXQgKyBzaXplb2YoX19zdW0xNikgXFx1MDAzZSBza2JfaGVhZGxlbihza2IpKSkge1xcbm5ldC9jb3JlL2Rldi5jOjM2NTU6XFx0XFx0RE9fT05DRV9MSVRFKHNrYl9kdW1wLCBLRVJOX0VSUiwgc2tiLCBmYWxzZSk7XFxubmV0L2NvcmUvZGV2LmMtMzY1Ni1cXHRcXHRXQVJOX09OQ0UodHJ1ZSwgXFxcIm9mZnNldCsyICglenUpIFxcdTAwM2Ugc2tiX2hlYWRsZW4oKSAoJXUpXFxcXG5cXFwiLFxcbi0tXFxubmV0L2NvcmUvZGV2LmM9Mzc0MD12b2lkIG5ldGRldl9yeF9jc3VtX2ZhdWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvZGV2LmMtMzc0MS17XFxubmV0L2NvcmUvZGV2LmM6Mzc0MjpcXHRET19PTkNFX0xJVEUoZG9fbmV0ZGV2X3J4X2NzdW1fZmF1bHQsIGRldiwgc2tiKTtcXG5uZXQvY29yZS9kZXYuYy0zNzQzLX1cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTIyNz1zdGF0aWMgdm9pZCB0Y3BfbWVhc3VyZV9yY3ZfbXNzKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI2My1cXHRcXHQvKiBBY2NvdW50IGZvciBwb3NzaWJseS1yZW1vdmVkIG9wdGlvbnMgKi9cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzoyNjQ6XFx0XFx0RE9fT05DRV9MSVRFX0lGKGxlbiBcXHUwMDNlIGljc2stXFx1MDAzZWljc2tfYWNrLnJjdl9tc3MgKyBNQVhfVENQX09QVElPTl9TUEFDRSxcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0yNjUtXFx0XFx0XFx0XFx0dGNwX2dyb19kZXZfd2Fybiwgc2ssIHNrYiwgbGVuKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oPTEyNT1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMTU2LSNkZWZpbmUgbGlua19lcnJfb25jZShsaW5rLCBmbXQsIC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MTU3OlxcdERPX09OQ0VfTElURShsaW5rX2VyciwgbGluaywgZm10LCAjI19fVkFfQVJHU19fKVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE1OC0jZGVmaW5lIGxpbmtfaWRfaW5mbyhzZGF0YSwgbGlua19pZCwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxucnVzdC9rZXJuZWwvcHJpbnQucnM9NDI2PW1hY3JvX3J1bGVzISBwcl9jb250IChcXG4tLVxcbnJ1c3Qva2VybmVsL3ByaW50LnJzLTQzMy0vLy9cXG5ydXN0L2tlcm5lbC9wcmludC5yczo0MzQ6Ly8vIFRoaXMgc3RydWN0dXJlIHByb3ZpZGVzIHRoZSBSdXN0IGVxdWl2YWxlbnQgb2YgdGhlIGtlcm5lbCdzIGBET19PTkNFX0xJVEVgIG1hY3JvLlxcbnJ1c3Qva2VybmVsL3ByaW50LnJzLTQzNS0vLy8gV2hpbGUgaXQgd291bGQgYmUgcG9zc2libGUgdG8gaW1wbGVtZW50IHRoZSBmZWF0dXJlIGVudGlyZWx5IGFzIGEgUnVzdCBtYWNybyxcXG4tLVxcbnJ1c3Qva2VybmVsL3ByaW50LnJzPTQ2OD0gICAgcHViIGZuIGNhbGxfb25jZVxcdTAwM2NGXFx1MDAzZShcXHUwMDI2c2VsZiwgZjogRikgLVxcdTAwM2UgYm9vbFxcbi0tXFxucnVzdC9rZXJuZWwvcHJpbnQucnMtNDkxLS8vL1xcbnJ1c3Qva2VybmVsL3ByaW50LnJzOjQ5MjovLy8gVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBrZXJuZWwncyBgRE9fT05DRV9MSVRFYCBtYWNyby5cXG5ydXN0L2tlcm5lbC9wcmludC5ycy00OTMtLy8vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE1OjE5OjUyLjA5NjA1NTEwM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4ODQ0ODg3NTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiBhZmZhaXJzLCBzbyBJJ2xsIHF1aWNrbHkgY2hlY2sgc29tZSBrZXkgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JrIGNoZWNrc3VtIG9mZmxvYWQgYW5kIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pLiBJJ20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGBleF9oYW5kbGVyX21zcmAsIGBuZXRkZXZfcnhfY3N1bV9mYXVsdGAsIGBza2JfY2hlY2tzdW1faGVscGAsIGFuZCBgdGNwX2dyb19kZXZfd2FybmAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgcHJpbWUgc3VzcGVjdHMgaW4gd2hhdGV2ZXIgSSdtIHRyb3VibGVzaG9vdGluZy5cblxuTm93LCBhIGNydWNpYWwgZGV0YWlsIHRvIHZlcmlmeSBpcyB3aGV0aGVyIGB0Y3BfZ3JvX2Rldl93YXJuYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMgb3Igbm9uLXN0YXRpYy4gVGhlIHNjb3BlIGFuZCB2aXNpYmlsaXR5IG9mIHRoYXQgZnVuY3Rpb24gd2lsbCBzaWduaWZpY2FudGx5IGltcGFjdCBob3cgaXQncyBiZWluZyB1c2VkIGFuZCBwb3RlbnRpYWxseSB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLiBUaGF04oCZcyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiB0aGF0IHdpbGwgZGlyZWN0IG15IG5leHQgaW52ZXN0aWdhdGl2ZSBzdGVwcy4gU3RhdGljIG9yIG5vdCwgdGhhdCdsbCBiZSB0ZWxsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzM2NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE1OjIwOjAwLjk0MDk0NTcwOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3OTgzMDY3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfZ3JvX2Rldl93YXJuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jPTIwNT1zdGF0aWMgdm9pZCBicGZfc2tvcHNfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBpbnQgYnBmX29wLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMjEwLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjIxMTpzdGF0aWMgX19jb2xkIHZvaWQgdGNwX2dyb19kZXZfd2Fybihjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMjEyLVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9MjI3PXN0YXRpYyB2b2lkIHRjcF9tZWFzdXJlX3Jjdl9tc3Moc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMjY0LVxcdFxcdERPX09OQ0VfTElURV9JRihsZW4gXFx1MDAzZSBpY3NrLVxcdTAwM2VpY3NrX2Fjay5yY3ZfbXNzICsgTUFYX1RDUF9PUFRJT05fU1BBQ0UsXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6MjY1OlxcdFxcdFxcdFxcdHRjcF9ncm9fZGV2X3dhcm4sIHNrLCBza2IsIGxlbik7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMjY2LVxcdFxcdC8qIElmIHRoZSBza2IgaGFzIGEgbGVuIG9mIGV4YWN0bHkgMSpNU1MgYW5kIGhhcyB0aGUgUFNIIGJpdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToyMDowMi42MjA3ODEyNTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg2NjkyNjA5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBOZXR3b3JrIENoZWNrc3VtIElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSdtIHRha2luZyBhIGxvb2sgYXQgYG5ldGRldl9yeF9jc3VtX2ZhdWx0YC4gSXQncyBhIGtleSBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgY2hlY2tzdW0gZmF1bHRzLCBhbmQgZnJvbSB0aGUgY29kZSBzbmlwcGV0LCBpdCBsb29rcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBpdCBqdXN0IGNhbGxzIGBET19PTkNFX0xJVEVgLiBUaGUgZmFjdCB0aGF0IGl0J3MgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IG5vdCBzdGF0aWMsIGltbWVkaWF0ZWx5IG1ha2VzIGl0IGludGVyZXN0aW5nIGZyb20gYSBkZXBlbmRlbmN5IHN0YW5kcG9pbnQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC5cblxuTmV4dCwgSSdsbCBleGFtaW5lIGBza2JfY2hlY2tzdW1faGVscGAuIFRoaXMgb25lIGlzICpleHBsaWNpdGx5KiBleHBvcnRlZCB2aWEgYEVYUE9SVF9TWU1CT0xgLCB3aGljaCBtZWFucyBpdCdzIGRlc2lnbmVkIHRvIGJlIHVzZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhhdCdzIGEgc3Ryb25nIHNpZ25hbCwgYW5kIEkgbmVlZCB0byBjb25zaWRlciBpdHMgaW1wbGljYXRpb25zLiBUaGlzIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHBpY3R1cmUuXG5cblRoZW4sIHRoZXJlJ3MgYGV4X2hhbmRsZXJfbXNyYCwgd2hpY2ggaXMgd2hlcmUgdGhpbmdzIGdldCBhIGJpdCBtb3JlIG51YW5jZWQuIEl04oCZcyBkZWNsYXJlZCBhcyBzdGF0aWMsIHdoaWNoIHR5cGljYWxseSBsaW1pdHMgaXRzIHNjb3BlLCBidXQgSSBzZWUgdGhhdCBpdOKAmXMgY2FsbGVkIGJ5IGBmaXh1cF9leGNlcHRpb25gLiBUaGF04oCZcyB3b3J0aCBub3RpbmcsIGFzIGludGVybmFsIGNhbGxzIGNhbiBzdGlsbCBoYXZlIGltcGxpY2F0aW9ucyBkZXBlbmRpbmcgb24gaG93IHRoZSBlcnJvciBoYW5kbGluZyBhbmQgZXhjZXB0aW9uIGZyYW1ld29yayB3b3Jrcy4gU28sIGV2ZW4gdGhvdWdoIGl0J3Mgc3RhdGljLCBpdCdzIHN0aWxsIGJlaW5nIHVzZWQsIGp1c3QgaW50ZXJuYWxseSwgc28gSSdsbCBjb25zaWRlciBpdHMgcm9sZSBpbiB0aGUgZXhjZXB0aW9uIHBhdGguXG5cbkZpbmFsbHksIEknbGwgcGl2b3QgYW5kIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGB4ZnNfcHJpbnRrX29uY2VgIHdpdGhpbiB0aGUgWEZTIGZpbGVzeXN0ZW0gY29kZS4gVGhpcyBtaWdodCBwcm92aWRlIGZ1cnRoZXIgaW5zaWdodHMgaW50byBob3cgY2hlY2tzdW0gZXJyb3JzIG9yIHJlbGF0ZWQgaXNzdWVzIGFyZSBiZWluZyBoYW5kbGVkIG9yIGxvZ2dlZCB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtIGl0c2VsZiwgd2hpY2ggbWlnaHQgYmUgaGVscGZ1bCBmcm9tIGEgZGlhZ25vc3RpY3MgcG9pbnQgb2Ygdmlldy4gSSB3YW50IHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3OTMxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE1OjIwOjA4LjQ4NzcwOTc4N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNzIyNDg4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnNfLipfb25jZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy94ZnMveGZzX2lvY3RsLmM9MTIxOT14ZnNfZmlsZV9pb2N0bChcXG4tLVxcbmZzL3hmcy94ZnNfaW9jdGwuYy0xMjQyLVxcdGNhc2UgWEZTX0lPQ19GUkVFU1A2NDpcXG5mcy94ZnMveGZzX2lvY3RsLmM6MTI0MzpcXHRcXHR4ZnNfd2Fybl9vbmNlKG1wLFxcbmZzL3hmcy94ZnNfaW9jdGwuYy0xMjQ0LVxcdFxcXCIlcyBzaG91bGQgdXNlIGZhbGxvY2F0ZTsgWEZTX0lPQ197QUxMT0MsRlJFRX1TUCBpb2N0bCB1bnN1cHBvcnRlZFxcXCIsXFxuLS1cXG5mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmM9Mjg4OD14bG9nX3JlY292ZXJfcHJvY2VzcyhcXG4tLVxcbmZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYy0yOTA4LVxcdFxcdGlmIChvdGhlcl9jcmMgPT0gZXhwZWN0ZWRfY3JjKSB7XFxuZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jOjI5MDk6XFx0XFx0XFx0eGZzX25vdGljZV9vbmNlKGxvZy1cXHUwMDNlbF9tcCxcXG5mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMtMjkxMC1cXHRcXFwiRml4aW5nIHVwIGluY29ycmVjdCBDUkMgZHVlIHRvIHBhZGRpbmcuXFxcIik7XFxuLS1cXG5mcy94ZnMveGZzX21lc3NhZ2UuaD01MD1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuZnMveGZzL3hmc19tZXNzYWdlLmgtNTctXFxuZnMveGZzL3hmc19tZXNzYWdlLmg6NTg6I2RlZmluZSB4ZnNfcHJpbnRrX29uY2UoZnVuYywgZGV2LCBmbXQsIC4uLilcXHRcXHRcXHRcXFxcXFxuZnMveGZzL3hmc19tZXNzYWdlLmgtNTktXFx0RE9fT05DRV9MSVRFKGZ1bmMsIGRldiwgZm10LCAjI19fVkFfQVJHU19fKVxcbi0tXFxuZnMveGZzL3hmc19tZXNzYWdlLmgtNzctXFxuZnMveGZzL3hmc19tZXNzYWdlLmg6Nzg6I2RlZmluZSB4ZnNfd2Fybl9vbmNlKGRldiwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmZzL3hmcy94ZnNfbWVzc2FnZS5oOjc5OlxcdHhmc19wcmludGtfb25jZSh4ZnNfd2FybiwgZGV2LCBmbXQsICMjX19WQV9BUkdTX18pXFxuZnMveGZzL3hmc19tZXNzYWdlLmg6ODA6I2RlZmluZSB4ZnNfbm90aWNlX29uY2UoZGV2LCBmbXQsIC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuZnMveGZzL3hmc19tZXNzYWdlLmg6ODE6XFx0eGZzX3ByaW50a19vbmNlKHhmc19ub3RpY2UsIGRldiwgZm10LCAjI19fVkFfQVJHU19fKVxcbmZzL3hmcy94ZnNfbWVzc2FnZS5oOjgyOiNkZWZpbmUgeGZzX2luZm9fb25jZShkZXYsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5mcy94ZnMveGZzX21lc3NhZ2UuaDo4MzpcXHR4ZnNfcHJpbnRrX29uY2UoeGZzX2luZm8sIGRldiwgZm10LCAjI19fVkFfQVJHU19fKVxcbmZzL3hmcy94ZnNfbWVzc2FnZS5oLTg0LVxcbi0tXFxuZnMveGZzL3hmc19tb3VudC5jPTE0NDc9eGZzX2RlY19mcmVlY291bnRlcihcXG4tLVxcbmZzL3hmcy94ZnNfbW91bnQuYy0xNDk2LVxcdFxcdFxcdGlmIChjdHIgPT0gWENfRlJFRV9CTE9DS1MpXFxuZnMveGZzL3hmc19tb3VudC5jOjE0OTc6XFx0XFx0XFx0XFx0eGZzX3dhcm5fb25jZShtcCxcXG5mcy94ZnMveGZzX21vdW50LmMtMTQ5OC1cXFwiUmVzZXJ2ZSBibG9ja3MgZGVwbGV0ZWQhIENvbnNpZGVyIGluY3JlYXNpbmcgcmVzZXJ2ZSBwb29sIHNpemUuXFxcIik7XFxuLS1cXG5mcy94ZnMveGZzX3N1cGVyLmM9Nzc4PVNUQVRJQyB2b2lkXFxuZnMveGZzL3hmc19zdXBlci5jOjc3OTp4ZnNfZnNfaW5vZGVfaW5pdF9vbmNlKFxcbmZzL3hmcy94ZnNfc3VwZXIuYy03ODAtXFx0dm9pZFxcdFxcdFxcdCppbm9kZSlcXG4tLVxcbmZzL3hmcy94ZnNfc3VwZXIuYz0xNzAyPXhmc19mc19maWxsX3N1cGVyKFxcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jLTE4MTItXFx0XFx0fVxcbmZzL3hmcy94ZnNfc3VwZXIuYzoxODEzOlxcdFxcdHhmc193YXJuX29uY2UobXAsXFxuZnMveGZzL3hmc19zdXBlci5jLTE4MTQtXFx0XFxcIkRlcHJlY2F0ZWQgVjQgZm9ybWF0IChjcmM9MCkgd2lsbCBub3QgYmUgc3VwcG9ydGVkIGFmdGVyIFNlcHRlbWJlciAyMDMwLlxcXCIpO1xcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jLTE4MTktI2lmZGVmIENPTkZJR19YRlNfU1VQUE9SVF9BU0NJSV9DSVxcbmZzL3hmcy94ZnNfc3VwZXIuYzoxODIwOlxcdFxcdHhmc193YXJuX29uY2UobXAsXFxuZnMveGZzL3hmc19zdXBlci5jLTE4MjEtXFx0XFxcIkRlcHJlY2F0ZWQgQVNDSUkgY2FzZS1pbnNlbnNpdGl2aXR5IGZlYXR1cmUgKGFzY2lpLWNpPTEpIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBhZnRlciBTZXB0ZW1iZXIgMjAzMC5cXFwiKTtcXG4tLVxcbmZzL3hmcy94ZnNfc3VwZXIuYz0yMzUzPXhmc19pbml0X2NhY2hlcyh2b2lkKVxcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jLTI0MjgtXFx0XFx0XFx0XFx0XFx0ICAgIFNMQUJfQUNDT1VOVCksXFxuZnMveGZzL3hmc19zdXBlci5jOjI0Mjk6XFx0XFx0XFx0XFx0XFx0ICAgeGZzX2ZzX2lub2RlX2luaXRfb25jZSk7XFxuZnMveGZzL3hmc19zdXBlci5jLTI0MzAtXFx0aWYgKCF4ZnNfaW5vZGVfY2FjaGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE1OjIwOjEwLjU5NDk0NDYwM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzI5NjI1MDQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBgb25jZV9saXRlLmhgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYG9uY2VfbGl0ZS5oYCByZXF1aXJlcyBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9uIHRvIGJlIGVuYWJsZWQuIEl0IGxvb2tzIGxpa2UgaXQncyBhbHdheXMgaW5jbHVkZWQgd2l0aG91dCBhbnkgc3BlY2lmaWMgY29uZmlnIGd1YXJkLCBzbyBubywgbm8gc3BlY2lmaWMgY29uZmlncyBhcmUgcmVxdWlyZWQg4oCTIGl0IHVzZXMgdGhlIHN0YW5kYXJkIGtlcm5lbCBjb25maWd1cmF0aW9ucy5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gVGhlIGNoYW5nZXMgYXJlIG1vZGlmeWluZyBjb3JlIGtlcm5lbCBpbmZyYXN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oYCwgYW5kIHRoYXQncyB1c2VkIHRocm91Z2hvdXQgdGhlIGtlcm5lbCDigJMgbmV0d29ya2luZywgYnVnIGhhbmRsaW5nLCBmaWxlc3lzdGVtcyDigJMgdGhlIHdvcmtzLiBHaXZlbiB0aGUgZ3VpZGVsaW5lcyBJIGhhdmUsIHRoZSBhbnN3ZXIgaXMgYSBkZWZpbml0aXZlICp5ZXMqLiBUaGUgY3JpdGVyaWEgZXhwbGljaXRseSBzdGF0ZSB0aGF0IGFueSBtb2RpZmljYXRpb24gdG8gXCJjb3JlIHN1YnN5c3RlbXNcIiBsaWtlIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIG9yIHJlZmFjdG9yaW5ncyB0aGF0IHJlc3RydWN0dXJlIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMgb3IgYWxnb3JpdGhtIGZsb3dzIHdhcnJhbnQgZnV6emluZy4gVGhpcyBkZWZpbml0ZWx5IGZhbGxzIGludG8gYm90aCBjYXRlZ29yaWVzLiBTbywgYFdvcnRoRnV6emluZ2AgaXMgYHRydWVgLlxuXG5OZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgc3VpdGFibGUgZm9jdXMgc3ltYm9scy4gSSdtIGxvb2tpbmcgZm9yIG5vbi11YmlxdWl0b3VzLCBmZWF0dXJlLXNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGV4ZXJjaXNlIGBfX09OQ0VfTElURV9JRmAgb3IgcmVsYXRlZCBtYWNyb3MuIEkndmUgZ290IGEgbGlzdCBvZiBwb3RlbnRpYWwgY2FuZGlkYXRlczogYG5ldGRldl9yeF9jc3VtX2ZhdWx0YCwgYHNrYl9jaGVja3N1bV9oZWxwYCwgYHhmc19maWxlX2lvY3RsYCwgYW5kIGB4ZnNfZnNfZmlsbF9zdXBlcmAuIEFmdGVyIHJldmlld2luZyB0aGVtLCB0aGVzZSBhcmUgZ29vZCBjaG9pY2VzLiBUaGV5IGFsbCBkaXJlY3RseSBpbnZva2UgYERPX09OQ0VfTElURWAgb3IgYERPX09OQ0VfTElURV9JRmAuIFBlcmZlY3QuXG5cbkZpbmFsbHksIGxldCdzIGFzc2VtYmxlIHRoZSBgc2V0LXJlc3VsdHNgIGRhdGEuXG5cbiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgXG4qICAgYFJlYXNvbmluZ2A6IE1vZGlmaWNhdGlvbiBvZiBjb3JlIGtlcm5lbCBpbmZyYXN0cnVjdHVyZSAoYGluY2x1ZGUvbGludXgvb25jZV9saXRlLmhgKSwgZGlyZWN0bHkgaW1wYWN0aW5nIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQgYWNyb3NzIGNvcmUgc3Vic3lzdGVtcyAobmV0d29ya2luZywgYnVnIGhhbmRsaW5nLCBmaWxlc3lzdGVtcykuIFJlZmFjdG9yaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGFsZ29yaXRobSBmbG93cy5cbiogICBgRm9jdXNTeW1ib2xzYDogYFtcIm5ldGRldl9yeF9jc3VtX2ZhdWx0XCIsIFwic2tiX2NoZWNrc3VtX2hlbHBcIiwgXCJ4ZnNfZmlsZV9pb2N0bFwiLCBcInhmc19mc19maWxsX3N1cGVyXCJdYFxuKiAgIGBFbmFibGVDb25maWdzYDogYFtdYCAoYmVjYXVzZSBgb25jZV9saXRlLmhgIGlzIGFsd2F5cyBpbmNsdWRlZClcblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjY3LCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToyMDoyNy44OTExOTkwNTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGRldl9yeF9jc3VtX2ZhdWx0XCIsXG4gICAgXCJza2JfY2hlY2tzdW1faGVscFwiLFxuICAgIFwieGZzX2ZpbGVfaW9jdGxcIixcbiAgICBcInhmc19mc19maWxsX3N1cGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBET19PTkNFX0xJVEUgLyBfX09OQ0VfTElURV9JRiBoZWxwZXIgbWFjcm8gZGVmaW5pdGlvbnMgaW4gaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaCwgc2VwYXJhdGluZyBvdXQgX19PTkNFX0xJVEUoKSBhbmQgYWx0ZXJpbmcgdGhlIGNvbmRpdGlvbiBldmFsdWF0aW9uIGxvZ2ljIGZvciBvbmUtdGltZSBleGVjdXRpb24gYWNyb3NzIHRoZSBrZXJuZWwuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUgdXNlZCBpbiBuZXR3b3JraW5nLCBmaWxlc3lzdGVtcywgYW5kIGdlbmVyaWMgYnVnL3dhcm5pbmcgbWFjcm9zLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gdmVyaWZ5IHJ1bnRpbWUgZXZhbHVhdGlvbiBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfcnhfY3N1bV9mYXVsdFwiLFxuICAgIFwic2tiX2NoZWNrc3VtX2hlbHBcIixcbiAgICBcInhmc19maWxlX2lvY3RsXCIsXG4gICAgXCJ4ZnNfZnNfZmlsbF9zdXBlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgRE9fT05DRV9MSVRFIC8gX19PTkNFX0xJVEVfSUYgaGVscGVyIG1hY3JvIGRlZmluaXRpb25zIGluIGluY2x1ZGUvbGludXgvb25jZV9saXRlLmgsIHNlcGFyYXRpbmcgb3V0IF9fT05DRV9MSVRFKCkgYW5kIGFsdGVyaW5nIHRoZSBjb25kaXRpb24gZXZhbHVhdGlvbiBsb2dpYyBmb3Igb25lLXRpbWUgZXhlY3V0aW9uIGFjcm9zcyB0aGUga2VybmVsLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGluZnJhc3RydWN0dXJlIHVzZWQgaW4gbmV0d29ya2luZywgZmlsZXN5c3RlbXMsIGFuZCBnZW5lcmljIGJ1Zy93YXJuaW5nIG1hY3Jvcywgd2FycmFudGluZyBmdXp6aW5nIHRvIHZlcmlmeSBydW50aW1lIGV2YWx1YXRpb24gYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE1OjIwOjI3Ljg5MTIzNDYzMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ5MDUxNjMxMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToyMDoyNy44OTE2OTc3NTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNDkwNDY5NjIxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgX19PTkNFX0xJVEVfSUZgIG1hY3JvIGluIGBpbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oYCBpbnRvIGEgc3RhbmRhbG9uZSBgX19PTkNFX0xJVEUoKWAgaGVscGVyIGFuZCBzaG9ydC1jaXJjdWl0aW5nIGBfX09OQ0VfTElURV9JRihjb25kaXRpb24pYC5cXG5cXG5BbGwgdmFyaWFibGVzIHVzZWQgd2l0aGluIHRoZSBtYWNyb3MgKGBfX2FscmVhZHlfZG9uZWAgaW4gYC5kYXRhLi5vbmNlYCBhbmQgbG9jYWwgYm9vbGVhbiBgX19yZXRfb25jZSA9IGZhbHNlYCkgYXJlIHN0YXRpYyBvciBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgdG91Y2ggZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSwgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMsIG1lbW9yeSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm9sZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTIxMTZjN2I5NThmODg1YWZhNzM0YTllZGFkMzdlMGQwYzcxOTRiZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTU6MTg6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oIGIvaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaFxuaW5kZXggMjM2NTkyYzRlZWIxYS4uNWUyYjY3MDM5YWFmMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvb25jZV9saXRlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvb25jZV9saXRlLmhcbkBAIC0xMCwxOSArMTAsMjEgQEBcbiAjZGVmaW5lIERPX09OQ0VfTElURShmdW5jLCAuLi4pXHRcdFx0XHRcdFx0XFxcbiBcdERPX09OQ0VfTElURV9JRih0cnVlLCBmdW5jLCAjI19fVkFfQVJHU19fKVxuIFxuLSNkZWZpbmUgX19PTkNFX0xJVEVfSUYoY29uZGl0aW9uKVx0XHRcdFx0XHRcXFxuKyNkZWZpbmUgX19PTkNFX0xJVEUoKVx0XHRcdFx0XHRcdFx0XFxcbiBcdCh7XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRcdHN0YXRpYyBib29sIF9fc2VjdGlvbihcIi5kYXRhLi5vbmNlXCIpIF9fYWxyZWFkeV9kb25lO1x0XFxcbi1cdFx0Ym9vbCBfX3JldF9jb25kID0gISEoY29uZGl0aW9uKTtcdFx0XHRcXFxuIFx0XHRib29sIF9fcmV0X29uY2UgPSBmYWxzZTtcdFx0XHRcdFxcXG4gXHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdFx0aWYgKHVubGlrZWx5KF9fcmV0X2NvbmQpIFx1MDAyNlx1MDAyNiB1bmxpa2VseSghX19hbHJlYWR5X2RvbmUpKSB7XFxcbitcdFx0aWYgKHVubGlrZWx5KCFfX2FscmVhZHlfZG9uZSkpIHtcdFx0XHRcXFxuIFx0XHRcdF9fYWxyZWFkeV9kb25lID0gdHJ1ZTtcdFx0XHRcdFxcXG4gXHRcdFx0X19yZXRfb25jZSA9IHRydWU7XHRcdFx0XHRcXFxuIFx0XHR9XHRcdFx0XHRcdFx0XHRcXFxuIFx0XHR1bmxpa2VseShfX3JldF9vbmNlKTtcdFx0XHRcdFx0XFxcbiBcdH0pXG4gXG4rI2RlZmluZSBfX09OQ0VfTElURV9JRihjb25kaXRpb24pXHRcdFx0XHRcdFxcXG4rXHQodW5saWtlbHkoY29uZGl0aW9uKSBcdTAwMjZcdTAwMjYgX19PTkNFX0xJVEUoKSlcbitcbiAjZGVmaW5lIERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIGZ1bmMsIC4uLilcdFx0XHRcdFxcXG4gXHQoe1x0XHRcdFx0XHRcdFx0XHRcXFxuIFx0XHRib29sIF9fcmV0X2RvX29uY2UgPSAhIShjb25kaXRpb24pO1x0XHRcdFxcXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToyMDoyNy44OTE2OTg2NzFaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1MzY3NTYyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgb25jZV9saXRlLmhgIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgcmVsYXRlZCB0byBzb21lIG9wdGltaXphdGlvbiBvciBwZXJoYXBzIHNpbXBsaWZpY2F0aW9uIG9mIGEgXCJvbmNlXCIgZXhlY3V0aW9uIHBhdHRlcm4gd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBkaWZmIHN1Z2dlc3RzIHRoYXQgd2UncmUgbG9va2luZyBhdCBhIGhlYWRlciBmaWxlLCBzbyB0aGlzIGxpa2VseSBwcm92aWRlcyBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucy5cblxuSSBzZWUgYSByZXZpc2VkIGltcGxlbWVudGF0aW9uIG9mIGBfX09OQ0VfTElURV9JRmAuIFByZXZpb3VzbHksIGl0IGFwcGVhcnMgdG8gaGF2ZSBhIGJvb2xlYW4gYGNvbmRpdGlvbmAgcGFzc2VkIGludG8gdGhlIG1hY3JvOyBub3cgdGhlcmUncyBhbiBgX19PTkNFX0xJVEUoKWAgbWFjcm8uIFRoZSBnb2FsIGlzIGxpa2VseSB0byBleGVjdXRlIHNvbWUgY29kZSAqb25seSBvbmNlKiBpZiBhIGNvbmRpdGlvbiBpcyBtZXQsIHNvIGBET19PTkNFX0xJVEVfSUZgIG11c3QgYmUgY3JpdGljYWwgaW4gYWxsb3dpbmcgdGhhdCBjb250cm9sLiBJIHNlZSB0aGUgdXNhZ2Ugb2YgYHVubGlrZWx5KClgIHdoaWNoIGluZGljYXRlcyBvcHRpbWl6YXRpb24gdG93YXJkIHBlcmZvcm1hbmNlIGJhc2VkIG9uIGFuIGV4cGVjdGVkLCBidXQgbm90IGNlcnRhaW4sIGNvbmRpdGlvbi4gSSBhbHNvIG5vdGljZSB0aGUgdXNlIG9mIGEgc3RhdGljIGJvb2xlYW4gdmFyaWFibGUgYF9fYWxyZWFkeV9kb25lYCBsb2NhdGVkIGluIGAuZGF0YS4ub25jZWAuIFB1dHRpbmcgaXQgdGhlcmUgcHJvYmFibHkgZ3VhcmFudGVlcyBpbml0aWFsaXphdGlvbiB0byB6ZXJvIGFuZCBwbGFjZW1lbnQgd2l0aGluIGEgc2VjdGlvbiBsaWtlbHkgbWVhbnQgZm9yIGluaXRpYWxpemVkIGRhdGEgdGhhdCB3b24ndCBiZSBtb2RpZmllZC5cblxuSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIGEgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuIEJ5IHB1bGxpbmcgdGhlIGluaXRpYWwgYGNvbmRpdGlvbmAgY2hlY2sgb3V0IGludG8gdGhlIG1hY3JvIGRlZmluaXRpb24sIHRoZXJlJ3MgcG9zc2libHkgbGVzcyBvdmVyaGVhZC4gTm93LCB0aGUgY29uZGl0aW9uIGlzIGV2YWx1YXRlZCBvbmx5IHdpdGhpbiB0aGUgYERPX09OQ0VfTElURV9JRmAgbWFjcm8gYW5kIG9ubHkgb25jZS4gSWYgdGhlIGNvbmRpdGlvbiBpcyBhbHdheXMgZmFsc2UsIHRoZXJlIGlzIG5vIG92ZXJoZWFkIGZyb20gdGhlIG9uY2UgY29kZS4gQWxzbywgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGNhbGxzIHRvIHRoZSBzYW1lIG9uY2UgY29uZGl0aW9uLCB0aGlzIHdpbGwgc2hvcnQtY2lyY3VpdCBhbnkgbGF0ZXIgaW52b2NhdGlvbnMuXG5cblRoaXMgc2VlbXMgbGlrZSBhIGNhcmVmdWwgYW5kIGZvY3VzZWQgcGF0Y2guIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZnVsbCBjb250ZXh0IHRvIGVuc3VyZSB0aGF0IGl0IGhhcyBubyB1bmludGVuZGVkIHNpZGUgZWZmZWN0cywgYnV0IGl0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIG9wdGltaXphdGlvbiBvciBzaW1wbGlmaWNhdGlvbiBvZiB0aGUgYG9uY2VgIHBhdHRlcm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToyMDo1MC40Mjg0NTg3MjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuICAgMjpcXHQjaWZuZGVmIF9MSU5VWF9PTkNFX0xJVEVfSFxcbiAgIDM6XFx0I2RlZmluZSBfTElOVVhfT05DRV9MSVRFX0hcXG4gICA0OlxcdFxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuICAgNjpcXHRcXG4gICA3OlxcdC8qIENhbGwgYSBmdW5jdGlvbiBvbmNlLiBTaW1pbGFyIHRvIERPX09OQ0UoKSwgYnV0IGRvZXMgbm90IHVzZSBqdW1wIGxhYmVsXFxuICAgODpcXHQgKiBwYXRjaGluZyB2aWEgc3RhdGljIGtleXMuXFxuICAgOTpcXHQgKi9cXG4gIDEwOlxcdCNkZWZpbmUgRE9fT05DRV9MSVRFKGZ1bmMsIC4uLilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAxMTpcXHRcXHRET19PTkNFX0xJVEVfSUYodHJ1ZSwgZnVuYywgIyNfX1ZBX0FSR1NfXylcXG4gIDEyOlxcdFxcbiAgMTM6XFx0I2RlZmluZSBfX09OQ0VfTElURSgpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMTQ6XFx0XFx0KHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAxNTpcXHRcXHRcXHRzdGF0aWMgYm9vbCBfX3NlY3Rpb24oXFxcIi5kYXRhLi5vbmNlXFxcIikgX19hbHJlYWR5X2RvbmU7XFx0XFxcXFxcbiAgMTY6XFx0XFx0XFx0Ym9vbCBfX3JldF9vbmNlID0gZmFsc2U7XFx0XFx0XFx0XFx0XFxcXFxcbiAgMTc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMTg6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFfX2FscmVhZHlfZG9uZSkpIHtcXHRcXHRcXHRcXFxcXFxuICAxOTpcXHRcXHRcXHRcXHRfX2FscmVhZHlfZG9uZSA9IHRydWU7XFx0XFx0XFx0XFx0XFxcXFxcbiAgMjA6XFx0XFx0XFx0XFx0X19yZXRfb25jZSA9IHRydWU7XFx0XFx0XFx0XFx0XFxcXFxcbiAgMjE6XFx0XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDIyOlxcdFxcdFxcdHVubGlrZWx5KF9fcmV0X29uY2UpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDIzOlxcdFxcdH0pXFxuICAyNDpcXHRcXG4gIDI1OlxcdCNkZWZpbmUgX19PTkNFX0xJVEVfSUYoY29uZGl0aW9uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDI2OlxcdFxcdCh1bmxpa2VseShjb25kaXRpb24pIFxcdTAwMjZcXHUwMDI2IF9fT05DRV9MSVRFKCkpXFxuICAyNzpcXHRcXG4gIDI4OlxcdCNkZWZpbmUgRE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgZnVuYywgLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG4gIDI5OlxcdFxcdCh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzA6XFx0XFx0XFx0Ym9vbCBfX3JldF9kb19vbmNlID0gISEoY29uZGl0aW9uKTtcXHRcXHRcXHRcXFxcXFxuICAzMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAzMjpcXHRcXHRcXHRpZiAoX19PTkNFX0xJVEVfSUYoX19yZXRfZG9fb25jZSkpXFx0XFx0XFx0XFxcXFxcbiAgMzM6XFx0XFx0XFx0XFx0ZnVuYyhfX1ZBX0FSR1NfXyk7XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzU6XFx0XFx0XFx0dW5saWtlbHkoX19yZXRfZG9fb25jZSk7XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzY6XFx0XFx0fSlcXG4gIDM3OlxcdFxcbiAgMzg6XFx0I2VuZGlmIC8qIF9MSU5VWF9PTkNFX0xJVEVfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToyMDo1MC40Mjg1MzU1MjhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDA1ODU5MDg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBvbmNlX2xpdGUuaGAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgb25jZV9saXRlLmhgIGhlYWRlciBhbmQgdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gSSBzZWUgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIG9mIGBfX09OQ0VfTElURV9JRmAgdXNlcyBhIHN0YXRpYyBib29sZWFuIGZsYWcsIGBfX2FscmVhZHlfZG9uZWAsIHBsYWNlZCBpbiB0aGUgYC5kYXRhLi5vbmNlYCBzZWN0aW9uLiBJdCBzZWVtcyB0byBiZSBpbXBsZW1lbnRpbmcgYSBsaWdodHdlaWdodCBcIm9uY2VcIiBleGVjdXRpb24gcGFyYWRpZ20sIGxpa2VseSBmb3IgaW5pdGlhbGl6YXRpb24gb3IgY29uZGl0aW9uYWwgZXhlY3V0aW9uIHRoYXQgc2hvdWxkIGhhcHBlbiBvbmx5IG9uY2UuIFRoZSBvcmlnaW5hbCBjb2RlJ3MgYXBwcm9hY2ggaXMgaW50ZXJlc3Rpbmc7IGl0J3MgdXNpbmcgdGhlIGAoeyAuLi4gfSlgIEdDQyBzdGF0ZW1lbnQgZXhwcmVzc2lvbiB0byBwcm92aWRlIHNvbWUgc29ydCBvZiBhdG9taWMgKG9yIGFzIGF0b21pYyBhcyB0aGUgY29tcGlsZXIgYWxsb3dzKSB0ZXN0LWFuZC1zZXQgb3BlcmF0aW9uLCBhbG9uZyB3aXRoIGEgcmV0dXJuIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbmRpdGlvbiB3YXMgdHJ1ZSBhbmQgdGhlIGFjdGlvbiB3YXMgdGFrZW4gZm9yIHRoZSBmaXJzdCB0aW1lLlxuXG5UaGUgcGF0Y2ggc2ltcGxpZmllcyB0aGluZ3MgYnkgZGVmaW5pbmcgYF9fT05DRV9MSVRFKClgIGFuZCB1c2luZyBpdCB3aXRoaW4gYF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilgLiBJdCdzIHN0aWxsIHVzaW5nIHRoZSBzYW1lIGBfX2FscmVhZHlfZG9uZWAgc3RhdGljIGJvb2xlYW4sIGJ1dCBub3cgaXQgY2hlY2tzIGZvciBhIGBjb25kaXRpb25gIGJlZm9yZSBjYWxsaW5nIHRoZSBcIm9uY2VcIiBjaGVjay4gVGhlIGxvZ2ljIGluIHRoZSBwYXRjaGVkIHZlcnNpb24gaXMgY2xlYXJlcjsgdGhlIGludGVudCBpcyB0byBvbmx5IGV4ZWN1dGUgc29tZXRoaW5nIGlmIHRoZSBjb25kaXRpb24gaXMgKnVubGlrZWx5KiB0byBiZSB0cnVlIGFuZCB0aGUgXCJvbmNlXCIgY2hlY2sgaGFzbid0IGhhcHBlbmVkLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgbWFjcm8gaXMgYWN0dWFsbHkgdXNlZCBpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IHRvIHJlYWxseSBncmFzcCBpdHMgcHJhY3RpY2FsIGFwcGxpY2F0aW9uLiBJJ2xsIG5lZWQgdG8gc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlIGZvciBpbnN0YW5jZXMgb2YgYF9fT05DRV9MSVRFYCwgYF9fT05DRV9MSVRFX0lGYCwgYW5kIGBET19PTkNFX0xJVEVgIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgYmVpbmcgbGV2ZXJhZ2VkIGluIHByYWN0aWNlLiBUaGF0IHdpbGwgaWxsdW1pbmF0ZSB0aGUgb3B0aW1pemF0aW9ucyBvciBzcGVjaWZpYyB1c2UgY2FzZXMgdGhpcyBpcyBkZXNpZ25lZCBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NTgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToyMDo1NC40ODcxMjk2MTJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzExNzg4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiT05DRV9MSVRFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L21tL2V4dGFibGUuYz0xNjY9c3RhdGljIGJvb2wgZXhfaGFuZGxlcl9tc3IoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZml4dXAsXFxuLS1cXG5hcmNoL3g4Ni9tbS9leHRhYmxlLmMtMTY4LXtcXG5hcmNoL3g4Ni9tbS9leHRhYmxlLmM6MTY5OlxcdGlmIChfX09OQ0VfTElURV9JRighc2FmZSBcXHUwMDI2XFx1MDAyNiB3cm1zcikpIHtcXG5hcmNoL3g4Ni9tbS9leHRhYmxlLmMtMTcwLVxcdFxcdHByX3dhcm4oXFxcInVuY2hlY2tlZCBNU1IgYWNjZXNzIGVycm9yOiBXUk1TUiB0byAweCV4ICh0cmllZCB0byB3cml0ZSAweCUwOHglMDh4KSBhdCBySVA6IDB4JWx4ICglcFMpXFxcXG5cXFwiLFxcbi0tXFxuYXJjaC94ODYvbW0vZXh0YWJsZS5jLTE3NS1cXG5hcmNoL3g4Ni9tbS9leHRhYmxlLmM6MTc2OlxcdGlmIChfX09OQ0VfTElURV9JRighc2FmZSBcXHUwMDI2XFx1MDAyNiAhd3Jtc3IpKSB7XFxuYXJjaC94ODYvbW0vZXh0YWJsZS5jLTE3Ny1cXHRcXHRwcl93YXJuKFxcXCJ1bmNoZWNrZWQgTVNSIGFjY2VzcyBlcnJvcjogUkRNU1IgZnJvbSAweCV4IGF0IHJJUDogMHglbHggKCVwUylcXFxcblxcXCIsXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTEyMzQ9c3RhdGljIGludCB3YWl0X29uX3NlbShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgdTY0IGRhdGEpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTEyNTQtXFx0XFx0aWYgKGFtZF9pb21tdV9kdW1wKVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6MTI1NTpcXHRcXHRcXHRET19PTkNFX0xJVEUoZHVtcF9jb21tYW5kX2J1ZmZlciwgaW9tbXUpO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMTI1Ni1cXG4tLVxcbmZzL2Vyb2ZzL2ludGVybmFsLmg9NDQ2PWVyb2ZzX2dldF9hb3BzKHN0cnVjdCBpbm9kZSAqcmVhbGlub2RlKVxcbi0tXFxuZnMvZXJvZnMvaW50ZXJuYWwuaC00NTAtXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApO1xcbmZzL2Vyb2ZzL2ludGVybmFsLmg6NDUxOlxcdFxcdERPX09OQ0VfTElURV9JRihyZWFsaW5vZGUtXFx1MDAzZWlfYmxrYml0cyAhPSBQQUdFX1NISUZULFxcbmZzL2Vyb2ZzL2ludGVybmFsLmgtNDUyLVxcdFxcdFxcdCAgZXJvZnNfaW5mbywgcmVhbGlub2RlLVxcdTAwM2VpX3NiLFxcbi0tXFxuZnMveGZzL3hmc19tZXNzYWdlLmg9NTA9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmZzL3hmcy94ZnNfbWVzc2FnZS5oLTU4LSNkZWZpbmUgeGZzX3ByaW50a19vbmNlKGZ1bmMsIGRldiwgZm10LCAuLi4pXFx0XFx0XFx0XFxcXFxcbmZzL3hmcy94ZnNfbWVzc2FnZS5oOjU5OlxcdERPX09OQ0VfTElURShmdW5jLCBkZXYsIGZtdCwgIyNfX1ZBX0FSR1NfXylcXG5mcy94ZnMveGZzX21lc3NhZ2UuaC02MC1cXG4tLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmg9MTAzPWV4dGVybiBfX3ByaW50ZigxLCAyKSB2b2lkIF9fd2Fybl9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pO1xcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaC0xNzktI2RlZmluZSBXQVJOX09OX09OQ0UoY29uZGl0aW9uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oOjE4MDpcXHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOX09OLCAxKVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTgxLSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaC0xODQtI2RlZmluZSBXQVJOX09OQ0UoY29uZGl0aW9uLCBmb3JtYXQuLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmg6MTg1OlxcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk4sIDEsIGZvcm1hdClcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE4Ni0jZW5kaWZcXG4tLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTg4LSNkZWZpbmUgV0FSTl9UQUlOVF9PTkNFKGNvbmRpdGlvbiwgdGFpbnQsIGZvcm1hdC4uLilcXHRcXHRcXFxcXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaDoxODk6XFx0RE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgV0FSTl9UQUlOVCwgMSwgdGFpbnQsIGZvcm1hdClcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE5MC1cXG4tLVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MjojaWZuZGVmIF9MSU5VWF9PTkNFX0xJVEVfSFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MzojZGVmaW5lIF9MSU5VWF9PTkNFX0xJVEVfSFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtNC1cXG4tLVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtOS0gKi9cXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjEwOiNkZWZpbmUgRE9fT05DRV9MSVRFKGZ1bmMsIC4uLilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoxMTpcXHRET19PTkNFX0xJVEVfSUYodHJ1ZSwgZnVuYywgIyNfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTEyLVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MTM6I2RlZmluZSBfX09OQ0VfTElURSgpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMTQtXFx0KHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTI0LVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MjU6I2RlZmluZSBfX09OQ0VfTElURV9JRihjb25kaXRpb24pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MjY6XFx0KHVubGlrZWx5KGNvbmRpdGlvbikgXFx1MDAyNlxcdTAwMjYgX19PTkNFX0xJVEUoKSlcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTI3LVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6Mjg6I2RlZmluZSBET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBmdW5jLCAuLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMjktXFx0KHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTMxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjMyOlxcdFxcdGlmIChfX09OQ0VfTElURV9JRihfX3JldF9kb19vbmNlKSlcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0zMy1cXHRcXHRcXHRmdW5jKF9fVkFfQVJHU19fKTtcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTM3LVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6Mzg6I2VuZGlmIC8qIF9MSU5VWF9PTkNFX0xJVEVfSCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9wcmludGsuaD00MDc9c3RydWN0IHBpX2VudHJ5IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjQ5LSNkZWZpbmUgcHJpbnRrX29uY2UoZm10LCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmg6NjUwOlxcdERPX09OQ0VfTElURShwcmludGssIGZtdCwgIyNfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oLTY1MS0jZGVmaW5lIHByaW50a19kZWZlcnJlZF9vbmNlKGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oOjY1MjpcXHRET19PTkNFX0xJVEUocHJpbnRrX2RlZmVycmVkLCBmbXQsICMjX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9wcmludGsuaC02NTMtI2Vsc2VcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9Mjc1MD1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2Fzc2VydF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjc1My1cXHRpZiAoV0FSTl9PTkNFKCFza2ItXFx1MDAzZWxlbiwgXFxcIiVzXFxcXG5cXFwiLCBfX2Z1bmNfXykpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoyNzU0OlxcdFxcdERPX09OQ0VfTElURShza2JfZHVtcCwgS0VSTl9FUlIsIHNrYiwgZmFsc2UpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjc1NS0jZW5kaWYgLyogQ09ORklHX0RFQlVHX05FVCAqL1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmg9Mzc9ZW51bSB0cmFjZV90eXBlIHtcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTEyOS0jZGVmaW5lIE1FTV9GQUlMKGNvbmRpdGlvbiwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEzMDpcXHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBwcl9lcnIsIFxcXCJFUlJPUjogXFxcIiBmbXQsICMjX19WQV9BUkdTX18pXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTMxLVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MzYxNz1pbnQgc2tiX2NoZWNrc3VtX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTM2NDUtXFx0aWYgKHVubGlrZWx5KG9mZnNldCBcXHUwMDNlPSBza2JfaGVhZGxlbihza2IpKSkge1xcbm5ldC9jb3JlL2Rldi5jOjM2NDY6XFx0XFx0RE9fT05DRV9MSVRFKHNrYl9kdW1wLCBLRVJOX0VSUiwgc2tiLCBmYWxzZSk7XFxubmV0L2NvcmUvZGV2LmMtMzY0Ny1cXHRcXHRXQVJOX09OQ0UodHJ1ZSwgXFxcIm9mZnNldCAoJWQpIFxcdTAwM2U9IHNrYl9oZWFkbGVuKCkgKCV1KVxcXFxuXFxcIixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTM2NTQtXFx0aWYgKHVubGlrZWx5KG9mZnNldCArIHNpemVvZihfX3N1bTE2KSBcXHUwMDNlIHNrYl9oZWFkbGVuKHNrYikpKSB7XFxubmV0L2NvcmUvZGV2LmM6MzY1NTpcXHRcXHRET19PTkNFX0xJVEUoc2tiX2R1bXAsIEtFUk5fRVJSLCBza2IsIGZhbHNlKTtcXG5uZXQvY29yZS9kZXYuYy0zNjU2LVxcdFxcdFdBUk5fT05DRSh0cnVlLCBcXFwib2Zmc2V0KzIgKCV6dSkgXFx1MDAzZSBza2JfaGVhZGxlbigpICgldSlcXFxcblxcXCIsXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0zNzQwPXZvaWQgbmV0ZGV2X3J4X2NzdW1fZmF1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9kZXYuYy0zNzQxLXtcXG5uZXQvY29yZS9kZXYuYzozNzQyOlxcdERPX09OQ0VfTElURShkb19uZXRkZXZfcnhfY3N1bV9mYXVsdCwgZGV2LCBza2IpO1xcbm5ldC9jb3JlL2Rldi5jLTM3NDMtfVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9MjI3PXN0YXRpYyB2b2lkIHRjcF9tZWFzdXJlX3Jjdl9tc3Moc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMjYzLVxcdFxcdC8qIEFjY291bnQgZm9yIHBvc3NpYmx5LXJlbW92ZWQgb3B0aW9ucyAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjI2NDpcXHRcXHRET19PTkNFX0xJVEVfSUYobGVuIFxcdTAwM2UgaWNzay1cXHUwMDNlaWNza19hY2sucmN2X21zcyArIE1BWF9UQ1BfT1BUSU9OX1NQQUNFLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI2NS1cXHRcXHRcXHRcXHR0Y3BfZ3JvX2Rldl93YXJuLCBzaywgc2tiLCBsZW4pO1xcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmg9MTI1PWRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xNTYtI2RlZmluZSBsaW5rX2Vycl9vbmNlKGxpbmssIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxNTc6XFx0RE9fT05DRV9MSVRFKGxpbmtfZXJyLCBsaW5rLCBmbXQsICMjX19WQV9BUkdTX18pXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMTU4LSNkZWZpbmUgbGlua19pZF9pbmZvKHNkYXRhLCBsaW5rX2lkLCBmbXQsIC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5ydXN0L2tlcm5lbC9wcmludC5ycz00MjY9bWFjcm9fcnVsZXMhIHByX2NvbnQgKFxcbi0tXFxucnVzdC9rZXJuZWwvcHJpbnQucnMtNDMzLS8vL1xcbnJ1c3Qva2VybmVsL3ByaW50LnJzOjQzNDovLy8gVGhpcyBzdHJ1Y3R1cmUgcHJvdmlkZXMgdGhlIFJ1c3QgZXF1aXZhbGVudCBvZiB0aGUga2VybmVsJ3MgYERPX09OQ0VfTElURWAgbWFjcm8uXFxucnVzdC9rZXJuZWwvcHJpbnQucnMtNDM1LS8vLyBXaGlsZSBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBpbXBsZW1lbnQgdGhlIGZlYXR1cmUgZW50aXJlbHkgYXMgYSBSdXN0IG1hY3JvLFxcbi0tXFxucnVzdC9rZXJuZWwvcHJpbnQucnM9NDY4PSAgICBwdWIgZm4gY2FsbF9vbmNlXFx1MDAzY0ZcXHUwMDNlKFxcdTAwMjZzZWxmLCBmOiBGKSAtXFx1MDAzZSBib29sXFxuLS1cXG5ydXN0L2tlcm5lbC9wcmludC5ycy00OTEtLy8vXFxucnVzdC9rZXJuZWwvcHJpbnQucnM6NDkyOi8vLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGtlcm5lbCdzIGBET19PTkNFX0xJVEVgIG1hY3JvLlxcbnJ1c3Qva2VybmVsL3ByaW50LnJzLTQ5My0vLy9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTU6MjA6NTYuMzE4MzE2OTY4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0NzgwNTQxOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWZhY3RvcmluZyBvZiBgX19PTkNFX0xJVEVfSUZgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nIG9mIHRoZSBgX19PTkNFX0xJVEVfSUZgIG1hY3JvIGluIGBpbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oYC4gVGhlIG9yaWdpbmFsIHZlcnNpb24gd2FzIGEgYml0IGNsdW5reSwgY29tYmluaW5nIHRoZSBjb25kaXRpb24gY2hlY2sgYW5kIHRoZSBcIm9uY2VcIiBleGVjdXRpb24gd2l0aGluIGEgc2luZ2xlIG1hY3JvLiBUaGlzIHJlZmFjdG9yaW5nIGNsZWFubHkgc2VwYXJhdGVzIHRoZSBjb25kaXRpb24gZXZhbHVhdGlvbiBmcm9tIHRoZSBcIm9uY2VcIiBleGVjdXRpb24gaW50byB0d28gbWFjcm9zOiBgX19PTkNFX0xJVEVfSUYoY29uZGl0aW9uKWAgYW5kIGBfX09OQ0VfTElURSgpYC5cblxuVGhlIGtleSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgX19PTkNFX0xJVEUoKWAsIHdoaWNoIGVuY2Fwc3VsYXRlcyB0aGUgbG9naWMgZm9yIHRoZSBcIm9uY2VcIiBleGVjdXRpb24uICBJdCBjaGVja3MgYSBzdGF0aWMgYm9vbGVhbiB2YXJpYWJsZSwgYF9fYWxyZWFkeV9kb25lYCwgaW4gdGhlIGAuZGF0YS4ub25jZWAgc2VjdGlvbi4gQ3JpdGljYWxseSwgdGhpcyBzdGF0aWMgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCAoemVyby1pbml0aWFsaXplZCksIGFzIGl0IHJlc2lkZXMgaW4gYSBCU1MvZGF0YSBzZWN0aW9uLiBUaGUgY29uZGl0aW9uIGNoZWNrIGluIHRoZSBuZXcgYF9fT05DRV9MSVRFX0lGYCBpcyBub3cgYSBzaW1wbGUgc2hvcnQtY2lyY3VpdCBldmFsdWF0aW9uOiBgdW5saWtlbHkoY29uZGl0aW9uKSBcdTAwMjZcdTAwMjYgX19PTkNFX0xJVEUoKWAuIFRoaXMgbWVhbnMgaWYgdGhlIGNvbmRpdGlvbiBpcyAqdW5saWtlbHkqIHRvIGJlIHRydWUgYW5kIHRoZSAqY29uZGl0aW9uKiBpcyAqdHJ1ZSosIHRoZW4gYF9fT05DRV9MSVRFKClgIHJ1bnMgb25seSBvbmNlLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcywgb2YgY291cnNlLCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQnV0LCByZXZpZXdpbmcgdGhlIGNvZGUsIGl0J3MgY2xlYXIgdGhlcmUgYXJlIG5vbmUuXG5cbiogICBObyBuZXcgbWVtb3J5IGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBvbiBlaXRoZXIgdGhlIHN0YWNrIG9yIHRoZSBoZWFwLlxuKiAgIE5vIGRhdGEgaXMgY29waWVkIHRvIG9yIGZyb20gdXNlcnNwYWNlLCBzbyB0aGVyZSBhcmUgbm8gcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLlxuKiAgIFRoZSBgX19hbHJlYWR5X2RvbmVgIHZhcmlhYmxlIGlzIHN0YXRpYyBhbmQgdGh1cyBpbml0aWFsaXplZCBieSB0aGUgbGlua2VyIHRvIGBmYWxzZWAuXG4qICAgVGhlIGBfX3JldF9vbmNlYCB2YXJpYWJsZSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAuXG4qICAgVGhlIGxvZ2ljIGl0c2VsZiBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBib29sZWFuIGV2YWx1YXRpb24gd2l0aCBhIHN0YXRpYyBmbGFnJ3Mgc3RhdGUgY2hhbmdlLCBzbyB0aGVyZSdzIG5vIHdheSBpdCByZWxpZXMgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuXG5cbkknbSB0aGlua2luZyBhYm91dCBLQVNBTiBhbmQgS01TQU4gaGVyZS4gS0FTQU4gd2lsbCBjYXRjaCBnZW5lcmFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBpbmNsdWRpbmcgcHJvYmxlbXMgd2l0aCBzdGF0aWMgdmFyaWFibGVzLCBhbmQgS01TQU4gaXMgYWxsIGFib3V0IGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoaGVhcCwgc3RhY2ssIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBsZWFrcyB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yOyBpdCBvcHRpbWl6ZXMgdGhlIGV4aXN0aW5nIGxvZ2ljLiBJdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSwgbm9yIGRvZXMgaXQgcmVhZCB1bmluaXRpYWxpemVkIHZhbHVlcy5cblxuVGhlcmVmb3JlLCB0aGlzIHJlZmFjdG9yaW5nIGRvZXMgbm90IG5lZWQgS01TQU4gYW5hbHlzaXMsIGFuZCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLiBJIGNhbiBnbyBhaGVhZCBhbmQgY29uc3RydWN0IHRoZSByZXNwb25zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk5NCwiT3V0cHV0VG9rZW5zIjoxNzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTU6MjE6MDIuNzk2MzczOTc3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBfX09OQ0VfTElURV9JRmAgbWFjcm8gaW4gYGluY2x1ZGUvbGludXgvb25jZV9saXRlLmhgIGludG8gYSBzdGFuZGFsb25lIGBfX09OQ0VfTElURSgpYCBoZWxwZXIgYW5kIHNob3J0LWNpcmN1aXRpbmcgYF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilgLlxcblxcbkFsbCB2YXJpYWJsZXMgdXNlZCB3aXRoaW4gdGhlIG1hY3JvcyAoYF9fYWxyZWFkeV9kb25lYCBpbiBgLmRhdGEuLm9uY2VgIGFuZCBsb2NhbCBib29sZWFuIGBfX3JldF9vbmNlID0gZmFsc2VgKSBhcmUgc3RhdGljIG9yIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCB0b3VjaCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5LCB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcywgbWVtb3J5IGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mb2xlYWtzLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBfX09OQ0VfTElURV9JRmAgbWFjcm8gaW4gYGluY2x1ZGUvbGludXgvb25jZV9saXRlLmhgIGludG8gYSBzdGFuZGFsb25lIGBfX09OQ0VfTElURSgpYCBoZWxwZXIgYW5kIHNob3J0LWNpcmN1aXRpbmcgYF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilgLlxcblxcbkFsbCB2YXJpYWJsZXMgdXNlZCB3aXRoaW4gdGhlIG1hY3JvcyAoYF9fYWxyZWFkeV9kb25lYCBpbiBgLmRhdGEuLm9uY2VgIGFuZCBsb2NhbCBib29sZWFuIGBfX3JldF9vbmNlID0gZmFsc2VgKSBhcmUgc3RhdGljIG9yIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCB0b3VjaCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5LCB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcywgbWVtb3J5IGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mb2xlYWtzLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflown8kjs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 14:20:20 +0000 UTC FinishedAt: 2026-09-04 15:21:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "series_id": "675503d5-40fa-429d-b086-e980589175c1" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "netdev_rx_csum_fault", "skb_checksum_help", "xfs_file_ioctl", "xfs_fs_fill_super" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZGV2X3J4X2NzdW1fZmF1bHQmIzM0OywKICAgICYjMzQ7c2tiX2NoZWNrc3VtX2hlbHAmIzM0OywKICAgICYjMzQ7eGZzX2ZpbGVfaW9jdGwmIzM0OywKICAgICYjMzQ7eGZzX2ZzX2ZpbGxfc3VwZXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBfX09OQ0VfTElURV9JRmAgbWFjcm8gaW4gYGluY2x1ZGUvbGludXgvb25jZV9saXRlLmhgIGludG8gYSBzdGFuZGFsb25lIGBfX09OQ0VfTElURSgpYCBoZWxwZXIgYW5kIHNob3J0LWNpcmN1aXRpbmcgYF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilgLlxuXG5BbGwgdmFyaWFibGVzIHVzZWQgd2l0aGluIHRoZSBtYWNyb3MgKGBfX2FscmVhZHlfZG9uZWAgaW4gYC5kYXRhLi5vbmNlYCBhbmQgbG9jYWwgYm9vbGVhbiBgX19yZXRfb25jZSA9IGZhbHNlYCkgYXJlIHN0YXRpYyBvciBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgdG91Y2ggZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSwgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMsIG1lbW9yeSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm9sZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgRE9fT05DRV9MSVRFIC8gX19PTkNFX0xJVEVfSUYgaGVscGVyIG1hY3JvIGRlZmluaXRpb25zIGluIGluY2x1ZGUvbGludXgvb25jZV9saXRlLmgsIHNlcGFyYXRpbmcgb3V0IF9fT05DRV9MSVRFKCkgYW5kIGFsdGVyaW5nIHRoZSBjb25kaXRpb24gZXZhbHVhdGlvbiBsb2dpYyBmb3Igb25lLXRpbWUgZXhlY3V0aW9uIGFjcm9zcyB0aGUga2VybmVsLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGluZnJhc3RydWN0dXJlIHVzZWQgaW4gbmV0d29ya2luZywgZmlsZXN5c3RlbXMsIGFuZCBnZW5lcmljIGJ1Zy93YXJuaW5nIG1hY3Jvcywgd2FycmFudGluZyBmdXp6aW5nIHRvIHZlcmlmeSBydW50aW1lIGV2YWx1YXRpb24gYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTU6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1MjExNmM3Yjk1OGY4ODVhZmE3MzRhOWVkYWQzN2UwZDBjNzE5NGJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxNToxODozNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oIGIvaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaFxuaW5kZXggMjM2NTkyYzRlZWIxYS4uNWUyYjY3MDM5YWFmMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvb25jZV9saXRlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvb25jZV9saXRlLmhcbkBAIC0xMCwxOSAmIzQzOzEwLDIxIEBAXG4gI2RlZmluZSBET19PTkNFX0xJVEUoZnVuYywgLi4uKVx0XHRcdFx0XHRcdFxcXG4gXHRET19PTkNFX0xJVEVfSUYodHJ1ZSwgZnVuYywgIyNfX1ZBX0FSR1NfXylcbiBcbi0jZGVmaW5lIF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilcdFx0XHRcdFx0XFxcbiYjNDM7I2RlZmluZSBfX09OQ0VfTElURSgpXHRcdFx0XHRcdFx0XHRcXFxuIFx0KHtcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdFx0c3RhdGljIGJvb2wgX19zZWN0aW9uKFwmIzM0Oy5kYXRhLi5vbmNlXCYjMzQ7KSBfX2FscmVhZHlfZG9uZTtcdFxcXG4tXHRcdGJvb2wgX19yZXRfY29uZCA9ICEhKGNvbmRpdGlvbik7XHRcdFx0XFxcbiBcdFx0Ym9vbCBfX3JldF9vbmNlID0gZmFsc2U7XHRcdFx0XHRcXFxuIFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdGlmICh1bmxpa2VseShfX3JldF9jb25kKSBcdTAwMjZcdTAwMjYgdW5saWtlbHkoIV9fYWxyZWFkeV9kb25lKSkge1xcXG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIV9fYWxyZWFkeV9kb25lKSkge1x0XHRcdFxcXG4gXHRcdFx0X19hbHJlYWR5X2RvbmUgPSB0cnVlO1x0XHRcdFx0XFxcbiBcdFx0XHRfX3JldF9vbmNlID0gdHJ1ZTtcdFx0XHRcdFxcXG4gXHRcdH1cdFx0XHRcdFx0XHRcdFxcXG4gXHRcdHVubGlrZWx5KF9fcmV0X29uY2UpO1x0XHRcdFx0XHRcXFxuIFx0fSlcbiBcbiYjNDM7I2RlZmluZSBfX09OQ0VfTElURV9JRihjb25kaXRpb24pXHRcdFx0XHRcdFxcXG4mIzQzO1x0KHVubGlrZWx5KGNvbmRpdGlvbikgXHUwMDI2XHUwMDI2IF9fT05DRV9MSVRFKCkpXG4mIzQzO1xuICNkZWZpbmUgRE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgZnVuYywgLi4uKVx0XHRcdFx0XFxcbiBcdCh7XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRcdGJvb2wgX19yZXRfZG9fb25jZSA9ICEhKGNvbmRpdGlvbik7XHRcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGRldl9yeF9jc3VtX2ZhdWx0JiMzNDssCiAgICAmIzM0O3NrYl9jaGVja3N1bV9oZWxwJiMzNDssCiAgICAmIzM0O3hmc19maWxlX2lvY3RsJiMzNDssCiAgICAmIzM0O3hmc19mc19maWxsX3N1cGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgRE9fT05DRV9MSVRFIC8gX19PTkNFX0xJVEVfSUYgaGVscGVyIG1hY3JvIGRlZmluaXRpb25zIGluIGluY2x1ZGUvbGludXgvb25jZV9saXRlLmgsIHNlcGFyYXRpbmcgb3V0IF9fT05DRV9MSVRFKCkgYW5kIGFsdGVyaW5nIHRoZSBjb25kaXRpb24gZXZhbHVhdGlvbiBsb2dpYyBmb3Igb25lLXRpbWUgZXhlY3V0aW9uIGFjcm9zcyB0aGUga2VybmVsLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGluZnJhc3RydWN0dXJlIHVzZWQgaW4gbmV0d29ya2luZywgZmlsZXN5c3RlbXMsIGFuZCBnZW5lcmljIGJ1Zy93YXJuaW5nIG1hY3Jvcywgd2FycmFudGluZyBmdXp6aW5nIHRvIHZlcmlmeSBydW50aW1lIGV2YWx1YXRpb24gYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MjExNmM3Yjk1OGY4ODVhZmE3MzRhOWVkYWQzN2UwZDBjNzE5NGJkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxNToxODozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb25jZV9saXRlLmggYi9pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oCmluZGV4IDIzNjU5MmM0ZWViMWEuLjVlMmI2NzAzOWFhZjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvb25jZV9saXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaApAQCAtMTAsMTkgJiM0MzsxMCwyMSBAQAogI2RlZmluZSBET19PTkNFX0xJVEUoZnVuYywgLi4uKQkJCQkJCVwKIAlET19PTkNFX0xJVEVfSUYodHJ1ZSwgZnVuYywgIyNfX1ZBX0FSR1NfXykKIAotI2RlZmluZSBfX09OQ0VfTElURV9JRihjb25kaXRpb24pCQkJCQlcCiYjNDM7I2RlZmluZSBfX09OQ0VfTElURSgpCQkJCQkJCVwKIAkoewkJCQkJCQkJXAogCQlzdGF0aWMgYm9vbCBfX3NlY3Rpb24oJiMzNDsuZGF0YS4ub25jZSYjMzQ7KSBfX2FscmVhZHlfZG9uZTsJXAotCQlib29sIF9fcmV0X2NvbmQgPSAhIShjb25kaXRpb24pOwkJCVwKIAkJYm9vbCBfX3JldF9vbmNlID0gZmFsc2U7CQkJCVwKIAkJCQkJCQkJCVwKLQkJaWYgKHVubGlrZWx5KF9fcmV0X2NvbmQpICZhbXA7JmFtcDsgdW5saWtlbHkoIV9fYWxyZWFkeV9kb25lKSkge1wKJiM0MzsJCWlmICh1bmxpa2VseSghX19hbHJlYWR5X2RvbmUpKSB7CQkJXAogCQkJX19hbHJlYWR5X2RvbmUgPSB0cnVlOwkJCQlcCiAJCQlfX3JldF9vbmNlID0gdHJ1ZTsJCQkJXAogCQl9CQkJCQkJCVwKIAkJdW5saWtlbHkoX19yZXRfb25jZSk7CQkJCQlcCiAJfSkKIAomIzQzOyNkZWZpbmUgX19PTkNFX0xJVEVfSUYoY29uZGl0aW9uKQkJCQkJXAomIzQzOwkodW5saWtlbHkoY29uZGl0aW9uKSAmYW1wOyZhbXA7IF9fT05DRV9MSVRFKCkpCiYjNDM7CiAjZGVmaW5lIERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIGZ1bmMsIC4uLikJCQkJXAogCSh7CQkJCQkJCQlcCiAJCWJvb2wgX19yZXRfZG9fb25jZSA9ICEhKGNvbmRpdGlvbik7CQkJXAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDQ5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyBwYXRjaCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKlBhdGNoIEFuYWx5c2lzIGFuZCBJbXBhY3QgQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgSSBkbyBpcyBhbmFseXplIHRoZSBwYXRjaC4gSXQgc2VlbXMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBtb2RpZmljYXRpb24gdG8gYGluY2x1ZGUvbGludXgvb25jZV9saXRlLmhgLiBTbywgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoYXQgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBvbmNlX2xpdGUuaGAgaXMgYWxsIGFib3V0LiBJcyBpdCBhIGNyaXRpY2FsIHBpZWNlIG9mIGluZnJhc3RydWN0dXJlLCBzb21ldGhpbmcgdXNlZCB0aHJvdWdob3V0IHRoZSBrZXJuZWwsIG9yIG1vcmUgbG9jYWxpemVkPyBLbm93aW5nIHRoZSBzY29wZSBpcyBlc3NlbnRpYWwuCgpOZXh0LCBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNoYW5nZXMgd2l0aGluIGBvbmNlX2xpdGUuaGAgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hhdCogaGFzIGNoYW5nZWQuIElzIGl0IGp1c3Qgd2hpdGVzcGFjZSwgYSBidWcgZml4LCBhbiBvcHRpbWl6YXRpb24sIG9yIGlzIGl0IGEgZnVuZGFtZW50YWwgYWx0ZXJhdGlvbiBvZiB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgYG9uY2VfbGl0ZWAgbWVjaGFuaXNtPyBJIG5lZWQgdG8gbG9vayBmb3IgYW55IG5ldyBBUEkgY2FsbHMsIGNoYW5nZXMgdG8gZGF0YSBzdHJ1Y3R1cmVzLCBvciBtb2RpZmljYXRpb25zIHRoYXQgY291bGQgYWZmZWN0IGV4aXN0aW5nIGNvZGUuIEZpbmFsbHksIHdoZXJlIGlzIHRoaXMgaGVhZGVyIGZpbGUgdXNlZD8gQSBxdWljayBncmVwIHRocm91Z2ggdGhlIGNvZGUgYmFzZSB3aWxsIGhpZ2hsaWdodCBhbGwgb2YgdGhlIHJlZmVyZW5jZXMgdG8gdGhpcyBmaWxlLCBhbmQgcmV2ZWFsIHRoZSBhcmVhcyBvZiB0aGUga2VybmVsIHRoYXQgZGVwZW5kIG9uIHRoaXMgbWVjaGFuaXNtLiBJIHdpbGwgdGhlbiBwZXJmb3JtIGEgY29kZSByZXZpZXcgb24gdGhvc2UgZmlsZXMsIHRvIGV4YW1pbmUgaG93IHRoZXkgYXJlIGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2VzLiBPbmx5IHRoZW4gY2FuIEkgdHJ1bHkgYXNzZXNzIHRoZSBpbXBhY3QgYW5kIHJpc2sgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiAgIDI6XHQjaWZuZGVmIF9MSU5VWF9PTkNFX0xJVEVfSFxuICAgMzpcdCNkZWZpbmUgX0xJTlVYX09OQ0VfTElURV9IXG4gICA0Olx0XG4gICA1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICAgNjpcdFxuICAgNzpcdC8qIENhbGwgYSBmdW5jdGlvbiBvbmNlLiBTaW1pbGFyIHRvIERPX09OQ0UoKSwgYnV0IGRvZXMgbm90IHVzZSBqdW1wIGxhYmVsXG4gICA4Olx0ICogcGF0Y2hpbmcgdmlhIHN0YXRpYyBrZXlzLlxuICAgOTpcdCAqL1xuICAxMDpcdCNkZWZpbmUgRE9fT05DRV9MSVRFKGZ1bmMsIC4uLilcdFx0XHRcdFx0XHRcXFxuICAxMTpcdFx0RE9fT05DRV9MSVRFX0lGKHRydWUsIGZ1bmMsICMjX19WQV9BUkdTX18pXG4gIDEyOlx0XG4gIDEzOlx0I2RlZmluZSBfX09OQ0VfTElURSgpXHRcdFx0XHRcdFx0XHRcXFxuICAxNDpcdFx0KHtcdFx0XHRcdFx0XHRcdFx0XFxcbiAgMTU6XHRcdFx0c3RhdGljIGJvb2wgX19zZWN0aW9uKFwmIzM0Oy5kYXRhLi5vbmNlXCYjMzQ7KSBfX2FscmVhZHlfZG9uZTtcdFxcXG4gIDE2Olx0XHRcdGJvb2wgX19yZXRfb25jZSA9IGZhbHNlO1x0XHRcdFx0XFxcbiAgMTc6XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuICAxODpcdFx0XHRpZiAodW5saWtlbHkoIV9fYWxyZWFkeV9kb25lKSkge1x0XHRcdFxcXG4gIDE5Olx0XHRcdFx0X19hbHJlYWR5X2RvbmUgPSB0cnVlO1x0XHRcdFx0XFxcbiAgMjA6XHRcdFx0XHRfX3JldF9vbmNlID0gdHJ1ZTtcdFx0XHRcdFxcXG4gIDIxOlx0XHRcdH1cdFx0XHRcdFx0XHRcdFxcXG4gIDIyOlx0XHRcdHVubGlrZWx5KF9fcmV0X29uY2UpO1x0XHRcdFx0XHRcXFxuICAyMzpcdFx0fSlcbiAgMjQ6XHRcbiAgMjU6XHQjZGVmaW5lIF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilcdFx0XHRcdFx0XFxcbiAgMjY6XHRcdCh1bmxpa2VseShjb25kaXRpb24pIFx1MDAyNlx1MDAyNiBfX09OQ0VfTElURSgpKVxuICAyNzpcdFxuICAyODpcdCNkZWZpbmUgRE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgZnVuYywgLi4uKVx0XHRcdFx0XFxcbiAgMjk6XHRcdCh7XHRcdFx0XHRcdFx0XHRcdFxcXG4gIDMwOlx0XHRcdGJvb2wgX19yZXRfZG9fb25jZSA9ICEhKGNvbmRpdGlvbik7XHRcdFx0XFxcbiAgMzE6XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuICAzMjpcdFx0XHRpZiAoX19PTkNFX0xJVEVfSUYoX19yZXRfZG9fb25jZSkpXHRcdFx0XFxcbiAgMzM6XHRcdFx0XHRmdW5jKF9fVkFfQVJHU19fKTtcdFx0XHRcdFxcXG4gIDM0Olx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAgMzU6XHRcdFx0dW5saWtlbHkoX19yZXRfZG9fb25jZSk7XHRcdFx0XHRcXFxuICAzNjpcdFx0fSlcbiAgMzc6XHRcbiAgMzg6XHQjZW5kaWYgLyogX0xJTlVYX09OQ0VfTElURV9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk1OAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBgb25jZV9saXRlLmhgIFVzYWdlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiBgb25jZV9saXRlLmhgIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gcGlucG9pbnQgZXZlcnkgaW5zdGFuY2Ugd2hlcmUgdGhpcyBoZWFkZXIgZmlsZSBpcyBpbmNsdWRlZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICpob3cqIGl0JiMzOTtzIGJlaW5nIHVzZWQgd2l0aGluIHRob3NlIGNvbnRleHRzLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGZpbmRpbmcgdGhlIGluY2x1ZGVzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBhbnkgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gaXQuIEkmIzM5O2xsIG5lZWQgdG8gZ28gYmV5b25kIGEgc2ltcGxlIGBncmVwYCBvciBgZmluZGAgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgb25jZV9saXRlLmhgIGluIHRoZSBrZXJuZWwuIEFyZSB0aGVyZSBhbnkgdW51c3VhbCBjYWxsaW5nIHBhdHRlcm5zPyBBcmUgdGhlcmUgYW55IGFyZWFzIHRoYXQgbG9vayByaXBlIGZvciBvcHRpbWl6YXRpb24gcmVsYXRlZCB0byBpdHMgdXNhZ2U/IFRpbWUgdG8gZGlnIGluIGFuZCBkbyBzb21lIHNlcmlvdXMgc3RhdGljIGFuYWx5c2lzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIHVuY292ZXIhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b25jZV9saXRlXFwuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy94ZnMveGZzX21lc3NhZ2UuaC00LVxuZnMveGZzL3hmc19tZXNzYWdlLmg6NTojaW5jbHVkZSBcdTAwM2NsaW51eC9vbmNlX2xpdGUuaFx1MDAzZVxuZnMveGZzL3hmc19tZXNzYWdlLmgtNi1cbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTYtI2luY2x1ZGUgXHUwMDNjbGludXgvaW5zdHJ1bWVudGF0aW9uLmhcdTAwM2VcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmg6NzojaW5jbHVkZSBcdTAwM2NsaW51eC9vbmNlX2xpdGUuaFx1MDAzZVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaC04LVxuLS1cbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtOS0jaW5jbHVkZSBcdTAwM2NsaW51eC9yYXRlbGltaXRfdHlwZXMuaFx1MDAzZVxuaW5jbHVkZS9saW51eC9wcmludGsuaDoxMDojaW5jbHVkZSBcdTAwM2NsaW51eC9vbmNlX2xpdGUuaFx1MDAzZVxuaW5jbHVkZS9saW51eC9wcmludGsuaC0xMS1cbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0yMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9jdHlwZS5oXHUwMDNlXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoyMzojaW5jbHVkZSBcdTAwM2NsaW51eC9vbmNlX2xpdGUuaFx1MDAzZVxua2VybmVsL3RyYWNlL3RyYWNlLmgtMjQtI2luY2x1ZGUgXHUwMDNjbGludXgvZnRyYWNlX3JlZ3MuaFx1MDAzZVxuLS1cbm5ldC9jb3JlL2Rldi5jLTE1Ny0jaW5jbHVkZSBcdTAwM2NsaW51eC9wcmFuZG9tLmhcdTAwM2Vcbm5ldC9jb3JlL2Rldi5jOjE1ODojaW5jbHVkZSBcdTAwM2NsaW51eC9vbmNlX2xpdGUuaFx1MDAzZVxubmV0L2NvcmUvZGV2LmMtMTU5LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtNy0jZGVmaW5lIF9fTUFDODAyMTFfREVCVUdfSFxubmV0L21hYzgwMjExL2RlYnVnLmg6ODojaW5jbHVkZSBcdTAwM2NsaW51eC9vbmNlX2xpdGUuaFx1MDAzZVxubmV0L21hYzgwMjExL2RlYnVnLmgtOS0jaW5jbHVkZSBcdTAwM2NuZXQvY2ZnODAyMTEuaFx1MDAzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1OTMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyB0aGUgJiMzNDtPTkNFX0xJVEUmIzM0OyBNYWNyb3MqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIHVzYWdlIG9mIHRoZXNlIGBfX09OQ0VfTElURV9JRmAsIGBfX09OQ0VfTElURWAsIGBET19PTkNFX0xJVEVgLCBhbmQgYERPX09OQ0VfTElURV9JRmAgbWFjcm9zLiAgVGhlIGdvYWwgaGVyZSBpcyBwcm9iYWJseSB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBiZWluZyB1c2VkIHdpdGhpbiB0aGUgY29kZWJhc2UuIEZpcnN0LCBhIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdG8gY2hlY2sgaG93IGBidWcuaGAgaW4gdGhlIGdlbmVyaWMgYXNzZW1ibHkgaW5jbHVkZXMgdXRpbGl6ZXMgdGhlbSBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBpbnZlc3RpZ2F0aW9uIHN0YXJ0ZWQuIExldCYjMzk7cyBkaWcgaW50byBgaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaGAgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fT05DRV9MSVRFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL2V4dGFibGUuYz0xNjY9c3RhdGljIGJvb2wgZXhfaGFuZGxlcl9tc3IoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZml4dXAsXG4tLVxuYXJjaC94ODYvbW0vZXh0YWJsZS5jLTE2OC17XG5hcmNoL3g4Ni9tbS9leHRhYmxlLmM6MTY5Olx0aWYgKF9fT05DRV9MSVRFX0lGKCFzYWZlIFx1MDAyNlx1MDAyNiB3cm1zcikpIHtcbmFyY2gveDg2L21tL2V4dGFibGUuYy0xNzAtXHRcdHByX3dhcm4oXCYjMzQ7dW5jaGVja2VkIE1TUiBhY2Nlc3MgZXJyb3I6IFdSTVNSIHRvIDB4JXggKHRyaWVkIHRvIHdyaXRlIDB4JTA4eCUwOHgpIGF0IHJJUDogMHglbHggKCVwUylcXG5cJiMzNDssXG4tLVxuYXJjaC94ODYvbW0vZXh0YWJsZS5jLTE3NS1cbmFyY2gveDg2L21tL2V4dGFibGUuYzoxNzY6XHRpZiAoX19PTkNFX0xJVEVfSUYoIXNhZmUgXHUwMDI2XHUwMDI2ICF3cm1zcikpIHtcbmFyY2gveDg2L21tL2V4dGFibGUuYy0xNzctXHRcdHByX3dhcm4oXCYjMzQ7dW5jaGVja2VkIE1TUiBhY2Nlc3MgZXJyb3I6IFJETVNSIGZyb20gMHgleCBhdCBySVA6IDB4JWx4ICglcFMpXFxuXCYjMzQ7LFxuLS1cbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMTItXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjEzOiNkZWZpbmUgX19PTkNFX0xJVEUoKVx0XHRcdFx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMTQtXHQoe1x0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMjQtXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjI1OiNkZWZpbmUgX19PTkNFX0xJVEVfSUYoY29uZGl0aW9uKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoyNjpcdCh1bmxpa2VseShjb25kaXRpb24pIFx1MDAyNlx1MDAyNiBfX09OQ0VfTElURSgpKVxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0yNy1cbi0tXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTMxLVx0XHRcdFx0XHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjMyOlx0XHRpZiAoX19PTkNFX0xJVEVfSUYoX19yZXRfZG9fb25jZSkpXHRcdFx0XFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMzMtXHRcdFx0ZnVuYyhfX1ZBX0FSR1NfXyk7XHRcdFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNDEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgaWYgdGhleSYjMzk7cmUgbWluZToKCioqRGlnZ2luZyBpbnRvIHRoZSAmIzM0O09uY2UmIzM0OyBNZWNoYW5pc20qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyAmIzM0O29uY2UmIzM0OyBtZWNoYW5pc20gYmV0dGVyLCBzcGVjaWZpY2FsbHkgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZWJhc2UgZm9yIGluc3RhbmNlcyBvZiBgRE9fT05DRV9MSVRFYCwgYFdBUk5fT05DRWAsIG9yIGV2ZW4gaG93IHRoYXQgYG9uY2VfbGl0ZS5oYCBoZWFkZXIgZmlsZSBpcyB1dGlsaXplZC4gSSBmaWd1cmUgaWYgSSB0cmFjayBkb3duIHdoZXJlIHRob3NlIG1hY3JvcyBhcmUgYmVpbmcgKnVzZWQqLCBJJiMzOTtsbCBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSB1bmRlcmx5aW5nIGNvbmNlcHRzLiBJIGFsc28gbWlnaHQgbG9vayBhdCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIGltcG9ydGFudCBmaWxlcyBsaWtlIGBidWcuaGAgb3IgYHByaW50ay5oYCBzaW5jZSB0aGV5IGFyZSBlc3NlbnRpYWwgaW4ga2VybmVsIGRlYnVnZ2luZy4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBncmVwIGNhbiBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtET19PTkNFX0xJVEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYz0xMjM0PXN0YXRpYyBpbnQgd2FpdF9vbl9zZW0oc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHU2NCBkYXRhKVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMTI1NC1cdFx0aWYgKGFtZF9pb21tdV9kdW1wKVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYzoxMjU1Olx0XHRcdERPX09OQ0VfTElURShkdW1wX2NvbW1hbmRfYnVmZmVyLCBpb21tdSk7XG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTEyNTYtXG4tLVxuZnMvZXJvZnMvaW50ZXJuYWwuaD00NDY9ZXJvZnNfZ2V0X2FvcHMoc3RydWN0IGlub2RlICpyZWFsaW5vZGUpXG4tLVxuZnMvZXJvZnMvaW50ZXJuYWwuaC00NTAtXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApO1xuZnMvZXJvZnMvaW50ZXJuYWwuaDo0NTE6XHRcdERPX09OQ0VfTElURV9JRihyZWFsaW5vZGUtXHUwMDNlaV9ibGtiaXRzICE9IFBBR0VfU0hJRlQsXG5mcy9lcm9mcy9pbnRlcm5hbC5oLTQ1Mi1cdFx0XHQgIGVyb2ZzX2luZm8sIHJlYWxpbm9kZS1cdTAwM2VpX3NiLFxuLS1cbmZzL3hmcy94ZnNfbWVzc2FnZS5oPTUwPWRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmZzL3hmcy94ZnNfbWVzc2FnZS5oLTU4LSNkZWZpbmUgeGZzX3ByaW50a19vbmNlKGZ1bmMsIGRldiwgZm10LCAuLi4pXHRcdFx0XFxcbmZzL3hmcy94ZnNfbWVzc2FnZS5oOjU5Olx0RE9fT05DRV9MSVRFKGZ1bmMsIGRldiwgZm10LCAjI19fVkFfQVJHU19fKVxuZnMveGZzL3hmc19tZXNzYWdlLmgtNjAtXG4tLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaD0xMDM9ZXh0ZXJuIF9fcHJpbnRmKDEsIDIpIHZvaWQgX193YXJuX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7XG4tLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaC0xNzktI2RlZmluZSBXQVJOX09OX09OQ0UoY29uZGl0aW9uKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaDoxODA6XHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOX09OLCAxKVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaC0xODEtI2VuZGlmXG4tLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaC0xODQtI2RlZmluZSBXQVJOX09OQ0UoY29uZGl0aW9uLCBmb3JtYXQuLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaDoxODU6XHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOLCAxLCBmb3JtYXQpXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE4Ni0jZW5kaWZcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE4OC0jZGVmaW5lIFdBUk5fVEFJTlRfT05DRShjb25kaXRpb24sIHRhaW50LCBmb3JtYXQuLi4pXHRcdFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oOjE4OTpcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk5fVEFJTlQsIDEsIHRhaW50LCBmb3JtYXQpXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE5MC1cbi0tXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTktICovXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjEwOiNkZWZpbmUgRE9fT05DRV9MSVRFKGZ1bmMsIC4uLilcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoxMTpcdERPX09OQ0VfTElURV9JRih0cnVlLCBmdW5jLCAjI19fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0xMi1cbi0tXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTI3LVxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoyODojZGVmaW5lIERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIGZ1bmMsIC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTI5LVx0KHtcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oPTQwNz1zdHJ1Y3QgcGlfZW50cnkge1xuLS1cbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjQ5LSNkZWZpbmUgcHJpbnRrX29uY2UoZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oOjY1MDpcdERPX09OQ0VfTElURShwcmludGssIGZtdCwgIyNfX1ZBX0FSR1NfXylcbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjUxLSNkZWZpbmUgcHJpbnRrX2RlZmVycmVkX29uY2UoZm10LCAuLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9wcmludGsuaDo2NTI6XHRET19PTkNFX0xJVEUocHJpbnRrX2RlZmVycmVkLCBmbXQsICMjX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oLTY1My0jZWxzZVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9Mjc1MD1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2Fzc2VydF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI3NTMtXHRpZiAoV0FSTl9PTkNFKCFza2ItXHUwMDNlbGVuLCBcJiMzNDslc1xcblwmIzM0OywgX19mdW5jX18pKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoyNzU0Olx0XHRET19PTkNFX0xJVEUoc2tiX2R1bXAsIEtFUk5fRVJSLCBza2IsIGZhbHNlKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjc1NS0jZW5kaWYgLyogQ09ORklHX0RFQlVHX05FVCAqL1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oPTM3PWVudW0gdHJhY2VfdHlwZSB7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTI5LSNkZWZpbmUgTUVNX0ZBSUwoY29uZGl0aW9uLCBmbXQsIC4uLilcdFx0XHRcdFx0XFxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEzMDpcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIHByX2VyciwgXCYjMzQ7RVJST1I6IFwmIzM0OyBmbXQsICMjX19WQV9BUkdTX18pXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMzEtXG4tLVxubmV0L2NvcmUvZGV2LmM9MzYxNz1pbnQgc2tiX2NoZWNrc3VtX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9kZXYuYy0zNjQ1LVx0aWYgKHVubGlrZWx5KG9mZnNldCBcdTAwM2U9IHNrYl9oZWFkbGVuKHNrYikpKSB7XG5uZXQvY29yZS9kZXYuYzozNjQ2Olx0XHRET19PTkNFX0xJVEUoc2tiX2R1bXAsIEtFUk5fRVJSLCBza2IsIGZhbHNlKTtcbm5ldC9jb3JlL2Rldi5jLTM2NDctXHRcdFdBUk5fT05DRSh0cnVlLCBcJiMzNDtvZmZzZXQgKCVkKSBcdTAwM2U9IHNrYl9oZWFkbGVuKCkgKCV1KVxcblwmIzM0Oyxcbi0tXG5uZXQvY29yZS9kZXYuYy0zNjU0LVx0aWYgKHVubGlrZWx5KG9mZnNldCAmIzQzOyBzaXplb2YoX19zdW0xNikgXHUwMDNlIHNrYl9oZWFkbGVuKHNrYikpKSB7XG5uZXQvY29yZS9kZXYuYzozNjU1Olx0XHRET19PTkNFX0xJVEUoc2tiX2R1bXAsIEtFUk5fRVJSLCBza2IsIGZhbHNlKTtcbm5ldC9jb3JlL2Rldi5jLTM2NTYtXHRcdFdBUk5fT05DRSh0cnVlLCBcJiMzNDtvZmZzZXQmIzQzOzIgKCV6dSkgXHUwMDNlIHNrYl9oZWFkbGVuKCkgKCV1KVxcblwmIzM0Oyxcbi0tXG5uZXQvY29yZS9kZXYuYz0zNzQwPXZvaWQgbmV0ZGV2X3J4X2NzdW1fZmF1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL2Rldi5jLTM3NDEte1xubmV0L2NvcmUvZGV2LmM6Mzc0MjpcdERPX09OQ0VfTElURShkb19uZXRkZXZfcnhfY3N1bV9mYXVsdCwgZGV2LCBza2IpO1xubmV0L2NvcmUvZGV2LmMtMzc0My19XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9MjI3PXN0YXRpYyB2b2lkIHRjcF9tZWFzdXJlX3Jjdl9tc3Moc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI2My1cdFx0LyogQWNjb3VudCBmb3IgcG9zc2libHktcmVtb3ZlZCBvcHRpb25zICovXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzoyNjQ6XHRcdERPX09OQ0VfTElURV9JRihsZW4gXHUwMDNlIGljc2stXHUwMDNlaWNza19hY2sucmN2X21zcyAmIzQzOyBNQVhfVENQX09QVElPTl9TUEFDRSxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI2NS1cdFx0XHRcdHRjcF9ncm9fZGV2X3dhcm4sIHNrLCBza2IsIGxlbik7XG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmg9MTI1PWRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE1Ni0jZGVmaW5lIGxpbmtfZXJyX29uY2UobGluaywgZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxNTc6XHRET19PTkNFX0xJVEUobGlua19lcnIsIGxpbmssIGZtdCwgIyNfX1ZBX0FSR1NfXylcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE1OC0jZGVmaW5lIGxpbmtfaWRfaW5mbyhzZGF0YSwgbGlua19pZCwgZm10LCAuLi4pXHRcdFx0XHRcXFxuLS1cbnJ1c3Qva2VybmVsL3ByaW50LnJzPTQyNj1tYWNyb19ydWxlcyEgcHJfY29udCAoXG4tLVxucnVzdC9rZXJuZWwvcHJpbnQucnMtNDMzLS8vL1xucnVzdC9rZXJuZWwvcHJpbnQucnM6NDM0Oi8vLyBUaGlzIHN0cnVjdHVyZSBwcm92aWRlcyB0aGUgUnVzdCBlcXVpdmFsZW50IG9mIHRoZSBrZXJuZWwmIzM5O3MgYERPX09OQ0VfTElURWAgbWFjcm8uXG5ydXN0L2tlcm5lbC9wcmludC5ycy00MzUtLy8vIFdoaWxlIGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGltcGxlbWVudCB0aGUgZmVhdHVyZSBlbnRpcmVseSBhcyBhIFJ1c3QgbWFjcm8sXG4tLVxucnVzdC9rZXJuZWwvcHJpbnQucnM9NDY4PSAgICBwdWIgZm4gY2FsbF9vbmNlXHUwMDNjRlx1MDAzZShcdTAwMjZzZWxmLCBmOiBGKSAtXHUwMDNlIGJvb2xcbi0tXG5ydXN0L2tlcm5lbC9wcmludC5ycy00OTEtLy8vXG5ydXN0L2tlcm5lbC9wcmludC5yczo0OTI6Ly8vIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUga2VybmVsJiMzOTtzIGBET19PTkNFX0xJVEVgIG1hY3JvLlxucnVzdC9rZXJuZWwvcHJpbnQucnMtNDkzLS8vL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjcwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT3B0aW1pemF0aW9uIG9mIHRoZSBgX19PTkNFX0xJVEVgIE1hY3JvcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGNvZGUgY2hhbmdlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBhbHRlcmF0aW9uIGFuZCBpdHMgaW1wbGljYXRpb25zLiBJIHNlZSB0aGUgb3JpZ2luYWwgYF9fT05DRV9MSVRFX0lGYCBtYWNybyBhbmQgdGhlbiB0aGUgbmV3IGltcGxlbWVudGF0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgbWFjcm8sIGBfX09OQ0VfTElURSgpYC4KCkluIHRoZSBvbGQgY29kZSwgYF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilgIHdyYXBwZWQgdGhlIGBfX2FscmVhZHlfZG9uZWAgY2hlY2sgZGlyZWN0bHkgd2l0aGluIHRoZSBjb25kaXRpb25hbCBsb2dpYy4gVGhlIGBfX2FscmVhZHlfZG9uZWAgZmxhZyB3YXMgbG9jYWwgdG8gdGhhdCBtYWNyby4gVGhpcyBtZWFudCB0aGUgY2hlY2sgYW5kIHNldHRpbmcgb2YgdGhlIGZsYWcgb25seSBvY2N1cnJlZCBpZiB0aGUgYGNvbmRpdGlvbmAgd2FzIHRydWUuIEhvd2V2ZXIsIHRoZSBmbGFnIHdhcyBkZWNsYXJlZCAqaW5zaWRlKiB0aGUgbWFjcm8uCgpUaGUgbmV3IGNvZGUgcmVmYWN0b3JzIHRoaXMuIGBfX09OQ0VfTElURSgpYCBpcyBub3cgYSBzdGFuZGFsb25lIG1hY3JvIHJlc3BvbnNpYmxlIHNvbGVseSBmb3IgdGhlICYjMzQ7ZG8tb25jZSYjMzQ7IGJlaGF2aW9yIOKAkyBjaGVja2luZyBhbmQgc2V0dGluZyBgX19hbHJlYWR5X2RvbmVgLiBDcnVjaWFsbHksIGBfX09OQ0VfTElURV9JRihjb25kaXRpb24pYCBub3cgKmNhbGxzKiBgX19PTkNFX0xJVEUoKWAsIGJ1dCB1c2VzIHNob3J0LWNpcmN1aXRpbmcuIFRoaXMgbWVhbnMgdGhhdCBpZiBgY29uZGl0aW9uYCBpcyBmYWxzZSwgYF9fT05DRV9MSVRFKClgIGlzbiYjMzk7dCBldmFsdWF0ZWQgYXQgYWxsLiBUaGUgaW1wYWN0IGlzIHdlIGdldCB0aGUgc2FtZSBiZWhhdmlvciBvZiBleGVjdXRpbmcgYF9fYWxyZWFkeV9kb25lYCBvbmx5IGlmIHRoZSBjb25kaXRpb24gaXMgbWV0LCBidXQgbm93IHRoZSBmbGFnIGlzIHNlcGFyYXRlIGFuZCBwb3RlbnRpYWxseSByZXVzYWJsZS4KCkFoYSEgVGhpcyBhbHNvIGNsYXJpZmllcyB0aGUgbGlrZWx5IGludGVudC4gVGhlIGludHJvZHVjdGlvbiBvZiBgX19PTkNFX0xJVEUoKWAgb2ZmZXJzIGEgd2F5IHRvIGludm9rZSB0aGUgJiMzNDtkby1vbmNlJiMzNDsgbG9naWMgd2l0aG91dCBhbiBleHBsaWNpdCBjb25kaXRpb24sIHdoaWNoIHdhc24mIzM5O3QgYXMgY2xlYW4gaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uIE5vdywgSSBzZWUgdGhhdCB0aGUgb3JpZ2luYWwgYERPX09OQ0VfTElURWAgbWFjcm8gdXNlZCBgRE9fT05DRV9MSVRFX0lGKHRydWUsIC4uLilgOyBub3cgd2UgY2FuIHNpbXBseSBjYWxsIHRoZSBiYXNlIGZ1bmN0aW9uLgoKQnV0LCBhIHF1aWNrIHJlYWxpdHkgY2hlY2s6IGlzIHRoaXMgZXZlbiB1c2VkIGFueXdoZXJlPyBMZXQgbWUgY2hlY2sgdGhlIGNhbGwgc2l0ZXMgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJiMzOTt0IGRlYWQgY29kZSEgSSByZWNhbGwgYFdBUk5fT05fT05DRWAgbGV2ZXJhZ2VzIHRoaXMsIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhbmQgaXQmIzM5O3MgdXNlZCBpbiBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcy4uLiBTcGVjaWZpY2FsbHksIEkga25vdyB0aGF0IGBhc20tZ2VuZXJpYy9idWcuaGAgbWlnaHQgdXNlIHRoaXMsIGFuZCB0aGUgQU1ENjQgYXJjaGl0ZWN0dXJlIGlzIGFuIGltcG9ydGFudCBjYXNlIGZvciBtZSwgc28gbGV0JiMzOTtzIGNoZWNrIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9idWcuaGAgdG8gY29uZmlybSB0aGUgaW1wbGVtZW50YXRpb24uIEdvdHRhIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBhY3R1YWxseSByZWxldmFudCBhbmQgbm90IGEgaHlwb3RoZXRpY2FsIG9wdGltaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7V0FSTl9PTl9PTkNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDM1NTQgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmFyY2gveDg2L2NvY28vc2V2L3ZjLWhhbmRsZS5jPTM5PXN0YXRpYyBlbnVtIGVzX3Jlc3VsdCB2Y19zbG93X3ZpcnRfdG9fcGh5cyhzdHJ1Y3QgZ2hjYiAqZ2hjYiwgc3RydWN0IGVzX2VtX2N0eHQgKmN0eHQsXG4tLVxuYXJjaC94ODYvY29jby9zZXYvdmMtaGFuZGxlLmMtNjEtXG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1oYW5kbGUuYzo2MjpcdGlmIChXQVJOX09OX09OQ0UocHRlX3ZhbCgqcHRlKSBcdTAwMjYgX1BBR0VfRU5DKSlcbmFyY2gveDg2L2NvY28vc2V2L3ZjLWhhbmRsZS5jLTYzLVx0XHQvKiBFbXVsYXRlZCBNTUlPIHRvL2Zyb20gZW5jcnlwdGVkIG1lbW9yeSBub3Qgc3VwcG9ydGVkICovXG4tLVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM9NTc4PXN0YXRpYyBpbnQgaGFuZGxlX21taW8oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB2ZV9pbmZvICp2ZSlcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy01ODctXHQvKiBPbmx5IGluLWtlcm5lbCBNTUlPIGlzIHN1cHBvcnRlZCAqL1xuYXJjaC94ODYvY29jby90ZHgvdGR4LmM6NTg4Olx0aWYgKFdBUk5fT05fT05DRSh1c2VyX21vZGUocmVncykpKVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtNTg5LVx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy01OTctXHRtbWlvID0gaW5zbl9kZWNvZGVfbW1pbyhcdTAwMjZpbnNuLCBcdTAwMjZzaXplKTtcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjU5ODpcdGlmIChXQVJOX09OX09OQ0UobW1pbyA9PSBJTlNOX01NSU9fREVDT0RFX0ZBSUxFRCkpXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy01OTktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTY3Ny1cdFx0LyogQWxsIG90aGVyIGNhc2VzIGhhcyB0byBiZSBjb3ZlcmVkIHdpdGggdGhlIGZpcnN0IHN3aXRjaCgpICovXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzo2Nzg6XHRcdFdBUk5fT05fT05DRSgxKTtcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTY3OS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC94ODYvZW50cnkvY29tbW9uLmM9MTg9bm9pbnN0ciB2b2lkIHg4Nl9lbnRyeV9mcm9tX2t2bSh1bnNpZ25lZCBpbnQgZXZlbnRfdHlwZSwgdW5zaWduZWQgaW50IHZlY3Rvcilcbi0tXG5hcmNoL3g4Ni9lbnRyeS9jb21tb24uYy00NS1cbmFyY2gveDg2L2VudHJ5L2NvbW1vbi5jOjQ2Olx0V0FSTl9PTl9PTkNFKGV2ZW50X3R5cGUgIT0gRVZFTlRfVFlQRV9OTUkpO1xuYXJjaC94ODYvZW50cnkvY29tbW9uLmMtNDctXG4tLVxuYXJjaC94ODYvZW50cnkvZW50cnlfZnJlZC5jPTEyNz12b2lkIF9faW5pdCBmcmVkX2luc3RhbGxfc3lzdmVjKHVuc2lnbmVkIGludCBzeXN2ZWMsIGlkdGVudHJ5X3QgaGFuZGxlcilcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYy0xMjgte1xuYXJjaC94ODYvZW50cnkvZW50cnlfZnJlZC5jOjEyOTpcdGlmIChXQVJOX09OX09OQ0Uoc3lzdmVjIFx1MDAzYyBGSVJTVF9TWVNURU1fVkVDVE9SKSlcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYy0xMzAtXHRcdHJldHVybjtcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYy0xMzEtXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV9mcmVkLmM6MTMyOlx0aWYgKFdBUk5fT05fT05DRShmcmVkX3NldHVwX2RvbmUpKVxuYXJjaC94ODYvZW50cnkvZW50cnlfZnJlZC5jLTEzMy1cdFx0cmV0dXJuO1xuYXJjaC94ODYvZW50cnkvZW50cnlfZnJlZC5jLTEzNC1cbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYzoxMzU6XHRpZiAoIVdBUk5fT05fT05DRShzeXN2ZWNfdGFibGVbc3lzdmVjIC0gRklSU1RfU1lTVEVNX1ZFQ1RPUl0pKVxuYXJjaC94ODYvZW50cnkvZW50cnlfZnJlZC5jLTEzNi1cdFx0IHN5c3ZlY190YWJsZVtzeXN2ZWMgLSBGSVJTVF9TWVNURU1fVkVDVE9SXSA9IGhhbmRsZXI7XG4tLVxuYXJjaC94ODYvZW50cnkvZW50cnlfZnJlZC5jPTE2MD1zdGF0aWMgbm9pbnN0ciB2b2lkIGZyZWRfZXh0aW50KHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYy0xNjMtXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV9mcmVkLmM6MTY0Olx0aWYgKFdBUk5fT05fT05DRSh2ZWN0b3IgXHUwMDNjIEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUikpXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV9mcmVkLmMtMTY1LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvZW50cnkvZW50cnlfZnJlZC5jPTI4OT1fX3Zpc2libGUgbm9pbnN0ciB2b2lkIF9fZnJlZF9lbnRyeV9mcm9tX2t2bShzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV9mcmVkLmMtMjk2LVx0ZGVmYXVsdDpcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYzoyOTc6XHRcdFdBUk5fT05fT05DRSgxKTtcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYy0yOTgtXHR9XG4tLVxuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYz0yNTc9Ym9vbCBlbXVsYXRlX3ZzeXNjYWxsX3BmKHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4tLVxuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYy0yODUtXHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9OWCkpXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jOjI4NjpcdFx0V0FSTl9PTl9PTkNFKCEoZXJyb3JfY29kZSBcdTAwMjYgWDg2X1BGX0lOU1RSKSk7XG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jLTI4Ny1cbi0tXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jPTI4MT12b2lkIGFtZF9icnNfZHJhaW4odm9pZClcbi0tXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2Jycy5jLTMwMS1cdC8qIFNhbml0eSBjaGVjayBbMC14ODZfcG11Lmxicl9ucl0gKi9cbmFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmM6MzAyOlx0aWYgKFdBUk5fT05fT05DRShjZmcubXNyb2ZmIFx1MDAzZT0geDg2X3BtdS5sYnJfbnIpKVxuYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuYy0zMDMtXHRcdGdvdG8gZW1wdHk7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmM9NTgwPXN0YXRpYyBpbnQgYW1kX3BtdV9jcHVfcHJlcGFyZShpbnQgY3B1KVxuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jLTU4OC1cbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jOjU4OTpcdFdBUk5fT05fT05DRShjcHVjLVx1MDAzZWFtZF9uYik7XG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYy01OTAtXG4tLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmM9NjA0PXN0YXRpYyB2b2lkIGFtZF9wbXVfY3B1X3N0YXJ0aW5nKGludCBjcHUpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmMtNjE3LVx0bmJfaWQgPSB0b3BvbG9neV9hbWRfbm9kZV9pZChjcHUpO1xuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmM6NjE4Olx0V0FSTl9PTl9PTkNFKG5iX2lkID09IEJBRF9BUElDSUQpO1xuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmMtNjE5LVxuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jLTYyMS1cdFx0bmIgPSBwZXJfY3B1KGNwdV9od19ldmVudHMsIGkpLmFtZF9uYjtcbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jOjYyMjpcdFx0aWYgKFdBUk5fT05fT05DRSghbmIpKVxuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmMtNjIzLVx0XHRcdGNvbnRpbnVlO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmM9NTU1PXN0YXRpYyB2b2lkIHBlcmZfaWJzX3N0YXJ0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKVxuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmMtNTYxLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9pYnMuYzo1NjI6XHRpZiAoV0FSTl9PTl9PTkNFKCEoaHdjLVx1MDAzZXN0YXRlIFx1MDAyNiBQRVJGX0hFU19TVE9QUEVEKSkpXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2licy5jLTU2My1cdFx0cmV0dXJuO1xuYXJjaC94ODYvZXZlbnRzL2FtZC9pYnMuYy01NjQtXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2licy5jOjU2NTpcdFdBUk5fT05fT05DRSghKGh3Yy1cdTAwM2VzdGF0ZSBcdTAwMjYgUEVSRl9IRVNfVVBUT0RBVEUpKTtcbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmMtNTY2LVx0aHdjLVx1MDAzZXN0YXRlID0gMDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2licy5jPTU5Nz1zdGF0aWMgdm9pZCBwZXJmX2lic19zdG9wKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKVxuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmMtNjMzLVx0XHRjbGVhcl9iaXQoSUJTX1NUQVJURUQsIHBjcHUtXHUwMDNlc3RhdGUpO1xuYXJjaC94ODYvZXZlbnRzL2FtZC9pYnMuYzo2MzQ6XHRcdFdBUk5fT05fT05DRShod2MtXHUwMDNlc3RhdGUgXHUwMDI2IFBFUkZfSEVTX1NUT1BQRUQpO1xuYXJjaC94ODYvZXZlbnRzL2FtZC9pYnMuYy02MzUtXHRcdGh3Yy1cdTAwM2VzdGF0ZSB8PSBQRVJGX0hFU19TVE9QUEVEO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmM9MTQwNj1zdGF0aWMgaW50IHBlcmZfaWJzX2hhbmRsZV9pcnEoc3RydWN0IHBlcmZfaWJzICpwZXJmX2licywgc3RydWN0IHB0X3JlZ3MgKmlyZWdzKVxuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmMtMTQzMy1cbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmM6MTQzNDpcdGlmIChXQVJOX09OX09OQ0UoIWV2ZW50KSlcbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmMtMTQzNS1cdFx0Z290byBmYWlsO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvaW9tbXUuYz0yNzk9c3RhdGljIHZvaWQgcGVyZl9pb21tdV9zdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncylcbi0tXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2lvbW11LmMtMjgyLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9pb21tdS5jOjI4MzpcdGlmIChXQVJOX09OX09OQ0UoIShod2MtXHUwMDNlc3RhdGUgXHUwMDI2IFBFUkZfSEVTX1NUT1BQRUQpKSlcbmFyY2gveDg2L2V2ZW50cy9hbWQvaW9tbXUuYy0yODQtXHRcdHJldHVybjtcbmFyY2gveDg2L2V2ZW50cy9hbWQvaW9tbXUuYy0yODUtXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2lvbW11LmM6Mjg2Olx0V0FSTl9PTl9PTkNFKCEoaHdjLVx1MDAzZXN0YXRlIFx1MDAyNiBQRVJGX0hFU19VUFRPREFURSkpO1xuYXJjaC94ODYvZXZlbnRzL2FtZC9pb21tdS5jLTI4Ny1cdGh3Yy1cdTAwM2VzdGF0ZSA9IDA7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9pb21tdS5jPTMzMT1zdGF0aWMgdm9pZCBwZXJmX2lvbW11X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9pb21tdS5jLTM0NS1cdHBlcmZfaW9tbXVfZGlzYWJsZV9ldmVudChldmVudCk7XG5hcmNoL3g4Ni9ldmVudHMvYW1kL2lvbW11LmM6MzQ2Olx0V0FSTl9PTl9PTkNFKGh3Yy1cdTAwM2VzdGF0ZSBcdTAwMjYgUEVSRl9IRVNfU1RPUFBFRCk7XG5hcmNoL3g4Ni9ldmVudHMvYW1kL2lvbW11LmMtMzQ3LVx0aHdjLVx1MDAzZXN0YXRlIHw9IFBFUkZfSEVTX1NUT1BQRUQ7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2FtZC9sYnIuYz0zNjM9dm9pZCBhbWRfcG11X2xicl9kZWwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxuLS1cbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmMtMzczLVx0Y3B1Yy1cdTAwM2VsYnJfdXNlcnMtLTtcbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmM6Mzc0Olx0V0FSTl9PTl9PTkNFKGNwdWMtXHUwMDNlbGJyX3VzZXJzIFx1MDAzYyAwKTtcbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmMtMzc1LVx0cGVyZl9zY2hlZF9jYl9kZWMoZXZlbnQtXHUwMDNlcG11KTtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvYW1kL3Bvd2VyLmM9NzU9c3RhdGljIHZvaWQgX19wbXVfZXZlbnRfc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxuYXJjaC94ODYvZXZlbnRzL2FtZC9wb3dlci5jLTc2LXtcbmFyY2gveDg2L2V2ZW50cy9hbWQvcG93ZXIuYzo3NzpcdGlmIChXQVJOX09OX09OQ0UoIShldmVudC1cdTAwM2Vody5zdGF0ZSBcdTAwMjYgUEVSRl9IRVNfU1RPUFBFRCkpKVxuYXJjaC94ODYvZXZlbnRzL2FtZC9wb3dlci5jLTc4LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYz03OTY9c3RydWN0IHBtdSAqeDg2X2dldF9wbXUodW5zaWduZWQgaW50IGNwdSlcbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTgwMy1cdCAqL1xuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzo4MDQ6XHRpZiAoV0FSTl9PTl9PTkNFKCFjcHVjLVx1MDAzZXBtdSkpXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTgwNS1cdFx0cmV0dXJuIFx1MDAyNnBtdTtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jPTg2Mj1zdGF0aWMgdm9pZCBwZXJmX3NjaGVkX3NhdmVfc3RhdGUoc3RydWN0IHBlcmZfc2NoZWQgKnNjaGVkKVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy04NjMte1xuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzo4NjQ6XHRpZiAoV0FSTl9PTl9PTkNFKHNjaGVkLVx1MDAzZXNhdmVkX3N0YXRlcyBcdTAwM2U9IFNDSEVEX1NUQVRFU19NQVgpKVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy04NjUtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jPTEwMDg9aW50IHg4Nl9zY2hlZHVsZV9ldmVudHMoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIGludCBuLCBpbnQgKmFzc2lnbilcbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTEwMzUtXHRcdCAqL1xuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzoxMDM2Olx0XHRXQVJOX09OX09OQ0UoKGMgXHUwMDI2XHUwMDI2IGkgXHUwMDNlPSBuMCkgfHwgKCFjIFx1MDAyNlx1MDAyNiBpIFx1MDAzYyBuMCkpO1xuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0xMDM3LVxuLS1cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmM9MTU1MT1zdGF0aWMgdm9pZCB4ODZfcG11X3N0YXJ0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKVxuLS1cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmMtMTU1NS1cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmM6MTU1NjpcdGlmIChXQVJOX09OX09OQ0UoIShldmVudC1cdTAwM2Vody5zdGF0ZSBcdTAwMjYgUEVSRl9IRVNfU1RPUFBFRCkpKVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0xNTU3LVx0XHRyZXR1cm47XG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTE1NTgtXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjE1NTk6XHRpZiAoV0FSTl9PTl9PTkNFKGlkeCA9PSAtMSkpXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTE1NjAtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTE1NjItXHRpZiAoZmxhZ3MgXHUwMDI2IFBFUkZfRUZfUkVMT0FEKSB7XG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjE1NjM6XHRcdFdBUk5fT05fT05DRSghKGV2ZW50LVx1MDAzZWh3LnN0YXRlIFx1MDAyNiBQRVJGX0hFU19VUFRPREFURSkpO1xuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0xNTY0LVx0XHRzdGF0aWNfY2FsbCh4ODZfcG11X3NldF9wZXJpb2QpKGV2ZW50KTtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jPTE2Mzc9dm9pZCB4ODZfcG11X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0xNjQ0LVx0XHRfX2NsZWFyX2JpdChod2MtXHUwMDNlaWR4LCBjcHVjLVx1MDAzZWFjdGl2ZV9tYXNrKTtcbmFyY2gveDg2L2V2ZW50cy9jb3JlLmM6MTY0NTpcdFx0V0FSTl9PTl9PTkNFKGh3Yy1cdTAwM2VzdGF0ZSBcdTAwMjYgUEVSRl9IRVNfU1RPUFBFRCk7XG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTE2NDYtXHRcdGh3Yy1cdTAwM2VzdGF0ZSB8PSBQRVJGX0hFU19TVE9QUEVEO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmM9MTY1OT1zdGF0aWMgdm9pZCB4ODZfcG11X2RlbChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncylcbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTE2ODgtXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjE2ODk6XHRpZiAoV0FSTl9PTl9PTkNFKGkgPT0gY3B1Yy1cdTAwM2VuX2V2ZW50cykpIC8qIGNhbGxlZCAtXHUwMDNlZGVsKCkgd2l0aG91dCAtXHUwMDNlYWRkKCkgPyAqL1xuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0xNjkwLVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYz0yMzE5PXN0YXRpYyB2b2lkIHg4Nl9wbXVfc3RhcnRfdHhuKHN0cnVjdCBwbXUgKnBtdSwgdW5zaWduZWQgaW50IHR4bl9mbGFncylcbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTIzMjItXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjIzMjM6XHRXQVJOX09OX09OQ0UoY3B1Yy1cdTAwM2V0eG5fZmxhZ3MpO1x0XHQvKiB0eG4gYWxyZWFkeSBpbiBmbGlnaHQgKi9cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmMtMjMyNC1cbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jPTIzNDA9c3RhdGljIHZvaWQgeDg2X3BtdV9jYW5jZWxfdHhuKHN0cnVjdCBwbXUgKnBtdSlcbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTIzNDQtXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjIzNDU6XHRXQVJOX09OX09OQ0UoIWNwdWMtXHUwMDNldHhuX2ZsYWdzKTtcdC8qIG5vIHR4biBpbiBmbGlnaHQgKi9cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmMtMjM0Ni1cbi0tXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jPTIzNzA9c3RhdGljIGludCB4ODZfcG11X2NvbW1pdF90eG4oc3RydWN0IHBtdSAqcG11KVxuLS1cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmMtMjM3NS1cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmM6MjM3NjpcdFdBUk5fT05fT05DRSghY3B1Yy1cdTAwM2V0eG5fZmxhZ3MpO1x0Lyogbm8gdHhuIGluIGZsaWdodCAqL1xuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0yMzc3LVxuLS1cbmFyY2gveDg2L2V2ZW50cy9jb3JlLmM9MzE0ND12b2lkIHBlcmZfZ2V0X3g4Nl9wbXVfY2FwYWJpbGl0eShzdHJ1Y3QgeDg2X3BtdV9jYXBhYmlsaXR5ICpjYXApXG4tLVxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0zMTQ2LVx0LyogVGhpcyBBUEkgZG9lc24mIzM5O3QgY3VycmVudGx5IHN1cHBvcnQgZW51bWVyYXRpbmcgaHlicmlkIFBNVXMuICovXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjMxNDc6XHRpZiAoV0FSTl9PTl9PTkNFKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfSFlCUklEX0NQVSkpIHx8XG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTMxNDgtXHQgICAgIXg4Nl9wbXVfaW5pdGlhbGl6ZWQoKSkge1xuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9idHMuYz0zNDA9dm9pZCBpbnRlbF9idHNfZW5hYmxlX2xvY2FsKHZvaWQpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2J0cy5jLTM1NC1cdCAqL1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2J0cy5jOjM1NTpcdGlmIChXQVJOX09OX09OQ0Uoc3RhdGUgPT0gQlRTX1NUQVRFX0FDVElWRSkpXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvYnRzLmMtMzU2LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYz0yNzc3PXN0YXRpYyB2b2lkIF9faW50ZWxfcG11X2VuYWJsZV9hbGwoaW50IGFkZGVkLCBib29sIHBtaSlcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTI3OTUtXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjI3OTY6XHRcdGlmIChXQVJOX09OX09OQ0UoIWV2ZW50KSlcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtMjc5Ny1cdFx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYz00MjgwPWludGVsX3N0YXJ0X3NjaGVkdWxpbmcoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00Mjk0LVx0ICovXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjQyOTU6XHRpZiAoV0FSTl9PTl9PTkNFKCFleGNsX2NudHJzKSlcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNDI5Ni1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9NDMwOT1zdGF0aWMgdm9pZCBpbnRlbF9jb21taXRfc2NoZWR1bGluZyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywgaW50IGlkeCwgaW50IGNudHIpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00MzE4LVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYzo0MzE5Olx0aWYgKFdBUk5fT05fT05DRSghZXhjbF9jbnRycykpXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTQzMjAtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jPTQzMzY9aW50ZWxfc3RvcF9zY2hlZHVsaW5nKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjKVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNDM0OS1cdCAqL1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYzo0MzUwOlx0aWYgKFdBUk5fT05fT05DRSghZXhjbF9jbnRycykpXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTQzNTEtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jPTQzNjM9ZHluX2NvbnN0cmFpbnQoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIHN0cnVjdCBldmVudF9jb25zdHJhaW50ICpjLCBpbnQgaWR4KVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00MzY0LXtcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM6NDM2NTpcdFdBUk5fT05fT05DRSghY3B1Yy1cdTAwM2Vjb25zdHJhaW50X2xpc3QpO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00MzY2LVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9NDM5Mj1pbnRlbF9nZXRfZXhjbF9jb25zdHJhaW50cyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yywgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNDQwOS1cdCAqL1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYzo0NDEwOlx0aWYgKFdBUk5fT05fT05DRSghZXhjbF9jbnRycykpXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTQ0MTEtXHRcdHJldHVybiBjO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9NDQ5Mj1pbnRlbF9nZXRfZXZlbnRfY29uc3RyYWludHMoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIGludCBpZHgsXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00NTA1LVx0aWYgKGMxKSB7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjQ1MDY6XHQgICAgICAgIFdBUk5fT05fT05DRSghKGMxLVx1MDAzZWZsYWdzIFx1MDAyNiBQRVJGX1g4Nl9FVkVOVF9EWU5BTUlDKSk7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTQ1MDctXHRcdGJpdG1hcF9jb3B5KGMxLVx1MDAzZWlkeG1zaywgYzItXHUwMDNlaWR4bXNrLCBYODZfUE1DX0lEWF9NQVgpO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9NDUyND1zdGF0aWMgdm9pZCBpbnRlbF9wdXRfZXhjbF9jb25zdHJhaW50cyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yyxcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTQ1MzctXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjQ1Mzg6XHRpZiAoV0FSTl9PTl9PTkNFKCFleGNsX2NudHJzKSlcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNDUzOS1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9NjMzOD1zdGF0aWMgYm9vbCBpbml0X2h5YnJpZF9wbXUoaW50IGNwdSlcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTYzNDItXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjYzNDM6XHRpZiAoV0FSTl9PTl9PTkNFKCFwbXUgfHwgKHBtdS1cdTAwM2VwbXUudHlwZSA9PSAtMSkpKSB7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTYzNDQtXHRcdGNwdWMtXHUwMDNlcG11ID0gTlVMTDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jPTYzNzM9c3RhdGljIHZvaWQgaW50ZWxfcG11X2NwdV9zdGFydGluZyhpbnQgY3B1KVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNjM5NC1cdGlmICh4ODZfcG11LmZsYWdzIFx1MDAyNiBQTVVfRkxfVEZBKSB7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjYzOTU6XHRcdFdBUk5fT05fT05DRShjcHVjLVx1MDAzZXRmYV9zaGFkb3cpO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy02Mzk2LVx0XHRjcHVjLVx1MDAzZXRmYV9zaGFkb3cgPSB+MFVMTDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jPTY3NjU9c3RhdGljIF9faW5pdCB2b2lkIGludGVsX3BlYnNfaXNvbGF0aW9uX3F1aXJrKHZvaWQpXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTY3NjYte1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYzo2NzY3Olx0V0FSTl9PTl9PTkNFKHg4Nl9wbXUuY2hlY2tfbWljcm9jb2RlKTtcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNjc2OC1cdHg4Nl9wbXUuY2hlY2tfbWljcm9jb2RlID0gaW50ZWxfY2hlY2tfcGVic19pc29sYXRpb247XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM9NDU1PXN0YXRpYyB1NjQgX19ncnRfbGF0ZW5jeV9kYXRhKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IHN0YXR1cyxcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYy00NTktXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYzo0NjA6XHRXQVJOX09OX09OQ0UoaXNfaHlicmlkKCkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYy00NjEtXHRcdCAgICAgaHlicmlkX3BtdShldmVudC1cdTAwM2VwbXUpLVx1MDAzZXBtdV90eXBlID09IGh5YnJpZF9iaWcpO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jPTI5NDc9c3RhdGljIHZvaWQgaW50ZWxfcG11X2RyYWluX3BlYnNfY29yZShzdHJ1Y3QgcHRfcmVncyAqaXJlZ3MsIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhKVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jLTI5NjgtXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYzoyOTY5Olx0V0FSTl9PTl9PTkNFKCFldmVudCk7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYy0yOTcwLVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jPTMwMDU9c3RhdGljIHZvaWQgaW50ZWxfcG11X2RyYWluX3BlYnNfbmhtKHN0cnVjdCBwdF9yZWdzICppcmVncywgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMtMzA5OC1cdFx0ZXZlbnQgPSBjcHVjLVx1MDAzZWV2ZW50c1tiaXRdO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM6MzA5OTpcdFx0aWYgKFdBUk5fT05fT05DRSghZXZlbnQpKVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMtMzEwMC1cdFx0XHRjb250aW51ZTtcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jLTMxMDEtXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYzozMTAyOlx0XHRpZiAoV0FSTl9PTl9PTkNFKCFldmVudC1cdTAwM2VhdHRyLnByZWNpc2VfaXApKVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMtMzEwMy1cdFx0XHRjb250aW51ZTtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYz0zMTIyPV9faW50ZWxfcG11X2hhbmRsZV9wZWJzX3JlY29yZChzdHJ1Y3QgcHRfcmVncyAqaXJlZ3MsXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMtMzEzNS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jOjMxMzY6XHRcdGlmIChXQVJOX09OX09OQ0UoIWV2ZW50KSB8fFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM6MzEzNzpcdFx0ICAgIFdBUk5fT05fT05DRSghZXZlbnQtXHUwMDNlYXR0ci5wcmVjaXNlX2lwKSlcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jLTMxMzgtXHRcdFx0Y29udGludWU7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM9MzIyMj1zdGF0aWMgdm9pZCBpbnRlbF9wbXVfZHJhaW5fYXJjaF9wZWJzKHN0cnVjdCBwdF9yZWdzICppcmVncyxcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYy0zMjY1LVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM6MzI2NjpcdFx0aWYgKFdBUk5fT05fT05DRSghaGVhZGVyLVx1MDAzZXNpemUpKVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMtMzI2Ny1cdFx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM9NjYxPXZvaWQgaW50ZWxfcG11X2xicl9kZWwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYy02ODctXHRjcHVjLVx1MDAzZWxicl91c2Vycy0tO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jOjY4ODpcdFdBUk5fT05fT05DRShjcHVjLVx1MDAzZWxicl91c2VycyBcdTAwM2MgMCk7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM6Njg5Olx0V0FSTl9PTl9PTkNFKGNwdWMtXHUwMDNlbGJyX3BlYnNfdXNlcnMgXHUwMDNjIDApO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTY5MC1cdHBlcmZfc2NoZWRfY2JfZGVjKGV2ZW50LVx1MDAzZXBtdSk7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jPTk1MT1zdGF0aWMgdm9pZCBpbnRlbF9wbXVfbGJyX2NvdW50ZXJzX3Jlb3JkZXIoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTk2Ny1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYzo5Njg6XHRXQVJOX09OX09OQ0UoIXBvcyk7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmMtOTY5LVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wNC5jPTk1Mj1zdGF0aWMgdm9pZCBfX3A0X3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wNC5jLTk2Ny1cdCAqL1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL3A0LmM6OTY4Olx0V0FSTl9PTl9PTkNFKHA0X2lzX2V2ZW50X2Nhc2NhZGVkKGh3Yy1cdTAwM2Vjb25maWcpKTtcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wNC5jOjk2OTpcdFdBUk5fT05fT05DRShod2MtXHUwMDNlaWR4ID09IDEpO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL3A0LmMtOTcwLVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wNC5jPTEwMzQ9c3RhdGljIGludCBwNF9wbXVfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcDQuYy0xMDU3LVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3A0LmM6MTA1ODpcdFx0V0FSTl9PTl9PTkNFKGh3Yy1cdTAwM2VpZHggIT0gaWR4KTtcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wNC5jLTEwNTktXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmM9MTAxMT1wdF90b3BhX2VudHJ5X2Zvcl9wYWdlKHN0cnVjdCBwdF9idWZmZXIgKmJ1ZiwgdW5zaWduZWQgaW50IHBnKVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTEwMTktXHQgKi9cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jOjEwMjA6XHRpZiAoV0FSTl9PTl9PTkNFKHBnIFx1MDAzZT0gYnVmLVx1MDAzZW5yX3BhZ2VzKSlcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTEwMjEtXHRcdHJldHVybiBOVUxMO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTEwMzUtXHQgKi9cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jOjEwMzY6XHRXQVJOX09OX09OQ0UoMSk7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYy0xMDM3LVxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTEwNDMtXHQgKi9cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jOjEwNDQ6XHRpZiAoV0FSTl9PTl9PTkNFKHRvcGEtXHUwMDNlbGFzdCA9PSAtMSkpXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYy0xMDQ1LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYy0xMDc1LVx0ICovXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYzoxMDc2Olx0V0FSTl9PTl9PTkNFKDEpO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmMtMTA3Ny1cbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYz0xNjcxPXN0YXRpYyB2b2lkIHB0X2V2ZW50X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgbW9kZSlcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYy0xNzE3LVx0aWYgKChtb2RlIFx1MDAyNiBQRVJGX0VGX1VQREFURSkgfHwgIWJ1Zi1cdTAwM2VzbmFwc2hvdCkge1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmM6MTcxODpcdFx0aWYgKFdBUk5fT05fT05DRShwdC1cdTAwM2VoYW5kbGUuZXZlbnQgIT0gZXZlbnQpKVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmMtMTcxOS1cdFx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmM9MTczNj1zdGF0aWMgbG9uZyBwdF9ldmVudF9zbmFwc2hvdF9hdXgoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTE3NDQtXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYzoxNzQ1Olx0aWYgKFdBUk5fT05fT05DRSghYnVmKSlcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTE3NDYtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTE3NTEtXHQgKi9cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jOjE3NTI6XHRpZiAoV0FSTl9PTl9PTkNFKCFidWYtXHUwMDNlc25hcHNob3QpKVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmMtMTc1My1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jPTUyMz12b2lkIHVuY29yZV9wbXVfZXZlbnRfc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jLTUyNy1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYzo1Mjg6XHRpZiAoV0FSTl9PTl9PTkNFKGlkeCA9PSAtMSB8fCBpZHggXHUwMDNlPSBVTkNPUkVfUE1DX0lEWF9NQVgpKVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jLTUyOS1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYy01NDUtXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmM6NTQ2Olx0aWYgKFdBUk5fT05fT05DRSghKGV2ZW50LVx1MDAzZWh3LnN0YXRlIFx1MDAyNiBQRVJGX0hFU19TVE9QUEVEKSkpXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmMtNTQ3LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jPTU2MT12b2lkIHVuY29yZV9wbXVfZXZlbnRfc3RvcChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncylcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmMtNTc4LVx0XHRib3gtXHUwMDNlZXZlbnRzW2h3Yy1cdTAwM2VpZHhdID0gTlVMTDtcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYzo1Nzk6XHRcdFdBUk5fT05fT05DRShod2MtXHUwMDNlc3RhdGUgXHUwMDI2IFBFUkZfSEVTX1NUT1BQRUQpO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jLTU4MC1cdFx0aHdjLVx1MDAzZXN0YXRlIHw9IFBFUkZfSEVTX1NUT1BQRUQ7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jPTExOTg9c3RhdGljIGludCB1bmNvcmVfcGNpX3BtdV9yZWdpc3RlcihzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmMtMTIwNS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYzoxMjA2Olx0aWYgKFdBUk5fT05fT05DRShwbXUtXHUwMDNlYm94ZXNbZGllXSAhPSBOVUxMKSlcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYy0xMjA3LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmM9MTUxND1zdGF0aWMgdm9pZCB1bmNvcmVfY2hhbmdlX3R5cGVfY3R4KHN0cnVjdCBpbnRlbF91bmNvcmVfdHlwZSAqdHlwZSwgaW50IG9sZF9jcHUsXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jLTE1MjctXHRcdGlmIChvbGRfY3B1IFx1MDAzYyAwKSB7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmM6MTUyODpcdFx0XHRXQVJOX09OX09OQ0UoYm94LVx1MDAzZWNwdSAhPSAtMSk7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmMtMTUyOS1cdFx0XHRpZiAodW5jb3JlX2RpZV9oYXNfYm94KHR5cGUsIGRpZSwgcG11LVx1MDAzZXBtdV9pZHgpIFx1MDAyNlx1MDAyNlxuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYy0xNTM2LVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jOjE1Mzc6XHRcdFdBUk5fT05fT05DRShib3gtXHUwMDNlY3B1ICE9IC0xIFx1MDAyNlx1MDAyNiBib3gtXHUwMDNlY3B1ICE9IG9sZF9jcHUpO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jLTE1MzgtXHRcdGNwdW1hc2tfY2xlYXJfY3B1KG9sZF9jcHUsIFx1MDAyNnBtdS1cdTAwM2VjcHVfbWFzayk7XG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jPTU1Nj1zdGF0aWMgYm9vbCBuaG1leF9tYm94X2dldF9zaGFyZWRfcmVnKHN0cnVjdCBpbnRlbF91bmNvcmVfYm94ICpib3gsIGludCBpZHgsIHU2NCBjb25maWcpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jLTU4MC1cdGlkeCAtPSBFWFRSQV9SRUdfTkhNRVhfTV9aRFBfQ1RMX0ZWQztcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmVfbmhtZXguYzo1ODE6XHRpZiAoV0FSTl9PTl9PTkNFKGlkeCBcdTAwM2U9IDQpKVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jLTU4Mi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmVfbmhtZXguYz03Njg9c3RhdGljIGludCBuaG1leF9tYm94X2h3X2NvbmZpZyhzdHJ1Y3QgaW50ZWxfdW5jb3JlX2JveCAqYm94LCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jLTc4Ny1cdFx0bXNyID0gZXItXHUwMDNlbXNyICYjNDM7IHR5cGUtXHUwMDNlbXNyX29mZnNldCAqIGJveC1cdTAwM2VwbXUtXHUwMDNlcG11X2lkeDtcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmVfbmhtZXguYzo3ODg6XHRcdGlmIChXQVJOX09OX09OQ0UobXNyIFx1MDAzZT0gMHhmZmZmIHx8IGVyLVx1MDAzZWlkeCBcdTAwM2U9IDB4ZmYpKVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jLTc4OS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlX25obWV4LmMtNzkzLVx0XHRcdHJlZ19pZHggPSAxO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jOjc5NDpcdFx0ZWxzZSBpZiAoV0FSTl9PTl9PTkNFKHJlZ19pZHggXHUwMDNlIDApKVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jLTc5NS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvcGVyZl9ldmVudC5oPTE1MTM9c3RhdGljIGlubGluZSB2b2lkIGFtZF9wbXVfYnJzX2RlbChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpXG4tLVxuYXJjaC94ODYvZXZlbnRzL3BlcmZfZXZlbnQuaC0xNTE3LVx0Y3B1Yy1cdTAwM2VsYnJfdXNlcnMtLTtcbmFyY2gveDg2L2V2ZW50cy9wZXJmX2V2ZW50Lmg6MTUxODpcdFdBUk5fT05fT05DRShjcHVjLVx1MDAzZWxicl91c2VycyBcdTAwM2MgMCk7XG5hcmNoL3g4Ni9ldmVudHMvcGVyZl9ldmVudC5oLTE1MTktXG4tLVxuYXJjaC94ODYvZXZlbnRzL3JhcGwuYz0yODE9c3RhdGljIHZvaWQgX19yYXBsX3BtdV9ldmVudF9zdGFydChzdHJ1Y3QgcmFwbF9wbXUgKnJhcGxfcG11LFxuLS1cbmFyY2gveDg2L2V2ZW50cy9yYXBsLmMtMjgzLXtcbmFyY2gveDg2L2V2ZW50cy9yYXBsLmM6Mjg0Olx0aWYgKFdBUk5fT05fT05DRSghKGV2ZW50LVx1MDAzZWh3LnN0YXRlIFx1MDAyNiBQRVJGX0hFU19TVE9QUEVEKSkpXG5hcmNoL3g4Ni9ldmVudHMvcmFwbC5jLTI4NS1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9yYXBsLmM9MzA4PXN0YXRpYyB2b2lkIHJhcGxfcG11X2V2ZW50X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgbW9kZSlcbi0tXG5hcmNoL3g4Ni9ldmVudHMvcmFwbC5jLTMxNy1cdGlmICghKGh3Yy1cdTAwM2VzdGF0ZSBcdTAwMjYgUEVSRl9IRVNfU1RPUFBFRCkpIHtcbmFyY2gveDg2L2V2ZW50cy9yYXBsLmM6MzE4Olx0XHRXQVJOX09OX09OQ0UocmFwbF9wbXUtXHUwMDNlbl9hY3RpdmUgXHUwMDNjPSAwKTtcbmFyY2gveDg2L2V2ZW50cy9yYXBsLmMtMzE5LVx0XHRyYXBsX3BtdS1cdTAwM2VuX2FjdGl2ZS0tO1xuLS1cbmFyY2gveDg2L2V2ZW50cy9yYXBsLmMtMzI0LVxuYXJjaC94ODYvZXZlbnRzL3JhcGwuYzozMjU6XHRcdFdBUk5fT05fT05DRShod2MtXHUwMDNlc3RhdGUgXHUwMDI2IFBFUkZfSEVTX1NUT1BQRUQpO1xuYXJjaC94ODYvZXZlbnRzL3JhcGwuYy0zMjYtXHRcdGh3Yy1cdTAwM2VzdGF0ZSB8PSBQRVJGX0hFU19TVE9QUEVEO1xuLS1cbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmM9MTE4PXN0YXRpYyBpbnQgaHZfY3B1X2luaXQodW5zaWduZWQgaW50IGNwdSlcbi0tXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jLTE1OC1cdFx0XHRpZiAoKmh2cCBcdTAwMjZcdTAwMjYgIW1zX2h5cGVydi5wYXJhdmlzb3JfcHJlc2VudCBcdTAwMjZcdTAwMjYgaHZfaXNvbGF0aW9uX3R5cGVfc25wKCkpIHtcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmM6MTU5Olx0XHRcdFx0V0FSTl9PTl9PTkNFKHNldF9tZW1vcnlfZGVjcnlwdGVkKCh1bnNpZ25lZCBsb25nKSgqaHZwKSwgMSkpO1xuYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuYy0xNjAtXHRcdFx0XHRtZW1zZXQoKmh2cCwgMCwgUEFHRV9TSVpFKTtcbi0tXG5hcmNoL3g4Ni9oeXBlcnYvaXJxZG9tYWluLmM9MzYxPXN0YXRpYyB2b2lkIGh2X21zaV9kb21haW5fZnJlZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZCwgdW5zaWduZWQgaW50IHZpcnEsXG4tLVxuYXJjaC94ODYvaHlwZXJ2L2lycWRvbWFpbi5jLTM2OC1cdFx0ZGVzYyA9IGlycV9kYXRhX2dldF9tc2lfZGVzYyhpcnFkKTtcbmFyY2gveDg2L2h5cGVydi9pcnFkb21haW4uYzozNjk6XHRcdGlmICghZGVzYyB8fCAhZGVzYy1cdTAwM2VpcnEgfHwgV0FSTl9PTl9PTkNFKCFkZXZfaXNfcGNpKGRlc2MtXHUwMDNlZGV2KSkpXG5hcmNoL3g4Ni9oeXBlcnYvaXJxZG9tYWluLmMtMzcwLVx0XHRcdGNvbnRpbnVlO1xuLS1cbmFyY2gveDg2L2h5cGVydi9pdm0uYz02MzI9c3RhdGljIHZvaWQgaHZfdnRvbV9rZXhlY19maW5pc2godm9pZClcbi0tXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmMtNjU4LVx0XHRcdFx0XHRjdXIsIDAsIGlucHV0LCBOVUxMKTtcbmFyY2gveDg2L2h5cGVydi9pdm0uYzo2NTk6XHRcdFx0XHRXQVJOX09OX09OQ0UoIWh2X3Jlc3VsdF9zdWNjZXNzKGh2X3N0YXR1cykpO1xuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTY2MC1cdFx0XHRcdGN1ciA9IDA7XG4tLVxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jPTY3Nz1zdGF0aWMgaW50IGh2X21hcmtfZ3BhX3Zpc2liaWxpdHkodTE2IGNvdW50LCBjb25zdCB1NjQgcGZuW10sXG4tLVxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTczMC1cdCAqL1xuYXJjaC94ODYvaHlwZXJ2L2l2bS5jOjczMTpcdFdBUk5fT05fT05DRShyZXQpO1xuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTczMi1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmg9NDg3PXN0YXRpYyBpbmxpbmUgdTMyIHNhZmVfYXBpY193YWl0X2ljcl9pZGxlKHZvaWQpIHsgcmV0dXJuIDA7IH1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaDo0ODg6c3RhdGljIGlubGluZSB2b2lkIGFwaWNfbmF0aXZlX2VvaSh2b2lkKSB7IFdBUk5fT05fT05DRSgxKTsgfVxuYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oLTQ4OS1zdGF0aWMgaW5saW5lIHZvaWQgYXBpY19zZXR1cF9hcGljX2NhbGxzKHZvaWQpIHsgfVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oPTEzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhcmNoX2VudGVyX2Zyb21fdXNlcl9tb2RlKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oLTMwLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmg6MzE6XHRcdFdBUk5fT05fT05DRShmbGFncyBcdTAwMjYgbWFzayk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaC0zMi1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oLTMzLVx0XHQvKiBXZSB0aGluayB3ZSBjYW1lIGZyb20gdXNlciBtb2RlLiBNYWtlIHN1cmUgcHRfcmVncyBhZ3JlZXMuICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaDozNDpcdFx0V0FSTl9PTl9PTkNFKCF1c2VyX21vZGUocmVncykpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmgtMzUtXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmgtNDAtXHRcdCAqL1xuYXJjaC94ODYvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmg6NDE6XHRcdFdBUk5fT05fT05DRSghb25fdGhyZWFkX3N0YWNrKCkpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmg6NDI6XHRcdFdBUk5fT05fT05DRShyZWdzICE9IHRhc2tfcHRfcmVncyhjdXJyZW50KSk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaC00My1cdH1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9NzMwPXN0YXRpYyBpbmxpbmUgcHRlX3QgcGZuX3B0ZSh1bnNpZ25lZCBsb25nIHBhZ2VfbnIsIHBncHJvdF90IHBncHJvdClcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtNzMzLVx0LyogVGhpcyBiaXQgY29tYmluYXRpb24gaXMgdXNlZCB0byBtYXJrIHNoYWRvdyBzdGFja3MgKi9cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDo3MzQ6XHRXQVJOX09OX09OQ0UoKHBncHJvdF92YWwocGdwcm90KSBcdTAwMjYgKF9QQUdFX0RJUlRZIHwgX1BBR0VfUlcpKSA9PVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTczNS1cdFx0XHRfUEFHRV9ESVJUWSk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTE3MDM9Ym9vbCBhcmNoX2lzX3BsYXRmb3JtX3BhZ2UodTY0IHBhZGRyKTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTcxNi0oeyBcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjE3MTc6XHRXQVJOX09OX09OQ0UocHRlX3ByZXNlbnQoKnB0ZXApIFx1MDAyNlx1MDAyNiAhcHRlX3NhbWUoKnB0ZXAsIHB0ZSkpOyBcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE3MTgtXHRzZXRfcHRlKHB0ZXAsIHB0ZSk7IFxcXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE3MjItKHsgXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxNzIzOlx0V0FSTl9PTl9PTkNFKHBtZF9wcmVzZW50KCpwbWRwKSBcdTAwMjZcdTAwMjYgIXBtZF9zYW1lKCpwbWRwLCBwbWQpKTsgXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNzI0LVx0c2V0X3BtZChwbWRwLCBwbWQpOyBcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNzI4LSh7IFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTcyOTpcdFdBUk5fT05fT05DRShwdWRfcHJlc2VudCgqcHVkcCkgXHUwMDI2XHUwMDI2ICFwdWRfc2FtZSgqcHVkcCwgcHVkKSk7IFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTczMC1cdHNldF9wdWQocHVkcCwgcHVkKTsgXFxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTczNC0oeyBcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjE3MzU6XHRXQVJOX09OX09OQ0UocDRkX3ByZXNlbnQoKnA0ZHApIFx1MDAyNlx1MDAyNiAhcDRkX3NhbWUoKnA0ZHAsIHA0ZCkpOyBcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE3MzYtXHRzZXRfcDRkKHA0ZHAsIHA0ZCk7IFxcXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE3NDAtKHsgXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxNzQxOlx0V0FSTl9PTl9PTkNFKHBnZF9wcmVzZW50KCpwZ2RwKSBcdTAwMjZcdTAwMjYgIXBnZF9zYW1lKCpwZ2RwLCBwZ2QpKTsgXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNzQyLVx0c2V0X3BnZChwZ2RwLCBwZ2QpOyBcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Bvc3RlZF9pbnRyLmg9MTcwPXN0YXRpYyBpbmxpbmUgYm9vbCBwaV9wZW5kaW5nX3RoaXNfY3B1KHVuc2lnbmVkIGludCB2ZWN0b3IpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcG9zdGVkX2ludHIuaC0xNzMtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wb3N0ZWRfaW50ci5oOjE3NDpcdGlmIChXQVJOX09OX09OQ0UodmVjdG9yIFx1MDAzZSBOUl9WRUNUT1JTIHx8IHZlY3RvciBcdTAwM2MgRklSU1RfRVhURVJOQUxfVkVDVE9SKSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Bvc3RlZF9pbnRyLmgtMTc1LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTc4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBLZXJuZWwgTVNSIEFjY2VzcyBhbmQgUG90ZW50aWFsIEJ1Z3MqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGxvb2tpbmcgYXQgYGFyY2gveDg2L21tL2V4dGFibGUuY2AgcmlnaHQgbm93LCBzcGVjaWZpY2FsbHkgdGhlIGBleF9oYW5kbGVyX21zcmAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgc2VjdGlvbiBpcyBjcml0aWNhbCBmb3IgaGFuZGxpbmcgZXhjZXB0aW9ucyByZWxhdGVkIHRvIE1vZGVsIFNwZWNpZmljIFJlZ2lzdGVyIChNU1IpIGFjY2Vzcywgd2hpY2ggaXMgYSBzZW5zaXRpdmUgYXJlYS4gVGhlIGNvZGUgaXMgY2xlYXJseSBjaGVja2luZyBmb3IgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGJvdGggYFdSTVNSYCAod3JpdGUpIGFuZCBgUkRNU1JgIChyZWFkKSBpbnN0cnVjdGlvbnMsIGVzcGVjaWFsbHkgd2hlbiB0aGUgYWNjZXNzIGlzbiYjMzk7dCBkZWVtZWQgJiMzNDtzYWZlLiYjMzQ7IFRoZSBgX19PTkNFX0xJVEVfSUZgIG1hY3JvIGlzIGludGVyZXN0aW5nOyBpdCBzdWdnZXN0cyB0aGlzIGNoZWNrIGlzIG9wdGltaXplZCBmb3IgcGVyZm9ybWFuY2UsIGJ1dCBvbmx5IHBlcmZvcm1zIHRoZSBjaGVjayBvbmNlIGluIGEgd2hpbGUuIFRoZSBgcHJfd2FybmAgY2FsbHMgYXJlIGNvbmNlcm5pbmcsIG9mIGNvdXJzZSwgYXMgdGhleSBpbmRpY2F0ZSBhIHBvdGVudGlhbCB1bmNoZWNrZWQgTVNSIGFjY2VzcyBlcnJvciBpcyBoYXBwZW5pbmcuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHJlZ2lzdGVyIHN0YXRlIChgc3RydWN0IHB0X3JlZ3MgKnJlZ3NgKSwgdGhlIHNhZmV0eSBmbGFnLCBhbmQgd2hldGhlciBpdCYjMzk7cyBhIHJlYWQgb3Igd3JpdGUgb3BlcmF0aW9uIChgd3Jtc3JgKSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZXNlIHdhcm5pbmdzLiBUaGUgbG9nZ2VkIE1TUiBhZGRyZXNzIGFuZCBpbnN0cnVjdGlvbiBwb2ludGVyIChgcklQYCkgYXJlIGVzc2VudGlhbCBmb3IgZGVidWdnaW5nIHNob3VsZCBhIHdhcm5pbmcgYmUgZW5jb3VudGVyZWQuIE5vdywgSSYjMzk7bSBnb2luZyB0byBzaGlmdCBteSBmb2N1cyB0byBgaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaGAg4oCTIEkgbmVlZCB0byBjaGVjayB0aGUgZ2VuZXJpYyBidWcgaGFuZGxpbmcgbWVjaGFuaXNtcyB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyB3aGVuIG9uZSBvZiB0aGVzZSBNU1IgYWNjZXNzIGlzc3VlcyB0cmlwcyBhIGJ1Zy4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgdHdvIGZpbGVzIGlzIGtleSB0byBhc3Nlc3NpbmcgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIHN5c3RlbSB3aXRoIHJlc3BlY3QgdG8gTVNSIGFjY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRcbiAxNzE6XHQjZGVmaW5lIFdBUk5fVEFJTlQoY29uZGl0aW9uLCB0YWludCwgZm9ybWF0Li4uKSAoe1x0XHRcdFxcXG4gMTcyOlx0XHRpbnQgX19yZXRfd2Fybl9vbiA9ICEhKGNvbmRpdGlvbik7XHRcdFx0XHRcXFxuIDE3MzpcdFx0aWYgKHVubGlrZWx5KF9fcmV0X3dhcm5fb24pKVx0XHRcdFx0XHRcXFxuIDE3NDpcdFx0XHRfX1dBUk5fcHJpbnRmKHRhaW50LCBmb3JtYXQpO1x0XHRcdFx0XFxcbiAxNzU6XHRcdHVubGlrZWx5KF9fcmV0X3dhcm5fb24pO1x0XHRcdFx0XHRcXFxuIDE3NjpcdH0pXG4gMTc3Olx0XG4gMTc4Olx0I2lmbmRlZiBXQVJOX09OX09OQ0VcbiAxNzk6XHQjZGVmaW5lIFdBUk5fT05fT05DRShjb25kaXRpb24pXHRcdFx0XHRcdFxcXG4gMTgwOlx0XHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOX09OLCAxKVxuIDE4MTpcdCNlbmRpZlxuIDE4MjpcdFxuIDE4MzpcdCNpZm5kZWYgV0FSTl9PTkNFXG4gMTg0Olx0I2RlZmluZSBXQVJOX09OQ0UoY29uZGl0aW9uLCBmb3JtYXQuLi4pXHRcdFx0XHRcXFxuIDE4NTpcdFx0RE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgV0FSTiwgMSwgZm9ybWF0KVxuIDE4NjpcdCNlbmRpZlxuIDE4NzpcdFxuIDE4ODpcdCNkZWZpbmUgV0FSTl9UQUlOVF9PTkNFKGNvbmRpdGlvbiwgdGFpbnQsIGZvcm1hdC4uLilcdFx0XFxcbiAxODk6XHRcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk5fVEFJTlQsIDEsIHRhaW50LCBmb3JtYXQpXG4gMTkwOlx0XG4gMTkxOlx0I2Vsc2UgLyogIUNPTkZJR19CVUcgKi9cbiAxOTI6XHQjaWZuZGVmIEhBVkVfQVJDSF9CVUdcbiAxOTM6XHQjZGVmaW5lIEJVRygpIGRvIHtcdFx0XFxcbiAxOTQ6XHRcdGRvIHt9IHdoaWxlICgxKTtcdFxcXG4gMTk1Olx0XHR1bnJlYWNoYWJsZSgpO1x0XHRcXFxuIDE5NjpcdH0gd2hpbGUgKDApXG4gMTk3Olx0I2VuZGlmXG4gMTk4Olx0XG4gMTk5Olx0I2lmbmRlZiBIQVZFX0FSQ0hfQlVHX09OXG4gMjAwOlx0I2RlZmluZSBCVUdfT04oY29uZGl0aW9uKSBkbyB7IGlmICh1bmxpa2VseShjb25kaXRpb24pKSBCVUcoKTsgfSB3aGlsZSAoMClcbiAyMDE6XHQjZW5kaWZcbiAyMDI6XHRcbiAyMDM6XHQjaWZuZGVmIEhBVkVfQVJDSF9XQVJOX09OXG4gMjA0Olx0I2RlZmluZSBXQVJOX09OKGNvbmRpdGlvbikgKHtcdFx0XHRcdFx0XHRcXFxuIDIwNTpcdFx0aW50IF9fcmV0X3dhcm5fb24gPSAhIShjb25kaXRpb24pO1x0XHRcdFx0XFxcbiAyMDY6XHRcdHVubGlrZWx5KF9fcmV0X3dhcm5fb24pO1x0XHRcdFx0XHRcXFxuIDIwNzpcdH0pXG4gMjA4Olx0I2VuZGlmXG4gMjA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzg1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIE9uY2UtT25seSBQcmludCBNYWNyb3MqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGVzZSBtYWNyb3M6IGBXQVJOX09OX09OQ0VgLCBgV0FSTl9PTkNFYCwgYW5kIGBXQVJOX1RBSU5UX09OQ0VgLiBUaGV5JiMzOTtyZSBhbGwgZGVmaW5lZCBpbiBgYXNtLWdlbmVyaWMvYnVnLmhgLCBhbmQgaXQgbG9va3MgbGlrZSB0aGV5IGxldmVyYWdlIGBET19PTkNFX0xJVEVfSUZgLiBSaWdodCwgYW5kIGBET19PTkNFX0xJVEVfSUZgIGluIHR1cm4gdXNlcyBgX19PTkNFX0xJVEVfSUZgLiAgSG1tLCBzZWVtcyBsaWtlIGEgcGF0dGVybiBoZXJlIGZvciAmIzM0O3ByaW50IHRoaXMgbWVzc2FnZSBvbmNlIGFuZCBvbmx5IG9uY2UmIzM0Oy4gVGhlbiB0aGVyZSYjMzk7cyBgcHJpbnRrX29uY2VgLCB3aGljaCB1c2VzIGBET19PTkNFX0xJVEVgLCBhbmQgZXZlbiBgZXhfaGFuZGxlcl9tc3JgIGlzIGluIG9uIHRoZSBhY3Rpb24gdXNpbmcgYF9fT05DRV9MSVRFX0lGYC4gSW50ZXJlc3RpbmcuICBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaGlzdG9yeSBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlaXIgaW50cm9kdWN0aW9uIGFuZCB1c2FnZSwgc28gdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNvbnN1bHQgdGhlIGdpdCBjb21taXQgbG9nLCBwcm9iYWJseSBieSBjaGVja2luZyB0aGUgY29udGV4dCBvZiB0aGUgZmlsZXMsIHRvIGZpbmQgdGhlIGNvbW1pdCB3aGVyZSB0aGVzZSB3ZXJlIGZpcnN0IGludHJvZHVjZWQgdG8gdXBzdHJlYW0gTGludXguIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGV5JiMzOTtyZSBhY3R1YWxseSB0cnlpbmcgdG8gYWNoaWV2ZSBhbmQgYW55IHBvdGVudGlhbCBnb3RjaGFzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgX19PTkNFX0xJVEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0xMi1cbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MTM6I2RlZmluZSBfX09OQ0VfTElURSgpXHRcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0xNC1cdCh7XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0yNC1cbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MjU6I2RlZmluZSBfX09OQ0VfTElURV9JRihjb25kaXRpb24pXHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTI2LVx0KHVubGlrZWx5KGNvbmRpdGlvbikgXHUwMDI2XHUwMDI2IF9fT05DRV9MSVRFKCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzI1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTc5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEV2YWx1YXRpb246IG9uY2VfbGl0ZS5oIE1hY3JvIFJlZmFjdG9yaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIGBfX09OQ0VfTElURSgpYCBhbmQgYF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilgIG1hY3JvcyBpbiBgaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaGAgYXJlIGZvdW5kYXRpb25hbCDigJMgdGhleSBzcGF3biBhIGxvdCBvZiBvdGhlciBpbXBvcnRhbnQgY29uc3RydWN0cyBsaWtlIGBET19PTkNFX0xJVEVgLCBgV0FSTl9PTl9PTkNFYCwgYW5kIHNvIG9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzICYjMzQ7SXMgdGhpcyBtYWNybyBhIGJpZyBkZWFsLCBpcyBpdCB3aWRlbHkgdXNlZD8mIzM0OywgYW5kIHRoZSBhbnN3ZXIgaXMgeWVzLCB2ZXJ5LiBUaGlzIG1lYW5zIHRoaXMgY2hhbmdlIGhhcyBwb3RlbnRpYWxseSBmYXItcmVhY2hpbmcgY29uc2VxdWVuY2VzIGFjcm9zcyB0aGUga2VybmVsLgoKTm93LCBsZXQmIzM5O3MgY2FyZWZ1bGx5IGFwcGx5IHRoZSBlc3RhYmxpc2hlZCBmdXp6aW5nIGd1aWRlbGluZXMuIFJlYWNoYWJpbGl0eSBpcyB0aGUgY29yZSBjb25jZXB0LCBzbyBsZXQmIzM5O3MgZm9jdXMgb24gaWYgdGhlIGNvZGUgaXMgYWN0dWFsbHkgKmV4ZWN1dGVkKi4gRnJvbSB0aGUgZ3VpZGVsaW5lcywgSSBrbm93IEkgY2FuJiMzOTt0IHRha2UgY2xhaW1zIG9mICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyBhdCBmYWNlIHZhbHVlLCByZWZhY3RvcmluZ3MgYXJlIG9mdGVuIHdoZXJlIHRoZSBzdWJ0bGUgYnVncyBoaWRlLCBzbyB0aGlzIGlzIGNyaXRpY2FsLiBJdCYjMzk7cyBhIHJlZmFjdG9yaW5nIG9mIGBfX09OQ0VfTElURV9JRihjb25kaXRpb24pYCB0byBzZXBhcmF0ZSB0aGUgYF9fT05DRV9MSVRFKClgIGxvZ2ljIGFuZCByZWRlZmluZSBgX19PTkNFX0xJVEVfSUZgIHRvIHdyYXAgaXQgaW4gYW4gYHVubGlrZWx5KGNvbmRpdGlvbilgLiBUaGUgY29uZGl0aW9uYWwgbG9naWMgY2hhbmdlcyBpbiBhbGwgdGhlIGNhbGxlcnMsIHNvIEkmIzM5O20gYWxyZWFkeSBpbiAmIzM0O2Z1enogdGhpcyYjMzQ7IHRlcnJpdG9yeS4KClNpbmNlIHRoaXMgdG91Y2hlcyByZWFjaGFibGUgYW5kICpleGVjdXRhYmxlKiBjb2RlLCB0aGUgYW5zd2VyIGlzICp5ZXMqLCB0aGlzIHBhdGNoICpkb2VzKiBtb2RpZnkgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZS4gVGhpcyB3YXJyYW50cyBmdXp6aW5nLiBUaGUgZ3VpZGVsaW5lcyBpbnN0cnVjdCBtZSB0byBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBgRm9jdXNTeW1ib2xzYCB0byBwcmV2ZW50IHRoZSBmdXp6ZXIgZnJvbSBiZWluZyBkaWx1dGVkLiBObyB1YmlxdWl0b3VzIGxpZmVjeWNsZSBmdW5jdGlvbnMgc2hvdWxkIGJlIGxpc3RlZCwgc28gZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycywgcGFnZSBmYXVsdCwgZXRjLiBhcmUgcmlnaHQgb3V0LiBJIG5lZWQgdG8gZ2V0IGFzIHNwZWNpZmljIGFzIHBvc3NpYmxlLiBUaGUgcHJpbWFyeSBjaGFuZ2VzIGFyZSBpbiBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBpbiB0aGUgLmggZmlsZS4gVGhpcyBtZWFucyBJIG5lZWQgdG8gaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIgZnVuY3Rpb25zIHRoYXQgYWN0dWFsbHkgKnVzZSogdGhlbS4gSSYjMzk7dmUgYWxyZWFkeSBkb25lIHRoYXQgYnkgaWRlbnRpZnlpbmcgYERPX09OQ0VfTElURWAgLyBgX19PTkNFX0xJVEVfSUZgIC8gYERPX09OQ0VfTElURV9JRmAgdXNlcnMsIHNvIG5vdyBJIG5lZWQgdG8gY2hvb3NlIHRoZSBiZXN0IHN5bWJvbHMuCgpGcm9tIHRoZSBleGlzdGluZyBsaXN0IEkmIzM5O3ZlIGdvdCwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcgZm9yIGBGb2N1c1N5bWJvbHNgOgoKKiAgIGBuZXQvaXB2NC90Y3BfaW5wdXQuYzp0Y3BfZ3JvX2Rldl93YXJuYCBzaW5jZSBpdCBpcyB0aGUgZnVuY3Rpb24gcGFzc2VkIHRvIGBET19PTkNFX0xJVEVfSUZgLiBUaGlzIGlzIGEgdmVyeSBzcGVjaWZpYyB1c2UtY2FzZSBJIGNhbiBmb2N1cyBvbi4KKiAgIGBhcmNoL3g4Ni9tbS9leHRhYmxlLmM6ZXhfaGFuZGxlcl9tc3JgLiBUaGlzIGhhbmRsZXMgdGhlIE1TUiBleGNlcHRpb25zLgoqICAgYG5ldC9jb3JlL2Rldi5jOnNrYl9jaGVja3N1bV9oZWxwYCBhbmQgYG5ldC9jb3JlL2Rldi5jOm5ldGRldl9yeF9jc3VtX2ZhdWx0YCwgdGhlc2UgYXJlIG5ldHdvcmsgZm9jdXNlZCBmdW5jdGlvbnMsIGFuZCBub3Qgb3Zlcmx5IGdlbmVyYWwsIGFuZCBzaG91bGQgcmV2ZWFsIGludGVyZXN0aW5nIGludGVyYWN0aW9ucy4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgYENPTkZJR19gIG9wdGlvbnMgdG8gZW5hYmxlIGFuZCBpbmNsdWRlIHRoZW0gYXMgdGhlIGBFbmFibGVDb25maWdzYC4gVGhpcyBzaG91bGQgYmUgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgYnkgY2hlY2tpbmcgdGhlIGBLY29uZmlnYCBmaWxlcyBhbmQgYCNpZmRlZmBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoRE9fT05DRV9MSVRFfF9fT05DRV9MSVRFKSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9leHRhYmxlLmM9MTY2PXN0YXRpYyBib29sIGV4X2hhbmRsZXJfbXNyKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmZpeHVwLFxuLS1cbmFyY2gveDg2L21tL2V4dGFibGUuYy0xNjgte1xuYXJjaC94ODYvbW0vZXh0YWJsZS5jOjE2OTpcdGlmIChfX09OQ0VfTElURV9JRighc2FmZSBcdTAwMjZcdTAwMjYgd3Jtc3IpKSB7XG5hcmNoL3g4Ni9tbS9leHRhYmxlLmMtMTcwLVx0XHRwcl93YXJuKFwmIzM0O3VuY2hlY2tlZCBNU1IgYWNjZXNzIGVycm9yOiBXUk1TUiB0byAweCV4ICh0cmllZCB0byB3cml0ZSAweCUwOHglMDh4KSBhdCBySVA6IDB4JWx4ICglcFMpXFxuXCYjMzQ7LFxuLS1cbmFyY2gveDg2L21tL2V4dGFibGUuYy0xNzUtXG5hcmNoL3g4Ni9tbS9leHRhYmxlLmM6MTc2Olx0aWYgKF9fT05DRV9MSVRFX0lGKCFzYWZlIFx1MDAyNlx1MDAyNiAhd3Jtc3IpKSB7XG5hcmNoL3g4Ni9tbS9leHRhYmxlLmMtMTc3LVx0XHRwcl93YXJuKFwmIzM0O3VuY2hlY2tlZCBNU1IgYWNjZXNzIGVycm9yOiBSRE1TUiBmcm9tIDB4JXggYXQgcklQOiAweCVseCAoJXBTKVxcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTEyMzQ9c3RhdGljIGludCB3YWl0X29uX3NlbShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgdTY0IGRhdGEpXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy0xMjU0LVx0XHRpZiAoYW1kX2lvbW11X2R1bXApXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jOjEyNTU6XHRcdFx0RE9fT05DRV9MSVRFKGR1bXBfY29tbWFuZF9idWZmZXIsIGlvbW11KTtcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMTI1Ni1cbi0tXG5mcy9lcm9mcy9pbnRlcm5hbC5oPTQ0Nj1lcm9mc19nZXRfYW9wcyhzdHJ1Y3QgaW5vZGUgKnJlYWxpbm9kZSlcbi0tXG5mcy9lcm9mcy9pbnRlcm5hbC5oLTQ1MC1cdFx0XHRyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7XG5mcy9lcm9mcy9pbnRlcm5hbC5oOjQ1MTpcdFx0RE9fT05DRV9MSVRFX0lGKHJlYWxpbm9kZS1cdTAwM2VpX2Jsa2JpdHMgIT0gUEFHRV9TSElGVCxcbmZzL2Vyb2ZzL2ludGVybmFsLmgtNDUyLVx0XHRcdCAgZXJvZnNfaW5mbywgcmVhbGlub2RlLVx1MDAzZWlfc2IsXG4tLVxuZnMveGZzL3hmc19tZXNzYWdlLmg9NTA9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuZnMveGZzL3hmc19tZXNzYWdlLmgtNTgtI2RlZmluZSB4ZnNfcHJpbnRrX29uY2UoZnVuYywgZGV2LCBmbXQsIC4uLilcdFx0XHRcXFxuZnMveGZzL3hmc19tZXNzYWdlLmg6NTk6XHRET19PTkNFX0xJVEUoZnVuYywgZGV2LCBmbXQsICMjX19WQV9BUkdTX18pXG5mcy94ZnMveGZzX21lc3NhZ2UuaC02MC1cbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oPTEwMz1leHRlcm4gX19wcmludGYoMSwgMikgdm9pZCBfX3dhcm5fcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTtcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE3OS0jZGVmaW5lIFdBUk5fT05fT05DRShjb25kaXRpb24pXHRcdFx0XHRcdFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oOjE4MDpcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk5fT04sIDEpXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE4MS0jZW5kaWZcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE4NC0jZGVmaW5lIFdBUk5fT05DRShjb25kaXRpb24sIGZvcm1hdC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oOjE4NTpcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk4sIDEsIGZvcm1hdClcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTg2LSNlbmRpZlxuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTg4LSNkZWZpbmUgV0FSTl9UQUlOVF9PTkNFKGNvbmRpdGlvbiwgdGFpbnQsIGZvcm1hdC4uLilcdFx0XFxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmg6MTg5Olx0RE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgV0FSTl9UQUlOVCwgMSwgdGFpbnQsIGZvcm1hdClcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTkwLVxuLS1cbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtOS0gKi9cbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MTA6I2RlZmluZSBET19PTkNFX0xJVEUoZnVuYywgLi4uKVx0XHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjExOlx0RE9fT05DRV9MSVRFX0lGKHRydWUsIGZ1bmMsICMjX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTEyLVxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoxMzojZGVmaW5lIF9fT05DRV9MSVRFKClcdFx0XHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTE0LVx0KHtcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTI0LVxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoyNTojZGVmaW5lIF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilcdFx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MjY6XHQodW5saWtlbHkoY29uZGl0aW9uKSBcdTAwMjZcdTAwMjYgX19PTkNFX0xJVEUoKSlcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMjctXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjI4OiNkZWZpbmUgRE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgZnVuYywgLi4uKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMjktXHQoe1x0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMzEtXHRcdFx0XHRcdFx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MzI6XHRcdGlmIChfX09OQ0VfTElURV9JRihfX3JldF9kb19vbmNlKSlcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0zMy1cdFx0XHRmdW5jKF9fVkFfQVJHU19fKTtcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9wcmludGsuaD00MDc9c3RydWN0IHBpX2VudHJ5IHtcbi0tXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oLTY0OS0jZGVmaW5lIHByaW50a19vbmNlKGZtdCwgLi4uKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9wcmludGsuaDo2NTA6XHRET19PTkNFX0xJVEUocHJpbnRrLCBmbXQsICMjX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oLTY1MS0jZGVmaW5lIHByaW50a19kZWZlcnJlZF9vbmNlKGZtdCwgLi4uKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmg6NjUyOlx0RE9fT05DRV9MSVRFKHByaW50a19kZWZlcnJlZCwgZm10LCAjI19fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9wcmludGsuaC02NTMtI2Vsc2Vcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTI3NTA9c3RhdGljIGlubGluZSB2b2lkIHNrYl9hc3NlcnRfbGVuKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yNzUzLVx0aWYgKFdBUk5fT05DRSghc2tiLVx1MDAzZWxlbiwgXCYjMzQ7JXNcXG5cJiMzNDssIF9fZnVuY19fKSlcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6Mjc1NDpcdFx0RE9fT05DRV9MSVRFKHNrYl9kdW1wLCBLRVJOX0VSUiwgc2tiLCBmYWxzZSk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI3NTUtI2VuZGlmIC8qIENPTkZJR19ERUJVR19ORVQgKi9cbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuaD0zNz1lbnVtIHRyYWNlX3R5cGUge1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oLTEyOS0jZGVmaW5lIE1FTV9GQUlMKGNvbmRpdGlvbiwgZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMzA6XHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBwcl9lcnIsIFwmIzM0O0VSUk9SOiBcJiMzNDsgZm10LCAjI19fVkFfQVJHU19fKVxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTMxLVxuLS1cbm5ldC9jb3JlL2Rldi5jPTM2MTc9aW50IHNrYl9jaGVja3N1bV9oZWxwKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZGV2LmMtMzY0NS1cdGlmICh1bmxpa2VseShvZmZzZXQgXHUwMDNlPSBza2JfaGVhZGxlbihza2IpKSkge1xubmV0L2NvcmUvZGV2LmM6MzY0NjpcdFx0RE9fT05DRV9MSVRFKHNrYl9kdW1wLCBLRVJOX0VSUiwgc2tiLCBmYWxzZSk7XG5uZXQvY29yZS9kZXYuYy0zNjQ3LVx0XHRXQVJOX09OQ0UodHJ1ZSwgXCYjMzQ7b2Zmc2V0ICglZCkgXHUwMDNlPSBza2JfaGVhZGxlbigpICgldSlcXG5cJiMzNDssXG4tLVxubmV0L2NvcmUvZGV2LmMtMzY1NC1cdGlmICh1bmxpa2VseShvZmZzZXQgJiM0Mzsgc2l6ZW9mKF9fc3VtMTYpIFx1MDAzZSBza2JfaGVhZGxlbihza2IpKSkge1xubmV0L2NvcmUvZGV2LmM6MzY1NTpcdFx0RE9fT05DRV9MSVRFKHNrYl9kdW1wLCBLRVJOX0VSUiwgc2tiLCBmYWxzZSk7XG5uZXQvY29yZS9kZXYuYy0zNjU2LVx0XHRXQVJOX09OQ0UodHJ1ZSwgXCYjMzQ7b2Zmc2V0JiM0MzsyICglenUpIFx1MDAzZSBza2JfaGVhZGxlbigpICgldSlcXG5cJiMzNDssXG4tLVxubmV0L2NvcmUvZGV2LmM9Mzc0MD12b2lkIG5ldGRldl9yeF9jc3VtX2ZhdWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9kZXYuYy0zNzQxLXtcbm5ldC9jb3JlL2Rldi5jOjM3NDI6XHRET19PTkNFX0xJVEUoZG9fbmV0ZGV2X3J4X2NzdW1fZmF1bHQsIGRldiwgc2tiKTtcbm5ldC9jb3JlL2Rldi5jLTM3NDMtfVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTIyNz1zdGF0aWMgdm9pZCB0Y3BfbWVhc3VyZV9yY3ZfbXNzKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0yNjMtXHRcdC8qIEFjY291bnQgZm9yIHBvc3NpYmx5LXJlbW92ZWQgb3B0aW9ucyAqL1xubmV0L2lwdjQvdGNwX2lucHV0LmM6MjY0Olx0XHRET19PTkNFX0xJVEVfSUYobGVuIFx1MDAzZSBpY3NrLVx1MDAzZWljc2tfYWNrLnJjdl9tc3MgJiM0MzsgTUFYX1RDUF9PUFRJT05fU1BBQ0UsXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0yNjUtXHRcdFx0XHR0Y3BfZ3JvX2Rldl93YXJuLCBzaywgc2tiLCBsZW4pO1xuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oPTEyNT1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xNTYtI2RlZmluZSBsaW5rX2Vycl9vbmNlKGxpbmssIGZtdCwgLi4uKVx0XHRcdFx0XHRcXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MTU3Olx0RE9fT05DRV9MSVRFKGxpbmtfZXJyLCBsaW5rLCBmbXQsICMjX19WQV9BUkdTX18pXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xNTgtI2RlZmluZSBsaW5rX2lkX2luZm8oc2RhdGEsIGxpbmtfaWQsIGZtdCwgLi4uKVx0XHRcdFx0XFxcbi0tXG5ydXN0L2tlcm5lbC9wcmludC5ycz00MjY9bWFjcm9fcnVsZXMhIHByX2NvbnQgKFxuLS1cbnJ1c3Qva2VybmVsL3ByaW50LnJzLTQzMy0vLy9cbnJ1c3Qva2VybmVsL3ByaW50LnJzOjQzNDovLy8gVGhpcyBzdHJ1Y3R1cmUgcHJvdmlkZXMgdGhlIFJ1c3QgZXF1aXZhbGVudCBvZiB0aGUga2VybmVsJiMzOTtzIGBET19PTkNFX0xJVEVgIG1hY3JvLlxucnVzdC9rZXJuZWwvcHJpbnQucnMtNDM1LS8vLyBXaGlsZSBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBpbXBsZW1lbnQgdGhlIGZlYXR1cmUgZW50aXJlbHkgYXMgYSBSdXN0IG1hY3JvLFxuLS1cbnJ1c3Qva2VybmVsL3ByaW50LnJzPTQ2OD0gICAgcHViIGZuIGNhbGxfb25jZVx1MDAzY0ZcdTAwM2UoXHUwMDI2c2VsZiwgZjogRikgLVx1MDAzZSBib29sXG4tLVxucnVzdC9rZXJuZWwvcHJpbnQucnMtNDkxLS8vL1xucnVzdC9rZXJuZWwvcHJpbnQucnM6NDkyOi8vLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGtlcm5lbCYjMzk7cyBgRE9fT05DRV9MSVRFYCBtYWNyby5cbnJ1c3Qva2VybmVsL3ByaW50LnJzLTQ5My0vLy9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczNjcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIGFmZmFpcnMsIHNvIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgc29tZSBrZXkgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JrIGNoZWNrc3VtIG9mZmxvYWQgYW5kIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pLiBJJiMzOTttIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCBgZXhfaGFuZGxlcl9tc3JgLCBgbmV0ZGV2X3J4X2NzdW1fZmF1bHRgLCBgc2tiX2NoZWNrc3VtX2hlbHBgLCBhbmQgYHRjcF9ncm9fZGV2X3dhcm5gLiBUaGVzZSBzZWVtIGxpa2UgdGhlIHByaW1lIHN1c3BlY3RzIGluIHdoYXRldmVyIEkmIzM5O20gdHJvdWJsZXNob290aW5nLgoKTm93LCBhIGNydWNpYWwgZGV0YWlsIHRvIHZlcmlmeSBpcyB3aGV0aGVyIGB0Y3BfZ3JvX2Rldl93YXJuYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMgb3Igbm9uLXN0YXRpYy4gVGhlIHNjb3BlIGFuZCB2aXNpYmlsaXR5IG9mIHRoYXQgZnVuY3Rpb24gd2lsbCBzaWduaWZpY2FudGx5IGltcGFjdCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCBhbmQgcG90ZW50aWFsbHkgd2hlcmUgdGhlIHByb2JsZW0gbGllcy4gVGhhdOKAmXMgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24gdGhhdCB3aWxsIGRpcmVjdCBteSBuZXh0IGludmVzdGlnYXRpdmUgc3RlcHMuIFN0YXRpYyBvciBub3QsIHRoYXQmIzM5O2xsIGJlIHRlbGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9ncm9fZGV2X3dhcm4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmM9MjA1PXN0YXRpYyB2b2lkIGJwZl9za29wc19lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIGludCBicGZfb3AsXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtMjEwLVxubmV0L2lwdjQvdGNwX2lucHV0LmM6MjExOnN0YXRpYyBfX2NvbGQgdm9pZCB0Y3BfZ3JvX2Rldl93YXJuKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTIxMi1cdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTIyNz1zdGF0aWMgdm9pZCB0Y3BfbWVhc3VyZV9yY3ZfbXNzKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0yNjQtXHRcdERPX09OQ0VfTElURV9JRihsZW4gXHUwMDNlIGljc2stXHUwMDNlaWNza19hY2sucmN2X21zcyAmIzQzOyBNQVhfVENQX09QVElPTl9TUEFDRSxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjI2NTpcdFx0XHRcdHRjcF9ncm9fZGV2X3dhcm4sIHNrLCBza2IsIGxlbik7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0yNjYtXHRcdC8qIElmIHRoZSBza2IgaGFzIGEgbGVuIG9mIGV4YWN0bHkgMSpNU1MgYW5kIGhhcyB0aGUgUFNIIGJpdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzkzMQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDIxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBOZXR3b3JrIENoZWNrc3VtIElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgYG5ldGRldl9yeF9jc3VtX2ZhdWx0YC4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gZm9yIGhhbmRsaW5nIGNoZWNrc3VtIGZhdWx0cywgYW5kIGZyb20gdGhlIGNvZGUgc25pcHBldCwgaXQgbG9va3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQganVzdCBjYWxscyBgRE9fT05DRV9MSVRFYC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBleHBvcnRlZCwgb3IgYXQgbGVhc3Qgbm90IHN0YXRpYywgaW1tZWRpYXRlbHkgbWFrZXMgaXQgaW50ZXJlc3RpbmcgZnJvbSBhIGRlcGVuZGVuY3kgc3RhbmRwb2ludC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLgoKTmV4dCwgSSYjMzk7bGwgZXhhbWluZSBgc2tiX2NoZWNrc3VtX2hlbHBgLiBUaGlzIG9uZSBpcyAqZXhwbGljaXRseSogZXhwb3J0ZWQgdmlhIGBFWFBPUlRfU1lNQk9MYCwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgdXNlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGF0JiMzOTtzIGEgc3Ryb25nIHNpZ25hbCwgYW5kIEkgbmVlZCB0byBjb25zaWRlciBpdHMgaW1wbGljYXRpb25zLiBUaGlzIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHBpY3R1cmUuCgpUaGVuLCB0aGVyZSYjMzk7cyBgZXhfaGFuZGxlcl9tc3JgLCB3aGljaCBpcyB3aGVyZSB0aGluZ3MgZ2V0IGEgYml0IG1vcmUgbnVhbmNlZC4gSXTigJlzIGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggdHlwaWNhbGx5IGxpbWl0cyBpdHMgc2NvcGUsIGJ1dCBJIHNlZSB0aGF0IGl04oCZcyBjYWxsZWQgYnkgYGZpeHVwX2V4Y2VwdGlvbmAuIFRoYXTigJlzIHdvcnRoIG5vdGluZywgYXMgaW50ZXJuYWwgY2FsbHMgY2FuIHN0aWxsIGhhdmUgaW1wbGljYXRpb25zIGRlcGVuZGluZyBvbiBob3cgdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBleGNlcHRpb24gZnJhbWV3b3JrIHdvcmtzLiBTbywgZXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCBpdCYjMzk7cyBzdGlsbCBiZWluZyB1c2VkLCBqdXN0IGludGVybmFsbHksIHNvIEkmIzM5O2xsIGNvbnNpZGVyIGl0cyByb2xlIGluIHRoZSBleGNlcHRpb24gcGF0aC4KCkZpbmFsbHksIEkmIzM5O2xsIHBpdm90IGFuZCBjaGVjayB0aGUgY2FsbGVycyBvZiBgeGZzX3ByaW50a19vbmNlYCB3aXRoaW4gdGhlIFhGUyBmaWxlc3lzdGVtIGNvZGUuIFRoaXMgbWlnaHQgcHJvdmlkZSBmdXJ0aGVyIGluc2lnaHRzIGludG8gaG93IGNoZWNrc3VtIGVycm9ycyBvciByZWxhdGVkIGlzc3VlcyBhcmUgYmVpbmcgaGFuZGxlZCBvciBsb2dnZWQgd2l0aGluIHRoZSBmaWxlIHN5c3RlbSBpdHNlbGYsIHdoaWNoIG1pZ2h0IGJlIGhlbHBmdWwgZnJvbSBhIGRpYWdub3N0aWNzIHBvaW50IG9mIHZpZXcuIEkgd2FudCB0byBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2Ygd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnNfLipfb25jZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy94ZnMveGZzX2lvY3RsLmM9MTIxOT14ZnNfZmlsZV9pb2N0bChcbi0tXG5mcy94ZnMveGZzX2lvY3RsLmMtMTI0Mi1cdGNhc2UgWEZTX0lPQ19GUkVFU1A2NDpcbmZzL3hmcy94ZnNfaW9jdGwuYzoxMjQzOlx0XHR4ZnNfd2Fybl9vbmNlKG1wLFxuZnMveGZzL3hmc19pb2N0bC5jLTEyNDQtXHRcJiMzNDslcyBzaG91bGQgdXNlIGZhbGxvY2F0ZTsgWEZTX0lPQ197QUxMT0MsRlJFRX1TUCBpb2N0bCB1bnN1cHBvcnRlZFwmIzM0Oyxcbi0tXG5mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmM9Mjg4OD14bG9nX3JlY292ZXJfcHJvY2Vzcyhcbi0tXG5mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMtMjkwOC1cdFx0aWYgKG90aGVyX2NyYyA9PSBleHBlY3RlZF9jcmMpIHtcbmZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYzoyOTA5Olx0XHRcdHhmc19ub3RpY2Vfb25jZShsb2ctXHUwMDNlbF9tcCxcbmZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYy0yOTEwLVx0XCYjMzQ7Rml4aW5nIHVwIGluY29ycmVjdCBDUkMgZHVlIHRvIHBhZGRpbmcuXCYjMzQ7KTtcbi0tXG5mcy94ZnMveGZzX21lc3NhZ2UuaD01MD1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5mcy94ZnMveGZzX21lc3NhZ2UuaC01Ny1cbmZzL3hmcy94ZnNfbWVzc2FnZS5oOjU4OiNkZWZpbmUgeGZzX3ByaW50a19vbmNlKGZ1bmMsIGRldiwgZm10LCAuLi4pXHRcdFx0XFxcbmZzL3hmcy94ZnNfbWVzc2FnZS5oLTU5LVx0RE9fT05DRV9MSVRFKGZ1bmMsIGRldiwgZm10LCAjI19fVkFfQVJHU19fKVxuLS1cbmZzL3hmcy94ZnNfbWVzc2FnZS5oLTc3LVxuZnMveGZzL3hmc19tZXNzYWdlLmg6Nzg6I2RlZmluZSB4ZnNfd2Fybl9vbmNlKGRldiwgZm10LCAuLi4pXHRcdFx0XHRcXFxuZnMveGZzL3hmc19tZXNzYWdlLmg6Nzk6XHR4ZnNfcHJpbnRrX29uY2UoeGZzX3dhcm4sIGRldiwgZm10LCAjI19fVkFfQVJHU19fKVxuZnMveGZzL3hmc19tZXNzYWdlLmg6ODA6I2RlZmluZSB4ZnNfbm90aWNlX29uY2UoZGV2LCBmbXQsIC4uLilcdFx0XHRcdFxcXG5mcy94ZnMveGZzX21lc3NhZ2UuaDo4MTpcdHhmc19wcmludGtfb25jZSh4ZnNfbm90aWNlLCBkZXYsIGZtdCwgIyNfX1ZBX0FSR1NfXylcbmZzL3hmcy94ZnNfbWVzc2FnZS5oOjgyOiNkZWZpbmUgeGZzX2luZm9fb25jZShkZXYsIGZtdCwgLi4uKVx0XHRcdFx0XFxcbmZzL3hmcy94ZnNfbWVzc2FnZS5oOjgzOlx0eGZzX3ByaW50a19vbmNlKHhmc19pbmZvLCBkZXYsIGZtdCwgIyNfX1ZBX0FSR1NfXylcbmZzL3hmcy94ZnNfbWVzc2FnZS5oLTg0LVxuLS1cbmZzL3hmcy94ZnNfbW91bnQuYz0xNDQ3PXhmc19kZWNfZnJlZWNvdW50ZXIoXG4tLVxuZnMveGZzL3hmc19tb3VudC5jLTE0OTYtXHRcdFx0aWYgKGN0ciA9PSBYQ19GUkVFX0JMT0NLUylcbmZzL3hmcy94ZnNfbW91bnQuYzoxNDk3Olx0XHRcdFx0eGZzX3dhcm5fb25jZShtcCxcbmZzL3hmcy94ZnNfbW91bnQuYy0xNDk4LVwmIzM0O1Jlc2VydmUgYmxvY2tzIGRlcGxldGVkISBDb25zaWRlciBpbmNyZWFzaW5nIHJlc2VydmUgcG9vbCBzaXplLlwmIzM0Oyk7XG4tLVxuZnMveGZzL3hmc19zdXBlci5jPTc3OD1TVEFUSUMgdm9pZFxuZnMveGZzL3hmc19zdXBlci5jOjc3OTp4ZnNfZnNfaW5vZGVfaW5pdF9vbmNlKFxuZnMveGZzL3hmc19zdXBlci5jLTc4MC1cdHZvaWRcdFx0XHQqaW5vZGUpXG4tLVxuZnMveGZzL3hmc19zdXBlci5jPTE3MDI9eGZzX2ZzX2ZpbGxfc3VwZXIoXG4tLVxuZnMveGZzL3hmc19zdXBlci5jLTE4MTItXHRcdH1cbmZzL3hmcy94ZnNfc3VwZXIuYzoxODEzOlx0XHR4ZnNfd2Fybl9vbmNlKG1wLFxuZnMveGZzL3hmc19zdXBlci5jLTE4MTQtXHRcJiMzNDtEZXByZWNhdGVkIFY0IGZvcm1hdCAoY3JjPTApIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBhZnRlciBTZXB0ZW1iZXIgMjAzMC5cJiMzNDspO1xuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYy0xODE5LSNpZmRlZiBDT05GSUdfWEZTX1NVUFBPUlRfQVNDSUlfQ0lcbmZzL3hmcy94ZnNfc3VwZXIuYzoxODIwOlx0XHR4ZnNfd2Fybl9vbmNlKG1wLFxuZnMveGZzL3hmc19zdXBlci5jLTE4MjEtXHRcJiMzNDtEZXByZWNhdGVkIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdml0eSBmZWF0dXJlIChhc2NpaS1jaT0xKSB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgYWZ0ZXIgU2VwdGVtYmVyIDIwMzAuXCYjMzQ7KTtcbi0tXG5mcy94ZnMveGZzX3N1cGVyLmM9MjM1Mz14ZnNfaW5pdF9jYWNoZXModm9pZClcbi0tXG5mcy94ZnMveGZzX3N1cGVyLmMtMjQyOC1cdFx0XHRcdFx0ICAgIFNMQUJfQUNDT1VOVCksXG5mcy94ZnMveGZzX3N1cGVyLmM6MjQyOTpcdFx0XHRcdFx0ICAgeGZzX2ZzX2lub2RlX2luaXRfb25jZSk7XG5mcy94ZnMveGZzX3N1cGVyLmMtMjQzMC1cdGlmICgheGZzX2lub2RlX2NhY2hlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTY2NwoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiA1NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBEZWNpc2lvbiBmb3IgYG9uY2VfbGl0ZS5oYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYG9uY2VfbGl0ZS5oYCByZXF1aXJlcyBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9uIHRvIGJlIGVuYWJsZWQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWx3YXlzIGluY2x1ZGVkIHdpdGhvdXQgYW55IHNwZWNpZmljIGNvbmZpZyBndWFyZCwgc28gbm8sIG5vIHNwZWNpZmljIGNvbmZpZ3MgYXJlIHJlcXVpcmVkIOKAkyBpdCB1c2VzIHRoZSBzdGFuZGFyZCBrZXJuZWwgY29uZmlndXJhdGlvbnMuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBUaGUgY2hhbmdlcyBhcmUgbW9kaWZ5aW5nIGNvcmUga2VybmVsIGluZnJhc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgYGluY2x1ZGUvbGludXgvb25jZV9saXRlLmhgLCBhbmQgdGhhdCYjMzk7cyB1c2VkIHRocm91Z2hvdXQgdGhlIGtlcm5lbCDigJMgbmV0d29ya2luZywgYnVnIGhhbmRsaW5nLCBmaWxlc3lzdGVtcyDigJMgdGhlIHdvcmtzLiBHaXZlbiB0aGUgZ3VpZGVsaW5lcyBJIGhhdmUsIHRoZSBhbnN3ZXIgaXMgYSBkZWZpbml0aXZlICp5ZXMqLiBUaGUgY3JpdGVyaWEgZXhwbGljaXRseSBzdGF0ZSB0aGF0IGFueSBtb2RpZmljYXRpb24gdG8gJiMzNDtjb3JlIHN1YnN5c3RlbXMmIzM0OyBsaWtlIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIG9yIHJlZmFjdG9yaW5ncyB0aGF0IHJlc3RydWN0dXJlIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMgb3IgYWxnb3JpdGhtIGZsb3dzIHdhcnJhbnQgZnV6emluZy4gVGhpcyBkZWZpbml0ZWx5IGZhbGxzIGludG8gYm90aCBjYXRlZ29yaWVzLiBTbywgYFdvcnRoRnV6emluZ2AgaXMgYHRydWVgLgoKTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHN1aXRhYmxlIGZvY3VzIHN5bWJvbHMuIEkmIzM5O20gbG9va2luZyBmb3Igbm9uLXViaXF1aXRvdXMsIGZlYXR1cmUtc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgZXhlcmNpc2UgYF9fT05DRV9MSVRFX0lGYCBvciByZWxhdGVkIG1hY3Jvcy4gSSYjMzk7dmUgZ290IGEgbGlzdCBvZiBwb3RlbnRpYWwgY2FuZGlkYXRlczogYG5ldGRldl9yeF9jc3VtX2ZhdWx0YCwgYHNrYl9jaGVja3N1bV9oZWxwYCwgYHhmc19maWxlX2lvY3RsYCwgYW5kIGB4ZnNfZnNfZmlsbF9zdXBlcmAuIEFmdGVyIHJldmlld2luZyB0aGVtLCB0aGVzZSBhcmUgZ29vZCBjaG9pY2VzLiBUaGV5IGFsbCBkaXJlY3RseSBpbnZva2UgYERPX09OQ0VfTElURWAgb3IgYERPX09OQ0VfTElURV9JRmAuIFBlcmZlY3QuCgpGaW5hbGx5LCBsZXQmIzM5O3MgYXNzZW1ibGUgdGhlIGBzZXQtcmVzdWx0c2AgZGF0YS4KCiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgCiogICBgUmVhc29uaW5nYDogTW9kaWZpY2F0aW9uIG9mIGNvcmUga2VybmVsIGluZnJhc3RydWN0dXJlIChgaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaGApLCBkaXJlY3RseSBpbXBhY3Rpbmcgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCBhY3Jvc3MgY29yZSBzdWJzeXN0ZW1zIChuZXR3b3JraW5nLCBidWcgaGFuZGxpbmcsIGZpbGVzeXN0ZW1zKS4gUmVmYWN0b3Jpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtIGZsb3dzLgoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtuZXRkZXZfcnhfY3N1bV9mYXVsdCYjMzQ7LCAmIzM0O3NrYl9jaGVja3N1bV9oZWxwJiMzNDssICYjMzQ7eGZzX2ZpbGVfaW9jdGwmIzM0OywgJiMzNDt4ZnNfZnNfZmlsbF9zdXBlciYjMzQ7XWAKKiAgIGBFbmFibGVDb25maWdzYDogYFtdYCAoYmVjYXVzZSBgb25jZV9saXRlLmhgIGlzIGFsd2F5cyBpbmNsdWRlZCkKClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZGV2X3J4X2NzdW1fZmF1bHQmIzM0OywKICAgICYjMzQ7c2tiX2NoZWNrc3VtX2hlbHAmIzM0OywKICAgICYjMzQ7eGZzX2ZpbGVfaW9jdGwmIzM0OywKICAgICYjMzQ7eGZzX2ZzX2ZpbGxfc3VwZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBET19PTkNFX0xJVEUgLyBfX09OQ0VfTElURV9JRiBoZWxwZXIgbWFjcm8gZGVmaW5pdGlvbnMgaW4gaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaCwgc2VwYXJhdGluZyBvdXQgX19PTkNFX0xJVEUoKSBhbmQgYWx0ZXJpbmcgdGhlIGNvbmRpdGlvbiBldmFsdWF0aW9uIGxvZ2ljIGZvciBvbmUtdGltZSBleGVjdXRpb24gYWNyb3NzIHRoZSBrZXJuZWwuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUgdXNlZCBpbiBuZXR3b3JraW5nLCBmaWxlc3lzdGVtcywgYW5kIGdlbmVyaWMgYnVnL3dhcm5pbmcgbWFjcm9zLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gdmVyaWZ5IHJ1bnRpbWUgZXZhbHVhdGlvbiBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRkZXZfcnhfY3N1bV9mYXVsdCYjMzQ7LAogICAgJiMzNDtza2JfY2hlY2tzdW1faGVscCYjMzQ7LAogICAgJiMzNDt4ZnNfZmlsZV9pb2N0bCYjMzQ7LAogICAgJiMzNDt4ZnNfZnNfZmlsbF9zdXBlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIERPX09OQ0VfTElURSAvIF9fT05DRV9MSVRFX0lGIGhlbHBlciBtYWNybyBkZWZpbml0aW9ucyBpbiBpbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLCBzZXBhcmF0aW5nIG91dCBfX09OQ0VfTElURSgpIGFuZCBhbHRlcmluZyB0aGUgY29uZGl0aW9uIGV2YWx1YXRpb24gbG9naWMgZm9yIG9uZS10aW1lIGV4ZWN1dGlvbiBhY3Jvc3MgdGhlIGtlcm5lbC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBpbmZyYXN0cnVjdHVyZSB1c2VkIGluIG5ldHdvcmtpbmcsIGZpbGVzeXN0ZW1zLCBhbmQgZ2VuZXJpYyBidWcvd2FybmluZyBtYWNyb3MsIHdhcnJhbnRpbmcgZnV6emluZyB0byB2ZXJpZnkgcnVudGltZSBldmFsdWF0aW9uIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgX19PTkNFX0xJVEVfSUZgIG1hY3JvIGluIGBpbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oYCBpbnRvIGEgc3RhbmRhbG9uZSBgX19PTkNFX0xJVEUoKWAgaGVscGVyIGFuZCBzaG9ydC1jaXJjdWl0aW5nIGBfX09OQ0VfTElURV9JRihjb25kaXRpb24pYC5cblxuQWxsIHZhcmlhYmxlcyB1c2VkIHdpdGhpbiB0aGUgbWFjcm9zIChgX19hbHJlYWR5X2RvbmVgIGluIGAuZGF0YS4ub25jZWAgYW5kIGxvY2FsIGJvb2xlYW4gYF9fcmV0X29uY2UgPSBmYWxzZWApIGFyZSBzdGF0aWMgb3IgZXhwbGljaXRseSBpbml0aWFsaXplZC4gVGhlIHBhdGNoIGRvZXMgbm90IHRvdWNoIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBtZW1vcnksIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzLCBtZW1vcnkgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvbGVha3MsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIHVubmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTIxMTZjN2I5NThmODg1YWZhNzM0YTllZGFkMzdlMGQwYzcxOTRiZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMTU6MTg6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oIGIvaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaAppbmRleCAyMzY1OTJjNGVlYjFhLi41ZTJiNjcwMzlhYWYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvb25jZV9saXRlLmgKQEAgLTEwLDE5ICYjNDM7MTAsMjEgQEAKICNkZWZpbmUgRE9fT05DRV9MSVRFKGZ1bmMsIC4uLikJCQkJCQlcCiAJRE9fT05DRV9MSVRFX0lGKHRydWUsIGZ1bmMsICMjX19WQV9BUkdTX18pCiAKLSNkZWZpbmUgX19PTkNFX0xJVEVfSUYoY29uZGl0aW9uKQkJCQkJXAomIzQzOyNkZWZpbmUgX19PTkNFX0xJVEUoKQkJCQkJCQlcCiAJKHsJCQkJCQkJCVwKIAkJc3RhdGljIGJvb2wgX19zZWN0aW9uKCYjMzQ7LmRhdGEuLm9uY2UmIzM0OykgX19hbHJlYWR5X2RvbmU7CVwKLQkJYm9vbCBfX3JldF9jb25kID0gISEoY29uZGl0aW9uKTsJCQlcCiAJCWJvb2wgX19yZXRfb25jZSA9IGZhbHNlOwkJCQlcCiAJCQkJCQkJCQlcCi0JCWlmICh1bmxpa2VseShfX3JldF9jb25kKSAmYW1wOyZhbXA7IHVubGlrZWx5KCFfX2FscmVhZHlfZG9uZSkpIHtcCiYjNDM7CQlpZiAodW5saWtlbHkoIV9fYWxyZWFkeV9kb25lKSkgewkJCVwKIAkJCV9fYWxyZWFkeV9kb25lID0gdHJ1ZTsJCQkJXAogCQkJX19yZXRfb25jZSA9IHRydWU7CQkJCVwKIAkJfQkJCQkJCQlcCiAJCXVubGlrZWx5KF9fcmV0X29uY2UpOwkJCQkJXAogCX0pCiAKJiM0MzsjZGVmaW5lIF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbikJCQkJCVwKJiM0MzsJKHVubGlrZWx5KGNvbmRpdGlvbikgJmFtcDsmYW1wOyBfX09OQ0VfTElURSgpKQomIzQzOwogI2RlZmluZSBET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBmdW5jLCAuLi4pCQkJCVwKIAkoewkJCQkJCQkJXAogCQlib29sIF9fcmV0X2RvX29uY2UgPSAhIShjb25kaXRpb24pOwkJCVwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgb25jZV9saXRlLmhgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgcmVsYXRlZCB0byBzb21lIG9wdGltaXphdGlvbiBvciBwZXJoYXBzIHNpbXBsaWZpY2F0aW9uIG9mIGEgJiMzNDtvbmNlJiMzNDsgZXhlY3V0aW9uIHBhdHRlcm4gd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBkaWZmIHN1Z2dlc3RzIHRoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBoZWFkZXIgZmlsZSwgc28gdGhpcyBsaWtlbHkgcHJvdmlkZXMgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMuCgpJIHNlZSBhIHJldmlzZWQgaW1wbGVtZW50YXRpb24gb2YgYF9fT05DRV9MSVRFX0lGYC4gUHJldmlvdXNseSwgaXQgYXBwZWFycyB0byBoYXZlIGEgYm9vbGVhbiBgY29uZGl0aW9uYCBwYXNzZWQgaW50byB0aGUgbWFjcm87IG5vdyB0aGVyZSYjMzk7cyBhbiBgX19PTkNFX0xJVEUoKWAgbWFjcm8uIFRoZSBnb2FsIGlzIGxpa2VseSB0byBleGVjdXRlIHNvbWUgY29kZSAqb25seSBvbmNlKiBpZiBhIGNvbmRpdGlvbiBpcyBtZXQsIHNvIGBET19PTkNFX0xJVEVfSUZgIG11c3QgYmUgY3JpdGljYWwgaW4gYWxsb3dpbmcgdGhhdCBjb250cm9sLiBJIHNlZSB0aGUgdXNhZ2Ugb2YgYHVubGlrZWx5KClgIHdoaWNoIGluZGljYXRlcyBvcHRpbWl6YXRpb24gdG93YXJkIHBlcmZvcm1hbmNlIGJhc2VkIG9uIGFuIGV4cGVjdGVkLCBidXQgbm90IGNlcnRhaW4sIGNvbmRpdGlvbi4gSSBhbHNvIG5vdGljZSB0aGUgdXNlIG9mIGEgc3RhdGljIGJvb2xlYW4gdmFyaWFibGUgYF9fYWxyZWFkeV9kb25lYCBsb2NhdGVkIGluIGAuZGF0YS4ub25jZWAuIFB1dHRpbmcgaXQgdGhlcmUgcHJvYmFibHkgZ3VhcmFudGVlcyBpbml0aWFsaXphdGlvbiB0byB6ZXJvIGFuZCBwbGFjZW1lbnQgd2l0aGluIGEgc2VjdGlvbiBsaWtlbHkgbWVhbnQgZm9yIGluaXRpYWxpemVkIGRhdGEgdGhhdCB3b24mIzM5O3QgYmUgbW9kaWZpZWQuCgpJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIGEgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuIEJ5IHB1bGxpbmcgdGhlIGluaXRpYWwgYGNvbmRpdGlvbmAgY2hlY2sgb3V0IGludG8gdGhlIG1hY3JvIGRlZmluaXRpb24sIHRoZXJlJiMzOTtzIHBvc3NpYmx5IGxlc3Mgb3ZlcmhlYWQuIE5vdywgdGhlIGNvbmRpdGlvbiBpcyBldmFsdWF0ZWQgb25seSB3aXRoaW4gdGhlIGBET19PTkNFX0xJVEVfSUZgIG1hY3JvIGFuZCBvbmx5IG9uY2UuIElmIHRoZSBjb25kaXRpb24gaXMgYWx3YXlzIGZhbHNlLCB0aGVyZSBpcyBubyBvdmVyaGVhZCBmcm9tIHRoZSBvbmNlIGNvZGUuIEFsc28sIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBjYWxscyB0byB0aGUgc2FtZSBvbmNlIGNvbmRpdGlvbiwgdGhpcyB3aWxsIHNob3J0LWNpcmN1aXQgYW55IGxhdGVyIGludm9jYXRpb25zLgoKVGhpcyBzZWVtcyBsaWtlIGEgY2FyZWZ1bCBhbmQgZm9jdXNlZCBwYXRjaC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZnVsbCBjb250ZXh0IHRvIGVuc3VyZSB0aGF0IGl0IGhhcyBubyB1bmludGVuZGVkIHNpZGUgZWZmZWN0cywgYnV0IGl0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIG9wdGltaXphdGlvbiBvciBzaW1wbGlmaWNhdGlvbiBvZiB0aGUgYG9uY2VgIHBhdHRlcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4gICAyOlx0I2lmbmRlZiBfTElOVVhfT05DRV9MSVRFX0hcbiAgIDM6XHQjZGVmaW5lIF9MSU5VWF9PTkNFX0xJVEVfSFxuICAgNDpcdFxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiAgIDY6XHRcbiAgIDc6XHQvKiBDYWxsIGEgZnVuY3Rpb24gb25jZS4gU2ltaWxhciB0byBET19PTkNFKCksIGJ1dCBkb2VzIG5vdCB1c2UganVtcCBsYWJlbFxuICAgODpcdCAqIHBhdGNoaW5nIHZpYSBzdGF0aWMga2V5cy5cbiAgIDk6XHQgKi9cbiAgMTA6XHQjZGVmaW5lIERPX09OQ0VfTElURShmdW5jLCAuLi4pXHRcdFx0XHRcdFx0XFxcbiAgMTE6XHRcdERPX09OQ0VfTElURV9JRih0cnVlLCBmdW5jLCAjI19fVkFfQVJHU19fKVxuICAxMjpcdFxuICAxMzpcdCNkZWZpbmUgX19PTkNFX0xJVEUoKVx0XHRcdFx0XHRcdFx0XFxcbiAgMTQ6XHRcdCh7XHRcdFx0XHRcdFx0XHRcdFxcXG4gIDE1Olx0XHRcdHN0YXRpYyBib29sIF9fc2VjdGlvbihcJiMzNDsuZGF0YS4ub25jZVwmIzM0OykgX19hbHJlYWR5X2RvbmU7XHRcXFxuICAxNjpcdFx0XHRib29sIF9fcmV0X29uY2UgPSBmYWxzZTtcdFx0XHRcdFxcXG4gIDE3Olx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAgMTg6XHRcdFx0aWYgKHVubGlrZWx5KCFfX2FscmVhZHlfZG9uZSkpIHtcdFx0XHRcXFxuICAxOTpcdFx0XHRcdF9fYWxyZWFkeV9kb25lID0gdHJ1ZTtcdFx0XHRcdFxcXG4gIDIwOlx0XHRcdFx0X19yZXRfb25jZSA9IHRydWU7XHRcdFx0XHRcXFxuICAyMTpcdFx0XHR9XHRcdFx0XHRcdFx0XHRcXFxuICAyMjpcdFx0XHR1bmxpa2VseShfX3JldF9vbmNlKTtcdFx0XHRcdFx0XFxcbiAgMjM6XHRcdH0pXG4gIDI0Olx0XG4gIDI1Olx0I2RlZmluZSBfX09OQ0VfTElURV9JRihjb25kaXRpb24pXHRcdFx0XHRcdFxcXG4gIDI2Olx0XHQodW5saWtlbHkoY29uZGl0aW9uKSBcdTAwMjZcdTAwMjYgX19PTkNFX0xJVEUoKSlcbiAgMjc6XHRcbiAgMjg6XHQjZGVmaW5lIERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIGZ1bmMsIC4uLilcdFx0XHRcdFxcXG4gIDI5Olx0XHQoe1x0XHRcdFx0XHRcdFx0XHRcXFxuICAzMDpcdFx0XHRib29sIF9fcmV0X2RvX29uY2UgPSAhIShjb25kaXRpb24pO1x0XHRcdFxcXG4gIDMxOlx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAgMzI6XHRcdFx0aWYgKF9fT05DRV9MSVRFX0lGKF9fcmV0X2RvX29uY2UpKVx0XHRcdFxcXG4gIDMzOlx0XHRcdFx0ZnVuYyhfX1ZBX0FSR1NfXyk7XHRcdFx0XHRcXFxuICAzNDpcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gIDM1Olx0XHRcdHVubGlrZWx5KF9fcmV0X2RvX29uY2UpO1x0XHRcdFx0XFxcbiAgMzY6XHRcdH0pXG4gIDM3Olx0XG4gIDM4Olx0I2VuZGlmIC8qIF9MSU5VWF9PTkNFX0xJVEVfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjU4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG9uY2VfbGl0ZS5oYCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG9uY2VfbGl0ZS5oYCBoZWFkZXIgYW5kIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UuIEkgc2VlIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBvZiBgX19PTkNFX0xJVEVfSUZgIHVzZXMgYSBzdGF0aWMgYm9vbGVhbiBmbGFnLCBgX19hbHJlYWR5X2RvbmVgLCBwbGFjZWQgaW4gdGhlIGAuZGF0YS4ub25jZWAgc2VjdGlvbi4gSXQgc2VlbXMgdG8gYmUgaW1wbGVtZW50aW5nIGEgbGlnaHR3ZWlnaHQgJiMzNDtvbmNlJiMzNDsgZXhlY3V0aW9uIHBhcmFkaWdtLCBsaWtlbHkgZm9yIGluaXRpYWxpemF0aW9uIG9yIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbiB0aGF0IHNob3VsZCBoYXBwZW4gb25seSBvbmNlLiBUaGUgb3JpZ2luYWwgY29kZSYjMzk7cyBhcHByb2FjaCBpcyBpbnRlcmVzdGluZzsgaXQmIzM5O3MgdXNpbmcgdGhlIGAoeyAuLi4gfSlgIEdDQyBzdGF0ZW1lbnQgZXhwcmVzc2lvbiB0byBwcm92aWRlIHNvbWUgc29ydCBvZiBhdG9taWMgKG9yIGFzIGF0b21pYyBhcyB0aGUgY29tcGlsZXIgYWxsb3dzKSB0ZXN0LWFuZC1zZXQgb3BlcmF0aW9uLCBhbG9uZyB3aXRoIGEgcmV0dXJuIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbmRpdGlvbiB3YXMgdHJ1ZSBhbmQgdGhlIGFjdGlvbiB3YXMgdGFrZW4gZm9yIHRoZSBmaXJzdCB0aW1lLgoKVGhlIHBhdGNoIHNpbXBsaWZpZXMgdGhpbmdzIGJ5IGRlZmluaW5nIGBfX09OQ0VfTElURSgpYCBhbmQgdXNpbmcgaXQgd2l0aGluIGBfX09OQ0VfTElURV9JRihjb25kaXRpb24pYC4gSXQmIzM5O3Mgc3RpbGwgdXNpbmcgdGhlIHNhbWUgYF9fYWxyZWFkeV9kb25lYCBzdGF0aWMgYm9vbGVhbiwgYnV0IG5vdyBpdCBjaGVja3MgZm9yIGEgYGNvbmRpdGlvbmAgYmVmb3JlIGNhbGxpbmcgdGhlICYjMzQ7b25jZSYjMzQ7IGNoZWNrLiBUaGUgbG9naWMgaW4gdGhlIHBhdGNoZWQgdmVyc2lvbiBpcyBjbGVhcmVyOyB0aGUgaW50ZW50IGlzIHRvIG9ubHkgZXhlY3V0ZSBzb21ldGhpbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyAqdW5saWtlbHkqIHRvIGJlIHRydWUgYW5kIHRoZSAmIzM0O29uY2UmIzM0OyBjaGVjayBoYXNuJiMzOTt0IGhhcHBlbmVkLgoKTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIG1hY3JvIGlzIGFjdHVhbGx5IHVzZWQgaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dCB0byByZWFsbHkgZ3Jhc3AgaXRzIHByYWN0aWNhbCBhcHBsaWNhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGluc3RhbmNlcyBvZiBgX19PTkNFX0xJVEVgLCBgX19PTkNFX0xJVEVfSUZgLCBhbmQgYERPX09OQ0VfTElURWAgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgbGV2ZXJhZ2VkIGluIHByYWN0aWNlLiBUaGF0IHdpbGwgaWxsdW1pbmF0ZSB0aGUgb3B0aW1pemF0aW9ucyBvciBzcGVjaWZpYyB1c2UgY2FzZXMgdGhpcyBpcyBkZXNpZ25lZCBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O09OQ0VfTElURSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9leHRhYmxlLmM9MTY2PXN0YXRpYyBib29sIGV4X2hhbmRsZXJfbXNyKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmZpeHVwLFxuLS1cbmFyY2gveDg2L21tL2V4dGFibGUuYy0xNjgte1xuYXJjaC94ODYvbW0vZXh0YWJsZS5jOjE2OTpcdGlmIChfX09OQ0VfTElURV9JRighc2FmZSBcdTAwMjZcdTAwMjYgd3Jtc3IpKSB7XG5hcmNoL3g4Ni9tbS9leHRhYmxlLmMtMTcwLVx0XHRwcl93YXJuKFwmIzM0O3VuY2hlY2tlZCBNU1IgYWNjZXNzIGVycm9yOiBXUk1TUiB0byAweCV4ICh0cmllZCB0byB3cml0ZSAweCUwOHglMDh4KSBhdCBySVA6IDB4JWx4ICglcFMpXFxuXCYjMzQ7LFxuLS1cbmFyY2gveDg2L21tL2V4dGFibGUuYy0xNzUtXG5hcmNoL3g4Ni9tbS9leHRhYmxlLmM6MTc2Olx0aWYgKF9fT05DRV9MSVRFX0lGKCFzYWZlIFx1MDAyNlx1MDAyNiAhd3Jtc3IpKSB7XG5hcmNoL3g4Ni9tbS9leHRhYmxlLmMtMTc3LVx0XHRwcl93YXJuKFwmIzM0O3VuY2hlY2tlZCBNU1IgYWNjZXNzIGVycm9yOiBSRE1TUiBmcm9tIDB4JXggYXQgcklQOiAweCVseCAoJXBTKVxcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTEyMzQ9c3RhdGljIGludCB3YWl0X29uX3NlbShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgdTY0IGRhdGEpXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy0xMjU0LVx0XHRpZiAoYW1kX2lvbW11X2R1bXApXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jOjEyNTU6XHRcdFx0RE9fT05DRV9MSVRFKGR1bXBfY29tbWFuZF9idWZmZXIsIGlvbW11KTtcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMTI1Ni1cbi0tXG5mcy9lcm9mcy9pbnRlcm5hbC5oPTQ0Nj1lcm9mc19nZXRfYW9wcyhzdHJ1Y3QgaW5vZGUgKnJlYWxpbm9kZSlcbi0tXG5mcy9lcm9mcy9pbnRlcm5hbC5oLTQ1MC1cdFx0XHRyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7XG5mcy9lcm9mcy9pbnRlcm5hbC5oOjQ1MTpcdFx0RE9fT05DRV9MSVRFX0lGKHJlYWxpbm9kZS1cdTAwM2VpX2Jsa2JpdHMgIT0gUEFHRV9TSElGVCxcbmZzL2Vyb2ZzL2ludGVybmFsLmgtNDUyLVx0XHRcdCAgZXJvZnNfaW5mbywgcmVhbGlub2RlLVx1MDAzZWlfc2IsXG4tLVxuZnMveGZzL3hmc19tZXNzYWdlLmg9NTA9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuZnMveGZzL3hmc19tZXNzYWdlLmgtNTgtI2RlZmluZSB4ZnNfcHJpbnRrX29uY2UoZnVuYywgZGV2LCBmbXQsIC4uLilcdFx0XHRcXFxuZnMveGZzL3hmc19tZXNzYWdlLmg6NTk6XHRET19PTkNFX0xJVEUoZnVuYywgZGV2LCBmbXQsICMjX19WQV9BUkdTX18pXG5mcy94ZnMveGZzX21lc3NhZ2UuaC02MC1cbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oPTEwMz1leHRlcm4gX19wcmludGYoMSwgMikgdm9pZCBfX3dhcm5fcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTtcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE3OS0jZGVmaW5lIFdBUk5fT05fT05DRShjb25kaXRpb24pXHRcdFx0XHRcdFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oOjE4MDpcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk5fT04sIDEpXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE4MS0jZW5kaWZcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE4NC0jZGVmaW5lIFdBUk5fT05DRShjb25kaXRpb24sIGZvcm1hdC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oOjE4NTpcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk4sIDEsIGZvcm1hdClcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTg2LSNlbmRpZlxuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTg4LSNkZWZpbmUgV0FSTl9UQUlOVF9PTkNFKGNvbmRpdGlvbiwgdGFpbnQsIGZvcm1hdC4uLilcdFx0XFxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmg6MTg5Olx0RE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgV0FSTl9UQUlOVCwgMSwgdGFpbnQsIGZvcm1hdClcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTkwLVxuLS1cbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoyOiNpZm5kZWYgX0xJTlVYX09OQ0VfTElURV9IXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjM6I2RlZmluZSBfTElOVVhfT05DRV9MSVRFX0hcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtNC1cbi0tXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTktICovXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjEwOiNkZWZpbmUgRE9fT05DRV9MSVRFKGZ1bmMsIC4uLilcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoxMTpcdERPX09OQ0VfTElURV9JRih0cnVlLCBmdW5jLCAjI19fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0xMi1cbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MTM6I2RlZmluZSBfX09OQ0VfTElURSgpXHRcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0xNC1cdCh7XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0yNC1cbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MjU6I2RlZmluZSBfX09OQ0VfTElURV9JRihjb25kaXRpb24pXHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjI2Olx0KHVubGlrZWx5KGNvbmRpdGlvbikgXHUwMDI2XHUwMDI2IF9fT05DRV9MSVRFKCkpXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTI3LVxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoyODojZGVmaW5lIERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIGZ1bmMsIC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTI5LVx0KHtcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTMxLVx0XHRcdFx0XHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjMyOlx0XHRpZiAoX19PTkNFX0xJVEVfSUYoX19yZXRfZG9fb25jZSkpXHRcdFx0XFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMzMtXHRcdFx0ZnVuYyhfX1ZBX0FSR1NfXyk7XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMzctXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjM4OiNlbmRpZiAvKiBfTElOVVhfT05DRV9MSVRFX0ggKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oPTQwNz1zdHJ1Y3QgcGlfZW50cnkge1xuLS1cbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjQ5LSNkZWZpbmUgcHJpbnRrX29uY2UoZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oOjY1MDpcdERPX09OQ0VfTElURShwcmludGssIGZtdCwgIyNfX1ZBX0FSR1NfXylcbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjUxLSNkZWZpbmUgcHJpbnRrX2RlZmVycmVkX29uY2UoZm10LCAuLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9wcmludGsuaDo2NTI6XHRET19PTkNFX0xJVEUocHJpbnRrX2RlZmVycmVkLCBmbXQsICMjX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oLTY1My0jZWxzZVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9Mjc1MD1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2Fzc2VydF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI3NTMtXHRpZiAoV0FSTl9PTkNFKCFza2ItXHUwMDNlbGVuLCBcJiMzNDslc1xcblwmIzM0OywgX19mdW5jX18pKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoyNzU0Olx0XHRET19PTkNFX0xJVEUoc2tiX2R1bXAsIEtFUk5fRVJSLCBza2IsIGZhbHNlKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjc1NS0jZW5kaWYgLyogQ09ORklHX0RFQlVHX05FVCAqL1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oPTM3PWVudW0gdHJhY2VfdHlwZSB7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTI5LSNkZWZpbmUgTUVNX0ZBSUwoY29uZGl0aW9uLCBmbXQsIC4uLilcdFx0XHRcdFx0XFxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEzMDpcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIHByX2VyciwgXCYjMzQ7RVJST1I6IFwmIzM0OyBmbXQsICMjX19WQV9BUkdTX18pXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMzEtXG4tLVxubmV0L2NvcmUvZGV2LmM9MzYxNz1pbnQgc2tiX2NoZWNrc3VtX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9kZXYuYy0zNjQ1LVx0aWYgKHVubGlrZWx5KG9mZnNldCBcdTAwM2U9IHNrYl9oZWFkbGVuKHNrYikpKSB7XG5uZXQvY29yZS9kZXYuYzozNjQ2Olx0XHRET19PTkNFX0xJVEUoc2tiX2R1bXAsIEtFUk5fRVJSLCBza2IsIGZhbHNlKTtcbm5ldC9jb3JlL2Rldi5jLTM2NDctXHRcdFdBUk5fT05DRSh0cnVlLCBcJiMzNDtvZmZzZXQgKCVkKSBcdTAwM2U9IHNrYl9oZWFkbGVuKCkgKCV1KVxcblwmIzM0Oyxcbi0tXG5uZXQvY29yZS9kZXYuYy0zNjU0LVx0aWYgKHVubGlrZWx5KG9mZnNldCAmIzQzOyBzaXplb2YoX19zdW0xNikgXHUwMDNlIHNrYl9oZWFkbGVuKHNrYikpKSB7XG5uZXQvY29yZS9kZXYuYzozNjU1Olx0XHRET19PTkNFX0xJVEUoc2tiX2R1bXAsIEtFUk5fRVJSLCBza2IsIGZhbHNlKTtcbm5ldC9jb3JlL2Rldi5jLTM2NTYtXHRcdFdBUk5fT05DRSh0cnVlLCBcJiMzNDtvZmZzZXQmIzQzOzIgKCV6dSkgXHUwMDNlIHNrYl9oZWFkbGVuKCkgKCV1KVxcblwmIzM0Oyxcbi0tXG5uZXQvY29yZS9kZXYuYz0zNzQwPXZvaWQgbmV0ZGV2X3J4X2NzdW1fZmF1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL2Rldi5jLTM3NDEte1xubmV0L2NvcmUvZGV2LmM6Mzc0MjpcdERPX09OQ0VfTElURShkb19uZXRkZXZfcnhfY3N1bV9mYXVsdCwgZGV2LCBza2IpO1xubmV0L2NvcmUvZGV2LmMtMzc0My19XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9MjI3PXN0YXRpYyB2b2lkIHRjcF9tZWFzdXJlX3Jjdl9tc3Moc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI2My1cdFx0LyogQWNjb3VudCBmb3IgcG9zc2libHktcmVtb3ZlZCBvcHRpb25zICovXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzoyNjQ6XHRcdERPX09OQ0VfTElURV9JRihsZW4gXHUwMDNlIGljc2stXHUwMDNlaWNza19hY2sucmN2X21zcyAmIzQzOyBNQVhfVENQX09QVElPTl9TUEFDRSxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI2NS1cdFx0XHRcdHRjcF9ncm9fZGV2X3dhcm4sIHNrLCBza2IsIGxlbik7XG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmg9MTI1PWRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE1Ni0jZGVmaW5lIGxpbmtfZXJyX29uY2UobGluaywgZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxNTc6XHRET19PTkNFX0xJVEUobGlua19lcnIsIGxpbmssIGZtdCwgIyNfX1ZBX0FSR1NfXylcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE1OC0jZGVmaW5lIGxpbmtfaWRfaW5mbyhzZGF0YSwgbGlua19pZCwgZm10LCAuLi4pXHRcdFx0XHRcXFxuLS1cbnJ1c3Qva2VybmVsL3ByaW50LnJzPTQyNj1tYWNyb19ydWxlcyEgcHJfY29udCAoXG4tLVxucnVzdC9rZXJuZWwvcHJpbnQucnMtNDMzLS8vL1xucnVzdC9rZXJuZWwvcHJpbnQucnM6NDM0Oi8vLyBUaGlzIHN0cnVjdHVyZSBwcm92aWRlcyB0aGUgUnVzdCBlcXVpdmFsZW50IG9mIHRoZSBrZXJuZWwmIzM5O3MgYERPX09OQ0VfTElURWAgbWFjcm8uXG5ydXN0L2tlcm5lbC9wcmludC5ycy00MzUtLy8vIFdoaWxlIGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGltcGxlbWVudCB0aGUgZmVhdHVyZSBlbnRpcmVseSBhcyBhIFJ1c3QgbWFjcm8sXG4tLVxucnVzdC9rZXJuZWwvcHJpbnQucnM9NDY4PSAgICBwdWIgZm4gY2FsbF9vbmNlXHUwMDNjRlx1MDAzZShcdTAwMjZzZWxmLCBmOiBGKSAtXHUwMDNlIGJvb2xcbi0tXG5ydXN0L2tlcm5lbC9wcmludC5ycy00OTEtLy8vXG5ydXN0L2tlcm5lbC9wcmludC5yczo0OTI6Ly8vIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUga2VybmVsJiMzOTtzIGBET19PTkNFX0xJVEVgIG1hY3JvLlxucnVzdC9rZXJuZWwvcHJpbnQucnMtNDkzLS8vL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTk0CgkJCQkJCQlvdXRwdXQ6IDE3MQoJCQkJCQkJdGhvdWdodHM6IDY4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlZmFjdG9yaW5nIG9mIGBfX09OQ0VfTElURV9JRmAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZyBvZiB0aGUgYF9fT05DRV9MSVRFX0lGYCBtYWNybyBpbiBgaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaGAuIFRoZSBvcmlnaW5hbCB2ZXJzaW9uIHdhcyBhIGJpdCBjbHVua3ksIGNvbWJpbmluZyB0aGUgY29uZGl0aW9uIGNoZWNrIGFuZCB0aGUgJiMzNDtvbmNlJiMzNDsgZXhlY3V0aW9uIHdpdGhpbiBhIHNpbmdsZSBtYWNyby4gVGhpcyByZWZhY3RvcmluZyBjbGVhbmx5IHNlcGFyYXRlcyB0aGUgY29uZGl0aW9uIGV2YWx1YXRpb24gZnJvbSB0aGUgJiMzNDtvbmNlJiMzNDsgZXhlY3V0aW9uIGludG8gdHdvIG1hY3JvczogYF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilgIGFuZCBgX19PTkNFX0xJVEUoKWAuCgpUaGUga2V5IGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBfX09OQ0VfTElURSgpYCwgd2hpY2ggZW5jYXBzdWxhdGVzIHRoZSBsb2dpYyBmb3IgdGhlICYjMzQ7b25jZSYjMzQ7IGV4ZWN1dGlvbi4gIEl0IGNoZWNrcyBhIHN0YXRpYyBib29sZWFuIHZhcmlhYmxlLCBgX19hbHJlYWR5X2RvbmVgLCBpbiB0aGUgYC5kYXRhLi5vbmNlYCBzZWN0aW9uLiBDcml0aWNhbGx5LCB0aGlzIHN0YXRpYyB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCB0byBgZmFsc2VgICh6ZXJvLWluaXRpYWxpemVkKSwgYXMgaXQgcmVzaWRlcyBpbiBhIEJTUy9kYXRhIHNlY3Rpb24uIFRoZSBjb25kaXRpb24gY2hlY2sgaW4gdGhlIG5ldyBgX19PTkNFX0xJVEVfSUZgIGlzIG5vdyBhIHNpbXBsZSBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb246IGB1bmxpa2VseShjb25kaXRpb24pICZhbXA7JmFtcDsgX19PTkNFX0xJVEUoKWAuIFRoaXMgbWVhbnMgaWYgdGhlIGNvbmRpdGlvbiBpcyAqdW5saWtlbHkqIHRvIGJlIHRydWUgYW5kIHRoZSAqY29uZGl0aW9uKiBpcyAqdHJ1ZSosIHRoZW4gYF9fT05DRV9MSVRFKClgIHJ1bnMgb25seSBvbmNlLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIG9mIGNvdXJzZSwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEJ1dCwgcmV2aWV3aW5nIHRoZSBjb2RlLCBpdCYjMzk7cyBjbGVhciB0aGVyZSBhcmUgbm9uZS4KCiogICBObyBuZXcgbWVtb3J5IGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBvbiBlaXRoZXIgdGhlIHN0YWNrIG9yIHRoZSBoZWFwLgoqICAgTm8gZGF0YSBpcyBjb3BpZWQgdG8gb3IgZnJvbSB1c2Vyc3BhY2UsIHNvIHRoZXJlIGFyZSBubyBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuCiogICBUaGUgYF9fYWxyZWFkeV9kb25lYCB2YXJpYWJsZSBpcyBzdGF0aWMgYW5kIHRodXMgaW5pdGlhbGl6ZWQgYnkgdGhlIGxpbmtlciB0byBgZmFsc2VgLgoqICAgVGhlIGBfX3JldF9vbmNlYCB2YXJpYWJsZSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAuCiogICBUaGUgbG9naWMgaXRzZWxmIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGJvb2xlYW4gZXZhbHVhdGlvbiB3aXRoIGEgc3RhdGljIGZsYWcmIzM5O3Mgc3RhdGUgY2hhbmdlLCBzbyB0aGVyZSYjMzk7cyBubyB3YXkgaXQgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCBLQVNBTiBhbmQgS01TQU4gaGVyZS4gS0FTQU4gd2lsbCBjYXRjaCBnZW5lcmFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBpbmNsdWRpbmcgcHJvYmxlbXMgd2l0aCBzdGF0aWMgdmFyaWFibGVzLCBhbmQgS01TQU4gaXMgYWxsIGFib3V0IGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoaGVhcCwgc3RhY2ssIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBsZWFrcyB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yOyBpdCBvcHRpbWl6ZXMgdGhlIGV4aXN0aW5nIGxvZ2ljLiBJdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnksIG5vciBkb2VzIGl0IHJlYWQgdW5pbml0aWFsaXplZCB2YWx1ZXMuCgpUaGVyZWZvcmUsIHRoaXMgcmVmYWN0b3JpbmcgZG9lcyBub3QgbmVlZCBLTVNBTiBhbmFseXNpcywgYW5kIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuIEkgY2FuIGdvIGFoZWFkIGFuZCBjb25zdHJ1Y3QgdGhlIHJlc3BvbnNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBfX09OQ0VfTElURV9JRmAgbWFjcm8gaW4gYGluY2x1ZGUvbGludXgvb25jZV9saXRlLmhgIGludG8gYSBzdGFuZGFsb25lIGBfX09OQ0VfTElURSgpYCBoZWxwZXIgYW5kIHNob3J0LWNpcmN1aXRpbmcgYF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilgLlxuXG5BbGwgdmFyaWFibGVzIHVzZWQgd2l0aGluIHRoZSBtYWNyb3MgKGBfX2FscmVhZHlfZG9uZWAgaW4gYC5kYXRhLi5vbmNlYCBhbmQgbG9jYWwgYm9vbGVhbiBgX19yZXRfb25jZSA9IGZhbHNlYCkgYXJlIHN0YXRpYyBvciBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgdG91Y2ggZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSwgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMsIG1lbW9yeSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm9sZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBfX09OQ0VfTElURV9JRmAgbWFjcm8gaW4gYGluY2x1ZGUvbGludXgvb25jZV9saXRlLmhgIGludG8gYSBzdGFuZGFsb25lIGBfX09OQ0VfTElURSgpYCBoZWxwZXIgYW5kIHNob3J0LWNpcmN1aXRpbmcgYF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilgLlxuXG5BbGwgdmFyaWFibGVzIHVzZWQgd2l0aGluIHRoZSBtYWNyb3MgKGBfX2FscmVhZHlfZG9uZWAgaW4gYC5kYXRhLi5vbmNlYCBhbmQgbG9jYWwgYm9vbGVhbiBgX19yZXRfb25jZSA9IGZhbHNlYCkgYXJlIHN0YXRpYyBvciBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgdG91Y2ggZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSwgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMsIG1lbW9yeSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm9sZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE1OjE4OjM2LjE1NDkyODA1NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjY0MTQ4MDIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfcnhfY3N1bV9mYXVsdFwiLFxuICAgIFwic2tiX2NoZWNrc3VtX2hlbHBcIixcbiAgICBcInhmc19maWxlX2lvY3RsXCIsXG4gICAgXCJ4ZnNfZnNfZmlsbF9zdXBlclwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgX19PTkNFX0xJVEVfSUZgIG1hY3JvIGluIGBpbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oYCBpbnRvIGEgc3RhbmRhbG9uZSBgX19PTkNFX0xJVEUoKWAgaGVscGVyIGFuZCBzaG9ydC1jaXJjdWl0aW5nIGBfX09OQ0VfTElURV9JRihjb25kaXRpb24pYC5cXG5cXG5BbGwgdmFyaWFibGVzIHVzZWQgd2l0aGluIHRoZSBtYWNyb3MgKGBfX2FscmVhZHlfZG9uZWAgaW4gYC5kYXRhLi5vbmNlYCBhbmQgbG9jYWwgYm9vbGVhbiBgX19yZXRfb25jZSA9IGZhbHNlYCkgYXJlIHN0YXRpYyBvciBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgdG91Y2ggZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSwgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMsIG1lbW9yeSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm9sZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBET19PTkNFX0xJVEUgLyBfX09OQ0VfTElURV9JRiBoZWxwZXIgbWFjcm8gZGVmaW5pdGlvbnMgaW4gaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaCwgc2VwYXJhdGluZyBvdXQgX19PTkNFX0xJVEUoKSBhbmQgYWx0ZXJpbmcgdGhlIGNvbmRpdGlvbiBldmFsdWF0aW9uIGxvZ2ljIGZvciBvbmUtdGltZSBleGVjdXRpb24gYWNyb3NzIHRoZSBrZXJuZWwuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUgdXNlZCBpbiBuZXR3b3JraW5nLCBmaWxlc3lzdGVtcywgYW5kIGdlbmVyaWMgYnVnL3dhcm5pbmcgbWFjcm9zLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gdmVyaWZ5IHJ1bnRpbWUgZXZhbHVhdGlvbiBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTU6MTg6MzYuMTU0OTM0ODk1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQwMTIyNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MjExNmM3Yjk1OGY4ODVhZmE3MzRhOWVkYWQzN2UwZDBjNzE5NGJkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMTU6MTg6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaCBiL2luY2x1ZGUvbGludXgvb25jZV9saXRlLmhcXG5pbmRleCAyMzY1OTJjNGVlYjFhLi41ZTJiNjcwMzlhYWYwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvb25jZV9saXRlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oXFxuQEAgLTEwLDE5ICsxMCwyMSBAQFxcbiAjZGVmaW5lIERPX09OQ0VfTElURShmdW5jLCAuLi4pXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRET19PTkNFX0xJVEVfSUYodHJ1ZSwgZnVuYywgIyNfX1ZBX0FSR1NfXylcXG4gXFxuLSNkZWZpbmUgX19PTkNFX0xJVEVfSUYoY29uZGl0aW9uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rI2RlZmluZSBfX09OQ0VfTElURSgpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHQoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0c3RhdGljIGJvb2wgX19zZWN0aW9uKFxcXCIuZGF0YS4ub25jZVxcXCIpIF9fYWxyZWFkeV9kb25lO1xcdFxcXFxcXG4tXFx0XFx0Ym9vbCBfX3JldF9jb25kID0gISEoY29uZGl0aW9uKTtcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdGJvb2wgX19yZXRfb25jZSA9IGZhbHNlO1xcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHRpZiAodW5saWtlbHkoX19yZXRfY29uZCkgXFx1MDAyNlxcdTAwMjYgdW5saWtlbHkoIV9fYWxyZWFkeV9kb25lKSkge1xcXFxcXG4rXFx0XFx0aWYgKHVubGlrZWx5KCFfX2FscmVhZHlfZG9uZSkpIHtcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdFxcdF9fYWxyZWFkeV9kb25lID0gdHJ1ZTtcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdFxcdF9fcmV0X29uY2UgPSB0cnVlO1xcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0dW5saWtlbHkoX19yZXRfb25jZSk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHR9KVxcbiBcXG4rI2RlZmluZSBfX09OQ0VfTElURV9JRihjb25kaXRpb24pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQodW5saWtlbHkoY29uZGl0aW9uKSBcXHUwMDI2XFx1MDAyNiBfX09OQ0VfTElURSgpKVxcbitcXG4gI2RlZmluZSBET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBmdW5jLCAuLi4pXFx0XFx0XFx0XFx0XFxcXFxcbiBcXHQoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0Ym9vbCBfX3JldF9kb19vbmNlID0gISEoY29uZGl0aW9uKTtcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE1OjE4OjM2LjcxOTY2MTcxM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTExMTcxNTcwMjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGRldl9yeF9jc3VtX2ZhdWx0XCIsXG4gICAgXCJza2JfY2hlY2tzdW1faGVscFwiLFxuICAgIFwieGZzX2ZpbGVfaW9jdGxcIixcbiAgICBcInhmc19mc19maWxsX3N1cGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBET19PTkNFX0xJVEUgLyBfX09OQ0VfTElURV9JRiBoZWxwZXIgbWFjcm8gZGVmaW5pdGlvbnMgaW4gaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaCwgc2VwYXJhdGluZyBvdXQgX19PTkNFX0xJVEUoKSBhbmQgYWx0ZXJpbmcgdGhlIGNvbmRpdGlvbiBldmFsdWF0aW9uIGxvZ2ljIGZvciBvbmUtdGltZSBleGVjdXRpb24gYWNyb3NzIHRoZSBrZXJuZWwuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUgdXNlZCBpbiBuZXR3b3JraW5nLCBmaWxlc3lzdGVtcywgYW5kIGdlbmVyaWMgYnVnL3dhcm5pbmcgbWFjcm9zLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gdmVyaWZ5IHJ1bnRpbWUgZXZhbHVhdGlvbiBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MjExNmM3Yjk1OGY4ODVhZmE3MzRhOWVkYWQzN2UwZDBjNzE5NGJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxNToxODozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb25jZV9saXRlLmggYi9pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oXG5pbmRleCAyMzY1OTJjNGVlYjFhLi41ZTJiNjcwMzlhYWYwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaFxuQEAgLTEwLDE5ICsxMCwyMSBAQFxuICNkZWZpbmUgRE9fT05DRV9MSVRFKGZ1bmMsIC4uLilcdFx0XHRcdFx0XHRcXFxuIFx0RE9fT05DRV9MSVRFX0lGKHRydWUsIGZ1bmMsICMjX19WQV9BUkdTX18pXG4gXG4tI2RlZmluZSBfX09OQ0VfTElURV9JRihjb25kaXRpb24pXHRcdFx0XHRcdFxcXG4rI2RlZmluZSBfX09OQ0VfTElURSgpXHRcdFx0XHRcdFx0XHRcXFxuIFx0KHtcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdFx0c3RhdGljIGJvb2wgX19zZWN0aW9uKFwiLmRhdGEuLm9uY2VcIikgX19hbHJlYWR5X2RvbmU7XHRcXFxuLVx0XHRib29sIF9fcmV0X2NvbmQgPSAhIShjb25kaXRpb24pO1x0XHRcdFxcXG4gXHRcdGJvb2wgX19yZXRfb25jZSA9IGZhbHNlO1x0XHRcdFx0XFxcbiBcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLVx0XHRpZiAodW5saWtlbHkoX19yZXRfY29uZCkgXHUwMDI2XHUwMDI2IHVubGlrZWx5KCFfX2FscmVhZHlfZG9uZSkpIHtcXFxuK1x0XHRpZiAodW5saWtlbHkoIV9fYWxyZWFkeV9kb25lKSkge1x0XHRcdFxcXG4gXHRcdFx0X19hbHJlYWR5X2RvbmUgPSB0cnVlO1x0XHRcdFx0XFxcbiBcdFx0XHRfX3JldF9vbmNlID0gdHJ1ZTtcdFx0XHRcdFxcXG4gXHRcdH1cdFx0XHRcdFx0XHRcdFxcXG4gXHRcdHVubGlrZWx5KF9fcmV0X29uY2UpO1x0XHRcdFx0XHRcXFxuIFx0fSlcbiBcbisjZGVmaW5lIF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilcdFx0XHRcdFx0XFxcbitcdCh1bmxpa2VseShjb25kaXRpb24pIFx1MDAyNlx1MDAyNiBfX09OQ0VfTElURSgpKVxuK1xuICNkZWZpbmUgRE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgZnVuYywgLi4uKVx0XHRcdFx0XFxcbiBcdCh7XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRcdGJvb2wgX19yZXRfZG9fb25jZSA9ICEhKGNvbmRpdGlvbik7XHRcdFx0XFxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE1OjE4OjM2LjcxOTY2NDAwM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwMjM5NTY0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgcGF0Y2gsIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKlBhdGNoIEFuYWx5c2lzIGFuZCBJbXBhY3QgQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJIGRvIGlzIGFuYWx5emUgdGhlIHBhdGNoLiBJdCBzZWVtcyB3ZSdyZSBsb29raW5nIGF0IGEgbW9kaWZpY2F0aW9uIHRvIGBpbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oYC4gU28sIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGF0IGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgb25jZV9saXRlLmhgIGlzIGFsbCBhYm91dC4gSXMgaXQgYSBjcml0aWNhbCBwaWVjZSBvZiBpbmZyYXN0cnVjdHVyZSwgc29tZXRoaW5nIHVzZWQgdGhyb3VnaG91dCB0aGUga2VybmVsLCBvciBtb3JlIGxvY2FsaXplZD8gS25vd2luZyB0aGUgc2NvcGUgaXMgZXNzZW50aWFsLlxuXG5OZXh0LCBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgY2hhbmdlcyB3aXRoaW4gYG9uY2VfbGl0ZS5oYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aGF0KiBoYXMgY2hhbmdlZC4gSXMgaXQganVzdCB3aGl0ZXNwYWNlLCBhIGJ1ZyBmaXgsIGFuIG9wdGltaXphdGlvbiwgb3IgaXMgaXQgYSBmdW5kYW1lbnRhbCBhbHRlcmF0aW9uIG9mIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBgb25jZV9saXRlYCBtZWNoYW5pc20/IEkgbmVlZCB0byBsb29rIGZvciBhbnkgbmV3IEFQSSBjYWxscywgY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMsIG9yIG1vZGlmaWNhdGlvbnMgdGhhdCBjb3VsZCBhZmZlY3QgZXhpc3RpbmcgY29kZS4gRmluYWxseSwgd2hlcmUgaXMgdGhpcyBoZWFkZXIgZmlsZSB1c2VkPyBBIHF1aWNrIGdyZXAgdGhyb3VnaCB0aGUgY29kZSBiYXNlIHdpbGwgaGlnaGxpZ2h0IGFsbCBvZiB0aGUgcmVmZXJlbmNlcyB0byB0aGlzIGZpbGUsIGFuZCByZXZlYWwgdGhlIGFyZWFzIG9mIHRoZSBrZXJuZWwgdGhhdCBkZXBlbmQgb24gdGhpcyBtZWNoYW5pc20uIEkgd2lsbCB0aGVuIHBlcmZvcm0gYSBjb2RlIHJldmlldyBvbiB0aG9zZSBmaWxlcywgdG8gZXhhbWluZSBob3cgdGhleSBhcmUgYWZmZWN0ZWQgYnkgdGhlIGNoYW5nZXMuIE9ubHkgdGhlbiBjYW4gSSB0cnVseSBhc3Nlc3MgdGhlIGltcGFjdCBhbmQgcmlzayBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA0OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTU6MTg6NDMuNzQzNjIzMzkxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuICAgMjpcXHQjaWZuZGVmIF9MSU5VWF9PTkNFX0xJVEVfSFxcbiAgIDM6XFx0I2RlZmluZSBfTElOVVhfT05DRV9MSVRFX0hcXG4gICA0OlxcdFxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuICAgNjpcXHRcXG4gICA3OlxcdC8qIENhbGwgYSBmdW5jdGlvbiBvbmNlLiBTaW1pbGFyIHRvIERPX09OQ0UoKSwgYnV0IGRvZXMgbm90IHVzZSBqdW1wIGxhYmVsXFxuICAgODpcXHQgKiBwYXRjaGluZyB2aWEgc3RhdGljIGtleXMuXFxuICAgOTpcXHQgKi9cXG4gIDEwOlxcdCNkZWZpbmUgRE9fT05DRV9MSVRFKGZ1bmMsIC4uLilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAxMTpcXHRcXHRET19PTkNFX0xJVEVfSUYodHJ1ZSwgZnVuYywgIyNfX1ZBX0FSR1NfXylcXG4gIDEyOlxcdFxcbiAgMTM6XFx0I2RlZmluZSBfX09OQ0VfTElURSgpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMTQ6XFx0XFx0KHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAxNTpcXHRcXHRcXHRzdGF0aWMgYm9vbCBfX3NlY3Rpb24oXFxcIi5kYXRhLi5vbmNlXFxcIikgX19hbHJlYWR5X2RvbmU7XFx0XFxcXFxcbiAgMTY6XFx0XFx0XFx0Ym9vbCBfX3JldF9vbmNlID0gZmFsc2U7XFx0XFx0XFx0XFx0XFxcXFxcbiAgMTc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMTg6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFfX2FscmVhZHlfZG9uZSkpIHtcXHRcXHRcXHRcXFxcXFxuICAxOTpcXHRcXHRcXHRcXHRfX2FscmVhZHlfZG9uZSA9IHRydWU7XFx0XFx0XFx0XFx0XFxcXFxcbiAgMjA6XFx0XFx0XFx0XFx0X19yZXRfb25jZSA9IHRydWU7XFx0XFx0XFx0XFx0XFxcXFxcbiAgMjE6XFx0XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDIyOlxcdFxcdFxcdHVubGlrZWx5KF9fcmV0X29uY2UpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDIzOlxcdFxcdH0pXFxuICAyNDpcXHRcXG4gIDI1OlxcdCNkZWZpbmUgX19PTkNFX0xJVEVfSUYoY29uZGl0aW9uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDI2OlxcdFxcdCh1bmxpa2VseShjb25kaXRpb24pIFxcdTAwMjZcXHUwMDI2IF9fT05DRV9MSVRFKCkpXFxuICAyNzpcXHRcXG4gIDI4OlxcdCNkZWZpbmUgRE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgZnVuYywgLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG4gIDI5OlxcdFxcdCh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzA6XFx0XFx0XFx0Ym9vbCBfX3JldF9kb19vbmNlID0gISEoY29uZGl0aW9uKTtcXHRcXHRcXHRcXFxcXFxuICAzMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAzMjpcXHRcXHRcXHRpZiAoX19PTkNFX0xJVEVfSUYoX19yZXRfZG9fb25jZSkpXFx0XFx0XFx0XFxcXFxcbiAgMzM6XFx0XFx0XFx0XFx0ZnVuYyhfX1ZBX0FSR1NfXyk7XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzU6XFx0XFx0XFx0dW5saWtlbHkoX19yZXRfZG9fb25jZSk7XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzY6XFx0XFx0fSlcXG4gIDM3OlxcdFxcbiAgMzg6XFx0I2VuZGlmIC8qIF9MSU5VWF9PTkNFX0xJVEVfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToxODo0My43NDM2OTE5NzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDg2MjE2MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgYG9uY2VfbGl0ZS5oYCBVc2FnZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIGBvbmNlX2xpdGUuaGAgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBwaW5wb2ludCBldmVyeSBpbnN0YW5jZSB3aGVyZSB0aGlzIGhlYWRlciBmaWxlIGlzIGluY2x1ZGVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmhvdyogaXQncyBiZWluZyB1c2VkIHdpdGhpbiB0aG9zZSBjb250ZXh0cy4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGZpbmRpbmcgdGhlIGluY2x1ZGVzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBhbnkgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gaXQuIEknbGwgbmVlZCB0byBnbyBiZXlvbmQgYSBzaW1wbGUgYGdyZXBgIG9yIGBmaW5kYCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBvbmNlX2xpdGUuaGAgaW4gdGhlIGtlcm5lbC4gQXJlIHRoZXJlIGFueSB1bnVzdWFsIGNhbGxpbmcgcGF0dGVybnM/IEFyZSB0aGVyZSBhbnkgYXJlYXMgdGhhdCBsb29rIHJpcGUgZm9yIG9wdGltaXphdGlvbiByZWxhdGVkIHRvIGl0cyB1c2FnZT8gVGltZSB0byBkaWcgaW4gYW5kIGRvIHNvbWUgc2VyaW91cyBzdGF0aWMgYW5hbHlzaXMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiB1bmNvdmVyIVxuXG5cbiIsIklucHV0VG9rZW5zIjozOTU4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToxODo0Ni44Mjk5MTExMTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5NDQzOTQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvbmNlX2xpdGVcXFxcLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMveGZzL3hmc19tZXNzYWdlLmgtNC1cXG5mcy94ZnMveGZzX21lc3NhZ2UuaDo1OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9vbmNlX2xpdGUuaFxcdTAwM2VcXG5mcy94ZnMveGZzX21lc3NhZ2UuaC02LVxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaC02LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnN0cnVtZW50YXRpb24uaFxcdTAwM2VcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oOjc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29uY2VfbGl0ZS5oXFx1MDAzZVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtOC1cXG4tLVxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvcmF0ZWxpbWl0X3R5cGVzLmhcXHUwMDNlXFxuaW5jbHVkZS9saW51eC9wcmludGsuaDoxMDojaW5jbHVkZSBcXHUwMDNjbGludXgvb25jZV9saXRlLmhcXHUwMDNlXFxuaW5jbHVkZS9saW51eC9wcmludGsuaC0xMS1cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTIyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9jdHlwZS5oXFx1MDAzZVxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjIzOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9vbmNlX2xpdGUuaFxcdTAwM2VcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0yNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvZnRyYWNlX3JlZ3MuaFxcdTAwM2VcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTE1Ny0jaW5jbHVkZSBcXHUwMDNjbGludXgvcHJhbmRvbS5oXFx1MDAzZVxcbm5ldC9jb3JlL2Rldi5jOjE1ODojaW5jbHVkZSBcXHUwMDNjbGludXgvb25jZV9saXRlLmhcXHUwMDNlXFxubmV0L2NvcmUvZGV2LmMtMTU5LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFxcdTAwM2VcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTctI2RlZmluZSBfX01BQzgwMjExX0RFQlVHX0hcXG5uZXQvbWFjODAyMTEvZGVidWcuaDo4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9vbmNlX2xpdGUuaFxcdTAwM2VcXG5uZXQvbWFjODAyMTEvZGVidWcuaC05LSNpbmNsdWRlIFxcdTAwM2NuZXQvY2ZnODAyMTEuaFxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTU6MTg6NDkuMzI0MzYxODE4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA5NDA0NDA2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFwiT05DRV9MSVRFXCIgTWFjcm9zKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIHVzYWdlIG9mIHRoZXNlIGBfX09OQ0VfTElURV9JRmAsIGBfX09OQ0VfTElURWAsIGBET19PTkNFX0xJVEVgLCBhbmQgYERPX09OQ0VfTElURV9JRmAgbWFjcm9zLiAgVGhlIGdvYWwgaGVyZSBpcyBwcm9iYWJseSB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBiZWluZyB1c2VkIHdpdGhpbiB0aGUgY29kZWJhc2UuIEZpcnN0LCBhIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdG8gY2hlY2sgaG93IGBidWcuaGAgaW4gdGhlIGdlbmVyaWMgYXNzZW1ibHkgaW5jbHVkZXMgdXRpbGl6ZXMgdGhlbSBzaW5jZSB0aGF0J3Mgd2hlcmUgdGhlIGludmVzdGlnYXRpb24gc3RhcnRlZC4gTGV0J3MgZGlnIGludG8gYGluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmhgIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTkzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTU6MTg6NTIuNDE4NDA5MjE0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDY0MzI0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19PTkNFX0xJVEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vZXh0YWJsZS5jPTE2Nj1zdGF0aWMgYm9vbCBleF9oYW5kbGVyX21zcihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpmaXh1cCxcXG4tLVxcbmFyY2gveDg2L21tL2V4dGFibGUuYy0xNjgte1xcbmFyY2gveDg2L21tL2V4dGFibGUuYzoxNjk6XFx0aWYgKF9fT05DRV9MSVRFX0lGKCFzYWZlIFxcdTAwMjZcXHUwMDI2IHdybXNyKSkge1xcbmFyY2gveDg2L21tL2V4dGFibGUuYy0xNzAtXFx0XFx0cHJfd2FybihcXFwidW5jaGVja2VkIE1TUiBhY2Nlc3MgZXJyb3I6IFdSTVNSIHRvIDB4JXggKHRyaWVkIHRvIHdyaXRlIDB4JTA4eCUwOHgpIGF0IHJJUDogMHglbHggKCVwUylcXFxcblxcXCIsXFxuLS1cXG5hcmNoL3g4Ni9tbS9leHRhYmxlLmMtMTc1LVxcbmFyY2gveDg2L21tL2V4dGFibGUuYzoxNzY6XFx0aWYgKF9fT05DRV9MSVRFX0lGKCFzYWZlIFxcdTAwMjZcXHUwMDI2ICF3cm1zcikpIHtcXG5hcmNoL3g4Ni9tbS9leHRhYmxlLmMtMTc3LVxcdFxcdHByX3dhcm4oXFxcInVuY2hlY2tlZCBNU1IgYWNjZXNzIGVycm9yOiBSRE1TUiBmcm9tIDB4JXggYXQgcklQOiAweCVseCAoJXBTKVxcXFxuXFxcIixcXG4tLVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMTItXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoxMzojZGVmaW5lIF9fT05DRV9MSVRFKClcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0xNC1cXHQoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMjQtXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoyNTojZGVmaW5lIF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoyNjpcXHQodW5saWtlbHkoY29uZGl0aW9uKSBcXHUwMDI2XFx1MDAyNiBfX09OQ0VfTElURSgpKVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMjctXFxuLS1cXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTMxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjMyOlxcdFxcdGlmIChfX09OQ0VfTElURV9JRihfX3JldF9kb19vbmNlKSlcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0zMy1cXHRcXHRcXHRmdW5jKF9fVkFfQVJHU19fKTtcXHRcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE1OjE4OjU0LjQyNDg0ODc5OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTE2ODQyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgaWYgdGhleSdyZSBtaW5lOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgXCJPbmNlXCIgTWVjaGFuaXNtKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSB0aGlua2luZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIFwib25jZVwiIG1lY2hhbmlzbSBiZXR0ZXIsIHNwZWNpZmljYWxseSBob3cgaXQncyBpbXBsZW1lbnRlZC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZWJhc2UgZm9yIGluc3RhbmNlcyBvZiBgRE9fT05DRV9MSVRFYCwgYFdBUk5fT05DRWAsIG9yIGV2ZW4gaG93IHRoYXQgYG9uY2VfbGl0ZS5oYCBoZWFkZXIgZmlsZSBpcyB1dGlsaXplZC4gSSBmaWd1cmUgaWYgSSB0cmFjayBkb3duIHdoZXJlIHRob3NlIG1hY3JvcyBhcmUgYmVpbmcgKnVzZWQqLCBJJ2xsIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHVuZGVybHlpbmcgY29uY2VwdHMuIEkgYWxzbyBtaWdodCBsb29rIGF0IGhvdyB0aGV5IGludGVyYWN0IHdpdGggaW1wb3J0YW50IGZpbGVzIGxpa2UgYGJ1Zy5oYCBvciBgcHJpbnRrLmhgIHNpbmNlIHRoZXkgYXJlIGVzc2VudGlhbCBpbiBrZXJuZWwgZGVidWdnaW5nLiBUaGF0J3MgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCdzIHNlZSB3aGF0IHRoZSBncmVwIGNhbiBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzQxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTU6MTg6NTYuNjM2NTM1NTcxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzgyODQ1ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRPX09OQ0VfTElURVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTEyMzQ9c3RhdGljIGludCB3YWl0X29uX3NlbShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgdTY0IGRhdGEpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTEyNTQtXFx0XFx0aWYgKGFtZF9pb21tdV9kdW1wKVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6MTI1NTpcXHRcXHRcXHRET19PTkNFX0xJVEUoZHVtcF9jb21tYW5kX2J1ZmZlciwgaW9tbXUpO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMTI1Ni1cXG4tLVxcbmZzL2Vyb2ZzL2ludGVybmFsLmg9NDQ2PWVyb2ZzX2dldF9hb3BzKHN0cnVjdCBpbm9kZSAqcmVhbGlub2RlKVxcbi0tXFxuZnMvZXJvZnMvaW50ZXJuYWwuaC00NTAtXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApO1xcbmZzL2Vyb2ZzL2ludGVybmFsLmg6NDUxOlxcdFxcdERPX09OQ0VfTElURV9JRihyZWFsaW5vZGUtXFx1MDAzZWlfYmxrYml0cyAhPSBQQUdFX1NISUZULFxcbmZzL2Vyb2ZzL2ludGVybmFsLmgtNDUyLVxcdFxcdFxcdCAgZXJvZnNfaW5mbywgcmVhbGlub2RlLVxcdTAwM2VpX3NiLFxcbi0tXFxuZnMveGZzL3hmc19tZXNzYWdlLmg9NTA9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmZzL3hmcy94ZnNfbWVzc2FnZS5oLTU4LSNkZWZpbmUgeGZzX3ByaW50a19vbmNlKGZ1bmMsIGRldiwgZm10LCAuLi4pXFx0XFx0XFx0XFxcXFxcbmZzL3hmcy94ZnNfbWVzc2FnZS5oOjU5OlxcdERPX09OQ0VfTElURShmdW5jLCBkZXYsIGZtdCwgIyNfX1ZBX0FSR1NfXylcXG5mcy94ZnMveGZzX21lc3NhZ2UuaC02MC1cXG4tLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmg9MTAzPWV4dGVybiBfX3ByaW50ZigxLCAyKSB2b2lkIF9fd2Fybl9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pO1xcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaC0xNzktI2RlZmluZSBXQVJOX09OX09OQ0UoY29uZGl0aW9uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oOjE4MDpcXHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOX09OLCAxKVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTgxLSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaC0xODQtI2RlZmluZSBXQVJOX09OQ0UoY29uZGl0aW9uLCBmb3JtYXQuLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmg6MTg1OlxcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk4sIDEsIGZvcm1hdClcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE4Ni0jZW5kaWZcXG4tLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTg4LSNkZWZpbmUgV0FSTl9UQUlOVF9PTkNFKGNvbmRpdGlvbiwgdGFpbnQsIGZvcm1hdC4uLilcXHRcXHRcXFxcXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaDoxODk6XFx0RE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgV0FSTl9UQUlOVCwgMSwgdGFpbnQsIGZvcm1hdClcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE5MC1cXG4tLVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtOS0gKi9cXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjEwOiNkZWZpbmUgRE9fT05DRV9MSVRFKGZ1bmMsIC4uLilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoxMTpcXHRET19PTkNFX0xJVEVfSUYodHJ1ZSwgZnVuYywgIyNfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTEyLVxcbi0tXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0yNy1cXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjI4OiNkZWZpbmUgRE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgZnVuYywgLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTI5LVxcdCh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9wcmludGsuaD00MDc9c3RydWN0IHBpX2VudHJ5IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjQ5LSNkZWZpbmUgcHJpbnRrX29uY2UoZm10LCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmg6NjUwOlxcdERPX09OQ0VfTElURShwcmludGssIGZtdCwgIyNfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oLTY1MS0jZGVmaW5lIHByaW50a19kZWZlcnJlZF9vbmNlKGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oOjY1MjpcXHRET19PTkNFX0xJVEUocHJpbnRrX2RlZmVycmVkLCBmbXQsICMjX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9wcmludGsuaC02NTMtI2Vsc2VcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9Mjc1MD1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2Fzc2VydF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjc1My1cXHRpZiAoV0FSTl9PTkNFKCFza2ItXFx1MDAzZWxlbiwgXFxcIiVzXFxcXG5cXFwiLCBfX2Z1bmNfXykpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoyNzU0OlxcdFxcdERPX09OQ0VfTElURShza2JfZHVtcCwgS0VSTl9FUlIsIHNrYiwgZmFsc2UpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjc1NS0jZW5kaWYgLyogQ09ORklHX0RFQlVHX05FVCAqL1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmg9Mzc9ZW51bSB0cmFjZV90eXBlIHtcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTEyOS0jZGVmaW5lIE1FTV9GQUlMKGNvbmRpdGlvbiwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEzMDpcXHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBwcl9lcnIsIFxcXCJFUlJPUjogXFxcIiBmbXQsICMjX19WQV9BUkdTX18pXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTMxLVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MzYxNz1pbnQgc2tiX2NoZWNrc3VtX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTM2NDUtXFx0aWYgKHVubGlrZWx5KG9mZnNldCBcXHUwMDNlPSBza2JfaGVhZGxlbihza2IpKSkge1xcbm5ldC9jb3JlL2Rldi5jOjM2NDY6XFx0XFx0RE9fT05DRV9MSVRFKHNrYl9kdW1wLCBLRVJOX0VSUiwgc2tiLCBmYWxzZSk7XFxubmV0L2NvcmUvZGV2LmMtMzY0Ny1cXHRcXHRXQVJOX09OQ0UodHJ1ZSwgXFxcIm9mZnNldCAoJWQpIFxcdTAwM2U9IHNrYl9oZWFkbGVuKCkgKCV1KVxcXFxuXFxcIixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTM2NTQtXFx0aWYgKHVubGlrZWx5KG9mZnNldCArIHNpemVvZihfX3N1bTE2KSBcXHUwMDNlIHNrYl9oZWFkbGVuKHNrYikpKSB7XFxubmV0L2NvcmUvZGV2LmM6MzY1NTpcXHRcXHRET19PTkNFX0xJVEUoc2tiX2R1bXAsIEtFUk5fRVJSLCBza2IsIGZhbHNlKTtcXG5uZXQvY29yZS9kZXYuYy0zNjU2LVxcdFxcdFdBUk5fT05DRSh0cnVlLCBcXFwib2Zmc2V0KzIgKCV6dSkgXFx1MDAzZSBza2JfaGVhZGxlbigpICgldSlcXFxcblxcXCIsXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0zNzQwPXZvaWQgbmV0ZGV2X3J4X2NzdW1fZmF1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9kZXYuYy0zNzQxLXtcXG5uZXQvY29yZS9kZXYuYzozNzQyOlxcdERPX09OQ0VfTElURShkb19uZXRkZXZfcnhfY3N1bV9mYXVsdCwgZGV2LCBza2IpO1xcbm5ldC9jb3JlL2Rldi5jLTM3NDMtfVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9MjI3PXN0YXRpYyB2b2lkIHRjcF9tZWFzdXJlX3Jjdl9tc3Moc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMjYzLVxcdFxcdC8qIEFjY291bnQgZm9yIHBvc3NpYmx5LXJlbW92ZWQgb3B0aW9ucyAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjI2NDpcXHRcXHRET19PTkNFX0xJVEVfSUYobGVuIFxcdTAwM2UgaWNzay1cXHUwMDNlaWNza19hY2sucmN2X21zcyArIE1BWF9UQ1BfT1BUSU9OX1NQQUNFLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI2NS1cXHRcXHRcXHRcXHR0Y3BfZ3JvX2Rldl93YXJuLCBzaywgc2tiLCBsZW4pO1xcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmg9MTI1PWRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xNTYtI2RlZmluZSBsaW5rX2Vycl9vbmNlKGxpbmssIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxNTc6XFx0RE9fT05DRV9MSVRFKGxpbmtfZXJyLCBsaW5rLCBmbXQsICMjX19WQV9BUkdTX18pXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMTU4LSNkZWZpbmUgbGlua19pZF9pbmZvKHNkYXRhLCBsaW5rX2lkLCBmbXQsIC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5ydXN0L2tlcm5lbC9wcmludC5ycz00MjY9bWFjcm9fcnVsZXMhIHByX2NvbnQgKFxcbi0tXFxucnVzdC9rZXJuZWwvcHJpbnQucnMtNDMzLS8vL1xcbnJ1c3Qva2VybmVsL3ByaW50LnJzOjQzNDovLy8gVGhpcyBzdHJ1Y3R1cmUgcHJvdmlkZXMgdGhlIFJ1c3QgZXF1aXZhbGVudCBvZiB0aGUga2VybmVsJ3MgYERPX09OQ0VfTElURWAgbWFjcm8uXFxucnVzdC9rZXJuZWwvcHJpbnQucnMtNDM1LS8vLyBXaGlsZSBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBpbXBsZW1lbnQgdGhlIGZlYXR1cmUgZW50aXJlbHkgYXMgYSBSdXN0IG1hY3JvLFxcbi0tXFxucnVzdC9rZXJuZWwvcHJpbnQucnM9NDY4PSAgICBwdWIgZm4gY2FsbF9vbmNlXFx1MDAzY0ZcXHUwMDNlKFxcdTAwMjZzZWxmLCBmOiBGKSAtXFx1MDAzZSBib29sXFxuLS1cXG5ydXN0L2tlcm5lbC9wcmludC5ycy00OTEtLy8vXFxucnVzdC9rZXJuZWwvcHJpbnQucnM6NDkyOi8vLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGtlcm5lbCdzIGBET19PTkNFX0xJVEVgIG1hY3JvLlxcbnJ1c3Qva2VybmVsL3ByaW50LnJzLTQ5My0vLy9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTU6MTg6NTguNDE5Mzg5OTkxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4OTkxNDU3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPcHRpbWl6YXRpb24gb2YgdGhlIGBfX09OQ0VfTElURWAgTWFjcm9zKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGNvZGUgY2hhbmdlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBhbHRlcmF0aW9uIGFuZCBpdHMgaW1wbGljYXRpb25zLiBJIHNlZSB0aGUgb3JpZ2luYWwgYF9fT05DRV9MSVRFX0lGYCBtYWNybyBhbmQgdGhlbiB0aGUgbmV3IGltcGxlbWVudGF0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgbWFjcm8sIGBfX09OQ0VfTElURSgpYC5cblxuSW4gdGhlIG9sZCBjb2RlLCBgX19PTkNFX0xJVEVfSUYoY29uZGl0aW9uKWAgd3JhcHBlZCB0aGUgYF9fYWxyZWFkeV9kb25lYCBjaGVjayBkaXJlY3RseSB3aXRoaW4gdGhlIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGUgYF9fYWxyZWFkeV9kb25lYCBmbGFnIHdhcyBsb2NhbCB0byB0aGF0IG1hY3JvLiBUaGlzIG1lYW50IHRoZSBjaGVjayBhbmQgc2V0dGluZyBvZiB0aGUgZmxhZyBvbmx5IG9jY3VycmVkIGlmIHRoZSBgY29uZGl0aW9uYCB3YXMgdHJ1ZS4gSG93ZXZlciwgdGhlIGZsYWcgd2FzIGRlY2xhcmVkICppbnNpZGUqIHRoZSBtYWNyby5cblxuVGhlIG5ldyBjb2RlIHJlZmFjdG9ycyB0aGlzLiBgX19PTkNFX0xJVEUoKWAgaXMgbm93IGEgc3RhbmRhbG9uZSBtYWNybyByZXNwb25zaWJsZSBzb2xlbHkgZm9yIHRoZSBcImRvLW9uY2VcIiBiZWhhdmlvciDigJMgY2hlY2tpbmcgYW5kIHNldHRpbmcgYF9fYWxyZWFkeV9kb25lYC4gQ3J1Y2lhbGx5LCBgX19PTkNFX0xJVEVfSUYoY29uZGl0aW9uKWAgbm93ICpjYWxscyogYF9fT05DRV9MSVRFKClgLCBidXQgdXNlcyBzaG9ydC1jaXJjdWl0aW5nLiBUaGlzIG1lYW5zIHRoYXQgaWYgYGNvbmRpdGlvbmAgaXMgZmFsc2UsIGBfX09OQ0VfTElURSgpYCBpc24ndCBldmFsdWF0ZWQgYXQgYWxsLiBUaGUgaW1wYWN0IGlzIHdlIGdldCB0aGUgc2FtZSBiZWhhdmlvciBvZiBleGVjdXRpbmcgYF9fYWxyZWFkeV9kb25lYCBvbmx5IGlmIHRoZSBjb25kaXRpb24gaXMgbWV0LCBidXQgbm93IHRoZSBmbGFnIGlzIHNlcGFyYXRlIGFuZCBwb3RlbnRpYWxseSByZXVzYWJsZS5cblxuQWhhISBUaGlzIGFsc28gY2xhcmlmaWVzIHRoZSBsaWtlbHkgaW50ZW50LiBUaGUgaW50cm9kdWN0aW9uIG9mIGBfX09OQ0VfTElURSgpYCBvZmZlcnMgYSB3YXkgdG8gaW52b2tlIHRoZSBcImRvLW9uY2VcIiBsb2dpYyB3aXRob3V0IGFuIGV4cGxpY2l0IGNvbmRpdGlvbiwgd2hpY2ggd2Fzbid0IGFzIGNsZWFuIGluIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLiBOb3csIEkgc2VlIHRoYXQgdGhlIG9yaWdpbmFsIGBET19PTkNFX0xJVEVgIG1hY3JvIHVzZWQgYERPX09OQ0VfTElURV9JRih0cnVlLCAuLi4pYDsgbm93IHdlIGNhbiBzaW1wbHkgY2FsbCB0aGUgYmFzZSBmdW5jdGlvbi5cblxuQnV0LCBhIHF1aWNrIHJlYWxpdHkgY2hlY2s6IGlzIHRoaXMgZXZlbiB1c2VkIGFueXdoZXJlPyBMZXQgbWUgY2hlY2sgdGhlIGNhbGwgc2l0ZXMgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJ3QgZGVhZCBjb2RlISBJIHJlY2FsbCBgV0FSTl9PTl9PTkNFYCBsZXZlcmFnZXMgdGhpcywgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFuZCBpdCdzIHVzZWQgaW4gZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuLi4gU3BlY2lmaWNhbGx5LCBJIGtub3cgdGhhdCBgYXNtLWdlbmVyaWMvYnVnLmhgIG1pZ2h0IHVzZSB0aGlzLCBhbmQgdGhlIEFNRDY0IGFyY2hpdGVjdHVyZSBpcyBhbiBpbXBvcnRhbnQgY2FzZSBmb3IgbWUsIHNvIGxldCdzIGNoZWNrIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9idWcuaGAgdG8gY29uZmlybSB0aGUgaW1wbGVtZW50YXRpb24uIEdvdHRhIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBhY3R1YWxseSByZWxldmFudCBhbmQgbm90IGEgaHlwb3RoZXRpY2FsIG9wdGltaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY3MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToxOTowNi4zMTg1NDAyODhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NzE1NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIldBUk5fT05fT05DRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDM1NTQgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmFyY2gveDg2L2NvY28vc2V2L3ZjLWhhbmRsZS5jPTM5PXN0YXRpYyBlbnVtIGVzX3Jlc3VsdCB2Y19zbG93X3ZpcnRfdG9fcGh5cyhzdHJ1Y3QgZ2hjYiAqZ2hjYiwgc3RydWN0IGVzX2VtX2N0eHQgKmN0eHQsXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1oYW5kbGUuYy02MS1cXG5hcmNoL3g4Ni9jb2NvL3Nldi92Yy1oYW5kbGUuYzo2MjpcXHRpZiAoV0FSTl9PTl9PTkNFKHB0ZV92YWwoKnB0ZSkgXFx1MDAyNiBfUEFHRV9FTkMpKVxcbmFyY2gveDg2L2NvY28vc2V2L3ZjLWhhbmRsZS5jLTYzLVxcdFxcdC8qIEVtdWxhdGVkIE1NSU8gdG8vZnJvbSBlbmNyeXB0ZWQgbWVtb3J5IG5vdCBzdXBwb3J0ZWQgKi9cXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jPTU3OD1zdGF0aWMgaW50IGhhbmRsZV9tbWlvKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdmVfaW5mbyAqdmUpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy01ODctXFx0LyogT25seSBpbi1rZXJuZWwgTU1JTyBpcyBzdXBwb3J0ZWQgKi9cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzo1ODg6XFx0aWYgKFdBUk5fT05fT05DRSh1c2VyX21vZGUocmVncykpKVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTU4OS1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTU5Ny1cXHRtbWlvID0gaW5zbl9kZWNvZGVfbW1pbyhcXHUwMDI2aW5zbiwgXFx1MDAyNnNpemUpO1xcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjU5ODpcXHRpZiAoV0FSTl9PTl9PTkNFKG1taW8gPT0gSU5TTl9NTUlPX0RFQ09ERV9GQUlMRUQpKVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTU5OS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTY3Ny1cXHRcXHQvKiBBbGwgb3RoZXIgY2FzZXMgaGFzIHRvIGJlIGNvdmVyZWQgd2l0aCB0aGUgZmlyc3Qgc3dpdGNoKCkgKi9cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzo2Nzg6XFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTY3OS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2VudHJ5L2NvbW1vbi5jPTE4PW5vaW5zdHIgdm9pZCB4ODZfZW50cnlfZnJvbV9rdm0odW5zaWduZWQgaW50IGV2ZW50X3R5cGUsIHVuc2lnbmVkIGludCB2ZWN0b3IpXFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS9jb21tb24uYy00NS1cXG5hcmNoL3g4Ni9lbnRyeS9jb21tb24uYzo0NjpcXHRXQVJOX09OX09OQ0UoZXZlbnRfdHlwZSAhPSBFVkVOVF9UWVBFX05NSSk7XFxuYXJjaC94ODYvZW50cnkvY29tbW9uLmMtNDctXFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV9mcmVkLmM9MTI3PXZvaWQgX19pbml0IGZyZWRfaW5zdGFsbF9zeXN2ZWModW5zaWduZWQgaW50IHN5c3ZlYywgaWR0ZW50cnlfdCBoYW5kbGVyKVxcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYy0xMjgte1xcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYzoxMjk6XFx0aWYgKFdBUk5fT05fT05DRShzeXN2ZWMgXFx1MDAzYyBGSVJTVF9TWVNURU1fVkVDVE9SKSlcXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV9mcmVkLmMtMTMwLVxcdFxcdHJldHVybjtcXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV9mcmVkLmMtMTMxLVxcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYzoxMzI6XFx0aWYgKFdBUk5fT05fT05DRShmcmVkX3NldHVwX2RvbmUpKVxcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYy0xMzMtXFx0XFx0cmV0dXJuO1xcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYy0xMzQtXFxuYXJjaC94ODYvZW50cnkvZW50cnlfZnJlZC5jOjEzNTpcXHRpZiAoIVdBUk5fT05fT05DRShzeXN2ZWNfdGFibGVbc3lzdmVjIC0gRklSU1RfU1lTVEVNX1ZFQ1RPUl0pKVxcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYy0xMzYtXFx0XFx0IHN5c3ZlY190YWJsZVtzeXN2ZWMgLSBGSVJTVF9TWVNURU1fVkVDVE9SXSA9IGhhbmRsZXI7XFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV9mcmVkLmM9MTYwPXN0YXRpYyBub2luc3RyIHZvaWQgZnJlZF9leHRpbnQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV9mcmVkLmMtMTYzLVxcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYzoxNjQ6XFx0aWYgKFdBUk5fT05fT05DRSh2ZWN0b3IgXFx1MDAzYyBGSVJTVF9FWFRFUk5BTF9WRUNUT1IpKVxcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYy0xNjUtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvZW50cnkvZW50cnlfZnJlZC5jPTI4OT1fX3Zpc2libGUgbm9pbnN0ciB2b2lkIF9fZnJlZF9lbnRyeV9mcm9tX2t2bShzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gveDg2L2VudHJ5L2VudHJ5X2ZyZWQuYy0yOTYtXFx0ZGVmYXVsdDpcXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV9mcmVkLmM6Mjk3OlxcdFxcdFdBUk5fT05fT05DRSgxKTtcXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV9mcmVkLmMtMjk4LVxcdH1cXG4tLVxcbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmM9MjU3PWJvb2wgZW11bGF0ZV92c3lzY2FsbF9wZih1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbi0tXFxuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYy0yODUtXFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfTlgpKVxcbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmM6Mjg2OlxcdFxcdFdBUk5fT05fT05DRSghKGVycm9yX2NvZGUgXFx1MDAyNiBYODZfUEZfSU5TVFIpKTtcXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jLTI4Ny1cXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmM9MjgxPXZvaWQgYW1kX2Jyc19kcmFpbih2b2lkKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuYy0zMDEtXFx0LyogU2FuaXR5IGNoZWNrIFswLXg4Nl9wbXUubGJyX25yXSAqL1xcbmFyY2gveDg2L2V2ZW50cy9hbWQvYnJzLmM6MzAyOlxcdGlmIChXQVJOX09OX09OQ0UoY2ZnLm1zcm9mZiBcXHUwMDNlPSB4ODZfcG11Lmxicl9ucikpXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9icnMuYy0zMDMtXFx0XFx0Z290byBlbXB0eTtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jPTU4MD1zdGF0aWMgaW50IGFtZF9wbXVfY3B1X3ByZXBhcmUoaW50IGNwdSlcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jLTU4OC1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYzo1ODk6XFx0V0FSTl9PTl9PTkNFKGNwdWMtXFx1MDAzZWFtZF9uYik7XFxuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmMtNTkwLVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmM9NjA0PXN0YXRpYyB2b2lkIGFtZF9wbXVfY3B1X3N0YXJ0aW5nKGludCBjcHUpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYy02MTctXFx0bmJfaWQgPSB0b3BvbG9neV9hbWRfbm9kZV9pZChjcHUpO1xcbmFyY2gveDg2L2V2ZW50cy9hbWQvY29yZS5jOjYxODpcXHRXQVJOX09OX09OQ0UobmJfaWQgPT0gQkFEX0FQSUNJRCk7XFxuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmMtNjE5LVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmMtNjIxLVxcdFxcdG5iID0gcGVyX2NwdShjcHVfaHdfZXZlbnRzLCBpKS5hbWRfbmI7XFxuYXJjaC94ODYvZXZlbnRzL2FtZC9jb3JlLmM6NjIyOlxcdFxcdGlmIChXQVJOX09OX09OQ0UoIW5iKSlcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2NvcmUuYy02MjMtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2licy5jPTU1NT1zdGF0aWMgdm9pZCBwZXJmX2lic19zdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncylcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmMtNTYxLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmM6NTYyOlxcdGlmIChXQVJOX09OX09OQ0UoIShod2MtXFx1MDAzZXN0YXRlIFxcdTAwMjYgUEVSRl9IRVNfU1RPUFBFRCkpKVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmMtNTYzLVxcdFxcdHJldHVybjtcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2licy5jLTU2NC1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2licy5jOjU2NTpcXHRXQVJOX09OX09OQ0UoIShod2MtXFx1MDAzZXN0YXRlIFxcdTAwMjYgUEVSRl9IRVNfVVBUT0RBVEUpKTtcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2licy5jLTU2Ni1cXHRod2MtXFx1MDAzZXN0YXRlID0gMDtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmM9NTk3PXN0YXRpYyB2b2lkIHBlcmZfaWJzX3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2licy5jLTYzMy1cXHRcXHRjbGVhcl9iaXQoSUJTX1NUQVJURUQsIHBjcHUtXFx1MDAzZXN0YXRlKTtcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2licy5jOjYzNDpcXHRcXHRXQVJOX09OX09OQ0UoaHdjLVxcdTAwM2VzdGF0ZSBcXHUwMDI2IFBFUkZfSEVTX1NUT1BQRUQpO1xcbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmMtNjM1LVxcdFxcdGh3Yy1cXHUwMDNlc3RhdGUgfD0gUEVSRl9IRVNfU1RPUFBFRDtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmM9MTQwNj1zdGF0aWMgaW50IHBlcmZfaWJzX2hhbmRsZV9pcnEoc3RydWN0IHBlcmZfaWJzICpwZXJmX2licywgc3RydWN0IHB0X3JlZ3MgKmlyZWdzKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9pYnMuYy0xNDMzLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvaWJzLmM6MTQzNDpcXHRpZiAoV0FSTl9PTl9PTkNFKCFldmVudCkpXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9pYnMuYy0xNDM1LVxcdFxcdGdvdG8gZmFpbDtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvaW9tbXUuYz0yNzk9c3RhdGljIHZvaWQgcGVyZl9pb21tdV9zdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncylcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvaW9tbXUuYy0yODItXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9pb21tdS5jOjI4MzpcXHRpZiAoV0FSTl9PTl9PTkNFKCEoaHdjLVxcdTAwM2VzdGF0ZSBcXHUwMDI2IFBFUkZfSEVTX1NUT1BQRUQpKSlcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2lvbW11LmMtMjg0LVxcdFxcdHJldHVybjtcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2lvbW11LmMtMjg1LVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvaW9tbXUuYzoyODY6XFx0V0FSTl9PTl9PTkNFKCEoaHdjLVxcdTAwM2VzdGF0ZSBcXHUwMDI2IFBFUkZfSEVTX1VQVE9EQVRFKSk7XFxuYXJjaC94ODYvZXZlbnRzL2FtZC9pb21tdS5jLTI4Ny1cXHRod2MtXFx1MDAzZXN0YXRlID0gMDtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvaW9tbXUuYz0zMzE9c3RhdGljIHZvaWQgcGVyZl9pb21tdV9zdG9wKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9pb21tdS5jLTM0NS1cXHRwZXJmX2lvbW11X2Rpc2FibGVfZXZlbnQoZXZlbnQpO1xcbmFyY2gveDg2L2V2ZW50cy9hbWQvaW9tbXUuYzozNDY6XFx0V0FSTl9PTl9PTkNFKGh3Yy1cXHUwMDNlc3RhdGUgXFx1MDAyNiBQRVJGX0hFU19TVE9QUEVEKTtcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2lvbW11LmMtMzQ3LVxcdGh3Yy1cXHUwMDNlc3RhdGUgfD0gUEVSRl9IRVNfU1RPUFBFRDtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmM9MzYzPXZvaWQgYW1kX3BtdV9sYnJfZGVsKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudClcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmMtMzczLVxcdGNwdWMtXFx1MDAzZWxicl91c2Vycy0tO1xcbmFyY2gveDg2L2V2ZW50cy9hbWQvbGJyLmM6Mzc0OlxcdFdBUk5fT05fT05DRShjcHVjLVxcdTAwM2VsYnJfdXNlcnMgXFx1MDAzYyAwKTtcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL2xici5jLTM3NS1cXHRwZXJmX3NjaGVkX2NiX2RlYyhldmVudC1cXHUwMDNlcG11KTtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9hbWQvcG93ZXIuYz03NT1zdGF0aWMgdm9pZCBfX3BtdV9ldmVudF9zdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpXFxuYXJjaC94ODYvZXZlbnRzL2FtZC9wb3dlci5jLTc2LXtcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL3Bvd2VyLmM6Nzc6XFx0aWYgKFdBUk5fT05fT05DRSghKGV2ZW50LVxcdTAwM2Vody5zdGF0ZSBcXHUwMDI2IFBFUkZfSEVTX1NUT1BQRUQpKSlcXG5hcmNoL3g4Ni9ldmVudHMvYW1kL3Bvd2VyLmMtNzgtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYz03OTY9c3RydWN0IHBtdSAqeDg2X2dldF9wbXUodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9jb3JlLmMtODAzLVxcdCAqL1xcbmFyY2gveDg2L2V2ZW50cy9jb3JlLmM6ODA0OlxcdGlmIChXQVJOX09OX09OQ0UoIWNwdWMtXFx1MDAzZXBtdSkpXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy04MDUtXFx0XFx0cmV0dXJuIFxcdTAwMjZwbXU7XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jPTg2Mj1zdGF0aWMgdm9pZCBwZXJmX3NjaGVkX3NhdmVfc3RhdGUoc3RydWN0IHBlcmZfc2NoZWQgKnNjaGVkKVxcbmFyY2gveDg2L2V2ZW50cy9jb3JlLmMtODYzLXtcXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjg2NDpcXHRpZiAoV0FSTl9PTl9PTkNFKHNjaGVkLVxcdTAwM2VzYXZlZF9zdGF0ZXMgXFx1MDAzZT0gU0NIRURfU1RBVEVTX01BWCkpXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy04NjUtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYz0xMDA4PWludCB4ODZfc2NoZWR1bGVfZXZlbnRzKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBpbnQgbiwgaW50ICphc3NpZ24pXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTEwMzUtXFx0XFx0ICovXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzoxMDM2OlxcdFxcdFdBUk5fT05fT05DRSgoYyBcXHUwMDI2XFx1MDAyNiBpIFxcdTAwM2U9IG4wKSB8fCAoIWMgXFx1MDAyNlxcdTAwMjYgaSBcXHUwMDNjIG4wKSk7XFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0xMDM3LVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYz0xNTUxPXN0YXRpYyB2b2lkIHg4Nl9wbXVfc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTE1NTUtXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzoxNTU2OlxcdGlmIChXQVJOX09OX09OQ0UoIShldmVudC1cXHUwMDNlaHcuc3RhdGUgXFx1MDAyNiBQRVJGX0hFU19TVE9QUEVEKSkpXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0xNTU3LVxcdFxcdHJldHVybjtcXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTE1NTgtXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzoxNTU5OlxcdGlmIChXQVJOX09OX09OQ0UoaWR4ID09IC0xKSlcXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTE1NjAtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0xNTYyLVxcdGlmIChmbGFncyBcXHUwMDI2IFBFUkZfRUZfUkVMT0FEKSB7XFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzoxNTYzOlxcdFxcdFdBUk5fT05fT05DRSghKGV2ZW50LVxcdTAwM2Vody5zdGF0ZSBcXHUwMDI2IFBFUkZfSEVTX1VQVE9EQVRFKSk7XFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0xNTY0LVxcdFxcdHN0YXRpY19jYWxsKHg4Nl9wbXVfc2V0X3BlcmlvZCkoZXZlbnQpO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYz0xNjM3PXZvaWQgeDg2X3BtdV9zdG9wKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0xNjQ0LVxcdFxcdF9fY2xlYXJfYml0KGh3Yy1cXHUwMDNlaWR4LCBjcHVjLVxcdTAwM2VhY3RpdmVfbWFzayk7XFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzoxNjQ1OlxcdFxcdFdBUk5fT05fT05DRShod2MtXFx1MDAzZXN0YXRlIFxcdTAwMjYgUEVSRl9IRVNfU1RPUFBFRCk7XFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0xNjQ2LVxcdFxcdGh3Yy1cXHUwMDNlc3RhdGUgfD0gUEVSRl9IRVNfU1RPUFBFRDtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9jb3JlLmM9MTY1OT1zdGF0aWMgdm9pZCB4ODZfcG11X2RlbChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncylcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9jb3JlLmMtMTY4OC1cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjE2ODk6XFx0aWYgKFdBUk5fT05fT05DRShpID09IGNwdWMtXFx1MDAzZW5fZXZlbnRzKSkgLyogY2FsbGVkIC1cXHUwMDNlZGVsKCkgd2l0aG91dCAtXFx1MDAzZWFkZCgpID8gKi9cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTE2OTAtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYz0yMzE5PXN0YXRpYyB2b2lkIHg4Nl9wbXVfc3RhcnRfdHhuKHN0cnVjdCBwbXUgKnBtdSwgdW5zaWduZWQgaW50IHR4bl9mbGFncylcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9jb3JlLmMtMjMyMi1cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjIzMjM6XFx0V0FSTl9PTl9PTkNFKGNwdWMtXFx1MDAzZXR4bl9mbGFncyk7XFx0XFx0LyogdHhuIGFscmVhZHkgaW4gZmxpZ2h0ICovXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0yMzI0LVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYz0yMzQwPXN0YXRpYyB2b2lkIHg4Nl9wbXVfY2FuY2VsX3R4bihzdHJ1Y3QgcG11ICpwbXUpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTIzNDQtXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzoyMzQ1OlxcdFdBUk5fT05fT05DRSghY3B1Yy1cXHUwMDNldHhuX2ZsYWdzKTtcXHQvKiBubyB0eG4gaW4gZmxpZ2h0ICovXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0yMzQ2LVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYz0yMzcwPXN0YXRpYyBpbnQgeDg2X3BtdV9jb21taXRfdHhuKHN0cnVjdCBwbXUgKnBtdSlcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9jb3JlLmMtMjM3NS1cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jOjIzNzY6XFx0V0FSTl9PTl9PTkNFKCFjcHVjLVxcdTAwM2V0eG5fZmxhZ3MpO1xcdC8qIG5vIHR4biBpbiBmbGlnaHQgKi9cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTIzNzctXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jPTMxNDQ9dm9pZCBwZXJmX2dldF94ODZfcG11X2NhcGFiaWxpdHkoc3RydWN0IHg4Nl9wbXVfY2FwYWJpbGl0eSAqY2FwKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYy0zMTQ2LVxcdC8qIFRoaXMgQVBJIGRvZXNuJ3QgY3VycmVudGx5IHN1cHBvcnQgZW51bWVyYXRpbmcgaHlicmlkIFBNVXMuICovXFxuYXJjaC94ODYvZXZlbnRzL2NvcmUuYzozMTQ3OlxcdGlmIChXQVJOX09OX09OQ0UoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9IWUJSSURfQ1BVKSkgfHxcXG5hcmNoL3g4Ni9ldmVudHMvY29yZS5jLTMxNDgtXFx0ICAgICF4ODZfcG11X2luaXRpYWxpemVkKCkpIHtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9idHMuYz0zNDA9dm9pZCBpbnRlbF9idHNfZW5hYmxlX2xvY2FsKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvYnRzLmMtMzU0LVxcdCAqL1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9idHMuYzozNTU6XFx0aWYgKFdBUk5fT05fT05DRShzdGF0ZSA9PSBCVFNfU1RBVEVfQUNUSVZFKSlcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvYnRzLmMtMzU2LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9Mjc3Nz1zdGF0aWMgdm9pZCBfX2ludGVsX3BtdV9lbmFibGVfYWxsKGludCBhZGRlZCwgYm9vbCBwbWkpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTI3OTUtXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYzoyNzk2OlxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWV2ZW50KSlcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTI3OTctXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYz00MjgwPWludGVsX3N0YXJ0X3NjaGVkdWxpbmcoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTQyOTQtXFx0ICovXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYzo0Mjk1OlxcdGlmIChXQVJOX09OX09OQ0UoIWV4Y2xfY250cnMpKVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNDI5Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jPTQzMDk9c3RhdGljIHZvaWQgaW50ZWxfY29tbWl0X3NjaGVkdWxpbmcoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIGludCBpZHgsIGludCBjbnRyKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00MzE4LVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM6NDMxOTpcXHRpZiAoV0FSTl9PTl9PTkNFKCFleGNsX2NudHJzKSlcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTQzMjAtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYz00MzM2PWludGVsX3N0b3Bfc2NoZWR1bGluZyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YylcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNDM0OS1cXHQgKi9cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjQzNTA6XFx0aWYgKFdBUk5fT05fT05DRSghZXhjbF9jbnRycykpXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00MzUxLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9NDM2Mz1keW5fY29uc3RyYWludChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yywgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgKmMsIGludCBpZHgpXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00MzY0LXtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjQzNjU6XFx0V0FSTl9PTl9PTkNFKCFjcHVjLVxcdTAwM2Vjb25zdHJhaW50X2xpc3QpO1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNDM2Ni1cXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9NDM5Mj1pbnRlbF9nZXRfZXhjbF9jb25zdHJhaW50cyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yywgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00NDA5LVxcdCAqL1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM6NDQxMDpcXHRpZiAoV0FSTl9PTl9PTkNFKCFleGNsX2NudHJzKSlcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTQ0MTEtXFx0XFx0cmV0dXJuIGM7XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jPTQ0OTI9aW50ZWxfZ2V0X2V2ZW50X2NvbnN0cmFpbnRzKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBpbnQgaWR4LFxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00NTA1LVxcdGlmIChjMSkge1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM6NDUwNjpcXHQgICAgICAgIFdBUk5fT05fT05DRSghKGMxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFBFUkZfWDg2X0VWRU5UX0RZTkFNSUMpKTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTQ1MDctXFx0XFx0Yml0bWFwX2NvcHkoYzEtXFx1MDAzZWlkeG1zaywgYzItXFx1MDAzZWlkeG1zaywgWDg2X1BNQ19JRFhfTUFYKTtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9NDUyND1zdGF0aWMgdm9pZCBpbnRlbF9wdXRfZXhjbF9jb25zdHJhaW50cyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyxcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNDUzNy1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjQ1Mzg6XFx0aWYgKFdBUk5fT05fT05DRSghZXhjbF9jbnRycykpXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00NTM5LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9NjMzOD1zdGF0aWMgYm9vbCBpbml0X2h5YnJpZF9wbXUoaW50IGNwdSlcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNjM0Mi1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjYzNDM6XFx0aWYgKFdBUk5fT05fT05DRSghcG11IHx8IChwbXUtXFx1MDAzZXBtdS50eXBlID09IC0xKSkpIHtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTYzNDQtXFx0XFx0Y3B1Yy1cXHUwMDNlcG11ID0gTlVMTDtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmM9NjM3Mz1zdGF0aWMgdm9pZCBpbnRlbF9wbXVfY3B1X3N0YXJ0aW5nKGludCBjcHUpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTYzOTQtXFx0aWYgKHg4Nl9wbXUuZmxhZ3MgXFx1MDAyNiBQTVVfRkxfVEZBKSB7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYzo2Mzk1OlxcdFxcdFdBUk5fT05fT05DRShjcHVjLVxcdTAwM2V0ZmFfc2hhZG93KTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTYzOTYtXFx0XFx0Y3B1Yy1cXHUwMDNldGZhX3NoYWRvdyA9IH4wVUxMO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYz02NzY1PXN0YXRpYyBfX2luaXQgdm9pZCBpbnRlbF9wZWJzX2lzb2xhdGlvbl9xdWlyayh2b2lkKVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNjc2Ni17XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYzo2NzY3OlxcdFdBUk5fT05fT05DRSh4ODZfcG11LmNoZWNrX21pY3JvY29kZSk7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy02NzY4LVxcdHg4Nl9wbXUuY2hlY2tfbWljcm9jb2RlID0gaW50ZWxfY2hlY2tfcGVic19pc29sYXRpb247XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYz00NTU9c3RhdGljIHU2NCBfX2dydF9sYXRlbmN5X2RhdGEoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1NjQgc3RhdHVzLFxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMtNDU5LVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jOjQ2MDpcXHRXQVJOX09OX09OQ0UoaXNfaHlicmlkKCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYy00NjEtXFx0XFx0ICAgICBoeWJyaWRfcG11KGV2ZW50LVxcdTAwM2VwbXUpLVxcdTAwM2VwbXVfdHlwZSA9PSBoeWJyaWRfYmlnKTtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jPTI5NDc9c3RhdGljIHZvaWQgaW50ZWxfcG11X2RyYWluX3BlYnNfY29yZShzdHJ1Y3QgcHRfcmVncyAqaXJlZ3MsIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMtMjk2OC1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYzoyOTY5OlxcdFdBUk5fT05fT05DRSghZXZlbnQpO1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jLTI5NzAtXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYz0zMDA1PXN0YXRpYyB2b2lkIGludGVsX3BtdV9kcmFpbl9wZWJzX25obShzdHJ1Y3QgcHRfcmVncyAqaXJlZ3MsIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMtMzA5OC1cXHRcXHRldmVudCA9IGNwdWMtXFx1MDAzZWV2ZW50c1tiaXRdO1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jOjMwOTk6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghZXZlbnQpKVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jLTMxMDAtXFx0XFx0XFx0Y29udGludWU7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMtMzEwMS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYzozMTAyOlxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWV2ZW50LVxcdTAwM2VhdHRyLnByZWNpc2VfaXApKVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jLTMxMDMtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYz0zMTIyPV9faW50ZWxfcG11X2hhbmRsZV9wZWJzX3JlY29yZChzdHJ1Y3QgcHRfcmVncyAqaXJlZ3MsXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYy0zMTM1LVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jOjMxMzY6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghZXZlbnQpIHx8XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM6MzEzNzpcXHRcXHQgICAgV0FSTl9PTl9PTkNFKCFldmVudC1cXHUwMDNlYXR0ci5wcmVjaXNlX2lwKSlcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYy0zMTM4LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM9MzIyMj1zdGF0aWMgdm9pZCBpbnRlbF9wbXVfZHJhaW5fYXJjaF9wZWJzKHN0cnVjdCBwdF9yZWdzICppcmVncyxcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jLTMyNjUtXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmM6MzI2NjpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFoZWFkZXItXFx1MDAzZXNpemUpKVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jLTMyNjctXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM9NjYxPXZvaWQgaW50ZWxfcG11X2xicl9kZWwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTY4Ny1cXHRjcHVjLVxcdTAwM2VsYnJfdXNlcnMtLTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM6Njg4OlxcdFdBUk5fT05fT05DRShjcHVjLVxcdTAwM2VsYnJfdXNlcnMgXFx1MDAzYyAwKTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM6Njg5OlxcdFdBUk5fT05fT05DRShjcHVjLVxcdTAwM2VsYnJfcGVic191c2VycyBcXHUwMDNjIDApO1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYy02OTAtXFx0cGVyZl9zY2hlZF9jYl9kZWMoZXZlbnQtXFx1MDAzZXBtdSk7XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvbGJyLmM9OTUxPXN0YXRpYyB2b2lkIGludGVsX3BtdV9sYnJfY291bnRlcnNfcmVvcmRlcihzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyxcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9sYnIuYy05NjctXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jOjk2ODpcXHRXQVJOX09OX09OQ0UoIXBvcyk7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2xici5jLTk2OS1cXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wNC5jPTk1Mj1zdGF0aWMgdm9pZCBfX3A0X3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3A0LmMtOTY3LVxcdCAqL1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wNC5jOjk2ODpcXHRXQVJOX09OX09OQ0UocDRfaXNfZXZlbnRfY2FzY2FkZWQoaHdjLVxcdTAwM2Vjb25maWcpKTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcDQuYzo5Njk6XFx0V0FSTl9PTl9PTkNFKGh3Yy1cXHUwMDNlaWR4ID09IDEpO1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wNC5jLTk3MC1cXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wNC5jPTEwMzQ9c3RhdGljIGludCBwNF9wbXVfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wNC5jLTEwNTctXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3A0LmM6MTA1ODpcXHRcXHRXQVJOX09OX09OQ0UoaHdjLVxcdTAwM2VpZHggIT0gaWR4KTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcDQuYy0xMDU5LVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmM9MTAxMT1wdF90b3BhX2VudHJ5X2Zvcl9wYWdlKHN0cnVjdCBwdF9idWZmZXIgKmJ1ZiwgdW5zaWduZWQgaW50IHBnKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmMtMTAxOS1cXHQgKi9cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYzoxMDIwOlxcdGlmIChXQVJOX09OX09OQ0UocGcgXFx1MDAzZT0gYnVmLVxcdTAwM2Vucl9wYWdlcykpXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmMtMTAyMS1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTEwMzUtXFx0ICovXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmM6MTAzNjpcXHRXQVJOX09OX09OQ0UoMSk7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmMtMTAzNy1cXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTEwNDMtXFx0ICovXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmM6MTA0NDpcXHRpZiAoV0FSTl9PTl9PTkNFKHRvcGEtXFx1MDAzZWxhc3QgPT0gLTEpKVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTEwNDUtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYy0xMDc1LVxcdCAqL1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jOjEwNzY6XFx0V0FSTl9PTl9PTkNFKDEpO1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTEwNzctXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYz0xNjcxPXN0YXRpYyB2b2lkIHB0X2V2ZW50X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgbW9kZSlcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTE3MTctXFx0aWYgKChtb2RlIFxcdTAwMjYgUEVSRl9FRl9VUERBVEUpIHx8ICFidWYtXFx1MDAzZXNuYXBzaG90KSB7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmM6MTcxODpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKHB0LVxcdTAwM2VoYW5kbGUuZXZlbnQgIT0gZXZlbnQpKVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTE3MTktXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmM9MTczNj1zdGF0aWMgbG9uZyBwdF9ldmVudF9zbmFwc2hvdF9hdXgoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmMtMTc0NC1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYzoxNzQ1OlxcdGlmIChXQVJOX09OX09OQ0UoIWJ1ZikpXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmMtMTc0Ni1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9wdC5jLTE3NTEtXFx0ICovXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3B0LmM6MTc1MjpcXHRpZiAoV0FSTl9PTl9PTkNFKCFidWYtXFx1MDAzZXNuYXBzaG90KSlcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvcHQuYy0xNzUzLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jPTUyMz12b2lkIHVuY29yZV9wbXVfZXZlbnRfc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmMtNTI3LVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYzo1Mjg6XFx0aWYgKFdBUk5fT05fT05DRShpZHggPT0gLTEgfHwgaWR4IFxcdTAwM2U9IFVOQ09SRV9QTUNfSURYX01BWCkpXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jLTUyOS1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmMtNTQ1LVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYzo1NDY6XFx0aWYgKFdBUk5fT05fT05DRSghKGV2ZW50LVxcdTAwM2Vody5zdGF0ZSBcXHUwMDI2IFBFUkZfSEVTX1NUT1BQRUQpKSlcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmMtNTQ3LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYz01NjE9dm9pZCB1bmNvcmVfcG11X2V2ZW50X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmMtNTc4LVxcdFxcdGJveC1cXHUwMDNlZXZlbnRzW2h3Yy1cXHUwMDNlaWR4XSA9IE5VTEw7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jOjU3OTpcXHRcXHRXQVJOX09OX09OQ0UoaHdjLVxcdTAwM2VzdGF0ZSBcXHUwMDI2IFBFUkZfSEVTX1NUT1BQRUQpO1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYy01ODAtXFx0XFx0aHdjLVxcdTAwM2VzdGF0ZSB8PSBQRVJGX0hFU19TVE9QUEVEO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jPTExOTg9c3RhdGljIGludCB1bmNvcmVfcGNpX3BtdV9yZWdpc3RlcihzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYy0xMjA1LVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYzoxMjA2OlxcdGlmIChXQVJOX09OX09OQ0UocG11LVxcdTAwM2Vib3hlc1tkaWVdICE9IE5VTEwpKVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYy0xMjA3LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jPTE1MTQ9c3RhdGljIHZvaWQgdW5jb3JlX2NoYW5nZV90eXBlX2N0eChzdHJ1Y3QgaW50ZWxfdW5jb3JlX3R5cGUgKnR5cGUsIGludCBvbGRfY3B1LFxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jLTE1MjctXFx0XFx0aWYgKG9sZF9jcHUgXFx1MDAzYyAwKSB7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jOjE1Mjg6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKGJveC1cXHUwMDNlY3B1ICE9IC0xKTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlLmMtMTUyOS1cXHRcXHRcXHRpZiAodW5jb3JlX2RpZV9oYXNfYm94KHR5cGUsIGRpZSwgcG11LVxcdTAwM2VwbXVfaWR4KSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jLTE1MzYtXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZS5jOjE1Mzc6XFx0XFx0V0FSTl9PTl9PTkNFKGJveC1cXHUwMDNlY3B1ICE9IC0xIFxcdTAwMjZcXHUwMDI2IGJveC1cXHUwMDNlY3B1ICE9IG9sZF9jcHUpO1xcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmUuYy0xNTM4LVxcdFxcdGNwdW1hc2tfY2xlYXJfY3B1KG9sZF9jcHUsIFxcdTAwMjZwbXUtXFx1MDAzZWNwdV9tYXNrKTtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmVfbmhtZXguYz01NTY9c3RhdGljIGJvb2wgbmhtZXhfbWJveF9nZXRfc2hhcmVkX3JlZyhzdHJ1Y3QgaW50ZWxfdW5jb3JlX2JveCAqYm94LCBpbnQgaWR4LCB1NjQgY29uZmlnKVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jLTU4MC1cXHRpZHggLT0gRVhUUkFfUkVHX05ITUVYX01fWkRQX0NUTF9GVkM7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jOjU4MTpcXHRpZiAoV0FSTl9PTl9PTkNFKGlkeCBcXHUwMDNlPSA0KSlcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlX25obWV4LmMtNTgyLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC91bmNvcmVfbmhtZXguYz03Njg9c3RhdGljIGludCBuaG1leF9tYm94X2h3X2NvbmZpZyhzdHJ1Y3QgaW50ZWxfdW5jb3JlX2JveCAqYm94LCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlX25obWV4LmMtNzg3LVxcdFxcdG1zciA9IGVyLVxcdTAwM2Vtc3IgKyB0eXBlLVxcdTAwM2Vtc3Jfb2Zmc2V0ICogYm94LVxcdTAwM2VwbXUtXFx1MDAzZXBtdV9pZHg7XFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jOjc4ODpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKG1zciBcXHUwMDNlPSAweGZmZmYgfHwgZXItXFx1MDAzZWlkeCBcXHUwMDNlPSAweGZmKSlcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlX25obWV4LmMtNzg5LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jLTc5My1cXHRcXHRcXHRyZWdfaWR4ID0gMTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvdW5jb3JlX25obWV4LmM6Nzk0OlxcdFxcdGVsc2UgaWYgKFdBUk5fT05fT05DRShyZWdfaWR4IFxcdTAwM2UgMCkpXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL3VuY29yZV9uaG1leC5jLTc5NS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9wZXJmX2V2ZW50Lmg9MTUxMz1zdGF0aWMgaW5saW5lIHZvaWQgYW1kX3BtdV9icnNfZGVsKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudClcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9wZXJmX2V2ZW50LmgtMTUxNy1cXHRjcHVjLVxcdTAwM2VsYnJfdXNlcnMtLTtcXG5hcmNoL3g4Ni9ldmVudHMvcGVyZl9ldmVudC5oOjE1MTg6XFx0V0FSTl9PTl9PTkNFKGNwdWMtXFx1MDAzZWxicl91c2VycyBcXHUwMDNjIDApO1xcbmFyY2gveDg2L2V2ZW50cy9wZXJmX2V2ZW50LmgtMTUxOS1cXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9yYXBsLmM9MjgxPXN0YXRpYyB2b2lkIF9fcmFwbF9wbXVfZXZlbnRfc3RhcnQoc3RydWN0IHJhcGxfcG11ICpyYXBsX3BtdSxcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9yYXBsLmMtMjgzLXtcXG5hcmNoL3g4Ni9ldmVudHMvcmFwbC5jOjI4NDpcXHRpZiAoV0FSTl9PTl9PTkNFKCEoZXZlbnQtXFx1MDAzZWh3LnN0YXRlIFxcdTAwMjYgUEVSRl9IRVNfU1RPUFBFRCkpKVxcbmFyY2gveDg2L2V2ZW50cy9yYXBsLmMtMjg1LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9yYXBsLmM9MzA4PXN0YXRpYyB2b2lkIHJhcGxfcG11X2V2ZW50X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgbW9kZSlcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9yYXBsLmMtMzE3LVxcdGlmICghKGh3Yy1cXHUwMDNlc3RhdGUgXFx1MDAyNiBQRVJGX0hFU19TVE9QUEVEKSkge1xcbmFyY2gveDg2L2V2ZW50cy9yYXBsLmM6MzE4OlxcdFxcdFdBUk5fT05fT05DRShyYXBsX3BtdS1cXHUwMDNlbl9hY3RpdmUgXFx1MDAzYz0gMCk7XFxuYXJjaC94ODYvZXZlbnRzL3JhcGwuYy0zMTktXFx0XFx0cmFwbF9wbXUtXFx1MDAzZW5fYWN0aXZlLS07XFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvcmFwbC5jLTMyNC1cXG5hcmNoL3g4Ni9ldmVudHMvcmFwbC5jOjMyNTpcXHRcXHRXQVJOX09OX09OQ0UoaHdjLVxcdTAwM2VzdGF0ZSBcXHUwMDI2IFBFUkZfSEVTX1NUT1BQRUQpO1xcbmFyY2gveDg2L2V2ZW50cy9yYXBsLmMtMzI2LVxcdFxcdGh3Yy1cXHUwMDNlc3RhdGUgfD0gUEVSRl9IRVNfU1RPUFBFRDtcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmM9MTE4PXN0YXRpYyBpbnQgaHZfY3B1X2luaXQodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmMtMTU4LVxcdFxcdFxcdGlmICgqaHZwIFxcdTAwMjZcXHUwMDI2ICFtc19oeXBlcnYucGFyYXZpc29yX3ByZXNlbnQgXFx1MDAyNlxcdTAwMjYgaHZfaXNvbGF0aW9uX3R5cGVfc25wKCkpIHtcXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jOjE1OTpcXHRcXHRcXHRcXHRXQVJOX09OX09OQ0Uoc2V0X21lbW9yeV9kZWNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpKCpodnApLCAxKSk7XFxuYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuYy0xNjAtXFx0XFx0XFx0XFx0bWVtc2V0KCpodnAsIDAsIFBBR0VfU0laRSk7XFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvaXJxZG9tYWluLmM9MzYxPXN0YXRpYyB2b2lkIGh2X21zaV9kb21haW5fZnJlZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZCwgdW5zaWduZWQgaW50IHZpcnEsXFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvaXJxZG9tYWluLmMtMzY4LVxcdFxcdGRlc2MgPSBpcnFfZGF0YV9nZXRfbXNpX2Rlc2MoaXJxZCk7XFxuYXJjaC94ODYvaHlwZXJ2L2lycWRvbWFpbi5jOjM2OTpcXHRcXHRpZiAoIWRlc2MgfHwgIWRlc2MtXFx1MDAzZWlycSB8fCBXQVJOX09OX09OQ0UoIWRldl9pc19wY2koZGVzYy1cXHUwMDNlZGV2KSkpXFxuYXJjaC94ODYvaHlwZXJ2L2lycWRvbWFpbi5jLTM3MC1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYz02MzI9c3RhdGljIHZvaWQgaHZfdnRvbV9rZXhlY19maW5pc2godm9pZClcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYy02NTgtXFx0XFx0XFx0XFx0XFx0Y3VyLCAwLCBpbnB1dCwgTlVMTCk7XFxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jOjY1OTpcXHRcXHRcXHRcXHRXQVJOX09OX09OQ0UoIWh2X3Jlc3VsdF9zdWNjZXNzKGh2X3N0YXR1cykpO1xcbmFyY2gveDg2L2h5cGVydi9pdm0uYy02NjAtXFx0XFx0XFx0XFx0Y3VyID0gMDtcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYz02Nzc9c3RhdGljIGludCBodl9tYXJrX2dwYV92aXNpYmlsaXR5KHUxNiBjb3VudCwgY29uc3QgdTY0IHBmbltdLFxcbi0tXFxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTczMC1cXHQgKi9cXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmM6NzMxOlxcdFdBUk5fT05fT05DRShyZXQpO1xcbmFyY2gveDg2L2h5cGVydi9pdm0uYy03MzItXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmg9NDg3PXN0YXRpYyBpbmxpbmUgdTMyIHNhZmVfYXBpY193YWl0X2ljcl9pZGxlKHZvaWQpIHsgcmV0dXJuIDA7IH1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmg6NDg4OnN0YXRpYyBpbmxpbmUgdm9pZCBhcGljX25hdGl2ZV9lb2kodm9pZCkgeyBXQVJOX09OX09OQ0UoMSk7IH1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgtNDg5LXN0YXRpYyBpbmxpbmUgdm9pZCBhcGljX3NldHVwX2FwaWNfY2FsbHModm9pZCkgeyB9XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaD0xMz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYXJjaF9lbnRlcl9mcm9tX3VzZXJfbW9kZShzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oLTMwLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oOjMxOlxcdFxcdFdBUk5fT05fT05DRShmbGFncyBcXHUwMDI2IG1hc2spO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oLTMyLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oLTMzLVxcdFxcdC8qIFdlIHRoaW5rIHdlIGNhbWUgZnJvbSB1c2VyIG1vZGUuIE1ha2Ugc3VyZSBwdF9yZWdzIGFncmVlcy4gKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaDozNDpcXHRcXHRXQVJOX09OX09OQ0UoIXVzZXJfbW9kZShyZWdzKSk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vZW50cnktY29tbW9uLmgtMzUtXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaC00MC1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaDo0MTpcXHRcXHRXQVJOX09OX09OQ0UoIW9uX3RocmVhZF9zdGFjaygpKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeS1jb21tb24uaDo0MjpcXHRcXHRXQVJOX09OX09OQ0UocmVncyAhPSB0YXNrX3B0X3JlZ3MoY3VycmVudCkpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5LWNvbW1vbi5oLTQzLVxcdH1cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaD03MzA9c3RhdGljIGlubGluZSBwdGVfdCBwZm5fcHRlKHVuc2lnbmVkIGxvbmcgcGFnZV9uciwgcGdwcm90X3QgcGdwcm90KVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTczMy1cXHQvKiBUaGlzIGJpdCBjb21iaW5hdGlvbiBpcyB1c2VkIHRvIG1hcmsgc2hhZG93IHN0YWNrcyAqL1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDo3MzQ6XFx0V0FSTl9PTl9PTkNFKChwZ3Byb3RfdmFsKHBncHJvdCkgXFx1MDAyNiAoX1BBR0VfRElSVFkgfCBfUEFHRV9SVykpID09XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTczNS1cXHRcXHRcXHRfUEFHRV9ESVJUWSk7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTcwMz1ib29sIGFyY2hfaXNfcGxhdGZvcm1fcGFnZSh1NjQgcGFkZHIpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE3MTYtKHsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxNzE3OlxcdFdBUk5fT05fT05DRShwdGVfcHJlc2VudCgqcHRlcCkgXFx1MDAyNlxcdTAwMjYgIXB0ZV9zYW1lKCpwdGVwLCBwdGUpKTsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNzE4LVxcdHNldF9wdGUocHRlcCwgcHRlKTsgXFxcXFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE3MjItKHsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxNzIzOlxcdFdBUk5fT05fT05DRShwbWRfcHJlc2VudCgqcG1kcCkgXFx1MDAyNlxcdTAwMjYgIXBtZF9zYW1lKCpwbWRwLCBwbWQpKTsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNzI0LVxcdHNldF9wbWQocG1kcCwgcG1kKTsgXFxcXFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE3MjgtKHsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxNzI5OlxcdFdBUk5fT05fT05DRShwdWRfcHJlc2VudCgqcHVkcCkgXFx1MDAyNlxcdTAwMjYgIXB1ZF9zYW1lKCpwdWRwLCBwdWQpKTsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNzMwLVxcdHNldF9wdWQocHVkcCwgcHVkKTsgXFxcXFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE3MzQtKHsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxNzM1OlxcdFdBUk5fT05fT05DRShwNGRfcHJlc2VudCgqcDRkcCkgXFx1MDAyNlxcdTAwMjYgIXA0ZF9zYW1lKCpwNGRwLCBwNGQpKTsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNzM2LVxcdHNldF9wNGQocDRkcCwgcDRkKTsgXFxcXFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE3NDAtKHsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxNzQxOlxcdFdBUk5fT05fT05DRShwZ2RfcHJlc2VudCgqcGdkcCkgXFx1MDAyNlxcdTAwMjYgIXBnZF9zYW1lKCpwZ2RwLCBwZ2QpKTsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNzQyLVxcdHNldF9wZ2QocGdkcCwgcGdkKTsgXFxcXFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcG9zdGVkX2ludHIuaD0xNzA9c3RhdGljIGlubGluZSBib29sIHBpX3BlbmRpbmdfdGhpc19jcHUodW5zaWduZWQgaW50IHZlY3RvcilcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Bvc3RlZF9pbnRyLmgtMTczLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Bvc3RlZF9pbnRyLmg6MTc0OlxcdGlmIChXQVJOX09OX09OQ0UodmVjdG9yIFxcdTAwM2UgTlJfVkVDVE9SUyB8fCB2ZWN0b3IgXFx1MDAzYyBGSVJTVF9FWFRFUk5BTF9WRUNUT1IpKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Bvc3RlZF9pbnRyLmgtMTc1LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToxOTowNi40MDUyNjEyMzJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODA1ODI5OTQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgS2VybmVsIE1TUiBBY2Nlc3MgYW5kIFBvdGVudGlhbCBCdWdzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBsb29raW5nIGF0IGBhcmNoL3g4Ni9tbS9leHRhYmxlLmNgIHJpZ2h0IG5vdywgc3BlY2lmaWNhbGx5IHRoZSBgZXhfaGFuZGxlcl9tc3JgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIHNlY3Rpb24gaXMgY3JpdGljYWwgZm9yIGhhbmRsaW5nIGV4Y2VwdGlvbnMgcmVsYXRlZCB0byBNb2RlbCBTcGVjaWZpYyBSZWdpc3RlciAoTVNSKSBhY2Nlc3MsIHdoaWNoIGlzIGEgc2Vuc2l0aXZlIGFyZWEuIFRoZSBjb2RlIGlzIGNsZWFybHkgY2hlY2tpbmcgZm9yIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBib3RoIGBXUk1TUmAgKHdyaXRlKSBhbmQgYFJETVNSYCAocmVhZCkgaW5zdHJ1Y3Rpb25zLCBlc3BlY2lhbGx5IHdoZW4gdGhlIGFjY2VzcyBpc24ndCBkZWVtZWQgXCJzYWZlLlwiIFRoZSBgX19PTkNFX0xJVEVfSUZgIG1hY3JvIGlzIGludGVyZXN0aW5nOyBpdCBzdWdnZXN0cyB0aGlzIGNoZWNrIGlzIG9wdGltaXplZCBmb3IgcGVyZm9ybWFuY2UsIGJ1dCBvbmx5IHBlcmZvcm1zIHRoZSBjaGVjayBvbmNlIGluIGEgd2hpbGUuIFRoZSBgcHJfd2FybmAgY2FsbHMgYXJlIGNvbmNlcm5pbmcsIG9mIGNvdXJzZSwgYXMgdGhleSBpbmRpY2F0ZSBhIHBvdGVudGlhbCB1bmNoZWNrZWQgTVNSIGFjY2VzcyBlcnJvciBpcyBoYXBwZW5pbmcuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHJlZ2lzdGVyIHN0YXRlIChgc3RydWN0IHB0X3JlZ3MgKnJlZ3NgKSwgdGhlIHNhZmV0eSBmbGFnLCBhbmQgd2hldGhlciBpdCdzIGEgcmVhZCBvciB3cml0ZSBvcGVyYXRpb24gKGB3cm1zcmApIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2Ugd2FybmluZ3MuIFRoZSBsb2dnZWQgTVNSIGFkZHJlc3MgYW5kIGluc3RydWN0aW9uIHBvaW50ZXIgKGBySVBgKSBhcmUgZXNzZW50aWFsIGZvciBkZWJ1Z2dpbmcgc2hvdWxkIGEgd2FybmluZyBiZSBlbmNvdW50ZXJlZC4gTm93LCBJJ20gZ29pbmcgdG8gc2hpZnQgbXkgZm9jdXMgdG8gYGluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmhgIOKAkyBJIG5lZWQgdG8gY2hlY2sgdGhlIGdlbmVyaWMgYnVnIGhhbmRsaW5nIG1lY2hhbmlzbXMgdG8gdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgd2hlbiBvbmUgb2YgdGhlc2UgTVNSIGFjY2VzcyBpc3N1ZXMgdHJpcHMgYSBidWcuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZXNlIHR3byBmaWxlcyBpcyBrZXkgdG8gYXNzZXNzaW5nIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBzeXN0ZW0gd2l0aCByZXNwZWN0IHRvIE1TUiBhY2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTc4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE1OjE5OjE0LjQ2MzU2MzgzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcwOlxcdFxcbiAxNzE6XFx0I2RlZmluZSBXQVJOX1RBSU5UKGNvbmRpdGlvbiwgdGFpbnQsIGZvcm1hdC4uLikgKHtcXHRcXHRcXHRcXFxcXFxuIDE3MjpcXHRcXHRpbnQgX19yZXRfd2Fybl9vbiA9ICEhKGNvbmRpdGlvbik7XFx0XFx0XFx0XFx0XFxcXFxcbiAxNzM6XFx0XFx0aWYgKHVubGlrZWx5KF9fcmV0X3dhcm5fb24pKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMTc0OlxcdFxcdFxcdF9fV0FSTl9wcmludGYodGFpbnQsIGZvcm1hdCk7XFx0XFx0XFx0XFx0XFxcXFxcbiAxNzU6XFx0XFx0dW5saWtlbHkoX19yZXRfd2Fybl9vbik7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxNzY6XFx0fSlcXG4gMTc3OlxcdFxcbiAxNzg6XFx0I2lmbmRlZiBXQVJOX09OX09OQ0VcXG4gMTc5OlxcdCNkZWZpbmUgV0FSTl9PTl9PTkNFKGNvbmRpdGlvbilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDE4MDpcXHRcXHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOX09OLCAxKVxcbiAxODE6XFx0I2VuZGlmXFxuIDE4MjpcXHRcXG4gMTgzOlxcdCNpZm5kZWYgV0FSTl9PTkNFXFxuIDE4NDpcXHQjZGVmaW5lIFdBUk5fT05DRShjb25kaXRpb24sIGZvcm1hdC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuIDE4NTpcXHRcXHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOLCAxLCBmb3JtYXQpXFxuIDE4NjpcXHQjZW5kaWZcXG4gMTg3OlxcdFxcbiAxODg6XFx0I2RlZmluZSBXQVJOX1RBSU5UX09OQ0UoY29uZGl0aW9uLCB0YWludCwgZm9ybWF0Li4uKVxcdFxcdFxcXFxcXG4gMTg5OlxcdFxcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk5fVEFJTlQsIDEsIHRhaW50LCBmb3JtYXQpXFxuIDE5MDpcXHRcXG4gMTkxOlxcdCNlbHNlIC8qICFDT05GSUdfQlVHICovXFxuIDE5MjpcXHQjaWZuZGVmIEhBVkVfQVJDSF9CVUdcXG4gMTkzOlxcdCNkZWZpbmUgQlVHKCkgZG8ge1xcdFxcdFxcXFxcXG4gMTk0OlxcdFxcdGRvIHt9IHdoaWxlICgxKTtcXHRcXFxcXFxuIDE5NTpcXHRcXHR1bnJlYWNoYWJsZSgpO1xcdFxcdFxcXFxcXG4gMTk2OlxcdH0gd2hpbGUgKDApXFxuIDE5NzpcXHQjZW5kaWZcXG4gMTk4OlxcdFxcbiAxOTk6XFx0I2lmbmRlZiBIQVZFX0FSQ0hfQlVHX09OXFxuIDIwMDpcXHQjZGVmaW5lIEJVR19PTihjb25kaXRpb24pIGRvIHsgaWYgKHVubGlrZWx5KGNvbmRpdGlvbikpIEJVRygpOyB9IHdoaWxlICgwKVxcbiAyMDE6XFx0I2VuZGlmXFxuIDIwMjpcXHRcXG4gMjAzOlxcdCNpZm5kZWYgSEFWRV9BUkNIX1dBUk5fT05cXG4gMjA0OlxcdCNkZWZpbmUgV0FSTl9PTihjb25kaXRpb24pICh7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMDU6XFx0XFx0aW50IF9fcmV0X3dhcm5fb24gPSAhIShjb25kaXRpb24pO1xcdFxcdFxcdFxcdFxcXFxcXG4gMjA2OlxcdFxcdHVubGlrZWx5KF9fcmV0X3dhcm5fb24pO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMjA3OlxcdH0pXFxuIDIwODpcXHQjZW5kaWZcXG4gMjA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToxOToxNC40NjM2Mzk4OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzM1NDUwMzMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBPbmNlLU9ubHkgUHJpbnQgTWFjcm9zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZXNlIG1hY3JvczogYFdBUk5fT05fT05DRWAsIGBXQVJOX09OQ0VgLCBhbmQgYFdBUk5fVEFJTlRfT05DRWAuIFRoZXkncmUgYWxsIGRlZmluZWQgaW4gYGFzbS1nZW5lcmljL2J1Zy5oYCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhleSBsZXZlcmFnZSBgRE9fT05DRV9MSVRFX0lGYC4gUmlnaHQsIGFuZCBgRE9fT05DRV9MSVRFX0lGYCBpbiB0dXJuIHVzZXMgYF9fT05DRV9MSVRFX0lGYC4gIEhtbSwgc2VlbXMgbGlrZSBhIHBhdHRlcm4gaGVyZSBmb3IgXCJwcmludCB0aGlzIG1lc3NhZ2Ugb25jZSBhbmQgb25seSBvbmNlXCIuIFRoZW4gdGhlcmUncyBgcHJpbnRrX29uY2VgLCB3aGljaCB1c2VzIGBET19PTkNFX0xJVEVgLCBhbmQgZXZlbiBgZXhfaGFuZGxlcl9tc3JgIGlzIGluIG9uIHRoZSBhY3Rpb24gdXNpbmcgYF9fT05DRV9MSVRFX0lGYC4gSW50ZXJlc3RpbmcuICBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaGlzdG9yeSBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlaXIgaW50cm9kdWN0aW9uIGFuZCB1c2FnZSwgc28gdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNvbnN1bHQgdGhlIGdpdCBjb21taXQgbG9nLCBwcm9iYWJseSBieSBjaGVja2luZyB0aGUgY29udGV4dCBvZiB0aGUgZmlsZXMsIHRvIGZpbmQgdGhlIGNvbW1pdCB3aGVyZSB0aGVzZSB3ZXJlIGZpcnN0IGludHJvZHVjZWQgdG8gdXBzdHJlYW0gTGludXguIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGV5J3JlIGFjdHVhbGx5IHRyeWluZyB0byBhY2hpZXZlIGFuZCBhbnkgcG90ZW50aWFsIGdvdGNoYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzg1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTU6MTk6MzEuODE4MTQ2MjUyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkyMTA5OTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBfX09OQ0VfTElURVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTEyLVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MTM6I2RlZmluZSBfX09OQ0VfTElURSgpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMTQtXFx0KHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTI0LVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MjU6I2RlZmluZSBfX09OQ0VfTElURV9JRihjb25kaXRpb24pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMjYtXFx0KHVubGlrZWx5KGNvbmRpdGlvbikgXFx1MDAyNlxcdTAwMjYgX19PTkNFX0xJVEUoKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTU6MTk6MzMuODEwMjY1Mzc3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1MDQ3NDM2NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRXZhbHVhdGlvbjogb25jZV9saXRlLmggTWFjcm8gUmVmYWN0b3JpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIGBfX09OQ0VfTElURSgpYCBhbmQgYF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilgIG1hY3JvcyBpbiBgaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaGAgYXJlIGZvdW5kYXRpb25hbCDigJMgdGhleSBzcGF3biBhIGxvdCBvZiBvdGhlciBpbXBvcnRhbnQgY29uc3RydWN0cyBsaWtlIGBET19PTkNFX0xJVEVgLCBgV0FSTl9PTl9PTkNFYCwgYW5kIHNvIG9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIFwiSXMgdGhpcyBtYWNybyBhIGJpZyBkZWFsLCBpcyBpdCB3aWRlbHkgdXNlZD9cIiwgYW5kIHRoZSBhbnN3ZXIgaXMgeWVzLCB2ZXJ5LiBUaGlzIG1lYW5zIHRoaXMgY2hhbmdlIGhhcyBwb3RlbnRpYWxseSBmYXItcmVhY2hpbmcgY29uc2VxdWVuY2VzIGFjcm9zcyB0aGUga2VybmVsLlxuXG5Ob3csIGxldCdzIGNhcmVmdWxseSBhcHBseSB0aGUgZXN0YWJsaXNoZWQgZnV6emluZyBndWlkZWxpbmVzLiBSZWFjaGFiaWxpdHkgaXMgdGhlIGNvcmUgY29uY2VwdCwgc28gbGV0J3MgZm9jdXMgb24gaWYgdGhlIGNvZGUgaXMgYWN0dWFsbHkgKmV4ZWN1dGVkKi4gRnJvbSB0aGUgZ3VpZGVsaW5lcywgSSBrbm93IEkgY2FuJ3QgdGFrZSBjbGFpbXMgb2YgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIGF0IGZhY2UgdmFsdWUsIHJlZmFjdG9yaW5ncyBhcmUgb2Z0ZW4gd2hlcmUgdGhlIHN1YnRsZSBidWdzIGhpZGUsIHNvIHRoaXMgaXMgY3JpdGljYWwuIEl0J3MgYSByZWZhY3RvcmluZyBvZiBgX19PTkNFX0xJVEVfSUYoY29uZGl0aW9uKWAgdG8gc2VwYXJhdGUgdGhlIGBfX09OQ0VfTElURSgpYCBsb2dpYyBhbmQgcmVkZWZpbmUgYF9fT05DRV9MSVRFX0lGYCB0byB3cmFwIGl0IGluIGFuIGB1bmxpa2VseShjb25kaXRpb24pYC4gVGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGNoYW5nZXMgaW4gYWxsIHRoZSBjYWxsZXJzLCBzbyBJJ20gYWxyZWFkeSBpbiBcImZ1enogdGhpc1wiIHRlcnJpdG9yeS5cblxuU2luY2UgdGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBhbmQgKmV4ZWN1dGFibGUqIGNvZGUsIHRoZSBhbnN3ZXIgaXMgKnllcyosIHRoaXMgcGF0Y2ggKmRvZXMqIG1vZGlmeSByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLiBUaGlzIHdhcnJhbnRzIGZ1enppbmcuIFRoZSBndWlkZWxpbmVzIGluc3RydWN0IG1lIHRvIGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIGBGb2N1c1N5bWJvbHNgIHRvIHByZXZlbnQgdGhlIGZ1enplciBmcm9tIGJlaW5nIGRpbHV0ZWQuIE5vIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGZ1bmN0aW9ucyBzaG91bGQgYmUgbGlzdGVkLCBzbyBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzLCBwYWdlIGZhdWx0LCBldGMuIGFyZSByaWdodCBvdXQuIEkgbmVlZCB0byBnZXQgYXMgc3BlY2lmaWMgYXMgcG9zc2libGUuIFRoZSBwcmltYXJ5IGNoYW5nZXMgYXJlIGluIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGluIHRoZSAuaCBmaWxlLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlciBmdW5jdGlvbnMgdGhhdCBhY3R1YWxseSAqdXNlKiB0aGVtLiBJJ3ZlIGFscmVhZHkgZG9uZSB0aGF0IGJ5IGlkZW50aWZ5aW5nIGBET19PTkNFX0xJVEVgIC8gYF9fT05DRV9MSVRFX0lGYCAvIGBET19PTkNFX0xJVEVfSUZgIHVzZXJzLCBzbyBub3cgSSBuZWVkIHRvIGNob29zZSB0aGUgYmVzdCBzeW1ib2xzLlxuXG5Gcm9tIHRoZSBleGlzdGluZyBsaXN0IEkndmUgZ290LCBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcgZm9yIGBGb2N1c1N5bWJvbHNgOlxuXG4qICAgYG5ldC9pcHY0L3RjcF9pbnB1dC5jOnRjcF9ncm9fZGV2X3dhcm5gIHNpbmNlIGl0IGlzIHRoZSBmdW5jdGlvbiBwYXNzZWQgdG8gYERPX09OQ0VfTElURV9JRmAuIFRoaXMgaXMgYSB2ZXJ5IHNwZWNpZmljIHVzZS1jYXNlIEkgY2FuIGZvY3VzIG9uLlxuKiAgIGBhcmNoL3g4Ni9tbS9leHRhYmxlLmM6ZXhfaGFuZGxlcl9tc3JgLiBUaGlzIGhhbmRsZXMgdGhlIE1TUiBleGNlcHRpb25zLlxuKiAgIGBuZXQvY29yZS9kZXYuYzpza2JfY2hlY2tzdW1faGVscGAgYW5kIGBuZXQvY29yZS9kZXYuYzpuZXRkZXZfcnhfY3N1bV9mYXVsdGAsIHRoZXNlIGFyZSBuZXR3b3JrIGZvY3VzZWQgZnVuY3Rpb25zLCBhbmQgbm90IG92ZXJseSBnZW5lcmFsLCBhbmQgc2hvdWxkIHJldmVhbCBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgYENPTkZJR19gIG9wdGlvbnMgdG8gZW5hYmxlIGFuZCBpbmNsdWRlIHRoZW0gYXMgdGhlIGBFbmFibGVDb25maWdzYC4gVGhpcyBzaG91bGQgYmUgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgYnkgY2hlY2tpbmcgdGhlIGBLY29uZmlnYCBmaWxlcyBhbmQgYCNpZmRlZmBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjMyNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTU6MTk6NDguODU3NzA0NzhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMzgzNDIzMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKERPX09OQ0VfTElURXxfX09OQ0VfTElURSlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vZXh0YWJsZS5jPTE2Nj1zdGF0aWMgYm9vbCBleF9oYW5kbGVyX21zcihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpmaXh1cCxcXG4tLVxcbmFyY2gveDg2L21tL2V4dGFibGUuYy0xNjgte1xcbmFyY2gveDg2L21tL2V4dGFibGUuYzoxNjk6XFx0aWYgKF9fT05DRV9MSVRFX0lGKCFzYWZlIFxcdTAwMjZcXHUwMDI2IHdybXNyKSkge1xcbmFyY2gveDg2L21tL2V4dGFibGUuYy0xNzAtXFx0XFx0cHJfd2FybihcXFwidW5jaGVja2VkIE1TUiBhY2Nlc3MgZXJyb3I6IFdSTVNSIHRvIDB4JXggKHRyaWVkIHRvIHdyaXRlIDB4JTA4eCUwOHgpIGF0IHJJUDogMHglbHggKCVwUylcXFxcblxcXCIsXFxuLS1cXG5hcmNoL3g4Ni9tbS9leHRhYmxlLmMtMTc1LVxcbmFyY2gveDg2L21tL2V4dGFibGUuYzoxNzY6XFx0aWYgKF9fT05DRV9MSVRFX0lGKCFzYWZlIFxcdTAwMjZcXHUwMDI2ICF3cm1zcikpIHtcXG5hcmNoL3g4Ni9tbS9leHRhYmxlLmMtMTc3LVxcdFxcdHByX3dhcm4oXFxcInVuY2hlY2tlZCBNU1IgYWNjZXNzIGVycm9yOiBSRE1TUiBmcm9tIDB4JXggYXQgcklQOiAweCVseCAoJXBTKVxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM9MTIzND1zdGF0aWMgaW50IHdhaXRfb25fc2VtKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11LCB1NjQgZGF0YSlcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMTI1NC1cXHRcXHRpZiAoYW1kX2lvbW11X2R1bXApXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYzoxMjU1OlxcdFxcdFxcdERPX09OQ0VfTElURShkdW1wX2NvbW1hbmRfYnVmZmVyLCBpb21tdSk7XFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy0xMjU2LVxcbi0tXFxuZnMvZXJvZnMvaW50ZXJuYWwuaD00NDY9ZXJvZnNfZ2V0X2FvcHMoc3RydWN0IGlub2RlICpyZWFsaW5vZGUpXFxuLS1cXG5mcy9lcm9mcy9pbnRlcm5hbC5oLTQ1MC1cXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7XFxuZnMvZXJvZnMvaW50ZXJuYWwuaDo0NTE6XFx0XFx0RE9fT05DRV9MSVRFX0lGKHJlYWxpbm9kZS1cXHUwMDNlaV9ibGtiaXRzICE9IFBBR0VfU0hJRlQsXFxuZnMvZXJvZnMvaW50ZXJuYWwuaC00NTItXFx0XFx0XFx0ICBlcm9mc19pbmZvLCByZWFsaW5vZGUtXFx1MDAzZWlfc2IsXFxuLS1cXG5mcy94ZnMveGZzX21lc3NhZ2UuaD01MD1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuZnMveGZzL3hmc19tZXNzYWdlLmgtNTgtI2RlZmluZSB4ZnNfcHJpbnRrX29uY2UoZnVuYywgZGV2LCBmbXQsIC4uLilcXHRcXHRcXHRcXFxcXFxuZnMveGZzL3hmc19tZXNzYWdlLmg6NTk6XFx0RE9fT05DRV9MSVRFKGZ1bmMsIGRldiwgZm10LCAjI19fVkFfQVJHU19fKVxcbmZzL3hmcy94ZnNfbWVzc2FnZS5oLTYwLVxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaD0xMDM9ZXh0ZXJuIF9fcHJpbnRmKDEsIDIpIHZvaWQgX193YXJuX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7XFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE3OS0jZGVmaW5lIFdBUk5fT05fT05DRShjb25kaXRpb24pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmg6MTgwOlxcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk5fT04sIDEpXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaC0xODEtI2VuZGlmXFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE4NC0jZGVmaW5lIFdBUk5fT05DRShjb25kaXRpb24sIGZvcm1hdC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaDoxODU6XFx0RE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgV0FSTiwgMSwgZm9ybWF0KVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTg2LSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaC0xODgtI2RlZmluZSBXQVJOX1RBSU5UX09OQ0UoY29uZGl0aW9uLCB0YWludCwgZm9ybWF0Li4uKVxcdFxcdFxcXFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oOjE4OTpcXHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOX1RBSU5ULCAxLCB0YWludCwgZm9ybWF0KVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTkwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC05LSAqL1xcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MTA6I2RlZmluZSBET19PTkNFX0xJVEUoZnVuYywgLi4uKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjExOlxcdERPX09OQ0VfTElURV9JRih0cnVlLCBmdW5jLCAjI19fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMTItXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoxMzojZGVmaW5lIF9fT05DRV9MSVRFKClcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0xNC1cXHQoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMjQtXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoyNTojZGVmaW5lIF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoyNjpcXHQodW5saWtlbHkoY29uZGl0aW9uKSBcXHUwMDI2XFx1MDAyNiBfX09OQ0VfTElURSgpKVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMjctXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoyODojZGVmaW5lIERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIGZ1bmMsIC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0yOS1cXHQoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMzEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MzI6XFx0XFx0aWYgKF9fT05DRV9MSVRFX0lGKF9fcmV0X2RvX29uY2UpKVxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTMzLVxcdFxcdFxcdGZ1bmMoX19WQV9BUkdTX18pO1xcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmg9NDA3PXN0cnVjdCBwaV9lbnRyeSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oLTY0OS0jZGVmaW5lIHByaW50a19vbmNlKGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oOjY1MDpcXHRET19PTkNFX0xJVEUocHJpbnRrLCBmbXQsICMjX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9wcmludGsuaC02NTEtI2RlZmluZSBwcmludGtfZGVmZXJyZWRfb25jZShmbXQsIC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9wcmludGsuaDo2NTI6XFx0RE9fT05DRV9MSVRFKHByaW50a19kZWZlcnJlZCwgZm10LCAjI19fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjUzLSNlbHNlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTI3NTA9c3RhdGljIGlubGluZSB2b2lkIHNrYl9hc3NlcnRfbGVuKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI3NTMtXFx0aWYgKFdBUk5fT05DRSghc2tiLVxcdTAwM2VsZW4sIFxcXCIlc1xcXFxuXFxcIiwgX19mdW5jX18pKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6Mjc1NDpcXHRcXHRET19PTkNFX0xJVEUoc2tiX2R1bXAsIEtFUk5fRVJSLCBza2IsIGZhbHNlKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI3NTUtI2VuZGlmIC8qIENPTkZJR19ERUJVR19ORVQgKi9cXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5oPTM3PWVudW0gdHJhY2VfdHlwZSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC0xMjktI2RlZmluZSBNRU1fRkFJTChjb25kaXRpb24sIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaDoxMzA6XFx0RE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgcHJfZXJyLCBcXFwiRVJST1I6IFxcXCIgZm10LCAjI19fVkFfQVJHU19fKVxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTEzMS1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTM2MTc9aW50IHNrYl9jaGVja3N1bV9oZWxwKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0zNjQ1LVxcdGlmICh1bmxpa2VseShvZmZzZXQgXFx1MDAzZT0gc2tiX2hlYWRsZW4oc2tiKSkpIHtcXG5uZXQvY29yZS9kZXYuYzozNjQ2OlxcdFxcdERPX09OQ0VfTElURShza2JfZHVtcCwgS0VSTl9FUlIsIHNrYiwgZmFsc2UpO1xcbm5ldC9jb3JlL2Rldi5jLTM2NDctXFx0XFx0V0FSTl9PTkNFKHRydWUsIFxcXCJvZmZzZXQgKCVkKSBcXHUwMDNlPSBza2JfaGVhZGxlbigpICgldSlcXFxcblxcXCIsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0zNjU0LVxcdGlmICh1bmxpa2VseShvZmZzZXQgKyBzaXplb2YoX19zdW0xNikgXFx1MDAzZSBza2JfaGVhZGxlbihza2IpKSkge1xcbm5ldC9jb3JlL2Rldi5jOjM2NTU6XFx0XFx0RE9fT05DRV9MSVRFKHNrYl9kdW1wLCBLRVJOX0VSUiwgc2tiLCBmYWxzZSk7XFxubmV0L2NvcmUvZGV2LmMtMzY1Ni1cXHRcXHRXQVJOX09OQ0UodHJ1ZSwgXFxcIm9mZnNldCsyICglenUpIFxcdTAwM2Ugc2tiX2hlYWRsZW4oKSAoJXUpXFxcXG5cXFwiLFxcbi0tXFxubmV0L2NvcmUvZGV2LmM9Mzc0MD12b2lkIG5ldGRldl9yeF9jc3VtX2ZhdWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvZGV2LmMtMzc0MS17XFxubmV0L2NvcmUvZGV2LmM6Mzc0MjpcXHRET19PTkNFX0xJVEUoZG9fbmV0ZGV2X3J4X2NzdW1fZmF1bHQsIGRldiwgc2tiKTtcXG5uZXQvY29yZS9kZXYuYy0zNzQzLX1cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTIyNz1zdGF0aWMgdm9pZCB0Y3BfbWVhc3VyZV9yY3ZfbXNzKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI2My1cXHRcXHQvKiBBY2NvdW50IGZvciBwb3NzaWJseS1yZW1vdmVkIG9wdGlvbnMgKi9cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzoyNjQ6XFx0XFx0RE9fT05DRV9MSVRFX0lGKGxlbiBcXHUwMDNlIGljc2stXFx1MDAzZWljc2tfYWNrLnJjdl9tc3MgKyBNQVhfVENQX09QVElPTl9TUEFDRSxcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0yNjUtXFx0XFx0XFx0XFx0dGNwX2dyb19kZXZfd2Fybiwgc2ssIHNrYiwgbGVuKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oPTEyNT1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMTU2LSNkZWZpbmUgbGlua19lcnJfb25jZShsaW5rLCBmbXQsIC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MTU3OlxcdERPX09OQ0VfTElURShsaW5rX2VyciwgbGluaywgZm10LCAjI19fVkFfQVJHU19fKVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE1OC0jZGVmaW5lIGxpbmtfaWRfaW5mbyhzZGF0YSwgbGlua19pZCwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxucnVzdC9rZXJuZWwvcHJpbnQucnM9NDI2PW1hY3JvX3J1bGVzISBwcl9jb250IChcXG4tLVxcbnJ1c3Qva2VybmVsL3ByaW50LnJzLTQzMy0vLy9cXG5ydXN0L2tlcm5lbC9wcmludC5yczo0MzQ6Ly8vIFRoaXMgc3RydWN0dXJlIHByb3ZpZGVzIHRoZSBSdXN0IGVxdWl2YWxlbnQgb2YgdGhlIGtlcm5lbCdzIGBET19PTkNFX0xJVEVgIG1hY3JvLlxcbnJ1c3Qva2VybmVsL3ByaW50LnJzLTQzNS0vLy8gV2hpbGUgaXQgd291bGQgYmUgcG9zc2libGUgdG8gaW1wbGVtZW50IHRoZSBmZWF0dXJlIGVudGlyZWx5IGFzIGEgUnVzdCBtYWNybyxcXG4tLVxcbnJ1c3Qva2VybmVsL3ByaW50LnJzPTQ2OD0gICAgcHViIGZuIGNhbGxfb25jZVxcdTAwM2NGXFx1MDAzZShcXHUwMDI2c2VsZiwgZjogRikgLVxcdTAwM2UgYm9vbFxcbi0tXFxucnVzdC9rZXJuZWwvcHJpbnQucnMtNDkxLS8vL1xcbnJ1c3Qva2VybmVsL3ByaW50LnJzOjQ5MjovLy8gVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBrZXJuZWwncyBgRE9fT05DRV9MSVRFYCBtYWNyby5cXG5ydXN0L2tlcm5lbC9wcmludC5ycy00OTMtLy8vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE1OjE5OjUyLjA5NjA1NTEwM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4ODQ0ODg3NTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiBhZmZhaXJzLCBzbyBJJ2xsIHF1aWNrbHkgY2hlY2sgc29tZSBrZXkgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JrIGNoZWNrc3VtIG9mZmxvYWQgYW5kIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pLiBJJ20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGBleF9oYW5kbGVyX21zcmAsIGBuZXRkZXZfcnhfY3N1bV9mYXVsdGAsIGBza2JfY2hlY2tzdW1faGVscGAsIGFuZCBgdGNwX2dyb19kZXZfd2FybmAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgcHJpbWUgc3VzcGVjdHMgaW4gd2hhdGV2ZXIgSSdtIHRyb3VibGVzaG9vdGluZy5cblxuTm93LCBhIGNydWNpYWwgZGV0YWlsIHRvIHZlcmlmeSBpcyB3aGV0aGVyIGB0Y3BfZ3JvX2Rldl93YXJuYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMgb3Igbm9uLXN0YXRpYy4gVGhlIHNjb3BlIGFuZCB2aXNpYmlsaXR5IG9mIHRoYXQgZnVuY3Rpb24gd2lsbCBzaWduaWZpY2FudGx5IGltcGFjdCBob3cgaXQncyBiZWluZyB1c2VkIGFuZCBwb3RlbnRpYWxseSB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLiBUaGF04oCZcyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiB0aGF0IHdpbGwgZGlyZWN0IG15IG5leHQgaW52ZXN0aWdhdGl2ZSBzdGVwcy4gU3RhdGljIG9yIG5vdCwgdGhhdCdsbCBiZSB0ZWxsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzM2NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE1OjIwOjAwLjk0MDk0NTcwOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3OTgzMDY3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfZ3JvX2Rldl93YXJuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jPTIwNT1zdGF0aWMgdm9pZCBicGZfc2tvcHNfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBpbnQgYnBmX29wLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMjEwLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjIxMTpzdGF0aWMgX19jb2xkIHZvaWQgdGNwX2dyb19kZXZfd2Fybihjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMjEyLVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9MjI3PXN0YXRpYyB2b2lkIHRjcF9tZWFzdXJlX3Jjdl9tc3Moc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMjY0LVxcdFxcdERPX09OQ0VfTElURV9JRihsZW4gXFx1MDAzZSBpY3NrLVxcdTAwM2VpY3NrX2Fjay5yY3ZfbXNzICsgTUFYX1RDUF9PUFRJT05fU1BBQ0UsXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6MjY1OlxcdFxcdFxcdFxcdHRjcF9ncm9fZGV2X3dhcm4sIHNrLCBza2IsIGxlbik7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMjY2LVxcdFxcdC8qIElmIHRoZSBza2IgaGFzIGEgbGVuIG9mIGV4YWN0bHkgMSpNU1MgYW5kIGhhcyB0aGUgUFNIIGJpdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToyMDowMi42MjA3ODEyNTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg2NjkyNjA5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBOZXR3b3JrIENoZWNrc3VtIElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSdtIHRha2luZyBhIGxvb2sgYXQgYG5ldGRldl9yeF9jc3VtX2ZhdWx0YC4gSXQncyBhIGtleSBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgY2hlY2tzdW0gZmF1bHRzLCBhbmQgZnJvbSB0aGUgY29kZSBzbmlwcGV0LCBpdCBsb29rcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBpdCBqdXN0IGNhbGxzIGBET19PTkNFX0xJVEVgLiBUaGUgZmFjdCB0aGF0IGl0J3MgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IG5vdCBzdGF0aWMsIGltbWVkaWF0ZWx5IG1ha2VzIGl0IGludGVyZXN0aW5nIGZyb20gYSBkZXBlbmRlbmN5IHN0YW5kcG9pbnQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC5cblxuTmV4dCwgSSdsbCBleGFtaW5lIGBza2JfY2hlY2tzdW1faGVscGAuIFRoaXMgb25lIGlzICpleHBsaWNpdGx5KiBleHBvcnRlZCB2aWEgYEVYUE9SVF9TWU1CT0xgLCB3aGljaCBtZWFucyBpdCdzIGRlc2lnbmVkIHRvIGJlIHVzZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhhdCdzIGEgc3Ryb25nIHNpZ25hbCwgYW5kIEkgbmVlZCB0byBjb25zaWRlciBpdHMgaW1wbGljYXRpb25zLiBUaGlzIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHBpY3R1cmUuXG5cblRoZW4sIHRoZXJlJ3MgYGV4X2hhbmRsZXJfbXNyYCwgd2hpY2ggaXMgd2hlcmUgdGhpbmdzIGdldCBhIGJpdCBtb3JlIG51YW5jZWQuIEl04oCZcyBkZWNsYXJlZCBhcyBzdGF0aWMsIHdoaWNoIHR5cGljYWxseSBsaW1pdHMgaXRzIHNjb3BlLCBidXQgSSBzZWUgdGhhdCBpdOKAmXMgY2FsbGVkIGJ5IGBmaXh1cF9leGNlcHRpb25gLiBUaGF04oCZcyB3b3J0aCBub3RpbmcsIGFzIGludGVybmFsIGNhbGxzIGNhbiBzdGlsbCBoYXZlIGltcGxpY2F0aW9ucyBkZXBlbmRpbmcgb24gaG93IHRoZSBlcnJvciBoYW5kbGluZyBhbmQgZXhjZXB0aW9uIGZyYW1ld29yayB3b3Jrcy4gU28sIGV2ZW4gdGhvdWdoIGl0J3Mgc3RhdGljLCBpdCdzIHN0aWxsIGJlaW5nIHVzZWQsIGp1c3QgaW50ZXJuYWxseSwgc28gSSdsbCBjb25zaWRlciBpdHMgcm9sZSBpbiB0aGUgZXhjZXB0aW9uIHBhdGguXG5cbkZpbmFsbHksIEknbGwgcGl2b3QgYW5kIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGB4ZnNfcHJpbnRrX29uY2VgIHdpdGhpbiB0aGUgWEZTIGZpbGVzeXN0ZW0gY29kZS4gVGhpcyBtaWdodCBwcm92aWRlIGZ1cnRoZXIgaW5zaWdodHMgaW50byBob3cgY2hlY2tzdW0gZXJyb3JzIG9yIHJlbGF0ZWQgaXNzdWVzIGFyZSBiZWluZyBoYW5kbGVkIG9yIGxvZ2dlZCB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtIGl0c2VsZiwgd2hpY2ggbWlnaHQgYmUgaGVscGZ1bCBmcm9tIGEgZGlhZ25vc3RpY3MgcG9pbnQgb2Ygdmlldy4gSSB3YW50IHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3OTMxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE1OjIwOjA4LjQ4NzcwOTc4N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNzIyNDg4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnNfLipfb25jZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy94ZnMveGZzX2lvY3RsLmM9MTIxOT14ZnNfZmlsZV9pb2N0bChcXG4tLVxcbmZzL3hmcy94ZnNfaW9jdGwuYy0xMjQyLVxcdGNhc2UgWEZTX0lPQ19GUkVFU1A2NDpcXG5mcy94ZnMveGZzX2lvY3RsLmM6MTI0MzpcXHRcXHR4ZnNfd2Fybl9vbmNlKG1wLFxcbmZzL3hmcy94ZnNfaW9jdGwuYy0xMjQ0LVxcdFxcXCIlcyBzaG91bGQgdXNlIGZhbGxvY2F0ZTsgWEZTX0lPQ197QUxMT0MsRlJFRX1TUCBpb2N0bCB1bnN1cHBvcnRlZFxcXCIsXFxuLS1cXG5mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmM9Mjg4OD14bG9nX3JlY292ZXJfcHJvY2VzcyhcXG4tLVxcbmZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYy0yOTA4LVxcdFxcdGlmIChvdGhlcl9jcmMgPT0gZXhwZWN0ZWRfY3JjKSB7XFxuZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jOjI5MDk6XFx0XFx0XFx0eGZzX25vdGljZV9vbmNlKGxvZy1cXHUwMDNlbF9tcCxcXG5mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMtMjkxMC1cXHRcXFwiRml4aW5nIHVwIGluY29ycmVjdCBDUkMgZHVlIHRvIHBhZGRpbmcuXFxcIik7XFxuLS1cXG5mcy94ZnMveGZzX21lc3NhZ2UuaD01MD1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuZnMveGZzL3hmc19tZXNzYWdlLmgtNTctXFxuZnMveGZzL3hmc19tZXNzYWdlLmg6NTg6I2RlZmluZSB4ZnNfcHJpbnRrX29uY2UoZnVuYywgZGV2LCBmbXQsIC4uLilcXHRcXHRcXHRcXFxcXFxuZnMveGZzL3hmc19tZXNzYWdlLmgtNTktXFx0RE9fT05DRV9MSVRFKGZ1bmMsIGRldiwgZm10LCAjI19fVkFfQVJHU19fKVxcbi0tXFxuZnMveGZzL3hmc19tZXNzYWdlLmgtNzctXFxuZnMveGZzL3hmc19tZXNzYWdlLmg6Nzg6I2RlZmluZSB4ZnNfd2Fybl9vbmNlKGRldiwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmZzL3hmcy94ZnNfbWVzc2FnZS5oOjc5OlxcdHhmc19wcmludGtfb25jZSh4ZnNfd2FybiwgZGV2LCBmbXQsICMjX19WQV9BUkdTX18pXFxuZnMveGZzL3hmc19tZXNzYWdlLmg6ODA6I2RlZmluZSB4ZnNfbm90aWNlX29uY2UoZGV2LCBmbXQsIC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuZnMveGZzL3hmc19tZXNzYWdlLmg6ODE6XFx0eGZzX3ByaW50a19vbmNlKHhmc19ub3RpY2UsIGRldiwgZm10LCAjI19fVkFfQVJHU19fKVxcbmZzL3hmcy94ZnNfbWVzc2FnZS5oOjgyOiNkZWZpbmUgeGZzX2luZm9fb25jZShkZXYsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5mcy94ZnMveGZzX21lc3NhZ2UuaDo4MzpcXHR4ZnNfcHJpbnRrX29uY2UoeGZzX2luZm8sIGRldiwgZm10LCAjI19fVkFfQVJHU19fKVxcbmZzL3hmcy94ZnNfbWVzc2FnZS5oLTg0LVxcbi0tXFxuZnMveGZzL3hmc19tb3VudC5jPTE0NDc9eGZzX2RlY19mcmVlY291bnRlcihcXG4tLVxcbmZzL3hmcy94ZnNfbW91bnQuYy0xNDk2LVxcdFxcdFxcdGlmIChjdHIgPT0gWENfRlJFRV9CTE9DS1MpXFxuZnMveGZzL3hmc19tb3VudC5jOjE0OTc6XFx0XFx0XFx0XFx0eGZzX3dhcm5fb25jZShtcCxcXG5mcy94ZnMveGZzX21vdW50LmMtMTQ5OC1cXFwiUmVzZXJ2ZSBibG9ja3MgZGVwbGV0ZWQhIENvbnNpZGVyIGluY3JlYXNpbmcgcmVzZXJ2ZSBwb29sIHNpemUuXFxcIik7XFxuLS1cXG5mcy94ZnMveGZzX3N1cGVyLmM9Nzc4PVNUQVRJQyB2b2lkXFxuZnMveGZzL3hmc19zdXBlci5jOjc3OTp4ZnNfZnNfaW5vZGVfaW5pdF9vbmNlKFxcbmZzL3hmcy94ZnNfc3VwZXIuYy03ODAtXFx0dm9pZFxcdFxcdFxcdCppbm9kZSlcXG4tLVxcbmZzL3hmcy94ZnNfc3VwZXIuYz0xNzAyPXhmc19mc19maWxsX3N1cGVyKFxcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jLTE4MTItXFx0XFx0fVxcbmZzL3hmcy94ZnNfc3VwZXIuYzoxODEzOlxcdFxcdHhmc193YXJuX29uY2UobXAsXFxuZnMveGZzL3hmc19zdXBlci5jLTE4MTQtXFx0XFxcIkRlcHJlY2F0ZWQgVjQgZm9ybWF0IChjcmM9MCkgd2lsbCBub3QgYmUgc3VwcG9ydGVkIGFmdGVyIFNlcHRlbWJlciAyMDMwLlxcXCIpO1xcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jLTE4MTktI2lmZGVmIENPTkZJR19YRlNfU1VQUE9SVF9BU0NJSV9DSVxcbmZzL3hmcy94ZnNfc3VwZXIuYzoxODIwOlxcdFxcdHhmc193YXJuX29uY2UobXAsXFxuZnMveGZzL3hmc19zdXBlci5jLTE4MjEtXFx0XFxcIkRlcHJlY2F0ZWQgQVNDSUkgY2FzZS1pbnNlbnNpdGl2aXR5IGZlYXR1cmUgKGFzY2lpLWNpPTEpIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBhZnRlciBTZXB0ZW1iZXIgMjAzMC5cXFwiKTtcXG4tLVxcbmZzL3hmcy94ZnNfc3VwZXIuYz0yMzUzPXhmc19pbml0X2NhY2hlcyh2b2lkKVxcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jLTI0MjgtXFx0XFx0XFx0XFx0XFx0ICAgIFNMQUJfQUNDT1VOVCksXFxuZnMveGZzL3hmc19zdXBlci5jOjI0Mjk6XFx0XFx0XFx0XFx0XFx0ICAgeGZzX2ZzX2lub2RlX2luaXRfb25jZSk7XFxuZnMveGZzL3hmc19zdXBlci5jLTI0MzAtXFx0aWYgKCF4ZnNfaW5vZGVfY2FjaGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE1OjIwOjEwLjU5NDk0NDYwM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzI5NjI1MDQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBgb25jZV9saXRlLmhgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYG9uY2VfbGl0ZS5oYCByZXF1aXJlcyBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9uIHRvIGJlIGVuYWJsZWQuIEl0IGxvb2tzIGxpa2UgaXQncyBhbHdheXMgaW5jbHVkZWQgd2l0aG91dCBhbnkgc3BlY2lmaWMgY29uZmlnIGd1YXJkLCBzbyBubywgbm8gc3BlY2lmaWMgY29uZmlncyBhcmUgcmVxdWlyZWQg4oCTIGl0IHVzZXMgdGhlIHN0YW5kYXJkIGtlcm5lbCBjb25maWd1cmF0aW9ucy5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gVGhlIGNoYW5nZXMgYXJlIG1vZGlmeWluZyBjb3JlIGtlcm5lbCBpbmZyYXN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oYCwgYW5kIHRoYXQncyB1c2VkIHRocm91Z2hvdXQgdGhlIGtlcm5lbCDigJMgbmV0d29ya2luZywgYnVnIGhhbmRsaW5nLCBmaWxlc3lzdGVtcyDigJMgdGhlIHdvcmtzLiBHaXZlbiB0aGUgZ3VpZGVsaW5lcyBJIGhhdmUsIHRoZSBhbnN3ZXIgaXMgYSBkZWZpbml0aXZlICp5ZXMqLiBUaGUgY3JpdGVyaWEgZXhwbGljaXRseSBzdGF0ZSB0aGF0IGFueSBtb2RpZmljYXRpb24gdG8gXCJjb3JlIHN1YnN5c3RlbXNcIiBsaWtlIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIG9yIHJlZmFjdG9yaW5ncyB0aGF0IHJlc3RydWN0dXJlIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMgb3IgYWxnb3JpdGhtIGZsb3dzIHdhcnJhbnQgZnV6emluZy4gVGhpcyBkZWZpbml0ZWx5IGZhbGxzIGludG8gYm90aCBjYXRlZ29yaWVzLiBTbywgYFdvcnRoRnV6emluZ2AgaXMgYHRydWVgLlxuXG5OZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgc3VpdGFibGUgZm9jdXMgc3ltYm9scy4gSSdtIGxvb2tpbmcgZm9yIG5vbi11YmlxdWl0b3VzLCBmZWF0dXJlLXNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGV4ZXJjaXNlIGBfX09OQ0VfTElURV9JRmAgb3IgcmVsYXRlZCBtYWNyb3MuIEkndmUgZ290IGEgbGlzdCBvZiBwb3RlbnRpYWwgY2FuZGlkYXRlczogYG5ldGRldl9yeF9jc3VtX2ZhdWx0YCwgYHNrYl9jaGVja3N1bV9oZWxwYCwgYHhmc19maWxlX2lvY3RsYCwgYW5kIGB4ZnNfZnNfZmlsbF9zdXBlcmAuIEFmdGVyIHJldmlld2luZyB0aGVtLCB0aGVzZSBhcmUgZ29vZCBjaG9pY2VzLiBUaGV5IGFsbCBkaXJlY3RseSBpbnZva2UgYERPX09OQ0VfTElURWAgb3IgYERPX09OQ0VfTElURV9JRmAuIFBlcmZlY3QuXG5cbkZpbmFsbHksIGxldCdzIGFzc2VtYmxlIHRoZSBgc2V0LXJlc3VsdHNgIGRhdGEuXG5cbiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgXG4qICAgYFJlYXNvbmluZ2A6IE1vZGlmaWNhdGlvbiBvZiBjb3JlIGtlcm5lbCBpbmZyYXN0cnVjdHVyZSAoYGluY2x1ZGUvbGludXgvb25jZV9saXRlLmhgKSwgZGlyZWN0bHkgaW1wYWN0aW5nIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQgYWNyb3NzIGNvcmUgc3Vic3lzdGVtcyAobmV0d29ya2luZywgYnVnIGhhbmRsaW5nLCBmaWxlc3lzdGVtcykuIFJlZmFjdG9yaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGFsZ29yaXRobSBmbG93cy5cbiogICBgRm9jdXNTeW1ib2xzYDogYFtcIm5ldGRldl9yeF9jc3VtX2ZhdWx0XCIsIFwic2tiX2NoZWNrc3VtX2hlbHBcIiwgXCJ4ZnNfZmlsZV9pb2N0bFwiLCBcInhmc19mc19maWxsX3N1cGVyXCJdYFxuKiAgIGBFbmFibGVDb25maWdzYDogYFtdYCAoYmVjYXVzZSBgb25jZV9saXRlLmhgIGlzIGFsd2F5cyBpbmNsdWRlZClcblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjY3LCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToyMDoyNy44OTExOTkwNTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGRldl9yeF9jc3VtX2ZhdWx0XCIsXG4gICAgXCJza2JfY2hlY2tzdW1faGVscFwiLFxuICAgIFwieGZzX2ZpbGVfaW9jdGxcIixcbiAgICBcInhmc19mc19maWxsX3N1cGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBET19PTkNFX0xJVEUgLyBfX09OQ0VfTElURV9JRiBoZWxwZXIgbWFjcm8gZGVmaW5pdGlvbnMgaW4gaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaCwgc2VwYXJhdGluZyBvdXQgX19PTkNFX0xJVEUoKSBhbmQgYWx0ZXJpbmcgdGhlIGNvbmRpdGlvbiBldmFsdWF0aW9uIGxvZ2ljIGZvciBvbmUtdGltZSBleGVjdXRpb24gYWNyb3NzIHRoZSBrZXJuZWwuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUgdXNlZCBpbiBuZXR3b3JraW5nLCBmaWxlc3lzdGVtcywgYW5kIGdlbmVyaWMgYnVnL3dhcm5pbmcgbWFjcm9zLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gdmVyaWZ5IHJ1bnRpbWUgZXZhbHVhdGlvbiBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfcnhfY3N1bV9mYXVsdFwiLFxuICAgIFwic2tiX2NoZWNrc3VtX2hlbHBcIixcbiAgICBcInhmc19maWxlX2lvY3RsXCIsXG4gICAgXCJ4ZnNfZnNfZmlsbF9zdXBlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgRE9fT05DRV9MSVRFIC8gX19PTkNFX0xJVEVfSUYgaGVscGVyIG1hY3JvIGRlZmluaXRpb25zIGluIGluY2x1ZGUvbGludXgvb25jZV9saXRlLmgsIHNlcGFyYXRpbmcgb3V0IF9fT05DRV9MSVRFKCkgYW5kIGFsdGVyaW5nIHRoZSBjb25kaXRpb24gZXZhbHVhdGlvbiBsb2dpYyBmb3Igb25lLXRpbWUgZXhlY3V0aW9uIGFjcm9zcyB0aGUga2VybmVsLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGluZnJhc3RydWN0dXJlIHVzZWQgaW4gbmV0d29ya2luZywgZmlsZXN5c3RlbXMsIGFuZCBnZW5lcmljIGJ1Zy93YXJuaW5nIG1hY3Jvcywgd2FycmFudGluZyBmdXp6aW5nIHRvIHZlcmlmeSBydW50aW1lIGV2YWx1YXRpb24gYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE1OjIwOjI3Ljg5MTIzNDYzMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ5MDUxNjMxMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToyMDoyNy44OTE2OTc3NTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNDkwNDY5NjIxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgX19PTkNFX0xJVEVfSUZgIG1hY3JvIGluIGBpbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oYCBpbnRvIGEgc3RhbmRhbG9uZSBgX19PTkNFX0xJVEUoKWAgaGVscGVyIGFuZCBzaG9ydC1jaXJjdWl0aW5nIGBfX09OQ0VfTElURV9JRihjb25kaXRpb24pYC5cXG5cXG5BbGwgdmFyaWFibGVzIHVzZWQgd2l0aGluIHRoZSBtYWNyb3MgKGBfX2FscmVhZHlfZG9uZWAgaW4gYC5kYXRhLi5vbmNlYCBhbmQgbG9jYWwgYm9vbGVhbiBgX19yZXRfb25jZSA9IGZhbHNlYCkgYXJlIHN0YXRpYyBvciBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgdG91Y2ggZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSwgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMsIG1lbW9yeSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm9sZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTIxMTZjN2I5NThmODg1YWZhNzM0YTllZGFkMzdlMGQwYzcxOTRiZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTU6MTg6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oIGIvaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaFxuaW5kZXggMjM2NTkyYzRlZWIxYS4uNWUyYjY3MDM5YWFmMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvb25jZV9saXRlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvb25jZV9saXRlLmhcbkBAIC0xMCwxOSArMTAsMjEgQEBcbiAjZGVmaW5lIERPX09OQ0VfTElURShmdW5jLCAuLi4pXHRcdFx0XHRcdFx0XFxcbiBcdERPX09OQ0VfTElURV9JRih0cnVlLCBmdW5jLCAjI19fVkFfQVJHU19fKVxuIFxuLSNkZWZpbmUgX19PTkNFX0xJVEVfSUYoY29uZGl0aW9uKVx0XHRcdFx0XHRcXFxuKyNkZWZpbmUgX19PTkNFX0xJVEUoKVx0XHRcdFx0XHRcdFx0XFxcbiBcdCh7XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRcdHN0YXRpYyBib29sIF9fc2VjdGlvbihcIi5kYXRhLi5vbmNlXCIpIF9fYWxyZWFkeV9kb25lO1x0XFxcbi1cdFx0Ym9vbCBfX3JldF9jb25kID0gISEoY29uZGl0aW9uKTtcdFx0XHRcXFxuIFx0XHRib29sIF9fcmV0X29uY2UgPSBmYWxzZTtcdFx0XHRcdFxcXG4gXHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdFx0aWYgKHVubGlrZWx5KF9fcmV0X2NvbmQpIFx1MDAyNlx1MDAyNiB1bmxpa2VseSghX19hbHJlYWR5X2RvbmUpKSB7XFxcbitcdFx0aWYgKHVubGlrZWx5KCFfX2FscmVhZHlfZG9uZSkpIHtcdFx0XHRcXFxuIFx0XHRcdF9fYWxyZWFkeV9kb25lID0gdHJ1ZTtcdFx0XHRcdFxcXG4gXHRcdFx0X19yZXRfb25jZSA9IHRydWU7XHRcdFx0XHRcXFxuIFx0XHR9XHRcdFx0XHRcdFx0XHRcXFxuIFx0XHR1bmxpa2VseShfX3JldF9vbmNlKTtcdFx0XHRcdFx0XFxcbiBcdH0pXG4gXG4rI2RlZmluZSBfX09OQ0VfTElURV9JRihjb25kaXRpb24pXHRcdFx0XHRcdFxcXG4rXHQodW5saWtlbHkoY29uZGl0aW9uKSBcdTAwMjZcdTAwMjYgX19PTkNFX0xJVEUoKSlcbitcbiAjZGVmaW5lIERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIGZ1bmMsIC4uLilcdFx0XHRcdFxcXG4gXHQoe1x0XHRcdFx0XHRcdFx0XHRcXFxuIFx0XHRib29sIF9fcmV0X2RvX29uY2UgPSAhIShjb25kaXRpb24pO1x0XHRcdFxcXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToyMDoyNy44OTE2OTg2NzFaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1MzY3NTYyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgb25jZV9saXRlLmhgIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgcmVsYXRlZCB0byBzb21lIG9wdGltaXphdGlvbiBvciBwZXJoYXBzIHNpbXBsaWZpY2F0aW9uIG9mIGEgXCJvbmNlXCIgZXhlY3V0aW9uIHBhdHRlcm4gd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBkaWZmIHN1Z2dlc3RzIHRoYXQgd2UncmUgbG9va2luZyBhdCBhIGhlYWRlciBmaWxlLCBzbyB0aGlzIGxpa2VseSBwcm92aWRlcyBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucy5cblxuSSBzZWUgYSByZXZpc2VkIGltcGxlbWVudGF0aW9uIG9mIGBfX09OQ0VfTElURV9JRmAuIFByZXZpb3VzbHksIGl0IGFwcGVhcnMgdG8gaGF2ZSBhIGJvb2xlYW4gYGNvbmRpdGlvbmAgcGFzc2VkIGludG8gdGhlIG1hY3JvOyBub3cgdGhlcmUncyBhbiBgX19PTkNFX0xJVEUoKWAgbWFjcm8uIFRoZSBnb2FsIGlzIGxpa2VseSB0byBleGVjdXRlIHNvbWUgY29kZSAqb25seSBvbmNlKiBpZiBhIGNvbmRpdGlvbiBpcyBtZXQsIHNvIGBET19PTkNFX0xJVEVfSUZgIG11c3QgYmUgY3JpdGljYWwgaW4gYWxsb3dpbmcgdGhhdCBjb250cm9sLiBJIHNlZSB0aGUgdXNhZ2Ugb2YgYHVubGlrZWx5KClgIHdoaWNoIGluZGljYXRlcyBvcHRpbWl6YXRpb24gdG93YXJkIHBlcmZvcm1hbmNlIGJhc2VkIG9uIGFuIGV4cGVjdGVkLCBidXQgbm90IGNlcnRhaW4sIGNvbmRpdGlvbi4gSSBhbHNvIG5vdGljZSB0aGUgdXNlIG9mIGEgc3RhdGljIGJvb2xlYW4gdmFyaWFibGUgYF9fYWxyZWFkeV9kb25lYCBsb2NhdGVkIGluIGAuZGF0YS4ub25jZWAuIFB1dHRpbmcgaXQgdGhlcmUgcHJvYmFibHkgZ3VhcmFudGVlcyBpbml0aWFsaXphdGlvbiB0byB6ZXJvIGFuZCBwbGFjZW1lbnQgd2l0aGluIGEgc2VjdGlvbiBsaWtlbHkgbWVhbnQgZm9yIGluaXRpYWxpemVkIGRhdGEgdGhhdCB3b24ndCBiZSBtb2RpZmllZC5cblxuSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIGEgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuIEJ5IHB1bGxpbmcgdGhlIGluaXRpYWwgYGNvbmRpdGlvbmAgY2hlY2sgb3V0IGludG8gdGhlIG1hY3JvIGRlZmluaXRpb24sIHRoZXJlJ3MgcG9zc2libHkgbGVzcyBvdmVyaGVhZC4gTm93LCB0aGUgY29uZGl0aW9uIGlzIGV2YWx1YXRlZCBvbmx5IHdpdGhpbiB0aGUgYERPX09OQ0VfTElURV9JRmAgbWFjcm8gYW5kIG9ubHkgb25jZS4gSWYgdGhlIGNvbmRpdGlvbiBpcyBhbHdheXMgZmFsc2UsIHRoZXJlIGlzIG5vIG92ZXJoZWFkIGZyb20gdGhlIG9uY2UgY29kZS4gQWxzbywgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGNhbGxzIHRvIHRoZSBzYW1lIG9uY2UgY29uZGl0aW9uLCB0aGlzIHdpbGwgc2hvcnQtY2lyY3VpdCBhbnkgbGF0ZXIgaW52b2NhdGlvbnMuXG5cblRoaXMgc2VlbXMgbGlrZSBhIGNhcmVmdWwgYW5kIGZvY3VzZWQgcGF0Y2guIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZnVsbCBjb250ZXh0IHRvIGVuc3VyZSB0aGF0IGl0IGhhcyBubyB1bmludGVuZGVkIHNpZGUgZWZmZWN0cywgYnV0IGl0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIG9wdGltaXphdGlvbiBvciBzaW1wbGlmaWNhdGlvbiBvZiB0aGUgYG9uY2VgIHBhdHRlcm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToyMDo1MC40Mjg0NTg3MjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuICAgMjpcXHQjaWZuZGVmIF9MSU5VWF9PTkNFX0xJVEVfSFxcbiAgIDM6XFx0I2RlZmluZSBfTElOVVhfT05DRV9MSVRFX0hcXG4gICA0OlxcdFxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuICAgNjpcXHRcXG4gICA3OlxcdC8qIENhbGwgYSBmdW5jdGlvbiBvbmNlLiBTaW1pbGFyIHRvIERPX09OQ0UoKSwgYnV0IGRvZXMgbm90IHVzZSBqdW1wIGxhYmVsXFxuICAgODpcXHQgKiBwYXRjaGluZyB2aWEgc3RhdGljIGtleXMuXFxuICAgOTpcXHQgKi9cXG4gIDEwOlxcdCNkZWZpbmUgRE9fT05DRV9MSVRFKGZ1bmMsIC4uLilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAxMTpcXHRcXHRET19PTkNFX0xJVEVfSUYodHJ1ZSwgZnVuYywgIyNfX1ZBX0FSR1NfXylcXG4gIDEyOlxcdFxcbiAgMTM6XFx0I2RlZmluZSBfX09OQ0VfTElURSgpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMTQ6XFx0XFx0KHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAxNTpcXHRcXHRcXHRzdGF0aWMgYm9vbCBfX3NlY3Rpb24oXFxcIi5kYXRhLi5vbmNlXFxcIikgX19hbHJlYWR5X2RvbmU7XFx0XFxcXFxcbiAgMTY6XFx0XFx0XFx0Ym9vbCBfX3JldF9vbmNlID0gZmFsc2U7XFx0XFx0XFx0XFx0XFxcXFxcbiAgMTc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMTg6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFfX2FscmVhZHlfZG9uZSkpIHtcXHRcXHRcXHRcXFxcXFxuICAxOTpcXHRcXHRcXHRcXHRfX2FscmVhZHlfZG9uZSA9IHRydWU7XFx0XFx0XFx0XFx0XFxcXFxcbiAgMjA6XFx0XFx0XFx0XFx0X19yZXRfb25jZSA9IHRydWU7XFx0XFx0XFx0XFx0XFxcXFxcbiAgMjE6XFx0XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDIyOlxcdFxcdFxcdHVubGlrZWx5KF9fcmV0X29uY2UpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDIzOlxcdFxcdH0pXFxuICAyNDpcXHRcXG4gIDI1OlxcdCNkZWZpbmUgX19PTkNFX0xJVEVfSUYoY29uZGl0aW9uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDI2OlxcdFxcdCh1bmxpa2VseShjb25kaXRpb24pIFxcdTAwMjZcXHUwMDI2IF9fT05DRV9MSVRFKCkpXFxuICAyNzpcXHRcXG4gIDI4OlxcdCNkZWZpbmUgRE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgZnVuYywgLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG4gIDI5OlxcdFxcdCh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzA6XFx0XFx0XFx0Ym9vbCBfX3JldF9kb19vbmNlID0gISEoY29uZGl0aW9uKTtcXHRcXHRcXHRcXFxcXFxuICAzMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAzMjpcXHRcXHRcXHRpZiAoX19PTkNFX0xJVEVfSUYoX19yZXRfZG9fb25jZSkpXFx0XFx0XFx0XFxcXFxcbiAgMzM6XFx0XFx0XFx0XFx0ZnVuYyhfX1ZBX0FSR1NfXyk7XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzU6XFx0XFx0XFx0dW5saWtlbHkoX19yZXRfZG9fb25jZSk7XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzY6XFx0XFx0fSlcXG4gIDM3OlxcdFxcbiAgMzg6XFx0I2VuZGlmIC8qIF9MSU5VWF9PTkNFX0xJVEVfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToyMDo1MC40Mjg1MzU1MjhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDA1ODU5MDg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBvbmNlX2xpdGUuaGAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgb25jZV9saXRlLmhgIGhlYWRlciBhbmQgdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gSSBzZWUgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIG9mIGBfX09OQ0VfTElURV9JRmAgdXNlcyBhIHN0YXRpYyBib29sZWFuIGZsYWcsIGBfX2FscmVhZHlfZG9uZWAsIHBsYWNlZCBpbiB0aGUgYC5kYXRhLi5vbmNlYCBzZWN0aW9uLiBJdCBzZWVtcyB0byBiZSBpbXBsZW1lbnRpbmcgYSBsaWdodHdlaWdodCBcIm9uY2VcIiBleGVjdXRpb24gcGFyYWRpZ20sIGxpa2VseSBmb3IgaW5pdGlhbGl6YXRpb24gb3IgY29uZGl0aW9uYWwgZXhlY3V0aW9uIHRoYXQgc2hvdWxkIGhhcHBlbiBvbmx5IG9uY2UuIFRoZSBvcmlnaW5hbCBjb2RlJ3MgYXBwcm9hY2ggaXMgaW50ZXJlc3Rpbmc7IGl0J3MgdXNpbmcgdGhlIGAoeyAuLi4gfSlgIEdDQyBzdGF0ZW1lbnQgZXhwcmVzc2lvbiB0byBwcm92aWRlIHNvbWUgc29ydCBvZiBhdG9taWMgKG9yIGFzIGF0b21pYyBhcyB0aGUgY29tcGlsZXIgYWxsb3dzKSB0ZXN0LWFuZC1zZXQgb3BlcmF0aW9uLCBhbG9uZyB3aXRoIGEgcmV0dXJuIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbmRpdGlvbiB3YXMgdHJ1ZSBhbmQgdGhlIGFjdGlvbiB3YXMgdGFrZW4gZm9yIHRoZSBmaXJzdCB0aW1lLlxuXG5UaGUgcGF0Y2ggc2ltcGxpZmllcyB0aGluZ3MgYnkgZGVmaW5pbmcgYF9fT05DRV9MSVRFKClgIGFuZCB1c2luZyBpdCB3aXRoaW4gYF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilgLiBJdCdzIHN0aWxsIHVzaW5nIHRoZSBzYW1lIGBfX2FscmVhZHlfZG9uZWAgc3RhdGljIGJvb2xlYW4sIGJ1dCBub3cgaXQgY2hlY2tzIGZvciBhIGBjb25kaXRpb25gIGJlZm9yZSBjYWxsaW5nIHRoZSBcIm9uY2VcIiBjaGVjay4gVGhlIGxvZ2ljIGluIHRoZSBwYXRjaGVkIHZlcnNpb24gaXMgY2xlYXJlcjsgdGhlIGludGVudCBpcyB0byBvbmx5IGV4ZWN1dGUgc29tZXRoaW5nIGlmIHRoZSBjb25kaXRpb24gaXMgKnVubGlrZWx5KiB0byBiZSB0cnVlIGFuZCB0aGUgXCJvbmNlXCIgY2hlY2sgaGFzbid0IGhhcHBlbmVkLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgbWFjcm8gaXMgYWN0dWFsbHkgdXNlZCBpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IHRvIHJlYWxseSBncmFzcCBpdHMgcHJhY3RpY2FsIGFwcGxpY2F0aW9uLiBJJ2xsIG5lZWQgdG8gc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlIGZvciBpbnN0YW5jZXMgb2YgYF9fT05DRV9MSVRFYCwgYF9fT05DRV9MSVRFX0lGYCwgYW5kIGBET19PTkNFX0xJVEVgIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgYmVpbmcgbGV2ZXJhZ2VkIGluIHByYWN0aWNlLiBUaGF0IHdpbGwgaWxsdW1pbmF0ZSB0aGUgb3B0aW1pemF0aW9ucyBvciBzcGVjaWZpYyB1c2UgY2FzZXMgdGhpcyBpcyBkZXNpZ25lZCBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NTgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNToyMDo1NC40ODcxMjk2MTJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzExNzg4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiT05DRV9MSVRFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L21tL2V4dGFibGUuYz0xNjY9c3RhdGljIGJvb2wgZXhfaGFuZGxlcl9tc3IoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZml4dXAsXFxuLS1cXG5hcmNoL3g4Ni9tbS9leHRhYmxlLmMtMTY4LXtcXG5hcmNoL3g4Ni9tbS9leHRhYmxlLmM6MTY5OlxcdGlmIChfX09OQ0VfTElURV9JRighc2FmZSBcXHUwMDI2XFx1MDAyNiB3cm1zcikpIHtcXG5hcmNoL3g4Ni9tbS9leHRhYmxlLmMtMTcwLVxcdFxcdHByX3dhcm4oXFxcInVuY2hlY2tlZCBNU1IgYWNjZXNzIGVycm9yOiBXUk1TUiB0byAweCV4ICh0cmllZCB0byB3cml0ZSAweCUwOHglMDh4KSBhdCBySVA6IDB4JWx4ICglcFMpXFxcXG5cXFwiLFxcbi0tXFxuYXJjaC94ODYvbW0vZXh0YWJsZS5jLTE3NS1cXG5hcmNoL3g4Ni9tbS9leHRhYmxlLmM6MTc2OlxcdGlmIChfX09OQ0VfTElURV9JRighc2FmZSBcXHUwMDI2XFx1MDAyNiAhd3Jtc3IpKSB7XFxuYXJjaC94ODYvbW0vZXh0YWJsZS5jLTE3Ny1cXHRcXHRwcl93YXJuKFxcXCJ1bmNoZWNrZWQgTVNSIGFjY2VzcyBlcnJvcjogUkRNU1IgZnJvbSAweCV4IGF0IHJJUDogMHglbHggKCVwUylcXFxcblxcXCIsXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTEyMzQ9c3RhdGljIGludCB3YWl0X29uX3NlbShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgdTY0IGRhdGEpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTEyNTQtXFx0XFx0aWYgKGFtZF9pb21tdV9kdW1wKVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6MTI1NTpcXHRcXHRcXHRET19PTkNFX0xJVEUoZHVtcF9jb21tYW5kX2J1ZmZlciwgaW9tbXUpO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMTI1Ni1cXG4tLVxcbmZzL2Vyb2ZzL2ludGVybmFsLmg9NDQ2PWVyb2ZzX2dldF9hb3BzKHN0cnVjdCBpbm9kZSAqcmVhbGlub2RlKVxcbi0tXFxuZnMvZXJvZnMvaW50ZXJuYWwuaC00NTAtXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApO1xcbmZzL2Vyb2ZzL2ludGVybmFsLmg6NDUxOlxcdFxcdERPX09OQ0VfTElURV9JRihyZWFsaW5vZGUtXFx1MDAzZWlfYmxrYml0cyAhPSBQQUdFX1NISUZULFxcbmZzL2Vyb2ZzL2ludGVybmFsLmgtNDUyLVxcdFxcdFxcdCAgZXJvZnNfaW5mbywgcmVhbGlub2RlLVxcdTAwM2VpX3NiLFxcbi0tXFxuZnMveGZzL3hmc19tZXNzYWdlLmg9NTA9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmZzL3hmcy94ZnNfbWVzc2FnZS5oLTU4LSNkZWZpbmUgeGZzX3ByaW50a19vbmNlKGZ1bmMsIGRldiwgZm10LCAuLi4pXFx0XFx0XFx0XFxcXFxcbmZzL3hmcy94ZnNfbWVzc2FnZS5oOjU5OlxcdERPX09OQ0VfTElURShmdW5jLCBkZXYsIGZtdCwgIyNfX1ZBX0FSR1NfXylcXG5mcy94ZnMveGZzX21lc3NhZ2UuaC02MC1cXG4tLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmg9MTAzPWV4dGVybiBfX3ByaW50ZigxLCAyKSB2b2lkIF9fd2Fybl9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pO1xcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaC0xNzktI2RlZmluZSBXQVJOX09OX09OQ0UoY29uZGl0aW9uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oOjE4MDpcXHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOX09OLCAxKVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTgxLSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaC0xODQtI2RlZmluZSBXQVJOX09OQ0UoY29uZGl0aW9uLCBmb3JtYXQuLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmg6MTg1OlxcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk4sIDEsIGZvcm1hdClcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE4Ni0jZW5kaWZcXG4tLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgtMTg4LSNkZWZpbmUgV0FSTl9UQUlOVF9PTkNFKGNvbmRpdGlvbiwgdGFpbnQsIGZvcm1hdC4uLilcXHRcXHRcXFxcXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaDoxODk6XFx0RE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgV0FSTl9UQUlOVCwgMSwgdGFpbnQsIGZvcm1hdClcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oLTE5MC1cXG4tLVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MjojaWZuZGVmIF9MSU5VWF9PTkNFX0xJVEVfSFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MzojZGVmaW5lIF9MSU5VWF9PTkNFX0xJVEVfSFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtNC1cXG4tLVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtOS0gKi9cXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjEwOiNkZWZpbmUgRE9fT05DRV9MSVRFKGZ1bmMsIC4uLilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaDoxMTpcXHRET19PTkNFX0xJVEVfSUYodHJ1ZSwgZnVuYywgIyNfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTEyLVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MTM6I2RlZmluZSBfX09OQ0VfTElURSgpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMTQtXFx0KHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTI0LVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MjU6I2RlZmluZSBfX09OQ0VfTElURV9JRihjb25kaXRpb24pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6MjY6XFx0KHVubGlrZWx5KGNvbmRpdGlvbikgXFx1MDAyNlxcdTAwMjYgX19PTkNFX0xJVEUoKSlcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTI3LVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6Mjg6I2RlZmluZSBET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBmdW5jLCAuLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmgtMjktXFx0KHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTMxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oOjMyOlxcdFxcdGlmIChfX09OQ0VfTElURV9JRihfX3JldF9kb19vbmNlKSlcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9vbmNlX2xpdGUuaC0zMy1cXHRcXHRcXHRmdW5jKF9fVkFfQVJHU19fKTtcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oLTM3LVxcbmluY2x1ZGUvbGludXgvb25jZV9saXRlLmg6Mzg6I2VuZGlmIC8qIF9MSU5VWF9PTkNFX0xJVEVfSCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9wcmludGsuaD00MDc9c3RydWN0IHBpX2VudHJ5IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjQ5LSNkZWZpbmUgcHJpbnRrX29uY2UoZm10LCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmg6NjUwOlxcdERPX09OQ0VfTElURShwcmludGssIGZtdCwgIyNfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oLTY1MS0jZGVmaW5lIHByaW50a19kZWZlcnJlZF9vbmNlKGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oOjY1MjpcXHRET19PTkNFX0xJVEUocHJpbnRrX2RlZmVycmVkLCBmbXQsICMjX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9wcmludGsuaC02NTMtI2Vsc2VcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9Mjc1MD1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2Fzc2VydF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjc1My1cXHRpZiAoV0FSTl9PTkNFKCFza2ItXFx1MDAzZWxlbiwgXFxcIiVzXFxcXG5cXFwiLCBfX2Z1bmNfXykpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoyNzU0OlxcdFxcdERPX09OQ0VfTElURShza2JfZHVtcCwgS0VSTl9FUlIsIHNrYiwgZmFsc2UpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjc1NS0jZW5kaWYgLyogQ09ORklHX0RFQlVHX05FVCAqL1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmg9Mzc9ZW51bSB0cmFjZV90eXBlIHtcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5oLTEyOS0jZGVmaW5lIE1FTV9GQUlMKGNvbmRpdGlvbiwgZm10LCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjEzMDpcXHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBwcl9lcnIsIFxcXCJFUlJPUjogXFxcIiBmbXQsICMjX19WQV9BUkdTX18pXFxua2VybmVsL3RyYWNlL3RyYWNlLmgtMTMxLVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MzYxNz1pbnQgc2tiX2NoZWNrc3VtX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTM2NDUtXFx0aWYgKHVubGlrZWx5KG9mZnNldCBcXHUwMDNlPSBza2JfaGVhZGxlbihza2IpKSkge1xcbm5ldC9jb3JlL2Rldi5jOjM2NDY6XFx0XFx0RE9fT05DRV9MSVRFKHNrYl9kdW1wLCBLRVJOX0VSUiwgc2tiLCBmYWxzZSk7XFxubmV0L2NvcmUvZGV2LmMtMzY0Ny1cXHRcXHRXQVJOX09OQ0UodHJ1ZSwgXFxcIm9mZnNldCAoJWQpIFxcdTAwM2U9IHNrYl9oZWFkbGVuKCkgKCV1KVxcXFxuXFxcIixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTM2NTQtXFx0aWYgKHVubGlrZWx5KG9mZnNldCArIHNpemVvZihfX3N1bTE2KSBcXHUwMDNlIHNrYl9oZWFkbGVuKHNrYikpKSB7XFxubmV0L2NvcmUvZGV2LmM6MzY1NTpcXHRcXHRET19PTkNFX0xJVEUoc2tiX2R1bXAsIEtFUk5fRVJSLCBza2IsIGZhbHNlKTtcXG5uZXQvY29yZS9kZXYuYy0zNjU2LVxcdFxcdFdBUk5fT05DRSh0cnVlLCBcXFwib2Zmc2V0KzIgKCV6dSkgXFx1MDAzZSBza2JfaGVhZGxlbigpICgldSlcXFxcblxcXCIsXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0zNzQwPXZvaWQgbmV0ZGV2X3J4X2NzdW1fZmF1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9kZXYuYy0zNzQxLXtcXG5uZXQvY29yZS9kZXYuYzozNzQyOlxcdERPX09OQ0VfTElURShkb19uZXRkZXZfcnhfY3N1bV9mYXVsdCwgZGV2LCBza2IpO1xcbm5ldC9jb3JlL2Rldi5jLTM3NDMtfVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9MjI3PXN0YXRpYyB2b2lkIHRjcF9tZWFzdXJlX3Jjdl9tc3Moc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMjYzLVxcdFxcdC8qIEFjY291bnQgZm9yIHBvc3NpYmx5LXJlbW92ZWQgb3B0aW9ucyAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjI2NDpcXHRcXHRET19PTkNFX0xJVEVfSUYobGVuIFxcdTAwM2UgaWNzay1cXHUwMDNlaWNza19hY2sucmN2X21zcyArIE1BWF9UQ1BfT1BUSU9OX1NQQUNFLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI2NS1cXHRcXHRcXHRcXHR0Y3BfZ3JvX2Rldl93YXJuLCBzaywgc2tiLCBsZW4pO1xcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmg9MTI1PWRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xNTYtI2RlZmluZSBsaW5rX2Vycl9vbmNlKGxpbmssIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxNTc6XFx0RE9fT05DRV9MSVRFKGxpbmtfZXJyLCBsaW5rLCBmbXQsICMjX19WQV9BUkdTX18pXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMTU4LSNkZWZpbmUgbGlua19pZF9pbmZvKHNkYXRhLCBsaW5rX2lkLCBmbXQsIC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5ydXN0L2tlcm5lbC9wcmludC5ycz00MjY9bWFjcm9fcnVsZXMhIHByX2NvbnQgKFxcbi0tXFxucnVzdC9rZXJuZWwvcHJpbnQucnMtNDMzLS8vL1xcbnJ1c3Qva2VybmVsL3ByaW50LnJzOjQzNDovLy8gVGhpcyBzdHJ1Y3R1cmUgcHJvdmlkZXMgdGhlIFJ1c3QgZXF1aXZhbGVudCBvZiB0aGUga2VybmVsJ3MgYERPX09OQ0VfTElURWAgbWFjcm8uXFxucnVzdC9rZXJuZWwvcHJpbnQucnMtNDM1LS8vLyBXaGlsZSBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBpbXBsZW1lbnQgdGhlIGZlYXR1cmUgZW50aXJlbHkgYXMgYSBSdXN0IG1hY3JvLFxcbi0tXFxucnVzdC9rZXJuZWwvcHJpbnQucnM9NDY4PSAgICBwdWIgZm4gY2FsbF9vbmNlXFx1MDAzY0ZcXHUwMDNlKFxcdTAwMjZzZWxmLCBmOiBGKSAtXFx1MDAzZSBib29sXFxuLS1cXG5ydXN0L2tlcm5lbC9wcmludC5ycy00OTEtLy8vXFxucnVzdC9rZXJuZWwvcHJpbnQucnM6NDkyOi8vLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGtlcm5lbCdzIGBET19PTkNFX0xJVEVgIG1hY3JvLlxcbnJ1c3Qva2VybmVsL3ByaW50LnJzLTQ5My0vLy9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTU6MjA6NTYuMzE4MzE2OTY4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0NzgwNTQxOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWZhY3RvcmluZyBvZiBgX19PTkNFX0xJVEVfSUZgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nIG9mIHRoZSBgX19PTkNFX0xJVEVfSUZgIG1hY3JvIGluIGBpbmNsdWRlL2xpbnV4L29uY2VfbGl0ZS5oYC4gVGhlIG9yaWdpbmFsIHZlcnNpb24gd2FzIGEgYml0IGNsdW5reSwgY29tYmluaW5nIHRoZSBjb25kaXRpb24gY2hlY2sgYW5kIHRoZSBcIm9uY2VcIiBleGVjdXRpb24gd2l0aGluIGEgc2luZ2xlIG1hY3JvLiBUaGlzIHJlZmFjdG9yaW5nIGNsZWFubHkgc2VwYXJhdGVzIHRoZSBjb25kaXRpb24gZXZhbHVhdGlvbiBmcm9tIHRoZSBcIm9uY2VcIiBleGVjdXRpb24gaW50byB0d28gbWFjcm9zOiBgX19PTkNFX0xJVEVfSUYoY29uZGl0aW9uKWAgYW5kIGBfX09OQ0VfTElURSgpYC5cblxuVGhlIGtleSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgX19PTkNFX0xJVEUoKWAsIHdoaWNoIGVuY2Fwc3VsYXRlcyB0aGUgbG9naWMgZm9yIHRoZSBcIm9uY2VcIiBleGVjdXRpb24uICBJdCBjaGVja3MgYSBzdGF0aWMgYm9vbGVhbiB2YXJpYWJsZSwgYF9fYWxyZWFkeV9kb25lYCwgaW4gdGhlIGAuZGF0YS4ub25jZWAgc2VjdGlvbi4gQ3JpdGljYWxseSwgdGhpcyBzdGF0aWMgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCAoemVyby1pbml0aWFsaXplZCksIGFzIGl0IHJlc2lkZXMgaW4gYSBCU1MvZGF0YSBzZWN0aW9uLiBUaGUgY29uZGl0aW9uIGNoZWNrIGluIHRoZSBuZXcgYF9fT05DRV9MSVRFX0lGYCBpcyBub3cgYSBzaW1wbGUgc2hvcnQtY2lyY3VpdCBldmFsdWF0aW9uOiBgdW5saWtlbHkoY29uZGl0aW9uKSBcdTAwMjZcdTAwMjYgX19PTkNFX0xJVEUoKWAuIFRoaXMgbWVhbnMgaWYgdGhlIGNvbmRpdGlvbiBpcyAqdW5saWtlbHkqIHRvIGJlIHRydWUgYW5kIHRoZSAqY29uZGl0aW9uKiBpcyAqdHJ1ZSosIHRoZW4gYF9fT05DRV9MSVRFKClgIHJ1bnMgb25seSBvbmNlLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcywgb2YgY291cnNlLCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQnV0LCByZXZpZXdpbmcgdGhlIGNvZGUsIGl0J3MgY2xlYXIgdGhlcmUgYXJlIG5vbmUuXG5cbiogICBObyBuZXcgbWVtb3J5IGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBvbiBlaXRoZXIgdGhlIHN0YWNrIG9yIHRoZSBoZWFwLlxuKiAgIE5vIGRhdGEgaXMgY29waWVkIHRvIG9yIGZyb20gdXNlcnNwYWNlLCBzbyB0aGVyZSBhcmUgbm8gcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLlxuKiAgIFRoZSBgX19hbHJlYWR5X2RvbmVgIHZhcmlhYmxlIGlzIHN0YXRpYyBhbmQgdGh1cyBpbml0aWFsaXplZCBieSB0aGUgbGlua2VyIHRvIGBmYWxzZWAuXG4qICAgVGhlIGBfX3JldF9vbmNlYCB2YXJpYWJsZSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAuXG4qICAgVGhlIGxvZ2ljIGl0c2VsZiBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBib29sZWFuIGV2YWx1YXRpb24gd2l0aCBhIHN0YXRpYyBmbGFnJ3Mgc3RhdGUgY2hhbmdlLCBzbyB0aGVyZSdzIG5vIHdheSBpdCByZWxpZXMgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuXG5cbkknbSB0aGlua2luZyBhYm91dCBLQVNBTiBhbmQgS01TQU4gaGVyZS4gS0FTQU4gd2lsbCBjYXRjaCBnZW5lcmFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBpbmNsdWRpbmcgcHJvYmxlbXMgd2l0aCBzdGF0aWMgdmFyaWFibGVzLCBhbmQgS01TQU4gaXMgYWxsIGFib3V0IGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoaGVhcCwgc3RhY2ssIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBsZWFrcyB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yOyBpdCBvcHRpbWl6ZXMgdGhlIGV4aXN0aW5nIGxvZ2ljLiBJdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSwgbm9yIGRvZXMgaXQgcmVhZCB1bmluaXRpYWxpemVkIHZhbHVlcy5cblxuVGhlcmVmb3JlLCB0aGlzIHJlZmFjdG9yaW5nIGRvZXMgbm90IG5lZWQgS01TQU4gYW5hbHlzaXMsIGFuZCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLiBJIGNhbiBnbyBhaGVhZCBhbmQgY29uc3RydWN0IHRoZSByZXNwb25zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk5NCwiT3V0cHV0VG9rZW5zIjoxNzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTU6MjE6MDIuNzk2MzczOTc3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBfX09OQ0VfTElURV9JRmAgbWFjcm8gaW4gYGluY2x1ZGUvbGludXgvb25jZV9saXRlLmhgIGludG8gYSBzdGFuZGFsb25lIGBfX09OQ0VfTElURSgpYCBoZWxwZXIgYW5kIHNob3J0LWNpcmN1aXRpbmcgYF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilgLlxcblxcbkFsbCB2YXJpYWJsZXMgdXNlZCB3aXRoaW4gdGhlIG1hY3JvcyAoYF9fYWxyZWFkeV9kb25lYCBpbiBgLmRhdGEuLm9uY2VgIGFuZCBsb2NhbCBib29sZWFuIGBfX3JldF9vbmNlID0gZmFsc2VgKSBhcmUgc3RhdGljIG9yIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCB0b3VjaCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5LCB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcywgbWVtb3J5IGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mb2xlYWtzLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBfX09OQ0VfTElURV9JRmAgbWFjcm8gaW4gYGluY2x1ZGUvbGludXgvb25jZV9saXRlLmhgIGludG8gYSBzdGFuZGFsb25lIGBfX09OQ0VfTElURSgpYCBoZWxwZXIgYW5kIHNob3J0LWNpcmN1aXRpbmcgYF9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbilgLlxcblxcbkFsbCB2YXJpYWJsZXMgdXNlZCB3aXRoaW4gdGhlIG1hY3JvcyAoYF9fYWxyZWFkeV9kb25lYCBpbiBgLmRhdGEuLm9uY2VgIGFuZCBsb2NhbCBib29sZWFuIGBfX3JldF9vbmNlID0gZmFsc2VgKSBhcmUgc3RhdGljIG9yIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCB0b3VjaCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5LCB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcywgbWVtb3J5IGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mb2xlYWtzLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflown8kjs[1] Phase: Succeeded StartedAt: 2026-09-04 15:21:14 +0000 UTC FinishedAt: 2026-09-04 15:21:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8kjs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 15:21:14 +0000 UTC FinishedAt: 2026-09-04 15:21:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8kjs[2] Phase: Succeeded StartedAt: 2026-09-04 15:21:14 +0000 UTC FinishedAt: 2026-09-04 19:07:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 15:21:14 +0000 UTC FinishedAt: 2026-09-04 19:07:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 15:21:14 +0000 UTC FinishedAt: 2026-09-04 15:21:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 15:21:14 +0000 UTC FinishedAt: 2026-09-04 15:21:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},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-workflown8kjs/series-workflown8kjs-convert-artifact-3888732784/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 15:21:24 +0000 UTC FinishedAt: 2026-09-04 15:38:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 15:21:24 +0000 UTC FinishedAt: 2026-09-04 15:38:24 +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:*360cedb7-2c02-452f-9b21-957267f7da87,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-workflown8kjs/series-workflown8kjs-convert-artifact-3888732784/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": "ac377507-9d2e-43c5-a2ce-533df3937289", "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-workflown8kjs/series-workflown8kjs-build-action-2187486582/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 15:21:24 +0000 UTC FinishedAt: 2026-09-04 15:38:14 +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:*360cedb7-2c02-452f-9b21-957267f7da87,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-workflown8kjs/series-workflown8kjs-convert-artifact-3888732784/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": "ac377507-9d2e-43c5-a2ce-533df3937289", "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-workflown8kjs/series-workflown8kjs-build-action-2187486582/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 15:38:24 +0000 UTC FinishedAt: 2026-09-04 15:38:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 15:38:24 +0000 UTC FinishedAt: 2026-09-04 15:38:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 15:38:24 +0000 UTC FinishedAt: 2026-09-04 15:38:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 15:38:24 +0000 UTC FinishedAt: 2026-09-04 15:38:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},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-workflown8kjs/series-workflown8kjs-convert-artifact-641921367/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 15:38:34 +0000 UTC FinishedAt: 2026-09-04 15:40:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 15:38:34 +0000 UTC FinishedAt: 2026-09-04 15:40:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ac377507-9d2e-43c5-a2ce-533df3937289,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-workflown8kjs/series-workflown8kjs-build-action-2187486582/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-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 15:40:28 +0000 UTC FinishedAt: 2026-09-04 15:40:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 15:40:28 +0000 UTC FinishedAt: 2026-09-04 15:40:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 15:40:28 +0000 UTC FinishedAt: 2026-09-04 16:00:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 15:40:28 +0000 UTC FinishedAt: 2026-09-04 16:00:07 +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:*360cedb7-2c02-452f-9b21-957267f7da87,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-workflown8kjs/series-workflown8kjs-convert-artifact-641921367/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": "7e081b71-8be6-4549-b80b-dbe09bb93e77", "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-workflown8kjs/series-workflown8kjs-build-action-3877988507/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 15:40:28 +0000 UTC FinishedAt: 2026-09-04 15:59:57 +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:*360cedb7-2c02-452f-9b21-957267f7da87,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-workflown8kjs/series-workflown8kjs-convert-artifact-641921367/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": "7e081b71-8be6-4549-b80b-dbe09bb93e77", "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-workflown8kjs/series-workflown8kjs-build-action-3877988507/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 16:00:07 +0000 UTC FinishedAt: 2026-09-04 16:00:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 16:00:07 +0000 UTC FinishedAt: 2026-09-04 16:00:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 16:00:07 +0000 UTC FinishedAt: 2026-09-04 16:04:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 16:00:07 +0000 UTC FinishedAt: 2026-09-04 16:03:52 +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:*7e081b71-8be6-4549-b80b-dbe09bb93e77,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-workflown8kjs/series-workflown8kjs-build-action-3877988507/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-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 16:04:02 +0000 UTC FinishedAt: 2026-09-04 19:07:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 16:04:02 +0000 UTC FinishedAt: 2026-09-04 19:07:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"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:*ac377507-9d2e-43c5-a2ce-533df3937289,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7e081b71-8be6-4549-b80b-dbe09bb93e77,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-workflown8kjs/series-workflown8kjs-build-action-2187486582/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-workflown8kjs/series-workflown8kjs-build-action-3877988507/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 16:04:02 +0000 UTC FinishedAt: 2026-09-04 16:04:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 16:04:02 +0000 UTC FinishedAt: 2026-09-04 16:04:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"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-workflown8kjs/series-workflown8kjs-convert-artifact-146402320/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 16:04:02 +0000 UTC FinishedAt: 2026-09-04 16:04:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 16:04:02 +0000 UTC FinishedAt: 2026-09-04 16:04:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 16:04:02 +0000 UTC FinishedAt: 2026-09-04 16:04:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 16:04:12 +0000 UTC FinishedAt: 2026-09-04 19:07:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8kjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netdev_rx_csum_fault","skb_checksum_help","xfs_file_ioctl","xfs_fs_fill_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","series_id":"675503d5-40fa-429d-b086-e980589175c1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 16:04:12 +0000 UTC FinishedAt: 2026-09-04 19:07:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ac377507-9d2e-43c5-a2ce-533df3937289,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7e081b71-8be6-4549-b80b-dbe09bb93e77,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-workflown8kjs/series-workflown8kjs-build-action-2187486582/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-workflown8kjs/series-workflown8kjs-build-action-3877988507/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-workflown8kjs/series-workflown8kjs-convert-artifact-146402320/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,}