Name: series-workflow5wtlk Phase: Succeeded StartedAt: 2026-07-08 14:50:20 +0000 UTC FinishedAt: 2026-07-08 16:27:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wtlk[0] Phase: Succeeded StartedAt: 2026-07-08 14:50:20 +0000 UTC FinishedAt: 2026-07-08 15:13:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wtlk[0].run-triage Phase: Succeeded StartedAt: 2026-07-08 14:50:20 +0000 UTC FinishedAt: 2026-07-08 15:13:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLB_PAGE_OPTIMIZE_VMEMMAP", "HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLB_PAGE_OPTIMIZE_VMEMMAP", "HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON" ], "series_id": "b585f6e3-7305-4ea4-9dbd-1ec957cc0d54" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vmemmap_split_pmd", "vmemmap_remap_pte", "vmemmap_restore_pte", "vmemmap_remap_free", "vmemmap_remap_alloc", "hugetlb_vmemmap_optimization_try_disable", "__hugetlb_vmemmap_restore_folio", "__hugetlb_vmemmap_optimize_folio", "vmemmap_should_optimize_folio", "vmemmap_should_optimize_bootmem_page", "late_cpu_enable_hvo", "hvo_compatible" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQJiMzNDssCiAgICAmIzM0O0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWVtbWFwX3NwbGl0X3BtZCYjMzQ7LAogICAgJiMzNDt2bWVtbWFwX3JlbWFwX3B0ZSYjMzQ7LAogICAgJiMzNDt2bWVtbWFwX3Jlc3RvcmVfcHRlJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfcmVtYXBfZnJlZSYjMzQ7LAogICAgJiMzNDt2bWVtbWFwX3JlbWFwX2FsbG9jJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGUmIzM0OywKICAgICYjMzQ7X19odWdldGxiX3ZtZW1tYXBfcmVzdG9yZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtfX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDt2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDt2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9ib290bWVtX3BhZ2UmIzM0OywKICAgICYjMzQ7bGF0ZV9jcHVfZW5hYmxlX2h2byYjMzQ7LAogICAgJiMzNDtodm9fY29tcGF0aWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIEFSTTY0IHN1cHBvcnQgZm9yIEh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykuIEl0IG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGluIGBtbS9odWdldGxiX3ZtZW1tYXAuY2AgdG8gdXNlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmdW5jdGlvbnMgZm9yIHBvcHVsYXRpbmcgYW5kIHVwZGF0aW5nIHZtZW1tYXAgUE1EcyBhbmQgUFRFcy4gSXQgYWxzbyBhZGRzIENQVSBjYXBhYmlsaXR5IGNoZWNrcyBmb3IgSFZPIG9uIEFSTTY0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCB3aGVuIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgSHVnZVRMQiBwYWdlcyB3aXRoIEhWTyBlbmFibGVkLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNToxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRkZjIzMDU0NjJlYjhmYWI5YWJjYjVmMTJiOTdiMWY5NzBjYmE1OTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDE1OjEyOjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGYzN2E4MTk1MGUyNTBlLi41NWJkNGMwOWY0OTQ5NiAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTEyMDEzLDYgJiM0MzsxMjAxMyw3IEBAIEY6XHREb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG4gRjpcdERvY3VtZW50YXRpb24vbW0vdm1lbW1hcF9kZWR1cC5yc3RcbiBGOlx0ZnMvaHVnZXRsYmZzL1xuIEY6XHRpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuJiM0MztGOlx0aW5jbHVkZS9saW51eC9odWdldGxiX3ZtZW1tYXAuaFxuIEY6XHRpbmNsdWRlL3RyYWNlL2V2ZW50cy9odWdldGxiZnMuaFxuIEY6XHRtbS9odWdldGxiLmNcbiBGOlx0bW0vaHVnZXRsYl9jZ3JvdXAuY1xuQEAgLTEyMDIxLDcgJiM0MzsxMjAyMiw3IEBAIEY6XHRtbS9odWdldGxiX2NtYS5oXG4gRjpcdG1tL2h1Z2V0bGJfc3lzY3RsLmNcbiBGOlx0bW0vaHVnZXRsYl9zeXNmcy5jXG4gRjpcdG1tL2h1Z2V0bGJfdm1lbW1hcC5jXG4tRjpcdG1tL2h1Z2V0bGJfdm1lbW1hcC5oXG4mIzQzO0Y6XHRtbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaFxuIEY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9odWdldGxiX21lbWNnLmNcbiBcbiBIVkEgU1QgTUVESUEgRFJJVkVSXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnXG5pbmRleCBiM2FmZTA2ODg5MTliZC4uMmE1OTE1NWY2OGRjZDggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuQEAgLTI1OSw2ICYjNDM7MjU5LDcgQEAgY29uZmlnIEFSTTY0XG4gXHRzZWxlY3QgVVNFUl9TVEFDS1RSQUNFX1NVUFBPUlRcbiBcdHNlbGVjdCBWRFNPX0dFVFJBTkRPTVxuIFx0c2VsZWN0IFZNQVBfU1RBQ0tcbiYjNDM7XHRzZWxlY3QgQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUCBpZiBBUk02NF9IV19BRkRCTVxuIFx0aGVscFxuIFx0ICBBUk0gNjQtYml0IChBQXJjaDY0KSBMaW51eCBzdXBwb3J0LlxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1Y2Fwcy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVjYXBzLmhcbmluZGV4IDI1YzYxY2RhOTAxYzVkLi42ZGIzZWY4MjdmODZhOSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1Y2Fwcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaFxuQEAgLTc1LDYgJiM0Mzs3NSw4IEBAIGNwdWNhcF9pc19wb3NzaWJsZShjb25zdCB1bnNpZ25lZCBpbnQgY2FwKVxuIFx0XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfSFdfUEVSRl9FVkVOVFMpO1xuIFx0Y2FzZSBBUk02NF9IQVNfTFNVSTpcbiBcdFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0FSTTY0X0xTVUkpO1xuJiM0MztcdGNhc2UgQVJNNjRfSFZPX0NPTVBBVElCTEU6XG4mIzQzO1x0XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHRydWU7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxuaW5kZXggYTU3ODcwZmE5NmRiNWIuLmQxNTA0ODA0ZjJiZWE5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oXG5AQCAtMzY3LDYgJiM0MzszNjcsMTQgQEAgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMge1xuIFx0ICogcm91dGluZSBtdXN0IGNoZWNrIGl0IGJlZm9yZSB0YWtpbmcgYW55IGFjdGlvbi5cbiBcdCAqL1xuIFx0dm9pZCAoKmNwdV9lbmFibGUpKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXApO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSW4gcmFyZSBjYXNlcywgY2FwYWJpbGl0aWVzIGFyZSAqc29tZXRpbWVzKiBvcHRpb25hbCBmb3IgbGF0ZSBDUFVzLlxuJiM0MztcdCAqIFRoaXMgY2FsbGJhY2sgYWxsb3dzIGEgY2FwYWJpbGl0eSB0byBwcmV2ZW50IG9ubGluaW5nIG9mXG4mIzQzO1x0ICogaW5jb21wYXRpYmxlIENQVXMgd2hlbiB0aGUgY2FwYWJpbGl0eSBpcyBpbiBmYWN0IHJlcXVpcmVkLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUmV0dXJucyB0cnVlIGlmZiBvbmxpbmluZyB0aGUgQ1BVIGlzIHBlcm1pdHRlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRib29sICgqbGF0ZV9jcHVfZW5hYmxlKShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwKTtcbiBcdHVuaW9uIHtcbiBcdFx0c3RydWN0IHtcdC8qIFRvIGJlIHVzZWQgZm9yIGVycmF0dW0gaGFuZGxpbmcgb25seSAqL1xuIFx0XHRcdHN0cnVjdCBtaWRyX3JhbmdlIG1pZHJfcmFuZ2U7XG5AQCAtODg1LDYgJiM0Mzs4OTMsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KHZvaWQpXG4gXHRyZXR1cm4gYWx0ZXJuYXRpdmVfaGFzX2NhcF91bmxpa2VseShBUk02NF9IQVNfQkJNTDJfTk9BQk9SVCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc3lzdGVtX3N1cHBvcnRzX2h2byh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGFsdGVybmF0aXZlX2hhc19jYXBfdW5saWtlbHkoQVJNNjRfSFZPX0NPTVBBVElCTEUpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBkb19lbXVsYXRlX21ycyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTMyIHN5c19yZWcsIHUzMiBydCk7XG4gYm9vbCB0cnlfZW11bGF0ZV9tcnMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHUzMiBpc24pO1xuIFxuQEAgLTkxMCwyMiAmIzQzOzkyMywzNiBAQCBzdGF0aWMgaW5saW5lIHUzMiBpZF9hYTY0bW1mcjBfcGFyYW5nZV90b19waHlzX3NoaWZ0KGludCBwYXJhbmdlKVxuIH1cbiBcbiAvKiBDaGVjayB3aGV0aGVyIGhhcmR3YXJlIHVwZGF0ZSBvZiB0aGUgQWNjZXNzIGZsYWcgaXMgc3VwcG9ydGVkICovXG4tc3RhdGljIGlubGluZSBib29sIGNwdV9oYXNfaHdfYWYodm9pZClcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHN1cHBvcnRzX2h3X2FmKGludCBzY29wZSlcbiB7XG4gXHR1NjQgbW1mcjE7XG4gXG4gXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FSTTY0X0hXX0FGREJNKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0Lypcbi1cdCAqIFVzZSBjYWNoZWQgdmVyc2lvbiB0byBhdm9pZCBlbXVsYXRlZCBtc3Igb3BlcmF0aW9uIG9uIEtWTVxuLVx0ICogZ3Vlc3RzLlxuLVx0ICovXG4tXHRtbWZyMSA9IHJlYWRfc2FuaXRpc2VkX2Z0cl9yZWcoU1lTX0lEX0FBNjRNTUZSMV9FTDEpO1xuJiM0MztcdGlmIChzY29wZSA9PSBTQ09QRV9TWVNURU0pIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBVc2UgY2FjaGVkIHZlcnNpb24gdG8gYXZvaWQgZW11bGF0ZWQgbXNyIG9wZXJhdGlvbiBvbiBLVk1cbiYjNDM7XHRcdCAqIGd1ZXN0cy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bW1mcjEgPSByZWFkX3Nhbml0aXNlZF9mdHJfcmVnKFNZU19JRF9BQTY0TU1GUjFfRUwxKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0bW1mcjEgPSByZWFkX2NwdWlkKElEX0FBNjRNTUZSMV9FTDEpO1xuJiM0MztcdH1cbiBcdHJldHVybiBjcHVpZF9mZWF0dXJlX2V4dHJhY3RfdW5zaWduZWRfZmllbGQobW1mcjEsXG4gXHRcdFx0XHRcdFx0SURfQUE2NE1NRlIxX0VMMV9IQUZEQlNfU0hJRlQpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHN5c3RlbV9oYXNfaHdfYWYodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzdXBwb3J0c19od19hZihTQ09QRV9TWVNURU0pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgY3B1X2hhc19od19hZih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN1cHBvcnRzX2h3X2FmKFNDT1BFX0xPQ0FMX0NQVSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBib29sIGNwdV9oYXNfcGFuKHZvaWQpXG4ge1xuIFx0dTY0IG1tZnIxID0gcmVhZF9jcHVpZChJRF9BQTY0TU1GUjFfRUwxKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oXG5pbmRleCBkMDM4ZmYxNGQxNmNhZS4uNzNhZjc5MTFmZDgzMTMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmhcbkBAIC0xMSw2ICYjNDM7MTEsNyBAQFxuICNkZWZpbmUgX19BU01fSFVHRVRMQl9IXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2NhY2hlZmx1c2guaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20vY3B1ZmVhdHVyZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL210ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuIFxuQEAgLTY1LDYgJiM0Mzs2NiwxMiBAQCBleHRlcm4gdm9pZCBodWdlX3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcbiBcdFx0XHRcdFx0IHB0ZV90IG9sZF9wdGUsIHB0ZV90IG5ld19wdGUpO1xuIFxuJiM0MzsjZGVmaW5lIF9fSEFWRV9BUkNIX0hWT19TVVBQT1JURURcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGFyY2hfaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl9zdXBwb3J0ZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzeXN0ZW1fc3VwcG9ydHNfaHZvKCk7XG4mIzQzO31cbiYjNDM7XG4gI2luY2x1ZGUgXHUwMDNjYXNtLWdlbmVyaWMvaHVnZXRsYi5oXHUwMDNlXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfaHVnZXRsYl90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuaW5kZXggMWI0NTA5ZDMzODJjNjMuLjI2YjA1ZjhiNzBjZDJlIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5AQCAtMTIxLDQgJiM0MzsxMjEsNTggQEAgcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCwgcGd0YWJsZV90IHB0ZXApXG4gXHRcdCAgICAgICBQTURfVFlQRV9UQUJMRSB8IFBNRF9UQUJMRV9BRiB8IFBNRF9UQUJMRV9QWE4pO1xuIH1cbiBcbiYjNDM7I2RlZmluZSBfX0hBVkVfQVJDSF9UUllfUE9QVUxBVEVfVk1FTU1BUF9QTURcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgdHJ5X3BvcHVsYXRlX3ZtZW1tYXBfcG1kKHBtZF90ICpwbWRwLCBwdGVfdCAqcGd0YWJsZSxcbiYjNDM7XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGludCBtYXhfYXR0ZW1wdHMgPSAxNjtcbiYjNDM7XHRpbnQgYXR0ZW1wdHMgPSAwO1xuJiM0MztcdHBtZF90IG9sZF9wbWQsIG5ld19wbWQ7XG4mIzQzO1xuJiM0MztcdGlmICghc3lzdGVtX3N1cHBvcnRzX2h2bygpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRpZiAoc3lzdGVtX3N1cHBvcnRzX2JibWwyX25vYWJvcnQoKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEJCTUwyX05PQUJPUlQgYWxsb3dzIGJsb2NrLVx1MDAzZXRhYmxlIHRyYW5zaXRpb25zIGlmIHRoZSBQVEVzXG4mIzQzO1x0XHQgKiB1bmRlcm5lYXRoIGRvIG5vdCBjb25mbGljdCB3aXRoIGV4aXN0aW5nLCBwb3RlbnRpYWxseSBjYWNoZWRcbiYjNDM7XHRcdCAqIHRyYW5zbGF0aW9ucy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cG1kX3BvcHVsYXRlX2tlcm5lbChcdTAwMjZpbml0X21tLCBwbWRwLCBwZ3RhYmxlKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bmV3X3BtZCA9IF9fcG1kKF9fcGh5c190b19wbWRfdmFsKF9fcGEocGd0YWJsZSkpIHxcbiYjNDM7XHRcdFx0UE1EX1RZUEVfVEFCTEUgfCBQTURfVEFCTEVfQUYgfCBQTURfVEFCTEVfVVhOKTtcbiYjNDM7XG4mIzQzO1x0b2xkX3BtZCA9IHBtZHBfZ2V0KHBtZHApO1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFKCFwbWRfdmFsaWQob2xkX3BtZCkpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFKCFwbWRfbGVhZihvbGRfcG1kKSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdC8qIFdlIHNob3VsZCBuZXZlciBnZXQgYSBjb250aWd1b3VzIFBNRCBoZXJlLiAqL1xuJiM0MztcdFx0aWYgKFdBUk5fT05fT05DRShwbWRfY29udChvbGRfcG1kKSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwbWRfeW91bmcob2xkX3BtZCkpIHtcbiYjNDM7XHRcdFx0LyogX19wdGVwX2NsZWFyX3lvdW5nKCkgcmV0dXJucyB0aGUgb3ZlcndyaXR0ZW4gUFRFICovXG4mIzQzO1x0XHRcdG9sZF9wbWQgPSBwdGVfcG1kKHB0ZV9ta29sZChfX3B0ZXBfY2xlYXJfeW91bmcoKHB0ZV90ICopcG1kcCkpKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UoYWRkciwgYWRkciAmIzQzOyBQTURfU0laRSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUcmFuc2xhdGlvbnMgd2l0aG91dCBBRiBjYW5ub3QgYmUgY2FjaGVkLCBzbyB3ZSBjYW4gcmVwbGFjZVxuJiM0MztcdCAqIHRoZW0gd2l0aG91dCBCQk0uXG4mIzQzO1x0ICovXG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnX3JlbGF4ZWQoXHUwMDI2cG1kX3ZhbCgqcG1kcCksIFx1MDAyNnBtZF92YWwob2xkX3BtZCksXG4mIzQzO1x0XHRcdFx0ICAgICAgcG1kX3ZhbChuZXdfcG1kKSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgJiM0MzsmIzQzO2F0dGVtcHRzIFx1MDAzYyBtYXhfYXR0ZW1wdHMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYXR0ZW1wdHMgPT0gbWF4X2F0dGVtcHRzID8gLUVBR0FJTiA6IDA7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggMjc2ODljNjJiZDI1ZGQuLjdiMTFhYTQxZDBhMDc0IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMTMwMiw4ICYjNDM7MTMwMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3B0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdF9fc2V0X3B0ZShwdGVwLCBfX3B0ZSgwKSk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApXG4mIzQzO3N0YXRpYyBpbmxpbmUgcHRlX3QgX19wdGVwX2NsZWFyX3lvdW5nKHB0ZV90ICpwdGVwKVxuIHtcbiBcdHB0ZV90IG9sZF9wdGUsIHB0ZTtcbiBcbkBAIC0xMzE1LDcgJiM0MzsxMzE0LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHRcdCAgICAgICBwdGVfdmFsKG9sZF9wdGUpLCBwdGVfdmFsKHB0ZSkpO1xuIFx0fSB3aGlsZSAocHRlX3ZhbChwdGUpICE9IHB0ZV92YWwob2xkX3B0ZSkpO1xuIFxuLVx0cmV0dXJuIHB0ZV95b3VuZyhwdGUpO1xuJiM0MztcdHJldHVybiBwdGU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHB0ZV95b3VuZyhfX3B0ZXBfY2xlYXJfeW91bmcocHRlcCkpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgX19wdGVwX2NsZWFyX2ZsdXNoX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuQEAgLTE1OTgsNyAmIzQzOzE2MDMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbiAgKiBwYWdlIGFmdGVyIGZvcmsoKSAmIzQzOyBDb1cgZm9yIHBmbiBtYXBwaW5ncy4gV2UgZG9uJiMzOTt0IGFsd2F5cyBoYXZlIGFcbiAgKiBoYXJkd2FyZS1tYW5hZ2VkIGFjY2VzcyBmbGFnIG9uIGFybTY0LlxuICAqL1xuLSNkZWZpbmUgYXJjaF9oYXNfaHdfcHRlX3lvdW5nXHRcdGNwdV9oYXNfaHdfYWZcbiYjNDM7I2RlZmluZSBhcmNoX2hhc19od19wdGVfeW91bmdcdFx0c3lzdGVtX2hhc19od19hZlxuIFxuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTk9OTEVBRl9QTURfWU9VTkdcbiAjZGVmaW5lIGFyY2hfaGFzX2h3X25vbmxlYWZfcG1kX3lvdW5nXHRzeXN0ZW1fc3VwcG9ydHNfaGFmdFxuQEAgLTE2MDgsNyAmIzQzOzE2MTMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbiAgKiBFeHBlcmltZW50YWxseSwgaXQmIzM5O3MgY2hlYXAgdG8gc2V0IHRoZSBhY2Nlc3MgZmxhZyBpbiBoYXJkd2FyZSBhbmQgd2VcbiAgKiBiZW5lZml0IGZyb20gcHJlZmF1bHRpbmcgbWFwcGluZ3MgYXMgJiMzOTtvbGQmIzM5OyB0byBzdGFydCB3aXRoLlxuICAqL1xuLSNkZWZpbmUgYXJjaF93YW50c19vbGRfcHJlZmF1bHRlZF9wdGVcdGNwdV9oYXNfaHdfYWZcbiYjNDM7I2RlZmluZSBhcmNoX3dhbnRzX29sZF9wcmVmYXVsdGVkX3B0ZVx0c3lzdGVtX2hhc19od19hZlxuIFxuIC8qXG4gICogUmVxdWVzdCBleGVjIG1lbW9yeSBpcyByZWFkIGludG8gcGFnZWNhY2hlIGluIGF0IGxlYXN0IDY0SyBmb2xpb3MuIFRoaXMgc2l6ZVxuQEAgLTE3OTMsNiAmIzQzOzE3OTgsNDggQEAgc3RhdGljIGlubGluZSB2b2lkIHB0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdF9fcHRlX2NsZWFyKG1tLCBhZGRyLCBwdGVwKTtcbiB9XG4gXG4mIzQzOyNkZWZpbmUgX19IQVZFX0FSQ0hfVFJZX1VQREFURV9WTUVNTUFQX1BURVxuJiM0MztzdGF0aWMgaW5saW5lIGludCB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4mIzQzO1x0XHRcdFx0XHQgY29uc3QgcHRlX3QgcHRlKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgaW50IG1heF9hdHRlbXB0cyA9IDE2O1xuJiM0MztcdGludCBhdHRlbXB0cyA9IDA7XG4mIzQzO1x0cHRlX3Qgb2xkX3B0ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzeXN0ZW1fc3VwcG9ydHNfaHZvKCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdC8qIFRoaXMgcm91dGluZSBpcyBvbmx5IHRvIGJlIHVzZWQgZm9yIHZhbGlkLXRvLXZhbGlkIHRyYW5zaXRpb25zLiAqL1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIXB0ZV92YWxpZChwdGUpKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRvbGRfcHRlID0gX19wdGVwX2dldChwdGVwKTtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0aWYgKFdBUk5fT05fT05DRSghcHRlX3ZhbGlkKG9sZF9wdGUpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0LyogV2Ugc2hvdWxkIG5ldmVyIGdldCBhIGNvbnRpZ3VvdXMgUFRFIGhlcmUuICovXG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFKHB0ZV92YWxpZF9jb250KG9sZF9wdGUpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHB0ZV95b3VuZyhvbGRfcHRlKSkge1xuJiM0MztcdFx0XHQvKiBfX3B0ZXBfY2xlYXJfeW91bmcoKSByZXR1cm5zIHRoZSBvdmVyd3JpdHRlbiBQVEUgKi9cbiYjNDM7XHRcdFx0b2xkX3B0ZSA9IHB0ZV9ta29sZChfX3B0ZXBfY2xlYXJfeW91bmcocHRlcCkpO1xuJiM0MztcbiYjNDM7XHRcdFx0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShhZGRyLCBhZGRyICYjNDM7IFBBR0VfU0laRSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUcmFuc2xhdGlvbnMgd2l0aG91dCBBRiBjYW5ub3QgYmUgY2FjaGVkLCBzbyB3ZSBjYW4gcmVwbGFjZVxuJiM0MztcdCAqIHRoZW0gd2l0aG91dCBCQk0uXG4mIzQzO1x0ICovXG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnX3JlbGF4ZWQoXHUwMDI2cHRlX3ZhbCgqcHRlcCksIFx1MDAyNnB0ZV92YWwob2xkX3B0ZSksXG4mIzQzO1x0XHRcdFx0ICAgICAgcHRlX3ZhbChwdGUpKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAmIzQzOyYjNDM7YXR0ZW1wdHMgXHUwMDNjIG1heF9hdHRlbXB0cyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhdHRlbXB0cyA9PSBtYXhfYXR0ZW1wdHMgPyAtRUFHQUlOIDogMDtcbiYjNDM7fVxuJiM0MztcbiAjZGVmaW5lIGNsZWFyX2Z1bGxfcHRlcyBjbGVhcl9mdWxsX3B0ZXNcbiBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfZnVsbF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHRwdGVfdCAqcHRlcCwgdW5zaWduZWQgaW50IG5yLCBpbnQgZnVsbClcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNcbmluZGV4IDlhMjJkZjBjNTEyMGYzLi42NWJiM2M3Yzk1OTUyYiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXG5AQCAtNzYsNiAmIzQzOzc2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rYXNhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyY3B1LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9pc29sYXRpb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdldGxiX3ZtZW1tYXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9hcm1fcG11djMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9jcHUuaFx1MDAzZVxuQEAgLTIxNzIsNiAmIzQzOzIxNzMsMzEgQEAgc3RhdGljIGJvb2wgaGFzX2JibWwyX25vYWJvcnQoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmNhcHMsIGludCBzY29cbiBcdHJldHVybiBjcHVfc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgaHZvX2NvbXBhdGlibGUoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmNhcHMsIGludCBzY29wZSlcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2UgbmVlZCBIVyBBRiBzdXBwb3J0IHRvIHN1cHBvcnQgY2hhbmdpbmcgdm1lbW1hcCBtYXBwaW5nIGxldmVsIGFuZFxuJiM0MztcdCAqIE9BIHdpdGhvdXQgdGFraW5nIGZhdWx0cy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gc3VwcG9ydHNfaHdfYWYoc2NvcGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBsYXRlX2NwdV9lbmFibGVfaHZvKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG4mIzQzO1x0aWYgKGNwdV9oYXNfaHdfYWYoKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSBDUFUgZG9lcyBub3Qgc3VwcG9ydCBIVyBBRiwgd2UgY2Fubm90IG9ubGluZSBpdCBpZiBIVk8gaXNcbiYjNDM7XHQgKiBjdXJyZW50bHkgaW4gdXNlLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKCk7XG4mIzQzOyNlbHNlXG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGNwdV9lbmFibGVfcGFuKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcbiB7XG4gXHQvKlxuQEAgLTMwNjcsNiAmIzQzOzMwOTMsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2ZlYXR1cmVzW10gPSB7XG4gXHRcdC50eXBlID0gQVJNNjRfQ1BVQ0FQX0VBUkxZX0xPQ0FMX0NQVV9GRUFUVVJFLFxuIFx0XHQubWF0Y2hlcyA9IGhhc19iYm1sMl9ub2Fib3J0LFxuIFx0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQuZGVzYyA9IFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gU3VwcG9ydFwmIzM0OyxcbiYjNDM7XHRcdC5jYXBhYmlsaXR5ID0gQVJNNjRfSFZPX0NPTVBBVElCTEUsXG4mIzQzO1x0XHQudHlwZSA9IEFSTTY0X0NQVUNBUF9TQ09QRV9TWVNURU0gfFxuJiM0MztcdFx0XHRBUk02NF9DUFVDQVBfT1BUSU9OQUxfRk9SX0xBVEVfQ1BVIHxcbiYjNDM7XHRcdFx0QVJNNjRfQ1BVQ0FQX1BFUk1JVFRFRF9GT1JfTEFURV9DUFUsXG4mIzQzO1x0XHQubWF0Y2hlcyA9IGh2b19jb21wYXRpYmxlLFxuJiM0MztcdFx0LmxhdGVfY3B1X2VuYWJsZSA9IGxhdGVfY3B1X2VuYWJsZV9odm8sXG4mIzQzO1x0fSxcbiBcdHtcbiBcdFx0LmRlc2MgPSBcJiMzNDs1Mi1iaXQgVmlydHVhbCBBZGRyZXNzaW5nIGZvciBLVk0gKExQQTIpXCYjMzQ7LFxuIFx0XHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU19MUEEyLFxuQEAgLTM2NjksNiAmIzQzOzM3MDQsMTQgQEAgc3RhdGljIHZvaWQgdmVyaWZ5X2xvY2FsX2NwdV9jYXBzKHUxNiBzY29wZV9tYXNrKVxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmICghY3B1X2hhc19jYXAgXHUwMDI2XHUwMDI2ICFjcHVjYXBfbGF0ZV9jcHVfb3B0aW9uYWwoY2FwcykpXG4gXHRcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFNvbWUgb3B0aW9uYWwgZmVhdHVyZXMgbWF5IGluIGZhY3QgYmUgcmVxdWlyZWQgZHVlXG4mIzQzO1x0XHRcdCAqIHRvIHBhcnRpY3VsYXIgcnVudGltZSBjb25kaXRpb25zLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKGNhcHMtXHUwMDNlbGF0ZV9jcHVfZW5hYmxlIFx1MDAyNlx1MDAyNiAhY2Fwcy1cdTAwM2VsYXRlX2NwdV9lbmFibGUoY2FwcykpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogV2UgaGF2ZSB0byBpc3N1ZSBjcHVfZW5hYmxlKCkgaXJyZXNwZWN0aXZlIG9mXG4gXHRcdFx0ICogd2hldGhlciB0aGUgQ1BVIGhhcyBpdCBvciBub3QsIGFzIGl0IGlzIGVuYWJlbGRcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHMgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcbmluZGV4IDliODVhODRmNmZkNDk0Li42MzA5NTNkNTljNTI3NiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC90b29scy9jcHVjYXBzXG5AQCAtNzAsNiAmIzQzOzcwLDcgQEAgSEFTX1ZJUlRfSE9TVF9FWFROXG4gSEFTX1dGWFRcbiBIQVNfWE5YXG4gSEFGVFxuJiM0MztIVk9fQ09NUEFUSUJMRVxuIEhXX0RCTVxuIEtWTV9IVkhFXG4gS1ZNX1BST1RFQ1RFRF9NT0RFXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5pbmRleCAyNDhmNjJkMGI1OTBlYy4uOTMyMmQ5NjJjOWNjODAgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuQEAgLTI0LDYgJiM0MzsyNCwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLCBwZ3RhYmxlX3QgcHRlKVxuIFx0c2V0X3BtZChwbWQsIF9fcG1kKCh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwdGUpKSk7XG4gfVxuIFxuJiM0MzsjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9QT1BVTEFURV9WTUVNTUFQX1BNRFxuJiM0MztzdGF0aWMgaW5saW5lIGludCB0cnlfcG9wdWxhdGVfdm1lbW1hcF9wbWQocG1kX3QgKnBtZHAsIHB0ZV90ICpwZ3RhYmxlLFxuJiM0MztcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0cG1kX3BvcHVsYXRlX2tlcm5lbChcdTAwMjZpbml0X21tLCBwbWRwLCBwZ3RhYmxlKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERURcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgcHVkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkLCBwbWRfdCAqcG1kKVxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggMjIzNTI4YzA0ZDczOTIuLmU3YjY1MDU2ZWY3Mzg0IDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC02MzgsNiAmIzQzOzYzOCwxNCBAQCBzdGF0aWMgaW5saW5lIGxvbmcgcG1kX3Byb3Rub25lKHBtZF90IHBtZClcbiAjZGVmaW5lIHBtZF9sZWFmKHBtZClcdFx0KChwbWRfdmFsKHBtZCkgXHUwMDI2IF9QQUdFX0hVR0UpICE9IDApXG4gI2RlZmluZSBwdWRfbGVhZihwdWQpXHRcdCgocHVkX3ZhbChwdWQpIFx1MDAyNiBfUEFHRV9IVUdFKSAhPSAwKVxuIFxuJiM0MzsjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9VUERBVEVfVk1FTU1BUF9QVEVcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuJiM0MztcdFx0XHRcdFx0IHB0ZV90IHB0ZSlcbiYjNDM7e1xuJiM0MztcdHNldF9wdGUocHRlcCwgcHRlKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFdlIHByb3ZpZGUgb3VyIG93biBnZXRfdW5tYXBwZWQgYXJlYSB0byBjb3BlIHdpdGggdGhlIHZpcnR1YWwgYWxpYXNpbmdcbiAgKiBjb25zdHJhaW50cyBwbGFjZWQgb24gdXMgYnkgdGhlIGNhY2hlIGFyY2hpdGVjdHVyZS5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5pbmRleCA3NzBjZTE4YTczMjhiOC4uOGRiYmU2MmIyNTc0MjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbkBAIC0zMSw2ICYjNDM7MzEsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdHNldF9wbWQocG1kLCBfX3BtZCgocGZuIFx1MDAzY1x1MDAzYyBfUEFHRV9QRk5fU0hJRlQpIHwgX1BBR0VfVEFCTEUpKTtcbiB9XG4gXG4mIzQzOyNkZWZpbmUgX19IQVZFX0FSQ0hfVFJZX1BPUFVMQVRFX1ZNRU1NQVBfUE1EXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWRfdCAqcG1kcCwgcHRlX3QgKnBndGFibGUsXG4mIzQzO1x0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFkZHIpXG4mIzQzO3tcbiYjNDM7XHRwbWRfcG9wdWxhdGVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHBtZHAsIHBndGFibGUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuICNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQsIHBtZF90ICpwbWQpXG4ge1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDVkNTc1NmJkYTgyZTNkLi5hMTFjNTY5ZWUyZjA2ZiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTExNjIsNiAmIzQzOzExNjIsMTQgQEAgc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbW9kaWZ5KHB1ZF90IHB1ZCwgcGdwcm90X3QgbmV3cHJvdClcbiBcbiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4gXG4mIzQzOyNkZWZpbmUgX19IQVZFX0FSQ0hfVFJZX1VQREFURV9WTUVNTUFQX1BURVxuJiM0MztzdGF0aWMgaW5saW5lIGludCB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4mIzQzO1x0XHRcdFx0XHQgcHRlX3QgcHRlKVxuJiM0Mzt7XG4mIzQzO1x0c2V0X3B0ZShwdGVwLCBwdGUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogRW5jb2RlL2RlY29kZSBzd2FwIGVudHJpZXMgYW5kIHN3YXAgUFRFcy4gU3dhcCBQVEVzIGFyZSBhbGwgUFRFcyB0aGF0XG4gICogYXJlICFwdGVfbm9uZSgpIFx1MDAyNlx1MDAyNiAhcHRlX3ByZXNlbnQoKS5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbmluZGV4IGM4ODY5MWIxNWYzYzY3Li40N2I1NmJiZDYyMzYxNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5AQCAtODIsNiAmIzQzOzgyLDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsXG4gXHRzZXRfcG1kKHBtZCwgX19wbWQoKChwdGV2YWxfdClwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpIHwgX1BBR0VfVEFCTEUpKTtcbiB9XG4gXG4mIzQzOyNkZWZpbmUgX19IQVZFX0FSQ0hfVFJZX1BPUFVMQVRFX1ZNRU1NQVBfUE1EXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWRfdCAqcG1kcCwgcHRlX3QgKnBndGFibGUsXG4mIzQzO1x0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFkZHIpXG4mIzQzO3tcbiYjNDM7XHRwbWRfcG9wdWxhdGVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHBtZHAsIHBndGFibGUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuICNpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDJcbiBleHRlcm4gdm9pZCBfX19wbWRfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcG1kX3QgKnBtZCk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCBhYzI5NWNhNmM5MmY5OS4uOTc0MTUxNTY0MDcxY2IgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTEzNzIsNiAmIzQzOzEzNzIsMTQgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiB9XG4gI2VuZGlmXG4gXG4mIzQzOyNkZWZpbmUgX19IQVZFX0FSQ0hfVFJZX1VQREFURV9WTUVNTUFQX1BURVxuJiM0MztzdGF0aWMgaW5saW5lIGludCB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4mIzQzO1x0XHRcdFx0XHQgcHRlX3QgcHRlKVxuJiM0Mzt7XG4mIzQzO1x0c2V0X3B0ZShwdGVwLCBwdGUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oXG5pbmRleCBlMWEyZTFiN2M4ZTdiOC4uYzQ3OTZjNTRiNzAyYTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmhcbkBAIC0xMjgsNCAmIzQzOzEyOCwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCh2b2lkKVxuIH1cbiAjZW5kaWYgLyogX19IQVZFX0FSQ0hfR0lHQU5USUNfUEFHRV9SVU5USU1FX1NVUFBPUlRFRCAqL1xuIFxuJiM0MzsjaWZuZGVmIF9fSEFWRV9BUkNIX0hWT19TVVBQT1JURURcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGFyY2hfaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl9zdXBwb3J0ZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUCk7XG4mIzQzO31cbiYjNDM7I2VuZGlmIC8qIF9fSEFWRV9BUkNIX0hWT19TVVBQT1JURUQgKi9cbiYjNDM7XG4gI2VuZGlmIC8qIF9BU01fR0VORVJJQ19IVUdFVExCX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiX3ZtZW1tYXAuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hNjcxZWI0YTRmZjQ2NlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdldGxiX3ZtZW1tYXAuaFxuQEAgLTAsMCAmIzQzOzEsMjAgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7I2lmbmRlZiBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0hcbiYjNDM7I2RlZmluZSBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbiYjNDM7XG4mIzQzO2Jvb2wgaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZSh2b2lkKTtcbiYjNDM7XG4mIzQzOyNlbHNlIC8qIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUCAqL1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGUodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaCBiL2luY2x1ZGUvbGludXgvcGdhbGxvYy5oXG5pbmRleCA5MTc0ZmE1OWJiYzU0ZC4uZWQ0NDZkOTVjYTM3MzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmhcbkBAIC0yNiw0ICYjNDM7MjYsMjQgQEBcbiBcdFx0XHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKGFkZHIsIGFkZHIpO1x0XHRcXFxuIFx0fSB3aGlsZSAoMClcbiBcbiYjNDM7I2lmbmRlZiBfX0hBVkVfQVJDSF9UUllfUE9QVUxBVEVfVk1FTU1BUF9QTURcbiYjNDM7LypcbiYjNDM7ICogdHJ5X3BvcHVsYXRlX3ZtZW1tYXBfcG1kIC0gUG9wdWxhdGUgYSBQTUQgdGhhdCBpcyBpbiB1c2UgYnkgdGhlIHZtZW1tYXAuXG4mIzQzOyAqIEBhZGRyOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHJlbWFwcGVkIFBNRC5cbiYjNDM7ICogQHBtZHA6IFBhZ2UgdGFibGUgcG9pbnRlciB0byBiZSBvdmVyd3JpdHRlbi5cbiYjNDM7ICogQHBndGFibGU6IFBvaW50ZXIgdG8gdGhlIHBhZ2UgdGFibGUgdGhhdCB0aGUgbmV3IFBNRCB3aWxsIHBvaW50IHRvLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdG8gYmUgdXNlZCB0byB1cGRhdGUgUE1EcyB0aGF0IG1hcCB0aGUgdm1lbW1hcCB0b1xuJiM0MzsgKiBwb2ludCB0byBhIHBhZ2Ugb2YgYWxyZWFkeS1wb3B1bGF0ZWQgUFRFcyB0aGF0IG1hcCB0aGUgc2FtZSBwYWdlcy5cbiYjNDM7ICpcbiYjNDM7ICogSW1wbGVtZW50YXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gbXVzdCBlbnN1cmUgdGhhdCwgd2hpbGUgdGhlIHVwZGF0ZSBpcyB0YWtpbmdcbiYjNDM7ICogcGxhY2UsIENQVXMgd2lsbCBub3QgZmF1bHQgb24gdGhlIHJlbWFwcGVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWRfdCAqcG1kcCwgcHRlX3QgKnBndGFibGUsXG4mIzQzO1x0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFkZHIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuICNlbmRpZiAvKiBfTElOVVhfUEdBTExPQ19IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxuaW5kZXggMjk4MWUzODZkYTdiM2MuLmUxYWJjY2Y3NmJiNDYzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5AQCAtNDU3LDYgJiM0Mzs0NTcsMjcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gI2VuZGlmXG4gI2RlZmluZSBzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBwdGUpIHNldF9wdGVzKG1tLCBhZGRyLCBwdGVwLCBwdGUsIDEpXG4gXG4mIzQzOyNpZm5kZWYgX19IQVZFX0FSQ0hfVFJZX1VQREFURV9WTUVNTUFQX1BURVxuJiM0MzsvKlxuJiM0MzsgKiB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlIC0gUmVtYXAgUFRFcyB1c2VkIGJ5IHRoZSB2bWVtbWFwLlxuJiM0MzsgKiBAYWRkcjogQmFzZSBhZGRyZXNzIG9mIHRoZSByZW1hcHBlZCBQVEUuXG4mIzQzOyAqIEBwdGVwOiBQYWdlIHRhYmxlIHBvaW50ZXIgdG8gYmUgb3ZlcndyaXR0ZW4uXG4mIzQzOyAqIEBwdGU6IFBhZ2UgdGFibGUgZW50cnkgdG8gd3JpdGUuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSB0byBiZSB1c2VkIHRvIHVwZGF0ZSBQVEVzIHRoYXQgbWFwIHRoZSB2bWVtbWFwLiBUaGVcbiYjNDM7ICogb25seSB2YWxpZCB0cmFuc2l0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBmdW5jdGlvbiBhcmU6IGxlYWYtbGV2ZWxcbiYjNDM7ICogKFBBR0VfU0laRSksIHZhbGlkLXRvLXZhbGlkLiBUaGUgcGZuIGFuZCBwcm90IGJpdHMgbWF5IGJlIGNoYW5nZWQuXG4mIzQzOyAqXG4mIzQzOyAqIEltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgZW5zdXJlIHRoYXQsIHdoaWxlIHRoZSB1cGRhdGUgaXMgdGFraW5nXG4mIzQzOyAqIHBsYWNlLCBDUFVzIHdpbGwgbm90IGZhdWx0IG9uIHRoZSByZW1hcHBlZCB2aXJ0dWFsIGFkZHJlc3MuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4mIzQzO1x0XHRcdFx0XHQgcHRlX3QgcHRlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAjaWZuZGVmIF9fSEFWRV9BUkNIX1BURVBfU0VUX0FDQ0VTU19GTEFHU1xuIGV4dGVybiBpbnQgcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXAsXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA1NzEyMTJiODA4MzVlYy4uMjk4NjczYTZjNTdjNWMgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTQ3LDcgJiM0Mzs0Nyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbm9kZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9vd25lci5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2V0bGJfdm1lbW1hcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aHVnZXRsYl9jbWEuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2h1Z2V0bGJfaW50ZXJuYWwuaFwmIzM0O1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmhcdTAwM2VcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiX3N5c2ZzLmMgYi9tbS9odWdldGxiX3N5c2ZzLmNcbmluZGV4IDc5ZWNlOTE0MDZiZmE0Li44M2E5NWY1MTQyZjVhNCAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGJfc3lzZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYl9zeXNmcy5jXG5AQCAtOCw3ICYjNDM7OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9vd25lci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZS1pc29sYXRpb24uaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwmIzM0O2h1Z2V0bGJfdm1lbW1hcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aHVnZXRsYl9pbnRlcm5hbC5oXCYjMzQ7XG4gXG4gI2RlZmluZSBIU1RBVEVfQVRUUl9STyhfbmFtZSkgXFxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiX3ZtZW1tYXAuYyBiL21tL2h1Z2V0bGJfdm1lbW1hcC5jXG5pbmRleCAxMzNiNDZkZmIwOWY1Yy4uN2U3Zjg1NzljYzJhZTUgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiX3ZtZW1tYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYl92bWVtbWFwLmNcbkBAIC0xNiw5ICYjNDM7MTYsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbWRlYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdld2Fsay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGdhbGxvYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2h1Z2V0bGIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdldGxiX3ZtZW1tYXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS90bGJmbHVzaC5oXHUwMDNlXG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXRsYl92bWVtbWFwLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gXG4gLyoqXG5AQCAtMzQsNyAmIzQzOzM2LDcgQEBcbiAgKlx0XHRcdG9wZXJhdGlvbnMuXG4gICovXG4gc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayB7XG4tXHR2b2lkXHRcdFx0KCpyZW1hcF9wdGUpKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRpbnRcdFx0XHQoKnJlbWFwX3B0ZSkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspO1xuIFxuIFx0dW5zaWduZWQgbG9uZ1x0XHRucl93YWxrZWQ7XG5AQCAtNTQsNiAmIzQzOzU2LDcgQEAgc3RhdGljIGludCB2bWVtbWFwX3NwbGl0X3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgcGFnZSAqaGVhZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHQgICAgIHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspXG4ge1xuIFx0cG1kX3QgX19wbWQ7XG4mIzQzO1x0aW50IHJldDtcbiBcdGludCBpO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gc3RhcnQ7XG4gXHRwdGVfdCAqcGd0YWJsZTtcbkBAIC03Myw4ICYjNDM7NzYsMTUgQEAgc3RhdGljIGludCB2bWVtbWFwX3NwbGl0X3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgcGFnZSAqaGVhZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0c2V0X3B0ZV9hdChcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIGVudHJ5KTtcbiBcdH1cbiBcbiYjNDM7XHRyZXQgPSAwO1xuIFx0c3Bpbl9sb2NrKFx1MDAyNmluaXRfbW0ucGFnZV90YWJsZV9sb2NrKTtcbiBcdGlmIChsaWtlbHkocG1kX2xlYWYoKnBtZCkpKSB7XG4mIzQzO1x0XHQvKiBNYWtlIHB0ZSB2aXNpYmxlIGJlZm9yZSBwbWQuIFNlZSBjb21tZW50IGluIHBtZF9pbnN0YWxsKCkuICovXG4mIzQzO1x0XHRzbXBfd21iKCk7XG4mIzQzO1x0XHRyZXQgPSB0cnlfcG9wdWxhdGVfdm1lbW1hcF9wbWQocG1kLCBwZ3RhYmxlLCBzdGFydCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIGZyZWU7XG4mIzQzO1xuIFx0XHQvKlxuIFx0XHQgKiBIaWdoZXIgb3JkZXIgYWxsb2NhdGlvbnMgZnJvbSBidWRkeSBhbGxvY2F0b3IgbXVzdCBiZSBhYmxlIHRvXG4gXHRcdCAqIGJlIHRyZWF0ZWQgYXMgaW5kZXBlbmRlbnQgc21hbGwgcGFnZXMgKGFzIHRoZXkgY2FuIGJlIGZyZWVkXG5AQCAtODMsMTcgJiM0Mzs5MywxNyBAQCBzdGF0aWMgaW50IHZtZW1tYXBfc3BsaXRfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBwYWdlICpoZWFkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRpZiAoIVBhZ2VSZXNlcnZlZChoZWFkKSlcbiBcdFx0XHRzcGxpdF9wYWdlKGhlYWQsIGdldF9vcmRlcihQTURfU0laRSkpO1xuIFxuLVx0XHQvKiBNYWtlIHB0ZSB2aXNpYmxlIGJlZm9yZSBwbWQuIFNlZSBjb21tZW50IGluIHBtZF9pbnN0YWxsKCkuICovXG4tXHRcdHNtcF93bWIoKTtcbi1cdFx0cG1kX3BvcHVsYXRlX2tlcm5lbChcdTAwMjZpbml0X21tLCBwbWQsIHBndGFibGUpO1xuIFx0XHRpZiAoISh3YWxrLVx1MDAzZWZsYWdzIFx1MDAyNiBWTUVNTUFQX1NQTElUX05PX1RMQl9GTFVTSCkpXG4gXHRcdFx0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgc3RhcnQgJiM0MzsgUE1EX1NJWkUpO1xuLVx0fSBlbHNlIHtcbi1cdFx0cHRlX2ZyZWVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHBndGFibGUpO1xuLVx0fVxuLVx0c3Bpbl91bmxvY2soXHUwMDI2aW5pdF9tbS5wYWdlX3RhYmxlX2xvY2spO1xuJiM0MztcdH0gZWxzZVxuJiM0MztcdFx0Z290byBmcmVlO1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO291dDpcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZpbml0X21tLnBhZ2VfdGFibGVfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7ZnJlZTpcbiYjNDM7XHRwdGVfZnJlZV9rZXJuZWwoXHUwMDI2aW5pdF9tbSwgcGd0YWJsZSk7XG4mIzQzO1x0Z290byBvdXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm1lbW1hcF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuQEAgLTE0MSwxMSAmIzQzOzE1MSwxMyBAQCBzdGF0aWMgaW50IHZtZW1tYXBfcHRlX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4ge1xuIFx0c3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqdm1lbW1hcF93YWxrID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdGludCByZXQgPSAwO1xuIFxuLVx0dm1lbW1hcF93YWxrLVx1MDAzZXJlbWFwX3B0ZShwdGUsIGFkZHIsIHZtZW1tYXBfd2Fsayk7XG4tXHR2bWVtbWFwX3dhbGstXHUwMDNlbnJfd2Fsa2VkJiM0MzsmIzQzOztcbiYjNDM7XHRyZXQgPSB2bWVtbWFwX3dhbGstXHUwMDNlcmVtYXBfcHRlKHB0ZSwgYWRkciwgdm1lbW1hcF93YWxrKTtcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdHZtZW1tYXBfd2Fsay1cdTAwM2Vucl93YWxrZWQmIzQzOyYjNDM7O1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyB2bWVtbWFwX3JlbWFwX29wcyA9IHtcbkBAIC0xNjQsMTMgJiM0MzsxNzYsMTEgQEAgc3RhdGljIGludCB2bWVtbWFwX3JlbWFwX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0cmV0ID0gd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZShzdGFydCwgZW5kLCBcdTAwMjZ2bWVtbWFwX3JlbWFwX29wcyxcbiBcdFx0XHRcdCAgICBOVUxMLCB3YWxrKTtcbiBcdG1tYXBfcmVhZF91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0aWYgKHdhbGstXHUwMDNlcmVtYXBfcHRlIFx1MDAyNlx1MDAyNiAhKHdhbGstXHUwMDNlZmxhZ3MgXHUwMDI2IFZNRU1NQVBfUkVNQVBfTk9fVExCX0ZMVVNIKSlcbiBcdFx0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKTtcbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qXG5AQCAtMTk5LDE4ICYjNDM7MjA5LDIwIEBAIHN0YXRpYyB2b2lkIGZyZWVfdm1lbW1hcF9wYWdlX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbiBcdFx0ZnJlZV92bWVtbWFwX3BhZ2UocGFnZSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZtZW1tYXBfcmVtYXBfcHRlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHQgICAgICBzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrICp3YWxrKVxuJiM0MztzdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfcHRlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrICp3YWxrKVxuIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlID0gcHRlX3BhZ2UocHRlcF9nZXQocHRlKSk7XG4gXHRwdGVfdCBlbnRyeTtcbiYjNDM7XHRib29sIGhlYWQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aGVhZCA9IHdhbGstXHUwMDNlbnJfd2Fsa2VkID09IDAgXHUwMDI2XHUwMDI2IHdhbGstXHUwMDNldm1lbW1hcF9oZWFkO1xuIFxuIFx0LyogUmVtYXBwaW5nIHRoZSBoZWFkIHBhZ2UgcmVxdWlyZXMgci93ICovXG4tXHRpZiAodW5saWtlbHkod2Fsay1cdTAwM2Vucl93YWxrZWQgPT0gMCBcdTAwMjZcdTAwMjYgd2Fsay1cdTAwM2V2bWVtbWFwX2hlYWQpKSB7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGhlYWQpKSB7XG4gXHRcdFZNX1dBUk5fT05fT05DRSghUGFnZUhlYWQoKGNvbnN0IHN0cnVjdCBwYWdlICopYWRkcikpO1xuIFxuLVx0XHRsaXN0X2RlbChcdTAwMjZ3YWxrLVx1MDAzZXZtZW1tYXBfaGVhZC1cdTAwM2VscnUpO1xuLVxuIFx0XHQvKlxuIFx0XHQgKiBNYWtlcyBzdXJlIHRoYXQgcHJlY2VkaW5nIHN0b3JlcyB0byB0aGUgcGFnZSBjb250ZW50cyBmcm9tXG4gXHRcdCAqIHZtZW1tYXBfcmVtYXBfZnJlZSgpIGJlY29tZSB2aXNpYmxlIGJlZm9yZSB0aGUgc2V0X3B0ZV9hdCgpXG5AQCAtMjI5LDM1ICYjNDM7MjQxLDU2IEBAIHN0YXRpYyB2b2lkIHZtZW1tYXBfcmVtYXBfcHRlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0ZW50cnkgPSBta19wdGUod2Fsay1cdTAwM2V2bWVtbWFwX3RhaWwsIFBBR0VfS0VSTkVMX1JPKTtcbiBcdH1cbiBcbiYjNDM7XHRyZXQgPSB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKGFkZHIsIHB0ZSwgZW50cnkpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBXZSBzdWNjZXNzZnVsbHkgb3Zlcndyb3RlIHRoZSB2bWVtbWFwIFBURSwgc28gd2UgY2FuIGZyZWVcbiYjNDM7XHQgKiB0aGUgdm1lbW1hcCBwYWdlIHRoYXQgd2FzIGp1c3QgdW5tYXBwZWQsIGFuZCBpZiB3ZSBtYXBwZWRcbiYjNDM7XHQgKiB0aGUgbmV3IGhlYWQgcGFnZSwgcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3Qgc28gdGhhdCBpdFxuJiM0MztcdCAqIGRvZXNuJiMzOTt0IGdldCBmcmVlZCBsYXRlci5cbiYjNDM7XHQgKi9cbiBcdGxpc3RfYWRkKFx1MDAyNnBhZ2UtXHUwMDNlbHJ1LCB3YWxrLVx1MDAzZXZtZW1tYXBfcGFnZXMpO1xuLVx0c2V0X3B0ZV9hdChcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIGVudHJ5KTtcbiYjNDM7XHRpZiAoaGVhZClcbiYjNDM7XHRcdGxpc3RfZGVsKFx1MDAyNndhbGstXHUwMDNldm1lbW1hcF9oZWFkLVx1MDAzZWxydSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB2bWVtbWFwX3Jlc3RvcmVfcHRlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHRcdHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspXG4mIzQzO3N0YXRpYyBpbnQgdm1lbW1hcF9yZXN0b3JlX3B0ZShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrICp3YWxrKVxuIHtcbiBcdHN0cnVjdCBwYWdlICpzcmMgPSBwdGVfcGFnZShwdGVwX2dldChwdGUpKSwgKmRzdDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCF3YWxrLVx1MDAzZXZtZW1tYXBfdGFpbCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdC8qXG4tXHQgKiBXaGVuIHJvbGxpbmcgYmFjayB2bWVtbWFwX3JlbWFwX2ZyZWUoKSwga2VlcCB0aGUgY29waWVkIGhlYWQgcGFnZVxuJiM0MztcdCAqIFdoZW4gcmVzdG9yaW5nIGEgcGFydGlhbGx5LUhWT2VkIHBhZ2UsIGtlZXAgdGhlIGNvcGllZCBoZWFkIHBhZ2VcbiBcdCAqIG1hcHBpbmcgYW5kIHJlc3RvcmUgb25seSBQVEVzIGN1cnJlbnRseSBwb2ludGluZyBhdCB0aGUgc2hhcmVkIHRhaWxcbiBcdCAqIHBhZ2UuXG4gXHQgKi9cbi1cdGlmICh3YWxrLVx1MDAzZXZtZW1tYXBfdGFpbCBcdTAwMjZcdTAwMjYgd2Fsay1cdTAwM2V2bWVtbWFwX3RhaWwgIT0gc3JjKVxuLVx0XHRyZXR1cm47XG4mIzQzO1x0aWYgKHdhbGstXHUwMDNldm1lbW1hcF90YWlsICE9IHNyYylcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKFBhZ2VIZWFkKChjb25zdCBzdHJ1Y3QgcGFnZSAqKWFkZHIpKTtcbiBcbiBcdGRzdCA9IGxpc3RfZmlyc3RfZW50cnkod2Fsay1cdTAwM2V2bWVtbWFwX3BhZ2VzLCBzdHJ1Y3QgcGFnZSwgbHJ1KTtcbi1cdGxpc3RfZGVsKFx1MDAyNmRzdC1cdTAwM2VscnUpO1xuIFx0Y29weV9wYWdlKHBhZ2VfdG9fdmlydChkc3QpLCBwYWdlX3RvX3ZpcnQoc3JjKSk7XG4gXG4gXHQvKlxuIFx0ICogTWFrZXMgc3VyZSB0aGF0IHByZWNlZGluZyBzdG9yZXMgdG8gdGhlIHBhZ2UgY29udGVudHMgYmVjb21lIHZpc2libGVcbi1cdCAqIGJlZm9yZSB0aGUgc2V0X3B0ZV9hdCgpIHdyaXRlLlxuJiM0MztcdCAqIGJlZm9yZSB0aGUgdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZSgpIHdyaXRlLlxuIFx0ICovXG4gXHRzbXBfd21iKCk7XG4tXHRzZXRfcHRlX2F0KFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSwgbWtfcHRlKGRzdCwgUEFHRV9LRVJORUwpKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZShhZGRyLCBwdGUsIG1rX3B0ZShkc3QsIFBBR0VfS0VSTkVMKSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGxpc3RfZGVsKFx1MDAyNmRzdC1cdTAwM2VscnUpO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiAvKipcbkBAIC0yNzksNiAmIzQzOzMxMiw3IEBAIHN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9zcGxpdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbiBcdHJldHVybiB2bWVtbWFwX3JlbWFwX3JhbmdlKHN0YXJ0LCBlbmQsIFx1MDAyNndhbGspO1xuIH1cbiBcbiYjNDM7c3RhdGljIGNvbnN0IGludCBWTUVNTUFQX1JFTUFQX0lOQ09NUExFVEUgPSAxO1xuIC8qKlxuICAqIHZtZW1tYXBfcmVtYXBfZnJlZSAtIHJlbWFwIHRoZSB2bWVtbWFwIHZpcnR1YWwgYWRkcmVzcyByYW5nZSBbQHN0YXJ0LCBAZW5kKVxuICAqXHRcdFx0dG8gdXNlIEB2bWVtbWFwX2hlYWQvdGFpbCwgdGhlbiBmcmVlIHZtZW1tYXAgd2hpY2hcbkBAIC0yOTMsNyAmIzQzOzMyNyw4IEBAIHN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9zcGxpdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbiAgKlx0XHRyZXNwb25zaWJpbGl0eSB0byBmcmVlIHBhZ2VzLlxuICAqIEBmbGFnczpcdG1vZGlmaWNhdGlvbnMgdG8gdm1lbW1hcF9yZW1hcF93YWxrIGZsYWdzXG4gICpcbi0gKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuJiM0MzsgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsIFZNRU1NQVBfUkVNQVBfSU5DT01QTEVURSBpZiB0aGUgcGFnZSBpcyBpbmNvbXBsZXRlbHlcbiYjNDM7ICogICAgICAgICBvcHRpbWl6ZWQsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuICAqL1xuIHN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9mcmVlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBwYWdlICp2bWVtbWFwX2hlYWQsXG5AQCAtMzI4LDcgJiM0MzszNjMsOCBAQCBzdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfZnJlZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0LmZsYWdzXHRcdD0gMCxcbiBcdH07XG4gXG4tXHR2bWVtbWFwX3JlbWFwX3JhbmdlKHN0YXJ0LCBlbmQsIFx1MDAyNndhbGspO1xuJiM0MztcdGlmICh2bWVtbWFwX3JlbWFwX3JhbmdlKHN0YXJ0LCBlbmQsIFx1MDAyNndhbGspKVxuJiM0MztcdFx0cmV0dXJuIFZNRU1NQVBfUkVNQVBfSU5DT01QTEVURTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTM1NywxMCAmIzQzOzM5MywzOCBAQCBzdGF0aWMgaW50IGFsbG9jX3ZtZW1tYXBfcGFnZV9saXN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IHBhZ2UgKnZtZW1tYXBfZ2V0X3RhaWwodW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgem9uZSAqem9uZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHVuc2lnbmVkIGludCBpZHggPSBvcmRlciAtIFZNRU1NQVBfVEFJTF9NSU5fT1JERVI7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnRhaWwsICpwO1xuJiM0MztcdGludCBub2RlID0gem9uZV90b19uaWQoem9uZSk7XG4mIzQzO1xuJiM0MztcdHRhaWwgPSBSRUFEX09OQ0Uoem9uZS1cdTAwM2V2bWVtbWFwX3RhaWxzW2lkeF0pO1xuJiM0MztcdGlmIChsaWtlbHkodGFpbCkpXG4mIzQzO1x0XHRyZXR1cm4gdGFpbDtcbiYjNDM7XG4mIzQzO1x0dGFpbCA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIDApO1xuJiM0MztcdGlmICghdGFpbClcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRwID0gcGFnZV90b192aXJ0KHRhaWwpO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IHBhZ2UpOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGluaXRfY29tcG91bmRfdGFpbChwICYjNDM7IGksIE5VTEwsIG9yZGVyLCB6b25lKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNtcHhjaGcoXHUwMDI2em9uZS1cdTAwM2V2bWVtbWFwX3RhaWxzW2lkeF0sIE5VTEwsIHRhaWwpKSB7XG4mIzQzO1x0XHRfX2ZyZWVfcGFnZSh0YWlsKTtcbiYjNDM7XHRcdHRhaWwgPSBSRUFEX09OQ0Uoem9uZS1cdTAwM2V2bWVtbWFwX3RhaWxzW2lkeF0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRhaWw7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogdm1lbW1hcF9yZW1hcF9hbGxvYyAtIHJlbWFwIHRoZSB2bWVtbWFwIHZpcnR1YWwgYWRkcmVzcyByYW5nZSBbQHN0YXJ0LCBlbmQpXG4gICpcdFx0XHQgdG8gdGhlIHBhZ2Ugd2hpY2ggaXMgZnJvbSB0aGUgQHZtZW1tYXBfcGFnZXNcbiAgKlx0XHRcdCByZXNwZWN0aXZlbHkuXG4mIzQzOyAqIEBoOlx0XHR0aGUgaHN0YXRlIGZvciB0aGUgZm9saW8gd2hvc2Ugdm1lbW1hcCBpcyBnZXR0aW5nIHJlbWFwcGVkXG4mIzQzOyAqIEBmb2xpbzpcdHRoZSBmb2xpbyB3aG9zZSB2bWVtbWFwIGlzIGdldHRpbmcgcmVtYXBwZWRcbiAgKiBAc3RhcnQ6XHRzdGFydCBhZGRyZXNzIG9mIHRoZSB2bWVtbWFwIHZpcnR1YWwgYWRkcmVzcyByYW5nZSB0aGF0IHdlIHdhbnRcbiAgKlx0XHR0byByZW1hcC5cbiAgKiBAZW5kOlx0ZW5kIGFkZHJlc3Mgb2YgdGhlIHZtZW1tYXAgdmlydHVhbCBhZGRyZXNzIHJhbmdlIHRoYXQgd2Ugd2FudCB0b1xuQEAgLTM2OSwyMCAmIzQzOzQzMyw2OCBAQCBzdGF0aWMgaW50IGFsbG9jX3ZtZW1tYXBfcGFnZV9saXN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuICAqXG4gICogUmV0dXJuOiAlMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiAgKi9cbi1zdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfYWxsb2ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4mIzQzO3N0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9hbGxvYyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4ge1xuIFx0TElTVF9IRUFEKHZtZW1tYXBfcGFnZXMpO1xuLVx0c3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayB3YWxrID0ge1xuJiM0MztcdHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgd2FsaztcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqdm1lbW1hcF90YWlsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHZtZW1tYXBfdGFpbCA9IHZtZW1tYXBfZ2V0X3RhaWwoaC1cdTAwM2VvcmRlciwgZm9saW9fem9uZShmb2xpbykpO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIXZtZW1tYXBfdGFpbCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0aWYgKGFsbG9jX3ZtZW1tYXBfcGFnZV9saXN0KHN0YXJ0LCBlbmQsIFx1MDAyNnZtZW1tYXBfcGFnZXMpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHdhbGsgPSAoc3RydWN0IHZtZW1tYXBfcmVtYXBfd2Fsaykge1xuIFx0XHQucmVtYXBfcHRlXHQ9IHZtZW1tYXBfcmVzdG9yZV9wdGUsXG4mIzQzO1x0XHQudm1lbW1hcF90YWlsXHQ9IHZtZW1tYXBfdGFpbCxcbiBcdFx0LnZtZW1tYXBfcGFnZXNcdD0gXHUwMDI2dm1lbW1hcF9wYWdlcyxcbiBcdFx0LmZsYWdzXHRcdD0gZmxhZ3MsXG4gXHR9O1xuIFxuLVx0aWYgKGFsbG9jX3ZtZW1tYXBfcGFnZV9saXN0KHN0YXJ0LCBlbmQsIFx1MDAyNnZtZW1tYXBfcGFnZXMpKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRyZXQgPSB2bWVtbWFwX3JlbWFwX3JhbmdlKHN0YXJ0LCBlbmQsIFx1MDAyNndhbGspO1xuIFxuLVx0cmV0dXJuIHZtZW1tYXBfcmVtYXBfcmFuZ2Uoc3RhcnQsIGVuZCwgXHUwMDI2d2Fsayk7XG4mIzQzO1x0LyogTm90IGFsbCBwYWdlcyBtYXkgaGF2ZSBiZWVuIGNvbnN1bWVkICovXG4mIzQzO1x0ZnJlZV92bWVtbWFwX3BhZ2VfbGlzdChcdTAwMjZ2bWVtbWFwX3BhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZW51bSBodWdldGxiX2h2b19zdGF0dXMge1xuJiM0MztcdEhWT19JTkFDVElWRSA9IDAsXG4mIzQzO1x0SFZPX0FDVElWRSxcbiYjNDM7XHRIVk9fUEVSTUFORU5UTFlfSU5BQ1RJVkUsXG4mIzQzO307XG4mIzQzO3N0YXRpYyBlbnVtIGh1Z2V0bGJfaHZvX3N0YXR1cyBodm9fc3RhdHVzID0gSFZPX0lOQUNUSVZFO1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgaHVnZXRsYl9odm9fc3RhdHVzX3RyeV9zZXQoZW51bSBodWdldGxiX2h2b19zdGF0dXMgc3RhdHVzKVxuJiM0Mzt7XG4mIzQzO1x0ZW51bSBodWdldGxiX2h2b19zdGF0dXMgb2xkO1xuJiM0MztcbiYjNDM7XHRvbGQgPSBSRUFEX09OQ0UoaHZvX3N0YXR1cyk7XG4mIzQzO1xuJiM0MztyZXRyeTpcbiYjNDM7XHQvKiBUaGUgY3VycmVudCBzZXR0aW5nIGlzIHdoYXQgd2Ugd2FudC4gKi9cbiYjNDM7XHRpZiAob2xkID09IHN0YXR1cylcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgY3VycmVudCBzZXR0aW5nIGNhbm5vdCBiZSBjaGFuZ2VkLiAqL1xuJiM0MztcdGlmIChvbGQgIT0gSFZPX0lOQUNUSVZFKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRyeV9jbXB4Y2hnX3JlbGF4ZWQoXHUwMDI2aHZvX3N0YXR1cywgXHUwMDI2b2xkLCBzdGF0dXMpKVxuJiM0MztcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2wgaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGh1Z2V0bGJfaHZvX3N0YXR1c190cnlfc2V0KEhWT19QRVJNQU5FTlRMWV9JTkFDVElWRSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIHZtZW1tYXBfb3B0aW1pemVfZW5hYmxlZCA9IElTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT04pO1xuQEAgLTQxNSw3ICYjNDM7NTI3LDcgQEAgc3RhdGljIGludCBfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsXG4gXHQgKiBXaGVuIGEgSHVnZVRMQiBwYWdlIGlzIGZyZWVkIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IsIHByZXZpb3VzbHlcbiBcdCAqIGRpc2NhcmRlZCB2bWVtbWFwIHBhZ2VzIG11c3QgYmUgYWxsb2NhdGVkIGFuZCByZW1hcHBpbmcuXG4gXHQgKi9cbi1cdHJldCA9IHZtZW1tYXBfcmVtYXBfYWxsb2Modm1lbW1hcF9zdGFydCwgdm1lbW1hcF9lbmQsIGZsYWdzKTtcbiYjNDM7XHRyZXQgPSB2bWVtbWFwX3JlbWFwX2FsbG9jKGgsIGZvbGlvLCB2bWVtbWFwX3N0YXJ0LCB2bWVtbWFwX2VuZCwgZmxhZ3MpO1xuIFx0aWYgKCFyZXQpXG4gXHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pO1xuIFxuQEAgLTQ4NywzNiAmIzQzOzU5OSwxNiBAQCBzdGF0aWMgYm9vbCB2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9mb2xpbyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKlxuIFx0aWYgKCFSRUFEX09OQ0Uodm1lbW1hcF9vcHRpbWl6ZV9lbmFibGVkKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKCFodWdldGxiX3ZtZW1tYXBfb3B0aW1pemFibGUoaCkpXG4mIzQzO1x0aWYgKCFhcmNoX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fc3VwcG9ydGVkKCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiB0cnVlO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IHBhZ2UgKnZtZW1tYXBfZ2V0X3RhaWwodW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgem9uZSAqem9uZSlcbi17XG4tXHRjb25zdCB1bnNpZ25lZCBpbnQgaWR4ID0gb3JkZXIgLSBWTUVNTUFQX1RBSUxfTUlOX09SREVSO1xuLVx0c3RydWN0IHBhZ2UgKnRhaWwsICpwO1xuLVx0aW50IG5vZGUgPSB6b25lX3RvX25pZCh6b25lKTtcbi1cbi1cdHRhaWwgPSBSRUFEX09OQ0Uoem9uZS1cdTAwM2V2bWVtbWFwX3RhaWxzW2lkeF0pO1xuLVx0aWYgKGxpa2VseSh0YWlsKSlcbi1cdFx0cmV0dXJuIHRhaWw7XG4tXG4tXHR0YWlsID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgMCk7XG4tXHRpZiAoIXRhaWwpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0cCA9IHBhZ2VfdG9fdmlydCh0YWlsKTtcbi1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IHBhZ2UpOyBpJiM0MzsmIzQzOylcbi1cdFx0aW5pdF9jb21wb3VuZF90YWlsKHAgJiM0MzsgaSwgTlVMTCwgb3JkZXIsIHpvbmUpO1xuJiM0MztcdGlmICghaHVnZXRsYl92bWVtbWFwX29wdGltaXphYmxlKGgpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKGNtcHhjaGcoXHUwMDI2em9uZS1cdTAwM2V2bWVtbWFwX3RhaWxzW2lkeF0sIE5VTEwsIHRhaWwpKSB7XG4tXHRcdF9fZnJlZV9wYWdlKHRhaWwpO1xuLVx0XHR0YWlsID0gUkVBRF9PTkNFKHpvbmUtXHUwMDNldm1lbW1hcF90YWlsc1tpZHhdKTtcbi1cdH1cbiYjNDM7XHRpZiAoIWh1Z2V0bGJfaHZvX3N0YXR1c190cnlfc2V0KEhWT19BQ1RJVkUpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0cmV0dXJuIHRhaWw7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCxcbkBAIC01NzQsNyAmIzQzOzY2NiwxMSBAQCBzdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRcdFx0XHQgdm1lbW1hcF9oZWFkLCB2bWVtbWFwX3RhaWwsXG4gXHRcdFx0XHQgdm1lbW1hcF9wYWdlcywgZmxhZ3MpO1xuIG91dDpcbi1cdGlmIChyZXQpXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiByZXQgPT0gVk1FTU1BUF9SRU1BUF9JTkNPTVBMRVRFLCB0aGUgZm9saW8gbWlnaHQgYmUgcGFydGlhbGx5XG4mIzQzO1x0ICogSFZPZWQuIExlYXZlIHRoZSBIVk8gcGFnZSBmb2xpbyBmbGFnIGluIHBsYWNlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC03MTcsNiAmIzQzOzgxMywxNCBAQCBzdGF0aWMgYm9vbCB2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9ib290bWVtX3BhZ2Uoc3RydWN0IGh1Z2VfYm9vdG1lbV9wYWdlICptKVxuIFx0aWYgKCFSRUFEX09OQ0Uodm1lbW1hcF9vcHRpbWl6ZV9lbmFibGVkKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogQXJjaGl0ZWN0dXJlcyBtYXkgcmV0dXJuIGZhbHNlIGhlcmUgYnV0IHRydWUgYnkgdGhlIHRpbWVcbiYjNDM7XHQgKiBodWdldGxiX2luaXQoKSBpcyBjYWxsZWQuIEluIHRoaXMgY2FzZSwgYWx0aG91Z2ggdGhlIGZvbGlvcyB3aWxsXG4mIzQzO1x0ICogbm90IGJlIHByZS1IVk9lZCwgdGhleSB3aWxsIGJlIG9wdGltaXplZCBpbiBodWdldGxiX2luaXQoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWFyY2hfaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl9zdXBwb3J0ZWQoKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4gXHRpZiAoIWh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YWJsZShtLVx1MDAzZWhzdGF0ZSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC03NDIsNiAmIzQzOzg0Niw5IEBAIHN0YXRpYyBib29sIHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2Jvb3RtZW1fcGFnZShzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgKm0pXG4gXHQgICAgIUlTX0FMSUdORUQocHNpemUsIHBtZF92bWVtbWFwX3NpemUpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4mIzQzO1x0aWYgKCFodWdldGxiX2h2b19zdGF0dXNfdHJ5X3NldChIVk9fQUNUSVZFKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl92bWVtbWFwLmggYi9tbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaFxuc2ltaWxhcml0eSBpbmRleCA5NSVcbnJlbmFtZSBmcm9tIG1tL2h1Z2V0bGJfdm1lbW1hcC5oXG5yZW5hbWUgdG8gbW0vaHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmhcbmluZGV4IDE4YjQ5MDgyNTIxNTNkLi42YjI4NzgwMDE0YmMxOCAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGJfdm1lbW1hcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaFxuQEAgLTYsOCAmIzQzOzYsOCBAQFxuICAqXG4gICogICAgIEF1dGhvcjogTXVjaHVuIFNvbmcgXHUwMDNjc29uZ211Y2h1bkBieXRlZGFuY2UuY29tXHUwMDNlXG4gICovXG4tI2lmbmRlZiBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0hcbi0jZGVmaW5lIF9MSU5VWF9IVUdFVExCX1ZNRU1NQVBfSFxuJiM0MzsjaWZuZGVmIF9NTV9IVUdFVExCX1ZNRU1NQVBfSU5URVJOQUxfSFxuJiM0MzsjZGVmaW5lIF9NTV9IVUdFVExCX1ZNRU1NQVBfSU5URVJOQUxfSFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2h1Z2V0bGIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1ibG9jay5oXHUwMDNlXG5AQCAtOTUsNCAmIzQzOzk1LDQgQEAgc3RhdGljIGlubGluZSBib29sIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YWJsZShjb25zdCBzdHJ1Y3QgaHN0YXRlICpoKVxuIHtcbiBcdHJldHVybiBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemFibGVfc2l6ZShoKSAhPSAwO1xuIH1cbi0jZW5kaWYgLyogX0xJTlVYX0hVR0VUTEJfVk1FTU1BUF9IICovXG4mIzQzOyNlbmRpZiAvKiBfTU1fSFVHRVRMQl9WTUVNTUFQX0lOVEVSTkFMX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9zcGFyc2Utdm1lbW1hcC5jIGIvbW0vc3BhcnNlLXZtZW1tYXAuY1xuaW5kZXggOTllMmJlMzk2NzFiNjMuLjk0ZDVkYTlmOGFiN2MxIDEwMDY0NFxuLS0tIGEvbW0vc3BhcnNlLXZtZW1tYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3BhcnNlLXZtZW1tYXAuY1xuQEAgLTMyLDcgJiM0MzszMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2RtYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RsYmZsdXNoLmhcdTAwM2VcbiBcbi0jaW5jbHVkZSBcJiMzNDtodWdldGxiX3ZtZW1tYXAuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtodWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaFwmIzM0O1xuIFxuIC8qXG4gICogRmxhZ3MgZm9yIHZtZW1tYXBfcG9wdWxhdGVfcmFuZ2UgYW5kIGZyaWVuZHMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVAmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtZW1tYXBfc3BsaXRfcG1kJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfcmVtYXBfcHRlJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfcmVzdG9yZV9wdGUmIzM0OywKICAgICYjMzQ7dm1lbW1hcF9yZW1hcF9mcmVlJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfcmVtYXBfYWxsb2MmIzM0OywKICAgICYjMzQ7aHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvJiMzNDssCiAgICAmIzM0O19faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfc2hvdWxkX29wdGltaXplX2ZvbGlvJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfc2hvdWxkX29wdGltaXplX2Jvb3RtZW1fcGFnZSYjMzQ7LAogICAgJiMzNDtsYXRlX2NwdV9lbmFibGVfaHZvJiMzNDssCiAgICAmIzM0O2h2b19jb21wYXRpYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgQVJNNjQgc3VwcG9ydCBmb3IgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKS4gSXQgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgaW4gYG1tL2h1Z2V0bGJfdm1lbW1hcC5jYCB0byB1c2UgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgcG9wdWxhdGluZyBhbmQgdXBkYXRpbmcgdm1lbW1hcCBQTURzIGFuZCBQVEVzLiBJdCBhbHNvIGFkZHMgQ1BVIGNhcGFiaWxpdHkgY2hlY2tzIGZvciBIVk8gb24gQVJNNjQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gYWxsb2NhdGluZyBhbmQgZnJlZWluZyBIdWdlVExCIHBhZ2VzIHdpdGggSFZPIGVuYWJsZWQsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZGYyMzA1NDYyZWI4ZmFiOWFiY2I1ZjEyYjk3YjFmOTcwY2JhNTk1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgOCAxNToxMjoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggZjM3YTgxOTUwZTI1MGUuLjU1YmQ0YzA5ZjQ5NDk2IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtMTIwMTMsNiAmIzQzOzEyMDEzLDcgQEAgRjoJRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdAogRjoJRG9jdW1lbnRhdGlvbi9tbS92bWVtbWFwX2RlZHVwLnJzdAogRjoJZnMvaHVnZXRsYmZzLwogRjoJaW5jbHVkZS9saW51eC9odWdldGxiLmgKJiM0MztGOglpbmNsdWRlL2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oCiBGOglpbmNsdWRlL3RyYWNlL2V2ZW50cy9odWdldGxiZnMuaAogRjoJbW0vaHVnZXRsYi5jCiBGOgltbS9odWdldGxiX2Nncm91cC5jCkBAIC0xMjAyMSw3ICYjNDM7MTIwMjIsNyBAQCBGOgltbS9odWdldGxiX2NtYS5oCiBGOgltbS9odWdldGxiX3N5c2N0bC5jCiBGOgltbS9odWdldGxiX3N5c2ZzLmMKIEY6CW1tL2h1Z2V0bGJfdm1lbW1hcC5jCi1GOgltbS9odWdldGxiX3ZtZW1tYXAuaAomIzQzO0Y6CW1tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oCiBGOgl0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9odWdldGxiX21lbWNnLmMKIAogSFZBIFNUIE1FRElBIERSSVZFUgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnCmluZGV4IGIzYWZlMDY4ODkxOWJkLi4yYTU5MTU1ZjY4ZGNkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvS2NvbmZpZwpAQCAtMjU5LDYgJiM0MzsyNTksNyBAQCBjb25maWcgQVJNNjQKIAlzZWxlY3QgVVNFUl9TVEFDS1RSQUNFX1NVUFBPUlQKIAlzZWxlY3QgVkRTT19HRVRSQU5ET00KIAlzZWxlY3QgVk1BUF9TVEFDSwomIzQzOwlzZWxlY3QgQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUCBpZiBBUk02NF9IV19BRkRCTQogCWhlbHAKIAkgIEFSTSA2NC1iaXQgKEFBcmNoNjQpIExpbnV4IHN1cHBvcnQuCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1Y2Fwcy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVjYXBzLmgKaW5kZXggMjVjNjFjZGE5MDFjNWQuLjZkYjNlZjgyN2Y4NmE5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaApAQCAtNzUsNiAmIzQzOzc1LDggQEAgY3B1Y2FwX2lzX3Bvc3NpYmxlKGNvbnN0IHVuc2lnbmVkIGludCBjYXApCiAJCXJldHVybiBJU19FTkFCTEVEKENPTkZJR19IV19QRVJGX0VWRU5UUyk7CiAJY2FzZSBBUk02NF9IQVNfTFNVSToKIAkJcmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0FSTTY0X0xTVUkpOwomIzQzOwljYXNlIEFSTTY0X0hWT19DT01QQVRJQkxFOgomIzQzOwkJcmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKTsKIAl9CiAKIAlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKaW5kZXggYTU3ODcwZmE5NmRiNWIuLmQxNTA0ODA0ZjJiZWE5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaApAQCAtMzY3LDYgJiM0MzszNjcsMTQgQEAgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgewogCSAqIHJvdXRpbmUgbXVzdCBjaGVjayBpdCBiZWZvcmUgdGFraW5nIGFueSBhY3Rpb24uCiAJICovCiAJdm9pZCAoKmNwdV9lbmFibGUpKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXApOwomIzQzOwkvKgomIzQzOwkgKiBJbiByYXJlIGNhc2VzLCBjYXBhYmlsaXRpZXMgYXJlICpzb21ldGltZXMqIG9wdGlvbmFsIGZvciBsYXRlIENQVXMuCiYjNDM7CSAqIFRoaXMgY2FsbGJhY2sgYWxsb3dzIGEgY2FwYWJpbGl0eSB0byBwcmV2ZW50IG9ubGluaW5nIG9mCiYjNDM7CSAqIGluY29tcGF0aWJsZSBDUFVzIHdoZW4gdGhlIGNhcGFiaWxpdHkgaXMgaW4gZmFjdCByZXF1aXJlZC4KJiM0MzsJICoKJiM0MzsJICogUmV0dXJucyB0cnVlIGlmZiBvbmxpbmluZyB0aGUgQ1BVIGlzIHBlcm1pdHRlZC4KJiM0MzsJICovCiYjNDM7CWJvb2wgKCpsYXRlX2NwdV9lbmFibGUpKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXApOwogCXVuaW9uIHsKIAkJc3RydWN0IHsJLyogVG8gYmUgdXNlZCBmb3IgZXJyYXR1bSBoYW5kbGluZyBvbmx5ICovCiAJCQlzdHJ1Y3QgbWlkcl9yYW5nZSBtaWRyX3JhbmdlOwpAQCAtODg1LDYgJiM0Mzs4OTMsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KHZvaWQpCiAJcmV0dXJuIGFsdGVybmF0aXZlX2hhc19jYXBfdW5saWtlbHkoQVJNNjRfSEFTX0JCTUwyX05PQUJPUlQpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19odm8odm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBhbHRlcm5hdGl2ZV9oYXNfY2FwX3VubGlrZWx5KEFSTTY0X0hWT19DT01QQVRJQkxFKTsKJiM0Mzt9CiYjNDM7CiBpbnQgZG9fZW11bGF0ZV9tcnMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHUzMiBzeXNfcmVnLCB1MzIgcnQpOwogYm9vbCB0cnlfZW11bGF0ZV9tcnMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHUzMiBpc24pOwogCkBAIC05MTAsMjIgJiM0Mzs5MjMsMzYgQEAgc3RhdGljIGlubGluZSB1MzIgaWRfYWE2NG1tZnIwX3BhcmFuZ2VfdG9fcGh5c19zaGlmdChpbnQgcGFyYW5nZSkKIH0KIAogLyogQ2hlY2sgd2hldGhlciBoYXJkd2FyZSB1cGRhdGUgb2YgdGhlIEFjY2VzcyBmbGFnIGlzIHN1cHBvcnRlZCAqLwotc3RhdGljIGlubGluZSBib29sIGNwdV9oYXNfaHdfYWYodm9pZCkKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc3VwcG9ydHNfaHdfYWYoaW50IHNjb3BlKQogewogCXU2NCBtbWZyMTsKIAogCWlmICghSVNfRU5BQkxFRChDT05GSUdfQVJNNjRfSFdfQUZEQk0pKQogCQlyZXR1cm4gZmFsc2U7CiAKLQkvKgotCSAqIFVzZSBjYWNoZWQgdmVyc2lvbiB0byBhdm9pZCBlbXVsYXRlZCBtc3Igb3BlcmF0aW9uIG9uIEtWTQotCSAqIGd1ZXN0cy4KLQkgKi8KLQltbWZyMSA9IHJlYWRfc2FuaXRpc2VkX2Z0cl9yZWcoU1lTX0lEX0FBNjRNTUZSMV9FTDEpOwomIzQzOwlpZiAoc2NvcGUgPT0gU0NPUEVfU1lTVEVNKSB7CiYjNDM7CQkvKgomIzQzOwkJICogVXNlIGNhY2hlZCB2ZXJzaW9uIHRvIGF2b2lkIGVtdWxhdGVkIG1zciBvcGVyYXRpb24gb24gS1ZNCiYjNDM7CQkgKiBndWVzdHMuCiYjNDM7CQkgKi8KJiM0MzsJCW1tZnIxID0gcmVhZF9zYW5pdGlzZWRfZnRyX3JlZyhTWVNfSURfQUE2NE1NRlIxX0VMMSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQltbWZyMSA9IHJlYWRfY3B1aWQoSURfQUE2NE1NRlIxX0VMMSk7CiYjNDM7CX0KIAlyZXR1cm4gY3B1aWRfZmVhdHVyZV9leHRyYWN0X3Vuc2lnbmVkX2ZpZWxkKG1tZnIxLAogCQkJCQkJSURfQUE2NE1NRlIxX0VMMV9IQUZEQlNfU0hJRlQpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHN5c3RlbV9oYXNfaHdfYWYodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBzdXBwb3J0c19od19hZihTQ09QRV9TWVNURU0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgY3B1X2hhc19od19hZih2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN1cHBvcnRzX2h3X2FmKFNDT1BFX0xPQ0FMX0NQVSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBib29sIGNwdV9oYXNfcGFuKHZvaWQpCiB7CiAJdTY0IG1tZnIxID0gcmVhZF9jcHVpZChJRF9BQTY0TU1GUjFfRUwxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmgKaW5kZXggZDAzOGZmMTRkMTZjYWUuLjczYWY3OTExZmQ4MzEzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaApAQCAtMTEsNiAmIzQzOzExLDcgQEAKICNkZWZpbmUgX19BU01fSFVHRVRMQl9ICiAKICNpbmNsdWRlICZsdDthc20vY2FjaGVmbHVzaC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vY3B1ZmVhdHVyZS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9tdGUuaCZndDsKICNpbmNsdWRlICZsdDthc20vcGFnZS5oJmd0OwogCkBAIC02NSw2ICYjNDM7NjYsMTIgQEAgZXh0ZXJuIHZvaWQgaHVnZV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsCiAJCQkJCSBwdGVfdCBvbGRfcHRlLCBwdGVfdCBuZXdfcHRlKTsKIAomIzQzOyNkZWZpbmUgX19IQVZFX0FSQ0hfSFZPX1NVUFBPUlRFRAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fc3VwcG9ydGVkKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3lzdGVtX3N1cHBvcnRzX2h2bygpOwomIzQzO30KJiM0MzsKICNpbmNsdWRlICZsdDthc20tZ2VuZXJpYy9odWdldGxiLmgmZ3Q7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX2h1Z2V0bGJfdGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCAxYjQ1MDlkMzM4MmM2My4uMjZiMDVmOGI3MGNkMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC0xMjEsNCAmIzQzOzEyMSw1OCBAQCBwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWRwLCBwZ3RhYmxlX3QgcHRlcCkKIAkJICAgICAgIFBNRF9UWVBFX1RBQkxFIHwgUE1EX1RBQkxFX0FGIHwgUE1EX1RBQkxFX1BYTik7CiB9CiAKJiM0MzsjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9QT1BVTEFURV9WTUVNTUFQX1BNRAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWRfdCAqcG1kcCwgcHRlX3QgKnBndGFibGUsCiYjNDM7CQkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7ewomIzQzOwljb25zdCBpbnQgbWF4X2F0dGVtcHRzID0gMTY7CiYjNDM7CWludCBhdHRlbXB0cyA9IDA7CiYjNDM7CXBtZF90IG9sZF9wbWQsIG5ld19wbWQ7CiYjNDM7CiYjNDM7CWlmICghc3lzdGVtX3N1cHBvcnRzX2h2bygpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlpZiAoc3lzdGVtX3N1cHBvcnRzX2JibWwyX25vYWJvcnQoKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIEJCTUwyX05PQUJPUlQgYWxsb3dzIGJsb2NrLSZndDt0YWJsZSB0cmFuc2l0aW9ucyBpZiB0aGUgUFRFcwomIzQzOwkJICogdW5kZXJuZWF0aCBkbyBub3QgY29uZmxpY3Qgd2l0aCBleGlzdGluZywgcG90ZW50aWFsbHkgY2FjaGVkCiYjNDM7CQkgKiB0cmFuc2xhdGlvbnMuCiYjNDM7CQkgKi8KJiM0MzsJCXBtZF9wb3B1bGF0ZV9rZXJuZWwoJmFtcDtpbml0X21tLCBwbWRwLCBwZ3RhYmxlKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5ld19wbWQgPSBfX3BtZChfX3BoeXNfdG9fcG1kX3ZhbChfX3BhKHBndGFibGUpKSB8CiYjNDM7CQkJUE1EX1RZUEVfVEFCTEUgfCBQTURfVEFCTEVfQUYgfCBQTURfVEFCTEVfVVhOKTsKJiM0MzsKJiM0MzsJb2xkX3BtZCA9IHBtZHBfZ2V0KHBtZHApOwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlpZiAoV0FSTl9PTl9PTkNFKCFwbWRfdmFsaWQob2xkX3BtZCkpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJaWYgKFdBUk5fT05fT05DRSghcG1kX2xlYWYob2xkX3BtZCkpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBhIGNvbnRpZ3VvdXMgUE1EIGhlcmUuICovCiYjNDM7CQlpZiAoV0FSTl9PTl9PTkNFKHBtZF9jb250KG9sZF9wbWQpKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCWlmIChwbWRfeW91bmcob2xkX3BtZCkpIHsKJiM0MzsJCQkvKiBfX3B0ZXBfY2xlYXJfeW91bmcoKSByZXR1cm5zIHRoZSBvdmVyd3JpdHRlbiBQVEUgKi8KJiM0MzsJCQlvbGRfcG1kID0gcHRlX3BtZChwdGVfbWtvbGQoX19wdGVwX2NsZWFyX3lvdW5nKChwdGVfdCAqKXBtZHApKSk7CiYjNDM7CiYjNDM7CQkJZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShhZGRyLCBhZGRyICYjNDM7IFBNRF9TSVpFKTsKJiM0MzsJCX0KJiM0MzsJLyoKJiM0MzsJICogVHJhbnNsYXRpb25zIHdpdGhvdXQgQUYgY2Fubm90IGJlIGNhY2hlZCwgc28gd2UgY2FuIHJlcGxhY2UKJiM0MzsJICogdGhlbSB3aXRob3V0IEJCTS4KJiM0MzsJICovCiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZ19yZWxheGVkKCZhbXA7cG1kX3ZhbCgqcG1kcCksICZhbXA7cG1kX3ZhbChvbGRfcG1kKSwKJiM0MzsJCQkJICAgICAgcG1kX3ZhbChuZXdfcG1kKSkgJmFtcDsmYW1wOwomIzQzOwkJICYjNDM7JiM0MzthdHRlbXB0cyAmbHQ7IG1heF9hdHRlbXB0cyk7CiYjNDM7CiYjNDM7CXJldHVybiBhdHRlbXB0cyA9PSBtYXhfYXR0ZW1wdHMgPyAtRUFHQUlOIDogMDsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggMjc2ODljNjJiZDI1ZGQuLjdiMTFhYTQxZDBhMDc0IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMTMwMiw4ICYjNDM7MTMwMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3B0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAlfX3NldF9wdGUocHRlcCwgX19wdGUoMCkpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgX19wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKQomIzQzO3N0YXRpYyBpbmxpbmUgcHRlX3QgX19wdGVwX2NsZWFyX3lvdW5nKHB0ZV90ICpwdGVwKQogewogCXB0ZV90IG9sZF9wdGUsIHB0ZTsKIApAQCAtMTMxNSw3ICYjNDM7MTMxNCwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgX19wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCQkgICAgICAgcHRlX3ZhbChvbGRfcHRlKSwgcHRlX3ZhbChwdGUpKTsKIAl9IHdoaWxlIChwdGVfdmFsKHB0ZSkgIT0gcHRlX3ZhbChvbGRfcHRlKSk7CiAKLQlyZXR1cm4gcHRlX3lvdW5nKHB0ZSk7CiYjNDM7CXJldHVybiBwdGU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKQomIzQzO3sKJiM0MzsJcmV0dXJuIHB0ZV95b3VuZyhfX3B0ZXBfY2xlYXJfeW91bmcocHRlcCkpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgX19wdGVwX2NsZWFyX2ZsdXNoX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLApAQCAtMTU5OCw3ICYjNDM7MTYwMyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbW11X2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLAogICogcGFnZSBhZnRlciBmb3JrKCkgJiM0MzsgQ29XIGZvciBwZm4gbWFwcGluZ3MuIFdlIGRvbiYjMzk7dCBhbHdheXMgaGF2ZSBhCiAgKiBoYXJkd2FyZS1tYW5hZ2VkIGFjY2VzcyBmbGFnIG9uIGFybTY0LgogICovCi0jZGVmaW5lIGFyY2hfaGFzX2h3X3B0ZV95b3VuZwkJY3B1X2hhc19od19hZgomIzQzOyNkZWZpbmUgYXJjaF9oYXNfaHdfcHRlX3lvdW5nCQlzeXN0ZW1faGFzX2h3X2FmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTk9OTEVBRl9QTURfWU9VTkcKICNkZWZpbmUgYXJjaF9oYXNfaHdfbm9ubGVhZl9wbWRfeW91bmcJc3lzdGVtX3N1cHBvcnRzX2hhZnQKQEAgLTE2MDgsNyAmIzQzOzE2MTMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKICAqIEV4cGVyaW1lbnRhbGx5LCBpdCYjMzk7cyBjaGVhcCB0byBzZXQgdGhlIGFjY2VzcyBmbGFnIGluIGhhcmR3YXJlIGFuZCB3ZQogICogYmVuZWZpdCBmcm9tIHByZWZhdWx0aW5nIG1hcHBpbmdzIGFzICYjMzk7b2xkJiMzOTsgdG8gc3RhcnQgd2l0aC4KICAqLwotI2RlZmluZSBhcmNoX3dhbnRzX29sZF9wcmVmYXVsdGVkX3B0ZQljcHVfaGFzX2h3X2FmCiYjNDM7I2RlZmluZSBhcmNoX3dhbnRzX29sZF9wcmVmYXVsdGVkX3B0ZQlzeXN0ZW1faGFzX2h3X2FmCiAKIC8qCiAgKiBSZXF1ZXN0IGV4ZWMgbWVtb3J5IGlzIHJlYWQgaW50byBwYWdlY2FjaGUgaW4gYXQgbGVhc3QgNjRLIGZvbGlvcy4gVGhpcyBzaXplCkBAIC0xNzkzLDYgJiM0MzsxNzk4LDQ4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJX19wdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApOwogfQogCiYjNDM7I2RlZmluZSBfX0hBVkVfQVJDSF9UUllfVVBEQVRFX1ZNRU1NQVBfUFRFCiYjNDM7c3RhdGljIGlubGluZSBpbnQgdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLAomIzQzOwkJCQkJIGNvbnN0IHB0ZV90IHB0ZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IGludCBtYXhfYXR0ZW1wdHMgPSAxNjsKJiM0MzsJaW50IGF0dGVtcHRzID0gMDsKJiM0MzsJcHRlX3Qgb2xkX3B0ZTsKJiM0MzsKJiM0MzsJaWYgKCFzeXN0ZW1fc3VwcG9ydHNfaHZvKCkpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CS8qIFRoaXMgcm91dGluZSBpcyBvbmx5IHRvIGJlIHVzZWQgZm9yIHZhbGlkLXRvLXZhbGlkIHRyYW5zaXRpb25zLiAqLwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFwdGVfdmFsaWQocHRlKSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJb2xkX3B0ZSA9IF9fcHRlcF9nZXQocHRlcCk7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCWlmIChXQVJOX09OX09OQ0UoIXB0ZV92YWxpZChvbGRfcHRlKSkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQkvKiBXZSBzaG91bGQgbmV2ZXIgZ2V0IGEgY29udGlndW91cyBQVEUgaGVyZS4gKi8KJiM0MzsJCWlmIChXQVJOX09OX09OQ0UocHRlX3ZhbGlkX2NvbnQob2xkX3B0ZSkpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJaWYgKHB0ZV95b3VuZyhvbGRfcHRlKSkgewomIzQzOwkJCS8qIF9fcHRlcF9jbGVhcl95b3VuZygpIHJldHVybnMgdGhlIG92ZXJ3cml0dGVuIFBURSAqLwomIzQzOwkJCW9sZF9wdGUgPSBwdGVfbWtvbGQoX19wdGVwX2NsZWFyX3lvdW5nKHB0ZXApKTsKJiM0MzsKJiM0MzsJCQlmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGFkZHIgJiM0MzsgUEFHRV9TSVpFKTsKJiM0MzsJCX0KJiM0MzsJLyoKJiM0MzsJICogVHJhbnNsYXRpb25zIHdpdGhvdXQgQUYgY2Fubm90IGJlIGNhY2hlZCwgc28gd2UgY2FuIHJlcGxhY2UKJiM0MzsJICogdGhlbSB3aXRob3V0IEJCTS4KJiM0MzsJICovCiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZ19yZWxheGVkKCZhbXA7cHRlX3ZhbCgqcHRlcCksICZhbXA7cHRlX3ZhbChvbGRfcHRlKSwKJiM0MzsJCQkJICAgICAgcHRlX3ZhbChwdGUpKSAmYW1wOyZhbXA7CiYjNDM7CQkgJiM0MzsmIzQzO2F0dGVtcHRzICZsdDsgbWF4X2F0dGVtcHRzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGF0dGVtcHRzID09IG1heF9hdHRlbXB0cyA/IC1FQUdBSU4gOiAwOwomIzQzO30KJiM0MzsKICNkZWZpbmUgY2xlYXJfZnVsbF9wdGVzIGNsZWFyX2Z1bGxfcHRlcwogc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2Z1bGxfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCXB0ZV90ICpwdGVwLCB1bnNpZ25lZCBpbnQgbnIsIGludCBmdWxsKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jCmluZGV4IDlhMjJkZjBjNTEyMGYzLi42NWJiM2M3Yzk1OTUyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYwpAQCAtNzYsNiAmIzQzOzc2LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9rYXNhbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BlcmNwdS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL2lzb2xhdGlvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9odWdldGxiX3ZtZW1tYXAuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS9hcm1fcG11djMuaCZndDsKICNpbmNsdWRlICZsdDthc20vY3B1LmgmZ3Q7CkBAIC0yMTcyLDYgJiM0MzsyMTczLDMxIEBAIHN0YXRpYyBib29sIGhhc19iYm1sMl9ub2Fib3J0KGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXBzLCBpbnQgc2NvCiAJcmV0dXJuIGNwdV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KCk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBodm9fY29tcGF0aWJsZShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwcywgaW50IHNjb3BlKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogV2UgbmVlZCBIVyBBRiBzdXBwb3J0IHRvIHN1cHBvcnQgY2hhbmdpbmcgdm1lbW1hcCBtYXBwaW5nIGxldmVsIGFuZAomIzQzOwkgKiBPQSB3aXRob3V0IHRha2luZyBmYXVsdHMuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gc3VwcG9ydHNfaHdfYWYoc2NvcGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBsYXRlX2NwdV9lbmFibGVfaHZvKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZCkKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUAomIzQzOwlpZiAoY3B1X2hhc19od19hZigpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIElmIHRoZSBDUFUgZG9lcyBub3Qgc3VwcG9ydCBIVyBBRiwgd2UgY2Fubm90IG9ubGluZSBpdCBpZiBIVk8gaXMKJiM0MzsJICogY3VycmVudGx5IGluIHVzZS4KJiM0MzsJICovCiYjNDM7CXJldHVybiBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKCk7CiYjNDM7I2Vsc2UKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgY3B1X2VuYWJsZV9wYW4oY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKl9fdW51c2VkKQogewogCS8qCkBAIC0zMDY3LDYgJiM0MzszMDkzLDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBhcm02NF9mZWF0dXJlc1tdID0gewogCQkudHlwZSA9IEFSTTY0X0NQVUNBUF9FQVJMWV9MT0NBTF9DUFVfRkVBVFVSRSwKIAkJLm1hdGNoZXMgPSBoYXNfYmJtbDJfbm9hYm9ydCwKIAl9LAomIzQzOwl7CiYjNDM7CQkuZGVzYyA9ICYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiBTdXBwb3J0JiMzNDssCiYjNDM7CQkuY2FwYWJpbGl0eSA9IEFSTTY0X0hWT19DT01QQVRJQkxFLAomIzQzOwkJLnR5cGUgPSBBUk02NF9DUFVDQVBfU0NPUEVfU1lTVEVNIHwKJiM0MzsJCQlBUk02NF9DUFVDQVBfT1BUSU9OQUxfRk9SX0xBVEVfQ1BVIHwKJiM0MzsJCQlBUk02NF9DUFVDQVBfUEVSTUlUVEVEX0ZPUl9MQVRFX0NQVSwKJiM0MzsJCS5tYXRjaGVzID0gaHZvX2NvbXBhdGlibGUsCiYjNDM7CQkubGF0ZV9jcHVfZW5hYmxlID0gbGF0ZV9jcHVfZW5hYmxlX2h2bywKJiM0MzsJfSwKIAl7CiAJCS5kZXNjID0gJiMzNDs1Mi1iaXQgVmlydHVhbCBBZGRyZXNzaW5nIGZvciBLVk0gKExQQTIpJiMzNDssCiAJCS5jYXBhYmlsaXR5ID0gQVJNNjRfSEFTX0xQQTIsCkBAIC0zNjY5LDYgJiM0MzszNzA0LDE0IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9sb2NhbF9jcHVfY2Fwcyh1MTYgc2NvcGVfbWFzaykKIAkJCSAqLwogCQkJaWYgKCFjcHVfaGFzX2NhcCAmYW1wOyZhbXA7ICFjcHVjYXBfbGF0ZV9jcHVfb3B0aW9uYWwoY2FwcykpCiAJCQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBTb21lIG9wdGlvbmFsIGZlYXR1cmVzIG1heSBpbiBmYWN0IGJlIHJlcXVpcmVkIGR1ZQomIzQzOwkJCSAqIHRvIHBhcnRpY3VsYXIgcnVudGltZSBjb25kaXRpb25zLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChjYXBzLSZndDtsYXRlX2NwdV9lbmFibGUgJmFtcDsmYW1wOyAhY2Fwcy0mZ3Q7bGF0ZV9jcHVfZW5hYmxlKGNhcHMpKQomIzQzOwkJCQlicmVhazsKJiM0MzsKIAkJCS8qCiAJCQkgKiBXZSBoYXZlIHRvIGlzc3VlIGNwdV9lbmFibGUoKSBpcnJlc3BlY3RpdmUgb2YKIAkJCSAqIHdoZXRoZXIgdGhlIENQVSBoYXMgaXQgb3Igbm90LCBhcyBpdCBpcyBlbmFiZWxkCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHMgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHMKaW5kZXggOWI4NWE4NGY2ZmQ0OTQuLjYzMDk1M2Q1OWM1Mjc2IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC90b29scy9jcHVjYXBzCkBAIC03MCw2ICYjNDM7NzAsNyBAQCBIQVNfVklSVF9IT1NUX0VYVE4KIEhBU19XRlhUCiBIQVNfWE5YCiBIQUZUCiYjNDM7SFZPX0NPTVBBVElCTEUKIEhXX0RCTQogS1ZNX0hWSEUKIEtWTV9QUk9URUNURURfTU9ERQpkaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IDI0OGY2MmQwYjU5MGVjLi45MzIyZDk2MmM5Y2M4MCAxMDA2NDQKLS0tIGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMjQsNiAmIzQzOzI0LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsIHBndGFibGVfdCBwdGUpCiAJc2V0X3BtZChwbWQsIF9fcG1kKCh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwdGUpKSk7CiB9CiAKJiM0MzsjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9QT1BVTEFURV9WTUVNTUFQX1BNRAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWRfdCAqcG1kcCwgcHRlX3QgKnBndGFibGUsCiYjNDM7CQkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7ewomIzQzOwlwbWRfcG9wdWxhdGVfa2VybmVsKCZhbXA7aW5pdF9tbSwgcG1kcCwgcGd0YWJsZSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKICNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHVkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkLCBwbWRfdCAqcG1kKQpkaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDIyMzUyOGMwNGQ3MzkyLi5lN2I2NTA1NmVmNzM4NCAxMDA2NDQKLS0tIGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtNjM4LDYgJiM0Mzs2MzgsMTQgQEAgc3RhdGljIGlubGluZSBsb25nIHBtZF9wcm90bm9uZShwbWRfdCBwbWQpCiAjZGVmaW5lIHBtZF9sZWFmKHBtZCkJCSgocG1kX3ZhbChwbWQpICZhbXA7IF9QQUdFX0hVR0UpICE9IDApCiAjZGVmaW5lIHB1ZF9sZWFmKHB1ZCkJCSgocHVkX3ZhbChwdWQpICZhbXA7IF9QQUdFX0hVR0UpICE9IDApCiAKJiM0MzsjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9VUERBVEVfVk1FTU1BUF9QVEUKJiM0MztzdGF0aWMgaW5saW5lIGludCB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsCiYjNDM7CQkJCQkgcHRlX3QgcHRlKQomIzQzO3sKJiM0MzsJc2V0X3B0ZShwdGVwLCBwdGUpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKgogICogV2UgcHJvdmlkZSBvdXIgb3duIGdldF91bm1hcHBlZCBhcmVhIHRvIGNvcGUgd2l0aCB0aGUgdmlydHVhbCBhbGlhc2luZwogICogY29uc3RyYWludHMgcGxhY2VkIG9uIHVzIGJ5IHRoZSBjYWNoZSBhcmNoaXRlY3R1cmUuCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IDc3MGNlMThhNzMyOGI4Li44ZGJiZTYyYjI1NzQyNSAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTMxLDYgJiM0MzszMSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCXNldF9wbWQocG1kLCBfX3BtZCgocGZuICZsdDsmbHQ7IF9QQUdFX1BGTl9TSElGVCkgfCBfUEFHRV9UQUJMRSkpOwogfQogCiYjNDM7I2RlZmluZSBfX0hBVkVfQVJDSF9UUllfUE9QVUxBVEVfVk1FTU1BUF9QTUQKJiM0MztzdGF0aWMgaW5saW5lIGludCB0cnlfcG9wdWxhdGVfdm1lbW1hcF9wbWQocG1kX3QgKnBtZHAsIHB0ZV90ICpwZ3RhYmxlLAomIzQzOwkJCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyKQomIzQzO3sKJiM0MzsJcG1kX3BvcHVsYXRlX2tlcm5lbCgmYW1wO2luaXRfbW0sIHBtZHAsIHBndGFibGUpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQsIHBtZF90ICpwbWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDVkNTc1NmJkYTgyZTNkLi5hMTFjNTY5ZWUyZjA2ZiAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTExNjIsNiAmIzQzOzExNjIsMTQgQEAgc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbW9kaWZ5KHB1ZF90IHB1ZCwgcGdwcm90X3QgbmV3cHJvdCkKIAogI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqLwogCiYjNDM7I2RlZmluZSBfX0hBVkVfQVJDSF9UUllfVVBEQVRFX1ZNRU1NQVBfUFRFCiYjNDM7c3RhdGljIGlubGluZSBpbnQgdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLAomIzQzOwkJCQkJIHB0ZV90IHB0ZSkKJiM0Mzt7CiYjNDM7CXNldF9wdGUocHRlcCwgcHRlKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoKICAqIEVuY29kZS9kZWNvZGUgc3dhcCBlbnRyaWVzIGFuZCBzd2FwIFBURXMuIFN3YXAgUFRFcyBhcmUgYWxsIFBURXMgdGhhdAogICogYXJlICFwdGVfbm9uZSgpICZhbXA7JmFtcDsgIXB0ZV9wcmVzZW50KCkuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKaW5kZXggYzg4NjkxYjE1ZjNjNjcuLjQ3YjU2YmJkNjIzNjE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC04Miw2ICYjNDM7ODIsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwKIAlzZXRfcG1kKHBtZCwgX19wbWQoKChwdGV2YWxfdClwZm4gJmx0OyZsdDsgUEFHRV9TSElGVCkgfCBfUEFHRV9UQUJMRSkpOwogfQogCiYjNDM7I2RlZmluZSBfX0hBVkVfQVJDSF9UUllfUE9QVUxBVEVfVk1FTU1BUF9QTUQKJiM0MztzdGF0aWMgaW5saW5lIGludCB0cnlfcG9wdWxhdGVfdm1lbW1hcF9wbWQocG1kX3QgKnBtZHAsIHB0ZV90ICpwZ3RhYmxlLAomIzQzOwkJCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyKQomIzQzO3sKJiM0MzsJcG1kX3BvcHVsYXRlX2tlcm5lbCgmYW1wO2luaXRfbW0sIHBtZHAsIHBndGFibGUpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAjaWYgQ09ORklHX1BHVEFCTEVfTEVWRUxTICZndDsgMgogZXh0ZXJuIHZvaWQgX19fcG1kX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBtZF90ICpwbWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggYWMyOTVjYTZjOTJmOTkuLjk3NDE1MTU2NDA3MWNiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xMzcyLDYgJiM0MzsxMzcyLDE0IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiB9CiAjZW5kaWYKIAomIzQzOyNkZWZpbmUgX19IQVZFX0FSQ0hfVFJZX1VQREFURV9WTUVNTUFQX1BURQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHRyeV91cGRhdGVfdm1lbW1hcF9wdGUodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwKJiM0MzsJCQkJCSBwdGVfdCBwdGUpCiYjNDM7ewomIzQzOwlzZXRfcHRlKHB0ZXAsIHB0ZSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKICNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRAogc3RhdGljIGlubGluZSBwdWRfdCBwdWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdWRfdCAqcHVkcCwgcHVkX3QgcHVkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaAppbmRleCBlMWEyZTFiN2M4ZTdiOC4uYzQ3OTZjNTRiNzAyYTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oCkBAIC0xMjgsNCAmIzQzOzEyOCwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCh2b2lkKQogfQogI2VuZGlmIC8qIF9fSEFWRV9BUkNIX0dJR0FOVElDX1BBR0VfUlVOVElNRV9TVVBQT1JURUQgKi8KIAomIzQzOyNpZm5kZWYgX19IQVZFX0FSQ0hfSFZPX1NVUFBPUlRFRAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fc3VwcG9ydGVkKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApOwomIzQzO30KJiM0MzsjZW5kaWYgLyogX19IQVZFX0FSQ0hfSFZPX1NVUFBPUlRFRCAqLwomIzQzOwogI2VuZGlmIC8qIF9BU01fR0VORVJJQ19IVUdFVExCX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYl92bWVtbWFwLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hNjcxZWI0YTRmZjQ2NgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYl92bWVtbWFwLmgKQEAgLTAsMCAmIzQzOzEsMjAgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOyNpZm5kZWYgX0xJTlVYX0hVR0VUTEJfVk1FTU1BUF9ICiYjNDM7I2RlZmluZSBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQCiYjNDM7CiYjNDM7Ym9vbCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKHZvaWQpOwomIzQzOwomIzQzOyNlbHNlIC8qIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUCAqLwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9MSU5VWF9IVUdFVExCX1ZNRU1NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaAppbmRleCA5MTc0ZmE1OWJiYzU0ZC4uZWQ0NDZkOTVjYTM3MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGdhbGxvYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGdhbGxvYy5oCkBAIC0yNiw0ICYjNDM7MjYsMjQgQEAKIAkJCWFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MoYWRkciwgYWRkcik7CQlcCiAJfSB3aGlsZSAoMCkKIAomIzQzOyNpZm5kZWYgX19IQVZFX0FSQ0hfVFJZX1BPUFVMQVRFX1ZNRU1NQVBfUE1ECiYjNDM7LyoKJiM0MzsgKiB0cnlfcG9wdWxhdGVfdm1lbW1hcF9wbWQgLSBQb3B1bGF0ZSBhIFBNRCB0aGF0IGlzIGluIHVzZSBieSB0aGUgdm1lbW1hcC4KJiM0MzsgKiBAYWRkcjogQmFzZSBhZGRyZXNzIG9mIHRoZSByZW1hcHBlZCBQTUQuCiYjNDM7ICogQHBtZHA6IFBhZ2UgdGFibGUgcG9pbnRlciB0byBiZSBvdmVyd3JpdHRlbi4KJiM0MzsgKiBAcGd0YWJsZTogUG9pbnRlciB0byB0aGUgcGFnZSB0YWJsZSB0aGF0IHRoZSBuZXcgUE1EIHdpbGwgcG9pbnQgdG8uCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdG8gYmUgdXNlZCB0byB1cGRhdGUgUE1EcyB0aGF0IG1hcCB0aGUgdm1lbW1hcCB0bwomIzQzOyAqIHBvaW50IHRvIGEgcGFnZSBvZiBhbHJlYWR5LXBvcHVsYXRlZCBQVEVzIHRoYXQgbWFwIHRoZSBzYW1lIHBhZ2VzLgomIzQzOyAqCiYjNDM7ICogSW1wbGVtZW50YXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gbXVzdCBlbnN1cmUgdGhhdCwgd2hpbGUgdGhlIHVwZGF0ZSBpcyB0YWtpbmcKJiM0MzsgKiBwbGFjZSwgQ1BVcyB3aWxsIG5vdCBmYXVsdCBvbiB0aGUgcmVtYXBwZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWRfdCAqcG1kcCwgcHRlX3QgKnBndGFibGUsCiYjNDM7CQkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogI2VuZGlmIC8qIF9MSU5VWF9QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKaW5kZXggMjk4MWUzODZkYTdiM2MuLmUxYWJjY2Y3NmJiNDYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaApAQCAtNDU3LDYgJiM0Mzs0NTcsMjcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAjZW5kaWYKICNkZWZpbmUgc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKSBzZXRfcHRlcyhtbSwgYWRkciwgcHRlcCwgcHRlLCAxKQogCiYjNDM7I2lmbmRlZiBfX0hBVkVfQVJDSF9UUllfVVBEQVRFX1ZNRU1NQVBfUFRFCiYjNDM7LyoKJiM0MzsgKiB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlIC0gUmVtYXAgUFRFcyB1c2VkIGJ5IHRoZSB2bWVtbWFwLgomIzQzOyAqIEBhZGRyOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHJlbWFwcGVkIFBURS4KJiM0MzsgKiBAcHRlcDogUGFnZSB0YWJsZSBwb2ludGVyIHRvIGJlIG92ZXJ3cml0dGVuLgomIzQzOyAqIEBwdGU6IFBhZ2UgdGFibGUgZW50cnkgdG8gd3JpdGUuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdG8gYmUgdXNlZCB0byB1cGRhdGUgUFRFcyB0aGF0IG1hcCB0aGUgdm1lbW1hcC4gVGhlCiYjNDM7ICogb25seSB2YWxpZCB0cmFuc2l0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBmdW5jdGlvbiBhcmU6IGxlYWYtbGV2ZWwKJiM0MzsgKiAoUEFHRV9TSVpFKSwgdmFsaWQtdG8tdmFsaWQuIFRoZSBwZm4gYW5kIHByb3QgYml0cyBtYXkgYmUgY2hhbmdlZC4KJiM0MzsgKgomIzQzOyAqIEltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgZW5zdXJlIHRoYXQsIHdoaWxlIHRoZSB1cGRhdGUgaXMgdGFraW5nCiYjNDM7ICogcGxhY2UsIENQVXMgd2lsbCBub3QgZmF1bHQgb24gdGhlIHJlbWFwcGVkIHZpcnR1YWwgYWRkcmVzcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsCiYjNDM7CQkJCQkgcHRlX3QgcHRlKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKICNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9TRVRfQUNDRVNTX0ZMQUdTCiBleHRlcm4gaW50IHB0ZXBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCwKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA1NzEyMTJiODA4MzVlYy4uMjk4NjczYTZjNTdjNWMgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTQ3LDcgJiM0Mzs0Nyw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbm9kZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2Vfb3duZXIuaCZndDsKICNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2V0bGJfdm1lbW1hcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aHVnZXRsYl9jbWEuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2h1Z2V0bGJfaW50ZXJuYWwuaCYjMzQ7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZS1pc29sYXRpb24uaCZndDsKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfc3lzZnMuYyBiL21tL2h1Z2V0bGJfc3lzZnMuYwppbmRleCA3OWVjZTkxNDA2YmZhNC4uODNhOTVmNTE0MmY1YTQgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGJfc3lzZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiX3N5c2ZzLmMKQEAgLTgsNyAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2Vfb3duZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYWdlLWlzb2xhdGlvbi5oJmd0OwogCi0jaW5jbHVkZSAmIzM0O2h1Z2V0bGJfdm1lbW1hcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aHVnZXRsYl9pbnRlcm5hbC5oJiMzNDsKIAogI2RlZmluZSBIU1RBVEVfQVRUUl9STyhfbmFtZSkgXApkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl92bWVtbWFwLmMgYi9tbS9odWdldGxiX3ZtZW1tYXAuYwppbmRleCAxMzNiNDZkZmIwOWY1Yy4uN2U3Zjg1NzljYzJhZTUgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGJfdm1lbW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGJfdm1lbW1hcC5jCkBAIC0xNiw5ICYjNDM7MTYsMTEgQEAKICNpbmNsdWRlICZsdDtsaW51eC9tbWRlYnVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZXdhbGsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZ2FsbG9jLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2h1Z2V0bGIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaHVnZXRsYl92bWVtbWFwLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vdGxiZmx1c2guaCZndDsKLSNpbmNsdWRlICYjMzQ7aHVnZXRsYl92bWVtbWFwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7aHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKIAogLyoqCkBAIC0zNCw3ICYjNDM7MzYsNyBAQAogICoJCQlvcGVyYXRpb25zLgogICovCiBzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrIHsKLQl2b2lkCQkJKCpyZW1hcF9wdGUpKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJaW50CQkJKCpyZW1hcF9wdGUpKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkJICAgICBzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrICp3YWxrKTsKIAogCXVuc2lnbmVkIGxvbmcJCW5yX3dhbGtlZDsKQEAgLTU0LDYgJiM0Mzs1Niw3IEBAIHN0YXRpYyBpbnQgdm1lbW1hcF9zcGxpdF9wbWQocG1kX3QgKnBtZCwgc3RydWN0IHBhZ2UgKmhlYWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCQkgICAgIHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspCiB7CiAJcG1kX3QgX19wbWQ7CiYjNDM7CWludCByZXQ7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gc3RhcnQ7CiAJcHRlX3QgKnBndGFibGU7CkBAIC03Myw4ICYjNDM7NzYsMTUgQEAgc3RhdGljIGludCB2bWVtbWFwX3NwbGl0X3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgcGFnZSAqaGVhZCwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJc2V0X3B0ZV9hdCgmYW1wO2luaXRfbW0sIGFkZHIsIHB0ZSwgZW50cnkpOwogCX0KIAomIzQzOwlyZXQgPSAwOwogCXNwaW5fbG9jaygmYW1wO2luaXRfbW0ucGFnZV90YWJsZV9sb2NrKTsKIAlpZiAobGlrZWx5KHBtZF9sZWFmKCpwbWQpKSkgewomIzQzOwkJLyogTWFrZSBwdGUgdmlzaWJsZSBiZWZvcmUgcG1kLiBTZWUgY29tbWVudCBpbiBwbWRfaW5zdGFsbCgpLiAqLwomIzQzOwkJc21wX3dtYigpOwomIzQzOwkJcmV0ID0gdHJ5X3BvcHVsYXRlX3ZtZW1tYXBfcG1kKHBtZCwgcGd0YWJsZSwgc3RhcnQpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIGZyZWU7CiYjNDM7CiAJCS8qCiAJCSAqIEhpZ2hlciBvcmRlciBhbGxvY2F0aW9ucyBmcm9tIGJ1ZGR5IGFsbG9jYXRvciBtdXN0IGJlIGFibGUgdG8KIAkJICogYmUgdHJlYXRlZCBhcyBpbmRlcGVuZGVudCBzbWFsbCBwYWdlcyAoYXMgdGhleSBjYW4gYmUgZnJlZWQKQEAgLTgzLDE3ICYjNDM7OTMsMTcgQEAgc3RhdGljIGludCB2bWVtbWFwX3NwbGl0X3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgcGFnZSAqaGVhZCwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJaWYgKCFQYWdlUmVzZXJ2ZWQoaGVhZCkpCiAJCQlzcGxpdF9wYWdlKGhlYWQsIGdldF9vcmRlcihQTURfU0laRSkpOwogCi0JCS8qIE1ha2UgcHRlIHZpc2libGUgYmVmb3JlIHBtZC4gU2VlIGNvbW1lbnQgaW4gcG1kX2luc3RhbGwoKS4gKi8KLQkJc21wX3dtYigpOwotCQlwbWRfcG9wdWxhdGVfa2VybmVsKCZhbXA7aW5pdF9tbSwgcG1kLCBwZ3RhYmxlKTsKIAkJaWYgKCEod2Fsay0mZ3Q7ZmxhZ3MgJmFtcDsgVk1FTU1BUF9TUExJVF9OT19UTEJfRkxVU0gpKQogCQkJZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgc3RhcnQgJiM0MzsgUE1EX1NJWkUpOwotCX0gZWxzZSB7Ci0JCXB0ZV9mcmVlX2tlcm5lbCgmYW1wO2luaXRfbW0sIHBndGFibGUpOwotCX0KLQlzcGluX3VubG9jaygmYW1wO2luaXRfbW0ucGFnZV90YWJsZV9sb2NrKTsKJiM0MzsJfSBlbHNlCiYjNDM7CQlnb3RvIGZyZWU7CiAKLQlyZXR1cm4gMDsKJiM0MztvdXQ6CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aW5pdF9tbS5wYWdlX3RhYmxlX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO2ZyZWU6CiYjNDM7CXB0ZV9mcmVlX2tlcm5lbCgmYW1wO2luaXRfbW0sIHBndGFibGUpOwomIzQzOwlnb3RvIG91dDsKIH0KIAogc3RhdGljIGludCB2bWVtbWFwX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCkBAIC0xNDEsMTEgJiM0MzsxNTEsMTMgQEAgc3RhdGljIGludCB2bWVtbWFwX3B0ZV9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1tX3dhbGsgKndhbGspCiB7CiAJc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqdm1lbW1hcF93YWxrID0gd2Fsay0mZ3Q7cHJpdmF0ZTsKJiM0MzsJaW50IHJldCA9IDA7CiAKLQl2bWVtbWFwX3dhbGstJmd0O3JlbWFwX3B0ZShwdGUsIGFkZHIsIHZtZW1tYXBfd2Fsayk7Ci0Jdm1lbW1hcF93YWxrLSZndDtucl93YWxrZWQmIzQzOyYjNDM7OwomIzQzOwlyZXQgPSB2bWVtbWFwX3dhbGstJmd0O3JlbWFwX3B0ZShwdGUsIGFkZHIsIHZtZW1tYXBfd2Fsayk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJdm1lbW1hcF93YWxrLSZndDtucl93YWxrZWQmIzQzOyYjNDM7OwogCi0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgdm1lbW1hcF9yZW1hcF9vcHMgPSB7CkBAIC0xNjQsMTMgJiM0MzsxNzYsMTEgQEAgc3RhdGljIGludCB2bWVtbWFwX3JlbWFwX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCXJldCA9IHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2Uoc3RhcnQsIGVuZCwgJmFtcDt2bWVtbWFwX3JlbWFwX29wcywKIAkJCQkgICAgTlVMTCwgd2Fsayk7CiAJbW1hcF9yZWFkX3VubG9jaygmYW1wO2luaXRfbW0pOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CiAKIAlpZiAod2Fsay0mZ3Q7cmVtYXBfcHRlICZhbXA7JmFtcDsgISh3YWxrLSZndDtmbGFncyAmYW1wOyBWTUVNTUFQX1JFTUFQX05PX1RMQl9GTFVTSCkpCiAJCWZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTE5OSwxOCAmIzQzOzIwOSwyMCBAQCBzdGF0aWMgdm9pZCBmcmVlX3ZtZW1tYXBfcGFnZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCiAJCWZyZWVfdm1lbW1hcF9wYWdlKHBhZ2UpOwogfQogCi1zdGF0aWMgdm9pZCB2bWVtbWFwX3JlbWFwX3B0ZShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICBzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrICp3YWxrKQomIzQzO3N0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9wdGUocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCSAgICAgc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqd2FsaykKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHB0ZV9wYWdlKHB0ZXBfZ2V0KHB0ZSkpOwogCXB0ZV90IGVudHJ5OwomIzQzOwlib29sIGhlYWQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWhlYWQgPSB3YWxrLSZndDtucl93YWxrZWQgPT0gMCAmYW1wOyZhbXA7IHdhbGstJmd0O3ZtZW1tYXBfaGVhZDsKIAogCS8qIFJlbWFwcGluZyB0aGUgaGVhZCBwYWdlIHJlcXVpcmVzIHIvdyAqLwotCWlmICh1bmxpa2VseSh3YWxrLSZndDtucl93YWxrZWQgPT0gMCAmYW1wOyZhbXA7IHdhbGstJmd0O3ZtZW1tYXBfaGVhZCkpIHsKJiM0MzsJaWYgKHVubGlrZWx5KGhlYWQpKSB7CiAJCVZNX1dBUk5fT05fT05DRSghUGFnZUhlYWQoKGNvbnN0IHN0cnVjdCBwYWdlICopYWRkcikpOwogCi0JCWxpc3RfZGVsKCZhbXA7d2Fsay0mZ3Q7dm1lbW1hcF9oZWFkLSZndDtscnUpOwotCiAJCS8qCiAJCSAqIE1ha2VzIHN1cmUgdGhhdCBwcmVjZWRpbmcgc3RvcmVzIHRvIHRoZSBwYWdlIGNvbnRlbnRzIGZyb20KIAkJICogdm1lbW1hcF9yZW1hcF9mcmVlKCkgYmVjb21lIHZpc2libGUgYmVmb3JlIHRoZSBzZXRfcHRlX2F0KCkKQEAgLTIyOSwzNSAmIzQzOzI0MSw1NiBAQCBzdGF0aWMgdm9pZCB2bWVtbWFwX3JlbWFwX3B0ZShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCWVudHJ5ID0gbWtfcHRlKHdhbGstJmd0O3ZtZW1tYXBfdGFpbCwgUEFHRV9LRVJORUxfUk8pOwogCX0KIAomIzQzOwlyZXQgPSB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKGFkZHIsIHB0ZSwgZW50cnkpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogV2Ugc3VjY2Vzc2Z1bGx5IG92ZXJ3cm90ZSB0aGUgdm1lbW1hcCBQVEUsIHNvIHdlIGNhbiBmcmVlCiYjNDM7CSAqIHRoZSB2bWVtbWFwIHBhZ2UgdGhhdCB3YXMganVzdCB1bm1hcHBlZCwgYW5kIGlmIHdlIG1hcHBlZAomIzQzOwkgKiB0aGUgbmV3IGhlYWQgcGFnZSwgcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3Qgc28gdGhhdCBpdAomIzQzOwkgKiBkb2VzbiYjMzk7dCBnZXQgZnJlZWQgbGF0ZXIuCiYjNDM7CSAqLwogCWxpc3RfYWRkKCZhbXA7cGFnZS0mZ3Q7bHJ1LCB3YWxrLSZndDt2bWVtbWFwX3BhZ2VzKTsKLQlzZXRfcHRlX2F0KCZhbXA7aW5pdF9tbSwgYWRkciwgcHRlLCBlbnRyeSk7CiYjNDM7CWlmIChoZWFkKQomIzQzOwkJbGlzdF9kZWwoJmFtcDt3YWxrLSZndDt2bWVtbWFwX2hlYWQtJmd0O2xydSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB2bWVtbWFwX3Jlc3RvcmVfcHRlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQlzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrICp3YWxrKQomIzQzO3N0YXRpYyBpbnQgdm1lbW1hcF9yZXN0b3JlX3B0ZShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJICAgICAgIHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspCiB7CiAJc3RydWN0IHBhZ2UgKnNyYyA9IHB0ZV9wYWdlKHB0ZXBfZ2V0KHB0ZSkpLCAqZHN0OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCF3YWxrLSZndDt2bWVtbWFwX3RhaWwpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKgotCSAqIFdoZW4gcm9sbGluZyBiYWNrIHZtZW1tYXBfcmVtYXBfZnJlZSgpLCBrZWVwIHRoZSBjb3BpZWQgaGVhZCBwYWdlCiYjNDM7CSAqIFdoZW4gcmVzdG9yaW5nIGEgcGFydGlhbGx5LUhWT2VkIHBhZ2UsIGtlZXAgdGhlIGNvcGllZCBoZWFkIHBhZ2UKIAkgKiBtYXBwaW5nIGFuZCByZXN0b3JlIG9ubHkgUFRFcyBjdXJyZW50bHkgcG9pbnRpbmcgYXQgdGhlIHNoYXJlZCB0YWlsCiAJICogcGFnZS4KIAkgKi8KLQlpZiAod2Fsay0mZ3Q7dm1lbW1hcF90YWlsICZhbXA7JmFtcDsgd2Fsay0mZ3Q7dm1lbW1hcF90YWlsICE9IHNyYykKLQkJcmV0dXJuOwomIzQzOwlpZiAod2Fsay0mZ3Q7dm1lbW1hcF90YWlsICE9IHNyYykKJiM0MzsJCXJldHVybiAwOwogCiAJVk1fV0FSTl9PTl9PTkNFKFBhZ2VIZWFkKChjb25zdCBzdHJ1Y3QgcGFnZSAqKWFkZHIpKTsKIAogCWRzdCA9IGxpc3RfZmlyc3RfZW50cnkod2Fsay0mZ3Q7dm1lbW1hcF9wYWdlcywgc3RydWN0IHBhZ2UsIGxydSk7Ci0JbGlzdF9kZWwoJmFtcDtkc3QtJmd0O2xydSk7CiAJY29weV9wYWdlKHBhZ2VfdG9fdmlydChkc3QpLCBwYWdlX3RvX3ZpcnQoc3JjKSk7CiAKIAkvKgogCSAqIE1ha2VzIHN1cmUgdGhhdCBwcmVjZWRpbmcgc3RvcmVzIHRvIHRoZSBwYWdlIGNvbnRlbnRzIGJlY29tZSB2aXNpYmxlCi0JICogYmVmb3JlIHRoZSBzZXRfcHRlX2F0KCkgd3JpdGUuCiYjNDM7CSAqIGJlZm9yZSB0aGUgdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZSgpIHdyaXRlLgogCSAqLwogCXNtcF93bWIoKTsKLQlzZXRfcHRlX2F0KCZhbXA7aW5pdF9tbSwgYWRkciwgcHRlLCBta19wdGUoZHN0LCBQQUdFX0tFUk5FTCkpOwomIzQzOwomIzQzOwlyZXQgPSB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKGFkZHIsIHB0ZSwgbWtfcHRlKGRzdCwgUEFHRV9LRVJORUwpKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWxpc3RfZGVsKCZhbXA7ZHN0LSZndDtscnUpOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0yNzksNiAmIzQzOzMxMiw3IEBAIHN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9zcGxpdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIAlyZXR1cm4gdm1lbW1hcF9yZW1hcF9yYW5nZShzdGFydCwgZW5kLCAmYW1wO3dhbGspOwogfQogCiYjNDM7c3RhdGljIGNvbnN0IGludCBWTUVNTUFQX1JFTUFQX0lOQ09NUExFVEUgPSAxOwogLyoqCiAgKiB2bWVtbWFwX3JlbWFwX2ZyZWUgLSByZW1hcCB0aGUgdm1lbW1hcCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UgW0BzdGFydCwgQGVuZCkKICAqCQkJdG8gdXNlIEB2bWVtbWFwX2hlYWQvdGFpbCwgdGhlbiBmcmVlIHZtZW1tYXAgd2hpY2gKQEAgLTI5Myw3ICYjNDM7MzI3LDggQEAgc3RhdGljIGludCB2bWVtbWFwX3JlbWFwX3NwbGl0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogICoJCXJlc3BvbnNpYmlsaXR5IHRvIGZyZWUgcGFnZXMuCiAgKiBAZmxhZ3M6CW1vZGlmaWNhdGlvbnMgdG8gdm1lbW1hcF9yZW1hcF93YWxrIGZsYWdzCiAgKgotICogUmV0dXJuOiAlMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KJiM0MzsgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsIFZNRU1NQVBfUkVNQVBfSU5DT01QTEVURSBpZiB0aGUgcGFnZSBpcyBpbmNvbXBsZXRlbHkKJiM0MzsgKiAgICAgICAgIG9wdGltaXplZCwgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCiAgKi8KIHN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9mcmVlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJICAgICAgc3RydWN0IHBhZ2UgKnZtZW1tYXBfaGVhZCwKQEAgLTMyOCw3ICYjNDM7MzYzLDggQEAgc3RhdGljIGludCB2bWVtbWFwX3JlbWFwX2ZyZWUodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCS5mbGFncwkJPSAwLAogCX07CiAKLQl2bWVtbWFwX3JlbWFwX3JhbmdlKHN0YXJ0LCBlbmQsICZhbXA7d2Fsayk7CiYjNDM7CWlmICh2bWVtbWFwX3JlbWFwX3JhbmdlKHN0YXJ0LCBlbmQsICZhbXA7d2FsaykpCiYjNDM7CQlyZXR1cm4gVk1FTU1BUF9SRU1BUF9JTkNPTVBMRVRFOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTM1NywxMCAmIzQzOzM5MywzOCBAQCBzdGF0aWMgaW50IGFsbG9jX3ZtZW1tYXBfcGFnZV9saXN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCXJldHVybiAtRU5PTUVNOwogfQogCiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICp2bWVtbWFwX2dldF90YWlsKHVuc2lnbmVkIGludCBvcmRlciwgc3RydWN0IHpvbmUgKnpvbmUpCiYjNDM7ewomIzQzOwljb25zdCB1bnNpZ25lZCBpbnQgaWR4ID0gb3JkZXIgLSBWTUVNTUFQX1RBSUxfTUlOX09SREVSOwomIzQzOwlzdHJ1Y3QgcGFnZSAqdGFpbCwgKnA7CiYjNDM7CWludCBub2RlID0gem9uZV90b19uaWQoem9uZSk7CiYjNDM7CiYjNDM7CXRhaWwgPSBSRUFEX09OQ0Uoem9uZS0mZ3Q7dm1lbW1hcF90YWlsc1tpZHhdKTsKJiM0MzsJaWYgKGxpa2VseSh0YWlsKSkKJiM0MzsJCXJldHVybiB0YWlsOwomIzQzOwomIzQzOwl0YWlsID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgMCk7CiYjNDM7CWlmICghdGFpbCkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlwID0gcGFnZV90b192aXJ0KHRhaWwpOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IFBBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgcGFnZSk7IGkmIzQzOyYjNDM7KQomIzQzOwkJaW5pdF9jb21wb3VuZF90YWlsKHAgJiM0MzsgaSwgTlVMTCwgb3JkZXIsIHpvbmUpOwomIzQzOwomIzQzOwlpZiAoY21weGNoZygmYW1wO3pvbmUtJmd0O3ZtZW1tYXBfdGFpbHNbaWR4XSwgTlVMTCwgdGFpbCkpIHsKJiM0MzsJCV9fZnJlZV9wYWdlKHRhaWwpOwomIzQzOwkJdGFpbCA9IFJFQURfT05DRSh6b25lLSZndDt2bWVtbWFwX3RhaWxzW2lkeF0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0YWlsOwomIzQzO30KJiM0MzsKIC8qKgogICogdm1lbW1hcF9yZW1hcF9hbGxvYyAtIHJlbWFwIHRoZSB2bWVtbWFwIHZpcnR1YWwgYWRkcmVzcyByYW5nZSBbQHN0YXJ0LCBlbmQpCiAgKgkJCSB0byB0aGUgcGFnZSB3aGljaCBpcyBmcm9tIHRoZSBAdm1lbW1hcF9wYWdlcwogICoJCQkgcmVzcGVjdGl2ZWx5LgomIzQzOyAqIEBoOgkJdGhlIGhzdGF0ZSBmb3IgdGhlIGZvbGlvIHdob3NlIHZtZW1tYXAgaXMgZ2V0dGluZyByZW1hcHBlZAomIzQzOyAqIEBmb2xpbzoJdGhlIGZvbGlvIHdob3NlIHZtZW1tYXAgaXMgZ2V0dGluZyByZW1hcHBlZAogICogQHN0YXJ0OglzdGFydCBhZGRyZXNzIG9mIHRoZSB2bWVtbWFwIHZpcnR1YWwgYWRkcmVzcyByYW5nZSB0aGF0IHdlIHdhbnQKICAqCQl0byByZW1hcC4KICAqIEBlbmQ6CWVuZCBhZGRyZXNzIG9mIHRoZSB2bWVtbWFwIHZpcnR1YWwgYWRkcmVzcyByYW5nZSB0aGF0IHdlIHdhbnQgdG8KQEAgLTM2OSwyMCAmIzQzOzQzMyw2OCBAQCBzdGF0aWMgaW50IGFsbG9jX3ZtZW1tYXBfcGFnZV9saXN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogICoKICAqIFJldHVybjogJTAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9hbGxvYyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKJiM0MztzdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfYWxsb2MoY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlMSVNUX0hFQUQodm1lbW1hcF9wYWdlcyk7Ci0Jc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayB3YWxrID0gewomIzQzOwlzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrIHdhbGs7CiYjNDM7CXN0cnVjdCBwYWdlICp2bWVtbWFwX3RhaWw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXZtZW1tYXBfdGFpbCA9IHZtZW1tYXBfZ2V0X3RhaWwoaC0mZ3Q7b3JkZXIsIGZvbGlvX3pvbmUoZm9saW8pKTsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghdm1lbW1hcF90YWlsKSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlpZiAoYWxsb2Nfdm1lbW1hcF9wYWdlX2xpc3Qoc3RhcnQsIGVuZCwgJmFtcDt2bWVtbWFwX3BhZ2VzKSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwl3YWxrID0gKHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGspIHsKIAkJLnJlbWFwX3B0ZQk9IHZtZW1tYXBfcmVzdG9yZV9wdGUsCiYjNDM7CQkudm1lbW1hcF90YWlsCT0gdm1lbW1hcF90YWlsLAogCQkudm1lbW1hcF9wYWdlcwk9ICZhbXA7dm1lbW1hcF9wYWdlcywKIAkJLmZsYWdzCQk9IGZsYWdzLAogCX07CiAKLQlpZiAoYWxsb2Nfdm1lbW1hcF9wYWdlX2xpc3Qoc3RhcnQsIGVuZCwgJmFtcDt2bWVtbWFwX3BhZ2VzKSkKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CXJldCA9IHZtZW1tYXBfcmVtYXBfcmFuZ2Uoc3RhcnQsIGVuZCwgJmFtcDt3YWxrKTsKIAotCXJldHVybiB2bWVtbWFwX3JlbWFwX3JhbmdlKHN0YXJ0LCBlbmQsICZhbXA7d2Fsayk7CiYjNDM7CS8qIE5vdCBhbGwgcGFnZXMgbWF5IGhhdmUgYmVlbiBjb25zdW1lZCAqLwomIzQzOwlmcmVlX3ZtZW1tYXBfcGFnZV9saXN0KCZhbXA7dm1lbW1hcF9wYWdlcyk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2VudW0gaHVnZXRsYl9odm9fc3RhdHVzIHsKJiM0MzsJSFZPX0lOQUNUSVZFID0gMCwKJiM0MzsJSFZPX0FDVElWRSwKJiM0MzsJSFZPX1BFUk1BTkVOVExZX0lOQUNUSVZFLAomIzQzO307CiYjNDM7c3RhdGljIGVudW0gaHVnZXRsYl9odm9fc3RhdHVzIGh2b19zdGF0dXMgPSBIVk9fSU5BQ1RJVkU7CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgaHVnZXRsYl9odm9fc3RhdHVzX3RyeV9zZXQoZW51bSBodWdldGxiX2h2b19zdGF0dXMgc3RhdHVzKQomIzQzO3sKJiM0MzsJZW51bSBodWdldGxiX2h2b19zdGF0dXMgb2xkOwomIzQzOwomIzQzOwlvbGQgPSBSRUFEX09OQ0UoaHZvX3N0YXR1cyk7CiYjNDM7CiYjNDM7cmV0cnk6CiYjNDM7CS8qIFRoZSBjdXJyZW50IHNldHRpbmcgaXMgd2hhdCB3ZSB3YW50LiAqLwomIzQzOwlpZiAob2xkID09IHN0YXR1cykKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkvKiBUaGUgY3VycmVudCBzZXR0aW5nIGNhbm5vdCBiZSBjaGFuZ2VkLiAqLwomIzQzOwlpZiAob2xkICE9IEhWT19JTkFDVElWRSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKCF0cnlfY21weGNoZ19yZWxheGVkKCZhbXA7aHZvX3N0YXR1cywgJmFtcDtvbGQsIHN0YXR1cykpCiYjNDM7CQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gaHVnZXRsYl9odm9fc3RhdHVzX3RyeV9zZXQoSFZPX1BFUk1BTkVOVExZX0lOQUNUSVZFKTsKIH0KIAogc3RhdGljIGJvb2wgdm1lbW1hcF9vcHRpbWl6ZV9lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTik7CkBAIC00MTUsNyAmIzQzOzUyNyw3IEBAIHN0YXRpYyBpbnQgX19odWdldGxiX3ZtZW1tYXBfcmVzdG9yZV9mb2xpbyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLAogCSAqIFdoZW4gYSBIdWdlVExCIHBhZ2UgaXMgZnJlZWQgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgcHJldmlvdXNseQogCSAqIGRpc2NhcmRlZCB2bWVtbWFwIHBhZ2VzIG11c3QgYmUgYWxsb2NhdGVkIGFuZCByZW1hcHBpbmcuCiAJICovCi0JcmV0ID0gdm1lbW1hcF9yZW1hcF9hbGxvYyh2bWVtbWFwX3N0YXJ0LCB2bWVtbWFwX2VuZCwgZmxhZ3MpOwomIzQzOwlyZXQgPSB2bWVtbWFwX3JlbWFwX2FsbG9jKGgsIGZvbGlvLCB2bWVtbWFwX3N0YXJ0LCB2bWVtbWFwX2VuZCwgZmxhZ3MpOwogCWlmICghcmV0KQogCQlmb2xpb19jbGVhcl9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKTsKIApAQCAtNDg3LDM2ICYjNDM7NTk5LDE2IEBAIHN0YXRpYyBib29sIHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqCiAJaWYgKCFSRUFEX09OQ0Uodm1lbW1hcF9vcHRpbWl6ZV9lbmFibGVkKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKCFodWdldGxiX3ZtZW1tYXBfb3B0aW1pemFibGUoaCkpCiYjNDM7CWlmICghYXJjaF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3N1cHBvcnRlZCgpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHN0cnVjdCBwYWdlICp2bWVtbWFwX2dldF90YWlsKHVuc2lnbmVkIGludCBvcmRlciwgc3RydWN0IHpvbmUgKnpvbmUpCi17Ci0JY29uc3QgdW5zaWduZWQgaW50IGlkeCA9IG9yZGVyIC0gVk1FTU1BUF9UQUlMX01JTl9PUkRFUjsKLQlzdHJ1Y3QgcGFnZSAqdGFpbCwgKnA7Ci0JaW50IG5vZGUgPSB6b25lX3RvX25pZCh6b25lKTsKLQotCXRhaWwgPSBSRUFEX09OQ0Uoem9uZS0mZ3Q7dm1lbW1hcF90YWlsc1tpZHhdKTsKLQlpZiAobGlrZWx5KHRhaWwpKQotCQlyZXR1cm4gdGFpbDsKLQotCXRhaWwgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCAwKTsKLQlpZiAoIXRhaWwpCi0JCXJldHVybiBOVUxMOwotCi0JcCA9IHBhZ2VfdG9fdmlydCh0YWlsKTsKLQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IFBBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgcGFnZSk7IGkmIzQzOyYjNDM7KQotCQlpbml0X2NvbXBvdW5kX3RhaWwocCAmIzQzOyBpLCBOVUxMLCBvcmRlciwgem9uZSk7CiYjNDM7CWlmICghaHVnZXRsYl92bWVtbWFwX29wdGltaXphYmxlKGgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKGNtcHhjaGcoJmFtcDt6b25lLSZndDt2bWVtbWFwX3RhaWxzW2lkeF0sIE5VTEwsIHRhaWwpKSB7Ci0JCV9fZnJlZV9wYWdlKHRhaWwpOwotCQl0YWlsID0gUkVBRF9PTkNFKHpvbmUtJmd0O3ZtZW1tYXBfdGFpbHNbaWR4XSk7Ci0JfQomIzQzOwlpZiAoIWh1Z2V0bGJfaHZvX3N0YXR1c190cnlfc2V0KEhWT19BQ1RJVkUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwogCi0JcmV0dXJuIHRhaWw7CiYjNDM7CXJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsCkBAIC01NzQsNyAmIzQzOzY2NiwxMSBAQCBzdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsCiAJCQkJIHZtZW1tYXBfaGVhZCwgdm1lbW1hcF90YWlsLAogCQkJCSB2bWVtbWFwX3BhZ2VzLCBmbGFncyk7CiBvdXQ6Ci0JaWYgKHJldCkKJiM0MzsJLyoKJiM0MzsJICogSWYgcmV0ID09IFZNRU1NQVBfUkVNQVBfSU5DT01QTEVURSwgdGhlIGZvbGlvIG1pZ2h0IGJlIHBhcnRpYWxseQomIzQzOwkgKiBIVk9lZC4gTGVhdmUgdGhlIEhWTyBwYWdlIGZvbGlvIGZsYWcgaW4gcGxhY2UuCiYjNDM7CSAqLwomIzQzOwlpZiAocmV0ICZsdDsgMCkKIAkJZm9saW9fY2xlYXJfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbyk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNzE3LDYgJiM0Mzs4MTMsMTQgQEAgc3RhdGljIGJvb2wgdm1lbW1hcF9zaG91bGRfb3B0aW1pemVfYm9vdG1lbV9wYWdlKHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqbSkKIAlpZiAoIVJFQURfT05DRSh2bWVtbWFwX29wdGltaXplX2VuYWJsZWQpKQogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJLyoKJiM0MzsJICogQXJjaGl0ZWN0dXJlcyBtYXkgcmV0dXJuIGZhbHNlIGhlcmUgYnV0IHRydWUgYnkgdGhlIHRpbWUKJiM0MzsJICogaHVnZXRsYl9pbml0KCkgaXMgY2FsbGVkLiBJbiB0aGlzIGNhc2UsIGFsdGhvdWdoIHRoZSBmb2xpb3Mgd2lsbAomIzQzOwkgKiBub3QgYmUgcHJlLUhWT2VkLCB0aGV5IHdpbGwgYmUgb3B0aW1pemVkIGluIGh1Z2V0bGJfaW5pdCgpLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFhcmNoX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fc3VwcG9ydGVkKCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJaWYgKCFodWdldGxiX3ZtZW1tYXBfb3B0aW1pemFibGUobS0mZ3Q7aHN0YXRlKSkKIAkJcmV0dXJuIGZhbHNlOwogCkBAIC03NDIsNiAmIzQzOzg0Niw5IEBAIHN0YXRpYyBib29sIHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2Jvb3RtZW1fcGFnZShzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgKm0pCiAJICAgICFJU19BTElHTkVEKHBzaXplLCBwbWRfdm1lbW1hcF9zaXplKSkKIAkJcmV0dXJuIGZhbHNlOwogCiYjNDM7CWlmICghaHVnZXRsYl9odm9fc3RhdHVzX3RyeV9zZXQoSFZPX0FDVElWRSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfdm1lbW1hcC5oIGIvbW0vaHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmgKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gbW0vaHVnZXRsYl92bWVtbWFwLmgKcmVuYW1lIHRvIG1tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oCmluZGV4IDE4YjQ5MDgyNTIxNTNkLi42YjI4NzgwMDE0YmMxOCAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYl92bWVtbWFwLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmgKQEAgLTYsOCAmIzQzOzYsOCBAQAogICoKICAqICAgICBBdXRob3I6IE11Y2h1biBTb25nICZsdDtzb25nbXVjaHVuQGJ5dGVkYW5jZS5jb20mZ3Q7CiAgKi8KLSNpZm5kZWYgX0xJTlVYX0hVR0VUTEJfVk1FTU1BUF9ICi0jZGVmaW5lIF9MSU5VWF9IVUdFVExCX1ZNRU1NQVBfSAomIzQzOyNpZm5kZWYgX01NX0hVR0VUTEJfVk1FTU1BUF9JTlRFUk5BTF9ICiYjNDM7I2RlZmluZSBfTU1fSFVHRVRMQl9WTUVNTUFQX0lOVEVSTkFMX0gKICNpbmNsdWRlICZsdDtsaW51eC9odWdldGxiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZW1ibG9jay5oJmd0OwpAQCAtOTUsNCAmIzQzOzk1LDQgQEAgc3RhdGljIGlubGluZSBib29sIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YWJsZShjb25zdCBzdHJ1Y3QgaHN0YXRlICpoKQogewogCXJldHVybiBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemFibGVfc2l6ZShoKSAhPSAwOwogfQotI2VuZGlmIC8qIF9MSU5VWF9IVUdFVExCX1ZNRU1NQVBfSCAqLwomIzQzOyNlbmRpZiAvKiBfTU1fSFVHRVRMQl9WTUVNTUFQX0lOVEVSTkFMX0ggKi8KZGlmZiAtLWdpdCBhL21tL3NwYXJzZS12bWVtbWFwLmMgYi9tbS9zcGFyc2Utdm1lbW1hcC5jCmluZGV4IDk5ZTJiZTM5NjcxYjYzLi45NGQ1ZGE5ZjhhYjdjMSAxMDA2NDQKLS0tIGEvbW0vc3BhcnNlLXZtZW1tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zcGFyc2Utdm1lbW1hcC5jCkBAIC0zMiw3ICYjNDM7MzIsNyBAQAogI2luY2x1ZGUgJmx0O2FzbS9kbWEuaCZndDsKICNpbmNsdWRlICZsdDthc20vdGxiZmx1c2guaCZndDsKIAotI2luY2x1ZGUgJiMzNDtodWdldGxiX3ZtZW1tYXAuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtodWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaCYjMzQ7CiAKIC8qCiAgKiBGbGFncyBmb3Igdm1lbW1hcF9wb3B1bGF0ZV9yYW5nZSBhbmQgZnJpZW5kcy4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyMTgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgdGhhdCBicmluZ3MgQVJNNjQgc3VwcG9ydCB0byBIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uLCBvciBIVk8uIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgY2hhbmdlLCBhZGRpbmcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZ1bmN0aW9ucyBsaWtlIGBhcmNoX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fc3VwcG9ydGVkKClgLCBgdHJ5X3BvcHVsYXRlX3ZtZW1tYXBfcG1kKClgLCBhbmQgYHRyeV91cGRhdGVfdm1lbW1hcF9wdGUoKWAgYWxvbmcgd2l0aCB0aGUgbmVjZXNzYXJ5IGNvcmUgbG9naWMgbW9kaWZpY2F0aW9ucyB3aXRoaW4gYG1tL2h1Z2V0bGJfdm1lbW1hcC5jYC4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbiBnaXZlbiBpdHMgaW1wYWN0IG9uIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBIdWdlVExCIG1hbmFnZW1lbnQuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBrZXkgYXJlYXMgd2l0aGluIGBtbS9odWdldGxiX3ZtZW1tYXAuY2AgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9ucyBhcyBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIGZvciB0ZXN0aW5nOiBgdm1lbW1hcF9zcGxpdF9wbWRgLCBgdm1lbW1hcF9wbWRfZW50cnlgLCBgdm1lbW1hcF9wdGVfZW50cnlgLCBgdm1lbW1hcF9yZW1hcF9yYW5nZWAsIGB2bWVtbWFwX3JlbWFwX3B0ZWAsIGB2bWVtbWFwX3Jlc3RvcmVfcHRlYCwgYHZtZW1tYXBfcmVtYXBfZnJlZWAsIGB2bWVtbWFwX3JlbWFwX2FsbG9jYCwgYGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGVgLCBgX19odWdldGxiX3ZtZW1tYXBfcmVzdG9yZV9mb2xpb2AsIGB2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9mb2xpb2AsIGBfX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9mb2xpb2AsIGFuZCBgdm1lbW1hcF9zaG91bGRfb3B0aW1pemVfYm9vdG1lbV9wYWdlYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgd2hlcmUgdGhlIEFSTTY0IGludGVncmF0aW9uIHdpbGwgbW9zdCBsaWtlbHkgaW50cm9kdWNlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgcmVncmVzc2lvbnMuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBwYXRjaCBtb2RpZmllcyBgYXJjaC9hcm02NC9LY29uZmlnYCB3aGljaCBpbmRpY2F0ZXMgdGhhdCBgc2VsZWN0IEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVAgaWYgQVJNNjRfSFdfQUZEQk1gIGlzIHJlbGV2YW50LiBUaGlzIGxlYWRzIG1lIHRvIGJlbGlldmUgdGhhdCBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBgIGlzIGEgY2VudHJhbCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LiBgQVJNNjRfSFdfQUZEQk1gIGFsc28gc2VlbXMgaW1wb3J0YW50IGFzIGEgZGVwZW5kZW50IGNvbmZpZy4gVGhlIGNoYW5nZXMgaW4gYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1Y2Fwcy5oYCB3aGljaCByZWZlcmVuY2VzIGBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBgIGZ1cnRoZXIgY29uZmlybXMgdGhhdCBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBgIGlzIHRoZSBrZXkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB2ZXJpZnkgdGhlc2UgY29uZmlndXJhdGlvbnMgZHVyaW5nIG15IHRlc3RpbmcgdG8gZW5zdXJlIHRoZSByZWxldmFudCBjb2RlIHBhdGhzIGFyZSBleGVyY2lzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ9OTU9S2VybmVsIHBhcmFtZXRlcnNcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDg1LVx0aHVnZXRsYl9mcmVlX3ZtZW1tYXA9XG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dDoyMDg2Olx0XHRcdFtLTkxdIFJlcXVpcmVzIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA4Ny1cdFx0XHRlbmFibGVkLlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTIwOTUtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dDoyMDk2Olx0XHRcdEJ1aWx0IHdpdGggQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT049eSxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTIwOTctXHRcdFx0dGhlIGRlZmF1bHQgaXMgb24uXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q9MTc0PWh1Z2V0bGJfZnJlZV92bWVtbWFwXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdDoxNzU6XHRXaGVuIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUCBpcyBzZXQsIHRoaXMgZW5hYmxlcyBIdWdlVExCXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdC0xNzYtXHRWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKS5cbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaD0xND1jcHVjYXBfaXNfcG9zc2libGUoY29uc3QgdW5zaWduZWQgaW50IGNhcClcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaC03OC1cdGNhc2UgQVJNNjRfSFZPX0NPTVBBVElCTEU6XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaDo3OTpcdFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1Y2Fwcy5oLTgwLVx0fVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0yMTg1PXN0YXRpYyBib29sIGxhdGVfY3B1X2VuYWJsZV9odm8oY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKl9fdW51c2VkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIxODYte1xuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIxODc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIxODgtXHRpZiAoY3B1X2hhc19od19hZigpKVxuLS1cbmFyY2gveDg2L2VudHJ5L3Zkc28vdmRzbzMyL2Zha2VfMzJiaXRfYnVpbGQuaC0xMy0jdW5kZWYgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQXG5hcmNoL3g4Ni9lbnRyeS92ZHNvL3Zkc28zMi9mYWtlXzMyYml0X2J1aWxkLmg6MTQ6I3VuZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuYXJjaC94ODYvZW50cnkvdmRzby92ZHNvMzIvZmFrZV8zMmJpdF9idWlsZC5oLTE1LSN1bmRlZiBDT05GSUdfTlJfQ1BVU1xuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYz0xMzE2PXN0YXRpYyB2b2lkIF9faW5pdCByZWdpc3Rlcl9wYWdlX2Jvb3RtZW1faW5mbyh2b2lkKVxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzMTcte1xuYXJjaC94ODYvbW0vaW5pdF82NC5jOjEzMTg6I2lmIGRlZmluZWQoQ09ORklHX05VTUEpIHx8IGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKVxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzMTktXHRpbnQgaTtcbi0tXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG5mcy9LY29uZmlnLTI2NC1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuZnMvS2NvbmZpZy0yNjUtXHRkZWZhdWx0IG5cbmZzL0tjb25maWc6MjY2Olx0ZGVwZW5kcyBvbiBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuZnMvS2NvbmZpZy0yNjctXHRoZWxwXG4tLVxuZnMvS2NvbmZpZz0yNzM9Y29uZmlnIEhVR0VUTEJfUEFHRVxuLS1cbmZzL0tjb25maWctMjc2LVxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI3OC1cdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oPTEzMj1zdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3N1cHBvcnRlZCh2b2lkKVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmgtMTMzLXtcbmluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oOjEzNDpcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUCk7XG5pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaC0xMzUtfVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYl92bWVtbWFwLmgtNi1cbmluY2x1ZGUvbGludXgvaHVnZXRsYl92bWVtbWFwLmg6NzojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oLTgtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oPTk9Ym9vbCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKHZvaWQpO1xuaW5jbHVkZS9saW51eC9odWdldGxiX3ZtZW1tYXAuaC0xMC1cbmluY2x1ZGUvbGludXgvaHVnZXRsYl92bWVtbWFwLmg6MTE6I2Vsc2UgLyogQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQICovXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oLTEyLVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTA1LSNkZWZpbmUgTUFYX0ZPTElPX1ZNRU1NQVBfQUxJR04gXFxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTA2Olx0KElTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKSBcdTAwMjZcdTAwMjYgXFxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTA3LVx0IGlzX3Bvd2VyX29mXzIoc2l6ZW9mKHN0cnVjdCBwYWdlKSkgPyBcXFxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9OTY4PXN0cnVjdCB6b25lIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTExNDgtXHRhdG9taWNfbG9uZ190XHRcdHZtX251bWFfZXZlbnRbTlJfVk1fTlVNQV9FVkVOVF9JVEVNU107XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjExNDk6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMTUwLVx0c3RydWN0IHBhZ2UgKnZtZW1tYXBfdGFpbHNbTlJfVk1FTU1BUF9UQUlMU107XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MjA4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBjb21wb3VuZF9pbmZvX2hhc19tYXNrKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMjE3LVx0ICovXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoyMTg6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKSlcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTIxOS1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL01ha2VmaWxlPTg0PWVuZGlmXG5tbS9NYWtlZmlsZTo4NTpvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApXHQmIzQzOz0gaHVnZXRsYl92bWVtbWFwLm9cbm1tL01ha2VmaWxlLTg2LW9iai0kKENPTkZJR19OVU1BKSBcdCYjNDM7PSBtZW1wb2xpY3kub1xuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTQ5NT1ib29sIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGUodm9pZClcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYy00OTktXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo1MDA6c3RhdGljIGJvb2wgdm1lbW1hcF9vcHRpbWl6ZV9lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTik7XG5tbS9odWdldGxiX3ZtZW1tYXAuYy01MDEtc3RhdGljIGludCBfX2luaXQgaHVnZXRsYl92bWVtbWFwX29wdGltaXplX3BhcmFtKGNoYXIgKmJ1Zilcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaC0yMS1cbm1tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oOjIyOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbm1tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oLTIzLWludCBodWdldGxiX3ZtZW1tYXBfcmVzdG9yZV9mb2xpbyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaD04OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemFibGVfc2l6ZShjb25zdCBzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oLTkxLX1cbm1tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oOjkyOiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVAgKi9cbm1tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oLTkzLVxuLS1cbm1tL3NwYXJzZS12bWVtbWFwLmM9MzExPXZvaWQgdm1lbW1hcF93cnByb3RlY3RfaHZvKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vc3BhcnNlLXZtZW1tYXAuYy0zMjItXG5tbS9zcGFyc2Utdm1lbW1hcC5jOjMyMzojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5tbS9zcGFyc2Utdm1lbW1hcC5jLTMyNC1zdGF0aWMgX19tZW1pbml0IHN0cnVjdCBwYWdlICp2bWVtbWFwX2dldF90YWlsKHVuc2lnbmVkIGludCBvcmRlciwgc3RydWN0IHpvbmUgKnpvbmUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0NDMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBIdWdlVExCIFZNRU1NQVAgT3B0aW1pemF0aW9uKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byBjb25maWd1cmUgdGhpcyBrZXJuZWwgZm9yIG9wdGltaXplZCBIdWdlVExCIHZtZW1tYXAgdXNhZ2UuIFRoZSBrZXkgY29uZmlnIG9wdGlvbiBzZWVtcyB0byBiZSBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgaXQgaXMgZW5hYmxlZC4KCkkgc2hvdWxkIGFsc28gY2hlY2sgYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05gIHRvIGd1YXJhbnRlZSBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQsIHRoaXMgd2lsbCBzYXZlIGFueSBwb3RlbnRpYWwgaGVhZGFjaGVzIGRvd24gdGhlIGxpbmUuIEkgYWx3YXlzIHByZWZlciBzZW5zaWJsZSBkZWZhdWx0cyEKClRvIGNvbmZpcm0gaWYgdGhpcyBpcyBiZWluZyBoYW5kbGVkIGNvcnJlY3RseSBmb3IgdGhpcyBhcmNoaXRlY3R1cmUsIEkgc2hvdWxkIGFsc28gbG9vayBpbiBgYXJjaC9hcm02NC9LY29uZmlnYCBmb3IgYEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBgLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbnRleHQgYW5kIGFueSBwbGF0Zm9ybSBjb25zaWRlcmF0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0yNjEtXHRzZWxlY3QgVk1BUF9TVEFDS1xuYXJjaC9hcm02NC9LY29uZmlnOjI2MjpcdHNlbGVjdCBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQIGlmIEFSTTY0X0hXX0FGREJNXG5hcmNoL2FybTY0L0tjb25maWctMjYzLVx0aGVscFxuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mj1jb25maWcgTE9PTkdBUkNIXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy04Mi1cdHNlbGVjdCBBUkNIX1dBTlRfTERfT1JQSEFOX1dBUk5cbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6ODM6XHRzZWxlY3QgQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUCBpZiA2NEJJVFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy04NC1cdHNlbGVjdCBBUkNIX1dBTlRTX05PX0lOU1RSXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy04OC1cdHNlbGVjdCBBUkNIX1dBTlRfT1BUSU1JWkVfREFYX1ZNRU1NQVBcbmFyY2gvcmlzY3YvS2NvbmZpZzo4OTpcdHNlbGVjdCBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXG5hcmNoL3Jpc2N2L0tjb25maWctOTAtXHRzZWxlY3QgQVJDSF9XQU5UU19OT19JTlNUUlxuLS1cbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4NlxuLS1cbmFyY2gveDg2L0tjb25maWctMTQ4LVx0c2VsZWN0IEFSQ0hfV0FOVF9PUFRJTUlaRV9EQVhfVk1FTU1BUFx0aWYgWDg2XzY0XG5hcmNoL3g4Ni9LY29uZmlnOjE0OTpcdHNlbGVjdCBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXHRpZiBYODZfNjRcbmFyY2gveDg2L0tjb25maWctMTUwLVx0c2VsZWN0IEFSQ0hfV0FOVF9IVUdFVExCX1ZNRU1NQVBfUFJFSU5JVCBpZiBYODZfNjRcbi0tXG5mcy9LY29uZmlnPTI3Nz1jb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbmZzL0tjb25maWctMjc4LVx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnOjI3OTpcdGRlcGVuZHMgb24gQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUFxuZnMvS2NvbmZpZy0yODAtXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXG4tLVxubW0vS2NvbmZpZz00NzI9Y29uZmlnIEFSQ0hfV0FOVF9PUFRJTUlaRV9EQVhfVk1FTU1BUFxuLS1cbm1tL0tjb25maWctNDc0LVxubW0vS2NvbmZpZzo0NzU6Y29uZmlnIEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBcbm1tL0tjb25maWctNDc2LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzc2CgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogNTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaHVnZXRsYl92bWVtbWFwIE9wdGltaXphdGlvbiBmb3IgQVJNNjQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZW5hYmxpbmcgYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQYCBzcGVjaWZpY2FsbHkgZm9yIEFSTTY0LCBjb250aW5nZW50IG9uIGEgZmV3IG90aGVyIGNvbmZpZ3VyYXRpb25zLiAgYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQYCBoaW5nZXMgb24gYEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBgIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBPbiBBUk02NCwgYEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBgIGlzIHNlbGVjdGVkICppZiogYEFSTTY0X0hXX0FGREJNYCBpcyBhY3RpdmUuICBTbywgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBoZXJlIGlzIHRvIGVuYWJsZSBgQVJNNjRfSFdfQUZEQk1gIGFsb25nc2lkZSBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBgIGFuZCBpdHMgZGVmYXVsdC1vbiBzZXR0aW5nLCBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTmAuIEdvb2QsIGdvdCB0aGUgZGVwZW5kZW5jaWVzIGxpbmVkIHVwLgoKTm93LCB3aGVyZSYjMzk7cyB0aGUgbWVhdCBvZiB0aGlzIG9wdGltaXphdGlvbiBoYXBwZW5pbmc/IFRoZSBwYXRjaCB0b3VjaGVzIGBtbS9odWdldGxiX3ZtZW1tYXAuY2AsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gTGV0JiMzOTtzIHNlZS4uLiBhIHF1aWNrIHNjYW4gcmV2ZWFscyBhIGJ1bmNoIG9mIHJlbGV2YW50IGZ1bmN0aW9ucy4gIEkgbmVlZCB0byBwcmlvcml0aXplIGFuZCByZWFsbHkgZGlnIGludG8gdGhlc2U6CgoqICAgYHZtZW1tYXBfc3BsaXRfcG1kYAoqICAgYHZtZW1tYXBfcG1kX2VudHJ5YAoqICAgYHZtZW1tYXBfcHRlX2VudHJ5YAoqICAgYHZtZW1tYXBfcmVtYXBfcmFuZ2VgCiogICBgdm1lbW1hcF9yZW1hcF9wdGVgCiogICBgdm1lbW1hcF9yZXN0b3JlX3B0ZWAKKiAgIGB2bWVtbWFwX3JlbWFwX2ZyZWVgCiogICBgdm1lbW1hcF9yZW1hcF9hbGxvY2AKKiAgIGBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlYAoqICAgYF9faHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW9gCiogICBgdm1lbW1hcF9zaG91bGRfb3B0aW1pemVfZm9saW9gCiogICBgX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW9gCiogICBgdm1lbW1hcF9zaG91bGRfb3B0aW1pemVfYm9vdG1lbV9wYWdlYAoKV2FpdCwgdGhlcmUgYXJlIGEgY291cGxlIG9mIGlubGluZSBmdW5jdGlvbnMgYXMgd2VsbDogYHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZGAgYW5kIGB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlYCwgbG9jYXRlZCBpbiBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhgIGFuZCBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhgLiBTaW5jZSB0aGV5JiMzOTtyZSBpbmxpbmUsIHRoZXkmIzM5O3JlIHByb2JhYmx5IGdldHRpbmcgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUgZnVuY3Rpb25zIHRoYXQgdXNlIHRoZW0sIGxpa2UgdGhlIGB2bWVtbWFwX3NwbGl0X3BtZGAgYW5kIGB2bWVtbWFwX3JlbWFwX3B0ZWAuIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSBhbmFseXplIHRoZSBjb2RlIGZsb3cuCgpTbywgbGV0JiMzOTtzIHJlZmluZSB0aGF0IGxpc3Qgb2YgZnVuY3Rpb25zIEkgbmVlZCB0byBkaXNzZWN0OgoKKiAgIGB2bWVtbWFwX3NwbGl0X3BtZGAKKiAgIGB2bWVtbWFwX3JlbWFwX3B0ZWAKKiAgIGB2bWVtbWFwX3Jlc3RvcmVfcHRlYAoqICAgYHZtZW1tYXBfcmVtYXBfZnJlZWAKKiAgIGB2bWVtbWFwX3JlbWFwX2FsbG9jYAoqICAgYGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGVgCiogICBgX19odWdldGxiX3ZtZW1tYXBfcmVzdG9yZV9mb2xpb2AKKiAgIGBfX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9mb2xpb2AKClJpZ2h0LCBnb3QgaXQuIE5vdyBJIGp1c3QgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbGwgdGhlc2UgZnVuY3Rpb25zIGFjdHVhbGx5IGV4aXN0IGFzIGV4cGVjdGVkIGluIGBtbS9odWdldGxiX3ZtZW1tYXAuY2AuIEEgcXVpY2sgY2hlY2sgd2lsbCBjb25maXJtIHRoaXMgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBhY3R1YWwgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhpbnR8dm9pZHxib29sKSBbYS16QS1aMC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGJfdm1lbW1hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGJfdm1lbW1hcC5jPTM4PXN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsge1xuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTU0LVxubW0vaHVnZXRsYl92bWVtbWFwLmM6NTU6c3RhdGljIGludCB2bWVtbWFwX3NwbGl0X3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgcGFnZSAqaGVhZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTU2LVx0XHRcdCAgICAgc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqd2Fsaylcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0xMDgtXG5tbS9odWdldGxiX3ZtZW1tYXAuYzoxMDk6c3RhdGljIGludCB2bWVtbWFwX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0xMTAtXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTE0OS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjE1MDpzdGF0aWMgaW50IHZtZW1tYXBfcHRlX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTE1MS1cdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmM9MTYzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgdm1lbW1hcF9yZW1hcF9vcHMgPSB7XG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmMtMTY3LVxubW0vaHVnZXRsYl92bWVtbWFwLmM6MTY4OnN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTE2OS1cdFx0XHQgICAgICAgc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqd2Fsaylcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYz0xOTI9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfdm1lbW1hcF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTIwMy0vKiBGcmVlIGEgbGlzdCBvZiB0aGUgdm1lbW1hcCBwYWdlcyAqL1xubW0vaHVnZXRsYl92bWVtbWFwLmM6MjA0OnN0YXRpYyB2b2lkIGZyZWVfdm1lbW1hcF9wYWdlX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTIwNS17XG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmMtMjExLVxubW0vaHVnZXRsYl92bWVtbWFwLmM6MjEyOnN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9wdGUocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vaHVnZXRsYl92bWVtbWFwLmMtMjEzLVx0XHRcdCAgICAgc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqd2Fsaylcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0yNTktXG5tbS9odWdldGxiX3ZtZW1tYXAuYzoyNjA6c3RhdGljIGludCB2bWVtbWFwX3Jlc3RvcmVfcHRlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTI2MS1cdFx0XHQgICAgICAgc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqd2Fsaylcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0zMDQtICovXG5tbS9odWdldGxiX3ZtZW1tYXAuYzozMDU6c3RhdGljIGludCB2bWVtbWFwX3JlbWFwX3NwbGl0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxubW0vaHVnZXRsYl92bWVtbWFwLmMtMzA2LXtcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYz0zMTU9c3RhdGljIGNvbnN0IGludCBWTUVNTUFQX1JFTUFQX0lOQ09NUExFVEUgPSAxO1xuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTMzMi0gKi9cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjMzMzpzdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfZnJlZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTMzNC1cdFx0XHQgICAgICBzdHJ1Y3QgcGFnZSAqdm1lbW1hcF9oZWFkLFxuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTM3MS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjM3MjpzdGF0aWMgaW50IGFsbG9jX3ZtZW1tYXBfcGFnZV9saXN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vaHVnZXRsYl92bWVtbWFwLmMtMzczLVx0XHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYz0zOTY9c3RhdGljIHN0cnVjdCBwYWdlICp2bWVtbWFwX2dldF90YWlsKHVuc2lnbmVkIGludCBvcmRlciwgc3RydWN0IHpvbmUgKnpvbmUpXG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmMtNDM1LSAqL1xubW0vaHVnZXRsYl92bWVtbWFwLmM6NDM2OnN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9hbGxvYyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNDM3LVx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYz00NzI9c3RhdGljIGVudW0gaHVnZXRsYl9odm9fc3RhdHVzIGh2b19zdGF0dXMgPSBIVk9fSU5BQ1RJVkU7XG5tbS9odWdldGxiX3ZtZW1tYXAuYy00NzMtXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo0NzQ6c3RhdGljIGJvb2wgaHVnZXRsYl9odm9fc3RhdHVzX3RyeV9zZXQoZW51bSBodWdldGxiX2h2b19zdGF0dXMgc3RhdHVzKVxubW0vaHVnZXRsYl92bWVtbWFwLmMtNDc1LXtcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYy00OTQtXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo0OTU6Ym9vbCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKHZvaWQpXG5tbS9odWdldGxiX3ZtZW1tYXAuYy00OTYte1xuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTUwNT1lYXJseV9wYXJhbShcJiMzNDtodWdldGxiX2ZyZWVfdm1lbW1hcFwmIzM0OywgaHVnZXRsYl92bWVtbWFwX29wdGltaXplX3BhcmFtKTtcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTUwNi1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjUwNzpzdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTUwOC1cdFx0XHRcdFx0ICAgc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBmbGFncylcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYy01NDYtICovXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo1NDc6aW50IGh1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9odWdldGxiX3ZtZW1tYXAuYy01NDgte1xuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTU2NT1sb25nIGh1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvcyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTU5My0vKiBSZXR1cm4gdHJ1ZSBpZmYgYSBIdWdlVExCIHdob3NlIHZtZW1tYXAgc2hvdWxkIGFuZCBjYW4gYmUgb3B0aW1pemVkLiAqL1xubW0vaHVnZXRsYl92bWVtbWFwLmM6NTk0OnN0YXRpYyBib29sIHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9odWdldGxiX3ZtZW1tYXAuYy01OTUte1xuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTYxMy1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjYxNDpzdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiX3ZtZW1tYXAuYy02MTUtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTY4OC0gKi9cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjY4OTp2b2lkIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9mb2xpbyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZXRsYl92bWVtbWFwLmMtNjkwLXtcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYy02OTYtXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo2OTc6c3RhdGljIGludCBodWdldGxiX3ZtZW1tYXBfc3BsaXRfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTY5OC17XG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmMtNzEzLVxubW0vaHVnZXRsYl92bWVtbWFwLmM6NzE0OnN0YXRpYyB2b2lkIF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpoLFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNzE1LVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTc5NC1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjc5NTp2b2lkIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTc5Ni17XG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmMtNzk5LVxubW0vaHVnZXRsYl92bWVtbWFwLmM6ODAwOnZvaWQgaHVnZXRsYl92bWVtbWFwX29wdGltaXplX2Jvb3RtZW1fZm9saW9zKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXG5tbS9odWdldGxiX3ZtZW1tYXAuYy04MDEte1xuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTgwNy0vKiBSZXR1cm4gdHJ1ZSBvZiBhIGJvb3RtZW0gYWxsb2NhdGVkIEh1Z2VUTEIgcGFnZSBzaG91bGQgYmUgcHJlLUhWTy1lZCAqL1xubW0vaHVnZXRsYl92bWVtbWFwLmM6ODA4OnN0YXRpYyBib29sIHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2Jvb3RtZW1fcGFnZShzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgKm0pXG5tbS9odWdldGxiX3ZtZW1tYXAuYy04MDkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDM5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIEh1Z2V0bGIgVm1lbW1hcCBNb2RpZmljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgaW4gYG1tL2h1Z2V0bGJfdm1lbW1hcC5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgbW9kaWZpY2F0aW9ucyB0byB1bmRlcnN0YW5kIHRoZWlyIGltcGxpY2F0aW9ucy4gRnJvbSB0aGUgcHJvdmlkZWQgbGlzdCwgaXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBiZWVuIHNvbWUgdGFyZ2V0ZWQgd29yayBvbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBodWdlcGFnZXMgYW5kIHRoZSB2bWVtbWFwLgoKSSYjMzk7bSBzZWVpbmcgYSBsb3Qgb2YgZnVuY3Rpb25zIGhlcmUsIGJ1dCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIG9uZXMgdGhhdCBhcmUgbGlrZWx5IHRvIGJlIHRoZSBtb3N0IGNyaXRpY2FsLCBhbmQgbm90IHNpbXBsZSBnZW5lcmljIGhvdCBwYXRocy4gQmFzZWQgb24gdGhlIG5hbWluZyBhbmQgbGlrZWx5IGZ1bmN0aW9uLCBJJiMzOTtkIHNheSB0aGUgb25lcyB0aGF0IHN0YW5kIG91dCBhcyB3b3J0aHkgb2YgaW1tZWRpYXRlIGF0dGVudGlvbiBhcmU6CgoqICAgYHZtZW1tYXBfc3BsaXRfcG1kYAoqICAgYHZtZW1tYXBfcmVtYXBfcHRlYAoqICAgYHZtZW1tYXBfcmVzdG9yZV9wdGVgCiogICBgdm1lbW1hcF9yZW1hcF9mcmVlYAoqICAgYHZtZW1tYXBfcmVtYXBfYWxsb2NgCiogICBgaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZWAKKiAgIGBfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvYAoqICAgYF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvYAoKVGhvc2Ugc2VlbSB0byBiZSB0aGUgb25lcyB0aGF0IGRpcmVjdGx5IGFmZmVjdCBob3cgcGFnZXMgYXJlIHJlbWFwcGVkLCBmcmVlZCwgYW5kIG9wdGltaXplZCBpbiB0aGUgY29udGV4dCBvZiBodWdldGxiZnMuIFRoZSBgdHJ5X2Rpc2FibGVgIGFuZCBmb2xpbyBmdW5jdGlvbnMgc3VnZ2VzdCBhbiBvcHRpbWl6YXRpb24gc3RyYXRlZ3kgaXMgaW52b2x2ZWQuCgpCZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCBjaGVjayBmb3IgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgYEFSTTY0X0hXX0FGREJNYCBpcyBzZWxlY3RlZCBvbiBBUk02NCBieSBkZWZhdWx0LiBJcyB0aGF0IGEgS2NvbmZpZyBvcHRpb24gdGhhdCBpbXBhY3RzIHRoZSBiZWhhdmlvciBvZiB0aGVzZSBmdW5jdGlvbnM/IEkgc2hvdWxkIHZlcmlmeSB0aGF0IGJlZm9yZSBkaXZpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFSTTY0X0hXX0FGREJNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvS2NvbmZpZz0xOTAwPW1lbnUgXCYjMzQ7QVJNdjguMSBhcmNoaXRlY3R1cmFsIGZlYXR1cmVzXCYjMzQ7XG5hcmNoL2FybTY0L0tjb25maWctMTkwMS1cbmFyY2gvYXJtNjQvS2NvbmZpZzoxOTAyOmNvbmZpZyBBUk02NF9IV19BRkRCTVxuYXJjaC9hcm02NC9LY29uZmlnLTE5MDMtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGhhcmR3YXJlIHVwZGF0ZXMgb2YgdGhlIEFjY2VzcyBhbmQgRGlydHkgcGFnZSBmbGFnc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDg4NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQVJNNjQgYW5kIEh1Z2UgUGFnZXMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgQVJNNjRfSFdfQUZEQk1gIGlzIGRlZmluaXRlbHkgYSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBzaW1wbHkgZW5hYmxlIGBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUGAsIGBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OYCwgYW5kIGBBUk02NF9IV19BRkRCTWAuCgpCdXQgdGhlbiBJIHJlbWVtYmVyZWQgdGhhdCBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBgIGlzIGEgYGRlZl9ib29sYCB0aGF0JiMzOTtzIGNvbnRpbmdlbnQgb24gYEhVR0VUTEJfUEFHRWAgYmVpbmcgZW5hYmxlZC4gU28sIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBsb2dpYyB3aWxsIGhhbmRsZSBpdHMgZW5hYmxpbmcgYXV0b21hdGljYWxseSwgKmlmKiB0aGUgZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQuIExldCYjMzk7cyBzZWUuLi4gdGhlIGRlcGVuZGVuY2llcyBhcmUgYEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBgIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBBbmQgYWgtaGEhIGBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQYCAqaXMqIHNlbGVjdGVkIGJ5IGBBUk02NGAgaWYgYEFSTTY0X0hXX0FGREJNYCBpcyBzZXQuIFNvLCB0aGUgcmVhbCBlbmFibGVyIGhlcmUgb24gQVJNNjQgaXMgaW5kZWVkIGBBUk02NF9IV19BRkRCTWAuCgpUaGF0IGxlYXZlcyB1cyB3aXRoIGBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OYC4gVGhpcyBpcyBhIGJvb2xlYW4gb3B0aW9uIHRoYXQgZGVmYXVsdHMgdG8gJiMzNDtuJiMzNDssIHNvIHdlIGRlZmluaXRlbHkgd2FudCB0byBtYWtlIHN1cmUgKnRoYXQqIGlzIGVuYWJsZWQuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgYmVpbmcgc2V0IGNvcnJlY3RseSB3aXRoaW4gdGhlIGBmcy9LY29uZmlnYCBmaWxlLiBBbHNvLCBsZXQmIzM5O3MgYXNzdW1lIGBIVUdFVExCX1BBR0VgIGlzIGFscmVhZHkgZW5hYmxlZCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBhYm91dCB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG5mcy9LY29uZmlnLTI2NC1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTY0OQoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDM5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgSHVnZXRsYiBWbWVtbWFwIE9wdGltaXphdGlvbiBDaGVja2xpc3QqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiB0aGlua2luZyBhYm91dCB0aGUgYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQYCBmZWF0dXJlLiBZZXMsIGBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OYCBpcyBkZWZpbml0ZWx5IHRoZSBrZXkgaGVyZSDigJMgdGhhdCYjMzk7cyB0aGUgZGVmYXVsdCBzdGF0ZSB3ZSYjMzk7cmUgc2hvb3RpbmcgZm9yLgoKQWxyaWdodCwgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29yZSBlbGVtZW50cy4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIGFyZTogYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQYCwgYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05gLCBhbmQgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBgQVJNNjRfSFdfQUZEQk1gICh3aGljaCwga25vd2luZyBob3cgdGhlc2UgdGhpbmdzIHdvcmssIGxpa2VseSBpbnRlcmFjdHMgd2l0aCB0aGUgb3B0aW1pemF0aW9uIGluIHNvbWUgd2F5KS4KCk5vdyBmb3IgdGhlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzLiBNeSBpbml0aWFsIGxpc3Qgd2FzOiBgdm1lbW1hcF9zcGxpdF9wbWRgLCBgdm1lbW1hcF9yZW1hcF9wdGVgLCBgdm1lbW1hcF9yZXN0b3JlX3B0ZWAsIGB2bWVtbWFwX3JlbWFwX2ZyZWVgLCBgdm1lbW1hcF9yZW1hcF9hbGxvY2AsIGBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlYCwgYF9faHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW9gLCBhbmQgYF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvYC4KCkJ1dCwgd2FpdCwgbGV0JiMzOTtzIHJlZmluZSB0aGF0IGxpc3QgZm9yIGNvbXBsZXRlbmVzcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBJJiMzOTtsbCBhZGQgYHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2ZvbGlvYCBhbmQgYHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2Jvb3RtZW1fcGFnZWAgdG8gdGhlIGxpc3QuIFRoYXQgZmVlbHMgbW9yZSBjb21wbGV0ZS4KCk9rYXksIHRoaXMgcmV2aXNlZCBsaXN0IGxvb2tzIHByZXR0eSBzb2xpZC4gSXQgY292ZXJzIHRoZSBjb3JlIG9wZXJhdGlvbnMgYW5kIGNoZWNrcyByZWxhdGVkIHRvIHRoZSB2bWVtbWFwIG9wdGltaXphdGlvbi4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIHN3ZWVwIGZvciBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZ1bmN0aW9ucy4gSSBzaG91bGQgY2hlY2sgYGFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY2Agbm93LiBSaWdodCwgSSBmb3VuZCBgbGF0ZV9jcHVfZW5hYmxlX2h2b2AgYW5kIGBodm9fY29tcGF0aWJsZWAuIFRoZXNlIGFyZSBhbHNvIHN0cm9uZyBjYW5kaWRhdGVzIGFuZCBjb3VsZCBwcm92aWRlIGltcG9ydGFudCBjbHVlcywgc28gdGhleSYjMzk7cmUgaW4uIFRoYXQmIzM5O3MgZ29vZC4gTm93LCBJIGZlZWwgYSBsb3QgbW9yZSBjb25maWRlbnQuIEkgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBhc3BlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KGludHx2b2lkfGJvb2wpIFthLXpBLVowLTlfXSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0xNTA9c3RhdGljIGNwdW1hc2tfdmFyX3QgY3B1XzMyYml0X2VsMF9tYXNrIF9fY3B1bWFza192YXJfcmVhZF9tb3N0bHk7XG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTUxLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE1Mjp2b2lkIGR1bXBfY3B1X2ZlYXR1cmVzKHZvaWQpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTUzLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjE4LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIxOTpzdGF0aWMgdm9pZCBjcHVfZW5hYmxlX2NucChzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBjb25zdCAqY2FwKTtcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjAtXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjIxOnN0YXRpYyBib29sIF9fc3lzdGVtX21hdGNoZXNfY2FwKHVuc2lnbmVkIGludCBuKTtcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjItXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTc5OD1zdGF0aWMgY29uc3Qgc3RydWN0IF9fZnRyX3JlZ19lbnRyeSB7XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTg3Ny1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzo4Nzg6c3RhdGljIGludCBzZWFyY2hfY21wX2Z0cl9yZWcoY29uc3Qgdm9pZCAqaWQsIGNvbnN0IHZvaWQgKnJlZ3ApXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtODc5LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9OTY0PXN0YXRpYyB2b2lkIF9faW5pdCBzb3J0X2Z0cl9yZWdzKHZvaWQpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEwMTktICovXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTAyMDpzdGF0aWMgdm9pZCBpbml0X2NwdV9mdHJfcmVnKHUzMiBzeXNfcmVnLCB1NjQgbmV3KVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEwMjEte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0xMTE0PXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ib290X2NwdV9jYXBhYmlsaXRpZXModm9pZCk7XG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTExNS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxMTE2OnN0YXRpYyB2b2lkIGluaXRfMzJiaXRfY3B1X2ZlYXR1cmVzKHN0cnVjdCBjcHVpbmZvXzMyYml0ICppbmZvKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTExMTcte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0xMTY5PXN0YXRpYyBpbmxpbmUgdm9pZCBkZXRlY3Rfc3lzdGVtX3N1cHBvcnRzX3BzZXVkb19ubWkodm9pZCkgeyB9XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTExNzEtXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTE3MjpzdGF0aWMgYm9vbCBkZXRlY3RfZnRyX2hhc19tcGFtKHZvaWQpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTE3My17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTExODA9dm9pZCBfX2luaXQgaW5pdF9jcHVfZmVhdHVyZXMoc3RydWN0IGNwdWluZm9fYXJtNjQgKmluZm8pXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEyMzUtXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTIzNjpzdGF0aWMgdm9pZCB1cGRhdGVfY3B1X2Z0cl9yZWcoc3RydWN0IGFybTY0X2Z0cl9yZWcgKnJlZywgdTY0IG5ldylcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xMjM3LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTI1Mi1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxMjUzOnN0YXRpYyBpbnQgY2hlY2tfdXBkYXRlX2Z0cl9yZWcodTMyIHN5c19pZCwgaW50IGNwdSwgdTY0IHZhbCwgdTY0IGJvb3QpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTI1NC17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEyNjctXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTI2ODpzdGF0aWMgdm9pZCByZWxheF9jcHVfZnRyX3JlZyh1MzIgc3lzX2lkLCBpbnQgZmllbGQpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTI2OS17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEyODYtXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTI4NzpzdGF0aWMgdm9pZCBsYXp5X2luaXRfMzJiaXRfY3B1X2ZlYXR1cmVzKHN0cnVjdCBjcHVpbmZvX2FybTY0ICppbmZvLFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEyODgtXHRcdFx0XHRcdCBzdHJ1Y3QgY3B1aW5mb19hcm02NCAqYm9vdClcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTMwMi1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxMzAzOnN0YXRpYyBpbnQgdXBkYXRlXzMyYml0X2NwdV9mZWF0dXJlcyhpbnQgY3B1LCBzdHJ1Y3QgY3B1aW5mb18zMmJpdCAqaW5mbyxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xMzA0LVx0XHRcdFx0ICAgICBzdHJ1Y3QgY3B1aW5mb18zMmJpdCAqYm9vdClcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTM3OC0gKi9cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxMzc5OnZvaWQgdXBkYXRlX2NwdV9mZWF0dXJlcyhpbnQgY3B1LFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEzODAtXHRcdFx0IHN0cnVjdCBjcHVpbmZvX2FybTY0ICppbmZvLFxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0xNzI0PWRldmljZV9pbml0Y2FsbChhYXJjaDMyX2VsMF9zeXNmc19pbml0KTtcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xNzI1LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE3MjY6c3RhdGljIGJvb2wgaGFzXzMyYml0X2VsMChjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBzY29wZSlcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xNzI3LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTczNi1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxNzM3OnN0YXRpYyBib29sIGhhc191c2VhYmxlX2dpY3YzX2NwdWlmKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IHNjb3BlKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE3Mzgte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xNzUxLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE3NTI6c3RhdGljIGJvb2wgaGFzX2NhY2hlX2lkYyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTc1My1cdFx0XHQgIGludCBzY29wZSlcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTc2NC1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxNzY1OnN0YXRpYyB2b2lkIGNwdV9lbXVsYXRlX2VmZmVjdGl2ZV9jdHIoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKl9fdW51c2VkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE3NjYte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xNzc2LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE3Nzc6c3RhdGljIGJvb2wgaGFzX2NhY2hlX2RpYyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTc3OC1cdFx0XHQgIGludCBzY29wZSlcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MTgwOD1zdGF0aWMgaW50IF9fa3B0aV9mb3JjZWQ7IC8qIDA6IG5vdCBmb3JjZWQsIFx1MDAzZTA6IGZvcmNlZCBvbiwgXHUwMDNjMDogZm9yY2VkIG9mZiAqL1xuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE4MDktXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTgxMDpzdGF0aWMgYm9vbCB1bm1hcF9rZXJuZWxfYXRfZWwwKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xODExLVx0XHRcdFx0aW50IHNjb3BlKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xODg1LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE4ODY6c3RhdGljIGJvb2wgaGFzX252MShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBzY29wZSlcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xODg3LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTkwOC0jaWYgZGVmaW5lZChJRF9BQTY0TU1GUjBfRUwxX1RHUkFOX0xQQTIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKElEX0FBNjRNTUZSMF9FTDFfVEdSQU5fMl9TVVBQT1JURURfTFBBMilcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxOTA5OnN0YXRpYyBib29sIGhhc19scGEyX2F0X3N0YWdlMSh1NjQgbW1mcjApXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTkxMC17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5MTctXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTkxODpzdGF0aWMgYm9vbCBoYXNfbHBhMl9hdF9zdGFnZTIodTY0IG1tZnIwKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5MTkte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTI2LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE5Mjc6c3RhdGljIGJvb2wgaGFzX2xwYTIoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LCBpbnQgc2NvcGUpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTkyOC17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5MzQtI2Vsc2VcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxOTM1OnN0YXRpYyBib29sIGhhc19scGEyKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IHNjb3BlKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5MzYte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTQxLSNpZmRlZiBDT05GSUdfSFdfUEVSRl9FVkVOVFNcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxOTQyOnN0YXRpYyBib29sIGhhc19wbXV2Myhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBzY29wZSlcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTQzLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTk1My1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxOTU0OnN0YXRpYyB2b2lkIGNwdV9lbmFibGVfa3B0aShzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBjb25zdCAqY2FwKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5NTUte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0xOTgwPXN0YXRpYyBpbmxpbmUgdm9pZCBfX2NwdV9lbmFibGVfaHdfZGJtKHZvaWQpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5ODgtXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTk4OTpzdGF0aWMgYm9vbCBjcHVfaGFzX2Jyb2tlbl9kYm0odm9pZClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTkwLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjAwNi1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMDA3OnN0YXRpYyBib29sIGNwdV9jYW5fdXNlX2RibShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIwMDgte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDEyLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIwMTM6c3RhdGljIHZvaWQgY3B1X2VuYWJsZV9od19kYm0oc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgY29uc3QgKmNhcClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDE0LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjAyMC1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMDIxOnN0YXRpYyBib29sIGhhc19od19kYm0oY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmNhcCxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDIyLVx0XHQgICAgICAgaW50IF9fdW51c2VkKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0yMDQ4PXN0YXRpYyBzdHJ1Y3QgY3B1bWFzayBhbXVfY3B1cyBfX3JlYWRfbW9zdGx5O1xuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIwNDktXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjA1MDpib29sIGNwdV9oYXNfYW11X2ZlYXQoaW50IGNwdSlcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDUxLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjA1NC1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMDU1OmludCBnZXRfY3B1X3dpdGhfYW11X2ZlYXQodm9pZClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDU2LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjA1OS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMDYwOnN0YXRpYyB2b2lkIGNwdV9hbXVfZW5hYmxlKHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGNvbnN0ICpjYXApXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjA2MS17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIwNzAtXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjA3MTpzdGF0aWMgYm9vbCBoYXNfYW11KGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXAsXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjA3Mi1cdFx0ICAgIGludCBfX3VudXNlZClcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjA4OS0jZWxzZVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIwOTA6aW50IGdldF9jcHVfd2l0aF9hbXVfZmVhdCh2b2lkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIwOTEte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDk1LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIwOTY6c3RhdGljIGJvb2wgcnVuc19hdF9lbDIoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LCBpbnQgX191bnVzZWQpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjA5Ny17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIxMDAtXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjEwMTpzdGF0aWMgdm9pZCBjcHVfY29weV9lbDJyZWdzKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTAyLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjExNC1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMTE1OnN0YXRpYyBib29sIGhhc19uZXN0ZWRfdmlydF9zdXBwb3J0KGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXAsXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjExNi1cdFx0XHRcdCAgICBpbnQgc2NvcGUpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIxMjgtXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjEyOTpzdGF0aWMgYm9vbCBodmhlX3Bvc3NpYmxlKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTMwLVx0XHRcdCAgaW50IF9fdW51c2VkKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTM0LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIxMzU6Ym9vbCBjcHVfc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCh2b2lkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIxMzYte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTcwLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIxNzE6c3RhdGljIGJvb2wgaGFzX2JibWwyX25vYWJvcnQoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmNhcHMsIGludCBzY29wZSlcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTcyLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjE3NS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMTc2OnN0YXRpYyBib29sIGh2b19jb21wYXRpYmxlKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXBzLCBpbnQgc2NvcGUpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjE3Ny17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIxODQtXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjE4NTpzdGF0aWMgYm9vbCBsYXRlX2NwdV9lbmFibGVfaHZvKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTg2LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjIwMC1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMjAxOnN0YXRpYyB2b2lkIGNwdV9lbmFibGVfcGFuKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjAyLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjIxMy0jaWZkZWYgQ09ORklHX0FSTTY0X1JBU19FWFROXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjIxNDpzdGF0aWMgdm9pZCBjcHVfY2xlYXJfZGlzcihjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqX191bnVzZWQpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjIxNS17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyMTgtfVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIyMTk6c3RhdGljIGJvb2wgaGFzX3Jhc3YxcDEoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKl9fdW51c2VkLCBpbnQgc2NvcGUpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjIyMC17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyMzktI2lmZGVmIENPTkZJR19BUk02NF9QVFJfQVVUSFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIyNDA6c3RhdGljIGJvb2wgaGFzX2FkZHJlc3NfYXV0aF9jcHVjYXAoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LCBpbnQgc2NvcGUpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjI0MS17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyNjUtXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjI2NjpzdGF0aWMgYm9vbCBoYXNfYWRkcmVzc19hdXRoX21ldGFjYXAoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyNjctXHRcdFx0XHQgICAgIGludCBzY29wZSlcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjI3NS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMjc2OnN0YXRpYyBib29sIGhhc19nZW5lcmljX2F1dGgoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyNzctXHRcdFx0ICAgICBpbnQgX191bnVzZWQpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyODctI2lmZGVmIENPTkZJR19BUk02NF9FMFBEXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjI4ODpzdGF0aWMgdm9pZCBjcHVfZW5hYmxlX2UwcGQoc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgY29uc3QgKmNhcClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjg5LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjI5NC1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMjk1OnN0YXRpYyB2b2lkIGNwdV9lbmFibGVfbHM2NChzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBjb25zdCAqY2FwKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyOTYte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjk5LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIzMDA6c3RhdGljIHZvaWQgY3B1X2VuYWJsZV9sczY0X3Yoc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgY29uc3QgKmNhcClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMzAxLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjMwNS0jaWZkZWYgQ09ORklHX0FSTTY0X1BTRVVET19OTUlcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMzA2OnN0YXRpYyBib29sIGNhbl91c2VfZ2ljX3ByaW9yaXRpZXMoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIzMDctXHRcdFx0XHQgICBpbnQgc2NvcGUpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIzMTktXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjMyMDpzdGF0aWMgYm9vbCBoYXNfZ2ljX3ByaW9fcmVsYXhlZF9zeW5jKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMzIxLVx0XHRcdFx0ICAgICAgaW50IHNjb3BlKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMzQ4LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIzNDk6c3RhdGljIGJvb2wgY2FuX3RyYXBfaWN2X2Rpcl9lbDEoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIzNTAtXHRcdFx0XHQgaW50IHNjb3BlKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNDAxLSNpZmRlZiBDT05GSUdfQVJNNjRfQlRJXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjQwMjpzdGF0aWMgdm9pZCBidGlfZW5hYmxlKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNDAzLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQxNi0jaWZkZWYgQ09ORklHX0FSTTY0X01URVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjI0MTc6c3RhdGljIHZvaWQgY3B1X2VuYWJsZV9tdGUoc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgY29uc3QgKmNhcClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNDE4LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQzOS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyNDQwOnN0YXRpYyB2b2lkIHVzZXJfZmVhdHVyZV9maXh1cCh2b2lkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTI0NDEte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNDU4LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjI0NTk6c3RhdGljIHZvaWQgZWxmX2h3Y2FwX2ZpeHVwKHZvaWQpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ2MC17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTI0NjctI2lmZGVmIENPTkZJR19LVk1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyNDY4OnN0YXRpYyBib29sIGlzX2t2bV9wcm90ZWN0ZWRfbW9kZShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBfX3VudXNlZClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNDY5LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ3My1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyNDc0OnN0YXRpYyB2b2lkIGNwdV90cmFwX2VsMF9pbXBkZWYoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKl9fdW51c2VkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTI0NzUte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNDc4LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjI0Nzk6c3RhdGljIHZvaWQgY3B1X2VuYWJsZV9kaXQoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKl9fdW51c2VkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTI0ODAte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNDgzLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjI0ODQ6c3RhdGljIHZvaWQgY3B1X2VuYWJsZV9tb3BzKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNDg1LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ4OS0jaWZkZWYgQ09ORklHX0FSTTY0X1BPRVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjI0OTA6c3RhdGljIHZvaWQgY3B1X2VuYWJsZV9wb2UoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKl9fdW51c2VkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTI0OTEte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNDk3LSNpZmRlZiBDT05GSUdfQVJNNjRfR0NTXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjQ5ODpzdGF0aWMgdm9pZCBjcHVfZW5hYmxlX2djcyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqX191bnVzZWQpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ5OS17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTMyOTA9c3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIHB0cl9hdXRoX2h3Y2FwX2dlbl9tYXRjaGVzW10gPSB7XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTMzMDQtI2lmZGVmIENPTkZJR19BUk02NF9TVkVcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozMzA1OnN0YXRpYyBib29sIGhhc19zdmVfZmVhdHVyZShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwLCBpbnQgc2NvcGUpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzMwNi17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTMzMTEtI2lmZGVmIENPTkZJR19BUk02NF9TTUVcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozMzEyOnN0YXRpYyBib29sIGhhc19zbWVfZmVhdHVyZShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwLCBpbnQgc2NvcGUpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzMxMy17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTMzMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2VsZl9od2NhcHNbXSA9IHtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzQ1OC0jaWZkZWYgQ09ORklHX0NPTVBBVFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM0NTk6c3RhdGljIGJvb2wgY29tcGF0X2hhc19uZW9uKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXAsIGludCBzY29wZSlcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zNDYwLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MzQ4MD1zdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgY29tcGF0X2VsZl9od2NhcHNbXSA9IHtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzUwMy1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozNTA0OnN0YXRpYyB2b2lkIGNhcF9zZXRfZWxmX2h3Y2FwKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXApXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzUwNS17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM1MjQtLyogQ2hlY2sgaWYgd2UgaGF2ZSBhIHBhcnRpY3VsYXIgSFdDQVAgZW5hYmxlZCAqL1xuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM1MjU6c3RhdGljIGJvb2wgY3B1c19oYXZlX2VsZl9od2NhcChjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM1MjYte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zNTQ4LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM1NDk6c3RhdGljIHZvaWQgc2V0dXBfZWxmX2h3Y2Fwcyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqaHdjYXBzKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM1NTAte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zNTU3LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM1NTg6c3RhdGljIHZvaWQgdXBkYXRlX2NwdV9jYXBhYmlsaXRpZXModTE2IHNjb3BlX21hc2spXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzU1OS17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM2MTUtICovXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MzYxNjpzdGF0aWMgaW50IGNwdV9lbmFibGVfbm9uX2Jvb3Rfc2NvcGVfY2FwYWJpbGl0aWVzKHZvaWQgKl9fdW51c2VkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM2MTcte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0zNjQwPXN0YXRpYyB2b2lkIF9faW5pdCBlbmFibGVfY3B1X2NhcGFiaWxpdGllcyh1MTYgc2NvcGVfbWFzaylcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzY4My0gKi9cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozNjg0OnN0YXRpYyB2b2lkIHZlcmlmeV9sb2NhbF9jcHVfY2Fwcyh1MTYgc2NvcGVfbWFzaylcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zNjg1LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzc0OC0gKi9cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozNzQ5OnN0YXRpYyB2b2lkIGNoZWNrX2Vhcmx5X2NwdV9mZWF0dXJlcyh2b2lkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM3NTAte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0zNzU3PV9fdmVyaWZ5X2xvY2FsX2VsZl9od2NhcHMoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmNhcHMpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM3NjctXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6Mzc2ODpzdGF0aWMgdm9pZCB2ZXJpZnlfbG9jYWxfZWxmX2h3Y2Fwcyh2b2lkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM3Njkte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zNzc1LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM3NzY6c3RhdGljIHZvaWQgdmVyaWZ5X3N2ZV9mZWF0dXJlcyh2b2lkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM3Nzcte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zNzg4LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM3ODk6c3RhdGljIHZvaWQgdmVyaWZ5X3NtZV9mZWF0dXJlcyh2b2lkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM3OTAte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zODAxLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM4MDI6c3RhdGljIHZvaWQgdmVyaWZ5X2h5cF9jYXBhYmlsaXRpZXModm9pZClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zODAzLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzgzMi1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozODMzOnN0YXRpYyB2b2lkIHZlcmlmeV9tcGFtX2NhcGFiaWxpdGllcyh2b2lkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM4MzQte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zODcwLSAqL1xuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM4NzE6c3RhdGljIHZvaWQgdmVyaWZ5X2xvY2FsX2NwdV9jYXBhYmlsaXRpZXModm9pZClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zODcyLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzg5My1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozODk0OnZvaWQgY2hlY2tfbG9jYWxfY3B1X2NhcGFiaWxpdGllcyh2b2lkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM4OTUte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zOTEzLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM5MTQ6Ym9vbCB0aGlzX2NwdV9oYXNfY2FwKHVuc2lnbmVkIGludCBuKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM5MTUte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0zOTMyPXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIF9fc3lzdGVtX21hdGNoZXNfY2FwKHVuc2lnbmVkIGludCBuKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zOTQyLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM5NDM6dm9pZCBjcHVfc2V0X2ZlYXR1cmUodW5zaWduZWQgaW50IG51bSlcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zOTQ0LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzk0Ny1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozOTQ4OmJvb2wgY3B1X2hhdmVfZmVhdHVyZSh1bnNpZ25lZCBpbnQgbnVtKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM5NDkte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz00MDY2PXZvaWQgX19pbml0IHNldHVwX3VzZXJfZmVhdHVyZXModm9pZClcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtNDA3OS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzo0MDgwOnN0YXRpYyBpbnQgZW5hYmxlX21pc21hdGNoZWRfMzJiaXRfZWwwKHVuc2lnbmVkIGludCBjcHUpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtNDA4MS17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTQxNjM9c3RhdGljIGlubGluZSBpbnQgZW11bGF0ZV9pZF9yZWcodTMyIGlkLCB1NjQgKnZhbHApXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTQxODItXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6NDE4MzpzdGF0aWMgaW50IGVtdWxhdGVfc3lzX3JlZyh1MzIgaWQsIHU2NCAqdmFscClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy00MTg0LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtNDIwNC1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzo0MjA1OmludCBkb19lbXVsYXRlX21ycyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTMyIHN5c19yZWcsIHUzMiBydClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy00MjA2LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtNDIxNy1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzo0MjE4OmJvb2wgdHJ5X2VtdWxhdGVfbXJzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1MzIgaW5zbilcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy00MjE5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ1NDUKCQkJCQkJCW91dHB1dDogMzIwCgkJCQkJCQl0aG91Z2h0czogNDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIGZvciBBUk02NCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHJldmlld2luZyB0aGlzIHBhdGNoIGFuZCBJJiMzOTttIGZlZWxpbmcgZ29vZCBhYm91dCB3aGVyZSBpdCYjMzk7cyBoZWFkZWQuIFRoZSBpbmNsdXNpb24gb2YgYGxhdGVfY3B1X2VuYWJsZV9odm9gIGFuZCBgaHZvX2NvbXBhdGlibGVgIGlzIGEgc29saWQgYWRkaXRpb24sIGFuZCB0aGV5IGRlZmluaXRlbHkgbmVlZCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgZm9jdXMgc3ltYm9scy4KClNvLCB0aGUgZGVmaW5pdGl2ZSBsaXN0IG9mIGZ1bmN0aW9ucyBmb3IgYW5hbHlzaXMgbG9va3MgbGlrZSB0aGlzLCBhbmQgaXQgc2VlbXMgbGlrZSBhIHZlcnkgZ29vZCBzZXQgdG8gZm9jdXMgb246CiogICBgdm1lbW1hcF9zcGxpdF9wbWRgCiogICBgdm1lbW1hcF9yZW1hcF9wdGVgCiogICBgdm1lbW1hcF9yZXN0b3JlX3B0ZWAKKiAgIGB2bWVtbWFwX3JlbWFwX2ZyZWVgCiogICBgdm1lbW1hcF9yZW1hcF9hbGxvY2AKKiAgIGBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlYAoqICAgYF9faHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW9gCiogICBgX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW9gCiogICBgdm1lbW1hcF9zaG91bGRfb3B0aW1pemVfZm9saW9gCiogICBgdm1lbW1hcF9zaG91bGRfb3B0aW1pemVfYm9vdG1lbV9wYWdlYAoqICAgYGxhdGVfY3B1X2VuYWJsZV9odm9gCiogICBgaHZvX2NvbXBhdGlibGVgCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb25zLiBXZSYjMzk7cmUgY2xlYXJseSBkZWFsaW5nIHdpdGg6CiogICBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBgCiogICBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTmAKKiAgIGBBUk02NF9IV19BRkRCTWAKCkp1c3QgZG91YmxlLWNoZWNraW5nLi4ueWVwLCBgY29uZmlnIEFSTTY0X0hXX0FGREJNYCBpcyB0aGUgcmlnaHQgbmFtZS4gQW5kIHdoaWxlIHdlIG5lZWQgYEhVR0VUTEJfUEFHRWAgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAsIHRoZXkmIzM5O3JlIGdlbmVyaWMgYW5kIG5vdCBzcGVjaWZpYyB0byB0aGlzIEFSTTY0IG9wdGltaXphdGlvbi4KCk9rYXksIGxldCYjMzk7cyByZWNhcCB0aGUgcmF0aW9uYWxlIGhlcmUuIFRoZSBwYXRjaCBpcyBhYm91dCBicmluZ2luZyBBUk02NCBzdXBwb3J0IHRvIEh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykuIEl0JiMzOTtzIGJlZW4gdG91Y2hpbmcgY29yZSBrZXJuZWwgbG9naWMgaW4gYG1tL2h1Z2V0bGJfdm1lbW1hcC5jYCBhbmQgbGV2ZXJhZ2luZyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB2bWVtbWFwIFBNRHMgYW5kIFBURXMuIEl0JiMzOTtzIGFsc28gYWRkaW5nIHRob3NlIG5lY2Vzc2FyeSBDUFUgY2FwYWJpbGl0eSBjaGVja3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZXNwZWNpYWxseSBhcm91bmQgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBIdWdlVExCIHBhZ2VzIHdoZW4gSFZPIGlzIGVuYWJsZWQsIG1ha2luZyBpdCBwcmltZSBmb3IgZnV6emluZy4KCkFscmlnaHQsIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT50aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogQVJNNjRfSFdfQUZEQk08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVAmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTiYjMzQ7LAogICAgJiMzNDtBUk02NF9IV19BRkRCTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtZW1tYXBfc3BsaXRfcG1kJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfcmVtYXBfcHRlJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfcmVzdG9yZV9wdGUmIzM0OywKICAgICYjMzQ7dm1lbW1hcF9yZW1hcF9mcmVlJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfcmVtYXBfYWxsb2MmIzM0OywKICAgICYjMzQ7aHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvJiMzNDssCiAgICAmIzM0O19faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfc2hvdWxkX29wdGltaXplX2ZvbGlvJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfc2hvdWxkX29wdGltaXplX2Jvb3RtZW1fcGFnZSYjMzQ7LAogICAgJiMzNDtsYXRlX2NwdV9lbmFibGVfaHZvJiMzNDssCiAgICAmIzM0O2h2b19jb21wYXRpYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgQVJNNjQgc3VwcG9ydCBmb3IgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKS4gSXQgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgaW4gYG1tL2h1Z2V0bGJfdm1lbW1hcC5jYCB0byB1c2UgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgcG9wdWxhdGluZyBhbmQgdXBkYXRpbmcgdm1lbW1hcCBQTURzIGFuZCBQVEVzLiBJdCBhbHNvIGFkZHMgQ1BVIGNhcGFiaWxpdHkgY2hlY2tzIGZvciBIVk8gb24gQVJNNjQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gYWxsb2NhdGluZyBhbmQgZnJlZWluZyBIdWdlVExCIHBhZ2VzIHdpdGggSFZPIGVuYWJsZWQsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEFSTTY0X0hXX0FGREJNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg3OQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgQVJNNjRfSFdfQUZEQk0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIHNlZSBgQVJNNjRfSFdfQUZEQk1gIGlzIGFjdHVhbGx5IGRlZmluZWQsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQnV0IHRoZSB3YXkgaXQmIzM5O3MgdXNlZCBzdWdnZXN0cyBJIHNob3VsZG4mIzM5O3QgYmUgZW5hYmxpbmcgaXQgZGlyZWN0bHksIG1heWJlIGl0JiMzOTtzIGRlcGVuZGVudCBvbiBzb21lIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQgY291bGQgYmUgc2VsZWN0ZWQgYnkgYW5vdGhlciBLY29uZmlnIG9wdGlvbiwgb3IgaXQgbWlnaHQganVzdCBiZSB0aGUgd2F5IGBBUk02NF9IV19BRkRCTWAgaXMgZGVmaW5lZCBpbiBgYXJjaC9hcm02NC9LY29uZmlnYC4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhhdCBLY29uZmlnIGZpbGUgYW5kIHNlZSBob3cgdGhpcyBpcyBjb25maWd1cmVkIGFuZCB3aGVyZSB0aGUgZGVwZW5kZW5jaWVzIGFyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGlzIG9wdGlvbiB0byBvdGhlciBjb25maWd1cmF0aW9ucyBiZWZvcmUgSSBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVJNNjRfSFdfQUZEQk0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTE5MDA9bWVudSBcJiMzNDtBUk12OC4xIGFyY2hpdGVjdHVyYWwgZmVhdHVyZXNcJiMzNDtcbmFyY2gvYXJtNjQvS2NvbmZpZy0xOTAxLVxuYXJjaC9hcm02NC9LY29uZmlnOjE5MDI6Y29uZmlnIEFSTTY0X0hXX0FGREJNXG5hcmNoL2FybTY0L0tjb25maWctMTkwMy1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgaGFyZHdhcmUgdXBkYXRlcyBvZiB0aGUgQWNjZXNzIGFuZCBEaXJ0eSBwYWdlIGZsYWdzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MjM2CgkJCQkJCQlvdXRwdXQ6IDMwOAoJCQkJCQkJdGhvdWdodHM6IDE3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgYSBDb25maWd1cmF0aW9uIERpc2NyZXBhbmN5KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFdoeSBkaWQgdGhlIGJ1aWxkIHN5c3RlbSBmbGFnIGBBUk02NF9IV19BRkRCTWAgYXMgbm9uLWV4aXN0ZW50PyBUaGF0JiMzOTtzIGEgdmFsaWQgY29uZmlndXJhdGlvbiBvcHRpb24sIGF0IGxlYXN0IEkgdGhvdWdodCBpdCB3YXMuIENvdWxkIGl0IGJlIHRoYXQgdGhlIGJ1aWxkIHRvb2xzLCBvciB3aGF0ZXZlciYjMzk7cyBjaGVja2luZyB0aGUgY29uZmlndXJhdGlvbiwgYXJlIHJ1bm5pbmcgYWdhaW5zdCBgeDg2XzY0YCBjb25maWd1cmF0aW9ucz8KClllcywgdGhhdCBtYWtlcyBzZW5zZS4gU3l6a2FsbGVyLCB0aGUgZnV6emVyIHRoYXQmIzM5O3MgbGlrZWx5IGRyaXZpbmcgdGhpcyBidWlsZCwgaXMgdHlwaWNhbGx5IHVzZWQgd2l0aCBgeDg2XzY0YCB0YXJnZXRzLiBBbmQgdGhpcyBzcGVjaWZpYyBwYXRjaCBJJiMzOTttIHdvcmtpbmcgb24gaXMgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgYXJtNjRgLiBTbywgaWYgdGhlIGNvbmZpZ3VyYXRpb24gY2hlY2sgaXMgYXNzdW1pbmcgYW4gYHg4Nl82NGAgY29udGV4dCwgaXQgd291bGRuJiMzOTt0IGtub3cgYWJvdXQgYEFSTTY0X0hXX0FGREJNYCBhdCBhbGwuCgpBbHJpZ2h0LCBzbyB0aGUgc29sdXRpb24gaXMgcHJvYmFibHkgdG8gZWl0aGVyIHNpbXBseSBvbWl0IGBBUk02NF9IV19BRkRCTWAgZnJvbSBteSBjb25maWcgb3IsIGlmIHRoaXMgb3B0aW9uIGlzIHN0cmljdGx5IGFuIGBhcm02NGAgZmVhdHVyZSwgZW5zdXJlIEkgbWFpbnRhaW4gaXQgZm9yIHRoZSBgYXJtNjRgIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBjb250ZXh0IG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gYmUgc3VyZS4KCkJ1dCwgZm9yIG5vdywgbGV0JiMzOTtzIGtlZXAgaXQgc2ltcGxlLiBMZXQmIzM5O3MganVzdCBsZXZlcmFnZSBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBgIGFuZCBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTmAgaW5zdGVhZC4gVGhhdCYjMzk7cyBhIHNhZmVyIGJldCBhbmQgd2lsbCBnZXQgdGhpbmdzIG1vdmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQJiMzNDssCiAgICAmIzM0O0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWVtbWFwX3NwbGl0X3BtZCYjMzQ7LAogICAgJiMzNDt2bWVtbWFwX3JlbWFwX3B0ZSYjMzQ7LAogICAgJiMzNDt2bWVtbWFwX3Jlc3RvcmVfcHRlJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfcmVtYXBfZnJlZSYjMzQ7LAogICAgJiMzNDt2bWVtbWFwX3JlbWFwX2FsbG9jJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGUmIzM0OywKICAgICYjMzQ7X19odWdldGxiX3ZtZW1tYXBfcmVzdG9yZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtfX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDt2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDt2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9ib290bWVtX3BhZ2UmIzM0OywKICAgICYjMzQ7bGF0ZV9jcHVfZW5hYmxlX2h2byYjMzQ7LAogICAgJiMzNDtodm9fY29tcGF0aWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIEFSTTY0IHN1cHBvcnQgZm9yIEh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykuIEl0IG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGluIGBtbS9odWdldGxiX3ZtZW1tYXAuY2AgdG8gdXNlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmdW5jdGlvbnMgZm9yIHBvcHVsYXRpbmcgYW5kIHVwZGF0aW5nIHZtZW1tYXAgUE1EcyBhbmQgUFRFcy4gSXQgYWxzbyBhZGRzIENQVSBjYXBhYmlsaXR5IGNoZWNrcyBmb3IgSFZPIG9uIEFSTTY0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCB3aGVuIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgSHVnZVRMQiBwYWdlcyB3aXRoIEhWTyBlbmFibGVkLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVAmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtZW1tYXBfc3BsaXRfcG1kJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfcmVtYXBfcHRlJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfcmVzdG9yZV9wdGUmIzM0OywKICAgICYjMzQ7dm1lbW1hcF9yZW1hcF9mcmVlJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfcmVtYXBfYWxsb2MmIzM0OywKICAgICYjMzQ7aHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvJiMzNDssCiAgICAmIzM0O19faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfc2hvdWxkX29wdGltaXplX2ZvbGlvJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfc2hvdWxkX29wdGltaXplX2Jvb3RtZW1fcGFnZSYjMzQ7LAogICAgJiMzNDtsYXRlX2NwdV9lbmFibGVfaHZvJiMzNDssCiAgICAmIzM0O2h2b19jb21wYXRpYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgQVJNNjQgc3VwcG9ydCBmb3IgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKS4gSXQgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgaW4gYG1tL2h1Z2V0bGJfdm1lbW1hcC5jYCB0byB1c2UgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgcG9wdWxhdGluZyBhbmQgdXBkYXRpbmcgdm1lbW1hcCBQTURzIGFuZCBQVEVzLiBJdCBhbHNvIGFkZHMgQ1BVIGNhcGFiaWxpdHkgY2hlY2tzIGZvciBIVk8gb24gQVJNNjQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gYWxsb2NhdGluZyBhbmQgZnJlZWluZyBIdWdlVExCIHBhZ2VzIHdpdGggSFZPIGVuYWJsZWQsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6MTI6MjMuOTczMTg5NjM3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI3ODYwMzQzODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcIixcbiAgICBcIkhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWVtbWFwX3NwbGl0X3BtZFwiLFxuICAgIFwidm1lbW1hcF9yZW1hcF9wdGVcIixcbiAgICBcInZtZW1tYXBfcmVzdG9yZV9wdGVcIixcbiAgICBcInZtZW1tYXBfcmVtYXBfZnJlZVwiLFxuICAgIFwidm1lbW1hcF9yZW1hcF9hbGxvY1wiLFxuICAgIFwiaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZVwiLFxuICAgIFwiX19odWdldGxiX3ZtZW1tYXBfcmVzdG9yZV9mb2xpb1wiLFxuICAgIFwiX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW9cIixcbiAgICBcInZtZW1tYXBfc2hvdWxkX29wdGltaXplX2ZvbGlvXCIsXG4gICAgXCJ2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9ib290bWVtX3BhZ2VcIixcbiAgICBcImxhdGVfY3B1X2VuYWJsZV9odm9cIixcbiAgICBcImh2b19jb21wYXRpYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBBUk02NCBzdXBwb3J0IGZvciBIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pLiBJdCBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBpbiBgbW0vaHVnZXRsYl92bWVtbWFwLmNgIHRvIHVzZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZnVuY3Rpb25zIGZvciBwb3B1bGF0aW5nIGFuZCB1cGRhdGluZyB2bWVtbWFwIFBNRHMgYW5kIFBURXMuIEl0IGFsc28gYWRkcyBDUFUgY2FwYWJpbGl0eSBjaGVja3MgZm9yIEhWTyBvbiBBUk02NC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgd2hlbiBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIEh1Z2VUTEIgcGFnZXMgd2l0aCBIVk8gZW5hYmxlZCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjEyOjIzLjk3MzE5OTgzN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYxMTE4MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGRmMjMwNTQ2MmViOGZhYjlhYmNiNWYxMmI5N2IxZjk3MGNiYTU5NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCA4IDE1OjEyOjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCBmMzdhODE5NTBlMjUwZS4uNTViZDRjMDlmNDk0OTYgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC0xMjAxMyw2ICsxMjAxMyw3IEBAIEY6XFx0RG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxcbiBGOlxcdERvY3VtZW50YXRpb24vbW0vdm1lbW1hcF9kZWR1cC5yc3RcXG4gRjpcXHRmcy9odWdldGxiZnMvXFxuIEY6XFx0aW5jbHVkZS9saW51eC9odWdldGxiLmhcXG4rRjpcXHRpbmNsdWRlL2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oXFxuIEY6XFx0aW5jbHVkZS90cmFjZS9ldmVudHMvaHVnZXRsYmZzLmhcXG4gRjpcXHRtbS9odWdldGxiLmNcXG4gRjpcXHRtbS9odWdldGxiX2Nncm91cC5jXFxuQEAgLTEyMDIxLDcgKzEyMDIyLDcgQEAgRjpcXHRtbS9odWdldGxiX2NtYS5oXFxuIEY6XFx0bW0vaHVnZXRsYl9zeXNjdGwuY1xcbiBGOlxcdG1tL2h1Z2V0bGJfc3lzZnMuY1xcbiBGOlxcdG1tL2h1Z2V0bGJfdm1lbW1hcC5jXFxuLUY6XFx0bW0vaHVnZXRsYl92bWVtbWFwLmhcXG4rRjpcXHRtbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaFxcbiBGOlxcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2h1Z2V0bGJfbWVtY2cuY1xcbiBcXG4gSFZBIFNUIE1FRElBIERSSVZFUlxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWdcXG5pbmRleCBiM2FmZTA2ODg5MTliZC4uMmE1OTE1NWY2OGRjZDggMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXFxuKysrIGIvYXJjaC9hcm02NC9LY29uZmlnXFxuQEAgLTI1OSw2ICsyNTksNyBAQCBjb25maWcgQVJNNjRcXG4gXFx0c2VsZWN0IFVTRVJfU1RBQ0tUUkFDRV9TVVBQT1JUXFxuIFxcdHNlbGVjdCBWRFNPX0dFVFJBTkRPTVxcbiBcXHRzZWxlY3QgVk1BUF9TVEFDS1xcbitcXHRzZWxlY3QgQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUCBpZiBBUk02NF9IV19BRkRCTVxcbiBcXHRoZWxwXFxuIFxcdCAgQVJNIDY0LWJpdCAoQUFyY2g2NCkgTGludXggc3VwcG9ydC5cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1Y2Fwcy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVjYXBzLmhcXG5pbmRleCAyNWM2MWNkYTkwMWM1ZC4uNmRiM2VmODI3Zjg2YTkgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVjYXBzLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaFxcbkBAIC03NSw2ICs3NSw4IEBAIGNwdWNhcF9pc19wb3NzaWJsZShjb25zdCB1bnNpZ25lZCBpbnQgY2FwKVxcbiBcXHRcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfSFdfUEVSRl9FVkVOVFMpO1xcbiBcXHRjYXNlIEFSTTY0X0hBU19MU1VJOlxcbiBcXHRcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfQVJNNjRfTFNVSSk7XFxuK1xcdGNhc2UgQVJNNjRfSFZPX0NPTVBBVElCTEU6XFxuK1xcdFxcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUCk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oXFxuaW5kZXggYTU3ODcwZmE5NmRiNWIuLmQxNTA0ODA0ZjJiZWE5IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcXG5AQCAtMzY3LDYgKzM2NywxNCBAQCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyB7XFxuIFxcdCAqIHJvdXRpbmUgbXVzdCBjaGVjayBpdCBiZWZvcmUgdGFraW5nIGFueSBhY3Rpb24uXFxuIFxcdCAqL1xcbiBcXHR2b2lkICgqY3B1X2VuYWJsZSkoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmNhcCk7XFxuK1xcdC8qXFxuK1xcdCAqIEluIHJhcmUgY2FzZXMsIGNhcGFiaWxpdGllcyBhcmUgKnNvbWV0aW1lcyogb3B0aW9uYWwgZm9yIGxhdGUgQ1BVcy5cXG4rXFx0ICogVGhpcyBjYWxsYmFjayBhbGxvd3MgYSBjYXBhYmlsaXR5IHRvIHByZXZlbnQgb25saW5pbmcgb2ZcXG4rXFx0ICogaW5jb21wYXRpYmxlIENQVXMgd2hlbiB0aGUgY2FwYWJpbGl0eSBpcyBpbiBmYWN0IHJlcXVpcmVkLlxcbitcXHQgKlxcbitcXHQgKiBSZXR1cm5zIHRydWUgaWZmIG9ubGluaW5nIHRoZSBDUFUgaXMgcGVybWl0dGVkLlxcbitcXHQgKi9cXG4rXFx0Ym9vbCAoKmxhdGVfY3B1X2VuYWJsZSkoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmNhcCk7XFxuIFxcdHVuaW9uIHtcXG4gXFx0XFx0c3RydWN0IHtcXHQvKiBUbyBiZSB1c2VkIGZvciBlcnJhdHVtIGhhbmRsaW5nIG9ubHkgKi9cXG4gXFx0XFx0XFx0c3RydWN0IG1pZHJfcmFuZ2UgbWlkcl9yYW5nZTtcXG5AQCAtODg1LDYgKzg5MywxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc3lzdGVtX3N1cHBvcnRzX2JibWwyX25vYWJvcnQodm9pZClcXG4gXFx0cmV0dXJuIGFsdGVybmF0aXZlX2hhc19jYXBfdW5saWtlbHkoQVJNNjRfSEFTX0JCTUwyX05PQUJPUlQpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgc3lzdGVtX3N1cHBvcnRzX2h2byh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBhbHRlcm5hdGl2ZV9oYXNfY2FwX3VubGlrZWx5KEFSTTY0X0hWT19DT01QQVRJQkxFKTtcXG4rfVxcbitcXG4gaW50IGRvX2VtdWxhdGVfbXJzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1MzIgc3lzX3JlZywgdTMyIHJ0KTtcXG4gYm9vbCB0cnlfZW11bGF0ZV9tcnMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHUzMiBpc24pO1xcbiBcXG5AQCAtOTEwLDIyICs5MjMsMzYgQEAgc3RhdGljIGlubGluZSB1MzIgaWRfYWE2NG1tZnIwX3BhcmFuZ2VfdG9fcGh5c19zaGlmdChpbnQgcGFyYW5nZSlcXG4gfVxcbiBcXG4gLyogQ2hlY2sgd2hldGhlciBoYXJkd2FyZSB1cGRhdGUgb2YgdGhlIEFjY2VzcyBmbGFnIGlzIHN1cHBvcnRlZCAqL1xcbi1zdGF0aWMgaW5saW5lIGJvb2wgY3B1X2hhc19od19hZih2b2lkKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgc3VwcG9ydHNfaHdfYWYoaW50IHNjb3BlKVxcbiB7XFxuIFxcdHU2NCBtbWZyMTtcXG4gXFxuIFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJNNjRfSFdfQUZEQk0pKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBVc2UgY2FjaGVkIHZlcnNpb24gdG8gYXZvaWQgZW11bGF0ZWQgbXNyIG9wZXJhdGlvbiBvbiBLVk1cXG4tXFx0ICogZ3Vlc3RzLlxcbi1cXHQgKi9cXG4tXFx0bW1mcjEgPSByZWFkX3Nhbml0aXNlZF9mdHJfcmVnKFNZU19JRF9BQTY0TU1GUjFfRUwxKTtcXG4rXFx0aWYgKHNjb3BlID09IFNDT1BFX1NZU1RFTSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBVc2UgY2FjaGVkIHZlcnNpb24gdG8gYXZvaWQgZW11bGF0ZWQgbXNyIG9wZXJhdGlvbiBvbiBLVk1cXG4rXFx0XFx0ICogZ3Vlc3RzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bW1mcjEgPSByZWFkX3Nhbml0aXNlZF9mdHJfcmVnKFNZU19JRF9BQTY0TU1GUjFfRUwxKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0bW1mcjEgPSByZWFkX2NwdWlkKElEX0FBNjRNTUZSMV9FTDEpO1xcbitcXHR9XFxuIFxcdHJldHVybiBjcHVpZF9mZWF0dXJlX2V4dHJhY3RfdW5zaWduZWRfZmllbGQobW1mcjEsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdElEX0FBNjRNTUZSMV9FTDFfSEFGREJTX1NISUZUKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHN5c3RlbV9oYXNfaHdfYWYodm9pZClcXG4re1xcbitcXHRyZXR1cm4gc3VwcG9ydHNfaHdfYWYoU0NPUEVfU1lTVEVNKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIGNwdV9oYXNfaHdfYWYodm9pZClcXG4re1xcbitcXHRyZXR1cm4gc3VwcG9ydHNfaHdfYWYoU0NPUEVfTE9DQUxfQ1BVKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBib29sIGNwdV9oYXNfcGFuKHZvaWQpXFxuIHtcXG4gXFx0dTY0IG1tZnIxID0gcmVhZF9jcHVpZChJRF9BQTY0TU1GUjFfRUwxKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaFxcbmluZGV4IGQwMzhmZjE0ZDE2Y2FlLi43M2FmNzkxMWZkODMxMyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oXFxuQEAgLTExLDYgKzExLDcgQEBcXG4gI2RlZmluZSBfX0FTTV9IVUdFVExCX0hcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vY2FjaGVmbHVzaC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2NwdWZlYXR1cmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9tdGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wYWdlLmhcXHUwMDNlXFxuIFxcbkBAIC02NSw2ICs2NiwxMiBAQCBleHRlcm4gdm9pZCBodWdlX3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcXG4gXFx0XFx0XFx0XFx0XFx0IHB0ZV90IG9sZF9wdGUsIHB0ZV90IG5ld19wdGUpO1xcbiBcXG4rI2RlZmluZSBfX0hBVkVfQVJDSF9IVk9fU1VQUE9SVEVEXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fc3VwcG9ydGVkKHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIHN5c3RlbV9zdXBwb3J0c19odm8oKTtcXG4rfVxcbitcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS1nZW5lcmljL2h1Z2V0bGIuaFxcdTAwM2VcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX2h1Z2V0bGJfdGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oXFxuaW5kZXggMWI0NTA5ZDMzODJjNjMuLjI2YjA1ZjhiNzBjZDJlIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcXG5AQCAtMTIxLDQgKzEyMSw1OCBAQCBwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWRwLCBwZ3RhYmxlX3QgcHRlcClcXG4gXFx0XFx0ICAgICAgIFBNRF9UWVBFX1RBQkxFIHwgUE1EX1RBQkxFX0FGIHwgUE1EX1RBQkxFX1BYTik7XFxuIH1cXG4gXFxuKyNkZWZpbmUgX19IQVZFX0FSQ0hfVFJZX1BPUFVMQVRFX1ZNRU1NQVBfUE1EXFxuK3N0YXRpYyBpbmxpbmUgaW50IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWRfdCAqcG1kcCwgcHRlX3QgKnBndGFibGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4re1xcbitcXHRjb25zdCBpbnQgbWF4X2F0dGVtcHRzID0gMTY7XFxuK1xcdGludCBhdHRlbXB0cyA9IDA7XFxuK1xcdHBtZF90IG9sZF9wbWQsIG5ld19wbWQ7XFxuK1xcbitcXHRpZiAoIXN5c3RlbV9zdXBwb3J0c19odm8oKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0aWYgKHN5c3RlbV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KCkpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQkJNTDJfTk9BQk9SVCBhbGxvd3MgYmxvY2stXFx1MDAzZXRhYmxlIHRyYW5zaXRpb25zIGlmIHRoZSBQVEVzXFxuK1xcdFxcdCAqIHVuZGVybmVhdGggZG8gbm90IGNvbmZsaWN0IHdpdGggZXhpc3RpbmcsIHBvdGVudGlhbGx5IGNhY2hlZFxcbitcXHRcXHQgKiB0cmFuc2xhdGlvbnMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRwbWRfcG9wdWxhdGVfa2VybmVsKFxcdTAwMjZpbml0X21tLCBwbWRwLCBwZ3RhYmxlKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdG5ld19wbWQgPSBfX3BtZChfX3BoeXNfdG9fcG1kX3ZhbChfX3BhKHBndGFibGUpKSB8XFxuK1xcdFxcdFxcdFBNRF9UWVBFX1RBQkxFIHwgUE1EX1RBQkxFX0FGIHwgUE1EX1RBQkxFX1VYTik7XFxuK1xcbitcXHRvbGRfcG1kID0gcG1kcF9nZXQocG1kcCk7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0UoIXBtZF92YWxpZChvbGRfcG1kKSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0aWYgKFdBUk5fT05fT05DRSghcG1kX2xlYWYob2xkX3BtZCkpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdC8qIFdlIHNob3VsZCBuZXZlciBnZXQgYSBjb250aWd1b3VzIFBNRCBoZXJlLiAqL1xcbitcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKHBtZF9jb250KG9sZF9wbWQpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRpZiAocG1kX3lvdW5nKG9sZF9wbWQpKSB7XFxuK1xcdFxcdFxcdC8qIF9fcHRlcF9jbGVhcl95b3VuZygpIHJldHVybnMgdGhlIG92ZXJ3cml0dGVuIFBURSAqL1xcbitcXHRcXHRcXHRvbGRfcG1kID0gcHRlX3BtZChwdGVfbWtvbGQoX19wdGVwX2NsZWFyX3lvdW5nKChwdGVfdCAqKXBtZHApKSk7XFxuK1xcbitcXHRcXHRcXHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGFkZHIgKyBQTURfU0laRSk7XFxuK1xcdFxcdH1cXG4rXFx0LypcXG4rXFx0ICogVHJhbnNsYXRpb25zIHdpdGhvdXQgQUYgY2Fubm90IGJlIGNhY2hlZCwgc28gd2UgY2FuIHJlcGxhY2VcXG4rXFx0ICogdGhlbSB3aXRob3V0IEJCTS5cXG4rXFx0ICovXFxuK1xcdH0gd2hpbGUgKCF0cnlfY21weGNoZ19yZWxheGVkKFxcdTAwMjZwbWRfdmFsKCpwbWRwKSwgXFx1MDAyNnBtZF92YWwob2xkX3BtZCksXFxuK1xcdFxcdFxcdFxcdCAgICAgIHBtZF92YWwobmV3X3BtZCkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCArK2F0dGVtcHRzIFxcdTAwM2MgbWF4X2F0dGVtcHRzKTtcXG4rXFxuK1xcdHJldHVybiBhdHRlbXB0cyA9PSBtYXhfYXR0ZW1wdHMgPyAtRUFHQUlOIDogMDtcXG4rfVxcbitcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5pbmRleCAyNzY4OWM2MmJkMjVkZC4uN2IxMWFhNDFkMGEwNzQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbkBAIC0xMzAyLDggKzEzMDIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX19wdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdF9fc2V0X3B0ZShwdGVwLCBfX3B0ZSgwKSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApXFxuK3N0YXRpYyBpbmxpbmUgcHRlX3QgX19wdGVwX2NsZWFyX3lvdW5nKHB0ZV90ICpwdGVwKVxcbiB7XFxuIFxcdHB0ZV90IG9sZF9wdGUsIHB0ZTtcXG4gXFxuQEAgLTEzMTUsNyArMTMxNCwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgX19wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICAgcHRlX3ZhbChvbGRfcHRlKSwgcHRlX3ZhbChwdGUpKTtcXG4gXFx0fSB3aGlsZSAocHRlX3ZhbChwdGUpICE9IHB0ZV92YWwob2xkX3B0ZSkpO1xcbiBcXG4tXFx0cmV0dXJuIHB0ZV95b3VuZyhwdGUpO1xcbitcXHRyZXR1cm4gcHRlO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgX19wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKVxcbit7XFxuK1xcdHJldHVybiBwdGVfeW91bmcoX19wdGVwX2NsZWFyX3lvdW5nKHB0ZXApKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIF9fcHRlcF9jbGVhcl9mbHVzaF95b3VuZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5AQCAtMTU5OCw3ICsxNjAzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuICAqIHBhZ2UgYWZ0ZXIgZm9yaygpICsgQ29XIGZvciBwZm4gbWFwcGluZ3MuIFdlIGRvbid0IGFsd2F5cyBoYXZlIGFcXG4gICogaGFyZHdhcmUtbWFuYWdlZCBhY2Nlc3MgZmxhZyBvbiBhcm02NC5cXG4gICovXFxuLSNkZWZpbmUgYXJjaF9oYXNfaHdfcHRlX3lvdW5nXFx0XFx0Y3B1X2hhc19od19hZlxcbisjZGVmaW5lIGFyY2hfaGFzX2h3X3B0ZV95b3VuZ1xcdFxcdHN5c3RlbV9oYXNfaHdfYWZcXG4gXFxuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTk9OTEVBRl9QTURfWU9VTkdcXG4gI2RlZmluZSBhcmNoX2hhc19od19ub25sZWFmX3BtZF95b3VuZ1xcdHN5c3RlbV9zdXBwb3J0c19oYWZ0XFxuQEAgLTE2MDgsNyArMTYxMyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbW11X2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbiAgKiBFeHBlcmltZW50YWxseSwgaXQncyBjaGVhcCB0byBzZXQgdGhlIGFjY2VzcyBmbGFnIGluIGhhcmR3YXJlIGFuZCB3ZVxcbiAgKiBiZW5lZml0IGZyb20gcHJlZmF1bHRpbmcgbWFwcGluZ3MgYXMgJ29sZCcgdG8gc3RhcnQgd2l0aC5cXG4gICovXFxuLSNkZWZpbmUgYXJjaF93YW50c19vbGRfcHJlZmF1bHRlZF9wdGVcXHRjcHVfaGFzX2h3X2FmXFxuKyNkZWZpbmUgYXJjaF93YW50c19vbGRfcHJlZmF1bHRlZF9wdGVcXHRzeXN0ZW1faGFzX2h3X2FmXFxuIFxcbiAvKlxcbiAgKiBSZXF1ZXN0IGV4ZWMgbWVtb3J5IGlzIHJlYWQgaW50byBwYWdlY2FjaGUgaW4gYXQgbGVhc3QgNjRLIGZvbGlvcy4gVGhpcyBzaXplXFxuQEAgLTE3OTMsNiArMTc5OCw0OCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHRfX3B0ZV9jbGVhcihtbSwgYWRkciwgcHRlcCk7XFxuIH1cXG4gXFxuKyNkZWZpbmUgX19IQVZFX0FSQ0hfVFJZX1VQREFURV9WTUVNTUFQX1BURVxcbitzdGF0aWMgaW5saW5lIGludCB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXFxuK1xcdFxcdFxcdFxcdFxcdCBjb25zdCBwdGVfdCBwdGUpXFxuK3tcXG4rXFx0Y29uc3QgaW50IG1heF9hdHRlbXB0cyA9IDE2O1xcbitcXHRpbnQgYXR0ZW1wdHMgPSAwO1xcbitcXHRwdGVfdCBvbGRfcHRlO1xcbitcXG4rXFx0aWYgKCFzeXN0ZW1fc3VwcG9ydHNfaHZvKCkpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdC8qIFRoaXMgcm91dGluZSBpcyBvbmx5IHRvIGJlIHVzZWQgZm9yIHZhbGlkLXRvLXZhbGlkIHRyYW5zaXRpb25zLiAqL1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCFwdGVfdmFsaWQocHRlKSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0b2xkX3B0ZSA9IF9fcHRlcF9nZXQocHRlcCk7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0UoIXB0ZV92YWxpZChvbGRfcHRlKSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0LyogV2Ugc2hvdWxkIG5ldmVyIGdldCBhIGNvbnRpZ3VvdXMgUFRFIGhlcmUuICovXFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0UocHRlX3ZhbGlkX2NvbnQob2xkX3B0ZSkpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdGlmIChwdGVfeW91bmcob2xkX3B0ZSkpIHtcXG4rXFx0XFx0XFx0LyogX19wdGVwX2NsZWFyX3lvdW5nKCkgcmV0dXJucyB0aGUgb3ZlcndyaXR0ZW4gUFRFICovXFxuK1xcdFxcdFxcdG9sZF9wdGUgPSBwdGVfbWtvbGQoX19wdGVwX2NsZWFyX3lvdW5nKHB0ZXApKTtcXG4rXFxuK1xcdFxcdFxcdGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UoYWRkciwgYWRkciArIFBBR0VfU0laRSk7XFxuK1xcdFxcdH1cXG4rXFx0LypcXG4rXFx0ICogVHJhbnNsYXRpb25zIHdpdGhvdXQgQUYgY2Fubm90IGJlIGNhY2hlZCwgc28gd2UgY2FuIHJlcGxhY2VcXG4rXFx0ICogdGhlbSB3aXRob3V0IEJCTS5cXG4rXFx0ICovXFxuK1xcdH0gd2hpbGUgKCF0cnlfY21weGNoZ19yZWxheGVkKFxcdTAwMjZwdGVfdmFsKCpwdGVwKSwgXFx1MDAyNnB0ZV92YWwob2xkX3B0ZSksXFxuK1xcdFxcdFxcdFxcdCAgICAgIHB0ZV92YWwocHRlKSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICsrYXR0ZW1wdHMgXFx1MDAzYyBtYXhfYXR0ZW1wdHMpO1xcbitcXG4rXFx0cmV0dXJuIGF0dGVtcHRzID09IG1heF9hdHRlbXB0cyA/IC1FQUdBSU4gOiAwO1xcbit9XFxuK1xcbiAjZGVmaW5lIGNsZWFyX2Z1bGxfcHRlcyBjbGVhcl9mdWxsX3B0ZXNcXG4gc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2Z1bGxfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHRcXHRwdGVfdCAqcHRlcCwgdW5zaWduZWQgaW50IG5yLCBpbnQgZnVsbClcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXFxuaW5kZXggOWEyMmRmMGM1MTIwZjMuLjY1YmIzYzdjOTU5NTJiIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xcbkBAIC03Niw2ICs3Niw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rYXNhbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGVyY3B1LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9pc29sYXRpb24uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9hcm1fcG11djMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9jcHUuaFxcdTAwM2VcXG5AQCAtMjE3Miw2ICsyMTczLDMxIEBAIHN0YXRpYyBib29sIGhhc19iYm1sMl9ub2Fib3J0KGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXBzLCBpbnQgc2NvXFxuIFxcdHJldHVybiBjcHVfc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCgpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBodm9fY29tcGF0aWJsZShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwcywgaW50IHNjb3BlKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFdlIG5lZWQgSFcgQUYgc3VwcG9ydCB0byBzdXBwb3J0IGNoYW5naW5nIHZtZW1tYXAgbWFwcGluZyBsZXZlbCBhbmRcXG4rXFx0ICogT0Egd2l0aG91dCB0YWtpbmcgZmF1bHRzLlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuIHN1cHBvcnRzX2h3X2FmKHNjb3BlKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgbGF0ZV9jcHVfZW5hYmxlX2h2byhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqX191bnVzZWQpXFxuK3tcXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbitcXHRpZiAoY3B1X2hhc19od19hZigpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIElmIHRoZSBDUFUgZG9lcyBub3Qgc3VwcG9ydCBIVyBBRiwgd2UgY2Fubm90IG9ubGluZSBpdCBpZiBIVk8gaXNcXG4rXFx0ICogY3VycmVudGx5IGluIHVzZS5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKCk7XFxuKyNlbHNlXFxuK1xcdHJldHVybiB0cnVlO1xcbisjZW5kaWZcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgY3B1X2VuYWJsZV9wYW4oY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKl9fdW51c2VkKVxcbiB7XFxuIFxcdC8qXFxuQEAgLTMwNjcsNiArMzA5MywxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZmVhdHVyZXNbXSA9IHtcXG4gXFx0XFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfRUFSTFlfTE9DQUxfQ1BVX0ZFQVRVUkUsXFxuIFxcdFxcdC5tYXRjaGVzID0gaGFzX2JibWwyX25vYWJvcnQsXFxuIFxcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LmRlc2MgPSBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiBTdXBwb3J0XFxcIixcXG4rXFx0XFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IVk9fQ09NUEFUSUJMRSxcXG4rXFx0XFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU0NPUEVfU1lTVEVNIHxcXG4rXFx0XFx0XFx0QVJNNjRfQ1BVQ0FQX09QVElPTkFMX0ZPUl9MQVRFX0NQVSB8XFxuK1xcdFxcdFxcdEFSTTY0X0NQVUNBUF9QRVJNSVRURURfRk9SX0xBVEVfQ1BVLFxcbitcXHRcXHQubWF0Y2hlcyA9IGh2b19jb21wYXRpYmxlLFxcbitcXHRcXHQubGF0ZV9jcHVfZW5hYmxlID0gbGF0ZV9jcHVfZW5hYmxlX2h2byxcXG4rXFx0fSxcXG4gXFx0e1xcbiBcXHRcXHQuZGVzYyA9IFxcXCI1Mi1iaXQgVmlydHVhbCBBZGRyZXNzaW5nIGZvciBLVk0gKExQQTIpXFxcIixcXG4gXFx0XFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfTFBBMixcXG5AQCAtMzY2OSw2ICszNzA0LDE0IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9sb2NhbF9jcHVfY2Fwcyh1MTYgc2NvcGVfbWFzaylcXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGlmICghY3B1X2hhc19jYXAgXFx1MDAyNlxcdTAwMjYgIWNwdWNhcF9sYXRlX2NwdV9vcHRpb25hbChjYXBzKSlcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBTb21lIG9wdGlvbmFsIGZlYXR1cmVzIG1heSBpbiBmYWN0IGJlIHJlcXVpcmVkIGR1ZVxcbitcXHRcXHRcXHQgKiB0byBwYXJ0aWN1bGFyIHJ1bnRpbWUgY29uZGl0aW9ucy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmIChjYXBzLVxcdTAwM2VsYXRlX2NwdV9lbmFibGUgXFx1MDAyNlxcdTAwMjYgIWNhcHMtXFx1MDAzZWxhdGVfY3B1X2VuYWJsZShjYXBzKSlcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBXZSBoYXZlIHRvIGlzc3VlIGNwdV9lbmFibGUoKSBpcnJlc3BlY3RpdmUgb2ZcXG4gXFx0XFx0XFx0ICogd2hldGhlciB0aGUgQ1BVIGhhcyBpdCBvciBub3QsIGFzIGl0IGlzIGVuYWJlbGRcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzIGIvYXJjaC9hcm02NC90b29scy9jcHVjYXBzXFxuaW5kZXggOWI4NWE4NGY2ZmQ0OTQuLjYzMDk1M2Q1OWM1Mjc2IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xcbisrKyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xcbkBAIC03MCw2ICs3MCw3IEBAIEhBU19WSVJUX0hPU1RfRVhUTlxcbiBIQVNfV0ZYVFxcbiBIQVNfWE5YXFxuIEhBRlRcXG4rSFZPX0NPTVBBVElCTEVcXG4gSFdfREJNXFxuIEtWTV9IVkhFXFxuIEtWTV9QUk9URUNURURfTU9ERVxcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcXG5pbmRleCAyNDhmNjJkMGI1OTBlYy4uOTMyMmQ5NjJjOWNjODAgMTAwNjQ0XFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oXFxuKysrIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oXFxuQEAgLTI0LDYgKzI0LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsIHBndGFibGVfdCBwdGUpXFxuIFxcdHNldF9wbWQocG1kLCBfX3BtZCgodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocHRlKSkpO1xcbiB9XFxuIFxcbisjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9QT1BVTEFURV9WTUVNTUFQX1BNRFxcbitzdGF0aWMgaW5saW5lIGludCB0cnlfcG9wdWxhdGVfdm1lbW1hcF9wbWQocG1kX3QgKnBtZHAsIHB0ZV90ICpwZ3RhYmxlLFxcbitcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFkZHIpXFxuK3tcXG4rXFx0cG1kX3BvcHVsYXRlX2tlcm5lbChcXHUwMDI2aW5pdF9tbSwgcG1kcCwgcGd0YWJsZSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERURcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQsIHBtZF90ICpwbWQpXFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbmluZGV4IDIyMzUyOGMwNGQ3MzkyLi5lN2I2NTA1NmVmNzM4NCAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5AQCAtNjM4LDYgKzYzOCwxNCBAQCBzdGF0aWMgaW5saW5lIGxvbmcgcG1kX3Byb3Rub25lKHBtZF90IHBtZClcXG4gI2RlZmluZSBwbWRfbGVhZihwbWQpXFx0XFx0KChwbWRfdmFsKHBtZCkgXFx1MDAyNiBfUEFHRV9IVUdFKSAhPSAwKVxcbiAjZGVmaW5lIHB1ZF9sZWFmKHB1ZClcXHRcXHQoKHB1ZF92YWwocHVkKSBcXHUwMDI2IF9QQUdFX0hVR0UpICE9IDApXFxuIFxcbisjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9VUERBVEVfVk1FTU1BUF9QVEVcXG4rc3RhdGljIGlubGluZSBpbnQgdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxcbitcXHRcXHRcXHRcXHRcXHQgcHRlX3QgcHRlKVxcbit7XFxuK1xcdHNldF9wdGUocHRlcCwgcHRlKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qXFxuICAqIFdlIHByb3ZpZGUgb3VyIG93biBnZXRfdW5tYXBwZWQgYXJlYSB0byBjb3BlIHdpdGggdGhlIHZpcnR1YWwgYWxpYXNpbmdcXG4gICogY29uc3RyYWludHMgcGxhY2VkIG9uIHVzIGJ5IHRoZSBjYWNoZSBhcmNoaXRlY3R1cmUuXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcXG5pbmRleCA3NzBjZTE4YTczMjhiOC4uOGRiYmU2MmIyNTc0MjUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcXG4rKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxcbkBAIC0zMSw2ICszMSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHRzZXRfcG1kKHBtZCwgX19wbWQoKHBmbiBcXHUwMDNjXFx1MDAzYyBfUEFHRV9QRk5fU0hJRlQpIHwgX1BBR0VfVEFCTEUpKTtcXG4gfVxcbiBcXG4rI2RlZmluZSBfX0hBVkVfQVJDSF9UUllfUE9QVUxBVEVfVk1FTU1BUF9QTURcXG4rc3RhdGljIGlubGluZSBpbnQgdHJ5X3BvcHVsYXRlX3ZtZW1tYXBfcG1kKHBtZF90ICpwbWRwLCBwdGVfdCAqcGd0YWJsZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyKVxcbit7XFxuK1xcdHBtZF9wb3B1bGF0ZV9rZXJuZWwoXFx1MDAyNmluaXRfbW0sIHBtZHAsIHBndGFibGUpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVEXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQsIHBtZF90ICpwbWQpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbmluZGV4IDVkNTc1NmJkYTgyZTNkLi5hMTFjNTY5ZWUyZjA2ZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuQEAgLTExNjIsNiArMTE2MiwxNCBAQCBzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZF9tb2RpZnkocHVkX3QgcHVkLCBwZ3Byb3RfdCBuZXdwcm90KVxcbiBcXG4gI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbiBcXG4rI2RlZmluZSBfX0hBVkVfQVJDSF9UUllfVVBEQVRFX1ZNRU1NQVBfUFRFXFxuK3N0YXRpYyBpbmxpbmUgaW50IHRyeV91cGRhdGVfdm1lbW1hcF9wdGUodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcXG4rXFx0XFx0XFx0XFx0XFx0IHB0ZV90IHB0ZSlcXG4re1xcbitcXHRzZXRfcHRlKHB0ZXAsIHB0ZSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBFbmNvZGUvZGVjb2RlIHN3YXAgZW50cmllcyBhbmQgc3dhcCBQVEVzLiBTd2FwIFBURXMgYXJlIGFsbCBQVEVzIHRoYXRcXG4gICogYXJlICFwdGVfbm9uZSgpIFxcdTAwMjZcXHUwMDI2ICFwdGVfcHJlc2VudCgpLlxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcXG5pbmRleCBjODg2OTFiMTVmM2M2Ny4uNDdiNTZiYmQ2MjM2MTQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGdhbGxvYy5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGdhbGxvYy5oXFxuQEAgLTgyLDYgKzgyLDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsXFxuIFxcdHNldF9wbWQocG1kLCBfX3BtZCgoKHB0ZXZhbF90KXBmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSB8IF9QQUdFX1RBQkxFKSk7XFxuIH1cXG4gXFxuKyNkZWZpbmUgX19IQVZFX0FSQ0hfVFJZX1BPUFVMQVRFX1ZNRU1NQVBfUE1EXFxuK3N0YXRpYyBpbmxpbmUgaW50IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWRfdCAqcG1kcCwgcHRlX3QgKnBndGFibGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4re1xcbitcXHRwbWRfcG9wdWxhdGVfa2VybmVsKFxcdTAwMjZpbml0X21tLCBwbWRwLCBwZ3RhYmxlKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuICNpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgXFx1MDAzZSAyXFxuIGV4dGVybiB2b2lkIF9fX3BtZF9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwbWRfdCAqcG1kKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbmluZGV4IGFjMjk1Y2E2YzkyZjk5Li45NzQxNTE1NjQwNzFjYiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5AQCAtMTM3Miw2ICsxMzcyLDE0IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIH1cXG4gI2VuZGlmXFxuIFxcbisjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9VUERBVEVfVk1FTU1BUF9QVEVcXG4rc3RhdGljIGlubGluZSBpbnQgdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxcbitcXHRcXHRcXHRcXHRcXHQgcHRlX3QgcHRlKVxcbit7XFxuK1xcdHNldF9wdGUocHRlcCwgcHRlKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuICNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbiBzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmhcXG5pbmRleCBlMWEyZTFiN2M4ZTdiOC4uYzQ3OTZjNTRiNzAyYTkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmhcXG4rKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaFxcbkBAIC0xMjgsNCArMTI4LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKHZvaWQpXFxuIH1cXG4gI2VuZGlmIC8qIF9fSEFWRV9BUkNIX0dJR0FOVElDX1BBR0VfUlVOVElNRV9TVVBQT1JURUQgKi9cXG4gXFxuKyNpZm5kZWYgX19IQVZFX0FSQ0hfSFZPX1NVUFBPUlRFRFxcbitzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3N1cHBvcnRlZCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUCk7XFxuK31cXG4rI2VuZGlmIC8qIF9fSEFWRV9BUkNIX0hWT19TVVBQT1JURUQgKi9cXG4rXFxuICNlbmRpZiAvKiBfQVNNX0dFTkVSSUNfSFVHRVRMQl9IICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYl92bWVtbWFwLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYTY3MWViNGE0ZmY0NjZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiX3ZtZW1tYXAuaFxcbkBAIC0wLDAgKzEsMjAgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rI2lmbmRlZiBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0hcXG4rI2RlZmluZSBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbitcXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbitcXG4rYm9vbCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKHZvaWQpO1xcbitcXG4rI2Vsc2UgLyogQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQICovXFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZSh2b2lkKVxcbit7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbisjZW5kaWZcXG4rXFxuKyNlbmRpZiAvKiBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaFxcbmluZGV4IDkxNzRmYTU5YmJjNTRkLi5lZDQ0NmQ5NWNhMzczMCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGdhbGxvYy5oXFxuQEAgLTI2LDQgKzI2LDI0IEBAXFxuIFxcdFxcdFxcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MoYWRkciwgYWRkcik7XFx0XFx0XFxcXFxcbiBcXHR9IHdoaWxlICgwKVxcbiBcXG4rI2lmbmRlZiBfX0hBVkVfQVJDSF9UUllfUE9QVUxBVEVfVk1FTU1BUF9QTURcXG4rLypcXG4rICogdHJ5X3BvcHVsYXRlX3ZtZW1tYXBfcG1kIC0gUG9wdWxhdGUgYSBQTUQgdGhhdCBpcyBpbiB1c2UgYnkgdGhlIHZtZW1tYXAuXFxuKyAqIEBhZGRyOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHJlbWFwcGVkIFBNRC5cXG4rICogQHBtZHA6IFBhZ2UgdGFibGUgcG9pbnRlciB0byBiZSBvdmVyd3JpdHRlbi5cXG4rICogQHBndGFibGU6IFBvaW50ZXIgdG8gdGhlIHBhZ2UgdGFibGUgdGhhdCB0aGUgbmV3IFBNRCB3aWxsIHBvaW50IHRvLlxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdG8gYmUgdXNlZCB0byB1cGRhdGUgUE1EcyB0aGF0IG1hcCB0aGUgdm1lbW1hcCB0b1xcbisgKiBwb2ludCB0byBhIHBhZ2Ugb2YgYWxyZWFkeS1wb3B1bGF0ZWQgUFRFcyB0aGF0IG1hcCB0aGUgc2FtZSBwYWdlcy5cXG4rICpcXG4rICogSW1wbGVtZW50YXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gbXVzdCBlbnN1cmUgdGhhdCwgd2hpbGUgdGhlIHVwZGF0ZSBpcyB0YWtpbmdcXG4rICogcGxhY2UsIENQVXMgd2lsbCBub3QgZmF1bHQgb24gdGhlIHJlbWFwcGVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgaW50IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWRfdCAqcG1kcCwgcHRlX3QgKnBndGFibGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4re1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAjZW5kaWYgLyogX0xJTlVYX1BHQUxMT0NfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXFxuaW5kZXggMjk4MWUzODZkYTdiM2MuLmUxYWJjY2Y3NmJiNDYzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcXG5AQCAtNDU3LDYgKzQ1NywyNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gI2VuZGlmXFxuICNkZWZpbmUgc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKSBzZXRfcHRlcyhtbSwgYWRkciwgcHRlcCwgcHRlLCAxKVxcbiBcXG4rI2lmbmRlZiBfX0hBVkVfQVJDSF9UUllfVVBEQVRFX1ZNRU1NQVBfUFRFXFxuKy8qXFxuKyAqIHRyeV91cGRhdGVfdm1lbW1hcF9wdGUgLSBSZW1hcCBQVEVzIHVzZWQgYnkgdGhlIHZtZW1tYXAuXFxuKyAqIEBhZGRyOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHJlbWFwcGVkIFBURS5cXG4rICogQHB0ZXA6IFBhZ2UgdGFibGUgcG9pbnRlciB0byBiZSBvdmVyd3JpdHRlbi5cXG4rICogQHB0ZTogUGFnZSB0YWJsZSBlbnRyeSB0byB3cml0ZS5cXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHRvIGJlIHVzZWQgdG8gdXBkYXRlIFBURXMgdGhhdCBtYXAgdGhlIHZtZW1tYXAuIFRoZVxcbisgKiBvbmx5IHZhbGlkIHRyYW5zaXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIGZ1bmN0aW9uIGFyZTogbGVhZi1sZXZlbFxcbisgKiAoUEFHRV9TSVpFKSwgdmFsaWQtdG8tdmFsaWQuIFRoZSBwZm4gYW5kIHByb3QgYml0cyBtYXkgYmUgY2hhbmdlZC5cXG4rICpcXG4rICogSW1wbGVtZW50YXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gbXVzdCBlbnN1cmUgdGhhdCwgd2hpbGUgdGhlIHVwZGF0ZSBpcyB0YWtpbmdcXG4rICogcGxhY2UsIENQVXMgd2lsbCBub3QgZmF1bHQgb24gdGhlIHJlbWFwcGVkIHZpcnR1YWwgYWRkcmVzcy5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgaW50IHRyeV91cGRhdGVfdm1lbW1hcF9wdGUodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcXG4rXFx0XFx0XFx0XFx0XFx0IHB0ZV90IHB0ZSlcXG4re1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAjaWZuZGVmIF9fSEFWRV9BUkNIX1BURVBfU0VUX0FDQ0VTU19GTEFHU1xcbiBleHRlcm4gaW50IHB0ZXBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXAsXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi4yOTg2NzNhNmM1N2M1YyAxMDA2NDRcXG4tLS0gYS9tbS9odWdldGxiLmNcXG4rKysgYi9tbS9odWdldGxiLmNcXG5AQCAtNDcsNyArNDcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbm9kZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZV9vd25lci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2V0bGJfdm1lbW1hcC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiaHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJodWdldGxiX2NtYS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiaHVnZXRsYl9pbnRlcm5hbC5oXFxcIlxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZS1pc29sYXRpb24uaFxcdTAwM2VcXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl9zeXNmcy5jIGIvbW0vaHVnZXRsYl9zeXNmcy5jXFxuaW5kZXggNzllY2U5MTQwNmJmYTQuLjgzYTk1ZjUxNDJmNWE0IDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGJfc3lzZnMuY1xcbisrKyBiL21tL2h1Z2V0bGJfc3lzZnMuY1xcbkBAIC04LDcgKzgsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZV9vd25lci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZS1pc29sYXRpb24uaFxcdTAwM2VcXG4gXFxuLSNpbmNsdWRlIFxcXCJodWdldGxiX3ZtZW1tYXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImh1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiaHVnZXRsYl9pbnRlcm5hbC5oXFxcIlxcbiBcXG4gI2RlZmluZSBIU1RBVEVfQVRUUl9STyhfbmFtZSkgXFxcXFxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiX3ZtZW1tYXAuYyBiL21tL2h1Z2V0bGJfdm1lbW1hcC5jXFxuaW5kZXggMTMzYjQ2ZGZiMDlmNWMuLjdlN2Y4NTc5Y2MyYWU1IDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGJfdm1lbW1hcC5jXFxuKysrIGIvbW0vaHVnZXRsYl92bWVtbWFwLmNcXG5AQCAtMTYsOSArMTYsMTEgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tZGVidWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2V3YWxrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZ2FsbG9jLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9odWdldGxiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9odWdldGxiX3ZtZW1tYXAuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdGxiZmx1c2guaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFxcImh1Z2V0bGJfdm1lbW1hcC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiaHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbiBcXG4gLyoqXFxuQEAgLTM0LDcgKzM2LDcgQEBcXG4gICpcXHRcXHRcXHRvcGVyYXRpb25zLlxcbiAgKi9cXG4gc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayB7XFxuLVxcdHZvaWRcXHRcXHRcXHQoKnJlbWFwX3B0ZSkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRpbnRcXHRcXHRcXHQoKnJlbWFwX3B0ZSkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspO1xcbiBcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdG5yX3dhbGtlZDtcXG5AQCAtNTQsNiArNTYsNyBAQCBzdGF0aWMgaW50IHZtZW1tYXBfc3BsaXRfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBwYWdlICpoZWFkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspXFxuIHtcXG4gXFx0cG1kX3QgX19wbWQ7XFxuK1xcdGludCByZXQ7XFxuIFxcdGludCBpO1xcbiBcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSBzdGFydDtcXG4gXFx0cHRlX3QgKnBndGFibGU7XFxuQEAgLTczLDggKzc2LDE1IEBAIHN0YXRpYyBpbnQgdm1lbW1hcF9zcGxpdF9wbWQocG1kX3QgKnBtZCwgc3RydWN0IHBhZ2UgKmhlYWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuIFxcdFxcdHNldF9wdGVfYXQoXFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSwgZW50cnkpO1xcbiBcXHR9XFxuIFxcbitcXHRyZXQgPSAwO1xcbiBcXHRzcGluX2xvY2soXFx1MDAyNmluaXRfbW0ucGFnZV90YWJsZV9sb2NrKTtcXG4gXFx0aWYgKGxpa2VseShwbWRfbGVhZigqcG1kKSkpIHtcXG4rXFx0XFx0LyogTWFrZSBwdGUgdmlzaWJsZSBiZWZvcmUgcG1kLiBTZWUgY29tbWVudCBpbiBwbWRfaW5zdGFsbCgpLiAqL1xcbitcXHRcXHRzbXBfd21iKCk7XFxuK1xcdFxcdHJldCA9IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWQsIHBndGFibGUsIHN0YXJ0KTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBmcmVlO1xcbitcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogSGlnaGVyIG9yZGVyIGFsbG9jYXRpb25zIGZyb20gYnVkZHkgYWxsb2NhdG9yIG11c3QgYmUgYWJsZSB0b1xcbiBcXHRcXHQgKiBiZSB0cmVhdGVkIGFzIGluZGVwZW5kZW50IHNtYWxsIHBhZ2VzIChhcyB0aGV5IGNhbiBiZSBmcmVlZFxcbkBAIC04MywxNyArOTMsMTcgQEAgc3RhdGljIGludCB2bWVtbWFwX3NwbGl0X3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgcGFnZSAqaGVhZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gXFx0XFx0aWYgKCFQYWdlUmVzZXJ2ZWQoaGVhZCkpXFxuIFxcdFxcdFxcdHNwbGl0X3BhZ2UoaGVhZCwgZ2V0X29yZGVyKFBNRF9TSVpFKSk7XFxuIFxcbi1cXHRcXHQvKiBNYWtlIHB0ZSB2aXNpYmxlIGJlZm9yZSBwbWQuIFNlZSBjb21tZW50IGluIHBtZF9pbnN0YWxsKCkuICovXFxuLVxcdFxcdHNtcF93bWIoKTtcXG4tXFx0XFx0cG1kX3BvcHVsYXRlX2tlcm5lbChcXHUwMDI2aW5pdF9tbSwgcG1kLCBwZ3RhYmxlKTtcXG4gXFx0XFx0aWYgKCEod2Fsay1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTUVNTUFQX1NQTElUX05PX1RMQl9GTFVTSCkpXFxuIFxcdFxcdFxcdGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIHN0YXJ0ICsgUE1EX1NJWkUpO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRwdGVfZnJlZV9rZXJuZWwoXFx1MDAyNmluaXRfbW0sIHBndGFibGUpO1xcbi1cXHR9XFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbml0X21tLnBhZ2VfdGFibGVfbG9jayk7XFxuK1xcdH0gZWxzZVxcbitcXHRcXHRnb3RvIGZyZWU7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rb3V0OlxcbitcXHRzcGluX3VubG9jayhcXHUwMDI2aW5pdF9tbS5wYWdlX3RhYmxlX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbitmcmVlOlxcbitcXHRwdGVfZnJlZV9rZXJuZWwoXFx1MDAyNmluaXRfbW0sIHBndGFibGUpO1xcbitcXHRnb3RvIG91dDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB2bWVtbWFwX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuQEAgLTE0MSwxMSArMTUxLDEzIEBAIHN0YXRpYyBpbnQgdm1lbW1hcF9wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuIHtcXG4gXFx0c3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqdm1lbW1hcF93YWxrID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG4rXFx0aW50IHJldCA9IDA7XFxuIFxcbi1cXHR2bWVtbWFwX3dhbGstXFx1MDAzZXJlbWFwX3B0ZShwdGUsIGFkZHIsIHZtZW1tYXBfd2Fsayk7XFxuLVxcdHZtZW1tYXBfd2Fsay1cXHUwMDNlbnJfd2Fsa2VkKys7XFxuK1xcdHJldCA9IHZtZW1tYXBfd2Fsay1cXHUwMDNlcmVtYXBfcHRlKHB0ZSwgYWRkciwgdm1lbW1hcF93YWxrKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHZtZW1tYXBfd2Fsay1cXHUwMDNlbnJfd2Fsa2VkKys7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyB2bWVtbWFwX3JlbWFwX29wcyA9IHtcXG5AQCAtMTY0LDEzICsxNzYsMTEgQEAgc3RhdGljIGludCB2bWVtbWFwX3JlbWFwX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRyZXQgPSB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlKHN0YXJ0LCBlbmQsIFxcdTAwMjZ2bWVtbWFwX3JlbWFwX29wcyxcXG4gXFx0XFx0XFx0XFx0ICAgIE5VTEwsIHdhbGspO1xcbiBcXHRtbWFwX3JlYWRfdW5sb2NrKFxcdTAwMjZpbml0X21tKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdGlmICh3YWxrLVxcdTAwM2VyZW1hcF9wdGUgXFx1MDAyNlxcdTAwMjYgISh3YWxrLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZNRU1NQVBfUkVNQVBfTk9fVExCX0ZMVVNIKSlcXG4gXFx0XFx0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKTtcXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0xOTksMTggKzIwOSwyMCBAQCBzdGF0aWMgdm9pZCBmcmVlX3ZtZW1tYXBfcGFnZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuIFxcdFxcdGZyZWVfdm1lbW1hcF9wYWdlKHBhZ2UpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB2bWVtbWFwX3JlbWFwX3B0ZShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLVxcdFxcdFxcdCAgICAgIHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspXFxuK3N0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9wdGUocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspXFxuIHtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwdGVfcGFnZShwdGVwX2dldChwdGUpKTtcXG4gXFx0cHRlX3QgZW50cnk7XFxuK1xcdGJvb2wgaGVhZDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGhlYWQgPSB3YWxrLVxcdTAwM2Vucl93YWxrZWQgPT0gMCBcXHUwMDI2XFx1MDAyNiB3YWxrLVxcdTAwM2V2bWVtbWFwX2hlYWQ7XFxuIFxcbiBcXHQvKiBSZW1hcHBpbmcgdGhlIGhlYWQgcGFnZSByZXF1aXJlcyByL3cgKi9cXG4tXFx0aWYgKHVubGlrZWx5KHdhbGstXFx1MDAzZW5yX3dhbGtlZCA9PSAwIFxcdTAwMjZcXHUwMDI2IHdhbGstXFx1MDAzZXZtZW1tYXBfaGVhZCkpIHtcXG4rXFx0aWYgKHVubGlrZWx5KGhlYWQpKSB7XFxuIFxcdFxcdFZNX1dBUk5fT05fT05DRSghUGFnZUhlYWQoKGNvbnN0IHN0cnVjdCBwYWdlICopYWRkcikpO1xcbiBcXG4tXFx0XFx0bGlzdF9kZWwoXFx1MDAyNndhbGstXFx1MDAzZXZtZW1tYXBfaGVhZC1cXHUwMDNlbHJ1KTtcXG4tXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIE1ha2VzIHN1cmUgdGhhdCBwcmVjZWRpbmcgc3RvcmVzIHRvIHRoZSBwYWdlIGNvbnRlbnRzIGZyb21cXG4gXFx0XFx0ICogdm1lbW1hcF9yZW1hcF9mcmVlKCkgYmVjb21lIHZpc2libGUgYmVmb3JlIHRoZSBzZXRfcHRlX2F0KClcXG5AQCAtMjI5LDM1ICsyNDEsNTYgQEAgc3RhdGljIHZvaWQgdm1lbW1hcF9yZW1hcF9wdGUocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRlbnRyeSA9IG1rX3B0ZSh3YWxrLVxcdTAwM2V2bWVtbWFwX3RhaWwsIFBBR0VfS0VSTkVMX1JPKTtcXG4gXFx0fVxcbiBcXG4rXFx0cmV0ID0gdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZShhZGRyLCBwdGUsIGVudHJ5KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIFdlIHN1Y2Nlc3NmdWxseSBvdmVyd3JvdGUgdGhlIHZtZW1tYXAgUFRFLCBzbyB3ZSBjYW4gZnJlZVxcbitcXHQgKiB0aGUgdm1lbW1hcCBwYWdlIHRoYXQgd2FzIGp1c3QgdW5tYXBwZWQsIGFuZCBpZiB3ZSBtYXBwZWRcXG4rXFx0ICogdGhlIG5ldyBoZWFkIHBhZ2UsIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0IHNvIHRoYXQgaXRcXG4rXFx0ICogZG9lc24ndCBnZXQgZnJlZWQgbGF0ZXIuXFxuK1xcdCAqL1xcbiBcXHRsaXN0X2FkZChcXHUwMDI2cGFnZS1cXHUwMDNlbHJ1LCB3YWxrLVxcdTAwM2V2bWVtbWFwX3BhZ2VzKTtcXG4tXFx0c2V0X3B0ZV9hdChcXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBlbnRyeSk7XFxuK1xcdGlmIChoZWFkKVxcbitcXHRcXHRsaXN0X2RlbChcXHUwMDI2d2Fsay1cXHUwMDNldm1lbW1hcF9oZWFkLVxcdTAwM2VscnUpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHZtZW1tYXBfcmVzdG9yZV9wdGUocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi1cXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrICp3YWxrKVxcbitzdGF0aWMgaW50IHZtZW1tYXBfcmVzdG9yZV9wdGUocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqd2FsaylcXG4ge1xcbiBcXHRzdHJ1Y3QgcGFnZSAqc3JjID0gcHRlX3BhZ2UocHRlcF9nZXQocHRlKSksICpkc3Q7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCF3YWxrLVxcdTAwM2V2bWVtbWFwX3RhaWwpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIFdoZW4gcm9sbGluZyBiYWNrIHZtZW1tYXBfcmVtYXBfZnJlZSgpLCBrZWVwIHRoZSBjb3BpZWQgaGVhZCBwYWdlXFxuK1xcdCAqIFdoZW4gcmVzdG9yaW5nIGEgcGFydGlhbGx5LUhWT2VkIHBhZ2UsIGtlZXAgdGhlIGNvcGllZCBoZWFkIHBhZ2VcXG4gXFx0ICogbWFwcGluZyBhbmQgcmVzdG9yZSBvbmx5IFBURXMgY3VycmVudGx5IHBvaW50aW5nIGF0IHRoZSBzaGFyZWQgdGFpbFxcbiBcXHQgKiBwYWdlLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHdhbGstXFx1MDAzZXZtZW1tYXBfdGFpbCBcXHUwMDI2XFx1MDAyNiB3YWxrLVxcdTAwM2V2bWVtbWFwX3RhaWwgIT0gc3JjKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdGlmICh3YWxrLVxcdTAwM2V2bWVtbWFwX3RhaWwgIT0gc3JjKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdFZNX1dBUk5fT05fT05DRShQYWdlSGVhZCgoY29uc3Qgc3RydWN0IHBhZ2UgKilhZGRyKSk7XFxuIFxcbiBcXHRkc3QgPSBsaXN0X2ZpcnN0X2VudHJ5KHdhbGstXFx1MDAzZXZtZW1tYXBfcGFnZXMsIHN0cnVjdCBwYWdlLCBscnUpO1xcbi1cXHRsaXN0X2RlbChcXHUwMDI2ZHN0LVxcdTAwM2VscnUpO1xcbiBcXHRjb3B5X3BhZ2UocGFnZV90b192aXJ0KGRzdCksIHBhZ2VfdG9fdmlydChzcmMpKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIE1ha2VzIHN1cmUgdGhhdCBwcmVjZWRpbmcgc3RvcmVzIHRvIHRoZSBwYWdlIGNvbnRlbnRzIGJlY29tZSB2aXNpYmxlXFxuLVxcdCAqIGJlZm9yZSB0aGUgc2V0X3B0ZV9hdCgpIHdyaXRlLlxcbitcXHQgKiBiZWZvcmUgdGhlIHRyeV91cGRhdGVfdm1lbW1hcF9wdGUoKSB3cml0ZS5cXG4gXFx0ICovXFxuIFxcdHNtcF93bWIoKTtcXG4tXFx0c2V0X3B0ZV9hdChcXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBta19wdGUoZHN0LCBQQUdFX0tFUk5FTCkpO1xcbitcXG4rXFx0cmV0ID0gdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZShhZGRyLCBwdGUsIG1rX3B0ZShkc3QsIFBBR0VfS0VSTkVMKSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRsaXN0X2RlbChcXHUwMDI2ZHN0LVxcdTAwM2VscnUpO1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTI3OSw2ICszMTIsNyBAQCBzdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfc3BsaXQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuIFxcdHJldHVybiB2bWVtbWFwX3JlbWFwX3JhbmdlKHN0YXJ0LCBlbmQsIFxcdTAwMjZ3YWxrKTtcXG4gfVxcbiBcXG4rc3RhdGljIGNvbnN0IGludCBWTUVNTUFQX1JFTUFQX0lOQ09NUExFVEUgPSAxO1xcbiAvKipcXG4gICogdm1lbW1hcF9yZW1hcF9mcmVlIC0gcmVtYXAgdGhlIHZtZW1tYXAgdmlydHVhbCBhZGRyZXNzIHJhbmdlIFtAc3RhcnQsIEBlbmQpXFxuICAqXFx0XFx0XFx0dG8gdXNlIEB2bWVtbWFwX2hlYWQvdGFpbCwgdGhlbiBmcmVlIHZtZW1tYXAgd2hpY2hcXG5AQCAtMjkzLDcgKzMyNyw4IEBAIHN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9zcGxpdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4gICpcXHRcXHRyZXNwb25zaWJpbGl0eSB0byBmcmVlIHBhZ2VzLlxcbiAgKiBAZmxhZ3M6XFx0bW9kaWZpY2F0aW9ucyB0byB2bWVtbWFwX3JlbWFwX3dhbGsgZmxhZ3NcXG4gICpcXG4tICogUmV0dXJuOiAlMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cXG4rICogUmV0dXJuOiAlMCBvbiBzdWNjZXNzLCBWTUVNTUFQX1JFTUFQX0lOQ09NUExFVEUgaWYgdGhlIHBhZ2UgaXMgaW5jb21wbGV0ZWx5XFxuKyAqICAgICAgICAgb3B0aW1pemVkLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cXG4gICovXFxuIHN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9mcmVlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGFnZSAqdm1lbW1hcF9oZWFkLFxcbkBAIC0zMjgsNyArMzYzLDggQEAgc3RhdGljIGludCB2bWVtbWFwX3JlbWFwX2ZyZWUodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdFxcdC5mbGFnc1xcdFxcdD0gMCxcXG4gXFx0fTtcXG4gXFxuLVxcdHZtZW1tYXBfcmVtYXBfcmFuZ2Uoc3RhcnQsIGVuZCwgXFx1MDAyNndhbGspO1xcbitcXHRpZiAodm1lbW1hcF9yZW1hcF9yYW5nZShzdGFydCwgZW5kLCBcXHUwMDI2d2FsaykpXFxuK1xcdFxcdHJldHVybiBWTUVNTUFQX1JFTUFQX0lOQ09NUExFVEU7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTM1NywxMCArMzkzLDM4IEBAIHN0YXRpYyBpbnQgYWxsb2Nfdm1lbW1hcF9wYWdlX2xpc3QodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdHJldHVybiAtRU5PTUVNO1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IHBhZ2UgKnZtZW1tYXBfZ2V0X3RhaWwodW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgem9uZSAqem9uZSlcXG4re1xcbitcXHRjb25zdCB1bnNpZ25lZCBpbnQgaWR4ID0gb3JkZXIgLSBWTUVNTUFQX1RBSUxfTUlOX09SREVSO1xcbitcXHRzdHJ1Y3QgcGFnZSAqdGFpbCwgKnA7XFxuK1xcdGludCBub2RlID0gem9uZV90b19uaWQoem9uZSk7XFxuK1xcbitcXHR0YWlsID0gUkVBRF9PTkNFKHpvbmUtXFx1MDAzZXZtZW1tYXBfdGFpbHNbaWR4XSk7XFxuK1xcdGlmIChsaWtlbHkodGFpbCkpXFxuK1xcdFxcdHJldHVybiB0YWlsO1xcbitcXG4rXFx0dGFpbCA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIDApO1xcbitcXHRpZiAoIXRhaWwpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cCA9IHBhZ2VfdG9fdmlydCh0YWlsKTtcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IHBhZ2UpOyBpKyspXFxuK1xcdFxcdGluaXRfY29tcG91bmRfdGFpbChwICsgaSwgTlVMTCwgb3JkZXIsIHpvbmUpO1xcbitcXG4rXFx0aWYgKGNtcHhjaGcoXFx1MDAyNnpvbmUtXFx1MDAzZXZtZW1tYXBfdGFpbHNbaWR4XSwgTlVMTCwgdGFpbCkpIHtcXG4rXFx0XFx0X19mcmVlX3BhZ2UodGFpbCk7XFxuK1xcdFxcdHRhaWwgPSBSRUFEX09OQ0Uoem9uZS1cXHUwMDNldm1lbW1hcF90YWlsc1tpZHhdKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHRhaWw7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB2bWVtbWFwX3JlbWFwX2FsbG9jIC0gcmVtYXAgdGhlIHZtZW1tYXAgdmlydHVhbCBhZGRyZXNzIHJhbmdlIFtAc3RhcnQsIGVuZClcXG4gICpcXHRcXHRcXHQgdG8gdGhlIHBhZ2Ugd2hpY2ggaXMgZnJvbSB0aGUgQHZtZW1tYXBfcGFnZXNcXG4gICpcXHRcXHRcXHQgcmVzcGVjdGl2ZWx5LlxcbisgKiBAaDpcXHRcXHR0aGUgaHN0YXRlIGZvciB0aGUgZm9saW8gd2hvc2Ugdm1lbW1hcCBpcyBnZXR0aW5nIHJlbWFwcGVkXFxuKyAqIEBmb2xpbzpcXHR0aGUgZm9saW8gd2hvc2Ugdm1lbW1hcCBpcyBnZXR0aW5nIHJlbWFwcGVkXFxuICAqIEBzdGFydDpcXHRzdGFydCBhZGRyZXNzIG9mIHRoZSB2bWVtbWFwIHZpcnR1YWwgYWRkcmVzcyByYW5nZSB0aGF0IHdlIHdhbnRcXG4gICpcXHRcXHR0byByZW1hcC5cXG4gICogQGVuZDpcXHRlbmQgYWRkcmVzcyBvZiB0aGUgdm1lbW1hcCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UgdGhhdCB3ZSB3YW50IHRvXFxuQEAgLTM2OSwyMCArNDMzLDY4IEBAIHN0YXRpYyBpbnQgYWxsb2Nfdm1lbW1hcF9wYWdlX2xpc3QodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuICAqXFxuICAqIFJldHVybjogJTAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXFxuICAqL1xcbi1zdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfYWxsb2ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuK3N0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9hbGxvYyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbiB7XFxuIFxcdExJU1RfSEVBRCh2bWVtbWFwX3BhZ2VzKTtcXG4tXFx0c3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayB3YWxrID0ge1xcbitcXHRzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrIHdhbGs7XFxuK1xcdHN0cnVjdCBwYWdlICp2bWVtbWFwX3RhaWw7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHR2bWVtbWFwX3RhaWwgPSB2bWVtbWFwX2dldF90YWlsKGgtXFx1MDAzZW9yZGVyLCBmb2xpb196b25lKGZvbGlvKSk7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIXZtZW1tYXBfdGFpbCkpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0aWYgKGFsbG9jX3ZtZW1tYXBfcGFnZV9saXN0KHN0YXJ0LCBlbmQsIFxcdTAwMjZ2bWVtbWFwX3BhZ2VzKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHR3YWxrID0gKHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGspIHtcXG4gXFx0XFx0LnJlbWFwX3B0ZVxcdD0gdm1lbW1hcF9yZXN0b3JlX3B0ZSxcXG4rXFx0XFx0LnZtZW1tYXBfdGFpbFxcdD0gdm1lbW1hcF90YWlsLFxcbiBcXHRcXHQudm1lbW1hcF9wYWdlc1xcdD0gXFx1MDAyNnZtZW1tYXBfcGFnZXMsXFxuIFxcdFxcdC5mbGFnc1xcdFxcdD0gZmxhZ3MsXFxuIFxcdH07XFxuIFxcbi1cXHRpZiAoYWxsb2Nfdm1lbW1hcF9wYWdlX2xpc3Qoc3RhcnQsIGVuZCwgXFx1MDAyNnZtZW1tYXBfcGFnZXMpKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0cmV0ID0gdm1lbW1hcF9yZW1hcF9yYW5nZShzdGFydCwgZW5kLCBcXHUwMDI2d2Fsayk7XFxuIFxcbi1cXHRyZXR1cm4gdm1lbW1hcF9yZW1hcF9yYW5nZShzdGFydCwgZW5kLCBcXHUwMDI2d2Fsayk7XFxuK1xcdC8qIE5vdCBhbGwgcGFnZXMgbWF5IGhhdmUgYmVlbiBjb25zdW1lZCAqL1xcbitcXHRmcmVlX3ZtZW1tYXBfcGFnZV9saXN0KFxcdTAwMjZ2bWVtbWFwX3BhZ2VzKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK2VudW0gaHVnZXRsYl9odm9fc3RhdHVzIHtcXG4rXFx0SFZPX0lOQUNUSVZFID0gMCxcXG4rXFx0SFZPX0FDVElWRSxcXG4rXFx0SFZPX1BFUk1BTkVOVExZX0lOQUNUSVZFLFxcbit9O1xcbitzdGF0aWMgZW51bSBodWdldGxiX2h2b19zdGF0dXMgaHZvX3N0YXR1cyA9IEhWT19JTkFDVElWRTtcXG4rXFxuK3N0YXRpYyBib29sIGh1Z2V0bGJfaHZvX3N0YXR1c190cnlfc2V0KGVudW0gaHVnZXRsYl9odm9fc3RhdHVzIHN0YXR1cylcXG4re1xcbitcXHRlbnVtIGh1Z2V0bGJfaHZvX3N0YXR1cyBvbGQ7XFxuK1xcbitcXHRvbGQgPSBSRUFEX09OQ0UoaHZvX3N0YXR1cyk7XFxuK1xcbityZXRyeTpcXG4rXFx0LyogVGhlIGN1cnJlbnQgc2V0dGluZyBpcyB3aGF0IHdlIHdhbnQuICovXFxuK1xcdGlmIChvbGQgPT0gc3RhdHVzKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdC8qIFRoZSBjdXJyZW50IHNldHRpbmcgY2Fubm90IGJlIGNoYW5nZWQuICovXFxuK1xcdGlmIChvbGQgIT0gSFZPX0lOQUNUSVZFKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoIXRyeV9jbXB4Y2hnX3JlbGF4ZWQoXFx1MDAyNmh2b19zdGF0dXMsIFxcdTAwMjZvbGQsIHN0YXR1cykpXFxuK1xcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rYm9vbCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGh1Z2V0bGJfaHZvX3N0YXR1c190cnlfc2V0KEhWT19QRVJNQU5FTlRMWV9JTkFDVElWRSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIHZtZW1tYXBfb3B0aW1pemVfZW5hYmxlZCA9IElTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT04pO1xcbkBAIC00MTUsNyArNTI3LDcgQEAgc3RhdGljIGludCBfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsXFxuIFxcdCAqIFdoZW4gYSBIdWdlVExCIHBhZ2UgaXMgZnJlZWQgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgcHJldmlvdXNseVxcbiBcXHQgKiBkaXNjYXJkZWQgdm1lbW1hcCBwYWdlcyBtdXN0IGJlIGFsbG9jYXRlZCBhbmQgcmVtYXBwaW5nLlxcbiBcXHQgKi9cXG4tXFx0cmV0ID0gdm1lbW1hcF9yZW1hcF9hbGxvYyh2bWVtbWFwX3N0YXJ0LCB2bWVtbWFwX2VuZCwgZmxhZ3MpO1xcbitcXHRyZXQgPSB2bWVtbWFwX3JlbWFwX2FsbG9jKGgsIGZvbGlvLCB2bWVtbWFwX3N0YXJ0LCB2bWVtbWFwX2VuZCwgZmxhZ3MpO1xcbiBcXHRpZiAoIXJldClcXG4gXFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbyk7XFxuIFxcbkBAIC00ODcsMzYgKzU5OSwxNiBAQCBzdGF0aWMgYm9vbCB2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9mb2xpbyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKlxcbiBcXHRpZiAoIVJFQURfT05DRSh2bWVtbWFwX29wdGltaXplX2VuYWJsZWQpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRpZiAoIWh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YWJsZShoKSlcXG4rXFx0aWYgKCFhcmNoX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fc3VwcG9ydGVkKCkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdHJldHVybiB0cnVlO1xcbi19XFxuLVxcbi1zdGF0aWMgc3RydWN0IHBhZ2UgKnZtZW1tYXBfZ2V0X3RhaWwodW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgem9uZSAqem9uZSlcXG4te1xcbi1cXHRjb25zdCB1bnNpZ25lZCBpbnQgaWR4ID0gb3JkZXIgLSBWTUVNTUFQX1RBSUxfTUlOX09SREVSO1xcbi1cXHRzdHJ1Y3QgcGFnZSAqdGFpbCwgKnA7XFxuLVxcdGludCBub2RlID0gem9uZV90b19uaWQoem9uZSk7XFxuLVxcbi1cXHR0YWlsID0gUkVBRF9PTkNFKHpvbmUtXFx1MDAzZXZtZW1tYXBfdGFpbHNbaWR4XSk7XFxuLVxcdGlmIChsaWtlbHkodGFpbCkpXFxuLVxcdFxcdHJldHVybiB0YWlsO1xcbi1cXG4tXFx0dGFpbCA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIDApO1xcbi1cXHRpZiAoIXRhaWwpXFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbi1cXG4tXFx0cCA9IHBhZ2VfdG9fdmlydCh0YWlsKTtcXG4tXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IHBhZ2UpOyBpKyspXFxuLVxcdFxcdGluaXRfY29tcG91bmRfdGFpbChwICsgaSwgTlVMTCwgb3JkZXIsIHpvbmUpO1xcbitcXHRpZiAoIWh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YWJsZShoKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0aWYgKGNtcHhjaGcoXFx1MDAyNnpvbmUtXFx1MDAzZXZtZW1tYXBfdGFpbHNbaWR4XSwgTlVMTCwgdGFpbCkpIHtcXG4tXFx0XFx0X19mcmVlX3BhZ2UodGFpbCk7XFxuLVxcdFxcdHRhaWwgPSBSRUFEX09OQ0Uoem9uZS1cXHUwMDNldm1lbW1hcF90YWlsc1tpZHhdKTtcXG4tXFx0fVxcbitcXHRpZiAoIWh1Z2V0bGJfaHZvX3N0YXR1c190cnlfc2V0KEhWT19BQ1RJVkUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRyZXR1cm4gdGFpbDtcXG4rXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCxcXG5AQCAtNTc0LDcgKzY2NiwxMSBAQCBzdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsXFxuIFxcdFxcdFxcdFxcdCB2bWVtbWFwX2hlYWQsIHZtZW1tYXBfdGFpbCxcXG4gXFx0XFx0XFx0XFx0IHZtZW1tYXBfcGFnZXMsIGZsYWdzKTtcXG4gb3V0Olxcbi1cXHRpZiAocmV0KVxcbitcXHQvKlxcbitcXHQgKiBJZiByZXQgPT0gVk1FTU1BUF9SRU1BUF9JTkNPTVBMRVRFLCB0aGUgZm9saW8gbWlnaHQgYmUgcGFydGlhbGx5XFxuK1xcdCAqIEhWT2VkLiBMZWF2ZSB0aGUgSFZPIHBhZ2UgZm9saW8gZmxhZyBpbiBwbGFjZS5cXG4rXFx0ICovXFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTcxNyw2ICs4MTMsMTQgQEAgc3RhdGljIGJvb2wgdm1lbW1hcF9zaG91bGRfb3B0aW1pemVfYm9vdG1lbV9wYWdlKHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqbSlcXG4gXFx0aWYgKCFSRUFEX09OQ0Uodm1lbW1hcF9vcHRpbWl6ZV9lbmFibGVkKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogQXJjaGl0ZWN0dXJlcyBtYXkgcmV0dXJuIGZhbHNlIGhlcmUgYnV0IHRydWUgYnkgdGhlIHRpbWVcXG4rXFx0ICogaHVnZXRsYl9pbml0KCkgaXMgY2FsbGVkLiBJbiB0aGlzIGNhc2UsIGFsdGhvdWdoIHRoZSBmb2xpb3Mgd2lsbFxcbitcXHQgKiBub3QgYmUgcHJlLUhWT2VkLCB0aGV5IHdpbGwgYmUgb3B0aW1pemVkIGluIGh1Z2V0bGJfaW5pdCgpLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFhcmNoX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fc3VwcG9ydGVkKCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuIFxcdGlmICghaHVnZXRsYl92bWVtbWFwX29wdGltaXphYmxlKG0tXFx1MDAzZWhzdGF0ZSkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuQEAgLTc0Miw2ICs4NDYsOSBAQCBzdGF0aWMgYm9vbCB2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9ib290bWVtX3BhZ2Uoc3RydWN0IGh1Z2VfYm9vdG1lbV9wYWdlICptKVxcbiBcXHQgICAgIUlTX0FMSUdORUQocHNpemUsIHBtZF92bWVtbWFwX3NpemUpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbitcXHRpZiAoIWh1Z2V0bGJfaHZvX3N0YXR1c190cnlfc2V0KEhWT19BQ1RJVkUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl92bWVtbWFwLmggYi9tbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaFxcbnNpbWlsYXJpdHkgaW5kZXggOTUlXFxucmVuYW1lIGZyb20gbW0vaHVnZXRsYl92bWVtbWFwLmhcXG5yZW5hbWUgdG8gbW0vaHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmhcXG5pbmRleCAxOGI0OTA4MjUyMTUzZC4uNmIyODc4MDAxNGJjMTggMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZXRsYl92bWVtbWFwLmhcXG4rKysgYi9tbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaFxcbkBAIC02LDggKzYsOCBAQFxcbiAgKlxcbiAgKiAgICAgQXV0aG9yOiBNdWNodW4gU29uZyBcXHUwMDNjc29uZ211Y2h1bkBieXRlZGFuY2UuY29tXFx1MDAzZVxcbiAgKi9cXG4tI2lmbmRlZiBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0hcXG4tI2RlZmluZSBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0hcXG4rI2lmbmRlZiBfTU1fSFVHRVRMQl9WTUVNTUFQX0lOVEVSTkFMX0hcXG4rI2RlZmluZSBfTU1fSFVHRVRMQl9WTUVNTUFQX0lOVEVSTkFMX0hcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h1Z2V0bGIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1ibG9jay5oXFx1MDAzZVxcbkBAIC05NSw0ICs5NSw0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemFibGUoY29uc3Qgc3RydWN0IGhzdGF0ZSAqaClcXG4ge1xcbiBcXHRyZXR1cm4gaHVnZXRsYl92bWVtbWFwX29wdGltaXphYmxlX3NpemUoaCkgIT0gMDtcXG4gfVxcbi0jZW5kaWYgLyogX0xJTlVYX0hVR0VUTEJfVk1FTU1BUF9IICovXFxuKyNlbmRpZiAvKiBfTU1fSFVHRVRMQl9WTUVNTUFQX0lOVEVSTkFMX0ggKi9cXG5kaWZmIC0tZ2l0IGEvbW0vc3BhcnNlLXZtZW1tYXAuYyBiL21tL3NwYXJzZS12bWVtbWFwLmNcXG5pbmRleCA5OWUyYmUzOTY3MWI2My4uOTRkNWRhOWY4YWI3YzEgMTAwNjQ0XFxuLS0tIGEvbW0vc3BhcnNlLXZtZW1tYXAuY1xcbisrKyBiL21tL3NwYXJzZS12bWVtbWFwLmNcXG5AQCAtMzIsNyArMzIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2RtYS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3RsYmZsdXNoLmhcXHUwMDNlXFxuIFxcbi0jaW5jbHVkZSBcXFwiaHVnZXRsYl92bWVtbWFwLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJodWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaFxcXCJcXG4gXFxuIC8qXFxuICAqIEZsYWdzIGZvciB2bWVtbWFwX3BvcHVsYXRlX3JhbmdlIGFuZCBmcmllbmRzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNToxMjoyNC43MzUyMTU2ODVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMDIzOTkwNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXCIsXG4gICAgXCJIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1lbW1hcF9zcGxpdF9wbWRcIixcbiAgICBcInZtZW1tYXBfcmVtYXBfcHRlXCIsXG4gICAgXCJ2bWVtbWFwX3Jlc3RvcmVfcHRlXCIsXG4gICAgXCJ2bWVtbWFwX3JlbWFwX2ZyZWVcIixcbiAgICBcInZtZW1tYXBfcmVtYXBfYWxsb2NcIixcbiAgICBcImh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGVcIixcbiAgICBcIl9faHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW9cIixcbiAgICBcIl9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvXCIsXG4gICAgXCJ2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9mb2xpb1wiLFxuICAgIFwidm1lbW1hcF9zaG91bGRfb3B0aW1pemVfYm9vdG1lbV9wYWdlXCIsXG4gICAgXCJsYXRlX2NwdV9lbmFibGVfaHZvXCIsXG4gICAgXCJodm9fY29tcGF0aWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgQVJNNjQgc3VwcG9ydCBmb3IgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKS4gSXQgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgaW4gYG1tL2h1Z2V0bGJfdm1lbW1hcC5jYCB0byB1c2UgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgcG9wdWxhdGluZyBhbmQgdXBkYXRpbmcgdm1lbW1hcCBQTURzIGFuZCBQVEVzLiBJdCBhbHNvIGFkZHMgQ1BVIGNhcGFiaWxpdHkgY2hlY2tzIGZvciBIVk8gb24gQVJNNjQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gYWxsb2NhdGluZyBhbmQgZnJlZWluZyBIdWdlVExCIHBhZ2VzIHdpdGggSFZPIGVuYWJsZWQsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRkZjIzMDU0NjJlYjhmYWI5YWJjYjVmMTJiOTdiMWY5NzBjYmE1OTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDE1OjEyOjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggZjM3YTgxOTUwZTI1MGUuLjU1YmQ0YzA5ZjQ5NDk2IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMTIwMTMsNiArMTIwMTMsNyBAQCBGOlx0RG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuIEY6XHREb2N1bWVudGF0aW9uL21tL3ZtZW1tYXBfZGVkdXAucnN0XG4gRjpcdGZzL2h1Z2V0bGJmcy9cbiBGOlx0aW5jbHVkZS9saW51eC9odWdldGxiLmhcbitGOlx0aW5jbHVkZS9saW51eC9odWdldGxiX3ZtZW1tYXAuaFxuIEY6XHRpbmNsdWRlL3RyYWNlL2V2ZW50cy9odWdldGxiZnMuaFxuIEY6XHRtbS9odWdldGxiLmNcbiBGOlx0bW0vaHVnZXRsYl9jZ3JvdXAuY1xuQEAgLTEyMDIxLDcgKzEyMDIyLDcgQEAgRjpcdG1tL2h1Z2V0bGJfY21hLmhcbiBGOlx0bW0vaHVnZXRsYl9zeXNjdGwuY1xuIEY6XHRtbS9odWdldGxiX3N5c2ZzLmNcbiBGOlx0bW0vaHVnZXRsYl92bWVtbWFwLmNcbi1GOlx0bW0vaHVnZXRsYl92bWVtbWFwLmhcbitGOlx0bW0vaHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmhcbiBGOlx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfaHVnZXRsYl9tZW1jZy5jXG4gXG4gSFZBIFNUIE1FRElBIERSSVZFUlxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuaW5kZXggYjNhZmUwNjg4OTE5YmQuLjJhNTkxNTVmNjhkY2Q4IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXG4rKysgYi9hcmNoL2FybTY0L0tjb25maWdcbkBAIC0yNTksNiArMjU5LDcgQEAgY29uZmlnIEFSTTY0XG4gXHRzZWxlY3QgVVNFUl9TVEFDS1RSQUNFX1NVUFBPUlRcbiBcdHNlbGVjdCBWRFNPX0dFVFJBTkRPTVxuIFx0c2VsZWN0IFZNQVBfU1RBQ0tcbitcdHNlbGVjdCBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQIGlmIEFSTTY0X0hXX0FGREJNXG4gXHRoZWxwXG4gXHQgIEFSTSA2NC1iaXQgKEFBcmNoNjQpIExpbnV4IHN1cHBvcnQuXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVjYXBzLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaFxuaW5kZXggMjVjNjFjZGE5MDFjNWQuLjZkYjNlZjgyN2Y4NmE5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVjYXBzLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1Y2Fwcy5oXG5AQCAtNzUsNiArNzUsOCBAQCBjcHVjYXBfaXNfcG9zc2libGUoY29uc3QgdW5zaWduZWQgaW50IGNhcClcbiBcdFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0hXX1BFUkZfRVZFTlRTKTtcbiBcdGNhc2UgQVJNNjRfSEFTX0xTVUk6XG4gXHRcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19BUk02NF9MU1VJKTtcbitcdGNhc2UgQVJNNjRfSFZPX0NPTVBBVElCTEU6XG4rXHRcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oXG5pbmRleCBhNTc4NzBmYTk2ZGI1Yi4uZDE1MDQ4MDRmMmJlYTkgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcbkBAIC0zNjcsNiArMzY3LDE0IEBAIHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIHtcbiBcdCAqIHJvdXRpbmUgbXVzdCBjaGVjayBpdCBiZWZvcmUgdGFraW5nIGFueSBhY3Rpb24uXG4gXHQgKi9cbiBcdHZvaWQgKCpjcHVfZW5hYmxlKShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwKTtcbitcdC8qXG4rXHQgKiBJbiByYXJlIGNhc2VzLCBjYXBhYmlsaXRpZXMgYXJlICpzb21ldGltZXMqIG9wdGlvbmFsIGZvciBsYXRlIENQVXMuXG4rXHQgKiBUaGlzIGNhbGxiYWNrIGFsbG93cyBhIGNhcGFiaWxpdHkgdG8gcHJldmVudCBvbmxpbmluZyBvZlxuK1x0ICogaW5jb21wYXRpYmxlIENQVXMgd2hlbiB0aGUgY2FwYWJpbGl0eSBpcyBpbiBmYWN0IHJlcXVpcmVkLlxuK1x0ICpcbitcdCAqIFJldHVybnMgdHJ1ZSBpZmYgb25saW5pbmcgdGhlIENQVSBpcyBwZXJtaXR0ZWQuXG4rXHQgKi9cbitcdGJvb2wgKCpsYXRlX2NwdV9lbmFibGUpKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXApO1xuIFx0dW5pb24ge1xuIFx0XHRzdHJ1Y3Qge1x0LyogVG8gYmUgdXNlZCBmb3IgZXJyYXR1bSBoYW5kbGluZyBvbmx5ICovXG4gXHRcdFx0c3RydWN0IG1pZHJfcmFuZ2UgbWlkcl9yYW5nZTtcbkBAIC04ODUsNiArODkzLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCh2b2lkKVxuIFx0cmV0dXJuIGFsdGVybmF0aXZlX2hhc19jYXBfdW5saWtlbHkoQVJNNjRfSEFTX0JCTUwyX05PQUJPUlQpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgc3lzdGVtX3N1cHBvcnRzX2h2byh2b2lkKVxuK3tcbitcdHJldHVybiBhbHRlcm5hdGl2ZV9oYXNfY2FwX3VubGlrZWx5KEFSTTY0X0hWT19DT01QQVRJQkxFKTtcbit9XG4rXG4gaW50IGRvX2VtdWxhdGVfbXJzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1MzIgc3lzX3JlZywgdTMyIHJ0KTtcbiBib29sIHRyeV9lbXVsYXRlX21ycyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTMyIGlzbik7XG4gXG5AQCAtOTEwLDIyICs5MjMsMzYgQEAgc3RhdGljIGlubGluZSB1MzIgaWRfYWE2NG1tZnIwX3BhcmFuZ2VfdG9fcGh5c19zaGlmdChpbnQgcGFyYW5nZSlcbiB9XG4gXG4gLyogQ2hlY2sgd2hldGhlciBoYXJkd2FyZSB1cGRhdGUgb2YgdGhlIEFjY2VzcyBmbGFnIGlzIHN1cHBvcnRlZCAqL1xuLXN0YXRpYyBpbmxpbmUgYm9vbCBjcHVfaGFzX2h3X2FmKHZvaWQpXG4rc3RhdGljIGlubGluZSBib29sIHN1cHBvcnRzX2h3X2FmKGludCBzY29wZSlcbiB7XG4gXHR1NjQgbW1mcjE7XG4gXG4gXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FSTTY0X0hXX0FGREJNKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0Lypcbi1cdCAqIFVzZSBjYWNoZWQgdmVyc2lvbiB0byBhdm9pZCBlbXVsYXRlZCBtc3Igb3BlcmF0aW9uIG9uIEtWTVxuLVx0ICogZ3Vlc3RzLlxuLVx0ICovXG4tXHRtbWZyMSA9IHJlYWRfc2FuaXRpc2VkX2Z0cl9yZWcoU1lTX0lEX0FBNjRNTUZSMV9FTDEpO1xuK1x0aWYgKHNjb3BlID09IFNDT1BFX1NZU1RFTSkge1xuK1x0XHQvKlxuK1x0XHQgKiBVc2UgY2FjaGVkIHZlcnNpb24gdG8gYXZvaWQgZW11bGF0ZWQgbXNyIG9wZXJhdGlvbiBvbiBLVk1cbitcdFx0ICogZ3Vlc3RzLlxuK1x0XHQgKi9cbitcdFx0bW1mcjEgPSByZWFkX3Nhbml0aXNlZF9mdHJfcmVnKFNZU19JRF9BQTY0TU1GUjFfRUwxKTtcbitcdH0gZWxzZSB7XG4rXHRcdG1tZnIxID0gcmVhZF9jcHVpZChJRF9BQTY0TU1GUjFfRUwxKTtcbitcdH1cbiBcdHJldHVybiBjcHVpZF9mZWF0dXJlX2V4dHJhY3RfdW5zaWduZWRfZmllbGQobW1mcjEsXG4gXHRcdFx0XHRcdFx0SURfQUE2NE1NRlIxX0VMMV9IQUZEQlNfU0hJRlQpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgc3lzdGVtX2hhc19od19hZih2b2lkKVxuK3tcbitcdHJldHVybiBzdXBwb3J0c19od19hZihTQ09QRV9TWVNURU0pO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgY3B1X2hhc19od19hZih2b2lkKVxuK3tcbitcdHJldHVybiBzdXBwb3J0c19od19hZihTQ09QRV9MT0NBTF9DUFUpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGJvb2wgY3B1X2hhc19wYW4odm9pZClcbiB7XG4gXHR1NjQgbW1mcjEgPSByZWFkX2NwdWlkKElEX0FBNjRNTUZSMV9FTDEpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmhcbmluZGV4IGQwMzhmZjE0ZDE2Y2FlLi43M2FmNzkxMWZkODMxMyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaFxuQEAgLTExLDYgKzExLDcgQEBcbiAjZGVmaW5lIF9fQVNNX0hVR0VUTEJfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9jYWNoZWZsdXNoLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vY3B1ZmVhdHVyZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL210ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuIFxuQEAgLTY1LDYgKzY2LDEyIEBAIGV4dGVybiB2b2lkIGh1Z2VfcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuIFx0XHRcdFx0XHQgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgbmV3X3B0ZSk7XG4gXG4rI2RlZmluZSBfX0hBVkVfQVJDSF9IVk9fU1VQUE9SVEVEXG4rc3RhdGljIGlubGluZSBib29sIGFyY2hfaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl9zdXBwb3J0ZWQodm9pZClcbit7XG4rXHRyZXR1cm4gc3lzdGVtX3N1cHBvcnRzX2h2bygpO1xuK31cbitcbiAjaW5jbHVkZSBcdTAwM2Nhc20tZ2VuZXJpYy9odWdldGxiLmhcdTAwM2VcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF9odWdldGxiX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5pbmRleCAxYjQ1MDlkMzM4MmM2My4uMjZiMDVmOGI3MGNkMmUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbkBAIC0xMjEsNCArMTIxLDU4IEBAIHBtZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZHAsIHBndGFibGVfdCBwdGVwKVxuIFx0XHQgICAgICAgUE1EX1RZUEVfVEFCTEUgfCBQTURfVEFCTEVfQUYgfCBQTURfVEFCTEVfUFhOKTtcbiB9XG4gXG4rI2RlZmluZSBfX0hBVkVfQVJDSF9UUllfUE9QVUxBVEVfVk1FTU1BUF9QTURcbitzdGF0aWMgaW5saW5lIGludCB0cnlfcG9wdWxhdGVfdm1lbW1hcF9wbWQocG1kX3QgKnBtZHAsIHB0ZV90ICpwZ3RhYmxlLFxuK1x0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFkZHIpXG4re1xuK1x0Y29uc3QgaW50IG1heF9hdHRlbXB0cyA9IDE2O1xuK1x0aW50IGF0dGVtcHRzID0gMDtcbitcdHBtZF90IG9sZF9wbWQsIG5ld19wbWQ7XG4rXG4rXHRpZiAoIXN5c3RlbV9zdXBwb3J0c19odm8oKSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0aWYgKHN5c3RlbV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KCkpIHtcbitcdFx0LypcbitcdFx0ICogQkJNTDJfTk9BQk9SVCBhbGxvd3MgYmxvY2stXHUwMDNldGFibGUgdHJhbnNpdGlvbnMgaWYgdGhlIFBURXNcbitcdFx0ICogdW5kZXJuZWF0aCBkbyBub3QgY29uZmxpY3Qgd2l0aCBleGlzdGluZywgcG90ZW50aWFsbHkgY2FjaGVkXG4rXHRcdCAqIHRyYW5zbGF0aW9ucy5cbitcdFx0ICovXG4rXHRcdHBtZF9wb3B1bGF0ZV9rZXJuZWwoXHUwMDI2aW5pdF9tbSwgcG1kcCwgcGd0YWJsZSk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0bmV3X3BtZCA9IF9fcG1kKF9fcGh5c190b19wbWRfdmFsKF9fcGEocGd0YWJsZSkpIHxcbitcdFx0XHRQTURfVFlQRV9UQUJMRSB8IFBNRF9UQUJMRV9BRiB8IFBNRF9UQUJMRV9VWE4pO1xuK1xuK1x0b2xkX3BtZCA9IHBtZHBfZ2V0KHBtZHApO1xuK1xuK1x0ZG8ge1xuK1x0XHRpZiAoV0FSTl9PTl9PTkNFKCFwbWRfdmFsaWQob2xkX3BtZCkpKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRpZiAoV0FSTl9PTl9PTkNFKCFwbWRfbGVhZihvbGRfcG1kKSkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdC8qIFdlIHNob3VsZCBuZXZlciBnZXQgYSBjb250aWd1b3VzIFBNRCBoZXJlLiAqL1xuK1x0XHRpZiAoV0FSTl9PTl9PTkNFKHBtZF9jb250KG9sZF9wbWQpKSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0aWYgKHBtZF95b3VuZyhvbGRfcG1kKSkge1xuK1x0XHRcdC8qIF9fcHRlcF9jbGVhcl95b3VuZygpIHJldHVybnMgdGhlIG92ZXJ3cml0dGVuIFBURSAqL1xuK1x0XHRcdG9sZF9wbWQgPSBwdGVfcG1kKHB0ZV9ta29sZChfX3B0ZXBfY2xlYXJfeW91bmcoKHB0ZV90ICopcG1kcCkpKTtcbitcbitcdFx0XHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGFkZHIgKyBQTURfU0laRSk7XG4rXHRcdH1cbitcdC8qXG4rXHQgKiBUcmFuc2xhdGlvbnMgd2l0aG91dCBBRiBjYW5ub3QgYmUgY2FjaGVkLCBzbyB3ZSBjYW4gcmVwbGFjZVxuK1x0ICogdGhlbSB3aXRob3V0IEJCTS5cbitcdCAqL1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnX3JlbGF4ZWQoXHUwMDI2cG1kX3ZhbCgqcG1kcCksIFx1MDAyNnBtZF92YWwob2xkX3BtZCksXG4rXHRcdFx0XHQgICAgICBwbWRfdmFsKG5ld19wbWQpKSBcdTAwMjZcdTAwMjZcbitcdFx0ICsrYXR0ZW1wdHMgXHUwMDNjIG1heF9hdHRlbXB0cyk7XG4rXG4rXHRyZXR1cm4gYXR0ZW1wdHMgPT0gbWF4X2F0dGVtcHRzID8gLUVBR0FJTiA6IDA7XG4rfVxuK1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDI3Njg5YzYyYmQyNWRkLi43YjExYWE0MWQwYTA3NCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTEzMDIsOCArMTMwMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3B0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdF9fc2V0X3B0ZShwdGVwLCBfX3B0ZSgwKSk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApXG4rc3RhdGljIGlubGluZSBwdGVfdCBfX3B0ZXBfY2xlYXJfeW91bmcocHRlX3QgKnB0ZXApXG4ge1xuIFx0cHRlX3Qgb2xkX3B0ZSwgcHRlO1xuIFxuQEAgLTEzMTUsNyArMTMxNCwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgX19wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0XHQgICAgICAgcHRlX3ZhbChvbGRfcHRlKSwgcHRlX3ZhbChwdGUpKTtcbiBcdH0gd2hpbGUgKHB0ZV92YWwocHRlKSAhPSBwdGVfdmFsKG9sZF9wdGUpKTtcbiBcbi1cdHJldHVybiBwdGVfeW91bmcocHRlKTtcbitcdHJldHVybiBwdGU7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApXG4re1xuK1x0cmV0dXJuIHB0ZV95b3VuZyhfX3B0ZXBfY2xlYXJfeW91bmcocHRlcCkpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgX19wdGVwX2NsZWFyX2ZsdXNoX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuQEAgLTE1OTgsNyArMTYwMyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbW11X2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuICAqIHBhZ2UgYWZ0ZXIgZm9yaygpICsgQ29XIGZvciBwZm4gbWFwcGluZ3MuIFdlIGRvbid0IGFsd2F5cyBoYXZlIGFcbiAgKiBoYXJkd2FyZS1tYW5hZ2VkIGFjY2VzcyBmbGFnIG9uIGFybTY0LlxuICAqL1xuLSNkZWZpbmUgYXJjaF9oYXNfaHdfcHRlX3lvdW5nXHRcdGNwdV9oYXNfaHdfYWZcbisjZGVmaW5lIGFyY2hfaGFzX2h3X3B0ZV95b3VuZ1x0XHRzeXN0ZW1faGFzX2h3X2FmXG4gXG4gI2lmZGVmIENPTkZJR19BUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VOR1xuICNkZWZpbmUgYXJjaF9oYXNfaHdfbm9ubGVhZl9wbWRfeW91bmdcdHN5c3RlbV9zdXBwb3J0c19oYWZ0XG5AQCAtMTYwOCw3ICsxNjEzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4gICogRXhwZXJpbWVudGFsbHksIGl0J3MgY2hlYXAgdG8gc2V0IHRoZSBhY2Nlc3MgZmxhZyBpbiBoYXJkd2FyZSBhbmQgd2VcbiAgKiBiZW5lZml0IGZyb20gcHJlZmF1bHRpbmcgbWFwcGluZ3MgYXMgJ29sZCcgdG8gc3RhcnQgd2l0aC5cbiAgKi9cbi0jZGVmaW5lIGFyY2hfd2FudHNfb2xkX3ByZWZhdWx0ZWRfcHRlXHRjcHVfaGFzX2h3X2FmXG4rI2RlZmluZSBhcmNoX3dhbnRzX29sZF9wcmVmYXVsdGVkX3B0ZVx0c3lzdGVtX2hhc19od19hZlxuIFxuIC8qXG4gICogUmVxdWVzdCBleGVjIG1lbW9yeSBpcyByZWFkIGludG8gcGFnZWNhY2hlIGluIGF0IGxlYXN0IDY0SyBmb2xpb3MuIFRoaXMgc2l6ZVxuQEAgLTE3OTMsNiArMTc5OCw0OCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0X19wdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApO1xuIH1cbiBcbisjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9VUERBVEVfVk1FTU1BUF9QVEVcbitzdGF0aWMgaW5saW5lIGludCB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4rXHRcdFx0XHRcdCBjb25zdCBwdGVfdCBwdGUpXG4re1xuK1x0Y29uc3QgaW50IG1heF9hdHRlbXB0cyA9IDE2O1xuK1x0aW50IGF0dGVtcHRzID0gMDtcbitcdHB0ZV90IG9sZF9wdGU7XG4rXG4rXHRpZiAoIXN5c3RlbV9zdXBwb3J0c19odm8oKSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LyogVGhpcyByb3V0aW5lIGlzIG9ubHkgdG8gYmUgdXNlZCBmb3IgdmFsaWQtdG8tdmFsaWQgdHJhbnNpdGlvbnMuICovXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFwdGVfdmFsaWQocHRlKSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0b2xkX3B0ZSA9IF9fcHRlcF9nZXQocHRlcCk7XG4rXG4rXHRkbyB7XG4rXHRcdGlmIChXQVJOX09OX09OQ0UoIXB0ZV92YWxpZChvbGRfcHRlKSkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdC8qIFdlIHNob3VsZCBuZXZlciBnZXQgYSBjb250aWd1b3VzIFBURSBoZXJlLiAqL1xuK1x0XHRpZiAoV0FSTl9PTl9PTkNFKHB0ZV92YWxpZF9jb250KG9sZF9wdGUpKSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0aWYgKHB0ZV95b3VuZyhvbGRfcHRlKSkge1xuK1x0XHRcdC8qIF9fcHRlcF9jbGVhcl95b3VuZygpIHJldHVybnMgdGhlIG92ZXJ3cml0dGVuIFBURSAqL1xuK1x0XHRcdG9sZF9wdGUgPSBwdGVfbWtvbGQoX19wdGVwX2NsZWFyX3lvdW5nKHB0ZXApKTtcbitcbitcdFx0XHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGFkZHIgKyBQQUdFX1NJWkUpO1xuK1x0XHR9XG4rXHQvKlxuK1x0ICogVHJhbnNsYXRpb25zIHdpdGhvdXQgQUYgY2Fubm90IGJlIGNhY2hlZCwgc28gd2UgY2FuIHJlcGxhY2VcbitcdCAqIHRoZW0gd2l0aG91dCBCQk0uXG4rXHQgKi9cbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZ19yZWxheGVkKFx1MDAyNnB0ZV92YWwoKnB0ZXApLCBcdTAwMjZwdGVfdmFsKG9sZF9wdGUpLFxuK1x0XHRcdFx0ICAgICAgcHRlX3ZhbChwdGUpKSBcdTAwMjZcdTAwMjZcbitcdFx0ICsrYXR0ZW1wdHMgXHUwMDNjIG1heF9hdHRlbXB0cyk7XG4rXG4rXHRyZXR1cm4gYXR0ZW1wdHMgPT0gbWF4X2F0dGVtcHRzID8gLUVBR0FJTiA6IDA7XG4rfVxuK1xuICNkZWZpbmUgY2xlYXJfZnVsbF9wdGVzIGNsZWFyX2Z1bGxfcHRlc1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9mdWxsX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRcdHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBpbnQgbnIsIGludCBmdWxsKVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xuaW5kZXggOWEyMmRmMGM1MTIwZjMuLjY1YmIzYzdjOTU5NTJiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXG4rKysgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNcbkBAIC03Niw2ICs3Niw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2FzYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmNwdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvaXNvbGF0aW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdldGxiX3ZtZW1tYXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9hcm1fcG11djMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9jcHUuaFx1MDAzZVxuQEAgLTIxNzIsNiArMjE3MywzMSBAQCBzdGF0aWMgYm9vbCBoYXNfYmJtbDJfbm9hYm9ydChjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwcywgaW50IHNjb1xuIFx0cmV0dXJuIGNwdV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KCk7XG4gfVxuIFxuK3N0YXRpYyBib29sIGh2b19jb21wYXRpYmxlKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXBzLCBpbnQgc2NvcGUpXG4re1xuK1x0LypcbitcdCAqIFdlIG5lZWQgSFcgQUYgc3VwcG9ydCB0byBzdXBwb3J0IGNoYW5naW5nIHZtZW1tYXAgbWFwcGluZyBsZXZlbCBhbmRcbitcdCAqIE9BIHdpdGhvdXQgdGFraW5nIGZhdWx0cy5cbitcdCAqL1xuK1x0cmV0dXJuIHN1cHBvcnRzX2h3X2FmKHNjb3BlKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgbGF0ZV9jcHVfZW5hYmxlX2h2byhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqX191bnVzZWQpXG4re1xuKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbitcdGlmIChjcHVfaGFzX2h3X2FmKCkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0LypcbitcdCAqIElmIHRoZSBDUFUgZG9lcyBub3Qgc3VwcG9ydCBIVyBBRiwgd2UgY2Fubm90IG9ubGluZSBpdCBpZiBIVk8gaXNcbitcdCAqIGN1cnJlbnRseSBpbiB1c2UuXG4rXHQgKi9cbitcdHJldHVybiBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKCk7XG4rI2Vsc2VcbitcdHJldHVybiB0cnVlO1xuKyNlbmRpZlxuK31cbitcbiBzdGF0aWMgdm9pZCBjcHVfZW5hYmxlX3Bhbihjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqX191bnVzZWQpXG4ge1xuIFx0LypcbkBAIC0zMDY3LDYgKzMwOTMsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2ZlYXR1cmVzW10gPSB7XG4gXHRcdC50eXBlID0gQVJNNjRfQ1BVQ0FQX0VBUkxZX0xPQ0FMX0NQVV9GRUFUVVJFLFxuIFx0XHQubWF0Y2hlcyA9IGhhc19iYm1sMl9ub2Fib3J0LFxuIFx0fSxcbitcdHtcbitcdFx0LmRlc2MgPSBcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gU3VwcG9ydFwiLFxuK1x0XHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hWT19DT01QQVRJQkxFLFxuK1x0XHQudHlwZSA9IEFSTTY0X0NQVUNBUF9TQ09QRV9TWVNURU0gfFxuK1x0XHRcdEFSTTY0X0NQVUNBUF9PUFRJT05BTF9GT1JfTEFURV9DUFUgfFxuK1x0XHRcdEFSTTY0X0NQVUNBUF9QRVJNSVRURURfRk9SX0xBVEVfQ1BVLFxuK1x0XHQubWF0Y2hlcyA9IGh2b19jb21wYXRpYmxlLFxuK1x0XHQubGF0ZV9jcHVfZW5hYmxlID0gbGF0ZV9jcHVfZW5hYmxlX2h2byxcbitcdH0sXG4gXHR7XG4gXHRcdC5kZXNjID0gXCI1Mi1iaXQgVmlydHVhbCBBZGRyZXNzaW5nIGZvciBLVk0gKExQQTIpXCIsXG4gXHRcdC5jYXBhYmlsaXR5ID0gQVJNNjRfSEFTX0xQQTIsXG5AQCAtMzY2OSw2ICszNzA0LDE0IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9sb2NhbF9jcHVfY2Fwcyh1MTYgc2NvcGVfbWFzaylcbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoIWNwdV9oYXNfY2FwIFx1MDAyNlx1MDAyNiAhY3B1Y2FwX2xhdGVfY3B1X29wdGlvbmFsKGNhcHMpKVxuIFx0XHRcdFx0YnJlYWs7XG4rXG4rXHRcdFx0LypcbitcdFx0XHQgKiBTb21lIG9wdGlvbmFsIGZlYXR1cmVzIG1heSBpbiBmYWN0IGJlIHJlcXVpcmVkIGR1ZVxuK1x0XHRcdCAqIHRvIHBhcnRpY3VsYXIgcnVudGltZSBjb25kaXRpb25zLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChjYXBzLVx1MDAzZWxhdGVfY3B1X2VuYWJsZSBcdTAwMjZcdTAwMjYgIWNhcHMtXHUwMDNlbGF0ZV9jcHVfZW5hYmxlKGNhcHMpKVxuK1x0XHRcdFx0YnJlYWs7XG4rXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBXZSBoYXZlIHRvIGlzc3VlIGNwdV9lbmFibGUoKSBpcnJlc3BlY3RpdmUgb2ZcbiBcdFx0XHQgKiB3aGV0aGVyIHRoZSBDUFUgaGFzIGl0IG9yIG5vdCwgYXMgaXQgaXMgZW5hYmVsZFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xuaW5kZXggOWI4NWE4NGY2ZmQ0OTQuLjYzMDk1M2Q1OWM1Mjc2IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzXG4rKysgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcbkBAIC03MCw2ICs3MCw3IEBAIEhBU19WSVJUX0hPU1RfRVhUTlxuIEhBU19XRlhUXG4gSEFTX1hOWFxuIEhBRlRcbitIVk9fQ09NUEFUSUJMRVxuIEhXX0RCTVxuIEtWTV9IVkhFXG4gS1ZNX1BST1RFQ1RFRF9NT0RFXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5pbmRleCAyNDhmNjJkMGI1OTBlYy4uOTMyMmQ5NjJjOWNjODAgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuQEAgLTI0LDYgKzI0LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsIHBndGFibGVfdCBwdGUpXG4gXHRzZXRfcG1kKHBtZCwgX19wbWQoKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHB0ZSkpKTtcbiB9XG4gXG4rI2RlZmluZSBfX0hBVkVfQVJDSF9UUllfUE9QVUxBVEVfVk1FTU1BUF9QTURcbitzdGF0aWMgaW5saW5lIGludCB0cnlfcG9wdWxhdGVfdm1lbW1hcF9wbWQocG1kX3QgKnBtZHAsIHB0ZV90ICpwZ3RhYmxlLFxuK1x0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFkZHIpXG4re1xuK1x0cG1kX3BvcHVsYXRlX2tlcm5lbChcdTAwMjZpbml0X21tLCBwbWRwLCBwZ3RhYmxlKTtcbitcdHJldHVybiAwO1xuK31cbitcbiAjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERURcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgcHVkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkLCBwbWRfdCAqcG1kKVxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggMjIzNTI4YzA0ZDczOTIuLmU3YjY1MDU2ZWY3Mzg0IDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4rKysgYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC02MzgsNiArNjM4LDE0IEBAIHN0YXRpYyBpbmxpbmUgbG9uZyBwbWRfcHJvdG5vbmUocG1kX3QgcG1kKVxuICNkZWZpbmUgcG1kX2xlYWYocG1kKVx0XHQoKHBtZF92YWwocG1kKSBcdTAwMjYgX1BBR0VfSFVHRSkgIT0gMClcbiAjZGVmaW5lIHB1ZF9sZWFmKHB1ZClcdFx0KChwdWRfdmFsKHB1ZCkgXHUwMDI2IF9QQUdFX0hVR0UpICE9IDApXG4gXG4rI2RlZmluZSBfX0hBVkVfQVJDSF9UUllfVVBEQVRFX1ZNRU1NQVBfUFRFXG4rc3RhdGljIGlubGluZSBpbnQgdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuK1x0XHRcdFx0XHQgcHRlX3QgcHRlKVxuK3tcbitcdHNldF9wdGUocHRlcCwgcHRlKTtcbitcdHJldHVybiAwO1xuK31cbitcbiAvKlxuICAqIFdlIHByb3ZpZGUgb3VyIG93biBnZXRfdW5tYXBwZWQgYXJlYSB0byBjb3BlIHdpdGggdGhlIHZpcnR1YWwgYWxpYXNpbmdcbiAgKiBjb25zdHJhaW50cyBwbGFjZWQgb24gdXMgYnkgdGhlIGNhY2hlIGFyY2hpdGVjdHVyZS5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5pbmRleCA3NzBjZTE4YTczMjhiOC4uOGRiYmU2MmIyNTc0MjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbkBAIC0zMSw2ICszMSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0c2V0X3BtZChwbWQsIF9fcG1kKChwZm4gXHUwMDNjXHUwMDNjIF9QQUdFX1BGTl9TSElGVCkgfCBfUEFHRV9UQUJMRSkpO1xuIH1cbiBcbisjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9QT1BVTEFURV9WTUVNTUFQX1BNRFxuK3N0YXRpYyBpbmxpbmUgaW50IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWRfdCAqcG1kcCwgcHRlX3QgKnBndGFibGUsXG4rXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcilcbit7XG4rXHRwbWRfcG9wdWxhdGVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHBtZHAsIHBndGFibGUpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuICNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQsIHBtZF90ICpwbWQpXG4ge1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDVkNTc1NmJkYTgyZTNkLi5hMTFjNTY5ZWUyZjA2ZiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4rKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTExNjIsNiArMTE2MiwxNCBAQCBzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZF9tb2RpZnkocHVkX3QgcHVkLCBwZ3Byb3RfdCBuZXdwcm90KVxuIFxuICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiBcbisjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9VUERBVEVfVk1FTU1BUF9QVEVcbitzdGF0aWMgaW5saW5lIGludCB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4rXHRcdFx0XHRcdCBwdGVfdCBwdGUpXG4re1xuK1x0c2V0X3B0ZShwdGVwLCBwdGUpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qXG4gICogRW5jb2RlL2RlY29kZSBzd2FwIGVudHJpZXMgYW5kIHN3YXAgUFRFcy4gU3dhcCBQVEVzIGFyZSBhbGwgUFRFcyB0aGF0XG4gICogYXJlICFwdGVfbm9uZSgpIFx1MDAyNlx1MDAyNiAhcHRlX3ByZXNlbnQoKS5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbmluZGV4IGM4ODY5MWIxNWYzYzY3Li40N2I1NmJiZDYyMzYxNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5AQCAtODIsNiArODIsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCxcbiBcdHNldF9wbWQocG1kLCBfX3BtZCgoKHB0ZXZhbF90KXBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkgfCBfUEFHRV9UQUJMRSkpO1xuIH1cbiBcbisjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9QT1BVTEFURV9WTUVNTUFQX1BNRFxuK3N0YXRpYyBpbmxpbmUgaW50IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWRfdCAqcG1kcCwgcHRlX3QgKnBndGFibGUsXG4rXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcilcbit7XG4rXHRwbWRfcG9wdWxhdGVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHBtZHAsIHBndGFibGUpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuICNpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDJcbiBleHRlcm4gdm9pZCBfX19wbWRfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcG1kX3QgKnBtZCk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCBhYzI5NWNhNmM5MmY5OS4uOTc0MTUxNTY0MDcxY2IgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTEzNzIsNiArMTM3MiwxNCBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIH1cbiAjZW5kaWZcbiBcbisjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9VUERBVEVfVk1FTU1BUF9QVEVcbitzdGF0aWMgaW5saW5lIGludCB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4rXHRcdFx0XHRcdCBwdGVfdCBwdGUpXG4re1xuK1x0c2V0X3B0ZShwdGVwLCBwdGUpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuICNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oXG5pbmRleCBlMWEyZTFiN2M4ZTdiOC4uYzQ3OTZjNTRiNzAyYTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaFxuKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmhcbkBAIC0xMjgsNCArMTI4LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKHZvaWQpXG4gfVxuICNlbmRpZiAvKiBfX0hBVkVfQVJDSF9HSUdBTlRJQ19QQUdFX1JVTlRJTUVfU1VQUE9SVEVEICovXG4gXG4rI2lmbmRlZiBfX0hBVkVfQVJDSF9IVk9fU1VQUE9SVEVEXG4rc3RhdGljIGlubGluZSBib29sIGFyY2hfaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl9zdXBwb3J0ZWQodm9pZClcbit7XG4rXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApO1xuK31cbisjZW5kaWYgLyogX19IQVZFX0FSQ0hfSFZPX1NVUFBPUlRFRCAqL1xuK1xuICNlbmRpZiAvKiBfQVNNX0dFTkVSSUNfSFVHRVRMQl9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiX3ZtZW1tYXAuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYl92bWVtbWFwLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYTY3MWViNGE0ZmY0NjZcbi0tLSAvZGV2L251bGxcbisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYl92bWVtbWFwLmhcbkBAIC0wLDAgKzEsMjAgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKyNpZm5kZWYgX0xJTlVYX0hVR0VUTEJfVk1FTU1BUF9IXG4rI2RlZmluZSBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuK1xuK2Jvb2wgaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZSh2b2lkKTtcbitcbisjZWxzZSAvKiBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVAgKi9cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZSh2b2lkKVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbitcbisjZW5kaWZcbitcbisjZW5kaWYgLyogX0xJTlVYX0hVR0VUTEJfVk1FTU1BUF9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaFxuaW5kZXggOTE3NGZhNTliYmM1NGQuLmVkNDQ2ZDk1Y2EzNzMwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGdhbGxvYy5oXG5AQCAtMjYsNCArMjYsMjQgQEBcbiBcdFx0XHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKGFkZHIsIGFkZHIpO1x0XHRcXFxuIFx0fSB3aGlsZSAoMClcbiBcbisjaWZuZGVmIF9fSEFWRV9BUkNIX1RSWV9QT1BVTEFURV9WTUVNTUFQX1BNRFxuKy8qXG4rICogdHJ5X3BvcHVsYXRlX3ZtZW1tYXBfcG1kIC0gUG9wdWxhdGUgYSBQTUQgdGhhdCBpcyBpbiB1c2UgYnkgdGhlIHZtZW1tYXAuXG4rICogQGFkZHI6IEJhc2UgYWRkcmVzcyBvZiB0aGUgcmVtYXBwZWQgUE1ELlxuKyAqIEBwbWRwOiBQYWdlIHRhYmxlIHBvaW50ZXIgdG8gYmUgb3ZlcndyaXR0ZW4uXG4rICogQHBndGFibGU6IFBvaW50ZXIgdG8gdGhlIHBhZ2UgdGFibGUgdGhhdCB0aGUgbmV3IFBNRCB3aWxsIHBvaW50IHRvLlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHRvIGJlIHVzZWQgdG8gdXBkYXRlIFBNRHMgdGhhdCBtYXAgdGhlIHZtZW1tYXAgdG9cbisgKiBwb2ludCB0byBhIHBhZ2Ugb2YgYWxyZWFkeS1wb3B1bGF0ZWQgUFRFcyB0aGF0IG1hcCB0aGUgc2FtZSBwYWdlcy5cbisgKlxuKyAqIEltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgZW5zdXJlIHRoYXQsIHdoaWxlIHRoZSB1cGRhdGUgaXMgdGFraW5nXG4rICogcGxhY2UsIENQVXMgd2lsbCBub3QgZmF1bHQgb24gdGhlIHJlbWFwcGVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCB0cnlfcG9wdWxhdGVfdm1lbW1hcF9wbWQocG1kX3QgKnBtZHAsIHB0ZV90ICpwZ3RhYmxlLFxuK1x0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFkZHIpXG4re1xuK1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK31cbisjZW5kaWZcbitcbiAjZW5kaWYgLyogX0xJTlVYX1BHQUxMT0NfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbmluZGV4IDI5ODFlMzg2ZGE3YjNjLi5lMWFiY2NmNzZiYjQ2MyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxuQEAgLTQ1Nyw2ICs0NTcsMjcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gI2VuZGlmXG4gI2RlZmluZSBzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBwdGUpIHNldF9wdGVzKG1tLCBhZGRyLCBwdGVwLCBwdGUsIDEpXG4gXG4rI2lmbmRlZiBfX0hBVkVfQVJDSF9UUllfVVBEQVRFX1ZNRU1NQVBfUFRFXG4rLypcbisgKiB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlIC0gUmVtYXAgUFRFcyB1c2VkIGJ5IHRoZSB2bWVtbWFwLlxuKyAqIEBhZGRyOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHJlbWFwcGVkIFBURS5cbisgKiBAcHRlcDogUGFnZSB0YWJsZSBwb2ludGVyIHRvIGJlIG92ZXJ3cml0dGVuLlxuKyAqIEBwdGU6IFBhZ2UgdGFibGUgZW50cnkgdG8gd3JpdGUuXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdG8gYmUgdXNlZCB0byB1cGRhdGUgUFRFcyB0aGF0IG1hcCB0aGUgdm1lbW1hcC4gVGhlXG4rICogb25seSB2YWxpZCB0cmFuc2l0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBmdW5jdGlvbiBhcmU6IGxlYWYtbGV2ZWxcbisgKiAoUEFHRV9TSVpFKSwgdmFsaWQtdG8tdmFsaWQuIFRoZSBwZm4gYW5kIHByb3QgYml0cyBtYXkgYmUgY2hhbmdlZC5cbisgKlxuKyAqIEltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgZW5zdXJlIHRoYXQsIHdoaWxlIHRoZSB1cGRhdGUgaXMgdGFraW5nXG4rICogcGxhY2UsIENQVXMgd2lsbCBub3QgZmF1bHQgb24gdGhlIHJlbWFwcGVkIHZpcnR1YWwgYWRkcmVzcy5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4rXHRcdFx0XHRcdCBwdGVfdCBwdGUpXG4re1xuK1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK31cbisjZW5kaWZcbitcbiAjaWZuZGVmIF9fSEFWRV9BUkNIX1BURVBfU0VUX0FDQ0VTU19GTEFHU1xuIGV4dGVybiBpbnQgcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXAsXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA1NzEyMTJiODA4MzVlYy4uMjk4NjczYTZjNTdjNWMgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTQ3LDcgKzQ3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ub2RlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXRsYl92bWVtbWFwLmhcIlxuKyNpbmNsdWRlIFwiaHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmhcIlxuICNpbmNsdWRlIFwiaHVnZXRsYl9jbWEuaFwiXG4gI2luY2x1ZGUgXCJodWdldGxiX2ludGVybmFsLmhcIlxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmhcdTAwM2VcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiX3N5c2ZzLmMgYi9tbS9odWdldGxiX3N5c2ZzLmNcbmluZGV4IDc5ZWNlOTE0MDZiZmE0Li44M2E5NWY1MTQyZjVhNCAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGJfc3lzZnMuY1xuKysrIGIvbW0vaHVnZXRsYl9zeXNmcy5jXG5AQCAtOCw3ICs4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlLWlzb2xhdGlvbi5oXHUwMDNlXG4gXG4tI2luY2x1ZGUgXCJodWdldGxiX3ZtZW1tYXAuaFwiXG4rI2luY2x1ZGUgXCJodWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJodWdldGxiX2ludGVybmFsLmhcIlxuIFxuICNkZWZpbmUgSFNUQVRFX0FUVFJfUk8oX25hbWUpIFxcXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl92bWVtbWFwLmMgYi9tbS9odWdldGxiX3ZtZW1tYXAuY1xuaW5kZXggMTMzYjQ2ZGZiMDlmNWMuLjdlN2Y4NTc5Y2MyYWU1IDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYl92bWVtbWFwLmNcbisrKyBiL21tL2h1Z2V0bGJfdm1lbW1hcC5jXG5AQCAtMTYsOSArMTYsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbWRlYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdld2Fsay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGdhbGxvYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYl92bWVtbWFwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiZmx1c2guaFx1MDAzZVxuLSNpbmNsdWRlIFwiaHVnZXRsYl92bWVtbWFwLmhcIlxuKyNpbmNsdWRlIFwiaHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmhcIlxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gXG4gLyoqXG5AQCAtMzQsNyArMzYsNyBAQFxuICAqXHRcdFx0b3BlcmF0aW9ucy5cbiAgKi9cbiBzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrIHtcbi1cdHZvaWRcdFx0XHQoKnJlbWFwX3B0ZSkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0aW50XHRcdFx0KCpyZW1hcF9wdGUpKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrICp3YWxrKTtcbiBcbiBcdHVuc2lnbmVkIGxvbmdcdFx0bnJfd2Fsa2VkO1xuQEAgLTU0LDYgKzU2LDcgQEAgc3RhdGljIGludCB2bWVtbWFwX3NwbGl0X3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgcGFnZSAqaGVhZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHQgICAgIHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspXG4ge1xuIFx0cG1kX3QgX19wbWQ7XG4rXHRpbnQgcmV0O1xuIFx0aW50IGk7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHIgPSBzdGFydDtcbiBcdHB0ZV90ICpwZ3RhYmxlO1xuQEAgLTczLDggKzc2LDE1IEBAIHN0YXRpYyBpbnQgdm1lbW1hcF9zcGxpdF9wbWQocG1kX3QgKnBtZCwgc3RydWN0IHBhZ2UgKmhlYWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdHNldF9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBlbnRyeSk7XG4gXHR9XG4gXG4rXHRyZXQgPSAwO1xuIFx0c3Bpbl9sb2NrKFx1MDAyNmluaXRfbW0ucGFnZV90YWJsZV9sb2NrKTtcbiBcdGlmIChsaWtlbHkocG1kX2xlYWYoKnBtZCkpKSB7XG4rXHRcdC8qIE1ha2UgcHRlIHZpc2libGUgYmVmb3JlIHBtZC4gU2VlIGNvbW1lbnQgaW4gcG1kX2luc3RhbGwoKS4gKi9cbitcdFx0c21wX3dtYigpO1xuK1x0XHRyZXQgPSB0cnlfcG9wdWxhdGVfdm1lbW1hcF9wbWQocG1kLCBwZ3RhYmxlLCBzdGFydCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBmcmVlO1xuK1xuIFx0XHQvKlxuIFx0XHQgKiBIaWdoZXIgb3JkZXIgYWxsb2NhdGlvbnMgZnJvbSBidWRkeSBhbGxvY2F0b3IgbXVzdCBiZSBhYmxlIHRvXG4gXHRcdCAqIGJlIHRyZWF0ZWQgYXMgaW5kZXBlbmRlbnQgc21hbGwgcGFnZXMgKGFzIHRoZXkgY2FuIGJlIGZyZWVkXG5AQCAtODMsMTcgKzkzLDE3IEBAIHN0YXRpYyBpbnQgdm1lbW1hcF9zcGxpdF9wbWQocG1kX3QgKnBtZCwgc3RydWN0IHBhZ2UgKmhlYWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdGlmICghUGFnZVJlc2VydmVkKGhlYWQpKVxuIFx0XHRcdHNwbGl0X3BhZ2UoaGVhZCwgZ2V0X29yZGVyKFBNRF9TSVpFKSk7XG4gXG4tXHRcdC8qIE1ha2UgcHRlIHZpc2libGUgYmVmb3JlIHBtZC4gU2VlIGNvbW1lbnQgaW4gcG1kX2luc3RhbGwoKS4gKi9cbi1cdFx0c21wX3dtYigpO1xuLVx0XHRwbWRfcG9wdWxhdGVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHBtZCwgcGd0YWJsZSk7XG4gXHRcdGlmICghKHdhbGstXHUwMDNlZmxhZ3MgXHUwMDI2IFZNRU1NQVBfU1BMSVRfTk9fVExCX0ZMVVNIKSlcbiBcdFx0XHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBzdGFydCArIFBNRF9TSVpFKTtcbi1cdH0gZWxzZSB7XG4tXHRcdHB0ZV9mcmVlX2tlcm5lbChcdTAwMjZpbml0X21tLCBwZ3RhYmxlKTtcbi1cdH1cbi1cdHNwaW5fdW5sb2NrKFx1MDAyNmluaXRfbW0ucGFnZV90YWJsZV9sb2NrKTtcbitcdH0gZWxzZVxuK1x0XHRnb3RvIGZyZWU7XG4gXG4tXHRyZXR1cm4gMDtcbitvdXQ6XG4rXHRzcGluX3VubG9jayhcdTAwMjZpbml0X21tLnBhZ2VfdGFibGVfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK2ZyZWU6XG4rXHRwdGVfZnJlZV9rZXJuZWwoXHUwMDI2aW5pdF9tbSwgcGd0YWJsZSk7XG4rXHRnb3RvIG91dDtcbiB9XG4gXG4gc3RhdGljIGludCB2bWVtbWFwX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5AQCAtMTQxLDExICsxNTEsMTMgQEAgc3RhdGljIGludCB2bWVtbWFwX3B0ZV9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIHtcbiBcdHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKnZtZW1tYXBfd2FsayA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbitcdGludCByZXQgPSAwO1xuIFxuLVx0dm1lbW1hcF93YWxrLVx1MDAzZXJlbWFwX3B0ZShwdGUsIGFkZHIsIHZtZW1tYXBfd2Fsayk7XG4tXHR2bWVtbWFwX3dhbGstXHUwMDNlbnJfd2Fsa2VkKys7XG4rXHRyZXQgPSB2bWVtbWFwX3dhbGstXHUwMDNlcmVtYXBfcHRlKHB0ZSwgYWRkciwgdm1lbW1hcF93YWxrKTtcbitcdGlmICghcmV0KVxuK1x0XHR2bWVtbWFwX3dhbGstXHUwMDNlbnJfd2Fsa2VkKys7XG4gXG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgdm1lbW1hcF9yZW1hcF9vcHMgPSB7XG5AQCAtMTY0LDEzICsxNzYsMTEgQEAgc3RhdGljIGludCB2bWVtbWFwX3JlbWFwX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0cmV0ID0gd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZShzdGFydCwgZW5kLCBcdTAwMjZ2bWVtbWFwX3JlbWFwX29wcyxcbiBcdFx0XHRcdCAgICBOVUxMLCB3YWxrKTtcbiBcdG1tYXBfcmVhZF91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0aWYgKHdhbGstXHUwMDNlcmVtYXBfcHRlIFx1MDAyNlx1MDAyNiAhKHdhbGstXHUwMDNlZmxhZ3MgXHUwMDI2IFZNRU1NQVBfUkVNQVBfTk9fVExCX0ZMVVNIKSlcbiBcdFx0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKTtcbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gLypcbkBAIC0xOTksMTggKzIwOSwyMCBAQCBzdGF0aWMgdm9pZCBmcmVlX3ZtZW1tYXBfcGFnZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4gXHRcdGZyZWVfdm1lbW1hcF9wYWdlKHBhZ2UpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB2bWVtbWFwX3JlbWFwX3B0ZShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0ICAgICAgc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqd2FsaylcbitzdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfcHRlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHQgICAgIHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwdGVfcGFnZShwdGVwX2dldChwdGUpKTtcbiBcdHB0ZV90IGVudHJ5O1xuK1x0Ym9vbCBoZWFkO1xuK1x0aW50IHJldDtcbitcbitcdGhlYWQgPSB3YWxrLVx1MDAzZW5yX3dhbGtlZCA9PSAwIFx1MDAyNlx1MDAyNiB3YWxrLVx1MDAzZXZtZW1tYXBfaGVhZDtcbiBcbiBcdC8qIFJlbWFwcGluZyB0aGUgaGVhZCBwYWdlIHJlcXVpcmVzIHIvdyAqL1xuLVx0aWYgKHVubGlrZWx5KHdhbGstXHUwMDNlbnJfd2Fsa2VkID09IDAgXHUwMDI2XHUwMDI2IHdhbGstXHUwMDNldm1lbW1hcF9oZWFkKSkge1xuK1x0aWYgKHVubGlrZWx5KGhlYWQpKSB7XG4gXHRcdFZNX1dBUk5fT05fT05DRSghUGFnZUhlYWQoKGNvbnN0IHN0cnVjdCBwYWdlICopYWRkcikpO1xuIFxuLVx0XHRsaXN0X2RlbChcdTAwMjZ3YWxrLVx1MDAzZXZtZW1tYXBfaGVhZC1cdTAwM2VscnUpO1xuLVxuIFx0XHQvKlxuIFx0XHQgKiBNYWtlcyBzdXJlIHRoYXQgcHJlY2VkaW5nIHN0b3JlcyB0byB0aGUgcGFnZSBjb250ZW50cyBmcm9tXG4gXHRcdCAqIHZtZW1tYXBfcmVtYXBfZnJlZSgpIGJlY29tZSB2aXNpYmxlIGJlZm9yZSB0aGUgc2V0X3B0ZV9hdCgpXG5AQCAtMjI5LDM1ICsyNDEsNTYgQEAgc3RhdGljIHZvaWQgdm1lbW1hcF9yZW1hcF9wdGUocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRlbnRyeSA9IG1rX3B0ZSh3YWxrLVx1MDAzZXZtZW1tYXBfdGFpbCwgUEFHRV9LRVJORUxfUk8pO1xuIFx0fVxuIFxuK1x0cmV0ID0gdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZShhZGRyLCBwdGUsIGVudHJ5KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBXZSBzdWNjZXNzZnVsbHkgb3Zlcndyb3RlIHRoZSB2bWVtbWFwIFBURSwgc28gd2UgY2FuIGZyZWVcbitcdCAqIHRoZSB2bWVtbWFwIHBhZ2UgdGhhdCB3YXMganVzdCB1bm1hcHBlZCwgYW5kIGlmIHdlIG1hcHBlZFxuK1x0ICogdGhlIG5ldyBoZWFkIHBhZ2UsIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0IHNvIHRoYXQgaXRcbitcdCAqIGRvZXNuJ3QgZ2V0IGZyZWVkIGxhdGVyLlxuK1x0ICovXG4gXHRsaXN0X2FkZChcdTAwMjZwYWdlLVx1MDAzZWxydSwgd2Fsay1cdTAwM2V2bWVtbWFwX3BhZ2VzKTtcbi1cdHNldF9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBlbnRyeSk7XG4rXHRpZiAoaGVhZClcbitcdFx0bGlzdF9kZWwoXHUwMDI2d2Fsay1cdTAwM2V2bWVtbWFwX2hlYWQtXHUwMDNlbHJ1KTtcbitcbitcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB2bWVtbWFwX3Jlc3RvcmVfcHRlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHRcdHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspXG4rc3RhdGljIGludCB2bWVtbWFwX3Jlc3RvcmVfcHRlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHQgICAgICAgc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqd2FsaylcbiB7XG4gXHRzdHJ1Y3QgcGFnZSAqc3JjID0gcHRlX3BhZ2UocHRlcF9nZXQocHRlKSksICpkc3Q7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRSghd2Fsay1cdTAwM2V2bWVtbWFwX3RhaWwpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdC8qXG4tXHQgKiBXaGVuIHJvbGxpbmcgYmFjayB2bWVtbWFwX3JlbWFwX2ZyZWUoKSwga2VlcCB0aGUgY29waWVkIGhlYWQgcGFnZVxuK1x0ICogV2hlbiByZXN0b3JpbmcgYSBwYXJ0aWFsbHktSFZPZWQgcGFnZSwga2VlcCB0aGUgY29waWVkIGhlYWQgcGFnZVxuIFx0ICogbWFwcGluZyBhbmQgcmVzdG9yZSBvbmx5IFBURXMgY3VycmVudGx5IHBvaW50aW5nIGF0IHRoZSBzaGFyZWQgdGFpbFxuIFx0ICogcGFnZS5cbiBcdCAqL1xuLVx0aWYgKHdhbGstXHUwMDNldm1lbW1hcF90YWlsIFx1MDAyNlx1MDAyNiB3YWxrLVx1MDAzZXZtZW1tYXBfdGFpbCAhPSBzcmMpXG4tXHRcdHJldHVybjtcbitcdGlmICh3YWxrLVx1MDAzZXZtZW1tYXBfdGFpbCAhPSBzcmMpXG4rXHRcdHJldHVybiAwO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKFBhZ2VIZWFkKChjb25zdCBzdHJ1Y3QgcGFnZSAqKWFkZHIpKTtcbiBcbiBcdGRzdCA9IGxpc3RfZmlyc3RfZW50cnkod2Fsay1cdTAwM2V2bWVtbWFwX3BhZ2VzLCBzdHJ1Y3QgcGFnZSwgbHJ1KTtcbi1cdGxpc3RfZGVsKFx1MDAyNmRzdC1cdTAwM2VscnUpO1xuIFx0Y29weV9wYWdlKHBhZ2VfdG9fdmlydChkc3QpLCBwYWdlX3RvX3ZpcnQoc3JjKSk7XG4gXG4gXHQvKlxuIFx0ICogTWFrZXMgc3VyZSB0aGF0IHByZWNlZGluZyBzdG9yZXMgdG8gdGhlIHBhZ2UgY29udGVudHMgYmVjb21lIHZpc2libGVcbi1cdCAqIGJlZm9yZSB0aGUgc2V0X3B0ZV9hdCgpIHdyaXRlLlxuK1x0ICogYmVmb3JlIHRoZSB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKCkgd3JpdGUuXG4gXHQgKi9cbiBcdHNtcF93bWIoKTtcbi1cdHNldF9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBta19wdGUoZHN0LCBQQUdFX0tFUk5FTCkpO1xuK1xuK1x0cmV0ID0gdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZShhZGRyLCBwdGUsIG1rX3B0ZShkc3QsIFBBR0VfS0VSTkVMKSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0bGlzdF9kZWwoXHUwMDI2ZHN0LVx1MDAzZWxydSk7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG5AQCAtMjc5LDYgKzMxMiw3IEBAIHN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9zcGxpdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbiBcdHJldHVybiB2bWVtbWFwX3JlbWFwX3JhbmdlKHN0YXJ0LCBlbmQsIFx1MDAyNndhbGspO1xuIH1cbiBcbitzdGF0aWMgY29uc3QgaW50IFZNRU1NQVBfUkVNQVBfSU5DT01QTEVURSA9IDE7XG4gLyoqXG4gICogdm1lbW1hcF9yZW1hcF9mcmVlIC0gcmVtYXAgdGhlIHZtZW1tYXAgdmlydHVhbCBhZGRyZXNzIHJhbmdlIFtAc3RhcnQsIEBlbmQpXG4gICpcdFx0XHR0byB1c2UgQHZtZW1tYXBfaGVhZC90YWlsLCB0aGVuIGZyZWUgdm1lbW1hcCB3aGljaFxuQEAgLTI5Myw3ICszMjcsOCBAQCBzdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfc3BsaXQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4gICpcdFx0cmVzcG9uc2liaWxpdHkgdG8gZnJlZSBwYWdlcy5cbiAgKiBAZmxhZ3M6XHRtb2RpZmljYXRpb25zIHRvIHZtZW1tYXBfcmVtYXBfd2FsayBmbGFnc1xuICAqXG4tICogUmV0dXJuOiAlMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbisgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsIFZNRU1NQVBfUkVNQVBfSU5DT01QTEVURSBpZiB0aGUgcGFnZSBpcyBpbmNvbXBsZXRlbHlcbisgKiAgICAgICAgIG9wdGltaXplZCwgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXG4gICovXG4gc3RhdGljIGludCB2bWVtbWFwX3JlbWFwX2ZyZWUodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0ICAgICAgc3RydWN0IHBhZ2UgKnZtZW1tYXBfaGVhZCxcbkBAIC0zMjgsNyArMzYzLDggQEAgc3RhdGljIGludCB2bWVtbWFwX3JlbWFwX2ZyZWUodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdC5mbGFnc1x0XHQ9IDAsXG4gXHR9O1xuIFxuLVx0dm1lbW1hcF9yZW1hcF9yYW5nZShzdGFydCwgZW5kLCBcdTAwMjZ3YWxrKTtcbitcdGlmICh2bWVtbWFwX3JlbWFwX3JhbmdlKHN0YXJ0LCBlbmQsIFx1MDAyNndhbGspKVxuK1x0XHRyZXR1cm4gVk1FTU1BUF9SRU1BUF9JTkNPTVBMRVRFO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMzU3LDEwICszOTMsMzggQEAgc3RhdGljIGludCBhbGxvY192bWVtbWFwX3BhZ2VfbGlzdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdHJldHVybiAtRU5PTUVNO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IHBhZ2UgKnZtZW1tYXBfZ2V0X3RhaWwodW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgem9uZSAqem9uZSlcbit7XG4rXHRjb25zdCB1bnNpZ25lZCBpbnQgaWR4ID0gb3JkZXIgLSBWTUVNTUFQX1RBSUxfTUlOX09SREVSO1xuK1x0c3RydWN0IHBhZ2UgKnRhaWwsICpwO1xuK1x0aW50IG5vZGUgPSB6b25lX3RvX25pZCh6b25lKTtcbitcbitcdHRhaWwgPSBSRUFEX09OQ0Uoem9uZS1cdTAwM2V2bWVtbWFwX3RhaWxzW2lkeF0pO1xuK1x0aWYgKGxpa2VseSh0YWlsKSlcbitcdFx0cmV0dXJuIHRhaWw7XG4rXG4rXHR0YWlsID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgMCk7XG4rXHRpZiAoIXRhaWwpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0cCA9IHBhZ2VfdG9fdmlydCh0YWlsKTtcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IHBhZ2UpOyBpKyspXG4rXHRcdGluaXRfY29tcG91bmRfdGFpbChwICsgaSwgTlVMTCwgb3JkZXIsIHpvbmUpO1xuK1xuK1x0aWYgKGNtcHhjaGcoXHUwMDI2em9uZS1cdTAwM2V2bWVtbWFwX3RhaWxzW2lkeF0sIE5VTEwsIHRhaWwpKSB7XG4rXHRcdF9fZnJlZV9wYWdlKHRhaWwpO1xuK1x0XHR0YWlsID0gUkVBRF9PTkNFKHpvbmUtXHUwMDNldm1lbW1hcF90YWlsc1tpZHhdKTtcbitcdH1cbitcbitcdHJldHVybiB0YWlsO1xuK31cbitcbiAvKipcbiAgKiB2bWVtbWFwX3JlbWFwX2FsbG9jIC0gcmVtYXAgdGhlIHZtZW1tYXAgdmlydHVhbCBhZGRyZXNzIHJhbmdlIFtAc3RhcnQsIGVuZClcbiAgKlx0XHRcdCB0byB0aGUgcGFnZSB3aGljaCBpcyBmcm9tIHRoZSBAdm1lbW1hcF9wYWdlc1xuICAqXHRcdFx0IHJlc3BlY3RpdmVseS5cbisgKiBAaDpcdFx0dGhlIGhzdGF0ZSBmb3IgdGhlIGZvbGlvIHdob3NlIHZtZW1tYXAgaXMgZ2V0dGluZyByZW1hcHBlZFxuKyAqIEBmb2xpbzpcdHRoZSBmb2xpbyB3aG9zZSB2bWVtbWFwIGlzIGdldHRpbmcgcmVtYXBwZWRcbiAgKiBAc3RhcnQ6XHRzdGFydCBhZGRyZXNzIG9mIHRoZSB2bWVtbWFwIHZpcnR1YWwgYWRkcmVzcyByYW5nZSB0aGF0IHdlIHdhbnRcbiAgKlx0XHR0byByZW1hcC5cbiAgKiBAZW5kOlx0ZW5kIGFkZHJlc3Mgb2YgdGhlIHZtZW1tYXAgdmlydHVhbCBhZGRyZXNzIHJhbmdlIHRoYXQgd2Ugd2FudCB0b1xuQEAgLTM2OSwyMCArNDMzLDY4IEBAIHN0YXRpYyBpbnQgYWxsb2Nfdm1lbW1hcF9wYWdlX2xpc3QodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gICpcbiAgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuICAqL1xuLXN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9hbGxvYyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbitzdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfYWxsb2MoY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4ge1xuIFx0TElTVF9IRUFEKHZtZW1tYXBfcGFnZXMpO1xuLVx0c3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayB3YWxrID0ge1xuK1x0c3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayB3YWxrO1xuK1x0c3RydWN0IHBhZ2UgKnZtZW1tYXBfdGFpbDtcbitcdGludCByZXQ7XG4rXG4rXHR2bWVtbWFwX3RhaWwgPSB2bWVtbWFwX2dldF90YWlsKGgtXHUwMDNlb3JkZXIsIGZvbGlvX3pvbmUoZm9saW8pKTtcbitcdGlmIChXQVJOX09OX09OQ0UoIXZtZW1tYXBfdGFpbCkpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0aWYgKGFsbG9jX3ZtZW1tYXBfcGFnZV9saXN0KHN0YXJ0LCBlbmQsIFx1MDAyNnZtZW1tYXBfcGFnZXMpKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHdhbGsgPSAoc3RydWN0IHZtZW1tYXBfcmVtYXBfd2Fsaykge1xuIFx0XHQucmVtYXBfcHRlXHQ9IHZtZW1tYXBfcmVzdG9yZV9wdGUsXG4rXHRcdC52bWVtbWFwX3RhaWxcdD0gdm1lbW1hcF90YWlsLFxuIFx0XHQudm1lbW1hcF9wYWdlc1x0PSBcdTAwMjZ2bWVtbWFwX3BhZ2VzLFxuIFx0XHQuZmxhZ3NcdFx0PSBmbGFncyxcbiBcdH07XG4gXG4tXHRpZiAoYWxsb2Nfdm1lbW1hcF9wYWdlX2xpc3Qoc3RhcnQsIGVuZCwgXHUwMDI2dm1lbW1hcF9wYWdlcykpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0cmV0ID0gdm1lbW1hcF9yZW1hcF9yYW5nZShzdGFydCwgZW5kLCBcdTAwMjZ3YWxrKTtcbiBcbi1cdHJldHVybiB2bWVtbWFwX3JlbWFwX3JhbmdlKHN0YXJ0LCBlbmQsIFx1MDAyNndhbGspO1xuK1x0LyogTm90IGFsbCBwYWdlcyBtYXkgaGF2ZSBiZWVuIGNvbnN1bWVkICovXG4rXHRmcmVlX3ZtZW1tYXBfcGFnZV9saXN0KFx1MDAyNnZtZW1tYXBfcGFnZXMpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rZW51bSBodWdldGxiX2h2b19zdGF0dXMge1xuK1x0SFZPX0lOQUNUSVZFID0gMCxcbitcdEhWT19BQ1RJVkUsXG4rXHRIVk9fUEVSTUFORU5UTFlfSU5BQ1RJVkUsXG4rfTtcbitzdGF0aWMgZW51bSBodWdldGxiX2h2b19zdGF0dXMgaHZvX3N0YXR1cyA9IEhWT19JTkFDVElWRTtcbitcbitzdGF0aWMgYm9vbCBodWdldGxiX2h2b19zdGF0dXNfdHJ5X3NldChlbnVtIGh1Z2V0bGJfaHZvX3N0YXR1cyBzdGF0dXMpXG4re1xuK1x0ZW51bSBodWdldGxiX2h2b19zdGF0dXMgb2xkO1xuK1xuK1x0b2xkID0gUkVBRF9PTkNFKGh2b19zdGF0dXMpO1xuK1xuK3JldHJ5OlxuK1x0LyogVGhlIGN1cnJlbnQgc2V0dGluZyBpcyB3aGF0IHdlIHdhbnQuICovXG4rXHRpZiAob2xkID09IHN0YXR1cylcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHQvKiBUaGUgY3VycmVudCBzZXR0aW5nIGNhbm5vdCBiZSBjaGFuZ2VkLiAqL1xuK1x0aWYgKG9sZCAhPSBIVk9fSU5BQ1RJVkUpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICghdHJ5X2NtcHhjaGdfcmVsYXhlZChcdTAwMjZodm9fc3RhdHVzLCBcdTAwMjZvbGQsIHN0YXR1cykpXG4rXHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rYm9vbCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKHZvaWQpXG4re1xuK1x0cmV0dXJuIGh1Z2V0bGJfaHZvX3N0YXR1c190cnlfc2V0KEhWT19QRVJNQU5FTlRMWV9JTkFDVElWRSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIHZtZW1tYXBfb3B0aW1pemVfZW5hYmxlZCA9IElTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT04pO1xuQEAgLTQxNSw3ICs1MjcsNyBAQCBzdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCxcbiBcdCAqIFdoZW4gYSBIdWdlVExCIHBhZ2UgaXMgZnJlZWQgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgcHJldmlvdXNseVxuIFx0ICogZGlzY2FyZGVkIHZtZW1tYXAgcGFnZXMgbXVzdCBiZSBhbGxvY2F0ZWQgYW5kIHJlbWFwcGluZy5cbiBcdCAqL1xuLVx0cmV0ID0gdm1lbW1hcF9yZW1hcF9hbGxvYyh2bWVtbWFwX3N0YXJ0LCB2bWVtbWFwX2VuZCwgZmxhZ3MpO1xuK1x0cmV0ID0gdm1lbW1hcF9yZW1hcF9hbGxvYyhoLCBmb2xpbywgdm1lbW1hcF9zdGFydCwgdm1lbW1hcF9lbmQsIGZsYWdzKTtcbiBcdGlmICghcmV0KVxuIFx0XHRmb2xpb19jbGVhcl9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKTtcbiBcbkBAIC00ODcsMzYgKzU5OSwxNiBAQCBzdGF0aWMgYm9vbCB2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9mb2xpbyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKlxuIFx0aWYgKCFSRUFEX09OQ0Uodm1lbW1hcF9vcHRpbWl6ZV9lbmFibGVkKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKCFodWdldGxiX3ZtZW1tYXBfb3B0aW1pemFibGUoaCkpXG4rXHRpZiAoIWFyY2hfaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl9zdXBwb3J0ZWQoKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0cmV0dXJuIHRydWU7XG4tfVxuLVxuLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqdm1lbW1hcF9nZXRfdGFpbCh1bnNpZ25lZCBpbnQgb3JkZXIsIHN0cnVjdCB6b25lICp6b25lKVxuLXtcbi1cdGNvbnN0IHVuc2lnbmVkIGludCBpZHggPSBvcmRlciAtIFZNRU1NQVBfVEFJTF9NSU5fT1JERVI7XG4tXHRzdHJ1Y3QgcGFnZSAqdGFpbCwgKnA7XG4tXHRpbnQgbm9kZSA9IHpvbmVfdG9fbmlkKHpvbmUpO1xuLVxuLVx0dGFpbCA9IFJFQURfT05DRSh6b25lLVx1MDAzZXZtZW1tYXBfdGFpbHNbaWR4XSk7XG4tXHRpZiAobGlrZWx5KHRhaWwpKVxuLVx0XHRyZXR1cm4gdGFpbDtcbi1cbi1cdHRhaWwgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCAwKTtcbi1cdGlmICghdGFpbClcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRwID0gcGFnZV90b192aXJ0KHRhaWwpO1xuLVx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIFBBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgcGFnZSk7IGkrKylcbi1cdFx0aW5pdF9jb21wb3VuZF90YWlsKHAgKyBpLCBOVUxMLCBvcmRlciwgem9uZSk7XG4rXHRpZiAoIWh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YWJsZShoKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKGNtcHhjaGcoXHUwMDI2em9uZS1cdTAwM2V2bWVtbWFwX3RhaWxzW2lkeF0sIE5VTEwsIHRhaWwpKSB7XG4tXHRcdF9fZnJlZV9wYWdlKHRhaWwpO1xuLVx0XHR0YWlsID0gUkVBRF9PTkNFKHpvbmUtXHUwMDNldm1lbW1hcF90YWlsc1tpZHhdKTtcbi1cdH1cbitcdGlmICghaHVnZXRsYl9odm9fc3RhdHVzX3RyeV9zZXQoSFZPX0FDVElWRSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiB0YWlsO1xuK1x0cmV0dXJuIHRydWU7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCxcbkBAIC01NzQsNyArNjY2LDExIEBAIHN0YXRpYyBpbnQgX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0XHRcdCB2bWVtbWFwX2hlYWQsIHZtZW1tYXBfdGFpbCxcbiBcdFx0XHRcdCB2bWVtbWFwX3BhZ2VzLCBmbGFncyk7XG4gb3V0OlxuLVx0aWYgKHJldClcbitcdC8qXG4rXHQgKiBJZiByZXQgPT0gVk1FTU1BUF9SRU1BUF9JTkNPTVBMRVRFLCB0aGUgZm9saW8gbWlnaHQgYmUgcGFydGlhbGx5XG4rXHQgKiBIVk9lZC4gTGVhdmUgdGhlIEhWTyBwYWdlIGZvbGlvIGZsYWcgaW4gcGxhY2UuXG4rXHQgKi9cbitcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC03MTcsNiArODEzLDE0IEBAIHN0YXRpYyBib29sIHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2Jvb3RtZW1fcGFnZShzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgKm0pXG4gXHRpZiAoIVJFQURfT05DRSh2bWVtbWFwX29wdGltaXplX2VuYWJsZWQpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4rXHQvKlxuK1x0ICogQXJjaGl0ZWN0dXJlcyBtYXkgcmV0dXJuIGZhbHNlIGhlcmUgYnV0IHRydWUgYnkgdGhlIHRpbWVcbitcdCAqIGh1Z2V0bGJfaW5pdCgpIGlzIGNhbGxlZC4gSW4gdGhpcyBjYXNlLCBhbHRob3VnaCB0aGUgZm9saW9zIHdpbGxcbitcdCAqIG5vdCBiZSBwcmUtSFZPZWQsIHRoZXkgd2lsbCBiZSBvcHRpbWl6ZWQgaW4gaHVnZXRsYl9pbml0KCkuXG4rXHQgKi9cbitcdGlmICghYXJjaF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3N1cHBvcnRlZCgpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHRpZiAoIWh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YWJsZShtLVx1MDAzZWhzdGF0ZSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC03NDIsNiArODQ2LDkgQEAgc3RhdGljIGJvb2wgdm1lbW1hcF9zaG91bGRfb3B0aW1pemVfYm9vdG1lbV9wYWdlKHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqbSlcbiBcdCAgICAhSVNfQUxJR05FRChwc2l6ZSwgcG1kX3ZtZW1tYXBfc2l6ZSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdGlmICghaHVnZXRsYl9odm9fc3RhdHVzX3RyeV9zZXQoSFZPX0FDVElWRSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiX3ZtZW1tYXAuaCBiL21tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oXG5zaW1pbGFyaXR5IGluZGV4IDk1JVxucmVuYW1lIGZyb20gbW0vaHVnZXRsYl92bWVtbWFwLmhcbnJlbmFtZSB0byBtbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaFxuaW5kZXggMThiNDkwODI1MjE1M2QuLjZiMjg3ODAwMTRiYzE4IDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYl92bWVtbWFwLmhcbisrKyBiL21tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oXG5AQCAtNiw4ICs2LDggQEBcbiAgKlxuICAqICAgICBBdXRob3I6IE11Y2h1biBTb25nIFx1MDAzY3NvbmdtdWNodW5AYnl0ZWRhbmNlLmNvbVx1MDAzZVxuICAqL1xuLSNpZm5kZWYgX0xJTlVYX0hVR0VUTEJfVk1FTU1BUF9IXG4tI2RlZmluZSBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0hcbisjaWZuZGVmIF9NTV9IVUdFVExCX1ZNRU1NQVBfSU5URVJOQUxfSFxuKyNkZWZpbmUgX01NX0hVR0VUTEJfVk1FTU1BUF9JTlRFUk5BTF9IXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcdTAwM2VcbkBAIC05NSw0ICs5NSw0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemFibGUoY29uc3Qgc3RydWN0IGhzdGF0ZSAqaClcbiB7XG4gXHRyZXR1cm4gaHVnZXRsYl92bWVtbWFwX29wdGltaXphYmxlX3NpemUoaCkgIT0gMDtcbiB9XG4tI2VuZGlmIC8qIF9MSU5VWF9IVUdFVExCX1ZNRU1NQVBfSCAqL1xuKyNlbmRpZiAvKiBfTU1fSFVHRVRMQl9WTUVNTUFQX0lOVEVSTkFMX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9zcGFyc2Utdm1lbW1hcC5jIGIvbW0vc3BhcnNlLXZtZW1tYXAuY1xuaW5kZXggOTllMmJlMzk2NzFiNjMuLjk0ZDVkYTlmOGFiN2MxIDEwMDY0NFxuLS0tIGEvbW0vc3BhcnNlLXZtZW1tYXAuY1xuKysrIGIvbW0vc3BhcnNlLXZtZW1tYXAuY1xuQEAgLTMyLDcgKzMyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZG1hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiZmx1c2guaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwiaHVnZXRsYl92bWVtbWFwLmhcIlxuKyNpbmNsdWRlIFwiaHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmhcIlxuIFxuIC8qXG4gICogRmxhZ3MgZm9yIHZtZW1tYXBfcG9wdWxhdGVfcmFuZ2UgYW5kIGZyaWVuZHMuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNToxMjoyNC43MzUyMTgwNjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTE4ODE0MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0IGJyaW5ncyBBUk02NCBzdXBwb3J0IHRvIEh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24sIG9yIEhWTy4gSXQncyBhIGZ1bmRhbWVudGFsIGNoYW5nZSwgYWRkaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmdW5jdGlvbnMgbGlrZSBgYXJjaF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3N1cHBvcnRlZCgpYCwgYHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZCgpYCwgYW5kIGB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKClgIGFsb25nIHdpdGggdGhlIG5lY2Vzc2FyeSBjb3JlIGxvZ2ljIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBtbS9odWdldGxiX3ZtZW1tYXAuY2AuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24gZ2l2ZW4gaXRzIGltcGFjdCBvbiBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gSHVnZVRMQiBtYW5hZ2VtZW50LlxuXG5Ob3csIGxldCdzIHplcm8gaW4gb24gdGhlIGtleSBhcmVhcyB3aXRoaW4gYG1tL2h1Z2V0bGJfdm1lbW1hcC5jYCB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgZnVuY3Rpb25zIGFzIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgZm9yIHRlc3Rpbmc6IGB2bWVtbWFwX3NwbGl0X3BtZGAsIGB2bWVtbWFwX3BtZF9lbnRyeWAsIGB2bWVtbWFwX3B0ZV9lbnRyeWAsIGB2bWVtbWFwX3JlbWFwX3JhbmdlYCwgYHZtZW1tYXBfcmVtYXBfcHRlYCwgYHZtZW1tYXBfcmVzdG9yZV9wdGVgLCBgdm1lbW1hcF9yZW1hcF9mcmVlYCwgYHZtZW1tYXBfcmVtYXBfYWxsb2NgLCBgaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZWAsIGBfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvYCwgYHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2ZvbGlvYCwgYF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvYCwgYW5kIGB2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9ib290bWVtX3BhZ2VgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB3aGVyZSB0aGUgQVJNNjQgaW50ZWdyYXRpb24gd2lsbCBtb3N0IGxpa2VseSBpbnRyb2R1Y2UgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciByZWdyZXNzaW9ucy5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGFyY2gvYXJtNjQvS2NvbmZpZ2Agd2hpY2ggaW5kaWNhdGVzIHRoYXQgYHNlbGVjdCBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQIGlmIEFSTTY0X0hXX0FGREJNYCBpcyByZWxldmFudC4gVGhpcyBsZWFkcyBtZSB0byBiZWxpZXZlIHRoYXQgYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQYCBpcyBhIGNlbnRyYWwgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4gYEFSTTY0X0hXX0FGREJNYCBhbHNvIHNlZW1zIGltcG9ydGFudCBhcyBhIGRlcGVuZGVudCBjb25maWcuIFRoZSBjaGFuZ2VzIGluIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaGAgd2hpY2ggcmVmZXJlbmNlcyBgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQYCBmdXJ0aGVyIGNvbmZpcm1zIHRoYXQgYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQYCBpcyB0aGUga2V5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdmVyaWZ5IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGR1cmluZyBteSB0ZXN0aW5nIHRvIGVuc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBhcmUgZXhlcmNpc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjIxOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjEyOjMyLjg1NDAzNTQ2NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY3MDU2MjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0PTk1PUtlcm5lbCBwYXJhbWV0ZXJzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDg1LVxcdGh1Z2V0bGJfZnJlZV92bWVtbWFwPVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0OjIwODY6XFx0XFx0XFx0W0tOTF0gUmVxdWlyZXMgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA4Ny1cXHRcXHRcXHRlbmFibGVkLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA5NS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dDoyMDk2OlxcdFxcdFxcdEJ1aWx0IHdpdGggQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT049eSxcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDk3LVxcdFxcdFxcdHRoZSBkZWZhdWx0IGlzIG9uLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q9MTc0PWh1Z2V0bGJfZnJlZV92bWVtbWFwXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q6MTc1OlxcdFdoZW4gQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQIGlzIHNldCwgdGhpcyBlbmFibGVzIEh1Z2VUTEJcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdC0xNzYtXFx0Vm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykuXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaD0xND1jcHVjYXBfaXNfcG9zc2libGUoY29uc3QgdW5zaWduZWQgaW50IGNhcClcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1Y2Fwcy5oLTc4LVxcdGNhc2UgQVJNNjRfSFZPX0NPTVBBVElCTEU6XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVjYXBzLmg6Nzk6XFx0XFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaC04MC1cXHR9XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MjE4NT1zdGF0aWMgYm9vbCBsYXRlX2NwdV9lbmFibGVfaHZvKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjE4Ni17XFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIxODc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTg4LVxcdGlmIChjcHVfaGFzX2h3X2FmKCkpXFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS92ZHNvL3Zkc28zMi9mYWtlXzMyYml0X2J1aWxkLmgtMTMtI3VuZGVmIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUFxcbmFyY2gveDg2L2VudHJ5L3Zkc28vdmRzbzMyL2Zha2VfMzJiaXRfYnVpbGQuaDoxNDojdW5kZWYgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuYXJjaC94ODYvZW50cnkvdmRzby92ZHNvMzIvZmFrZV8zMmJpdF9idWlsZC5oLTE1LSN1bmRlZiBDT05GSUdfTlJfQ1BVU1xcbi0tXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jPTEzMTY9c3RhdGljIHZvaWQgX19pbml0IHJlZ2lzdGVyX3BhZ2VfYm9vdG1lbV9pbmZvKHZvaWQpXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzMTcte1xcbmFyY2gveDg2L21tL2luaXRfNjQuYzoxMzE4OiNpZiBkZWZpbmVkKENPTkZJR19OVU1BKSB8fCBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUClcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTMxOS1cXHRpbnQgaTtcXG4tLVxcbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXFxuZnMvS2NvbmZpZy0yNjQtXFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG5mcy9LY29uZmlnLTI2NS1cXHRkZWZhdWx0IG5cXG5mcy9LY29uZmlnOjI2NjpcXHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuZnMvS2NvbmZpZy0yNjctXFx0aGVscFxcbi0tXFxuZnMvS2NvbmZpZz0yNzM9Y29uZmlnIEhVR0VUTEJfUEFHRVxcbi0tXFxuZnMvS2NvbmZpZy0yNzYtXFxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuZnMvS2NvbmZpZy0yNzgtXFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaD0xMzI9c3RhdGljIGlubGluZSBib29sIGFyY2hfaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl9zdXBwb3J0ZWQodm9pZClcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaC0xMzMte1xcbmluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oOjEzNDpcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApO1xcbmluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oLTEzNS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oLTYtXFxuaW5jbHVkZS9saW51eC9odWdldGxiX3ZtZW1tYXAuaDo3OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oLTgtXFxuaW5jbHVkZS9saW51eC9odWdldGxiX3ZtZW1tYXAuaD05PWJvb2wgaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZSh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oLTEwLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYl92bWVtbWFwLmg6MTE6I2Vsc2UgLyogQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQICovXFxuaW5jbHVkZS9saW51eC9odWdldGxiX3ZtZW1tYXAuaC0xMi1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTA1LSNkZWZpbmUgTUFYX0ZPTElPX1ZNRU1NQVBfQUxJR04gXFxcXFxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTA2OlxcdChJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUCkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTA3LVxcdCBpc19wb3dlcl9vZl8yKHNpemVvZihzdHJ1Y3QgcGFnZSkpID8gXFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD05Njg9c3RydWN0IHpvbmUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMTQ4LVxcdGF0b21pY19sb25nX3RcXHRcXHR2bV9udW1hX2V2ZW50W05SX1ZNX05VTUFfRVZFTlRfSVRFTVNdO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTE0OTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMTUwLVxcdHN0cnVjdCBwYWdlICp2bWVtbWFwX3RhaWxzW05SX1ZNRU1NQVBfVEFJTFNdO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MjA4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBjb21wb3VuZF9pbmZvX2hhc19tYXNrKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0yMTctXFx0ICovXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MjE4OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApKVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTIxOS1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9NYWtlZmlsZT04ND1lbmRpZlxcbm1tL01ha2VmaWxlOjg1Om9iai0kKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUClcXHQrPSBodWdldGxiX3ZtZW1tYXAub1xcbm1tL01ha2VmaWxlLTg2LW9iai0kKENPTkZJR19OVU1BKSBcXHQrPSBtZW1wb2xpY3kub1xcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmM9NDk1PWJvb2wgaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZSh2b2lkKVxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNDk5LVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjUwMDpzdGF0aWMgYm9vbCB2bWVtbWFwX29wdGltaXplX2VuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OKTtcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy01MDEtc3RhdGljIGludCBfX2luaXQgaHVnZXRsYl92bWVtbWFwX29wdGltaXplX3BhcmFtKGNoYXIgKmJ1ZilcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oLTIxLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oOjIyOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG5tbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaC0yMy1pbnQgaHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5tbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaD04OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemFibGVfc2l6ZShjb25zdCBzdHJ1Y3QgaHN0YXRlICpoKVxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmgtOTEtfVxcbm1tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oOjkyOiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVAgKi9cXG5tbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaC05My1cXG4tLVxcbm1tL3NwYXJzZS12bWVtbWFwLmM9MzExPXZvaWQgdm1lbW1hcF93cnByb3RlY3RfaHZvKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9zcGFyc2Utdm1lbW1hcC5jLTMyMi1cXG5tbS9zcGFyc2Utdm1lbW1hcC5jOjMyMzojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxubW0vc3BhcnNlLXZtZW1tYXAuYy0zMjQtc3RhdGljIF9fbWVtaW5pdCBzdHJ1Y3QgcGFnZSAqdm1lbW1hcF9nZXRfdGFpbCh1bnNpZ25lZCBpbnQgb3JkZXIsIHN0cnVjdCB6b25lICp6b25lKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNToxMjozNC45MjExMjY1ODZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTIwMzYwNjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBIdWdlVExCIFZNRU1NQVAgT3B0aW1pemF0aW9uKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIGNvbmZpZ3VyZSB0aGlzIGtlcm5lbCBmb3Igb3B0aW1pemVkIEh1Z2VUTEIgdm1lbW1hcCB1c2FnZS4gVGhlIGtleSBjb25maWcgb3B0aW9uIHNlZW1zIHRvIGJlIGBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBpdCBpcyBlbmFibGVkLlxuXG5JIHNob3VsZCBhbHNvIGNoZWNrIGBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OYCB0byBndWFyYW50ZWUgaXQncyBlbmFibGVkIGJ5IGRlZmF1bHQsIHRoaXMgd2lsbCBzYXZlIGFueSBwb3RlbnRpYWwgaGVhZGFjaGVzIGRvd24gdGhlIGxpbmUuIEkgYWx3YXlzIHByZWZlciBzZW5zaWJsZSBkZWZhdWx0cyFcblxuVG8gY29uZmlybSBpZiB0aGlzIGlzIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5IGZvciB0aGlzIGFyY2hpdGVjdHVyZSwgSSBzaG91bGQgYWxzbyBsb29rIGluIGBhcmNoL2FybTY0L0tjb25maWdgIGZvciBgQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUGAuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29udGV4dCBhbmQgYW55IHBsYXRmb3JtIGNvbnNpZGVyYXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0NDMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNToxMjozOC44NDE0OTAyMzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1MzI3MTMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTI2MS1cXHRzZWxlY3QgVk1BUF9TVEFDS1xcbmFyY2gvYXJtNjQvS2NvbmZpZzoyNjI6XFx0c2VsZWN0IEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVAgaWYgQVJNNjRfSFdfQUZEQk1cXG5hcmNoL2FybTY0L0tjb25maWctMjYzLVxcdGhlbHBcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mj1jb25maWcgTE9PTkdBUkNIXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTgyLVxcdHNlbGVjdCBBUkNIX1dBTlRfTERfT1JQSEFOX1dBUk5cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjgzOlxcdHNlbGVjdCBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQIGlmIDY0QklUXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy04NC1cXHRzZWxlY3QgQVJDSF9XQU5UU19OT19JTlNUUlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTg4LVxcdHNlbGVjdCBBUkNIX1dBTlRfT1BUSU1JWkVfREFYX1ZNRU1NQVBcXG5hcmNoL3Jpc2N2L0tjb25maWc6ODk6XFx0c2VsZWN0IEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBcXG5hcmNoL3Jpc2N2L0tjb25maWctOTAtXFx0c2VsZWN0IEFSQ0hfV0FOVFNfTk9fSU5TVFJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xNDgtXFx0c2VsZWN0IEFSQ0hfV0FOVF9PUFRJTUlaRV9EQVhfVk1FTU1BUFxcdGlmIFg4Nl82NFxcbmFyY2gveDg2L0tjb25maWc6MTQ5OlxcdHNlbGVjdCBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXFx0aWYgWDg2XzY0XFxuYXJjaC94ODYvS2NvbmZpZy0xNTAtXFx0c2VsZWN0IEFSQ0hfV0FOVF9IVUdFVExCX1ZNRU1NQVBfUFJFSU5JVCBpZiBYODZfNjRcXG4tLVxcbmZzL0tjb25maWc9Mjc3PWNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWctMjc4LVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbmZzL0tjb25maWc6Mjc5OlxcdGRlcGVuZHMgb24gQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUFxcbmZzL0tjb25maWctMjgwLVxcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcXG4tLVxcbm1tL0tjb25maWc9NDcyPWNvbmZpZyBBUkNIX1dBTlRfT1BUSU1JWkVfREFYX1ZNRU1NQVBcXG4tLVxcbm1tL0tjb25maWctNDc0LVxcbm1tL0tjb25maWc6NDc1OmNvbmZpZyBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXFxubW0vS2NvbmZpZy00NzYtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNToxMjo0MC43OTQ3Njg3NzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Mzc4NTM0MDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaHVnZXRsYl92bWVtbWFwIE9wdGltaXphdGlvbiBmb3IgQVJNNjQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UncmUgZW5hYmxpbmcgYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQYCBzcGVjaWZpY2FsbHkgZm9yIEFSTTY0LCBjb250aW5nZW50IG9uIGEgZmV3IG90aGVyIGNvbmZpZ3VyYXRpb25zLiAgYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQYCBoaW5nZXMgb24gYEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBgIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBPbiBBUk02NCwgYEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBgIGlzIHNlbGVjdGVkICppZiogYEFSTTY0X0hXX0FGREJNYCBpcyBhY3RpdmUuICBTbywgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBoZXJlIGlzIHRvIGVuYWJsZSBgQVJNNjRfSFdfQUZEQk1gIGFsb25nc2lkZSBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBgIGFuZCBpdHMgZGVmYXVsdC1vbiBzZXR0aW5nLCBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTmAuIEdvb2QsIGdvdCB0aGUgZGVwZW5kZW5jaWVzIGxpbmVkIHVwLlxuXG5Ob3csIHdoZXJlJ3MgdGhlIG1lYXQgb2YgdGhpcyBvcHRpbWl6YXRpb24gaGFwcGVuaW5nPyBUaGUgcGF0Y2ggdG91Y2hlcyBgbW0vaHVnZXRsYl92bWVtbWFwLmNgLCBzbyB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gTGV0J3Mgc2VlLi4uIGEgcXVpY2sgc2NhbiByZXZlYWxzIGEgYnVuY2ggb2YgcmVsZXZhbnQgZnVuY3Rpb25zLiAgSSBuZWVkIHRvIHByaW9yaXRpemUgYW5kIHJlYWxseSBkaWcgaW50byB0aGVzZTpcblxuKiAgIGB2bWVtbWFwX3NwbGl0X3BtZGBcbiogICBgdm1lbW1hcF9wbWRfZW50cnlgXG4qICAgYHZtZW1tYXBfcHRlX2VudHJ5YFxuKiAgIGB2bWVtbWFwX3JlbWFwX3JhbmdlYFxuKiAgIGB2bWVtbWFwX3JlbWFwX3B0ZWBcbiogICBgdm1lbW1hcF9yZXN0b3JlX3B0ZWBcbiogICBgdm1lbW1hcF9yZW1hcF9mcmVlYFxuKiAgIGB2bWVtbWFwX3JlbWFwX2FsbG9jYFxuKiAgIGBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlYFxuKiAgIGBfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvYFxuKiAgIGB2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9mb2xpb2BcbiogICBgX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW9gXG4qICAgYHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2Jvb3RtZW1fcGFnZWBcblxuV2FpdCwgdGhlcmUgYXJlIGEgY291cGxlIG9mIGlubGluZSBmdW5jdGlvbnMgYXMgd2VsbDogYHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZGAgYW5kIGB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlYCwgbG9jYXRlZCBpbiBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhgIGFuZCBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhgLiBTaW5jZSB0aGV5J3JlIGlubGluZSwgdGhleSdyZSBwcm9iYWJseSBnZXR0aW5nIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGZ1bmN0aW9ucyB0aGF0IHVzZSB0aGVtLCBsaWtlIHRoZSBgdm1lbW1hcF9zcGxpdF9wbWRgIGFuZCBgdm1lbW1hcF9yZW1hcF9wdGVgLiBJJ2xsIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSBhbmFseXplIHRoZSBjb2RlIGZsb3cuXG5cblNvLCBsZXQncyByZWZpbmUgdGhhdCBsaXN0IG9mIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZGlzc2VjdDpcblxuKiAgIGB2bWVtbWFwX3NwbGl0X3BtZGBcbiogICBgdm1lbW1hcF9yZW1hcF9wdGVgXG4qICAgYHZtZW1tYXBfcmVzdG9yZV9wdGVgXG4qICAgYHZtZW1tYXBfcmVtYXBfZnJlZWBcbiogICBgdm1lbW1hcF9yZW1hcF9hbGxvY2BcbiogICBgaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZWBcbiogICBgX19odWdldGxiX3ZtZW1tYXBfcmVzdG9yZV9mb2xpb2BcbiogICBgX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW9gXG5cblJpZ2h0LCBnb3QgaXQuIE5vdyBJIGp1c3QgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbGwgdGhlc2UgZnVuY3Rpb25zIGFjdHVhbGx5IGV4aXN0IGFzIGV4cGVjdGVkIGluIGBtbS9odWdldGxiX3ZtZW1tYXAuY2AuIEEgcXVpY2sgY2hlY2sgd2lsbCBjb25maXJtIHRoaXMgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBhY3R1YWwgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNzYsIk91dHB1dFRva2VucyI6NTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6MTI6NTAuMTczMzA1MjAxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1ODgxNjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KGludHx2b2lkfGJvb2wpIFthLXpBLVowLTlfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdldGxiX3ZtZW1tYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiX3ZtZW1tYXAuYz0zOD1zdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrIHtcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTU0LVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjU1OnN0YXRpYyBpbnQgdm1lbW1hcF9zcGxpdF9wbWQocG1kX3QgKnBtZCwgc3RydWN0IHBhZ2UgKmhlYWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNTYtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrICp3YWxrKVxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtMTA4LVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjEwOTpzdGF0aWMgaW50IHZtZW1tYXBfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0xMTAtXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtMTQ5LVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjE1MDpzdGF0aWMgaW50IHZtZW1tYXBfcHRlX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0xNTEtXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmM9MTYzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgdm1lbW1hcF9yZW1hcF9vcHMgPSB7XFxuLS1cXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0xNjctXFxubW0vaHVnZXRsYl92bWVtbWFwLmM6MTY4OnN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0xNjktXFx0XFx0XFx0ICAgICAgIHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspXFxuLS1cXG5tbS9odWdldGxiX3ZtZW1tYXAuYz0xOTI9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfdm1lbW1hcF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtMjAzLS8qIEZyZWUgYSBsaXN0IG9mIHRoZSB2bWVtbWFwIHBhZ2VzICovXFxubW0vaHVnZXRsYl92bWVtbWFwLmM6MjA0OnN0YXRpYyB2b2lkIGZyZWVfdm1lbW1hcF9wYWdlX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0yMDUte1xcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtMjExLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjIxMjpzdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfcHRlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0yMTMtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrICp3YWxrKVxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtMjU5LVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjI2MDpzdGF0aWMgaW50IHZtZW1tYXBfcmVzdG9yZV9wdGUocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTI2MS1cXHRcXHRcXHQgICAgICAgc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqd2FsaylcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTMwNC0gKi9cXG5tbS9odWdldGxiX3ZtZW1tYXAuYzozMDU6c3RhdGljIGludCB2bWVtbWFwX3JlbWFwX3NwbGl0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTMwNi17XFxuLS1cXG5tbS9odWdldGxiX3ZtZW1tYXAuYz0zMTU9c3RhdGljIGNvbnN0IGludCBWTUVNTUFQX1JFTUFQX0lOQ09NUExFVEUgPSAxO1xcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtMzMyLSAqL1xcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjMzMzpzdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfZnJlZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0zMzQtXFx0XFx0XFx0ICAgICAgc3RydWN0IHBhZ2UgKnZtZW1tYXBfaGVhZCxcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTM3MS1cXG5tbS9odWdldGxiX3ZtZW1tYXAuYzozNzI6c3RhdGljIGludCBhbGxvY192bWVtbWFwX3BhZ2VfbGlzdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0zNzMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTM5Nj1zdGF0aWMgc3RydWN0IHBhZ2UgKnZtZW1tYXBfZ2V0X3RhaWwodW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgem9uZSAqem9uZSlcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTQzNS0gKi9cXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo0MzY6c3RhdGljIGludCB2bWVtbWFwX3JlbWFwX2FsbG9jKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNDM3LVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTQ3Mj1zdGF0aWMgZW51bSBodWdldGxiX2h2b19zdGF0dXMgaHZvX3N0YXR1cyA9IEhWT19JTkFDVElWRTtcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy00NzMtXFxubW0vaHVnZXRsYl92bWVtbWFwLmM6NDc0OnN0YXRpYyBib29sIGh1Z2V0bGJfaHZvX3N0YXR1c190cnlfc2V0KGVudW0gaHVnZXRsYl9odm9fc3RhdHVzIHN0YXR1cylcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy00NzUte1xcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNDk0LVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjQ5NTpib29sIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGUodm9pZClcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy00OTYte1xcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmM9NTA1PWVhcmx5X3BhcmFtKFxcXCJodWdldGxiX2ZyZWVfdm1lbW1hcFxcXCIsIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9wYXJhbSk7XFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNTA2LVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjUwNzpzdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCxcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy01MDgtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBmbGFncylcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTU0Ni0gKi9cXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo1NDc6aW50IGh1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNTQ4LXtcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTU2NT1sb25nIGh1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvcyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNTkzLS8qIFJldHVybiB0cnVlIGlmZiBhIEh1Z2VUTEIgd2hvc2Ugdm1lbW1hcCBzaG91bGQgYW5kIGNhbiBiZSBvcHRpbWl6ZWQuICovXFxubW0vaHVnZXRsYl92bWVtbWFwLmM6NTk0OnN0YXRpYyBib29sIHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNTk1LXtcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTYxMy1cXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo2MTQ6c3RhdGljIGludCBfX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9mb2xpbyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLFxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTYxNS1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTY4OC0gKi9cXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo2ODk6dm9pZCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy02OTAte1xcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNjk2LVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjY5NzpzdGF0aWMgaW50IGh1Z2V0bGJfdm1lbW1hcF9zcGxpdF9mb2xpbyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTY5OC17XFxuLS1cXG5tbS9odWdldGxiX3ZtZW1tYXAuYy03MTMtXFxubW0vaHVnZXRsYl92bWVtbWFwLmM6NzE0OnN0YXRpYyB2b2lkIF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpoLFxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTcxNS1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNzk0LVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjc5NTp2b2lkIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy03OTYte1xcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNzk5LVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjgwMDp2b2lkIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9ib290bWVtX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTgwMS17XFxuLS1cXG5tbS9odWdldGxiX3ZtZW1tYXAuYy04MDctLyogUmV0dXJuIHRydWUgb2YgYSBib290bWVtIGFsbG9jYXRlZCBIdWdlVExCIHBhZ2Ugc2hvdWxkIGJlIHByZS1IVk8tZWQgKi9cXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo4MDg6c3RhdGljIGJvb2wgdm1lbW1hcF9zaG91bGRfb3B0aW1pemVfYm9vdG1lbV9wYWdlKHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqbSlcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy04MDkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNToxMjo1MC4yNDkxOTQ4ODlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjQ4ODg1MDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIEh1Z2V0bGIgVm1lbW1hcCBNb2RpZmljYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIGluIGBtbS9odWdldGxiX3ZtZW1tYXAuY2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIG1vZGlmaWNhdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGVpciBpbXBsaWNhdGlvbnMuIEZyb20gdGhlIHByb3ZpZGVkIGxpc3QsIGl0IGxvb2tzIGxpa2UgdGhlcmUncyBiZWVuIHNvbWUgdGFyZ2V0ZWQgd29yayBvbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBodWdlcGFnZXMgYW5kIHRoZSB2bWVtbWFwLlxuXG5JJ20gc2VlaW5nIGEgbG90IG9mIGZ1bmN0aW9ucyBoZXJlLCBidXQgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBvbmVzIHRoYXQgYXJlIGxpa2VseSB0byBiZSB0aGUgbW9zdCBjcml0aWNhbCwgYW5kIG5vdCBzaW1wbGUgZ2VuZXJpYyBob3QgcGF0aHMuIEJhc2VkIG9uIHRoZSBuYW1pbmcgYW5kIGxpa2VseSBmdW5jdGlvbiwgSSdkIHNheSB0aGUgb25lcyB0aGF0IHN0YW5kIG91dCBhcyB3b3J0aHkgb2YgaW1tZWRpYXRlIGF0dGVudGlvbiBhcmU6XG5cbiogICBgdm1lbW1hcF9zcGxpdF9wbWRgXG4qICAgYHZtZW1tYXBfcmVtYXBfcHRlYFxuKiAgIGB2bWVtbWFwX3Jlc3RvcmVfcHRlYFxuKiAgIGB2bWVtbWFwX3JlbWFwX2ZyZWVgXG4qICAgYHZtZW1tYXBfcmVtYXBfYWxsb2NgXG4qICAgYGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGVgXG4qICAgYF9faHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW9gXG4qICAgYF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvYFxuXG5UaG9zZSBzZWVtIHRvIGJlIHRoZSBvbmVzIHRoYXQgZGlyZWN0bHkgYWZmZWN0IGhvdyBwYWdlcyBhcmUgcmVtYXBwZWQsIGZyZWVkLCBhbmQgb3B0aW1pemVkIGluIHRoZSBjb250ZXh0IG9mIGh1Z2V0bGJmcy4gVGhlIGB0cnlfZGlzYWJsZWAgYW5kIGZvbGlvIGZ1bmN0aW9ucyBzdWdnZXN0IGFuIG9wdGltaXphdGlvbiBzdHJhdGVneSBpcyBpbnZvbHZlZC5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgY2hlY2sgZm9yIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJdCBsb29rcyBsaWtlIGBBUk02NF9IV19BRkRCTWAgaXMgc2VsZWN0ZWQgb24gQVJNNjQgYnkgZGVmYXVsdC4gSXMgdGhhdCBhIEtjb25maWcgb3B0aW9uIHRoYXQgaW1wYWN0cyB0aGUgYmVoYXZpb3Igb2YgdGhlc2UgZnVuY3Rpb25zPyBJIHNob3VsZCB2ZXJpZnkgdGhhdCBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDM5LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjEyOjU2LjQ5ODA4MzE1MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MzM4NDY3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVJNNjRfSFdfQUZEQk1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnPTE5MDA9bWVudSBcXFwiQVJNdjguMSBhcmNoaXRlY3R1cmFsIGZlYXR1cmVzXFxcIlxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xOTAxLVxcbmFyY2gvYXJtNjQvS2NvbmZpZzoxOTAyOmNvbmZpZyBBUk02NF9IV19BRkRCTVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xOTAzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGhhcmR3YXJlIHVwZGF0ZXMgb2YgdGhlIEFjY2VzcyBhbmQgRGlydHkgcGFnZSBmbGFnc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6MTI6NTguMzcxNDc2MDE2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NDY1OTAwMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEFSTTY0IGFuZCBIdWdlIFBhZ2VzIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgQVJNNjRfSFdfQUZEQk1gIGlzIGRlZmluaXRlbHkgYSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBzaW1wbHkgZW5hYmxlIGBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUGAsIGBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OYCwgYW5kIGBBUk02NF9IV19BRkRCTWAuXG5cbkJ1dCB0aGVuIEkgcmVtZW1iZXJlZCB0aGF0IGBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUGAgaXMgYSBgZGVmX2Jvb2xgIHRoYXQncyBjb250aW5nZW50IG9uIGBIVUdFVExCX1BBR0VgIGJlaW5nIGVuYWJsZWQuIFNvLCB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBsb2dpYyB3aWxsIGhhbmRsZSBpdHMgZW5hYmxpbmcgYXV0b21hdGljYWxseSwgKmlmKiB0aGUgZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQuIExldCdzIHNlZS4uLiB0aGUgZGVwZW5kZW5jaWVzIGFyZSBgQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUGAgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAuIEFuZCBhaC1oYSEgYEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBgICppcyogc2VsZWN0ZWQgYnkgYEFSTTY0YCBpZiBgQVJNNjRfSFdfQUZEQk1gIGlzIHNldC4gU28sIHRoZSByZWFsIGVuYWJsZXIgaGVyZSBvbiBBUk02NCBpcyBpbmRlZWQgYEFSTTY0X0hXX0FGREJNYC5cblxuVGhhdCBsZWF2ZXMgdXMgd2l0aCBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTmAuIFRoaXMgaXMgYSBib29sZWFuIG9wdGlvbiB0aGF0IGRlZmF1bHRzIHRvIFwiblwiLCBzbyB3ZSBkZWZpbml0ZWx5IHdhbnQgdG8gbWFrZSBzdXJlICp0aGF0KiBpcyBlbmFibGVkLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGJlaW5nIHNldCBjb3JyZWN0bHkgd2l0aGluIHRoZSBgZnMvS2NvbmZpZ2AgZmlsZS4gQWxzbywgbGV0J3MgYXNzdW1lIGBIVUdFVExCX1BBR0VgIGlzIGFscmVhZHkgZW5hYmxlZCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBhYm91dCB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDg4NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNToxMzowNS4xMTgwNjk2NzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjkzMTk3MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG5mcy9LY29uZmlnLTI2NC1cXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNToxMzowNi45ODc0MjY2NjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzEwOTIyMDkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgSHVnZXRsYiBWbWVtbWFwIE9wdGltaXphdGlvbiBDaGVja2xpc3QqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdGhpbmtpbmcgYWJvdXQgdGhlIGBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUGAgZmVhdHVyZS4gWWVzLCBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTmAgaXMgZGVmaW5pdGVseSB0aGUga2V5IGhlcmUg4oCTIHRoYXQncyB0aGUgZGVmYXVsdCBzdGF0ZSB3ZSdyZSBzaG9vdGluZyBmb3IuXG5cbkFscmlnaHQsIGxldCdzIG5haWwgZG93biB0aGUgY29yZSBlbGVtZW50cy4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIGFyZTogYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQYCwgYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05gLCBhbmQgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBgQVJNNjRfSFdfQUZEQk1gICh3aGljaCwga25vd2luZyBob3cgdGhlc2UgdGhpbmdzIHdvcmssIGxpa2VseSBpbnRlcmFjdHMgd2l0aCB0aGUgb3B0aW1pemF0aW9uIGluIHNvbWUgd2F5KS5cblxuTm93IGZvciB0aGUgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuIE15IGluaXRpYWwgbGlzdCB3YXM6IGB2bWVtbWFwX3NwbGl0X3BtZGAsIGB2bWVtbWFwX3JlbWFwX3B0ZWAsIGB2bWVtbWFwX3Jlc3RvcmVfcHRlYCwgYHZtZW1tYXBfcmVtYXBfZnJlZWAsIGB2bWVtbWFwX3JlbWFwX2FsbG9jYCwgYGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGVgLCBgX19odWdldGxiX3ZtZW1tYXBfcmVzdG9yZV9mb2xpb2AsIGFuZCBgX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW9gLlxuXG5CdXQsIHdhaXQsIGxldCdzIHJlZmluZSB0aGF0IGxpc3QgZm9yIGNvbXBsZXRlbmVzcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEknbGwgYWRkIGB2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9mb2xpb2AgYW5kIGB2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9ib290bWVtX3BhZ2VgIHRvIHRoZSBsaXN0LiBUaGF0IGZlZWxzIG1vcmUgY29tcGxldGUuXG5cbk9rYXksIHRoaXMgcmV2aXNlZCBsaXN0IGxvb2tzIHByZXR0eSBzb2xpZC4gSXQgY292ZXJzIHRoZSBjb3JlIG9wZXJhdGlvbnMgYW5kIGNoZWNrcyByZWxhdGVkIHRvIHRoZSB2bWVtbWFwIG9wdGltaXphdGlvbi5cblxuTGV0J3MgZG8gYSBxdWljayBzd2VlcCBmb3IgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmdW5jdGlvbnMuIEkgc2hvdWxkIGNoZWNrIGBhcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNgIG5vdy4gUmlnaHQsIEkgZm91bmQgYGxhdGVfY3B1X2VuYWJsZV9odm9gIGFuZCBgaHZvX2NvbXBhdGlibGVgLiBUaGVzZSBhcmUgYWxzbyBzdHJvbmcgY2FuZGlkYXRlcyBhbmQgY291bGQgcHJvdmlkZSBpbXBvcnRhbnQgY2x1ZXMsIHNvIHRoZXkncmUgaW4uIFRoYXQncyBnb29kLiBOb3csIEkgZmVlbCBhIGxvdCBtb3JlIGNvbmZpZGVudC4gSSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGFzcGVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2NDksIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6MTM6MTQuMDk2NjUxNDQ1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTgzMjI1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhpbnR8dm9pZHxib29sKSBbYS16QS1aMC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0xNTA9c3RhdGljIGNwdW1hc2tfdmFyX3QgY3B1XzMyYml0X2VsMF9tYXNrIF9fY3B1bWFza192YXJfcmVhZF9tb3N0bHk7XFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE1MS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTUyOnZvaWQgZHVtcF9jcHVfZmVhdHVyZXModm9pZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTUzLXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTgtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIxOTpzdGF0aWMgdm9pZCBjcHVfZW5hYmxlX2NucChzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBjb25zdCAqY2FwKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjIwLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMjE6c3RhdGljIGJvb2wgX19zeXN0ZW1fbWF0Y2hlc19jYXAodW5zaWduZWQgaW50IG4pO1xcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjItXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9Nzk4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgX19mdHJfcmVnX2VudHJ5IHtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy04NzctXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjg3ODpzdGF0aWMgaW50IHNlYXJjaF9jbXBfZnRyX3JlZyhjb25zdCB2b2lkICppZCwgY29uc3Qgdm9pZCAqcmVncClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtODc5LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz05NjQ9c3RhdGljIHZvaWQgX19pbml0IHNvcnRfZnRyX3JlZ3Modm9pZClcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xMDE5LSAqL1xcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxMDIwOnN0YXRpYyB2b2lkIGluaXRfY3B1X2Z0cl9yZWcodTMyIHN5c19yZWcsIHU2NCBuZXcpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEwMjEte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTExMTQ9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX2Jvb3RfY3B1X2NhcGFiaWxpdGllcyh2b2lkKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTExNS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTExNjpzdGF0aWMgdm9pZCBpbml0XzMyYml0X2NwdV9mZWF0dXJlcyhzdHJ1Y3QgY3B1aW5mb18zMmJpdCAqaW5mbylcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTExNy17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MTE2OT1zdGF0aWMgaW5saW5lIHZvaWQgZGV0ZWN0X3N5c3RlbV9zdXBwb3J0c19wc2V1ZG9fbm1pKHZvaWQpIHsgfVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTExNzEtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjExNzI6c3RhdGljIGJvb2wgZGV0ZWN0X2Z0cl9oYXNfbXBhbSh2b2lkKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xMTczLXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0xMTgwPXZvaWQgX19pbml0IGluaXRfY3B1X2ZlYXR1cmVzKHN0cnVjdCBjcHVpbmZvX2FybTY0ICppbmZvKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEyMzUtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjEyMzY6c3RhdGljIHZvaWQgdXBkYXRlX2NwdV9mdHJfcmVnKHN0cnVjdCBhcm02NF9mdHJfcmVnICpyZWcsIHU2NCBuZXcpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEyMzcte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEyNTItXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjEyNTM6c3RhdGljIGludCBjaGVja191cGRhdGVfZnRyX3JlZyh1MzIgc3lzX2lkLCBpbnQgY3B1LCB1NjQgdmFsLCB1NjQgYm9vdClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTI1NC17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTI2Ny1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTI2ODpzdGF0aWMgdm9pZCByZWxheF9jcHVfZnRyX3JlZyh1MzIgc3lzX2lkLCBpbnQgZmllbGQpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEyNjkte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEyODYtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjEyODc6c3RhdGljIHZvaWQgbGF6eV9pbml0XzMyYml0X2NwdV9mZWF0dXJlcyhzdHJ1Y3QgY3B1aW5mb19hcm02NCAqaW5mbyxcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTI4OC1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGNwdWluZm9fYXJtNjQgKmJvb3QpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTMwMi1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTMwMzpzdGF0aWMgaW50IHVwZGF0ZV8zMmJpdF9jcHVfZmVhdHVyZXMoaW50IGNwdSwgc3RydWN0IGNwdWluZm9fMzJiaXQgKmluZm8sXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEzMDQtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgY3B1aW5mb18zMmJpdCAqYm9vdClcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xMzc4LSAqL1xcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxMzc5OnZvaWQgdXBkYXRlX2NwdV9mZWF0dXJlcyhpbnQgY3B1LFxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xMzgwLVxcdFxcdFxcdCBzdHJ1Y3QgY3B1aW5mb19hcm02NCAqaW5mbyxcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0xNzI0PWRldmljZV9pbml0Y2FsbChhYXJjaDMyX2VsMF9zeXNmc19pbml0KTtcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTcyNS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTcyNjpzdGF0aWMgYm9vbCBoYXNfMzJiaXRfZWwwKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IHNjb3BlKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xNzI3LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xNzM2LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxNzM3OnN0YXRpYyBib29sIGhhc191c2VhYmxlX2dpY3YzX2NwdWlmKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IHNjb3BlKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xNzM4LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xNzUxLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxNzUyOnN0YXRpYyBib29sIGhhc19jYWNoZV9pZGMoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LFxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xNzUzLVxcdFxcdFxcdCAgaW50IHNjb3BlKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE3NjQtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE3NjU6c3RhdGljIHZvaWQgY3B1X2VtdWxhdGVfZWZmZWN0aXZlX2N0cihjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqX191bnVzZWQpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE3NjYte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE3NzYtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE3Nzc6c3RhdGljIGJvb2wgaGFzX2NhY2hlX2RpYyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE3NzgtXFx0XFx0XFx0ICBpbnQgc2NvcGUpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MTgwOD1zdGF0aWMgaW50IF9fa3B0aV9mb3JjZWQ7IC8qIDA6IG5vdCBmb3JjZWQsIFxcdTAwM2UwOiBmb3JjZWQgb24sIFxcdTAwM2MwOiBmb3JjZWQgb2ZmICovXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE4MDktXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE4MTA6c3RhdGljIGJvb2wgdW5tYXBfa2VybmVsX2F0X2VsMChjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE4MTEtXFx0XFx0XFx0XFx0aW50IHNjb3BlKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE4ODUtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE4ODY6c3RhdGljIGJvb2wgaGFzX252MShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBzY29wZSlcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTg4Ny17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTkwOC0jaWYgZGVmaW5lZChJRF9BQTY0TU1GUjBfRUwxX1RHUkFOX0xQQTIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoSURfQUE2NE1NRlIwX0VMMV9UR1JBTl8yX1NVUFBPUlRFRF9MUEEyKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxOTA5OnN0YXRpYyBib29sIGhhc19scGEyX2F0X3N0YWdlMSh1NjQgbW1mcjApXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5MTAte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5MTctXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE5MTg6c3RhdGljIGJvb2wgaGFzX2xwYTJfYXRfc3RhZ2UyKHU2NCBtbWZyMClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTkxOS17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTkyNi1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTkyNzpzdGF0aWMgYm9vbCBoYXNfbHBhMihjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBzY29wZSlcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTkyOC17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTkzNC0jZWxzZVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxOTM1OnN0YXRpYyBib29sIGhhc19scGEyKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IHNjb3BlKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTM2LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTQxLSNpZmRlZiBDT05GSUdfSFdfUEVSRl9FVkVOVFNcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTk0MjpzdGF0aWMgYm9vbCBoYXNfcG11djMoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LCBpbnQgc2NvcGUpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5NDMte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5NTMtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE5NTQ6c3RhdGljIHZvaWQgY3B1X2VuYWJsZV9rcHRpKHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGNvbnN0ICpjYXApXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5NTUte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTE5ODA9c3RhdGljIGlubGluZSB2b2lkIF9fY3B1X2VuYWJsZV9od19kYm0odm9pZClcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTg4LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxOTg5OnN0YXRpYyBib29sIGNwdV9oYXNfYnJva2VuX2RibSh2b2lkKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTkwLXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDA2LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMDA3OnN0YXRpYyBib29sIGNwdV9jYW5fdXNlX2RibShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDA4LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDEyLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMDEzOnN0YXRpYyB2b2lkIGNwdV9lbmFibGVfaHdfZGJtKHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGNvbnN0ICpjYXApXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIwMTQte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIwMjAtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIwMjE6c3RhdGljIGJvb2wgaGFzX2h3X2RibShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwLFxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDIyLVxcdFxcdCAgICAgICBpbnQgX191bnVzZWQpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MjA0OD1zdGF0aWMgc3RydWN0IGNwdW1hc2sgYW11X2NwdXMgX19yZWFkX21vc3RseTtcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjA0OS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjA1MDpib29sIGNwdV9oYXNfYW11X2ZlYXQoaW50IGNwdSlcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjA1MS17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjA1NC1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjA1NTppbnQgZ2V0X2NwdV93aXRoX2FtdV9mZWF0KHZvaWQpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIwNTYte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIwNTktXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIwNjA6c3RhdGljIHZvaWQgY3B1X2FtdV9lbmFibGUoc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgY29uc3QgKmNhcClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjA2MS17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjA3MC1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjA3MTpzdGF0aWMgYm9vbCBoYXNfYW11KGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXAsXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIwNzItXFx0XFx0ICAgIGludCBfX3VudXNlZClcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDg5LSNlbHNlXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIwOTA6aW50IGdldF9jcHVfd2l0aF9hbXVfZmVhdCh2b2lkKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDkxLXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDk1LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMDk2OnN0YXRpYyBib29sIHJ1bnNfYXRfZWwyKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IF9fdW51c2VkKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDk3LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTAwLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMTAxOnN0YXRpYyB2b2lkIGNwdV9jb3B5X2VsMnJlZ3MoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKl9fdW51c2VkKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTAyLXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTE0LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMTE1OnN0YXRpYyBib29sIGhhc19uZXN0ZWRfdmlydF9zdXBwb3J0KGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXAsXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIxMTYtXFx0XFx0XFx0XFx0ICAgIGludCBzY29wZSlcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTI4LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMTI5OnN0YXRpYyBib29sIGh2aGVfcG9zc2libGUoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LFxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTMwLVxcdFxcdFxcdCAgaW50IF9fdW51c2VkKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIxMzQtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIxMzU6Ym9vbCBjcHVfc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCh2b2lkKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTM2LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTcwLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMTcxOnN0YXRpYyBib29sIGhhc19iYm1sMl9ub2Fib3J0KGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXBzLCBpbnQgc2NvcGUpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIxNzIte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIxNzUtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIxNzY6c3RhdGljIGJvb2wgaHZvX2NvbXBhdGlibGUoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmNhcHMsIGludCBzY29wZSlcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjE3Ny17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjE4NC1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjE4NTpzdGF0aWMgYm9vbCBsYXRlX2NwdV9lbmFibGVfaHZvKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjE4Ni17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjIwMC1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjIwMTpzdGF0aWMgdm9pZCBjcHVfZW5hYmxlX3Bhbihjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqX191bnVzZWQpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyMDIte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyMTMtI2lmZGVmIENPTkZJR19BUk02NF9SQVNfRVhUTlxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMjE0OnN0YXRpYyB2b2lkIGNwdV9jbGVhcl9kaXNyKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjIxNS17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjIxOC19XFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIyMTk6c3RhdGljIGJvb2wgaGFzX3Jhc3YxcDEoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKl9fdW51c2VkLCBpbnQgc2NvcGUpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyMjAte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyMzktI2lmZGVmIENPTkZJR19BUk02NF9QVFJfQVVUSFxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMjQwOnN0YXRpYyBib29sIGhhc19hZGRyZXNzX2F1dGhfY3B1Y2FwKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IHNjb3BlKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjQxLXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjY1LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMjY2OnN0YXRpYyBib29sIGhhc19hZGRyZXNzX2F1dGhfbWV0YWNhcChjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyNjctXFx0XFx0XFx0XFx0ICAgICBpbnQgc2NvcGUpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjI3NS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjI3NjpzdGF0aWMgYm9vbCBoYXNfZ2VuZXJpY19hdXRoKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSxcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjI3Ny1cXHRcXHRcXHQgICAgIGludCBfX3VudXNlZClcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjg3LSNpZmRlZiBDT05GSUdfQVJNNjRfRTBQRFxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMjg4OnN0YXRpYyB2b2lkIGNwdV9lbmFibGVfZTBwZChzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBjb25zdCAqY2FwKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjg5LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjk0LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMjk1OnN0YXRpYyB2b2lkIGNwdV9lbmFibGVfbHM2NChzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBjb25zdCAqY2FwKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjk2LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjk5LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMzAwOnN0YXRpYyB2b2lkIGNwdV9lbmFibGVfbHM2NF92KHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGNvbnN0ICpjYXApXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIzMDEte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIzMDUtI2lmZGVmIENPTkZJR19BUk02NF9QU0VVRE9fTk1JXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIzMDY6c3RhdGljIGJvb2wgY2FuX3VzZV9naWNfcHJpb3JpdGllcyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIzMDctXFx0XFx0XFx0XFx0ICAgaW50IHNjb3BlKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIzMTktXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIzMjA6c3RhdGljIGJvb2wgaGFzX2dpY19wcmlvX3JlbGF4ZWRfc3luYyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIzMjEtXFx0XFx0XFx0XFx0ICAgICAgaW50IHNjb3BlKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIzNDgtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIzNDk6c3RhdGljIGJvb2wgY2FuX3RyYXBfaWN2X2Rpcl9lbDEoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LFxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMzUwLVxcdFxcdFxcdFxcdCBpbnQgc2NvcGUpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQwMS0jaWZkZWYgQ09ORklHX0FSTTY0X0JUSVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyNDAyOnN0YXRpYyB2b2lkIGJ0aV9lbmFibGUoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKl9fdW51c2VkKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNDAzLXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNDE2LSNpZmRlZiBDT05GSUdfQVJNNjRfTVRFXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjI0MTc6c3RhdGljIHZvaWQgY3B1X2VuYWJsZV9tdGUoc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgY29uc3QgKmNhcClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQxOC17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQzOS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjQ0MDpzdGF0aWMgdm9pZCB1c2VyX2ZlYXR1cmVfZml4dXAodm9pZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ0MS17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ1OC1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjQ1OTpzdGF0aWMgdm9pZCBlbGZfaHdjYXBfZml4dXAodm9pZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ2MC17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ2Ny0jaWZkZWYgQ09ORklHX0tWTVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyNDY4OnN0YXRpYyBib29sIGlzX2t2bV9wcm90ZWN0ZWRfbW9kZShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBfX3VudXNlZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ2OS17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ3My1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjQ3NDpzdGF0aWMgdm9pZCBjcHVfdHJhcF9lbDBfaW1wZGVmKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ3NS17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ3OC1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjQ3OTpzdGF0aWMgdm9pZCBjcHVfZW5hYmxlX2RpdChjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqX191bnVzZWQpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTI0ODAte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTI0ODMtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjI0ODQ6c3RhdGljIHZvaWQgY3B1X2VuYWJsZV9tb3BzKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ4NS17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ4OS0jaWZkZWYgQ09ORklHX0FSTTY0X1BPRVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyNDkwOnN0YXRpYyB2b2lkIGNwdV9lbmFibGVfcG9lKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ5MS17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ5Ny0jaWZkZWYgQ09ORklHX0FSTTY0X0dDU1xcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyNDk4OnN0YXRpYyB2b2lkIGNwdV9lbmFibGVfZ2NzKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ5OS17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MzI5MD1zdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgcHRyX2F1dGhfaHdjYXBfZ2VuX21hdGNoZXNbXSA9IHtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zMzA0LSNpZmRlZiBDT05GSUdfQVJNNjRfU1ZFXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjMzMDU6c3RhdGljIGJvb2wgaGFzX3N2ZV9mZWF0dXJlKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXAsIGludCBzY29wZSlcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzMwNi17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzMxMS0jaWZkZWYgQ09ORklHX0FSTTY0X1NNRVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozMzEyOnN0YXRpYyBib29sIGhhc19zbWVfZmVhdHVyZShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwLCBpbnQgc2NvcGUpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTMzMTMte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTMzMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2VsZl9od2NhcHNbXSA9IHtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zNDU4LSNpZmRlZiBDT05GSUdfQ09NUEFUXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM0NTk6c3RhdGljIGJvb2wgY29tcGF0X2hhc19uZW9uKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXAsIGludCBzY29wZSlcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzQ2MC17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MzQ4MD1zdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgY29tcGF0X2VsZl9od2NhcHNbXSA9IHtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zNTAzLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozNTA0OnN0YXRpYyB2b2lkIGNhcF9zZXRfZWxmX2h3Y2FwKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXApXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM1MDUte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM1MjQtLyogQ2hlY2sgaWYgd2UgaGF2ZSBhIHBhcnRpY3VsYXIgSFdDQVAgZW5hYmxlZCAqL1xcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozNTI1OnN0YXRpYyBib29sIGNwdXNfaGF2ZV9lbGZfaHdjYXAoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmNhcClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzUyNi17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzU0OC1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MzU0OTpzdGF0aWMgdm9pZCBzZXR1cF9lbGZfaHdjYXBzKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpod2NhcHMpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM1NTAte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM1NTctXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM1NTg6c3RhdGljIHZvaWQgdXBkYXRlX2NwdV9jYXBhYmlsaXRpZXModTE2IHNjb3BlX21hc2spXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM1NTkte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM2MTUtICovXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM2MTY6c3RhdGljIGludCBjcHVfZW5hYmxlX25vbl9ib290X3Njb3BlX2NhcGFiaWxpdGllcyh2b2lkICpfX3VudXNlZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzYxNy17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MzY0MD1zdGF0aWMgdm9pZCBfX2luaXQgZW5hYmxlX2NwdV9jYXBhYmlsaXRpZXModTE2IHNjb3BlX21hc2spXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzY4My0gKi9cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MzY4NDpzdGF0aWMgdm9pZCB2ZXJpZnlfbG9jYWxfY3B1X2NhcHModTE2IHNjb3BlX21hc2spXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM2ODUte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM3NDgtICovXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM3NDk6c3RhdGljIHZvaWQgY2hlY2tfZWFybHlfY3B1X2ZlYXR1cmVzKHZvaWQpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM3NTAte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTM3NTc9X192ZXJpZnlfbG9jYWxfZWxmX2h3Y2Fwcyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwcylcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zNzY3LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozNzY4OnN0YXRpYyB2b2lkIHZlcmlmeV9sb2NhbF9lbGZfaHdjYXBzKHZvaWQpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM3Njkte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM3NzUtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM3NzY6c3RhdGljIHZvaWQgdmVyaWZ5X3N2ZV9mZWF0dXJlcyh2b2lkKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zNzc3LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zNzg4LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozNzg5OnN0YXRpYyB2b2lkIHZlcmlmeV9zbWVfZmVhdHVyZXModm9pZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzc5MC17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzgwMS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MzgwMjpzdGF0aWMgdm9pZCB2ZXJpZnlfaHlwX2NhcGFiaWxpdGllcyh2b2lkKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zODAzLXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zODMyLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozODMzOnN0YXRpYyB2b2lkIHZlcmlmeV9tcGFtX2NhcGFiaWxpdGllcyh2b2lkKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zODM0LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zODcwLSAqL1xcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozODcxOnN0YXRpYyB2b2lkIHZlcmlmeV9sb2NhbF9jcHVfY2FwYWJpbGl0aWVzKHZvaWQpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM4NzIte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM4OTMtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM4OTQ6dm9pZCBjaGVja19sb2NhbF9jcHVfY2FwYWJpbGl0aWVzKHZvaWQpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM4OTUte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM5MTMtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM5MTQ6Ym9vbCB0aGlzX2NwdV9oYXNfY2FwKHVuc2lnbmVkIGludCBuKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zOTE1LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0zOTMyPXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIF9fc3lzdGVtX21hdGNoZXNfY2FwKHVuc2lnbmVkIGludCBuKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM5NDItXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM5NDM6dm9pZCBjcHVfc2V0X2ZlYXR1cmUodW5zaWduZWQgaW50IG51bSlcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzk0NC17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzk0Ny1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6Mzk0ODpib29sIGNwdV9oYXZlX2ZlYXR1cmUodW5zaWduZWQgaW50IG51bSlcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzk0OS17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9NDA2Nj12b2lkIF9faW5pdCBzZXR1cF91c2VyX2ZlYXR1cmVzKHZvaWQpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtNDA3OS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6NDA4MDpzdGF0aWMgaW50IGVuYWJsZV9taXNtYXRjaGVkXzMyYml0X2VsMCh1bnNpZ25lZCBpbnQgY3B1KVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy00MDgxLXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz00MTYzPXN0YXRpYyBpbmxpbmUgaW50IGVtdWxhdGVfaWRfcmVnKHUzMiBpZCwgdTY0ICp2YWxwKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTQxODItXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjQxODM6c3RhdGljIGludCBlbXVsYXRlX3N5c19yZWcodTMyIGlkLCB1NjQgKnZhbHApXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTQxODQte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTQyMDQtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjQyMDU6aW50IGRvX2VtdWxhdGVfbXJzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1MzIgc3lzX3JlZywgdTMyIHJ0KVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy00MjA2LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy00MjE3LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzo0MjE4OmJvb2wgdHJ5X2VtdWxhdGVfbXJzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1MzIgaW5zbilcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtNDIxOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjEzOjE0LjE2NjQ4OTQxN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDgzOTI3NTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIGZvciBBUk02NCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCBhbmQgSSdtIGZlZWxpbmcgZ29vZCBhYm91dCB3aGVyZSBpdCdzIGhlYWRlZC4gVGhlIGluY2x1c2lvbiBvZiBgbGF0ZV9jcHVfZW5hYmxlX2h2b2AgYW5kIGBodm9fY29tcGF0aWJsZWAgaXMgYSBzb2xpZCBhZGRpdGlvbiwgYW5kIHRoZXkgZGVmaW5pdGVseSBuZWVkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBmb2N1cyBzeW1ib2xzLlxuXG5TbywgdGhlIGRlZmluaXRpdmUgbGlzdCBvZiBmdW5jdGlvbnMgZm9yIGFuYWx5c2lzIGxvb2tzIGxpa2UgdGhpcywgYW5kIGl0IHNlZW1zIGxpa2UgYSB2ZXJ5IGdvb2Qgc2V0IHRvIGZvY3VzIG9uOlxuKiAgIGB2bWVtbWFwX3NwbGl0X3BtZGBcbiogICBgdm1lbW1hcF9yZW1hcF9wdGVgXG4qICAgYHZtZW1tYXBfcmVzdG9yZV9wdGVgXG4qICAgYHZtZW1tYXBfcmVtYXBfZnJlZWBcbiogICBgdm1lbW1hcF9yZW1hcF9hbGxvY2BcbiogICBgaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZWBcbiogICBgX19odWdldGxiX3ZtZW1tYXBfcmVzdG9yZV9mb2xpb2BcbiogICBgX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW9gXG4qICAgYHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2ZvbGlvYFxuKiAgIGB2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9ib290bWVtX3BhZ2VgXG4qICAgYGxhdGVfY3B1X2VuYWJsZV9odm9gXG4qICAgYGh2b19jb21wYXRpYmxlYFxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbnMuIFdlJ3JlIGNsZWFybHkgZGVhbGluZyB3aXRoOlxuKiAgIGBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUGBcbiogICBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTmBcbiogICBgQVJNNjRfSFdfQUZEQk1gXG5cbkp1c3QgZG91YmxlLWNoZWNraW5nLi4ueWVwLCBgY29uZmlnIEFSTTY0X0hXX0FGREJNYCBpcyB0aGUgcmlnaHQgbmFtZS4gQW5kIHdoaWxlIHdlIG5lZWQgYEhVR0VUTEJfUEFHRWAgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAsIHRoZXkncmUgZ2VuZXJpYyBhbmQgbm90IHNwZWNpZmljIHRvIHRoaXMgQVJNNjQgb3B0aW1pemF0aW9uLlxuXG5Pa2F5LCBsZXQncyByZWNhcCB0aGUgcmF0aW9uYWxlIGhlcmUuIFRoZSBwYXRjaCBpcyBhYm91dCBicmluZ2luZyBBUk02NCBzdXBwb3J0IHRvIEh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykuIEl0J3MgYmVlbiB0b3VjaGluZyBjb3JlIGtlcm5lbCBsb2dpYyBpbiBgbW0vaHVnZXRsYl92bWVtbWFwLmNgIGFuZCBsZXZlcmFnaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIHZtZW1tYXAgUE1EcyBhbmQgUFRFcy4gSXQncyBhbHNvIGFkZGluZyB0aG9zZSBuZWNlc3NhcnkgQ1BVIGNhcGFiaWxpdHkgY2hlY2tzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGVzcGVjaWFsbHkgYXJvdW5kIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgb2YgSHVnZVRMQiBwYWdlcyB3aGVuIEhWTyBpcyBlbmFibGVkLCBtYWtpbmcgaXQgcHJpbWUgZm9yIGZ1enppbmcuXG5cbkFscmlnaHQsIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ1NDUsIk91dHB1dFRva2VucyI6MzIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjEzOjIzLjY1MDQxOTU0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY0NTQ4OTcsIkVycm9yIjoidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEFSTTY0X0hXX0FGREJNIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXCIsXG4gICAgXCJIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXCIsXG4gICAgXCJBUk02NF9IV19BRkRCTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtZW1tYXBfc3BsaXRfcG1kXCIsXG4gICAgXCJ2bWVtbWFwX3JlbWFwX3B0ZVwiLFxuICAgIFwidm1lbW1hcF9yZXN0b3JlX3B0ZVwiLFxuICAgIFwidm1lbW1hcF9yZW1hcF9mcmVlXCIsXG4gICAgXCJ2bWVtbWFwX3JlbWFwX2FsbG9jXCIsXG4gICAgXCJodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlXCIsXG4gICAgXCJfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvXCIsXG4gICAgXCJfX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9mb2xpb1wiLFxuICAgIFwidm1lbW1hcF9zaG91bGRfb3B0aW1pemVfZm9saW9cIixcbiAgICBcInZtZW1tYXBfc2hvdWxkX29wdGltaXplX2Jvb3RtZW1fcGFnZVwiLFxuICAgIFwibGF0ZV9jcHVfZW5hYmxlX2h2b1wiLFxuICAgIFwiaHZvX2NvbXBhdGlibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEFSTTY0IHN1cHBvcnQgZm9yIEh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykuIEl0IG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGluIGBtbS9odWdldGxiX3ZtZW1tYXAuY2AgdG8gdXNlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmdW5jdGlvbnMgZm9yIHBvcHVsYXRpbmcgYW5kIHVwZGF0aW5nIHZtZW1tYXAgUE1EcyBhbmQgUFRFcy4gSXQgYWxzbyBhZGRzIENQVSBjYXBhYmlsaXR5IGNoZWNrcyBmb3IgSFZPIG9uIEFSTTY0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCB3aGVuIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgSHVnZVRMQiBwYWdlcyB3aXRoIEhWTyBlbmFibGVkLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJ0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogQVJNNjRfSFdfQUZEQk1cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6MTM6MjMuNzI2ODk0NjA4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjc0MTE1MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBBUk02NF9IV19BRkRCTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBzZWUgYEFSTTY0X0hXX0FGREJNYCBpcyBhY3R1YWxseSBkZWZpbmVkLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJ1dCB0aGUgd2F5IGl0J3MgdXNlZCBzdWdnZXN0cyBJIHNob3VsZG4ndCBiZSBlbmFibGluZyBpdCBkaXJlY3RseSwgbWF5YmUgaXQncyBkZXBlbmRlbnQgb24gc29tZSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0IGNvdWxkIGJlIHNlbGVjdGVkIGJ5IGFub3RoZXIgS2NvbmZpZyBvcHRpb24sIG9yIGl0IG1pZ2h0IGp1c3QgYmUgdGhlIHdheSBgQVJNNjRfSFdfQUZEQk1gIGlzIGRlZmluZWQgaW4gYGFyY2gvYXJtNjQvS2NvbmZpZ2AuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoYXQgS2NvbmZpZyBmaWxlIGFuZCBzZWUgaG93IHRoaXMgaXMgY29uZmlndXJlZCBhbmQgd2hlcmUgdGhlIGRlcGVuZGVuY2llcyBhcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhpcyBvcHRpb24gdG8gb3RoZXIgY29uZmlndXJhdGlvbnMgYmVmb3JlIEkgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU4NzksIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbInNldC1yZXN1bHRzIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6MTM6MjcuNzk0MzA5ODQ2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAwNDkyNDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBUk02NF9IV19BRkRCTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L0tjb25maWc9MTkwMD1tZW51IFxcXCJBUk12OC4xIGFyY2hpdGVjdHVyYWwgZmVhdHVyZXNcXFwiXFxuYXJjaC9hcm02NC9LY29uZmlnLTE5MDEtXFxuYXJjaC9hcm02NC9LY29uZmlnOjE5MDI6Y29uZmlnIEFSTTY0X0hXX0FGREJNXFxuYXJjaC9hcm02NC9LY29uZmlnLTE5MDMtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgaGFyZHdhcmUgdXBkYXRlcyBvZiB0aGUgQWNjZXNzIGFuZCBEaXJ0eSBwYWdlIGZsYWdzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNToxMzoyOS42OTQ4MDkzNDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk4ODE0MTU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBDb25maWd1cmF0aW9uIERpc2NyZXBhbmN5KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gV2h5IGRpZCB0aGUgYnVpbGQgc3lzdGVtIGZsYWcgYEFSTTY0X0hXX0FGREJNYCBhcyBub24tZXhpc3RlbnQ/IFRoYXQncyBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhdCBsZWFzdCBJIHRob3VnaHQgaXQgd2FzLiBDb3VsZCBpdCBiZSB0aGF0IHRoZSBidWlsZCB0b29scywgb3Igd2hhdGV2ZXIncyBjaGVja2luZyB0aGUgY29uZmlndXJhdGlvbiwgYXJlIHJ1bm5pbmcgYWdhaW5zdCBgeDg2XzY0YCBjb25maWd1cmF0aW9ucz9cblxuWWVzLCB0aGF0IG1ha2VzIHNlbnNlLiBTeXprYWxsZXIsIHRoZSBmdXp6ZXIgdGhhdCdzIGxpa2VseSBkcml2aW5nIHRoaXMgYnVpbGQsIGlzIHR5cGljYWxseSB1c2VkIHdpdGggYHg4Nl82NGAgdGFyZ2V0cy4gQW5kIHRoaXMgc3BlY2lmaWMgcGF0Y2ggSSdtIHdvcmtpbmcgb24gaXMgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgYXJtNjRgLiBTbywgaWYgdGhlIGNvbmZpZ3VyYXRpb24gY2hlY2sgaXMgYXNzdW1pbmcgYW4gYHg4Nl82NGAgY29udGV4dCwgaXQgd291bGRuJ3Qga25vdyBhYm91dCBgQVJNNjRfSFdfQUZEQk1gIGF0IGFsbC5cblxuQWxyaWdodCwgc28gdGhlIHNvbHV0aW9uIGlzIHByb2JhYmx5IHRvIGVpdGhlciBzaW1wbHkgb21pdCBgQVJNNjRfSFdfQUZEQk1gIGZyb20gbXkgY29uZmlnIG9yLCBpZiB0aGlzIG9wdGlvbiBpcyBzdHJpY3RseSBhbiBgYXJtNjRgIGZlYXR1cmUsIGVuc3VyZSBJIG1haW50YWluIGl0IGZvciB0aGUgYGFybTY0YCBjb25maWd1cmF0aW9uLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBjb250ZXh0IG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gYmUgc3VyZS5cblxuQnV0LCBmb3Igbm93LCBsZXQncyBrZWVwIGl0IHNpbXBsZS4gTGV0J3MganVzdCBsZXZlcmFnZSBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBgIGFuZCBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTmAgaW5zdGVhZC4gVGhhdCdzIGEgc2FmZXIgYmV0IGFuZCB3aWxsIGdldCB0aGluZ3MgbW92aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjIzNiwiT3V0cHV0VG9rZW5zIjozMDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6MTM6MzYuNjgyOTU0MTc4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYyNDQ2MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXCIsXG4gICAgXCJIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1lbW1hcF9zcGxpdF9wbWRcIixcbiAgICBcInZtZW1tYXBfcmVtYXBfcHRlXCIsXG4gICAgXCJ2bWVtbWFwX3Jlc3RvcmVfcHRlXCIsXG4gICAgXCJ2bWVtbWFwX3JlbWFwX2ZyZWVcIixcbiAgICBcInZtZW1tYXBfcmVtYXBfYWxsb2NcIixcbiAgICBcImh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGVcIixcbiAgICBcIl9faHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW9cIixcbiAgICBcIl9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvXCIsXG4gICAgXCJ2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9mb2xpb1wiLFxuICAgIFwidm1lbW1hcF9zaG91bGRfb3B0aW1pemVfYm9vdG1lbV9wYWdlXCIsXG4gICAgXCJsYXRlX2NwdV9lbmFibGVfaHZvXCIsXG4gICAgXCJodm9fY29tcGF0aWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgQVJNNjQgc3VwcG9ydCBmb3IgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKS4gSXQgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgaW4gYG1tL2h1Z2V0bGJfdm1lbW1hcC5jYCB0byB1c2UgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgcG9wdWxhdGluZyBhbmQgdXBkYXRpbmcgdm1lbW1hcCBQTURzIGFuZCBQVEVzLiBJdCBhbHNvIGFkZHMgQ1BVIGNhcGFiaWxpdHkgY2hlY2tzIGZvciBIVk8gb24gQVJNNjQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gYWxsb2NhdGluZyBhbmQgZnJlZWluZyBIdWdlVExCIHBhZ2VzIHdpdGggSFZPIGVuYWJsZWQsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXCIsXG4gICAgXCJIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1lbW1hcF9zcGxpdF9wbWRcIixcbiAgICBcInZtZW1tYXBfcmVtYXBfcHRlXCIsXG4gICAgXCJ2bWVtbWFwX3Jlc3RvcmVfcHRlXCIsXG4gICAgXCJ2bWVtbWFwX3JlbWFwX2ZyZWVcIixcbiAgICBcInZtZW1tYXBfcmVtYXBfYWxsb2NcIixcbiAgICBcImh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGVcIixcbiAgICBcIl9faHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW9cIixcbiAgICBcIl9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvXCIsXG4gICAgXCJ2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9mb2xpb1wiLFxuICAgIFwidm1lbW1hcF9zaG91bGRfb3B0aW1pemVfYm9vdG1lbV9wYWdlXCIsXG4gICAgXCJsYXRlX2NwdV9lbmFibGVfaHZvXCIsXG4gICAgXCJodm9fY29tcGF0aWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgQVJNNjQgc3VwcG9ydCBmb3IgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKS4gSXQgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgaW4gYG1tL2h1Z2V0bGJfdm1lbW1hcC5jYCB0byB1c2UgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgcG9wdWxhdGluZyBhbmQgdXBkYXRpbmcgdm1lbW1hcCBQTURzIGFuZCBQVEVzLiBJdCBhbHNvIGFkZHMgQ1BVIGNhcGFiaWxpdHkgY2hlY2tzIGZvciBIVk8gb24gQVJNNjQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gYWxsb2NhdGluZyBhbmQgZnJlZWluZyBIdWdlVExCIHBhZ2VzIHdpdGggSFZPIGVuYWJsZWQsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow5wtlk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-08 14:50:20 +0000 UTC FinishedAt: 2026-07-08 15:13:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLB_PAGE_OPTIMIZE_VMEMMAP", "HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLB_PAGE_OPTIMIZE_VMEMMAP", "HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON" ], "series_id": "b585f6e3-7305-4ea4-9dbd-1ec957cc0d54" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vmemmap_split_pmd", "vmemmap_remap_pte", "vmemmap_restore_pte", "vmemmap_remap_free", "vmemmap_remap_alloc", "hugetlb_vmemmap_optimization_try_disable", "__hugetlb_vmemmap_restore_folio", "__hugetlb_vmemmap_optimize_folio", "vmemmap_should_optimize_folio", "vmemmap_should_optimize_bootmem_page", "late_cpu_enable_hvo", "hvo_compatible" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQJiMzNDssCiAgICAmIzM0O0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWVtbWFwX3NwbGl0X3BtZCYjMzQ7LAogICAgJiMzNDt2bWVtbWFwX3JlbWFwX3B0ZSYjMzQ7LAogICAgJiMzNDt2bWVtbWFwX3Jlc3RvcmVfcHRlJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfcmVtYXBfZnJlZSYjMzQ7LAogICAgJiMzNDt2bWVtbWFwX3JlbWFwX2FsbG9jJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGUmIzM0OywKICAgICYjMzQ7X19odWdldGxiX3ZtZW1tYXBfcmVzdG9yZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtfX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDt2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDt2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9ib290bWVtX3BhZ2UmIzM0OywKICAgICYjMzQ7bGF0ZV9jcHVfZW5hYmxlX2h2byYjMzQ7LAogICAgJiMzNDtodm9fY29tcGF0aWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIEFSTTY0IHN1cHBvcnQgZm9yIEh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykuIEl0IG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGluIGBtbS9odWdldGxiX3ZtZW1tYXAuY2AgdG8gdXNlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmdW5jdGlvbnMgZm9yIHBvcHVsYXRpbmcgYW5kIHVwZGF0aW5nIHZtZW1tYXAgUE1EcyBhbmQgUFRFcy4gSXQgYWxzbyBhZGRzIENQVSBjYXBhYmlsaXR5IGNoZWNrcyBmb3IgSFZPIG9uIEFSTTY0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCB3aGVuIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgSHVnZVRMQiBwYWdlcyB3aXRoIEhWTyBlbmFibGVkLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNToxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRkZjIzMDU0NjJlYjhmYWI5YWJjYjVmMTJiOTdiMWY5NzBjYmE1OTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDE1OjEyOjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGYzN2E4MTk1MGUyNTBlLi41NWJkNGMwOWY0OTQ5NiAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTEyMDEzLDYgJiM0MzsxMjAxMyw3IEBAIEY6XHREb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG4gRjpcdERvY3VtZW50YXRpb24vbW0vdm1lbW1hcF9kZWR1cC5yc3RcbiBGOlx0ZnMvaHVnZXRsYmZzL1xuIEY6XHRpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuJiM0MztGOlx0aW5jbHVkZS9saW51eC9odWdldGxiX3ZtZW1tYXAuaFxuIEY6XHRpbmNsdWRlL3RyYWNlL2V2ZW50cy9odWdldGxiZnMuaFxuIEY6XHRtbS9odWdldGxiLmNcbiBGOlx0bW0vaHVnZXRsYl9jZ3JvdXAuY1xuQEAgLTEyMDIxLDcgJiM0MzsxMjAyMiw3IEBAIEY6XHRtbS9odWdldGxiX2NtYS5oXG4gRjpcdG1tL2h1Z2V0bGJfc3lzY3RsLmNcbiBGOlx0bW0vaHVnZXRsYl9zeXNmcy5jXG4gRjpcdG1tL2h1Z2V0bGJfdm1lbW1hcC5jXG4tRjpcdG1tL2h1Z2V0bGJfdm1lbW1hcC5oXG4mIzQzO0Y6XHRtbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaFxuIEY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9odWdldGxiX21lbWNnLmNcbiBcbiBIVkEgU1QgTUVESUEgRFJJVkVSXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnXG5pbmRleCBiM2FmZTA2ODg5MTliZC4uMmE1OTE1NWY2OGRjZDggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuQEAgLTI1OSw2ICYjNDM7MjU5LDcgQEAgY29uZmlnIEFSTTY0XG4gXHRzZWxlY3QgVVNFUl9TVEFDS1RSQUNFX1NVUFBPUlRcbiBcdHNlbGVjdCBWRFNPX0dFVFJBTkRPTVxuIFx0c2VsZWN0IFZNQVBfU1RBQ0tcbiYjNDM7XHRzZWxlY3QgQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUCBpZiBBUk02NF9IV19BRkRCTVxuIFx0aGVscFxuIFx0ICBBUk0gNjQtYml0IChBQXJjaDY0KSBMaW51eCBzdXBwb3J0LlxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1Y2Fwcy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVjYXBzLmhcbmluZGV4IDI1YzYxY2RhOTAxYzVkLi42ZGIzZWY4MjdmODZhOSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1Y2Fwcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaFxuQEAgLTc1LDYgJiM0Mzs3NSw4IEBAIGNwdWNhcF9pc19wb3NzaWJsZShjb25zdCB1bnNpZ25lZCBpbnQgY2FwKVxuIFx0XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfSFdfUEVSRl9FVkVOVFMpO1xuIFx0Y2FzZSBBUk02NF9IQVNfTFNVSTpcbiBcdFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0FSTTY0X0xTVUkpO1xuJiM0MztcdGNhc2UgQVJNNjRfSFZPX0NPTVBBVElCTEU6XG4mIzQzO1x0XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHRydWU7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxuaW5kZXggYTU3ODcwZmE5NmRiNWIuLmQxNTA0ODA0ZjJiZWE5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oXG5AQCAtMzY3LDYgJiM0MzszNjcsMTQgQEAgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMge1xuIFx0ICogcm91dGluZSBtdXN0IGNoZWNrIGl0IGJlZm9yZSB0YWtpbmcgYW55IGFjdGlvbi5cbiBcdCAqL1xuIFx0dm9pZCAoKmNwdV9lbmFibGUpKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXApO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSW4gcmFyZSBjYXNlcywgY2FwYWJpbGl0aWVzIGFyZSAqc29tZXRpbWVzKiBvcHRpb25hbCBmb3IgbGF0ZSBDUFVzLlxuJiM0MztcdCAqIFRoaXMgY2FsbGJhY2sgYWxsb3dzIGEgY2FwYWJpbGl0eSB0byBwcmV2ZW50IG9ubGluaW5nIG9mXG4mIzQzO1x0ICogaW5jb21wYXRpYmxlIENQVXMgd2hlbiB0aGUgY2FwYWJpbGl0eSBpcyBpbiBmYWN0IHJlcXVpcmVkLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUmV0dXJucyB0cnVlIGlmZiBvbmxpbmluZyB0aGUgQ1BVIGlzIHBlcm1pdHRlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRib29sICgqbGF0ZV9jcHVfZW5hYmxlKShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwKTtcbiBcdHVuaW9uIHtcbiBcdFx0c3RydWN0IHtcdC8qIFRvIGJlIHVzZWQgZm9yIGVycmF0dW0gaGFuZGxpbmcgb25seSAqL1xuIFx0XHRcdHN0cnVjdCBtaWRyX3JhbmdlIG1pZHJfcmFuZ2U7XG5AQCAtODg1LDYgJiM0Mzs4OTMsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KHZvaWQpXG4gXHRyZXR1cm4gYWx0ZXJuYXRpdmVfaGFzX2NhcF91bmxpa2VseShBUk02NF9IQVNfQkJNTDJfTk9BQk9SVCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc3lzdGVtX3N1cHBvcnRzX2h2byh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGFsdGVybmF0aXZlX2hhc19jYXBfdW5saWtlbHkoQVJNNjRfSFZPX0NPTVBBVElCTEUpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBkb19lbXVsYXRlX21ycyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTMyIHN5c19yZWcsIHUzMiBydCk7XG4gYm9vbCB0cnlfZW11bGF0ZV9tcnMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHUzMiBpc24pO1xuIFxuQEAgLTkxMCwyMiAmIzQzOzkyMywzNiBAQCBzdGF0aWMgaW5saW5lIHUzMiBpZF9hYTY0bW1mcjBfcGFyYW5nZV90b19waHlzX3NoaWZ0KGludCBwYXJhbmdlKVxuIH1cbiBcbiAvKiBDaGVjayB3aGV0aGVyIGhhcmR3YXJlIHVwZGF0ZSBvZiB0aGUgQWNjZXNzIGZsYWcgaXMgc3VwcG9ydGVkICovXG4tc3RhdGljIGlubGluZSBib29sIGNwdV9oYXNfaHdfYWYodm9pZClcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHN1cHBvcnRzX2h3X2FmKGludCBzY29wZSlcbiB7XG4gXHR1NjQgbW1mcjE7XG4gXG4gXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FSTTY0X0hXX0FGREJNKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0Lypcbi1cdCAqIFVzZSBjYWNoZWQgdmVyc2lvbiB0byBhdm9pZCBlbXVsYXRlZCBtc3Igb3BlcmF0aW9uIG9uIEtWTVxuLVx0ICogZ3Vlc3RzLlxuLVx0ICovXG4tXHRtbWZyMSA9IHJlYWRfc2FuaXRpc2VkX2Z0cl9yZWcoU1lTX0lEX0FBNjRNTUZSMV9FTDEpO1xuJiM0MztcdGlmIChzY29wZSA9PSBTQ09QRV9TWVNURU0pIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBVc2UgY2FjaGVkIHZlcnNpb24gdG8gYXZvaWQgZW11bGF0ZWQgbXNyIG9wZXJhdGlvbiBvbiBLVk1cbiYjNDM7XHRcdCAqIGd1ZXN0cy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bW1mcjEgPSByZWFkX3Nhbml0aXNlZF9mdHJfcmVnKFNZU19JRF9BQTY0TU1GUjFfRUwxKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0bW1mcjEgPSByZWFkX2NwdWlkKElEX0FBNjRNTUZSMV9FTDEpO1xuJiM0MztcdH1cbiBcdHJldHVybiBjcHVpZF9mZWF0dXJlX2V4dHJhY3RfdW5zaWduZWRfZmllbGQobW1mcjEsXG4gXHRcdFx0XHRcdFx0SURfQUE2NE1NRlIxX0VMMV9IQUZEQlNfU0hJRlQpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHN5c3RlbV9oYXNfaHdfYWYodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzdXBwb3J0c19od19hZihTQ09QRV9TWVNURU0pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgY3B1X2hhc19od19hZih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN1cHBvcnRzX2h3X2FmKFNDT1BFX0xPQ0FMX0NQVSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBib29sIGNwdV9oYXNfcGFuKHZvaWQpXG4ge1xuIFx0dTY0IG1tZnIxID0gcmVhZF9jcHVpZChJRF9BQTY0TU1GUjFfRUwxKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oXG5pbmRleCBkMDM4ZmYxNGQxNmNhZS4uNzNhZjc5MTFmZDgzMTMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmhcbkBAIC0xMSw2ICYjNDM7MTEsNyBAQFxuICNkZWZpbmUgX19BU01fSFVHRVRMQl9IXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2NhY2hlZmx1c2guaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20vY3B1ZmVhdHVyZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL210ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuIFxuQEAgLTY1LDYgJiM0Mzs2NiwxMiBAQCBleHRlcm4gdm9pZCBodWdlX3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcbiBcdFx0XHRcdFx0IHB0ZV90IG9sZF9wdGUsIHB0ZV90IG5ld19wdGUpO1xuIFxuJiM0MzsjZGVmaW5lIF9fSEFWRV9BUkNIX0hWT19TVVBQT1JURURcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGFyY2hfaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl9zdXBwb3J0ZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzeXN0ZW1fc3VwcG9ydHNfaHZvKCk7XG4mIzQzO31cbiYjNDM7XG4gI2luY2x1ZGUgXHUwMDNjYXNtLWdlbmVyaWMvaHVnZXRsYi5oXHUwMDNlXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfaHVnZXRsYl90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuaW5kZXggMWI0NTA5ZDMzODJjNjMuLjI2YjA1ZjhiNzBjZDJlIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5AQCAtMTIxLDQgJiM0MzsxMjEsNTggQEAgcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCwgcGd0YWJsZV90IHB0ZXApXG4gXHRcdCAgICAgICBQTURfVFlQRV9UQUJMRSB8IFBNRF9UQUJMRV9BRiB8IFBNRF9UQUJMRV9QWE4pO1xuIH1cbiBcbiYjNDM7I2RlZmluZSBfX0hBVkVfQVJDSF9UUllfUE9QVUxBVEVfVk1FTU1BUF9QTURcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgdHJ5X3BvcHVsYXRlX3ZtZW1tYXBfcG1kKHBtZF90ICpwbWRwLCBwdGVfdCAqcGd0YWJsZSxcbiYjNDM7XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGludCBtYXhfYXR0ZW1wdHMgPSAxNjtcbiYjNDM7XHRpbnQgYXR0ZW1wdHMgPSAwO1xuJiM0MztcdHBtZF90IG9sZF9wbWQsIG5ld19wbWQ7XG4mIzQzO1xuJiM0MztcdGlmICghc3lzdGVtX3N1cHBvcnRzX2h2bygpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRpZiAoc3lzdGVtX3N1cHBvcnRzX2JibWwyX25vYWJvcnQoKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEJCTUwyX05PQUJPUlQgYWxsb3dzIGJsb2NrLVx1MDAzZXRhYmxlIHRyYW5zaXRpb25zIGlmIHRoZSBQVEVzXG4mIzQzO1x0XHQgKiB1bmRlcm5lYXRoIGRvIG5vdCBjb25mbGljdCB3aXRoIGV4aXN0aW5nLCBwb3RlbnRpYWxseSBjYWNoZWRcbiYjNDM7XHRcdCAqIHRyYW5zbGF0aW9ucy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cG1kX3BvcHVsYXRlX2tlcm5lbChcdTAwMjZpbml0X21tLCBwbWRwLCBwZ3RhYmxlKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bmV3X3BtZCA9IF9fcG1kKF9fcGh5c190b19wbWRfdmFsKF9fcGEocGd0YWJsZSkpIHxcbiYjNDM7XHRcdFx0UE1EX1RZUEVfVEFCTEUgfCBQTURfVEFCTEVfQUYgfCBQTURfVEFCTEVfVVhOKTtcbiYjNDM7XG4mIzQzO1x0b2xkX3BtZCA9IHBtZHBfZ2V0KHBtZHApO1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFKCFwbWRfdmFsaWQob2xkX3BtZCkpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFKCFwbWRfbGVhZihvbGRfcG1kKSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdC8qIFdlIHNob3VsZCBuZXZlciBnZXQgYSBjb250aWd1b3VzIFBNRCBoZXJlLiAqL1xuJiM0MztcdFx0aWYgKFdBUk5fT05fT05DRShwbWRfY29udChvbGRfcG1kKSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwbWRfeW91bmcob2xkX3BtZCkpIHtcbiYjNDM7XHRcdFx0LyogX19wdGVwX2NsZWFyX3lvdW5nKCkgcmV0dXJucyB0aGUgb3ZlcndyaXR0ZW4gUFRFICovXG4mIzQzO1x0XHRcdG9sZF9wbWQgPSBwdGVfcG1kKHB0ZV9ta29sZChfX3B0ZXBfY2xlYXJfeW91bmcoKHB0ZV90ICopcG1kcCkpKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UoYWRkciwgYWRkciAmIzQzOyBQTURfU0laRSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUcmFuc2xhdGlvbnMgd2l0aG91dCBBRiBjYW5ub3QgYmUgY2FjaGVkLCBzbyB3ZSBjYW4gcmVwbGFjZVxuJiM0MztcdCAqIHRoZW0gd2l0aG91dCBCQk0uXG4mIzQzO1x0ICovXG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnX3JlbGF4ZWQoXHUwMDI2cG1kX3ZhbCgqcG1kcCksIFx1MDAyNnBtZF92YWwob2xkX3BtZCksXG4mIzQzO1x0XHRcdFx0ICAgICAgcG1kX3ZhbChuZXdfcG1kKSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgJiM0MzsmIzQzO2F0dGVtcHRzIFx1MDAzYyBtYXhfYXR0ZW1wdHMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYXR0ZW1wdHMgPT0gbWF4X2F0dGVtcHRzID8gLUVBR0FJTiA6IDA7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggMjc2ODljNjJiZDI1ZGQuLjdiMTFhYTQxZDBhMDc0IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMTMwMiw4ICYjNDM7MTMwMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3B0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdF9fc2V0X3B0ZShwdGVwLCBfX3B0ZSgwKSk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApXG4mIzQzO3N0YXRpYyBpbmxpbmUgcHRlX3QgX19wdGVwX2NsZWFyX3lvdW5nKHB0ZV90ICpwdGVwKVxuIHtcbiBcdHB0ZV90IG9sZF9wdGUsIHB0ZTtcbiBcbkBAIC0xMzE1LDcgJiM0MzsxMzE0LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHRcdCAgICAgICBwdGVfdmFsKG9sZF9wdGUpLCBwdGVfdmFsKHB0ZSkpO1xuIFx0fSB3aGlsZSAocHRlX3ZhbChwdGUpICE9IHB0ZV92YWwob2xkX3B0ZSkpO1xuIFxuLVx0cmV0dXJuIHB0ZV95b3VuZyhwdGUpO1xuJiM0MztcdHJldHVybiBwdGU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHB0ZV95b3VuZyhfX3B0ZXBfY2xlYXJfeW91bmcocHRlcCkpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgX19wdGVwX2NsZWFyX2ZsdXNoX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuQEAgLTE1OTgsNyAmIzQzOzE2MDMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbiAgKiBwYWdlIGFmdGVyIGZvcmsoKSAmIzQzOyBDb1cgZm9yIHBmbiBtYXBwaW5ncy4gV2UgZG9uJiMzOTt0IGFsd2F5cyBoYXZlIGFcbiAgKiBoYXJkd2FyZS1tYW5hZ2VkIGFjY2VzcyBmbGFnIG9uIGFybTY0LlxuICAqL1xuLSNkZWZpbmUgYXJjaF9oYXNfaHdfcHRlX3lvdW5nXHRcdGNwdV9oYXNfaHdfYWZcbiYjNDM7I2RlZmluZSBhcmNoX2hhc19od19wdGVfeW91bmdcdFx0c3lzdGVtX2hhc19od19hZlxuIFxuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTk9OTEVBRl9QTURfWU9VTkdcbiAjZGVmaW5lIGFyY2hfaGFzX2h3X25vbmxlYWZfcG1kX3lvdW5nXHRzeXN0ZW1fc3VwcG9ydHNfaGFmdFxuQEAgLTE2MDgsNyAmIzQzOzE2MTMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbiAgKiBFeHBlcmltZW50YWxseSwgaXQmIzM5O3MgY2hlYXAgdG8gc2V0IHRoZSBhY2Nlc3MgZmxhZyBpbiBoYXJkd2FyZSBhbmQgd2VcbiAgKiBiZW5lZml0IGZyb20gcHJlZmF1bHRpbmcgbWFwcGluZ3MgYXMgJiMzOTtvbGQmIzM5OyB0byBzdGFydCB3aXRoLlxuICAqL1xuLSNkZWZpbmUgYXJjaF93YW50c19vbGRfcHJlZmF1bHRlZF9wdGVcdGNwdV9oYXNfaHdfYWZcbiYjNDM7I2RlZmluZSBhcmNoX3dhbnRzX29sZF9wcmVmYXVsdGVkX3B0ZVx0c3lzdGVtX2hhc19od19hZlxuIFxuIC8qXG4gICogUmVxdWVzdCBleGVjIG1lbW9yeSBpcyByZWFkIGludG8gcGFnZWNhY2hlIGluIGF0IGxlYXN0IDY0SyBmb2xpb3MuIFRoaXMgc2l6ZVxuQEAgLTE3OTMsNiAmIzQzOzE3OTgsNDggQEAgc3RhdGljIGlubGluZSB2b2lkIHB0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdF9fcHRlX2NsZWFyKG1tLCBhZGRyLCBwdGVwKTtcbiB9XG4gXG4mIzQzOyNkZWZpbmUgX19IQVZFX0FSQ0hfVFJZX1VQREFURV9WTUVNTUFQX1BURVxuJiM0MztzdGF0aWMgaW5saW5lIGludCB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4mIzQzO1x0XHRcdFx0XHQgY29uc3QgcHRlX3QgcHRlKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgaW50IG1heF9hdHRlbXB0cyA9IDE2O1xuJiM0MztcdGludCBhdHRlbXB0cyA9IDA7XG4mIzQzO1x0cHRlX3Qgb2xkX3B0ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzeXN0ZW1fc3VwcG9ydHNfaHZvKCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdC8qIFRoaXMgcm91dGluZSBpcyBvbmx5IHRvIGJlIHVzZWQgZm9yIHZhbGlkLXRvLXZhbGlkIHRyYW5zaXRpb25zLiAqL1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIXB0ZV92YWxpZChwdGUpKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRvbGRfcHRlID0gX19wdGVwX2dldChwdGVwKTtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0aWYgKFdBUk5fT05fT05DRSghcHRlX3ZhbGlkKG9sZF9wdGUpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0LyogV2Ugc2hvdWxkIG5ldmVyIGdldCBhIGNvbnRpZ3VvdXMgUFRFIGhlcmUuICovXG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFKHB0ZV92YWxpZF9jb250KG9sZF9wdGUpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHB0ZV95b3VuZyhvbGRfcHRlKSkge1xuJiM0MztcdFx0XHQvKiBfX3B0ZXBfY2xlYXJfeW91bmcoKSByZXR1cm5zIHRoZSBvdmVyd3JpdHRlbiBQVEUgKi9cbiYjNDM7XHRcdFx0b2xkX3B0ZSA9IHB0ZV9ta29sZChfX3B0ZXBfY2xlYXJfeW91bmcocHRlcCkpO1xuJiM0MztcbiYjNDM7XHRcdFx0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShhZGRyLCBhZGRyICYjNDM7IFBBR0VfU0laRSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUcmFuc2xhdGlvbnMgd2l0aG91dCBBRiBjYW5ub3QgYmUgY2FjaGVkLCBzbyB3ZSBjYW4gcmVwbGFjZVxuJiM0MztcdCAqIHRoZW0gd2l0aG91dCBCQk0uXG4mIzQzO1x0ICovXG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnX3JlbGF4ZWQoXHUwMDI2cHRlX3ZhbCgqcHRlcCksIFx1MDAyNnB0ZV92YWwob2xkX3B0ZSksXG4mIzQzO1x0XHRcdFx0ICAgICAgcHRlX3ZhbChwdGUpKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAmIzQzOyYjNDM7YXR0ZW1wdHMgXHUwMDNjIG1heF9hdHRlbXB0cyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhdHRlbXB0cyA9PSBtYXhfYXR0ZW1wdHMgPyAtRUFHQUlOIDogMDtcbiYjNDM7fVxuJiM0MztcbiAjZGVmaW5lIGNsZWFyX2Z1bGxfcHRlcyBjbGVhcl9mdWxsX3B0ZXNcbiBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfZnVsbF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHRwdGVfdCAqcHRlcCwgdW5zaWduZWQgaW50IG5yLCBpbnQgZnVsbClcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNcbmluZGV4IDlhMjJkZjBjNTEyMGYzLi42NWJiM2M3Yzk1OTUyYiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXG5AQCAtNzYsNiAmIzQzOzc2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rYXNhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyY3B1LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9pc29sYXRpb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdldGxiX3ZtZW1tYXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9hcm1fcG11djMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9jcHUuaFx1MDAzZVxuQEAgLTIxNzIsNiAmIzQzOzIxNzMsMzEgQEAgc3RhdGljIGJvb2wgaGFzX2JibWwyX25vYWJvcnQoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmNhcHMsIGludCBzY29cbiBcdHJldHVybiBjcHVfc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgaHZvX2NvbXBhdGlibGUoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmNhcHMsIGludCBzY29wZSlcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2UgbmVlZCBIVyBBRiBzdXBwb3J0IHRvIHN1cHBvcnQgY2hhbmdpbmcgdm1lbW1hcCBtYXBwaW5nIGxldmVsIGFuZFxuJiM0MztcdCAqIE9BIHdpdGhvdXQgdGFraW5nIGZhdWx0cy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gc3VwcG9ydHNfaHdfYWYoc2NvcGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBsYXRlX2NwdV9lbmFibGVfaHZvKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG4mIzQzO1x0aWYgKGNwdV9oYXNfaHdfYWYoKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSBDUFUgZG9lcyBub3Qgc3VwcG9ydCBIVyBBRiwgd2UgY2Fubm90IG9ubGluZSBpdCBpZiBIVk8gaXNcbiYjNDM7XHQgKiBjdXJyZW50bHkgaW4gdXNlLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKCk7XG4mIzQzOyNlbHNlXG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGNwdV9lbmFibGVfcGFuKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcbiB7XG4gXHQvKlxuQEAgLTMwNjcsNiAmIzQzOzMwOTMsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2ZlYXR1cmVzW10gPSB7XG4gXHRcdC50eXBlID0gQVJNNjRfQ1BVQ0FQX0VBUkxZX0xPQ0FMX0NQVV9GRUFUVVJFLFxuIFx0XHQubWF0Y2hlcyA9IGhhc19iYm1sMl9ub2Fib3J0LFxuIFx0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQuZGVzYyA9IFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gU3VwcG9ydFwmIzM0OyxcbiYjNDM7XHRcdC5jYXBhYmlsaXR5ID0gQVJNNjRfSFZPX0NPTVBBVElCTEUsXG4mIzQzO1x0XHQudHlwZSA9IEFSTTY0X0NQVUNBUF9TQ09QRV9TWVNURU0gfFxuJiM0MztcdFx0XHRBUk02NF9DUFVDQVBfT1BUSU9OQUxfRk9SX0xBVEVfQ1BVIHxcbiYjNDM7XHRcdFx0QVJNNjRfQ1BVQ0FQX1BFUk1JVFRFRF9GT1JfTEFURV9DUFUsXG4mIzQzO1x0XHQubWF0Y2hlcyA9IGh2b19jb21wYXRpYmxlLFxuJiM0MztcdFx0LmxhdGVfY3B1X2VuYWJsZSA9IGxhdGVfY3B1X2VuYWJsZV9odm8sXG4mIzQzO1x0fSxcbiBcdHtcbiBcdFx0LmRlc2MgPSBcJiMzNDs1Mi1iaXQgVmlydHVhbCBBZGRyZXNzaW5nIGZvciBLVk0gKExQQTIpXCYjMzQ7LFxuIFx0XHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU19MUEEyLFxuQEAgLTM2NjksNiAmIzQzOzM3MDQsMTQgQEAgc3RhdGljIHZvaWQgdmVyaWZ5X2xvY2FsX2NwdV9jYXBzKHUxNiBzY29wZV9tYXNrKVxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmICghY3B1X2hhc19jYXAgXHUwMDI2XHUwMDI2ICFjcHVjYXBfbGF0ZV9jcHVfb3B0aW9uYWwoY2FwcykpXG4gXHRcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFNvbWUgb3B0aW9uYWwgZmVhdHVyZXMgbWF5IGluIGZhY3QgYmUgcmVxdWlyZWQgZHVlXG4mIzQzO1x0XHRcdCAqIHRvIHBhcnRpY3VsYXIgcnVudGltZSBjb25kaXRpb25zLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKGNhcHMtXHUwMDNlbGF0ZV9jcHVfZW5hYmxlIFx1MDAyNlx1MDAyNiAhY2Fwcy1cdTAwM2VsYXRlX2NwdV9lbmFibGUoY2FwcykpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogV2UgaGF2ZSB0byBpc3N1ZSBjcHVfZW5hYmxlKCkgaXJyZXNwZWN0aXZlIG9mXG4gXHRcdFx0ICogd2hldGhlciB0aGUgQ1BVIGhhcyBpdCBvciBub3QsIGFzIGl0IGlzIGVuYWJlbGRcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHMgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcbmluZGV4IDliODVhODRmNmZkNDk0Li42MzA5NTNkNTljNTI3NiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC90b29scy9jcHVjYXBzXG5AQCAtNzAsNiAmIzQzOzcwLDcgQEAgSEFTX1ZJUlRfSE9TVF9FWFROXG4gSEFTX1dGWFRcbiBIQVNfWE5YXG4gSEFGVFxuJiM0MztIVk9fQ09NUEFUSUJMRVxuIEhXX0RCTVxuIEtWTV9IVkhFXG4gS1ZNX1BST1RFQ1RFRF9NT0RFXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5pbmRleCAyNDhmNjJkMGI1OTBlYy4uOTMyMmQ5NjJjOWNjODAgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuQEAgLTI0LDYgJiM0MzsyNCwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLCBwZ3RhYmxlX3QgcHRlKVxuIFx0c2V0X3BtZChwbWQsIF9fcG1kKCh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwdGUpKSk7XG4gfVxuIFxuJiM0MzsjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9QT1BVTEFURV9WTUVNTUFQX1BNRFxuJiM0MztzdGF0aWMgaW5saW5lIGludCB0cnlfcG9wdWxhdGVfdm1lbW1hcF9wbWQocG1kX3QgKnBtZHAsIHB0ZV90ICpwZ3RhYmxlLFxuJiM0MztcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0cG1kX3BvcHVsYXRlX2tlcm5lbChcdTAwMjZpbml0X21tLCBwbWRwLCBwZ3RhYmxlKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERURcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgcHVkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkLCBwbWRfdCAqcG1kKVxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggMjIzNTI4YzA0ZDczOTIuLmU3YjY1MDU2ZWY3Mzg0IDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC02MzgsNiAmIzQzOzYzOCwxNCBAQCBzdGF0aWMgaW5saW5lIGxvbmcgcG1kX3Byb3Rub25lKHBtZF90IHBtZClcbiAjZGVmaW5lIHBtZF9sZWFmKHBtZClcdFx0KChwbWRfdmFsKHBtZCkgXHUwMDI2IF9QQUdFX0hVR0UpICE9IDApXG4gI2RlZmluZSBwdWRfbGVhZihwdWQpXHRcdCgocHVkX3ZhbChwdWQpIFx1MDAyNiBfUEFHRV9IVUdFKSAhPSAwKVxuIFxuJiM0MzsjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9VUERBVEVfVk1FTU1BUF9QVEVcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuJiM0MztcdFx0XHRcdFx0IHB0ZV90IHB0ZSlcbiYjNDM7e1xuJiM0MztcdHNldF9wdGUocHRlcCwgcHRlKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFdlIHByb3ZpZGUgb3VyIG93biBnZXRfdW5tYXBwZWQgYXJlYSB0byBjb3BlIHdpdGggdGhlIHZpcnR1YWwgYWxpYXNpbmdcbiAgKiBjb25zdHJhaW50cyBwbGFjZWQgb24gdXMgYnkgdGhlIGNhY2hlIGFyY2hpdGVjdHVyZS5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5pbmRleCA3NzBjZTE4YTczMjhiOC4uOGRiYmU2MmIyNTc0MjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbkBAIC0zMSw2ICYjNDM7MzEsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdHNldF9wbWQocG1kLCBfX3BtZCgocGZuIFx1MDAzY1x1MDAzYyBfUEFHRV9QRk5fU0hJRlQpIHwgX1BBR0VfVEFCTEUpKTtcbiB9XG4gXG4mIzQzOyNkZWZpbmUgX19IQVZFX0FSQ0hfVFJZX1BPUFVMQVRFX1ZNRU1NQVBfUE1EXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWRfdCAqcG1kcCwgcHRlX3QgKnBndGFibGUsXG4mIzQzO1x0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFkZHIpXG4mIzQzO3tcbiYjNDM7XHRwbWRfcG9wdWxhdGVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHBtZHAsIHBndGFibGUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuICNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQsIHBtZF90ICpwbWQpXG4ge1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDVkNTc1NmJkYTgyZTNkLi5hMTFjNTY5ZWUyZjA2ZiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTExNjIsNiAmIzQzOzExNjIsMTQgQEAgc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbW9kaWZ5KHB1ZF90IHB1ZCwgcGdwcm90X3QgbmV3cHJvdClcbiBcbiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4gXG4mIzQzOyNkZWZpbmUgX19IQVZFX0FSQ0hfVFJZX1VQREFURV9WTUVNTUFQX1BURVxuJiM0MztzdGF0aWMgaW5saW5lIGludCB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4mIzQzO1x0XHRcdFx0XHQgcHRlX3QgcHRlKVxuJiM0Mzt7XG4mIzQzO1x0c2V0X3B0ZShwdGVwLCBwdGUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogRW5jb2RlL2RlY29kZSBzd2FwIGVudHJpZXMgYW5kIHN3YXAgUFRFcy4gU3dhcCBQVEVzIGFyZSBhbGwgUFRFcyB0aGF0XG4gICogYXJlICFwdGVfbm9uZSgpIFx1MDAyNlx1MDAyNiAhcHRlX3ByZXNlbnQoKS5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbmluZGV4IGM4ODY5MWIxNWYzYzY3Li40N2I1NmJiZDYyMzYxNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5AQCAtODIsNiAmIzQzOzgyLDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsXG4gXHRzZXRfcG1kKHBtZCwgX19wbWQoKChwdGV2YWxfdClwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpIHwgX1BBR0VfVEFCTEUpKTtcbiB9XG4gXG4mIzQzOyNkZWZpbmUgX19IQVZFX0FSQ0hfVFJZX1BPUFVMQVRFX1ZNRU1NQVBfUE1EXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWRfdCAqcG1kcCwgcHRlX3QgKnBndGFibGUsXG4mIzQzO1x0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFkZHIpXG4mIzQzO3tcbiYjNDM7XHRwbWRfcG9wdWxhdGVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHBtZHAsIHBndGFibGUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuICNpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDJcbiBleHRlcm4gdm9pZCBfX19wbWRfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcG1kX3QgKnBtZCk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCBhYzI5NWNhNmM5MmY5OS4uOTc0MTUxNTY0MDcxY2IgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTEzNzIsNiAmIzQzOzEzNzIsMTQgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiB9XG4gI2VuZGlmXG4gXG4mIzQzOyNkZWZpbmUgX19IQVZFX0FSQ0hfVFJZX1VQREFURV9WTUVNTUFQX1BURVxuJiM0MztzdGF0aWMgaW5saW5lIGludCB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4mIzQzO1x0XHRcdFx0XHQgcHRlX3QgcHRlKVxuJiM0Mzt7XG4mIzQzO1x0c2V0X3B0ZShwdGVwLCBwdGUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oXG5pbmRleCBlMWEyZTFiN2M4ZTdiOC4uYzQ3OTZjNTRiNzAyYTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmhcbkBAIC0xMjgsNCAmIzQzOzEyOCwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCh2b2lkKVxuIH1cbiAjZW5kaWYgLyogX19IQVZFX0FSQ0hfR0lHQU5USUNfUEFHRV9SVU5USU1FX1NVUFBPUlRFRCAqL1xuIFxuJiM0MzsjaWZuZGVmIF9fSEFWRV9BUkNIX0hWT19TVVBQT1JURURcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGFyY2hfaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl9zdXBwb3J0ZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUCk7XG4mIzQzO31cbiYjNDM7I2VuZGlmIC8qIF9fSEFWRV9BUkNIX0hWT19TVVBQT1JURUQgKi9cbiYjNDM7XG4gI2VuZGlmIC8qIF9BU01fR0VORVJJQ19IVUdFVExCX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiX3ZtZW1tYXAuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hNjcxZWI0YTRmZjQ2NlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdldGxiX3ZtZW1tYXAuaFxuQEAgLTAsMCAmIzQzOzEsMjAgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7I2lmbmRlZiBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0hcbiYjNDM7I2RlZmluZSBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbiYjNDM7XG4mIzQzO2Jvb2wgaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZSh2b2lkKTtcbiYjNDM7XG4mIzQzOyNlbHNlIC8qIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUCAqL1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGUodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaCBiL2luY2x1ZGUvbGludXgvcGdhbGxvYy5oXG5pbmRleCA5MTc0ZmE1OWJiYzU0ZC4uZWQ0NDZkOTVjYTM3MzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmhcbkBAIC0yNiw0ICYjNDM7MjYsMjQgQEBcbiBcdFx0XHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKGFkZHIsIGFkZHIpO1x0XHRcXFxuIFx0fSB3aGlsZSAoMClcbiBcbiYjNDM7I2lmbmRlZiBfX0hBVkVfQVJDSF9UUllfUE9QVUxBVEVfVk1FTU1BUF9QTURcbiYjNDM7LypcbiYjNDM7ICogdHJ5X3BvcHVsYXRlX3ZtZW1tYXBfcG1kIC0gUG9wdWxhdGUgYSBQTUQgdGhhdCBpcyBpbiB1c2UgYnkgdGhlIHZtZW1tYXAuXG4mIzQzOyAqIEBhZGRyOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHJlbWFwcGVkIFBNRC5cbiYjNDM7ICogQHBtZHA6IFBhZ2UgdGFibGUgcG9pbnRlciB0byBiZSBvdmVyd3JpdHRlbi5cbiYjNDM7ICogQHBndGFibGU6IFBvaW50ZXIgdG8gdGhlIHBhZ2UgdGFibGUgdGhhdCB0aGUgbmV3IFBNRCB3aWxsIHBvaW50IHRvLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdG8gYmUgdXNlZCB0byB1cGRhdGUgUE1EcyB0aGF0IG1hcCB0aGUgdm1lbW1hcCB0b1xuJiM0MzsgKiBwb2ludCB0byBhIHBhZ2Ugb2YgYWxyZWFkeS1wb3B1bGF0ZWQgUFRFcyB0aGF0IG1hcCB0aGUgc2FtZSBwYWdlcy5cbiYjNDM7ICpcbiYjNDM7ICogSW1wbGVtZW50YXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gbXVzdCBlbnN1cmUgdGhhdCwgd2hpbGUgdGhlIHVwZGF0ZSBpcyB0YWtpbmdcbiYjNDM7ICogcGxhY2UsIENQVXMgd2lsbCBub3QgZmF1bHQgb24gdGhlIHJlbWFwcGVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWRfdCAqcG1kcCwgcHRlX3QgKnBndGFibGUsXG4mIzQzO1x0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFkZHIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuICNlbmRpZiAvKiBfTElOVVhfUEdBTExPQ19IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxuaW5kZXggMjk4MWUzODZkYTdiM2MuLmUxYWJjY2Y3NmJiNDYzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5AQCAtNDU3LDYgJiM0Mzs0NTcsMjcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gI2VuZGlmXG4gI2RlZmluZSBzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBwdGUpIHNldF9wdGVzKG1tLCBhZGRyLCBwdGVwLCBwdGUsIDEpXG4gXG4mIzQzOyNpZm5kZWYgX19IQVZFX0FSQ0hfVFJZX1VQREFURV9WTUVNTUFQX1BURVxuJiM0MzsvKlxuJiM0MzsgKiB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlIC0gUmVtYXAgUFRFcyB1c2VkIGJ5IHRoZSB2bWVtbWFwLlxuJiM0MzsgKiBAYWRkcjogQmFzZSBhZGRyZXNzIG9mIHRoZSByZW1hcHBlZCBQVEUuXG4mIzQzOyAqIEBwdGVwOiBQYWdlIHRhYmxlIHBvaW50ZXIgdG8gYmUgb3ZlcndyaXR0ZW4uXG4mIzQzOyAqIEBwdGU6IFBhZ2UgdGFibGUgZW50cnkgdG8gd3JpdGUuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSB0byBiZSB1c2VkIHRvIHVwZGF0ZSBQVEVzIHRoYXQgbWFwIHRoZSB2bWVtbWFwLiBUaGVcbiYjNDM7ICogb25seSB2YWxpZCB0cmFuc2l0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBmdW5jdGlvbiBhcmU6IGxlYWYtbGV2ZWxcbiYjNDM7ICogKFBBR0VfU0laRSksIHZhbGlkLXRvLXZhbGlkLiBUaGUgcGZuIGFuZCBwcm90IGJpdHMgbWF5IGJlIGNoYW5nZWQuXG4mIzQzOyAqXG4mIzQzOyAqIEltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgZW5zdXJlIHRoYXQsIHdoaWxlIHRoZSB1cGRhdGUgaXMgdGFraW5nXG4mIzQzOyAqIHBsYWNlLCBDUFVzIHdpbGwgbm90IGZhdWx0IG9uIHRoZSByZW1hcHBlZCB2aXJ0dWFsIGFkZHJlc3MuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4mIzQzO1x0XHRcdFx0XHQgcHRlX3QgcHRlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAjaWZuZGVmIF9fSEFWRV9BUkNIX1BURVBfU0VUX0FDQ0VTU19GTEFHU1xuIGV4dGVybiBpbnQgcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXAsXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA1NzEyMTJiODA4MzVlYy4uMjk4NjczYTZjNTdjNWMgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTQ3LDcgJiM0Mzs0Nyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbm9kZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9vd25lci5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2V0bGJfdm1lbW1hcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aHVnZXRsYl9jbWEuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2h1Z2V0bGJfaW50ZXJuYWwuaFwmIzM0O1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmhcdTAwM2VcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiX3N5c2ZzLmMgYi9tbS9odWdldGxiX3N5c2ZzLmNcbmluZGV4IDc5ZWNlOTE0MDZiZmE0Li44M2E5NWY1MTQyZjVhNCAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGJfc3lzZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYl9zeXNmcy5jXG5AQCAtOCw3ICYjNDM7OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9vd25lci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZS1pc29sYXRpb24uaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwmIzM0O2h1Z2V0bGJfdm1lbW1hcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aHVnZXRsYl9pbnRlcm5hbC5oXCYjMzQ7XG4gXG4gI2RlZmluZSBIU1RBVEVfQVRUUl9STyhfbmFtZSkgXFxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiX3ZtZW1tYXAuYyBiL21tL2h1Z2V0bGJfdm1lbW1hcC5jXG5pbmRleCAxMzNiNDZkZmIwOWY1Yy4uN2U3Zjg1NzljYzJhZTUgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiX3ZtZW1tYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYl92bWVtbWFwLmNcbkBAIC0xNiw5ICYjNDM7MTYsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbWRlYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdld2Fsay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGdhbGxvYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2h1Z2V0bGIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdldGxiX3ZtZW1tYXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS90bGJmbHVzaC5oXHUwMDNlXG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXRsYl92bWVtbWFwLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gXG4gLyoqXG5AQCAtMzQsNyAmIzQzOzM2LDcgQEBcbiAgKlx0XHRcdG9wZXJhdGlvbnMuXG4gICovXG4gc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayB7XG4tXHR2b2lkXHRcdFx0KCpyZW1hcF9wdGUpKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRpbnRcdFx0XHQoKnJlbWFwX3B0ZSkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspO1xuIFxuIFx0dW5zaWduZWQgbG9uZ1x0XHRucl93YWxrZWQ7XG5AQCAtNTQsNiAmIzQzOzU2LDcgQEAgc3RhdGljIGludCB2bWVtbWFwX3NwbGl0X3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgcGFnZSAqaGVhZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHQgICAgIHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspXG4ge1xuIFx0cG1kX3QgX19wbWQ7XG4mIzQzO1x0aW50IHJldDtcbiBcdGludCBpO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gc3RhcnQ7XG4gXHRwdGVfdCAqcGd0YWJsZTtcbkBAIC03Myw4ICYjNDM7NzYsMTUgQEAgc3RhdGljIGludCB2bWVtbWFwX3NwbGl0X3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgcGFnZSAqaGVhZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0c2V0X3B0ZV9hdChcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIGVudHJ5KTtcbiBcdH1cbiBcbiYjNDM7XHRyZXQgPSAwO1xuIFx0c3Bpbl9sb2NrKFx1MDAyNmluaXRfbW0ucGFnZV90YWJsZV9sb2NrKTtcbiBcdGlmIChsaWtlbHkocG1kX2xlYWYoKnBtZCkpKSB7XG4mIzQzO1x0XHQvKiBNYWtlIHB0ZSB2aXNpYmxlIGJlZm9yZSBwbWQuIFNlZSBjb21tZW50IGluIHBtZF9pbnN0YWxsKCkuICovXG4mIzQzO1x0XHRzbXBfd21iKCk7XG4mIzQzO1x0XHRyZXQgPSB0cnlfcG9wdWxhdGVfdm1lbW1hcF9wbWQocG1kLCBwZ3RhYmxlLCBzdGFydCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIGZyZWU7XG4mIzQzO1xuIFx0XHQvKlxuIFx0XHQgKiBIaWdoZXIgb3JkZXIgYWxsb2NhdGlvbnMgZnJvbSBidWRkeSBhbGxvY2F0b3IgbXVzdCBiZSBhYmxlIHRvXG4gXHRcdCAqIGJlIHRyZWF0ZWQgYXMgaW5kZXBlbmRlbnQgc21hbGwgcGFnZXMgKGFzIHRoZXkgY2FuIGJlIGZyZWVkXG5AQCAtODMsMTcgJiM0Mzs5MywxNyBAQCBzdGF0aWMgaW50IHZtZW1tYXBfc3BsaXRfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBwYWdlICpoZWFkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRpZiAoIVBhZ2VSZXNlcnZlZChoZWFkKSlcbiBcdFx0XHRzcGxpdF9wYWdlKGhlYWQsIGdldF9vcmRlcihQTURfU0laRSkpO1xuIFxuLVx0XHQvKiBNYWtlIHB0ZSB2aXNpYmxlIGJlZm9yZSBwbWQuIFNlZSBjb21tZW50IGluIHBtZF9pbnN0YWxsKCkuICovXG4tXHRcdHNtcF93bWIoKTtcbi1cdFx0cG1kX3BvcHVsYXRlX2tlcm5lbChcdTAwMjZpbml0X21tLCBwbWQsIHBndGFibGUpO1xuIFx0XHRpZiAoISh3YWxrLVx1MDAzZWZsYWdzIFx1MDAyNiBWTUVNTUFQX1NQTElUX05PX1RMQl9GTFVTSCkpXG4gXHRcdFx0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgc3RhcnQgJiM0MzsgUE1EX1NJWkUpO1xuLVx0fSBlbHNlIHtcbi1cdFx0cHRlX2ZyZWVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHBndGFibGUpO1xuLVx0fVxuLVx0c3Bpbl91bmxvY2soXHUwMDI2aW5pdF9tbS5wYWdlX3RhYmxlX2xvY2spO1xuJiM0MztcdH0gZWxzZVxuJiM0MztcdFx0Z290byBmcmVlO1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO291dDpcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZpbml0X21tLnBhZ2VfdGFibGVfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7ZnJlZTpcbiYjNDM7XHRwdGVfZnJlZV9rZXJuZWwoXHUwMDI2aW5pdF9tbSwgcGd0YWJsZSk7XG4mIzQzO1x0Z290byBvdXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm1lbW1hcF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuQEAgLTE0MSwxMSAmIzQzOzE1MSwxMyBAQCBzdGF0aWMgaW50IHZtZW1tYXBfcHRlX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4ge1xuIFx0c3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqdm1lbW1hcF93YWxrID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdGludCByZXQgPSAwO1xuIFxuLVx0dm1lbW1hcF93YWxrLVx1MDAzZXJlbWFwX3B0ZShwdGUsIGFkZHIsIHZtZW1tYXBfd2Fsayk7XG4tXHR2bWVtbWFwX3dhbGstXHUwMDNlbnJfd2Fsa2VkJiM0MzsmIzQzOztcbiYjNDM7XHRyZXQgPSB2bWVtbWFwX3dhbGstXHUwMDNlcmVtYXBfcHRlKHB0ZSwgYWRkciwgdm1lbW1hcF93YWxrKTtcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdHZtZW1tYXBfd2Fsay1cdTAwM2Vucl93YWxrZWQmIzQzOyYjNDM7O1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyB2bWVtbWFwX3JlbWFwX29wcyA9IHtcbkBAIC0xNjQsMTMgJiM0MzsxNzYsMTEgQEAgc3RhdGljIGludCB2bWVtbWFwX3JlbWFwX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0cmV0ID0gd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZShzdGFydCwgZW5kLCBcdTAwMjZ2bWVtbWFwX3JlbWFwX29wcyxcbiBcdFx0XHRcdCAgICBOVUxMLCB3YWxrKTtcbiBcdG1tYXBfcmVhZF91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0aWYgKHdhbGstXHUwMDNlcmVtYXBfcHRlIFx1MDAyNlx1MDAyNiAhKHdhbGstXHUwMDNlZmxhZ3MgXHUwMDI2IFZNRU1NQVBfUkVNQVBfTk9fVExCX0ZMVVNIKSlcbiBcdFx0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKTtcbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qXG5AQCAtMTk5LDE4ICYjNDM7MjA5LDIwIEBAIHN0YXRpYyB2b2lkIGZyZWVfdm1lbW1hcF9wYWdlX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbiBcdFx0ZnJlZV92bWVtbWFwX3BhZ2UocGFnZSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZtZW1tYXBfcmVtYXBfcHRlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHQgICAgICBzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrICp3YWxrKVxuJiM0MztzdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfcHRlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrICp3YWxrKVxuIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlID0gcHRlX3BhZ2UocHRlcF9nZXQocHRlKSk7XG4gXHRwdGVfdCBlbnRyeTtcbiYjNDM7XHRib29sIGhlYWQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aGVhZCA9IHdhbGstXHUwMDNlbnJfd2Fsa2VkID09IDAgXHUwMDI2XHUwMDI2IHdhbGstXHUwMDNldm1lbW1hcF9oZWFkO1xuIFxuIFx0LyogUmVtYXBwaW5nIHRoZSBoZWFkIHBhZ2UgcmVxdWlyZXMgci93ICovXG4tXHRpZiAodW5saWtlbHkod2Fsay1cdTAwM2Vucl93YWxrZWQgPT0gMCBcdTAwMjZcdTAwMjYgd2Fsay1cdTAwM2V2bWVtbWFwX2hlYWQpKSB7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGhlYWQpKSB7XG4gXHRcdFZNX1dBUk5fT05fT05DRSghUGFnZUhlYWQoKGNvbnN0IHN0cnVjdCBwYWdlICopYWRkcikpO1xuIFxuLVx0XHRsaXN0X2RlbChcdTAwMjZ3YWxrLVx1MDAzZXZtZW1tYXBfaGVhZC1cdTAwM2VscnUpO1xuLVxuIFx0XHQvKlxuIFx0XHQgKiBNYWtlcyBzdXJlIHRoYXQgcHJlY2VkaW5nIHN0b3JlcyB0byB0aGUgcGFnZSBjb250ZW50cyBmcm9tXG4gXHRcdCAqIHZtZW1tYXBfcmVtYXBfZnJlZSgpIGJlY29tZSB2aXNpYmxlIGJlZm9yZSB0aGUgc2V0X3B0ZV9hdCgpXG5AQCAtMjI5LDM1ICYjNDM7MjQxLDU2IEBAIHN0YXRpYyB2b2lkIHZtZW1tYXBfcmVtYXBfcHRlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0ZW50cnkgPSBta19wdGUod2Fsay1cdTAwM2V2bWVtbWFwX3RhaWwsIFBBR0VfS0VSTkVMX1JPKTtcbiBcdH1cbiBcbiYjNDM7XHRyZXQgPSB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKGFkZHIsIHB0ZSwgZW50cnkpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBXZSBzdWNjZXNzZnVsbHkgb3Zlcndyb3RlIHRoZSB2bWVtbWFwIFBURSwgc28gd2UgY2FuIGZyZWVcbiYjNDM7XHQgKiB0aGUgdm1lbW1hcCBwYWdlIHRoYXQgd2FzIGp1c3QgdW5tYXBwZWQsIGFuZCBpZiB3ZSBtYXBwZWRcbiYjNDM7XHQgKiB0aGUgbmV3IGhlYWQgcGFnZSwgcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3Qgc28gdGhhdCBpdFxuJiM0MztcdCAqIGRvZXNuJiMzOTt0IGdldCBmcmVlZCBsYXRlci5cbiYjNDM7XHQgKi9cbiBcdGxpc3RfYWRkKFx1MDAyNnBhZ2UtXHUwMDNlbHJ1LCB3YWxrLVx1MDAzZXZtZW1tYXBfcGFnZXMpO1xuLVx0c2V0X3B0ZV9hdChcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIGVudHJ5KTtcbiYjNDM7XHRpZiAoaGVhZClcbiYjNDM7XHRcdGxpc3RfZGVsKFx1MDAyNndhbGstXHUwMDNldm1lbW1hcF9oZWFkLVx1MDAzZWxydSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB2bWVtbWFwX3Jlc3RvcmVfcHRlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHRcdHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspXG4mIzQzO3N0YXRpYyBpbnQgdm1lbW1hcF9yZXN0b3JlX3B0ZShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrICp3YWxrKVxuIHtcbiBcdHN0cnVjdCBwYWdlICpzcmMgPSBwdGVfcGFnZShwdGVwX2dldChwdGUpKSwgKmRzdDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCF3YWxrLVx1MDAzZXZtZW1tYXBfdGFpbCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdC8qXG4tXHQgKiBXaGVuIHJvbGxpbmcgYmFjayB2bWVtbWFwX3JlbWFwX2ZyZWUoKSwga2VlcCB0aGUgY29waWVkIGhlYWQgcGFnZVxuJiM0MztcdCAqIFdoZW4gcmVzdG9yaW5nIGEgcGFydGlhbGx5LUhWT2VkIHBhZ2UsIGtlZXAgdGhlIGNvcGllZCBoZWFkIHBhZ2VcbiBcdCAqIG1hcHBpbmcgYW5kIHJlc3RvcmUgb25seSBQVEVzIGN1cnJlbnRseSBwb2ludGluZyBhdCB0aGUgc2hhcmVkIHRhaWxcbiBcdCAqIHBhZ2UuXG4gXHQgKi9cbi1cdGlmICh3YWxrLVx1MDAzZXZtZW1tYXBfdGFpbCBcdTAwMjZcdTAwMjYgd2Fsay1cdTAwM2V2bWVtbWFwX3RhaWwgIT0gc3JjKVxuLVx0XHRyZXR1cm47XG4mIzQzO1x0aWYgKHdhbGstXHUwMDNldm1lbW1hcF90YWlsICE9IHNyYylcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKFBhZ2VIZWFkKChjb25zdCBzdHJ1Y3QgcGFnZSAqKWFkZHIpKTtcbiBcbiBcdGRzdCA9IGxpc3RfZmlyc3RfZW50cnkod2Fsay1cdTAwM2V2bWVtbWFwX3BhZ2VzLCBzdHJ1Y3QgcGFnZSwgbHJ1KTtcbi1cdGxpc3RfZGVsKFx1MDAyNmRzdC1cdTAwM2VscnUpO1xuIFx0Y29weV9wYWdlKHBhZ2VfdG9fdmlydChkc3QpLCBwYWdlX3RvX3ZpcnQoc3JjKSk7XG4gXG4gXHQvKlxuIFx0ICogTWFrZXMgc3VyZSB0aGF0IHByZWNlZGluZyBzdG9yZXMgdG8gdGhlIHBhZ2UgY29udGVudHMgYmVjb21lIHZpc2libGVcbi1cdCAqIGJlZm9yZSB0aGUgc2V0X3B0ZV9hdCgpIHdyaXRlLlxuJiM0MztcdCAqIGJlZm9yZSB0aGUgdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZSgpIHdyaXRlLlxuIFx0ICovXG4gXHRzbXBfd21iKCk7XG4tXHRzZXRfcHRlX2F0KFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSwgbWtfcHRlKGRzdCwgUEFHRV9LRVJORUwpKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZShhZGRyLCBwdGUsIG1rX3B0ZShkc3QsIFBBR0VfS0VSTkVMKSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGxpc3RfZGVsKFx1MDAyNmRzdC1cdTAwM2VscnUpO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiAvKipcbkBAIC0yNzksNiAmIzQzOzMxMiw3IEBAIHN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9zcGxpdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbiBcdHJldHVybiB2bWVtbWFwX3JlbWFwX3JhbmdlKHN0YXJ0LCBlbmQsIFx1MDAyNndhbGspO1xuIH1cbiBcbiYjNDM7c3RhdGljIGNvbnN0IGludCBWTUVNTUFQX1JFTUFQX0lOQ09NUExFVEUgPSAxO1xuIC8qKlxuICAqIHZtZW1tYXBfcmVtYXBfZnJlZSAtIHJlbWFwIHRoZSB2bWVtbWFwIHZpcnR1YWwgYWRkcmVzcyByYW5nZSBbQHN0YXJ0LCBAZW5kKVxuICAqXHRcdFx0dG8gdXNlIEB2bWVtbWFwX2hlYWQvdGFpbCwgdGhlbiBmcmVlIHZtZW1tYXAgd2hpY2hcbkBAIC0yOTMsNyAmIzQzOzMyNyw4IEBAIHN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9zcGxpdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbiAgKlx0XHRyZXNwb25zaWJpbGl0eSB0byBmcmVlIHBhZ2VzLlxuICAqIEBmbGFnczpcdG1vZGlmaWNhdGlvbnMgdG8gdm1lbW1hcF9yZW1hcF93YWxrIGZsYWdzXG4gICpcbi0gKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuJiM0MzsgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsIFZNRU1NQVBfUkVNQVBfSU5DT01QTEVURSBpZiB0aGUgcGFnZSBpcyBpbmNvbXBsZXRlbHlcbiYjNDM7ICogICAgICAgICBvcHRpbWl6ZWQsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuICAqL1xuIHN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9mcmVlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBwYWdlICp2bWVtbWFwX2hlYWQsXG5AQCAtMzI4LDcgJiM0MzszNjMsOCBAQCBzdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfZnJlZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0LmZsYWdzXHRcdD0gMCxcbiBcdH07XG4gXG4tXHR2bWVtbWFwX3JlbWFwX3JhbmdlKHN0YXJ0LCBlbmQsIFx1MDAyNndhbGspO1xuJiM0MztcdGlmICh2bWVtbWFwX3JlbWFwX3JhbmdlKHN0YXJ0LCBlbmQsIFx1MDAyNndhbGspKVxuJiM0MztcdFx0cmV0dXJuIFZNRU1NQVBfUkVNQVBfSU5DT01QTEVURTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTM1NywxMCAmIzQzOzM5MywzOCBAQCBzdGF0aWMgaW50IGFsbG9jX3ZtZW1tYXBfcGFnZV9saXN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IHBhZ2UgKnZtZW1tYXBfZ2V0X3RhaWwodW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgem9uZSAqem9uZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHVuc2lnbmVkIGludCBpZHggPSBvcmRlciAtIFZNRU1NQVBfVEFJTF9NSU5fT1JERVI7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnRhaWwsICpwO1xuJiM0MztcdGludCBub2RlID0gem9uZV90b19uaWQoem9uZSk7XG4mIzQzO1xuJiM0MztcdHRhaWwgPSBSRUFEX09OQ0Uoem9uZS1cdTAwM2V2bWVtbWFwX3RhaWxzW2lkeF0pO1xuJiM0MztcdGlmIChsaWtlbHkodGFpbCkpXG4mIzQzO1x0XHRyZXR1cm4gdGFpbDtcbiYjNDM7XG4mIzQzO1x0dGFpbCA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIDApO1xuJiM0MztcdGlmICghdGFpbClcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRwID0gcGFnZV90b192aXJ0KHRhaWwpO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IHBhZ2UpOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGluaXRfY29tcG91bmRfdGFpbChwICYjNDM7IGksIE5VTEwsIG9yZGVyLCB6b25lKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNtcHhjaGcoXHUwMDI2em9uZS1cdTAwM2V2bWVtbWFwX3RhaWxzW2lkeF0sIE5VTEwsIHRhaWwpKSB7XG4mIzQzO1x0XHRfX2ZyZWVfcGFnZSh0YWlsKTtcbiYjNDM7XHRcdHRhaWwgPSBSRUFEX09OQ0Uoem9uZS1cdTAwM2V2bWVtbWFwX3RhaWxzW2lkeF0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRhaWw7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogdm1lbW1hcF9yZW1hcF9hbGxvYyAtIHJlbWFwIHRoZSB2bWVtbWFwIHZpcnR1YWwgYWRkcmVzcyByYW5nZSBbQHN0YXJ0LCBlbmQpXG4gICpcdFx0XHQgdG8gdGhlIHBhZ2Ugd2hpY2ggaXMgZnJvbSB0aGUgQHZtZW1tYXBfcGFnZXNcbiAgKlx0XHRcdCByZXNwZWN0aXZlbHkuXG4mIzQzOyAqIEBoOlx0XHR0aGUgaHN0YXRlIGZvciB0aGUgZm9saW8gd2hvc2Ugdm1lbW1hcCBpcyBnZXR0aW5nIHJlbWFwcGVkXG4mIzQzOyAqIEBmb2xpbzpcdHRoZSBmb2xpbyB3aG9zZSB2bWVtbWFwIGlzIGdldHRpbmcgcmVtYXBwZWRcbiAgKiBAc3RhcnQ6XHRzdGFydCBhZGRyZXNzIG9mIHRoZSB2bWVtbWFwIHZpcnR1YWwgYWRkcmVzcyByYW5nZSB0aGF0IHdlIHdhbnRcbiAgKlx0XHR0byByZW1hcC5cbiAgKiBAZW5kOlx0ZW5kIGFkZHJlc3Mgb2YgdGhlIHZtZW1tYXAgdmlydHVhbCBhZGRyZXNzIHJhbmdlIHRoYXQgd2Ugd2FudCB0b1xuQEAgLTM2OSwyMCAmIzQzOzQzMyw2OCBAQCBzdGF0aWMgaW50IGFsbG9jX3ZtZW1tYXBfcGFnZV9saXN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuICAqXG4gICogUmV0dXJuOiAlMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiAgKi9cbi1zdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfYWxsb2ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4mIzQzO3N0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9hbGxvYyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4ge1xuIFx0TElTVF9IRUFEKHZtZW1tYXBfcGFnZXMpO1xuLVx0c3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayB3YWxrID0ge1xuJiM0MztcdHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgd2FsaztcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqdm1lbW1hcF90YWlsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHZtZW1tYXBfdGFpbCA9IHZtZW1tYXBfZ2V0X3RhaWwoaC1cdTAwM2VvcmRlciwgZm9saW9fem9uZShmb2xpbykpO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIXZtZW1tYXBfdGFpbCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0aWYgKGFsbG9jX3ZtZW1tYXBfcGFnZV9saXN0KHN0YXJ0LCBlbmQsIFx1MDAyNnZtZW1tYXBfcGFnZXMpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHdhbGsgPSAoc3RydWN0IHZtZW1tYXBfcmVtYXBfd2Fsaykge1xuIFx0XHQucmVtYXBfcHRlXHQ9IHZtZW1tYXBfcmVzdG9yZV9wdGUsXG4mIzQzO1x0XHQudm1lbW1hcF90YWlsXHQ9IHZtZW1tYXBfdGFpbCxcbiBcdFx0LnZtZW1tYXBfcGFnZXNcdD0gXHUwMDI2dm1lbW1hcF9wYWdlcyxcbiBcdFx0LmZsYWdzXHRcdD0gZmxhZ3MsXG4gXHR9O1xuIFxuLVx0aWYgKGFsbG9jX3ZtZW1tYXBfcGFnZV9saXN0KHN0YXJ0LCBlbmQsIFx1MDAyNnZtZW1tYXBfcGFnZXMpKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRyZXQgPSB2bWVtbWFwX3JlbWFwX3JhbmdlKHN0YXJ0LCBlbmQsIFx1MDAyNndhbGspO1xuIFxuLVx0cmV0dXJuIHZtZW1tYXBfcmVtYXBfcmFuZ2Uoc3RhcnQsIGVuZCwgXHUwMDI2d2Fsayk7XG4mIzQzO1x0LyogTm90IGFsbCBwYWdlcyBtYXkgaGF2ZSBiZWVuIGNvbnN1bWVkICovXG4mIzQzO1x0ZnJlZV92bWVtbWFwX3BhZ2VfbGlzdChcdTAwMjZ2bWVtbWFwX3BhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZW51bSBodWdldGxiX2h2b19zdGF0dXMge1xuJiM0MztcdEhWT19JTkFDVElWRSA9IDAsXG4mIzQzO1x0SFZPX0FDVElWRSxcbiYjNDM7XHRIVk9fUEVSTUFORU5UTFlfSU5BQ1RJVkUsXG4mIzQzO307XG4mIzQzO3N0YXRpYyBlbnVtIGh1Z2V0bGJfaHZvX3N0YXR1cyBodm9fc3RhdHVzID0gSFZPX0lOQUNUSVZFO1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgaHVnZXRsYl9odm9fc3RhdHVzX3RyeV9zZXQoZW51bSBodWdldGxiX2h2b19zdGF0dXMgc3RhdHVzKVxuJiM0Mzt7XG4mIzQzO1x0ZW51bSBodWdldGxiX2h2b19zdGF0dXMgb2xkO1xuJiM0MztcbiYjNDM7XHRvbGQgPSBSRUFEX09OQ0UoaHZvX3N0YXR1cyk7XG4mIzQzO1xuJiM0MztyZXRyeTpcbiYjNDM7XHQvKiBUaGUgY3VycmVudCBzZXR0aW5nIGlzIHdoYXQgd2Ugd2FudC4gKi9cbiYjNDM7XHRpZiAob2xkID09IHN0YXR1cylcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgY3VycmVudCBzZXR0aW5nIGNhbm5vdCBiZSBjaGFuZ2VkLiAqL1xuJiM0MztcdGlmIChvbGQgIT0gSFZPX0lOQUNUSVZFKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRyeV9jbXB4Y2hnX3JlbGF4ZWQoXHUwMDI2aHZvX3N0YXR1cywgXHUwMDI2b2xkLCBzdGF0dXMpKVxuJiM0MztcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2wgaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGh1Z2V0bGJfaHZvX3N0YXR1c190cnlfc2V0KEhWT19QRVJNQU5FTlRMWV9JTkFDVElWRSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIHZtZW1tYXBfb3B0aW1pemVfZW5hYmxlZCA9IElTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT04pO1xuQEAgLTQxNSw3ICYjNDM7NTI3LDcgQEAgc3RhdGljIGludCBfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsXG4gXHQgKiBXaGVuIGEgSHVnZVRMQiBwYWdlIGlzIGZyZWVkIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IsIHByZXZpb3VzbHlcbiBcdCAqIGRpc2NhcmRlZCB2bWVtbWFwIHBhZ2VzIG11c3QgYmUgYWxsb2NhdGVkIGFuZCByZW1hcHBpbmcuXG4gXHQgKi9cbi1cdHJldCA9IHZtZW1tYXBfcmVtYXBfYWxsb2Modm1lbW1hcF9zdGFydCwgdm1lbW1hcF9lbmQsIGZsYWdzKTtcbiYjNDM7XHRyZXQgPSB2bWVtbWFwX3JlbWFwX2FsbG9jKGgsIGZvbGlvLCB2bWVtbWFwX3N0YXJ0LCB2bWVtbWFwX2VuZCwgZmxhZ3MpO1xuIFx0aWYgKCFyZXQpXG4gXHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pO1xuIFxuQEAgLTQ4NywzNiAmIzQzOzU5OSwxNiBAQCBzdGF0aWMgYm9vbCB2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9mb2xpbyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKlxuIFx0aWYgKCFSRUFEX09OQ0Uodm1lbW1hcF9vcHRpbWl6ZV9lbmFibGVkKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKCFodWdldGxiX3ZtZW1tYXBfb3B0aW1pemFibGUoaCkpXG4mIzQzO1x0aWYgKCFhcmNoX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fc3VwcG9ydGVkKCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiB0cnVlO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IHBhZ2UgKnZtZW1tYXBfZ2V0X3RhaWwodW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgem9uZSAqem9uZSlcbi17XG4tXHRjb25zdCB1bnNpZ25lZCBpbnQgaWR4ID0gb3JkZXIgLSBWTUVNTUFQX1RBSUxfTUlOX09SREVSO1xuLVx0c3RydWN0IHBhZ2UgKnRhaWwsICpwO1xuLVx0aW50IG5vZGUgPSB6b25lX3RvX25pZCh6b25lKTtcbi1cbi1cdHRhaWwgPSBSRUFEX09OQ0Uoem9uZS1cdTAwM2V2bWVtbWFwX3RhaWxzW2lkeF0pO1xuLVx0aWYgKGxpa2VseSh0YWlsKSlcbi1cdFx0cmV0dXJuIHRhaWw7XG4tXG4tXHR0YWlsID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgMCk7XG4tXHRpZiAoIXRhaWwpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0cCA9IHBhZ2VfdG9fdmlydCh0YWlsKTtcbi1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IHBhZ2UpOyBpJiM0MzsmIzQzOylcbi1cdFx0aW5pdF9jb21wb3VuZF90YWlsKHAgJiM0MzsgaSwgTlVMTCwgb3JkZXIsIHpvbmUpO1xuJiM0MztcdGlmICghaHVnZXRsYl92bWVtbWFwX29wdGltaXphYmxlKGgpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKGNtcHhjaGcoXHUwMDI2em9uZS1cdTAwM2V2bWVtbWFwX3RhaWxzW2lkeF0sIE5VTEwsIHRhaWwpKSB7XG4tXHRcdF9fZnJlZV9wYWdlKHRhaWwpO1xuLVx0XHR0YWlsID0gUkVBRF9PTkNFKHpvbmUtXHUwMDNldm1lbW1hcF90YWlsc1tpZHhdKTtcbi1cdH1cbiYjNDM7XHRpZiAoIWh1Z2V0bGJfaHZvX3N0YXR1c190cnlfc2V0KEhWT19BQ1RJVkUpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0cmV0dXJuIHRhaWw7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCxcbkBAIC01NzQsNyAmIzQzOzY2NiwxMSBAQCBzdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRcdFx0XHQgdm1lbW1hcF9oZWFkLCB2bWVtbWFwX3RhaWwsXG4gXHRcdFx0XHQgdm1lbW1hcF9wYWdlcywgZmxhZ3MpO1xuIG91dDpcbi1cdGlmIChyZXQpXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiByZXQgPT0gVk1FTU1BUF9SRU1BUF9JTkNPTVBMRVRFLCB0aGUgZm9saW8gbWlnaHQgYmUgcGFydGlhbGx5XG4mIzQzO1x0ICogSFZPZWQuIExlYXZlIHRoZSBIVk8gcGFnZSBmb2xpbyBmbGFnIGluIHBsYWNlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC03MTcsNiAmIzQzOzgxMywxNCBAQCBzdGF0aWMgYm9vbCB2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9ib290bWVtX3BhZ2Uoc3RydWN0IGh1Z2VfYm9vdG1lbV9wYWdlICptKVxuIFx0aWYgKCFSRUFEX09OQ0Uodm1lbW1hcF9vcHRpbWl6ZV9lbmFibGVkKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogQXJjaGl0ZWN0dXJlcyBtYXkgcmV0dXJuIGZhbHNlIGhlcmUgYnV0IHRydWUgYnkgdGhlIHRpbWVcbiYjNDM7XHQgKiBodWdldGxiX2luaXQoKSBpcyBjYWxsZWQuIEluIHRoaXMgY2FzZSwgYWx0aG91Z2ggdGhlIGZvbGlvcyB3aWxsXG4mIzQzO1x0ICogbm90IGJlIHByZS1IVk9lZCwgdGhleSB3aWxsIGJlIG9wdGltaXplZCBpbiBodWdldGxiX2luaXQoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWFyY2hfaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl9zdXBwb3J0ZWQoKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4gXHRpZiAoIWh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YWJsZShtLVx1MDAzZWhzdGF0ZSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC03NDIsNiAmIzQzOzg0Niw5IEBAIHN0YXRpYyBib29sIHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2Jvb3RtZW1fcGFnZShzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgKm0pXG4gXHQgICAgIUlTX0FMSUdORUQocHNpemUsIHBtZF92bWVtbWFwX3NpemUpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4mIzQzO1x0aWYgKCFodWdldGxiX2h2b19zdGF0dXNfdHJ5X3NldChIVk9fQUNUSVZFKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl92bWVtbWFwLmggYi9tbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaFxuc2ltaWxhcml0eSBpbmRleCA5NSVcbnJlbmFtZSBmcm9tIG1tL2h1Z2V0bGJfdm1lbW1hcC5oXG5yZW5hbWUgdG8gbW0vaHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmhcbmluZGV4IDE4YjQ5MDgyNTIxNTNkLi42YjI4NzgwMDE0YmMxOCAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGJfdm1lbW1hcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaFxuQEAgLTYsOCAmIzQzOzYsOCBAQFxuICAqXG4gICogICAgIEF1dGhvcjogTXVjaHVuIFNvbmcgXHUwMDNjc29uZ211Y2h1bkBieXRlZGFuY2UuY29tXHUwMDNlXG4gICovXG4tI2lmbmRlZiBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0hcbi0jZGVmaW5lIF9MSU5VWF9IVUdFVExCX1ZNRU1NQVBfSFxuJiM0MzsjaWZuZGVmIF9NTV9IVUdFVExCX1ZNRU1NQVBfSU5URVJOQUxfSFxuJiM0MzsjZGVmaW5lIF9NTV9IVUdFVExCX1ZNRU1NQVBfSU5URVJOQUxfSFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2h1Z2V0bGIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1ibG9jay5oXHUwMDNlXG5AQCAtOTUsNCAmIzQzOzk1LDQgQEAgc3RhdGljIGlubGluZSBib29sIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YWJsZShjb25zdCBzdHJ1Y3QgaHN0YXRlICpoKVxuIHtcbiBcdHJldHVybiBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemFibGVfc2l6ZShoKSAhPSAwO1xuIH1cbi0jZW5kaWYgLyogX0xJTlVYX0hVR0VUTEJfVk1FTU1BUF9IICovXG4mIzQzOyNlbmRpZiAvKiBfTU1fSFVHRVRMQl9WTUVNTUFQX0lOVEVSTkFMX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9zcGFyc2Utdm1lbW1hcC5jIGIvbW0vc3BhcnNlLXZtZW1tYXAuY1xuaW5kZXggOTllMmJlMzk2NzFiNjMuLjk0ZDVkYTlmOGFiN2MxIDEwMDY0NFxuLS0tIGEvbW0vc3BhcnNlLXZtZW1tYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3BhcnNlLXZtZW1tYXAuY1xuQEAgLTMyLDcgJiM0MzszMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2RtYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RsYmZsdXNoLmhcdTAwM2VcbiBcbi0jaW5jbHVkZSBcJiMzNDtodWdldGxiX3ZtZW1tYXAuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtodWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaFwmIzM0O1xuIFxuIC8qXG4gICogRmxhZ3MgZm9yIHZtZW1tYXBfcG9wdWxhdGVfcmFuZ2UgYW5kIGZyaWVuZHMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVAmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtZW1tYXBfc3BsaXRfcG1kJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfcmVtYXBfcHRlJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfcmVzdG9yZV9wdGUmIzM0OywKICAgICYjMzQ7dm1lbW1hcF9yZW1hcF9mcmVlJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfcmVtYXBfYWxsb2MmIzM0OywKICAgICYjMzQ7aHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvJiMzNDssCiAgICAmIzM0O19faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfc2hvdWxkX29wdGltaXplX2ZvbGlvJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfc2hvdWxkX29wdGltaXplX2Jvb3RtZW1fcGFnZSYjMzQ7LAogICAgJiMzNDtsYXRlX2NwdV9lbmFibGVfaHZvJiMzNDssCiAgICAmIzM0O2h2b19jb21wYXRpYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgQVJNNjQgc3VwcG9ydCBmb3IgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKS4gSXQgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgaW4gYG1tL2h1Z2V0bGJfdm1lbW1hcC5jYCB0byB1c2UgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgcG9wdWxhdGluZyBhbmQgdXBkYXRpbmcgdm1lbW1hcCBQTURzIGFuZCBQVEVzLiBJdCBhbHNvIGFkZHMgQ1BVIGNhcGFiaWxpdHkgY2hlY2tzIGZvciBIVk8gb24gQVJNNjQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gYWxsb2NhdGluZyBhbmQgZnJlZWluZyBIdWdlVExCIHBhZ2VzIHdpdGggSFZPIGVuYWJsZWQsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZGYyMzA1NDYyZWI4ZmFiOWFiY2I1ZjEyYjk3YjFmOTcwY2JhNTk1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgOCAxNToxMjoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggZjM3YTgxOTUwZTI1MGUuLjU1YmQ0YzA5ZjQ5NDk2IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtMTIwMTMsNiAmIzQzOzEyMDEzLDcgQEAgRjoJRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdAogRjoJRG9jdW1lbnRhdGlvbi9tbS92bWVtbWFwX2RlZHVwLnJzdAogRjoJZnMvaHVnZXRsYmZzLwogRjoJaW5jbHVkZS9saW51eC9odWdldGxiLmgKJiM0MztGOglpbmNsdWRlL2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oCiBGOglpbmNsdWRlL3RyYWNlL2V2ZW50cy9odWdldGxiZnMuaAogRjoJbW0vaHVnZXRsYi5jCiBGOgltbS9odWdldGxiX2Nncm91cC5jCkBAIC0xMjAyMSw3ICYjNDM7MTIwMjIsNyBAQCBGOgltbS9odWdldGxiX2NtYS5oCiBGOgltbS9odWdldGxiX3N5c2N0bC5jCiBGOgltbS9odWdldGxiX3N5c2ZzLmMKIEY6CW1tL2h1Z2V0bGJfdm1lbW1hcC5jCi1GOgltbS9odWdldGxiX3ZtZW1tYXAuaAomIzQzO0Y6CW1tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oCiBGOgl0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9odWdldGxiX21lbWNnLmMKIAogSFZBIFNUIE1FRElBIERSSVZFUgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnCmluZGV4IGIzYWZlMDY4ODkxOWJkLi4yYTU5MTU1ZjY4ZGNkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvS2NvbmZpZwpAQCAtMjU5LDYgJiM0MzsyNTksNyBAQCBjb25maWcgQVJNNjQKIAlzZWxlY3QgVVNFUl9TVEFDS1RSQUNFX1NVUFBPUlQKIAlzZWxlY3QgVkRTT19HRVRSQU5ET00KIAlzZWxlY3QgVk1BUF9TVEFDSwomIzQzOwlzZWxlY3QgQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUCBpZiBBUk02NF9IV19BRkRCTQogCWhlbHAKIAkgIEFSTSA2NC1iaXQgKEFBcmNoNjQpIExpbnV4IHN1cHBvcnQuCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1Y2Fwcy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVjYXBzLmgKaW5kZXggMjVjNjFjZGE5MDFjNWQuLjZkYjNlZjgyN2Y4NmE5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaApAQCAtNzUsNiAmIzQzOzc1LDggQEAgY3B1Y2FwX2lzX3Bvc3NpYmxlKGNvbnN0IHVuc2lnbmVkIGludCBjYXApCiAJCXJldHVybiBJU19FTkFCTEVEKENPTkZJR19IV19QRVJGX0VWRU5UUyk7CiAJY2FzZSBBUk02NF9IQVNfTFNVSToKIAkJcmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0FSTTY0X0xTVUkpOwomIzQzOwljYXNlIEFSTTY0X0hWT19DT01QQVRJQkxFOgomIzQzOwkJcmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKTsKIAl9CiAKIAlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKaW5kZXggYTU3ODcwZmE5NmRiNWIuLmQxNTA0ODA0ZjJiZWE5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaApAQCAtMzY3LDYgJiM0MzszNjcsMTQgQEAgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgewogCSAqIHJvdXRpbmUgbXVzdCBjaGVjayBpdCBiZWZvcmUgdGFraW5nIGFueSBhY3Rpb24uCiAJICovCiAJdm9pZCAoKmNwdV9lbmFibGUpKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXApOwomIzQzOwkvKgomIzQzOwkgKiBJbiByYXJlIGNhc2VzLCBjYXBhYmlsaXRpZXMgYXJlICpzb21ldGltZXMqIG9wdGlvbmFsIGZvciBsYXRlIENQVXMuCiYjNDM7CSAqIFRoaXMgY2FsbGJhY2sgYWxsb3dzIGEgY2FwYWJpbGl0eSB0byBwcmV2ZW50IG9ubGluaW5nIG9mCiYjNDM7CSAqIGluY29tcGF0aWJsZSBDUFVzIHdoZW4gdGhlIGNhcGFiaWxpdHkgaXMgaW4gZmFjdCByZXF1aXJlZC4KJiM0MzsJICoKJiM0MzsJICogUmV0dXJucyB0cnVlIGlmZiBvbmxpbmluZyB0aGUgQ1BVIGlzIHBlcm1pdHRlZC4KJiM0MzsJICovCiYjNDM7CWJvb2wgKCpsYXRlX2NwdV9lbmFibGUpKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXApOwogCXVuaW9uIHsKIAkJc3RydWN0IHsJLyogVG8gYmUgdXNlZCBmb3IgZXJyYXR1bSBoYW5kbGluZyBvbmx5ICovCiAJCQlzdHJ1Y3QgbWlkcl9yYW5nZSBtaWRyX3JhbmdlOwpAQCAtODg1LDYgJiM0Mzs4OTMsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KHZvaWQpCiAJcmV0dXJuIGFsdGVybmF0aXZlX2hhc19jYXBfdW5saWtlbHkoQVJNNjRfSEFTX0JCTUwyX05PQUJPUlQpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19odm8odm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBhbHRlcm5hdGl2ZV9oYXNfY2FwX3VubGlrZWx5KEFSTTY0X0hWT19DT01QQVRJQkxFKTsKJiM0Mzt9CiYjNDM7CiBpbnQgZG9fZW11bGF0ZV9tcnMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHUzMiBzeXNfcmVnLCB1MzIgcnQpOwogYm9vbCB0cnlfZW11bGF0ZV9tcnMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHUzMiBpc24pOwogCkBAIC05MTAsMjIgJiM0Mzs5MjMsMzYgQEAgc3RhdGljIGlubGluZSB1MzIgaWRfYWE2NG1tZnIwX3BhcmFuZ2VfdG9fcGh5c19zaGlmdChpbnQgcGFyYW5nZSkKIH0KIAogLyogQ2hlY2sgd2hldGhlciBoYXJkd2FyZSB1cGRhdGUgb2YgdGhlIEFjY2VzcyBmbGFnIGlzIHN1cHBvcnRlZCAqLwotc3RhdGljIGlubGluZSBib29sIGNwdV9oYXNfaHdfYWYodm9pZCkKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc3VwcG9ydHNfaHdfYWYoaW50IHNjb3BlKQogewogCXU2NCBtbWZyMTsKIAogCWlmICghSVNfRU5BQkxFRChDT05GSUdfQVJNNjRfSFdfQUZEQk0pKQogCQlyZXR1cm4gZmFsc2U7CiAKLQkvKgotCSAqIFVzZSBjYWNoZWQgdmVyc2lvbiB0byBhdm9pZCBlbXVsYXRlZCBtc3Igb3BlcmF0aW9uIG9uIEtWTQotCSAqIGd1ZXN0cy4KLQkgKi8KLQltbWZyMSA9IHJlYWRfc2FuaXRpc2VkX2Z0cl9yZWcoU1lTX0lEX0FBNjRNTUZSMV9FTDEpOwomIzQzOwlpZiAoc2NvcGUgPT0gU0NPUEVfU1lTVEVNKSB7CiYjNDM7CQkvKgomIzQzOwkJICogVXNlIGNhY2hlZCB2ZXJzaW9uIHRvIGF2b2lkIGVtdWxhdGVkIG1zciBvcGVyYXRpb24gb24gS1ZNCiYjNDM7CQkgKiBndWVzdHMuCiYjNDM7CQkgKi8KJiM0MzsJCW1tZnIxID0gcmVhZF9zYW5pdGlzZWRfZnRyX3JlZyhTWVNfSURfQUE2NE1NRlIxX0VMMSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQltbWZyMSA9IHJlYWRfY3B1aWQoSURfQUE2NE1NRlIxX0VMMSk7CiYjNDM7CX0KIAlyZXR1cm4gY3B1aWRfZmVhdHVyZV9leHRyYWN0X3Vuc2lnbmVkX2ZpZWxkKG1tZnIxLAogCQkJCQkJSURfQUE2NE1NRlIxX0VMMV9IQUZEQlNfU0hJRlQpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHN5c3RlbV9oYXNfaHdfYWYodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBzdXBwb3J0c19od19hZihTQ09QRV9TWVNURU0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgY3B1X2hhc19od19hZih2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN1cHBvcnRzX2h3X2FmKFNDT1BFX0xPQ0FMX0NQVSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBib29sIGNwdV9oYXNfcGFuKHZvaWQpCiB7CiAJdTY0IG1tZnIxID0gcmVhZF9jcHVpZChJRF9BQTY0TU1GUjFfRUwxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmgKaW5kZXggZDAzOGZmMTRkMTZjYWUuLjczYWY3OTExZmQ4MzEzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaApAQCAtMTEsNiAmIzQzOzExLDcgQEAKICNkZWZpbmUgX19BU01fSFVHRVRMQl9ICiAKICNpbmNsdWRlICZsdDthc20vY2FjaGVmbHVzaC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vY3B1ZmVhdHVyZS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9tdGUuaCZndDsKICNpbmNsdWRlICZsdDthc20vcGFnZS5oJmd0OwogCkBAIC02NSw2ICYjNDM7NjYsMTIgQEAgZXh0ZXJuIHZvaWQgaHVnZV9wdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsCiAJCQkJCSBwdGVfdCBvbGRfcHRlLCBwdGVfdCBuZXdfcHRlKTsKIAomIzQzOyNkZWZpbmUgX19IQVZFX0FSQ0hfSFZPX1NVUFBPUlRFRAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fc3VwcG9ydGVkKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3lzdGVtX3N1cHBvcnRzX2h2bygpOwomIzQzO30KJiM0MzsKICNpbmNsdWRlICZsdDthc20tZ2VuZXJpYy9odWdldGxiLmgmZ3Q7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX2h1Z2V0bGJfdGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCAxYjQ1MDlkMzM4MmM2My4uMjZiMDVmOGI3MGNkMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC0xMjEsNCAmIzQzOzEyMSw1OCBAQCBwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWRwLCBwZ3RhYmxlX3QgcHRlcCkKIAkJICAgICAgIFBNRF9UWVBFX1RBQkxFIHwgUE1EX1RBQkxFX0FGIHwgUE1EX1RBQkxFX1BYTik7CiB9CiAKJiM0MzsjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9QT1BVTEFURV9WTUVNTUFQX1BNRAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWRfdCAqcG1kcCwgcHRlX3QgKnBndGFibGUsCiYjNDM7CQkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7ewomIzQzOwljb25zdCBpbnQgbWF4X2F0dGVtcHRzID0gMTY7CiYjNDM7CWludCBhdHRlbXB0cyA9IDA7CiYjNDM7CXBtZF90IG9sZF9wbWQsIG5ld19wbWQ7CiYjNDM7CiYjNDM7CWlmICghc3lzdGVtX3N1cHBvcnRzX2h2bygpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlpZiAoc3lzdGVtX3N1cHBvcnRzX2JibWwyX25vYWJvcnQoKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIEJCTUwyX05PQUJPUlQgYWxsb3dzIGJsb2NrLSZndDt0YWJsZSB0cmFuc2l0aW9ucyBpZiB0aGUgUFRFcwomIzQzOwkJICogdW5kZXJuZWF0aCBkbyBub3QgY29uZmxpY3Qgd2l0aCBleGlzdGluZywgcG90ZW50aWFsbHkgY2FjaGVkCiYjNDM7CQkgKiB0cmFuc2xhdGlvbnMuCiYjNDM7CQkgKi8KJiM0MzsJCXBtZF9wb3B1bGF0ZV9rZXJuZWwoJmFtcDtpbml0X21tLCBwbWRwLCBwZ3RhYmxlKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5ld19wbWQgPSBfX3BtZChfX3BoeXNfdG9fcG1kX3ZhbChfX3BhKHBndGFibGUpKSB8CiYjNDM7CQkJUE1EX1RZUEVfVEFCTEUgfCBQTURfVEFCTEVfQUYgfCBQTURfVEFCTEVfVVhOKTsKJiM0MzsKJiM0MzsJb2xkX3BtZCA9IHBtZHBfZ2V0KHBtZHApOwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlpZiAoV0FSTl9PTl9PTkNFKCFwbWRfdmFsaWQob2xkX3BtZCkpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJaWYgKFdBUk5fT05fT05DRSghcG1kX2xlYWYob2xkX3BtZCkpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBhIGNvbnRpZ3VvdXMgUE1EIGhlcmUuICovCiYjNDM7CQlpZiAoV0FSTl9PTl9PTkNFKHBtZF9jb250KG9sZF9wbWQpKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCWlmIChwbWRfeW91bmcob2xkX3BtZCkpIHsKJiM0MzsJCQkvKiBfX3B0ZXBfY2xlYXJfeW91bmcoKSByZXR1cm5zIHRoZSBvdmVyd3JpdHRlbiBQVEUgKi8KJiM0MzsJCQlvbGRfcG1kID0gcHRlX3BtZChwdGVfbWtvbGQoX19wdGVwX2NsZWFyX3lvdW5nKChwdGVfdCAqKXBtZHApKSk7CiYjNDM7CiYjNDM7CQkJZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShhZGRyLCBhZGRyICYjNDM7IFBNRF9TSVpFKTsKJiM0MzsJCX0KJiM0MzsJLyoKJiM0MzsJICogVHJhbnNsYXRpb25zIHdpdGhvdXQgQUYgY2Fubm90IGJlIGNhY2hlZCwgc28gd2UgY2FuIHJlcGxhY2UKJiM0MzsJICogdGhlbSB3aXRob3V0IEJCTS4KJiM0MzsJICovCiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZ19yZWxheGVkKCZhbXA7cG1kX3ZhbCgqcG1kcCksICZhbXA7cG1kX3ZhbChvbGRfcG1kKSwKJiM0MzsJCQkJICAgICAgcG1kX3ZhbChuZXdfcG1kKSkgJmFtcDsmYW1wOwomIzQzOwkJICYjNDM7JiM0MzthdHRlbXB0cyAmbHQ7IG1heF9hdHRlbXB0cyk7CiYjNDM7CiYjNDM7CXJldHVybiBhdHRlbXB0cyA9PSBtYXhfYXR0ZW1wdHMgPyAtRUFHQUlOIDogMDsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggMjc2ODljNjJiZDI1ZGQuLjdiMTFhYTQxZDBhMDc0IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMTMwMiw4ICYjNDM7MTMwMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3B0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAlfX3NldF9wdGUocHRlcCwgX19wdGUoMCkpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgX19wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKQomIzQzO3N0YXRpYyBpbmxpbmUgcHRlX3QgX19wdGVwX2NsZWFyX3lvdW5nKHB0ZV90ICpwdGVwKQogewogCXB0ZV90IG9sZF9wdGUsIHB0ZTsKIApAQCAtMTMxNSw3ICYjNDM7MTMxNCwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgX19wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCQkgICAgICAgcHRlX3ZhbChvbGRfcHRlKSwgcHRlX3ZhbChwdGUpKTsKIAl9IHdoaWxlIChwdGVfdmFsKHB0ZSkgIT0gcHRlX3ZhbChvbGRfcHRlKSk7CiAKLQlyZXR1cm4gcHRlX3lvdW5nKHB0ZSk7CiYjNDM7CXJldHVybiBwdGU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKQomIzQzO3sKJiM0MzsJcmV0dXJuIHB0ZV95b3VuZyhfX3B0ZXBfY2xlYXJfeW91bmcocHRlcCkpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgX19wdGVwX2NsZWFyX2ZsdXNoX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLApAQCAtMTU5OCw3ICYjNDM7MTYwMyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbW11X2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLAogICogcGFnZSBhZnRlciBmb3JrKCkgJiM0MzsgQ29XIGZvciBwZm4gbWFwcGluZ3MuIFdlIGRvbiYjMzk7dCBhbHdheXMgaGF2ZSBhCiAgKiBoYXJkd2FyZS1tYW5hZ2VkIGFjY2VzcyBmbGFnIG9uIGFybTY0LgogICovCi0jZGVmaW5lIGFyY2hfaGFzX2h3X3B0ZV95b3VuZwkJY3B1X2hhc19od19hZgomIzQzOyNkZWZpbmUgYXJjaF9oYXNfaHdfcHRlX3lvdW5nCQlzeXN0ZW1faGFzX2h3X2FmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTk9OTEVBRl9QTURfWU9VTkcKICNkZWZpbmUgYXJjaF9oYXNfaHdfbm9ubGVhZl9wbWRfeW91bmcJc3lzdGVtX3N1cHBvcnRzX2hhZnQKQEAgLTE2MDgsNyAmIzQzOzE2MTMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKICAqIEV4cGVyaW1lbnRhbGx5LCBpdCYjMzk7cyBjaGVhcCB0byBzZXQgdGhlIGFjY2VzcyBmbGFnIGluIGhhcmR3YXJlIGFuZCB3ZQogICogYmVuZWZpdCBmcm9tIHByZWZhdWx0aW5nIG1hcHBpbmdzIGFzICYjMzk7b2xkJiMzOTsgdG8gc3RhcnQgd2l0aC4KICAqLwotI2RlZmluZSBhcmNoX3dhbnRzX29sZF9wcmVmYXVsdGVkX3B0ZQljcHVfaGFzX2h3X2FmCiYjNDM7I2RlZmluZSBhcmNoX3dhbnRzX29sZF9wcmVmYXVsdGVkX3B0ZQlzeXN0ZW1faGFzX2h3X2FmCiAKIC8qCiAgKiBSZXF1ZXN0IGV4ZWMgbWVtb3J5IGlzIHJlYWQgaW50byBwYWdlY2FjaGUgaW4gYXQgbGVhc3QgNjRLIGZvbGlvcy4gVGhpcyBzaXplCkBAIC0xNzkzLDYgJiM0MzsxNzk4LDQ4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJX19wdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApOwogfQogCiYjNDM7I2RlZmluZSBfX0hBVkVfQVJDSF9UUllfVVBEQVRFX1ZNRU1NQVBfUFRFCiYjNDM7c3RhdGljIGlubGluZSBpbnQgdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLAomIzQzOwkJCQkJIGNvbnN0IHB0ZV90IHB0ZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IGludCBtYXhfYXR0ZW1wdHMgPSAxNjsKJiM0MzsJaW50IGF0dGVtcHRzID0gMDsKJiM0MzsJcHRlX3Qgb2xkX3B0ZTsKJiM0MzsKJiM0MzsJaWYgKCFzeXN0ZW1fc3VwcG9ydHNfaHZvKCkpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CS8qIFRoaXMgcm91dGluZSBpcyBvbmx5IHRvIGJlIHVzZWQgZm9yIHZhbGlkLXRvLXZhbGlkIHRyYW5zaXRpb25zLiAqLwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFwdGVfdmFsaWQocHRlKSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJb2xkX3B0ZSA9IF9fcHRlcF9nZXQocHRlcCk7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCWlmIChXQVJOX09OX09OQ0UoIXB0ZV92YWxpZChvbGRfcHRlKSkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQkvKiBXZSBzaG91bGQgbmV2ZXIgZ2V0IGEgY29udGlndW91cyBQVEUgaGVyZS4gKi8KJiM0MzsJCWlmIChXQVJOX09OX09OQ0UocHRlX3ZhbGlkX2NvbnQob2xkX3B0ZSkpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJaWYgKHB0ZV95b3VuZyhvbGRfcHRlKSkgewomIzQzOwkJCS8qIF9fcHRlcF9jbGVhcl95b3VuZygpIHJldHVybnMgdGhlIG92ZXJ3cml0dGVuIFBURSAqLwomIzQzOwkJCW9sZF9wdGUgPSBwdGVfbWtvbGQoX19wdGVwX2NsZWFyX3lvdW5nKHB0ZXApKTsKJiM0MzsKJiM0MzsJCQlmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGFkZHIgJiM0MzsgUEFHRV9TSVpFKTsKJiM0MzsJCX0KJiM0MzsJLyoKJiM0MzsJICogVHJhbnNsYXRpb25zIHdpdGhvdXQgQUYgY2Fubm90IGJlIGNhY2hlZCwgc28gd2UgY2FuIHJlcGxhY2UKJiM0MzsJICogdGhlbSB3aXRob3V0IEJCTS4KJiM0MzsJICovCiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZ19yZWxheGVkKCZhbXA7cHRlX3ZhbCgqcHRlcCksICZhbXA7cHRlX3ZhbChvbGRfcHRlKSwKJiM0MzsJCQkJICAgICAgcHRlX3ZhbChwdGUpKSAmYW1wOyZhbXA7CiYjNDM7CQkgJiM0MzsmIzQzO2F0dGVtcHRzICZsdDsgbWF4X2F0dGVtcHRzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGF0dGVtcHRzID09IG1heF9hdHRlbXB0cyA/IC1FQUdBSU4gOiAwOwomIzQzO30KJiM0MzsKICNkZWZpbmUgY2xlYXJfZnVsbF9wdGVzIGNsZWFyX2Z1bGxfcHRlcwogc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2Z1bGxfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCXB0ZV90ICpwdGVwLCB1bnNpZ25lZCBpbnQgbnIsIGludCBmdWxsKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jCmluZGV4IDlhMjJkZjBjNTEyMGYzLi42NWJiM2M3Yzk1OTUyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYwpAQCAtNzYsNiAmIzQzOzc2LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9rYXNhbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BlcmNwdS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL2lzb2xhdGlvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9odWdldGxiX3ZtZW1tYXAuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS9hcm1fcG11djMuaCZndDsKICNpbmNsdWRlICZsdDthc20vY3B1LmgmZ3Q7CkBAIC0yMTcyLDYgJiM0MzsyMTczLDMxIEBAIHN0YXRpYyBib29sIGhhc19iYm1sMl9ub2Fib3J0KGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXBzLCBpbnQgc2NvCiAJcmV0dXJuIGNwdV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KCk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBodm9fY29tcGF0aWJsZShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwcywgaW50IHNjb3BlKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogV2UgbmVlZCBIVyBBRiBzdXBwb3J0IHRvIHN1cHBvcnQgY2hhbmdpbmcgdm1lbW1hcCBtYXBwaW5nIGxldmVsIGFuZAomIzQzOwkgKiBPQSB3aXRob3V0IHRha2luZyBmYXVsdHMuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gc3VwcG9ydHNfaHdfYWYoc2NvcGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBsYXRlX2NwdV9lbmFibGVfaHZvKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZCkKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUAomIzQzOwlpZiAoY3B1X2hhc19od19hZigpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIElmIHRoZSBDUFUgZG9lcyBub3Qgc3VwcG9ydCBIVyBBRiwgd2UgY2Fubm90IG9ubGluZSBpdCBpZiBIVk8gaXMKJiM0MzsJICogY3VycmVudGx5IGluIHVzZS4KJiM0MzsJICovCiYjNDM7CXJldHVybiBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKCk7CiYjNDM7I2Vsc2UKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgY3B1X2VuYWJsZV9wYW4oY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKl9fdW51c2VkKQogewogCS8qCkBAIC0zMDY3LDYgJiM0MzszMDkzLDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBhcm02NF9mZWF0dXJlc1tdID0gewogCQkudHlwZSA9IEFSTTY0X0NQVUNBUF9FQVJMWV9MT0NBTF9DUFVfRkVBVFVSRSwKIAkJLm1hdGNoZXMgPSBoYXNfYmJtbDJfbm9hYm9ydCwKIAl9LAomIzQzOwl7CiYjNDM7CQkuZGVzYyA9ICYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiBTdXBwb3J0JiMzNDssCiYjNDM7CQkuY2FwYWJpbGl0eSA9IEFSTTY0X0hWT19DT01QQVRJQkxFLAomIzQzOwkJLnR5cGUgPSBBUk02NF9DUFVDQVBfU0NPUEVfU1lTVEVNIHwKJiM0MzsJCQlBUk02NF9DUFVDQVBfT1BUSU9OQUxfRk9SX0xBVEVfQ1BVIHwKJiM0MzsJCQlBUk02NF9DUFVDQVBfUEVSTUlUVEVEX0ZPUl9MQVRFX0NQVSwKJiM0MzsJCS5tYXRjaGVzID0gaHZvX2NvbXBhdGlibGUsCiYjNDM7CQkubGF0ZV9jcHVfZW5hYmxlID0gbGF0ZV9jcHVfZW5hYmxlX2h2bywKJiM0MzsJfSwKIAl7CiAJCS5kZXNjID0gJiMzNDs1Mi1iaXQgVmlydHVhbCBBZGRyZXNzaW5nIGZvciBLVk0gKExQQTIpJiMzNDssCiAJCS5jYXBhYmlsaXR5ID0gQVJNNjRfSEFTX0xQQTIsCkBAIC0zNjY5LDYgJiM0MzszNzA0LDE0IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9sb2NhbF9jcHVfY2Fwcyh1MTYgc2NvcGVfbWFzaykKIAkJCSAqLwogCQkJaWYgKCFjcHVfaGFzX2NhcCAmYW1wOyZhbXA7ICFjcHVjYXBfbGF0ZV9jcHVfb3B0aW9uYWwoY2FwcykpCiAJCQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBTb21lIG9wdGlvbmFsIGZlYXR1cmVzIG1heSBpbiBmYWN0IGJlIHJlcXVpcmVkIGR1ZQomIzQzOwkJCSAqIHRvIHBhcnRpY3VsYXIgcnVudGltZSBjb25kaXRpb25zLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChjYXBzLSZndDtsYXRlX2NwdV9lbmFibGUgJmFtcDsmYW1wOyAhY2Fwcy0mZ3Q7bGF0ZV9jcHVfZW5hYmxlKGNhcHMpKQomIzQzOwkJCQlicmVhazsKJiM0MzsKIAkJCS8qCiAJCQkgKiBXZSBoYXZlIHRvIGlzc3VlIGNwdV9lbmFibGUoKSBpcnJlc3BlY3RpdmUgb2YKIAkJCSAqIHdoZXRoZXIgdGhlIENQVSBoYXMgaXQgb3Igbm90LCBhcyBpdCBpcyBlbmFiZWxkCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHMgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHMKaW5kZXggOWI4NWE4NGY2ZmQ0OTQuLjYzMDk1M2Q1OWM1Mjc2IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC90b29scy9jcHVjYXBzCkBAIC03MCw2ICYjNDM7NzAsNyBAQCBIQVNfVklSVF9IT1NUX0VYVE4KIEhBU19XRlhUCiBIQVNfWE5YCiBIQUZUCiYjNDM7SFZPX0NPTVBBVElCTEUKIEhXX0RCTQogS1ZNX0hWSEUKIEtWTV9QUk9URUNURURfTU9ERQpkaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IDI0OGY2MmQwYjU5MGVjLi45MzIyZDk2MmM5Y2M4MCAxMDA2NDQKLS0tIGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMjQsNiAmIzQzOzI0LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsIHBndGFibGVfdCBwdGUpCiAJc2V0X3BtZChwbWQsIF9fcG1kKCh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwdGUpKSk7CiB9CiAKJiM0MzsjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9QT1BVTEFURV9WTUVNTUFQX1BNRAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWRfdCAqcG1kcCwgcHRlX3QgKnBndGFibGUsCiYjNDM7CQkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7ewomIzQzOwlwbWRfcG9wdWxhdGVfa2VybmVsKCZhbXA7aW5pdF9tbSwgcG1kcCwgcGd0YWJsZSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKICNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHVkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkLCBwbWRfdCAqcG1kKQpkaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDIyMzUyOGMwNGQ3MzkyLi5lN2I2NTA1NmVmNzM4NCAxMDA2NDQKLS0tIGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtNjM4LDYgJiM0Mzs2MzgsMTQgQEAgc3RhdGljIGlubGluZSBsb25nIHBtZF9wcm90bm9uZShwbWRfdCBwbWQpCiAjZGVmaW5lIHBtZF9sZWFmKHBtZCkJCSgocG1kX3ZhbChwbWQpICZhbXA7IF9QQUdFX0hVR0UpICE9IDApCiAjZGVmaW5lIHB1ZF9sZWFmKHB1ZCkJCSgocHVkX3ZhbChwdWQpICZhbXA7IF9QQUdFX0hVR0UpICE9IDApCiAKJiM0MzsjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9VUERBVEVfVk1FTU1BUF9QVEUKJiM0MztzdGF0aWMgaW5saW5lIGludCB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsCiYjNDM7CQkJCQkgcHRlX3QgcHRlKQomIzQzO3sKJiM0MzsJc2V0X3B0ZShwdGVwLCBwdGUpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKgogICogV2UgcHJvdmlkZSBvdXIgb3duIGdldF91bm1hcHBlZCBhcmVhIHRvIGNvcGUgd2l0aCB0aGUgdmlydHVhbCBhbGlhc2luZwogICogY29uc3RyYWludHMgcGxhY2VkIG9uIHVzIGJ5IHRoZSBjYWNoZSBhcmNoaXRlY3R1cmUuCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IDc3MGNlMThhNzMyOGI4Li44ZGJiZTYyYjI1NzQyNSAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTMxLDYgJiM0MzszMSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCXNldF9wbWQocG1kLCBfX3BtZCgocGZuICZsdDsmbHQ7IF9QQUdFX1BGTl9TSElGVCkgfCBfUEFHRV9UQUJMRSkpOwogfQogCiYjNDM7I2RlZmluZSBfX0hBVkVfQVJDSF9UUllfUE9QVUxBVEVfVk1FTU1BUF9QTUQKJiM0MztzdGF0aWMgaW5saW5lIGludCB0cnlfcG9wdWxhdGVfdm1lbW1hcF9wbWQocG1kX3QgKnBtZHAsIHB0ZV90ICpwZ3RhYmxlLAomIzQzOwkJCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyKQomIzQzO3sKJiM0MzsJcG1kX3BvcHVsYXRlX2tlcm5lbCgmYW1wO2luaXRfbW0sIHBtZHAsIHBndGFibGUpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQsIHBtZF90ICpwbWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDVkNTc1NmJkYTgyZTNkLi5hMTFjNTY5ZWUyZjA2ZiAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTExNjIsNiAmIzQzOzExNjIsMTQgQEAgc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbW9kaWZ5KHB1ZF90IHB1ZCwgcGdwcm90X3QgbmV3cHJvdCkKIAogI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqLwogCiYjNDM7I2RlZmluZSBfX0hBVkVfQVJDSF9UUllfVVBEQVRFX1ZNRU1NQVBfUFRFCiYjNDM7c3RhdGljIGlubGluZSBpbnQgdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLAomIzQzOwkJCQkJIHB0ZV90IHB0ZSkKJiM0Mzt7CiYjNDM7CXNldF9wdGUocHRlcCwgcHRlKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoKICAqIEVuY29kZS9kZWNvZGUgc3dhcCBlbnRyaWVzIGFuZCBzd2FwIFBURXMuIFN3YXAgUFRFcyBhcmUgYWxsIFBURXMgdGhhdAogICogYXJlICFwdGVfbm9uZSgpICZhbXA7JmFtcDsgIXB0ZV9wcmVzZW50KCkuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKaW5kZXggYzg4NjkxYjE1ZjNjNjcuLjQ3YjU2YmJkNjIzNjE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC04Miw2ICYjNDM7ODIsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwKIAlzZXRfcG1kKHBtZCwgX19wbWQoKChwdGV2YWxfdClwZm4gJmx0OyZsdDsgUEFHRV9TSElGVCkgfCBfUEFHRV9UQUJMRSkpOwogfQogCiYjNDM7I2RlZmluZSBfX0hBVkVfQVJDSF9UUllfUE9QVUxBVEVfVk1FTU1BUF9QTUQKJiM0MztzdGF0aWMgaW5saW5lIGludCB0cnlfcG9wdWxhdGVfdm1lbW1hcF9wbWQocG1kX3QgKnBtZHAsIHB0ZV90ICpwZ3RhYmxlLAomIzQzOwkJCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyKQomIzQzO3sKJiM0MzsJcG1kX3BvcHVsYXRlX2tlcm5lbCgmYW1wO2luaXRfbW0sIHBtZHAsIHBndGFibGUpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAjaWYgQ09ORklHX1BHVEFCTEVfTEVWRUxTICZndDsgMgogZXh0ZXJuIHZvaWQgX19fcG1kX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBtZF90ICpwbWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggYWMyOTVjYTZjOTJmOTkuLjk3NDE1MTU2NDA3MWNiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xMzcyLDYgJiM0MzsxMzcyLDE0IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiB9CiAjZW5kaWYKIAomIzQzOyNkZWZpbmUgX19IQVZFX0FSQ0hfVFJZX1VQREFURV9WTUVNTUFQX1BURQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHRyeV91cGRhdGVfdm1lbW1hcF9wdGUodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwKJiM0MzsJCQkJCSBwdGVfdCBwdGUpCiYjNDM7ewomIzQzOwlzZXRfcHRlKHB0ZXAsIHB0ZSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKICNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRAogc3RhdGljIGlubGluZSBwdWRfdCBwdWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdWRfdCAqcHVkcCwgcHVkX3QgcHVkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaAppbmRleCBlMWEyZTFiN2M4ZTdiOC4uYzQ3OTZjNTRiNzAyYTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oCkBAIC0xMjgsNCAmIzQzOzEyOCwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCh2b2lkKQogfQogI2VuZGlmIC8qIF9fSEFWRV9BUkNIX0dJR0FOVElDX1BBR0VfUlVOVElNRV9TVVBQT1JURUQgKi8KIAomIzQzOyNpZm5kZWYgX19IQVZFX0FSQ0hfSFZPX1NVUFBPUlRFRAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fc3VwcG9ydGVkKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApOwomIzQzO30KJiM0MzsjZW5kaWYgLyogX19IQVZFX0FSQ0hfSFZPX1NVUFBPUlRFRCAqLwomIzQzOwogI2VuZGlmIC8qIF9BU01fR0VORVJJQ19IVUdFVExCX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYl92bWVtbWFwLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hNjcxZWI0YTRmZjQ2NgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYl92bWVtbWFwLmgKQEAgLTAsMCAmIzQzOzEsMjAgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOyNpZm5kZWYgX0xJTlVYX0hVR0VUTEJfVk1FTU1BUF9ICiYjNDM7I2RlZmluZSBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQCiYjNDM7CiYjNDM7Ym9vbCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKHZvaWQpOwomIzQzOwomIzQzOyNlbHNlIC8qIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUCAqLwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9MSU5VWF9IVUdFVExCX1ZNRU1NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaAppbmRleCA5MTc0ZmE1OWJiYzU0ZC4uZWQ0NDZkOTVjYTM3MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGdhbGxvYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGdhbGxvYy5oCkBAIC0yNiw0ICYjNDM7MjYsMjQgQEAKIAkJCWFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MoYWRkciwgYWRkcik7CQlcCiAJfSB3aGlsZSAoMCkKIAomIzQzOyNpZm5kZWYgX19IQVZFX0FSQ0hfVFJZX1BPUFVMQVRFX1ZNRU1NQVBfUE1ECiYjNDM7LyoKJiM0MzsgKiB0cnlfcG9wdWxhdGVfdm1lbW1hcF9wbWQgLSBQb3B1bGF0ZSBhIFBNRCB0aGF0IGlzIGluIHVzZSBieSB0aGUgdm1lbW1hcC4KJiM0MzsgKiBAYWRkcjogQmFzZSBhZGRyZXNzIG9mIHRoZSByZW1hcHBlZCBQTUQuCiYjNDM7ICogQHBtZHA6IFBhZ2UgdGFibGUgcG9pbnRlciB0byBiZSBvdmVyd3JpdHRlbi4KJiM0MzsgKiBAcGd0YWJsZTogUG9pbnRlciB0byB0aGUgcGFnZSB0YWJsZSB0aGF0IHRoZSBuZXcgUE1EIHdpbGwgcG9pbnQgdG8uCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdG8gYmUgdXNlZCB0byB1cGRhdGUgUE1EcyB0aGF0IG1hcCB0aGUgdm1lbW1hcCB0bwomIzQzOyAqIHBvaW50IHRvIGEgcGFnZSBvZiBhbHJlYWR5LXBvcHVsYXRlZCBQVEVzIHRoYXQgbWFwIHRoZSBzYW1lIHBhZ2VzLgomIzQzOyAqCiYjNDM7ICogSW1wbGVtZW50YXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gbXVzdCBlbnN1cmUgdGhhdCwgd2hpbGUgdGhlIHVwZGF0ZSBpcyB0YWtpbmcKJiM0MzsgKiBwbGFjZSwgQ1BVcyB3aWxsIG5vdCBmYXVsdCBvbiB0aGUgcmVtYXBwZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWRfdCAqcG1kcCwgcHRlX3QgKnBndGFibGUsCiYjNDM7CQkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogI2VuZGlmIC8qIF9MSU5VWF9QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKaW5kZXggMjk4MWUzODZkYTdiM2MuLmUxYWJjY2Y3NmJiNDYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaApAQCAtNDU3LDYgJiM0Mzs0NTcsMjcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAjZW5kaWYKICNkZWZpbmUgc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKSBzZXRfcHRlcyhtbSwgYWRkciwgcHRlcCwgcHRlLCAxKQogCiYjNDM7I2lmbmRlZiBfX0hBVkVfQVJDSF9UUllfVVBEQVRFX1ZNRU1NQVBfUFRFCiYjNDM7LyoKJiM0MzsgKiB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlIC0gUmVtYXAgUFRFcyB1c2VkIGJ5IHRoZSB2bWVtbWFwLgomIzQzOyAqIEBhZGRyOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHJlbWFwcGVkIFBURS4KJiM0MzsgKiBAcHRlcDogUGFnZSB0YWJsZSBwb2ludGVyIHRvIGJlIG92ZXJ3cml0dGVuLgomIzQzOyAqIEBwdGU6IFBhZ2UgdGFibGUgZW50cnkgdG8gd3JpdGUuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdG8gYmUgdXNlZCB0byB1cGRhdGUgUFRFcyB0aGF0IG1hcCB0aGUgdm1lbW1hcC4gVGhlCiYjNDM7ICogb25seSB2YWxpZCB0cmFuc2l0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBmdW5jdGlvbiBhcmU6IGxlYWYtbGV2ZWwKJiM0MzsgKiAoUEFHRV9TSVpFKSwgdmFsaWQtdG8tdmFsaWQuIFRoZSBwZm4gYW5kIHByb3QgYml0cyBtYXkgYmUgY2hhbmdlZC4KJiM0MzsgKgomIzQzOyAqIEltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgZW5zdXJlIHRoYXQsIHdoaWxlIHRoZSB1cGRhdGUgaXMgdGFraW5nCiYjNDM7ICogcGxhY2UsIENQVXMgd2lsbCBub3QgZmF1bHQgb24gdGhlIHJlbWFwcGVkIHZpcnR1YWwgYWRkcmVzcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsCiYjNDM7CQkJCQkgcHRlX3QgcHRlKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKICNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9TRVRfQUNDRVNTX0ZMQUdTCiBleHRlcm4gaW50IHB0ZXBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCwKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA1NzEyMTJiODA4MzVlYy4uMjk4NjczYTZjNTdjNWMgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTQ3LDcgJiM0Mzs0Nyw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbm9kZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2Vfb3duZXIuaCZndDsKICNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2V0bGJfdm1lbW1hcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aHVnZXRsYl9jbWEuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2h1Z2V0bGJfaW50ZXJuYWwuaCYjMzQ7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZS1pc29sYXRpb24uaCZndDsKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfc3lzZnMuYyBiL21tL2h1Z2V0bGJfc3lzZnMuYwppbmRleCA3OWVjZTkxNDA2YmZhNC4uODNhOTVmNTE0MmY1YTQgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGJfc3lzZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiX3N5c2ZzLmMKQEAgLTgsNyAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2Vfb3duZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYWdlLWlzb2xhdGlvbi5oJmd0OwogCi0jaW5jbHVkZSAmIzM0O2h1Z2V0bGJfdm1lbW1hcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aHVnZXRsYl9pbnRlcm5hbC5oJiMzNDsKIAogI2RlZmluZSBIU1RBVEVfQVRUUl9STyhfbmFtZSkgXApkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl92bWVtbWFwLmMgYi9tbS9odWdldGxiX3ZtZW1tYXAuYwppbmRleCAxMzNiNDZkZmIwOWY1Yy4uN2U3Zjg1NzljYzJhZTUgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGJfdm1lbW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGJfdm1lbW1hcC5jCkBAIC0xNiw5ICYjNDM7MTYsMTEgQEAKICNpbmNsdWRlICZsdDtsaW51eC9tbWRlYnVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZXdhbGsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZ2FsbG9jLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2h1Z2V0bGIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaHVnZXRsYl92bWVtbWFwLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vdGxiZmx1c2guaCZndDsKLSNpbmNsdWRlICYjMzQ7aHVnZXRsYl92bWVtbWFwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7aHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKIAogLyoqCkBAIC0zNCw3ICYjNDM7MzYsNyBAQAogICoJCQlvcGVyYXRpb25zLgogICovCiBzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrIHsKLQl2b2lkCQkJKCpyZW1hcF9wdGUpKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJaW50CQkJKCpyZW1hcF9wdGUpKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkJICAgICBzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrICp3YWxrKTsKIAogCXVuc2lnbmVkIGxvbmcJCW5yX3dhbGtlZDsKQEAgLTU0LDYgJiM0Mzs1Niw3IEBAIHN0YXRpYyBpbnQgdm1lbW1hcF9zcGxpdF9wbWQocG1kX3QgKnBtZCwgc3RydWN0IHBhZ2UgKmhlYWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCQkgICAgIHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspCiB7CiAJcG1kX3QgX19wbWQ7CiYjNDM7CWludCByZXQ7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gc3RhcnQ7CiAJcHRlX3QgKnBndGFibGU7CkBAIC03Myw4ICYjNDM7NzYsMTUgQEAgc3RhdGljIGludCB2bWVtbWFwX3NwbGl0X3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgcGFnZSAqaGVhZCwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJc2V0X3B0ZV9hdCgmYW1wO2luaXRfbW0sIGFkZHIsIHB0ZSwgZW50cnkpOwogCX0KIAomIzQzOwlyZXQgPSAwOwogCXNwaW5fbG9jaygmYW1wO2luaXRfbW0ucGFnZV90YWJsZV9sb2NrKTsKIAlpZiAobGlrZWx5KHBtZF9sZWFmKCpwbWQpKSkgewomIzQzOwkJLyogTWFrZSBwdGUgdmlzaWJsZSBiZWZvcmUgcG1kLiBTZWUgY29tbWVudCBpbiBwbWRfaW5zdGFsbCgpLiAqLwomIzQzOwkJc21wX3dtYigpOwomIzQzOwkJcmV0ID0gdHJ5X3BvcHVsYXRlX3ZtZW1tYXBfcG1kKHBtZCwgcGd0YWJsZSwgc3RhcnQpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIGZyZWU7CiYjNDM7CiAJCS8qCiAJCSAqIEhpZ2hlciBvcmRlciBhbGxvY2F0aW9ucyBmcm9tIGJ1ZGR5IGFsbG9jYXRvciBtdXN0IGJlIGFibGUgdG8KIAkJICogYmUgdHJlYXRlZCBhcyBpbmRlcGVuZGVudCBzbWFsbCBwYWdlcyAoYXMgdGhleSBjYW4gYmUgZnJlZWQKQEAgLTgzLDE3ICYjNDM7OTMsMTcgQEAgc3RhdGljIGludCB2bWVtbWFwX3NwbGl0X3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgcGFnZSAqaGVhZCwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJaWYgKCFQYWdlUmVzZXJ2ZWQoaGVhZCkpCiAJCQlzcGxpdF9wYWdlKGhlYWQsIGdldF9vcmRlcihQTURfU0laRSkpOwogCi0JCS8qIE1ha2UgcHRlIHZpc2libGUgYmVmb3JlIHBtZC4gU2VlIGNvbW1lbnQgaW4gcG1kX2luc3RhbGwoKS4gKi8KLQkJc21wX3dtYigpOwotCQlwbWRfcG9wdWxhdGVfa2VybmVsKCZhbXA7aW5pdF9tbSwgcG1kLCBwZ3RhYmxlKTsKIAkJaWYgKCEod2Fsay0mZ3Q7ZmxhZ3MgJmFtcDsgVk1FTU1BUF9TUExJVF9OT19UTEJfRkxVU0gpKQogCQkJZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgc3RhcnQgJiM0MzsgUE1EX1NJWkUpOwotCX0gZWxzZSB7Ci0JCXB0ZV9mcmVlX2tlcm5lbCgmYW1wO2luaXRfbW0sIHBndGFibGUpOwotCX0KLQlzcGluX3VubG9jaygmYW1wO2luaXRfbW0ucGFnZV90YWJsZV9sb2NrKTsKJiM0MzsJfSBlbHNlCiYjNDM7CQlnb3RvIGZyZWU7CiAKLQlyZXR1cm4gMDsKJiM0MztvdXQ6CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aW5pdF9tbS5wYWdlX3RhYmxlX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO2ZyZWU6CiYjNDM7CXB0ZV9mcmVlX2tlcm5lbCgmYW1wO2luaXRfbW0sIHBndGFibGUpOwomIzQzOwlnb3RvIG91dDsKIH0KIAogc3RhdGljIGludCB2bWVtbWFwX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCkBAIC0xNDEsMTEgJiM0MzsxNTEsMTMgQEAgc3RhdGljIGludCB2bWVtbWFwX3B0ZV9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1tX3dhbGsgKndhbGspCiB7CiAJc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqdm1lbW1hcF93YWxrID0gd2Fsay0mZ3Q7cHJpdmF0ZTsKJiM0MzsJaW50IHJldCA9IDA7CiAKLQl2bWVtbWFwX3dhbGstJmd0O3JlbWFwX3B0ZShwdGUsIGFkZHIsIHZtZW1tYXBfd2Fsayk7Ci0Jdm1lbW1hcF93YWxrLSZndDtucl93YWxrZWQmIzQzOyYjNDM7OwomIzQzOwlyZXQgPSB2bWVtbWFwX3dhbGstJmd0O3JlbWFwX3B0ZShwdGUsIGFkZHIsIHZtZW1tYXBfd2Fsayk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJdm1lbW1hcF93YWxrLSZndDtucl93YWxrZWQmIzQzOyYjNDM7OwogCi0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgdm1lbW1hcF9yZW1hcF9vcHMgPSB7CkBAIC0xNjQsMTMgJiM0MzsxNzYsMTEgQEAgc3RhdGljIGludCB2bWVtbWFwX3JlbWFwX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCXJldCA9IHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2Uoc3RhcnQsIGVuZCwgJmFtcDt2bWVtbWFwX3JlbWFwX29wcywKIAkJCQkgICAgTlVMTCwgd2Fsayk7CiAJbW1hcF9yZWFkX3VubG9jaygmYW1wO2luaXRfbW0pOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CiAKIAlpZiAod2Fsay0mZ3Q7cmVtYXBfcHRlICZhbXA7JmFtcDsgISh3YWxrLSZndDtmbGFncyAmYW1wOyBWTUVNTUFQX1JFTUFQX05PX1RMQl9GTFVTSCkpCiAJCWZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTE5OSwxOCAmIzQzOzIwOSwyMCBAQCBzdGF0aWMgdm9pZCBmcmVlX3ZtZW1tYXBfcGFnZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCiAJCWZyZWVfdm1lbW1hcF9wYWdlKHBhZ2UpOwogfQogCi1zdGF0aWMgdm9pZCB2bWVtbWFwX3JlbWFwX3B0ZShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICBzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrICp3YWxrKQomIzQzO3N0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9wdGUocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCSAgICAgc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqd2FsaykKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHB0ZV9wYWdlKHB0ZXBfZ2V0KHB0ZSkpOwogCXB0ZV90IGVudHJ5OwomIzQzOwlib29sIGhlYWQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWhlYWQgPSB3YWxrLSZndDtucl93YWxrZWQgPT0gMCAmYW1wOyZhbXA7IHdhbGstJmd0O3ZtZW1tYXBfaGVhZDsKIAogCS8qIFJlbWFwcGluZyB0aGUgaGVhZCBwYWdlIHJlcXVpcmVzIHIvdyAqLwotCWlmICh1bmxpa2VseSh3YWxrLSZndDtucl93YWxrZWQgPT0gMCAmYW1wOyZhbXA7IHdhbGstJmd0O3ZtZW1tYXBfaGVhZCkpIHsKJiM0MzsJaWYgKHVubGlrZWx5KGhlYWQpKSB7CiAJCVZNX1dBUk5fT05fT05DRSghUGFnZUhlYWQoKGNvbnN0IHN0cnVjdCBwYWdlICopYWRkcikpOwogCi0JCWxpc3RfZGVsKCZhbXA7d2Fsay0mZ3Q7dm1lbW1hcF9oZWFkLSZndDtscnUpOwotCiAJCS8qCiAJCSAqIE1ha2VzIHN1cmUgdGhhdCBwcmVjZWRpbmcgc3RvcmVzIHRvIHRoZSBwYWdlIGNvbnRlbnRzIGZyb20KIAkJICogdm1lbW1hcF9yZW1hcF9mcmVlKCkgYmVjb21lIHZpc2libGUgYmVmb3JlIHRoZSBzZXRfcHRlX2F0KCkKQEAgLTIyOSwzNSAmIzQzOzI0MSw1NiBAQCBzdGF0aWMgdm9pZCB2bWVtbWFwX3JlbWFwX3B0ZShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCWVudHJ5ID0gbWtfcHRlKHdhbGstJmd0O3ZtZW1tYXBfdGFpbCwgUEFHRV9LRVJORUxfUk8pOwogCX0KIAomIzQzOwlyZXQgPSB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKGFkZHIsIHB0ZSwgZW50cnkpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogV2Ugc3VjY2Vzc2Z1bGx5IG92ZXJ3cm90ZSB0aGUgdm1lbW1hcCBQVEUsIHNvIHdlIGNhbiBmcmVlCiYjNDM7CSAqIHRoZSB2bWVtbWFwIHBhZ2UgdGhhdCB3YXMganVzdCB1bm1hcHBlZCwgYW5kIGlmIHdlIG1hcHBlZAomIzQzOwkgKiB0aGUgbmV3IGhlYWQgcGFnZSwgcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3Qgc28gdGhhdCBpdAomIzQzOwkgKiBkb2VzbiYjMzk7dCBnZXQgZnJlZWQgbGF0ZXIuCiYjNDM7CSAqLwogCWxpc3RfYWRkKCZhbXA7cGFnZS0mZ3Q7bHJ1LCB3YWxrLSZndDt2bWVtbWFwX3BhZ2VzKTsKLQlzZXRfcHRlX2F0KCZhbXA7aW5pdF9tbSwgYWRkciwgcHRlLCBlbnRyeSk7CiYjNDM7CWlmIChoZWFkKQomIzQzOwkJbGlzdF9kZWwoJmFtcDt3YWxrLSZndDt2bWVtbWFwX2hlYWQtJmd0O2xydSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB2bWVtbWFwX3Jlc3RvcmVfcHRlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQlzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrICp3YWxrKQomIzQzO3N0YXRpYyBpbnQgdm1lbW1hcF9yZXN0b3JlX3B0ZShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJICAgICAgIHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspCiB7CiAJc3RydWN0IHBhZ2UgKnNyYyA9IHB0ZV9wYWdlKHB0ZXBfZ2V0KHB0ZSkpLCAqZHN0OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCF3YWxrLSZndDt2bWVtbWFwX3RhaWwpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKgotCSAqIFdoZW4gcm9sbGluZyBiYWNrIHZtZW1tYXBfcmVtYXBfZnJlZSgpLCBrZWVwIHRoZSBjb3BpZWQgaGVhZCBwYWdlCiYjNDM7CSAqIFdoZW4gcmVzdG9yaW5nIGEgcGFydGlhbGx5LUhWT2VkIHBhZ2UsIGtlZXAgdGhlIGNvcGllZCBoZWFkIHBhZ2UKIAkgKiBtYXBwaW5nIGFuZCByZXN0b3JlIG9ubHkgUFRFcyBjdXJyZW50bHkgcG9pbnRpbmcgYXQgdGhlIHNoYXJlZCB0YWlsCiAJICogcGFnZS4KIAkgKi8KLQlpZiAod2Fsay0mZ3Q7dm1lbW1hcF90YWlsICZhbXA7JmFtcDsgd2Fsay0mZ3Q7dm1lbW1hcF90YWlsICE9IHNyYykKLQkJcmV0dXJuOwomIzQzOwlpZiAod2Fsay0mZ3Q7dm1lbW1hcF90YWlsICE9IHNyYykKJiM0MzsJCXJldHVybiAwOwogCiAJVk1fV0FSTl9PTl9PTkNFKFBhZ2VIZWFkKChjb25zdCBzdHJ1Y3QgcGFnZSAqKWFkZHIpKTsKIAogCWRzdCA9IGxpc3RfZmlyc3RfZW50cnkod2Fsay0mZ3Q7dm1lbW1hcF9wYWdlcywgc3RydWN0IHBhZ2UsIGxydSk7Ci0JbGlzdF9kZWwoJmFtcDtkc3QtJmd0O2xydSk7CiAJY29weV9wYWdlKHBhZ2VfdG9fdmlydChkc3QpLCBwYWdlX3RvX3ZpcnQoc3JjKSk7CiAKIAkvKgogCSAqIE1ha2VzIHN1cmUgdGhhdCBwcmVjZWRpbmcgc3RvcmVzIHRvIHRoZSBwYWdlIGNvbnRlbnRzIGJlY29tZSB2aXNpYmxlCi0JICogYmVmb3JlIHRoZSBzZXRfcHRlX2F0KCkgd3JpdGUuCiYjNDM7CSAqIGJlZm9yZSB0aGUgdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZSgpIHdyaXRlLgogCSAqLwogCXNtcF93bWIoKTsKLQlzZXRfcHRlX2F0KCZhbXA7aW5pdF9tbSwgYWRkciwgcHRlLCBta19wdGUoZHN0LCBQQUdFX0tFUk5FTCkpOwomIzQzOwomIzQzOwlyZXQgPSB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKGFkZHIsIHB0ZSwgbWtfcHRlKGRzdCwgUEFHRV9LRVJORUwpKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWxpc3RfZGVsKCZhbXA7ZHN0LSZndDtscnUpOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0yNzksNiAmIzQzOzMxMiw3IEBAIHN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9zcGxpdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIAlyZXR1cm4gdm1lbW1hcF9yZW1hcF9yYW5nZShzdGFydCwgZW5kLCAmYW1wO3dhbGspOwogfQogCiYjNDM7c3RhdGljIGNvbnN0IGludCBWTUVNTUFQX1JFTUFQX0lOQ09NUExFVEUgPSAxOwogLyoqCiAgKiB2bWVtbWFwX3JlbWFwX2ZyZWUgLSByZW1hcCB0aGUgdm1lbW1hcCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UgW0BzdGFydCwgQGVuZCkKICAqCQkJdG8gdXNlIEB2bWVtbWFwX2hlYWQvdGFpbCwgdGhlbiBmcmVlIHZtZW1tYXAgd2hpY2gKQEAgLTI5Myw3ICYjNDM7MzI3LDggQEAgc3RhdGljIGludCB2bWVtbWFwX3JlbWFwX3NwbGl0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogICoJCXJlc3BvbnNpYmlsaXR5IHRvIGZyZWUgcGFnZXMuCiAgKiBAZmxhZ3M6CW1vZGlmaWNhdGlvbnMgdG8gdm1lbW1hcF9yZW1hcF93YWxrIGZsYWdzCiAgKgotICogUmV0dXJuOiAlMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KJiM0MzsgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsIFZNRU1NQVBfUkVNQVBfSU5DT01QTEVURSBpZiB0aGUgcGFnZSBpcyBpbmNvbXBsZXRlbHkKJiM0MzsgKiAgICAgICAgIG9wdGltaXplZCwgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCiAgKi8KIHN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9mcmVlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJICAgICAgc3RydWN0IHBhZ2UgKnZtZW1tYXBfaGVhZCwKQEAgLTMyOCw3ICYjNDM7MzYzLDggQEAgc3RhdGljIGludCB2bWVtbWFwX3JlbWFwX2ZyZWUodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCS5mbGFncwkJPSAwLAogCX07CiAKLQl2bWVtbWFwX3JlbWFwX3JhbmdlKHN0YXJ0LCBlbmQsICZhbXA7d2Fsayk7CiYjNDM7CWlmICh2bWVtbWFwX3JlbWFwX3JhbmdlKHN0YXJ0LCBlbmQsICZhbXA7d2FsaykpCiYjNDM7CQlyZXR1cm4gVk1FTU1BUF9SRU1BUF9JTkNPTVBMRVRFOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTM1NywxMCAmIzQzOzM5MywzOCBAQCBzdGF0aWMgaW50IGFsbG9jX3ZtZW1tYXBfcGFnZV9saXN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCXJldHVybiAtRU5PTUVNOwogfQogCiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICp2bWVtbWFwX2dldF90YWlsKHVuc2lnbmVkIGludCBvcmRlciwgc3RydWN0IHpvbmUgKnpvbmUpCiYjNDM7ewomIzQzOwljb25zdCB1bnNpZ25lZCBpbnQgaWR4ID0gb3JkZXIgLSBWTUVNTUFQX1RBSUxfTUlOX09SREVSOwomIzQzOwlzdHJ1Y3QgcGFnZSAqdGFpbCwgKnA7CiYjNDM7CWludCBub2RlID0gem9uZV90b19uaWQoem9uZSk7CiYjNDM7CiYjNDM7CXRhaWwgPSBSRUFEX09OQ0Uoem9uZS0mZ3Q7dm1lbW1hcF90YWlsc1tpZHhdKTsKJiM0MzsJaWYgKGxpa2VseSh0YWlsKSkKJiM0MzsJCXJldHVybiB0YWlsOwomIzQzOwomIzQzOwl0YWlsID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgMCk7CiYjNDM7CWlmICghdGFpbCkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlwID0gcGFnZV90b192aXJ0KHRhaWwpOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IFBBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgcGFnZSk7IGkmIzQzOyYjNDM7KQomIzQzOwkJaW5pdF9jb21wb3VuZF90YWlsKHAgJiM0MzsgaSwgTlVMTCwgb3JkZXIsIHpvbmUpOwomIzQzOwomIzQzOwlpZiAoY21weGNoZygmYW1wO3pvbmUtJmd0O3ZtZW1tYXBfdGFpbHNbaWR4XSwgTlVMTCwgdGFpbCkpIHsKJiM0MzsJCV9fZnJlZV9wYWdlKHRhaWwpOwomIzQzOwkJdGFpbCA9IFJFQURfT05DRSh6b25lLSZndDt2bWVtbWFwX3RhaWxzW2lkeF0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0YWlsOwomIzQzO30KJiM0MzsKIC8qKgogICogdm1lbW1hcF9yZW1hcF9hbGxvYyAtIHJlbWFwIHRoZSB2bWVtbWFwIHZpcnR1YWwgYWRkcmVzcyByYW5nZSBbQHN0YXJ0LCBlbmQpCiAgKgkJCSB0byB0aGUgcGFnZSB3aGljaCBpcyBmcm9tIHRoZSBAdm1lbW1hcF9wYWdlcwogICoJCQkgcmVzcGVjdGl2ZWx5LgomIzQzOyAqIEBoOgkJdGhlIGhzdGF0ZSBmb3IgdGhlIGZvbGlvIHdob3NlIHZtZW1tYXAgaXMgZ2V0dGluZyByZW1hcHBlZAomIzQzOyAqIEBmb2xpbzoJdGhlIGZvbGlvIHdob3NlIHZtZW1tYXAgaXMgZ2V0dGluZyByZW1hcHBlZAogICogQHN0YXJ0OglzdGFydCBhZGRyZXNzIG9mIHRoZSB2bWVtbWFwIHZpcnR1YWwgYWRkcmVzcyByYW5nZSB0aGF0IHdlIHdhbnQKICAqCQl0byByZW1hcC4KICAqIEBlbmQ6CWVuZCBhZGRyZXNzIG9mIHRoZSB2bWVtbWFwIHZpcnR1YWwgYWRkcmVzcyByYW5nZSB0aGF0IHdlIHdhbnQgdG8KQEAgLTM2OSwyMCAmIzQzOzQzMyw2OCBAQCBzdGF0aWMgaW50IGFsbG9jX3ZtZW1tYXBfcGFnZV9saXN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogICoKICAqIFJldHVybjogJTAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9hbGxvYyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKJiM0MztzdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfYWxsb2MoY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlMSVNUX0hFQUQodm1lbW1hcF9wYWdlcyk7Ci0Jc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayB3YWxrID0gewomIzQzOwlzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrIHdhbGs7CiYjNDM7CXN0cnVjdCBwYWdlICp2bWVtbWFwX3RhaWw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXZtZW1tYXBfdGFpbCA9IHZtZW1tYXBfZ2V0X3RhaWwoaC0mZ3Q7b3JkZXIsIGZvbGlvX3pvbmUoZm9saW8pKTsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghdm1lbW1hcF90YWlsKSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlpZiAoYWxsb2Nfdm1lbW1hcF9wYWdlX2xpc3Qoc3RhcnQsIGVuZCwgJmFtcDt2bWVtbWFwX3BhZ2VzKSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwl3YWxrID0gKHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGspIHsKIAkJLnJlbWFwX3B0ZQk9IHZtZW1tYXBfcmVzdG9yZV9wdGUsCiYjNDM7CQkudm1lbW1hcF90YWlsCT0gdm1lbW1hcF90YWlsLAogCQkudm1lbW1hcF9wYWdlcwk9ICZhbXA7dm1lbW1hcF9wYWdlcywKIAkJLmZsYWdzCQk9IGZsYWdzLAogCX07CiAKLQlpZiAoYWxsb2Nfdm1lbW1hcF9wYWdlX2xpc3Qoc3RhcnQsIGVuZCwgJmFtcDt2bWVtbWFwX3BhZ2VzKSkKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CXJldCA9IHZtZW1tYXBfcmVtYXBfcmFuZ2Uoc3RhcnQsIGVuZCwgJmFtcDt3YWxrKTsKIAotCXJldHVybiB2bWVtbWFwX3JlbWFwX3JhbmdlKHN0YXJ0LCBlbmQsICZhbXA7d2Fsayk7CiYjNDM7CS8qIE5vdCBhbGwgcGFnZXMgbWF5IGhhdmUgYmVlbiBjb25zdW1lZCAqLwomIzQzOwlmcmVlX3ZtZW1tYXBfcGFnZV9saXN0KCZhbXA7dm1lbW1hcF9wYWdlcyk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2VudW0gaHVnZXRsYl9odm9fc3RhdHVzIHsKJiM0MzsJSFZPX0lOQUNUSVZFID0gMCwKJiM0MzsJSFZPX0FDVElWRSwKJiM0MzsJSFZPX1BFUk1BTkVOVExZX0lOQUNUSVZFLAomIzQzO307CiYjNDM7c3RhdGljIGVudW0gaHVnZXRsYl9odm9fc3RhdHVzIGh2b19zdGF0dXMgPSBIVk9fSU5BQ1RJVkU7CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgaHVnZXRsYl9odm9fc3RhdHVzX3RyeV9zZXQoZW51bSBodWdldGxiX2h2b19zdGF0dXMgc3RhdHVzKQomIzQzO3sKJiM0MzsJZW51bSBodWdldGxiX2h2b19zdGF0dXMgb2xkOwomIzQzOwomIzQzOwlvbGQgPSBSRUFEX09OQ0UoaHZvX3N0YXR1cyk7CiYjNDM7CiYjNDM7cmV0cnk6CiYjNDM7CS8qIFRoZSBjdXJyZW50IHNldHRpbmcgaXMgd2hhdCB3ZSB3YW50LiAqLwomIzQzOwlpZiAob2xkID09IHN0YXR1cykKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkvKiBUaGUgY3VycmVudCBzZXR0aW5nIGNhbm5vdCBiZSBjaGFuZ2VkLiAqLwomIzQzOwlpZiAob2xkICE9IEhWT19JTkFDVElWRSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKCF0cnlfY21weGNoZ19yZWxheGVkKCZhbXA7aHZvX3N0YXR1cywgJmFtcDtvbGQsIHN0YXR1cykpCiYjNDM7CQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gaHVnZXRsYl9odm9fc3RhdHVzX3RyeV9zZXQoSFZPX1BFUk1BTkVOVExZX0lOQUNUSVZFKTsKIH0KIAogc3RhdGljIGJvb2wgdm1lbW1hcF9vcHRpbWl6ZV9lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTik7CkBAIC00MTUsNyAmIzQzOzUyNyw3IEBAIHN0YXRpYyBpbnQgX19odWdldGxiX3ZtZW1tYXBfcmVzdG9yZV9mb2xpbyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLAogCSAqIFdoZW4gYSBIdWdlVExCIHBhZ2UgaXMgZnJlZWQgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgcHJldmlvdXNseQogCSAqIGRpc2NhcmRlZCB2bWVtbWFwIHBhZ2VzIG11c3QgYmUgYWxsb2NhdGVkIGFuZCByZW1hcHBpbmcuCiAJICovCi0JcmV0ID0gdm1lbW1hcF9yZW1hcF9hbGxvYyh2bWVtbWFwX3N0YXJ0LCB2bWVtbWFwX2VuZCwgZmxhZ3MpOwomIzQzOwlyZXQgPSB2bWVtbWFwX3JlbWFwX2FsbG9jKGgsIGZvbGlvLCB2bWVtbWFwX3N0YXJ0LCB2bWVtbWFwX2VuZCwgZmxhZ3MpOwogCWlmICghcmV0KQogCQlmb2xpb19jbGVhcl9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKTsKIApAQCAtNDg3LDM2ICYjNDM7NTk5LDE2IEBAIHN0YXRpYyBib29sIHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqCiAJaWYgKCFSRUFEX09OQ0Uodm1lbW1hcF9vcHRpbWl6ZV9lbmFibGVkKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKCFodWdldGxiX3ZtZW1tYXBfb3B0aW1pemFibGUoaCkpCiYjNDM7CWlmICghYXJjaF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3N1cHBvcnRlZCgpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHN0cnVjdCBwYWdlICp2bWVtbWFwX2dldF90YWlsKHVuc2lnbmVkIGludCBvcmRlciwgc3RydWN0IHpvbmUgKnpvbmUpCi17Ci0JY29uc3QgdW5zaWduZWQgaW50IGlkeCA9IG9yZGVyIC0gVk1FTU1BUF9UQUlMX01JTl9PUkRFUjsKLQlzdHJ1Y3QgcGFnZSAqdGFpbCwgKnA7Ci0JaW50IG5vZGUgPSB6b25lX3RvX25pZCh6b25lKTsKLQotCXRhaWwgPSBSRUFEX09OQ0Uoem9uZS0mZ3Q7dm1lbW1hcF90YWlsc1tpZHhdKTsKLQlpZiAobGlrZWx5KHRhaWwpKQotCQlyZXR1cm4gdGFpbDsKLQotCXRhaWwgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCAwKTsKLQlpZiAoIXRhaWwpCi0JCXJldHVybiBOVUxMOwotCi0JcCA9IHBhZ2VfdG9fdmlydCh0YWlsKTsKLQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IFBBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgcGFnZSk7IGkmIzQzOyYjNDM7KQotCQlpbml0X2NvbXBvdW5kX3RhaWwocCAmIzQzOyBpLCBOVUxMLCBvcmRlciwgem9uZSk7CiYjNDM7CWlmICghaHVnZXRsYl92bWVtbWFwX29wdGltaXphYmxlKGgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKGNtcHhjaGcoJmFtcDt6b25lLSZndDt2bWVtbWFwX3RhaWxzW2lkeF0sIE5VTEwsIHRhaWwpKSB7Ci0JCV9fZnJlZV9wYWdlKHRhaWwpOwotCQl0YWlsID0gUkVBRF9PTkNFKHpvbmUtJmd0O3ZtZW1tYXBfdGFpbHNbaWR4XSk7Ci0JfQomIzQzOwlpZiAoIWh1Z2V0bGJfaHZvX3N0YXR1c190cnlfc2V0KEhWT19BQ1RJVkUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwogCi0JcmV0dXJuIHRhaWw7CiYjNDM7CXJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsCkBAIC01NzQsNyAmIzQzOzY2NiwxMSBAQCBzdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsCiAJCQkJIHZtZW1tYXBfaGVhZCwgdm1lbW1hcF90YWlsLAogCQkJCSB2bWVtbWFwX3BhZ2VzLCBmbGFncyk7CiBvdXQ6Ci0JaWYgKHJldCkKJiM0MzsJLyoKJiM0MzsJICogSWYgcmV0ID09IFZNRU1NQVBfUkVNQVBfSU5DT01QTEVURSwgdGhlIGZvbGlvIG1pZ2h0IGJlIHBhcnRpYWxseQomIzQzOwkgKiBIVk9lZC4gTGVhdmUgdGhlIEhWTyBwYWdlIGZvbGlvIGZsYWcgaW4gcGxhY2UuCiYjNDM7CSAqLwomIzQzOwlpZiAocmV0ICZsdDsgMCkKIAkJZm9saW9fY2xlYXJfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbyk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNzE3LDYgJiM0Mzs4MTMsMTQgQEAgc3RhdGljIGJvb2wgdm1lbW1hcF9zaG91bGRfb3B0aW1pemVfYm9vdG1lbV9wYWdlKHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqbSkKIAlpZiAoIVJFQURfT05DRSh2bWVtbWFwX29wdGltaXplX2VuYWJsZWQpKQogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJLyoKJiM0MzsJICogQXJjaGl0ZWN0dXJlcyBtYXkgcmV0dXJuIGZhbHNlIGhlcmUgYnV0IHRydWUgYnkgdGhlIHRpbWUKJiM0MzsJICogaHVnZXRsYl9pbml0KCkgaXMgY2FsbGVkLiBJbiB0aGlzIGNhc2UsIGFsdGhvdWdoIHRoZSBmb2xpb3Mgd2lsbAomIzQzOwkgKiBub3QgYmUgcHJlLUhWT2VkLCB0aGV5IHdpbGwgYmUgb3B0aW1pemVkIGluIGh1Z2V0bGJfaW5pdCgpLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFhcmNoX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fc3VwcG9ydGVkKCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJaWYgKCFodWdldGxiX3ZtZW1tYXBfb3B0aW1pemFibGUobS0mZ3Q7aHN0YXRlKSkKIAkJcmV0dXJuIGZhbHNlOwogCkBAIC03NDIsNiAmIzQzOzg0Niw5IEBAIHN0YXRpYyBib29sIHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2Jvb3RtZW1fcGFnZShzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgKm0pCiAJICAgICFJU19BTElHTkVEKHBzaXplLCBwbWRfdm1lbW1hcF9zaXplKSkKIAkJcmV0dXJuIGZhbHNlOwogCiYjNDM7CWlmICghaHVnZXRsYl9odm9fc3RhdHVzX3RyeV9zZXQoSFZPX0FDVElWRSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfdm1lbW1hcC5oIGIvbW0vaHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmgKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gbW0vaHVnZXRsYl92bWVtbWFwLmgKcmVuYW1lIHRvIG1tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oCmluZGV4IDE4YjQ5MDgyNTIxNTNkLi42YjI4NzgwMDE0YmMxOCAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYl92bWVtbWFwLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmgKQEAgLTYsOCAmIzQzOzYsOCBAQAogICoKICAqICAgICBBdXRob3I6IE11Y2h1biBTb25nICZsdDtzb25nbXVjaHVuQGJ5dGVkYW5jZS5jb20mZ3Q7CiAgKi8KLSNpZm5kZWYgX0xJTlVYX0hVR0VUTEJfVk1FTU1BUF9ICi0jZGVmaW5lIF9MSU5VWF9IVUdFVExCX1ZNRU1NQVBfSAomIzQzOyNpZm5kZWYgX01NX0hVR0VUTEJfVk1FTU1BUF9JTlRFUk5BTF9ICiYjNDM7I2RlZmluZSBfTU1fSFVHRVRMQl9WTUVNTUFQX0lOVEVSTkFMX0gKICNpbmNsdWRlICZsdDtsaW51eC9odWdldGxiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZW1ibG9jay5oJmd0OwpAQCAtOTUsNCAmIzQzOzk1LDQgQEAgc3RhdGljIGlubGluZSBib29sIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YWJsZShjb25zdCBzdHJ1Y3QgaHN0YXRlICpoKQogewogCXJldHVybiBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemFibGVfc2l6ZShoKSAhPSAwOwogfQotI2VuZGlmIC8qIF9MSU5VWF9IVUdFVExCX1ZNRU1NQVBfSCAqLwomIzQzOyNlbmRpZiAvKiBfTU1fSFVHRVRMQl9WTUVNTUFQX0lOVEVSTkFMX0ggKi8KZGlmZiAtLWdpdCBhL21tL3NwYXJzZS12bWVtbWFwLmMgYi9tbS9zcGFyc2Utdm1lbW1hcC5jCmluZGV4IDk5ZTJiZTM5NjcxYjYzLi45NGQ1ZGE5ZjhhYjdjMSAxMDA2NDQKLS0tIGEvbW0vc3BhcnNlLXZtZW1tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zcGFyc2Utdm1lbW1hcC5jCkBAIC0zMiw3ICYjNDM7MzIsNyBAQAogI2luY2x1ZGUgJmx0O2FzbS9kbWEuaCZndDsKICNpbmNsdWRlICZsdDthc20vdGxiZmx1c2guaCZndDsKIAotI2luY2x1ZGUgJiMzNDtodWdldGxiX3ZtZW1tYXAuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtodWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaCYjMzQ7CiAKIC8qCiAgKiBGbGFncyBmb3Igdm1lbW1hcF9wb3B1bGF0ZV9yYW5nZSBhbmQgZnJpZW5kcy4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyMTgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgdGhhdCBicmluZ3MgQVJNNjQgc3VwcG9ydCB0byBIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uLCBvciBIVk8uIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgY2hhbmdlLCBhZGRpbmcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZ1bmN0aW9ucyBsaWtlIGBhcmNoX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fc3VwcG9ydGVkKClgLCBgdHJ5X3BvcHVsYXRlX3ZtZW1tYXBfcG1kKClgLCBhbmQgYHRyeV91cGRhdGVfdm1lbW1hcF9wdGUoKWAgYWxvbmcgd2l0aCB0aGUgbmVjZXNzYXJ5IGNvcmUgbG9naWMgbW9kaWZpY2F0aW9ucyB3aXRoaW4gYG1tL2h1Z2V0bGJfdm1lbW1hcC5jYC4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbiBnaXZlbiBpdHMgaW1wYWN0IG9uIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBIdWdlVExCIG1hbmFnZW1lbnQuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBrZXkgYXJlYXMgd2l0aGluIGBtbS9odWdldGxiX3ZtZW1tYXAuY2AgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9ucyBhcyBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIGZvciB0ZXN0aW5nOiBgdm1lbW1hcF9zcGxpdF9wbWRgLCBgdm1lbW1hcF9wbWRfZW50cnlgLCBgdm1lbW1hcF9wdGVfZW50cnlgLCBgdm1lbW1hcF9yZW1hcF9yYW5nZWAsIGB2bWVtbWFwX3JlbWFwX3B0ZWAsIGB2bWVtbWFwX3Jlc3RvcmVfcHRlYCwgYHZtZW1tYXBfcmVtYXBfZnJlZWAsIGB2bWVtbWFwX3JlbWFwX2FsbG9jYCwgYGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGVgLCBgX19odWdldGxiX3ZtZW1tYXBfcmVzdG9yZV9mb2xpb2AsIGB2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9mb2xpb2AsIGBfX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9mb2xpb2AsIGFuZCBgdm1lbW1hcF9zaG91bGRfb3B0aW1pemVfYm9vdG1lbV9wYWdlYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgd2hlcmUgdGhlIEFSTTY0IGludGVncmF0aW9uIHdpbGwgbW9zdCBsaWtlbHkgaW50cm9kdWNlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgcmVncmVzc2lvbnMuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBwYXRjaCBtb2RpZmllcyBgYXJjaC9hcm02NC9LY29uZmlnYCB3aGljaCBpbmRpY2F0ZXMgdGhhdCBgc2VsZWN0IEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVAgaWYgQVJNNjRfSFdfQUZEQk1gIGlzIHJlbGV2YW50LiBUaGlzIGxlYWRzIG1lIHRvIGJlbGlldmUgdGhhdCBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBgIGlzIGEgY2VudHJhbCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LiBgQVJNNjRfSFdfQUZEQk1gIGFsc28gc2VlbXMgaW1wb3J0YW50IGFzIGEgZGVwZW5kZW50IGNvbmZpZy4gVGhlIGNoYW5nZXMgaW4gYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1Y2Fwcy5oYCB3aGljaCByZWZlcmVuY2VzIGBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBgIGZ1cnRoZXIgY29uZmlybXMgdGhhdCBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBgIGlzIHRoZSBrZXkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB2ZXJpZnkgdGhlc2UgY29uZmlndXJhdGlvbnMgZHVyaW5nIG15IHRlc3RpbmcgdG8gZW5zdXJlIHRoZSByZWxldmFudCBjb2RlIHBhdGhzIGFyZSBleGVyY2lzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ9OTU9S2VybmVsIHBhcmFtZXRlcnNcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDg1LVx0aHVnZXRsYl9mcmVlX3ZtZW1tYXA9XG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dDoyMDg2Olx0XHRcdFtLTkxdIFJlcXVpcmVzIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA4Ny1cdFx0XHRlbmFibGVkLlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTIwOTUtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dDoyMDk2Olx0XHRcdEJ1aWx0IHdpdGggQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT049eSxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTIwOTctXHRcdFx0dGhlIGRlZmF1bHQgaXMgb24uXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q9MTc0PWh1Z2V0bGJfZnJlZV92bWVtbWFwXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdDoxNzU6XHRXaGVuIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUCBpcyBzZXQsIHRoaXMgZW5hYmxlcyBIdWdlVExCXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdC0xNzYtXHRWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKS5cbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaD0xND1jcHVjYXBfaXNfcG9zc2libGUoY29uc3QgdW5zaWduZWQgaW50IGNhcClcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaC03OC1cdGNhc2UgQVJNNjRfSFZPX0NPTVBBVElCTEU6XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaDo3OTpcdFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1Y2Fwcy5oLTgwLVx0fVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0yMTg1PXN0YXRpYyBib29sIGxhdGVfY3B1X2VuYWJsZV9odm8oY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKl9fdW51c2VkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIxODYte1xuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIxODc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIxODgtXHRpZiAoY3B1X2hhc19od19hZigpKVxuLS1cbmFyY2gveDg2L2VudHJ5L3Zkc28vdmRzbzMyL2Zha2VfMzJiaXRfYnVpbGQuaC0xMy0jdW5kZWYgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQXG5hcmNoL3g4Ni9lbnRyeS92ZHNvL3Zkc28zMi9mYWtlXzMyYml0X2J1aWxkLmg6MTQ6I3VuZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuYXJjaC94ODYvZW50cnkvdmRzby92ZHNvMzIvZmFrZV8zMmJpdF9idWlsZC5oLTE1LSN1bmRlZiBDT05GSUdfTlJfQ1BVU1xuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYz0xMzE2PXN0YXRpYyB2b2lkIF9faW5pdCByZWdpc3Rlcl9wYWdlX2Jvb3RtZW1faW5mbyh2b2lkKVxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzMTcte1xuYXJjaC94ODYvbW0vaW5pdF82NC5jOjEzMTg6I2lmIGRlZmluZWQoQ09ORklHX05VTUEpIHx8IGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKVxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzMTktXHRpbnQgaTtcbi0tXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG5mcy9LY29uZmlnLTI2NC1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuZnMvS2NvbmZpZy0yNjUtXHRkZWZhdWx0IG5cbmZzL0tjb25maWc6MjY2Olx0ZGVwZW5kcyBvbiBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuZnMvS2NvbmZpZy0yNjctXHRoZWxwXG4tLVxuZnMvS2NvbmZpZz0yNzM9Y29uZmlnIEhVR0VUTEJfUEFHRVxuLS1cbmZzL0tjb25maWctMjc2LVxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI3OC1cdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oPTEzMj1zdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3N1cHBvcnRlZCh2b2lkKVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmgtMTMzLXtcbmluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oOjEzNDpcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUCk7XG5pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaC0xMzUtfVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYl92bWVtbWFwLmgtNi1cbmluY2x1ZGUvbGludXgvaHVnZXRsYl92bWVtbWFwLmg6NzojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oLTgtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oPTk9Ym9vbCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKHZvaWQpO1xuaW5jbHVkZS9saW51eC9odWdldGxiX3ZtZW1tYXAuaC0xMC1cbmluY2x1ZGUvbGludXgvaHVnZXRsYl92bWVtbWFwLmg6MTE6I2Vsc2UgLyogQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQICovXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oLTEyLVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTA1LSNkZWZpbmUgTUFYX0ZPTElPX1ZNRU1NQVBfQUxJR04gXFxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTA2Olx0KElTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKSBcdTAwMjZcdTAwMjYgXFxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTA3LVx0IGlzX3Bvd2VyX29mXzIoc2l6ZW9mKHN0cnVjdCBwYWdlKSkgPyBcXFxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9OTY4PXN0cnVjdCB6b25lIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTExNDgtXHRhdG9taWNfbG9uZ190XHRcdHZtX251bWFfZXZlbnRbTlJfVk1fTlVNQV9FVkVOVF9JVEVNU107XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjExNDk6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMTUwLVx0c3RydWN0IHBhZ2UgKnZtZW1tYXBfdGFpbHNbTlJfVk1FTU1BUF9UQUlMU107XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MjA4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBjb21wb3VuZF9pbmZvX2hhc19tYXNrKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMjE3LVx0ICovXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoyMTg6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKSlcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTIxOS1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL01ha2VmaWxlPTg0PWVuZGlmXG5tbS9NYWtlZmlsZTo4NTpvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApXHQmIzQzOz0gaHVnZXRsYl92bWVtbWFwLm9cbm1tL01ha2VmaWxlLTg2LW9iai0kKENPTkZJR19OVU1BKSBcdCYjNDM7PSBtZW1wb2xpY3kub1xuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTQ5NT1ib29sIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGUodm9pZClcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYy00OTktXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo1MDA6c3RhdGljIGJvb2wgdm1lbW1hcF9vcHRpbWl6ZV9lbmFibGVkID0gSVNfRU5BQkxFRChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTik7XG5tbS9odWdldGxiX3ZtZW1tYXAuYy01MDEtc3RhdGljIGludCBfX2luaXQgaHVnZXRsYl92bWVtbWFwX29wdGltaXplX3BhcmFtKGNoYXIgKmJ1Zilcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaC0yMS1cbm1tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oOjIyOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbm1tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oLTIzLWludCBodWdldGxiX3ZtZW1tYXBfcmVzdG9yZV9mb2xpbyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaD04OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemFibGVfc2l6ZShjb25zdCBzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oLTkxLX1cbm1tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oOjkyOiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVAgKi9cbm1tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oLTkzLVxuLS1cbm1tL3NwYXJzZS12bWVtbWFwLmM9MzExPXZvaWQgdm1lbW1hcF93cnByb3RlY3RfaHZvKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vc3BhcnNlLXZtZW1tYXAuYy0zMjItXG5tbS9zcGFyc2Utdm1lbW1hcC5jOjMyMzojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5tbS9zcGFyc2Utdm1lbW1hcC5jLTMyNC1zdGF0aWMgX19tZW1pbml0IHN0cnVjdCBwYWdlICp2bWVtbWFwX2dldF90YWlsKHVuc2lnbmVkIGludCBvcmRlciwgc3RydWN0IHpvbmUgKnpvbmUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0NDMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBIdWdlVExCIFZNRU1NQVAgT3B0aW1pemF0aW9uKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byBjb25maWd1cmUgdGhpcyBrZXJuZWwgZm9yIG9wdGltaXplZCBIdWdlVExCIHZtZW1tYXAgdXNhZ2UuIFRoZSBrZXkgY29uZmlnIG9wdGlvbiBzZWVtcyB0byBiZSBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgaXQgaXMgZW5hYmxlZC4KCkkgc2hvdWxkIGFsc28gY2hlY2sgYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05gIHRvIGd1YXJhbnRlZSBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQsIHRoaXMgd2lsbCBzYXZlIGFueSBwb3RlbnRpYWwgaGVhZGFjaGVzIGRvd24gdGhlIGxpbmUuIEkgYWx3YXlzIHByZWZlciBzZW5zaWJsZSBkZWZhdWx0cyEKClRvIGNvbmZpcm0gaWYgdGhpcyBpcyBiZWluZyBoYW5kbGVkIGNvcnJlY3RseSBmb3IgdGhpcyBhcmNoaXRlY3R1cmUsIEkgc2hvdWxkIGFsc28gbG9vayBpbiBgYXJjaC9hcm02NC9LY29uZmlnYCBmb3IgYEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBgLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbnRleHQgYW5kIGFueSBwbGF0Zm9ybSBjb25zaWRlcmF0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0yNjEtXHRzZWxlY3QgVk1BUF9TVEFDS1xuYXJjaC9hcm02NC9LY29uZmlnOjI2MjpcdHNlbGVjdCBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQIGlmIEFSTTY0X0hXX0FGREJNXG5hcmNoL2FybTY0L0tjb25maWctMjYzLVx0aGVscFxuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mj1jb25maWcgTE9PTkdBUkNIXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy04Mi1cdHNlbGVjdCBBUkNIX1dBTlRfTERfT1JQSEFOX1dBUk5cbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6ODM6XHRzZWxlY3QgQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUCBpZiA2NEJJVFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy04NC1cdHNlbGVjdCBBUkNIX1dBTlRTX05PX0lOU1RSXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy04OC1cdHNlbGVjdCBBUkNIX1dBTlRfT1BUSU1JWkVfREFYX1ZNRU1NQVBcbmFyY2gvcmlzY3YvS2NvbmZpZzo4OTpcdHNlbGVjdCBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXG5hcmNoL3Jpc2N2L0tjb25maWctOTAtXHRzZWxlY3QgQVJDSF9XQU5UU19OT19JTlNUUlxuLS1cbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4NlxuLS1cbmFyY2gveDg2L0tjb25maWctMTQ4LVx0c2VsZWN0IEFSQ0hfV0FOVF9PUFRJTUlaRV9EQVhfVk1FTU1BUFx0aWYgWDg2XzY0XG5hcmNoL3g4Ni9LY29uZmlnOjE0OTpcdHNlbGVjdCBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXHRpZiBYODZfNjRcbmFyY2gveDg2L0tjb25maWctMTUwLVx0c2VsZWN0IEFSQ0hfV0FOVF9IVUdFVExCX1ZNRU1NQVBfUFJFSU5JVCBpZiBYODZfNjRcbi0tXG5mcy9LY29uZmlnPTI3Nz1jb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbmZzL0tjb25maWctMjc4LVx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnOjI3OTpcdGRlcGVuZHMgb24gQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUFxuZnMvS2NvbmZpZy0yODAtXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXG4tLVxubW0vS2NvbmZpZz00NzI9Y29uZmlnIEFSQ0hfV0FOVF9PUFRJTUlaRV9EQVhfVk1FTU1BUFxuLS1cbm1tL0tjb25maWctNDc0LVxubW0vS2NvbmZpZzo0NzU6Y29uZmlnIEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBcbm1tL0tjb25maWctNDc2LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzc2CgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogNTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaHVnZXRsYl92bWVtbWFwIE9wdGltaXphdGlvbiBmb3IgQVJNNjQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZW5hYmxpbmcgYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQYCBzcGVjaWZpY2FsbHkgZm9yIEFSTTY0LCBjb250aW5nZW50IG9uIGEgZmV3IG90aGVyIGNvbmZpZ3VyYXRpb25zLiAgYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQYCBoaW5nZXMgb24gYEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBgIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBPbiBBUk02NCwgYEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBgIGlzIHNlbGVjdGVkICppZiogYEFSTTY0X0hXX0FGREJNYCBpcyBhY3RpdmUuICBTbywgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBoZXJlIGlzIHRvIGVuYWJsZSBgQVJNNjRfSFdfQUZEQk1gIGFsb25nc2lkZSBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBgIGFuZCBpdHMgZGVmYXVsdC1vbiBzZXR0aW5nLCBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTmAuIEdvb2QsIGdvdCB0aGUgZGVwZW5kZW5jaWVzIGxpbmVkIHVwLgoKTm93LCB3aGVyZSYjMzk7cyB0aGUgbWVhdCBvZiB0aGlzIG9wdGltaXphdGlvbiBoYXBwZW5pbmc/IFRoZSBwYXRjaCB0b3VjaGVzIGBtbS9odWdldGxiX3ZtZW1tYXAuY2AsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gTGV0JiMzOTtzIHNlZS4uLiBhIHF1aWNrIHNjYW4gcmV2ZWFscyBhIGJ1bmNoIG9mIHJlbGV2YW50IGZ1bmN0aW9ucy4gIEkgbmVlZCB0byBwcmlvcml0aXplIGFuZCByZWFsbHkgZGlnIGludG8gdGhlc2U6CgoqICAgYHZtZW1tYXBfc3BsaXRfcG1kYAoqICAgYHZtZW1tYXBfcG1kX2VudHJ5YAoqICAgYHZtZW1tYXBfcHRlX2VudHJ5YAoqICAgYHZtZW1tYXBfcmVtYXBfcmFuZ2VgCiogICBgdm1lbW1hcF9yZW1hcF9wdGVgCiogICBgdm1lbW1hcF9yZXN0b3JlX3B0ZWAKKiAgIGB2bWVtbWFwX3JlbWFwX2ZyZWVgCiogICBgdm1lbW1hcF9yZW1hcF9hbGxvY2AKKiAgIGBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlYAoqICAgYF9faHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW9gCiogICBgdm1lbW1hcF9zaG91bGRfb3B0aW1pemVfZm9saW9gCiogICBgX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW9gCiogICBgdm1lbW1hcF9zaG91bGRfb3B0aW1pemVfYm9vdG1lbV9wYWdlYAoKV2FpdCwgdGhlcmUgYXJlIGEgY291cGxlIG9mIGlubGluZSBmdW5jdGlvbnMgYXMgd2VsbDogYHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZGAgYW5kIGB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlYCwgbG9jYXRlZCBpbiBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhgIGFuZCBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhgLiBTaW5jZSB0aGV5JiMzOTtyZSBpbmxpbmUsIHRoZXkmIzM5O3JlIHByb2JhYmx5IGdldHRpbmcgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUgZnVuY3Rpb25zIHRoYXQgdXNlIHRoZW0sIGxpa2UgdGhlIGB2bWVtbWFwX3NwbGl0X3BtZGAgYW5kIGB2bWVtbWFwX3JlbWFwX3B0ZWAuIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSBhbmFseXplIHRoZSBjb2RlIGZsb3cuCgpTbywgbGV0JiMzOTtzIHJlZmluZSB0aGF0IGxpc3Qgb2YgZnVuY3Rpb25zIEkgbmVlZCB0byBkaXNzZWN0OgoKKiAgIGB2bWVtbWFwX3NwbGl0X3BtZGAKKiAgIGB2bWVtbWFwX3JlbWFwX3B0ZWAKKiAgIGB2bWVtbWFwX3Jlc3RvcmVfcHRlYAoqICAgYHZtZW1tYXBfcmVtYXBfZnJlZWAKKiAgIGB2bWVtbWFwX3JlbWFwX2FsbG9jYAoqICAgYGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGVgCiogICBgX19odWdldGxiX3ZtZW1tYXBfcmVzdG9yZV9mb2xpb2AKKiAgIGBfX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9mb2xpb2AKClJpZ2h0LCBnb3QgaXQuIE5vdyBJIGp1c3QgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbGwgdGhlc2UgZnVuY3Rpb25zIGFjdHVhbGx5IGV4aXN0IGFzIGV4cGVjdGVkIGluIGBtbS9odWdldGxiX3ZtZW1tYXAuY2AuIEEgcXVpY2sgY2hlY2sgd2lsbCBjb25maXJtIHRoaXMgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBhY3R1YWwgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhpbnR8dm9pZHxib29sKSBbYS16QS1aMC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGJfdm1lbW1hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGJfdm1lbW1hcC5jPTM4PXN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsge1xuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTU0LVxubW0vaHVnZXRsYl92bWVtbWFwLmM6NTU6c3RhdGljIGludCB2bWVtbWFwX3NwbGl0X3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgcGFnZSAqaGVhZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTU2LVx0XHRcdCAgICAgc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqd2Fsaylcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0xMDgtXG5tbS9odWdldGxiX3ZtZW1tYXAuYzoxMDk6c3RhdGljIGludCB2bWVtbWFwX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0xMTAtXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTE0OS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjE1MDpzdGF0aWMgaW50IHZtZW1tYXBfcHRlX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTE1MS1cdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmM9MTYzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgdm1lbW1hcF9yZW1hcF9vcHMgPSB7XG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmMtMTY3LVxubW0vaHVnZXRsYl92bWVtbWFwLmM6MTY4OnN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTE2OS1cdFx0XHQgICAgICAgc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqd2Fsaylcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYz0xOTI9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfdm1lbW1hcF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTIwMy0vKiBGcmVlIGEgbGlzdCBvZiB0aGUgdm1lbW1hcCBwYWdlcyAqL1xubW0vaHVnZXRsYl92bWVtbWFwLmM6MjA0OnN0YXRpYyB2b2lkIGZyZWVfdm1lbW1hcF9wYWdlX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTIwNS17XG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmMtMjExLVxubW0vaHVnZXRsYl92bWVtbWFwLmM6MjEyOnN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9wdGUocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vaHVnZXRsYl92bWVtbWFwLmMtMjEzLVx0XHRcdCAgICAgc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqd2Fsaylcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0yNTktXG5tbS9odWdldGxiX3ZtZW1tYXAuYzoyNjA6c3RhdGljIGludCB2bWVtbWFwX3Jlc3RvcmVfcHRlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTI2MS1cdFx0XHQgICAgICAgc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqd2Fsaylcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0zMDQtICovXG5tbS9odWdldGxiX3ZtZW1tYXAuYzozMDU6c3RhdGljIGludCB2bWVtbWFwX3JlbWFwX3NwbGl0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxubW0vaHVnZXRsYl92bWVtbWFwLmMtMzA2LXtcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYz0zMTU9c3RhdGljIGNvbnN0IGludCBWTUVNTUFQX1JFTUFQX0lOQ09NUExFVEUgPSAxO1xuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTMzMi0gKi9cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjMzMzpzdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfZnJlZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTMzNC1cdFx0XHQgICAgICBzdHJ1Y3QgcGFnZSAqdm1lbW1hcF9oZWFkLFxuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTM3MS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjM3MjpzdGF0aWMgaW50IGFsbG9jX3ZtZW1tYXBfcGFnZV9saXN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vaHVnZXRsYl92bWVtbWFwLmMtMzczLVx0XHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYz0zOTY9c3RhdGljIHN0cnVjdCBwYWdlICp2bWVtbWFwX2dldF90YWlsKHVuc2lnbmVkIGludCBvcmRlciwgc3RydWN0IHpvbmUgKnpvbmUpXG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmMtNDM1LSAqL1xubW0vaHVnZXRsYl92bWVtbWFwLmM6NDM2OnN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9hbGxvYyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNDM3LVx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYz00NzI9c3RhdGljIGVudW0gaHVnZXRsYl9odm9fc3RhdHVzIGh2b19zdGF0dXMgPSBIVk9fSU5BQ1RJVkU7XG5tbS9odWdldGxiX3ZtZW1tYXAuYy00NzMtXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo0NzQ6c3RhdGljIGJvb2wgaHVnZXRsYl9odm9fc3RhdHVzX3RyeV9zZXQoZW51bSBodWdldGxiX2h2b19zdGF0dXMgc3RhdHVzKVxubW0vaHVnZXRsYl92bWVtbWFwLmMtNDc1LXtcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYy00OTQtXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo0OTU6Ym9vbCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKHZvaWQpXG5tbS9odWdldGxiX3ZtZW1tYXAuYy00OTYte1xuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTUwNT1lYXJseV9wYXJhbShcJiMzNDtodWdldGxiX2ZyZWVfdm1lbW1hcFwmIzM0OywgaHVnZXRsYl92bWVtbWFwX29wdGltaXplX3BhcmFtKTtcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTUwNi1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjUwNzpzdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTUwOC1cdFx0XHRcdFx0ICAgc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBmbGFncylcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYy01NDYtICovXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo1NDc6aW50IGh1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9odWdldGxiX3ZtZW1tYXAuYy01NDgte1xuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTU2NT1sb25nIGh1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvcyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTU5My0vKiBSZXR1cm4gdHJ1ZSBpZmYgYSBIdWdlVExCIHdob3NlIHZtZW1tYXAgc2hvdWxkIGFuZCBjYW4gYmUgb3B0aW1pemVkLiAqL1xubW0vaHVnZXRsYl92bWVtbWFwLmM6NTk0OnN0YXRpYyBib29sIHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9odWdldGxiX3ZtZW1tYXAuYy01OTUte1xuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTYxMy1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjYxNDpzdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiX3ZtZW1tYXAuYy02MTUtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTY4OC0gKi9cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjY4OTp2b2lkIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9mb2xpbyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZXRsYl92bWVtbWFwLmMtNjkwLXtcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYy02OTYtXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo2OTc6c3RhdGljIGludCBodWdldGxiX3ZtZW1tYXBfc3BsaXRfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTY5OC17XG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmMtNzEzLVxubW0vaHVnZXRsYl92bWVtbWFwLmM6NzE0OnN0YXRpYyB2b2lkIF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpoLFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNzE1LVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTc5NC1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjc5NTp2b2lkIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTc5Ni17XG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmMtNzk5LVxubW0vaHVnZXRsYl92bWVtbWFwLmM6ODAwOnZvaWQgaHVnZXRsYl92bWVtbWFwX29wdGltaXplX2Jvb3RtZW1fZm9saW9zKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXG5tbS9odWdldGxiX3ZtZW1tYXAuYy04MDEte1xuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTgwNy0vKiBSZXR1cm4gdHJ1ZSBvZiBhIGJvb3RtZW0gYWxsb2NhdGVkIEh1Z2VUTEIgcGFnZSBzaG91bGQgYmUgcHJlLUhWTy1lZCAqL1xubW0vaHVnZXRsYl92bWVtbWFwLmM6ODA4OnN0YXRpYyBib29sIHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2Jvb3RtZW1fcGFnZShzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgKm0pXG5tbS9odWdldGxiX3ZtZW1tYXAuYy04MDkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDM5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIEh1Z2V0bGIgVm1lbW1hcCBNb2RpZmljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgaW4gYG1tL2h1Z2V0bGJfdm1lbW1hcC5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgbW9kaWZpY2F0aW9ucyB0byB1bmRlcnN0YW5kIHRoZWlyIGltcGxpY2F0aW9ucy4gRnJvbSB0aGUgcHJvdmlkZWQgbGlzdCwgaXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBiZWVuIHNvbWUgdGFyZ2V0ZWQgd29yayBvbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBodWdlcGFnZXMgYW5kIHRoZSB2bWVtbWFwLgoKSSYjMzk7bSBzZWVpbmcgYSBsb3Qgb2YgZnVuY3Rpb25zIGhlcmUsIGJ1dCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIG9uZXMgdGhhdCBhcmUgbGlrZWx5IHRvIGJlIHRoZSBtb3N0IGNyaXRpY2FsLCBhbmQgbm90IHNpbXBsZSBnZW5lcmljIGhvdCBwYXRocy4gQmFzZWQgb24gdGhlIG5hbWluZyBhbmQgbGlrZWx5IGZ1bmN0aW9uLCBJJiMzOTtkIHNheSB0aGUgb25lcyB0aGF0IHN0YW5kIG91dCBhcyB3b3J0aHkgb2YgaW1tZWRpYXRlIGF0dGVudGlvbiBhcmU6CgoqICAgYHZtZW1tYXBfc3BsaXRfcG1kYAoqICAgYHZtZW1tYXBfcmVtYXBfcHRlYAoqICAgYHZtZW1tYXBfcmVzdG9yZV9wdGVgCiogICBgdm1lbW1hcF9yZW1hcF9mcmVlYAoqICAgYHZtZW1tYXBfcmVtYXBfYWxsb2NgCiogICBgaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZWAKKiAgIGBfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvYAoqICAgYF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvYAoKVGhvc2Ugc2VlbSB0byBiZSB0aGUgb25lcyB0aGF0IGRpcmVjdGx5IGFmZmVjdCBob3cgcGFnZXMgYXJlIHJlbWFwcGVkLCBmcmVlZCwgYW5kIG9wdGltaXplZCBpbiB0aGUgY29udGV4dCBvZiBodWdldGxiZnMuIFRoZSBgdHJ5X2Rpc2FibGVgIGFuZCBmb2xpbyBmdW5jdGlvbnMgc3VnZ2VzdCBhbiBvcHRpbWl6YXRpb24gc3RyYXRlZ3kgaXMgaW52b2x2ZWQuCgpCZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCBjaGVjayBmb3IgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgYEFSTTY0X0hXX0FGREJNYCBpcyBzZWxlY3RlZCBvbiBBUk02NCBieSBkZWZhdWx0LiBJcyB0aGF0IGEgS2NvbmZpZyBvcHRpb24gdGhhdCBpbXBhY3RzIHRoZSBiZWhhdmlvciBvZiB0aGVzZSBmdW5jdGlvbnM/IEkgc2hvdWxkIHZlcmlmeSB0aGF0IGJlZm9yZSBkaXZpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFSTTY0X0hXX0FGREJNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvS2NvbmZpZz0xOTAwPW1lbnUgXCYjMzQ7QVJNdjguMSBhcmNoaXRlY3R1cmFsIGZlYXR1cmVzXCYjMzQ7XG5hcmNoL2FybTY0L0tjb25maWctMTkwMS1cbmFyY2gvYXJtNjQvS2NvbmZpZzoxOTAyOmNvbmZpZyBBUk02NF9IV19BRkRCTVxuYXJjaC9hcm02NC9LY29uZmlnLTE5MDMtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGhhcmR3YXJlIHVwZGF0ZXMgb2YgdGhlIEFjY2VzcyBhbmQgRGlydHkgcGFnZSBmbGFnc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDg4NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQVJNNjQgYW5kIEh1Z2UgUGFnZXMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgQVJNNjRfSFdfQUZEQk1gIGlzIGRlZmluaXRlbHkgYSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBzaW1wbHkgZW5hYmxlIGBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUGAsIGBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OYCwgYW5kIGBBUk02NF9IV19BRkRCTWAuCgpCdXQgdGhlbiBJIHJlbWVtYmVyZWQgdGhhdCBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBgIGlzIGEgYGRlZl9ib29sYCB0aGF0JiMzOTtzIGNvbnRpbmdlbnQgb24gYEhVR0VUTEJfUEFHRWAgYmVpbmcgZW5hYmxlZC4gU28sIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBsb2dpYyB3aWxsIGhhbmRsZSBpdHMgZW5hYmxpbmcgYXV0b21hdGljYWxseSwgKmlmKiB0aGUgZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQuIExldCYjMzk7cyBzZWUuLi4gdGhlIGRlcGVuZGVuY2llcyBhcmUgYEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBgIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBBbmQgYWgtaGEhIGBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQYCAqaXMqIHNlbGVjdGVkIGJ5IGBBUk02NGAgaWYgYEFSTTY0X0hXX0FGREJNYCBpcyBzZXQuIFNvLCB0aGUgcmVhbCBlbmFibGVyIGhlcmUgb24gQVJNNjQgaXMgaW5kZWVkIGBBUk02NF9IV19BRkRCTWAuCgpUaGF0IGxlYXZlcyB1cyB3aXRoIGBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OYC4gVGhpcyBpcyBhIGJvb2xlYW4gb3B0aW9uIHRoYXQgZGVmYXVsdHMgdG8gJiMzNDtuJiMzNDssIHNvIHdlIGRlZmluaXRlbHkgd2FudCB0byBtYWtlIHN1cmUgKnRoYXQqIGlzIGVuYWJsZWQuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgYmVpbmcgc2V0IGNvcnJlY3RseSB3aXRoaW4gdGhlIGBmcy9LY29uZmlnYCBmaWxlLiBBbHNvLCBsZXQmIzM5O3MgYXNzdW1lIGBIVUdFVExCX1BBR0VgIGlzIGFscmVhZHkgZW5hYmxlZCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBhYm91dCB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG5mcy9LY29uZmlnLTI2NC1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTY0OQoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDM5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgSHVnZXRsYiBWbWVtbWFwIE9wdGltaXphdGlvbiBDaGVja2xpc3QqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiB0aGlua2luZyBhYm91dCB0aGUgYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQYCBmZWF0dXJlLiBZZXMsIGBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OYCBpcyBkZWZpbml0ZWx5IHRoZSBrZXkgaGVyZSDigJMgdGhhdCYjMzk7cyB0aGUgZGVmYXVsdCBzdGF0ZSB3ZSYjMzk7cmUgc2hvb3RpbmcgZm9yLgoKQWxyaWdodCwgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29yZSBlbGVtZW50cy4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIGFyZTogYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQYCwgYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05gLCBhbmQgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBgQVJNNjRfSFdfQUZEQk1gICh3aGljaCwga25vd2luZyBob3cgdGhlc2UgdGhpbmdzIHdvcmssIGxpa2VseSBpbnRlcmFjdHMgd2l0aCB0aGUgb3B0aW1pemF0aW9uIGluIHNvbWUgd2F5KS4KCk5vdyBmb3IgdGhlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzLiBNeSBpbml0aWFsIGxpc3Qgd2FzOiBgdm1lbW1hcF9zcGxpdF9wbWRgLCBgdm1lbW1hcF9yZW1hcF9wdGVgLCBgdm1lbW1hcF9yZXN0b3JlX3B0ZWAsIGB2bWVtbWFwX3JlbWFwX2ZyZWVgLCBgdm1lbW1hcF9yZW1hcF9hbGxvY2AsIGBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlYCwgYF9faHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW9gLCBhbmQgYF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvYC4KCkJ1dCwgd2FpdCwgbGV0JiMzOTtzIHJlZmluZSB0aGF0IGxpc3QgZm9yIGNvbXBsZXRlbmVzcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBJJiMzOTtsbCBhZGQgYHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2ZvbGlvYCBhbmQgYHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2Jvb3RtZW1fcGFnZWAgdG8gdGhlIGxpc3QuIFRoYXQgZmVlbHMgbW9yZSBjb21wbGV0ZS4KCk9rYXksIHRoaXMgcmV2aXNlZCBsaXN0IGxvb2tzIHByZXR0eSBzb2xpZC4gSXQgY292ZXJzIHRoZSBjb3JlIG9wZXJhdGlvbnMgYW5kIGNoZWNrcyByZWxhdGVkIHRvIHRoZSB2bWVtbWFwIG9wdGltaXphdGlvbi4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIHN3ZWVwIGZvciBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZ1bmN0aW9ucy4gSSBzaG91bGQgY2hlY2sgYGFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY2Agbm93LiBSaWdodCwgSSBmb3VuZCBgbGF0ZV9jcHVfZW5hYmxlX2h2b2AgYW5kIGBodm9fY29tcGF0aWJsZWAuIFRoZXNlIGFyZSBhbHNvIHN0cm9uZyBjYW5kaWRhdGVzIGFuZCBjb3VsZCBwcm92aWRlIGltcG9ydGFudCBjbHVlcywgc28gdGhleSYjMzk7cmUgaW4uIFRoYXQmIzM5O3MgZ29vZC4gTm93LCBJIGZlZWwgYSBsb3QgbW9yZSBjb25maWRlbnQuIEkgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBhc3BlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KGludHx2b2lkfGJvb2wpIFthLXpBLVowLTlfXSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0xNTA9c3RhdGljIGNwdW1hc2tfdmFyX3QgY3B1XzMyYml0X2VsMF9tYXNrIF9fY3B1bWFza192YXJfcmVhZF9tb3N0bHk7XG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTUxLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE1Mjp2b2lkIGR1bXBfY3B1X2ZlYXR1cmVzKHZvaWQpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTUzLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjE4LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIxOTpzdGF0aWMgdm9pZCBjcHVfZW5hYmxlX2NucChzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBjb25zdCAqY2FwKTtcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjAtXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjIxOnN0YXRpYyBib29sIF9fc3lzdGVtX21hdGNoZXNfY2FwKHVuc2lnbmVkIGludCBuKTtcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjItXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTc5OD1zdGF0aWMgY29uc3Qgc3RydWN0IF9fZnRyX3JlZ19lbnRyeSB7XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTg3Ny1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzo4Nzg6c3RhdGljIGludCBzZWFyY2hfY21wX2Z0cl9yZWcoY29uc3Qgdm9pZCAqaWQsIGNvbnN0IHZvaWQgKnJlZ3ApXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtODc5LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9OTY0PXN0YXRpYyB2b2lkIF9faW5pdCBzb3J0X2Z0cl9yZWdzKHZvaWQpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEwMTktICovXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTAyMDpzdGF0aWMgdm9pZCBpbml0X2NwdV9mdHJfcmVnKHUzMiBzeXNfcmVnLCB1NjQgbmV3KVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEwMjEte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0xMTE0PXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ib290X2NwdV9jYXBhYmlsaXRpZXModm9pZCk7XG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTExNS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxMTE2OnN0YXRpYyB2b2lkIGluaXRfMzJiaXRfY3B1X2ZlYXR1cmVzKHN0cnVjdCBjcHVpbmZvXzMyYml0ICppbmZvKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTExMTcte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0xMTY5PXN0YXRpYyBpbmxpbmUgdm9pZCBkZXRlY3Rfc3lzdGVtX3N1cHBvcnRzX3BzZXVkb19ubWkodm9pZCkgeyB9XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTExNzEtXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTE3MjpzdGF0aWMgYm9vbCBkZXRlY3RfZnRyX2hhc19tcGFtKHZvaWQpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTE3My17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTExODA9dm9pZCBfX2luaXQgaW5pdF9jcHVfZmVhdHVyZXMoc3RydWN0IGNwdWluZm9fYXJtNjQgKmluZm8pXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEyMzUtXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTIzNjpzdGF0aWMgdm9pZCB1cGRhdGVfY3B1X2Z0cl9yZWcoc3RydWN0IGFybTY0X2Z0cl9yZWcgKnJlZywgdTY0IG5ldylcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xMjM3LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTI1Mi1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxMjUzOnN0YXRpYyBpbnQgY2hlY2tfdXBkYXRlX2Z0cl9yZWcodTMyIHN5c19pZCwgaW50IGNwdSwgdTY0IHZhbCwgdTY0IGJvb3QpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTI1NC17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEyNjctXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTI2ODpzdGF0aWMgdm9pZCByZWxheF9jcHVfZnRyX3JlZyh1MzIgc3lzX2lkLCBpbnQgZmllbGQpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTI2OS17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEyODYtXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTI4NzpzdGF0aWMgdm9pZCBsYXp5X2luaXRfMzJiaXRfY3B1X2ZlYXR1cmVzKHN0cnVjdCBjcHVpbmZvX2FybTY0ICppbmZvLFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEyODgtXHRcdFx0XHRcdCBzdHJ1Y3QgY3B1aW5mb19hcm02NCAqYm9vdClcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTMwMi1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxMzAzOnN0YXRpYyBpbnQgdXBkYXRlXzMyYml0X2NwdV9mZWF0dXJlcyhpbnQgY3B1LCBzdHJ1Y3QgY3B1aW5mb18zMmJpdCAqaW5mbyxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xMzA0LVx0XHRcdFx0ICAgICBzdHJ1Y3QgY3B1aW5mb18zMmJpdCAqYm9vdClcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTM3OC0gKi9cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxMzc5OnZvaWQgdXBkYXRlX2NwdV9mZWF0dXJlcyhpbnQgY3B1LFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEzODAtXHRcdFx0IHN0cnVjdCBjcHVpbmZvX2FybTY0ICppbmZvLFxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0xNzI0PWRldmljZV9pbml0Y2FsbChhYXJjaDMyX2VsMF9zeXNmc19pbml0KTtcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xNzI1LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE3MjY6c3RhdGljIGJvb2wgaGFzXzMyYml0X2VsMChjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBzY29wZSlcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xNzI3LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTczNi1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxNzM3OnN0YXRpYyBib29sIGhhc191c2VhYmxlX2dpY3YzX2NwdWlmKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IHNjb3BlKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE3Mzgte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xNzUxLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE3NTI6c3RhdGljIGJvb2wgaGFzX2NhY2hlX2lkYyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTc1My1cdFx0XHQgIGludCBzY29wZSlcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTc2NC1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxNzY1OnN0YXRpYyB2b2lkIGNwdV9lbXVsYXRlX2VmZmVjdGl2ZV9jdHIoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKl9fdW51c2VkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE3NjYte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xNzc2LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE3Nzc6c3RhdGljIGJvb2wgaGFzX2NhY2hlX2RpYyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTc3OC1cdFx0XHQgIGludCBzY29wZSlcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MTgwOD1zdGF0aWMgaW50IF9fa3B0aV9mb3JjZWQ7IC8qIDA6IG5vdCBmb3JjZWQsIFx1MDAzZTA6IGZvcmNlZCBvbiwgXHUwMDNjMDogZm9yY2VkIG9mZiAqL1xuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE4MDktXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTgxMDpzdGF0aWMgYm9vbCB1bm1hcF9rZXJuZWxfYXRfZWwwKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xODExLVx0XHRcdFx0aW50IHNjb3BlKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xODg1LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE4ODY6c3RhdGljIGJvb2wgaGFzX252MShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBzY29wZSlcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xODg3LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTkwOC0jaWYgZGVmaW5lZChJRF9BQTY0TU1GUjBfRUwxX1RHUkFOX0xQQTIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKElEX0FBNjRNTUZSMF9FTDFfVEdSQU5fMl9TVVBQT1JURURfTFBBMilcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxOTA5OnN0YXRpYyBib29sIGhhc19scGEyX2F0X3N0YWdlMSh1NjQgbW1mcjApXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTkxMC17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5MTctXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTkxODpzdGF0aWMgYm9vbCBoYXNfbHBhMl9hdF9zdGFnZTIodTY0IG1tZnIwKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5MTkte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTI2LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE5Mjc6c3RhdGljIGJvb2wgaGFzX2xwYTIoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LCBpbnQgc2NvcGUpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTkyOC17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5MzQtI2Vsc2VcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxOTM1OnN0YXRpYyBib29sIGhhc19scGEyKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IHNjb3BlKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5MzYte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTQxLSNpZmRlZiBDT05GSUdfSFdfUEVSRl9FVkVOVFNcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxOTQyOnN0YXRpYyBib29sIGhhc19wbXV2Myhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBzY29wZSlcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTQzLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTk1My1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxOTU0OnN0YXRpYyB2b2lkIGNwdV9lbmFibGVfa3B0aShzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBjb25zdCAqY2FwKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5NTUte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0xOTgwPXN0YXRpYyBpbmxpbmUgdm9pZCBfX2NwdV9lbmFibGVfaHdfZGJtKHZvaWQpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5ODgtXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTk4OTpzdGF0aWMgYm9vbCBjcHVfaGFzX2Jyb2tlbl9kYm0odm9pZClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTkwLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjAwNi1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMDA3OnN0YXRpYyBib29sIGNwdV9jYW5fdXNlX2RibShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIwMDgte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDEyLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIwMTM6c3RhdGljIHZvaWQgY3B1X2VuYWJsZV9od19kYm0oc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgY29uc3QgKmNhcClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDE0LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjAyMC1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMDIxOnN0YXRpYyBib29sIGhhc19od19kYm0oY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmNhcCxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDIyLVx0XHQgICAgICAgaW50IF9fdW51c2VkKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0yMDQ4PXN0YXRpYyBzdHJ1Y3QgY3B1bWFzayBhbXVfY3B1cyBfX3JlYWRfbW9zdGx5O1xuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIwNDktXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjA1MDpib29sIGNwdV9oYXNfYW11X2ZlYXQoaW50IGNwdSlcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDUxLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjA1NC1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMDU1OmludCBnZXRfY3B1X3dpdGhfYW11X2ZlYXQodm9pZClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDU2LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjA1OS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMDYwOnN0YXRpYyB2b2lkIGNwdV9hbXVfZW5hYmxlKHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGNvbnN0ICpjYXApXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjA2MS17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIwNzAtXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjA3MTpzdGF0aWMgYm9vbCBoYXNfYW11KGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXAsXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjA3Mi1cdFx0ICAgIGludCBfX3VudXNlZClcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjA4OS0jZWxzZVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIwOTA6aW50IGdldF9jcHVfd2l0aF9hbXVfZmVhdCh2b2lkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIwOTEte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDk1LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIwOTY6c3RhdGljIGJvb2wgcnVuc19hdF9lbDIoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LCBpbnQgX191bnVzZWQpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjA5Ny17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIxMDAtXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjEwMTpzdGF0aWMgdm9pZCBjcHVfY29weV9lbDJyZWdzKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTAyLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjExNC1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMTE1OnN0YXRpYyBib29sIGhhc19uZXN0ZWRfdmlydF9zdXBwb3J0KGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXAsXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjExNi1cdFx0XHRcdCAgICBpbnQgc2NvcGUpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIxMjgtXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjEyOTpzdGF0aWMgYm9vbCBodmhlX3Bvc3NpYmxlKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTMwLVx0XHRcdCAgaW50IF9fdW51c2VkKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTM0LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIxMzU6Ym9vbCBjcHVfc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCh2b2lkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIxMzYte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTcwLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIxNzE6c3RhdGljIGJvb2wgaGFzX2JibWwyX25vYWJvcnQoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmNhcHMsIGludCBzY29wZSlcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTcyLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjE3NS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMTc2OnN0YXRpYyBib29sIGh2b19jb21wYXRpYmxlKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXBzLCBpbnQgc2NvcGUpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjE3Ny17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIxODQtXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjE4NTpzdGF0aWMgYm9vbCBsYXRlX2NwdV9lbmFibGVfaHZvKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTg2LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjIwMC1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMjAxOnN0YXRpYyB2b2lkIGNwdV9lbmFibGVfcGFuKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjAyLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjIxMy0jaWZkZWYgQ09ORklHX0FSTTY0X1JBU19FWFROXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjIxNDpzdGF0aWMgdm9pZCBjcHVfY2xlYXJfZGlzcihjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqX191bnVzZWQpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjIxNS17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyMTgtfVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIyMTk6c3RhdGljIGJvb2wgaGFzX3Jhc3YxcDEoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKl9fdW51c2VkLCBpbnQgc2NvcGUpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjIyMC17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyMzktI2lmZGVmIENPTkZJR19BUk02NF9QVFJfQVVUSFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIyNDA6c3RhdGljIGJvb2wgaGFzX2FkZHJlc3NfYXV0aF9jcHVjYXAoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LCBpbnQgc2NvcGUpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjI0MS17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyNjUtXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjI2NjpzdGF0aWMgYm9vbCBoYXNfYWRkcmVzc19hdXRoX21ldGFjYXAoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyNjctXHRcdFx0XHQgICAgIGludCBzY29wZSlcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjI3NS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMjc2OnN0YXRpYyBib29sIGhhc19nZW5lcmljX2F1dGgoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyNzctXHRcdFx0ICAgICBpbnQgX191bnVzZWQpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyODctI2lmZGVmIENPTkZJR19BUk02NF9FMFBEXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjI4ODpzdGF0aWMgdm9pZCBjcHVfZW5hYmxlX2UwcGQoc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgY29uc3QgKmNhcClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjg5LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjI5NC1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMjk1OnN0YXRpYyB2b2lkIGNwdV9lbmFibGVfbHM2NChzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBjb25zdCAqY2FwKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyOTYte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjk5LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIzMDA6c3RhdGljIHZvaWQgY3B1X2VuYWJsZV9sczY0X3Yoc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgY29uc3QgKmNhcClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMzAxLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjMwNS0jaWZkZWYgQ09ORklHX0FSTTY0X1BTRVVET19OTUlcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMzA2OnN0YXRpYyBib29sIGNhbl91c2VfZ2ljX3ByaW9yaXRpZXMoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIzMDctXHRcdFx0XHQgICBpbnQgc2NvcGUpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIzMTktXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjMyMDpzdGF0aWMgYm9vbCBoYXNfZ2ljX3ByaW9fcmVsYXhlZF9zeW5jKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMzIxLVx0XHRcdFx0ICAgICAgaW50IHNjb3BlKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMzQ4LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIzNDk6c3RhdGljIGJvb2wgY2FuX3RyYXBfaWN2X2Rpcl9lbDEoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIzNTAtXHRcdFx0XHQgaW50IHNjb3BlKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNDAxLSNpZmRlZiBDT05GSUdfQVJNNjRfQlRJXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjQwMjpzdGF0aWMgdm9pZCBidGlfZW5hYmxlKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNDAzLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQxNi0jaWZkZWYgQ09ORklHX0FSTTY0X01URVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjI0MTc6c3RhdGljIHZvaWQgY3B1X2VuYWJsZV9tdGUoc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgY29uc3QgKmNhcClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNDE4LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQzOS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyNDQwOnN0YXRpYyB2b2lkIHVzZXJfZmVhdHVyZV9maXh1cCh2b2lkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTI0NDEte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNDU4LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjI0NTk6c3RhdGljIHZvaWQgZWxmX2h3Y2FwX2ZpeHVwKHZvaWQpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ2MC17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTI0NjctI2lmZGVmIENPTkZJR19LVk1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyNDY4OnN0YXRpYyBib29sIGlzX2t2bV9wcm90ZWN0ZWRfbW9kZShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBfX3VudXNlZClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNDY5LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ3My1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyNDc0OnN0YXRpYyB2b2lkIGNwdV90cmFwX2VsMF9pbXBkZWYoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKl9fdW51c2VkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTI0NzUte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNDc4LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjI0Nzk6c3RhdGljIHZvaWQgY3B1X2VuYWJsZV9kaXQoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKl9fdW51c2VkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTI0ODAte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNDgzLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjI0ODQ6c3RhdGljIHZvaWQgY3B1X2VuYWJsZV9tb3BzKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNDg1LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ4OS0jaWZkZWYgQ09ORklHX0FSTTY0X1BPRVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjI0OTA6c3RhdGljIHZvaWQgY3B1X2VuYWJsZV9wb2UoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKl9fdW51c2VkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTI0OTEte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNDk3LSNpZmRlZiBDT05GSUdfQVJNNjRfR0NTXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjQ5ODpzdGF0aWMgdm9pZCBjcHVfZW5hYmxlX2djcyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqX191bnVzZWQpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ5OS17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTMyOTA9c3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIHB0cl9hdXRoX2h3Y2FwX2dlbl9tYXRjaGVzW10gPSB7XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTMzMDQtI2lmZGVmIENPTkZJR19BUk02NF9TVkVcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozMzA1OnN0YXRpYyBib29sIGhhc19zdmVfZmVhdHVyZShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwLCBpbnQgc2NvcGUpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzMwNi17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTMzMTEtI2lmZGVmIENPTkZJR19BUk02NF9TTUVcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozMzEyOnN0YXRpYyBib29sIGhhc19zbWVfZmVhdHVyZShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwLCBpbnQgc2NvcGUpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzMxMy17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTMzMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2VsZl9od2NhcHNbXSA9IHtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzQ1OC0jaWZkZWYgQ09ORklHX0NPTVBBVFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM0NTk6c3RhdGljIGJvb2wgY29tcGF0X2hhc19uZW9uKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXAsIGludCBzY29wZSlcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zNDYwLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MzQ4MD1zdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgY29tcGF0X2VsZl9od2NhcHNbXSA9IHtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzUwMy1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozNTA0OnN0YXRpYyB2b2lkIGNhcF9zZXRfZWxmX2h3Y2FwKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXApXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzUwNS17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM1MjQtLyogQ2hlY2sgaWYgd2UgaGF2ZSBhIHBhcnRpY3VsYXIgSFdDQVAgZW5hYmxlZCAqL1xuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM1MjU6c3RhdGljIGJvb2wgY3B1c19oYXZlX2VsZl9od2NhcChjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM1MjYte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zNTQ4LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM1NDk6c3RhdGljIHZvaWQgc2V0dXBfZWxmX2h3Y2Fwcyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqaHdjYXBzKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM1NTAte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zNTU3LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM1NTg6c3RhdGljIHZvaWQgdXBkYXRlX2NwdV9jYXBhYmlsaXRpZXModTE2IHNjb3BlX21hc2spXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzU1OS17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM2MTUtICovXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MzYxNjpzdGF0aWMgaW50IGNwdV9lbmFibGVfbm9uX2Jvb3Rfc2NvcGVfY2FwYWJpbGl0aWVzKHZvaWQgKl9fdW51c2VkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM2MTcte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0zNjQwPXN0YXRpYyB2b2lkIF9faW5pdCBlbmFibGVfY3B1X2NhcGFiaWxpdGllcyh1MTYgc2NvcGVfbWFzaylcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzY4My0gKi9cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozNjg0OnN0YXRpYyB2b2lkIHZlcmlmeV9sb2NhbF9jcHVfY2Fwcyh1MTYgc2NvcGVfbWFzaylcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zNjg1LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzc0OC0gKi9cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozNzQ5OnN0YXRpYyB2b2lkIGNoZWNrX2Vhcmx5X2NwdV9mZWF0dXJlcyh2b2lkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM3NTAte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0zNzU3PV9fdmVyaWZ5X2xvY2FsX2VsZl9od2NhcHMoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmNhcHMpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM3NjctXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6Mzc2ODpzdGF0aWMgdm9pZCB2ZXJpZnlfbG9jYWxfZWxmX2h3Y2Fwcyh2b2lkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM3Njkte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zNzc1LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM3NzY6c3RhdGljIHZvaWQgdmVyaWZ5X3N2ZV9mZWF0dXJlcyh2b2lkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM3Nzcte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zNzg4LVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM3ODk6c3RhdGljIHZvaWQgdmVyaWZ5X3NtZV9mZWF0dXJlcyh2b2lkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM3OTAte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zODAxLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM4MDI6c3RhdGljIHZvaWQgdmVyaWZ5X2h5cF9jYXBhYmlsaXRpZXModm9pZClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zODAzLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzgzMi1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozODMzOnN0YXRpYyB2b2lkIHZlcmlmeV9tcGFtX2NhcGFiaWxpdGllcyh2b2lkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM4MzQte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zODcwLSAqL1xuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM4NzE6c3RhdGljIHZvaWQgdmVyaWZ5X2xvY2FsX2NwdV9jYXBhYmlsaXRpZXModm9pZClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zODcyLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzg5My1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozODk0OnZvaWQgY2hlY2tfbG9jYWxfY3B1X2NhcGFiaWxpdGllcyh2b2lkKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM4OTUte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zOTEzLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM5MTQ6Ym9vbCB0aGlzX2NwdV9oYXNfY2FwKHVuc2lnbmVkIGludCBuKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM5MTUte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0zOTMyPXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIF9fc3lzdGVtX21hdGNoZXNfY2FwKHVuc2lnbmVkIGludCBuKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zOTQyLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM5NDM6dm9pZCBjcHVfc2V0X2ZlYXR1cmUodW5zaWduZWQgaW50IG51bSlcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zOTQ0LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzk0Ny1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozOTQ4OmJvb2wgY3B1X2hhdmVfZmVhdHVyZSh1bnNpZ25lZCBpbnQgbnVtKVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM5NDkte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz00MDY2PXZvaWQgX19pbml0IHNldHVwX3VzZXJfZmVhdHVyZXModm9pZClcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtNDA3OS1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzo0MDgwOnN0YXRpYyBpbnQgZW5hYmxlX21pc21hdGNoZWRfMzJiaXRfZWwwKHVuc2lnbmVkIGludCBjcHUpXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtNDA4MS17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTQxNjM9c3RhdGljIGlubGluZSBpbnQgZW11bGF0ZV9pZF9yZWcodTMyIGlkLCB1NjQgKnZhbHApXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTQxODItXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6NDE4MzpzdGF0aWMgaW50IGVtdWxhdGVfc3lzX3JlZyh1MzIgaWQsIHU2NCAqdmFscClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy00MTg0LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtNDIwNC1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzo0MjA1OmludCBkb19lbXVsYXRlX21ycyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTMyIHN5c19yZWcsIHUzMiBydClcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy00MjA2LXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtNDIxNy1cbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzo0MjE4OmJvb2wgdHJ5X2VtdWxhdGVfbXJzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1MzIgaW5zbilcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy00MjE5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ1NDUKCQkJCQkJCW91dHB1dDogMzIwCgkJCQkJCQl0aG91Z2h0czogNDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIGZvciBBUk02NCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHJldmlld2luZyB0aGlzIHBhdGNoIGFuZCBJJiMzOTttIGZlZWxpbmcgZ29vZCBhYm91dCB3aGVyZSBpdCYjMzk7cyBoZWFkZWQuIFRoZSBpbmNsdXNpb24gb2YgYGxhdGVfY3B1X2VuYWJsZV9odm9gIGFuZCBgaHZvX2NvbXBhdGlibGVgIGlzIGEgc29saWQgYWRkaXRpb24sIGFuZCB0aGV5IGRlZmluaXRlbHkgbmVlZCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgZm9jdXMgc3ltYm9scy4KClNvLCB0aGUgZGVmaW5pdGl2ZSBsaXN0IG9mIGZ1bmN0aW9ucyBmb3IgYW5hbHlzaXMgbG9va3MgbGlrZSB0aGlzLCBhbmQgaXQgc2VlbXMgbGlrZSBhIHZlcnkgZ29vZCBzZXQgdG8gZm9jdXMgb246CiogICBgdm1lbW1hcF9zcGxpdF9wbWRgCiogICBgdm1lbW1hcF9yZW1hcF9wdGVgCiogICBgdm1lbW1hcF9yZXN0b3JlX3B0ZWAKKiAgIGB2bWVtbWFwX3JlbWFwX2ZyZWVgCiogICBgdm1lbW1hcF9yZW1hcF9hbGxvY2AKKiAgIGBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlYAoqICAgYF9faHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW9gCiogICBgX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW9gCiogICBgdm1lbW1hcF9zaG91bGRfb3B0aW1pemVfZm9saW9gCiogICBgdm1lbW1hcF9zaG91bGRfb3B0aW1pemVfYm9vdG1lbV9wYWdlYAoqICAgYGxhdGVfY3B1X2VuYWJsZV9odm9gCiogICBgaHZvX2NvbXBhdGlibGVgCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb25zLiBXZSYjMzk7cmUgY2xlYXJseSBkZWFsaW5nIHdpdGg6CiogICBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBgCiogICBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTmAKKiAgIGBBUk02NF9IV19BRkRCTWAKCkp1c3QgZG91YmxlLWNoZWNraW5nLi4ueWVwLCBgY29uZmlnIEFSTTY0X0hXX0FGREJNYCBpcyB0aGUgcmlnaHQgbmFtZS4gQW5kIHdoaWxlIHdlIG5lZWQgYEhVR0VUTEJfUEFHRWAgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAsIHRoZXkmIzM5O3JlIGdlbmVyaWMgYW5kIG5vdCBzcGVjaWZpYyB0byB0aGlzIEFSTTY0IG9wdGltaXphdGlvbi4KCk9rYXksIGxldCYjMzk7cyByZWNhcCB0aGUgcmF0aW9uYWxlIGhlcmUuIFRoZSBwYXRjaCBpcyBhYm91dCBicmluZ2luZyBBUk02NCBzdXBwb3J0IHRvIEh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykuIEl0JiMzOTtzIGJlZW4gdG91Y2hpbmcgY29yZSBrZXJuZWwgbG9naWMgaW4gYG1tL2h1Z2V0bGJfdm1lbW1hcC5jYCBhbmQgbGV2ZXJhZ2luZyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB2bWVtbWFwIFBNRHMgYW5kIFBURXMuIEl0JiMzOTtzIGFsc28gYWRkaW5nIHRob3NlIG5lY2Vzc2FyeSBDUFUgY2FwYWJpbGl0eSBjaGVja3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZXNwZWNpYWxseSBhcm91bmQgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBIdWdlVExCIHBhZ2VzIHdoZW4gSFZPIGlzIGVuYWJsZWQsIG1ha2luZyBpdCBwcmltZSBmb3IgZnV6emluZy4KCkFscmlnaHQsIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT50aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogQVJNNjRfSFdfQUZEQk08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVAmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTiYjMzQ7LAogICAgJiMzNDtBUk02NF9IV19BRkRCTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtZW1tYXBfc3BsaXRfcG1kJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfcmVtYXBfcHRlJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfcmVzdG9yZV9wdGUmIzM0OywKICAgICYjMzQ7dm1lbW1hcF9yZW1hcF9mcmVlJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfcmVtYXBfYWxsb2MmIzM0OywKICAgICYjMzQ7aHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvJiMzNDssCiAgICAmIzM0O19faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfc2hvdWxkX29wdGltaXplX2ZvbGlvJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfc2hvdWxkX29wdGltaXplX2Jvb3RtZW1fcGFnZSYjMzQ7LAogICAgJiMzNDtsYXRlX2NwdV9lbmFibGVfaHZvJiMzNDssCiAgICAmIzM0O2h2b19jb21wYXRpYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgQVJNNjQgc3VwcG9ydCBmb3IgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKS4gSXQgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgaW4gYG1tL2h1Z2V0bGJfdm1lbW1hcC5jYCB0byB1c2UgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgcG9wdWxhdGluZyBhbmQgdXBkYXRpbmcgdm1lbW1hcCBQTURzIGFuZCBQVEVzLiBJdCBhbHNvIGFkZHMgQ1BVIGNhcGFiaWxpdHkgY2hlY2tzIGZvciBIVk8gb24gQVJNNjQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gYWxsb2NhdGluZyBhbmQgZnJlZWluZyBIdWdlVExCIHBhZ2VzIHdpdGggSFZPIGVuYWJsZWQsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEFSTTY0X0hXX0FGREJNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg3OQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgQVJNNjRfSFdfQUZEQk0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIHNlZSBgQVJNNjRfSFdfQUZEQk1gIGlzIGFjdHVhbGx5IGRlZmluZWQsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQnV0IHRoZSB3YXkgaXQmIzM5O3MgdXNlZCBzdWdnZXN0cyBJIHNob3VsZG4mIzM5O3QgYmUgZW5hYmxpbmcgaXQgZGlyZWN0bHksIG1heWJlIGl0JiMzOTtzIGRlcGVuZGVudCBvbiBzb21lIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQgY291bGQgYmUgc2VsZWN0ZWQgYnkgYW5vdGhlciBLY29uZmlnIG9wdGlvbiwgb3IgaXQgbWlnaHQganVzdCBiZSB0aGUgd2F5IGBBUk02NF9IV19BRkRCTWAgaXMgZGVmaW5lZCBpbiBgYXJjaC9hcm02NC9LY29uZmlnYC4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhhdCBLY29uZmlnIGZpbGUgYW5kIHNlZSBob3cgdGhpcyBpcyBjb25maWd1cmVkIGFuZCB3aGVyZSB0aGUgZGVwZW5kZW5jaWVzIGFyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGlzIG9wdGlvbiB0byBvdGhlciBjb25maWd1cmF0aW9ucyBiZWZvcmUgSSBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVJNNjRfSFdfQUZEQk0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTE5MDA9bWVudSBcJiMzNDtBUk12OC4xIGFyY2hpdGVjdHVyYWwgZmVhdHVyZXNcJiMzNDtcbmFyY2gvYXJtNjQvS2NvbmZpZy0xOTAxLVxuYXJjaC9hcm02NC9LY29uZmlnOjE5MDI6Y29uZmlnIEFSTTY0X0hXX0FGREJNXG5hcmNoL2FybTY0L0tjb25maWctMTkwMy1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgaGFyZHdhcmUgdXBkYXRlcyBvZiB0aGUgQWNjZXNzIGFuZCBEaXJ0eSBwYWdlIGZsYWdzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE1OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MjM2CgkJCQkJCQlvdXRwdXQ6IDMwOAoJCQkJCQkJdGhvdWdodHM6IDE3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgYSBDb25maWd1cmF0aW9uIERpc2NyZXBhbmN5KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFdoeSBkaWQgdGhlIGJ1aWxkIHN5c3RlbSBmbGFnIGBBUk02NF9IV19BRkRCTWAgYXMgbm9uLWV4aXN0ZW50PyBUaGF0JiMzOTtzIGEgdmFsaWQgY29uZmlndXJhdGlvbiBvcHRpb24sIGF0IGxlYXN0IEkgdGhvdWdodCBpdCB3YXMuIENvdWxkIGl0IGJlIHRoYXQgdGhlIGJ1aWxkIHRvb2xzLCBvciB3aGF0ZXZlciYjMzk7cyBjaGVja2luZyB0aGUgY29uZmlndXJhdGlvbiwgYXJlIHJ1bm5pbmcgYWdhaW5zdCBgeDg2XzY0YCBjb25maWd1cmF0aW9ucz8KClllcywgdGhhdCBtYWtlcyBzZW5zZS4gU3l6a2FsbGVyLCB0aGUgZnV6emVyIHRoYXQmIzM5O3MgbGlrZWx5IGRyaXZpbmcgdGhpcyBidWlsZCwgaXMgdHlwaWNhbGx5IHVzZWQgd2l0aCBgeDg2XzY0YCB0YXJnZXRzLiBBbmQgdGhpcyBzcGVjaWZpYyBwYXRjaCBJJiMzOTttIHdvcmtpbmcgb24gaXMgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgYXJtNjRgLiBTbywgaWYgdGhlIGNvbmZpZ3VyYXRpb24gY2hlY2sgaXMgYXNzdW1pbmcgYW4gYHg4Nl82NGAgY29udGV4dCwgaXQgd291bGRuJiMzOTt0IGtub3cgYWJvdXQgYEFSTTY0X0hXX0FGREJNYCBhdCBhbGwuCgpBbHJpZ2h0LCBzbyB0aGUgc29sdXRpb24gaXMgcHJvYmFibHkgdG8gZWl0aGVyIHNpbXBseSBvbWl0IGBBUk02NF9IV19BRkRCTWAgZnJvbSBteSBjb25maWcgb3IsIGlmIHRoaXMgb3B0aW9uIGlzIHN0cmljdGx5IGFuIGBhcm02NGAgZmVhdHVyZSwgZW5zdXJlIEkgbWFpbnRhaW4gaXQgZm9yIHRoZSBgYXJtNjRgIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBjb250ZXh0IG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gYmUgc3VyZS4KCkJ1dCwgZm9yIG5vdywgbGV0JiMzOTtzIGtlZXAgaXQgc2ltcGxlLiBMZXQmIzM5O3MganVzdCBsZXZlcmFnZSBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBgIGFuZCBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTmAgaW5zdGVhZC4gVGhhdCYjMzk7cyBhIHNhZmVyIGJldCBhbmQgd2lsbCBnZXQgdGhpbmdzIG1vdmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTU6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQJiMzNDssCiAgICAmIzM0O0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWVtbWFwX3NwbGl0X3BtZCYjMzQ7LAogICAgJiMzNDt2bWVtbWFwX3JlbWFwX3B0ZSYjMzQ7LAogICAgJiMzNDt2bWVtbWFwX3Jlc3RvcmVfcHRlJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfcmVtYXBfZnJlZSYjMzQ7LAogICAgJiMzNDt2bWVtbWFwX3JlbWFwX2FsbG9jJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGUmIzM0OywKICAgICYjMzQ7X19odWdldGxiX3ZtZW1tYXBfcmVzdG9yZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtfX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDt2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDt2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9ib290bWVtX3BhZ2UmIzM0OywKICAgICYjMzQ7bGF0ZV9jcHVfZW5hYmxlX2h2byYjMzQ7LAogICAgJiMzNDtodm9fY29tcGF0aWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIEFSTTY0IHN1cHBvcnQgZm9yIEh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykuIEl0IG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGluIGBtbS9odWdldGxiX3ZtZW1tYXAuY2AgdG8gdXNlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmdW5jdGlvbnMgZm9yIHBvcHVsYXRpbmcgYW5kIHVwZGF0aW5nIHZtZW1tYXAgUE1EcyBhbmQgUFRFcy4gSXQgYWxzbyBhZGRzIENQVSBjYXBhYmlsaXR5IGNoZWNrcyBmb3IgSFZPIG9uIEFSTTY0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCB3aGVuIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgSHVnZVRMQiBwYWdlcyB3aXRoIEhWTyBlbmFibGVkLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVAmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtZW1tYXBfc3BsaXRfcG1kJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfcmVtYXBfcHRlJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfcmVzdG9yZV9wdGUmIzM0OywKICAgICYjMzQ7dm1lbW1hcF9yZW1hcF9mcmVlJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfcmVtYXBfYWxsb2MmIzM0OywKICAgICYjMzQ7aHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvJiMzNDssCiAgICAmIzM0O19faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfc2hvdWxkX29wdGltaXplX2ZvbGlvJiMzNDssCiAgICAmIzM0O3ZtZW1tYXBfc2hvdWxkX29wdGltaXplX2Jvb3RtZW1fcGFnZSYjMzQ7LAogICAgJiMzNDtsYXRlX2NwdV9lbmFibGVfaHZvJiMzNDssCiAgICAmIzM0O2h2b19jb21wYXRpYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgQVJNNjQgc3VwcG9ydCBmb3IgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKS4gSXQgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgaW4gYG1tL2h1Z2V0bGJfdm1lbW1hcC5jYCB0byB1c2UgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgcG9wdWxhdGluZyBhbmQgdXBkYXRpbmcgdm1lbW1hcCBQTURzIGFuZCBQVEVzLiBJdCBhbHNvIGFkZHMgQ1BVIGNhcGFiaWxpdHkgY2hlY2tzIGZvciBIVk8gb24gQVJNNjQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gYWxsb2NhdGluZyBhbmQgZnJlZWluZyBIdWdlVExCIHBhZ2VzIHdpdGggSFZPIGVuYWJsZWQsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6MTI6MjMuOTczMTg5NjM3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI3ODYwMzQzODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcIixcbiAgICBcIkhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWVtbWFwX3NwbGl0X3BtZFwiLFxuICAgIFwidm1lbW1hcF9yZW1hcF9wdGVcIixcbiAgICBcInZtZW1tYXBfcmVzdG9yZV9wdGVcIixcbiAgICBcInZtZW1tYXBfcmVtYXBfZnJlZVwiLFxuICAgIFwidm1lbW1hcF9yZW1hcF9hbGxvY1wiLFxuICAgIFwiaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZVwiLFxuICAgIFwiX19odWdldGxiX3ZtZW1tYXBfcmVzdG9yZV9mb2xpb1wiLFxuICAgIFwiX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW9cIixcbiAgICBcInZtZW1tYXBfc2hvdWxkX29wdGltaXplX2ZvbGlvXCIsXG4gICAgXCJ2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9ib290bWVtX3BhZ2VcIixcbiAgICBcImxhdGVfY3B1X2VuYWJsZV9odm9cIixcbiAgICBcImh2b19jb21wYXRpYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBBUk02NCBzdXBwb3J0IGZvciBIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pLiBJdCBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBpbiBgbW0vaHVnZXRsYl92bWVtbWFwLmNgIHRvIHVzZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZnVuY3Rpb25zIGZvciBwb3B1bGF0aW5nIGFuZCB1cGRhdGluZyB2bWVtbWFwIFBNRHMgYW5kIFBURXMuIEl0IGFsc28gYWRkcyBDUFUgY2FwYWJpbGl0eSBjaGVja3MgZm9yIEhWTyBvbiBBUk02NC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgd2hlbiBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIEh1Z2VUTEIgcGFnZXMgd2l0aCBIVk8gZW5hYmxlZCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjEyOjIzLjk3MzE5OTgzN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYxMTE4MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGRmMjMwNTQ2MmViOGZhYjlhYmNiNWYxMmI5N2IxZjk3MGNiYTU5NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCA4IDE1OjEyOjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCBmMzdhODE5NTBlMjUwZS4uNTViZDRjMDlmNDk0OTYgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC0xMjAxMyw2ICsxMjAxMyw3IEBAIEY6XFx0RG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxcbiBGOlxcdERvY3VtZW50YXRpb24vbW0vdm1lbW1hcF9kZWR1cC5yc3RcXG4gRjpcXHRmcy9odWdldGxiZnMvXFxuIEY6XFx0aW5jbHVkZS9saW51eC9odWdldGxiLmhcXG4rRjpcXHRpbmNsdWRlL2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oXFxuIEY6XFx0aW5jbHVkZS90cmFjZS9ldmVudHMvaHVnZXRsYmZzLmhcXG4gRjpcXHRtbS9odWdldGxiLmNcXG4gRjpcXHRtbS9odWdldGxiX2Nncm91cC5jXFxuQEAgLTEyMDIxLDcgKzEyMDIyLDcgQEAgRjpcXHRtbS9odWdldGxiX2NtYS5oXFxuIEY6XFx0bW0vaHVnZXRsYl9zeXNjdGwuY1xcbiBGOlxcdG1tL2h1Z2V0bGJfc3lzZnMuY1xcbiBGOlxcdG1tL2h1Z2V0bGJfdm1lbW1hcC5jXFxuLUY6XFx0bW0vaHVnZXRsYl92bWVtbWFwLmhcXG4rRjpcXHRtbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaFxcbiBGOlxcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2h1Z2V0bGJfbWVtY2cuY1xcbiBcXG4gSFZBIFNUIE1FRElBIERSSVZFUlxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWdcXG5pbmRleCBiM2FmZTA2ODg5MTliZC4uMmE1OTE1NWY2OGRjZDggMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXFxuKysrIGIvYXJjaC9hcm02NC9LY29uZmlnXFxuQEAgLTI1OSw2ICsyNTksNyBAQCBjb25maWcgQVJNNjRcXG4gXFx0c2VsZWN0IFVTRVJfU1RBQ0tUUkFDRV9TVVBQT1JUXFxuIFxcdHNlbGVjdCBWRFNPX0dFVFJBTkRPTVxcbiBcXHRzZWxlY3QgVk1BUF9TVEFDS1xcbitcXHRzZWxlY3QgQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUCBpZiBBUk02NF9IV19BRkRCTVxcbiBcXHRoZWxwXFxuIFxcdCAgQVJNIDY0LWJpdCAoQUFyY2g2NCkgTGludXggc3VwcG9ydC5cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1Y2Fwcy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVjYXBzLmhcXG5pbmRleCAyNWM2MWNkYTkwMWM1ZC4uNmRiM2VmODI3Zjg2YTkgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVjYXBzLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaFxcbkBAIC03NSw2ICs3NSw4IEBAIGNwdWNhcF9pc19wb3NzaWJsZShjb25zdCB1bnNpZ25lZCBpbnQgY2FwKVxcbiBcXHRcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfSFdfUEVSRl9FVkVOVFMpO1xcbiBcXHRjYXNlIEFSTTY0X0hBU19MU1VJOlxcbiBcXHRcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfQVJNNjRfTFNVSSk7XFxuK1xcdGNhc2UgQVJNNjRfSFZPX0NPTVBBVElCTEU6XFxuK1xcdFxcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUCk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oXFxuaW5kZXggYTU3ODcwZmE5NmRiNWIuLmQxNTA0ODA0ZjJiZWE5IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcXG5AQCAtMzY3LDYgKzM2NywxNCBAQCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyB7XFxuIFxcdCAqIHJvdXRpbmUgbXVzdCBjaGVjayBpdCBiZWZvcmUgdGFraW5nIGFueSBhY3Rpb24uXFxuIFxcdCAqL1xcbiBcXHR2b2lkICgqY3B1X2VuYWJsZSkoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmNhcCk7XFxuK1xcdC8qXFxuK1xcdCAqIEluIHJhcmUgY2FzZXMsIGNhcGFiaWxpdGllcyBhcmUgKnNvbWV0aW1lcyogb3B0aW9uYWwgZm9yIGxhdGUgQ1BVcy5cXG4rXFx0ICogVGhpcyBjYWxsYmFjayBhbGxvd3MgYSBjYXBhYmlsaXR5IHRvIHByZXZlbnQgb25saW5pbmcgb2ZcXG4rXFx0ICogaW5jb21wYXRpYmxlIENQVXMgd2hlbiB0aGUgY2FwYWJpbGl0eSBpcyBpbiBmYWN0IHJlcXVpcmVkLlxcbitcXHQgKlxcbitcXHQgKiBSZXR1cm5zIHRydWUgaWZmIG9ubGluaW5nIHRoZSBDUFUgaXMgcGVybWl0dGVkLlxcbitcXHQgKi9cXG4rXFx0Ym9vbCAoKmxhdGVfY3B1X2VuYWJsZSkoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmNhcCk7XFxuIFxcdHVuaW9uIHtcXG4gXFx0XFx0c3RydWN0IHtcXHQvKiBUbyBiZSB1c2VkIGZvciBlcnJhdHVtIGhhbmRsaW5nIG9ubHkgKi9cXG4gXFx0XFx0XFx0c3RydWN0IG1pZHJfcmFuZ2UgbWlkcl9yYW5nZTtcXG5AQCAtODg1LDYgKzg5MywxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc3lzdGVtX3N1cHBvcnRzX2JibWwyX25vYWJvcnQodm9pZClcXG4gXFx0cmV0dXJuIGFsdGVybmF0aXZlX2hhc19jYXBfdW5saWtlbHkoQVJNNjRfSEFTX0JCTUwyX05PQUJPUlQpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgc3lzdGVtX3N1cHBvcnRzX2h2byh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBhbHRlcm5hdGl2ZV9oYXNfY2FwX3VubGlrZWx5KEFSTTY0X0hWT19DT01QQVRJQkxFKTtcXG4rfVxcbitcXG4gaW50IGRvX2VtdWxhdGVfbXJzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1MzIgc3lzX3JlZywgdTMyIHJ0KTtcXG4gYm9vbCB0cnlfZW11bGF0ZV9tcnMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHUzMiBpc24pO1xcbiBcXG5AQCAtOTEwLDIyICs5MjMsMzYgQEAgc3RhdGljIGlubGluZSB1MzIgaWRfYWE2NG1tZnIwX3BhcmFuZ2VfdG9fcGh5c19zaGlmdChpbnQgcGFyYW5nZSlcXG4gfVxcbiBcXG4gLyogQ2hlY2sgd2hldGhlciBoYXJkd2FyZSB1cGRhdGUgb2YgdGhlIEFjY2VzcyBmbGFnIGlzIHN1cHBvcnRlZCAqL1xcbi1zdGF0aWMgaW5saW5lIGJvb2wgY3B1X2hhc19od19hZih2b2lkKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgc3VwcG9ydHNfaHdfYWYoaW50IHNjb3BlKVxcbiB7XFxuIFxcdHU2NCBtbWZyMTtcXG4gXFxuIFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJNNjRfSFdfQUZEQk0pKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBVc2UgY2FjaGVkIHZlcnNpb24gdG8gYXZvaWQgZW11bGF0ZWQgbXNyIG9wZXJhdGlvbiBvbiBLVk1cXG4tXFx0ICogZ3Vlc3RzLlxcbi1cXHQgKi9cXG4tXFx0bW1mcjEgPSByZWFkX3Nhbml0aXNlZF9mdHJfcmVnKFNZU19JRF9BQTY0TU1GUjFfRUwxKTtcXG4rXFx0aWYgKHNjb3BlID09IFNDT1BFX1NZU1RFTSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBVc2UgY2FjaGVkIHZlcnNpb24gdG8gYXZvaWQgZW11bGF0ZWQgbXNyIG9wZXJhdGlvbiBvbiBLVk1cXG4rXFx0XFx0ICogZ3Vlc3RzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bW1mcjEgPSByZWFkX3Nhbml0aXNlZF9mdHJfcmVnKFNZU19JRF9BQTY0TU1GUjFfRUwxKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0bW1mcjEgPSByZWFkX2NwdWlkKElEX0FBNjRNTUZSMV9FTDEpO1xcbitcXHR9XFxuIFxcdHJldHVybiBjcHVpZF9mZWF0dXJlX2V4dHJhY3RfdW5zaWduZWRfZmllbGQobW1mcjEsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdElEX0FBNjRNTUZSMV9FTDFfSEFGREJTX1NISUZUKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHN5c3RlbV9oYXNfaHdfYWYodm9pZClcXG4re1xcbitcXHRyZXR1cm4gc3VwcG9ydHNfaHdfYWYoU0NPUEVfU1lTVEVNKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIGNwdV9oYXNfaHdfYWYodm9pZClcXG4re1xcbitcXHRyZXR1cm4gc3VwcG9ydHNfaHdfYWYoU0NPUEVfTE9DQUxfQ1BVKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBib29sIGNwdV9oYXNfcGFuKHZvaWQpXFxuIHtcXG4gXFx0dTY0IG1tZnIxID0gcmVhZF9jcHVpZChJRF9BQTY0TU1GUjFfRUwxKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaFxcbmluZGV4IGQwMzhmZjE0ZDE2Y2FlLi43M2FmNzkxMWZkODMxMyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oXFxuQEAgLTExLDYgKzExLDcgQEBcXG4gI2RlZmluZSBfX0FTTV9IVUdFVExCX0hcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vY2FjaGVmbHVzaC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2NwdWZlYXR1cmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9tdGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wYWdlLmhcXHUwMDNlXFxuIFxcbkBAIC02NSw2ICs2NiwxMiBAQCBleHRlcm4gdm9pZCBodWdlX3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcXG4gXFx0XFx0XFx0XFx0XFx0IHB0ZV90IG9sZF9wdGUsIHB0ZV90IG5ld19wdGUpO1xcbiBcXG4rI2RlZmluZSBfX0hBVkVfQVJDSF9IVk9fU1VQUE9SVEVEXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fc3VwcG9ydGVkKHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIHN5c3RlbV9zdXBwb3J0c19odm8oKTtcXG4rfVxcbitcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS1nZW5lcmljL2h1Z2V0bGIuaFxcdTAwM2VcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX2h1Z2V0bGJfdGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oXFxuaW5kZXggMWI0NTA5ZDMzODJjNjMuLjI2YjA1ZjhiNzBjZDJlIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcXG5AQCAtMTIxLDQgKzEyMSw1OCBAQCBwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWRwLCBwZ3RhYmxlX3QgcHRlcClcXG4gXFx0XFx0ICAgICAgIFBNRF9UWVBFX1RBQkxFIHwgUE1EX1RBQkxFX0FGIHwgUE1EX1RBQkxFX1BYTik7XFxuIH1cXG4gXFxuKyNkZWZpbmUgX19IQVZFX0FSQ0hfVFJZX1BPUFVMQVRFX1ZNRU1NQVBfUE1EXFxuK3N0YXRpYyBpbmxpbmUgaW50IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWRfdCAqcG1kcCwgcHRlX3QgKnBndGFibGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4re1xcbitcXHRjb25zdCBpbnQgbWF4X2F0dGVtcHRzID0gMTY7XFxuK1xcdGludCBhdHRlbXB0cyA9IDA7XFxuK1xcdHBtZF90IG9sZF9wbWQsIG5ld19wbWQ7XFxuK1xcbitcXHRpZiAoIXN5c3RlbV9zdXBwb3J0c19odm8oKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0aWYgKHN5c3RlbV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KCkpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQkJNTDJfTk9BQk9SVCBhbGxvd3MgYmxvY2stXFx1MDAzZXRhYmxlIHRyYW5zaXRpb25zIGlmIHRoZSBQVEVzXFxuK1xcdFxcdCAqIHVuZGVybmVhdGggZG8gbm90IGNvbmZsaWN0IHdpdGggZXhpc3RpbmcsIHBvdGVudGlhbGx5IGNhY2hlZFxcbitcXHRcXHQgKiB0cmFuc2xhdGlvbnMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRwbWRfcG9wdWxhdGVfa2VybmVsKFxcdTAwMjZpbml0X21tLCBwbWRwLCBwZ3RhYmxlKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdG5ld19wbWQgPSBfX3BtZChfX3BoeXNfdG9fcG1kX3ZhbChfX3BhKHBndGFibGUpKSB8XFxuK1xcdFxcdFxcdFBNRF9UWVBFX1RBQkxFIHwgUE1EX1RBQkxFX0FGIHwgUE1EX1RBQkxFX1VYTik7XFxuK1xcbitcXHRvbGRfcG1kID0gcG1kcF9nZXQocG1kcCk7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0UoIXBtZF92YWxpZChvbGRfcG1kKSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0aWYgKFdBUk5fT05fT05DRSghcG1kX2xlYWYob2xkX3BtZCkpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdC8qIFdlIHNob3VsZCBuZXZlciBnZXQgYSBjb250aWd1b3VzIFBNRCBoZXJlLiAqL1xcbitcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKHBtZF9jb250KG9sZF9wbWQpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRpZiAocG1kX3lvdW5nKG9sZF9wbWQpKSB7XFxuK1xcdFxcdFxcdC8qIF9fcHRlcF9jbGVhcl95b3VuZygpIHJldHVybnMgdGhlIG92ZXJ3cml0dGVuIFBURSAqL1xcbitcXHRcXHRcXHRvbGRfcG1kID0gcHRlX3BtZChwdGVfbWtvbGQoX19wdGVwX2NsZWFyX3lvdW5nKChwdGVfdCAqKXBtZHApKSk7XFxuK1xcbitcXHRcXHRcXHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGFkZHIgKyBQTURfU0laRSk7XFxuK1xcdFxcdH1cXG4rXFx0LypcXG4rXFx0ICogVHJhbnNsYXRpb25zIHdpdGhvdXQgQUYgY2Fubm90IGJlIGNhY2hlZCwgc28gd2UgY2FuIHJlcGxhY2VcXG4rXFx0ICogdGhlbSB3aXRob3V0IEJCTS5cXG4rXFx0ICovXFxuK1xcdH0gd2hpbGUgKCF0cnlfY21weGNoZ19yZWxheGVkKFxcdTAwMjZwbWRfdmFsKCpwbWRwKSwgXFx1MDAyNnBtZF92YWwob2xkX3BtZCksXFxuK1xcdFxcdFxcdFxcdCAgICAgIHBtZF92YWwobmV3X3BtZCkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCArK2F0dGVtcHRzIFxcdTAwM2MgbWF4X2F0dGVtcHRzKTtcXG4rXFxuK1xcdHJldHVybiBhdHRlbXB0cyA9PSBtYXhfYXR0ZW1wdHMgPyAtRUFHQUlOIDogMDtcXG4rfVxcbitcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5pbmRleCAyNzY4OWM2MmJkMjVkZC4uN2IxMWFhNDFkMGEwNzQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbkBAIC0xMzAyLDggKzEzMDIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX19wdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdF9fc2V0X3B0ZShwdGVwLCBfX3B0ZSgwKSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApXFxuK3N0YXRpYyBpbmxpbmUgcHRlX3QgX19wdGVwX2NsZWFyX3lvdW5nKHB0ZV90ICpwdGVwKVxcbiB7XFxuIFxcdHB0ZV90IG9sZF9wdGUsIHB0ZTtcXG4gXFxuQEAgLTEzMTUsNyArMTMxNCwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgX19wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICAgcHRlX3ZhbChvbGRfcHRlKSwgcHRlX3ZhbChwdGUpKTtcXG4gXFx0fSB3aGlsZSAocHRlX3ZhbChwdGUpICE9IHB0ZV92YWwob2xkX3B0ZSkpO1xcbiBcXG4tXFx0cmV0dXJuIHB0ZV95b3VuZyhwdGUpO1xcbitcXHRyZXR1cm4gcHRlO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgX19wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKVxcbit7XFxuK1xcdHJldHVybiBwdGVfeW91bmcoX19wdGVwX2NsZWFyX3lvdW5nKHB0ZXApKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIF9fcHRlcF9jbGVhcl9mbHVzaF95b3VuZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5AQCAtMTU5OCw3ICsxNjAzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuICAqIHBhZ2UgYWZ0ZXIgZm9yaygpICsgQ29XIGZvciBwZm4gbWFwcGluZ3MuIFdlIGRvbid0IGFsd2F5cyBoYXZlIGFcXG4gICogaGFyZHdhcmUtbWFuYWdlZCBhY2Nlc3MgZmxhZyBvbiBhcm02NC5cXG4gICovXFxuLSNkZWZpbmUgYXJjaF9oYXNfaHdfcHRlX3lvdW5nXFx0XFx0Y3B1X2hhc19od19hZlxcbisjZGVmaW5lIGFyY2hfaGFzX2h3X3B0ZV95b3VuZ1xcdFxcdHN5c3RlbV9oYXNfaHdfYWZcXG4gXFxuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTk9OTEVBRl9QTURfWU9VTkdcXG4gI2RlZmluZSBhcmNoX2hhc19od19ub25sZWFmX3BtZF95b3VuZ1xcdHN5c3RlbV9zdXBwb3J0c19oYWZ0XFxuQEAgLTE2MDgsNyArMTYxMyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbW11X2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbiAgKiBFeHBlcmltZW50YWxseSwgaXQncyBjaGVhcCB0byBzZXQgdGhlIGFjY2VzcyBmbGFnIGluIGhhcmR3YXJlIGFuZCB3ZVxcbiAgKiBiZW5lZml0IGZyb20gcHJlZmF1bHRpbmcgbWFwcGluZ3MgYXMgJ29sZCcgdG8gc3RhcnQgd2l0aC5cXG4gICovXFxuLSNkZWZpbmUgYXJjaF93YW50c19vbGRfcHJlZmF1bHRlZF9wdGVcXHRjcHVfaGFzX2h3X2FmXFxuKyNkZWZpbmUgYXJjaF93YW50c19vbGRfcHJlZmF1bHRlZF9wdGVcXHRzeXN0ZW1faGFzX2h3X2FmXFxuIFxcbiAvKlxcbiAgKiBSZXF1ZXN0IGV4ZWMgbWVtb3J5IGlzIHJlYWQgaW50byBwYWdlY2FjaGUgaW4gYXQgbGVhc3QgNjRLIGZvbGlvcy4gVGhpcyBzaXplXFxuQEAgLTE3OTMsNiArMTc5OCw0OCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHRfX3B0ZV9jbGVhcihtbSwgYWRkciwgcHRlcCk7XFxuIH1cXG4gXFxuKyNkZWZpbmUgX19IQVZFX0FSQ0hfVFJZX1VQREFURV9WTUVNTUFQX1BURVxcbitzdGF0aWMgaW5saW5lIGludCB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXFxuK1xcdFxcdFxcdFxcdFxcdCBjb25zdCBwdGVfdCBwdGUpXFxuK3tcXG4rXFx0Y29uc3QgaW50IG1heF9hdHRlbXB0cyA9IDE2O1xcbitcXHRpbnQgYXR0ZW1wdHMgPSAwO1xcbitcXHRwdGVfdCBvbGRfcHRlO1xcbitcXG4rXFx0aWYgKCFzeXN0ZW1fc3VwcG9ydHNfaHZvKCkpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdC8qIFRoaXMgcm91dGluZSBpcyBvbmx5IHRvIGJlIHVzZWQgZm9yIHZhbGlkLXRvLXZhbGlkIHRyYW5zaXRpb25zLiAqL1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCFwdGVfdmFsaWQocHRlKSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0b2xkX3B0ZSA9IF9fcHRlcF9nZXQocHRlcCk7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0UoIXB0ZV92YWxpZChvbGRfcHRlKSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0LyogV2Ugc2hvdWxkIG5ldmVyIGdldCBhIGNvbnRpZ3VvdXMgUFRFIGhlcmUuICovXFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0UocHRlX3ZhbGlkX2NvbnQob2xkX3B0ZSkpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdGlmIChwdGVfeW91bmcob2xkX3B0ZSkpIHtcXG4rXFx0XFx0XFx0LyogX19wdGVwX2NsZWFyX3lvdW5nKCkgcmV0dXJucyB0aGUgb3ZlcndyaXR0ZW4gUFRFICovXFxuK1xcdFxcdFxcdG9sZF9wdGUgPSBwdGVfbWtvbGQoX19wdGVwX2NsZWFyX3lvdW5nKHB0ZXApKTtcXG4rXFxuK1xcdFxcdFxcdGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UoYWRkciwgYWRkciArIFBBR0VfU0laRSk7XFxuK1xcdFxcdH1cXG4rXFx0LypcXG4rXFx0ICogVHJhbnNsYXRpb25zIHdpdGhvdXQgQUYgY2Fubm90IGJlIGNhY2hlZCwgc28gd2UgY2FuIHJlcGxhY2VcXG4rXFx0ICogdGhlbSB3aXRob3V0IEJCTS5cXG4rXFx0ICovXFxuK1xcdH0gd2hpbGUgKCF0cnlfY21weGNoZ19yZWxheGVkKFxcdTAwMjZwdGVfdmFsKCpwdGVwKSwgXFx1MDAyNnB0ZV92YWwob2xkX3B0ZSksXFxuK1xcdFxcdFxcdFxcdCAgICAgIHB0ZV92YWwocHRlKSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICsrYXR0ZW1wdHMgXFx1MDAzYyBtYXhfYXR0ZW1wdHMpO1xcbitcXG4rXFx0cmV0dXJuIGF0dGVtcHRzID09IG1heF9hdHRlbXB0cyA/IC1FQUdBSU4gOiAwO1xcbit9XFxuK1xcbiAjZGVmaW5lIGNsZWFyX2Z1bGxfcHRlcyBjbGVhcl9mdWxsX3B0ZXNcXG4gc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2Z1bGxfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHRcXHRwdGVfdCAqcHRlcCwgdW5zaWduZWQgaW50IG5yLCBpbnQgZnVsbClcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXFxuaW5kZXggOWEyMmRmMGM1MTIwZjMuLjY1YmIzYzdjOTU5NTJiIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xcbkBAIC03Niw2ICs3Niw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rYXNhbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGVyY3B1LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9pc29sYXRpb24uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9hcm1fcG11djMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9jcHUuaFxcdTAwM2VcXG5AQCAtMjE3Miw2ICsyMTczLDMxIEBAIHN0YXRpYyBib29sIGhhc19iYm1sMl9ub2Fib3J0KGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXBzLCBpbnQgc2NvXFxuIFxcdHJldHVybiBjcHVfc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCgpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBodm9fY29tcGF0aWJsZShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwcywgaW50IHNjb3BlKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFdlIG5lZWQgSFcgQUYgc3VwcG9ydCB0byBzdXBwb3J0IGNoYW5naW5nIHZtZW1tYXAgbWFwcGluZyBsZXZlbCBhbmRcXG4rXFx0ICogT0Egd2l0aG91dCB0YWtpbmcgZmF1bHRzLlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuIHN1cHBvcnRzX2h3X2FmKHNjb3BlKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgbGF0ZV9jcHVfZW5hYmxlX2h2byhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqX191bnVzZWQpXFxuK3tcXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbitcXHRpZiAoY3B1X2hhc19od19hZigpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIElmIHRoZSBDUFUgZG9lcyBub3Qgc3VwcG9ydCBIVyBBRiwgd2UgY2Fubm90IG9ubGluZSBpdCBpZiBIVk8gaXNcXG4rXFx0ICogY3VycmVudGx5IGluIHVzZS5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKCk7XFxuKyNlbHNlXFxuK1xcdHJldHVybiB0cnVlO1xcbisjZW5kaWZcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgY3B1X2VuYWJsZV9wYW4oY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKl9fdW51c2VkKVxcbiB7XFxuIFxcdC8qXFxuQEAgLTMwNjcsNiArMzA5MywxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZmVhdHVyZXNbXSA9IHtcXG4gXFx0XFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfRUFSTFlfTE9DQUxfQ1BVX0ZFQVRVUkUsXFxuIFxcdFxcdC5tYXRjaGVzID0gaGFzX2JibWwyX25vYWJvcnQsXFxuIFxcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LmRlc2MgPSBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiBTdXBwb3J0XFxcIixcXG4rXFx0XFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IVk9fQ09NUEFUSUJMRSxcXG4rXFx0XFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU0NPUEVfU1lTVEVNIHxcXG4rXFx0XFx0XFx0QVJNNjRfQ1BVQ0FQX09QVElPTkFMX0ZPUl9MQVRFX0NQVSB8XFxuK1xcdFxcdFxcdEFSTTY0X0NQVUNBUF9QRVJNSVRURURfRk9SX0xBVEVfQ1BVLFxcbitcXHRcXHQubWF0Y2hlcyA9IGh2b19jb21wYXRpYmxlLFxcbitcXHRcXHQubGF0ZV9jcHVfZW5hYmxlID0gbGF0ZV9jcHVfZW5hYmxlX2h2byxcXG4rXFx0fSxcXG4gXFx0e1xcbiBcXHRcXHQuZGVzYyA9IFxcXCI1Mi1iaXQgVmlydHVhbCBBZGRyZXNzaW5nIGZvciBLVk0gKExQQTIpXFxcIixcXG4gXFx0XFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfTFBBMixcXG5AQCAtMzY2OSw2ICszNzA0LDE0IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9sb2NhbF9jcHVfY2Fwcyh1MTYgc2NvcGVfbWFzaylcXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGlmICghY3B1X2hhc19jYXAgXFx1MDAyNlxcdTAwMjYgIWNwdWNhcF9sYXRlX2NwdV9vcHRpb25hbChjYXBzKSlcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBTb21lIG9wdGlvbmFsIGZlYXR1cmVzIG1heSBpbiBmYWN0IGJlIHJlcXVpcmVkIGR1ZVxcbitcXHRcXHRcXHQgKiB0byBwYXJ0aWN1bGFyIHJ1bnRpbWUgY29uZGl0aW9ucy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmIChjYXBzLVxcdTAwM2VsYXRlX2NwdV9lbmFibGUgXFx1MDAyNlxcdTAwMjYgIWNhcHMtXFx1MDAzZWxhdGVfY3B1X2VuYWJsZShjYXBzKSlcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBXZSBoYXZlIHRvIGlzc3VlIGNwdV9lbmFibGUoKSBpcnJlc3BlY3RpdmUgb2ZcXG4gXFx0XFx0XFx0ICogd2hldGhlciB0aGUgQ1BVIGhhcyBpdCBvciBub3QsIGFzIGl0IGlzIGVuYWJlbGRcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzIGIvYXJjaC9hcm02NC90b29scy9jcHVjYXBzXFxuaW5kZXggOWI4NWE4NGY2ZmQ0OTQuLjYzMDk1M2Q1OWM1Mjc2IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xcbisrKyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xcbkBAIC03MCw2ICs3MCw3IEBAIEhBU19WSVJUX0hPU1RfRVhUTlxcbiBIQVNfV0ZYVFxcbiBIQVNfWE5YXFxuIEhBRlRcXG4rSFZPX0NPTVBBVElCTEVcXG4gSFdfREJNXFxuIEtWTV9IVkhFXFxuIEtWTV9QUk9URUNURURfTU9ERVxcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcXG5pbmRleCAyNDhmNjJkMGI1OTBlYy4uOTMyMmQ5NjJjOWNjODAgMTAwNjQ0XFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oXFxuKysrIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oXFxuQEAgLTI0LDYgKzI0LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsIHBndGFibGVfdCBwdGUpXFxuIFxcdHNldF9wbWQocG1kLCBfX3BtZCgodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocHRlKSkpO1xcbiB9XFxuIFxcbisjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9QT1BVTEFURV9WTUVNTUFQX1BNRFxcbitzdGF0aWMgaW5saW5lIGludCB0cnlfcG9wdWxhdGVfdm1lbW1hcF9wbWQocG1kX3QgKnBtZHAsIHB0ZV90ICpwZ3RhYmxlLFxcbitcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFkZHIpXFxuK3tcXG4rXFx0cG1kX3BvcHVsYXRlX2tlcm5lbChcXHUwMDI2aW5pdF9tbSwgcG1kcCwgcGd0YWJsZSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERURcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQsIHBtZF90ICpwbWQpXFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbmluZGV4IDIyMzUyOGMwNGQ3MzkyLi5lN2I2NTA1NmVmNzM4NCAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5AQCAtNjM4LDYgKzYzOCwxNCBAQCBzdGF0aWMgaW5saW5lIGxvbmcgcG1kX3Byb3Rub25lKHBtZF90IHBtZClcXG4gI2RlZmluZSBwbWRfbGVhZihwbWQpXFx0XFx0KChwbWRfdmFsKHBtZCkgXFx1MDAyNiBfUEFHRV9IVUdFKSAhPSAwKVxcbiAjZGVmaW5lIHB1ZF9sZWFmKHB1ZClcXHRcXHQoKHB1ZF92YWwocHVkKSBcXHUwMDI2IF9QQUdFX0hVR0UpICE9IDApXFxuIFxcbisjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9VUERBVEVfVk1FTU1BUF9QVEVcXG4rc3RhdGljIGlubGluZSBpbnQgdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxcbitcXHRcXHRcXHRcXHRcXHQgcHRlX3QgcHRlKVxcbit7XFxuK1xcdHNldF9wdGUocHRlcCwgcHRlKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qXFxuICAqIFdlIHByb3ZpZGUgb3VyIG93biBnZXRfdW5tYXBwZWQgYXJlYSB0byBjb3BlIHdpdGggdGhlIHZpcnR1YWwgYWxpYXNpbmdcXG4gICogY29uc3RyYWludHMgcGxhY2VkIG9uIHVzIGJ5IHRoZSBjYWNoZSBhcmNoaXRlY3R1cmUuXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcXG5pbmRleCA3NzBjZTE4YTczMjhiOC4uOGRiYmU2MmIyNTc0MjUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcXG4rKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxcbkBAIC0zMSw2ICszMSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHRzZXRfcG1kKHBtZCwgX19wbWQoKHBmbiBcXHUwMDNjXFx1MDAzYyBfUEFHRV9QRk5fU0hJRlQpIHwgX1BBR0VfVEFCTEUpKTtcXG4gfVxcbiBcXG4rI2RlZmluZSBfX0hBVkVfQVJDSF9UUllfUE9QVUxBVEVfVk1FTU1BUF9QTURcXG4rc3RhdGljIGlubGluZSBpbnQgdHJ5X3BvcHVsYXRlX3ZtZW1tYXBfcG1kKHBtZF90ICpwbWRwLCBwdGVfdCAqcGd0YWJsZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyKVxcbit7XFxuK1xcdHBtZF9wb3B1bGF0ZV9rZXJuZWwoXFx1MDAyNmluaXRfbW0sIHBtZHAsIHBndGFibGUpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVEXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQsIHBtZF90ICpwbWQpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbmluZGV4IDVkNTc1NmJkYTgyZTNkLi5hMTFjNTY5ZWUyZjA2ZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuQEAgLTExNjIsNiArMTE2MiwxNCBAQCBzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZF9tb2RpZnkocHVkX3QgcHVkLCBwZ3Byb3RfdCBuZXdwcm90KVxcbiBcXG4gI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbiBcXG4rI2RlZmluZSBfX0hBVkVfQVJDSF9UUllfVVBEQVRFX1ZNRU1NQVBfUFRFXFxuK3N0YXRpYyBpbmxpbmUgaW50IHRyeV91cGRhdGVfdm1lbW1hcF9wdGUodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcXG4rXFx0XFx0XFx0XFx0XFx0IHB0ZV90IHB0ZSlcXG4re1xcbitcXHRzZXRfcHRlKHB0ZXAsIHB0ZSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBFbmNvZGUvZGVjb2RlIHN3YXAgZW50cmllcyBhbmQgc3dhcCBQVEVzLiBTd2FwIFBURXMgYXJlIGFsbCBQVEVzIHRoYXRcXG4gICogYXJlICFwdGVfbm9uZSgpIFxcdTAwMjZcXHUwMDI2ICFwdGVfcHJlc2VudCgpLlxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcXG5pbmRleCBjODg2OTFiMTVmM2M2Ny4uNDdiNTZiYmQ2MjM2MTQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGdhbGxvYy5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGdhbGxvYy5oXFxuQEAgLTgyLDYgKzgyLDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsXFxuIFxcdHNldF9wbWQocG1kLCBfX3BtZCgoKHB0ZXZhbF90KXBmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSB8IF9QQUdFX1RBQkxFKSk7XFxuIH1cXG4gXFxuKyNkZWZpbmUgX19IQVZFX0FSQ0hfVFJZX1BPUFVMQVRFX1ZNRU1NQVBfUE1EXFxuK3N0YXRpYyBpbmxpbmUgaW50IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWRfdCAqcG1kcCwgcHRlX3QgKnBndGFibGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4re1xcbitcXHRwbWRfcG9wdWxhdGVfa2VybmVsKFxcdTAwMjZpbml0X21tLCBwbWRwLCBwZ3RhYmxlKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuICNpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgXFx1MDAzZSAyXFxuIGV4dGVybiB2b2lkIF9fX3BtZF9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwbWRfdCAqcG1kKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbmluZGV4IGFjMjk1Y2E2YzkyZjk5Li45NzQxNTE1NjQwNzFjYiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5AQCAtMTM3Miw2ICsxMzcyLDE0IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIH1cXG4gI2VuZGlmXFxuIFxcbisjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9VUERBVEVfVk1FTU1BUF9QVEVcXG4rc3RhdGljIGlubGluZSBpbnQgdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxcbitcXHRcXHRcXHRcXHRcXHQgcHRlX3QgcHRlKVxcbit7XFxuK1xcdHNldF9wdGUocHRlcCwgcHRlKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuICNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbiBzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmhcXG5pbmRleCBlMWEyZTFiN2M4ZTdiOC4uYzQ3OTZjNTRiNzAyYTkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmhcXG4rKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaFxcbkBAIC0xMjgsNCArMTI4LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKHZvaWQpXFxuIH1cXG4gI2VuZGlmIC8qIF9fSEFWRV9BUkNIX0dJR0FOVElDX1BBR0VfUlVOVElNRV9TVVBQT1JURUQgKi9cXG4gXFxuKyNpZm5kZWYgX19IQVZFX0FSQ0hfSFZPX1NVUFBPUlRFRFxcbitzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3N1cHBvcnRlZCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUCk7XFxuK31cXG4rI2VuZGlmIC8qIF9fSEFWRV9BUkNIX0hWT19TVVBQT1JURUQgKi9cXG4rXFxuICNlbmRpZiAvKiBfQVNNX0dFTkVSSUNfSFVHRVRMQl9IICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYl92bWVtbWFwLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYTY3MWViNGE0ZmY0NjZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiX3ZtZW1tYXAuaFxcbkBAIC0wLDAgKzEsMjAgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rI2lmbmRlZiBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0hcXG4rI2RlZmluZSBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbitcXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbitcXG4rYm9vbCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKHZvaWQpO1xcbitcXG4rI2Vsc2UgLyogQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQICovXFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZSh2b2lkKVxcbit7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbisjZW5kaWZcXG4rXFxuKyNlbmRpZiAvKiBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaFxcbmluZGV4IDkxNzRmYTU5YmJjNTRkLi5lZDQ0NmQ5NWNhMzczMCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGdhbGxvYy5oXFxuQEAgLTI2LDQgKzI2LDI0IEBAXFxuIFxcdFxcdFxcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MoYWRkciwgYWRkcik7XFx0XFx0XFxcXFxcbiBcXHR9IHdoaWxlICgwKVxcbiBcXG4rI2lmbmRlZiBfX0hBVkVfQVJDSF9UUllfUE9QVUxBVEVfVk1FTU1BUF9QTURcXG4rLypcXG4rICogdHJ5X3BvcHVsYXRlX3ZtZW1tYXBfcG1kIC0gUG9wdWxhdGUgYSBQTUQgdGhhdCBpcyBpbiB1c2UgYnkgdGhlIHZtZW1tYXAuXFxuKyAqIEBhZGRyOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHJlbWFwcGVkIFBNRC5cXG4rICogQHBtZHA6IFBhZ2UgdGFibGUgcG9pbnRlciB0byBiZSBvdmVyd3JpdHRlbi5cXG4rICogQHBndGFibGU6IFBvaW50ZXIgdG8gdGhlIHBhZ2UgdGFibGUgdGhhdCB0aGUgbmV3IFBNRCB3aWxsIHBvaW50IHRvLlxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdG8gYmUgdXNlZCB0byB1cGRhdGUgUE1EcyB0aGF0IG1hcCB0aGUgdm1lbW1hcCB0b1xcbisgKiBwb2ludCB0byBhIHBhZ2Ugb2YgYWxyZWFkeS1wb3B1bGF0ZWQgUFRFcyB0aGF0IG1hcCB0aGUgc2FtZSBwYWdlcy5cXG4rICpcXG4rICogSW1wbGVtZW50YXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gbXVzdCBlbnN1cmUgdGhhdCwgd2hpbGUgdGhlIHVwZGF0ZSBpcyB0YWtpbmdcXG4rICogcGxhY2UsIENQVXMgd2lsbCBub3QgZmF1bHQgb24gdGhlIHJlbWFwcGVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgaW50IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWRfdCAqcG1kcCwgcHRlX3QgKnBndGFibGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4re1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAjZW5kaWYgLyogX0xJTlVYX1BHQUxMT0NfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXFxuaW5kZXggMjk4MWUzODZkYTdiM2MuLmUxYWJjY2Y3NmJiNDYzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcXG5AQCAtNDU3LDYgKzQ1NywyNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gI2VuZGlmXFxuICNkZWZpbmUgc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKSBzZXRfcHRlcyhtbSwgYWRkciwgcHRlcCwgcHRlLCAxKVxcbiBcXG4rI2lmbmRlZiBfX0hBVkVfQVJDSF9UUllfVVBEQVRFX1ZNRU1NQVBfUFRFXFxuKy8qXFxuKyAqIHRyeV91cGRhdGVfdm1lbW1hcF9wdGUgLSBSZW1hcCBQVEVzIHVzZWQgYnkgdGhlIHZtZW1tYXAuXFxuKyAqIEBhZGRyOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHJlbWFwcGVkIFBURS5cXG4rICogQHB0ZXA6IFBhZ2UgdGFibGUgcG9pbnRlciB0byBiZSBvdmVyd3JpdHRlbi5cXG4rICogQHB0ZTogUGFnZSB0YWJsZSBlbnRyeSB0byB3cml0ZS5cXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHRvIGJlIHVzZWQgdG8gdXBkYXRlIFBURXMgdGhhdCBtYXAgdGhlIHZtZW1tYXAuIFRoZVxcbisgKiBvbmx5IHZhbGlkIHRyYW5zaXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIGZ1bmN0aW9uIGFyZTogbGVhZi1sZXZlbFxcbisgKiAoUEFHRV9TSVpFKSwgdmFsaWQtdG8tdmFsaWQuIFRoZSBwZm4gYW5kIHByb3QgYml0cyBtYXkgYmUgY2hhbmdlZC5cXG4rICpcXG4rICogSW1wbGVtZW50YXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gbXVzdCBlbnN1cmUgdGhhdCwgd2hpbGUgdGhlIHVwZGF0ZSBpcyB0YWtpbmdcXG4rICogcGxhY2UsIENQVXMgd2lsbCBub3QgZmF1bHQgb24gdGhlIHJlbWFwcGVkIHZpcnR1YWwgYWRkcmVzcy5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgaW50IHRyeV91cGRhdGVfdm1lbW1hcF9wdGUodW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcXG4rXFx0XFx0XFx0XFx0XFx0IHB0ZV90IHB0ZSlcXG4re1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAjaWZuZGVmIF9fSEFWRV9BUkNIX1BURVBfU0VUX0FDQ0VTU19GTEFHU1xcbiBleHRlcm4gaW50IHB0ZXBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXAsXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi4yOTg2NzNhNmM1N2M1YyAxMDA2NDRcXG4tLS0gYS9tbS9odWdldGxiLmNcXG4rKysgYi9tbS9odWdldGxiLmNcXG5AQCAtNDcsNyArNDcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbm9kZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZV9vd25lci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2V0bGJfdm1lbW1hcC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiaHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJodWdldGxiX2NtYS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiaHVnZXRsYl9pbnRlcm5hbC5oXFxcIlxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZS1pc29sYXRpb24uaFxcdTAwM2VcXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl9zeXNmcy5jIGIvbW0vaHVnZXRsYl9zeXNmcy5jXFxuaW5kZXggNzllY2U5MTQwNmJmYTQuLjgzYTk1ZjUxNDJmNWE0IDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGJfc3lzZnMuY1xcbisrKyBiL21tL2h1Z2V0bGJfc3lzZnMuY1xcbkBAIC04LDcgKzgsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZV9vd25lci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZS1pc29sYXRpb24uaFxcdTAwM2VcXG4gXFxuLSNpbmNsdWRlIFxcXCJodWdldGxiX3ZtZW1tYXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImh1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiaHVnZXRsYl9pbnRlcm5hbC5oXFxcIlxcbiBcXG4gI2RlZmluZSBIU1RBVEVfQVRUUl9STyhfbmFtZSkgXFxcXFxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiX3ZtZW1tYXAuYyBiL21tL2h1Z2V0bGJfdm1lbW1hcC5jXFxuaW5kZXggMTMzYjQ2ZGZiMDlmNWMuLjdlN2Y4NTc5Y2MyYWU1IDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGJfdm1lbW1hcC5jXFxuKysrIGIvbW0vaHVnZXRsYl92bWVtbWFwLmNcXG5AQCAtMTYsOSArMTYsMTEgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tZGVidWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2V3YWxrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZ2FsbG9jLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9odWdldGxiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9odWdldGxiX3ZtZW1tYXAuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdGxiZmx1c2guaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFxcImh1Z2V0bGJfdm1lbW1hcC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiaHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbiBcXG4gLyoqXFxuQEAgLTM0LDcgKzM2LDcgQEBcXG4gICpcXHRcXHRcXHRvcGVyYXRpb25zLlxcbiAgKi9cXG4gc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayB7XFxuLVxcdHZvaWRcXHRcXHRcXHQoKnJlbWFwX3B0ZSkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRpbnRcXHRcXHRcXHQoKnJlbWFwX3B0ZSkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspO1xcbiBcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdG5yX3dhbGtlZDtcXG5AQCAtNTQsNiArNTYsNyBAQCBzdGF0aWMgaW50IHZtZW1tYXBfc3BsaXRfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBwYWdlICpoZWFkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspXFxuIHtcXG4gXFx0cG1kX3QgX19wbWQ7XFxuK1xcdGludCByZXQ7XFxuIFxcdGludCBpO1xcbiBcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSBzdGFydDtcXG4gXFx0cHRlX3QgKnBndGFibGU7XFxuQEAgLTczLDggKzc2LDE1IEBAIHN0YXRpYyBpbnQgdm1lbW1hcF9zcGxpdF9wbWQocG1kX3QgKnBtZCwgc3RydWN0IHBhZ2UgKmhlYWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuIFxcdFxcdHNldF9wdGVfYXQoXFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSwgZW50cnkpO1xcbiBcXHR9XFxuIFxcbitcXHRyZXQgPSAwO1xcbiBcXHRzcGluX2xvY2soXFx1MDAyNmluaXRfbW0ucGFnZV90YWJsZV9sb2NrKTtcXG4gXFx0aWYgKGxpa2VseShwbWRfbGVhZigqcG1kKSkpIHtcXG4rXFx0XFx0LyogTWFrZSBwdGUgdmlzaWJsZSBiZWZvcmUgcG1kLiBTZWUgY29tbWVudCBpbiBwbWRfaW5zdGFsbCgpLiAqL1xcbitcXHRcXHRzbXBfd21iKCk7XFxuK1xcdFxcdHJldCA9IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWQsIHBndGFibGUsIHN0YXJ0KTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBmcmVlO1xcbitcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogSGlnaGVyIG9yZGVyIGFsbG9jYXRpb25zIGZyb20gYnVkZHkgYWxsb2NhdG9yIG11c3QgYmUgYWJsZSB0b1xcbiBcXHRcXHQgKiBiZSB0cmVhdGVkIGFzIGluZGVwZW5kZW50IHNtYWxsIHBhZ2VzIChhcyB0aGV5IGNhbiBiZSBmcmVlZFxcbkBAIC04MywxNyArOTMsMTcgQEAgc3RhdGljIGludCB2bWVtbWFwX3NwbGl0X3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgcGFnZSAqaGVhZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gXFx0XFx0aWYgKCFQYWdlUmVzZXJ2ZWQoaGVhZCkpXFxuIFxcdFxcdFxcdHNwbGl0X3BhZ2UoaGVhZCwgZ2V0X29yZGVyKFBNRF9TSVpFKSk7XFxuIFxcbi1cXHRcXHQvKiBNYWtlIHB0ZSB2aXNpYmxlIGJlZm9yZSBwbWQuIFNlZSBjb21tZW50IGluIHBtZF9pbnN0YWxsKCkuICovXFxuLVxcdFxcdHNtcF93bWIoKTtcXG4tXFx0XFx0cG1kX3BvcHVsYXRlX2tlcm5lbChcXHUwMDI2aW5pdF9tbSwgcG1kLCBwZ3RhYmxlKTtcXG4gXFx0XFx0aWYgKCEod2Fsay1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTUVNTUFQX1NQTElUX05PX1RMQl9GTFVTSCkpXFxuIFxcdFxcdFxcdGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIHN0YXJ0ICsgUE1EX1NJWkUpO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRwdGVfZnJlZV9rZXJuZWwoXFx1MDAyNmluaXRfbW0sIHBndGFibGUpO1xcbi1cXHR9XFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbml0X21tLnBhZ2VfdGFibGVfbG9jayk7XFxuK1xcdH0gZWxzZVxcbitcXHRcXHRnb3RvIGZyZWU7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rb3V0OlxcbitcXHRzcGluX3VubG9jayhcXHUwMDI2aW5pdF9tbS5wYWdlX3RhYmxlX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbitmcmVlOlxcbitcXHRwdGVfZnJlZV9rZXJuZWwoXFx1MDAyNmluaXRfbW0sIHBndGFibGUpO1xcbitcXHRnb3RvIG91dDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB2bWVtbWFwX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuQEAgLTE0MSwxMSArMTUxLDEzIEBAIHN0YXRpYyBpbnQgdm1lbW1hcF9wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuIHtcXG4gXFx0c3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqdm1lbW1hcF93YWxrID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG4rXFx0aW50IHJldCA9IDA7XFxuIFxcbi1cXHR2bWVtbWFwX3dhbGstXFx1MDAzZXJlbWFwX3B0ZShwdGUsIGFkZHIsIHZtZW1tYXBfd2Fsayk7XFxuLVxcdHZtZW1tYXBfd2Fsay1cXHUwMDNlbnJfd2Fsa2VkKys7XFxuK1xcdHJldCA9IHZtZW1tYXBfd2Fsay1cXHUwMDNlcmVtYXBfcHRlKHB0ZSwgYWRkciwgdm1lbW1hcF93YWxrKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHZtZW1tYXBfd2Fsay1cXHUwMDNlbnJfd2Fsa2VkKys7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyB2bWVtbWFwX3JlbWFwX29wcyA9IHtcXG5AQCAtMTY0LDEzICsxNzYsMTEgQEAgc3RhdGljIGludCB2bWVtbWFwX3JlbWFwX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRyZXQgPSB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlKHN0YXJ0LCBlbmQsIFxcdTAwMjZ2bWVtbWFwX3JlbWFwX29wcyxcXG4gXFx0XFx0XFx0XFx0ICAgIE5VTEwsIHdhbGspO1xcbiBcXHRtbWFwX3JlYWRfdW5sb2NrKFxcdTAwMjZpbml0X21tKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdGlmICh3YWxrLVxcdTAwM2VyZW1hcF9wdGUgXFx1MDAyNlxcdTAwMjYgISh3YWxrLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZNRU1NQVBfUkVNQVBfTk9fVExCX0ZMVVNIKSlcXG4gXFx0XFx0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKTtcXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0xOTksMTggKzIwOSwyMCBAQCBzdGF0aWMgdm9pZCBmcmVlX3ZtZW1tYXBfcGFnZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuIFxcdFxcdGZyZWVfdm1lbW1hcF9wYWdlKHBhZ2UpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB2bWVtbWFwX3JlbWFwX3B0ZShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLVxcdFxcdFxcdCAgICAgIHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspXFxuK3N0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9wdGUocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspXFxuIHtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwdGVfcGFnZShwdGVwX2dldChwdGUpKTtcXG4gXFx0cHRlX3QgZW50cnk7XFxuK1xcdGJvb2wgaGVhZDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGhlYWQgPSB3YWxrLVxcdTAwM2Vucl93YWxrZWQgPT0gMCBcXHUwMDI2XFx1MDAyNiB3YWxrLVxcdTAwM2V2bWVtbWFwX2hlYWQ7XFxuIFxcbiBcXHQvKiBSZW1hcHBpbmcgdGhlIGhlYWQgcGFnZSByZXF1aXJlcyByL3cgKi9cXG4tXFx0aWYgKHVubGlrZWx5KHdhbGstXFx1MDAzZW5yX3dhbGtlZCA9PSAwIFxcdTAwMjZcXHUwMDI2IHdhbGstXFx1MDAzZXZtZW1tYXBfaGVhZCkpIHtcXG4rXFx0aWYgKHVubGlrZWx5KGhlYWQpKSB7XFxuIFxcdFxcdFZNX1dBUk5fT05fT05DRSghUGFnZUhlYWQoKGNvbnN0IHN0cnVjdCBwYWdlICopYWRkcikpO1xcbiBcXG4tXFx0XFx0bGlzdF9kZWwoXFx1MDAyNndhbGstXFx1MDAzZXZtZW1tYXBfaGVhZC1cXHUwMDNlbHJ1KTtcXG4tXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIE1ha2VzIHN1cmUgdGhhdCBwcmVjZWRpbmcgc3RvcmVzIHRvIHRoZSBwYWdlIGNvbnRlbnRzIGZyb21cXG4gXFx0XFx0ICogdm1lbW1hcF9yZW1hcF9mcmVlKCkgYmVjb21lIHZpc2libGUgYmVmb3JlIHRoZSBzZXRfcHRlX2F0KClcXG5AQCAtMjI5LDM1ICsyNDEsNTYgQEAgc3RhdGljIHZvaWQgdm1lbW1hcF9yZW1hcF9wdGUocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRlbnRyeSA9IG1rX3B0ZSh3YWxrLVxcdTAwM2V2bWVtbWFwX3RhaWwsIFBBR0VfS0VSTkVMX1JPKTtcXG4gXFx0fVxcbiBcXG4rXFx0cmV0ID0gdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZShhZGRyLCBwdGUsIGVudHJ5KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIFdlIHN1Y2Nlc3NmdWxseSBvdmVyd3JvdGUgdGhlIHZtZW1tYXAgUFRFLCBzbyB3ZSBjYW4gZnJlZVxcbitcXHQgKiB0aGUgdm1lbW1hcCBwYWdlIHRoYXQgd2FzIGp1c3QgdW5tYXBwZWQsIGFuZCBpZiB3ZSBtYXBwZWRcXG4rXFx0ICogdGhlIG5ldyBoZWFkIHBhZ2UsIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0IHNvIHRoYXQgaXRcXG4rXFx0ICogZG9lc24ndCBnZXQgZnJlZWQgbGF0ZXIuXFxuK1xcdCAqL1xcbiBcXHRsaXN0X2FkZChcXHUwMDI2cGFnZS1cXHUwMDNlbHJ1LCB3YWxrLVxcdTAwM2V2bWVtbWFwX3BhZ2VzKTtcXG4tXFx0c2V0X3B0ZV9hdChcXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBlbnRyeSk7XFxuK1xcdGlmIChoZWFkKVxcbitcXHRcXHRsaXN0X2RlbChcXHUwMDI2d2Fsay1cXHUwMDNldm1lbW1hcF9oZWFkLVxcdTAwM2VscnUpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHZtZW1tYXBfcmVzdG9yZV9wdGUocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi1cXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrICp3YWxrKVxcbitzdGF0aWMgaW50IHZtZW1tYXBfcmVzdG9yZV9wdGUocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqd2FsaylcXG4ge1xcbiBcXHRzdHJ1Y3QgcGFnZSAqc3JjID0gcHRlX3BhZ2UocHRlcF9nZXQocHRlKSksICpkc3Q7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCF3YWxrLVxcdTAwM2V2bWVtbWFwX3RhaWwpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIFdoZW4gcm9sbGluZyBiYWNrIHZtZW1tYXBfcmVtYXBfZnJlZSgpLCBrZWVwIHRoZSBjb3BpZWQgaGVhZCBwYWdlXFxuK1xcdCAqIFdoZW4gcmVzdG9yaW5nIGEgcGFydGlhbGx5LUhWT2VkIHBhZ2UsIGtlZXAgdGhlIGNvcGllZCBoZWFkIHBhZ2VcXG4gXFx0ICogbWFwcGluZyBhbmQgcmVzdG9yZSBvbmx5IFBURXMgY3VycmVudGx5IHBvaW50aW5nIGF0IHRoZSBzaGFyZWQgdGFpbFxcbiBcXHQgKiBwYWdlLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHdhbGstXFx1MDAzZXZtZW1tYXBfdGFpbCBcXHUwMDI2XFx1MDAyNiB3YWxrLVxcdTAwM2V2bWVtbWFwX3RhaWwgIT0gc3JjKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdGlmICh3YWxrLVxcdTAwM2V2bWVtbWFwX3RhaWwgIT0gc3JjKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdFZNX1dBUk5fT05fT05DRShQYWdlSGVhZCgoY29uc3Qgc3RydWN0IHBhZ2UgKilhZGRyKSk7XFxuIFxcbiBcXHRkc3QgPSBsaXN0X2ZpcnN0X2VudHJ5KHdhbGstXFx1MDAzZXZtZW1tYXBfcGFnZXMsIHN0cnVjdCBwYWdlLCBscnUpO1xcbi1cXHRsaXN0X2RlbChcXHUwMDI2ZHN0LVxcdTAwM2VscnUpO1xcbiBcXHRjb3B5X3BhZ2UocGFnZV90b192aXJ0KGRzdCksIHBhZ2VfdG9fdmlydChzcmMpKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIE1ha2VzIHN1cmUgdGhhdCBwcmVjZWRpbmcgc3RvcmVzIHRvIHRoZSBwYWdlIGNvbnRlbnRzIGJlY29tZSB2aXNpYmxlXFxuLVxcdCAqIGJlZm9yZSB0aGUgc2V0X3B0ZV9hdCgpIHdyaXRlLlxcbitcXHQgKiBiZWZvcmUgdGhlIHRyeV91cGRhdGVfdm1lbW1hcF9wdGUoKSB3cml0ZS5cXG4gXFx0ICovXFxuIFxcdHNtcF93bWIoKTtcXG4tXFx0c2V0X3B0ZV9hdChcXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBta19wdGUoZHN0LCBQQUdFX0tFUk5FTCkpO1xcbitcXG4rXFx0cmV0ID0gdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZShhZGRyLCBwdGUsIG1rX3B0ZShkc3QsIFBBR0VfS0VSTkVMKSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRsaXN0X2RlbChcXHUwMDI2ZHN0LVxcdTAwM2VscnUpO1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTI3OSw2ICszMTIsNyBAQCBzdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfc3BsaXQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuIFxcdHJldHVybiB2bWVtbWFwX3JlbWFwX3JhbmdlKHN0YXJ0LCBlbmQsIFxcdTAwMjZ3YWxrKTtcXG4gfVxcbiBcXG4rc3RhdGljIGNvbnN0IGludCBWTUVNTUFQX1JFTUFQX0lOQ09NUExFVEUgPSAxO1xcbiAvKipcXG4gICogdm1lbW1hcF9yZW1hcF9mcmVlIC0gcmVtYXAgdGhlIHZtZW1tYXAgdmlydHVhbCBhZGRyZXNzIHJhbmdlIFtAc3RhcnQsIEBlbmQpXFxuICAqXFx0XFx0XFx0dG8gdXNlIEB2bWVtbWFwX2hlYWQvdGFpbCwgdGhlbiBmcmVlIHZtZW1tYXAgd2hpY2hcXG5AQCAtMjkzLDcgKzMyNyw4IEBAIHN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9zcGxpdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4gICpcXHRcXHRyZXNwb25zaWJpbGl0eSB0byBmcmVlIHBhZ2VzLlxcbiAgKiBAZmxhZ3M6XFx0bW9kaWZpY2F0aW9ucyB0byB2bWVtbWFwX3JlbWFwX3dhbGsgZmxhZ3NcXG4gICpcXG4tICogUmV0dXJuOiAlMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cXG4rICogUmV0dXJuOiAlMCBvbiBzdWNjZXNzLCBWTUVNTUFQX1JFTUFQX0lOQ09NUExFVEUgaWYgdGhlIHBhZ2UgaXMgaW5jb21wbGV0ZWx5XFxuKyAqICAgICAgICAgb3B0aW1pemVkLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cXG4gICovXFxuIHN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9mcmVlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGFnZSAqdm1lbW1hcF9oZWFkLFxcbkBAIC0zMjgsNyArMzYzLDggQEAgc3RhdGljIGludCB2bWVtbWFwX3JlbWFwX2ZyZWUodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdFxcdC5mbGFnc1xcdFxcdD0gMCxcXG4gXFx0fTtcXG4gXFxuLVxcdHZtZW1tYXBfcmVtYXBfcmFuZ2Uoc3RhcnQsIGVuZCwgXFx1MDAyNndhbGspO1xcbitcXHRpZiAodm1lbW1hcF9yZW1hcF9yYW5nZShzdGFydCwgZW5kLCBcXHUwMDI2d2FsaykpXFxuK1xcdFxcdHJldHVybiBWTUVNTUFQX1JFTUFQX0lOQ09NUExFVEU7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTM1NywxMCArMzkzLDM4IEBAIHN0YXRpYyBpbnQgYWxsb2Nfdm1lbW1hcF9wYWdlX2xpc3QodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdHJldHVybiAtRU5PTUVNO1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IHBhZ2UgKnZtZW1tYXBfZ2V0X3RhaWwodW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgem9uZSAqem9uZSlcXG4re1xcbitcXHRjb25zdCB1bnNpZ25lZCBpbnQgaWR4ID0gb3JkZXIgLSBWTUVNTUFQX1RBSUxfTUlOX09SREVSO1xcbitcXHRzdHJ1Y3QgcGFnZSAqdGFpbCwgKnA7XFxuK1xcdGludCBub2RlID0gem9uZV90b19uaWQoem9uZSk7XFxuK1xcbitcXHR0YWlsID0gUkVBRF9PTkNFKHpvbmUtXFx1MDAzZXZtZW1tYXBfdGFpbHNbaWR4XSk7XFxuK1xcdGlmIChsaWtlbHkodGFpbCkpXFxuK1xcdFxcdHJldHVybiB0YWlsO1xcbitcXG4rXFx0dGFpbCA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIDApO1xcbitcXHRpZiAoIXRhaWwpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cCA9IHBhZ2VfdG9fdmlydCh0YWlsKTtcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IHBhZ2UpOyBpKyspXFxuK1xcdFxcdGluaXRfY29tcG91bmRfdGFpbChwICsgaSwgTlVMTCwgb3JkZXIsIHpvbmUpO1xcbitcXG4rXFx0aWYgKGNtcHhjaGcoXFx1MDAyNnpvbmUtXFx1MDAzZXZtZW1tYXBfdGFpbHNbaWR4XSwgTlVMTCwgdGFpbCkpIHtcXG4rXFx0XFx0X19mcmVlX3BhZ2UodGFpbCk7XFxuK1xcdFxcdHRhaWwgPSBSRUFEX09OQ0Uoem9uZS1cXHUwMDNldm1lbW1hcF90YWlsc1tpZHhdKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHRhaWw7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB2bWVtbWFwX3JlbWFwX2FsbG9jIC0gcmVtYXAgdGhlIHZtZW1tYXAgdmlydHVhbCBhZGRyZXNzIHJhbmdlIFtAc3RhcnQsIGVuZClcXG4gICpcXHRcXHRcXHQgdG8gdGhlIHBhZ2Ugd2hpY2ggaXMgZnJvbSB0aGUgQHZtZW1tYXBfcGFnZXNcXG4gICpcXHRcXHRcXHQgcmVzcGVjdGl2ZWx5LlxcbisgKiBAaDpcXHRcXHR0aGUgaHN0YXRlIGZvciB0aGUgZm9saW8gd2hvc2Ugdm1lbW1hcCBpcyBnZXR0aW5nIHJlbWFwcGVkXFxuKyAqIEBmb2xpbzpcXHR0aGUgZm9saW8gd2hvc2Ugdm1lbW1hcCBpcyBnZXR0aW5nIHJlbWFwcGVkXFxuICAqIEBzdGFydDpcXHRzdGFydCBhZGRyZXNzIG9mIHRoZSB2bWVtbWFwIHZpcnR1YWwgYWRkcmVzcyByYW5nZSB0aGF0IHdlIHdhbnRcXG4gICpcXHRcXHR0byByZW1hcC5cXG4gICogQGVuZDpcXHRlbmQgYWRkcmVzcyBvZiB0aGUgdm1lbW1hcCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UgdGhhdCB3ZSB3YW50IHRvXFxuQEAgLTM2OSwyMCArNDMzLDY4IEBAIHN0YXRpYyBpbnQgYWxsb2Nfdm1lbW1hcF9wYWdlX2xpc3QodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuICAqXFxuICAqIFJldHVybjogJTAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXFxuICAqL1xcbi1zdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfYWxsb2ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuK3N0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9hbGxvYyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbiB7XFxuIFxcdExJU1RfSEVBRCh2bWVtbWFwX3BhZ2VzKTtcXG4tXFx0c3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayB3YWxrID0ge1xcbitcXHRzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrIHdhbGs7XFxuK1xcdHN0cnVjdCBwYWdlICp2bWVtbWFwX3RhaWw7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHR2bWVtbWFwX3RhaWwgPSB2bWVtbWFwX2dldF90YWlsKGgtXFx1MDAzZW9yZGVyLCBmb2xpb196b25lKGZvbGlvKSk7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIXZtZW1tYXBfdGFpbCkpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0aWYgKGFsbG9jX3ZtZW1tYXBfcGFnZV9saXN0KHN0YXJ0LCBlbmQsIFxcdTAwMjZ2bWVtbWFwX3BhZ2VzKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHR3YWxrID0gKHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGspIHtcXG4gXFx0XFx0LnJlbWFwX3B0ZVxcdD0gdm1lbW1hcF9yZXN0b3JlX3B0ZSxcXG4rXFx0XFx0LnZtZW1tYXBfdGFpbFxcdD0gdm1lbW1hcF90YWlsLFxcbiBcXHRcXHQudm1lbW1hcF9wYWdlc1xcdD0gXFx1MDAyNnZtZW1tYXBfcGFnZXMsXFxuIFxcdFxcdC5mbGFnc1xcdFxcdD0gZmxhZ3MsXFxuIFxcdH07XFxuIFxcbi1cXHRpZiAoYWxsb2Nfdm1lbW1hcF9wYWdlX2xpc3Qoc3RhcnQsIGVuZCwgXFx1MDAyNnZtZW1tYXBfcGFnZXMpKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0cmV0ID0gdm1lbW1hcF9yZW1hcF9yYW5nZShzdGFydCwgZW5kLCBcXHUwMDI2d2Fsayk7XFxuIFxcbi1cXHRyZXR1cm4gdm1lbW1hcF9yZW1hcF9yYW5nZShzdGFydCwgZW5kLCBcXHUwMDI2d2Fsayk7XFxuK1xcdC8qIE5vdCBhbGwgcGFnZXMgbWF5IGhhdmUgYmVlbiBjb25zdW1lZCAqL1xcbitcXHRmcmVlX3ZtZW1tYXBfcGFnZV9saXN0KFxcdTAwMjZ2bWVtbWFwX3BhZ2VzKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK2VudW0gaHVnZXRsYl9odm9fc3RhdHVzIHtcXG4rXFx0SFZPX0lOQUNUSVZFID0gMCxcXG4rXFx0SFZPX0FDVElWRSxcXG4rXFx0SFZPX1BFUk1BTkVOVExZX0lOQUNUSVZFLFxcbit9O1xcbitzdGF0aWMgZW51bSBodWdldGxiX2h2b19zdGF0dXMgaHZvX3N0YXR1cyA9IEhWT19JTkFDVElWRTtcXG4rXFxuK3N0YXRpYyBib29sIGh1Z2V0bGJfaHZvX3N0YXR1c190cnlfc2V0KGVudW0gaHVnZXRsYl9odm9fc3RhdHVzIHN0YXR1cylcXG4re1xcbitcXHRlbnVtIGh1Z2V0bGJfaHZvX3N0YXR1cyBvbGQ7XFxuK1xcbitcXHRvbGQgPSBSRUFEX09OQ0UoaHZvX3N0YXR1cyk7XFxuK1xcbityZXRyeTpcXG4rXFx0LyogVGhlIGN1cnJlbnQgc2V0dGluZyBpcyB3aGF0IHdlIHdhbnQuICovXFxuK1xcdGlmIChvbGQgPT0gc3RhdHVzKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdC8qIFRoZSBjdXJyZW50IHNldHRpbmcgY2Fubm90IGJlIGNoYW5nZWQuICovXFxuK1xcdGlmIChvbGQgIT0gSFZPX0lOQUNUSVZFKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoIXRyeV9jbXB4Y2hnX3JlbGF4ZWQoXFx1MDAyNmh2b19zdGF0dXMsIFxcdTAwMjZvbGQsIHN0YXR1cykpXFxuK1xcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rYm9vbCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGh1Z2V0bGJfaHZvX3N0YXR1c190cnlfc2V0KEhWT19QRVJNQU5FTlRMWV9JTkFDVElWRSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIHZtZW1tYXBfb3B0aW1pemVfZW5hYmxlZCA9IElTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT04pO1xcbkBAIC00MTUsNyArNTI3LDcgQEAgc3RhdGljIGludCBfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsXFxuIFxcdCAqIFdoZW4gYSBIdWdlVExCIHBhZ2UgaXMgZnJlZWQgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgcHJldmlvdXNseVxcbiBcXHQgKiBkaXNjYXJkZWQgdm1lbW1hcCBwYWdlcyBtdXN0IGJlIGFsbG9jYXRlZCBhbmQgcmVtYXBwaW5nLlxcbiBcXHQgKi9cXG4tXFx0cmV0ID0gdm1lbW1hcF9yZW1hcF9hbGxvYyh2bWVtbWFwX3N0YXJ0LCB2bWVtbWFwX2VuZCwgZmxhZ3MpO1xcbitcXHRyZXQgPSB2bWVtbWFwX3JlbWFwX2FsbG9jKGgsIGZvbGlvLCB2bWVtbWFwX3N0YXJ0LCB2bWVtbWFwX2VuZCwgZmxhZ3MpO1xcbiBcXHRpZiAoIXJldClcXG4gXFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbyk7XFxuIFxcbkBAIC00ODcsMzYgKzU5OSwxNiBAQCBzdGF0aWMgYm9vbCB2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9mb2xpbyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKlxcbiBcXHRpZiAoIVJFQURfT05DRSh2bWVtbWFwX29wdGltaXplX2VuYWJsZWQpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRpZiAoIWh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YWJsZShoKSlcXG4rXFx0aWYgKCFhcmNoX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fc3VwcG9ydGVkKCkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdHJldHVybiB0cnVlO1xcbi19XFxuLVxcbi1zdGF0aWMgc3RydWN0IHBhZ2UgKnZtZW1tYXBfZ2V0X3RhaWwodW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgem9uZSAqem9uZSlcXG4te1xcbi1cXHRjb25zdCB1bnNpZ25lZCBpbnQgaWR4ID0gb3JkZXIgLSBWTUVNTUFQX1RBSUxfTUlOX09SREVSO1xcbi1cXHRzdHJ1Y3QgcGFnZSAqdGFpbCwgKnA7XFxuLVxcdGludCBub2RlID0gem9uZV90b19uaWQoem9uZSk7XFxuLVxcbi1cXHR0YWlsID0gUkVBRF9PTkNFKHpvbmUtXFx1MDAzZXZtZW1tYXBfdGFpbHNbaWR4XSk7XFxuLVxcdGlmIChsaWtlbHkodGFpbCkpXFxuLVxcdFxcdHJldHVybiB0YWlsO1xcbi1cXG4tXFx0dGFpbCA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIDApO1xcbi1cXHRpZiAoIXRhaWwpXFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbi1cXG4tXFx0cCA9IHBhZ2VfdG9fdmlydCh0YWlsKTtcXG4tXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IHBhZ2UpOyBpKyspXFxuLVxcdFxcdGluaXRfY29tcG91bmRfdGFpbChwICsgaSwgTlVMTCwgb3JkZXIsIHpvbmUpO1xcbitcXHRpZiAoIWh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YWJsZShoKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0aWYgKGNtcHhjaGcoXFx1MDAyNnpvbmUtXFx1MDAzZXZtZW1tYXBfdGFpbHNbaWR4XSwgTlVMTCwgdGFpbCkpIHtcXG4tXFx0XFx0X19mcmVlX3BhZ2UodGFpbCk7XFxuLVxcdFxcdHRhaWwgPSBSRUFEX09OQ0Uoem9uZS1cXHUwMDNldm1lbW1hcF90YWlsc1tpZHhdKTtcXG4tXFx0fVxcbitcXHRpZiAoIWh1Z2V0bGJfaHZvX3N0YXR1c190cnlfc2V0KEhWT19BQ1RJVkUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRyZXR1cm4gdGFpbDtcXG4rXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCxcXG5AQCAtNTc0LDcgKzY2NiwxMSBAQCBzdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsXFxuIFxcdFxcdFxcdFxcdCB2bWVtbWFwX2hlYWQsIHZtZW1tYXBfdGFpbCxcXG4gXFx0XFx0XFx0XFx0IHZtZW1tYXBfcGFnZXMsIGZsYWdzKTtcXG4gb3V0Olxcbi1cXHRpZiAocmV0KVxcbitcXHQvKlxcbitcXHQgKiBJZiByZXQgPT0gVk1FTU1BUF9SRU1BUF9JTkNPTVBMRVRFLCB0aGUgZm9saW8gbWlnaHQgYmUgcGFydGlhbGx5XFxuK1xcdCAqIEhWT2VkLiBMZWF2ZSB0aGUgSFZPIHBhZ2UgZm9saW8gZmxhZyBpbiBwbGFjZS5cXG4rXFx0ICovXFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTcxNyw2ICs4MTMsMTQgQEAgc3RhdGljIGJvb2wgdm1lbW1hcF9zaG91bGRfb3B0aW1pemVfYm9vdG1lbV9wYWdlKHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqbSlcXG4gXFx0aWYgKCFSRUFEX09OQ0Uodm1lbW1hcF9vcHRpbWl6ZV9lbmFibGVkKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogQXJjaGl0ZWN0dXJlcyBtYXkgcmV0dXJuIGZhbHNlIGhlcmUgYnV0IHRydWUgYnkgdGhlIHRpbWVcXG4rXFx0ICogaHVnZXRsYl9pbml0KCkgaXMgY2FsbGVkLiBJbiB0aGlzIGNhc2UsIGFsdGhvdWdoIHRoZSBmb2xpb3Mgd2lsbFxcbitcXHQgKiBub3QgYmUgcHJlLUhWT2VkLCB0aGV5IHdpbGwgYmUgb3B0aW1pemVkIGluIGh1Z2V0bGJfaW5pdCgpLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFhcmNoX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fc3VwcG9ydGVkKCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuIFxcdGlmICghaHVnZXRsYl92bWVtbWFwX29wdGltaXphYmxlKG0tXFx1MDAzZWhzdGF0ZSkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuQEAgLTc0Miw2ICs4NDYsOSBAQCBzdGF0aWMgYm9vbCB2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9ib290bWVtX3BhZ2Uoc3RydWN0IGh1Z2VfYm9vdG1lbV9wYWdlICptKVxcbiBcXHQgICAgIUlTX0FMSUdORUQocHNpemUsIHBtZF92bWVtbWFwX3NpemUpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbitcXHRpZiAoIWh1Z2V0bGJfaHZvX3N0YXR1c190cnlfc2V0KEhWT19BQ1RJVkUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl92bWVtbWFwLmggYi9tbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaFxcbnNpbWlsYXJpdHkgaW5kZXggOTUlXFxucmVuYW1lIGZyb20gbW0vaHVnZXRsYl92bWVtbWFwLmhcXG5yZW5hbWUgdG8gbW0vaHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmhcXG5pbmRleCAxOGI0OTA4MjUyMTUzZC4uNmIyODc4MDAxNGJjMTggMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZXRsYl92bWVtbWFwLmhcXG4rKysgYi9tbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaFxcbkBAIC02LDggKzYsOCBAQFxcbiAgKlxcbiAgKiAgICAgQXV0aG9yOiBNdWNodW4gU29uZyBcXHUwMDNjc29uZ211Y2h1bkBieXRlZGFuY2UuY29tXFx1MDAzZVxcbiAgKi9cXG4tI2lmbmRlZiBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0hcXG4tI2RlZmluZSBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0hcXG4rI2lmbmRlZiBfTU1fSFVHRVRMQl9WTUVNTUFQX0lOVEVSTkFMX0hcXG4rI2RlZmluZSBfTU1fSFVHRVRMQl9WTUVNTUFQX0lOVEVSTkFMX0hcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h1Z2V0bGIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1ibG9jay5oXFx1MDAzZVxcbkBAIC05NSw0ICs5NSw0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemFibGUoY29uc3Qgc3RydWN0IGhzdGF0ZSAqaClcXG4ge1xcbiBcXHRyZXR1cm4gaHVnZXRsYl92bWVtbWFwX29wdGltaXphYmxlX3NpemUoaCkgIT0gMDtcXG4gfVxcbi0jZW5kaWYgLyogX0xJTlVYX0hVR0VUTEJfVk1FTU1BUF9IICovXFxuKyNlbmRpZiAvKiBfTU1fSFVHRVRMQl9WTUVNTUFQX0lOVEVSTkFMX0ggKi9cXG5kaWZmIC0tZ2l0IGEvbW0vc3BhcnNlLXZtZW1tYXAuYyBiL21tL3NwYXJzZS12bWVtbWFwLmNcXG5pbmRleCA5OWUyYmUzOTY3MWI2My4uOTRkNWRhOWY4YWI3YzEgMTAwNjQ0XFxuLS0tIGEvbW0vc3BhcnNlLXZtZW1tYXAuY1xcbisrKyBiL21tL3NwYXJzZS12bWVtbWFwLmNcXG5AQCAtMzIsNyArMzIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2RtYS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3RsYmZsdXNoLmhcXHUwMDNlXFxuIFxcbi0jaW5jbHVkZSBcXFwiaHVnZXRsYl92bWVtbWFwLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJodWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaFxcXCJcXG4gXFxuIC8qXFxuICAqIEZsYWdzIGZvciB2bWVtbWFwX3BvcHVsYXRlX3JhbmdlIGFuZCBmcmllbmRzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNToxMjoyNC43MzUyMTU2ODVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMDIzOTkwNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXCIsXG4gICAgXCJIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1lbW1hcF9zcGxpdF9wbWRcIixcbiAgICBcInZtZW1tYXBfcmVtYXBfcHRlXCIsXG4gICAgXCJ2bWVtbWFwX3Jlc3RvcmVfcHRlXCIsXG4gICAgXCJ2bWVtbWFwX3JlbWFwX2ZyZWVcIixcbiAgICBcInZtZW1tYXBfcmVtYXBfYWxsb2NcIixcbiAgICBcImh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGVcIixcbiAgICBcIl9faHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW9cIixcbiAgICBcIl9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvXCIsXG4gICAgXCJ2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9mb2xpb1wiLFxuICAgIFwidm1lbW1hcF9zaG91bGRfb3B0aW1pemVfYm9vdG1lbV9wYWdlXCIsXG4gICAgXCJsYXRlX2NwdV9lbmFibGVfaHZvXCIsXG4gICAgXCJodm9fY29tcGF0aWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgQVJNNjQgc3VwcG9ydCBmb3IgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKS4gSXQgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgaW4gYG1tL2h1Z2V0bGJfdm1lbW1hcC5jYCB0byB1c2UgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgcG9wdWxhdGluZyBhbmQgdXBkYXRpbmcgdm1lbW1hcCBQTURzIGFuZCBQVEVzLiBJdCBhbHNvIGFkZHMgQ1BVIGNhcGFiaWxpdHkgY2hlY2tzIGZvciBIVk8gb24gQVJNNjQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gYWxsb2NhdGluZyBhbmQgZnJlZWluZyBIdWdlVExCIHBhZ2VzIHdpdGggSFZPIGVuYWJsZWQsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRkZjIzMDU0NjJlYjhmYWI5YWJjYjVmMTJiOTdiMWY5NzBjYmE1OTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDE1OjEyOjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggZjM3YTgxOTUwZTI1MGUuLjU1YmQ0YzA5ZjQ5NDk2IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMTIwMTMsNiArMTIwMTMsNyBAQCBGOlx0RG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuIEY6XHREb2N1bWVudGF0aW9uL21tL3ZtZW1tYXBfZGVkdXAucnN0XG4gRjpcdGZzL2h1Z2V0bGJmcy9cbiBGOlx0aW5jbHVkZS9saW51eC9odWdldGxiLmhcbitGOlx0aW5jbHVkZS9saW51eC9odWdldGxiX3ZtZW1tYXAuaFxuIEY6XHRpbmNsdWRlL3RyYWNlL2V2ZW50cy9odWdldGxiZnMuaFxuIEY6XHRtbS9odWdldGxiLmNcbiBGOlx0bW0vaHVnZXRsYl9jZ3JvdXAuY1xuQEAgLTEyMDIxLDcgKzEyMDIyLDcgQEAgRjpcdG1tL2h1Z2V0bGJfY21hLmhcbiBGOlx0bW0vaHVnZXRsYl9zeXNjdGwuY1xuIEY6XHRtbS9odWdldGxiX3N5c2ZzLmNcbiBGOlx0bW0vaHVnZXRsYl92bWVtbWFwLmNcbi1GOlx0bW0vaHVnZXRsYl92bWVtbWFwLmhcbitGOlx0bW0vaHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmhcbiBGOlx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfaHVnZXRsYl9tZW1jZy5jXG4gXG4gSFZBIFNUIE1FRElBIERSSVZFUlxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuaW5kZXggYjNhZmUwNjg4OTE5YmQuLjJhNTkxNTVmNjhkY2Q4IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXG4rKysgYi9hcmNoL2FybTY0L0tjb25maWdcbkBAIC0yNTksNiArMjU5LDcgQEAgY29uZmlnIEFSTTY0XG4gXHRzZWxlY3QgVVNFUl9TVEFDS1RSQUNFX1NVUFBPUlRcbiBcdHNlbGVjdCBWRFNPX0dFVFJBTkRPTVxuIFx0c2VsZWN0IFZNQVBfU1RBQ0tcbitcdHNlbGVjdCBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQIGlmIEFSTTY0X0hXX0FGREJNXG4gXHRoZWxwXG4gXHQgIEFSTSA2NC1iaXQgKEFBcmNoNjQpIExpbnV4IHN1cHBvcnQuXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVjYXBzLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaFxuaW5kZXggMjVjNjFjZGE5MDFjNWQuLjZkYjNlZjgyN2Y4NmE5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVjYXBzLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1Y2Fwcy5oXG5AQCAtNzUsNiArNzUsOCBAQCBjcHVjYXBfaXNfcG9zc2libGUoY29uc3QgdW5zaWduZWQgaW50IGNhcClcbiBcdFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0hXX1BFUkZfRVZFTlRTKTtcbiBcdGNhc2UgQVJNNjRfSEFTX0xTVUk6XG4gXHRcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19BUk02NF9MU1VJKTtcbitcdGNhc2UgQVJNNjRfSFZPX0NPTVBBVElCTEU6XG4rXHRcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oXG5pbmRleCBhNTc4NzBmYTk2ZGI1Yi4uZDE1MDQ4MDRmMmJlYTkgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcbkBAIC0zNjcsNiArMzY3LDE0IEBAIHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIHtcbiBcdCAqIHJvdXRpbmUgbXVzdCBjaGVjayBpdCBiZWZvcmUgdGFraW5nIGFueSBhY3Rpb24uXG4gXHQgKi9cbiBcdHZvaWQgKCpjcHVfZW5hYmxlKShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwKTtcbitcdC8qXG4rXHQgKiBJbiByYXJlIGNhc2VzLCBjYXBhYmlsaXRpZXMgYXJlICpzb21ldGltZXMqIG9wdGlvbmFsIGZvciBsYXRlIENQVXMuXG4rXHQgKiBUaGlzIGNhbGxiYWNrIGFsbG93cyBhIGNhcGFiaWxpdHkgdG8gcHJldmVudCBvbmxpbmluZyBvZlxuK1x0ICogaW5jb21wYXRpYmxlIENQVXMgd2hlbiB0aGUgY2FwYWJpbGl0eSBpcyBpbiBmYWN0IHJlcXVpcmVkLlxuK1x0ICpcbitcdCAqIFJldHVybnMgdHJ1ZSBpZmYgb25saW5pbmcgdGhlIENQVSBpcyBwZXJtaXR0ZWQuXG4rXHQgKi9cbitcdGJvb2wgKCpsYXRlX2NwdV9lbmFibGUpKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXApO1xuIFx0dW5pb24ge1xuIFx0XHRzdHJ1Y3Qge1x0LyogVG8gYmUgdXNlZCBmb3IgZXJyYXR1bSBoYW5kbGluZyBvbmx5ICovXG4gXHRcdFx0c3RydWN0IG1pZHJfcmFuZ2UgbWlkcl9yYW5nZTtcbkBAIC04ODUsNiArODkzLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCh2b2lkKVxuIFx0cmV0dXJuIGFsdGVybmF0aXZlX2hhc19jYXBfdW5saWtlbHkoQVJNNjRfSEFTX0JCTUwyX05PQUJPUlQpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgc3lzdGVtX3N1cHBvcnRzX2h2byh2b2lkKVxuK3tcbitcdHJldHVybiBhbHRlcm5hdGl2ZV9oYXNfY2FwX3VubGlrZWx5KEFSTTY0X0hWT19DT01QQVRJQkxFKTtcbit9XG4rXG4gaW50IGRvX2VtdWxhdGVfbXJzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1MzIgc3lzX3JlZywgdTMyIHJ0KTtcbiBib29sIHRyeV9lbXVsYXRlX21ycyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTMyIGlzbik7XG4gXG5AQCAtOTEwLDIyICs5MjMsMzYgQEAgc3RhdGljIGlubGluZSB1MzIgaWRfYWE2NG1tZnIwX3BhcmFuZ2VfdG9fcGh5c19zaGlmdChpbnQgcGFyYW5nZSlcbiB9XG4gXG4gLyogQ2hlY2sgd2hldGhlciBoYXJkd2FyZSB1cGRhdGUgb2YgdGhlIEFjY2VzcyBmbGFnIGlzIHN1cHBvcnRlZCAqL1xuLXN0YXRpYyBpbmxpbmUgYm9vbCBjcHVfaGFzX2h3X2FmKHZvaWQpXG4rc3RhdGljIGlubGluZSBib29sIHN1cHBvcnRzX2h3X2FmKGludCBzY29wZSlcbiB7XG4gXHR1NjQgbW1mcjE7XG4gXG4gXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FSTTY0X0hXX0FGREJNKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0Lypcbi1cdCAqIFVzZSBjYWNoZWQgdmVyc2lvbiB0byBhdm9pZCBlbXVsYXRlZCBtc3Igb3BlcmF0aW9uIG9uIEtWTVxuLVx0ICogZ3Vlc3RzLlxuLVx0ICovXG4tXHRtbWZyMSA9IHJlYWRfc2FuaXRpc2VkX2Z0cl9yZWcoU1lTX0lEX0FBNjRNTUZSMV9FTDEpO1xuK1x0aWYgKHNjb3BlID09IFNDT1BFX1NZU1RFTSkge1xuK1x0XHQvKlxuK1x0XHQgKiBVc2UgY2FjaGVkIHZlcnNpb24gdG8gYXZvaWQgZW11bGF0ZWQgbXNyIG9wZXJhdGlvbiBvbiBLVk1cbitcdFx0ICogZ3Vlc3RzLlxuK1x0XHQgKi9cbitcdFx0bW1mcjEgPSByZWFkX3Nhbml0aXNlZF9mdHJfcmVnKFNZU19JRF9BQTY0TU1GUjFfRUwxKTtcbitcdH0gZWxzZSB7XG4rXHRcdG1tZnIxID0gcmVhZF9jcHVpZChJRF9BQTY0TU1GUjFfRUwxKTtcbitcdH1cbiBcdHJldHVybiBjcHVpZF9mZWF0dXJlX2V4dHJhY3RfdW5zaWduZWRfZmllbGQobW1mcjEsXG4gXHRcdFx0XHRcdFx0SURfQUE2NE1NRlIxX0VMMV9IQUZEQlNfU0hJRlQpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgc3lzdGVtX2hhc19od19hZih2b2lkKVxuK3tcbitcdHJldHVybiBzdXBwb3J0c19od19hZihTQ09QRV9TWVNURU0pO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgY3B1X2hhc19od19hZih2b2lkKVxuK3tcbitcdHJldHVybiBzdXBwb3J0c19od19hZihTQ09QRV9MT0NBTF9DUFUpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGJvb2wgY3B1X2hhc19wYW4odm9pZClcbiB7XG4gXHR1NjQgbW1mcjEgPSByZWFkX2NwdWlkKElEX0FBNjRNTUZSMV9FTDEpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmhcbmluZGV4IGQwMzhmZjE0ZDE2Y2FlLi43M2FmNzkxMWZkODMxMyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaFxuQEAgLTExLDYgKzExLDcgQEBcbiAjZGVmaW5lIF9fQVNNX0hVR0VUTEJfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9jYWNoZWZsdXNoLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vY3B1ZmVhdHVyZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL210ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuIFxuQEAgLTY1LDYgKzY2LDEyIEBAIGV4dGVybiB2b2lkIGh1Z2VfcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuIFx0XHRcdFx0XHQgcHRlX3Qgb2xkX3B0ZSwgcHRlX3QgbmV3X3B0ZSk7XG4gXG4rI2RlZmluZSBfX0hBVkVfQVJDSF9IVk9fU1VQUE9SVEVEXG4rc3RhdGljIGlubGluZSBib29sIGFyY2hfaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl9zdXBwb3J0ZWQodm9pZClcbit7XG4rXHRyZXR1cm4gc3lzdGVtX3N1cHBvcnRzX2h2bygpO1xuK31cbitcbiAjaW5jbHVkZSBcdTAwM2Nhc20tZ2VuZXJpYy9odWdldGxiLmhcdTAwM2VcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF9odWdldGxiX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5pbmRleCAxYjQ1MDlkMzM4MmM2My4uMjZiMDVmOGI3MGNkMmUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbkBAIC0xMjEsNCArMTIxLDU4IEBAIHBtZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZHAsIHBndGFibGVfdCBwdGVwKVxuIFx0XHQgICAgICAgUE1EX1RZUEVfVEFCTEUgfCBQTURfVEFCTEVfQUYgfCBQTURfVEFCTEVfUFhOKTtcbiB9XG4gXG4rI2RlZmluZSBfX0hBVkVfQVJDSF9UUllfUE9QVUxBVEVfVk1FTU1BUF9QTURcbitzdGF0aWMgaW5saW5lIGludCB0cnlfcG9wdWxhdGVfdm1lbW1hcF9wbWQocG1kX3QgKnBtZHAsIHB0ZV90ICpwZ3RhYmxlLFxuK1x0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFkZHIpXG4re1xuK1x0Y29uc3QgaW50IG1heF9hdHRlbXB0cyA9IDE2O1xuK1x0aW50IGF0dGVtcHRzID0gMDtcbitcdHBtZF90IG9sZF9wbWQsIG5ld19wbWQ7XG4rXG4rXHRpZiAoIXN5c3RlbV9zdXBwb3J0c19odm8oKSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0aWYgKHN5c3RlbV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KCkpIHtcbitcdFx0LypcbitcdFx0ICogQkJNTDJfTk9BQk9SVCBhbGxvd3MgYmxvY2stXHUwMDNldGFibGUgdHJhbnNpdGlvbnMgaWYgdGhlIFBURXNcbitcdFx0ICogdW5kZXJuZWF0aCBkbyBub3QgY29uZmxpY3Qgd2l0aCBleGlzdGluZywgcG90ZW50aWFsbHkgY2FjaGVkXG4rXHRcdCAqIHRyYW5zbGF0aW9ucy5cbitcdFx0ICovXG4rXHRcdHBtZF9wb3B1bGF0ZV9rZXJuZWwoXHUwMDI2aW5pdF9tbSwgcG1kcCwgcGd0YWJsZSk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0bmV3X3BtZCA9IF9fcG1kKF9fcGh5c190b19wbWRfdmFsKF9fcGEocGd0YWJsZSkpIHxcbitcdFx0XHRQTURfVFlQRV9UQUJMRSB8IFBNRF9UQUJMRV9BRiB8IFBNRF9UQUJMRV9VWE4pO1xuK1xuK1x0b2xkX3BtZCA9IHBtZHBfZ2V0KHBtZHApO1xuK1xuK1x0ZG8ge1xuK1x0XHRpZiAoV0FSTl9PTl9PTkNFKCFwbWRfdmFsaWQob2xkX3BtZCkpKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRpZiAoV0FSTl9PTl9PTkNFKCFwbWRfbGVhZihvbGRfcG1kKSkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdC8qIFdlIHNob3VsZCBuZXZlciBnZXQgYSBjb250aWd1b3VzIFBNRCBoZXJlLiAqL1xuK1x0XHRpZiAoV0FSTl9PTl9PTkNFKHBtZF9jb250KG9sZF9wbWQpKSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0aWYgKHBtZF95b3VuZyhvbGRfcG1kKSkge1xuK1x0XHRcdC8qIF9fcHRlcF9jbGVhcl95b3VuZygpIHJldHVybnMgdGhlIG92ZXJ3cml0dGVuIFBURSAqL1xuK1x0XHRcdG9sZF9wbWQgPSBwdGVfcG1kKHB0ZV9ta29sZChfX3B0ZXBfY2xlYXJfeW91bmcoKHB0ZV90ICopcG1kcCkpKTtcbitcbitcdFx0XHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGFkZHIgKyBQTURfU0laRSk7XG4rXHRcdH1cbitcdC8qXG4rXHQgKiBUcmFuc2xhdGlvbnMgd2l0aG91dCBBRiBjYW5ub3QgYmUgY2FjaGVkLCBzbyB3ZSBjYW4gcmVwbGFjZVxuK1x0ICogdGhlbSB3aXRob3V0IEJCTS5cbitcdCAqL1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnX3JlbGF4ZWQoXHUwMDI2cG1kX3ZhbCgqcG1kcCksIFx1MDAyNnBtZF92YWwob2xkX3BtZCksXG4rXHRcdFx0XHQgICAgICBwbWRfdmFsKG5ld19wbWQpKSBcdTAwMjZcdTAwMjZcbitcdFx0ICsrYXR0ZW1wdHMgXHUwMDNjIG1heF9hdHRlbXB0cyk7XG4rXG4rXHRyZXR1cm4gYXR0ZW1wdHMgPT0gbWF4X2F0dGVtcHRzID8gLUVBR0FJTiA6IDA7XG4rfVxuK1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDI3Njg5YzYyYmQyNWRkLi43YjExYWE0MWQwYTA3NCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTEzMDIsOCArMTMwMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3B0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdF9fc2V0X3B0ZShwdGVwLCBfX3B0ZSgwKSk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApXG4rc3RhdGljIGlubGluZSBwdGVfdCBfX3B0ZXBfY2xlYXJfeW91bmcocHRlX3QgKnB0ZXApXG4ge1xuIFx0cHRlX3Qgb2xkX3B0ZSwgcHRlO1xuIFxuQEAgLTEzMTUsNyArMTMxNCwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgX19wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0XHQgICAgICAgcHRlX3ZhbChvbGRfcHRlKSwgcHRlX3ZhbChwdGUpKTtcbiBcdH0gd2hpbGUgKHB0ZV92YWwocHRlKSAhPSBwdGVfdmFsKG9sZF9wdGUpKTtcbiBcbi1cdHJldHVybiBwdGVfeW91bmcocHRlKTtcbitcdHJldHVybiBwdGU7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApXG4re1xuK1x0cmV0dXJuIHB0ZV95b3VuZyhfX3B0ZXBfY2xlYXJfeW91bmcocHRlcCkpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgX19wdGVwX2NsZWFyX2ZsdXNoX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuQEAgLTE1OTgsNyArMTYwMyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbW11X2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuICAqIHBhZ2UgYWZ0ZXIgZm9yaygpICsgQ29XIGZvciBwZm4gbWFwcGluZ3MuIFdlIGRvbid0IGFsd2F5cyBoYXZlIGFcbiAgKiBoYXJkd2FyZS1tYW5hZ2VkIGFjY2VzcyBmbGFnIG9uIGFybTY0LlxuICAqL1xuLSNkZWZpbmUgYXJjaF9oYXNfaHdfcHRlX3lvdW5nXHRcdGNwdV9oYXNfaHdfYWZcbisjZGVmaW5lIGFyY2hfaGFzX2h3X3B0ZV95b3VuZ1x0XHRzeXN0ZW1faGFzX2h3X2FmXG4gXG4gI2lmZGVmIENPTkZJR19BUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VOR1xuICNkZWZpbmUgYXJjaF9oYXNfaHdfbm9ubGVhZl9wbWRfeW91bmdcdHN5c3RlbV9zdXBwb3J0c19oYWZ0XG5AQCAtMTYwOCw3ICsxNjEzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4gICogRXhwZXJpbWVudGFsbHksIGl0J3MgY2hlYXAgdG8gc2V0IHRoZSBhY2Nlc3MgZmxhZyBpbiBoYXJkd2FyZSBhbmQgd2VcbiAgKiBiZW5lZml0IGZyb20gcHJlZmF1bHRpbmcgbWFwcGluZ3MgYXMgJ29sZCcgdG8gc3RhcnQgd2l0aC5cbiAgKi9cbi0jZGVmaW5lIGFyY2hfd2FudHNfb2xkX3ByZWZhdWx0ZWRfcHRlXHRjcHVfaGFzX2h3X2FmXG4rI2RlZmluZSBhcmNoX3dhbnRzX29sZF9wcmVmYXVsdGVkX3B0ZVx0c3lzdGVtX2hhc19od19hZlxuIFxuIC8qXG4gICogUmVxdWVzdCBleGVjIG1lbW9yeSBpcyByZWFkIGludG8gcGFnZWNhY2hlIGluIGF0IGxlYXN0IDY0SyBmb2xpb3MuIFRoaXMgc2l6ZVxuQEAgLTE3OTMsNiArMTc5OCw0OCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0X19wdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApO1xuIH1cbiBcbisjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9VUERBVEVfVk1FTU1BUF9QVEVcbitzdGF0aWMgaW5saW5lIGludCB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4rXHRcdFx0XHRcdCBjb25zdCBwdGVfdCBwdGUpXG4re1xuK1x0Y29uc3QgaW50IG1heF9hdHRlbXB0cyA9IDE2O1xuK1x0aW50IGF0dGVtcHRzID0gMDtcbitcdHB0ZV90IG9sZF9wdGU7XG4rXG4rXHRpZiAoIXN5c3RlbV9zdXBwb3J0c19odm8oKSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LyogVGhpcyByb3V0aW5lIGlzIG9ubHkgdG8gYmUgdXNlZCBmb3IgdmFsaWQtdG8tdmFsaWQgdHJhbnNpdGlvbnMuICovXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFwdGVfdmFsaWQocHRlKSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0b2xkX3B0ZSA9IF9fcHRlcF9nZXQocHRlcCk7XG4rXG4rXHRkbyB7XG4rXHRcdGlmIChXQVJOX09OX09OQ0UoIXB0ZV92YWxpZChvbGRfcHRlKSkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdC8qIFdlIHNob3VsZCBuZXZlciBnZXQgYSBjb250aWd1b3VzIFBURSBoZXJlLiAqL1xuK1x0XHRpZiAoV0FSTl9PTl9PTkNFKHB0ZV92YWxpZF9jb250KG9sZF9wdGUpKSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0aWYgKHB0ZV95b3VuZyhvbGRfcHRlKSkge1xuK1x0XHRcdC8qIF9fcHRlcF9jbGVhcl95b3VuZygpIHJldHVybnMgdGhlIG92ZXJ3cml0dGVuIFBURSAqL1xuK1x0XHRcdG9sZF9wdGUgPSBwdGVfbWtvbGQoX19wdGVwX2NsZWFyX3lvdW5nKHB0ZXApKTtcbitcbitcdFx0XHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGFkZHIgKyBQQUdFX1NJWkUpO1xuK1x0XHR9XG4rXHQvKlxuK1x0ICogVHJhbnNsYXRpb25zIHdpdGhvdXQgQUYgY2Fubm90IGJlIGNhY2hlZCwgc28gd2UgY2FuIHJlcGxhY2VcbitcdCAqIHRoZW0gd2l0aG91dCBCQk0uXG4rXHQgKi9cbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZ19yZWxheGVkKFx1MDAyNnB0ZV92YWwoKnB0ZXApLCBcdTAwMjZwdGVfdmFsKG9sZF9wdGUpLFxuK1x0XHRcdFx0ICAgICAgcHRlX3ZhbChwdGUpKSBcdTAwMjZcdTAwMjZcbitcdFx0ICsrYXR0ZW1wdHMgXHUwMDNjIG1heF9hdHRlbXB0cyk7XG4rXG4rXHRyZXR1cm4gYXR0ZW1wdHMgPT0gbWF4X2F0dGVtcHRzID8gLUVBR0FJTiA6IDA7XG4rfVxuK1xuICNkZWZpbmUgY2xlYXJfZnVsbF9wdGVzIGNsZWFyX2Z1bGxfcHRlc1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9mdWxsX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRcdHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBpbnQgbnIsIGludCBmdWxsKVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xuaW5kZXggOWEyMmRmMGM1MTIwZjMuLjY1YmIzYzdjOTU5NTJiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXG4rKysgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNcbkBAIC03Niw2ICs3Niw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2FzYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmNwdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvaXNvbGF0aW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdldGxiX3ZtZW1tYXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9hcm1fcG11djMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9jcHUuaFx1MDAzZVxuQEAgLTIxNzIsNiArMjE3MywzMSBAQCBzdGF0aWMgYm9vbCBoYXNfYmJtbDJfbm9hYm9ydChjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwcywgaW50IHNjb1xuIFx0cmV0dXJuIGNwdV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KCk7XG4gfVxuIFxuK3N0YXRpYyBib29sIGh2b19jb21wYXRpYmxlKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXBzLCBpbnQgc2NvcGUpXG4re1xuK1x0LypcbitcdCAqIFdlIG5lZWQgSFcgQUYgc3VwcG9ydCB0byBzdXBwb3J0IGNoYW5naW5nIHZtZW1tYXAgbWFwcGluZyBsZXZlbCBhbmRcbitcdCAqIE9BIHdpdGhvdXQgdGFraW5nIGZhdWx0cy5cbitcdCAqL1xuK1x0cmV0dXJuIHN1cHBvcnRzX2h3X2FmKHNjb3BlKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgbGF0ZV9jcHVfZW5hYmxlX2h2byhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqX191bnVzZWQpXG4re1xuKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbitcdGlmIChjcHVfaGFzX2h3X2FmKCkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0LypcbitcdCAqIElmIHRoZSBDUFUgZG9lcyBub3Qgc3VwcG9ydCBIVyBBRiwgd2UgY2Fubm90IG9ubGluZSBpdCBpZiBIVk8gaXNcbitcdCAqIGN1cnJlbnRseSBpbiB1c2UuXG4rXHQgKi9cbitcdHJldHVybiBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKCk7XG4rI2Vsc2VcbitcdHJldHVybiB0cnVlO1xuKyNlbmRpZlxuK31cbitcbiBzdGF0aWMgdm9pZCBjcHVfZW5hYmxlX3Bhbihjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqX191bnVzZWQpXG4ge1xuIFx0LypcbkBAIC0zMDY3LDYgKzMwOTMsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2ZlYXR1cmVzW10gPSB7XG4gXHRcdC50eXBlID0gQVJNNjRfQ1BVQ0FQX0VBUkxZX0xPQ0FMX0NQVV9GRUFUVVJFLFxuIFx0XHQubWF0Y2hlcyA9IGhhc19iYm1sMl9ub2Fib3J0LFxuIFx0fSxcbitcdHtcbitcdFx0LmRlc2MgPSBcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gU3VwcG9ydFwiLFxuK1x0XHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hWT19DT01QQVRJQkxFLFxuK1x0XHQudHlwZSA9IEFSTTY0X0NQVUNBUF9TQ09QRV9TWVNURU0gfFxuK1x0XHRcdEFSTTY0X0NQVUNBUF9PUFRJT05BTF9GT1JfTEFURV9DUFUgfFxuK1x0XHRcdEFSTTY0X0NQVUNBUF9QRVJNSVRURURfRk9SX0xBVEVfQ1BVLFxuK1x0XHQubWF0Y2hlcyA9IGh2b19jb21wYXRpYmxlLFxuK1x0XHQubGF0ZV9jcHVfZW5hYmxlID0gbGF0ZV9jcHVfZW5hYmxlX2h2byxcbitcdH0sXG4gXHR7XG4gXHRcdC5kZXNjID0gXCI1Mi1iaXQgVmlydHVhbCBBZGRyZXNzaW5nIGZvciBLVk0gKExQQTIpXCIsXG4gXHRcdC5jYXBhYmlsaXR5ID0gQVJNNjRfSEFTX0xQQTIsXG5AQCAtMzY2OSw2ICszNzA0LDE0IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9sb2NhbF9jcHVfY2Fwcyh1MTYgc2NvcGVfbWFzaylcbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoIWNwdV9oYXNfY2FwIFx1MDAyNlx1MDAyNiAhY3B1Y2FwX2xhdGVfY3B1X29wdGlvbmFsKGNhcHMpKVxuIFx0XHRcdFx0YnJlYWs7XG4rXG4rXHRcdFx0LypcbitcdFx0XHQgKiBTb21lIG9wdGlvbmFsIGZlYXR1cmVzIG1heSBpbiBmYWN0IGJlIHJlcXVpcmVkIGR1ZVxuK1x0XHRcdCAqIHRvIHBhcnRpY3VsYXIgcnVudGltZSBjb25kaXRpb25zLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChjYXBzLVx1MDAzZWxhdGVfY3B1X2VuYWJsZSBcdTAwMjZcdTAwMjYgIWNhcHMtXHUwMDNlbGF0ZV9jcHVfZW5hYmxlKGNhcHMpKVxuK1x0XHRcdFx0YnJlYWs7XG4rXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBXZSBoYXZlIHRvIGlzc3VlIGNwdV9lbmFibGUoKSBpcnJlc3BlY3RpdmUgb2ZcbiBcdFx0XHQgKiB3aGV0aGVyIHRoZSBDUFUgaGFzIGl0IG9yIG5vdCwgYXMgaXQgaXMgZW5hYmVsZFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xuaW5kZXggOWI4NWE4NGY2ZmQ0OTQuLjYzMDk1M2Q1OWM1Mjc2IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzXG4rKysgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcbkBAIC03MCw2ICs3MCw3IEBAIEhBU19WSVJUX0hPU1RfRVhUTlxuIEhBU19XRlhUXG4gSEFTX1hOWFxuIEhBRlRcbitIVk9fQ09NUEFUSUJMRVxuIEhXX0RCTVxuIEtWTV9IVkhFXG4gS1ZNX1BST1RFQ1RFRF9NT0RFXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5pbmRleCAyNDhmNjJkMGI1OTBlYy4uOTMyMmQ5NjJjOWNjODAgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuQEAgLTI0LDYgKzI0LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsIHBndGFibGVfdCBwdGUpXG4gXHRzZXRfcG1kKHBtZCwgX19wbWQoKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHB0ZSkpKTtcbiB9XG4gXG4rI2RlZmluZSBfX0hBVkVfQVJDSF9UUllfUE9QVUxBVEVfVk1FTU1BUF9QTURcbitzdGF0aWMgaW5saW5lIGludCB0cnlfcG9wdWxhdGVfdm1lbW1hcF9wbWQocG1kX3QgKnBtZHAsIHB0ZV90ICpwZ3RhYmxlLFxuK1x0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFkZHIpXG4re1xuK1x0cG1kX3BvcHVsYXRlX2tlcm5lbChcdTAwMjZpbml0X21tLCBwbWRwLCBwZ3RhYmxlKTtcbitcdHJldHVybiAwO1xuK31cbitcbiAjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERURcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgcHVkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkLCBwbWRfdCAqcG1kKVxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggMjIzNTI4YzA0ZDczOTIuLmU3YjY1MDU2ZWY3Mzg0IDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4rKysgYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC02MzgsNiArNjM4LDE0IEBAIHN0YXRpYyBpbmxpbmUgbG9uZyBwbWRfcHJvdG5vbmUocG1kX3QgcG1kKVxuICNkZWZpbmUgcG1kX2xlYWYocG1kKVx0XHQoKHBtZF92YWwocG1kKSBcdTAwMjYgX1BBR0VfSFVHRSkgIT0gMClcbiAjZGVmaW5lIHB1ZF9sZWFmKHB1ZClcdFx0KChwdWRfdmFsKHB1ZCkgXHUwMDI2IF9QQUdFX0hVR0UpICE9IDApXG4gXG4rI2RlZmluZSBfX0hBVkVfQVJDSF9UUllfVVBEQVRFX1ZNRU1NQVBfUFRFXG4rc3RhdGljIGlubGluZSBpbnQgdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuK1x0XHRcdFx0XHQgcHRlX3QgcHRlKVxuK3tcbitcdHNldF9wdGUocHRlcCwgcHRlKTtcbitcdHJldHVybiAwO1xuK31cbitcbiAvKlxuICAqIFdlIHByb3ZpZGUgb3VyIG93biBnZXRfdW5tYXBwZWQgYXJlYSB0byBjb3BlIHdpdGggdGhlIHZpcnR1YWwgYWxpYXNpbmdcbiAgKiBjb25zdHJhaW50cyBwbGFjZWQgb24gdXMgYnkgdGhlIGNhY2hlIGFyY2hpdGVjdHVyZS5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5pbmRleCA3NzBjZTE4YTczMjhiOC4uOGRiYmU2MmIyNTc0MjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbkBAIC0zMSw2ICszMSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0c2V0X3BtZChwbWQsIF9fcG1kKChwZm4gXHUwMDNjXHUwMDNjIF9QQUdFX1BGTl9TSElGVCkgfCBfUEFHRV9UQUJMRSkpO1xuIH1cbiBcbisjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9QT1BVTEFURV9WTUVNTUFQX1BNRFxuK3N0YXRpYyBpbmxpbmUgaW50IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWRfdCAqcG1kcCwgcHRlX3QgKnBndGFibGUsXG4rXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcilcbit7XG4rXHRwbWRfcG9wdWxhdGVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHBtZHAsIHBndGFibGUpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuICNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQsIHBtZF90ICpwbWQpXG4ge1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDVkNTc1NmJkYTgyZTNkLi5hMTFjNTY5ZWUyZjA2ZiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4rKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTExNjIsNiArMTE2MiwxNCBAQCBzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZF9tb2RpZnkocHVkX3QgcHVkLCBwZ3Byb3RfdCBuZXdwcm90KVxuIFxuICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiBcbisjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9VUERBVEVfVk1FTU1BUF9QVEVcbitzdGF0aWMgaW5saW5lIGludCB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4rXHRcdFx0XHRcdCBwdGVfdCBwdGUpXG4re1xuK1x0c2V0X3B0ZShwdGVwLCBwdGUpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qXG4gICogRW5jb2RlL2RlY29kZSBzd2FwIGVudHJpZXMgYW5kIHN3YXAgUFRFcy4gU3dhcCBQVEVzIGFyZSBhbGwgUFRFcyB0aGF0XG4gICogYXJlICFwdGVfbm9uZSgpIFx1MDAyNlx1MDAyNiAhcHRlX3ByZXNlbnQoKS5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbmluZGV4IGM4ODY5MWIxNWYzYzY3Li40N2I1NmJiZDYyMzYxNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5AQCAtODIsNiArODIsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCxcbiBcdHNldF9wbWQocG1kLCBfX3BtZCgoKHB0ZXZhbF90KXBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkgfCBfUEFHRV9UQUJMRSkpO1xuIH1cbiBcbisjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9QT1BVTEFURV9WTUVNTUFQX1BNRFxuK3N0YXRpYyBpbmxpbmUgaW50IHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZChwbWRfdCAqcG1kcCwgcHRlX3QgKnBndGFibGUsXG4rXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcilcbit7XG4rXHRwbWRfcG9wdWxhdGVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHBtZHAsIHBndGFibGUpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuICNpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDJcbiBleHRlcm4gdm9pZCBfX19wbWRfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcG1kX3QgKnBtZCk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCBhYzI5NWNhNmM5MmY5OS4uOTc0MTUxNTY0MDcxY2IgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTEzNzIsNiArMTM3MiwxNCBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIH1cbiAjZW5kaWZcbiBcbisjZGVmaW5lIF9fSEFWRV9BUkNIX1RSWV9VUERBVEVfVk1FTU1BUF9QVEVcbitzdGF0aWMgaW5saW5lIGludCB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4rXHRcdFx0XHRcdCBwdGVfdCBwdGUpXG4re1xuK1x0c2V0X3B0ZShwdGVwLCBwdGUpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuICNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oXG5pbmRleCBlMWEyZTFiN2M4ZTdiOC4uYzQ3OTZjNTRiNzAyYTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaFxuKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmhcbkBAIC0xMjgsNCArMTI4LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKHZvaWQpXG4gfVxuICNlbmRpZiAvKiBfX0hBVkVfQVJDSF9HSUdBTlRJQ19QQUdFX1JVTlRJTUVfU1VQUE9SVEVEICovXG4gXG4rI2lmbmRlZiBfX0hBVkVfQVJDSF9IVk9fU1VQUE9SVEVEXG4rc3RhdGljIGlubGluZSBib29sIGFyY2hfaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl9zdXBwb3J0ZWQodm9pZClcbit7XG4rXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApO1xuK31cbisjZW5kaWYgLyogX19IQVZFX0FSQ0hfSFZPX1NVUFBPUlRFRCAqL1xuK1xuICNlbmRpZiAvKiBfQVNNX0dFTkVSSUNfSFVHRVRMQl9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiX3ZtZW1tYXAuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYl92bWVtbWFwLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYTY3MWViNGE0ZmY0NjZcbi0tLSAvZGV2L251bGxcbisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYl92bWVtbWFwLmhcbkBAIC0wLDAgKzEsMjAgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKyNpZm5kZWYgX0xJTlVYX0hVR0VUTEJfVk1FTU1BUF9IXG4rI2RlZmluZSBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuK1xuK2Jvb2wgaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZSh2b2lkKTtcbitcbisjZWxzZSAvKiBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVAgKi9cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZSh2b2lkKVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbitcbisjZW5kaWZcbitcbisjZW5kaWYgLyogX0xJTlVYX0hVR0VUTEJfVk1FTU1BUF9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaFxuaW5kZXggOTE3NGZhNTliYmM1NGQuLmVkNDQ2ZDk1Y2EzNzMwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGdhbGxvYy5oXG5AQCAtMjYsNCArMjYsMjQgQEBcbiBcdFx0XHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKGFkZHIsIGFkZHIpO1x0XHRcXFxuIFx0fSB3aGlsZSAoMClcbiBcbisjaWZuZGVmIF9fSEFWRV9BUkNIX1RSWV9QT1BVTEFURV9WTUVNTUFQX1BNRFxuKy8qXG4rICogdHJ5X3BvcHVsYXRlX3ZtZW1tYXBfcG1kIC0gUG9wdWxhdGUgYSBQTUQgdGhhdCBpcyBpbiB1c2UgYnkgdGhlIHZtZW1tYXAuXG4rICogQGFkZHI6IEJhc2UgYWRkcmVzcyBvZiB0aGUgcmVtYXBwZWQgUE1ELlxuKyAqIEBwbWRwOiBQYWdlIHRhYmxlIHBvaW50ZXIgdG8gYmUgb3ZlcndyaXR0ZW4uXG4rICogQHBndGFibGU6IFBvaW50ZXIgdG8gdGhlIHBhZ2UgdGFibGUgdGhhdCB0aGUgbmV3IFBNRCB3aWxsIHBvaW50IHRvLlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHRvIGJlIHVzZWQgdG8gdXBkYXRlIFBNRHMgdGhhdCBtYXAgdGhlIHZtZW1tYXAgdG9cbisgKiBwb2ludCB0byBhIHBhZ2Ugb2YgYWxyZWFkeS1wb3B1bGF0ZWQgUFRFcyB0aGF0IG1hcCB0aGUgc2FtZSBwYWdlcy5cbisgKlxuKyAqIEltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgZW5zdXJlIHRoYXQsIHdoaWxlIHRoZSB1cGRhdGUgaXMgdGFraW5nXG4rICogcGxhY2UsIENQVXMgd2lsbCBub3QgZmF1bHQgb24gdGhlIHJlbWFwcGVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCB0cnlfcG9wdWxhdGVfdm1lbW1hcF9wbWQocG1kX3QgKnBtZHAsIHB0ZV90ICpwZ3RhYmxlLFxuK1x0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFkZHIpXG4re1xuK1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK31cbisjZW5kaWZcbitcbiAjZW5kaWYgLyogX0xJTlVYX1BHQUxMT0NfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbmluZGV4IDI5ODFlMzg2ZGE3YjNjLi5lMWFiY2NmNzZiYjQ2MyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxuQEAgLTQ1Nyw2ICs0NTcsMjcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gI2VuZGlmXG4gI2RlZmluZSBzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBwdGUpIHNldF9wdGVzKG1tLCBhZGRyLCBwdGVwLCBwdGUsIDEpXG4gXG4rI2lmbmRlZiBfX0hBVkVfQVJDSF9UUllfVVBEQVRFX1ZNRU1NQVBfUFRFXG4rLypcbisgKiB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlIC0gUmVtYXAgUFRFcyB1c2VkIGJ5IHRoZSB2bWVtbWFwLlxuKyAqIEBhZGRyOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHJlbWFwcGVkIFBURS5cbisgKiBAcHRlcDogUGFnZSB0YWJsZSBwb2ludGVyIHRvIGJlIG92ZXJ3cml0dGVuLlxuKyAqIEBwdGU6IFBhZ2UgdGFibGUgZW50cnkgdG8gd3JpdGUuXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdG8gYmUgdXNlZCB0byB1cGRhdGUgUFRFcyB0aGF0IG1hcCB0aGUgdm1lbW1hcC4gVGhlXG4rICogb25seSB2YWxpZCB0cmFuc2l0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBmdW5jdGlvbiBhcmU6IGxlYWYtbGV2ZWxcbisgKiAoUEFHRV9TSVpFKSwgdmFsaWQtdG8tdmFsaWQuIFRoZSBwZm4gYW5kIHByb3QgYml0cyBtYXkgYmUgY2hhbmdlZC5cbisgKlxuKyAqIEltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgZW5zdXJlIHRoYXQsIHdoaWxlIHRoZSB1cGRhdGUgaXMgdGFraW5nXG4rICogcGxhY2UsIENQVXMgd2lsbCBub3QgZmF1bHQgb24gdGhlIHJlbWFwcGVkIHZpcnR1YWwgYWRkcmVzcy5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4rXHRcdFx0XHRcdCBwdGVfdCBwdGUpXG4re1xuK1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK31cbisjZW5kaWZcbitcbiAjaWZuZGVmIF9fSEFWRV9BUkNIX1BURVBfU0VUX0FDQ0VTU19GTEFHU1xuIGV4dGVybiBpbnQgcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXAsXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA1NzEyMTJiODA4MzVlYy4uMjk4NjczYTZjNTdjNWMgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTQ3LDcgKzQ3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ub2RlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXRsYl92bWVtbWFwLmhcIlxuKyNpbmNsdWRlIFwiaHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmhcIlxuICNpbmNsdWRlIFwiaHVnZXRsYl9jbWEuaFwiXG4gI2luY2x1ZGUgXCJodWdldGxiX2ludGVybmFsLmhcIlxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmhcdTAwM2VcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiX3N5c2ZzLmMgYi9tbS9odWdldGxiX3N5c2ZzLmNcbmluZGV4IDc5ZWNlOTE0MDZiZmE0Li44M2E5NWY1MTQyZjVhNCAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGJfc3lzZnMuY1xuKysrIGIvbW0vaHVnZXRsYl9zeXNmcy5jXG5AQCAtOCw3ICs4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlLWlzb2xhdGlvbi5oXHUwMDNlXG4gXG4tI2luY2x1ZGUgXCJodWdldGxiX3ZtZW1tYXAuaFwiXG4rI2luY2x1ZGUgXCJodWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJodWdldGxiX2ludGVybmFsLmhcIlxuIFxuICNkZWZpbmUgSFNUQVRFX0FUVFJfUk8oX25hbWUpIFxcXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl92bWVtbWFwLmMgYi9tbS9odWdldGxiX3ZtZW1tYXAuY1xuaW5kZXggMTMzYjQ2ZGZiMDlmNWMuLjdlN2Y4NTc5Y2MyYWU1IDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYl92bWVtbWFwLmNcbisrKyBiL21tL2h1Z2V0bGJfdm1lbW1hcC5jXG5AQCAtMTYsOSArMTYsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbWRlYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdld2Fsay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGdhbGxvYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYl92bWVtbWFwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiZmx1c2guaFx1MDAzZVxuLSNpbmNsdWRlIFwiaHVnZXRsYl92bWVtbWFwLmhcIlxuKyNpbmNsdWRlIFwiaHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmhcIlxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gXG4gLyoqXG5AQCAtMzQsNyArMzYsNyBAQFxuICAqXHRcdFx0b3BlcmF0aW9ucy5cbiAgKi9cbiBzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrIHtcbi1cdHZvaWRcdFx0XHQoKnJlbWFwX3B0ZSkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0aW50XHRcdFx0KCpyZW1hcF9wdGUpKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrICp3YWxrKTtcbiBcbiBcdHVuc2lnbmVkIGxvbmdcdFx0bnJfd2Fsa2VkO1xuQEAgLTU0LDYgKzU2LDcgQEAgc3RhdGljIGludCB2bWVtbWFwX3NwbGl0X3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgcGFnZSAqaGVhZCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHQgICAgIHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspXG4ge1xuIFx0cG1kX3QgX19wbWQ7XG4rXHRpbnQgcmV0O1xuIFx0aW50IGk7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHIgPSBzdGFydDtcbiBcdHB0ZV90ICpwZ3RhYmxlO1xuQEAgLTczLDggKzc2LDE1IEBAIHN0YXRpYyBpbnQgdm1lbW1hcF9zcGxpdF9wbWQocG1kX3QgKnBtZCwgc3RydWN0IHBhZ2UgKmhlYWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdHNldF9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBlbnRyeSk7XG4gXHR9XG4gXG4rXHRyZXQgPSAwO1xuIFx0c3Bpbl9sb2NrKFx1MDAyNmluaXRfbW0ucGFnZV90YWJsZV9sb2NrKTtcbiBcdGlmIChsaWtlbHkocG1kX2xlYWYoKnBtZCkpKSB7XG4rXHRcdC8qIE1ha2UgcHRlIHZpc2libGUgYmVmb3JlIHBtZC4gU2VlIGNvbW1lbnQgaW4gcG1kX2luc3RhbGwoKS4gKi9cbitcdFx0c21wX3dtYigpO1xuK1x0XHRyZXQgPSB0cnlfcG9wdWxhdGVfdm1lbW1hcF9wbWQocG1kLCBwZ3RhYmxlLCBzdGFydCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBmcmVlO1xuK1xuIFx0XHQvKlxuIFx0XHQgKiBIaWdoZXIgb3JkZXIgYWxsb2NhdGlvbnMgZnJvbSBidWRkeSBhbGxvY2F0b3IgbXVzdCBiZSBhYmxlIHRvXG4gXHRcdCAqIGJlIHRyZWF0ZWQgYXMgaW5kZXBlbmRlbnQgc21hbGwgcGFnZXMgKGFzIHRoZXkgY2FuIGJlIGZyZWVkXG5AQCAtODMsMTcgKzkzLDE3IEBAIHN0YXRpYyBpbnQgdm1lbW1hcF9zcGxpdF9wbWQocG1kX3QgKnBtZCwgc3RydWN0IHBhZ2UgKmhlYWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdGlmICghUGFnZVJlc2VydmVkKGhlYWQpKVxuIFx0XHRcdHNwbGl0X3BhZ2UoaGVhZCwgZ2V0X29yZGVyKFBNRF9TSVpFKSk7XG4gXG4tXHRcdC8qIE1ha2UgcHRlIHZpc2libGUgYmVmb3JlIHBtZC4gU2VlIGNvbW1lbnQgaW4gcG1kX2luc3RhbGwoKS4gKi9cbi1cdFx0c21wX3dtYigpO1xuLVx0XHRwbWRfcG9wdWxhdGVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHBtZCwgcGd0YWJsZSk7XG4gXHRcdGlmICghKHdhbGstXHUwMDNlZmxhZ3MgXHUwMDI2IFZNRU1NQVBfU1BMSVRfTk9fVExCX0ZMVVNIKSlcbiBcdFx0XHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBzdGFydCArIFBNRF9TSVpFKTtcbi1cdH0gZWxzZSB7XG4tXHRcdHB0ZV9mcmVlX2tlcm5lbChcdTAwMjZpbml0X21tLCBwZ3RhYmxlKTtcbi1cdH1cbi1cdHNwaW5fdW5sb2NrKFx1MDAyNmluaXRfbW0ucGFnZV90YWJsZV9sb2NrKTtcbitcdH0gZWxzZVxuK1x0XHRnb3RvIGZyZWU7XG4gXG4tXHRyZXR1cm4gMDtcbitvdXQ6XG4rXHRzcGluX3VubG9jayhcdTAwMjZpbml0X21tLnBhZ2VfdGFibGVfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK2ZyZWU6XG4rXHRwdGVfZnJlZV9rZXJuZWwoXHUwMDI2aW5pdF9tbSwgcGd0YWJsZSk7XG4rXHRnb3RvIG91dDtcbiB9XG4gXG4gc3RhdGljIGludCB2bWVtbWFwX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5AQCAtMTQxLDExICsxNTEsMTMgQEAgc3RhdGljIGludCB2bWVtbWFwX3B0ZV9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIHtcbiBcdHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKnZtZW1tYXBfd2FsayA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbitcdGludCByZXQgPSAwO1xuIFxuLVx0dm1lbW1hcF93YWxrLVx1MDAzZXJlbWFwX3B0ZShwdGUsIGFkZHIsIHZtZW1tYXBfd2Fsayk7XG4tXHR2bWVtbWFwX3dhbGstXHUwMDNlbnJfd2Fsa2VkKys7XG4rXHRyZXQgPSB2bWVtbWFwX3dhbGstXHUwMDNlcmVtYXBfcHRlKHB0ZSwgYWRkciwgdm1lbW1hcF93YWxrKTtcbitcdGlmICghcmV0KVxuK1x0XHR2bWVtbWFwX3dhbGstXHUwMDNlbnJfd2Fsa2VkKys7XG4gXG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgdm1lbW1hcF9yZW1hcF9vcHMgPSB7XG5AQCAtMTY0LDEzICsxNzYsMTEgQEAgc3RhdGljIGludCB2bWVtbWFwX3JlbWFwX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0cmV0ID0gd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZShzdGFydCwgZW5kLCBcdTAwMjZ2bWVtbWFwX3JlbWFwX29wcyxcbiBcdFx0XHRcdCAgICBOVUxMLCB3YWxrKTtcbiBcdG1tYXBfcmVhZF91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0aWYgKHdhbGstXHUwMDNlcmVtYXBfcHRlIFx1MDAyNlx1MDAyNiAhKHdhbGstXHUwMDNlZmxhZ3MgXHUwMDI2IFZNRU1NQVBfUkVNQVBfTk9fVExCX0ZMVVNIKSlcbiBcdFx0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKTtcbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gLypcbkBAIC0xOTksMTggKzIwOSwyMCBAQCBzdGF0aWMgdm9pZCBmcmVlX3ZtZW1tYXBfcGFnZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4gXHRcdGZyZWVfdm1lbW1hcF9wYWdlKHBhZ2UpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB2bWVtbWFwX3JlbWFwX3B0ZShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0ICAgICAgc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqd2FsaylcbitzdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfcHRlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHQgICAgIHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwdGVfcGFnZShwdGVwX2dldChwdGUpKTtcbiBcdHB0ZV90IGVudHJ5O1xuK1x0Ym9vbCBoZWFkO1xuK1x0aW50IHJldDtcbitcbitcdGhlYWQgPSB3YWxrLVx1MDAzZW5yX3dhbGtlZCA9PSAwIFx1MDAyNlx1MDAyNiB3YWxrLVx1MDAzZXZtZW1tYXBfaGVhZDtcbiBcbiBcdC8qIFJlbWFwcGluZyB0aGUgaGVhZCBwYWdlIHJlcXVpcmVzIHIvdyAqL1xuLVx0aWYgKHVubGlrZWx5KHdhbGstXHUwMDNlbnJfd2Fsa2VkID09IDAgXHUwMDI2XHUwMDI2IHdhbGstXHUwMDNldm1lbW1hcF9oZWFkKSkge1xuK1x0aWYgKHVubGlrZWx5KGhlYWQpKSB7XG4gXHRcdFZNX1dBUk5fT05fT05DRSghUGFnZUhlYWQoKGNvbnN0IHN0cnVjdCBwYWdlICopYWRkcikpO1xuIFxuLVx0XHRsaXN0X2RlbChcdTAwMjZ3YWxrLVx1MDAzZXZtZW1tYXBfaGVhZC1cdTAwM2VscnUpO1xuLVxuIFx0XHQvKlxuIFx0XHQgKiBNYWtlcyBzdXJlIHRoYXQgcHJlY2VkaW5nIHN0b3JlcyB0byB0aGUgcGFnZSBjb250ZW50cyBmcm9tXG4gXHRcdCAqIHZtZW1tYXBfcmVtYXBfZnJlZSgpIGJlY29tZSB2aXNpYmxlIGJlZm9yZSB0aGUgc2V0X3B0ZV9hdCgpXG5AQCAtMjI5LDM1ICsyNDEsNTYgQEAgc3RhdGljIHZvaWQgdm1lbW1hcF9yZW1hcF9wdGUocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRlbnRyeSA9IG1rX3B0ZSh3YWxrLVx1MDAzZXZtZW1tYXBfdGFpbCwgUEFHRV9LRVJORUxfUk8pO1xuIFx0fVxuIFxuK1x0cmV0ID0gdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZShhZGRyLCBwdGUsIGVudHJ5KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBXZSBzdWNjZXNzZnVsbHkgb3Zlcndyb3RlIHRoZSB2bWVtbWFwIFBURSwgc28gd2UgY2FuIGZyZWVcbitcdCAqIHRoZSB2bWVtbWFwIHBhZ2UgdGhhdCB3YXMganVzdCB1bm1hcHBlZCwgYW5kIGlmIHdlIG1hcHBlZFxuK1x0ICogdGhlIG5ldyBoZWFkIHBhZ2UsIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0IHNvIHRoYXQgaXRcbitcdCAqIGRvZXNuJ3QgZ2V0IGZyZWVkIGxhdGVyLlxuK1x0ICovXG4gXHRsaXN0X2FkZChcdTAwMjZwYWdlLVx1MDAzZWxydSwgd2Fsay1cdTAwM2V2bWVtbWFwX3BhZ2VzKTtcbi1cdHNldF9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBlbnRyeSk7XG4rXHRpZiAoaGVhZClcbitcdFx0bGlzdF9kZWwoXHUwMDI2d2Fsay1cdTAwM2V2bWVtbWFwX2hlYWQtXHUwMDNlbHJ1KTtcbitcbitcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB2bWVtbWFwX3Jlc3RvcmVfcHRlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHRcdHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspXG4rc3RhdGljIGludCB2bWVtbWFwX3Jlc3RvcmVfcHRlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHQgICAgICAgc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqd2FsaylcbiB7XG4gXHRzdHJ1Y3QgcGFnZSAqc3JjID0gcHRlX3BhZ2UocHRlcF9nZXQocHRlKSksICpkc3Q7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRSghd2Fsay1cdTAwM2V2bWVtbWFwX3RhaWwpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdC8qXG4tXHQgKiBXaGVuIHJvbGxpbmcgYmFjayB2bWVtbWFwX3JlbWFwX2ZyZWUoKSwga2VlcCB0aGUgY29waWVkIGhlYWQgcGFnZVxuK1x0ICogV2hlbiByZXN0b3JpbmcgYSBwYXJ0aWFsbHktSFZPZWQgcGFnZSwga2VlcCB0aGUgY29waWVkIGhlYWQgcGFnZVxuIFx0ICogbWFwcGluZyBhbmQgcmVzdG9yZSBvbmx5IFBURXMgY3VycmVudGx5IHBvaW50aW5nIGF0IHRoZSBzaGFyZWQgdGFpbFxuIFx0ICogcGFnZS5cbiBcdCAqL1xuLVx0aWYgKHdhbGstXHUwMDNldm1lbW1hcF90YWlsIFx1MDAyNlx1MDAyNiB3YWxrLVx1MDAzZXZtZW1tYXBfdGFpbCAhPSBzcmMpXG4tXHRcdHJldHVybjtcbitcdGlmICh3YWxrLVx1MDAzZXZtZW1tYXBfdGFpbCAhPSBzcmMpXG4rXHRcdHJldHVybiAwO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKFBhZ2VIZWFkKChjb25zdCBzdHJ1Y3QgcGFnZSAqKWFkZHIpKTtcbiBcbiBcdGRzdCA9IGxpc3RfZmlyc3RfZW50cnkod2Fsay1cdTAwM2V2bWVtbWFwX3BhZ2VzLCBzdHJ1Y3QgcGFnZSwgbHJ1KTtcbi1cdGxpc3RfZGVsKFx1MDAyNmRzdC1cdTAwM2VscnUpO1xuIFx0Y29weV9wYWdlKHBhZ2VfdG9fdmlydChkc3QpLCBwYWdlX3RvX3ZpcnQoc3JjKSk7XG4gXG4gXHQvKlxuIFx0ICogTWFrZXMgc3VyZSB0aGF0IHByZWNlZGluZyBzdG9yZXMgdG8gdGhlIHBhZ2UgY29udGVudHMgYmVjb21lIHZpc2libGVcbi1cdCAqIGJlZm9yZSB0aGUgc2V0X3B0ZV9hdCgpIHdyaXRlLlxuK1x0ICogYmVmb3JlIHRoZSB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKCkgd3JpdGUuXG4gXHQgKi9cbiBcdHNtcF93bWIoKTtcbi1cdHNldF9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBta19wdGUoZHN0LCBQQUdFX0tFUk5FTCkpO1xuK1xuK1x0cmV0ID0gdHJ5X3VwZGF0ZV92bWVtbWFwX3B0ZShhZGRyLCBwdGUsIG1rX3B0ZShkc3QsIFBBR0VfS0VSTkVMKSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0bGlzdF9kZWwoXHUwMDI2ZHN0LVx1MDAzZWxydSk7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG5AQCAtMjc5LDYgKzMxMiw3IEBAIHN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9zcGxpdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbiBcdHJldHVybiB2bWVtbWFwX3JlbWFwX3JhbmdlKHN0YXJ0LCBlbmQsIFx1MDAyNndhbGspO1xuIH1cbiBcbitzdGF0aWMgY29uc3QgaW50IFZNRU1NQVBfUkVNQVBfSU5DT01QTEVURSA9IDE7XG4gLyoqXG4gICogdm1lbW1hcF9yZW1hcF9mcmVlIC0gcmVtYXAgdGhlIHZtZW1tYXAgdmlydHVhbCBhZGRyZXNzIHJhbmdlIFtAc3RhcnQsIEBlbmQpXG4gICpcdFx0XHR0byB1c2UgQHZtZW1tYXBfaGVhZC90YWlsLCB0aGVuIGZyZWUgdm1lbW1hcCB3aGljaFxuQEAgLTI5Myw3ICszMjcsOCBAQCBzdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfc3BsaXQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4gICpcdFx0cmVzcG9uc2liaWxpdHkgdG8gZnJlZSBwYWdlcy5cbiAgKiBAZmxhZ3M6XHRtb2RpZmljYXRpb25zIHRvIHZtZW1tYXBfcmVtYXBfd2FsayBmbGFnc1xuICAqXG4tICogUmV0dXJuOiAlMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbisgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsIFZNRU1NQVBfUkVNQVBfSU5DT01QTEVURSBpZiB0aGUgcGFnZSBpcyBpbmNvbXBsZXRlbHlcbisgKiAgICAgICAgIG9wdGltaXplZCwgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXG4gICovXG4gc3RhdGljIGludCB2bWVtbWFwX3JlbWFwX2ZyZWUodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0ICAgICAgc3RydWN0IHBhZ2UgKnZtZW1tYXBfaGVhZCxcbkBAIC0zMjgsNyArMzYzLDggQEAgc3RhdGljIGludCB2bWVtbWFwX3JlbWFwX2ZyZWUodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdC5mbGFnc1x0XHQ9IDAsXG4gXHR9O1xuIFxuLVx0dm1lbW1hcF9yZW1hcF9yYW5nZShzdGFydCwgZW5kLCBcdTAwMjZ3YWxrKTtcbitcdGlmICh2bWVtbWFwX3JlbWFwX3JhbmdlKHN0YXJ0LCBlbmQsIFx1MDAyNndhbGspKVxuK1x0XHRyZXR1cm4gVk1FTU1BUF9SRU1BUF9JTkNPTVBMRVRFO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMzU3LDEwICszOTMsMzggQEAgc3RhdGljIGludCBhbGxvY192bWVtbWFwX3BhZ2VfbGlzdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdHJldHVybiAtRU5PTUVNO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IHBhZ2UgKnZtZW1tYXBfZ2V0X3RhaWwodW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgem9uZSAqem9uZSlcbit7XG4rXHRjb25zdCB1bnNpZ25lZCBpbnQgaWR4ID0gb3JkZXIgLSBWTUVNTUFQX1RBSUxfTUlOX09SREVSO1xuK1x0c3RydWN0IHBhZ2UgKnRhaWwsICpwO1xuK1x0aW50IG5vZGUgPSB6b25lX3RvX25pZCh6b25lKTtcbitcbitcdHRhaWwgPSBSRUFEX09OQ0Uoem9uZS1cdTAwM2V2bWVtbWFwX3RhaWxzW2lkeF0pO1xuK1x0aWYgKGxpa2VseSh0YWlsKSlcbitcdFx0cmV0dXJuIHRhaWw7XG4rXG4rXHR0YWlsID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgMCk7XG4rXHRpZiAoIXRhaWwpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0cCA9IHBhZ2VfdG9fdmlydCh0YWlsKTtcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IHBhZ2UpOyBpKyspXG4rXHRcdGluaXRfY29tcG91bmRfdGFpbChwICsgaSwgTlVMTCwgb3JkZXIsIHpvbmUpO1xuK1xuK1x0aWYgKGNtcHhjaGcoXHUwMDI2em9uZS1cdTAwM2V2bWVtbWFwX3RhaWxzW2lkeF0sIE5VTEwsIHRhaWwpKSB7XG4rXHRcdF9fZnJlZV9wYWdlKHRhaWwpO1xuK1x0XHR0YWlsID0gUkVBRF9PTkNFKHpvbmUtXHUwMDNldm1lbW1hcF90YWlsc1tpZHhdKTtcbitcdH1cbitcbitcdHJldHVybiB0YWlsO1xuK31cbitcbiAvKipcbiAgKiB2bWVtbWFwX3JlbWFwX2FsbG9jIC0gcmVtYXAgdGhlIHZtZW1tYXAgdmlydHVhbCBhZGRyZXNzIHJhbmdlIFtAc3RhcnQsIGVuZClcbiAgKlx0XHRcdCB0byB0aGUgcGFnZSB3aGljaCBpcyBmcm9tIHRoZSBAdm1lbW1hcF9wYWdlc1xuICAqXHRcdFx0IHJlc3BlY3RpdmVseS5cbisgKiBAaDpcdFx0dGhlIGhzdGF0ZSBmb3IgdGhlIGZvbGlvIHdob3NlIHZtZW1tYXAgaXMgZ2V0dGluZyByZW1hcHBlZFxuKyAqIEBmb2xpbzpcdHRoZSBmb2xpbyB3aG9zZSB2bWVtbWFwIGlzIGdldHRpbmcgcmVtYXBwZWRcbiAgKiBAc3RhcnQ6XHRzdGFydCBhZGRyZXNzIG9mIHRoZSB2bWVtbWFwIHZpcnR1YWwgYWRkcmVzcyByYW5nZSB0aGF0IHdlIHdhbnRcbiAgKlx0XHR0byByZW1hcC5cbiAgKiBAZW5kOlx0ZW5kIGFkZHJlc3Mgb2YgdGhlIHZtZW1tYXAgdmlydHVhbCBhZGRyZXNzIHJhbmdlIHRoYXQgd2Ugd2FudCB0b1xuQEAgLTM2OSwyMCArNDMzLDY4IEBAIHN0YXRpYyBpbnQgYWxsb2Nfdm1lbW1hcF9wYWdlX2xpc3QodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gICpcbiAgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuICAqL1xuLXN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9hbGxvYyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbitzdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfYWxsb2MoY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4ge1xuIFx0TElTVF9IRUFEKHZtZW1tYXBfcGFnZXMpO1xuLVx0c3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayB3YWxrID0ge1xuK1x0c3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayB3YWxrO1xuK1x0c3RydWN0IHBhZ2UgKnZtZW1tYXBfdGFpbDtcbitcdGludCByZXQ7XG4rXG4rXHR2bWVtbWFwX3RhaWwgPSB2bWVtbWFwX2dldF90YWlsKGgtXHUwMDNlb3JkZXIsIGZvbGlvX3pvbmUoZm9saW8pKTtcbitcdGlmIChXQVJOX09OX09OQ0UoIXZtZW1tYXBfdGFpbCkpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0aWYgKGFsbG9jX3ZtZW1tYXBfcGFnZV9saXN0KHN0YXJ0LCBlbmQsIFx1MDAyNnZtZW1tYXBfcGFnZXMpKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHdhbGsgPSAoc3RydWN0IHZtZW1tYXBfcmVtYXBfd2Fsaykge1xuIFx0XHQucmVtYXBfcHRlXHQ9IHZtZW1tYXBfcmVzdG9yZV9wdGUsXG4rXHRcdC52bWVtbWFwX3RhaWxcdD0gdm1lbW1hcF90YWlsLFxuIFx0XHQudm1lbW1hcF9wYWdlc1x0PSBcdTAwMjZ2bWVtbWFwX3BhZ2VzLFxuIFx0XHQuZmxhZ3NcdFx0PSBmbGFncyxcbiBcdH07XG4gXG4tXHRpZiAoYWxsb2Nfdm1lbW1hcF9wYWdlX2xpc3Qoc3RhcnQsIGVuZCwgXHUwMDI2dm1lbW1hcF9wYWdlcykpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0cmV0ID0gdm1lbW1hcF9yZW1hcF9yYW5nZShzdGFydCwgZW5kLCBcdTAwMjZ3YWxrKTtcbiBcbi1cdHJldHVybiB2bWVtbWFwX3JlbWFwX3JhbmdlKHN0YXJ0LCBlbmQsIFx1MDAyNndhbGspO1xuK1x0LyogTm90IGFsbCBwYWdlcyBtYXkgaGF2ZSBiZWVuIGNvbnN1bWVkICovXG4rXHRmcmVlX3ZtZW1tYXBfcGFnZV9saXN0KFx1MDAyNnZtZW1tYXBfcGFnZXMpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rZW51bSBodWdldGxiX2h2b19zdGF0dXMge1xuK1x0SFZPX0lOQUNUSVZFID0gMCxcbitcdEhWT19BQ1RJVkUsXG4rXHRIVk9fUEVSTUFORU5UTFlfSU5BQ1RJVkUsXG4rfTtcbitzdGF0aWMgZW51bSBodWdldGxiX2h2b19zdGF0dXMgaHZvX3N0YXR1cyA9IEhWT19JTkFDVElWRTtcbitcbitzdGF0aWMgYm9vbCBodWdldGxiX2h2b19zdGF0dXNfdHJ5X3NldChlbnVtIGh1Z2V0bGJfaHZvX3N0YXR1cyBzdGF0dXMpXG4re1xuK1x0ZW51bSBodWdldGxiX2h2b19zdGF0dXMgb2xkO1xuK1xuK1x0b2xkID0gUkVBRF9PTkNFKGh2b19zdGF0dXMpO1xuK1xuK3JldHJ5OlxuK1x0LyogVGhlIGN1cnJlbnQgc2V0dGluZyBpcyB3aGF0IHdlIHdhbnQuICovXG4rXHRpZiAob2xkID09IHN0YXR1cylcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHQvKiBUaGUgY3VycmVudCBzZXR0aW5nIGNhbm5vdCBiZSBjaGFuZ2VkLiAqL1xuK1x0aWYgKG9sZCAhPSBIVk9fSU5BQ1RJVkUpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICghdHJ5X2NtcHhjaGdfcmVsYXhlZChcdTAwMjZodm9fc3RhdHVzLCBcdTAwMjZvbGQsIHN0YXR1cykpXG4rXHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rYm9vbCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlKHZvaWQpXG4re1xuK1x0cmV0dXJuIGh1Z2V0bGJfaHZvX3N0YXR1c190cnlfc2V0KEhWT19QRVJNQU5FTlRMWV9JTkFDVElWRSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIHZtZW1tYXBfb3B0aW1pemVfZW5hYmxlZCA9IElTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT04pO1xuQEAgLTQxNSw3ICs1MjcsNyBAQCBzdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCxcbiBcdCAqIFdoZW4gYSBIdWdlVExCIHBhZ2UgaXMgZnJlZWQgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgcHJldmlvdXNseVxuIFx0ICogZGlzY2FyZGVkIHZtZW1tYXAgcGFnZXMgbXVzdCBiZSBhbGxvY2F0ZWQgYW5kIHJlbWFwcGluZy5cbiBcdCAqL1xuLVx0cmV0ID0gdm1lbW1hcF9yZW1hcF9hbGxvYyh2bWVtbWFwX3N0YXJ0LCB2bWVtbWFwX2VuZCwgZmxhZ3MpO1xuK1x0cmV0ID0gdm1lbW1hcF9yZW1hcF9hbGxvYyhoLCBmb2xpbywgdm1lbW1hcF9zdGFydCwgdm1lbW1hcF9lbmQsIGZsYWdzKTtcbiBcdGlmICghcmV0KVxuIFx0XHRmb2xpb19jbGVhcl9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKTtcbiBcbkBAIC00ODcsMzYgKzU5OSwxNiBAQCBzdGF0aWMgYm9vbCB2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9mb2xpbyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKlxuIFx0aWYgKCFSRUFEX09OQ0Uodm1lbW1hcF9vcHRpbWl6ZV9lbmFibGVkKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKCFodWdldGxiX3ZtZW1tYXBfb3B0aW1pemFibGUoaCkpXG4rXHRpZiAoIWFyY2hfaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl9zdXBwb3J0ZWQoKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0cmV0dXJuIHRydWU7XG4tfVxuLVxuLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqdm1lbW1hcF9nZXRfdGFpbCh1bnNpZ25lZCBpbnQgb3JkZXIsIHN0cnVjdCB6b25lICp6b25lKVxuLXtcbi1cdGNvbnN0IHVuc2lnbmVkIGludCBpZHggPSBvcmRlciAtIFZNRU1NQVBfVEFJTF9NSU5fT1JERVI7XG4tXHRzdHJ1Y3QgcGFnZSAqdGFpbCwgKnA7XG4tXHRpbnQgbm9kZSA9IHpvbmVfdG9fbmlkKHpvbmUpO1xuLVxuLVx0dGFpbCA9IFJFQURfT05DRSh6b25lLVx1MDAzZXZtZW1tYXBfdGFpbHNbaWR4XSk7XG4tXHRpZiAobGlrZWx5KHRhaWwpKVxuLVx0XHRyZXR1cm4gdGFpbDtcbi1cbi1cdHRhaWwgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCAwKTtcbi1cdGlmICghdGFpbClcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRwID0gcGFnZV90b192aXJ0KHRhaWwpO1xuLVx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIFBBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgcGFnZSk7IGkrKylcbi1cdFx0aW5pdF9jb21wb3VuZF90YWlsKHAgKyBpLCBOVUxMLCBvcmRlciwgem9uZSk7XG4rXHRpZiAoIWh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YWJsZShoKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKGNtcHhjaGcoXHUwMDI2em9uZS1cdTAwM2V2bWVtbWFwX3RhaWxzW2lkeF0sIE5VTEwsIHRhaWwpKSB7XG4tXHRcdF9fZnJlZV9wYWdlKHRhaWwpO1xuLVx0XHR0YWlsID0gUkVBRF9PTkNFKHpvbmUtXHUwMDNldm1lbW1hcF90YWlsc1tpZHhdKTtcbi1cdH1cbitcdGlmICghaHVnZXRsYl9odm9fc3RhdHVzX3RyeV9zZXQoSFZPX0FDVElWRSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiB0YWlsO1xuK1x0cmV0dXJuIHRydWU7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCxcbkBAIC01NzQsNyArNjY2LDExIEBAIHN0YXRpYyBpbnQgX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0XHRcdCB2bWVtbWFwX2hlYWQsIHZtZW1tYXBfdGFpbCxcbiBcdFx0XHRcdCB2bWVtbWFwX3BhZ2VzLCBmbGFncyk7XG4gb3V0OlxuLVx0aWYgKHJldClcbitcdC8qXG4rXHQgKiBJZiByZXQgPT0gVk1FTU1BUF9SRU1BUF9JTkNPTVBMRVRFLCB0aGUgZm9saW8gbWlnaHQgYmUgcGFydGlhbGx5XG4rXHQgKiBIVk9lZC4gTGVhdmUgdGhlIEhWTyBwYWdlIGZvbGlvIGZsYWcgaW4gcGxhY2UuXG4rXHQgKi9cbitcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC03MTcsNiArODEzLDE0IEBAIHN0YXRpYyBib29sIHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2Jvb3RtZW1fcGFnZShzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgKm0pXG4gXHRpZiAoIVJFQURfT05DRSh2bWVtbWFwX29wdGltaXplX2VuYWJsZWQpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4rXHQvKlxuK1x0ICogQXJjaGl0ZWN0dXJlcyBtYXkgcmV0dXJuIGZhbHNlIGhlcmUgYnV0IHRydWUgYnkgdGhlIHRpbWVcbitcdCAqIGh1Z2V0bGJfaW5pdCgpIGlzIGNhbGxlZC4gSW4gdGhpcyBjYXNlLCBhbHRob3VnaCB0aGUgZm9saW9zIHdpbGxcbitcdCAqIG5vdCBiZSBwcmUtSFZPZWQsIHRoZXkgd2lsbCBiZSBvcHRpbWl6ZWQgaW4gaHVnZXRsYl9pbml0KCkuXG4rXHQgKi9cbitcdGlmICghYXJjaF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3N1cHBvcnRlZCgpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHRpZiAoIWh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YWJsZShtLVx1MDAzZWhzdGF0ZSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC03NDIsNiArODQ2LDkgQEAgc3RhdGljIGJvb2wgdm1lbW1hcF9zaG91bGRfb3B0aW1pemVfYm9vdG1lbV9wYWdlKHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqbSlcbiBcdCAgICAhSVNfQUxJR05FRChwc2l6ZSwgcG1kX3ZtZW1tYXBfc2l6ZSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdGlmICghaHVnZXRsYl9odm9fc3RhdHVzX3RyeV9zZXQoSFZPX0FDVElWRSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiX3ZtZW1tYXAuaCBiL21tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oXG5zaW1pbGFyaXR5IGluZGV4IDk1JVxucmVuYW1lIGZyb20gbW0vaHVnZXRsYl92bWVtbWFwLmhcbnJlbmFtZSB0byBtbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaFxuaW5kZXggMThiNDkwODI1MjE1M2QuLjZiMjg3ODAwMTRiYzE4IDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYl92bWVtbWFwLmhcbisrKyBiL21tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oXG5AQCAtNiw4ICs2LDggQEBcbiAgKlxuICAqICAgICBBdXRob3I6IE11Y2h1biBTb25nIFx1MDAzY3NvbmdtdWNodW5AYnl0ZWRhbmNlLmNvbVx1MDAzZVxuICAqL1xuLSNpZm5kZWYgX0xJTlVYX0hVR0VUTEJfVk1FTU1BUF9IXG4tI2RlZmluZSBfTElOVVhfSFVHRVRMQl9WTUVNTUFQX0hcbisjaWZuZGVmIF9NTV9IVUdFVExCX1ZNRU1NQVBfSU5URVJOQUxfSFxuKyNkZWZpbmUgX01NX0hVR0VUTEJfVk1FTU1BUF9JTlRFUk5BTF9IXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcdTAwM2VcbkBAIC05NSw0ICs5NSw0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemFibGUoY29uc3Qgc3RydWN0IGhzdGF0ZSAqaClcbiB7XG4gXHRyZXR1cm4gaHVnZXRsYl92bWVtbWFwX29wdGltaXphYmxlX3NpemUoaCkgIT0gMDtcbiB9XG4tI2VuZGlmIC8qIF9MSU5VWF9IVUdFVExCX1ZNRU1NQVBfSCAqL1xuKyNlbmRpZiAvKiBfTU1fSFVHRVRMQl9WTUVNTUFQX0lOVEVSTkFMX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9zcGFyc2Utdm1lbW1hcC5jIGIvbW0vc3BhcnNlLXZtZW1tYXAuY1xuaW5kZXggOTllMmJlMzk2NzFiNjMuLjk0ZDVkYTlmOGFiN2MxIDEwMDY0NFxuLS0tIGEvbW0vc3BhcnNlLXZtZW1tYXAuY1xuKysrIGIvbW0vc3BhcnNlLXZtZW1tYXAuY1xuQEAgLTMyLDcgKzMyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZG1hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiZmx1c2guaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwiaHVnZXRsYl92bWVtbWFwLmhcIlxuKyNpbmNsdWRlIFwiaHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmhcIlxuIFxuIC8qXG4gICogRmxhZ3MgZm9yIHZtZW1tYXBfcG9wdWxhdGVfcmFuZ2UgYW5kIGZyaWVuZHMuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNToxMjoyNC43MzUyMTgwNjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTE4ODE0MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0IGJyaW5ncyBBUk02NCBzdXBwb3J0IHRvIEh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24sIG9yIEhWTy4gSXQncyBhIGZ1bmRhbWVudGFsIGNoYW5nZSwgYWRkaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmdW5jdGlvbnMgbGlrZSBgYXJjaF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3N1cHBvcnRlZCgpYCwgYHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZCgpYCwgYW5kIGB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlKClgIGFsb25nIHdpdGggdGhlIG5lY2Vzc2FyeSBjb3JlIGxvZ2ljIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBtbS9odWdldGxiX3ZtZW1tYXAuY2AuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24gZ2l2ZW4gaXRzIGltcGFjdCBvbiBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gSHVnZVRMQiBtYW5hZ2VtZW50LlxuXG5Ob3csIGxldCdzIHplcm8gaW4gb24gdGhlIGtleSBhcmVhcyB3aXRoaW4gYG1tL2h1Z2V0bGJfdm1lbW1hcC5jYCB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgZnVuY3Rpb25zIGFzIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgZm9yIHRlc3Rpbmc6IGB2bWVtbWFwX3NwbGl0X3BtZGAsIGB2bWVtbWFwX3BtZF9lbnRyeWAsIGB2bWVtbWFwX3B0ZV9lbnRyeWAsIGB2bWVtbWFwX3JlbWFwX3JhbmdlYCwgYHZtZW1tYXBfcmVtYXBfcHRlYCwgYHZtZW1tYXBfcmVzdG9yZV9wdGVgLCBgdm1lbW1hcF9yZW1hcF9mcmVlYCwgYHZtZW1tYXBfcmVtYXBfYWxsb2NgLCBgaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZWAsIGBfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvYCwgYHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2ZvbGlvYCwgYF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvYCwgYW5kIGB2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9ib290bWVtX3BhZ2VgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB3aGVyZSB0aGUgQVJNNjQgaW50ZWdyYXRpb24gd2lsbCBtb3N0IGxpa2VseSBpbnRyb2R1Y2UgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciByZWdyZXNzaW9ucy5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGFyY2gvYXJtNjQvS2NvbmZpZ2Agd2hpY2ggaW5kaWNhdGVzIHRoYXQgYHNlbGVjdCBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQIGlmIEFSTTY0X0hXX0FGREJNYCBpcyByZWxldmFudC4gVGhpcyBsZWFkcyBtZSB0byBiZWxpZXZlIHRoYXQgYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQYCBpcyBhIGNlbnRyYWwgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4gYEFSTTY0X0hXX0FGREJNYCBhbHNvIHNlZW1zIGltcG9ydGFudCBhcyBhIGRlcGVuZGVudCBjb25maWcuIFRoZSBjaGFuZ2VzIGluIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaGAgd2hpY2ggcmVmZXJlbmNlcyBgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQYCBmdXJ0aGVyIGNvbmZpcm1zIHRoYXQgYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQYCBpcyB0aGUga2V5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdmVyaWZ5IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGR1cmluZyBteSB0ZXN0aW5nIHRvIGVuc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBhcmUgZXhlcmNpc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjIxOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjEyOjMyLjg1NDAzNTQ2NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY3MDU2MjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0PTk1PUtlcm5lbCBwYXJhbWV0ZXJzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDg1LVxcdGh1Z2V0bGJfZnJlZV92bWVtbWFwPVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0OjIwODY6XFx0XFx0XFx0W0tOTF0gUmVxdWlyZXMgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA4Ny1cXHRcXHRcXHRlbmFibGVkLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA5NS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dDoyMDk2OlxcdFxcdFxcdEJ1aWx0IHdpdGggQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT049eSxcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDk3LVxcdFxcdFxcdHRoZSBkZWZhdWx0IGlzIG9uLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q9MTc0PWh1Z2V0bGJfZnJlZV92bWVtbWFwXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q6MTc1OlxcdFdoZW4gQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQIGlzIHNldCwgdGhpcyBlbmFibGVzIEh1Z2VUTEJcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdC0xNzYtXFx0Vm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykuXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaD0xND1jcHVjYXBfaXNfcG9zc2libGUoY29uc3QgdW5zaWduZWQgaW50IGNhcClcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1Y2Fwcy5oLTc4LVxcdGNhc2UgQVJNNjRfSFZPX0NPTVBBVElCTEU6XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVjYXBzLmg6Nzk6XFx0XFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWNhcHMuaC04MC1cXHR9XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MjE4NT1zdGF0aWMgYm9vbCBsYXRlX2NwdV9lbmFibGVfaHZvKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjE4Ni17XFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIxODc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTg4LVxcdGlmIChjcHVfaGFzX2h3X2FmKCkpXFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS92ZHNvL3Zkc28zMi9mYWtlXzMyYml0X2J1aWxkLmgtMTMtI3VuZGVmIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUFxcbmFyY2gveDg2L2VudHJ5L3Zkc28vdmRzbzMyL2Zha2VfMzJiaXRfYnVpbGQuaDoxNDojdW5kZWYgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuYXJjaC94ODYvZW50cnkvdmRzby92ZHNvMzIvZmFrZV8zMmJpdF9idWlsZC5oLTE1LSN1bmRlZiBDT05GSUdfTlJfQ1BVU1xcbi0tXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jPTEzMTY9c3RhdGljIHZvaWQgX19pbml0IHJlZ2lzdGVyX3BhZ2VfYm9vdG1lbV9pbmZvKHZvaWQpXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzMTcte1xcbmFyY2gveDg2L21tL2luaXRfNjQuYzoxMzE4OiNpZiBkZWZpbmVkKENPTkZJR19OVU1BKSB8fCBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUClcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTMxOS1cXHRpbnQgaTtcXG4tLVxcbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXFxuZnMvS2NvbmZpZy0yNjQtXFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG5mcy9LY29uZmlnLTI2NS1cXHRkZWZhdWx0IG5cXG5mcy9LY29uZmlnOjI2NjpcXHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuZnMvS2NvbmZpZy0yNjctXFx0aGVscFxcbi0tXFxuZnMvS2NvbmZpZz0yNzM9Y29uZmlnIEhVR0VUTEJfUEFHRVxcbi0tXFxuZnMvS2NvbmZpZy0yNzYtXFxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuZnMvS2NvbmZpZy0yNzgtXFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaD0xMzI9c3RhdGljIGlubGluZSBib29sIGFyY2hfaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl9zdXBwb3J0ZWQodm9pZClcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaC0xMzMte1xcbmluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oOjEzNDpcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApO1xcbmluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oLTEzNS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oLTYtXFxuaW5jbHVkZS9saW51eC9odWdldGxiX3ZtZW1tYXAuaDo3OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oLTgtXFxuaW5jbHVkZS9saW51eC9odWdldGxiX3ZtZW1tYXAuaD05PWJvb2wgaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZSh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfdm1lbW1hcC5oLTEwLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYl92bWVtbWFwLmg6MTE6I2Vsc2UgLyogQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQICovXFxuaW5jbHVkZS9saW51eC9odWdldGxiX3ZtZW1tYXAuaC0xMi1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTA1LSNkZWZpbmUgTUFYX0ZPTElPX1ZNRU1NQVBfQUxJR04gXFxcXFxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTA2OlxcdChJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUCkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTA3LVxcdCBpc19wb3dlcl9vZl8yKHNpemVvZihzdHJ1Y3QgcGFnZSkpID8gXFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD05Njg9c3RydWN0IHpvbmUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMTQ4LVxcdGF0b21pY19sb25nX3RcXHRcXHR2bV9udW1hX2V2ZW50W05SX1ZNX05VTUFfRVZFTlRfSVRFTVNdO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTE0OTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMTUwLVxcdHN0cnVjdCBwYWdlICp2bWVtbWFwX3RhaWxzW05SX1ZNRU1NQVBfVEFJTFNdO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MjA4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBjb21wb3VuZF9pbmZvX2hhc19tYXNrKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0yMTctXFx0ICovXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MjE4OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApKVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTIxOS1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9NYWtlZmlsZT04ND1lbmRpZlxcbm1tL01ha2VmaWxlOjg1Om9iai0kKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUClcXHQrPSBodWdldGxiX3ZtZW1tYXAub1xcbm1tL01ha2VmaWxlLTg2LW9iai0kKENPTkZJR19OVU1BKSBcXHQrPSBtZW1wb2xpY3kub1xcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmM9NDk1PWJvb2wgaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZSh2b2lkKVxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNDk5LVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjUwMDpzdGF0aWMgYm9vbCB2bWVtbWFwX29wdGltaXplX2VuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OKTtcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy01MDEtc3RhdGljIGludCBfX2luaXQgaHVnZXRsYl92bWVtbWFwX29wdGltaXplX3BhcmFtKGNoYXIgKmJ1ZilcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oLTIxLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oOjIyOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG5tbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaC0yMy1pbnQgaHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5tbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaD04OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemFibGVfc2l6ZShjb25zdCBzdHJ1Y3QgaHN0YXRlICpoKVxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwX2ludGVybmFsLmgtOTEtfVxcbm1tL2h1Z2V0bGJfdm1lbW1hcF9pbnRlcm5hbC5oOjkyOiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVAgKi9cXG5tbS9odWdldGxiX3ZtZW1tYXBfaW50ZXJuYWwuaC05My1cXG4tLVxcbm1tL3NwYXJzZS12bWVtbWFwLmM9MzExPXZvaWQgdm1lbW1hcF93cnByb3RlY3RfaHZvKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9zcGFyc2Utdm1lbW1hcC5jLTMyMi1cXG5tbS9zcGFyc2Utdm1lbW1hcC5jOjMyMzojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxubW0vc3BhcnNlLXZtZW1tYXAuYy0zMjQtc3RhdGljIF9fbWVtaW5pdCBzdHJ1Y3QgcGFnZSAqdm1lbW1hcF9nZXRfdGFpbCh1bnNpZ25lZCBpbnQgb3JkZXIsIHN0cnVjdCB6b25lICp6b25lKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNToxMjozNC45MjExMjY1ODZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTIwMzYwNjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBIdWdlVExCIFZNRU1NQVAgT3B0aW1pemF0aW9uKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIGNvbmZpZ3VyZSB0aGlzIGtlcm5lbCBmb3Igb3B0aW1pemVkIEh1Z2VUTEIgdm1lbW1hcCB1c2FnZS4gVGhlIGtleSBjb25maWcgb3B0aW9uIHNlZW1zIHRvIGJlIGBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBpdCBpcyBlbmFibGVkLlxuXG5JIHNob3VsZCBhbHNvIGNoZWNrIGBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OYCB0byBndWFyYW50ZWUgaXQncyBlbmFibGVkIGJ5IGRlZmF1bHQsIHRoaXMgd2lsbCBzYXZlIGFueSBwb3RlbnRpYWwgaGVhZGFjaGVzIGRvd24gdGhlIGxpbmUuIEkgYWx3YXlzIHByZWZlciBzZW5zaWJsZSBkZWZhdWx0cyFcblxuVG8gY29uZmlybSBpZiB0aGlzIGlzIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5IGZvciB0aGlzIGFyY2hpdGVjdHVyZSwgSSBzaG91bGQgYWxzbyBsb29rIGluIGBhcmNoL2FybTY0L0tjb25maWdgIGZvciBgQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUGAuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29udGV4dCBhbmQgYW55IHBsYXRmb3JtIGNvbnNpZGVyYXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0NDMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNToxMjozOC44NDE0OTAyMzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1MzI3MTMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTI2MS1cXHRzZWxlY3QgVk1BUF9TVEFDS1xcbmFyY2gvYXJtNjQvS2NvbmZpZzoyNjI6XFx0c2VsZWN0IEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVAgaWYgQVJNNjRfSFdfQUZEQk1cXG5hcmNoL2FybTY0L0tjb25maWctMjYzLVxcdGhlbHBcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mj1jb25maWcgTE9PTkdBUkNIXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTgyLVxcdHNlbGVjdCBBUkNIX1dBTlRfTERfT1JQSEFOX1dBUk5cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjgzOlxcdHNlbGVjdCBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQIGlmIDY0QklUXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy04NC1cXHRzZWxlY3QgQVJDSF9XQU5UU19OT19JTlNUUlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTg4LVxcdHNlbGVjdCBBUkNIX1dBTlRfT1BUSU1JWkVfREFYX1ZNRU1NQVBcXG5hcmNoL3Jpc2N2L0tjb25maWc6ODk6XFx0c2VsZWN0IEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBcXG5hcmNoL3Jpc2N2L0tjb25maWctOTAtXFx0c2VsZWN0IEFSQ0hfV0FOVFNfTk9fSU5TVFJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xNDgtXFx0c2VsZWN0IEFSQ0hfV0FOVF9PUFRJTUlaRV9EQVhfVk1FTU1BUFxcdGlmIFg4Nl82NFxcbmFyY2gveDg2L0tjb25maWc6MTQ5OlxcdHNlbGVjdCBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXFx0aWYgWDg2XzY0XFxuYXJjaC94ODYvS2NvbmZpZy0xNTAtXFx0c2VsZWN0IEFSQ0hfV0FOVF9IVUdFVExCX1ZNRU1NQVBfUFJFSU5JVCBpZiBYODZfNjRcXG4tLVxcbmZzL0tjb25maWc9Mjc3PWNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWctMjc4LVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbmZzL0tjb25maWc6Mjc5OlxcdGRlcGVuZHMgb24gQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUFxcbmZzL0tjb25maWctMjgwLVxcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcXG4tLVxcbm1tL0tjb25maWc9NDcyPWNvbmZpZyBBUkNIX1dBTlRfT1BUSU1JWkVfREFYX1ZNRU1NQVBcXG4tLVxcbm1tL0tjb25maWctNDc0LVxcbm1tL0tjb25maWc6NDc1OmNvbmZpZyBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXFxubW0vS2NvbmZpZy00NzYtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNToxMjo0MC43OTQ3Njg3NzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Mzc4NTM0MDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaHVnZXRsYl92bWVtbWFwIE9wdGltaXphdGlvbiBmb3IgQVJNNjQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UncmUgZW5hYmxpbmcgYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQYCBzcGVjaWZpY2FsbHkgZm9yIEFSTTY0LCBjb250aW5nZW50IG9uIGEgZmV3IG90aGVyIGNvbmZpZ3VyYXRpb25zLiAgYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQYCBoaW5nZXMgb24gYEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBgIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBPbiBBUk02NCwgYEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBgIGlzIHNlbGVjdGVkICppZiogYEFSTTY0X0hXX0FGREJNYCBpcyBhY3RpdmUuICBTbywgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBoZXJlIGlzIHRvIGVuYWJsZSBgQVJNNjRfSFdfQUZEQk1gIGFsb25nc2lkZSBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBgIGFuZCBpdHMgZGVmYXVsdC1vbiBzZXR0aW5nLCBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTmAuIEdvb2QsIGdvdCB0aGUgZGVwZW5kZW5jaWVzIGxpbmVkIHVwLlxuXG5Ob3csIHdoZXJlJ3MgdGhlIG1lYXQgb2YgdGhpcyBvcHRpbWl6YXRpb24gaGFwcGVuaW5nPyBUaGUgcGF0Y2ggdG91Y2hlcyBgbW0vaHVnZXRsYl92bWVtbWFwLmNgLCBzbyB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gTGV0J3Mgc2VlLi4uIGEgcXVpY2sgc2NhbiByZXZlYWxzIGEgYnVuY2ggb2YgcmVsZXZhbnQgZnVuY3Rpb25zLiAgSSBuZWVkIHRvIHByaW9yaXRpemUgYW5kIHJlYWxseSBkaWcgaW50byB0aGVzZTpcblxuKiAgIGB2bWVtbWFwX3NwbGl0X3BtZGBcbiogICBgdm1lbW1hcF9wbWRfZW50cnlgXG4qICAgYHZtZW1tYXBfcHRlX2VudHJ5YFxuKiAgIGB2bWVtbWFwX3JlbWFwX3JhbmdlYFxuKiAgIGB2bWVtbWFwX3JlbWFwX3B0ZWBcbiogICBgdm1lbW1hcF9yZXN0b3JlX3B0ZWBcbiogICBgdm1lbW1hcF9yZW1hcF9mcmVlYFxuKiAgIGB2bWVtbWFwX3JlbWFwX2FsbG9jYFxuKiAgIGBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlYFxuKiAgIGBfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvYFxuKiAgIGB2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9mb2xpb2BcbiogICBgX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW9gXG4qICAgYHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2Jvb3RtZW1fcGFnZWBcblxuV2FpdCwgdGhlcmUgYXJlIGEgY291cGxlIG9mIGlubGluZSBmdW5jdGlvbnMgYXMgd2VsbDogYHRyeV9wb3B1bGF0ZV92bWVtbWFwX3BtZGAgYW5kIGB0cnlfdXBkYXRlX3ZtZW1tYXBfcHRlYCwgbG9jYXRlZCBpbiBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhgIGFuZCBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhgLiBTaW5jZSB0aGV5J3JlIGlubGluZSwgdGhleSdyZSBwcm9iYWJseSBnZXR0aW5nIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGZ1bmN0aW9ucyB0aGF0IHVzZSB0aGVtLCBsaWtlIHRoZSBgdm1lbW1hcF9zcGxpdF9wbWRgIGFuZCBgdm1lbW1hcF9yZW1hcF9wdGVgLiBJJ2xsIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSBhbmFseXplIHRoZSBjb2RlIGZsb3cuXG5cblNvLCBsZXQncyByZWZpbmUgdGhhdCBsaXN0IG9mIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZGlzc2VjdDpcblxuKiAgIGB2bWVtbWFwX3NwbGl0X3BtZGBcbiogICBgdm1lbW1hcF9yZW1hcF9wdGVgXG4qICAgYHZtZW1tYXBfcmVzdG9yZV9wdGVgXG4qICAgYHZtZW1tYXBfcmVtYXBfZnJlZWBcbiogICBgdm1lbW1hcF9yZW1hcF9hbGxvY2BcbiogICBgaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZWBcbiogICBgX19odWdldGxiX3ZtZW1tYXBfcmVzdG9yZV9mb2xpb2BcbiogICBgX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW9gXG5cblJpZ2h0LCBnb3QgaXQuIE5vdyBJIGp1c3QgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbGwgdGhlc2UgZnVuY3Rpb25zIGFjdHVhbGx5IGV4aXN0IGFzIGV4cGVjdGVkIGluIGBtbS9odWdldGxiX3ZtZW1tYXAuY2AuIEEgcXVpY2sgY2hlY2sgd2lsbCBjb25maXJtIHRoaXMgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBhY3R1YWwgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNzYsIk91dHB1dFRva2VucyI6NTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6MTI6NTAuMTczMzA1MjAxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1ODgxNjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KGludHx2b2lkfGJvb2wpIFthLXpBLVowLTlfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdldGxiX3ZtZW1tYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiX3ZtZW1tYXAuYz0zOD1zdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrIHtcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTU0LVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjU1OnN0YXRpYyBpbnQgdm1lbW1hcF9zcGxpdF9wbWQocG1kX3QgKnBtZCwgc3RydWN0IHBhZ2UgKmhlYWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNTYtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrICp3YWxrKVxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtMTA4LVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjEwOTpzdGF0aWMgaW50IHZtZW1tYXBfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0xMTAtXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtMTQ5LVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjE1MDpzdGF0aWMgaW50IHZtZW1tYXBfcHRlX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0xNTEtXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmM9MTYzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgdm1lbW1hcF9yZW1hcF9vcHMgPSB7XFxuLS1cXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0xNjctXFxubW0vaHVnZXRsYl92bWVtbWFwLmM6MTY4OnN0YXRpYyBpbnQgdm1lbW1hcF9yZW1hcF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0xNjktXFx0XFx0XFx0ICAgICAgIHN0cnVjdCB2bWVtbWFwX3JlbWFwX3dhbGsgKndhbGspXFxuLS1cXG5tbS9odWdldGxiX3ZtZW1tYXAuYz0xOTI9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfdm1lbW1hcF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtMjAzLS8qIEZyZWUgYSBsaXN0IG9mIHRoZSB2bWVtbWFwIHBhZ2VzICovXFxubW0vaHVnZXRsYl92bWVtbWFwLmM6MjA0OnN0YXRpYyB2b2lkIGZyZWVfdm1lbW1hcF9wYWdlX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0yMDUte1xcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtMjExLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjIxMjpzdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfcHRlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0yMTMtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgdm1lbW1hcF9yZW1hcF93YWxrICp3YWxrKVxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtMjU5LVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjI2MDpzdGF0aWMgaW50IHZtZW1tYXBfcmVzdG9yZV9wdGUocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTI2MS1cXHRcXHRcXHQgICAgICAgc3RydWN0IHZtZW1tYXBfcmVtYXBfd2FsayAqd2FsaylcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTMwNC0gKi9cXG5tbS9odWdldGxiX3ZtZW1tYXAuYzozMDU6c3RhdGljIGludCB2bWVtbWFwX3JlbWFwX3NwbGl0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTMwNi17XFxuLS1cXG5tbS9odWdldGxiX3ZtZW1tYXAuYz0zMTU9c3RhdGljIGNvbnN0IGludCBWTUVNTUFQX1JFTUFQX0lOQ09NUExFVEUgPSAxO1xcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtMzMyLSAqL1xcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjMzMzpzdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfZnJlZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0zMzQtXFx0XFx0XFx0ICAgICAgc3RydWN0IHBhZ2UgKnZtZW1tYXBfaGVhZCxcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTM3MS1cXG5tbS9odWdldGxiX3ZtZW1tYXAuYzozNzI6c3RhdGljIGludCBhbGxvY192bWVtbWFwX3BhZ2VfbGlzdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0zNzMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTM5Nj1zdGF0aWMgc3RydWN0IHBhZ2UgKnZtZW1tYXBfZ2V0X3RhaWwodW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgem9uZSAqem9uZSlcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTQzNS0gKi9cXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo0MzY6c3RhdGljIGludCB2bWVtbWFwX3JlbWFwX2FsbG9jKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNDM3LVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTQ3Mj1zdGF0aWMgZW51bSBodWdldGxiX2h2b19zdGF0dXMgaHZvX3N0YXR1cyA9IEhWT19JTkFDVElWRTtcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy00NzMtXFxubW0vaHVnZXRsYl92bWVtbWFwLmM6NDc0OnN0YXRpYyBib29sIGh1Z2V0bGJfaHZvX3N0YXR1c190cnlfc2V0KGVudW0gaHVnZXRsYl9odm9fc3RhdHVzIHN0YXR1cylcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy00NzUte1xcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNDk0LVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjQ5NTpib29sIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGUodm9pZClcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy00OTYte1xcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmM9NTA1PWVhcmx5X3BhcmFtKFxcXCJodWdldGxiX2ZyZWVfdm1lbW1hcFxcXCIsIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9wYXJhbSk7XFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNTA2LVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjUwNzpzdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCxcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy01MDgtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBmbGFncylcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTU0Ni0gKi9cXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo1NDc6aW50IGh1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNTQ4LXtcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTU2NT1sb25nIGh1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvcyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNTkzLS8qIFJldHVybiB0cnVlIGlmZiBhIEh1Z2VUTEIgd2hvc2Ugdm1lbW1hcCBzaG91bGQgYW5kIGNhbiBiZSBvcHRpbWl6ZWQuICovXFxubW0vaHVnZXRsYl92bWVtbWFwLmM6NTk0OnN0YXRpYyBib29sIHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNTk1LXtcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTYxMy1cXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo2MTQ6c3RhdGljIGludCBfX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9mb2xpbyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLFxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTYxNS1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTY4OC0gKi9cXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo2ODk6dm9pZCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy02OTAte1xcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNjk2LVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjY5NzpzdGF0aWMgaW50IGh1Z2V0bGJfdm1lbW1hcF9zcGxpdF9mb2xpbyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTY5OC17XFxuLS1cXG5tbS9odWdldGxiX3ZtZW1tYXAuYy03MTMtXFxubW0vaHVnZXRsYl92bWVtbWFwLmM6NzE0OnN0YXRpYyB2b2lkIF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpoLFxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTcxNS1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNzk0LVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjc5NTp2b2lkIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy03OTYte1xcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNzk5LVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjgwMDp2b2lkIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9ib290bWVtX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTgwMS17XFxuLS1cXG5tbS9odWdldGxiX3ZtZW1tYXAuYy04MDctLyogUmV0dXJuIHRydWUgb2YgYSBib290bWVtIGFsbG9jYXRlZCBIdWdlVExCIHBhZ2Ugc2hvdWxkIGJlIHByZS1IVk8tZWQgKi9cXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo4MDg6c3RhdGljIGJvb2wgdm1lbW1hcF9zaG91bGRfb3B0aW1pemVfYm9vdG1lbV9wYWdlKHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqbSlcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy04MDkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNToxMjo1MC4yNDkxOTQ4ODlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjQ4ODg1MDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIEh1Z2V0bGIgVm1lbW1hcCBNb2RpZmljYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIGluIGBtbS9odWdldGxiX3ZtZW1tYXAuY2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIG1vZGlmaWNhdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGVpciBpbXBsaWNhdGlvbnMuIEZyb20gdGhlIHByb3ZpZGVkIGxpc3QsIGl0IGxvb2tzIGxpa2UgdGhlcmUncyBiZWVuIHNvbWUgdGFyZ2V0ZWQgd29yayBvbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBodWdlcGFnZXMgYW5kIHRoZSB2bWVtbWFwLlxuXG5JJ20gc2VlaW5nIGEgbG90IG9mIGZ1bmN0aW9ucyBoZXJlLCBidXQgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBvbmVzIHRoYXQgYXJlIGxpa2VseSB0byBiZSB0aGUgbW9zdCBjcml0aWNhbCwgYW5kIG5vdCBzaW1wbGUgZ2VuZXJpYyBob3QgcGF0aHMuIEJhc2VkIG9uIHRoZSBuYW1pbmcgYW5kIGxpa2VseSBmdW5jdGlvbiwgSSdkIHNheSB0aGUgb25lcyB0aGF0IHN0YW5kIG91dCBhcyB3b3J0aHkgb2YgaW1tZWRpYXRlIGF0dGVudGlvbiBhcmU6XG5cbiogICBgdm1lbW1hcF9zcGxpdF9wbWRgXG4qICAgYHZtZW1tYXBfcmVtYXBfcHRlYFxuKiAgIGB2bWVtbWFwX3Jlc3RvcmVfcHRlYFxuKiAgIGB2bWVtbWFwX3JlbWFwX2ZyZWVgXG4qICAgYHZtZW1tYXBfcmVtYXBfYWxsb2NgXG4qICAgYGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGVgXG4qICAgYF9faHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW9gXG4qICAgYF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvYFxuXG5UaG9zZSBzZWVtIHRvIGJlIHRoZSBvbmVzIHRoYXQgZGlyZWN0bHkgYWZmZWN0IGhvdyBwYWdlcyBhcmUgcmVtYXBwZWQsIGZyZWVkLCBhbmQgb3B0aW1pemVkIGluIHRoZSBjb250ZXh0IG9mIGh1Z2V0bGJmcy4gVGhlIGB0cnlfZGlzYWJsZWAgYW5kIGZvbGlvIGZ1bmN0aW9ucyBzdWdnZXN0IGFuIG9wdGltaXphdGlvbiBzdHJhdGVneSBpcyBpbnZvbHZlZC5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgY2hlY2sgZm9yIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJdCBsb29rcyBsaWtlIGBBUk02NF9IV19BRkRCTWAgaXMgc2VsZWN0ZWQgb24gQVJNNjQgYnkgZGVmYXVsdC4gSXMgdGhhdCBhIEtjb25maWcgb3B0aW9uIHRoYXQgaW1wYWN0cyB0aGUgYmVoYXZpb3Igb2YgdGhlc2UgZnVuY3Rpb25zPyBJIHNob3VsZCB2ZXJpZnkgdGhhdCBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDM5LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjEyOjU2LjQ5ODA4MzE1MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MzM4NDY3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVJNNjRfSFdfQUZEQk1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnPTE5MDA9bWVudSBcXFwiQVJNdjguMSBhcmNoaXRlY3R1cmFsIGZlYXR1cmVzXFxcIlxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xOTAxLVxcbmFyY2gvYXJtNjQvS2NvbmZpZzoxOTAyOmNvbmZpZyBBUk02NF9IV19BRkRCTVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xOTAzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGhhcmR3YXJlIHVwZGF0ZXMgb2YgdGhlIEFjY2VzcyBhbmQgRGlydHkgcGFnZSBmbGFnc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6MTI6NTguMzcxNDc2MDE2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NDY1OTAwMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEFSTTY0IGFuZCBIdWdlIFBhZ2VzIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgQVJNNjRfSFdfQUZEQk1gIGlzIGRlZmluaXRlbHkgYSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBzaW1wbHkgZW5hYmxlIGBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUGAsIGBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OYCwgYW5kIGBBUk02NF9IV19BRkRCTWAuXG5cbkJ1dCB0aGVuIEkgcmVtZW1iZXJlZCB0aGF0IGBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUGAgaXMgYSBgZGVmX2Jvb2xgIHRoYXQncyBjb250aW5nZW50IG9uIGBIVUdFVExCX1BBR0VgIGJlaW5nIGVuYWJsZWQuIFNvLCB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBsb2dpYyB3aWxsIGhhbmRsZSBpdHMgZW5hYmxpbmcgYXV0b21hdGljYWxseSwgKmlmKiB0aGUgZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQuIExldCdzIHNlZS4uLiB0aGUgZGVwZW5kZW5jaWVzIGFyZSBgQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUGAgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAuIEFuZCBhaC1oYSEgYEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBgICppcyogc2VsZWN0ZWQgYnkgYEFSTTY0YCBpZiBgQVJNNjRfSFdfQUZEQk1gIGlzIHNldC4gU28sIHRoZSByZWFsIGVuYWJsZXIgaGVyZSBvbiBBUk02NCBpcyBpbmRlZWQgYEFSTTY0X0hXX0FGREJNYC5cblxuVGhhdCBsZWF2ZXMgdXMgd2l0aCBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTmAuIFRoaXMgaXMgYSBib29sZWFuIG9wdGlvbiB0aGF0IGRlZmF1bHRzIHRvIFwiblwiLCBzbyB3ZSBkZWZpbml0ZWx5IHdhbnQgdG8gbWFrZSBzdXJlICp0aGF0KiBpcyBlbmFibGVkLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGJlaW5nIHNldCBjb3JyZWN0bHkgd2l0aGluIHRoZSBgZnMvS2NvbmZpZ2AgZmlsZS4gQWxzbywgbGV0J3MgYXNzdW1lIGBIVUdFVExCX1BBR0VgIGlzIGFscmVhZHkgZW5hYmxlZCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBhYm91dCB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDg4NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNToxMzowNS4xMTgwNjk2NzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjkzMTk3MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG5mcy9LY29uZmlnLTI2NC1cXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNToxMzowNi45ODc0MjY2NjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzEwOTIyMDkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgSHVnZXRsYiBWbWVtbWFwIE9wdGltaXphdGlvbiBDaGVja2xpc3QqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdGhpbmtpbmcgYWJvdXQgdGhlIGBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUGAgZmVhdHVyZS4gWWVzLCBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTmAgaXMgZGVmaW5pdGVseSB0aGUga2V5IGhlcmUg4oCTIHRoYXQncyB0aGUgZGVmYXVsdCBzdGF0ZSB3ZSdyZSBzaG9vdGluZyBmb3IuXG5cbkFscmlnaHQsIGxldCdzIG5haWwgZG93biB0aGUgY29yZSBlbGVtZW50cy4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIGFyZTogYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQYCwgYEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05gLCBhbmQgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBgQVJNNjRfSFdfQUZEQk1gICh3aGljaCwga25vd2luZyBob3cgdGhlc2UgdGhpbmdzIHdvcmssIGxpa2VseSBpbnRlcmFjdHMgd2l0aCB0aGUgb3B0aW1pemF0aW9uIGluIHNvbWUgd2F5KS5cblxuTm93IGZvciB0aGUgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuIE15IGluaXRpYWwgbGlzdCB3YXM6IGB2bWVtbWFwX3NwbGl0X3BtZGAsIGB2bWVtbWFwX3JlbWFwX3B0ZWAsIGB2bWVtbWFwX3Jlc3RvcmVfcHRlYCwgYHZtZW1tYXBfcmVtYXBfZnJlZWAsIGB2bWVtbWFwX3JlbWFwX2FsbG9jYCwgYGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGVgLCBgX19odWdldGxiX3ZtZW1tYXBfcmVzdG9yZV9mb2xpb2AsIGFuZCBgX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW9gLlxuXG5CdXQsIHdhaXQsIGxldCdzIHJlZmluZSB0aGF0IGxpc3QgZm9yIGNvbXBsZXRlbmVzcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEknbGwgYWRkIGB2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9mb2xpb2AgYW5kIGB2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9ib290bWVtX3BhZ2VgIHRvIHRoZSBsaXN0LiBUaGF0IGZlZWxzIG1vcmUgY29tcGxldGUuXG5cbk9rYXksIHRoaXMgcmV2aXNlZCBsaXN0IGxvb2tzIHByZXR0eSBzb2xpZC4gSXQgY292ZXJzIHRoZSBjb3JlIG9wZXJhdGlvbnMgYW5kIGNoZWNrcyByZWxhdGVkIHRvIHRoZSB2bWVtbWFwIG9wdGltaXphdGlvbi5cblxuTGV0J3MgZG8gYSBxdWljayBzd2VlcCBmb3IgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmdW5jdGlvbnMuIEkgc2hvdWxkIGNoZWNrIGBhcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNgIG5vdy4gUmlnaHQsIEkgZm91bmQgYGxhdGVfY3B1X2VuYWJsZV9odm9gIGFuZCBgaHZvX2NvbXBhdGlibGVgLiBUaGVzZSBhcmUgYWxzbyBzdHJvbmcgY2FuZGlkYXRlcyBhbmQgY291bGQgcHJvdmlkZSBpbXBvcnRhbnQgY2x1ZXMsIHNvIHRoZXkncmUgaW4uIFRoYXQncyBnb29kLiBOb3csIEkgZmVlbCBhIGxvdCBtb3JlIGNvbmZpZGVudC4gSSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGFzcGVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2NDksIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6MTM6MTQuMDk2NjUxNDQ1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTgzMjI1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhpbnR8dm9pZHxib29sKSBbYS16QS1aMC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0xNTA9c3RhdGljIGNwdW1hc2tfdmFyX3QgY3B1XzMyYml0X2VsMF9tYXNrIF9fY3B1bWFza192YXJfcmVhZF9tb3N0bHk7XFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE1MS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTUyOnZvaWQgZHVtcF9jcHVfZmVhdHVyZXModm9pZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTUzLXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTgtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIxOTpzdGF0aWMgdm9pZCBjcHVfZW5hYmxlX2NucChzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBjb25zdCAqY2FwKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjIwLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMjE6c3RhdGljIGJvb2wgX19zeXN0ZW1fbWF0Y2hlc19jYXAodW5zaWduZWQgaW50IG4pO1xcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjItXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9Nzk4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgX19mdHJfcmVnX2VudHJ5IHtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy04NzctXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjg3ODpzdGF0aWMgaW50IHNlYXJjaF9jbXBfZnRyX3JlZyhjb25zdCB2b2lkICppZCwgY29uc3Qgdm9pZCAqcmVncClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtODc5LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz05NjQ9c3RhdGljIHZvaWQgX19pbml0IHNvcnRfZnRyX3JlZ3Modm9pZClcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xMDE5LSAqL1xcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxMDIwOnN0YXRpYyB2b2lkIGluaXRfY3B1X2Z0cl9yZWcodTMyIHN5c19yZWcsIHU2NCBuZXcpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEwMjEte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTExMTQ9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX2Jvb3RfY3B1X2NhcGFiaWxpdGllcyh2b2lkKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTExNS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTExNjpzdGF0aWMgdm9pZCBpbml0XzMyYml0X2NwdV9mZWF0dXJlcyhzdHJ1Y3QgY3B1aW5mb18zMmJpdCAqaW5mbylcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTExNy17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MTE2OT1zdGF0aWMgaW5saW5lIHZvaWQgZGV0ZWN0X3N5c3RlbV9zdXBwb3J0c19wc2V1ZG9fbm1pKHZvaWQpIHsgfVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTExNzEtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjExNzI6c3RhdGljIGJvb2wgZGV0ZWN0X2Z0cl9oYXNfbXBhbSh2b2lkKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xMTczLXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0xMTgwPXZvaWQgX19pbml0IGluaXRfY3B1X2ZlYXR1cmVzKHN0cnVjdCBjcHVpbmZvX2FybTY0ICppbmZvKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEyMzUtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjEyMzY6c3RhdGljIHZvaWQgdXBkYXRlX2NwdV9mdHJfcmVnKHN0cnVjdCBhcm02NF9mdHJfcmVnICpyZWcsIHU2NCBuZXcpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEyMzcte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEyNTItXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjEyNTM6c3RhdGljIGludCBjaGVja191cGRhdGVfZnRyX3JlZyh1MzIgc3lzX2lkLCBpbnQgY3B1LCB1NjQgdmFsLCB1NjQgYm9vdClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTI1NC17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTI2Ny1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTI2ODpzdGF0aWMgdm9pZCByZWxheF9jcHVfZnRyX3JlZyh1MzIgc3lzX2lkLCBpbnQgZmllbGQpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEyNjkte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEyODYtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjEyODc6c3RhdGljIHZvaWQgbGF6eV9pbml0XzMyYml0X2NwdV9mZWF0dXJlcyhzdHJ1Y3QgY3B1aW5mb19hcm02NCAqaW5mbyxcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTI4OC1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGNwdWluZm9fYXJtNjQgKmJvb3QpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTMwMi1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTMwMzpzdGF0aWMgaW50IHVwZGF0ZV8zMmJpdF9jcHVfZmVhdHVyZXMoaW50IGNwdSwgc3RydWN0IGNwdWluZm9fMzJiaXQgKmluZm8sXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEzMDQtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgY3B1aW5mb18zMmJpdCAqYm9vdClcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xMzc4LSAqL1xcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxMzc5OnZvaWQgdXBkYXRlX2NwdV9mZWF0dXJlcyhpbnQgY3B1LFxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xMzgwLVxcdFxcdFxcdCBzdHJ1Y3QgY3B1aW5mb19hcm02NCAqaW5mbyxcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0xNzI0PWRldmljZV9pbml0Y2FsbChhYXJjaDMyX2VsMF9zeXNmc19pbml0KTtcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTcyNS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTcyNjpzdGF0aWMgYm9vbCBoYXNfMzJiaXRfZWwwKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IHNjb3BlKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xNzI3LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xNzM2LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxNzM3OnN0YXRpYyBib29sIGhhc191c2VhYmxlX2dpY3YzX2NwdWlmKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IHNjb3BlKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xNzM4LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xNzUxLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxNzUyOnN0YXRpYyBib29sIGhhc19jYWNoZV9pZGMoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LFxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xNzUzLVxcdFxcdFxcdCAgaW50IHNjb3BlKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE3NjQtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE3NjU6c3RhdGljIHZvaWQgY3B1X2VtdWxhdGVfZWZmZWN0aXZlX2N0cihjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqX191bnVzZWQpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE3NjYte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE3NzYtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE3Nzc6c3RhdGljIGJvb2wgaGFzX2NhY2hlX2RpYyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE3NzgtXFx0XFx0XFx0ICBpbnQgc2NvcGUpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MTgwOD1zdGF0aWMgaW50IF9fa3B0aV9mb3JjZWQ7IC8qIDA6IG5vdCBmb3JjZWQsIFxcdTAwM2UwOiBmb3JjZWQgb24sIFxcdTAwM2MwOiBmb3JjZWQgb2ZmICovXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE4MDktXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE4MTA6c3RhdGljIGJvb2wgdW5tYXBfa2VybmVsX2F0X2VsMChjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE4MTEtXFx0XFx0XFx0XFx0aW50IHNjb3BlKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE4ODUtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE4ODY6c3RhdGljIGJvb2wgaGFzX252MShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBzY29wZSlcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTg4Ny17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTkwOC0jaWYgZGVmaW5lZChJRF9BQTY0TU1GUjBfRUwxX1RHUkFOX0xQQTIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoSURfQUE2NE1NRlIwX0VMMV9UR1JBTl8yX1NVUFBPUlRFRF9MUEEyKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxOTA5OnN0YXRpYyBib29sIGhhc19scGEyX2F0X3N0YWdlMSh1NjQgbW1mcjApXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5MTAte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5MTctXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE5MTg6c3RhdGljIGJvb2wgaGFzX2xwYTJfYXRfc3RhZ2UyKHU2NCBtbWZyMClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTkxOS17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTkyNi1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTkyNzpzdGF0aWMgYm9vbCBoYXNfbHBhMihjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBzY29wZSlcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTkyOC17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTkzNC0jZWxzZVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxOTM1OnN0YXRpYyBib29sIGhhc19scGEyKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IHNjb3BlKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTM2LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTQxLSNpZmRlZiBDT05GSUdfSFdfUEVSRl9FVkVOVFNcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MTk0MjpzdGF0aWMgYm9vbCBoYXNfcG11djMoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LCBpbnQgc2NvcGUpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5NDMte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5NTMtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjE5NTQ6c3RhdGljIHZvaWQgY3B1X2VuYWJsZV9rcHRpKHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGNvbnN0ICpjYXApXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTE5NTUte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTE5ODA9c3RhdGljIGlubGluZSB2b2lkIF9fY3B1X2VuYWJsZV9od19kYm0odm9pZClcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTg4LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoxOTg5OnN0YXRpYyBib29sIGNwdV9oYXNfYnJva2VuX2RibSh2b2lkKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0xOTkwLXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDA2LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMDA3OnN0YXRpYyBib29sIGNwdV9jYW5fdXNlX2RibShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDA4LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDEyLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMDEzOnN0YXRpYyB2b2lkIGNwdV9lbmFibGVfaHdfZGJtKHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGNvbnN0ICpjYXApXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIwMTQte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIwMjAtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIwMjE6c3RhdGljIGJvb2wgaGFzX2h3X2RibShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwLFxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDIyLVxcdFxcdCAgICAgICBpbnQgX191bnVzZWQpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MjA0OD1zdGF0aWMgc3RydWN0IGNwdW1hc2sgYW11X2NwdXMgX19yZWFkX21vc3RseTtcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjA0OS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjA1MDpib29sIGNwdV9oYXNfYW11X2ZlYXQoaW50IGNwdSlcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjA1MS17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjA1NC1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjA1NTppbnQgZ2V0X2NwdV93aXRoX2FtdV9mZWF0KHZvaWQpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIwNTYte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIwNTktXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIwNjA6c3RhdGljIHZvaWQgY3B1X2FtdV9lbmFibGUoc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgY29uc3QgKmNhcClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjA2MS17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjA3MC1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjA3MTpzdGF0aWMgYm9vbCBoYXNfYW11KGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXAsXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIwNzItXFx0XFx0ICAgIGludCBfX3VudXNlZClcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDg5LSNlbHNlXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIwOTA6aW50IGdldF9jcHVfd2l0aF9hbXVfZmVhdCh2b2lkKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDkxLXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDk1LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMDk2OnN0YXRpYyBib29sIHJ1bnNfYXRfZWwyKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IF9fdW51c2VkKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMDk3LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTAwLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMTAxOnN0YXRpYyB2b2lkIGNwdV9jb3B5X2VsMnJlZ3MoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKl9fdW51c2VkKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTAyLXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTE0LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMTE1OnN0YXRpYyBib29sIGhhc19uZXN0ZWRfdmlydF9zdXBwb3J0KGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXAsXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIxMTYtXFx0XFx0XFx0XFx0ICAgIGludCBzY29wZSlcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTI4LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMTI5OnN0YXRpYyBib29sIGh2aGVfcG9zc2libGUoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LFxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTMwLVxcdFxcdFxcdCAgaW50IF9fdW51c2VkKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIxMzQtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIxMzU6Ym9vbCBjcHVfc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCh2b2lkKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTM2LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMTcwLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMTcxOnN0YXRpYyBib29sIGhhc19iYm1sMl9ub2Fib3J0KGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXBzLCBpbnQgc2NvcGUpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIxNzIte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIxNzUtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIxNzY6c3RhdGljIGJvb2wgaHZvX2NvbXBhdGlibGUoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmNhcHMsIGludCBzY29wZSlcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjE3Ny17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjE4NC1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjE4NTpzdGF0aWMgYm9vbCBsYXRlX2NwdV9lbmFibGVfaHZvKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjE4Ni17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjIwMC1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjIwMTpzdGF0aWMgdm9pZCBjcHVfZW5hYmxlX3Bhbihjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqX191bnVzZWQpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyMDIte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyMTMtI2lmZGVmIENPTkZJR19BUk02NF9SQVNfRVhUTlxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMjE0OnN0YXRpYyB2b2lkIGNwdV9jbGVhcl9kaXNyKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjIxNS17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjIxOC19XFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIyMTk6c3RhdGljIGJvb2wgaGFzX3Jhc3YxcDEoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKl9fdW51c2VkLCBpbnQgc2NvcGUpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyMjAte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyMzktI2lmZGVmIENPTkZJR19BUk02NF9QVFJfQVVUSFxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMjQwOnN0YXRpYyBib29sIGhhc19hZGRyZXNzX2F1dGhfY3B1Y2FwKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IHNjb3BlKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjQxLXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjY1LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMjY2OnN0YXRpYyBib29sIGhhc19hZGRyZXNzX2F1dGhfbWV0YWNhcChjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIyNjctXFx0XFx0XFx0XFx0ICAgICBpbnQgc2NvcGUpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjI3NS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjI3NjpzdGF0aWMgYm9vbCBoYXNfZ2VuZXJpY19hdXRoKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSxcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjI3Ny1cXHRcXHRcXHQgICAgIGludCBfX3VudXNlZClcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjg3LSNpZmRlZiBDT05GSUdfQVJNNjRfRTBQRFxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMjg4OnN0YXRpYyB2b2lkIGNwdV9lbmFibGVfZTBwZChzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBjb25zdCAqY2FwKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjg5LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjk0LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMjk1OnN0YXRpYyB2b2lkIGNwdV9lbmFibGVfbHM2NChzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBjb25zdCAqY2FwKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjk2LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMjk5LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyMzAwOnN0YXRpYyB2b2lkIGNwdV9lbmFibGVfbHM2NF92KHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGNvbnN0ICpjYXApXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIzMDEte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIzMDUtI2lmZGVmIENPTkZJR19BUk02NF9QU0VVRE9fTk1JXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIzMDY6c3RhdGljIGJvb2wgY2FuX3VzZV9naWNfcHJpb3JpdGllcyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIzMDctXFx0XFx0XFx0XFx0ICAgaW50IHNjb3BlKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIzMTktXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIzMjA6c3RhdGljIGJvb2wgaGFzX2dpY19wcmlvX3JlbGF4ZWRfc3luYyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIzMjEtXFx0XFx0XFx0XFx0ICAgICAgaW50IHNjb3BlKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTIzNDgtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjIzNDk6c3RhdGljIGJvb2wgY2FuX3RyYXBfaWN2X2Rpcl9lbDEoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LFxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yMzUwLVxcdFxcdFxcdFxcdCBpbnQgc2NvcGUpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQwMS0jaWZkZWYgQ09ORklHX0FSTTY0X0JUSVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyNDAyOnN0YXRpYyB2b2lkIGJ0aV9lbmFibGUoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKl9fdW51c2VkKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNDAzLXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0yNDE2LSNpZmRlZiBDT05GSUdfQVJNNjRfTVRFXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjI0MTc6c3RhdGljIHZvaWQgY3B1X2VuYWJsZV9tdGUoc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgY29uc3QgKmNhcClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQxOC17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQzOS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjQ0MDpzdGF0aWMgdm9pZCB1c2VyX2ZlYXR1cmVfZml4dXAodm9pZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ0MS17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ1OC1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjQ1OTpzdGF0aWMgdm9pZCBlbGZfaHdjYXBfZml4dXAodm9pZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ2MC17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ2Ny0jaWZkZWYgQ09ORklHX0tWTVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyNDY4OnN0YXRpYyBib29sIGlzX2t2bV9wcm90ZWN0ZWRfbW9kZShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBfX3VudXNlZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ2OS17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ3My1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjQ3NDpzdGF0aWMgdm9pZCBjcHVfdHJhcF9lbDBfaW1wZGVmKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ3NS17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ3OC1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MjQ3OTpzdGF0aWMgdm9pZCBjcHVfZW5hYmxlX2RpdChjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqX191bnVzZWQpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTI0ODAte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTI0ODMtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjI0ODQ6c3RhdGljIHZvaWQgY3B1X2VuYWJsZV9tb3BzKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ4NS17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ4OS0jaWZkZWYgQ09ORklHX0FSTTY0X1BPRVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyNDkwOnN0YXRpYyB2b2lkIGNwdV9lbmFibGVfcG9lKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ5MS17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ5Ny0jaWZkZWYgQ09ORklHX0FSTTY0X0dDU1xcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzoyNDk4OnN0YXRpYyB2b2lkIGNwdV9lbmFibGVfZ2NzKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpfX3VudXNlZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMjQ5OS17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MzI5MD1zdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgcHRyX2F1dGhfaHdjYXBfZ2VuX21hdGNoZXNbXSA9IHtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zMzA0LSNpZmRlZiBDT05GSUdfQVJNNjRfU1ZFXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjMzMDU6c3RhdGljIGJvb2wgaGFzX3N2ZV9mZWF0dXJlKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXAsIGludCBzY29wZSlcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzMwNi17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzMxMS0jaWZkZWYgQ09ORklHX0FSTTY0X1NNRVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozMzEyOnN0YXRpYyBib29sIGhhc19zbWVfZmVhdHVyZShjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwLCBpbnQgc2NvcGUpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTMzMTMte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTMzMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2VsZl9od2NhcHNbXSA9IHtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zNDU4LSNpZmRlZiBDT05GSUdfQ09NUEFUXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM0NTk6c3RhdGljIGJvb2wgY29tcGF0X2hhc19uZW9uKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXAsIGludCBzY29wZSlcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzQ2MC17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MzQ4MD1zdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgY29tcGF0X2VsZl9od2NhcHNbXSA9IHtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zNTAzLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozNTA0OnN0YXRpYyB2b2lkIGNhcF9zZXRfZWxmX2h3Y2FwKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpjYXApXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM1MDUte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM1MjQtLyogQ2hlY2sgaWYgd2UgaGF2ZSBhIHBhcnRpY3VsYXIgSFdDQVAgZW5hYmxlZCAqL1xcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozNTI1OnN0YXRpYyBib29sIGNwdXNfaGF2ZV9lbGZfaHdjYXAoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmNhcClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzUyNi17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzU0OC1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MzU0OTpzdGF0aWMgdm9pZCBzZXR1cF9lbGZfaHdjYXBzKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICpod2NhcHMpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM1NTAte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM1NTctXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM1NTg6c3RhdGljIHZvaWQgdXBkYXRlX2NwdV9jYXBhYmlsaXRpZXModTE2IHNjb3BlX21hc2spXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM1NTkte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM2MTUtICovXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM2MTY6c3RhdGljIGludCBjcHVfZW5hYmxlX25vbl9ib290X3Njb3BlX2NhcGFiaWxpdGllcyh2b2lkICpfX3VudXNlZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzYxNy17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9MzY0MD1zdGF0aWMgdm9pZCBfX2luaXQgZW5hYmxlX2NwdV9jYXBhYmlsaXRpZXModTE2IHNjb3BlX21hc2spXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzY4My0gKi9cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MzY4NDpzdGF0aWMgdm9pZCB2ZXJpZnlfbG9jYWxfY3B1X2NhcHModTE2IHNjb3BlX21hc2spXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM2ODUte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM3NDgtICovXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM3NDk6c3RhdGljIHZvaWQgY2hlY2tfZWFybHlfY3B1X2ZlYXR1cmVzKHZvaWQpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM3NTAte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jPTM3NTc9X192ZXJpZnlfbG9jYWxfZWxmX2h3Y2Fwcyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqY2FwcylcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zNzY3LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozNzY4OnN0YXRpYyB2b2lkIHZlcmlmeV9sb2NhbF9lbGZfaHdjYXBzKHZvaWQpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM3Njkte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM3NzUtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM3NzY6c3RhdGljIHZvaWQgdmVyaWZ5X3N2ZV9mZWF0dXJlcyh2b2lkKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zNzc3LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zNzg4LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozNzg5OnN0YXRpYyB2b2lkIHZlcmlmeV9zbWVfZmVhdHVyZXModm9pZClcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzc5MC17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzgwMS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6MzgwMjpzdGF0aWMgdm9pZCB2ZXJpZnlfaHlwX2NhcGFiaWxpdGllcyh2b2lkKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zODAzLXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zODMyLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozODMzOnN0YXRpYyB2b2lkIHZlcmlmeV9tcGFtX2NhcGFiaWxpdGllcyh2b2lkKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zODM0LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zODcwLSAqL1xcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzozODcxOnN0YXRpYyB2b2lkIHZlcmlmeV9sb2NhbF9jcHVfY2FwYWJpbGl0aWVzKHZvaWQpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM4NzIte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM4OTMtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM4OTQ6dm9pZCBjaGVja19sb2NhbF9jcHVfY2FwYWJpbGl0aWVzKHZvaWQpXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM4OTUte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM5MTMtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM5MTQ6Ym9vbCB0aGlzX2NwdV9oYXNfY2FwKHVuc2lnbmVkIGludCBuKVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy0zOTE1LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz0zOTMyPXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIF9fc3lzdGVtX21hdGNoZXNfY2FwKHVuc2lnbmVkIGludCBuKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTM5NDItXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjM5NDM6dm9pZCBjcHVfc2V0X2ZlYXR1cmUodW5zaWduZWQgaW50IG51bSlcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzk0NC17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzk0Ny1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6Mzk0ODpib29sIGNwdV9oYXZlX2ZlYXR1cmUodW5zaWduZWQgaW50IG51bSlcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtMzk0OS17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM9NDA2Nj12b2lkIF9faW5pdCBzZXR1cF91c2VyX2ZlYXR1cmVzKHZvaWQpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtNDA3OS1cXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmM6NDA4MDpzdGF0aWMgaW50IGVuYWJsZV9taXNtYXRjaGVkXzMyYml0X2VsMCh1bnNpZ25lZCBpbnQgY3B1KVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy00MDgxLXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYz00MTYzPXN0YXRpYyBpbmxpbmUgaW50IGVtdWxhdGVfaWRfcmVnKHUzMiBpZCwgdTY0ICp2YWxwKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTQxODItXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjQxODM6c3RhdGljIGludCBlbXVsYXRlX3N5c19yZWcodTMyIGlkLCB1NjQgKnZhbHApXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTQxODQte1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jLTQyMDQtXFxuYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jOjQyMDU6aW50IGRvX2VtdWxhdGVfbXJzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1MzIgc3lzX3JlZywgdTMyIHJ0KVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy00MjA2LXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYy00MjE3LVxcbmFyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYzo0MjE4OmJvb2wgdHJ5X2VtdWxhdGVfbXJzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1MzIgaW5zbilcXG5hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMtNDIxOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjEzOjE0LjE2NjQ4OTQxN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDgzOTI3NTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIGZvciBBUk02NCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCBhbmQgSSdtIGZlZWxpbmcgZ29vZCBhYm91dCB3aGVyZSBpdCdzIGhlYWRlZC4gVGhlIGluY2x1c2lvbiBvZiBgbGF0ZV9jcHVfZW5hYmxlX2h2b2AgYW5kIGBodm9fY29tcGF0aWJsZWAgaXMgYSBzb2xpZCBhZGRpdGlvbiwgYW5kIHRoZXkgZGVmaW5pdGVseSBuZWVkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBmb2N1cyBzeW1ib2xzLlxuXG5TbywgdGhlIGRlZmluaXRpdmUgbGlzdCBvZiBmdW5jdGlvbnMgZm9yIGFuYWx5c2lzIGxvb2tzIGxpa2UgdGhpcywgYW5kIGl0IHNlZW1zIGxpa2UgYSB2ZXJ5IGdvb2Qgc2V0IHRvIGZvY3VzIG9uOlxuKiAgIGB2bWVtbWFwX3NwbGl0X3BtZGBcbiogICBgdm1lbW1hcF9yZW1hcF9wdGVgXG4qICAgYHZtZW1tYXBfcmVzdG9yZV9wdGVgXG4qICAgYHZtZW1tYXBfcmVtYXBfZnJlZWBcbiogICBgdm1lbW1hcF9yZW1hcF9hbGxvY2BcbiogICBgaHVnZXRsYl92bWVtbWFwX29wdGltaXphdGlvbl90cnlfZGlzYWJsZWBcbiogICBgX19odWdldGxiX3ZtZW1tYXBfcmVzdG9yZV9mb2xpb2BcbiogICBgX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW9gXG4qICAgYHZtZW1tYXBfc2hvdWxkX29wdGltaXplX2ZvbGlvYFxuKiAgIGB2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9ib290bWVtX3BhZ2VgXG4qICAgYGxhdGVfY3B1X2VuYWJsZV9odm9gXG4qICAgYGh2b19jb21wYXRpYmxlYFxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbnMuIFdlJ3JlIGNsZWFybHkgZGVhbGluZyB3aXRoOlxuKiAgIGBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUGBcbiogICBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTmBcbiogICBgQVJNNjRfSFdfQUZEQk1gXG5cbkp1c3QgZG91YmxlLWNoZWNraW5nLi4ueWVwLCBgY29uZmlnIEFSTTY0X0hXX0FGREJNYCBpcyB0aGUgcmlnaHQgbmFtZS4gQW5kIHdoaWxlIHdlIG5lZWQgYEhVR0VUTEJfUEFHRWAgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAsIHRoZXkncmUgZ2VuZXJpYyBhbmQgbm90IHNwZWNpZmljIHRvIHRoaXMgQVJNNjQgb3B0aW1pemF0aW9uLlxuXG5Pa2F5LCBsZXQncyByZWNhcCB0aGUgcmF0aW9uYWxlIGhlcmUuIFRoZSBwYXRjaCBpcyBhYm91dCBicmluZ2luZyBBUk02NCBzdXBwb3J0IHRvIEh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykuIEl0J3MgYmVlbiB0b3VjaGluZyBjb3JlIGtlcm5lbCBsb2dpYyBpbiBgbW0vaHVnZXRsYl92bWVtbWFwLmNgIGFuZCBsZXZlcmFnaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIHZtZW1tYXAgUE1EcyBhbmQgUFRFcy4gSXQncyBhbHNvIGFkZGluZyB0aG9zZSBuZWNlc3NhcnkgQ1BVIGNhcGFiaWxpdHkgY2hlY2tzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGVzcGVjaWFsbHkgYXJvdW5kIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgb2YgSHVnZVRMQiBwYWdlcyB3aGVuIEhWTyBpcyBlbmFibGVkLCBtYWtpbmcgaXQgcHJpbWUgZm9yIGZ1enppbmcuXG5cbkFscmlnaHQsIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ1NDUsIk91dHB1dFRva2VucyI6MzIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE1OjEzOjIzLjY1MDQxOTU0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY0NTQ4OTcsIkVycm9yIjoidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEFSTTY0X0hXX0FGREJNIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXCIsXG4gICAgXCJIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXCIsXG4gICAgXCJBUk02NF9IV19BRkRCTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtZW1tYXBfc3BsaXRfcG1kXCIsXG4gICAgXCJ2bWVtbWFwX3JlbWFwX3B0ZVwiLFxuICAgIFwidm1lbW1hcF9yZXN0b3JlX3B0ZVwiLFxuICAgIFwidm1lbW1hcF9yZW1hcF9mcmVlXCIsXG4gICAgXCJ2bWVtbWFwX3JlbWFwX2FsbG9jXCIsXG4gICAgXCJodWdldGxiX3ZtZW1tYXBfb3B0aW1pemF0aW9uX3RyeV9kaXNhYmxlXCIsXG4gICAgXCJfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvXCIsXG4gICAgXCJfX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9mb2xpb1wiLFxuICAgIFwidm1lbW1hcF9zaG91bGRfb3B0aW1pemVfZm9saW9cIixcbiAgICBcInZtZW1tYXBfc2hvdWxkX29wdGltaXplX2Jvb3RtZW1fcGFnZVwiLFxuICAgIFwibGF0ZV9jcHVfZW5hYmxlX2h2b1wiLFxuICAgIFwiaHZvX2NvbXBhdGlibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEFSTTY0IHN1cHBvcnQgZm9yIEh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykuIEl0IG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGluIGBtbS9odWdldGxiX3ZtZW1tYXAuY2AgdG8gdXNlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmdW5jdGlvbnMgZm9yIHBvcHVsYXRpbmcgYW5kIHVwZGF0aW5nIHZtZW1tYXAgUE1EcyBhbmQgUFRFcy4gSXQgYWxzbyBhZGRzIENQVSBjYXBhYmlsaXR5IGNoZWNrcyBmb3IgSFZPIG9uIEFSTTY0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCB3aGVuIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgSHVnZVRMQiBwYWdlcyB3aXRoIEhWTyBlbmFibGVkLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJ0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogQVJNNjRfSFdfQUZEQk1cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6MTM6MjMuNzI2ODk0NjA4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjc0MTE1MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBBUk02NF9IV19BRkRCTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBzZWUgYEFSTTY0X0hXX0FGREJNYCBpcyBhY3R1YWxseSBkZWZpbmVkLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJ1dCB0aGUgd2F5IGl0J3MgdXNlZCBzdWdnZXN0cyBJIHNob3VsZG4ndCBiZSBlbmFibGluZyBpdCBkaXJlY3RseSwgbWF5YmUgaXQncyBkZXBlbmRlbnQgb24gc29tZSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0IGNvdWxkIGJlIHNlbGVjdGVkIGJ5IGFub3RoZXIgS2NvbmZpZyBvcHRpb24sIG9yIGl0IG1pZ2h0IGp1c3QgYmUgdGhlIHdheSBgQVJNNjRfSFdfQUZEQk1gIGlzIGRlZmluZWQgaW4gYGFyY2gvYXJtNjQvS2NvbmZpZ2AuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoYXQgS2NvbmZpZyBmaWxlIGFuZCBzZWUgaG93IHRoaXMgaXMgY29uZmlndXJlZCBhbmQgd2hlcmUgdGhlIGRlcGVuZGVuY2llcyBhcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhpcyBvcHRpb24gdG8gb3RoZXIgY29uZmlndXJhdGlvbnMgYmVmb3JlIEkgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU4NzksIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbInNldC1yZXN1bHRzIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6MTM6MjcuNzk0MzA5ODQ2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAwNDkyNDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBUk02NF9IV19BRkRCTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L0tjb25maWc9MTkwMD1tZW51IFxcXCJBUk12OC4xIGFyY2hpdGVjdHVyYWwgZmVhdHVyZXNcXFwiXFxuYXJjaC9hcm02NC9LY29uZmlnLTE5MDEtXFxuYXJjaC9hcm02NC9LY29uZmlnOjE5MDI6Y29uZmlnIEFSTTY0X0hXX0FGREJNXFxuYXJjaC9hcm02NC9LY29uZmlnLTE5MDMtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgaGFyZHdhcmUgdXBkYXRlcyBvZiB0aGUgQWNjZXNzIGFuZCBEaXJ0eSBwYWdlIGZsYWdzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNToxMzoyOS42OTQ4MDkzNDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk4ODE0MTU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBDb25maWd1cmF0aW9uIERpc2NyZXBhbmN5KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gV2h5IGRpZCB0aGUgYnVpbGQgc3lzdGVtIGZsYWcgYEFSTTY0X0hXX0FGREJNYCBhcyBub24tZXhpc3RlbnQ/IFRoYXQncyBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhdCBsZWFzdCBJIHRob3VnaHQgaXQgd2FzLiBDb3VsZCBpdCBiZSB0aGF0IHRoZSBidWlsZCB0b29scywgb3Igd2hhdGV2ZXIncyBjaGVja2luZyB0aGUgY29uZmlndXJhdGlvbiwgYXJlIHJ1bm5pbmcgYWdhaW5zdCBgeDg2XzY0YCBjb25maWd1cmF0aW9ucz9cblxuWWVzLCB0aGF0IG1ha2VzIHNlbnNlLiBTeXprYWxsZXIsIHRoZSBmdXp6ZXIgdGhhdCdzIGxpa2VseSBkcml2aW5nIHRoaXMgYnVpbGQsIGlzIHR5cGljYWxseSB1c2VkIHdpdGggYHg4Nl82NGAgdGFyZ2V0cy4gQW5kIHRoaXMgc3BlY2lmaWMgcGF0Y2ggSSdtIHdvcmtpbmcgb24gaXMgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgYXJtNjRgLiBTbywgaWYgdGhlIGNvbmZpZ3VyYXRpb24gY2hlY2sgaXMgYXNzdW1pbmcgYW4gYHg4Nl82NGAgY29udGV4dCwgaXQgd291bGRuJ3Qga25vdyBhYm91dCBgQVJNNjRfSFdfQUZEQk1gIGF0IGFsbC5cblxuQWxyaWdodCwgc28gdGhlIHNvbHV0aW9uIGlzIHByb2JhYmx5IHRvIGVpdGhlciBzaW1wbHkgb21pdCBgQVJNNjRfSFdfQUZEQk1gIGZyb20gbXkgY29uZmlnIG9yLCBpZiB0aGlzIG9wdGlvbiBpcyBzdHJpY3RseSBhbiBgYXJtNjRgIGZlYXR1cmUsIGVuc3VyZSBJIG1haW50YWluIGl0IGZvciB0aGUgYGFybTY0YCBjb25maWd1cmF0aW9uLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBjb250ZXh0IG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gYmUgc3VyZS5cblxuQnV0LCBmb3Igbm93LCBsZXQncyBrZWVwIGl0IHNpbXBsZS4gTGV0J3MganVzdCBsZXZlcmFnZSBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBgIGFuZCBgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTmAgaW5zdGVhZC4gVGhhdCdzIGEgc2FmZXIgYmV0IGFuZCB3aWxsIGdldCB0aGluZ3MgbW92aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjIzNiwiT3V0cHV0VG9rZW5zIjozMDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTU6MTM6MzYuNjgyOTU0MTc4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYyNDQ2MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXCIsXG4gICAgXCJIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1lbW1hcF9zcGxpdF9wbWRcIixcbiAgICBcInZtZW1tYXBfcmVtYXBfcHRlXCIsXG4gICAgXCJ2bWVtbWFwX3Jlc3RvcmVfcHRlXCIsXG4gICAgXCJ2bWVtbWFwX3JlbWFwX2ZyZWVcIixcbiAgICBcInZtZW1tYXBfcmVtYXBfYWxsb2NcIixcbiAgICBcImh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGVcIixcbiAgICBcIl9faHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW9cIixcbiAgICBcIl9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvXCIsXG4gICAgXCJ2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9mb2xpb1wiLFxuICAgIFwidm1lbW1hcF9zaG91bGRfb3B0aW1pemVfYm9vdG1lbV9wYWdlXCIsXG4gICAgXCJsYXRlX2NwdV9lbmFibGVfaHZvXCIsXG4gICAgXCJodm9fY29tcGF0aWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgQVJNNjQgc3VwcG9ydCBmb3IgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKS4gSXQgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgaW4gYG1tL2h1Z2V0bGJfdm1lbW1hcC5jYCB0byB1c2UgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgcG9wdWxhdGluZyBhbmQgdXBkYXRpbmcgdm1lbW1hcCBQTURzIGFuZCBQVEVzLiBJdCBhbHNvIGFkZHMgQ1BVIGNhcGFiaWxpdHkgY2hlY2tzIGZvciBIVk8gb24gQVJNNjQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gYWxsb2NhdGluZyBhbmQgZnJlZWluZyBIdWdlVExCIHBhZ2VzIHdpdGggSFZPIGVuYWJsZWQsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXCIsXG4gICAgXCJIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1lbW1hcF9zcGxpdF9wbWRcIixcbiAgICBcInZtZW1tYXBfcmVtYXBfcHRlXCIsXG4gICAgXCJ2bWVtbWFwX3Jlc3RvcmVfcHRlXCIsXG4gICAgXCJ2bWVtbWFwX3JlbWFwX2ZyZWVcIixcbiAgICBcInZtZW1tYXBfcmVtYXBfYWxsb2NcIixcbiAgICBcImh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6YXRpb25fdHJ5X2Rpc2FibGVcIixcbiAgICBcIl9faHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW9cIixcbiAgICBcIl9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvXCIsXG4gICAgXCJ2bWVtbWFwX3Nob3VsZF9vcHRpbWl6ZV9mb2xpb1wiLFxuICAgIFwidm1lbW1hcF9zaG91bGRfb3B0aW1pemVfYm9vdG1lbV9wYWdlXCIsXG4gICAgXCJsYXRlX2NwdV9lbmFibGVfaHZvXCIsXG4gICAgXCJodm9fY29tcGF0aWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgQVJNNjQgc3VwcG9ydCBmb3IgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKS4gSXQgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgaW4gYG1tL2h1Z2V0bGJfdm1lbW1hcC5jYCB0byB1c2UgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgcG9wdWxhdGluZyBhbmQgdXBkYXRpbmcgdm1lbW1hcCBQTURzIGFuZCBQVEVzLiBJdCBhbHNvIGFkZHMgQ1BVIGNhcGFiaWxpdHkgY2hlY2tzIGZvciBIVk8gb24gQVJNNjQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gYWxsb2NhdGluZyBhbmQgZnJlZWluZyBIdWdlVExCIHBhZ2VzIHdpdGggSFZPIGVuYWJsZWQsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow5wtlk[1] Phase: Succeeded StartedAt: 2026-07-08 15:13:48 +0000 UTC FinishedAt: 2026-07-08 15:13:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wtlk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-08 15:13:48 +0000 UTC FinishedAt: 2026-07-08 15:13:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wtlk[2] Phase: Succeeded StartedAt: 2026-07-08 15:13:48 +0000 UTC FinishedAt: 2026-07-08 16:27:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-08 15:13:48 +0000 UTC FinishedAt: 2026-07-08 16:27:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-08 15:13:48 +0000 UTC FinishedAt: 2026-07-08 15:13:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-08 15:13:48 +0000 UTC FinishedAt: 2026-07-08 15:13:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow5wtlk/series-workflow5wtlk-convert-artifact-922180051/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-08 15:13:58 +0000 UTC FinishedAt: 2026-07-08 15:36:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-08 15:13:58 +0000 UTC FinishedAt: 2026-07-08 15:36:42 +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:*877a0faa-8f40-4a3d-b2fb-68ae66317139,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-workflow5wtlk/series-workflow5wtlk-convert-artifact-922180051/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": "7d18c0d8-6249-4846-97dd-4c119bfb4b1d", "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-workflow5wtlk/series-workflow5wtlk-build-action-115776769/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-08 15:13:58 +0000 UTC FinishedAt: 2026-07-08 15:36:32 +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:*877a0faa-8f40-4a3d-b2fb-68ae66317139,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-workflow5wtlk/series-workflow5wtlk-convert-artifact-922180051/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": "7d18c0d8-6249-4846-97dd-4c119bfb4b1d", "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-workflow5wtlk/series-workflow5wtlk-build-action-115776769/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-08 15:36:42 +0000 UTC FinishedAt: 2026-07-08 15:36:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-08 15:36:42 +0000 UTC FinishedAt: 2026-07-08 15:36:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-08 15:36:42 +0000 UTC FinishedAt: 2026-07-08 15:36:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-08 15:36:42 +0000 UTC FinishedAt: 2026-07-08 15:36:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow5wtlk/series-workflow5wtlk-convert-artifact-4068398282/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-08 15:36:52 +0000 UTC FinishedAt: 2026-07-08 15:38:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-08 15:36:52 +0000 UTC FinishedAt: 2026-07-08 15:38:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7d18c0d8-6249-4846-97dd-4c119bfb4b1d,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-workflow5wtlk/series-workflow5wtlk-build-action-115776769/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-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-08 15:38:55 +0000 UTC FinishedAt: 2026-07-08 15:38:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-08 15:38:55 +0000 UTC FinishedAt: 2026-07-08 15:38:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-08 15:38:55 +0000 UTC FinishedAt: 2026-07-08 16:04:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-08 15:38:55 +0000 UTC FinishedAt: 2026-07-08 16:04:22 +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:*877a0faa-8f40-4a3d-b2fb-68ae66317139,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-workflow5wtlk/series-workflow5wtlk-convert-artifact-4068398282/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": "bbd52a29-2bb9-45e1-92f1-5efe790631c7", "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-workflow5wtlk/series-workflow5wtlk-build-action-601307374/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-08 15:38:55 +0000 UTC FinishedAt: 2026-07-08 16:04:12 +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:*877a0faa-8f40-4a3d-b2fb-68ae66317139,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-workflow5wtlk/series-workflow5wtlk-convert-artifact-4068398282/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": "bbd52a29-2bb9-45e1-92f1-5efe790631c7", "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-workflow5wtlk/series-workflow5wtlk-build-action-601307374/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-08 16:04:22 +0000 UTC FinishedAt: 2026-07-08 16:04:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-08 16:04:22 +0000 UTC FinishedAt: 2026-07-08 16:04:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-08 16:04:22 +0000 UTC FinishedAt: 2026-07-08 16:06:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-08 16:04:22 +0000 UTC FinishedAt: 2026-07-08 16:06:38 +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:*bbd52a29-2bb9-45e1-92f1-5efe790631c7,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-workflow5wtlk/series-workflow5wtlk-build-action-601307374/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-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Failed StartedAt: 2026-07-08 16:06:48 +0000 UTC FinishedAt: 2026-07-08 16:27:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Failed StartedAt: 2026-07-08 16:06:48 +0000 UTC FinishedAt: 2026-07-08 16:27:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},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:*7d18c0d8-6249-4846-97dd-4c119bfb4b1d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bbd52a29-2bb9-45e1-92f1-5efe790631c7,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-workflow5wtlk/series-workflow5wtlk-build-action-115776769/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-workflow5wtlk/series-workflow5wtlk-build-action-601307374/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-08 16:06:48 +0000 UTC FinishedAt: 2026-07-08 16:07:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-08 16:06:48 +0000 UTC FinishedAt: 2026-07-08 16:06:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},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-workflow5wtlk/series-workflow5wtlk-convert-artifact-2726078815/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-08 16:06:48 +0000 UTC FinishedAt: 2026-07-08 16:06:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-08 16:06:48 +0000 UTC FinishedAt: 2026-07-08 16:06:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-08 16:06:48 +0000 UTC FinishedAt: 2026-07-08 16:06:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Failed StartedAt: 2026-07-08 16:07:16 +0000 UTC FinishedAt: 2026-07-08 16:27:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wtlk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmemmap_split_pmd","vmemmap_remap_pte","vmemmap_restore_pte","vmemmap_remap_free","vmemmap_remap_alloc","hugetlb_vmemmap_optimization_try_disable","__hugetlb_vmemmap_restore_folio","__hugetlb_vmemmap_optimize_folio","vmemmap_should_optimize_folio","vmemmap_should_optimize_bootmem_page","late_cpu_enable_hvo","hvo_compatible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE_OPTIMIZE_VMEMMAP","HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON"],"series_id":"b585f6e3-7305-4ea4-9dbd-1ec957cc0d54","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Error StartedAt: 2026-07-08 16:07:16 +0000 UTC FinishedAt: 2026-07-08 16:27:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7d18c0d8-6249-4846-97dd-4c119bfb4b1d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bbd52a29-2bb9-45e1-92f1-5efe790631c7,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-workflow5wtlk/series-workflow5wtlk-build-action-115776769/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-workflow5wtlk/series-workflow5wtlk-build-action-601307374/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-workflow5wtlk/series-workflow5wtlk-convert-artifact-2726078815/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil