Name: series-workflowjwbll Phase: Succeeded StartedAt: 2026-09-03 02:57:57 +0000 UTC FinishedAt: 2026-09-03 06:58:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbll[0] Phase: Succeeded StartedAt: 2026-09-03 02:57:57 +0000 UTC FinishedAt: 2026-09-03 03:18:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbll[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 02:57:57 +0000 UTC FinishedAt: 2026-09-03 03:18:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "669520c8-5fd0-4a50-93f7-4a408f233daa" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "throttle_evictable_types", "lru_gen_too_many_isolated", "isolate_folios", "evict_folios", "lru_gen_seq_write" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzJiMzNDssCiAgICAmIzM0O2xydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQmIzM0OywKICAgICYjMzQ7aXNvbGF0ZV9mb2xpb3MmIzM0OywKICAgICYjMzQ7ZXZpY3RfZm9saW9zJiMzNDssCiAgICAmIzM0O2xydV9nZW5fc2VxX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwZXItbHJ1dmVjIGlzb2xhdGlvbiBhY2NvdW50aW5nIChgbnJfaXNvbGF0ZWRgKSBhbmQgaXNvbGF0aW9uIHRocm90dGxpbmcgKGBscnVfZ2VuX3Rvb19tYW55X2lzb2xhdGVkYCwgYHRocm90dGxlX2V2aWN0YWJsZV90eXBlc2ApIGZvciBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSByZWNsYWltLlxuXG5BbmFseXNpcyBhZ2FpbnN0IEtNU0FOIGFwcGxpY2FiaWxpdHk6XG4xLiBVc2VyLXNwYWNlIGxlYWtzOiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGV4cG9zZWQgdmlhIGlvY3Rscy9zeXNmcy9uZXRsaW5rL0JQRiBidWZmZXJzLlxuMi4gVW5pbml0aWFsaXplZCB2YXJpYWJsZXM6IEFsbCBhZGRlZCBsb2NhbCB2YXJpYWJsZXMgKGBhbGxvd2VkYCwgYGZhdGFsYCwgYHN0YWxsZWRgKSBhbmQgc3RydWN0IGZpZWxkcyAoYG5yX2lzb2xhdGVkYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFuZCBtYW5hZ2VkIChlLmcuLCBgKmZhdGFsYCBpcyBpbml0aWFsaXplZCB0byBmYWxzZSB1cG9uIGVudGVyaW5nIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKWAsIGBzdHJ1Y3QgbHJ1dmVjYCBtZW1vcnkgaXMgemVyby1hbGxvY2F0ZWQgZHVyaW5nIG5vZGUvbWVtY2cgaW5pdGlhbGl6YXRpb24pLlxuMy4gQnVmZmVyIGJvdW5kcyAvIG1lbW9yeSBoYW5kbGluZzogVGhlIHBhdGNoIG9ubHkgYWRqdXN0cyByZWNsYWltZXIgc2NoZWR1bGluZywgdGhyb3R0bGluZywgYW5kIGlzb2xhdGlvbiBjb3VudGVycyB3aXRob3V0IHRvdWNoaW5nIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGFjY2VzcywgdmFyaWFibGUtbGVuZ3RoIGJ1ZmZlcnMsIG9yIHN0cnVjdCBwYWRkaW5nLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIHJlbGF0ZSB0byByZWNsYWltIHRocm90dGxpbmcsIGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBjb3VudGVyIGltYmFsYW5jZXMsIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgKExPQ0tERVAsIEtBU0FOLCBXQVJOX09OKS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBpc29sYXRlZCBmb2xpbyBhY2NvdW50aW5nIGFuZCByZWNsYWltIHRocm90dGxpbmcgZm9yIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBpbiBtbS92bXNjYW4uYywgaW1wbGVtZW50aW5nIGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQoKSBhbmQgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzKCkgdG8gcHJldmVudCBleGNlc3NpdmUgZm9saW8gaXNvbGF0aW9uIGR1cmluZyBtZW1vcnkgcHJlc3N1cmUgYW5kIGRpcmVjdCByZWNsYWltLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMzoxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDgzNmQ5NjQzM2MwZWQ3NmQwNzExMjg5N2JkZjI2NjRiMWMyODc4MTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDAzOjE2OjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCA5NGY5YzNmZjU0MTYwLi44MTliNmMwNTkxMTZlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTU4MCw2ICYjNDM7NTgwLDggQEAgc3RydWN0IGxydV9nZW5fZm9saW8ge1xuIFx0LyogY2FuIGJlIG1vZGlmaWVkIHdpdGhvdXQgaG9sZGluZyB0aGUgTFJVIGxvY2sgKi9cbiBcdGF0b21pY19sb25nX3QgZXZpY3RlZFtOUl9ISVNUX0dFTlNdW0FOT05fQU5EX0ZJTEVdW01BWF9OUl9USUVSU107XG4gXHRhdG9taWNfbG9uZ190IHJlZmF1bHRlZFtOUl9ISVNUX0dFTlNdW0FOT05fQU5EX0ZJTEVdW01BWF9OUl9USUVSU107XG4mIzQzO1x0LyogdGhlIG51bWJlciBvZiBmb2xpb3MgaXNvbGF0ZWQgZnJvbSB0aGlzIGxydXZlYyBhbmQgYmVpbmcgcmVjbGFpbWVkICovXG4mIzQzO1x0YXRvbWljX2xvbmdfdCBucl9pc29sYXRlZFtBTk9OX0FORF9GSUxFXTtcbiBcdC8qIHdoZXRoZXIgdGhlIG11bHRpLWdlbiBMUlUgaXMgZW5hYmxlZCAqL1xuIFx0Ym9vbCBlbmFibGVkO1xuIFx0LyogdGhlIG1lbWNnIGdlbmVyYXRpb24gdGhpcyBscnVfZ2VuX2ZvbGlvIGJlbG9uZ3MgdG8gKi9cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBmMTE0OTFlZTllZDVjLi4yMTE4MzlkMTA5MDlhIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDE1MSwyNSAmIzQzOzQxNTEsMzQgQEAgc3RhdGljIHZvaWQgc2V0X2luaXRpYWxfcHJpb3JpdHkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbFxuIFx0c2MtXHUwMDNlcHJpb3JpdHkgPSBjbGFtcChwcmlvcml0eSwgREVGX1BSSU9SSVRZIC8gMiwgREVGX1BSSU9SSVRZKTtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY190eXBlX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXG4ge1xuLVx0aW50IGdlbiwgdHlwZSwgem9uZTtcbiYjNDM7XHRpbnQgZ2VuLCB6b25lO1xuIFx0dW5zaWduZWQgbG9uZyBzZXEsIHRvdGFsID0gMDtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuIFx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcbiBcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG4gXG4tXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7XG4tXHRcdGZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxIFx1MDAzYz0gbWF4X3NlcTsgc2VxJiM0MzsmIzQzOykge1xuLVx0XHRcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbi1cdFx0XHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KVxuLVx0XHRcdFx0dG90YWwgJiM0Mzs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7XG4tXHRcdH1cbiYjNDM7XHRmb3IgKHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSBcdTAwM2M9IG1heF9zZXE7IHNlcSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbiYjNDM7XHRcdGZvciAoem9uZSA9IDA7IHpvbmUgXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdHRvdGFsICYjNDM7PSBtYXgoUkVBRF9PTkNFKGxydWdlbi1cdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHRvdGFsO1xuIH1cbiBcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRvdGFsID0gMDtcbiYjNDM7XHRpbnQgdHlwZTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUodHlwZSwgc3dhcHBpbmVzcylcbiYjNDM7XHRcdHRvdGFsICYjNDM7PSBscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShscnV2ZWMsIHR5cGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdG90YWw7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgbHJ1dmVjX2lzX3NpemFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHRvdGFsO1xuQEAgLTQ4MzgsMTUgJiM0Mzs0ODQ3LDEyOCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbiBcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcdTAwMjZzcCwgXHUwMDI2cHYpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogVGhlIE1HTFJVIGNvdW50ZXJwYXJ0IHRvIHRvb19tYW55X2lzb2xhdGVkKCkuXG4mIzQzOyAqXG4mIzQzOyAqIHRvb19tYW55X2lzb2xhdGVkKCkgY29tcGFyZXMgbm9kZS13aWRlIGlzb2xhdGVkIGNvdW50cyBhZ2FpbnN0XG4mIzQzOyAqIG5vZGUtd2lkZSBpbmFjdGl2ZSBzaXplcy4gSXQgcHJlZGF0ZXMgcGVyLW1lbWNnIExSVSBsaXN0cywgd2hpY2hcbiYjNDM7ICogbW92ZWQgaXNvbGF0aW9uIHRvIHBlci1scnV2ZWMgZ3JhbnVsYXJpdHkuIE1HTFJVIHJlY2xhaW1lcnMgY29udGVuZFxuJiM0MzsgKiBwZXIgbHJ1dmVjLCBzbyB0aGlzIGNoZWNrIGlzIHBlciBscnV2ZWMgYXMgd2VsbCwgYW5kIGlzb2xhdGlvbiBpblxuJiM0MzsgKiBvbmUgbWVtY2cgZG9lcyBub3QgdGhyb3R0bGUgcmVjbGFpbSBpbiBhbm90aGVyLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgbGVnYWN5IHRocmVzaG9sZCwgdGhlIHNpemUgb2YgdGhlIGluYWN0aXZlIGxpc3QsIGlzIG5vdCB1c2FibGVcbiYjNDM7ICogaGVyZSBlaXRoZXI6IGluIE1HTFJVIHRoZSBpbmFjdGl2ZSBjb3VudGVycyBhcmUgb25seSBhIGNvbXBhdGliaWxpdHlcbiYjNDM7ICogc2hpbSAtIHRoZXkganVtcCBhcm91bmQgd2hlbiBzd2FwIHJ1bnMgb3V0IG9yIGEgbWVtY2cgaGl0cyBpdHMgc3dhcFxuJiM0MzsgKiBsaW1pdCwgYW5kIHByb2FjdGl2ZSBhZ2luZyBjYW4gaW5mbGF0ZSB0aGVtLiBDb21wYXJlIGFnYWluc3QgdGhlXG4mIzQzOyAqIHRvdGFsIG51bWJlciBvZiBldmljdGFibGUgcGFnZXMgb2YgdGhlIHR5cGUgZGl2aWRlZCBieSBNSU5fTlJfR0VOUyxcbiYjNDM7ICogYXBwcm94aW1hdGluZyB0aGUgc2l6ZSBvZiBvbmUgZ2VuZXJhdGlvbiAtIHRoZSBzYW1lIHVuaXQgdGhlXG4mIzQzOyAqIG9yaWdpbmFsIE1HTFJVIGFnaW5nIGhldXJpc3RpY3MgdXNlZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaXNvbGF0ZWQsIGV2aWN0YWJsZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICghd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzYykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlzb2xhdGVkID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuLm5yX2lzb2xhdGVkW3R5cGVdKTtcbiYjNDM7XHRldmljdGFibGUgPSBscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShscnV2ZWMsIHR5cGUpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEdGUF9OT0lPL0dGUF9OT0ZTIGNhbGxlcnMgYXJlIGFsbG93ZWQgdG8gaXNvbGF0ZSBtb3JlIHBhZ2VzLCBzb1xuJiM0MztcdCAqIHRoZXkgd29uJiMzOTt0IGJlIGJsb2NrZWQgYnkgbm9ybWFsIGRpcmVjdC1yZWNsYWltZXJzLCBmb3JtaW5nIGFcbiYjNDM7XHQgKiBjaXJjdWxhciBkZWFkbG9jay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZ2ZwX2hhc19pb19mcyhzYy1cdTAwM2VnZnBfbWFzaykpXG4mIzQzO1x0XHRldmljdGFibGUgXHUwMDNlXHUwMDNlPSAzO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaXNvbGF0ZWQgXHUwMDNlIGV2aWN0YWJsZSAvIE1JTl9OUl9HRU5TO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBVbmxpa2UgdGhlIGxlZ2FjeSBwYXRoLCB3aGVyZSB0aGUgTFJVIGxpc3QgdG8gaXNvbGF0ZSBmcm9tIGlzIGtub3duXG4mIzQzOyAqIGJlZm9yZSBpc29sYXRpb24sIGlzb2xhdGVfZm9saW9zKCkgcGlja3MgdGhlIHR5cGUgZnJvbSB0aGUgcmVmYXVsdFxuJiM0MzsgKiBmZWVkYmFjayBhbmQgbWF5IGZhbGwgYmFjayB0byB0aGUgb3RoZXIgb25lLiBUaGVyZWZvcmUsIGluc3RlYWQgb2ZcbiYjNDM7ICogdGhyb3R0bGluZyBvbiBhIHNpbmdsZSB0eXBlLCBjb2xsZWN0IHRoZSBldmljdGFibGUgdHlwZXMgdGhhdCBkbyBub3RcbiYjNDM7ICogaGF2ZSB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MsIGFuZCBvbmx5IHNsZWVwIHdoZW4gYWxsIG9mIHRoZW0gZG8uXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdGhlIG1hc2sgb2YgdGhlIHR5cGVzIGlzb2xhdGVfZm9saW9zKCkgbWF5IGlzb2xhdGUgZnJvbSwgb3JcbiYjNDM7ICogMCBpZiByZWNsYWltIHNob3VsZCBzdG9wLiBBbHNvIHNldHMgQGZhdGFsIHRvIHRlbGwgdGhlIGNhbGxlciB0aGF0XG4mIzQzOyAqIHRoZSB0YXNrIHJlY2VpdmVkIGEgZmF0YWwgc2lnbmFsIHdoaWxlIHdhaXRpbmcuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHRocm90dGxlX2V2aWN0YWJsZV90eXBlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGludCBzd2FwcGluZXNzLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgYm9vbCAqZmF0YWwpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgYWxsb3dlZDtcbiYjNDM7XHRib29sIHN0YWxsZWQgPSBmYWxzZTtcbiYjNDM7XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdCpmYXRhbCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRmb3IgKDs7KSB7XG4mIzQzO1x0XHRhbGxvd2VkID0gMDtcbiYjNDM7XHRcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQSB0eXBlIHdpdGggbm8gZXZpY3RhYmxlIGZvbGlvcyBoYXMgbm90aGluZyB0b1xuJiM0MztcdFx0XHQgKiBpc29sYXRlLiBEb24mIzM5O3QgYWxsb3cgaXQsIG90aGVyd2lzZSByZWNsYWltIGNhbiBiZVxuJiM0MztcdFx0XHQgKiByZWRpcmVjdGVkIHRvIGl0IGFuZCBzcGluIG1ha2luZyBubyBwcm9ncmVzcywgZS5nLlxuJiM0MztcdFx0XHQgKiB3aGVuIHRoZSBvbmx5IHR5cGUgd2l0aCBmb2xpb3MgaXMgb3Zlci1pc29sYXRlZC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmICghbHJ1dmVjX3R5cGVfZXZpY3RhYmxlX3NpemUobHJ1dmVjLCBpKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICghbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZChscnV2ZWMsIGksIHNjKSlcbiYjNDM7XHRcdFx0XHRhbGxvd2VkIHw9IEJJVChpKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoYWxsb3dlZCkge1xuJiM0MztcdFx0XHQvKiBXYWtlIHVwIHJlY2xhaW1lcnMgd2FpdGluZyBvbiB0aGUgaXNvbGF0aW9uIHRvIGdvIGRvd24uICovXG4mIzQzO1x0XHRcdHdha2VfdGhyb3R0bGVfaXNvbGF0ZWQocGdkYXQpO1xuJiM0MztcdFx0XHRyZXR1cm4gYWxsb3dlZDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQWxsIGV2aWN0YWJsZSB0eXBlcyBhcmUgb3Zlci1pc29sYXRlZC4gTGlrZSB0aGUgbGVnYWN5XG4mIzQzO1x0XHQgKiBwYXRoLCB3YWl0IG9uY2UgZm9yIGNvbmN1cnJlbnQgcmVjbGFpbWVycyB0byBwdXQgdGhlaXJcbiYjNDM7XHRcdCAqIGlzb2xhdGVkIGZvbGlvcyBiYWNrOyBnaXZlIHVwIGlmIHRoYXQgbWFrZXMgbm8gcHJvZ3Jlc3MuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChzdGFsbGVkKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0XHRzdGFsbGVkID0gdHJ1ZTtcbiYjNDM7XHRcdHJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7XG4mIzQzO1xuJiM0MztcdFx0LyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqL1xuJiM0MztcdFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG4mIzQzO1x0XHRcdCpmYXRhbCA9IHRydWU7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLFxuLVx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZCxcbi1cdFx0XHQgIGludCAqaXNvbGF0ZV90eXBlLCBpbnQgKmlzb2xhdGVfc2Nhbm5lZClcbiYjNDM7XHRcdFx0ICB1bnNpZ25lZCBpbnQgYWxsb3dlZCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbiYjNDM7XHRcdFx0ICBpbnQgKmlzb2xhdGVkLCBpbnQgKmlzb2xhdGVfdHlwZSwgaW50ICppc29sYXRlX3NjYW5uZWQpXG4ge1xuIFx0aW50IGk7XG4gXHRpbnQgdG90YWxfc2Nhbm5lZCA9IDA7XG4gXHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBwcmVmZXJyZWQgdHlwZSBtYXkgaGF2ZSBiZWVuIGV4Y2x1ZGVkIGJ5XG4mIzQzO1x0ICogdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzKCk7IHN0YXJ0IGZyb20gdGhlIG90aGVyIG9uZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIShhbGxvd2VkIFx1MDAyNiBCSVQodHlwZSkpKVxuJiM0MztcdFx0dHlwZSA9ICF0eXBlO1xuJiM0MztcbiBcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHtcbiBcdFx0aW50IHNjYW5uZWQ7XG4gXHRcdGludCB0aWVyID0gZ2V0X3RpZXJfaWR4KGxydXZlYywgdHlwZSk7XG5AQCAtNDg2Myw5ICYjNDM7NDk4NSwxMCBAQCBzdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHQvKlxuIFx0XHQgKiBJZiBzY2FubmVkIFx1MDAzZSAwIGFuZCBpc29sYXRlZCA9PSAwLCBhdm9pZCBmYWxsaW5nIGJhY2sgdG8gdGhlXG4gXHRcdCAqIG90aGVyIHR5cGUsIGFzIHRoaXMgdHlwZSByZW1haW5zIHN1ZmZpY2llbnQuIEZhbGxpbmcgYmFja1xuLVx0XHQgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLlxuJiM0MztcdFx0ICogdG9vIHJlYWRpbHkgY2FuIGRpc3J1cHQgdGhlIHBvc2l0aXZlX2N0cmxfZXJyKCkgYmlhcy4gT25seVxuJiM0MztcdFx0ICogZmFsbCBiYWNrIHRvIGEgdHlwZSB0aGF0IGlzIG5vdCB0aHJvdHRsZWQuXG4gXHRcdCAqL1xuLVx0XHRpZiAoIXNjYW5uZWQpXG4mIzQzO1x0XHRpZiAoIXNjYW5uZWQgXHUwMDI2XHUwMDI2IChhbGxvd2VkIFx1MDAyNiBCSVQoIXR5cGUpKSlcbiBcdFx0XHR0eXBlID0gIXR5cGU7XG4gXHR9XG4gXG5AQCAtNDg4OCwxNSAmIzQzOzUwMTEsMzYgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuJiM0MztcdHVuc2lnbmVkIGludCBhbGxvd2VkO1xuJiM0MztcdGJvb2wgZmF0YWw7XG4mIzQzO1xuJiM0MztcdGFsbG93ZWQgPSB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMobHJ1dmVjLCBzd2FwcGluZXNzLCBzYywgXHUwMDI2ZmF0YWwpO1xuJiM0MztcdGlmICghYWxsb3dlZCkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gTGlrZSB0aGUgbGVnYWN5XG4mIzQzO1x0XHQgKiBwYXRoLCBwcmV0ZW5kIHNvbWUgcGFnZXMgd2VyZSByZWNsYWltZWQgc28gcmVjbGFpbVxuJiM0MztcdFx0ICogdW53aW5kcyBxdWlja2x5IGluc3RlYWQgb2YgbG9vcGluZyBiYWNrIGludG8gdGhlXG4mIzQzO1x0XHQgKiB0aHJvdHRsZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGZhdGFsKVxuJiM0MztcdFx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgJiM0Mzs9IFNXQVBfQ0xVU1RFUl9NQVg7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuIFxuIFx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XG4gXG4gXHQvKiBJbiBjYXNlIGZvbGlvIGRlbGV0aW9uIGxlZnQgZW1wdHkgb2xkIGdlbnMsIGZsdXNoIHRoZW0gKi9cbiBcdHRyeV90b19pbmNfbWluX3NlcShscnV2ZWMsIHN3YXBwaW5lc3MpO1xuIFxuLVx0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsXG4mIzQzO1x0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsIGFsbG93ZWQsXG4gXHRcdFx0XHQgXHUwMDI2bGlzdCwgXHUwMDI2aXNvbGF0ZWQsIFx1MDAyNnR5cGUsIFx1MDAyNnR5cGVfc2Nhbm5lZCk7XG4gXHRucl9pc29sYXRlZCA9IGlzb2xhdGVkO1xuJiM0MztcdGlmIChucl9pc29sYXRlZCkge1xuJiM0MztcdFx0X19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgbnJfaXNvbGF0ZWQpO1xuJiM0MztcdFx0YXRvbWljX2xvbmdfYWRkKG5yX2lzb2xhdGVkLCBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuLm5yX2lzb2xhdGVkW3R5cGVdKTtcbiYjNDM7XHR9XG4gXG4gXHQvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqL1xuIFx0aWYgKHNjYW5uZWQpXG5AQCAtNDk1OSw2ICYjNDM7NTEwMyw5IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRnb3RvIHJldHJ5O1xuIFx0fVxuIFxuJiM0MztcdGF0b21pY19sb25nX3N1Yihucl9pc29sYXRlZCwgXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbi5ucl9pc29sYXRlZFt0eXBlXSk7XG4mIzQzO1x0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyB0eXBlLCAtbnJfaXNvbGF0ZWQpO1xuJiM0MztcbiBcdGlmIChucl9pc29sYXRlZCBcdTAwM2UgdG90YWxfcmVjbGFpbWVkKVxuIFx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiAmIzQzOyB0eXBlLFxuIFx0XHRcdFx0IG5yX2lzb2xhdGVkIC0gdG90YWxfcmVjbGFpbWVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMzoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rocm90dGxlX2V2aWN0YWJsZV90eXBlcyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3Rvb19tYW55X2lzb2xhdGVkJiMzNDssCiAgICAmIzM0O2lzb2xhdGVfZm9saW9zJiMzNDssCiAgICAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3NlcV93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGlzb2xhdGVkIGZvbGlvIGFjY291bnRpbmcgYW5kIHJlY2xhaW0gdGhyb3R0bGluZyBmb3IgTXVsdGktR2VuIExSVSAoTUdMUlUpIGluIG1tL3Ztc2Nhbi5jLCBpbXBsZW1lbnRpbmcgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZCgpIGFuZCB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBmb2xpbyBpc29sYXRpb24gZHVyaW5nIG1lbW9yeSBwcmVzc3VyZSBhbmQgZGlyZWN0IHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODM2ZDk2NDMzYzBlZDc2ZDA3MTEyODk3YmRmMjY2NGIxYzI4NzgxNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDM6MTY6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCA5NGY5YzNmZjU0MTYwLi44MTliNmMwNTkxMTZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTU4MCw2ICYjNDM7NTgwLDggQEAgc3RydWN0IGxydV9nZW5fZm9saW8gewogCS8qIGNhbiBiZSBtb2RpZmllZCB3aXRob3V0IGhvbGRpbmcgdGhlIExSVSBsb2NrICovCiAJYXRvbWljX2xvbmdfdCBldmljdGVkW05SX0hJU1RfR0VOU11bQU5PTl9BTkRfRklMRV1bTUFYX05SX1RJRVJTXTsKIAlhdG9taWNfbG9uZ190IHJlZmF1bHRlZFtOUl9ISVNUX0dFTlNdW0FOT05fQU5EX0ZJTEVdW01BWF9OUl9USUVSU107CiYjNDM7CS8qIHRoZSBudW1iZXIgb2YgZm9saW9zIGlzb2xhdGVkIGZyb20gdGhpcyBscnV2ZWMgYW5kIGJlaW5nIHJlY2xhaW1lZCAqLwomIzQzOwlhdG9taWNfbG9uZ190IG5yX2lzb2xhdGVkW0FOT05fQU5EX0ZJTEVdOwogCS8qIHdoZXRoZXIgdGhlIG11bHRpLWdlbiBMUlUgaXMgZW5hYmxlZCAqLwogCWJvb2wgZW5hYmxlZDsKIAkvKiB0aGUgbWVtY2cgZ2VuZXJhdGlvbiB0aGlzIGxydV9nZW5fZm9saW8gYmVsb25ncyB0byAqLwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBmMTE0OTFlZTllZDVjLi4yMTE4MzlkMTA5MDlhIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNDE1MSwyNSAmIzQzOzQxNTEsMzQgQEAgc3RhdGljIHZvaWQgc2V0X2luaXRpYWxfcHJpb3JpdHkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbAogCXNjLSZndDtwcmlvcml0eSA9IGNsYW1wKHByaW9yaXR5LCBERUZfUFJJT1JJVFkgLyAyLCBERUZfUFJJT1JJVFkpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcykKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKQogewotCWludCBnZW4sIHR5cGUsIHpvbmU7CiYjNDM7CWludCBnZW4sIHpvbmU7CiAJdW5zaWduZWQgbG9uZyBzZXEsIHRvdGFsID0gMDsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKIAlERUZJTkVfTUFYX1NFUShscnV2ZWMpOwogCURFRklORV9NSU5fU0VRKGxydXZlYyk7CiAKLQlmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7Ci0JCWZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxICZsdDs9IG1heF9zZXE7IHNlcSYjNDM7JiM0MzspIHsKLQkJCWdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTsKLQkJCWZvciAoem9uZSA9IDA7IHpvbmUgJmx0OyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KQotCQkJCXRvdGFsICYjNDM7PSBtYXgoUkVBRF9PTkNFKGxydWdlbi0mZ3Q7bnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTsKLQkJfQomIzQzOwlmb3IgKHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSAmbHQ7PSBtYXhfc2VxOyBzZXEmIzQzOyYjNDM7KSB7CiYjNDM7CQlnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7CiYjNDM7CQlmb3IgKHpvbmUgPSAwOyB6b25lICZsdDsgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOykKJiM0MzsJCQl0b3RhbCAmIzQzOz0gbWF4KFJFQURfT05DRShscnVnZW4tJmd0O25yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7CiAJfQogCiAJcmV0dXJuIHRvdGFsOwogfQogCiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHRvdGFsID0gMDsKJiM0MzsJaW50IHR5cGU7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKHR5cGUsIHN3YXBwaW5lc3MpCiYjNDM7CQl0b3RhbCAmIzQzOz0gbHJ1dmVjX3R5cGVfZXZpY3RhYmxlX3NpemUobHJ1dmVjLCB0eXBlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRvdGFsOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGxydXZlY19pc19zaXphYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7CiAJdW5zaWduZWQgbG9uZyB0b3RhbDsKQEAgLTQ4MzgsMTUgJiM0Mzs0ODQ3LDEyOCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcykKIAlyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoJmFtcDtzcCwgJmFtcDtwdik7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFRoZSBNR0xSVSBjb3VudGVycGFydCB0byB0b29fbWFueV9pc29sYXRlZCgpLgomIzQzOyAqCiYjNDM7ICogdG9vX21hbnlfaXNvbGF0ZWQoKSBjb21wYXJlcyBub2RlLXdpZGUgaXNvbGF0ZWQgY291bnRzIGFnYWluc3QKJiM0MzsgKiBub2RlLXdpZGUgaW5hY3RpdmUgc2l6ZXMuIEl0IHByZWRhdGVzIHBlci1tZW1jZyBMUlUgbGlzdHMsIHdoaWNoCiYjNDM7ICogbW92ZWQgaXNvbGF0aW9uIHRvIHBlci1scnV2ZWMgZ3JhbnVsYXJpdHkuIE1HTFJVIHJlY2xhaW1lcnMgY29udGVuZAomIzQzOyAqIHBlciBscnV2ZWMsIHNvIHRoaXMgY2hlY2sgaXMgcGVyIGxydXZlYyBhcyB3ZWxsLCBhbmQgaXNvbGF0aW9uIGluCiYjNDM7ICogb25lIG1lbWNnIGRvZXMgbm90IHRocm90dGxlIHJlY2xhaW0gaW4gYW5vdGhlci4KJiM0MzsgKgomIzQzOyAqIFRoZSBsZWdhY3kgdGhyZXNob2xkLCB0aGUgc2l6ZSBvZiB0aGUgaW5hY3RpdmUgbGlzdCwgaXMgbm90IHVzYWJsZQomIzQzOyAqIGhlcmUgZWl0aGVyOiBpbiBNR0xSVSB0aGUgaW5hY3RpdmUgY291bnRlcnMgYXJlIG9ubHkgYSBjb21wYXRpYmlsaXR5CiYjNDM7ICogc2hpbSAtIHRoZXkganVtcCBhcm91bmQgd2hlbiBzd2FwIHJ1bnMgb3V0IG9yIGEgbWVtY2cgaGl0cyBpdHMgc3dhcAomIzQzOyAqIGxpbWl0LCBhbmQgcHJvYWN0aXZlIGFnaW5nIGNhbiBpbmZsYXRlIHRoZW0uIENvbXBhcmUgYWdhaW5zdCB0aGUKJiM0MzsgKiB0b3RhbCBudW1iZXIgb2YgZXZpY3RhYmxlIHBhZ2VzIG9mIHRoZSB0eXBlIGRpdmlkZWQgYnkgTUlOX05SX0dFTlMsCiYjNDM7ICogYXBwcm94aW1hdGluZyB0aGUgc2l6ZSBvZiBvbmUgZ2VuZXJhdGlvbiAtIHRoZSBzYW1lIHVuaXQgdGhlCiYjNDM7ICogb3JpZ2luYWwgTUdMUlUgYWdpbmcgaGV1cmlzdGljcyB1c2VkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwKJiM0MzsJCQkJICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGlzb2xhdGVkLCBldmljdGFibGU7CiYjNDM7CiYjNDM7CWlmIChjdXJyZW50X2lzX2tzd2FwZCgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoIXdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc2MpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpc29sYXRlZCA9IGF0b21pY19sb25nX3JlYWQoJmFtcDtscnV2ZWMtJmd0O2xydWdlbi5ucl9pc29sYXRlZFt0eXBlXSk7CiYjNDM7CWV2aWN0YWJsZSA9IGxydXZlY190eXBlX2V2aWN0YWJsZV9zaXplKGxydXZlYywgdHlwZSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEdGUF9OT0lPL0dGUF9OT0ZTIGNhbGxlcnMgYXJlIGFsbG93ZWQgdG8gaXNvbGF0ZSBtb3JlIHBhZ2VzLCBzbwomIzQzOwkgKiB0aGV5IHdvbiYjMzk7dCBiZSBibG9ja2VkIGJ5IG5vcm1hbCBkaXJlY3QtcmVjbGFpbWVycywgZm9ybWluZyBhCiYjNDM7CSAqIGNpcmN1bGFyIGRlYWRsb2NrLgomIzQzOwkgKi8KJiM0MzsJaWYgKGdmcF9oYXNfaW9fZnMoc2MtJmd0O2dmcF9tYXNrKSkKJiM0MzsJCWV2aWN0YWJsZSAmZ3Q7Jmd0Oz0gMzsKJiM0MzsKJiM0MzsJcmV0dXJuIGlzb2xhdGVkICZndDsgZXZpY3RhYmxlIC8gTUlOX05SX0dFTlM7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVW5saWtlIHRoZSBsZWdhY3kgcGF0aCwgd2hlcmUgdGhlIExSVSBsaXN0IHRvIGlzb2xhdGUgZnJvbSBpcyBrbm93bgomIzQzOyAqIGJlZm9yZSBpc29sYXRpb24sIGlzb2xhdGVfZm9saW9zKCkgcGlja3MgdGhlIHR5cGUgZnJvbSB0aGUgcmVmYXVsdAomIzQzOyAqIGZlZWRiYWNrIGFuZCBtYXkgZmFsbCBiYWNrIHRvIHRoZSBvdGhlciBvbmUuIFRoZXJlZm9yZSwgaW5zdGVhZCBvZgomIzQzOyAqIHRocm90dGxpbmcgb24gYSBzaW5nbGUgdHlwZSwgY29sbGVjdCB0aGUgZXZpY3RhYmxlIHR5cGVzIHRoYXQgZG8gbm90CiYjNDM7ICogaGF2ZSB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MsIGFuZCBvbmx5IHNsZWVwIHdoZW4gYWxsIG9mIHRoZW0gZG8uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIHRoZSBtYXNrIG9mIHRoZSB0eXBlcyBpc29sYXRlX2ZvbGlvcygpIG1heSBpc29sYXRlIGZyb20sIG9yCiYjNDM7ICogMCBpZiByZWNsYWltIHNob3VsZCBzdG9wLiBBbHNvIHNldHMgQGZhdGFsIHRvIHRlbGwgdGhlIGNhbGxlciB0aGF0CiYjNDM7ICogdGhlIHRhc2sgcmVjZWl2ZWQgYSBmYXRhbCBzaWduYWwgd2hpbGUgd2FpdGluZy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHRocm90dGxlX2V2aWN0YWJsZV90eXBlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7CQkJCQkgICAgIGludCBzd2FwcGluZXNzLAomIzQzOwkJCQkJICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywKJiM0MzsJCQkJCSAgICAgYm9vbCAqZmF0YWwpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgYWxsb3dlZDsKJiM0MzsJYm9vbCBzdGFsbGVkID0gZmFsc2U7CiYjNDM7CXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CSpmYXRhbCA9IGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKDs7KSB7CiYjNDM7CQlhbGxvd2VkID0gMDsKJiM0MzsJCWZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgdHlwZSB3aXRoIG5vIGV2aWN0YWJsZSBmb2xpb3MgaGFzIG5vdGhpbmcgdG8KJiM0MzsJCQkgKiBpc29sYXRlLiBEb24mIzM5O3QgYWxsb3cgaXQsIG90aGVyd2lzZSByZWNsYWltIGNhbiBiZQomIzQzOwkJCSAqIHJlZGlyZWN0ZWQgdG8gaXQgYW5kIHNwaW4gbWFraW5nIG5vIHByb2dyZXNzLCBlLmcuCiYjNDM7CQkJICogd2hlbiB0aGUgb25seSB0eXBlIHdpdGggZm9saW9zIGlzIG92ZXItaXNvbGF0ZWQuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKCFscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShscnV2ZWMsIGkpKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlpZiAoIWxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQobHJ1dmVjLCBpLCBzYykpCiYjNDM7CQkJCWFsbG93ZWQgfD0gQklUKGkpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKGFsbG93ZWQpIHsKJiM0MzsJCQkvKiBXYWtlIHVwIHJlY2xhaW1lcnMgd2FpdGluZyBvbiB0aGUgaXNvbGF0aW9uIHRvIGdvIGRvd24uICovCiYjNDM7CQkJd2FrZV90aHJvdHRsZV9pc29sYXRlZChwZ2RhdCk7CiYjNDM7CQkJcmV0dXJuIGFsbG93ZWQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogQWxsIGV2aWN0YWJsZSB0eXBlcyBhcmUgb3Zlci1pc29sYXRlZC4gTGlrZSB0aGUgbGVnYWN5CiYjNDM7CQkgKiBwYXRoLCB3YWl0IG9uY2UgZm9yIGNvbmN1cnJlbnQgcmVjbGFpbWVycyB0byBwdXQgdGhlaXIKJiM0MzsJCSAqIGlzb2xhdGVkIGZvbGlvcyBiYWNrOyBnaXZlIHVwIGlmIHRoYXQgbWFrZXMgbm8gcHJvZ3Jlc3MuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChzdGFsbGVkKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJc3RhbGxlZCA9IHRydWU7CiYjNDM7CQlyZWNsYWltX3Rocm90dGxlKHBnZGF0LCBWTVNDQU5fVEhST1RUTEVfSVNPTEFURUQpOwomIzQzOwomIzQzOwkJLyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqLwomIzQzOwkJaWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiYjNDM7CQkJKmZhdGFsID0gdHJ1ZTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQkgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcywKLQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZCwKLQkJCSAgaW50ICppc29sYXRlX3R5cGUsIGludCAqaXNvbGF0ZV9zY2FubmVkKQomIzQzOwkJCSAgdW5zaWduZWQgaW50IGFsbG93ZWQsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCiYjNDM7CQkJICBpbnQgKmlzb2xhdGVkLCBpbnQgKmlzb2xhdGVfdHlwZSwgaW50ICppc29sYXRlX3NjYW5uZWQpCiB7CiAJaW50IGk7CiAJaW50IHRvdGFsX3NjYW5uZWQgPSAwOwogCWludCB0eXBlID0gZ2V0X3R5cGVfdG9fc2NhbihscnV2ZWMsIHN3YXBwaW5lc3MpOwogCiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBwcmVmZXJyZWQgdHlwZSBtYXkgaGF2ZSBiZWVuIGV4Y2x1ZGVkIGJ5CiYjNDM7CSAqIHRocm90dGxlX2V2aWN0YWJsZV90eXBlcygpOyBzdGFydCBmcm9tIHRoZSBvdGhlciBvbmUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIShhbGxvd2VkICZhbXA7IEJJVCh0eXBlKSkpCiYjNDM7CQl0eXBlID0gIXR5cGU7CiYjNDM7CiAJZm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUoaSwgc3dhcHBpbmVzcykgewogCQlpbnQgc2Nhbm5lZDsKIAkJaW50IHRpZXIgPSBnZXRfdGllcl9pZHgobHJ1dmVjLCB0eXBlKTsKQEAgLTQ4NjMsOSAmIzQzOzQ5ODUsMTAgQEAgc3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJLyoKIAkJICogSWYgc2Nhbm5lZCAmZ3Q7IDAgYW5kIGlzb2xhdGVkID09IDAsIGF2b2lkIGZhbGxpbmcgYmFjayB0byB0aGUKIAkJICogb3RoZXIgdHlwZSwgYXMgdGhpcyB0eXBlIHJlbWFpbnMgc3VmZmljaWVudC4gRmFsbGluZyBiYWNrCi0JCSAqIHRvbyByZWFkaWx5IGNhbiBkaXNydXB0IHRoZSBwb3NpdGl2ZV9jdHJsX2VycigpIGJpYXMuCiYjNDM7CQkgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLiBPbmx5CiYjNDM7CQkgKiBmYWxsIGJhY2sgdG8gYSB0eXBlIHRoYXQgaXMgbm90IHRocm90dGxlZC4KIAkJICovCi0JCWlmICghc2Nhbm5lZCkKJiM0MzsJCWlmICghc2Nhbm5lZCAmYW1wOyZhbXA7IChhbGxvd2VkICZhbXA7IEJJVCghdHlwZSkpKQogCQkJdHlwZSA9ICF0eXBlOwogCX0KIApAQCAtNDg4OCwxNSAmIzQzOzUwMTEsMzYgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJYm9vbCBza2lwX3JldHJ5ID0gZmFsc2U7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwomIzQzOwl1bnNpZ25lZCBpbnQgYWxsb3dlZDsKJiM0MzsJYm9vbCBmYXRhbDsKJiM0MzsKJiM0MzsJYWxsb3dlZCA9IHRocm90dGxlX2V2aWN0YWJsZV90eXBlcyhscnV2ZWMsIHN3YXBwaW5lc3MsIHNjLCAmYW1wO2ZhdGFsKTsKJiM0MzsJaWYgKCFhbGxvd2VkKSB7CiYjNDM7CQkvKgomIzQzOwkJICogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBMaWtlIHRoZSBsZWdhY3kKJiM0MzsJCSAqIHBhdGgsIHByZXRlbmQgc29tZSBwYWdlcyB3ZXJlIHJlY2xhaW1lZCBzbyByZWNsYWltCiYjNDM7CQkgKiB1bndpbmRzIHF1aWNrbHkgaW5zdGVhZCBvZiBsb29waW5nIGJhY2sgaW50byB0aGUKJiM0MzsJCSAqIHRocm90dGxlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoZmF0YWwpCiYjNDM7CQkJc2MtJmd0O25yX3JlY2xhaW1lZCAmIzQzOz0gU1dBUF9DTFVTVEVSX01BWDsKJiM0MzsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiAKIAlscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTsKIAogCS8qIEluIGNhc2UgZm9saW8gZGVsZXRpb24gbGVmdCBlbXB0eSBvbGQgZ2VucywgZmx1c2ggdGhlbSAqLwogCXRyeV90b19pbmNfbWluX3NlcShscnV2ZWMsIHN3YXBwaW5lc3MpOwogCi0Jc2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsCiYjNDM7CXNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLCBhbGxvd2VkLAogCQkJCSAmYW1wO2xpc3QsICZhbXA7aXNvbGF0ZWQsICZhbXA7dHlwZSwgJmFtcDt0eXBlX3NjYW5uZWQpOwogCW5yX2lzb2xhdGVkID0gaXNvbGF0ZWQ7CiYjNDM7CWlmIChucl9pc29sYXRlZCkgewomIzQzOwkJX19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGUsCiYjNDM7CQkJCSAgICAgIG5yX2lzb2xhdGVkKTsKJiM0MzsJCWF0b21pY19sb25nX2FkZChucl9pc29sYXRlZCwgJmFtcDtscnV2ZWMtJmd0O2xydWdlbi5ucl9pc29sYXRlZFt0eXBlXSk7CiYjNDM7CX0KIAogCS8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovCiAJaWYgKHNjYW5uZWQpCkBAIC00OTU5LDYgJiM0Mzs1MTAzLDkgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWdvdG8gcmV0cnk7CiAJfQogCiYjNDM7CWF0b21pY19sb25nX3N1Yihucl9pc29sYXRlZCwgJmFtcDtscnV2ZWMtJmd0O2xydWdlbi5ucl9pc29sYXRlZFt0eXBlXSk7CiYjNDM7CW1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZSwgLW5yX2lzb2xhdGVkKTsKJiM0MzsKIAlpZiAobnJfaXNvbGF0ZWQgJmd0OyB0b3RhbF9yZWNsYWltZWQpCiAJCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IHR5cGUsCiAJCQkJIG5yX2lzb2xhdGVkIC0gdG90YWxfcmVjbGFpbWVkKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA1MQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1HTFJVIElzb2xhdGlvbiBUaHJvdHRsaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaGl0cyBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAgYW5kIGBtbS92bXNjYW4uY2AuIEltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nIE1HTFJVLCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB0aGUgZGV0YWlscy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgYWRkaW5nIHNvbWUgaXNvbGF0aW9uIHRocm90dGxpbmcgZm9yIE11bHRpLUdlbiBMUlUuCgpTcGVjaWZpY2FsbHksIGluIGBtbS92bXNjYW4uY2AsIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgdHJhY2tpbmcgaXNvbGF0ZWQgcGFnZXMgZm9yIHRocm90dGxpbmcuIEEgbmV3IGBhdG9taWNfbG9uZ190IG5yX2lzb2xhdGVkW0FOT05fQU5EX0ZJTEVdYCBmaWVsZCBpcyBiZWluZyBhZGRlZCB0byB0aGUgYGxydV9nZW5fZm9saW9gIHN0cnVjdC4gV2UgaGF2ZSBhIGZldyBuZXcgZnVuY3Rpb25zIGFzIHdlbGw6IGBscnVfZ2VuX3Rvb19tYW55X2lzb2xhdGVkYCwgYHRocm90dGxlX2V2aWN0YWJsZV90eXBlc2AsIGFuZCB0aGVyZSBhcmUgdXBkYXRlcyB0byBgaXNvbGF0ZV9mb2xpb3NgIGFuZCBgZXZpY3RfZm9saW9zYC4gVGhpcyBhbGwgc2VlbXMgdG8gYmUgYWJvdXQgaW1wbGVtZW50aW5nIHRoZSBhY3R1YWwgdGhyb3R0bGluZyBtZWNoYW5pc20uIFRoZSBnb2FsIGlzIGxpa2VseSB0byBwcmV2ZW50IGEgcnVuYXdheSBzaXR1YXRpb24gd2hlcmUgdG9vIG1hbnkgcGFnZXMgYXJlIGlzb2xhdGVkLCB3aGljaCB3b3VsZCBibG9jayBwcm9ncmVzcy4KCk5vdywgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBJIHNob3VsZCBwcm9iYWJseSB1c2UgYGdyZXBwZXJgIG9yIGp1c3QganVtcCBpbnRvIGBtbS9LY29uZmlnYCB0byB2ZXJpZnkgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciBib3RoIE11bHRpLUdlbiBMUlUgKExSVV9HRU4sIHJpZ2h0PykgYW5kIHRoZSB2bXNjYW4gY29kZS4gR290dGEgbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgYnJlYWtpbmcgYW55IHByZS1leGlzdGluZyBjb25maWd1cmF0aW9ucyBvciBlbmFibGluZyB0aGlzIGluIGFuIHVuZXhwZWN0ZWQgc2NlbmFyaW8uIExldCYjMzk7cyBzZWUgaG93IHRoaXMgYWxsIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzOTM9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxuLS1cbm1tL0tjb25maWctMTQwMy0jIG11bHRpLWdlbiBMUlUge1xubW0vS2NvbmZpZzoxNDA0OmNvbmZpZyBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MDUtXHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTItXG5tbS9LY29uZmlnOjE0MTM6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDE0LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xubW0vS2NvbmZpZzoxNDE1Olx0ZGVwZW5kcyBvbiBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MTYtXHRoZWxwXG4tLVxubW0vS2NvbmZpZy0xNDE4LVxubW0vS2NvbmZpZzoxNDE5OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MjAtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xubW0vS2NvbmZpZzoxNDIxOlx0ZGVwZW5kcyBvbiBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MjItXHRoZWxwXG4tLVxubW0vS2NvbmZpZy0xNDI3LVxubW0vS2NvbmZpZzoxNDI4OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDI5LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzoxNDMwOlx0ZGVwZW5kcyBvbiBMUlVfR0VOIFx1MDAyNlx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcbm1tL0tjb25maWctMTQzMS0jIH1cbi0tXG5tbS9mb2xpby5jPTMyMj1zdGF0aWMgdm9pZCBfX2xydV9jYWNoZV9hY3RpdmF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtMzUxLVxubW0vZm9saW8uYzozNTI6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS9mb2xpby5jLTM1My1cbi0tXG5tbS9mb2xpby5jPTM3OD1zdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTM5NS1cbm1tL2ZvbGlvLmM6Mzk2OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xubW0vZm9saW8uYy0zOTctXG4tLVxubW0vZm9saW8uYz00MDI9c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy00MDYtXG5tbS9mb2xpby5jOjQwNzojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL2ZvbGlvLmMtNDA4LVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzY4NT1zdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNzQ1LVx0XHRcdFx0ICgxTCBcdTAwM2NcdTAwM2MgUEdfZHJvcGJlaGluZCkgfFxubW0vaHVnZV9tZW1vcnkuYzozNzQ2Olx0XHRcdFx0IExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX01BU0spKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMzc0Ny1cbi0tXG5tbS9tZW1jb250cm9sLmM9NDYyNz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NjQzLVxubW0vbWVtY29udHJvbC5jOjQ2NDQ6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS9tZW1jb250cm9sLmMtNDY0NS1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9nZW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldClcbi0tXG5tbS9tZW1jb250cm9sLmM9NDY2Mz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9nZW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkge31cbm1tL21lbWNvbnRyb2wuYzo0NjY0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vbWVtY29udHJvbC5jLTQ2NjUtXG4tLVxubW0vbWVtb3J5LmM9NjcyOD1zdGF0aWMgaW5saW5lIHZvaWQgbW1fYWNjb3VudF9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4tLVxubW0vbWVtb3J5LmMtNjc4MC1cbm1tL21lbW9yeS5jOjY3ODE6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS9tZW1vcnkuYy02NzgyLXN0YXRpYyB2b2lkIGxydV9nZW5fZW50ZXJfZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vbWVtb3J5LmM9Njc5Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX2V4aXRfZmF1bHQodm9pZClcbi0tXG5tbS9tZW1vcnkuYy02Nzk5LX1cbm1tL21lbW9yeS5jOjY4MDA6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS9tZW1vcnkuYy02ODAxLVxuLS1cbm1tL21tX2luaXQuYz0xMTI9dm9pZCBfX2luaXQgbW1pbml0X3ZlcmlmeV9wYWdlZmxhZ3NfbGF5b3V0KHZvaWQpXG4tLVxubW0vbW1faW5pdC5jLTEyNS1cdFx0S0FTQU5fVEFHX1dJRFRILFxubW0vbW1faW5pdC5jOjEyNjpcdFx0TFJVX0dFTl9XSURUSCxcbm1tL21tX2luaXQuYy0xMjctXHRcdExSVV9SRUZTX1dJRFRILFxuLS1cbm1tL3Ztc2Nhbi5jPTgyNz1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuLS1cbm1tL3Ztc2Nhbi5jLTgzMi1cbm1tL3Ztc2Nhbi5jOjgzMzojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTgzNC0vKlxuLS1cbm1tL3Ztc2Nhbi5jPTg2Mj1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4tLVxubW0vdm1zY2FuLmMtODY1LX1cbm1tL3Ztc2Nhbi5jOjg2NjojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTg2Ny1cbi0tXG5tbS92bXNjYW4uYz0yNjgwPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtMjY5MS1cbm1tL3Ztc2Nhbi5jOjI2OTI6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy0yNjkzLVxubW0vdm1zY2FuLmM9MjY5ND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jOjI2OTU6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jOjI2OTY6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG5tbS92bXNjYW4uYy0yNjk3LSNkZWZpbmUgZ2V0X2NhcChjYXApXHRzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcbm1tL3Ztc2Nhbi5jLTI2OTgtI2Vsc2Vcbm1tL3Ztc2Nhbi5jOjI2OTk6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfRkFMU0UobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xubW0vdm1zY2FuLmMtMjcwMC0jZGVmaW5lIGdldF9jYXAoY2FwKVx0c3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcbi0tXG5tbS92bXNjYW4uYz0yNzAzPXN0YXRpYyBib29sIHNob3VsZF93YWxrX21tdSh2b2lkKVxubW0vdm1zY2FuLmMtMjcwNC17XG5tbS92bXNjYW4uYzoyNzA1Olx0cmV0dXJuIGFyY2hfaGFzX2h3X3B0ZV95b3VuZygpIFx1MDAyNlx1MDAyNiBnZXRfY2FwKExSVV9HRU5fTU1fV0FMSyk7XG5tbS92bXNjYW4uYy0yNzA2LX1cbi0tXG5tbS92bXNjYW4uYz0yNzA4PXN0YXRpYyBib29sIHNob3VsZF9jbGVhcl9wbWRfeW91bmcodm9pZClcbm1tL3Ztc2Nhbi5jLTI3MDkte1xubW0vdm1zY2FuLmM6MjcxMDpcdHJldHVybiBhcmNoX2hhc19od19ub25sZWFmX3BtZF95b3VuZygpIFx1MDAyNlx1MDAyNiBnZXRfY2FwKExSVV9HRU5fTk9OTEVBRl9ZT1VORyk7XG5tbS92bXNjYW4uYy0yNzExLX1cbi0tXG5tbS92bXNjYW4uYy0yNzIxLVx0dW5zaWduZWQgbG9uZyBtaW5fc2VxW0FOT05fQU5EX0ZJTEVdID0ge1x0XHRcdFxcXG5tbS92bXNjYW4uYzoyNzIyOlx0XHRSRUFEX09OQ0UoKGxydXZlYyktXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbTFJVX0dFTl9BTk9OXSksXHRcXFxubW0vdm1zY2FuLmM6MjcyMzpcdFx0UkVBRF9PTkNFKChscnV2ZWMpLVx1MDAzZWxydWdlbi5taW5fc2VxW0xSVV9HRU5fRklMRV0pLFx0XFxcbm1tL3Ztc2Nhbi5jLTI3MjQtXHR9XG4tLVxubW0vdm1zY2FuLmM9Mjg4MD1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcbi0tXG5tbS92bXNjYW4uYy0yODk5LVxubW0vdm1zY2FuLmM6MjkwMDojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXG5tbS92bXNjYW4uYy0yOTAxLVxuLS1cbm1tL3Ztc2Nhbi5jPTMwMDk9dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMzAzNy1cbm1tL3Ztc2Nhbi5jOjMwMzg6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xubW0vdm1zY2FuLmMtMzAzOS1cbi0tXG5tbS92bXNjYW4uYz0zMjY5PXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuLS1cbm1tL3Ztc2Nhbi5jLTMyODctXHRcdC8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi9cbm1tL3Ztc2Nhbi5jOjMyODg6XHRcdGlmICghKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSlcbm1tL3Ztc2Nhbi5jLTMyODktXHRcdFx0cmV0dXJuIC0xO1xubW0vdm1zY2FuLmMtMzI5MC1cbm1tL3Ztc2Nhbi5jOjMyOTE6XHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG5tbS92bXNjYW4uYzozMjkyOlx0XHRuZXdfZmxhZ3MgfD0gKChnZW4gJiM0MzsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRikgfCBCSVQoUEdfd29ya2luZ3NldCk7XG5tbS92bXNjYW4uYy0zMjkzLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG5tbS92bXNjYW4uYy0zMjk0LVxubW0vdm1zY2FuLmM6MzI5NTpcdHJldHVybiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xubW0vdm1zY2FuLmMtMzI5Ni19XG4tLVxubW0vdm1zY2FuLmM9MzI5OT1zdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3Ztc2Nhbi5jLTMzMDUtXG5tbS92bXNjYW4uYzozMzA2Olx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG5tbS92bXNjYW4uYy0zMzA3LVxubW0vdm1zY2FuLmMtMzMwOC1cdGRvIHtcbm1tL3Ztc2Nhbi5jOjMzMDk6XHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xubW0vdm1zY2FuLmMtMzMxMC1cdFx0LyogZm9saW9fdXBkYXRlX2dlbigpIGhhcyBwcm9tb3RlZCB0aGlzIHBhZ2U/ICovXG4tLVxubW0vdm1zY2FuLmMtMzMxNS1cbm1tL3Ztc2Nhbi5jOjMzMTY6XHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG5tbS92bXNjYW4uYzozMzE3Olx0XHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gJiM0MzsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbm1tL3Ztc2Nhbi5jLTMzMTgtXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbi0tXG5tbS92bXNjYW4uYz0zOTUzPXN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTM5ODktXG5tbS92bXNjYW4uYzozOTkwOlx0XHRpZiAobWluX3NlcVtMUlVfR0VOX0FOT05dIFx1MDAzZSBzZXEgXHUwMDI2XHUwMDI2IG1pbl9zZXFbTFJVX0dFTl9GSUxFXSBcdTAwM2Mgc2VxKVxubW0vdm1zY2FuLmM6Mzk5MTpcdFx0XHRtaW5fc2VxW0xSVV9HRU5fQU5PTl0gPSBzZXE7XG5tbS92bXNjYW4uYzozOTkyOlx0XHRlbHNlIGlmIChtaW5fc2VxW0xSVV9HRU5fRklMRV0gXHUwMDNlIHNlcSBcdTAwMjZcdTAwMjYgbWluX3NlcVtMUlVfR0VOX0FOT05dIFx1MDAzYyBzZXEpXG5tbS92bXNjYW4uYzozOTkzOlx0XHRcdG1pbl9zZXFbTFJVX0dFTl9GSUxFXSA9IHNlcTtcbm1tL3Ztc2Nhbi5jLTM5OTQtXHR9XG4tLVxubW0vdm1zY2FuLmM9NDAwNT1zdGF0aWMgYm9vbCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy00MDM3LVx0ICogdGhlIGN1cnJlbnQgbWF4X3NlcSBuZWVkIHRvIGJlIGNvdmVyZWQsIHNpbmNlIG1heF9zZXEmIzQzOzEgY2FuIG92ZXJsYXBcbm1tL3Ztc2Nhbi5jOjQwMzg6XHQgKiB3aXRoIG1pbl9zZXFbTFJVX0dFTl9BTk9OXSBpZiBzd2FwcGluZyBpcyBjb25zdHJhaW5lZC4gQW5kIGlmIHRoZXkgZG9cbm1tL3Ztc2Nhbi5jLTQwMzktXHQgKiBvdmVybGFwLCBjb2xkL2hvdCBpbnZlcnNpb24gaGFwcGVucy5cbi0tXG5tbS92bXNjYW4uYz00ODMxPXN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ4MzUtXHRpZiAoc3dhcHBpbmVzcyBcdTAwM2M9IE1JTl9TV0FQUElORVNTICYjNDM7IDEpXG5tbS92bXNjYW4uYzo0ODM2Olx0XHRyZXR1cm4gTFJVX0dFTl9GSUxFO1xubW0vdm1zY2FuLmMtNDgzNy1cbm1tL3Ztc2Nhbi5jLTQ4MzgtXHRpZiAoc3dhcHBpbmVzcyBcdTAwM2U9IE1BWF9TV0FQUElORVNTKVxubW0vdm1zY2FuLmM6NDgzOTpcdFx0cmV0dXJuIExSVV9HRU5fQU5PTjtcbm1tL3Ztc2Nhbi5jLTQ4NDAtXHQvKlxuLS1cbm1tL3Ztc2Nhbi5jLTQ4NDMtXHQgKi9cbm1tL3Ztc2Nhbi5jOjQ4NDQ6XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFx1MDAyNnNwKTtcbm1tL3Ztc2Nhbi5jOjQ4NDU6XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xubW0vdm1zY2FuLmMtNDg0Ni1cbi0tXG5tbS92bXNjYW4uYz01NTA1PXN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcbi0tXG5tbS92bXNjYW4uYy01NTIxLVx0aWYgKGVuYWJsZWQpXG5tbS92bXNjYW4uYzo1NTIyOlx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZV9jcHVzbG9ja2VkKFx1MDAyNmxydV9nZW5fY2Fwc1tMUlVfR0VOX0NPUkVdKTtcbm1tL3Ztc2Nhbi5jLTU1MjMtXHRlbHNlXG5tbS92bXNjYW4uYzo1NTI0Olx0XHRzdGF0aWNfYnJhbmNoX2Rpc2FibGVfY3B1c2xvY2tlZChcdTAwMjZscnVfZ2VuX2NhcHNbTFJVX0dFTl9DT1JFXSk7XG5tbS92bXNjYW4uYy01NTI1LVxuLS1cbm1tL3Ztc2Nhbi5jPTU1ODY9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbi0tXG5tbS92bXNjYW4uYy01NTg5LVxubW0vdm1zY2FuLmM6NTU5MDpcdGlmIChnZXRfY2FwKExSVV9HRU5fQ09SRSkpXG5tbS92bXNjYW4uYzo1NTkxOlx0XHRjYXBzIHw9IEJJVChMUlVfR0VOX0NPUkUpO1xubW0vdm1zY2FuLmMtNTU5Mi1cbm1tL3Ztc2Nhbi5jLTU1OTMtXHRpZiAoc2hvdWxkX3dhbGtfbW11KCkpXG5tbS92bXNjYW4uYzo1NTk0Olx0XHRjYXBzIHw9IEJJVChMUlVfR0VOX01NX1dBTEspO1xubW0vdm1zY2FuLmMtNTU5NS1cbm1tL3Ztc2Nhbi5jLTU1OTYtXHRpZiAoc2hvdWxkX2NsZWFyX3BtZF95b3VuZygpKVxubW0vdm1zY2FuLmM6NTU5NzpcdFx0Y2FwcyB8PSBCSVQoTFJVX0dFTl9OT05MRUFGX1lPVU5HKTtcbm1tL3Ztc2Nhbi5jLTU1OTgtXG4tLVxubW0vdm1zY2FuLmM9NTYwMz1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vdm1zY2FuLmMtNTYxNS1cbm1tL3Ztc2Nhbi5jOjU2MTY6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9MUlVfR0VOX0NBUFM7IGkmIzQzOyYjNDM7KSB7XG5tbS92bXNjYW4uYy01NjE3LVx0XHRib29sIGVuYWJsZWQgPSBjYXBzIFx1MDAyNiBCSVQoaSk7XG5tbS92bXNjYW4uYy01NjE4LVxubW0vdm1zY2FuLmM6NTYxOTpcdFx0aWYgKGkgPT0gTFJVX0dFTl9DT1JFKVxubW0vdm1zY2FuLmMtNTYyMC1cdFx0XHRscnVfZ2VuX2NoYW5nZV9zdGF0ZShlbmFibGVkKTtcbi0tXG5tbS92bXNjYW4uYz02MDgwPXN0YXRpYyBpbnQgX19pbml0IGluaXRfbHJ1X2dlbih2b2lkKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwODItXHRCVUlMRF9CVUdfT04oTUlOX05SX0dFTlMgJiM0MzsgMSBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbm1tL3Ztc2Nhbi5jOjYwODM6XHRCVUlMRF9CVUdfT04oQklUKExSVV9HRU5fV0lEVEgpIFx1MDAzYz0gTUFYX05SX0dFTlMpO1xubW0vdm1zY2FuLmMtNjA4NC1cbi0tXG5tbS92bXNjYW4uYz02MDk1PWxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcbm1tL3Ztc2Nhbi5jLTYwOTYtXG5tbS92bXNjYW4uYzo2MDk3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtNjA5OC1cbi0tXG5tbS92bXNjYW4uYz02MTA5PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjExMy1cbm1tL3Ztc2Nhbi5jOjYxMTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy02MTE1LVxuLS1cbm1tL3dvcmtpbmdzZXQuYz0yMTM9c3RhdGljIHZvaWQgdW5wYWNrX3NoYWRvdyh2b2lkICpzaGFkb3csIGludCAqbWVtY2dpZHAsIHBnX2RhdGFfdCAqKnBnZGF0LFxuLS1cbm1tL3dvcmtpbmdzZXQuYy0yMzItXG5tbS93b3JraW5nc2V0LmM6MjMzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vd29ya2luZ3NldC5jLTIzNC1cbm1tL3dvcmtpbmdzZXQuYz0yMzU9c3RhdGljIHZvaWQgKmxydV9nZW5fZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS93b3JraW5nc2V0LmMtMjUwLVxubW0vd29ya2luZ3NldC5jOjI1MTpcdEJVSUxEX0JVR19PTihMUlVfR0VOX1dJRFRIICYjNDM7IExSVV9SRUZTX1dJRFRIIFx1MDAzZVxubW0vd29ya2luZ3NldC5jLTI1Mi1cdFx0ICAgICBCSVRTX1BFUl9MT05HIC0gbWF4KEVWSUNUSU9OX1NISUZULCBFVklDVElPTl9TSElGVF9BTk9OKSk7XG4tLVxubW0vd29ya2luZ3NldC5jPTI5Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuLS1cbm1tL3dvcmtpbmdzZXQuYy0zMzYtXG5tbS93b3JraW5nc2V0LmM6MzM3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xubW0vd29ya2luZ3NldC5jLTMzOC1cbi0tXG5tbS93b3JraW5nc2V0LmM9MzUwPXN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4tLVxubW0vd29ya2luZ3NldC5jLTM1My1cbm1tL3dvcmtpbmdzZXQuYzozNTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS93b3JraW5nc2V0LmMtMzU1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjI5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBLY29uZmlnOiBBIFRhcmdldGVkIEluc3BlY3Rpb24qKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gYG1tL0tjb25maWdgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHplcm9pbmcgaW4gYXJvdW5kIGxpbmUgMTQwMy4gVGhpcyBhcmVhIGxpa2VseSBkZWFscyB3aXRoIGEgc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgYSBzZXQgb2YgcmVsYXRlZCBvcHRpb25zLCBnaXZlbiB0aGUgY29udGV4dCBvZiB0aGUgS2NvbmZpZyBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgb3B0aW9uIGl0c2VsZiwgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZSBhc3NpZ25tZW50cywgb3IgdGhlIGhlbHAgdGV4dCB0aGF0IGd1aWRlcyB1c2Vycy4gSXQmIzM5O3MgYSB0YXJnZXRlZCBhcHByb2FjaDsgSSYjMzk7bSBub3QgZG9pbmcgYSBnZW5lcmFsIHN1cnZleS4gSSBoYXZlIGEgaHVuY2ggYWJvdXQgd2hhdCBJIGFtIGxvb2tpbmcgZm9yIHNvIEkgYW0gZ29pbmcgdG8gc2VlIGlmIG15IGh5cG90aGVzZXMgaG9sZCB1cCB3aGVuIEkgaW5zcGVjdCB0aGUgY29kZS4gSSBhbSBwcm9iYWJseSBsb29raW5nIGZvciBzb21lIHNwZWNpZmljIHNldHRpbmcgdGhhdCBjb250cm9scyB0aGUgdW5kZXJseWluZyBiZWhhdmlvci4gSSBhbSByZWFkeSB0byBkaWcgZGVlcGVyIGFzIG5lZWRlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDAwOlx0XHQgIHB1cnBvc2VzLiAgSXQgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gb25cbjE0MDE6XHRcdCAgZmlsZS1iYWNrZWQgbWVtb3J5IHR5cGVzIGxpa2Ugc2htZW0gYW5kIGh1Z2V0bGJmcy5cbjE0MDI6XHRcbjE0MDM6XHQjIG11bHRpLWdlbiBMUlUge1xuMTQwNDpcdGNvbmZpZyBMUlVfR0VOXG4xNDA1Olx0XHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbjE0MDY6XHRcdGRlcGVuZHMgb24gTU1VXG4xNDA3Olx0XHQjIG1ha2Ugc3VyZSBmb2xpby1cdTAwM2VmbGFncyBoYXMgZW5vdWdoIHNwYXJlIGJpdHNcbjE0MDg6XHRcdGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUFxuMTQwOTpcdFx0aGVscFxuMTQxMDpcdFx0ICBBIGhpZ2ggcGVyZm9ybWFuY2UgTFJVIGltcGxlbWVudGF0aW9uIHRvIG92ZXJjb21taXQgbWVtb3J5LiBTZWVcbjE0MTE6XHRcdCAgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzLlxuMTQxMjpcdFxuMTQxMzpcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbjE0MTQ6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbjE0MTU6XHRcdGRlcGVuZHMgb24gTFJVX0dFTlxuMTQxNjpcdFx0aGVscFxuMTQxNzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBtdWx0aS1nZW4gTFJVIGJ5IGRlZmF1bHQuXG4xNDE4Olx0XG4xNDE5Olx0Y29uZmlnIExSVV9HRU5fU1RBVFNcbjE0MjA6XHRcdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4xNDIxOlx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MjI6XHRcdGhlbHBcbjE0MjM6XHRcdCAgRG8gbm90IGVuYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IHBsYW4gdG8gbG9vayBhdCBoaXN0b3JpY2FsIHN0YXRzXG4xNDI0Olx0XHQgIGZyb20gZXZpY3RlZCBnZW5lcmF0aW9ucyBmb3IgZGVidWdnaW5nIHB1cnBvc2UuXG4xNDI1Olx0XG4xNDI2Olx0XHQgIFRoaXMgb3B0aW9uIGhhcyBhIHBlci1tZW1jZyBhbmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLlxuMTQyNzpcdFxuMTQyODpcdGNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxuMTQyOTpcdFx0ZGVmX2Jvb2wgeVxuMTQzMDpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFx1MDAyNlx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcbjE0MzE6XHQjIH1cbjE0MzI6XHRcbjE0MzM6XHRjb25maWcgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcbjE0MzQ6XHQgICAgICAgZGVmX2Jvb2wgblxuMTQzNTpcdFxuMTQzNjpcdGNvbmZpZyBQRVJfVk1BX0xPQ0tcbjE0Mzc6XHRcdGRlZl9ib29sIHlcbjE0Mzg6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sgXHUwMDI2XHUwMDI2IE1NVSBcdTAwMjZcdTAwMjYgU01QXG4xNDM5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwNjcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIExSVSBHZW5lcmF0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYENPTkZJR19MUlVfR0VOYCBvcHRpb24sIHdoaWNoIEkgYmVsaWV2ZSBpcyB0aGUga2V5IGhlcmUuIE5vdywgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIHNlZW1zIHRvIGJlIHRoZSBvbmUgdGhhdCB0dXJucyBpdCBvbiBieSBkZWZhdWx0LCBjb3JyZWN0PyBSaWdodCwgZ290IGl0LgoKVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgY2hhbmdlcyBtYWRlIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBJIG5lZWQgdG8gcmVhZCBjYXJlZnVsbHkgYXJvdW5kIHRoZSBsaW5lcyB0aGF0IHdlcmUgbW9kaWZpZWQsIEkgd2FudCB0byBnZXQgdGhlIGNvbnRleHQgcmlnaHQuIEkgd2lsbCBzdHVkeSB0aG9zZSBzZWN0aW9ucyBmb3Igbm93LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0ODMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ4MzA6XHRcbjQ4MzE6XHRzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbjQ4MzI6XHR7XG40ODMzOlx0XHRzdHJ1Y3QgY3RybF9wb3Mgc3AsIHB2ID0ge307XG40ODM0Olx0XG40ODM1Olx0XHRpZiAoc3dhcHBpbmVzcyBcdTAwM2M9IE1JTl9TV0FQUElORVNTICYjNDM7IDEpXG40ODM2Olx0XHRcdHJldHVybiBMUlVfR0VOX0ZJTEU7XG40ODM3Olx0XG40ODM4Olx0XHRpZiAoc3dhcHBpbmVzcyBcdTAwM2U9IE1BWF9TV0FQUElORVNTKVxuNDgzOTpcdFx0XHRyZXR1cm4gTFJVX0dFTl9BTk9OO1xuNDg0MDpcdFx0LypcbjQ4NDE6XHRcdCAqIENvbXBhcmUgdGhlIHN1bSBvZiBhbGwgdGllcnMgb2YgYW5vbiB3aXRoIHRoYXQgb2YgZmlsZSB0byBkZXRlcm1pbmVcbjQ4NDI6XHRcdCAqIHdoaWNoIHR5cGUgdG8gc2Nhbi5cbjQ4NDM6XHRcdCAqL1xuNDg0NDpcdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG40ODQ1Olx0XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xuNDg0NjpcdFxuNDg0NzpcdFx0cmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKFx1MDAyNnNwLCBcdTAwMjZwdik7XG40ODQ4Olx0fVxuNDg0OTpcdFxuNDg1MDpcdC8qXG40ODUxOlx0ICogVGhlIE1HTFJVIGNvdW50ZXJwYXJ0IHRvIHRvb19tYW55X2lzb2xhdGVkKCkuXG40ODUyOlx0ICpcbjQ4NTM6XHQgKiB0b29fbWFueV9pc29sYXRlZCgpIGNvbXBhcmVzIG5vZGUtd2lkZSBpc29sYXRlZCBjb3VudHMgYWdhaW5zdFxuNDg1NDpcdCAqIG5vZGUtd2lkZSBpbmFjdGl2ZSBzaXplcy4gSXQgcHJlZGF0ZXMgcGVyLW1lbWNnIExSVSBsaXN0cywgd2hpY2hcbjQ4NTU6XHQgKiBtb3ZlZCBpc29sYXRpb24gdG8gcGVyLWxydXZlYyBncmFudWxhcml0eS4gTUdMUlUgcmVjbGFpbWVycyBjb250ZW5kXG40ODU2Olx0ICogcGVyIGxydXZlYywgc28gdGhpcyBjaGVjayBpcyBwZXIgbHJ1dmVjIGFzIHdlbGwsIGFuZCBpc29sYXRpb24gaW5cbjQ4NTc6XHQgKiBvbmUgbWVtY2cgZG9lcyBub3QgdGhyb3R0bGUgcmVjbGFpbSBpbiBhbm90aGVyLlxuNDg1ODpcdCAqXG40ODU5Olx0ICogVGhlIGxlZ2FjeSB0aHJlc2hvbGQsIHRoZSBzaXplIG9mIHRoZSBpbmFjdGl2ZSBsaXN0LCBpcyBub3QgdXNhYmxlXG40ODYwOlx0ICogaGVyZSBlaXRoZXI6IGluIE1HTFJVIHRoZSBpbmFjdGl2ZSBjb3VudGVycyBhcmUgb25seSBhIGNvbXBhdGliaWxpdHlcbjQ4NjE6XHQgKiBzaGltIC0gdGhleSBqdW1wIGFyb3VuZCB3aGVuIHN3YXAgcnVucyBvdXQgb3IgYSBtZW1jZyBoaXRzIGl0cyBzd2FwXG40ODYyOlx0ICogbGltaXQsIGFuZCBwcm9hY3RpdmUgYWdpbmcgY2FuIGluZmxhdGUgdGhlbS4gQ29tcGFyZSBhZ2FpbnN0IHRoZVxuNDg2MzpcdCAqIHRvdGFsIG51bWJlciBvZiBldmljdGFibGUgcGFnZXMgb2YgdGhlIHR5cGUgZGl2aWRlZCBieSBNSU5fTlJfR0VOUyxcbjQ4NjQ6XHQgKiBhcHByb3hpbWF0aW5nIHRoZSBzaXplIG9mIG9uZSBnZW5lcmF0aW9uIC0gdGhlIHNhbWUgdW5pdCB0aGVcbjQ4NjU6XHQgKiBvcmlnaW5hbCBNR0xSVSBhZ2luZyBoZXVyaXN0aWNzIHVzZWQuXG40ODY2Olx0ICovXG40ODY3Olx0c3RhdGljIGJvb2wgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLFxuNDg2ODpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG40ODY5Olx0e1xuNDg3MDpcdFx0dW5zaWduZWQgbG9uZyBpc29sYXRlZCwgZXZpY3RhYmxlO1xuNDg3MTpcdFxuNDg3MjpcdFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG40ODczOlx0XHRcdHJldHVybiBmYWxzZTtcbjQ4NzQ6XHRcbjQ4NzU6XHRcdGlmICghd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzYykpXG40ODc2Olx0XHRcdHJldHVybiBmYWxzZTtcbjQ4Nzc6XHRcbjQ4Nzg6XHRcdGlzb2xhdGVkID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuLm5yX2lzb2xhdGVkW3R5cGVdKTtcbjQ4Nzk6XHRcdGV2aWN0YWJsZSA9IGxydXZlY190eXBlX2V2aWN0YWJsZV9zaXplKGxydXZlYywgdHlwZSk7XG40ODgwOlx0XG40ODgxOlx0XHQvKlxuNDg4MjpcdFx0ICogR0ZQX05PSU8vR0ZQX05PRlMgY2FsbGVycyBhcmUgYWxsb3dlZCB0byBpc29sYXRlIG1vcmUgcGFnZXMsIHNvXG40ODgzOlx0XHQgKiB0aGV5IHdvbiYjMzk7dCBiZSBibG9ja2VkIGJ5IG5vcm1hbCBkaXJlY3QtcmVjbGFpbWVycywgZm9ybWluZyBhXG40ODg0Olx0XHQgKiBjaXJjdWxhciBkZWFkbG9jay5cbjQ4ODU6XHRcdCAqL1xuNDg4NjpcdFx0aWYgKGdmcF9oYXNfaW9fZnMoc2MtXHUwMDNlZ2ZwX21hc2spKVxuNDg4NzpcdFx0XHRldmljdGFibGUgXHUwMDNlXHUwMDNlPSAzO1xuNDg4ODpcdFxuNDg4OTpcdFx0cmV0dXJuIGlzb2xhdGVkIFx1MDAzZSBldmljdGFibGUgLyBNSU5fTlJfR0VOUztcbjQ4OTA6XHR9XG40ODkxOlx0XG40ODkyOlx0LypcbjQ4OTM6XHQgKiBVbmxpa2UgdGhlIGxlZ2FjeSBwYXRoLCB3aGVyZSB0aGUgTFJVIGxpc3QgdG8gaXNvbGF0ZSBmcm9tIGlzIGtub3duXG40ODk0Olx0ICogYmVmb3JlIGlzb2xhdGlvbiwgaXNvbGF0ZV9mb2xpb3MoKSBwaWNrcyB0aGUgdHlwZSBmcm9tIHRoZSByZWZhdWx0XG40ODk1Olx0ICogZmVlZGJhY2sgYW5kIG1heSBmYWxsIGJhY2sgdG8gdGhlIG90aGVyIG9uZS4gVGhlcmVmb3JlLCBpbnN0ZWFkIG9mXG40ODk2Olx0ICogdGhyb3R0bGluZyBvbiBhIHNpbmdsZSB0eXBlLCBjb2xsZWN0IHRoZSBldmljdGFibGUgdHlwZXMgdGhhdCBkbyBub3RcbjQ4OTc6XHQgKiBoYXZlIHRvbyBtYW55IGlzb2xhdGVkIGZvbGlvcywgYW5kIG9ubHkgc2xlZXAgd2hlbiBhbGwgb2YgdGhlbSBkby5cbjQ4OTg6XHQgKlxuNDg5OTpcdCAqIFJldHVybnMgdGhlIG1hc2sgb2YgdGhlIHR5cGVzIGlzb2xhdGVfZm9saW9zKCkgbWF5IGlzb2xhdGUgZnJvbSwgb3JcbjQ5MDA6XHQgKiAwIGlmIHJlY2xhaW0gc2hvdWxkIHN0b3AuIEFsc28gc2V0cyBAZmF0YWwgdG8gdGVsbCB0aGUgY2FsbGVyIHRoYXRcbjQ5MDE6XHQgKiB0aGUgdGFzayByZWNlaXZlZCBhIGZhdGFsIHNpZ25hbCB3aGlsZSB3YWl0aW5nLlxuNDkwMjpcdCAqL1xuNDkwMzpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbjQ5MDQ6XHRcdFx0XHRcdFx0ICAgICBpbnQgc3dhcHBpbmVzcyxcbjQ5MDU6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbjQ5MDY6XHRcdFx0XHRcdFx0ICAgICBib29sICpmYXRhbClcbjQ5MDc6XHR7XG40OTA4Olx0XHR1bnNpZ25lZCBpbnQgYWxsb3dlZDtcbjQ5MDk6XHRcdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjUxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyB0aGVzZSBldmljdGlvbiBmdW5jdGlvbnMuCgoqKkRlY29uc3RydWN0aW5nIEZvbGlvIEV2aWN0aW9uIGFuZCBJc29sYXRpb24qKgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjYWxsZXJzIGFuZCB0aGUgY2FsbCBzdGFjayByZWxhdGVkIHRvIGBldmljdF9mb2xpb3NgLCBgaXNvbGF0ZV9mb2xpb3NgLCBhbmQgcmVsYXRlZCByb3V0aW5lcy4gVW5kZXJzdGFuZGluZyB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGludm9rZWQgaXMga2V5IHRvIGdyYXNwaW5nIHRoZWlyIG92ZXJhbGwgcm9sZSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgbGlmZWN5Y2xlLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQuCgpUaGVuLCBJJiMzOTttIGdvaW5nIHRvIHBpbnBvaW50IHRoZSBkZWZpbml0aW9uIG9mIGBldmljdF9mb2xpb3NgLCBzbyBJIHdpbGwgc2VhcmNoIGluIGBtbS92bXNjYW4uY2AuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgcGFnZS9mb2xpbyBzY2FubmluZyBhbmQgcmVjbGFpbWluZyBwcm9jZXNzLCBzbyB0aGF0IGxvY2F0aW9uIG1ha2VzIHNlbnNlIGFzIGEgc3RhcnRpbmcgcG9pbnQuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGhvdyBgZXZpY3RfZm9saW9zYCBpbnRlcmFjdHMgd2l0aCB0aGUgc3Vycm91bmRpbmcgY29kZSwgYW5kIGlkZW50aWZ5IG90aGVyIHBvaW50cyBvZiBpbnRlcmVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXZpY3RfZm9saW9zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NDk1Nj1zdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ5OTctXG5tbS92bXNjYW4uYzo0OTk4OnN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxubW0vdm1zY2FuLmMtNDk5OS1cdFx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmM9NTE5OT1zdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyMjItXHRcdG5yX2JhdGNoID0gbWluKG5yX3RvX3NjYW4sIE1JTl9MUlVfQkFUQ0gpO1xubW0vdm1zY2FuLmM6NTIyMzpcdFx0ZGVsdGEgPSBldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpO1xubW0vdm1zY2FuLmMtNTIyNC1cdFx0aWYgKCFkZWx0YSlcbi0tXG5tbS92bXNjYW4uYz01ODI2PXN0YXRpYyBpbnQgcnVuX2V2aWN0aW9uKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTU4NDYtXHRcdG5yX2JhdGNoID0gbWluKG5yX3RvX3JlY2xhaW0gLSBzYy1cdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xubW0vdm1zY2FuLmM6NTg0NzpcdFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxubW0vdm1zY2FuLmMtNTg0OC1cdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyOTUKCQkJCQkJCW91dHB1dDogNjAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9uczoKCioqRGlnZ2luZyBpbnRvIHRoZSBFdmljdGlvbiBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBydW5fZXZpY3Rpb25gLiBNeSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6IHdoZXJlIGFyZSB0aGVzZSB0aGluZ3MgYWN0dWFsbHkgKnVzZWQqPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCB0byBnZXQgYSBoYW5kbGUgb24gdGhlaXIgcHVycG9zZSB3aXRoaW4gdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gdHJhY2UgdGhlbSB0aHJvdWdoIHRoZSBjb2RlIGJhc2UgYW5kIHNlZSB0aGUgY29udGV4dCBpbiB3aGljaCB0aGVzZSBldmljdGlvbiBhbmQgc2hyaW5raW5nIG9wZXJhdGlvbnMgYXJlIGFjdHVhbGx5IHRyaWdnZXJlZC4gQXJlIHRoZXkgcGFydCBvZiBhIHNjaGVkdWxlZCBiYWNrZ3JvdW5kIHRhc2s/IEFyZSB0aGV5IGluIHJlc3BvbnNlIHRvIG1lbW9yeSBwcmVzc3VyZT8gQXJlIHRoZXkgcmVhY3RpbmcgdG8gc3BlY2lmaWMgZXZlbnRzIHdpdGhpbiB0aGUgTFJVIGNhY2hlIGl0c2VsZj8gS25vd2luZyB0aGUgY2FsbCBzaXRlcyBpcyB0aGUgZXNzZW50aWFsIGZpcnN0IHN0ZXAgdG8gdW5kZXJzdGFuZGluZyB3aGF0JiMzOTtzIHJlYWxseSBnb2luZyBvbiB3aXRoIHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgc3RvcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19zaHJpbmtfbHJ1dmVjfHJ1bl9ldmljdGlvbnxscnVfZ2VuX3Nocmlua19scnV2ZWN8bHJ1X2dlbl9zaHJpbmtfbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTUxNjQ9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTk4LSAqL1xubW0vdm1zY2FuLmM6NTE5OTpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTIwMC17XG4tLVxubW0vdm1zY2FuLmM9NTI0ND1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MjYzLVxubW0vdm1zY2FuLmM6NTI2NDpcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy01MjY1LVxuLS1cbm1tL3Ztc2Nhbi5jPTUyODU9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTM1NC1cbm1tL3Ztc2Nhbi5jOjUzNTU6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MzU2LXtcbi0tXG5tbS92bXNjYW4uYy01MzY3LVxubW0vdm1zY2FuLmM6NTM2ODpcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcbm1tL3Ztc2Nhbi5jLTUzNjktXHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcbi0tXG5tbS92bXNjYW4uYy01Mzc1LVxubW0vdm1zY2FuLmM6NTM3NjpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTM3Ny17XG4tLVxubW0vdm1zY2FuLmM9NTgxNT1zdGF0aWMgaW50IHJ1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxuLS1cbm1tL3Ztc2Nhbi5jLTU4MjUtXG5tbS92bXNjYW4uYzo1ODI2OnN0YXRpYyBpbnQgcnVuX2V2aWN0aW9uKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxubW0vdm1zY2FuLmMtNTgyNy1cdFx0XHRpbnQgc3dhcHBpbmVzcywgdW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxuLS1cbm1tL3Ztc2Nhbi5jPTU4NTY9c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxuLS1cbm1tL3Ztc2Nhbi5jLTU4ODctXHRjYXNlICYjMzk7LSYjMzk7OlxubW0vdm1zY2FuLmM6NTg4ODpcdFx0ZXJyID0gcnVuX2V2aWN0aW9uKGxydXZlYywgc2VxLCBzYywgc3dhcHBpbmVzcywgb3B0KTtcbm1tL3Ztc2Nhbi5jLTU4ODktXHRcdGJyZWFrO1xuLS1cbm1tL3Ztc2Nhbi5jPTYwOTk9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MTAzLVxubW0vdm1zY2FuLmM6NjEwNDpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTYxMDUte1xuLS1cbm1tL3Ztc2Nhbi5jLTYxMDgtXG5tbS92bXNjYW4uYzo2MTA5OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy02MTEwLXtcbi0tXG5tbS92bXNjYW4uYz02MTE2PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MTI3LVx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcbm1tL3Ztc2Nhbi5jOjYxMjg6XHRcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYxMjktXG4tLVxubW0vdm1zY2FuLmM9NjM4Nj1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MzkzLVx0XHRtZW1zZXQoXHUwMDI2c2MtXHUwMDNlbnIsIDAsIHNpemVvZihzYy1cdTAwM2VucikpO1xubW0vdm1zY2FuLmM6NjM5NDpcdFx0bHJ1X2dlbl9zaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNjM5NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NjYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBNZW1vcnkgUmVjbGFtYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgcmVjbGFtYXRpb24gd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB0aGUgbWFpbiBwYXRocy4gSSBrbm93IHRoYXQgYHNocmlua19scnV2ZWNgIGFuZCBgc2hyaW5rX25vZGVgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucywgdG91Y2hpbmcgb24gZGlyZWN0IHJlY2xhaW0sIGtzd2FwZCwgYW5kIG1lbW9yeSBjZ3JvdXAgKG1lbWNnKSByZWNsYWltIG1lY2hhbmlzbXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGVzZSBhbmQgbWF5YmUgZm9jdXMgb24gdGhlIG5ld2VyIHBhcnRzIGluIHRoZXNlIHBhdGhzLgoKQmV5b25kIHRoYXQsIEkgcmVtZW1iZXIgdGhlIGRlYnVnZnMgYW5kIHN5c2ZzIGludGVyZmFjZXMsIGxpa2UgdGhlIG9uZXMgdW5kZXIgYC9zeXMva2VybmVsL21tL2xydV9nZW4vYC4gVGhvc2UgY2FuIHByb3ZpZGUgdmFsdWFibGUgaW5zaWdodHMsIGxpa2UgdGhyb3VnaCBpbnRlcmZhY2VzIGxpa2UgYGxydV9nZW5fc2VxX3dyaXRlYCBhbmQgYHJ1bl9jbWRgLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCBgbHJ1X2dlbl9zZXFfd3JpdGVgLCBvciBtYXliZSBzb21lIG9mIHRoZSBvdGhlciBzeXNmcyBpbnRlcmZhY2VzLCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBwZXJzcGVjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnVuX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTU4MjY9c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNTg1NS1cbm1tL3Ztc2Nhbi5jOjU4NTY6c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxubW0vdm1zY2FuLmMtNTg1Ny1cdFx0ICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLCB1bnNpZ25lZCBsb25nIG9wdClcbi0tXG5tbS92bXNjYW4uYz01ODk4PXN0YXRpYyBzc2l6ZV90IGxydV9nZW5fc2VxX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLFxuLS1cbm1tL3Ztc2Nhbi5jLTU5NjYtXG5tbS92bXNjYW4uYzo1OTY3Olx0XHRlcnIgPSBydW5fY21kKGNtZCwgbWVtY2dfaWQsIG5pZCwgc2VxLCBcdTAwMjZzYywgc3dhcHBpbmVzcywgb3B0KTtcbm1tL3Ztc2Nhbi5jLTU5NjgtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjQwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIHByZXR0eSBjcml0aWNhbCBzdHVmZjogdGhlIGNvcmUga2VybmVsIGxvZ2ljIGZvciBNR0xSVSBwYWdlIHJlY2xhbWF0aW9uIGFuZCBpc29sYXRpb24gdGhyb3R0bGluZy4gSW5zdGFudGx5LCBteSBleHBlcnQgYnJhaW4gc2NyZWFtcywgJiMzNDtGdXp6IGl0ISYjMzQ7IEdpdmVuIHRoYXQgaXQmIzM5O3MgYWx0ZXJpbmcgZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIE1HTFJVIGZyYW1ld29yayAoaW50cm9kdWNpbmcgdGhpbmdzIGxpa2UgYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRgLCBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYCwgYXRvbWljIGNvdW50ZXIgbWFuaXB1bGF0aW9ucywgYW5kIHJldHJ5L2Fib3J0IGxvZ2ljIGZvciBzaWduYWwgaGFuZGxpbmcpLCBpdOKAmXMgcHJhY3RpY2FsbHkgYmVnZ2luZyBmb3IgaXQuIFRoaXMgaXMgYSBwcmltZSB0YXJnZXQgZm9yIHVuY292ZXJpbmcgc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrczoKCjEuICBgV29ydGhGdXp6aW5nYDogRGVmaW5pdGVseSBhIHJlc291bmRpbmcgJiMzNDt5ZXMmIzM0Oy4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLCBzbyB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBidWdzIGhlcmUgaXMgaHVnZS4KCjIuICBgRW5hYmxlQ29uZmlnc2A6IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBMb29rcyBsaWtlIGBMUlVfR0VOYCBpcyBlc3NlbnRpYWwsIGEgYm9vbCBkZXBlbmRlbnQgb24gYE1NVWAsIGA2NEJJVGAsIGAhU1BBUlNFTUVNYCBvciBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBBbmQgb2YgY291cnNlLCBgTFJVX0dFTl9FTkFCTEVEYCwgd2hpY2ggZGVwZW5kcyBvbiBgTFJVX0dFTmAuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZXNlIHR3byBhcmUgc3VmZmljaWVudCBvciBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIHN1Y2ggYXMgYExSVV9HRU5fU1RBVFNgIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIHNob3VsZCBhbHNvIGRvIGEgcXVpY2sgZ3JlcCBzZWFyY2ggZm9yIGFueXRoaW5nIGVsc2UgcmVsYXRlZCB0byBgbHJ1X2dlbmAgb3IgYHZtc2Nhbi5jYCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLiBJJiMzOTtsbCBzZWFyY2ggdGhlIHJlcG8gZm9yIGBDT05GSUdfTFJVX0dFTmAgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0xSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZm9saW8uYz0zMjI9c3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTM1MS1cbm1tL2ZvbGlvLmM6MzUyOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vZm9saW8uYy0zNTMtXG4tLVxubW0vZm9saW8uYz0zNzg9c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy0zOTUtXG5tbS9mb2xpby5jOjM5NjojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbm1tL2ZvbGlvLmMtMzk3LVxuLS1cbm1tL2ZvbGlvLmM9NDAyPXN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtNDA2LVxubW0vZm9saW8uYzo0MDc6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS9mb2xpby5jLTQwOC1cbi0tXG5tbS9tZW1jb250cm9sLmM9NDYyNz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NjQzLVxubW0vbWVtY29udHJvbC5jOjQ2NDQ6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS9tZW1jb250cm9sLmMtNDY0NS1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9nZW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldClcbi0tXG5tbS9tZW1jb250cm9sLmM9NDY2Mz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9nZW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkge31cbm1tL21lbWNvbnRyb2wuYzo0NjY0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vbWVtY29udHJvbC5jLTQ2NjUtXG4tLVxubW0vbWVtb3J5LmM9NjcyOD1zdGF0aWMgaW5saW5lIHZvaWQgbW1fYWNjb3VudF9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4tLVxubW0vbWVtb3J5LmMtNjc4MC1cbm1tL21lbW9yeS5jOjY3ODE6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS9tZW1vcnkuYy02NzgyLXN0YXRpYyB2b2lkIGxydV9nZW5fZW50ZXJfZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vbWVtb3J5LmM9Njc5Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX2V4aXRfZmF1bHQodm9pZClcbi0tXG5tbS9tZW1vcnkuYy02Nzk5LX1cbm1tL21lbW9yeS5jOjY4MDA6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS9tZW1vcnkuYy02ODAxLVxuLS1cbm1tL3Ztc2Nhbi5jPTgyNz1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuLS1cbm1tL3Ztc2Nhbi5jLTgzMi1cbm1tL3Ztc2Nhbi5jOjgzMzojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTgzNC0vKlxuLS1cbm1tL3Ztc2Nhbi5jPTg2Mj1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4tLVxubW0vdm1zY2FuLmMtODY1LX1cbm1tL3Ztc2Nhbi5jOjg2NjojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTg2Ny1cbi0tXG5tbS92bXNjYW4uYz0yNjgwPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtMjY5MS1cbm1tL3Ztc2Nhbi5jOjI2OTI6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy0yNjkzLVxubW0vdm1zY2FuLmM9MjY5ND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jOjI2OTU6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jLTI2OTYtREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG4tLVxubW0vdm1zY2FuLmM9Mjg4MD1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcbi0tXG5tbS92bXNjYW4uYy0yODk5LVxubW0vdm1zY2FuLmM6MjkwMDojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXG5tbS92bXNjYW4uYy0yOTAxLVxuLS1cbm1tL3Ztc2Nhbi5jPTMwMDk9dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMzAzNy1cbm1tL3Ztc2Nhbi5jOjMwMzg6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xubW0vdm1zY2FuLmMtMzAzOS1cbi0tXG5tbS92bXNjYW4uYz02MDk1PWxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcbm1tL3Ztc2Nhbi5jLTYwOTYtXG5tbS92bXNjYW4uYzo2MDk3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtNjA5OC1cbi0tXG5tbS92bXNjYW4uYz02MTA5PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjExMy1cbm1tL3Ztc2Nhbi5jOjYxMTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy02MTE1LVxuLS1cbm1tL3dvcmtpbmdzZXQuYz0yMTM9c3RhdGljIHZvaWQgdW5wYWNrX3NoYWRvdyh2b2lkICpzaGFkb3csIGludCAqbWVtY2dpZHAsIHBnX2RhdGFfdCAqKnBnZGF0LFxuLS1cbm1tL3dvcmtpbmdzZXQuYy0yMzItXG5tbS93b3JraW5nc2V0LmM6MjMzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vd29ya2luZ3NldC5jLTIzNC1cbi0tXG5tbS93b3JraW5nc2V0LmM9MjkyPXN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4tLVxubW0vd29ya2luZ3NldC5jLTMzNi1cbm1tL3dvcmtpbmdzZXQuYzozMzc6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG5tbS93b3JraW5nc2V0LmMtMzM4LVxuLS1cbm1tL3dvcmtpbmdzZXQuYz0zNTA9c3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbi0tXG5tbS93b3JraW5nc2V0LmMtMzUzLVxubW0vd29ya2luZ3NldC5jOjM1NDojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3dvcmtpbmdzZXQuYy0zNTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDA5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIExSVSBHZW5lcmF0aW9uIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgTFJVIGdlbmVyYXRpb24gZnV6emluZyBzZXR1cC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IHN5bWJvbHMgdG8gZm9jdXMgb24sIGtlZXBpbmcgaW4gbWluZCB0aGUgZ3VpZGFuY2U6ICYjMzQ7MS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4gQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4mIzM0OyBTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgbWFrZSBzdXJlIGBDT05GSUdfTFJVX0dFTmAgYW5kIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBhcmUgc2V0IGFwcHJvcHJpYXRlbHkuCgpOb3csIGxldCYjMzk7cyBleGFtaW5lIGBGb2N1c1N5bWJvbHNgIHRvIHNlZSB3aGF0JiMzOTtzIGFscmVhZHkgdGhlcmUgYW5kIGlmIEkgbmVlZCB0byBhZGQgYW55dGhpbmcuIE15IGF0dGVudGlvbiBpcyBkcmF3biB0byB0aGUgYG1tL3Ztc2Nhbi5jYCBmaWxlIHNpbmNlIGl0IHNlZW1zIHJlbGV2YW50IHRvIHRoaXMgYXJlYSBvZiBtZW1vcnkgbWFuYWdlbWVudC4gSSBzZWUgYSBidW5jaCBvZiBmdW5jdGlvbnMgaW4gdGhlcmUgdGhhdCBkZWFsIHdpdGggaXNvbGF0aW9uIGFuZCBMUlUgZ2VuZXJhdGlvbiBidXQgaXQgaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHdoYXQga2luZCBvZiBmdW5jdGlvbnMgYXJlIHByZWZlcnJlZCB0byBiZSB0YXJnZXRlZC4gSSBzZWUgYGV2aWN0X2ZvbGlvc2AsIGBpc29sYXRlX2ZvbGlvc2AsIGBscnVfZ2VuX3Rvb19tYW55X2lzb2xhdGVkYCwgYHRocm90dGxlX2V2aWN0YWJsZV90eXBlc2AsIGFuZCBgbHJ1dmVjX3R5cGVfZXZpY3RhYmxlX3NpemVgLCBidXQgYWxsIG9mIHRoZXNlIGFyZSBzdGF0aWMsIHNvIHRoZXkmIzM5O3JlIGxpa2VseSBoZWxwZXIgZnVuY3Rpb25zLiBgbHJ1X2dlbl9zZXFfd3JpdGVgIGlzIGEgZmlsZSBvcGVyYXRpb25zIGhhbmRsZXIsIHdoaWNoIG1pZ2h0IGJlIGludGVyZXN0aW5nIGlmIGl0IGV4cG9zZXMgc29tZXRoaW5nIHVzZWZ1bC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRoZSBzdHJhdGVneSBoZXJlIGlzIGNsZWFyOiBwaW5wb2ludCB0aGUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzIG9yIEFQSSBlbnRyeSBwb2ludHMuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGNhcmVmdWxseSBhbmFseXplICphbGwqIGZ1bmN0aW9ucyBpbiBgbW0vdm1zY2FuLmNgIHRoYXQgcmVsYXRlIHRvIExSVV9HRU4gb3IgaXNvbGF0aW9uIHRvIGlkZW50aWZ5IGFueSB2aWFibGUgY2FuZGlkYXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHJ1X2dlbl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzM0IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5tbS92bXNjYW4uYz04Mjc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcbi0tXG5tbS92bXNjYW4uYy04MzktICovXG5tbS92bXNjYW4uYzo4NDA6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxubW0vdm1zY2FuLmMtODQxLXtcbi0tXG5tbS92bXNjYW4uYy04NjEtI2Vsc2Vcbm1tL3Ztc2Nhbi5jOjg2MjpzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG5tbS92bXNjYW4uYy04NjMte1xuLS1cbm1tL3Ztc2Nhbi5jPTg2OD1zdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS92bXNjYW4uYy04OTItXG5tbS92bXNjYW4uYzo4OTM6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKSB7XG5tbS92bXNjYW4uYy04OTQtXHRcdGlmICghcmVmZXJlbmNlZF9wdGVzKVxuLS1cbm1tL3Ztc2Nhbi5jLTg5Ni1cbm1tL3Ztc2Nhbi5jOjg5NzpcdFx0cmV0dXJuIGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFx1MDAyNnZtYV9mbGFncykgPyBGT0xJT1JFRl9BQ1RJVkFURSA6IEZPTElPUkVGX0tFRVA7XG5tbS92bXNjYW4uYy04OTgtXHR9XG4tLVxubW0vdm1zY2FuLmM9MjI4MD1zdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy0yMjg2LVxubW0vdm1zY2FuLmM6MjI4NzpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXG5tbS92bXNjYW4uYy0yMjg4LVx0XHRyZXR1cm47XG4tLVxubW0vdm1zY2FuLmM9MjY5ND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jLTI2OTUtI2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jOjI2OTY6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG5tbS92bXNjYW4uYzoyNjk3OiNkZWZpbmUgZ2V0X2NhcChjYXApXHRzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcbm1tL3Ztc2Nhbi5jLTI2OTgtI2Vsc2Vcbm1tL3Ztc2Nhbi5jOjI2OTk6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfRkFMU0UobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xubW0vdm1zY2FuLmM6MjcwMDojZGVmaW5lIGdldF9jYXAoY2FwKVx0c3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcbm1tL3Ztc2Nhbi5jLTI3MDEtI2VuZGlmXG4tLVxubW0vdm1zY2FuLmM9Mjc4OD1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4MTctICogd2Fsa19wbWRfcmFuZ2UoKTsgdGhlIGV2aWN0aW9uIGFsc28gcmVwb3J0IHRoZW0gd2hlbiB3YWxraW5nIHRoZSBybWFwXG5tbS92bXNjYW4uYzoyODE4OiAqIGluIGxydV9nZW5fbG9va19hcm91bmQoKS5cbm1tL3Ztc2Nhbi5jLTI4MTktICpcbi0tXG5tbS92bXNjYW4uYz0yODM1PXN0YXRpYyB2b2lkIGdldF9pdGVtX2tleSh2b2lkICppdGVtLCBpbnQgKmtleSlcbi0tXG5tbS92bXNjYW4uYy0yODQ0LVxubW0vdm1zY2FuLmM6Mjg0NTpzdGF0aWMgYm9vbCB0ZXN0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxLFxubW0vdm1zY2FuLmMtMjg0Ni1cdFx0XHQgICAgICB2b2lkICppdGVtKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4NjAtXG5tbS92bXNjYW4uYzoyODYxOnN0YXRpYyB2b2lkIHVwZGF0ZV9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSxcbm1tL3Ztc2Nhbi5jLTI4NjItXHRcdFx0XHR2b2lkICppdGVtKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4NzktXG5tbS92bXNjYW4uYzoyODgwOnN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxubW0vdm1zY2FuLmMtMjg4MS17XG4tLVxubW0vdm1zY2FuLmMtMjkwMS1cbm1tL3Ztc2Nhbi5jOjI5MDI6c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3Ztc2Nhbi5jLTI5MDMte1xubW0vdm1zY2FuLmM6MjkwNDpcdHN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0IG1tX2xpc3QgPSB7XG5tbS92bXNjYW4uYy0yOTA1LVx0XHQuZmlmbyA9IExJU1RfSEVBRF9JTklUKG1tX2xpc3QuZmlmbyksXG4tLVxubW0vdm1zY2FuLmMtMjkxNy1cbm1tL3Ztc2Nhbi5jOjI5MTg6c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICpnZXRfbW1fc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxubW0vdm1zY2FuLmMtMjkxOS17XG4tLVxubW0vdm1zY2FuLmMtMjkyMi1cbm1tL3Ztc2Nhbi5jOjI5MjM6c3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKmdldF9uZXh0X21tKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG5tbS92bXNjYW4uYy0yOTI0LXtcbi0tXG5tbS92bXNjYW4uYy0yOTI3LVx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVx1MDAzZWxydXZlYyk7XG5tbS92bXNjYW4uYzoyOTI4Olx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKHdhbGstXHUwMDNlbHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTI5MjktXG4tLVxubW0vdm1zY2FuLmMtMjk0MS1cbm1tL3Ztc2Nhbi5jOjI5NDI6dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL3Ztc2Nhbi5jLTI5NDMte1xuLS1cbm1tL3Ztc2Nhbi5jLTI5NDUtXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcbm1tL3Ztc2Nhbi5jOjI5NDY6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xubW0vdm1zY2FuLmMtMjk0Ny1cbi0tXG5tbS92bXNjYW4uYy0yOTU2LVx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xubW0vdm1zY2FuLmM6Mjk1NzpcdFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG5tbS92bXNjYW4uYy0yOTU4LVxuLS1cbm1tL3Ztc2Nhbi5jLTI5NjgtXG5tbS92bXNjYW4uYzoyOTY5OnZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS92bXNjYW4uYy0yOTcwLXtcbm1tL3Ztc2Nhbi5jLTI5NzEtXHRpbnQgbmlkO1xubW0vdm1zY2FuLmM6Mjk3MjpcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3Q7XG5tbS92bXNjYW4uYy0yOTczLVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcbi0tXG5tbS92bXNjYW4uYy0yOTg2LVx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xubW0vdm1zY2FuLmM6Mjk4NzpcdFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG5tbS92bXNjYW4uYy0yOTg4LVxuLS1cbm1tL3Ztc2Nhbi5jLTMwMDgtI2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmM6MzAwOTp2b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL3Ztc2Nhbi5jLTMwMTAte1xuLS1cbm1tL3Ztc2Nhbi5jLTMwMzItXG5tbS92bXNjYW4uYzozMDMzOlx0bHJ1X2dlbl9kZWxfbW0obW0pO1xubW0vdm1zY2FuLmM6MzAzNDpcdGxydV9nZW5fYWRkX21tKG1tKTtcbm1tL3Ztc2Nhbi5jLTMwMzUtfVxuLS1cbm1tL3Ztc2Nhbi5jLTMwMzktXG5tbS92bXNjYW4uYzozMDQwOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy0zMDQxLXtcbi0tXG5tbS92bXNjYW4uYy0zMDQ0LVxubW0vdm1zY2FuLmM6MzA0NTpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKmdldF9tbV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy0zMDQ2LXtcbi0tXG5tbS92bXNjYW4uYy0zMDQ5LVxubW0vdm1zY2FuLmM6MzA1MDpzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbm1tL3Ztc2Nhbi5jLTMwNTEte1xuLS1cbm1tL3Ztc2Nhbi5jLTMwNTYtXG5tbS92bXNjYW4uYzozMDU3OnN0YXRpYyB2b2lkIHJlc2V0X21tX3N0YXRzKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIGJvb2wgbGFzdClcbm1tL3Ztc2Nhbi5jLTMwNTgte1xuLS1cbm1tL3Ztc2Nhbi5jLTMwNjEtXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSB3YWxrLVx1MDAzZWxydXZlYztcbm1tL3Ztc2Nhbi5jOjMwNjI6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTMwNjMtXG4tLVxubW0vdm1zY2FuLmMtMzA4MS1cbm1tL3Ztc2Nhbi5jOjMwODI6c3RhdGljIGJvb2wgaXRlcmF0ZV9tbV9saXN0KHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBtbV9zdHJ1Y3QgKippdGVyKVxubW0vdm1zY2FuLmMtMzA4My17XG4tLVxubW0vdm1zY2FuLmMtMzA4OC1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xubW0vdm1zY2FuLmM6MzA4OTpcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XG5tbS92bXNjYW4uYzozMDkwOlx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG5tbS92bXNjYW4uYy0zMDkxLVxuLS1cbm1tL3Ztc2Nhbi5jPTMxNDY9c3RhdGljIGJvb2wgaXRlcmF0ZV9tbV9saXN0X25vd2FsayhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxKVxuLS1cbm1tL3Ztc2Nhbi5jLTMxNDktXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jOjMxNTA6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xubW0vdm1zY2FuLmM6MzE1MTpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtMzE1Mi1cbi0tXG5tbS92bXNjYW4uYz0zMTk4PXN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxuLS1cbm1tL3Ztc2Nhbi5jLTMyMDEtXHRpbnQgaTtcbm1tL3Ztc2Nhbi5jOjMyMDI6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTMyMDMtXHRpbnQgaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbi0tXG5tbS92bXNjYW4uYz0zMjE3PXN0YXRpYyB2b2lkIHJlc2V0X2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGJvb2wgY2FycnlvdmVyKVxuLS1cbm1tL3Ztc2Nhbi5jLTMyMTktXHRpbnQgaGlzdCwgdGllcjtcbm1tL3Ztc2Nhbi5jOjMyMjA6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTMyMjEtXHRib29sIGNsZWFyID0gY2FycnlvdmVyID8gTlJfSElTVF9HRU5TID09IDEgOiBOUl9ISVNUX0dFTlMgXHUwMDNlIDE7XG4tLVxubW0vdm1zY2FuLmM9MzI2OT1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbi0tXG5tbS92bXNjYW4uYy0zMjg2LVx0ZG8ge1xubW0vdm1zY2FuLmM6MzI4NzpcdFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xubW0vdm1zY2FuLmMtMzI4OC1cdFx0aWYgKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spKVxuLS1cbm1tL3Ztc2Nhbi5jPTMyOTk9c3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS92bXNjYW4uYy0zMzAxLVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG5tbS92bXNjYW4uYzozMzAyOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYzozMzAzOlx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbm1tL3Ztc2Nhbi5jLTMzMDQtXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLS1cbm1tL3Ztc2Nhbi5jLTMzMTktXG5tbS92bXNjYW4uYzozMzIwOlx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbm1tL3Ztc2Nhbi5jLTMzMjEtXG4tLVxubW0vdm1zY2FuLmMtMzMyNC1cbm1tL3Ztc2Nhbi5jOjMzMjU6c3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3Ztc2Nhbi5jLTMzMjYtXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxuLS1cbm1tL3Ztc2Nhbi5jLTMzNDAtXG5tbS92bXNjYW4uYzozMzQxOnN0YXRpYyB2b2lkIHJlc2V0X2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbm1tL3Ztc2Nhbi5jLTMzNDIte1xuLS1cbm1tL3Ztc2Nhbi5jLTMzNDQtXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBscnV2ZWNfbGl2ZV9sb2NrX2lycSh3YWxrLVx1MDAzZWxydXZlYyk7XG5tbS92bXNjYW4uYzozMzQ1Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy0zMzQ2LVxuLS1cbm1tL3Ztc2Nhbi5jLTMzNTktXG5tbS92bXNjYW4uYzozMzYwOlx0XHRpZiAobHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pKVxubW0vdm1zY2FuLmMtMzM2MS1cdFx0XHRscnUgJiM0Mzs9IExSVV9BQ1RJVkU7XG4tLVxubW0vdm1zY2FuLmM9MzM2OD1zdGF0aWMgaW50IHNob3VsZF9za2lwX3ZtYSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKmFyZ3MpXG4tLVxubW0vdm1zY2FuLmMtMzM3MS1cdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gYXJncy1cdTAwM2V2bWE7XG5tbS92bXNjYW4uYzozMzcyOlx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbm1tL3Ztc2Nhbi5jLTMzNzMtXG4tLVxubW0vdm1zY2FuLmM9MzUwNj1zdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuLS1cbm1tL3Ztc2Nhbi5jLTM1MTMtXG5tbS92bXNjYW4uYzozNTE0OnN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vdm1zY2FuLmMtMzUxNS1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4tLVxubW0vdm1zY2FuLmMtMzUzMC1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG5tbS92bXNjYW4uYzozNTMxOlx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG5tbS92bXNjYW4uYy0zNTMyLVx0XHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XG4tLVxubW0vdm1zY2FuLmM9MzUzOD1zdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bXNjYW4uYy0zNTQ4LVx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcbm1tL3Ztc2Nhbi5jOjM1NDk6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xubW0vdm1zY2FuLmMtMzU1MC1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmMtMzU1Mi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jOjM1NTM6XHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbm1tL3Ztc2Nhbi5jLTM1NTQtXHR1bnNpZ25lZCBpbnQgbnI7XG4tLVxubW0vdm1zY2FuLmM9MzYyOT1zdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS92bXNjYW4uYy0zNjM2LVx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcbm1tL3Ztc2Nhbi5jOjM2Mzc6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xubW0vdm1zY2FuLmMtMzYzOC1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmMtMzY0MC1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jOjM2NDE6XHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbm1tL3Ztc2Nhbi5jLTM2NDItXG4tLVxubW0vdm1zY2FuLmM9MzcxNz1zdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bXNjYW4uYy0zNzI2LVx0dW5zaWduZWQgbG9uZyBmaXJzdCA9IC0xO1xubW0vdm1zY2FuLmM6MzcyNzpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG5tbS92bXNjYW4uYzozNzI4Olx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKHdhbGstXHUwMDNlbHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTM3MjktXG4tLVxubW0vdm1zY2FuLmM9Mzc5MD1zdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3Ztc2Nhbi5jLTM3OTYtXHR1bnNpZ25lZCBsb25nIG5leHQ7XG5tbS92bXNjYW4uYzozNzk3Olx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbm1tL3Ztc2Nhbi5jLTM3OTgtXG4tLVxubW0vdm1zY2FuLmMtMzgzMS1cbm1tL3Ztc2Nhbi5jOjM4MzI6c3RhdGljIHZvaWQgd2Fsa19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbm1tL3Ztc2Nhbi5jLTM4MzMte1xuLS1cbm1tL3Ztc2Nhbi5jLTM4NjYtXG5tbS92bXNjYW4uYzozODY3OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICpzZXRfbW1fd2FsayhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZvcmNlX2FsbG9jKVxubW0vdm1zY2FuLmMtMzg2OC17XG5tbS92bXNjYW4uYzozODY5Olx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGN1cnJlbnQtXHUwMDNlcmVjbGFpbV9zdGF0ZS1cdTAwM2VtbV93YWxrO1xubW0vdm1zY2FuLmMtMzg3MC1cbi0tXG5tbS92bXNjYW4uYz0zODg3PXN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcbm1tL3Ztc2Nhbi5jLTM4ODgte1xubW0vdm1zY2FuLmM6Mzg4OTpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBjdXJyZW50LVx1MDAzZXJlY2xhaW1fc3RhdGUtXHUwMDNlbW1fd2Fsaztcbm1tL3Ztc2Nhbi5jLTM4OTAtXG4tLVxubW0vdm1zY2FuLmM9MzkwMD1zdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy0zOTAzLVx0aW50IHJlbWFpbmluZyA9IE1BWF9MUlVfQkFUQ0g7XG5tbS92bXNjYW4uYzozOTA0Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy0zOTA1LVx0aW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG5tbS92bXNjYW4uYzozOTA2Olx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbm1tL3Ztc2Nhbi5jLTM5MDctXG4tLVxubW0vdm1zY2FuLmM9Mzk1Mz1zdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy0zOTU2LVx0Ym9vbCBzZXFfaW5jX2ZsYWcgPSBmYWxzZTtcbm1tL3Ztc2Nhbi5jOjM5NTc6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTM5NTgtXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuLS1cbm1tL3Ztc2Nhbi5jLTM5NjQtXHRcdHdoaWxlIChtaW5fc2VxW3R5cGVdICYjNDM7IE1JTl9OUl9HRU5TIFx1MDAzYz0gbHJ1Z2VuLVx1MDAzZW1heF9zZXEpIHtcbm1tL3Ztc2Nhbi5jOjM5NjU6XHRcdFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtaW5fc2VxW3R5cGVdKTtcbm1tL3Ztc2Nhbi5jLTM5NjYtXG4tLVxubW0vdm1zY2FuLmMtMzk4NS1cbm1tL3Ztc2Nhbi5jOjM5ODY6XHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gbHJ1X2dlbl9mb2xpbyAqL1xubW0vdm1zY2FuLmMtMzk4Ny1cdGlmIChzd2FwcGluZXNzIFx1MDAyNlx1MDAyNiBzd2FwcGluZXNzIFx1MDAzYz0gTUFYX1NXQVBQSU5FU1MpIHtcbi0tXG5tbS92bXNjYW4uYz00MDA1PXN0YXRpYyBib29sIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTQwMDktXHRpbnQgdHlwZSwgem9uZTtcbm1tL3Ztc2Nhbi5jOjQwMTA6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTQwMTEtcmVzdGFydDpcbi0tXG5tbS92bXNjYW4uYy00MDQwLVx0ICovXG5tbS92bXNjYW4uYzo0MDQxOlx0cHJldiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1heF9zZXEgLSAxKTtcbm1tL3Ztc2Nhbi5jOjQwNDI6XHRuZXh0ID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWF4X3NlcSAmIzQzOyAxKTtcbm1tL3Ztc2Nhbi5jLTQwNDMtXG4tLVxubW0vdm1zY2FuLmM9NDA3MD1zdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcbi0tXG5tbS92bXNjYW4uYy00MDczLVx0Ym9vbCBzdWNjZXNzO1xubW0vdm1zY2FuLmM6NDA3NDpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG5tbS92bXNjYW4uYy00MDc1LVx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMO1xubW0vdm1zY2FuLmM6NDA3NjpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmM6NDA3NzpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtNDA3OC1cbi0tXG5tbS92bXNjYW4uYy00MDg5LVx0ICogSWYgdGhlIGhhcmR3YXJlIGRvZXNuJiMzOTt0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXG5tbS92bXNjYW4uYzo0MDkwOlx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcbm1tL3Ztc2Nhbi5jLTQwOTEtXHQgKiBoYW5kZnVsIG9mIFBURXMuIFNwcmVhZGluZyB0aGUgd29yayBvdXQgb3ZlciBhIHBlcmlvZCBvZiB0aW1lIHVzdWFsbHlcbi0tXG5tbS92bXNjYW4uYz00MTU0PXN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY190eXBlX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXG4tLVxubW0vdm1zY2FuLmMtNDE1Ny1cdHVuc2lnbmVkIGxvbmcgc2VxLCB0b3RhbCA9IDA7XG5tbS92bXNjYW4uYzo0MTU4Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy00MTU5LVx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcbi0tXG5tbS92bXNjYW4uYy00MTYyLVx0Zm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXEmIzQzOyYjNDM7KSB7XG5tbS92bXNjYW4uYzo0MTYzOlx0XHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG5tbS92bXNjYW4uYy00MTY0LVx0XHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KVxuLS1cbm1tL3Ztc2Nhbi5jPTQxOTQ9c3RhdGljIGJvb2wgbHJ1dmVjX2lzX3JlY2xhaW1hYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNDIwOC1cbm1tL3Ztc2Nhbi5jOjQyMDk6XHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpKTtcbm1tL3Ztc2Nhbi5jLTQyMTAtXHRiaXJ0aCA9IFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLnRpbWVzdGFtcHNbZ2VuXSk7XG4tLVxubW0vdm1zY2FuLmMtNDIxNS0vKiB0byBwcm90ZWN0IHRoZSB3b3JraW5nIHNldCBvZiB0aGUgbGFzdCBOIGppZmZpZXMgKi9cbm1tL3Ztc2Nhbi5jOjQyMTY6c3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1X2dlbl9taW5fdHRsIF9fcmVhZF9tb3N0bHk7XG5tbS92bXNjYW4uYy00MjE3LVxubW0vdm1zY2FuLmM6NDIxODpzdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNDIxOS17XG5tbS92bXNjYW4uYy00MjIwLVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xubW0vdm1zY2FuLmM6NDIyMTpcdHVuc2lnbmVkIGxvbmcgbWluX3R0bCA9IFJFQURfT05DRShscnVfZ2VuX21pbl90dGwpO1xubW0vdm1zY2FuLmMtNDIyMi1cdGJvb2wgcmVjbGFpbWFibGUgPSAhbWluX3R0bDtcbi0tXG5tbS92bXNjYW4uYy00MjY0LSAqL1xubW0vdm1zY2FuLmM6NDI2NTpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG5tbS92bXNjYW4uYy00MjY2LXtcbi0tXG5tbS92bXNjYW4uYy00MjcwLVx0dW5zaWduZWQgbG9uZyBlbmQ7XG5tbS92bXNjYW4uYzo0MjcxOlx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaztcbm1tL3Ztc2Nhbi5jLTQyNzItXHRzdHJ1Y3QgZm9saW8gKmxhc3QgPSBOVUxMO1xuLS1cbm1tL3Ztc2Nhbi5jLTQyODAtXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG5tbS92bXNjYW4uYzo0MjgxOlx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xubW0vdm1zY2FuLmMtNDI4Mi1cdHVuc2lnbmVkIGxvbmcgbWF4X3NlcTtcbi0tXG5tbS92bXNjYW4uYy00MzIwLVx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG5tbS92bXNjYW4uYzo0MzIxOlx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbm1tL3Ztc2Nhbi5jLTQzMjItXHRtbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xuLS1cbm1tL3Ztc2Nhbi5jPTQzODM9ZW51bSB7XG4tLVxubW0vdm1zY2FuLmMtNDM5MC1cbm1tL3Ztc2Nhbi5jOjQzOTE6c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG5tbS92bXNjYW4uYy00MzkyLXtcbi0tXG5tbS92bXNjYW4uYy00NDM4LVxubW0vdm1zY2FuLmM6NDQzOTp2b2lkIGxydV9nZW5fb25saW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3Ztc2Nhbi5jLTQ0NDAte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ0NjMtXG5tbS92bXNjYW4uYzo0NDY0OnZvaWQgbHJ1X2dlbl9vZmZsaW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3Ztc2Nhbi5jLTQ0NjUte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ0NzAtXG5tbS92bXNjYW4uYzo0NDcxOlx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9PTEQpO1xubW0vdm1zY2FuLmMtNDQ3Mi1cdH1cbi0tXG5tbS92bXNjYW4uYy00NDc0LVxubW0vdm1zY2FuLmM6NDQ3NTp2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NDc2LXtcbi0tXG5tbS92bXNjYW4uYy00NTAwLVxubW0vdm1zY2FuLmM6NDUwMTp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ1MDIte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ1MDYtXHRpZiAoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4uc2VnKSAhPSBNRU1DR19MUlVfSEVBRClcbm1tL3Ztc2Nhbi5jOjQ1MDc6XHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX0hFQUQpO1xubW0vdm1zY2FuLmMtNDUwOC19XG5tbS92bXNjYW4uYy00NTA5LVxubW0vdm1zY2FuLmM6NDUxMDpib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDUxMS17XG4tLVxubW0vdm1zY2FuLmM9NDUyMz1zdGF0aWMgdm9pZCB0cnlfdG9faW5jX21heF9zZXFfbm93YWxrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy00NTI1LXtcbm1tL3Ztc2Nhbi5jOjQ1MjY6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xubW0vdm1zY2FuLmM6NDUyNzpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtNDUyOC1cdGludCBzd2FwcGluZXNzID0gbWVtX2Nncm91cF9zd2FwcGluZXNzKG1lbWNnKTtcbi0tXG5tbS92bXNjYW4uYy00NTU2LSAqL1xubW0vdm1zY2FuLmM6NDU1Nzp2b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ1NTgte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ1ODMtICogICAgZ2VuZXJhdGlvbnMgb24gYW4gTFJVIGxpc3QuXG5tbS92bXNjYW4uYzo0NTg0OiAqIDQuIEluIGxydV9nZW5fZGVsX2ZvbGlvKCksIHRoZSBnZW5lcmF0aW9uIHRvIHdoaWNoIHRoZSBmb2xpbyBiZWxvbmdzIGlzXG5tbS92bXNjYW4uYy00NTg1LSAqICAgIGZvdW5kIGJhc2VkIG9uIHRoZSBnZW5lcmF0aW9uIGluZm9ybWF0aW9uIGluIGZvbGlvLVx1MDAzZWZsYWdzLCBhbmQgdGhlXG4tLVxubW0vdm1zY2FuLmMtNDU4Ny0gKiAgICB0aGUgbHJ1IHNpemUgY29ycmVjdGx5IGR1cmluZyByZXBhcmVudGluZywgb3RoZXJ3aXNlIHRoZSBscnUgc2l6ZSBtYXlcbm1tL3Ztc2Nhbi5jOjQ1ODg6ICogICAgYmUgdXBkYXRlZCBpbmNvcnJlY3RseSBpbiBscnVfZ2VuX2RlbF9mb2xpbygpLlxubW0vdm1zY2FuLmMtNDU4OS0gKlxuLS1cbm1tL3Ztc2Nhbi5jLTQ1OTctICovXG5tbS92bXNjYW4uYzo0NTk4OnN0YXRpYyB2b2lkIF9fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsIHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMsXG5tbS92bXNjYW4uYy00NTk5LVx0XHRcdFx0ICAgICBpbnQgem9uZSwgaW50IHR5cGUpXG5tbS92bXNjYW4uYy00NjAwLXtcbm1tL3Ztc2Nhbi5jOjQ2MDE6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqY2hpbGRfbHJ1Z2VuLCAqcGFyZW50X2xydWdlbjtcbm1tL3Ztc2Nhbi5jLTQ2MDItXHRlbnVtIGxydV9saXN0IGxydSA9IHR5cGUgKiBMUlVfSU5BQ1RJVkVfRklMRTtcbi0tXG5tbS92bXNjYW4uYy00NjA4LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZ2V0X25yX2dlbnMoY2hpbGRfbHJ1dmVjLCB0eXBlKTsgaSYjNDM7JiM0MzspIHtcbm1tL3Ztc2Nhbi5jOjQ2MDk6XHRcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGNoaWxkX2xydWdlbi1cdTAwM2VtYXhfc2VxIC0gaSk7XG5tbS92bXNjYW4uYy00NjEwLVx0XHRsb25nIG5yX3BhZ2VzID0gY2hpbGRfbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV07XG5tbS92bXNjYW4uYzo0NjExOlx0XHRpbnQgY2hpbGRfbHJ1X2FjdGl2ZSA9IGxydV9nZW5faXNfYWN0aXZlKGNoaWxkX2xydXZlYywgZ2VuKSA/IExSVV9BQ1RJVkUgOiAwO1xubW0vdm1zY2FuLmM6NDYxMjpcdFx0aW50IHBhcmVudF9scnVfYWN0aXZlID0gbHJ1X2dlbl9pc19hY3RpdmUocGFyZW50X2xydXZlYywgZ2VuKSA/IExSVV9BQ1RJVkUgOiAwO1xubW0vdm1zY2FuLmMtNDYxMy1cbi0tXG5tbS92bXNjYW4uYy00NjIxLVxubW0vdm1zY2FuLmM6NDYyMjpcdFx0aWYgKGxydV9nZW5faXNfYWN0aXZlKGNoaWxkX2xydXZlYywgZ2VuKSAhPSBscnVfZ2VuX2lzX2FjdGl2ZShwYXJlbnRfbHJ1dmVjLCBnZW4pKSB7XG5tbS92bXNjYW4uYy00NjIzLVx0XHRcdF9fdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1ICYjNDM7IGNoaWxkX2xydV9hY3RpdmUsIHpvbmUsIC1ucl9wYWdlcyk7XG4tLVxubW0vdm1zY2FuLmMtNDYyOC1cbm1tL3Ztc2Nhbi5jOjQ2Mjk6dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ2MzAte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ2NDAtXHRcdGZvciAodHlwZSA9IDA7IHR5cGUgXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUmIzQzOyYjNDM7KVxubW0vdm1zY2FuLmM6NDY0MTpcdFx0XHRfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCB6aWQsIHR5cGUpO1xubW0vdm1zY2FuLmMtNDY0Mi1cbi0tXG5tbS92bXNjYW4uYz00NjYzPXN0YXRpYyBib29sIHNvcnRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy00NjcyLVx0aW50IHRpZXIgPSBscnVfdGllcl9mcm9tX3JlZnMocmVmcywgd29ya2luZ3NldCk7XG5tbS92bXNjYW4uYzo0NjczOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy00Njc0LVxuLS1cbm1tL3Ztc2Nhbi5jLTQ2ODEtXHQvKiBwcm9tb3RlZCAqL1xubW0vdm1zY2FuLmM6NDY4MjpcdGlmIChnZW4gIT0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSkpIHtcbm1tL3Ztc2Nhbi5jLTQ2ODMtXHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxydWdlbi1cdTAwM2Vmb2xpb3NbZ2VuXVt0eXBlXVt6b25lXSk7XG4tLVxubW0vdm1zY2FuLmM9NDcxMj1zdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDcyOS1cbm1tL3Ztc2Nhbi5jOjQ3MzA6XHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XG5tbS92bXNjYW4uYy00NzMxLVx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7XG4tLVxubW0vdm1zY2FuLmM9NDczNj1zdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ3NDctXHR1bnNpZ25lZCBsb25nIHJlbWFpbmluZyA9IG5yX3RvX3NjYW47XG5tbS92bXNjYW4uYzo0NzQ4Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy00NzQ5LVxuLS1cbm1tL3Ztc2Nhbi5jLTQ3NTUtXG5tbS92bXNjYW4uYzo0NzU2Olx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG5tbS92bXNjYW4uYy00NzU3LVxuLS1cbm1tL3Ztc2Nhbi5jPTQ4MzE9c3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmMtNDg2Ni0gKi9cbm1tL3Ztc2Nhbi5jOjQ4Njc6c3RhdGljIGJvb2wgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLFxubW0vdm1zY2FuLmMtNDg2OC1cdFx0XHRcdCAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jPTQ5MDM9c3RhdGljIHVuc2lnbmVkIGludCB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ5MjYtXG5tbS92bXNjYW4uYzo0OTI3Olx0XHRcdGlmICghbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZChscnV2ZWMsIGksIHNjKSlcbm1tL3Ztc2Nhbi5jLTQ5MjgtXHRcdFx0XHRhbGxvd2VkIHw9IEJJVChpKTtcbi0tXG5tbS92bXNjYW4uYz00OTk4PXN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTUwMDYtXHRzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7XG5tbS92bXNjYW4uYzo1MDA3Olx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaztcbm1tL3Ztc2Nhbi5jLTUwMDgtXHRpbnQgc2Nhbm5lZCwgcmVjbGFpbWVkO1xuLS1cbm1tL3Ztc2Nhbi5jLTUwNzgtXHRcdC8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xubW0vdm1zY2FuLmM6NTA3OTpcdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKVxubW0vdm1zY2FuLmMtNTA4MC1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7XG4tLVxubW0vdm1zY2FuLmM9NTI0ND1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MjUxLVxubW0vdm1zY2FuLmM6NTI1MjpcdC8qIGxydV9nZW5fYWdlX25vZGUoKSBjYWxsZWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpICovXG5tbS92bXNjYW4uYy01MjUzLVx0aWYgKG1lbV9jZ3JvdXBfYmVsb3dfbWluKE5VTEwsIG1lbWNnKSlcbi0tXG5tbS92bXNjYW4uYz01Mjg1PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyOTEtXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG5tbS92bXNjYW4uYzo1MjkyOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbjtcbm1tL3Ztc2Nhbi5jLTUyOTMtXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4tLVxubW0vdm1zY2FuLmMtNTMwNS1cdFx0aWYgKG9wKSB7XG5tbS92bXNjYW4uYzo1MzA2Olx0XHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgb3ApO1xubW0vdm1zY2FuLmMtNTMwNy1cdFx0XHRvcCA9IDA7XG4tLVxubW0vdm1zY2FuLmMtNTMxOS1cdFx0aWYgKCFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpIHtcbm1tL3Ztc2Nhbi5jOjUzMjA6XHRcdFx0bHJ1X2dlbl9yZWxlYXNlX21lbWNnKG1lbWNnKTtcbm1tL3Ztc2Nhbi5jLTUzMjEtXHRcdFx0bWVtY2cgPSBOVUxMO1xuLS1cbm1tL3Ztc2Nhbi5jLTUzMzctXHRpZiAob3ApXG5tbS92bXNjYW4uYzo1MzM4Olx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIG9wKTtcbm1tL3Ztc2Nhbi5jLTUzMzktXG4tLVxubW0vdm1zY2FuLmMtNTM0NC1cbm1tL3Ztc2Nhbi5jOjUzNDU6XHQvKiByZXN0YXJ0IGlmIHJhY2VkIHdpdGggbHJ1X2dlbl9yb3RhdGVfbWVtY2coKSAqL1xubW0vdm1zY2FuLmMtNTM0Ni1cdGlmIChnZW4gIT0gZ2V0X251bGxzX3ZhbHVlKHBvcykpXG4tLVxubW0vdm1zY2FuLmMtNTM1NC1cbm1tL3Ztc2Nhbi5jOjUzNTU6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MzU2LXtcbi0tXG5tbS92bXNjYW4uYy01MzY4LVx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmM6NTM2OTpcdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xubW0vdm1zY2FuLmMtNTM3MC1cbi0tXG5tbS92bXNjYW4uYy01Mzc1LVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDE1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNR0xSVSBFdmljdGlvbiBQb2ludHMgZm9yIEZ1enppbmcgRm9jdXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgcHJpbWUgY2FuZGlkYXRlcyB3aXRoaW4gdGhlIE1HTFJVIGV2aWN0aW9uIHByb2Nlc3MgZm9yIGZvY3VzZWQgZnV6emluZy4gV2UmIzM5O3JlIGxvb2tpbmcgZm9yIGZ1bmN0aW9ucyB0aGF0IGFyZSBsaWtlbHkgZW50cnkgcG9pbnRzLCBhcmVuJiMzOTt0IGlubGluZWQgKHNvIHRoZXkgaGF2ZSBkaXN0aW5jdCBhZGRyZXNzZXMgZm9yIHRoZSBmdXp6ZXIpLCBhbmQgYXJlbiYjMzk7dCBvdmVybHkgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIFdlIHdhbnQgdG8gYXZvaWQgYmlhc2luZyB0aGUgdGVzdCBkaXN0cmlidXRpb24sIHNvIGJyb2FkLCBjb21tb24gZnVuY3Rpb25zIGFyZSBvdXQuCgpJJiMzOTttIHN0YXJ0aW5nIGJ5IGxvb2tpbmcgYXQgYGxydV9nZW5fc2VxX3dyaXRlYCwgc2luY2UgaXQmIzM5O3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBgL3N5cy9rZXJuZWwvbW0vbHJ1X2dlbi9gIHN5c2ZzIGludGVyZmFjZSBvciBkZWJ1Z2ZzLiBJdCBtYWtlcyBzZW5zZSB0byBjaGVjayBib3RoIHRoaXMgYW5kIGBlbmFibGVkX3N0b3JlYC4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgYXQgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgYGxydV9nZW5gIGNvbnRleHQsIHdoaWNoIGluY2x1ZGU6IGBscnVfZ2VuX3Rvb19tYW55X2lzb2xhdGVkYCwgYHRocm90dGxlX2V2aWN0YWJsZV90eXBlc2AsIGBpc29sYXRlX2ZvbGlvc2AsIGBldmljdF9mb2xpb3NgLCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCwgYGxydV9nZW5fc2hyaW5rX25vZGVgLCBhbmQgYGxydV9nZW5fc2VxX3dyaXRlYC4KClRoZSBpbnN0cnVjdGlvbnMgSSYjMzk7bSBmb2xsb3dpbmcgaGlnaGxpZ2h0IHRoZSBpbXBvcnRhbmNlIG9mIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhpcyB0ZWxscyBtZSBJIHNob3VsZCBwcmlvcml0aXplIGZ1bmN0aW9ucyB0aGF0IGFyZSAqbm90KiBzdGF0aWMsIGFzIHRoZSBjb21waWxlciBpcyBsaWtlbHkgdG8gaW5saW5lIHRob3NlIHdoaWNoIGRvbiYjMzk7dCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIGFuZCBhcmUgZXh0ZXJuYWwgdG8gdGhlIE1HTFJVIGNvZGUgYXMgZW50cnkgcG9pbnRzLgoKR2l2ZW4gdGhpcywgSSYjMzk7bSBub3cgY3Jvc3MtcmVmZXJlbmNpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aXRoIHRoZSBmdW5jdGlvbnMgSSBqdXN0IGxpc3RlZCwgc3BlY2lmaWNhbGx5IHRob3NlIGluIGBtbS92bXNjYW4uY2AuIFRoZSBvbmVzIHRoYXQganVtcCBvdXQgYXMgcG90ZW50aWFsIHRhcmdldHMgZm9yIGZ1enppbmcsIGdpdmVuIHRoZXNlIGNvbnN0cmFpbnRzIGFyZTogYGxydV9nZW5fc2VxX3dyaXRlYCwgYGxydV9nZW5fc2hyaW5rX25vZGVgLCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCwgYGV2aWN0X2ZvbGlvc2AsIGBpc29sYXRlX2ZvbGlvc2AsIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXNgLCBhbmQgYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRgLiBJIG5lZWQgdG8gbm93IGRldGVybWluZSBpZiBhbnkgYXJlIG5vbi1zdGF0aWMgYW5kIGZpdCB0aGlzIGNyaXRlcmlvbiwgYW5kIGFsc28gd2hldGhlciBhbnkgZnVuY3Rpb25zIGVsc2V3aGVyZSB0aGF0IHNlcnZlIGFzIGVudHJ5IHBvaW50cyBpbnRvIE1HTFJVIGV2aWN0aW9uIGFyZSB3b3J0aCBleHBsb3JpbmcuIExvb2tpbmcgYXQgc3lzZnMgYW5kIHByb2NmcyBmdW5jdGlvbnMgbGlrZSBgbHJ1X2dlbl9zZXFfd3JpdGVgIGlzIHByb2JhYmx5IGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgbG9jYXRpbmcgdGhvc2UgZW50cnkgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX3NlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01NjM4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxydV9nZW5fYXR0cl9ncm91cCA9IHtcbi0tXG5tbS92bXNjYW4uYy01NjQ2LVxubW0vdm1zY2FuLmM6NTY0NzpzdGF0aWMgdm9pZCAqbHJ1X2dlbl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcylcbm1tL3Ztc2Nhbi5jLTU2NDgte1xuLS1cbm1tL3Ztc2Nhbi5jLTU2NjgtXG5tbS92bXNjYW4uYzo1NjY5OnN0YXRpYyB2b2lkIGxydV9nZW5fc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxubW0vdm1zY2FuLmMtNTY3MC17XG4tLVxubW0vdm1zY2FuLmMtNTY3Ny1cbm1tL3Ztc2Nhbi5jOjU2Nzg6c3RhdGljIHZvaWQgKmxydV9nZW5fc2VxX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcbm1tL3Ztc2Nhbi5jLTU2Nzkte1xuLS1cbm1tL3Ztc2Nhbi5jLTU2OTYtXG5tbS92bXNjYW4uYzo1Njk3OnN0YXRpYyB2b2lkIGxydV9nZW5fc2VxX3Nob3dfZnVsbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL3Ztc2Nhbi5jLTU2OTgtXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSwgdW5zaWduZWQgbG9uZyAqbWluX3NlcSxcbi0tXG5tbS92bXNjYW4uYy01NzUxLS8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cbm1tL3Ztc2Nhbi5jOjU3NTI6c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbm1tL3Ztc2Nhbi5jLTU3NTMte1xuLS1cbm1tL3Ztc2Nhbi5jLTU4MDEtXHRcdGlmIChmdWxsKVxubW0vdm1zY2FuLmM6NTgwMjpcdFx0XHRscnVfZ2VuX3NlcV9zaG93X2Z1bGwobSwgbHJ1dmVjLCBtYXhfc2VxLCBtaW5fc2VxLCBzZXEpO1xubW0vdm1zY2FuLmMtNTgwMy1cdH1cbi0tXG5tbS92bXNjYW4uYy01ODA3LVxubW0vdm1zY2FuLmM6NTgwODpzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGxydV9nZW5fc2VxX29wcyA9IHtcbm1tL3Ztc2Nhbi5jOjU4MDk6XHQuc3RhcnQgPSBscnVfZ2VuX3NlcV9zdGFydCxcbm1tL3Ztc2Nhbi5jOjU4MTA6XHQuc3RvcCA9IGxydV9nZW5fc2VxX3N0b3AsXG5tbS92bXNjYW4uYzo1ODExOlx0Lm5leHQgPSBscnVfZ2VuX3NlcV9uZXh0LFxubW0vdm1zY2FuLmM6NTgxMjpcdC5zaG93ID0gbHJ1X2dlbl9zZXFfc2hvdyxcbm1tL3Ztc2Nhbi5jLTU4MTMtfTtcbi0tXG5tbS92bXNjYW4uYz01ODU2PXN0YXRpYyBpbnQgcnVuX2NtZChjaGFyIGNtZCwgdTY0IG1lbWNnX2lkLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHNlcSxcbi0tXG5tbS92bXNjYW4uYy01ODk3LS8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cbm1tL3Ztc2Nhbi5jOjU4OTg6c3RhdGljIHNzaXplX3QgbHJ1X2dlbl9zZXFfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsXG5tbS92bXNjYW4uYy01ODk5LVx0XHRcdFx0IHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxuLS1cbm1tL3Ztc2Nhbi5jLTU5ODEtXG5tbS92bXNjYW4uYzo1OTgyOnN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbm1tL3Ztc2Nhbi5jLTU5ODMte1xubW0vdm1zY2FuLmM6NTk4NDpcdHJldHVybiBzZXFfb3BlbihmaWxlLCBcdTAwMjZscnVfZ2VuX3NlcV9vcHMpO1xubW0vdm1zY2FuLmMtNTk4NS19XG4tLVxubW0vdm1zY2FuLmM9NTk4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscnVfZ2VuX3J3X2ZvcHMgPSB7XG5tbS92bXNjYW4uYzo1OTg4Olx0Lm9wZW4gPSBscnVfZ2VuX3NlcV9vcGVuLFxubW0vdm1zY2FuLmMtNTk4OS1cdC5yZWFkID0gc2VxX3JlYWQsXG5tbS92bXNjYW4uYzo1OTkwOlx0LndyaXRlID0gbHJ1X2dlbl9zZXFfd3JpdGUsXG5tbS92bXNjYW4uYy01OTkxLVx0Lmxsc2VlayA9IHNlcV9sc2Vlayxcbi0tXG5tbS92bXNjYW4uYz01OTk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxydV9nZW5fcm9fZm9wcyA9IHtcbm1tL3Ztc2Nhbi5jOjU5OTY6XHQub3BlbiA9IGxydV9nZW5fc2VxX29wZW4sXG5tbS92bXNjYW4uYy01OTk3LVx0LnJlYWQgPSBzZXFfcmVhZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAwNDcKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1HTFJVIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgdHJ5aW5nIHRvIGFjaGlldmUuIEkgc2VlIGl0JiMzOTtzIGZvY3VzaW5nIG9uIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgc3Vic3lzdGVtLCBhbmQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIG5ldyB0cmFja2luZyBhbmQgdGhyb3R0bGluZyBtZWNoYW5pc21zIGZvciBpc29sYXRlZCBwYWdlcy4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IGEgZmV3ICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsgd2hpY2ggYXJlOiBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYCwgYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRgLCBgaXNvbGF0ZV9mb2xpb3NgLCBgZXZpY3RfZm9saW9zYCwgYW5kIGBscnVfZ2VuX3NlcV93cml0ZWAuIFRoaXMgaGludHMgdGhhdCB0aGUgZ29hbCBoZXJlIGlzIHRvIHByZXZlbnQgbG9ja3VwcyBhbmQgZXhjZXNzaXZlIGlzb2xhdGlvbiBieSB0aHJvdHRsaW5nIHRoZSByZWNsYWltIHByb2Nlc3Mgd2hlbiB0b28gbWFueSBmb2xpb3MgYXJlIGluIGFuIGlzb2xhdGVkIHN0YXRlLiBTbyBpdCBsb29rcyBsaWtlIGEgbmV3IHRocm90dGxlIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBwcm9jZXNzLgoKTm93LCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0Oy4gSXQmIzM5O3MgdXNpbmcgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYC4gQSBxdWljayBsb29rIGF0IHRoZSBLY29uZmlnIGZpbGUgY29uZmlybXMgdGhlIGRlcGVuZGVuY2llczogYExSVV9HRU5gIHJlbGllcyBvbiBgTU1VYCBhbmQgYSBmZXcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmRpdGlvbnMsIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBkZXBlbmRzIG9uIGBMUlVfR0VOYC4gT2theSwgdGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuCgpCZWZvcmUgSSBzaWduIG9mZiwgSSBqdXN0IG5lZWQgdG8gc3VtbWFyaXplIGV2ZXJ5dGhpbmcuIFRoZSBwYXRjaCBpcyBkZWVtZWQgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBiZWNhdXNlIGl0JiMzOTtzIGFsdGVyaW5nIGNydWNpYWwgbWVtb3J5IHJlY2xhbWF0aW9uIGxvZ2ljIHdpdGhpbiB0aGUgTUdMUlUuIEl0JiMzOTtzIGFkZGluZyB0aGlzIG5ldyBpc29sYXRpb24gdHJhY2tpbmcgYW5kIHRocm90dGxpbmcsIHNwZWNpZmljYWxseSBpbiBgbW0vdm1zY2FuLmNgLCB0byBtYW5hZ2UgZXhjZXNzaXZlIGZvbGlvIGlzb2xhdGlvbi4gVGhlIGltcG9ydGFudCBGb2N1c1N5bWJvbHMgYW5kIEVuYWJsZUNvbmZpZ3MgYXJlOiBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYCwgYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRgLCBgaXNvbGF0ZV9mb2xpb3NgLCBgZXZpY3RfZm9saW9zYCwgYW5kIGBscnVfZ2VuX3NlcV93cml0ZWAsIGFuZCBgTFJVX0dFTmAsIGBMUlVfR0VOX0VOQUJMRURgIHJlc3BlY3RpdmVseS4KCk9rYXksIHRoYXQmIzM5O3MgZXZlcnl0aGluZy4gSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGFzc2Vzc21lbnQuIEkgd2lsbCBzZXQgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rocm90dGxlX2V2aWN0YWJsZV90eXBlcyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3Rvb19tYW55X2lzb2xhdGVkJiMzNDssCiAgICAmIzM0O2lzb2xhdGVfZm9saW9zJiMzNDssCiAgICAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3NlcV93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGlzb2xhdGVkIGZvbGlvIGFjY291bnRpbmcgYW5kIHJlY2xhaW0gdGhyb3R0bGluZyBmb3IgTXVsdGktR2VuIExSVSAoTUdMUlUpIGluIG1tL3Ztc2Nhbi5jLCBpbXBsZW1lbnRpbmcgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZCgpIGFuZCB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBmb2xpbyBpc29sYXRpb24gZHVyaW5nIG1lbW9yeSBwcmVzc3VyZSBhbmQgZGlyZWN0IHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rocm90dGxlX2V2aWN0YWJsZV90eXBlcyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3Rvb19tYW55X2lzb2xhdGVkJiMzNDssCiAgICAmIzM0O2lzb2xhdGVfZm9saW9zJiMzNDssCiAgICAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3NlcV93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGlzb2xhdGVkIGZvbGlvIGFjY291bnRpbmcgYW5kIHJlY2xhaW0gdGhyb3R0bGluZyBmb3IgTXVsdGktR2VuIExSVSAoTUdMUlUpIGluIG1tL3Ztc2Nhbi5jLCBpbXBsZW1lbnRpbmcgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZCgpIGFuZCB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBmb2xpbyBpc29sYXRpb24gZHVyaW5nIG1lbW9yeSBwcmVzc3VyZSBhbmQgZGlyZWN0IHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMzoxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwZXItbHJ1dmVjIGlzb2xhdGlvbiBhY2NvdW50aW5nIChgbnJfaXNvbGF0ZWRgKSBhbmQgaXNvbGF0aW9uIHRocm90dGxpbmcgKGBscnVfZ2VuX3Rvb19tYW55X2lzb2xhdGVkYCwgYHRocm90dGxlX2V2aWN0YWJsZV90eXBlc2ApIGZvciBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSByZWNsYWltLlxuXG5BbmFseXNpcyBhZ2FpbnN0IEtNU0FOIGFwcGxpY2FiaWxpdHk6XG4xLiBVc2VyLXNwYWNlIGxlYWtzOiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGV4cG9zZWQgdmlhIGlvY3Rscy9zeXNmcy9uZXRsaW5rL0JQRiBidWZmZXJzLlxuMi4gVW5pbml0aWFsaXplZCB2YXJpYWJsZXM6IEFsbCBhZGRlZCBsb2NhbCB2YXJpYWJsZXMgKGBhbGxvd2VkYCwgYGZhdGFsYCwgYHN0YWxsZWRgKSBhbmQgc3RydWN0IGZpZWxkcyAoYG5yX2lzb2xhdGVkYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFuZCBtYW5hZ2VkIChlLmcuLCBgKmZhdGFsYCBpcyBpbml0aWFsaXplZCB0byBmYWxzZSB1cG9uIGVudGVyaW5nIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKWAsIGBzdHJ1Y3QgbHJ1dmVjYCBtZW1vcnkgaXMgemVyby1hbGxvY2F0ZWQgZHVyaW5nIG5vZGUvbWVtY2cgaW5pdGlhbGl6YXRpb24pLlxuMy4gQnVmZmVyIGJvdW5kcyAvIG1lbW9yeSBoYW5kbGluZzogVGhlIHBhdGNoIG9ubHkgYWRqdXN0cyByZWNsYWltZXIgc2NoZWR1bGluZywgdGhyb3R0bGluZywgYW5kIGlzb2xhdGlvbiBjb3VudGVycyB3aXRob3V0IHRvdWNoaW5nIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGFjY2VzcywgdmFyaWFibGUtbGVuZ3RoIGJ1ZmZlcnMsIG9yIHN0cnVjdCBwYWRkaW5nLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIHJlbGF0ZSB0byByZWNsYWltIHRocm90dGxpbmcsIGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBjb3VudGVyIGltYmFsYW5jZXMsIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgKExPQ0tERVAsIEtBU0FOLCBXQVJOX09OKS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODM2ZDk2NDMzYzBlZDc2ZDA3MTEyODk3YmRmMjY2NGIxYzI4NzgxNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDM6MTY6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCA5NGY5YzNmZjU0MTYwLi44MTliNmMwNTkxMTZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTU4MCw2ICYjNDM7NTgwLDggQEAgc3RydWN0IGxydV9nZW5fZm9saW8gewogCS8qIGNhbiBiZSBtb2RpZmllZCB3aXRob3V0IGhvbGRpbmcgdGhlIExSVSBsb2NrICovCiAJYXRvbWljX2xvbmdfdCBldmljdGVkW05SX0hJU1RfR0VOU11bQU5PTl9BTkRfRklMRV1bTUFYX05SX1RJRVJTXTsKIAlhdG9taWNfbG9uZ190IHJlZmF1bHRlZFtOUl9ISVNUX0dFTlNdW0FOT05fQU5EX0ZJTEVdW01BWF9OUl9USUVSU107CiYjNDM7CS8qIHRoZSBudW1iZXIgb2YgZm9saW9zIGlzb2xhdGVkIGZyb20gdGhpcyBscnV2ZWMgYW5kIGJlaW5nIHJlY2xhaW1lZCAqLwomIzQzOwlhdG9taWNfbG9uZ190IG5yX2lzb2xhdGVkW0FOT05fQU5EX0ZJTEVdOwogCS8qIHdoZXRoZXIgdGhlIG11bHRpLWdlbiBMUlUgaXMgZW5hYmxlZCAqLwogCWJvb2wgZW5hYmxlZDsKIAkvKiB0aGUgbWVtY2cgZ2VuZXJhdGlvbiB0aGlzIGxydV9nZW5fZm9saW8gYmVsb25ncyB0byAqLwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBmMTE0OTFlZTllZDVjLi4yMTE4MzlkMTA5MDlhIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNDE1MSwyNSAmIzQzOzQxNTEsMzQgQEAgc3RhdGljIHZvaWQgc2V0X2luaXRpYWxfcHJpb3JpdHkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbAogCXNjLSZndDtwcmlvcml0eSA9IGNsYW1wKHByaW9yaXR5LCBERUZfUFJJT1JJVFkgLyAyLCBERUZfUFJJT1JJVFkpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcykKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKQogewotCWludCBnZW4sIHR5cGUsIHpvbmU7CiYjNDM7CWludCBnZW4sIHpvbmU7CiAJdW5zaWduZWQgbG9uZyBzZXEsIHRvdGFsID0gMDsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKIAlERUZJTkVfTUFYX1NFUShscnV2ZWMpOwogCURFRklORV9NSU5fU0VRKGxydXZlYyk7CiAKLQlmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7Ci0JCWZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxICZsdDs9IG1heF9zZXE7IHNlcSYjNDM7JiM0MzspIHsKLQkJCWdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTsKLQkJCWZvciAoem9uZSA9IDA7IHpvbmUgJmx0OyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KQotCQkJCXRvdGFsICYjNDM7PSBtYXgoUkVBRF9PTkNFKGxydWdlbi0mZ3Q7bnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTsKLQkJfQomIzQzOwlmb3IgKHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSAmbHQ7PSBtYXhfc2VxOyBzZXEmIzQzOyYjNDM7KSB7CiYjNDM7CQlnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7CiYjNDM7CQlmb3IgKHpvbmUgPSAwOyB6b25lICZsdDsgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOykKJiM0MzsJCQl0b3RhbCAmIzQzOz0gbWF4KFJFQURfT05DRShscnVnZW4tJmd0O25yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7CiAJfQogCiAJcmV0dXJuIHRvdGFsOwogfQogCiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHRvdGFsID0gMDsKJiM0MzsJaW50IHR5cGU7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKHR5cGUsIHN3YXBwaW5lc3MpCiYjNDM7CQl0b3RhbCAmIzQzOz0gbHJ1dmVjX3R5cGVfZXZpY3RhYmxlX3NpemUobHJ1dmVjLCB0eXBlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRvdGFsOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGxydXZlY19pc19zaXphYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7CiAJdW5zaWduZWQgbG9uZyB0b3RhbDsKQEAgLTQ4MzgsMTUgJiM0Mzs0ODQ3LDEyOCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcykKIAlyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoJmFtcDtzcCwgJmFtcDtwdik7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFRoZSBNR0xSVSBjb3VudGVycGFydCB0byB0b29fbWFueV9pc29sYXRlZCgpLgomIzQzOyAqCiYjNDM7ICogdG9vX21hbnlfaXNvbGF0ZWQoKSBjb21wYXJlcyBub2RlLXdpZGUgaXNvbGF0ZWQgY291bnRzIGFnYWluc3QKJiM0MzsgKiBub2RlLXdpZGUgaW5hY3RpdmUgc2l6ZXMuIEl0IHByZWRhdGVzIHBlci1tZW1jZyBMUlUgbGlzdHMsIHdoaWNoCiYjNDM7ICogbW92ZWQgaXNvbGF0aW9uIHRvIHBlci1scnV2ZWMgZ3JhbnVsYXJpdHkuIE1HTFJVIHJlY2xhaW1lcnMgY29udGVuZAomIzQzOyAqIHBlciBscnV2ZWMsIHNvIHRoaXMgY2hlY2sgaXMgcGVyIGxydXZlYyBhcyB3ZWxsLCBhbmQgaXNvbGF0aW9uIGluCiYjNDM7ICogb25lIG1lbWNnIGRvZXMgbm90IHRocm90dGxlIHJlY2xhaW0gaW4gYW5vdGhlci4KJiM0MzsgKgomIzQzOyAqIFRoZSBsZWdhY3kgdGhyZXNob2xkLCB0aGUgc2l6ZSBvZiB0aGUgaW5hY3RpdmUgbGlzdCwgaXMgbm90IHVzYWJsZQomIzQzOyAqIGhlcmUgZWl0aGVyOiBpbiBNR0xSVSB0aGUgaW5hY3RpdmUgY291bnRlcnMgYXJlIG9ubHkgYSBjb21wYXRpYmlsaXR5CiYjNDM7ICogc2hpbSAtIHRoZXkganVtcCBhcm91bmQgd2hlbiBzd2FwIHJ1bnMgb3V0IG9yIGEgbWVtY2cgaGl0cyBpdHMgc3dhcAomIzQzOyAqIGxpbWl0LCBhbmQgcHJvYWN0aXZlIGFnaW5nIGNhbiBpbmZsYXRlIHRoZW0uIENvbXBhcmUgYWdhaW5zdCB0aGUKJiM0MzsgKiB0b3RhbCBudW1iZXIgb2YgZXZpY3RhYmxlIHBhZ2VzIG9mIHRoZSB0eXBlIGRpdmlkZWQgYnkgTUlOX05SX0dFTlMsCiYjNDM7ICogYXBwcm94aW1hdGluZyB0aGUgc2l6ZSBvZiBvbmUgZ2VuZXJhdGlvbiAtIHRoZSBzYW1lIHVuaXQgdGhlCiYjNDM7ICogb3JpZ2luYWwgTUdMUlUgYWdpbmcgaGV1cmlzdGljcyB1c2VkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwKJiM0MzsJCQkJICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGlzb2xhdGVkLCBldmljdGFibGU7CiYjNDM7CiYjNDM7CWlmIChjdXJyZW50X2lzX2tzd2FwZCgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoIXdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc2MpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpc29sYXRlZCA9IGF0b21pY19sb25nX3JlYWQoJmFtcDtscnV2ZWMtJmd0O2xydWdlbi5ucl9pc29sYXRlZFt0eXBlXSk7CiYjNDM7CWV2aWN0YWJsZSA9IGxydXZlY190eXBlX2V2aWN0YWJsZV9zaXplKGxydXZlYywgdHlwZSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEdGUF9OT0lPL0dGUF9OT0ZTIGNhbGxlcnMgYXJlIGFsbG93ZWQgdG8gaXNvbGF0ZSBtb3JlIHBhZ2VzLCBzbwomIzQzOwkgKiB0aGV5IHdvbiYjMzk7dCBiZSBibG9ja2VkIGJ5IG5vcm1hbCBkaXJlY3QtcmVjbGFpbWVycywgZm9ybWluZyBhCiYjNDM7CSAqIGNpcmN1bGFyIGRlYWRsb2NrLgomIzQzOwkgKi8KJiM0MzsJaWYgKGdmcF9oYXNfaW9fZnMoc2MtJmd0O2dmcF9tYXNrKSkKJiM0MzsJCWV2aWN0YWJsZSAmZ3Q7Jmd0Oz0gMzsKJiM0MzsKJiM0MzsJcmV0dXJuIGlzb2xhdGVkICZndDsgZXZpY3RhYmxlIC8gTUlOX05SX0dFTlM7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVW5saWtlIHRoZSBsZWdhY3kgcGF0aCwgd2hlcmUgdGhlIExSVSBsaXN0IHRvIGlzb2xhdGUgZnJvbSBpcyBrbm93bgomIzQzOyAqIGJlZm9yZSBpc29sYXRpb24sIGlzb2xhdGVfZm9saW9zKCkgcGlja3MgdGhlIHR5cGUgZnJvbSB0aGUgcmVmYXVsdAomIzQzOyAqIGZlZWRiYWNrIGFuZCBtYXkgZmFsbCBiYWNrIHRvIHRoZSBvdGhlciBvbmUuIFRoZXJlZm9yZSwgaW5zdGVhZCBvZgomIzQzOyAqIHRocm90dGxpbmcgb24gYSBzaW5nbGUgdHlwZSwgY29sbGVjdCB0aGUgZXZpY3RhYmxlIHR5cGVzIHRoYXQgZG8gbm90CiYjNDM7ICogaGF2ZSB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MsIGFuZCBvbmx5IHNsZWVwIHdoZW4gYWxsIG9mIHRoZW0gZG8uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIHRoZSBtYXNrIG9mIHRoZSB0eXBlcyBpc29sYXRlX2ZvbGlvcygpIG1heSBpc29sYXRlIGZyb20sIG9yCiYjNDM7ICogMCBpZiByZWNsYWltIHNob3VsZCBzdG9wLiBBbHNvIHNldHMgQGZhdGFsIHRvIHRlbGwgdGhlIGNhbGxlciB0aGF0CiYjNDM7ICogdGhlIHRhc2sgcmVjZWl2ZWQgYSBmYXRhbCBzaWduYWwgd2hpbGUgd2FpdGluZy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHRocm90dGxlX2V2aWN0YWJsZV90eXBlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7CQkJCQkgICAgIGludCBzd2FwcGluZXNzLAomIzQzOwkJCQkJICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywKJiM0MzsJCQkJCSAgICAgYm9vbCAqZmF0YWwpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgYWxsb3dlZDsKJiM0MzsJYm9vbCBzdGFsbGVkID0gZmFsc2U7CiYjNDM7CXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CSpmYXRhbCA9IGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKDs7KSB7CiYjNDM7CQlhbGxvd2VkID0gMDsKJiM0MzsJCWZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgdHlwZSB3aXRoIG5vIGV2aWN0YWJsZSBmb2xpb3MgaGFzIG5vdGhpbmcgdG8KJiM0MzsJCQkgKiBpc29sYXRlLiBEb24mIzM5O3QgYWxsb3cgaXQsIG90aGVyd2lzZSByZWNsYWltIGNhbiBiZQomIzQzOwkJCSAqIHJlZGlyZWN0ZWQgdG8gaXQgYW5kIHNwaW4gbWFraW5nIG5vIHByb2dyZXNzLCBlLmcuCiYjNDM7CQkJICogd2hlbiB0aGUgb25seSB0eXBlIHdpdGggZm9saW9zIGlzIG92ZXItaXNvbGF0ZWQuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKCFscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShscnV2ZWMsIGkpKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlpZiAoIWxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQobHJ1dmVjLCBpLCBzYykpCiYjNDM7CQkJCWFsbG93ZWQgfD0gQklUKGkpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKGFsbG93ZWQpIHsKJiM0MzsJCQkvKiBXYWtlIHVwIHJlY2xhaW1lcnMgd2FpdGluZyBvbiB0aGUgaXNvbGF0aW9uIHRvIGdvIGRvd24uICovCiYjNDM7CQkJd2FrZV90aHJvdHRsZV9pc29sYXRlZChwZ2RhdCk7CiYjNDM7CQkJcmV0dXJuIGFsbG93ZWQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogQWxsIGV2aWN0YWJsZSB0eXBlcyBhcmUgb3Zlci1pc29sYXRlZC4gTGlrZSB0aGUgbGVnYWN5CiYjNDM7CQkgKiBwYXRoLCB3YWl0IG9uY2UgZm9yIGNvbmN1cnJlbnQgcmVjbGFpbWVycyB0byBwdXQgdGhlaXIKJiM0MzsJCSAqIGlzb2xhdGVkIGZvbGlvcyBiYWNrOyBnaXZlIHVwIGlmIHRoYXQgbWFrZXMgbm8gcHJvZ3Jlc3MuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChzdGFsbGVkKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJc3RhbGxlZCA9IHRydWU7CiYjNDM7CQlyZWNsYWltX3Rocm90dGxlKHBnZGF0LCBWTVNDQU5fVEhST1RUTEVfSVNPTEFURUQpOwomIzQzOwomIzQzOwkJLyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqLwomIzQzOwkJaWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiYjNDM7CQkJKmZhdGFsID0gdHJ1ZTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQkgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcywKLQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZCwKLQkJCSAgaW50ICppc29sYXRlX3R5cGUsIGludCAqaXNvbGF0ZV9zY2FubmVkKQomIzQzOwkJCSAgdW5zaWduZWQgaW50IGFsbG93ZWQsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCiYjNDM7CQkJICBpbnQgKmlzb2xhdGVkLCBpbnQgKmlzb2xhdGVfdHlwZSwgaW50ICppc29sYXRlX3NjYW5uZWQpCiB7CiAJaW50IGk7CiAJaW50IHRvdGFsX3NjYW5uZWQgPSAwOwogCWludCB0eXBlID0gZ2V0X3R5cGVfdG9fc2NhbihscnV2ZWMsIHN3YXBwaW5lc3MpOwogCiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBwcmVmZXJyZWQgdHlwZSBtYXkgaGF2ZSBiZWVuIGV4Y2x1ZGVkIGJ5CiYjNDM7CSAqIHRocm90dGxlX2V2aWN0YWJsZV90eXBlcygpOyBzdGFydCBmcm9tIHRoZSBvdGhlciBvbmUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIShhbGxvd2VkICZhbXA7IEJJVCh0eXBlKSkpCiYjNDM7CQl0eXBlID0gIXR5cGU7CiYjNDM7CiAJZm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUoaSwgc3dhcHBpbmVzcykgewogCQlpbnQgc2Nhbm5lZDsKIAkJaW50IHRpZXIgPSBnZXRfdGllcl9pZHgobHJ1dmVjLCB0eXBlKTsKQEAgLTQ4NjMsOSAmIzQzOzQ5ODUsMTAgQEAgc3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJLyoKIAkJICogSWYgc2Nhbm5lZCAmZ3Q7IDAgYW5kIGlzb2xhdGVkID09IDAsIGF2b2lkIGZhbGxpbmcgYmFjayB0byB0aGUKIAkJICogb3RoZXIgdHlwZSwgYXMgdGhpcyB0eXBlIHJlbWFpbnMgc3VmZmljaWVudC4gRmFsbGluZyBiYWNrCi0JCSAqIHRvbyByZWFkaWx5IGNhbiBkaXNydXB0IHRoZSBwb3NpdGl2ZV9jdHJsX2VycigpIGJpYXMuCiYjNDM7CQkgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLiBPbmx5CiYjNDM7CQkgKiBmYWxsIGJhY2sgdG8gYSB0eXBlIHRoYXQgaXMgbm90IHRocm90dGxlZC4KIAkJICovCi0JCWlmICghc2Nhbm5lZCkKJiM0MzsJCWlmICghc2Nhbm5lZCAmYW1wOyZhbXA7IChhbGxvd2VkICZhbXA7IEJJVCghdHlwZSkpKQogCQkJdHlwZSA9ICF0eXBlOwogCX0KIApAQCAtNDg4OCwxNSAmIzQzOzUwMTEsMzYgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJYm9vbCBza2lwX3JldHJ5ID0gZmFsc2U7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwomIzQzOwl1bnNpZ25lZCBpbnQgYWxsb3dlZDsKJiM0MzsJYm9vbCBmYXRhbDsKJiM0MzsKJiM0MzsJYWxsb3dlZCA9IHRocm90dGxlX2V2aWN0YWJsZV90eXBlcyhscnV2ZWMsIHN3YXBwaW5lc3MsIHNjLCAmYW1wO2ZhdGFsKTsKJiM0MzsJaWYgKCFhbGxvd2VkKSB7CiYjNDM7CQkvKgomIzQzOwkJICogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBMaWtlIHRoZSBsZWdhY3kKJiM0MzsJCSAqIHBhdGgsIHByZXRlbmQgc29tZSBwYWdlcyB3ZXJlIHJlY2xhaW1lZCBzbyByZWNsYWltCiYjNDM7CQkgKiB1bndpbmRzIHF1aWNrbHkgaW5zdGVhZCBvZiBsb29waW5nIGJhY2sgaW50byB0aGUKJiM0MzsJCSAqIHRocm90dGxlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoZmF0YWwpCiYjNDM7CQkJc2MtJmd0O25yX3JlY2xhaW1lZCAmIzQzOz0gU1dBUF9DTFVTVEVSX01BWDsKJiM0MzsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiAKIAlscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTsKIAogCS8qIEluIGNhc2UgZm9saW8gZGVsZXRpb24gbGVmdCBlbXB0eSBvbGQgZ2VucywgZmx1c2ggdGhlbSAqLwogCXRyeV90b19pbmNfbWluX3NlcShscnV2ZWMsIHN3YXBwaW5lc3MpOwogCi0Jc2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsCiYjNDM7CXNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLCBhbGxvd2VkLAogCQkJCSAmYW1wO2xpc3QsICZhbXA7aXNvbGF0ZWQsICZhbXA7dHlwZSwgJmFtcDt0eXBlX3NjYW5uZWQpOwogCW5yX2lzb2xhdGVkID0gaXNvbGF0ZWQ7CiYjNDM7CWlmIChucl9pc29sYXRlZCkgewomIzQzOwkJX19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGUsCiYjNDM7CQkJCSAgICAgIG5yX2lzb2xhdGVkKTsKJiM0MzsJCWF0b21pY19sb25nX2FkZChucl9pc29sYXRlZCwgJmFtcDtscnV2ZWMtJmd0O2xydWdlbi5ucl9pc29sYXRlZFt0eXBlXSk7CiYjNDM7CX0KIAogCS8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovCiAJaWYgKHNjYW5uZWQpCkBAIC00OTU5LDYgJiM0Mzs1MTAzLDkgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWdvdG8gcmV0cnk7CiAJfQogCiYjNDM7CWF0b21pY19sb25nX3N1Yihucl9pc29sYXRlZCwgJmFtcDtscnV2ZWMtJmd0O2xydWdlbi5ucl9pc29sYXRlZFt0eXBlXSk7CiYjNDM7CW1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZSwgLW5yX2lzb2xhdGVkKTsKJiM0MzsKIAlpZiAobnJfaXNvbGF0ZWQgJmd0OyB0b3RhbF9yZWNsYWltZWQpCiAJCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IHR5cGUsCiAJCQkJIG5yX2lzb2xhdGVkIC0gdG90YWxfcmVjbGFpbWVkKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIHRocm93IGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGF0IGl0LiBUaGUgY2hhbmdlcyBzZWVtIHRvIGJlIGluIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCBhbmQgYG1tL3Ztc2Nhbi5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uLiBBbnl0aGluZyB0b3VjaGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFydGljdWxhcmx5IHRoZXNlIGZpbGVzIGlzIGFsd2F5cyBhIHBvdGVudGlhbCBob3Qgc3BvdC4KClRoZSBjb3JlIGNoYW5nZXMgbG9vayB0byBiZToKMS4gIEFkZGluZyBgYXRvbWljX2xvbmdfdCBucl9pc29sYXRlZFtBTk9OX0FORF9GSUxFXTtgIHRvIGBzdHJ1Y3QgbHJ1X2dlbl9mb2xpb2AuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IHRyYWNraW5nIGlzb2xhdGVkIGZvbGlvcyBhdCBhIGBscnVfZ2VuX2ZvbGlvYCBsZXZlbCBpbmRpY2F0ZXMgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciBmb2xpbyBpc29sYXRpb24gd2l0aGluIExSVSBsaXN0cy4KMi4gIFVwZGF0ZXMgdG8gYGxydXZlY190eXBlX2V2aWN0YWJsZV9zaXplYCBhbmQgYGxydXZlY19ldmljdGFibGVfc2l6ZWAsIHdoaWNoIGlzIGV4cGVjdGVkIHRvIGdvIGFsb25nIHdpdGggbWFuYWdpbmcgdGhlc2UgaXNvbGF0ZWQgZm9saW9zLgozLiAgTmV3IGZ1bmN0aW9uczogYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQoKWAgYW5kIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKWAgaW4gYG1tL3Ztc2Nhbi5jYC4gVGhlc2UgaW1wbHkgYSBtZWNoYW5pc20gZm9yIHRocm90dGxpbmcgb3IgbGltaXRpbmcgZm9saW8gaXNvbGF0aW9uIGJhc2VkIG9uIHNvbWUgY3JpdGVyaWEsIGFuZCB0aGF04oCZcyBhIHNpZ25hbCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uLgo0LiAgTW9kaWZpY2F0aW9ucyB0byBgaXNvbGF0ZV9mb2xpb3MoKWAgYW5kIGBldmljdF9mb2xpb3MoKWAgdG8gdHJhY2sgYW5kIG1hbmFnZSB0aGUgZm9saW8gY291bnRzIHdpdGhpbiB0aGUgbHJ1dmVjLgoKQmVmb3JlIEkgZ28gZnVydGhlciwgbGV0JiMzOTtzIGNsYXJpZnkgdGhhdCBgc3RydWN0IGxydV9nZW5fZm9saW9gIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLiBXaGVyZSBpcyB0aGlzIHN0cnVjdCBpbml0aWFsaXplZD8gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIHdoZXJlIGBscnVnZW5gIG9yIGBzdHJ1Y3QgbHJ1X2dlbl9mb2xpb2AgaXMgY3JlYXRlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBpdCYjMzk7cyB1c2VkLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgaWYgdGhlIG5ldyBgbnJfaXNvbGF0ZWRgIG1lbWJlciBpcyBiZWluZyBjb3JyZWN0bHkgc2V0IHVwIGFuZCBtYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MTc1PXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3VwZGF0ZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTE4MS1cdGVudW0gbHJ1X2xpc3QgbHJ1ID0gdHlwZSAqIExSVV9JTkFDVElWRV9GSUxFO1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDoxODI6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMTgzLVxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjIwLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDoyMjE6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydV9nZW5fZm9saW9fc2VxKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjIyLVx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjI2LVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjIyNzpcdGNvbnN0IHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yMjgtXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0yNTU9c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fYWRkX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCByZWNsYWltaW5nKVxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjYxLVx0aW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTtcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MjYyOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTI2My1cbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTI2OC1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MjY5Olx0c2VxID0gbHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgcmVjbGFpbWluZyk7XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTI3MC1cdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTUzND1lbnVtIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTU2Mi0gKi9cbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTYzOnN0cnVjdCBscnVfZ2VuX2ZvbGlvIHtcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTY0LVx0LyogdGhlIGFnaW5nIGluY3JlbWVudHMgdGhlIHlvdW5nZXN0IGdlbmVyYXRpb24gbnVtYmVyICovXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01ODYtXHRib29sIGVuYWJsZWQ7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjU4NzpcdC8qIHRoZSBtZW1jZyBnZW5lcmF0aW9uIHRoaXMgbHJ1X2dlbl9mb2xpbyBiZWxvbmdzIHRvICovXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTU4OC1cdHU4IGdlbjtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTg5Olx0LyogdGhlIGxpc3Qgc2VnbWVudCB0aGlzIGxydV9nZW5fZm9saW8gYmVsb25ncyB0byAqL1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01OTAtXHR1OCBzZWc7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjU5MTpcdC8qIHBlci1ub2RlIGxydV9nZW5fZm9saW8gbGlzdCBmb3IgZ2xvYmFsIHJlY2xhaW0gKi9cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTkyLVx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgbGlzdDtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTYxOT1zdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTYyMS1cdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NjIyOlx0LyogbWF4X3NlcSBmcm9tIGxydV9nZW5fZm9saW86IGNhbiBiZSBvdXQgb2YgZGF0ZSAqL1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02MjMtXHR1bnNpZ25lZCBsb25nIHNlcTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTY4MT1zdHJ1Y3QgbHJ1X2dlbl9tZW1jZyB7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02ODMtXHR1bnNpZ25lZCBsb25nIHNlcTtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6Njg0Olx0LyogZWFjaCBtZW1jZyBoYXMgb25lIGxydV9nZW5fZm9saW8gcGVyIG5vZGUgKi9cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNjg1LVx0dW5zaWduZWQgbG9uZyBucl9tZW1jZ3NbTUVNQ0dfTlJfR0VOU107XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY4NjpcdC8qIHBlci1ub2RlIGxydV9nZW5fZm9saW8gbGlzdCBmb3IgZ2xvYmFsIHJlY2xhaW0gKi9cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNjg3LVx0c3RydWN0IGhsaXN0X251bGxzX2hlYWRcdGZpZm9bTUVNQ0dfTlJfR0VOU11bTUVNQ0dfTlJfQklOU107XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD03Njg9c3RydWN0IGxydXZlYyB7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03ODktXHQvKiBldmljdGFibGUgcGFnZXMgZGl2aWRlZCBpbnRvIGdlbmVyYXRpb25zICovXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc5MDpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvXHRcdGxydWdlbjtcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzkxLSNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE0ODA9dHlwZWRlZiBzdHJ1Y3QgcGdsaXN0X2RhdGEge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTYwMC1cdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgbW1fd2FsaztcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTYwMTpcdC8qIGxydV9nZW5fZm9saW8gbGlzdCAqL1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNjAyLVx0c3RydWN0IGxydV9nZW5fbWVtY2cgbWVtY2dfbHJ1O1xuLS1cbm1tL2ZvbGlvLmM9NDY3PXZvaWQgZm9saW9fYWRkX2xydShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtNDc2LVx0ICogRm9yIHByZWZhdWx0ZWQgZmlsZSBmb2xpb3MsIGZvbGlvX21hcmtfYWNjZXNzZWQoKSBzZXRzXG5tbS9mb2xpby5jOjQ3NzpcdCAqIFBHX3JlZmVyZW5jZWQgc28gbHJ1X2dlbl9mb2xpb19zZXEoKSBwbGFjZXMgdGhlbSBpbnRvXG5tbS9mb2xpby5jLTQ3OC1cdCAqIHRoZSBzZWNvbmQgb2xkZXN0IGdlbmVyYXRpb24uXG4tLVxubW0vdm1zY2FuLmM9MzE5OD1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2Fpbixcbi0tXG5tbS92bXNjYW4uYy0zMjAxLVx0aW50IGk7XG5tbS92bXNjYW4uYzozMjAyOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy0zMjAzLVx0aW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4tLVxubW0vdm1zY2FuLmM9MzIxNz1zdGF0aWMgdm9pZCByZXNldF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBib29sIGNhcnJ5b3Zlcilcbi0tXG5tbS92bXNjYW4uYy0zMjE5LVx0aW50IGhpc3QsIHRpZXI7XG5tbS92bXNjYW4uYzozMjIwOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy0zMjIxLVx0Ym9vbCBjbGVhciA9IGNhcnJ5b3ZlciA/IE5SX0hJU1RfR0VOUyA9PSAxIDogTlJfSElTVF9HRU5TIFx1MDAzZSAxO1xuLS1cbm1tL3Ztc2Nhbi5jPTMyOTk9c3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS92bXNjYW4uYy0zMzAxLVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG5tbS92bXNjYW4uYzozMzAyOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy0zMzAzLVx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbi0tXG5tbS92bXNjYW4uYz0zMzQxPXN0YXRpYyB2b2lkIHJlc2V0X2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbi0tXG5tbS92bXNjYW4uYy0zMzQ0LVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbHJ1dmVjX2xpdmVfbG9ja19pcnEod2Fsay1cdTAwM2VscnV2ZWMpO1xubW0vdm1zY2FuLmM6MzM0NTpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtMzM0Ni1cbi0tXG5tbS92bXNjYW4uYz0zOTAwPXN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTM5MDMtXHRpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSDtcbm1tL3Ztc2Nhbi5jOjM5MDQ6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTM5MDUtXHRpbnQgaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbi0tXG5tbS92bXNjYW4uYz0zOTUzPXN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTM5NTYtXHRib29sIHNlcV9pbmNfZmxhZyA9IGZhbHNlO1xubW0vdm1zY2FuLmM6Mzk1NzpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtMzk1OC1cdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmMtMzk4NS1cbm1tL3Ztc2Nhbi5jOjM5ODY6XHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gbHJ1X2dlbl9mb2xpbyAqL1xubW0vdm1zY2FuLmMtMzk4Ny1cdGlmIChzd2FwcGluZXNzIFx1MDAyNlx1MDAyNiBzd2FwcGluZXNzIFx1MDAzYz0gTUFYX1NXQVBQSU5FU1MpIHtcbi0tXG5tbS92bXNjYW4uYz00MDA1PXN0YXRpYyBib29sIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTQwMDktXHRpbnQgdHlwZSwgem9uZTtcbm1tL3Ztc2Nhbi5jOjQwMTA6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTQwMTEtcmVzdGFydDpcbi0tXG5tbS92bXNjYW4uYz00MDcwPXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxuLS1cbm1tL3Ztc2Nhbi5jLTQwNzUtXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IE5VTEw7XG5tbS92bXNjYW4uYzo0MDc2Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy00MDc3LVx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmM9NDE1ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuLS1cbm1tL3Ztc2Nhbi5jLTQxNTctXHR1bnNpZ25lZCBsb25nIHNlcSwgdG90YWwgPSAwO1xubW0vdm1zY2FuLmM6NDE1ODpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtNDE1OS1cdERFRklORV9NQVhfU0VRKGxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmM9NDU5OD1zdGF0aWMgdm9pZCBfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLCBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ2MDAte1xubW0vdm1zY2FuLmM6NDYwMTpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpjaGlsZF9scnVnZW4sICpwYXJlbnRfbHJ1Z2VuO1xubW0vdm1zY2FuLmMtNDYwMi1cdGVudW0gbHJ1X2xpc3QgbHJ1ID0gdHlwZSAqIExSVV9JTkFDVElWRV9GSUxFO1xuLS1cbm1tL3Ztc2Nhbi5jPTQ2NjM9c3RhdGljIGJvb2wgc29ydF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ2NzItXHRpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzLCB3b3JraW5nc2V0KTtcbm1tL3Ztc2Nhbi5jOjQ2NzM6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTQ2NzQtXG4tLVxubW0vdm1zY2FuLmM9NDczNj1zdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ3NDctXHR1bnNpZ25lZCBsb25nIHJlbWFpbmluZyA9IG5yX3RvX3NjYW47XG5tbS92bXNjYW4uYzo0NzQ4Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy00NzQ5LVxuLS1cbm1tL3Ztc2Nhbi5jPTQ5OTg9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNTA3OC1cdFx0LyogZG9uJiMzOTt0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG5tbS92bXNjYW4uYzo1MDc5Olx0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXG5tbS92bXNjYW4uYy01MDgwLVx0XHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR19hY3RpdmUpKTtcbi0tXG5tbS92bXNjYW4uYz01Mjg1PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyOTEtXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG5tbS92bXNjYW4uYzo1MjkyOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbjtcbm1tL3Ztc2Nhbi5jLTUyOTMtXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4tLVxubW0vdm1zY2FuLmM9NTQyMj1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzdGF0ZV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy01NDIzLXtcbm1tL3Ztc2Nhbi5jOjU0MjQ6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTU0MjUtXG4tLVxubW0vdm1zY2FuLmM9NTY5Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX3NlcV9zaG93X2Z1bGwoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNTcwMy1cdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEoc2VxKTtcbm1tL3Ztc2Nhbi5jOjU3MDQ6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTU3MDUtXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbi0tXG5tbS92bXNjYW4uYz01NzUyPXN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vdm1zY2FuLmMtNTc1Ni1cdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IHY7XG5tbS92bXNjYW4uYzo1NzU3Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy01NzU4LVx0aW50IG5pZCA9IGxydXZlY19wZ2RhdChscnV2ZWMpLVx1MDAzZW5vZGVfaWQ7XG4tLVxubW0vdm1zY2FuLmM9NjAxOD12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwMjEtXHRpbnQgZ2VuLCB0eXBlLCB6b25lO1xubW0vdm1zY2FuLmM6NjAyMjpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtNjAyMy1cdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xuLS1cbm1tL3dvcmtpbmdzZXQuYz0yMzU9c3RhdGljIHZvaWQgKmxydV9nZW5fZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS93b3JraW5nc2V0LmMtMjQwLVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xubW0vd29ya2luZ3NldC5jOjI0MTpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW47XG5tbS93b3JraW5nc2V0LmMtMjQyLVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4tLVxubW0vd29ya2luZ3NldC5jPTI5Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuLS1cbm1tL3dvcmtpbmdzZXQuYy0yOTgtXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG5tbS93b3JraW5nc2V0LmM6Mjk5Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbjtcbm1tL3dvcmtpbmdzZXQuYy0zMDAtXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYzOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsIGluIHRoZSBmaWVsZCwgc3RhcnRpbmcgd2l0aCB0aGUgcmVxdWVzdGVkIGJvbGRlZCBoZWFkZXI6CgoqKkRpdmluZyBpbnRvIGBscnVfZ2VuX2luaXRfbHJ1dmVjYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYGxydV9nZW5faW5pdF9scnV2ZWNgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHNwZWNpZmljIExSVSB2ZWN0b3IgaW5pdGlhbGl6YXRpb24gaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyBhIGNvcmUgY29tcG9uZW50LCBzbyBhIGRlZXAgdW5kZXJzdGFuZGluZyBpcyBjcnVjaWFsLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgYW55IHN1YnRsZSBvcHRpbWl6YXRpb25zLCBwb3RlbnRpYWwgcGl0ZmFsbHMsIG9yIGRlc2lnbiBjaG9pY2VzIHRoYXQgYXJlIGF0IHBsYXkgaGVyZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhlIGluaXRpYWwgYWxsb2NhdGlvbiwgd2hhdCBwYXJhbWV0ZXJzIGl0IGFjY2VwdHMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBhbmQgZXZpY3Rpb24gbWVjaGFuaXNtcy4gTXkgbWFpbiBjb25jZXJuIGlzIHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdCBvbiBvdmVyYWxsIHBlcmZvcm1hbmNlIGFuZCBob3cgcm9idXN0IHRoaXMgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBpcy4gSSYjMzk7bSBsb29raW5nIGZvciBhIGNsZWFyIGRlc2NyaXB0aW9uIG9mIGFsbCB0aGUgc3RlcHMsIGFueSBhc3N1bXB0aW9ucyBtYWRlLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBlcnJvciBjb25kaXRpb25zIGhhbmRsZWQuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgY29kZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwMTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjAxODpcdHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG42MDE5Olx0e1xuNjAyMDpcdFx0aW50IGk7XG42MDIxOlx0XHRpbnQgZ2VuLCB0eXBlLCB6b25lO1xuNjAyMjpcdFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG42MDIzOlx0XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbjYwMjQ6XHRcbjYwMjU6XHRcdGxydWdlbi1cdTAwM2VtYXhfc2VxID0gTUlOX05SX0dFTlMgJiM0MzsgMTtcbjYwMjY6XHRcdGxydWdlbi1cdTAwM2VlbmFibGVkID0gbHJ1X2dlbl9lbmFibGVkKCk7XG42MDI3Olx0XG42MDI4Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gTUlOX05SX0dFTlMgJiM0MzsgMTsgaSYjNDM7JiM0MzspXG42MDI5Olx0XHRcdGxydWdlbi1cdTAwM2V0aW1lc3RhbXBzW2ldID0gamlmZmllcztcbjYwMzA6XHRcbjYwMzE6XHRcdGZvcl9lYWNoX2dlbl90eXBlX3pvbmUoZ2VuLCB0eXBlLCB6b25lKVxuNjAzMjpcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW2dlbl1bdHlwZV1bem9uZV0pO1xuNjAzMzpcdFxuNjAzNDpcdFx0aWYgKG1tX3N0YXRlKVxuNjAzNTpcdFx0XHRtbV9zdGF0ZS1cdTAwM2VzZXEgPSBNSU5fTlJfR0VOUztcbjYwMzY6XHR9XG42MDM3Olx0XG42MDM4Olx0I2lmZGVmIENPTkZJR19NRU1DR1xuNjAzOTpcdFxuNjA0MDpcdHZvaWQgbHJ1X2dlbl9pbml0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbjYwNDE6XHR7XG42MDQyOlx0XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xuNjA0MzpcdFxuNjA0NDpcdFx0aWYgKCFtbV9saXN0KVxuNjA0NTpcdFx0XHRyZXR1cm47XG42MDQ2Olx0XG42MDQ3Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZtbV9saXN0LVx1MDAzZWZpZm8pO1xuNjA0ODpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bW1fbGlzdC1cdTAwM2Vsb2NrKTtcbjYwNDk6XHR9XG42MDUwOlx0XG42MDUxOlx0dm9pZCBscnVfZ2VuX2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuNjA1MjpcdHtcbjYwNTM6XHRcdGludCBpO1xuNjA1NDpcdFx0aW50IG5pZDtcbjYwNTU6XHRcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XG42MDU2Olx0XG42MDU3Olx0XHRWTV9XQVJOX09OX09OQ0UobW1fbGlzdCBcdTAwMjZcdTAwMjYgIWxpc3RfZW1wdHkoXHUwMDI2bW1fbGlzdC1cdTAwM2VmaWZvKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTUxCgkJCQkJCQlvdXRwdXQ6IDMwMwoJCQkJCQkJdGhvdWdodHM6IDYwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLTVNBTiBOZWVkIGluIFRoaXMgTUdMUlUgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgYW5hbHlzaXMgZm9jdXNlcyBvbiB3aGV0aGVyIHRoaXMgTUdMUlUgcGF0Y2ggaW50cm9kdWNpbmcgY2hhbmdlcyBpbiBwYWdlIHJlY2xhaW0gYW5kIHRocm90dGxpbmcgcG9zZXMgYSByaXNrIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIHRodXMgbmVjZXNzaXRhdGluZyBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGNoZWNrcy4gSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoZSBjb2RlIGFuZCB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggYSBmaW5lLXRvb3RoIGNvbWIuCgpGaXJzdCwgSSBjb25maXJtIHRoYXQgdGhlIGBzdHJ1Y3QgbHJ1dmVjYCBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHksIGVpdGhlciB3aXRoaW4gYHN0cnVjdCBwZ2xpc3RfZGF0YWAgKHN0YXRpY2FsbHkgb3IgZHVyaW5nIGVhcmx5IGJvb3QpIG9yIHdpdGhpbiBgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGVgIHZpYSBga3phbGxvY2AuIFRoaXMgZW5zdXJlcyB0aGF0IGZpZWxkcyBhcmUgZWl0aGVyIHplcm9lZCBvciBvdGhlcndpc2Ugc2FmZWx5IGluaXRpYWxpemVkLiBJIGFsc28gbm90ZWQgdGhhdCBhdG9taWMgbG9uZyB0eXBlcywgbGlrZSBgZXZpY3RlZGAgYW5kIGByZWZhdWx0ZWRgIHdpdGhpbiBgc3RydWN0IGxydV9nZW5fZm9saW9gIGFyZSBhbHNvIHplcm8taW5pdGlhbGl6ZWQgYnkgZGVmYXVsdC4KClRoZW4gSSBleGFtaW5lZCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYHRocm90dGxlX2V2aWN0YWJsZV90eXBlc2AgYW5kIGBldmljdF9mb2xpb3NgLCBmb2N1c2luZyBvbiB2YXJpYWJsZSBpbml0aWFsaXphdGlvbi4gSW4gYHRocm90dGxlX2V2aWN0YWJsZV90eXBlc2AsIHRoZSBjb2RlIHBhc3NlcyBhIHBvaW50ZXIgdG8gYGJvb2wgKmZhdGFsYCBhbmQgaW5pdGlhbGl6ZXMgaXQgaW1tZWRpYXRlbHkgd2l0aCBgKmZhdGFsID0gZmFsc2U7YC4gQSBsb2NhbCBgYm9vbCBzdGFsbGVkID0gZmFsc2U7YCBpcyBhbHNvIGluaXRpYWxpemVkLiBJbiBgZXZpY3RfZm9saW9zYCwgdGhlIGB1bnNpZ25lZCBpbnQgYWxsb3dlZGAgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgYnkgcmV0dXJuIGZyb20gYHRocm90dGxlX2V2aWN0YWJsZV90eXBlc2AuIFRoaXMgaXMgaW1wb3J0YW50LCBtYWtpbmcgaXQgc28gdGhhdCBgZmF0YWxgIGFuZCBgYWxsb3dlZGAgYXJlIHByb3Blcmx5IHNldC4gSWYgYCFhbGxvd2VkYCB0aGVuIGEgY29uZGl0aW9uIGV4ZWN1dGVzIHdoZXJlIGBzYy0mZ3Q7bnJfcmVjbGFpbWVkICYjNDM7PSBTV0FQX0NMVVNURVJfTUFYO2AgLgoKVGhlIGNvcmUgY29uY2VybiBoZXJlIGlzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLCBhbmQgYW55IGNoYW5jZSBvZiBwYXNzaW5nIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludG8gdXNlciBzcGFjZS4gSSBjYW4gY29uZmlybSB0aGF0IGFsbCB2YXJpYWJsZXMsIGxpa2UgYGFsbG93ZWRgIGFuZCBgZmF0YWxgLCBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIHRoZXJlIGFyZSBubyBpbnN0YW5jZXMgb2YgdXNlci1zcGFjZSBjb3BpZXMgKGBjb3B5X3RvX3VzZXJgLCBzeXNjYWxsIHJldHVybiwgZXRjLikgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLiBGdXJ0aGVybW9yZSwgSSBzZWUgbm8gcmlza3kgc3RhY2svaGVhcCBidWZmZXIgbWFuaXB1bGF0aW9ucyB0aGF0IGNvdWxkIGxlYXZlIG1lbW9yeSB1bmluaXRpYWxpemVkLgoKTm93LCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYS4KCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOioqIE5vcGUuIE5vdGhpbmcgaGVyZSB0aGF0JiMzOTtzIGxlYWtpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZS4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogTm8uIEFsbCBicmFuY2hpbmcgZGVjaXNpb25zIHJlbHkgb24gdmFyaWFibGVzIHRoYXQgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIGFsbCBmaWVsZHMgYXJlIHNhZmVseSB6ZXJvLWFsbG9jYXRlZCBvciBvdGhlcndpc2UgaW5pdGlhbGl6ZWQuCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyB1c2VkIGxhdGVyOioqIE5vdCBoZXJlLiBUaGUgc3RydWN0dXJlcyBhbmQgdGhlaXIgZmllbGRzIGFyZSBwcm9wZXJseSBzZXQgdXAuCjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhOioqIE5vdCBhcHBsaWNhYmxlLiBUaGVyZSYjMzk7cyBubyBtYW5pcHVsYXRpb24gb2YgZXhpc3RpbmcgYnVmZmVycyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgdGhyb3VnaCBib3VuZHMgaXNzdWVzLgoKR2l2ZW4gdGhpcyB0aG9yb3VnaCByZXZpZXcgYWdhaW5zdCB0aGUgTmVlZHNLTVNBTiBjcml0ZXJpYSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0ICoqS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLioqIFN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIHdvdWxkIGJlIHRoZSBhcHByb3ByaWF0ZSB0b29scyB0byBjaGVjayBmb3IgY29uY3VycmVuY3kvbG9ja2luZy9yZWZlcmVuY2UvbWVtb3J5IHNhZmV0eSBwcm9ibGVtcy4gVGhlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyZSBtaW5pbWFsIGluIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcGVyLWxydXZlYyBpc29sYXRpb24gYWNjb3VudGluZyAoYG5yX2lzb2xhdGVkYCkgYW5kIGlzb2xhdGlvbiB0aHJvdHRsaW5nIChgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZGAsIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXNgKSBmb3IgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFpbS5cblxuQW5hbHlzaXMgYWdhaW5zdCBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuMS4gVXNlci1zcGFjZSBsZWFrczogTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBleHBvc2VkIHZpYSBpb2N0bHMvc3lzZnMvbmV0bGluay9CUEYgYnVmZmVycy5cbjIuIFVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOiBBbGwgYWRkZWQgbG9jYWwgdmFyaWFibGVzIChgYWxsb3dlZGAsIGBmYXRhbGAsIGBzdGFsbGVkYCkgYW5kIHN0cnVjdCBmaWVsZHMgKGBucl9pc29sYXRlZGApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBhbmQgbWFuYWdlZCAoZS5nLiwgYCpmYXRhbGAgaXMgaW5pdGlhbGl6ZWQgdG8gZmFsc2UgdXBvbiBlbnRlcmluZyBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzKClgLCBgc3RydWN0IGxydXZlY2AgbWVtb3J5IGlzIHplcm8tYWxsb2NhdGVkIGR1cmluZyBub2RlL21lbWNnIGluaXRpYWxpemF0aW9uKS5cbjMuIEJ1ZmZlciBib3VuZHMgLyBtZW1vcnkgaGFuZGxpbmc6IFRoZSBwYXRjaCBvbmx5IGFkanVzdHMgcmVjbGFpbWVyIHNjaGVkdWxpbmcsIHRocm90dGxpbmcsIGFuZCBpc29sYXRpb24gY291bnRlcnMgd2l0aG91dCB0b3VjaGluZyB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3MsIHZhcmlhYmxlLWxlbmd0aCBidWZmZXJzLCBvciBzdHJ1Y3QgcGFkZGluZy5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCByZWxhdGUgdG8gcmVjbGFpbSB0aHJvdHRsaW5nLCBjb25jdXJyZW5jeSwgbG9ja2luZywgb3IgY291bnRlciBpbWJhbGFuY2VzLCB3aGljaCBhcmUgaGFuZGxlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIChMT0NLREVQLCBLQVNBTiwgV0FSTl9PTikuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHBlci1scnV2ZWMgaXNvbGF0aW9uIGFjY291bnRpbmcgKGBucl9pc29sYXRlZGApIGFuZCBpc29sYXRpb24gdGhyb3R0bGluZyAoYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRgLCBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYCkgZm9yIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0uXG5cbkFuYWx5c2lzIGFnYWluc3QgS01TQU4gYXBwbGljYWJpbGl0eTpcbjEuIFVzZXItc3BhY2UgbGVha3M6IE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgZXhwb3NlZCB2aWEgaW9jdGxzL3N5c2ZzL25ldGxpbmsvQlBGIGJ1ZmZlcnMuXG4yLiBVbmluaXRpYWxpemVkIHZhcmlhYmxlczogQWxsIGFkZGVkIGxvY2FsIHZhcmlhYmxlcyAoYGFsbG93ZWRgLCBgZmF0YWxgLCBgc3RhbGxlZGApIGFuZCBzdHJ1Y3QgZmllbGRzIChgbnJfaXNvbGF0ZWRgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIG1hbmFnZWQgKGUuZy4sIGAqZmF0YWxgIGlzIGluaXRpYWxpemVkIHRvIGZhbHNlIHVwb24gZW50ZXJpbmcgYHRocm90dGxlX2V2aWN0YWJsZV90eXBlcygpYCwgYHN0cnVjdCBscnV2ZWNgIG1lbW9yeSBpcyB6ZXJvLWFsbG9jYXRlZCBkdXJpbmcgbm9kZS9tZW1jZyBpbml0aWFsaXphdGlvbikuXG4zLiBCdWZmZXIgYm91bmRzIC8gbWVtb3J5IGhhbmRsaW5nOiBUaGUgcGF0Y2ggb25seSBhZGp1c3RzIHJlY2xhaW1lciBzY2hlZHVsaW5nLCB0aHJvdHRsaW5nLCBhbmQgaXNvbGF0aW9uIGNvdW50ZXJzIHdpdGhvdXQgdG91Y2hpbmcgdW5pbml0aWFsaXplZCBidWZmZXIgYWNjZXNzLCB2YXJpYWJsZS1sZW5ndGggYnVmZmVycywgb3Igc3RydWN0IHBhZGRpbmcuXG5cbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgcmVsYXRlIHRvIHJlY2xhaW0gdGhyb3R0bGluZywgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIGNvdW50ZXIgaW1iYWxhbmNlcywgd2hpY2ggYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyAoTE9DS0RFUCwgS0FTQU4sIFdBUk5fT04pLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMzoxNjo0Ny4zMzQ0Mjg0NjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODc3MjQ2MDA4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aHJvdHRsZV9ldmljdGFibGVfdHlwZXNcIixcbiAgICBcImxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRcIixcbiAgICBcImlzb2xhdGVfZm9saW9zXCIsXG4gICAgXCJldmljdF9mb2xpb3NcIixcbiAgICBcImxydV9nZW5fc2VxX3dyaXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBlci1scnV2ZWMgaXNvbGF0aW9uIGFjY291bnRpbmcgKGBucl9pc29sYXRlZGApIGFuZCBpc29sYXRpb24gdGhyb3R0bGluZyAoYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRgLCBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYCkgZm9yIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0uXFxuXFxuQW5hbHlzaXMgYWdhaW5zdCBLTVNBTiBhcHBsaWNhYmlsaXR5OlxcbjEuIFVzZXItc3BhY2UgbGVha3M6IE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgZXhwb3NlZCB2aWEgaW9jdGxzL3N5c2ZzL25ldGxpbmsvQlBGIGJ1ZmZlcnMuXFxuMi4gVW5pbml0aWFsaXplZCB2YXJpYWJsZXM6IEFsbCBhZGRlZCBsb2NhbCB2YXJpYWJsZXMgKGBhbGxvd2VkYCwgYGZhdGFsYCwgYHN0YWxsZWRgKSBhbmQgc3RydWN0IGZpZWxkcyAoYG5yX2lzb2xhdGVkYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFuZCBtYW5hZ2VkIChlLmcuLCBgKmZhdGFsYCBpcyBpbml0aWFsaXplZCB0byBmYWxzZSB1cG9uIGVudGVyaW5nIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKWAsIGBzdHJ1Y3QgbHJ1dmVjYCBtZW1vcnkgaXMgemVyby1hbGxvY2F0ZWQgZHVyaW5nIG5vZGUvbWVtY2cgaW5pdGlhbGl6YXRpb24pLlxcbjMuIEJ1ZmZlciBib3VuZHMgLyBtZW1vcnkgaGFuZGxpbmc6IFRoZSBwYXRjaCBvbmx5IGFkanVzdHMgcmVjbGFpbWVyIHNjaGVkdWxpbmcsIHRocm90dGxpbmcsIGFuZCBpc29sYXRpb24gY291bnRlcnMgd2l0aG91dCB0b3VjaGluZyB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3MsIHZhcmlhYmxlLWxlbmd0aCBidWZmZXJzLCBvciBzdHJ1Y3QgcGFkZGluZy5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIHJlbGF0ZSB0byByZWNsYWltIHRocm90dGxpbmcsIGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBjb3VudGVyIGltYmFsYW5jZXMsIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgKExPQ0tERVAsIEtBU0FOLCBXQVJOX09OKS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGlzb2xhdGVkIGZvbGlvIGFjY291bnRpbmcgYW5kIHJlY2xhaW0gdGhyb3R0bGluZyBmb3IgTXVsdGktR2VuIExSVSAoTUdMUlUpIGluIG1tL3Ztc2Nhbi5jLCBpbXBsZW1lbnRpbmcgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZCgpIGFuZCB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBmb2xpbyBpc29sYXRpb24gZHVyaW5nIG1lbW9yeSBwcmVzc3VyZSBhbmQgZGlyZWN0IHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMzoxNjo0Ny4zMzQ0MzMyODlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzYxNTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDgzNmQ5NjQzM2MwZWQ3NmQwNzExMjg5N2JkZjI2NjRiMWMyODc4MTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAwMzoxNjo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbmluZGV4IDk0ZjljM2ZmNTQxNjAuLjgxOWI2YzA1OTExNmUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5AQCAtNTgwLDYgKzU4MCw4IEBAIHN0cnVjdCBscnVfZ2VuX2ZvbGlvIHtcXG4gXFx0LyogY2FuIGJlIG1vZGlmaWVkIHdpdGhvdXQgaG9sZGluZyB0aGUgTFJVIGxvY2sgKi9cXG4gXFx0YXRvbWljX2xvbmdfdCBldmljdGVkW05SX0hJU1RfR0VOU11bQU5PTl9BTkRfRklMRV1bTUFYX05SX1RJRVJTXTtcXG4gXFx0YXRvbWljX2xvbmdfdCByZWZhdWx0ZWRbTlJfSElTVF9HRU5TXVtBTk9OX0FORF9GSUxFXVtNQVhfTlJfVElFUlNdO1xcbitcXHQvKiB0aGUgbnVtYmVyIG9mIGZvbGlvcyBpc29sYXRlZCBmcm9tIHRoaXMgbHJ1dmVjIGFuZCBiZWluZyByZWNsYWltZWQgKi9cXG4rXFx0YXRvbWljX2xvbmdfdCBucl9pc29sYXRlZFtBTk9OX0FORF9GSUxFXTtcXG4gXFx0Lyogd2hldGhlciB0aGUgbXVsdGktZ2VuIExSVSBpcyBlbmFibGVkICovXFxuIFxcdGJvb2wgZW5hYmxlZDtcXG4gXFx0LyogdGhlIG1lbWNnIGdlbmVyYXRpb24gdGhpcyBscnVfZ2VuX2ZvbGlvIGJlbG9uZ3MgdG8gKi9cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGYxMTQ5MWVlOWVkNWMuLjIxMTgzOWQxMDkwOWEgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC00MTUxLDI1ICs0MTUxLDM0IEBAIHN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2xcXG4gXFx0c2MtXFx1MDAzZXByaW9yaXR5ID0gY2xhbXAocHJpb3JpdHksIERFRl9QUklPUklUWSAvIDIsIERFRl9QUklPUklUWSk7XFxuIH1cXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY19ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxcbiB7XFxuLVxcdGludCBnZW4sIHR5cGUsIHpvbmU7XFxuK1xcdGludCBnZW4sIHpvbmU7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc2VxLCB0b3RhbCA9IDA7XFxuIFxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuIFxcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XFxuIFxcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XFxuIFxcbi1cXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7XFxuLVxcdFxcdGZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxIFxcdTAwM2M9IG1heF9zZXE7IHNlcSsrKSB7XFxuLVxcdFxcdFxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcXG4tXFx0XFx0XFx0Zm9yICh6b25lID0gMDsgem9uZSBcXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKVxcbi1cXHRcXHRcXHRcXHR0b3RhbCArPSBtYXgoUkVBRF9PTkNFKGxydWdlbi1cXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTtcXG4tXFx0XFx0fVxcbitcXHRmb3IgKHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSBcXHUwMDNjPSBtYXhfc2VxOyBzZXErKykge1xcbitcXHRcXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XFxuK1xcdFxcdGZvciAoem9uZSA9IDA7IHpvbmUgXFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUrKylcXG4rXFx0XFx0XFx0dG90YWwgKz0gbWF4KFJFQURfT05DRShscnVnZW4tXFx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiB0b3RhbDtcXG4gfVxcbiBcXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyB0b3RhbCA9IDA7XFxuK1xcdGludCB0eXBlO1xcbitcXG4rXFx0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUodHlwZSwgc3dhcHBpbmVzcylcXG4rXFx0XFx0dG90YWwgKz0gbHJ1dmVjX3R5cGVfZXZpY3RhYmxlX3NpemUobHJ1dmVjLCB0eXBlKTtcXG4rXFxuK1xcdHJldHVybiB0b3RhbDtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgbHJ1dmVjX2lzX3NpemFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHRvdGFsO1xcbkBAIC00ODM4LDE1ICs0ODQ3LDEyOCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4gXFx0cmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKFxcdTAwMjZzcCwgXFx1MDAyNnB2KTtcXG4gfVxcbiBcXG4rLypcXG4rICogVGhlIE1HTFJVIGNvdW50ZXJwYXJ0IHRvIHRvb19tYW55X2lzb2xhdGVkKCkuXFxuKyAqXFxuKyAqIHRvb19tYW55X2lzb2xhdGVkKCkgY29tcGFyZXMgbm9kZS13aWRlIGlzb2xhdGVkIGNvdW50cyBhZ2FpbnN0XFxuKyAqIG5vZGUtd2lkZSBpbmFjdGl2ZSBzaXplcy4gSXQgcHJlZGF0ZXMgcGVyLW1lbWNnIExSVSBsaXN0cywgd2hpY2hcXG4rICogbW92ZWQgaXNvbGF0aW9uIHRvIHBlci1scnV2ZWMgZ3JhbnVsYXJpdHkuIE1HTFJVIHJlY2xhaW1lcnMgY29udGVuZFxcbisgKiBwZXIgbHJ1dmVjLCBzbyB0aGlzIGNoZWNrIGlzIHBlciBscnV2ZWMgYXMgd2VsbCwgYW5kIGlzb2xhdGlvbiBpblxcbisgKiBvbmUgbWVtY2cgZG9lcyBub3QgdGhyb3R0bGUgcmVjbGFpbSBpbiBhbm90aGVyLlxcbisgKlxcbisgKiBUaGUgbGVnYWN5IHRocmVzaG9sZCwgdGhlIHNpemUgb2YgdGhlIGluYWN0aXZlIGxpc3QsIGlzIG5vdCB1c2FibGVcXG4rICogaGVyZSBlaXRoZXI6IGluIE1HTFJVIHRoZSBpbmFjdGl2ZSBjb3VudGVycyBhcmUgb25seSBhIGNvbXBhdGliaWxpdHlcXG4rICogc2hpbSAtIHRoZXkganVtcCBhcm91bmQgd2hlbiBzd2FwIHJ1bnMgb3V0IG9yIGEgbWVtY2cgaGl0cyBpdHMgc3dhcFxcbisgKiBsaW1pdCwgYW5kIHByb2FjdGl2ZSBhZ2luZyBjYW4gaW5mbGF0ZSB0aGVtLiBDb21wYXJlIGFnYWluc3QgdGhlXFxuKyAqIHRvdGFsIG51bWJlciBvZiBldmljdGFibGUgcGFnZXMgb2YgdGhlIHR5cGUgZGl2aWRlZCBieSBNSU5fTlJfR0VOUyxcXG4rICogYXBwcm94aW1hdGluZyB0aGUgc2l6ZSBvZiBvbmUgZ2VuZXJhdGlvbiAtIHRoZSBzYW1lIHVuaXQgdGhlXFxuKyAqIG9yaWdpbmFsIE1HTFJVIGFnaW5nIGhldXJpc3RpY3MgdXNlZC5cXG4rICovXFxuK3N0YXRpYyBib29sIGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBpc29sYXRlZCwgZXZpY3RhYmxlO1xcbitcXG4rXFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICghd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzYykpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlzb2xhdGVkID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW4ubnJfaXNvbGF0ZWRbdHlwZV0pO1xcbitcXHRldmljdGFibGUgPSBscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShscnV2ZWMsIHR5cGUpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogR0ZQX05PSU8vR0ZQX05PRlMgY2FsbGVycyBhcmUgYWxsb3dlZCB0byBpc29sYXRlIG1vcmUgcGFnZXMsIHNvXFxuK1xcdCAqIHRoZXkgd29uJ3QgYmUgYmxvY2tlZCBieSBub3JtYWwgZGlyZWN0LXJlY2xhaW1lcnMsIGZvcm1pbmcgYVxcbitcXHQgKiBjaXJjdWxhciBkZWFkbG9jay5cXG4rXFx0ICovXFxuK1xcdGlmIChnZnBfaGFzX2lvX2ZzKHNjLVxcdTAwM2VnZnBfbWFzaykpXFxuK1xcdFxcdGV2aWN0YWJsZSBcXHUwMDNlXFx1MDAzZT0gMztcXG4rXFxuK1xcdHJldHVybiBpc29sYXRlZCBcXHUwMDNlIGV2aWN0YWJsZSAvIE1JTl9OUl9HRU5TO1xcbit9XFxuK1xcbisvKlxcbisgKiBVbmxpa2UgdGhlIGxlZ2FjeSBwYXRoLCB3aGVyZSB0aGUgTFJVIGxpc3QgdG8gaXNvbGF0ZSBmcm9tIGlzIGtub3duXFxuKyAqIGJlZm9yZSBpc29sYXRpb24sIGlzb2xhdGVfZm9saW9zKCkgcGlja3MgdGhlIHR5cGUgZnJvbSB0aGUgcmVmYXVsdFxcbisgKiBmZWVkYmFjayBhbmQgbWF5IGZhbGwgYmFjayB0byB0aGUgb3RoZXIgb25lLiBUaGVyZWZvcmUsIGluc3RlYWQgb2ZcXG4rICogdGhyb3R0bGluZyBvbiBhIHNpbmdsZSB0eXBlLCBjb2xsZWN0IHRoZSBldmljdGFibGUgdHlwZXMgdGhhdCBkbyBub3RcXG4rICogaGF2ZSB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MsIGFuZCBvbmx5IHNsZWVwIHdoZW4gYWxsIG9mIHRoZW0gZG8uXFxuKyAqXFxuKyAqIFJldHVybnMgdGhlIG1hc2sgb2YgdGhlIHR5cGVzIGlzb2xhdGVfZm9saW9zKCkgbWF5IGlzb2xhdGUgZnJvbSwgb3JcXG4rICogMCBpZiByZWNsYWltIHNob3VsZCBzdG9wLiBBbHNvIHNldHMgQGZhdGFsIHRvIHRlbGwgdGhlIGNhbGxlciB0aGF0XFxuKyAqIHRoZSB0YXNrIHJlY2VpdmVkIGEgZmF0YWwgc2lnbmFsIHdoaWxlIHdhaXRpbmcuXFxuKyAqL1xcbitzdGF0aWMgdW5zaWduZWQgaW50IHRocm90dGxlX2V2aWN0YWJsZV90eXBlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgaW50IHN3YXBwaW5lc3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgYm9vbCAqZmF0YWwpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGFsbG93ZWQ7XFxuK1xcdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xcbitcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0KmZhdGFsID0gZmFsc2U7XFxuK1xcbitcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdGFsbG93ZWQgPSAwO1xcbitcXHRcXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZShpLCBzd2FwcGluZXNzKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEEgdHlwZSB3aXRoIG5vIGV2aWN0YWJsZSBmb2xpb3MgaGFzIG5vdGhpbmcgdG9cXG4rXFx0XFx0XFx0ICogaXNvbGF0ZS4gRG9uJ3QgYWxsb3cgaXQsIG90aGVyd2lzZSByZWNsYWltIGNhbiBiZVxcbitcXHRcXHRcXHQgKiByZWRpcmVjdGVkIHRvIGl0IGFuZCBzcGluIG1ha2luZyBubyBwcm9ncmVzcywgZS5nLlxcbitcXHRcXHRcXHQgKiB3aGVuIHRoZSBvbmx5IHR5cGUgd2l0aCBmb2xpb3MgaXMgb3Zlci1pc29sYXRlZC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmICghbHJ1dmVjX3R5cGVfZXZpY3RhYmxlX3NpemUobHJ1dmVjLCBpKSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRpZiAoIWxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQobHJ1dmVjLCBpLCBzYykpXFxuK1xcdFxcdFxcdFxcdGFsbG93ZWQgfD0gQklUKGkpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoYWxsb3dlZCkge1xcbitcXHRcXHRcXHQvKiBXYWtlIHVwIHJlY2xhaW1lcnMgd2FpdGluZyBvbiB0aGUgaXNvbGF0aW9uIHRvIGdvIGRvd24uICovXFxuK1xcdFxcdFxcdHdha2VfdGhyb3R0bGVfaXNvbGF0ZWQocGdkYXQpO1xcbitcXHRcXHRcXHRyZXR1cm4gYWxsb3dlZDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQWxsIGV2aWN0YWJsZSB0eXBlcyBhcmUgb3Zlci1pc29sYXRlZC4gTGlrZSB0aGUgbGVnYWN5XFxuK1xcdFxcdCAqIHBhdGgsIHdhaXQgb25jZSBmb3IgY29uY3VycmVudCByZWNsYWltZXJzIHRvIHB1dCB0aGVpclxcbitcXHRcXHQgKiBpc29sYXRlZCBmb2xpb3MgYmFjazsgZ2l2ZSB1cCBpZiB0aGF0IG1ha2VzIG5vIHByb2dyZXNzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHN0YWxsZWQpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0XFx0c3RhbGxlZCA9IHRydWU7XFxuK1xcdFxcdHJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7XFxuK1xcbitcXHRcXHQvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovXFxuK1xcdFxcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbitcXHRcXHRcXHQqZmF0YWwgPSB0cnVlO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdFxcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWQsXFxuLVxcdFxcdFxcdCAgaW50ICppc29sYXRlX3R5cGUsIGludCAqaXNvbGF0ZV9zY2FubmVkKVxcbitcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBhbGxvd2VkLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbitcXHRcXHRcXHQgIGludCAqaXNvbGF0ZWQsIGludCAqaXNvbGF0ZV90eXBlLCBpbnQgKmlzb2xhdGVfc2Nhbm5lZClcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFx0aW50IHRvdGFsX3NjYW5uZWQgPSAwO1xcbiBcXHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBwcmVmZXJyZWQgdHlwZSBtYXkgaGF2ZSBiZWVuIGV4Y2x1ZGVkIGJ5XFxuK1xcdCAqIHRocm90dGxlX2V2aWN0YWJsZV90eXBlcygpOyBzdGFydCBmcm9tIHRoZSBvdGhlciBvbmUuXFxuK1xcdCAqL1xcbitcXHRpZiAoIShhbGxvd2VkIFxcdTAwMjYgQklUKHR5cGUpKSlcXG4rXFx0XFx0dHlwZSA9ICF0eXBlO1xcbitcXG4gXFx0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUoaSwgc3dhcHBpbmVzcykge1xcbiBcXHRcXHRpbnQgc2Nhbm5lZDtcXG4gXFx0XFx0aW50IHRpZXIgPSBnZXRfdGllcl9pZHgobHJ1dmVjLCB0eXBlKTtcXG5AQCAtNDg2Myw5ICs0OTg1LDEwIEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIElmIHNjYW5uZWQgXFx1MDAzZSAwIGFuZCBpc29sYXRlZCA9PSAwLCBhdm9pZCBmYWxsaW5nIGJhY2sgdG8gdGhlXFxuIFxcdFxcdCAqIG90aGVyIHR5cGUsIGFzIHRoaXMgdHlwZSByZW1haW5zIHN1ZmZpY2llbnQuIEZhbGxpbmcgYmFja1xcbi1cXHRcXHQgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLlxcbitcXHRcXHQgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLiBPbmx5XFxuK1xcdFxcdCAqIGZhbGwgYmFjayB0byBhIHR5cGUgdGhhdCBpcyBub3QgdGhyb3R0bGVkLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCFzY2FubmVkKVxcbitcXHRcXHRpZiAoIXNjYW5uZWQgXFx1MDAyNlxcdTAwMjYgKGFsbG93ZWQgXFx1MDAyNiBCSVQoIXR5cGUpKSlcXG4gXFx0XFx0XFx0dHlwZSA9ICF0eXBlO1xcbiBcXHR9XFxuIFxcbkBAIC00ODg4LDE1ICs1MDExLDM2IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcXG4rXFx0dW5zaWduZWQgaW50IGFsbG93ZWQ7XFxuK1xcdGJvb2wgZmF0YWw7XFxuK1xcbitcXHRhbGxvd2VkID0gdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzKGxydXZlYywgc3dhcHBpbmVzcywgc2MsIFxcdTAwMjZmYXRhbCk7XFxuK1xcdGlmICghYWxsb3dlZCkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIExpa2UgdGhlIGxlZ2FjeVxcbitcXHRcXHQgKiBwYXRoLCBwcmV0ZW5kIHNvbWUgcGFnZXMgd2VyZSByZWNsYWltZWQgc28gcmVjbGFpbVxcbitcXHRcXHQgKiB1bndpbmRzIHF1aWNrbHkgaW5zdGVhZCBvZiBsb29waW5nIGJhY2sgaW50byB0aGVcXG4rXFx0XFx0ICogdGhyb3R0bGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoZmF0YWwpXFxuK1xcdFxcdFxcdHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgKz0gU1dBUF9DTFVTVEVSX01BWDtcXG4rXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuIFxcbiBcXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcXG4gXFxuIFxcdC8qIEluIGNhc2UgZm9saW8gZGVsZXRpb24gbGVmdCBlbXB0eSBvbGQgZ2VucywgZmx1c2ggdGhlbSAqL1xcbiBcXHR0cnlfdG9faW5jX21pbl9zZXEobHJ1dmVjLCBzd2FwcGluZXNzKTtcXG4gXFxuLVxcdHNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLFxcbitcXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcywgYWxsb3dlZCxcXG4gXFx0XFx0XFx0XFx0IFxcdTAwMjZsaXN0LCBcXHUwMDI2aXNvbGF0ZWQsIFxcdTAwMjZ0eXBlLCBcXHUwMDI2dHlwZV9zY2FubmVkKTtcXG4gXFx0bnJfaXNvbGF0ZWQgPSBpc29sYXRlZDtcXG4rXFx0aWYgKG5yX2lzb2xhdGVkKSB7XFxuK1xcdFxcdF9fbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIG5yX2lzb2xhdGVkKTtcXG4rXFx0XFx0YXRvbWljX2xvbmdfYWRkKG5yX2lzb2xhdGVkLCBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW4ubnJfaXNvbGF0ZWRbdHlwZV0pO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqL1xcbiBcXHRpZiAoc2Nhbm5lZClcXG5AQCAtNDk1OSw2ICs1MTAzLDkgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdGdvdG8gcmV0cnk7XFxuIFxcdH1cXG4gXFxuK1xcdGF0b21pY19sb25nX3N1Yihucl9pc29sYXRlZCwgXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuLm5yX2lzb2xhdGVkW3R5cGVdKTtcXG4rXFx0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIHR5cGUsIC1ucl9pc29sYXRlZCk7XFxuK1xcbiBcXHRpZiAobnJfaXNvbGF0ZWQgXFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXFxuIFxcdFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICsgdHlwZSxcXG4gXFx0XFx0XFx0XFx0IG5yX2lzb2xhdGVkIC0gdG90YWxfcmVjbGFpbWVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTY6NDcuODcyODE1MTI5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MzgwNzMxNDQxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aHJvdHRsZV9ldmljdGFibGVfdHlwZXNcIixcbiAgICBcImxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRcIixcbiAgICBcImlzb2xhdGVfZm9saW9zXCIsXG4gICAgXCJldmljdF9mb2xpb3NcIixcbiAgICBcImxydV9nZW5fc2VxX3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBpc29sYXRlZCBmb2xpbyBhY2NvdW50aW5nIGFuZCByZWNsYWltIHRocm90dGxpbmcgZm9yIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBpbiBtbS92bXNjYW4uYywgaW1wbGVtZW50aW5nIGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQoKSBhbmQgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzKCkgdG8gcHJldmVudCBleGNlc3NpdmUgZm9saW8gaXNvbGF0aW9uIGR1cmluZyBtZW1vcnkgcHJlc3N1cmUgYW5kIGRpcmVjdCByZWNsYWltLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODM2ZDk2NDMzYzBlZDc2ZDA3MTEyODk3YmRmMjY2NGIxYzI4NzgxN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDM6MTY6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuaW5kZXggOTRmOWMzZmY1NDE2MC4uODE5YjZjMDU5MTE2ZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbkBAIC01ODAsNiArNTgwLDggQEAgc3RydWN0IGxydV9nZW5fZm9saW8ge1xuIFx0LyogY2FuIGJlIG1vZGlmaWVkIHdpdGhvdXQgaG9sZGluZyB0aGUgTFJVIGxvY2sgKi9cbiBcdGF0b21pY19sb25nX3QgZXZpY3RlZFtOUl9ISVNUX0dFTlNdW0FOT05fQU5EX0ZJTEVdW01BWF9OUl9USUVSU107XG4gXHRhdG9taWNfbG9uZ190IHJlZmF1bHRlZFtOUl9ISVNUX0dFTlNdW0FOT05fQU5EX0ZJTEVdW01BWF9OUl9USUVSU107XG4rXHQvKiB0aGUgbnVtYmVyIG9mIGZvbGlvcyBpc29sYXRlZCBmcm9tIHRoaXMgbHJ1dmVjIGFuZCBiZWluZyByZWNsYWltZWQgKi9cbitcdGF0b21pY19sb25nX3QgbnJfaXNvbGF0ZWRbQU5PTl9BTkRfRklMRV07XG4gXHQvKiB3aGV0aGVyIHRoZSBtdWx0aS1nZW4gTFJVIGlzIGVuYWJsZWQgKi9cbiBcdGJvb2wgZW5hYmxlZDtcbiBcdC8qIHRoZSBtZW1jZyBnZW5lcmF0aW9uIHRoaXMgbHJ1X2dlbl9mb2xpbyBiZWxvbmdzIHRvICovXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggZjExNDkxZWU5ZWQ1Yy4uMjExODM5ZDEwOTA5YSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTQxNTEsMjUgKzQxNTEsMzQgQEAgc3RhdGljIHZvaWQgc2V0X2luaXRpYWxfcHJpb3JpdHkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbFxuIFx0c2MtXHUwMDNlcHJpb3JpdHkgPSBjbGFtcChwcmlvcml0eSwgREVGX1BSSU9SSVRZIC8gMiwgREVGX1BSSU9SSVRZKTtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3R5cGVfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbiB7XG4tXHRpbnQgZ2VuLCB0eXBlLCB6b25lO1xuK1x0aW50IGdlbiwgem9uZTtcbiBcdHVuc2lnbmVkIGxvbmcgc2VxLCB0b3RhbCA9IDA7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiBcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XG4gXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuIFxuLVx0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUodHlwZSwgc3dhcHBpbmVzcykge1xuLVx0XHRmb3IgKHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSBcdTAwM2M9IG1heF9zZXE7IHNlcSsrKSB7XG4tXHRcdFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xuLVx0XHRcdGZvciAoem9uZSA9IDA7IHpvbmUgXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKVxuLVx0XHRcdFx0dG90YWwgKz0gbWF4KFJFQURfT05DRShscnVnZW4tXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTtcbi1cdFx0fVxuK1x0Zm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXErKykge1xuK1x0XHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4rXHRcdGZvciAoem9uZSA9IDA7IHpvbmUgXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKVxuK1x0XHRcdHRvdGFsICs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gdG90YWw7XG4gfVxuIFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY19ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgdG90YWwgPSAwO1xuK1x0aW50IHR5cGU7XG4rXG4rXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKVxuK1x0XHR0b3RhbCArPSBscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShscnV2ZWMsIHR5cGUpO1xuK1xuK1x0cmV0dXJuIHRvdGFsO1xuK31cbitcbiBzdGF0aWMgYm9vbCBscnV2ZWNfaXNfc2l6YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgdG90YWw7XG5AQCAtNDgzOCwxNSArNDg0NywxMjggQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4gXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KTtcbiB9XG4gXG4rLypcbisgKiBUaGUgTUdMUlUgY291bnRlcnBhcnQgdG8gdG9vX21hbnlfaXNvbGF0ZWQoKS5cbisgKlxuKyAqIHRvb19tYW55X2lzb2xhdGVkKCkgY29tcGFyZXMgbm9kZS13aWRlIGlzb2xhdGVkIGNvdW50cyBhZ2FpbnN0XG4rICogbm9kZS13aWRlIGluYWN0aXZlIHNpemVzLiBJdCBwcmVkYXRlcyBwZXItbWVtY2cgTFJVIGxpc3RzLCB3aGljaFxuKyAqIG1vdmVkIGlzb2xhdGlvbiB0byBwZXItbHJ1dmVjIGdyYW51bGFyaXR5LiBNR0xSVSByZWNsYWltZXJzIGNvbnRlbmRcbisgKiBwZXIgbHJ1dmVjLCBzbyB0aGlzIGNoZWNrIGlzIHBlciBscnV2ZWMgYXMgd2VsbCwgYW5kIGlzb2xhdGlvbiBpblxuKyAqIG9uZSBtZW1jZyBkb2VzIG5vdCB0aHJvdHRsZSByZWNsYWltIGluIGFub3RoZXIuXG4rICpcbisgKiBUaGUgbGVnYWN5IHRocmVzaG9sZCwgdGhlIHNpemUgb2YgdGhlIGluYWN0aXZlIGxpc3QsIGlzIG5vdCB1c2FibGVcbisgKiBoZXJlIGVpdGhlcjogaW4gTUdMUlUgdGhlIGluYWN0aXZlIGNvdW50ZXJzIGFyZSBvbmx5IGEgY29tcGF0aWJpbGl0eVxuKyAqIHNoaW0gLSB0aGV5IGp1bXAgYXJvdW5kIHdoZW4gc3dhcCBydW5zIG91dCBvciBhIG1lbWNnIGhpdHMgaXRzIHN3YXBcbisgKiBsaW1pdCwgYW5kIHByb2FjdGl2ZSBhZ2luZyBjYW4gaW5mbGF0ZSB0aGVtLiBDb21wYXJlIGFnYWluc3QgdGhlXG4rICogdG90YWwgbnVtYmVyIG9mIGV2aWN0YWJsZSBwYWdlcyBvZiB0aGUgdHlwZSBkaXZpZGVkIGJ5IE1JTl9OUl9HRU5TLFxuKyAqIGFwcHJveGltYXRpbmcgdGhlIHNpemUgb2Ygb25lIGdlbmVyYXRpb24gLSB0aGUgc2FtZSB1bml0IHRoZVxuKyAqIG9yaWdpbmFsIE1HTFJVIGFnaW5nIGhldXJpc3RpY3MgdXNlZC5cbisgKi9cbitzdGF0aWMgYm9vbCBscnVfZ2VuX3Rvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbit7XG4rXHR1bnNpZ25lZCBsb25nIGlzb2xhdGVkLCBldmljdGFibGU7XG4rXG4rXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKCF3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHNjKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aXNvbGF0ZWQgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW4ubnJfaXNvbGF0ZWRbdHlwZV0pO1xuK1x0ZXZpY3RhYmxlID0gbHJ1dmVjX3R5cGVfZXZpY3RhYmxlX3NpemUobHJ1dmVjLCB0eXBlKTtcbitcbitcdC8qXG4rXHQgKiBHRlBfTk9JTy9HRlBfTk9GUyBjYWxsZXJzIGFyZSBhbGxvd2VkIHRvIGlzb2xhdGUgbW9yZSBwYWdlcywgc29cbitcdCAqIHRoZXkgd29uJ3QgYmUgYmxvY2tlZCBieSBub3JtYWwgZGlyZWN0LXJlY2xhaW1lcnMsIGZvcm1pbmcgYVxuK1x0ICogY2lyY3VsYXIgZGVhZGxvY2suXG4rXHQgKi9cbitcdGlmIChnZnBfaGFzX2lvX2ZzKHNjLVx1MDAzZWdmcF9tYXNrKSlcbitcdFx0ZXZpY3RhYmxlIFx1MDAzZVx1MDAzZT0gMztcbitcbitcdHJldHVybiBpc29sYXRlZCBcdTAwM2UgZXZpY3RhYmxlIC8gTUlOX05SX0dFTlM7XG4rfVxuK1xuKy8qXG4rICogVW5saWtlIHRoZSBsZWdhY3kgcGF0aCwgd2hlcmUgdGhlIExSVSBsaXN0IHRvIGlzb2xhdGUgZnJvbSBpcyBrbm93blxuKyAqIGJlZm9yZSBpc29sYXRpb24sIGlzb2xhdGVfZm9saW9zKCkgcGlja3MgdGhlIHR5cGUgZnJvbSB0aGUgcmVmYXVsdFxuKyAqIGZlZWRiYWNrIGFuZCBtYXkgZmFsbCBiYWNrIHRvIHRoZSBvdGhlciBvbmUuIFRoZXJlZm9yZSwgaW5zdGVhZCBvZlxuKyAqIHRocm90dGxpbmcgb24gYSBzaW5nbGUgdHlwZSwgY29sbGVjdCB0aGUgZXZpY3RhYmxlIHR5cGVzIHRoYXQgZG8gbm90XG4rICogaGF2ZSB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MsIGFuZCBvbmx5IHNsZWVwIHdoZW4gYWxsIG9mIHRoZW0gZG8uXG4rICpcbisgKiBSZXR1cm5zIHRoZSBtYXNrIG9mIHRoZSB0eXBlcyBpc29sYXRlX2ZvbGlvcygpIG1heSBpc29sYXRlIGZyb20sIG9yXG4rICogMCBpZiByZWNsYWltIHNob3VsZCBzdG9wLiBBbHNvIHNldHMgQGZhdGFsIHRvIHRlbGwgdGhlIGNhbGxlciB0aGF0XG4rICogdGhlIHRhc2sgcmVjZWl2ZWQgYSBmYXRhbCBzaWduYWwgd2hpbGUgd2FpdGluZy5cbisgKi9cbitzdGF0aWMgdW5zaWduZWQgaW50IHRocm90dGxlX2V2aWN0YWJsZV90eXBlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4rXHRcdFx0XHRcdCAgICAgaW50IHN3YXBwaW5lc3MsXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4rXHRcdFx0XHRcdCAgICAgYm9vbCAqZmF0YWwpXG4re1xuK1x0dW5zaWduZWQgaW50IGFsbG93ZWQ7XG4rXHRib29sIHN0YWxsZWQgPSBmYWxzZTtcbitcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbitcdGludCBpO1xuK1xuK1x0KmZhdGFsID0gZmFsc2U7XG4rXG4rXHRmb3IgKDs7KSB7XG4rXHRcdGFsbG93ZWQgPSAwO1xuK1x0XHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZShpLCBzd2FwcGluZXNzKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBBIHR5cGUgd2l0aCBubyBldmljdGFibGUgZm9saW9zIGhhcyBub3RoaW5nIHRvXG4rXHRcdFx0ICogaXNvbGF0ZS4gRG9uJ3QgYWxsb3cgaXQsIG90aGVyd2lzZSByZWNsYWltIGNhbiBiZVxuK1x0XHRcdCAqIHJlZGlyZWN0ZWQgdG8gaXQgYW5kIHNwaW4gbWFraW5nIG5vIHByb2dyZXNzLCBlLmcuXG4rXHRcdFx0ICogd2hlbiB0aGUgb25seSB0eXBlIHdpdGggZm9saW9zIGlzIG92ZXItaXNvbGF0ZWQuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKCFscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShscnV2ZWMsIGkpKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0aWYgKCFscnVfZ2VuX3Rvb19tYW55X2lzb2xhdGVkKGxydXZlYywgaSwgc2MpKVxuK1x0XHRcdFx0YWxsb3dlZCB8PSBCSVQoaSk7XG4rXHRcdH1cbitcbitcdFx0aWYgKGFsbG93ZWQpIHtcbitcdFx0XHQvKiBXYWtlIHVwIHJlY2xhaW1lcnMgd2FpdGluZyBvbiB0aGUgaXNvbGF0aW9uIHRvIGdvIGRvd24uICovXG4rXHRcdFx0d2FrZV90aHJvdHRsZV9pc29sYXRlZChwZ2RhdCk7XG4rXHRcdFx0cmV0dXJuIGFsbG93ZWQ7XG4rXHRcdH1cbitcbitcdFx0LypcbitcdFx0ICogQWxsIGV2aWN0YWJsZSB0eXBlcyBhcmUgb3Zlci1pc29sYXRlZC4gTGlrZSB0aGUgbGVnYWN5XG4rXHRcdCAqIHBhdGgsIHdhaXQgb25jZSBmb3IgY29uY3VycmVudCByZWNsYWltZXJzIHRvIHB1dCB0aGVpclxuK1x0XHQgKiBpc29sYXRlZCBmb2xpb3MgYmFjazsgZ2l2ZSB1cCBpZiB0aGF0IG1ha2VzIG5vIHByb2dyZXNzLlxuK1x0XHQgKi9cbitcdFx0aWYgKHN0YWxsZWQpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXG4rXHRcdHN0YWxsZWQgPSB0cnVlO1xuK1x0XHRyZWNsYWltX3Rocm90dGxlKHBnZGF0LCBWTVNDQU5fVEhST1RUTEVfSVNPTEFURUQpO1xuK1xuK1x0XHQvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovXG4rXHRcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuK1x0XHRcdCpmYXRhbCA9IHRydWU7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4gc3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcyxcbi1cdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWQsXG4tXHRcdFx0ICBpbnQgKmlzb2xhdGVfdHlwZSwgaW50ICppc29sYXRlX3NjYW5uZWQpXG4rXHRcdFx0ICB1bnNpZ25lZCBpbnQgYWxsb3dlZCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbitcdFx0XHQgIGludCAqaXNvbGF0ZWQsIGludCAqaXNvbGF0ZV90eXBlLCBpbnQgKmlzb2xhdGVfc2Nhbm5lZClcbiB7XG4gXHRpbnQgaTtcbiBcdGludCB0b3RhbF9zY2FubmVkID0gMDtcbiBcdGludCB0eXBlID0gZ2V0X3R5cGVfdG9fc2NhbihscnV2ZWMsIHN3YXBwaW5lc3MpO1xuIFxuK1x0LypcbitcdCAqIFRoZSBwcmVmZXJyZWQgdHlwZSBtYXkgaGF2ZSBiZWVuIGV4Y2x1ZGVkIGJ5XG4rXHQgKiB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKTsgc3RhcnQgZnJvbSB0aGUgb3RoZXIgb25lLlxuK1x0ICovXG4rXHRpZiAoIShhbGxvd2VkIFx1MDAyNiBCSVQodHlwZSkpKVxuK1x0XHR0eXBlID0gIXR5cGU7XG4rXG4gXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZShpLCBzd2FwcGluZXNzKSB7XG4gXHRcdGludCBzY2FubmVkO1xuIFx0XHRpbnQgdGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpO1xuQEAgLTQ4NjMsOSArNDk4NSwxMCBAQCBzdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHQvKlxuIFx0XHQgKiBJZiBzY2FubmVkIFx1MDAzZSAwIGFuZCBpc29sYXRlZCA9PSAwLCBhdm9pZCBmYWxsaW5nIGJhY2sgdG8gdGhlXG4gXHRcdCAqIG90aGVyIHR5cGUsIGFzIHRoaXMgdHlwZSByZW1haW5zIHN1ZmZpY2llbnQuIEZhbGxpbmcgYmFja1xuLVx0XHQgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLlxuK1x0XHQgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLiBPbmx5XG4rXHRcdCAqIGZhbGwgYmFjayB0byBhIHR5cGUgdGhhdCBpcyBub3QgdGhyb3R0bGVkLlxuIFx0XHQgKi9cbi1cdFx0aWYgKCFzY2FubmVkKVxuK1x0XHRpZiAoIXNjYW5uZWQgXHUwMDI2XHUwMDI2IChhbGxvd2VkIFx1MDAyNiBCSVQoIXR5cGUpKSlcbiBcdFx0XHR0eXBlID0gIXR5cGU7XG4gXHR9XG4gXG5AQCAtNDg4OCwxNSArNTAxMSwzNiBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdGJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4rXHR1bnNpZ25lZCBpbnQgYWxsb3dlZDtcbitcdGJvb2wgZmF0YWw7XG4rXG4rXHRhbGxvd2VkID0gdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzKGxydXZlYywgc3dhcHBpbmVzcywgc2MsIFx1MDAyNmZhdGFsKTtcbitcdGlmICghYWxsb3dlZCkge1xuK1x0XHQvKlxuK1x0XHQgKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIExpa2UgdGhlIGxlZ2FjeVxuK1x0XHQgKiBwYXRoLCBwcmV0ZW5kIHNvbWUgcGFnZXMgd2VyZSByZWNsYWltZWQgc28gcmVjbGFpbVxuK1x0XHQgKiB1bndpbmRzIHF1aWNrbHkgaW5zdGVhZCBvZiBsb29waW5nIGJhY2sgaW50byB0aGVcbitcdFx0ICogdGhyb3R0bGUuXG4rXHRcdCAqL1xuK1x0XHRpZiAoZmF0YWwpXG4rXHRcdFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkICs9IFNXQVBfQ0xVU1RFUl9NQVg7XG4rXG4rXHRcdHJldHVybiAwO1xuK1x0fVxuIFxuIFx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XG4gXG4gXHQvKiBJbiBjYXNlIGZvbGlvIGRlbGV0aW9uIGxlZnQgZW1wdHkgb2xkIGdlbnMsIGZsdXNoIHRoZW0gKi9cbiBcdHRyeV90b19pbmNfbWluX3NlcShscnV2ZWMsIHN3YXBwaW5lc3MpO1xuIFxuLVx0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsXG4rXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcywgYWxsb3dlZCxcbiBcdFx0XHRcdCBcdTAwMjZsaXN0LCBcdTAwMjZpc29sYXRlZCwgXHUwMDI2dHlwZSwgXHUwMDI2dHlwZV9zY2FubmVkKTtcbiBcdG5yX2lzb2xhdGVkID0gaXNvbGF0ZWQ7XG4rXHRpZiAobnJfaXNvbGF0ZWQpIHtcbitcdFx0X19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICsgdHlwZSxcbitcdFx0XHRcdCAgICAgIG5yX2lzb2xhdGVkKTtcbitcdFx0YXRvbWljX2xvbmdfYWRkKG5yX2lzb2xhdGVkLCBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuLm5yX2lzb2xhdGVkW3R5cGVdKTtcbitcdH1cbiBcbiBcdC8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovXG4gXHRpZiAoc2Nhbm5lZClcbkBAIC00OTU5LDYgKzUxMDMsOSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbiBcbitcdGF0b21pY19sb25nX3N1Yihucl9pc29sYXRlZCwgXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbi5ucl9pc29sYXRlZFt0eXBlXSk7XG4rXHRtb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICsgdHlwZSwgLW5yX2lzb2xhdGVkKTtcbitcbiBcdGlmIChucl9pc29sYXRlZCBcdTAwM2UgdG90YWxfcmVjbGFpbWVkKVxuIFx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIHR5cGUsXG4gXHRcdFx0XHQgbnJfaXNvbGF0ZWQgLSB0b3RhbF9yZWNsYWltZWQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTY6NDcuODcyODE2NjI5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODY4NTEwNzY5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1HTFJVIElzb2xhdGlvbiBUaHJvdHRsaW5nIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBoaXRzIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCBhbmQgYG1tL3Ztc2Nhbi5jYC4gSW1tZWRpYXRlbHksIEknbSB0aGlua2luZyBNR0xSVSwgd2hpY2ggaXMgYWx3YXlzIGludGVyZXN0aW5nLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB0aGUgZGV0YWlscy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRpbmcgc29tZSBpc29sYXRpb24gdGhyb3R0bGluZyBmb3IgTXVsdGktR2VuIExSVS5cblxuU3BlY2lmaWNhbGx5LCBpbiBgbW0vdm1zY2FuLmNgLCB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIHRyYWNraW5nIGlzb2xhdGVkIHBhZ2VzIGZvciB0aHJvdHRsaW5nLiBBIG5ldyBgYXRvbWljX2xvbmdfdCBucl9pc29sYXRlZFtBTk9OX0FORF9GSUxFXWAgZmllbGQgaXMgYmVpbmcgYWRkZWQgdG8gdGhlIGBscnVfZ2VuX2ZvbGlvYCBzdHJ1Y3QuIFdlIGhhdmUgYSBmZXcgbmV3IGZ1bmN0aW9ucyBhcyB3ZWxsOiBgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZGAsIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXNgLCBhbmQgdGhlcmUgYXJlIHVwZGF0ZXMgdG8gYGlzb2xhdGVfZm9saW9zYCBhbmQgYGV2aWN0X2ZvbGlvc2AuIFRoaXMgYWxsIHNlZW1zIHRvIGJlIGFib3V0IGltcGxlbWVudGluZyB0aGUgYWN0dWFsIHRocm90dGxpbmcgbWVjaGFuaXNtLiBUaGUgZ29hbCBpcyBsaWtlbHkgdG8gcHJldmVudCBhIHJ1bmF3YXkgc2l0dWF0aW9uIHdoZXJlIHRvbyBtYW55IHBhZ2VzIGFyZSBpc29sYXRlZCwgd2hpY2ggd291bGQgYmxvY2sgcHJvZ3Jlc3MuXG5cbk5vdywgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBJIHNob3VsZCBwcm9iYWJseSB1c2UgYGdyZXBwZXJgIG9yIGp1c3QganVtcCBpbnRvIGBtbS9LY29uZmlnYCB0byB2ZXJpZnkgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciBib3RoIE11bHRpLUdlbiBMUlUgKExSVV9HRU4sIHJpZ2h0PykgYW5kIHRoZSB2bXNjYW4gY29kZS4gR290dGEgbWFrZSBzdXJlIHdlJ3JlIG5vdCBicmVha2luZyBhbnkgcHJlLWV4aXN0aW5nIGNvbmZpZ3VyYXRpb25zIG9yIGVuYWJsaW5nIHRoaXMgaW4gYW4gdW5leHBlY3RlZCBzY2VuYXJpby4gTGV0J3Mgc2VlIGhvdyB0aGlzIGFsbCBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDUxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTY6NTYuNTU3OTI3OTM4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NjU5Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkxSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTE0MDMtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDUtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxMi1cXG5tbS9LY29uZmlnOjE0MTM6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxNC1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG5tbS9LY29uZmlnOjE0MTU6XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDE2LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWctMTQxOC1cXG5tbS9LY29uZmlnOjE0MTk6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MjAtXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbm1tL0tjb25maWc6MTQyMTpcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MjItXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZy0xNDI3LVxcbm1tL0tjb25maWc6MTQyODpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjktXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6MTQzMDpcXHRkZXBlbmRzIG9uIExSVV9HRU4gXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXFxubW0vS2NvbmZpZy0xNDMxLSMgfVxcbi0tXFxubW0vZm9saW8uYz0zMjI9c3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtMzUxLVxcbm1tL2ZvbGlvLmM6MzUyOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL2ZvbGlvLmMtMzUzLVxcbi0tXFxubW0vZm9saW8uYz0zNzg9c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTM5NS1cXG5tbS9mb2xpby5jOjM5NjojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5tbS9mb2xpby5jLTM5Ny1cXG4tLVxcbm1tL2ZvbGlvLmM9NDAyPXN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy00MDYtXFxubW0vZm9saW8uYzo0MDc6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vZm9saW8uYy00MDgtXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM2ODU9c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNzQ1LVxcdFxcdFxcdFxcdCAoMUwgXFx1MDAzY1xcdTAwM2MgUEdfZHJvcGJlaGluZCkgfFxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzc0NjpcXHRcXHRcXHRcXHQgTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfTUFTSykpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzc0Ny1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00NjI3PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDY0My1cXG5tbS9tZW1jb250cm9sLmM6NDY0NDojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS9tZW1jb250cm9sLmMtNDY0NS1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9nZW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00NjYzPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KSB7fVxcbm1tL21lbWNvbnRyb2wuYzo0NjY0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL21lbWNvbnRyb2wuYy00NjY1LVxcbi0tXFxubW0vbWVtb3J5LmM9NjcyOD1zdGF0aWMgaW5saW5lIHZvaWQgbW1fYWNjb3VudF9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5tbS9tZW1vcnkuYy02NzgwLVxcbm1tL21lbW9yeS5jOjY3ODE6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vbWVtb3J5LmMtNjc4Mi1zdGF0aWMgdm9pZCBscnVfZ2VuX2VudGVyX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vbWVtb3J5LmM9Njc5Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX2V4aXRfZmF1bHQodm9pZClcXG4tLVxcbm1tL21lbW9yeS5jLTY3OTktfVxcbm1tL21lbW9yeS5jOjY4MDA6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vbWVtb3J5LmMtNjgwMS1cXG4tLVxcbm1tL21tX2luaXQuYz0xMTI9dm9pZCBfX2luaXQgbW1pbml0X3ZlcmlmeV9wYWdlZmxhZ3NfbGF5b3V0KHZvaWQpXFxuLS1cXG5tbS9tbV9pbml0LmMtMTI1LVxcdFxcdEtBU0FOX1RBR19XSURUSCxcXG5tbS9tbV9pbml0LmM6MTI2OlxcdFxcdExSVV9HRU5fV0lEVEgsXFxubW0vbW1faW5pdC5jLTEyNy1cXHRcXHRMUlVfUkVGU19XSURUSCxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTgyNz1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xcbi0tXFxubW0vdm1zY2FuLmMtODMyLVxcbm1tL3Ztc2Nhbi5jOjgzMzojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy04MzQtLypcXG4tLVxcbm1tL3Ztc2Nhbi5jPTg2Mj1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuLS1cXG5tbS92bXNjYW4uYy04NjUtfVxcbm1tL3Ztc2Nhbi5jOjg2NjojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5tbS92bXNjYW4uYy04NjctXFxuLS1cXG5tbS92bXNjYW4uYz0yNjgwPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy0yNjkxLVxcbm1tL3Ztc2Nhbi5jOjI2OTI6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtMjY5My1cXG5tbS92bXNjYW4uYz0yNjk0PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xcbm1tL3Ztc2Nhbi5jOjI2OTU6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcXG5tbS92bXNjYW4uYzoyNjk2OkRFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcbm1tL3Ztc2Nhbi5jLTI2OTctI2RlZmluZSBnZXRfY2FwKGNhcClcXHRzdGF0aWNfYnJhbmNoX2xpa2VseShcXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXFxubW0vdm1zY2FuLmMtMjY5OC0jZWxzZVxcbm1tL3Ztc2Nhbi5jOjI2OTk6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfRkFMU0UobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcbm1tL3Ztc2Nhbi5jLTI3MDAtI2RlZmluZSBnZXRfY2FwKGNhcClcXHRzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI3MDM9c3RhdGljIGJvb2wgc2hvdWxkX3dhbGtfbW11KHZvaWQpXFxubW0vdm1zY2FuLmMtMjcwNC17XFxubW0vdm1zY2FuLmM6MjcwNTpcXHRyZXR1cm4gYXJjaF9oYXNfaHdfcHRlX3lvdW5nKCkgXFx1MDAyNlxcdTAwMjYgZ2V0X2NhcChMUlVfR0VOX01NX1dBTEspO1xcbm1tL3Ztc2Nhbi5jLTI3MDYtfVxcbi0tXFxubW0vdm1zY2FuLmM9MjcwOD1zdGF0aWMgYm9vbCBzaG91bGRfY2xlYXJfcG1kX3lvdW5nKHZvaWQpXFxubW0vdm1zY2FuLmMtMjcwOS17XFxubW0vdm1zY2FuLmM6MjcxMDpcXHRyZXR1cm4gYXJjaF9oYXNfaHdfbm9ubGVhZl9wbWRfeW91bmcoKSBcXHUwMDI2XFx1MDAyNiBnZXRfY2FwKExSVV9HRU5fTk9OTEVBRl9ZT1VORyk7XFxubW0vdm1zY2FuLmMtMjcxMS19XFxuLS1cXG5tbS92bXNjYW4uYy0yNzIxLVxcdHVuc2lnbmVkIGxvbmcgbWluX3NlcVtBTk9OX0FORF9GSUxFXSA9IHtcXHRcXHRcXHRcXFxcXFxubW0vdm1zY2FuLmM6MjcyMjpcXHRcXHRSRUFEX09OQ0UoKGxydXZlYyktXFx1MDAzZWxydWdlbi5taW5fc2VxW0xSVV9HRU5fQU5PTl0pLFxcdFxcXFxcXG5tbS92bXNjYW4uYzoyNzIzOlxcdFxcdFJFQURfT05DRSgobHJ1dmVjKS1cXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbTFJVX0dFTl9GSUxFXSksXFx0XFxcXFxcbm1tL3Ztc2Nhbi5jLTI3MjQtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmM9Mjg4MD1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4OTktXFxubW0vdm1zY2FuLmM6MjkwMDojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXFxubW0vdm1zY2FuLmMtMjkwMS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTMwMDk9dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0zMDM3LVxcbm1tL3Ztc2Nhbi5jOjMwMzg6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xcbm1tL3Ztc2Nhbi5jLTMwMzktXFxuLS1cXG5tbS92bXNjYW4uYz0zMjY5PXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbi0tXFxubW0vdm1zY2FuLmMtMzI4Ny1cXHRcXHQvKiBscnVfZ2VuX2RlbF9mb2xpbygpIGhhcyBpc29sYXRlZCB0aGlzIHBhZ2U/ICovXFxubW0vdm1zY2FuLmM6MzI4ODpcXHRcXHRpZiAoIShvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spKVxcbm1tL3Ztc2Nhbi5jLTMyODktXFx0XFx0XFx0cmV0dXJuIC0xO1xcbm1tL3Ztc2Nhbi5jLTMyOTAtXFxubW0vdm1zY2FuLmM6MzI5MTpcXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcXG5tbS92bXNjYW4uYzozMjkyOlxcdFxcdG5ld19mbGFncyB8PSAoKGdlbiArIDFVTCkgXFx1MDAzY1xcdTAwM2MgTFJVX0dFTl9QR09GRikgfCBCSVQoUEdfd29ya2luZ3NldCk7XFxubW0vdm1zY2FuLmMtMzI5My1cXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG5tbS92bXNjYW4uYy0zMjk0LVxcbm1tL3Ztc2Nhbi5jOjMyOTU6XFx0cmV0dXJuICgob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XFxubW0vdm1zY2FuLmMtMzI5Ni19XFxuLS1cXG5tbS92bXNjYW4uYz0zMjk5PXN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS92bXNjYW4uYy0zMzA1LVxcbm1tL3Ztc2Nhbi5jOjMzMDY6XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSwgZm9saW8pO1xcbm1tL3Ztc2Nhbi5jLTMzMDctXFxubW0vdm1zY2FuLmMtMzMwOC1cXHRkbyB7XFxubW0vdm1zY2FuLmM6MzMwOTpcXHRcXHRuZXdfZ2VuID0gKChvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spIFxcdTAwM2VcXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcXG5tbS92bXNjYW4uYy0zMzEwLVxcdFxcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xcbi0tXFxubW0vdm1zY2FuLmMtMzMxNS1cXG5tbS92bXNjYW4uYzozMzE2OlxcdFxcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xcbm1tL3Ztc2Nhbi5jOjMzMTc6XFx0XFx0bmV3X2ZsYWdzIHw9IChuZXdfZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGO1xcbm1tL3Ztc2Nhbi5jLTMzMTgtXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuLS1cXG5tbS92bXNjYW4uYz0zOTUzPXN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtMzk4OS1cXG5tbS92bXNjYW4uYzozOTkwOlxcdFxcdGlmIChtaW5fc2VxW0xSVV9HRU5fQU5PTl0gXFx1MDAzZSBzZXEgXFx1MDAyNlxcdTAwMjYgbWluX3NlcVtMUlVfR0VOX0ZJTEVdIFxcdTAwM2Mgc2VxKVxcbm1tL3Ztc2Nhbi5jOjM5OTE6XFx0XFx0XFx0bWluX3NlcVtMUlVfR0VOX0FOT05dID0gc2VxO1xcbm1tL3Ztc2Nhbi5jOjM5OTI6XFx0XFx0ZWxzZSBpZiAobWluX3NlcVtMUlVfR0VOX0ZJTEVdIFxcdTAwM2Ugc2VxIFxcdTAwMjZcXHUwMDI2IG1pbl9zZXFbTFJVX0dFTl9BTk9OXSBcXHUwMDNjIHNlcSlcXG5tbS92bXNjYW4uYzozOTkzOlxcdFxcdFxcdG1pbl9zZXFbTFJVX0dFTl9GSUxFXSA9IHNlcTtcXG5tbS92bXNjYW4uYy0zOTk0LVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwMDU9c3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy00MDM3LVxcdCAqIHRoZSBjdXJyZW50IG1heF9zZXEgbmVlZCB0byBiZSBjb3ZlcmVkLCBzaW5jZSBtYXhfc2VxKzEgY2FuIG92ZXJsYXBcXG5tbS92bXNjYW4uYzo0MDM4OlxcdCAqIHdpdGggbWluX3NlcVtMUlVfR0VOX0FOT05dIGlmIHN3YXBwaW5nIGlzIGNvbnN0cmFpbmVkLiBBbmQgaWYgdGhleSBkb1xcbm1tL3Ztc2Nhbi5jLTQwMzktXFx0ICogb3ZlcmxhcCwgY29sZC9ob3QgaW52ZXJzaW9uIGhhcHBlbnMuXFxuLS1cXG5tbS92bXNjYW4uYz00ODMxPXN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtNDgzNS1cXHRpZiAoc3dhcHBpbmVzcyBcXHUwMDNjPSBNSU5fU1dBUFBJTkVTUyArIDEpXFxubW0vdm1zY2FuLmM6NDgzNjpcXHRcXHRyZXR1cm4gTFJVX0dFTl9GSUxFO1xcbm1tL3Ztc2Nhbi5jLTQ4MzctXFxubW0vdm1zY2FuLmMtNDgzOC1cXHRpZiAoc3dhcHBpbmVzcyBcXHUwMDNlPSBNQVhfU1dBUFBJTkVTUylcXG5tbS92bXNjYW4uYzo0ODM5OlxcdFxcdHJldHVybiBMUlVfR0VOX0FOT047XFxubW0vdm1zY2FuLmMtNDg0MC1cXHQvKlxcbi0tXFxubW0vdm1zY2FuLmMtNDg0My1cXHQgKi9cXG5tbS92bXNjYW4uYzo0ODQ0OlxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgXFx1MDAyNnNwKTtcXG5tbS92bXNjYW4uYzo0ODQ1OlxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcXHUwMDI2cHYpO1xcbm1tL3Ztc2Nhbi5jLTQ4NDYtXFxuLS1cXG5tbS92bXNjYW4uYz01NTA1PXN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU1MjEtXFx0aWYgKGVuYWJsZWQpXFxubW0vdm1zY2FuLmM6NTUyMjpcXHRcXHRzdGF0aWNfYnJhbmNoX2VuYWJsZV9jcHVzbG9ja2VkKFxcdTAwMjZscnVfZ2VuX2NhcHNbTFJVX0dFTl9DT1JFXSk7XFxubW0vdm1zY2FuLmMtNTUyMy1cXHRlbHNlXFxubW0vdm1zY2FuLmM6NTUyNDpcXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGVfY3B1c2xvY2tlZChcXHUwMDI2bHJ1X2dlbl9jYXBzW0xSVV9HRU5fQ09SRV0pO1xcbm1tL3Ztc2Nhbi5jLTU1MjUtXFxuLS1cXG5tbS92bXNjYW4uYz01NTg2PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5tbS92bXNjYW4uYy01NTg5LVxcbm1tL3Ztc2Nhbi5jOjU1OTA6XFx0aWYgKGdldF9jYXAoTFJVX0dFTl9DT1JFKSlcXG5tbS92bXNjYW4uYzo1NTkxOlxcdFxcdGNhcHMgfD0gQklUKExSVV9HRU5fQ09SRSk7XFxubW0vdm1zY2FuLmMtNTU5Mi1cXG5tbS92bXNjYW4uYy01NTkzLVxcdGlmIChzaG91bGRfd2Fsa19tbXUoKSlcXG5tbS92bXNjYW4uYzo1NTk0OlxcdFxcdGNhcHMgfD0gQklUKExSVV9HRU5fTU1fV0FMSyk7XFxubW0vdm1zY2FuLmMtNTU5NS1cXG5tbS92bXNjYW4uYy01NTk2LVxcdGlmIChzaG91bGRfY2xlYXJfcG1kX3lvdW5nKCkpXFxubW0vdm1zY2FuLmM6NTU5NzpcXHRcXHRjYXBzIHw9IEJJVChMUlVfR0VOX05PTkxFQUZfWU9VTkcpO1xcbm1tL3Ztc2Nhbi5jLTU1OTgtXFxuLS1cXG5tbS92bXNjYW4uYz01NjAzPXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU2MTUtXFxubW0vdm1zY2FuLmM6NTYxNjpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlJfTFJVX0dFTl9DQVBTOyBpKyspIHtcXG5tbS92bXNjYW4uYy01NjE3LVxcdFxcdGJvb2wgZW5hYmxlZCA9IGNhcHMgXFx1MDAyNiBCSVQoaSk7XFxubW0vdm1zY2FuLmMtNTYxOC1cXG5tbS92bXNjYW4uYzo1NjE5OlxcdFxcdGlmIChpID09IExSVV9HRU5fQ09SRSlcXG5tbS92bXNjYW4uYy01NjIwLVxcdFxcdFxcdGxydV9nZW5fY2hhbmdlX3N0YXRlKGVuYWJsZWQpO1xcbi0tXFxubW0vdm1zY2FuLmM9NjA4MD1zdGF0aWMgaW50IF9faW5pdCBpbml0X2xydV9nZW4odm9pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwODItXFx0QlVJTERfQlVHX09OKE1JTl9OUl9HRU5TICsgMSBcXHUwMDNlPSBNQVhfTlJfR0VOUyk7XFxubW0vdm1zY2FuLmM6NjA4MzpcXHRCVUlMRF9CVUdfT04oQklUKExSVV9HRU5fV0lEVEgpIFxcdTAwM2M9IE1BWF9OUl9HRU5TKTtcXG5tbS92bXNjYW4uYy02MDg0LVxcbi0tXFxubW0vdm1zY2FuLmM9NjA5NT1sYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XFxubW0vdm1zY2FuLmMtNjA5Ni1cXG5tbS92bXNjYW4uYzo2MDk3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTYwOTgtXFxuLS1cXG5tbS92bXNjYW4uYz02MTA5PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MTEzLVxcbm1tL3Ztc2Nhbi5jOjYxMTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtNjExNS1cXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz0yMTM9c3RhdGljIHZvaWQgdW5wYWNrX3NoYWRvdyh2b2lkICpzaGFkb3csIGludCAqbWVtY2dpZHAsIHBnX2RhdGFfdCAqKnBnZGF0LFxcbi0tXFxubW0vd29ya2luZ3NldC5jLTIzMi1cXG5tbS93b3JraW5nc2V0LmM6MjMzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3dvcmtpbmdzZXQuYy0yMzQtXFxubW0vd29ya2luZ3NldC5jPTIzNT1zdGF0aWMgdm9pZCAqbHJ1X2dlbl9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTI1MC1cXG5tbS93b3JraW5nc2V0LmM6MjUxOlxcdEJVSUxEX0JVR19PTihMUlVfR0VOX1dJRFRIICsgTFJVX1JFRlNfV0lEVEggXFx1MDAzZVxcbm1tL3dvcmtpbmdzZXQuYy0yNTItXFx0XFx0ICAgICBCSVRTX1BFUl9MT05HIC0gbWF4KEVWSUNUSU9OX1NISUZULCBFVklDVElPTl9TSElGVF9BTk9OKSk7XFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MjkyPXN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtMzM2LVxcbm1tL3dvcmtpbmdzZXQuYzozMzc6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxubW0vd29ya2luZ3NldC5jLTMzOC1cXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz0zNTA9c3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy0zNTMtXFxubW0vd29ya2luZ3NldC5jOjM1NDojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5tbS93b3JraW5nc2V0LmMtMzU1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMzoxNjo1Ni42MTM1OTM1OTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NDM2NzAwMjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEtjb25maWc6IEEgVGFyZ2V0ZWQgSW5zcGVjdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGBtbS9LY29uZmlnYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHplcm9pbmcgaW4gYXJvdW5kIGxpbmUgMTQwMy4gVGhpcyBhcmVhIGxpa2VseSBkZWFscyB3aXRoIGEgc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgYSBzZXQgb2YgcmVsYXRlZCBvcHRpb25zLCBnaXZlbiB0aGUgY29udGV4dCBvZiB0aGUgS2NvbmZpZyBmaWxlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBvcHRpb24gaXRzZWxmLCBpdHMgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlIGFzc2lnbm1lbnRzLCBvciB0aGUgaGVscCB0ZXh0IHRoYXQgZ3VpZGVzIHVzZXJzLiBJdCdzIGEgdGFyZ2V0ZWQgYXBwcm9hY2g7IEknbSBub3QgZG9pbmcgYSBnZW5lcmFsIHN1cnZleS4gSSBoYXZlIGEgaHVuY2ggYWJvdXQgd2hhdCBJIGFtIGxvb2tpbmcgZm9yIHNvIEkgYW0gZ29pbmcgdG8gc2VlIGlmIG15IGh5cG90aGVzZXMgaG9sZCB1cCB3aGVuIEkgaW5zcGVjdCB0aGUgY29kZS4gSSBhbSBwcm9iYWJseSBsb29raW5nIGZvciBzb21lIHNwZWNpZmljIHNldHRpbmcgdGhhdCBjb250cm9scyB0aGUgdW5kZXJseWluZyBiZWhhdmlvci4gSSBhbSByZWFkeSB0byBkaWcgZGVlcGVyIGFzIG5lZWRlZC4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMzoxNzowMy4wNTAyOTgxNzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDAwOlxcdFxcdCAgcHVycG9zZXMuICBJdCBpcyByZXF1aXJlZCB0byBlbmFibGUgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBvblxcbjE0MDE6XFx0XFx0ICBmaWxlLWJhY2tlZCBtZW1vcnkgdHlwZXMgbGlrZSBzaG1lbSBhbmQgaHVnZXRsYmZzLlxcbjE0MDI6XFx0XFxuMTQwMzpcXHQjIG11bHRpLWdlbiBMUlUge1xcbjE0MDQ6XFx0Y29uZmlnIExSVV9HRU5cXG4xNDA1OlxcdFxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuMTQwNjpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbjE0MDc6XFx0XFx0IyBtYWtlIHN1cmUgZm9saW8tXFx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xcbjE0MDg6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXFxuMTQwOTpcXHRcXHRoZWxwXFxuMTQxMDpcXHRcXHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxcbjE0MTE6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXFxuMTQxMjpcXHRcXG4xNDEzOlxcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG4xNDE0OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbjE0MTU6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQxNjpcXHRcXHRoZWxwXFxuMTQxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cXG4xNDE4OlxcdFxcbjE0MTk6XFx0Y29uZmlnIExSVV9HRU5fU1RBVFNcXG4xNDIwOlxcdFxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4xNDIxOlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbjE0MjI6XFx0XFx0aGVscFxcbjE0MjM6XFx0XFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcXG4xNDI0OlxcdFxcdCAgZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cXG4xNDI1OlxcdFxcbjE0MjY6XFx0XFx0ICBUaGlzIG9wdGlvbiBoYXMgYSBwZXItbWVtY2cgYW5kIHBlci1ub2RlIG1lbW9yeSBvdmVyaGVhZC5cXG4xNDI3OlxcdFxcbjE0Mjg6XFx0Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxuMTQyOTpcXHRcXHRkZWZfYm9vbCB5XFxuMTQzMDpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU4gXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXFxuMTQzMTpcXHQjIH1cXG4xNDMyOlxcdFxcbjE0MzM6XFx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLXFxuMTQzNDpcXHQgICAgICAgZGVmX2Jvb2wgblxcbjE0MzU6XFx0XFxuMTQzNjpcXHRjb25maWcgUEVSX1ZNQV9MT0NLXFxuMTQzNzpcXHRcXHRkZWZfYm9vbCB5XFxuMTQzODpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLIFxcdTAwMjZcXHUwMDI2IE1NVSBcXHUwMDI2XFx1MDAyNiBTTVBcXG4xNDM5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTc6MDMuMDUwNDE1MjMzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgxMTY3NDAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgQ09ORklHX0xSVV9HRU5gIG9wdGlvbiwgd2hpY2ggSSBiZWxpZXZlIGlzIHRoZSBrZXkgaGVyZS4gTm93LCBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgc2VlbXMgdG8gYmUgdGhlIG9uZSB0aGF0IHR1cm5zIGl0IG9uIGJ5IGRlZmF1bHQsIGNvcnJlY3Q/IFJpZ2h0LCBnb3QgaXQuXG5cblRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZC4gSSdsbCBmb2N1cyBvbiB0aGUgY2hhbmdlcyBtYWRlIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBJIG5lZWQgdG8gcmVhZCBjYXJlZnVsbHkgYXJvdW5kIHRoZSBsaW5lcyB0aGF0IHdlcmUgbW9kaWZpZWQsIEkgd2FudCB0byBnZXQgdGhlIGNvbnRleHQgcmlnaHQuIEkgd2lsbCBzdHVkeSB0aG9zZSBzZWN0aW9ucyBmb3Igbm93LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDY3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMzoxNzowNS44NjIwOTIyNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNjI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0ODMwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0ODMwOlxcdFxcbjQ4MzE6XFx0c3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxuNDgzMjpcXHR7XFxuNDgzMzpcXHRcXHRzdHJ1Y3QgY3RybF9wb3Mgc3AsIHB2ID0ge307XFxuNDgzNDpcXHRcXG40ODM1OlxcdFxcdGlmIChzd2FwcGluZXNzIFxcdTAwM2M9IE1JTl9TV0FQUElORVNTICsgMSlcXG40ODM2OlxcdFxcdFxcdHJldHVybiBMUlVfR0VOX0ZJTEU7XFxuNDgzNzpcXHRcXG40ODM4OlxcdFxcdGlmIChzd2FwcGluZXNzIFxcdTAwM2U9IE1BWF9TV0FQUElORVNTKVxcbjQ4Mzk6XFx0XFx0XFx0cmV0dXJuIExSVV9HRU5fQU5PTjtcXG40ODQwOlxcdFxcdC8qXFxuNDg0MTpcXHRcXHQgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lXFxuNDg0MjpcXHRcXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXFxuNDg0MzpcXHRcXHQgKi9cXG40ODQ0OlxcdFxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgXFx1MDAyNnNwKTtcXG40ODQ1OlxcdFxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcXHUwMDI2cHYpO1xcbjQ4NDY6XFx0XFxuNDg0NzpcXHRcXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXFx1MDAyNnNwLCBcXHUwMDI2cHYpO1xcbjQ4NDg6XFx0fVxcbjQ4NDk6XFx0XFxuNDg1MDpcXHQvKlxcbjQ4NTE6XFx0ICogVGhlIE1HTFJVIGNvdW50ZXJwYXJ0IHRvIHRvb19tYW55X2lzb2xhdGVkKCkuXFxuNDg1MjpcXHQgKlxcbjQ4NTM6XFx0ICogdG9vX21hbnlfaXNvbGF0ZWQoKSBjb21wYXJlcyBub2RlLXdpZGUgaXNvbGF0ZWQgY291bnRzIGFnYWluc3RcXG40ODU0OlxcdCAqIG5vZGUtd2lkZSBpbmFjdGl2ZSBzaXplcy4gSXQgcHJlZGF0ZXMgcGVyLW1lbWNnIExSVSBsaXN0cywgd2hpY2hcXG40ODU1OlxcdCAqIG1vdmVkIGlzb2xhdGlvbiB0byBwZXItbHJ1dmVjIGdyYW51bGFyaXR5LiBNR0xSVSByZWNsYWltZXJzIGNvbnRlbmRcXG40ODU2OlxcdCAqIHBlciBscnV2ZWMsIHNvIHRoaXMgY2hlY2sgaXMgcGVyIGxydXZlYyBhcyB3ZWxsLCBhbmQgaXNvbGF0aW9uIGluXFxuNDg1NzpcXHQgKiBvbmUgbWVtY2cgZG9lcyBub3QgdGhyb3R0bGUgcmVjbGFpbSBpbiBhbm90aGVyLlxcbjQ4NTg6XFx0ICpcXG40ODU5OlxcdCAqIFRoZSBsZWdhY3kgdGhyZXNob2xkLCB0aGUgc2l6ZSBvZiB0aGUgaW5hY3RpdmUgbGlzdCwgaXMgbm90IHVzYWJsZVxcbjQ4NjA6XFx0ICogaGVyZSBlaXRoZXI6IGluIE1HTFJVIHRoZSBpbmFjdGl2ZSBjb3VudGVycyBhcmUgb25seSBhIGNvbXBhdGliaWxpdHlcXG40ODYxOlxcdCAqIHNoaW0gLSB0aGV5IGp1bXAgYXJvdW5kIHdoZW4gc3dhcCBydW5zIG91dCBvciBhIG1lbWNnIGhpdHMgaXRzIHN3YXBcXG40ODYyOlxcdCAqIGxpbWl0LCBhbmQgcHJvYWN0aXZlIGFnaW5nIGNhbiBpbmZsYXRlIHRoZW0uIENvbXBhcmUgYWdhaW5zdCB0aGVcXG40ODYzOlxcdCAqIHRvdGFsIG51bWJlciBvZiBldmljdGFibGUgcGFnZXMgb2YgdGhlIHR5cGUgZGl2aWRlZCBieSBNSU5fTlJfR0VOUyxcXG40ODY0OlxcdCAqIGFwcHJveGltYXRpbmcgdGhlIHNpemUgb2Ygb25lIGdlbmVyYXRpb24gLSB0aGUgc2FtZSB1bml0IHRoZVxcbjQ4NjU6XFx0ICogb3JpZ2luYWwgTUdMUlUgYWdpbmcgaGV1cmlzdGljcyB1c2VkLlxcbjQ4NjY6XFx0ICovXFxuNDg2NzpcXHRzdGF0aWMgYm9vbCBscnVfZ2VuX3Rvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsXFxuNDg2ODpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG40ODY5OlxcdHtcXG40ODcwOlxcdFxcdHVuc2lnbmVkIGxvbmcgaXNvbGF0ZWQsIGV2aWN0YWJsZTtcXG40ODcxOlxcdFxcbjQ4NzI6XFx0XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXFxuNDg3MzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNDg3NDpcXHRcXG40ODc1OlxcdFxcdGlmICghd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzYykpXFxuNDg3NjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNDg3NzpcXHRcXG40ODc4OlxcdFxcdGlzb2xhdGVkID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW4ubnJfaXNvbGF0ZWRbdHlwZV0pO1xcbjQ4Nzk6XFx0XFx0ZXZpY3RhYmxlID0gbHJ1dmVjX3R5cGVfZXZpY3RhYmxlX3NpemUobHJ1dmVjLCB0eXBlKTtcXG40ODgwOlxcdFxcbjQ4ODE6XFx0XFx0LypcXG40ODgyOlxcdFxcdCAqIEdGUF9OT0lPL0dGUF9OT0ZTIGNhbGxlcnMgYXJlIGFsbG93ZWQgdG8gaXNvbGF0ZSBtb3JlIHBhZ2VzLCBzb1xcbjQ4ODM6XFx0XFx0ICogdGhleSB3b24ndCBiZSBibG9ja2VkIGJ5IG5vcm1hbCBkaXJlY3QtcmVjbGFpbWVycywgZm9ybWluZyBhXFxuNDg4NDpcXHRcXHQgKiBjaXJjdWxhciBkZWFkbG9jay5cXG40ODg1OlxcdFxcdCAqL1xcbjQ4ODY6XFx0XFx0aWYgKGdmcF9oYXNfaW9fZnMoc2MtXFx1MDAzZWdmcF9tYXNrKSlcXG40ODg3OlxcdFxcdFxcdGV2aWN0YWJsZSBcXHUwMDNlXFx1MDAzZT0gMztcXG40ODg4OlxcdFxcbjQ4ODk6XFx0XFx0cmV0dXJuIGlzb2xhdGVkIFxcdTAwM2UgZXZpY3RhYmxlIC8gTUlOX05SX0dFTlM7XFxuNDg5MDpcXHR9XFxuNDg5MTpcXHRcXG40ODkyOlxcdC8qXFxuNDg5MzpcXHQgKiBVbmxpa2UgdGhlIGxlZ2FjeSBwYXRoLCB3aGVyZSB0aGUgTFJVIGxpc3QgdG8gaXNvbGF0ZSBmcm9tIGlzIGtub3duXFxuNDg5NDpcXHQgKiBiZWZvcmUgaXNvbGF0aW9uLCBpc29sYXRlX2ZvbGlvcygpIHBpY2tzIHRoZSB0eXBlIGZyb20gdGhlIHJlZmF1bHRcXG40ODk1OlxcdCAqIGZlZWRiYWNrIGFuZCBtYXkgZmFsbCBiYWNrIHRvIHRoZSBvdGhlciBvbmUuIFRoZXJlZm9yZSwgaW5zdGVhZCBvZlxcbjQ4OTY6XFx0ICogdGhyb3R0bGluZyBvbiBhIHNpbmdsZSB0eXBlLCBjb2xsZWN0IHRoZSBldmljdGFibGUgdHlwZXMgdGhhdCBkbyBub3RcXG40ODk3OlxcdCAqIGhhdmUgdG9vIG1hbnkgaXNvbGF0ZWQgZm9saW9zLCBhbmQgb25seSBzbGVlcCB3aGVuIGFsbCBvZiB0aGVtIGRvLlxcbjQ4OTg6XFx0ICpcXG40ODk5OlxcdCAqIFJldHVybnMgdGhlIG1hc2sgb2YgdGhlIHR5cGVzIGlzb2xhdGVfZm9saW9zKCkgbWF5IGlzb2xhdGUgZnJvbSwgb3JcXG40OTAwOlxcdCAqIDAgaWYgcmVjbGFpbSBzaG91bGQgc3RvcC4gQWxzbyBzZXRzIEBmYXRhbCB0byB0ZWxsIHRoZSBjYWxsZXIgdGhhdFxcbjQ5MDE6XFx0ICogdGhlIHRhc2sgcmVjZWl2ZWQgYSBmYXRhbCBzaWduYWwgd2hpbGUgd2FpdGluZy5cXG40OTAyOlxcdCAqL1xcbjQ5MDM6XFx0c3RhdGljIHVuc2lnbmVkIGludCB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbjQ5MDQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBpbnQgc3dhcHBpbmVzcyxcXG40OTA1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuNDkwNjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGJvb2wgKmZhdGFsKVxcbjQ5MDc6XFx0e1xcbjQ5MDg6XFx0XFx0dW5zaWduZWQgaW50IGFsbG93ZWQ7XFxuNDkwOTpcXHRcXHRib29sIHN0YWxsZWQgPSBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTc6MDUuODYyNDAwMjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTUyODkyMzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyB0aGVzZSBldmljdGlvbiBmdW5jdGlvbnMuXG5cbioqRGVjb25zdHJ1Y3RpbmcgRm9saW8gRXZpY3Rpb24gYW5kIElzb2xhdGlvbioqXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbGVycyBhbmQgdGhlIGNhbGwgc3RhY2sgcmVsYXRlZCB0byBgZXZpY3RfZm9saW9zYCwgYGlzb2xhdGVfZm9saW9zYCwgYW5kIHJlbGF0ZWQgcm91dGluZXMuIFVuZGVyc3RhbmRpbmcgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbnZva2VkIGlzIGtleSB0byBncmFzcGluZyB0aGVpciBvdmVyYWxsIHJvbGUgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxpZmVjeWNsZS4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0LlxuXG5UaGVuLCBJJ20gZ29pbmcgdG8gcGlucG9pbnQgdGhlIGRlZmluaXRpb24gb2YgYGV2aWN0X2ZvbGlvc2AsIHNvIEkgd2lsbCBzZWFyY2ggaW4gYG1tL3Ztc2Nhbi5jYC4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlIHBhZ2UvZm9saW8gc2Nhbm5pbmcgYW5kIHJlY2xhaW1pbmcgcHJvY2Vzcywgc28gdGhhdCBsb2NhdGlvbiBtYWtlcyBzZW5zZSBhcyBhIHN0YXJ0aW5nIHBvaW50LiBGcm9tIHRoZXJlLCBJJ2xsIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGhvdyBgZXZpY3RfZm9saW9zYCBpbnRlcmFjdHMgd2l0aCB0aGUgc3Vycm91bmRpbmcgY29kZSwgYW5kIGlkZW50aWZ5IG90aGVyIHBvaW50cyBvZiBpbnRlcmVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NTEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAzOjE3OjA4LjAxNTI5NDkyOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMzNzc0MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXZpY3RfZm9saW9zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ5NTY9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5OTctXFxubW0vdm1zY2FuLmM6NDk5ODpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00OTk5LVxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxOTk9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyMjItXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTIyMzpcXHRcXHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTIyNC1cXHRcXHRpZiAoIWRlbHRhKVxcbi0tXFxubW0vdm1zY2FuLmM9NTgyNj1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4NDYtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xcbm1tL3Ztc2Nhbi5jOjU4NDc6XFx0XFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxcbm1tL3Ztc2Nhbi5jLTU4NDgtXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAzOjE3OjA4LjA2ODY5MDM1NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODE5MDAyMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnM6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBFdmljdGlvbiBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgcnVuX2V2aWN0aW9uYC4gTXkgZmlyc3QgcXVlc3Rpb24gaXMgYWx3YXlzOiB3aGVyZSBhcmUgdGhlc2UgdGhpbmdzIGFjdHVhbGx5ICp1c2VkKj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZWlyIHB1cnBvc2Ugd2l0aGluIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoZW0gdGhyb3VnaCB0aGUgY29kZSBiYXNlIGFuZCBzZWUgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlc2UgZXZpY3Rpb24gYW5kIHNocmlua2luZyBvcGVyYXRpb25zIGFyZSBhY3R1YWxseSB0cmlnZ2VyZWQuIEFyZSB0aGV5IHBhcnQgb2YgYSBzY2hlZHVsZWQgYmFja2dyb3VuZCB0YXNrPyBBcmUgdGhleSBpbiByZXNwb25zZSB0byBtZW1vcnkgcHJlc3N1cmU/IEFyZSB0aGV5IHJlYWN0aW5nIHRvIHNwZWNpZmljIGV2ZW50cyB3aXRoaW4gdGhlIExSVSBjYWNoZSBpdHNlbGY/IEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgaXMgdGhlIGVzc2VudGlhbCBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgd2hhdCdzIHJlYWxseSBnb2luZyBvbiB3aXRoIHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgc3RvcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjk1LCJPdXRwdXRUb2tlbnMiOjYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTc6MTAuODg3Njk1NzczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTE1NzM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fc2hyaW5rX2xydXZlY3xydW5fZXZpY3Rpb258bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjfGxydV9nZW5fc2hyaW5rX25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTE2ND1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE5OC0gKi9cXG5tbS92bXNjYW4uYzo1MTk5OnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTIwMC17XFxuLS1cXG5tbS92bXNjYW4uYz01MjQ0PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI2My1cXG5tbS92bXNjYW4uYzo1MjY0OlxcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNTI2NS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUyODU9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MzU0LVxcbm1tL3Ztc2Nhbi5jOjUzNTU6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTM1Ni17XFxuLS1cXG5tbS92bXNjYW4uYy01MzY3LVxcbm1tL3Ztc2Nhbi5jOjUzNjg6XFx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxcbm1tL3Ztc2Nhbi5jLTUzNjktXFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xcbi0tXFxubW0vdm1zY2FuLmMtNTM3NS1cXG5tbS92bXNjYW4uYzo1Mzc2OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTM3Ny17XFxuLS1cXG5tbS92bXNjYW4uYz01ODE1PXN0YXRpYyBpbnQgcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy01ODI1LVxcbm1tL3Ztc2Nhbi5jOjU4MjY6c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxubW0vdm1zY2FuLmMtNTgyNy1cXHRcXHRcXHRpbnQgc3dhcHBpbmVzcywgdW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbi0tXFxubW0vdm1zY2FuLmM9NTg1Nj1zdGF0aWMgaW50IHJ1bl9jbWQoY2hhciBjbWQsIHU2NCBtZW1jZ19pZCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy01ODg3LVxcdGNhc2UgJy0nOlxcbm1tL3Ztc2Nhbi5jOjU4ODg6XFx0XFx0ZXJyID0gcnVuX2V2aWN0aW9uKGxydXZlYywgc2VxLCBzYywgc3dhcHBpbmVzcywgb3B0KTtcXG5tbS92bXNjYW4uYy01ODg5LVxcdFxcdGJyZWFrO1xcbi0tXFxubW0vdm1zY2FuLmM9NjA5OT1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjEwMy1cXG5tbS92bXNjYW4uYzo2MTA0OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYxMDUte1xcbi0tXFxubW0vdm1zY2FuLmMtNjEwOC1cXG5tbS92bXNjYW4uYzo2MTA5OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNjExMC17XFxuLS1cXG5tbS92bXNjYW4uYz02MTE2PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxMjctXFx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcXHUwMDI2XFx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xcbm1tL3Ztc2Nhbi5jOjYxMjg6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYxMjktXFxuLS1cXG5tbS92bXNjYW4uYz02Mzg2PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjM5My1cXHRcXHRtZW1zZXQoXFx1MDAyNnNjLVxcdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVxcdTAwM2VucikpO1xcbm1tL3Ztc2Nhbi5jOjYzOTQ6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYzOTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAzOjE3OjEwLjk0Mjg2MTYxOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTU5MjI0ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gTWVtb3J5IFJlY2xhbWF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IG1lbW9yeSByZWNsYW1hdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRoZSBtYWluIHBhdGhzLiBJIGtub3cgdGhhdCBgc2hyaW5rX2xydXZlY2AgYW5kIGBzaHJpbmtfbm9kZWAgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLCB0b3VjaGluZyBvbiBkaXJlY3QgcmVjbGFpbSwga3N3YXBkLCBhbmQgbWVtb3J5IGNncm91cCAobWVtY2cpIHJlY2xhaW0gbWVjaGFuaXNtcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZXNlIGFuZCBtYXliZSBmb2N1cyBvbiB0aGUgbmV3ZXIgcGFydHMgaW4gdGhlc2UgcGF0aHMuXG5cbkJleW9uZCB0aGF0LCBJIHJlbWVtYmVyIHRoZSBkZWJ1Z2ZzIGFuZCBzeXNmcyBpbnRlcmZhY2VzLCBsaWtlIHRoZSBvbmVzIHVuZGVyIGAvc3lzL2tlcm5lbC9tbS9scnVfZ2VuL2AuIFRob3NlIGNhbiBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHRzLCBsaWtlIHRocm91Z2ggaW50ZXJmYWNlcyBsaWtlIGBscnVfZ2VuX3NlcV93cml0ZWAgYW5kIGBydW5fY21kYC4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgYGxydV9nZW5fc2VxX3dyaXRlYCwgb3IgbWF5YmUgc29tZSBvZiB0aGUgb3RoZXIgc3lzZnMgaW50ZXJmYWNlcywgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBwZXJzcGVjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NjYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTc6MTMuOTAyMDkxMjY3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM4NjM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydW5fY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTU4MjY9c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy01ODU1LVxcbm1tL3Ztc2Nhbi5jOjU4NTY6c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbm1tL3Ztc2Nhbi5jLTU4NTctXFx0XFx0ICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLCB1bnNpZ25lZCBsb25nIG9wdClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU4OTg9c3RhdGljIHNzaXplX3QgbHJ1X2dlbl9zZXFfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsXFxuLS1cXG5tbS92bXNjYW4uYy01OTY2LVxcbm1tL3Ztc2Nhbi5jOjU5Njc6XFx0XFx0ZXJyID0gcnVuX2NtZChjbWQsIG1lbWNnX2lkLCBuaWQsIHNlcSwgXFx1MDAyNnNjLCBzd2FwcGluZXNzLCBvcHQpO1xcbm1tL3Ztc2Nhbi5jLTU5NjgtXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTc6MTMuOTUwNDgzMTUzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4NDI0Nzc5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIHByZXR0eSBjcml0aWNhbCBzdHVmZjogdGhlIGNvcmUga2VybmVsIGxvZ2ljIGZvciBNR0xSVSBwYWdlIHJlY2xhbWF0aW9uIGFuZCBpc29sYXRpb24gdGhyb3R0bGluZy4gSW5zdGFudGx5LCBteSBleHBlcnQgYnJhaW4gc2NyZWFtcywgXCJGdXp6IGl0IVwiIEdpdmVuIHRoYXQgaXQncyBhbHRlcmluZyBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgTUdMUlUgZnJhbWV3b3JrIChpbnRyb2R1Y2luZyB0aGluZ3MgbGlrZSBgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZGAsIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXNgLCBhdG9taWMgY291bnRlciBtYW5pcHVsYXRpb25zLCBhbmQgcmV0cnkvYWJvcnQgbG9naWMgZm9yIHNpZ25hbCBoYW5kbGluZyksIGl04oCZcyBwcmFjdGljYWxseSBiZWdnaW5nIGZvciBpdC4gVGhpcyBpcyBhIHByaW1lIHRhcmdldCBmb3IgdW5jb3ZlcmluZyBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuTm93LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrczpcblxuMS4gIGBXb3J0aEZ1enppbmdgOiBEZWZpbml0ZWx5IGEgcmVzb3VuZGluZyBcInllc1wiLiBXZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbCwgc28gdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYnVncyBoZXJlIGlzIGh1Z2UuXG5cbjIuICBgRW5hYmxlQ29uZmlnc2A6IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBMb29rcyBsaWtlIGBMUlVfR0VOYCBpcyBlc3NlbnRpYWwsIGEgYm9vbCBkZXBlbmRlbnQgb24gYE1NVWAsIGA2NEJJVGAsIGAhU1BBUlNFTUVNYCBvciBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBBbmQgb2YgY291cnNlLCBgTFJVX0dFTl9FTkFCTEVEYCwgd2hpY2ggZGVwZW5kcyBvbiBgTFJVX0dFTmAuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgdHdvIGFyZSBzdWZmaWNpZW50IG9yIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucywgc3VjaCBhcyBgTFJVX0dFTl9TVEFUU2AgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkgc2hvdWxkIGFsc28gZG8gYSBxdWljayBncmVwIHNlYXJjaCBmb3IgYW55dGhpbmcgZWxzZSByZWxhdGVkIHRvIGBscnVfZ2VuYCBvciBgdm1zY2FuLmNgIHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2guIEknbGwgc2VhcmNoIHRoZSByZXBvIGZvciBgQ09ORklHX0xSVV9HRU5gIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjQwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAzOjE3OjE3Ljc5Mjk2NDYyM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxMTA3MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0xSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZvbGlvLmM9MzIyPXN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTM1MS1cXG5tbS9mb2xpby5jOjM1MjojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS9mb2xpby5jLTM1My1cXG4tLVxcbm1tL2ZvbGlvLmM9Mzc4PXN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy0zOTUtXFxubW0vZm9saW8uYzozOTY6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxubW0vZm9saW8uYy0zOTctXFxuLS1cXG5tbS9mb2xpby5jPTQwMj1zdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNDA2LVxcbm1tL2ZvbGlvLmM6NDA3OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL2ZvbGlvLmMtNDA4LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ2Mjc9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NjQzLVxcbm1tL21lbWNvbnRyb2wuYzo0NjQ0OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL21lbWNvbnRyb2wuYy00NjQ1LXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ2NjM9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9scnVfZ2VuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpIHt9XFxubW0vbWVtY29udHJvbC5jOjQ2NjQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vbWVtY29udHJvbC5jLTQ2NjUtXFxuLS1cXG5tbS9tZW1vcnkuYz02NzI4PXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9hY2NvdW50X2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyxcXG4tLVxcbm1tL21lbW9yeS5jLTY3ODAtXFxubW0vbWVtb3J5LmM6Njc4MTojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS9tZW1vcnkuYy02NzgyLXN0YXRpYyB2b2lkIGxydV9nZW5fZW50ZXJfZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9tZW1vcnkuYz02Nzk3PXN0YXRpYyB2b2lkIGxydV9nZW5fZXhpdF9mYXVsdCh2b2lkKVxcbi0tXFxubW0vbWVtb3J5LmMtNjc5OS19XFxubW0vbWVtb3J5LmM6NjgwMDojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5tbS9tZW1vcnkuYy02ODAxLVxcbi0tXFxubW0vdm1zY2FuLmM9ODI3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04MzItXFxubW0vdm1zY2FuLmM6ODMzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTgzNC0vKlxcbi0tXFxubW0vdm1zY2FuLmM9ODYyPXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg2NS19XFxubW0vdm1zY2FuLmM6ODY2OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTg2Ny1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2ODA9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2OTEtXFxubW0vdm1zY2FuLmM6MjY5MjojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy0yNjkzLVxcbm1tL3Ztc2Nhbi5jPTI2OTQ9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XFxubW0vdm1zY2FuLmM6MjY5NTojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbm1tL3Ztc2Nhbi5jLTI2OTYtREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODgwPXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg5OS1cXG5tbS92bXNjYW4uYzoyOTAwOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5tbS92bXNjYW4uYy0yOTAxLVxcbi0tXFxubW0vdm1zY2FuLmM9MzAwOT12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwMzctXFxubW0vdm1zY2FuLmM6MzAzODojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXFxubW0vdm1zY2FuLmMtMzAzOS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwOTU9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xcbm1tL3Ztc2Nhbi5jLTYwOTYtXFxubW0vdm1zY2FuLmM6NjA5NzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5tbS92bXNjYW4uYy02MDk4LVxcbi0tXFxubW0vdm1zY2FuLmM9NjEwOT1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjExMy1cXG5tbS92bXNjYW4uYzo2MTE0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTYxMTUtXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MjEzPXN0YXRpYyB2b2lkIHVucGFja19zaGFkb3codm9pZCAqc2hhZG93LCBpbnQgKm1lbWNnaWRwLCBwZ19kYXRhX3QgKipwZ2RhdCxcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy0yMzItXFxubW0vd29ya2luZ3NldC5jOjIzMzojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS93b3JraW5nc2V0LmMtMjM0LVxcbi0tXFxubW0vd29ya2luZ3NldC5jPTI5Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTMzNi1cXG5tbS93b3JraW5nc2V0LmM6MzM3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3dvcmtpbmdzZXQuYy0zMzgtXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MzUwPXN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtMzUzLVxcbm1tL3dvcmtpbmdzZXQuYzozNTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vd29ya2luZ3NldC5jLTM1NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTc6MTcuODQ2MDgxODhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjYxNTQ2OTg0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBMUlUgR2VuZXJhdGlvbiBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBMUlUgZ2VuZXJhdGlvbiBmdXp6aW5nIHNldHVwLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgc3ltYm9scyB0byBmb2N1cyBvbiwga2VlcGluZyBpbiBtaW5kIHRoZSBndWlkYW5jZTogXCIxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLiBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlwiIFNvLCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIG1ha2Ugc3VyZSBgQ09ORklHX0xSVV9HRU5gIGFuZCBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgYXJlIHNldCBhcHByb3ByaWF0ZWx5LlxuXG5Ob3csIGxldCdzIGV4YW1pbmUgYEZvY3VzU3ltYm9sc2AgdG8gc2VlIHdoYXQncyBhbHJlYWR5IHRoZXJlIGFuZCBpZiBJIG5lZWQgdG8gYWRkIGFueXRoaW5nLiBNeSBhdHRlbnRpb24gaXMgZHJhd24gdG8gdGhlIGBtbS92bXNjYW4uY2AgZmlsZSBzaW5jZSBpdCBzZWVtcyByZWxldmFudCB0byB0aGlzIGFyZWEgb2YgbWVtb3J5IG1hbmFnZW1lbnQuIEkgc2VlIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGluIHRoZXJlIHRoYXQgZGVhbCB3aXRoIGlzb2xhdGlvbiBhbmQgTFJVIGdlbmVyYXRpb24gYnV0IGl0IGlzIGltcG9ydGFudCB0byByZW1lbWJlciB3aGF0IGtpbmQgb2YgZnVuY3Rpb25zIGFyZSBwcmVmZXJyZWQgdG8gYmUgdGFyZ2V0ZWQuIEkgc2VlIGBldmljdF9mb2xpb3NgLCBgaXNvbGF0ZV9mb2xpb3NgLCBgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZGAsIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXNgLCBhbmQgYGxydXZlY190eXBlX2V2aWN0YWJsZV9zaXplYCwgYnV0IGFsbCBvZiB0aGVzZSBhcmUgc3RhdGljLCBzbyB0aGV5J3JlIGxpa2VseSBoZWxwZXIgZnVuY3Rpb25zLiBgbHJ1X2dlbl9zZXFfd3JpdGVgIGlzIGEgZmlsZSBvcGVyYXRpb25zIGhhbmRsZXIsIHdoaWNoIG1pZ2h0IGJlIGludGVyZXN0aW5nIGlmIGl0IGV4cG9zZXMgc29tZXRoaW5nIHVzZWZ1bC4gTGV0J3MgZGlnIGRlZXBlci4gVGhlIHN0cmF0ZWd5IGhlcmUgaXMgY2xlYXI6IHBpbnBvaW50IHRoZSBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMgb3IgQVBJIGVudHJ5IHBvaW50cy4gVGhhdCBtZWFucyBJIG5lZWQgdG8gY2FyZWZ1bGx5IGFuYWx5emUgKmFsbCogZnVuY3Rpb25zIGluIGBtbS92bXNjYW4uY2AgdGhhdCByZWxhdGUgdG8gTFJVX0dFTiBvciBpc29sYXRpb24gdG8gaWRlbnRpZnkgYW55IHZpYWJsZSBjYW5kaWRhdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQwOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMzoxNzoyNC40NjE1NTUxODRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5OTQ1MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzM0IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5tbS92bXNjYW4uYz04Mjc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgzOS0gKi9cXG5tbS92bXNjYW4uYzo4NDA6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbm1tL3Ztc2Nhbi5jLTg0MS17XFxuLS1cXG5tbS92bXNjYW4uYy04NjEtI2Vsc2VcXG5tbS92bXNjYW4uYzo4NjI6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbm1tL3Ztc2Nhbi5jLTg2My17XFxuLS1cXG5tbS92bXNjYW4uYz04Njg9c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy04OTItXFxubW0vdm1zY2FuLmM6ODkzOlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSkge1xcbm1tL3Ztc2Nhbi5jLTg5NC1cXHRcXHRpZiAoIXJlZmVyZW5jZWRfcHRlcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg5Ni1cXG5tbS92bXNjYW4uYzo4OTc6XFx0XFx0cmV0dXJuIGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFxcdTAwMjZ2bWFfZmxhZ3MpID8gRk9MSU9SRUZfQUNUSVZBVEUgOiBGT0xJT1JFRl9LRUVQO1xcbm1tL3Ztc2Nhbi5jLTg5OC1cXHR9XFxuLS1cXG5tbS92bXNjYW4uYz0yMjgwPXN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjI4Ni1cXG5tbS92bXNjYW4uYzoyMjg3OlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSlcXG5tbS92bXNjYW4uYy0yMjg4LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2OTQ9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XFxubW0vdm1zY2FuLmMtMjY5NS0jaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbm1tL3Ztc2Nhbi5jOjI2OTY6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxubW0vdm1zY2FuLmM6MjY5NzojZGVmaW5lIGdldF9jYXAoY2FwKVxcdHN0YXRpY19icmFuY2hfbGlrZWx5KFxcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcXG5tbS92bXNjYW4uYy0yNjk4LSNlbHNlXFxubW0vdm1zY2FuLmM6MjY5OTpERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9GQUxTRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxubW0vdm1zY2FuLmM6MjcwMDojZGVmaW5lIGdldF9jYXAoY2FwKVxcdHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNmxydV9nZW5fY2Fwc1tjYXBdKVxcbm1tL3Ztc2Nhbi5jLTI3MDEtI2VuZGlmXFxuLS1cXG5tbS92bXNjYW4uYz0yNzg4PXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy0yODE3LSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxcbm1tL3Ztc2Nhbi5jOjI4MTg6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxcbm1tL3Ztc2Nhbi5jLTI4MTktICpcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI4MzU9c3RhdGljIHZvaWQgZ2V0X2l0ZW1fa2V5KHZvaWQgKml0ZW0sIGludCAqa2V5KVxcbi0tXFxubW0vdm1zY2FuLmMtMjg0NC1cXG5tbS92bXNjYW4uYzoyODQ1OnN0YXRpYyBib29sIHRlc3RfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEsXFxubW0vdm1zY2FuLmMtMjg0Ni1cXHRcXHRcXHQgICAgICB2b2lkICppdGVtKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg2MC1cXG5tbS92bXNjYW4uYzoyODYxOnN0YXRpYyB2b2lkIHVwZGF0ZV9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSxcXG5tbS92bXNjYW4uYy0yODYyLVxcdFxcdFxcdFxcdHZvaWQgKml0ZW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yODc5LVxcbm1tL3Ztc2Nhbi5jOjI4ODA6c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXFxubW0vdm1zY2FuLmMtMjg4MS17XFxuLS1cXG5tbS92bXNjYW4uYy0yOTAxLVxcbm1tL3Ztc2Nhbi5jOjI5MDI6c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy0yOTAzLXtcXG5tbS92bXNjYW4uYzoyOTA0OlxcdHN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0IG1tX2xpc3QgPSB7XFxubW0vdm1zY2FuLmMtMjkwNS1cXHRcXHQuZmlmbyA9IExJU1RfSEVBRF9JTklUKG1tX2xpc3QuZmlmbyksXFxuLS1cXG5tbS92bXNjYW4uYy0yOTE3LVxcbm1tL3Ztc2Nhbi5jOjI5MTg6c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICpnZXRfbW1fc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbm1tL3Ztc2Nhbi5jLTI5MTkte1xcbi0tXFxubW0vdm1zY2FuLmMtMjkyMi1cXG5tbS92bXNjYW4uYzoyOTIzOnN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICpnZXRfbmV4dF9tbShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbm1tL3Ztc2Nhbi5jLTI5MjQte1xcbi0tXFxubW0vdm1zY2FuLmMtMjkyNy1cXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXFx1MDAzZWxydXZlYyk7XFxubW0vdm1zY2FuLmM6MjkyODpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG5tbS92bXNjYW4uYy0yOTI5LVxcbi0tXFxubW0vdm1zY2FuLmMtMjk0MS1cXG5tbS92bXNjYW4uYzoyOTQyOnZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubW0vdm1zY2FuLmMtMjk0My17XFxuLS1cXG5tbS92bXNjYW4uYy0yOTQ1LVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xcbm1tL3Ztc2Nhbi5jOjI5NDY6XFx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcXG5tbS92bXNjYW4uYy0yOTQ3LVxcbi0tXFxubW0vdm1zY2FuLmMtMjk1Ni1cXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xcbm1tL3Ztc2Nhbi5jOjI5NTc6XFx0XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XFxubW0vdm1zY2FuLmMtMjk1OC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NjgtXFxubW0vdm1zY2FuLmM6Mjk2OTp2b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTI5NzAte1xcbm1tL3Ztc2Nhbi5jLTI5NzEtXFx0aW50IG5pZDtcXG5tbS92bXNjYW4uYzoyOTcyOlxcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3Q7XFxubW0vdm1zY2FuLmMtMjk3My1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMO1xcbi0tXFxubW0vdm1zY2FuLmMtMjk4Ni1cXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xcbm1tL3Ztc2Nhbi5jOjI5ODc6XFx0XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XFxubW0vdm1zY2FuLmMtMjk4OC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwMDgtI2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jOjMwMDk6dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubW0vdm1zY2FuLmMtMzAxMC17XFxuLS1cXG5tbS92bXNjYW4uYy0zMDMyLVxcbm1tL3Ztc2Nhbi5jOjMwMzM6XFx0bHJ1X2dlbl9kZWxfbW0obW0pO1xcbm1tL3Ztc2Nhbi5jOjMwMzQ6XFx0bHJ1X2dlbl9hZGRfbW0obW0pO1xcbm1tL3Ztc2Nhbi5jLTMwMzUtfVxcbi0tXFxubW0vdm1zY2FuLmMtMzAzOS1cXG5tbS92bXNjYW4uYzozMDQwOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtMzA0MS17XFxuLS1cXG5tbS92bXNjYW4uYy0zMDQ0LVxcbm1tL3Ztc2Nhbi5jOjMwNDU6c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICpnZXRfbW1fc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbm1tL3Ztc2Nhbi5jLTMwNDYte1xcbi0tXFxubW0vdm1zY2FuLmMtMzA0OS1cXG5tbS92bXNjYW4uYzozMDUwOnN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICpnZXRfbmV4dF9tbShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbm1tL3Ztc2Nhbi5jLTMwNTEte1xcbi0tXFxubW0vdm1zY2FuLmMtMzA1Ni1cXG5tbS92bXNjYW4uYzozMDU3OnN0YXRpYyB2b2lkIHJlc2V0X21tX3N0YXRzKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIGJvb2wgbGFzdClcXG5tbS92bXNjYW4uYy0zMDU4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNjEtXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gd2Fsay1cXHUwMDNlbHJ1dmVjO1xcbm1tL3Ztc2Nhbi5jOjMwNjI6XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XFxubW0vdm1zY2FuLmMtMzA2My1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwODEtXFxubW0vdm1zY2FuLmM6MzA4MjpzdGF0aWMgYm9vbCBpdGVyYXRlX21tX2xpc3Qoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IG1tX3N0cnVjdCAqKml0ZXIpXFxubW0vdm1zY2FuLmMtMzA4My17XFxuLS1cXG5tbS92bXNjYW4uYy0zMDg4LVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjMwODk6XFx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcXG5tbS92bXNjYW4uYzozMDkwOlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTMwOTEtXFxuLS1cXG5tbS92bXNjYW4uYz0zMTQ2PXN0YXRpYyBib29sIGl0ZXJhdGVfbW1fbGlzdF9ub3dhbGsoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMxNDktXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XFxubW0vdm1zY2FuLmM6MzE1MDpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xcbm1tL3Ztc2Nhbi5jOjMxNTE6XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XFxubW0vdm1zY2FuLmMtMzE1Mi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTMxOTg9c3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXFxuLS1cXG5tbS92bXNjYW4uYy0zMjAxLVxcdGludCBpO1xcbm1tL3Ztc2Nhbi5jOjMyMDI6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy0zMjAzLVxcdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW3R5cGVdKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTMyMTc9c3RhdGljIHZvaWQgcmVzZXRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgYm9vbCBjYXJyeW92ZXIpXFxuLS1cXG5tbS92bXNjYW4uYy0zMjE5LVxcdGludCBoaXN0LCB0aWVyO1xcbm1tL3Ztc2Nhbi5jOjMyMjA6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy0zMjIxLVxcdGJvb2wgY2xlYXIgPSBjYXJyeW92ZXIgPyBOUl9ISVNUX0dFTlMgPT0gMSA6IE5SX0hJU1RfR0VOUyBcXHUwMDNlIDE7XFxuLS1cXG5tbS92bXNjYW4uYz0zMjY5PXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbi0tXFxubW0vdm1zY2FuLmMtMzI4Ni1cXHRkbyB7XFxubW0vdm1zY2FuLmM6MzI4NzpcXHRcXHQvKiBscnVfZ2VuX2RlbF9mb2xpbygpIGhhcyBpc29sYXRlZCB0aGlzIHBhZ2U/ICovXFxubW0vdm1zY2FuLmMtMzI4OC1cXHRcXHRpZiAoIShvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spKVxcbi0tXFxubW0vdm1zY2FuLmM9MzI5OT1zdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vdm1zY2FuLmMtMzMwMS1cXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG5tbS92bXNjYW4uYzozMzAyOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmM6MzMwMzpcXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW3R5cGVdKTtcXG5tbS92bXNjYW4uYy0zMzA0LVxcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXFx1MDAzZWZsYWdzLmYpO1xcbi0tXFxubW0vdm1zY2FuLmMtMzMxOS1cXG5tbS92bXNjYW4uYzozMzIwOlxcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XFxubW0vdm1zY2FuLmMtMzMyMS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzMjQtXFxubW0vdm1zY2FuLmM6MzMyNTpzdGF0aWMgdm9pZCB1cGRhdGVfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3Ztc2Nhbi5jLTMzMjYtXFx0XFx0XFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxcbi0tXFxubW0vdm1zY2FuLmMtMzM0MC1cXG5tbS92bXNjYW4uYzozMzQxOnN0YXRpYyB2b2lkIHJlc2V0X2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG5tbS92bXNjYW4uYy0zMzQyLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzNDQtXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbHJ1dmVjX2xpdmVfbG9ja19pcnEod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG5tbS92bXNjYW4uYzozMzQ1OlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtMzM0Ni1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzNTktXFxubW0vdm1zY2FuLmM6MzM2MDpcXHRcXHRpZiAobHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pKVxcbm1tL3Ztc2Nhbi5jLTMzNjEtXFx0XFx0XFx0bHJ1ICs9IExSVV9BQ1RJVkU7XFxuLS1cXG5tbS92bXNjYW4uYz0zMzY4PXN0YXRpYyBpbnQgc2hvdWxkX3NraXBfdm1hKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqYXJncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzNzEtXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBhcmdzLVxcdTAwM2V2bWE7XFxubW0vdm1zY2FuLmM6MzM3MjpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cXHUwMDNlcHJpdmF0ZTtcXG5tbS92bXNjYW4uYy0zMzczLVxcbi0tXFxubW0vdm1zY2FuLmM9MzUwNj1zdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxcbi0tXFxubW0vdm1zY2FuLmMtMzUxMy1cXG5tbS92bXNjYW4uYzozNTE0OnN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL3Ztc2Nhbi5jLTM1MTUtXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXFxuLS1cXG5tbS92bXNjYW4uYy0zNTMwLVxcdFxcdFxcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcXG5tbS92bXNjYW4uYzozNTMxOlxcdH0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXFx1MDAyNnZtYS1cXHUwMDNlZmxhZ3MpKSB7XFxubW0vdm1zY2FuLmMtMzUzMi1cXHRcXHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XFxuLS1cXG5tbS92bXNjYW4uYz0zNTM4PXN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1zY2FuLmMtMzU0OC1cXHRzdHJ1Y3QgZm9saW8gKmxhc3QgPSBOVUxMO1xcbm1tL3Ztc2Nhbi5jOjM1NDk6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxubW0vdm1zY2FuLmMtMzU1MC1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM1NTItXFx0REVGSU5FX01BWF9TRVEod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG5tbS92bXNjYW4uYzozNTUzOlxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbm1tL3Ztc2Nhbi5jLTM1NTQtXFx0dW5zaWduZWQgaW50IG5yO1xcbi0tXFxubW0vdm1zY2FuLmM9MzYyOT1zdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM2MzYtXFx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcXG5tbS92bXNjYW4uYzozNjM3OlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVxcdTAwM2Vwcml2YXRlO1xcbm1tL3Ztc2Nhbi5jLTM2MzgtXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLS1cXG5tbS92bXNjYW4uYy0zNjQwLVxcdERFRklORV9NQVhfU0VRKHdhbGstXFx1MDAzZWxydXZlYyk7XFxubW0vdm1zY2FuLmM6MzY0MTpcXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcXG5tbS92bXNjYW4uYy0zNjQyLVxcbi0tXFxubW0vdm1zY2FuLmM9MzcxNz1zdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM3MjYtXFx0dW5zaWduZWQgbG9uZyBmaXJzdCA9IC0xO1xcbm1tL3Ztc2Nhbi5jOjM3Mjc6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxubW0vdm1zY2FuLmM6MzcyODpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG5tbS92bXNjYW4uYy0zNzI5LVxcbi0tXFxubW0vdm1zY2FuLmM9Mzc5MD1zdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1zY2FuLmMtMzc5Ni1cXHR1bnNpZ25lZCBsb25nIG5leHQ7XFxubW0vdm1zY2FuLmM6Mzc5NzpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cXHUwMDNlcHJpdmF0ZTtcXG5tbS92bXNjYW4uYy0zNzk4LVxcbi0tXFxubW0vdm1zY2FuLmMtMzgzMS1cXG5tbS92bXNjYW4uYzozODMyOnN0YXRpYyB2b2lkIHdhbGtfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXFxubW0vdm1zY2FuLmMtMzgzMy17XFxuLS1cXG5tbS92bXNjYW4uYy0zODY2LVxcbm1tL3Ztc2Nhbi5jOjM4Njc6c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKnNldF9tbV93YWxrKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZm9yY2VfYWxsb2MpXFxubW0vdm1zY2FuLmMtMzg2OC17XFxubW0vdm1zY2FuLmM6Mzg2OTpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gY3VycmVudC1cXHUwMDNlcmVjbGFpbV9zdGF0ZS1cXHUwMDNlbW1fd2FsaztcXG5tbS92bXNjYW4uYy0zODcwLVxcbi0tXFxubW0vdm1zY2FuLmM9Mzg4Nz1zdGF0aWMgdm9pZCBjbGVhcl9tbV93YWxrKHZvaWQpXFxubW0vdm1zY2FuLmMtMzg4OC17XFxubW0vdm1zY2FuLmM6Mzg4OTpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gY3VycmVudC1cXHUwMDNlcmVjbGFpbV9zdGF0ZS1cXHUwMDNlbW1fd2FsaztcXG5tbS92bXNjYW4uYy0zODkwLVxcbi0tXFxubW0vdm1zY2FuLmM9MzkwMD1zdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM5MDMtXFx0aW50IHJlbWFpbmluZyA9IE1BWF9MUlVfQkFUQ0g7XFxubW0vdm1zY2FuLmM6MzkwNDpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTM5MDUtXFx0aW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbm1tL3Ztc2Nhbi5jOjM5MDY6XFx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxubW0vdm1zY2FuLmMtMzkwNy1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTM5NTM9c3RhdGljIHZvaWQgdHJ5X3RvX2luY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy0zOTU2LVxcdGJvb2wgc2VxX2luY19mbGFnID0gZmFsc2U7XFxubW0vdm1zY2FuLmM6Mzk1NzpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTM5NTgtXFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM5NjQtXFx0XFx0d2hpbGUgKG1pbl9zZXFbdHlwZV0gKyBNSU5fTlJfR0VOUyBcXHUwMDNjPSBscnVnZW4tXFx1MDAzZW1heF9zZXEpIHtcXG5tbS92bXNjYW4uYzozOTY1OlxcdFxcdFxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWluX3NlcVt0eXBlXSk7XFxubW0vdm1zY2FuLmMtMzk2Ni1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTM5ODUtXFxubW0vdm1zY2FuLmM6Mzk4NjpcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gbHJ1X2dlbl9mb2xpbyAqL1xcbm1tL3Ztc2Nhbi5jLTM5ODctXFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAyNlxcdTAwMjYgc3dhcHBpbmVzcyBcXHUwMDNjPSBNQVhfU1dBUFBJTkVTUykge1xcbi0tXFxubW0vdm1zY2FuLmM9NDAwNT1zdGF0aWMgYm9vbCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwMDktXFx0aW50IHR5cGUsIHpvbmU7XFxubW0vdm1zY2FuLmM6NDAxMDpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQwMTEtcmVzdGFydDpcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwNDAtXFx0ICovXFxubW0vdm1zY2FuLmM6NDA0MTpcXHRwcmV2ID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1heF9zZXEgLSAxKTtcXG5tbS92bXNjYW4uYzo0MDQyOlxcdG5leHQgPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWF4X3NlcSArIDEpO1xcbm1tL3Ztc2Nhbi5jLTQwNDMtXFxuLS1cXG5tbS92bXNjYW4uYz00MDcwPXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNDA3My1cXHRib29sIHN1Y2Nlc3M7XFxubW0vdm1zY2FuLmM6NDA3NDpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xcbm1tL3Ztc2Nhbi5jLTQwNzUtXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMO1xcbm1tL3Ztc2Nhbi5jOjQwNzY6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYzo0MDc3OlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTQwNzgtXFxuLS1cXG5tbS92bXNjYW4uYy00MDg5LVxcdCAqIElmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXFxubW0vdm1zY2FuLmM6NDA5MDpcXHQgKiB0byBscnVfZ2VuX2xvb2tfYXJvdW5kKCksIHdoaWNoIG9ubHkgY2xlYXJzIHRoZSBhY2Nlc3NlZCBiaXQgaW4gYVxcbm1tL3Ztc2Nhbi5jLTQwOTEtXFx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XFxuLS1cXG5tbS92bXNjYW4uYz00MTU0PXN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY190eXBlX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXFxuLS1cXG5tbS92bXNjYW4uYy00MTU3LVxcdHVuc2lnbmVkIGxvbmcgc2VxLCB0b3RhbCA9IDA7XFxubW0vdm1zY2FuLmM6NDE1ODpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQxNTktXFx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQxNjItXFx0Zm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXFx1MDAzYz0gbWF4X3NlcTsgc2VxKyspIHtcXG5tbS92bXNjYW4uYzo0MTYzOlxcdFxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcXG5tbS92bXNjYW4uYy00MTY0LVxcdFxcdGZvciAoem9uZSA9IDA7IHpvbmUgXFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUrKylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQxOTQ9c3RhdGljIGJvb2wgbHJ1dmVjX2lzX3JlY2xhaW1hYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy00MjA4LVxcbm1tL3Ztc2Nhbi5jOjQyMDk6XFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSk7XFxubW0vdm1zY2FuLmMtNDIxMC1cXHRiaXJ0aCA9IFJFQURfT05DRShscnV2ZWMtXFx1MDAzZWxydWdlbi50aW1lc3RhbXBzW2dlbl0pO1xcbi0tXFxubW0vdm1zY2FuLmMtNDIxNS0vKiB0byBwcm90ZWN0IHRoZSB3b3JraW5nIHNldCBvZiB0aGUgbGFzdCBOIGppZmZpZXMgKi9cXG5tbS92bXNjYW4uYzo0MjE2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGxydV9nZW5fbWluX3R0bCBfX3JlYWRfbW9zdGx5O1xcbm1tL3Ztc2Nhbi5jLTQyMTctXFxubW0vdm1zY2FuLmM6NDIxODpzdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTQyMTkte1xcbm1tL3Ztc2Nhbi5jLTQyMjAtXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbm1tL3Ztc2Nhbi5jOjQyMjE6XFx0dW5zaWduZWQgbG9uZyBtaW5fdHRsID0gUkVBRF9PTkNFKGxydV9nZW5fbWluX3R0bCk7XFxubW0vdm1zY2FuLmMtNDIyMi1cXHRib29sIHJlY2xhaW1hYmxlID0gIW1pbl90dGw7XFxuLS1cXG5tbS92bXNjYW4uYy00MjY0LSAqL1xcbm1tL3Ztc2Nhbi5jOjQyNjU6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbm1tL3Ztc2Nhbi5jLTQyNjYte1xcbi0tXFxubW0vdm1zY2FuLmMtNDI3MC1cXHR1bnNpZ25lZCBsb25nIGVuZDtcXG5tbS92bXNjYW4uYzo0MjcxOlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XFxubW0vdm1zY2FuLmMtNDI3Mi1cXHRzdHJ1Y3QgZm9saW8gKmxhc3QgPSBOVUxMO1xcbi0tXFxubW0vdm1zY2FuLmMtNDI4MC1cXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XFxubW0vdm1zY2FuLmM6NDI4MTpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGU7XFxubW0vdm1zY2FuLmMtNDI4Mi1cXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XFxuLS1cXG5tbS92bXNjYW4uYy00MzIwLVxcdG1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktXFx1MDAzZWxydWdlbi5tYXhfc2VxKTtcXG5tbS92bXNjYW4uYzo0MzIxOlxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XFxubW0vdm1zY2FuLmMtNDMyMi1cXHRtbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbi0tXFxubW0vdm1zY2FuLmM9NDM4Mz1lbnVtIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQzOTAtXFxubW0vdm1zY2FuLmM6NDM5MTpzdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcXG5tbS92bXNjYW4uYy00MzkyLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ0MzgtXFxubW0vdm1zY2FuLmM6NDQzOTp2b2lkIGxydV9nZW5fb25saW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy00NDQwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ0NjMtXFxubW0vdm1zY2FuLmM6NDQ2NDp2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNDQ2NS17XFxuLS1cXG5tbS92bXNjYW4uYy00NDcwLVxcbm1tL3Ztc2Nhbi5jOjQ0NzE6XFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfT0xEKTtcXG5tbS92bXNjYW4uYy00NDcyLVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ0NzQtXFxubW0vdm1zY2FuLmM6NDQ3NTp2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNDQ3Ni17XFxuLS1cXG5tbS92bXNjYW4uYy00NTAwLVxcbm1tL3Ztc2Nhbi5jOjQ1MDE6dm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDUwMi17XFxuLS1cXG5tbS92bXNjYW4uYy00NTA2LVxcdGlmIChSRUFEX09OQ0UobHJ1dmVjLVxcdTAwM2VscnVnZW4uc2VnKSAhPSBNRU1DR19MUlVfSEVBRClcXG5tbS92bXNjYW4uYzo0NTA3OlxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX0hFQUQpO1xcbm1tL3Ztc2Nhbi5jLTQ1MDgtfVxcbm1tL3Ztc2Nhbi5jLTQ1MDktXFxubW0vdm1zY2FuLmM6NDUxMDpib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ1MTEte1xcbi0tXFxubW0vdm1zY2FuLmM9NDUyMz1zdGF0aWMgdm9pZCB0cnlfdG9faW5jX21heF9zZXFfbm93YWxrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1MjUte1xcbm1tL3Ztc2Nhbi5jOjQ1MjY6XFx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcXG5tbS92bXNjYW4uYzo0NTI3OlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTQ1MjgtXFx0aW50IHN3YXBwaW5lc3MgPSBtZW1fY2dyb3VwX3N3YXBwaW5lc3MobWVtY2cpO1xcbi0tXFxubW0vdm1zY2FuLmMtNDU1Ni0gKi9cXG5tbS92bXNjYW4uYzo0NTU3OnZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ1NTgte1xcbi0tXFxubW0vdm1zY2FuLmMtNDU4My0gKiAgICBnZW5lcmF0aW9ucyBvbiBhbiBMUlUgbGlzdC5cXG5tbS92bXNjYW4uYzo0NTg0OiAqIDQuIEluIGxydV9nZW5fZGVsX2ZvbGlvKCksIHRoZSBnZW5lcmF0aW9uIHRvIHdoaWNoIHRoZSBmb2xpbyBiZWxvbmdzIGlzXFxubW0vdm1zY2FuLmMtNDU4NS0gKiAgICBmb3VuZCBiYXNlZCBvbiB0aGUgZ2VuZXJhdGlvbiBpbmZvcm1hdGlvbiBpbiBmb2xpby1cXHUwMDNlZmxhZ3MsIGFuZCB0aGVcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1ODctICogICAgdGhlIGxydSBzaXplIGNvcnJlY3RseSBkdXJpbmcgcmVwYXJlbnRpbmcsIG90aGVyd2lzZSB0aGUgbHJ1IHNpemUgbWF5XFxubW0vdm1zY2FuLmM6NDU4ODogKiAgICBiZSB1cGRhdGVkIGluY29ycmVjdGx5IGluIGxydV9nZW5fZGVsX2ZvbGlvKCkuXFxubW0vdm1zY2FuLmMtNDU4OS0gKlxcbi0tXFxubW0vdm1zY2FuLmMtNDU5Ny0gKi9cXG5tbS92bXNjYW4uYzo0NTk4OnN0YXRpYyB2b2lkIF9fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsIHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMsXFxubW0vdm1zY2FuLmMtNDU5OS1cXHRcXHRcXHRcXHQgICAgIGludCB6b25lLCBpbnQgdHlwZSlcXG5tbS92bXNjYW4uYy00NjAwLXtcXG5tbS92bXNjYW4uYzo0NjAxOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpjaGlsZF9scnVnZW4sICpwYXJlbnRfbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQ2MDItXFx0ZW51bSBscnVfbGlzdCBscnUgPSB0eXBlICogTFJVX0lOQUNUSVZFX0ZJTEU7XFxuLS1cXG5tbS92bXNjYW4uYy00NjA4LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBnZXRfbnJfZ2VucyhjaGlsZF9scnV2ZWMsIHR5cGUpOyBpKyspIHtcXG5tbS92bXNjYW4uYzo0NjA5OlxcdFxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGNoaWxkX2xydWdlbi1cXHUwMDNlbWF4X3NlcSAtIGkpO1xcbm1tL3Ztc2Nhbi5jLTQ2MTAtXFx0XFx0bG9uZyBucl9wYWdlcyA9IGNoaWxkX2xydWdlbi1cXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXTtcXG5tbS92bXNjYW4uYzo0NjExOlxcdFxcdGludCBjaGlsZF9scnVfYWN0aXZlID0gbHJ1X2dlbl9pc19hY3RpdmUoY2hpbGRfbHJ1dmVjLCBnZW4pID8gTFJVX0FDVElWRSA6IDA7XFxubW0vdm1zY2FuLmM6NDYxMjpcXHRcXHRpbnQgcGFyZW50X2xydV9hY3RpdmUgPSBscnVfZ2VuX2lzX2FjdGl2ZShwYXJlbnRfbHJ1dmVjLCBnZW4pID8gTFJVX0FDVElWRSA6IDA7XFxubW0vdm1zY2FuLmMtNDYxMy1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2MjEtXFxubW0vdm1zY2FuLmM6NDYyMjpcXHRcXHRpZiAobHJ1X2dlbl9pc19hY3RpdmUoY2hpbGRfbHJ1dmVjLCBnZW4pICE9IGxydV9nZW5faXNfYWN0aXZlKHBhcmVudF9scnV2ZWMsIGdlbikpIHtcXG5tbS92bXNjYW4uYy00NjIzLVxcdFxcdFxcdF9fdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1ICsgY2hpbGRfbHJ1X2FjdGl2ZSwgem9uZSwgLW5yX3BhZ2VzKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2MjgtXFxubW0vdm1zY2FuLmM6NDYyOTp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ2MzAte1xcbi0tXFxubW0vdm1zY2FuLmMtNDY0MC1cXHRcXHRmb3IgKHR5cGUgPSAwOyB0eXBlIFxcdTAwM2MgQU5PTl9BTkRfRklMRTsgdHlwZSsrKVxcbm1tL3Ztc2Nhbi5jOjQ2NDE6XFx0XFx0XFx0X19scnVfZ2VuX3JlcGFyZW50X21lbWNnKGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgemlkLCB0eXBlKTtcXG5tbS92bXNjYW4uYy00NjQyLVxcbi0tXFxubW0vdm1zY2FuLmM9NDY2Mz1zdGF0aWMgYm9vbCBzb3J0X2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy00NjcyLVxcdGludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpO1xcbm1tL3Ztc2Nhbi5jOjQ2NzM6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy00Njc0LVxcbi0tXFxubW0vdm1zY2FuLmMtNDY4MS1cXHQvKiBwcm9tb3RlZCAqL1xcbm1tL3Ztc2Nhbi5jOjQ2ODI6XFx0aWYgKGdlbiAhPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSkpIHtcXG5tbS92bXNjYW4uYy00NjgzLVxcdFxcdGxpc3RfbW92ZShcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgXFx1MDAyNmxydWdlbi1cXHUwMDNlZm9saW9zW2dlbl1bdHlwZV1bem9uZV0pO1xcbi0tXFxubW0vdm1zY2FuLmM9NDcxMj1zdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00NzI5LVxcbm1tL3Ztc2Nhbi5jOjQ3MzA6XFx0c3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpO1xcbm1tL3Ztc2Nhbi5jLTQ3MzEtXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7XFxuLS1cXG5tbS92bXNjYW4uYz00NzM2PXN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy00NzQ3LVxcdHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nID0gbnJfdG9fc2NhbjtcXG5tbS92bXNjYW4uYzo0NzQ4OlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtNDc0OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ3NTUtXFxubW0vdm1zY2FuLmM6NDc1NjpcXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxubW0vdm1zY2FuLmMtNDc1Ny1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ4MzE9c3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy00ODY2LSAqL1xcbm1tL3Ztc2Nhbi5jOjQ4Njc6c3RhdGljIGJvb2wgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLFxcbm1tL3Ztc2Nhbi5jLTQ4NjgtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYz00OTAzPXN0YXRpYyB1bnNpZ25lZCBpbnQgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5MjYtXFxubW0vdm1zY2FuLmM6NDkyNzpcXHRcXHRcXHRpZiAoIWxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQobHJ1dmVjLCBpLCBzYykpXFxubW0vdm1zY2FuLmMtNDkyOC1cXHRcXHRcXHRcXHRhbGxvd2VkIHw9IEJJVChpKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ5OTg9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy01MDA2LVxcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcXG5tbS92bXNjYW4uYzo1MDA3OlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XFxubW0vdm1zY2FuLmMtNTAwOC1cXHRpbnQgc2Nhbm5lZCwgcmVjbGFpbWVkO1xcbi0tXFxubW0vdm1zY2FuLmMtNTA3OC1cXHRcXHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xcbm1tL3Ztc2Nhbi5jOjUwNzk6XFx0XFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKVxcbm1tL3Ztc2Nhbi5jLTUwODAtXFx0XFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7XFxuLS1cXG5tbS92bXNjYW4uYz01MjQ0PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI1MS1cXG5tbS92bXNjYW4uYzo1MjUyOlxcdC8qIGxydV9nZW5fYWdlX25vZGUoKSBjYWxsZWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpICovXFxubW0vdm1zY2FuLmMtNTI1My1cXHRpZiAobWVtX2Nncm91cF9iZWxvd19taW4oTlVMTCwgbWVtY2cpKVxcbi0tXFxubW0vdm1zY2FuLmM9NTI4NT1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyOTEtXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbm1tL3Ztc2Nhbi5jOjUyOTI6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbjtcXG5tbS92bXNjYW4uYy01MjkzLVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzMDUtXFx0XFx0aWYgKG9wKSB7XFxubW0vdm1zY2FuLmM6NTMwNjpcXHRcXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIG9wKTtcXG5tbS92bXNjYW4uYy01MzA3LVxcdFxcdFxcdG9wID0gMDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzMTktXFx0XFx0aWYgKCFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpIHtcXG5tbS92bXNjYW4uYzo1MzIwOlxcdFxcdFxcdGxydV9nZW5fcmVsZWFzZV9tZW1jZyhtZW1jZyk7XFxubW0vdm1zY2FuLmMtNTMyMS1cXHRcXHRcXHRtZW1jZyA9IE5VTEw7XFxuLS1cXG5tbS92bXNjYW4uYy01MzM3LVxcdGlmIChvcClcXG5tbS92bXNjYW4uYzo1MzM4OlxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgb3ApO1xcbm1tL3Ztc2Nhbi5jLTUzMzktXFxuLS1cXG5tbS92bXNjYW4uYy01MzQ0LVxcbm1tL3Ztc2Nhbi5jOjUzNDU6XFx0LyogcmVzdGFydCBpZiByYWNlZCB3aXRoIGxydV9nZW5fcm90YXRlX21lbWNnKCkgKi9cXG5tbS92bXNjYW4uYy01MzQ2LVxcdGlmIChnZW4gIT0gZ2V0X251bGxzX3ZhbHVlKHBvcykpXFxuLS1cXG5tbS92bXNjYW4uYy01MzU0LVxcbm1tL3Ztc2Nhbi5jOjUzNTU6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTM1Ni17XFxuLS1cXG5tbS92bXNjYW4uYy01MzY4LVxcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYzo1MzY5OlxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcXG5tbS92bXNjYW4uYy01MzcwLVxcbi0tXFxubW0vdm1zY2FuLmMtNTM3NS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTc6MjQuNTExNTE0NTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjczOTkyNDQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTUdMUlUgRXZpY3Rpb24gUG9pbnRzIGZvciBGdXp6aW5nIEZvY3VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSBwcmltZSBjYW5kaWRhdGVzIHdpdGhpbiB0aGUgTUdMUlUgZXZpY3Rpb24gcHJvY2VzcyBmb3IgZm9jdXNlZCBmdXp6aW5nLiBXZSdyZSBsb29raW5nIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgbGlrZWx5IGVudHJ5IHBvaW50cywgYXJlbid0IGlubGluZWQgKHNvIHRoZXkgaGF2ZSBkaXN0aW5jdCBhZGRyZXNzZXMgZm9yIHRoZSBmdXp6ZXIpLCBhbmQgYXJlbid0IG92ZXJseSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gV2Ugd2FudCB0byBhdm9pZCBiaWFzaW5nIHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbiwgc28gYnJvYWQsIGNvbW1vbiBmdW5jdGlvbnMgYXJlIG91dC5cblxuSSdtIHN0YXJ0aW5nIGJ5IGxvb2tpbmcgYXQgYGxydV9nZW5fc2VxX3dyaXRlYCwgc2luY2UgaXQncyBhc3NvY2lhdGVkIHdpdGggdGhlIGAvc3lzL2tlcm5lbC9tbS9scnVfZ2VuL2Agc3lzZnMgaW50ZXJmYWNlIG9yIGRlYnVnZnMuIEl0IG1ha2VzIHNlbnNlIHRvIGNoZWNrIGJvdGggdGhpcyBhbmQgYGVuYWJsZWRfc3RvcmVgLiBJJ20gYWxzbyBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnMgaW4gdGhlIGBscnVfZ2VuYCBjb250ZXh0LCB3aGljaCBpbmNsdWRlOiBgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZGAsIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXNgLCBgaXNvbGF0ZV9mb2xpb3NgLCBgZXZpY3RfZm9saW9zYCwgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AsIGBscnVfZ2VuX3Nocmlua19ub2RlYCwgYW5kIGBscnVfZ2VuX3NlcV93cml0ZWAuXG5cblRoZSBpbnN0cnVjdGlvbnMgSSdtIGZvbGxvd2luZyBoaWdobGlnaHQgdGhlIGltcG9ydGFuY2Ugb2Ygbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGlzIHRlbGxzIG1lIEkgc2hvdWxkIHByaW9yaXRpemUgZnVuY3Rpb25zIHRoYXQgYXJlICpub3QqIHN0YXRpYywgYXMgdGhlIGNvbXBpbGVyIGlzIGxpa2VseSB0byBpbmxpbmUgdGhvc2Ugd2hpY2ggZG9uJ3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCBhbmQgYXJlIGV4dGVybmFsIHRvIHRoZSBNR0xSVSBjb2RlIGFzIGVudHJ5IHBvaW50cy5cblxuR2l2ZW4gdGhpcywgSSdtIG5vdyBjcm9zcy1yZWZlcmVuY2luZyB0aGlzIGluZm9ybWF0aW9uIHdpdGggdGhlIGZ1bmN0aW9ucyBJIGp1c3QgbGlzdGVkLCBzcGVjaWZpY2FsbHkgdGhvc2UgaW4gYG1tL3Ztc2Nhbi5jYC4gVGhlIG9uZXMgdGhhdCBqdW1wIG91dCBhcyBwb3RlbnRpYWwgdGFyZ2V0cyBmb3IgZnV6emluZywgZ2l2ZW4gdGhlc2UgY29uc3RyYWludHMgYXJlOiBgbHJ1X2dlbl9zZXFfd3JpdGVgLCBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAsIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgLCBgZXZpY3RfZm9saW9zYCwgYGlzb2xhdGVfZm9saW9zYCwgYHRocm90dGxlX2V2aWN0YWJsZV90eXBlc2AsIGFuZCBgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZGAuIEkgbmVlZCB0byBub3cgZGV0ZXJtaW5lIGlmIGFueSBhcmUgbm9uLXN0YXRpYyBhbmQgZml0IHRoaXMgY3JpdGVyaW9uLCBhbmQgYWxzbyB3aGV0aGVyIGFueSBmdW5jdGlvbnMgZWxzZXdoZXJlIHRoYXQgc2VydmUgYXMgZW50cnkgcG9pbnRzIGludG8gTUdMUlUgZXZpY3Rpb24gYXJlIHdvcnRoIGV4cGxvcmluZy4gTG9va2luZyBhdCBzeXNmcyBhbmQgcHJvY2ZzIGZ1bmN0aW9ucyBsaWtlIGBscnVfZ2VuX3NlcV93cml0ZWAgaXMgcHJvYmFibHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBsb2NhdGluZyB0aG9zZSBlbnRyeSBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDE1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAzOjE3OjMxLjI1MTQ0MjYwM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ2MTI3NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9zZXFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTU2Mzg9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbHJ1X2dlbl9hdHRyX2dyb3VwID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNTY0Ni1cXG5tbS92bXNjYW4uYzo1NjQ3OnN0YXRpYyB2b2lkICpscnVfZ2VuX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKVxcbm1tL3Ztc2Nhbi5jLTU2NDgte1xcbi0tXFxubW0vdm1zY2FuLmMtNTY2OC1cXG5tbS92bXNjYW4uYzo1NjY5OnN0YXRpYyB2b2lkIGxydV9nZW5fc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbm1tL3Ztc2Nhbi5jLTU2NzAte1xcbi0tXFxubW0vdm1zY2FuLmMtNTY3Ny1cXG5tbS92bXNjYW4uYzo1Njc4OnN0YXRpYyB2b2lkICpscnVfZ2VuX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXFxubW0vdm1zY2FuLmMtNTY3OS17XFxuLS1cXG5tbS92bXNjYW4uYy01Njk2LVxcbm1tL3Ztc2Nhbi5jOjU2OTc6c3RhdGljIHZvaWQgbHJ1X2dlbl9zZXFfc2hvd19mdWxsKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbm1tL3Ztc2Nhbi5jLTU2OTgtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIG1heF9zZXEsIHVuc2lnbmVkIGxvbmcgKm1pbl9zZXEsXFxuLS1cXG5tbS92bXNjYW4uYy01NzUxLS8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cXG5tbS92bXNjYW4uYzo1NzUyOnN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxubW0vdm1zY2FuLmMtNTc1My17XFxuLS1cXG5tbS92bXNjYW4uYy01ODAxLVxcdFxcdGlmIChmdWxsKVxcbm1tL3Ztc2Nhbi5jOjU4MDI6XFx0XFx0XFx0bHJ1X2dlbl9zZXFfc2hvd19mdWxsKG0sIGxydXZlYywgbWF4X3NlcSwgbWluX3NlcSwgc2VxKTtcXG5tbS92bXNjYW4uYy01ODAzLVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4MDctXFxubW0vdm1zY2FuLmM6NTgwODpzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGxydV9nZW5fc2VxX29wcyA9IHtcXG5tbS92bXNjYW4uYzo1ODA5OlxcdC5zdGFydCA9IGxydV9nZW5fc2VxX3N0YXJ0LFxcbm1tL3Ztc2Nhbi5jOjU4MTA6XFx0LnN0b3AgPSBscnVfZ2VuX3NlcV9zdG9wLFxcbm1tL3Ztc2Nhbi5jOjU4MTE6XFx0Lm5leHQgPSBscnVfZ2VuX3NlcV9uZXh0LFxcbm1tL3Ztc2Nhbi5jOjU4MTI6XFx0LnNob3cgPSBscnVfZ2VuX3NlcV9zaG93LFxcbm1tL3Ztc2Nhbi5jLTU4MTMtfTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU4NTY9c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNTg5Ny0vKiBzZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzICovXFxubW0vdm1zY2FuLmM6NTg5ODpzdGF0aWMgc3NpemVfdCBscnVfZ2VuX3NlcV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnNyYyxcXG5tbS92bXNjYW4uYy01ODk5LVxcdFxcdFxcdFxcdCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5ODEtXFxubW0vdm1zY2FuLmM6NTk4MjpzdGF0aWMgaW50IGxydV9nZW5fc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxubW0vdm1zY2FuLmMtNTk4My17XFxubW0vdm1zY2FuLmM6NTk4NDpcXHRyZXR1cm4gc2VxX29wZW4oZmlsZSwgXFx1MDAyNmxydV9nZW5fc2VxX29wcyk7XFxubW0vdm1zY2FuLmMtNTk4NS19XFxuLS1cXG5tbS92bXNjYW4uYz01OTg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxydV9nZW5fcndfZm9wcyA9IHtcXG5tbS92bXNjYW4uYzo1OTg4OlxcdC5vcGVuID0gbHJ1X2dlbl9zZXFfb3BlbixcXG5tbS92bXNjYW4uYy01OTg5LVxcdC5yZWFkID0gc2VxX3JlYWQsXFxubW0vdm1zY2FuLmM6NTk5MDpcXHQud3JpdGUgPSBscnVfZ2VuX3NlcV93cml0ZSxcXG5tbS92bXNjYW4uYy01OTkxLVxcdC5sbHNlZWsgPSBzZXFfbHNlZWssXFxuLS1cXG5tbS92bXNjYW4uYz01OTk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxydV9nZW5fcm9fZm9wcyA9IHtcXG5tbS92bXNjYW4uYzo1OTk2OlxcdC5vcGVuID0gbHJ1X2dlbl9zZXFfb3BlbixcXG5tbS92bXNjYW4uYy01OTk3LVxcdC5yZWFkID0gc2VxX3JlYWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAzOjE3OjMxLjMwNjA2NTA5OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDI4ODA0OTA1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNR0xSVSBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSB0cnlpbmcgdG8gYWNoaWV2ZS4gSSBzZWUgaXQncyBmb2N1c2luZyBvbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHN1YnN5c3RlbSwgYW5kIHNwZWNpZmljYWxseSBtZW50aW9ucyBuZXcgdHJhY2tpbmcgYW5kIHRocm90dGxpbmcgbWVjaGFuaXNtcyBmb3IgaXNvbGF0ZWQgcGFnZXMuIEknbSB0YWtpbmcgYSBsb29rIGF0IGEgZmV3IFwiRm9jdXNTeW1ib2xzXCIgd2hpY2ggYXJlOiBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYCwgYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRgLCBgaXNvbGF0ZV9mb2xpb3NgLCBgZXZpY3RfZm9saW9zYCwgYW5kIGBscnVfZ2VuX3NlcV93cml0ZWAuIFRoaXMgaGludHMgdGhhdCB0aGUgZ29hbCBoZXJlIGlzIHRvIHByZXZlbnQgbG9ja3VwcyBhbmQgZXhjZXNzaXZlIGlzb2xhdGlvbiBieSB0aHJvdHRsaW5nIHRoZSByZWNsYWltIHByb2Nlc3Mgd2hlbiB0b28gbWFueSBmb2xpb3MgYXJlIGluIGFuIGlzb2xhdGVkIHN0YXRlLiBTbyBpdCBsb29rcyBsaWtlIGEgbmV3IHRocm90dGxlIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBwcm9jZXNzLlxuXG5Ob3csIEknbGwgcXVpY2tseSBjaGVjayB0aGUgXCJFbmFibGVDb25maWdzXCIuIEl0J3MgdXNpbmcgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYC4gQSBxdWljayBsb29rIGF0IHRoZSBLY29uZmlnIGZpbGUgY29uZmlybXMgdGhlIGRlcGVuZGVuY2llczogYExSVV9HRU5gIHJlbGllcyBvbiBgTU1VYCBhbmQgYSBmZXcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmRpdGlvbnMsIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBkZXBlbmRzIG9uIGBMUlVfR0VOYC4gT2theSwgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC5cblxuQmVmb3JlIEkgc2lnbiBvZmYsIEkganVzdCBuZWVkIHRvIHN1bW1hcml6ZSBldmVyeXRoaW5nLiBUaGUgcGF0Y2ggaXMgZGVlbWVkIFwiV29ydGhGdXp6aW5nXCIgYmVjYXVzZSBpdCdzIGFsdGVyaW5nIGNydWNpYWwgbWVtb3J5IHJlY2xhbWF0aW9uIGxvZ2ljIHdpdGhpbiB0aGUgTUdMUlUuIEl0J3MgYWRkaW5nIHRoaXMgbmV3IGlzb2xhdGlvbiB0cmFja2luZyBhbmQgdGhyb3R0bGluZywgc3BlY2lmaWNhbGx5IGluIGBtbS92bXNjYW4uY2AsIHRvIG1hbmFnZSBleGNlc3NpdmUgZm9saW8gaXNvbGF0aW9uLiBUaGUgaW1wb3J0YW50IEZvY3VzU3ltYm9scyBhbmQgRW5hYmxlQ29uZmlncyBhcmU6IGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXNgLCBgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZGAsIGBpc29sYXRlX2ZvbGlvc2AsIGBldmljdF9mb2xpb3NgLCBhbmQgYGxydV9nZW5fc2VxX3dyaXRlYCwgYW5kIGBMUlVfR0VOYCwgYExSVV9HRU5fRU5BQkxFRGAgcmVzcGVjdGl2ZWx5LlxuXG5Pa2F5LCB0aGF0J3MgZXZlcnl0aGluZy4gSSdtIGNvbmZpZGVudCBpbiB0aGUgYXNzZXNzbWVudC4gSSB3aWxsIHNldCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAwNDcsIk91dHB1dFRva2VucyI6MTY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAzOjE3OjUxLjU5NDExOTM5NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MDA2NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aHJvdHRsZV9ldmljdGFibGVfdHlwZXNcIixcbiAgICBcImxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRcIixcbiAgICBcImlzb2xhdGVfZm9saW9zXCIsXG4gICAgXCJldmljdF9mb2xpb3NcIixcbiAgICBcImxydV9nZW5fc2VxX3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBpc29sYXRlZCBmb2xpbyBhY2NvdW50aW5nIGFuZCByZWNsYWltIHRocm90dGxpbmcgZm9yIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBpbiBtbS92bXNjYW4uYywgaW1wbGVtZW50aW5nIGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQoKSBhbmQgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzKCkgdG8gcHJldmVudCBleGNlc3NpdmUgZm9saW8gaXNvbGF0aW9uIGR1cmluZyBtZW1vcnkgcHJlc3N1cmUgYW5kIGRpcmVjdCByZWNsYWltLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aHJvdHRsZV9ldmljdGFibGVfdHlwZXNcIixcbiAgICBcImxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRcIixcbiAgICBcImlzb2xhdGVfZm9saW9zXCIsXG4gICAgXCJldmljdF9mb2xpb3NcIixcbiAgICBcImxydV9nZW5fc2VxX3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBpc29sYXRlZCBmb2xpbyBhY2NvdW50aW5nIGFuZCByZWNsYWltIHRocm90dGxpbmcgZm9yIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBpbiBtbS92bXNjYW4uYywgaW1wbGVtZW50aW5nIGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQoKSBhbmQgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzKCkgdG8gcHJldmVudCBleGNlc3NpdmUgZm9saW8gaXNvbGF0aW9uIGR1cmluZyBtZW1vcnkgcHJlc3N1cmUgYW5kIGRpcmVjdCByZWNsYWltLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTc6NTEuNjgwMTM0MjQ4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQyNjc0NDMyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAzOjE3OjUxLjY4MDc1MjgyOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0NDI2MTIxNjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBlci1scnV2ZWMgaXNvbGF0aW9uIGFjY291bnRpbmcgKGBucl9pc29sYXRlZGApIGFuZCBpc29sYXRpb24gdGhyb3R0bGluZyAoYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRgLCBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYCkgZm9yIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0uXFxuXFxuQW5hbHlzaXMgYWdhaW5zdCBLTVNBTiBhcHBsaWNhYmlsaXR5OlxcbjEuIFVzZXItc3BhY2UgbGVha3M6IE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgZXhwb3NlZCB2aWEgaW9jdGxzL3N5c2ZzL25ldGxpbmsvQlBGIGJ1ZmZlcnMuXFxuMi4gVW5pbml0aWFsaXplZCB2YXJpYWJsZXM6IEFsbCBhZGRlZCBsb2NhbCB2YXJpYWJsZXMgKGBhbGxvd2VkYCwgYGZhdGFsYCwgYHN0YWxsZWRgKSBhbmQgc3RydWN0IGZpZWxkcyAoYG5yX2lzb2xhdGVkYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFuZCBtYW5hZ2VkIChlLmcuLCBgKmZhdGFsYCBpcyBpbml0aWFsaXplZCB0byBmYWxzZSB1cG9uIGVudGVyaW5nIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKWAsIGBzdHJ1Y3QgbHJ1dmVjYCBtZW1vcnkgaXMgemVyby1hbGxvY2F0ZWQgZHVyaW5nIG5vZGUvbWVtY2cgaW5pdGlhbGl6YXRpb24pLlxcbjMuIEJ1ZmZlciBib3VuZHMgLyBtZW1vcnkgaGFuZGxpbmc6IFRoZSBwYXRjaCBvbmx5IGFkanVzdHMgcmVjbGFpbWVyIHNjaGVkdWxpbmcsIHRocm90dGxpbmcsIGFuZCBpc29sYXRpb24gY291bnRlcnMgd2l0aG91dCB0b3VjaGluZyB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3MsIHZhcmlhYmxlLWxlbmd0aCBidWZmZXJzLCBvciBzdHJ1Y3QgcGFkZGluZy5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIHJlbGF0ZSB0byByZWNsYWltIHRocm90dGxpbmcsIGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBjb3VudGVyIGltYmFsYW5jZXMsIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgKExPQ0tERVAsIEtBU0FOLCBXQVJOX09OKS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4MzZkOTY0MzNjMGVkNzZkMDcxMTI4OTdiZGYyNjY0YjFjMjg3ODE3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwMzoxNjo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCA5NGY5YzNmZjU0MTYwLi44MTliNmMwNTkxMTZlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTU4MCw2ICs1ODAsOCBAQCBzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyB7XG4gXHQvKiBjYW4gYmUgbW9kaWZpZWQgd2l0aG91dCBob2xkaW5nIHRoZSBMUlUgbG9jayAqL1xuIFx0YXRvbWljX2xvbmdfdCBldmljdGVkW05SX0hJU1RfR0VOU11bQU5PTl9BTkRfRklMRV1bTUFYX05SX1RJRVJTXTtcbiBcdGF0b21pY19sb25nX3QgcmVmYXVsdGVkW05SX0hJU1RfR0VOU11bQU5PTl9BTkRfRklMRV1bTUFYX05SX1RJRVJTXTtcbitcdC8qIHRoZSBudW1iZXIgb2YgZm9saW9zIGlzb2xhdGVkIGZyb20gdGhpcyBscnV2ZWMgYW5kIGJlaW5nIHJlY2xhaW1lZCAqL1xuK1x0YXRvbWljX2xvbmdfdCBucl9pc29sYXRlZFtBTk9OX0FORF9GSUxFXTtcbiBcdC8qIHdoZXRoZXIgdGhlIG11bHRpLWdlbiBMUlUgaXMgZW5hYmxlZCAqL1xuIFx0Ym9vbCBlbmFibGVkO1xuIFx0LyogdGhlIG1lbWNnIGdlbmVyYXRpb24gdGhpcyBscnVfZ2VuX2ZvbGlvIGJlbG9uZ3MgdG8gKi9cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBmMTE0OTFlZTllZDVjLi4yMTE4MzlkMTA5MDlhIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDE1MSwyNSArNDE1MSwzNCBAQCBzdGF0aWMgdm9pZCBzZXRfaW5pdGlhbF9wcmlvcml0eShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sXG4gXHRzYy1cdTAwM2Vwcmlvcml0eSA9IGNsYW1wKHByaW9yaXR5LCBERUZfUFJJT1JJVFkgLyAyLCBERUZfUFJJT1JJVFkpO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuIHtcbi1cdGludCBnZW4sIHR5cGUsIHpvbmU7XG4rXHRpbnQgZ2VuLCB6b25lO1xuIFx0dW5zaWduZWQgbG9uZyBzZXEsIHRvdGFsID0gMDtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuIFx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcbiBcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG4gXG4tXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7XG4tXHRcdGZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxIFx1MDAzYz0gbWF4X3NlcTsgc2VxKyspIHtcbi1cdFx0XHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4tXHRcdFx0Zm9yICh6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lKyspXG4tXHRcdFx0XHR0b3RhbCArPSBtYXgoUkVBRF9PTkNFKGxydWdlbi1cdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpO1xuLVx0XHR9XG4rXHRmb3IgKHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSBcdTAwM2M9IG1heF9zZXE7IHNlcSsrKSB7XG4rXHRcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbitcdFx0Zm9yICh6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lKyspXG4rXHRcdFx0dG90YWwgKz0gbWF4KFJFQURfT05DRShscnVnZW4tXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTtcbiBcdH1cbiBcbiBcdHJldHVybiB0b3RhbDtcbiB9XG4gXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4re1xuK1x0dW5zaWduZWQgbG9uZyB0b3RhbCA9IDA7XG4rXHRpbnQgdHlwZTtcbitcbitcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKHR5cGUsIHN3YXBwaW5lc3MpXG4rXHRcdHRvdGFsICs9IGxydXZlY190eXBlX2V2aWN0YWJsZV9zaXplKGxydXZlYywgdHlwZSk7XG4rXG4rXHRyZXR1cm4gdG90YWw7XG4rfVxuK1xuIHN0YXRpYyBib29sIGxydXZlY19pc19zaXphYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyB0b3RhbDtcbkBAIC00ODM4LDE1ICs0ODQ3LDEyOCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbiBcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcdTAwMjZzcCwgXHUwMDI2cHYpO1xuIH1cbiBcbisvKlxuKyAqIFRoZSBNR0xSVSBjb3VudGVycGFydCB0byB0b29fbWFueV9pc29sYXRlZCgpLlxuKyAqXG4rICogdG9vX21hbnlfaXNvbGF0ZWQoKSBjb21wYXJlcyBub2RlLXdpZGUgaXNvbGF0ZWQgY291bnRzIGFnYWluc3RcbisgKiBub2RlLXdpZGUgaW5hY3RpdmUgc2l6ZXMuIEl0IHByZWRhdGVzIHBlci1tZW1jZyBMUlUgbGlzdHMsIHdoaWNoXG4rICogbW92ZWQgaXNvbGF0aW9uIHRvIHBlci1scnV2ZWMgZ3JhbnVsYXJpdHkuIE1HTFJVIHJlY2xhaW1lcnMgY29udGVuZFxuKyAqIHBlciBscnV2ZWMsIHNvIHRoaXMgY2hlY2sgaXMgcGVyIGxydXZlYyBhcyB3ZWxsLCBhbmQgaXNvbGF0aW9uIGluXG4rICogb25lIG1lbWNnIGRvZXMgbm90IHRocm90dGxlIHJlY2xhaW0gaW4gYW5vdGhlci5cbisgKlxuKyAqIFRoZSBsZWdhY3kgdGhyZXNob2xkLCB0aGUgc2l6ZSBvZiB0aGUgaW5hY3RpdmUgbGlzdCwgaXMgbm90IHVzYWJsZVxuKyAqIGhlcmUgZWl0aGVyOiBpbiBNR0xSVSB0aGUgaW5hY3RpdmUgY291bnRlcnMgYXJlIG9ubHkgYSBjb21wYXRpYmlsaXR5XG4rICogc2hpbSAtIHRoZXkganVtcCBhcm91bmQgd2hlbiBzd2FwIHJ1bnMgb3V0IG9yIGEgbWVtY2cgaGl0cyBpdHMgc3dhcFxuKyAqIGxpbWl0LCBhbmQgcHJvYWN0aXZlIGFnaW5nIGNhbiBpbmZsYXRlIHRoZW0uIENvbXBhcmUgYWdhaW5zdCB0aGVcbisgKiB0b3RhbCBudW1iZXIgb2YgZXZpY3RhYmxlIHBhZ2VzIG9mIHRoZSB0eXBlIGRpdmlkZWQgYnkgTUlOX05SX0dFTlMsXG4rICogYXBwcm94aW1hdGluZyB0aGUgc2l6ZSBvZiBvbmUgZ2VuZXJhdGlvbiAtIHRoZSBzYW1lIHVuaXQgdGhlXG4rICogb3JpZ2luYWwgTUdMUlUgYWdpbmcgaGV1cmlzdGljcyB1c2VkLlxuKyAqL1xuK3N0YXRpYyBib29sIGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgaXNvbGF0ZWQsIGV2aWN0YWJsZTtcbitcbitcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoIXdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc2MpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpc29sYXRlZCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbi5ucl9pc29sYXRlZFt0eXBlXSk7XG4rXHRldmljdGFibGUgPSBscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShscnV2ZWMsIHR5cGUpO1xuK1xuK1x0LypcbitcdCAqIEdGUF9OT0lPL0dGUF9OT0ZTIGNhbGxlcnMgYXJlIGFsbG93ZWQgdG8gaXNvbGF0ZSBtb3JlIHBhZ2VzLCBzb1xuK1x0ICogdGhleSB3b24ndCBiZSBibG9ja2VkIGJ5IG5vcm1hbCBkaXJlY3QtcmVjbGFpbWVycywgZm9ybWluZyBhXG4rXHQgKiBjaXJjdWxhciBkZWFkbG9jay5cbitcdCAqL1xuK1x0aWYgKGdmcF9oYXNfaW9fZnMoc2MtXHUwMDNlZ2ZwX21hc2spKVxuK1x0XHRldmljdGFibGUgXHUwMDNlXHUwMDNlPSAzO1xuK1xuK1x0cmV0dXJuIGlzb2xhdGVkIFx1MDAzZSBldmljdGFibGUgLyBNSU5fTlJfR0VOUztcbit9XG4rXG4rLypcbisgKiBVbmxpa2UgdGhlIGxlZ2FjeSBwYXRoLCB3aGVyZSB0aGUgTFJVIGxpc3QgdG8gaXNvbGF0ZSBmcm9tIGlzIGtub3duXG4rICogYmVmb3JlIGlzb2xhdGlvbiwgaXNvbGF0ZV9mb2xpb3MoKSBwaWNrcyB0aGUgdHlwZSBmcm9tIHRoZSByZWZhdWx0XG4rICogZmVlZGJhY2sgYW5kIG1heSBmYWxsIGJhY2sgdG8gdGhlIG90aGVyIG9uZS4gVGhlcmVmb3JlLCBpbnN0ZWFkIG9mXG4rICogdGhyb3R0bGluZyBvbiBhIHNpbmdsZSB0eXBlLCBjb2xsZWN0IHRoZSBldmljdGFibGUgdHlwZXMgdGhhdCBkbyBub3RcbisgKiBoYXZlIHRvbyBtYW55IGlzb2xhdGVkIGZvbGlvcywgYW5kIG9ubHkgc2xlZXAgd2hlbiBhbGwgb2YgdGhlbSBkby5cbisgKlxuKyAqIFJldHVybnMgdGhlIG1hc2sgb2YgdGhlIHR5cGVzIGlzb2xhdGVfZm9saW9zKCkgbWF5IGlzb2xhdGUgZnJvbSwgb3JcbisgKiAwIGlmIHJlY2xhaW0gc2hvdWxkIHN0b3AuIEFsc28gc2V0cyBAZmF0YWwgdG8gdGVsbCB0aGUgY2FsbGVyIHRoYXRcbisgKiB0aGUgdGFzayByZWNlaXZlZCBhIGZhdGFsIHNpZ25hbCB3aGlsZSB3YWl0aW5nLlxuKyAqL1xuK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbitcdFx0XHRcdFx0ICAgICBpbnQgc3dhcHBpbmVzcyxcbitcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbitcdFx0XHRcdFx0ICAgICBib29sICpmYXRhbClcbit7XG4rXHR1bnNpZ25lZCBpbnQgYWxsb3dlZDtcbitcdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xuK1x0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuK1x0aW50IGk7XG4rXG4rXHQqZmF0YWwgPSBmYWxzZTtcbitcbitcdGZvciAoOzspIHtcbitcdFx0YWxsb3dlZCA9IDA7XG4rXHRcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEEgdHlwZSB3aXRoIG5vIGV2aWN0YWJsZSBmb2xpb3MgaGFzIG5vdGhpbmcgdG9cbitcdFx0XHQgKiBpc29sYXRlLiBEb24ndCBhbGxvdyBpdCwgb3RoZXJ3aXNlIHJlY2xhaW0gY2FuIGJlXG4rXHRcdFx0ICogcmVkaXJlY3RlZCB0byBpdCBhbmQgc3BpbiBtYWtpbmcgbm8gcHJvZ3Jlc3MsIGUuZy5cbitcdFx0XHQgKiB3aGVuIHRoZSBvbmx5IHR5cGUgd2l0aCBmb2xpb3MgaXMgb3Zlci1pc29sYXRlZC5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoIWxydXZlY190eXBlX2V2aWN0YWJsZV9zaXplKGxydXZlYywgaSkpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRpZiAoIWxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQobHJ1dmVjLCBpLCBzYykpXG4rXHRcdFx0XHRhbGxvd2VkIHw9IEJJVChpKTtcbitcdFx0fVxuK1xuK1x0XHRpZiAoYWxsb3dlZCkge1xuK1x0XHRcdC8qIFdha2UgdXAgcmVjbGFpbWVycyB3YWl0aW5nIG9uIHRoZSBpc29sYXRpb24gdG8gZ28gZG93bi4gKi9cbitcdFx0XHR3YWtlX3Rocm90dGxlX2lzb2xhdGVkKHBnZGF0KTtcbitcdFx0XHRyZXR1cm4gYWxsb3dlZDtcbitcdFx0fVxuK1xuK1x0XHQvKlxuK1x0XHQgKiBBbGwgZXZpY3RhYmxlIHR5cGVzIGFyZSBvdmVyLWlzb2xhdGVkLiBMaWtlIHRoZSBsZWdhY3lcbitcdFx0ICogcGF0aCwgd2FpdCBvbmNlIGZvciBjb25jdXJyZW50IHJlY2xhaW1lcnMgdG8gcHV0IHRoZWlyXG4rXHRcdCAqIGlzb2xhdGVkIGZvbGlvcyBiYWNrOyBnaXZlIHVwIGlmIHRoYXQgbWFrZXMgbm8gcHJvZ3Jlc3MuXG4rXHRcdCAqL1xuK1x0XHRpZiAoc3RhbGxlZClcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0c3RhbGxlZCA9IHRydWU7XG4rXHRcdHJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7XG4rXG4rXHRcdC8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi9cbitcdFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG4rXHRcdFx0KmZhdGFsID0gdHJ1ZTtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLFxuLVx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZCxcbi1cdFx0XHQgIGludCAqaXNvbGF0ZV90eXBlLCBpbnQgKmlzb2xhdGVfc2Nhbm5lZClcbitcdFx0XHQgIHVuc2lnbmVkIGludCBhbGxvd2VkLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuK1x0XHRcdCAgaW50ICppc29sYXRlZCwgaW50ICppc29sYXRlX3R5cGUsIGludCAqaXNvbGF0ZV9zY2FubmVkKVxuIHtcbiBcdGludCBpO1xuIFx0aW50IHRvdGFsX3NjYW5uZWQgPSAwO1xuIFx0aW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XG4gXG4rXHQvKlxuK1x0ICogVGhlIHByZWZlcnJlZCB0eXBlIG1heSBoYXZlIGJlZW4gZXhjbHVkZWQgYnlcbitcdCAqIHRocm90dGxlX2V2aWN0YWJsZV90eXBlcygpOyBzdGFydCBmcm9tIHRoZSBvdGhlciBvbmUuXG4rXHQgKi9cbitcdGlmICghKGFsbG93ZWQgXHUwMDI2IEJJVCh0eXBlKSkpXG4rXHRcdHR5cGUgPSAhdHlwZTtcbitcbiBcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHtcbiBcdFx0aW50IHNjYW5uZWQ7XG4gXHRcdGludCB0aWVyID0gZ2V0X3RpZXJfaWR4KGxydXZlYywgdHlwZSk7XG5AQCAtNDg2Myw5ICs0OTg1LDEwIEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdC8qXG4gXHRcdCAqIElmIHNjYW5uZWQgXHUwMDNlIDAgYW5kIGlzb2xhdGVkID09IDAsIGF2b2lkIGZhbGxpbmcgYmFjayB0byB0aGVcbiBcdFx0ICogb3RoZXIgdHlwZSwgYXMgdGhpcyB0eXBlIHJlbWFpbnMgc3VmZmljaWVudC4gRmFsbGluZyBiYWNrXG4tXHRcdCAqIHRvbyByZWFkaWx5IGNhbiBkaXNydXB0IHRoZSBwb3NpdGl2ZV9jdHJsX2VycigpIGJpYXMuXG4rXHRcdCAqIHRvbyByZWFkaWx5IGNhbiBkaXNydXB0IHRoZSBwb3NpdGl2ZV9jdHJsX2VycigpIGJpYXMuIE9ubHlcbitcdFx0ICogZmFsbCBiYWNrIHRvIGEgdHlwZSB0aGF0IGlzIG5vdCB0aHJvdHRsZWQuXG4gXHRcdCAqL1xuLVx0XHRpZiAoIXNjYW5uZWQpXG4rXHRcdGlmICghc2Nhbm5lZCBcdTAwMjZcdTAwMjYgKGFsbG93ZWQgXHUwMDI2IEJJVCghdHlwZSkpKVxuIFx0XHRcdHR5cGUgPSAhdHlwZTtcbiBcdH1cbiBcbkBAIC00ODg4LDE1ICs1MDExLDM2IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0Ym9vbCBza2lwX3JldHJ5ID0gZmFsc2U7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbitcdHVuc2lnbmVkIGludCBhbGxvd2VkO1xuK1x0Ym9vbCBmYXRhbDtcbitcbitcdGFsbG93ZWQgPSB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMobHJ1dmVjLCBzd2FwcGluZXNzLCBzYywgXHUwMDI2ZmF0YWwpO1xuK1x0aWYgKCFhbGxvd2VkKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gTGlrZSB0aGUgbGVnYWN5XG4rXHRcdCAqIHBhdGgsIHByZXRlbmQgc29tZSBwYWdlcyB3ZXJlIHJlY2xhaW1lZCBzbyByZWNsYWltXG4rXHRcdCAqIHVud2luZHMgcXVpY2tseSBpbnN0ZWFkIG9mIGxvb3BpbmcgYmFjayBpbnRvIHRoZVxuK1x0XHQgKiB0aHJvdHRsZS5cbitcdFx0ICovXG4rXHRcdGlmIChmYXRhbClcbitcdFx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgKz0gU1dBUF9DTFVTVEVSX01BWDtcbitcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4gXG4gXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbiBcbiBcdC8qIEluIGNhc2UgZm9saW8gZGVsZXRpb24gbGVmdCBlbXB0eSBvbGQgZ2VucywgZmx1c2ggdGhlbSAqL1xuIFx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XG4gXG4tXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcbitcdHNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLCBhbGxvd2VkLFxuIFx0XHRcdFx0IFx1MDAyNmxpc3QsIFx1MDAyNmlzb2xhdGVkLCBcdTAwMjZ0eXBlLCBcdTAwMjZ0eXBlX3NjYW5uZWQpO1xuIFx0bnJfaXNvbGF0ZWQgPSBpc29sYXRlZDtcbitcdGlmIChucl9pc29sYXRlZCkge1xuK1x0XHRfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlLFxuK1x0XHRcdFx0ICAgICAgbnJfaXNvbGF0ZWQpO1xuK1x0XHRhdG9taWNfbG9uZ19hZGQobnJfaXNvbGF0ZWQsIFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW4ubnJfaXNvbGF0ZWRbdHlwZV0pO1xuK1x0fVxuIFxuIFx0LyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi9cbiBcdGlmIChzY2FubmVkKVxuQEAgLTQ5NTksNiArNTEwMyw5IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRnb3RvIHJldHJ5O1xuIFx0fVxuIFxuK1x0YXRvbWljX2xvbmdfc3ViKG5yX2lzb2xhdGVkLCBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuLm5yX2lzb2xhdGVkW3R5cGVdKTtcbitcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlLCAtbnJfaXNvbGF0ZWQpO1xuK1xuIFx0aWYgKG5yX2lzb2xhdGVkIFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXG4gXHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICsgdHlwZSxcbiBcdFx0XHRcdCBucl9pc29sYXRlZCAtIHRvdGFsX3JlY2xhaW1lZCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMzoxNzo1MS42ODA3NTM3OThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEwNjk3NDQ1OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgd2UgbmVlZCB0byB0aHJvdyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBhdCBpdC4gVGhlIGNoYW5nZXMgc2VlbSB0byBiZSBpbiBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAgYW5kIGBtbS92bXNjYW4uY2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIG15IGF0dGVudGlvbi4gQW55dGhpbmcgdG91Y2hpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhcnRpY3VsYXJseSB0aGVzZSBmaWxlcyBpcyBhbHdheXMgYSBwb3RlbnRpYWwgaG90IHNwb3QuXG5cblRoZSBjb3JlIGNoYW5nZXMgbG9vayB0byBiZTpcbjEuICBBZGRpbmcgYGF0b21pY19sb25nX3QgbnJfaXNvbGF0ZWRbQU5PTl9BTkRfRklMRV07YCB0byBgc3RydWN0IGxydV9nZW5fZm9saW9gLiBUaGlzIGlzIGludGVyZXN0aW5nOyB0cmFja2luZyBpc29sYXRlZCBmb2xpb3MgYXQgYSBgbHJ1X2dlbl9mb2xpb2AgbGV2ZWwgaW5kaWNhdGVzIGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgZm9saW8gaXNvbGF0aW9uIHdpdGhpbiBMUlUgbGlzdHMuXG4yLiAgVXBkYXRlcyB0byBgbHJ1dmVjX3R5cGVfZXZpY3RhYmxlX3NpemVgIGFuZCBgbHJ1dmVjX2V2aWN0YWJsZV9zaXplYCwgd2hpY2ggaXMgZXhwZWN0ZWQgdG8gZ28gYWxvbmcgd2l0aCBtYW5hZ2luZyB0aGVzZSBpc29sYXRlZCBmb2xpb3MuXG4zLiAgTmV3IGZ1bmN0aW9uczogYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQoKWAgYW5kIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKWAgaW4gYG1tL3Ztc2Nhbi5jYC4gVGhlc2UgaW1wbHkgYSBtZWNoYW5pc20gZm9yIHRocm90dGxpbmcgb3IgbGltaXRpbmcgZm9saW8gaXNvbGF0aW9uIGJhc2VkIG9uIHNvbWUgY3JpdGVyaWEsIGFuZCB0aGF04oCZcyBhIHNpZ25hbCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uLlxuNC4gIE1vZGlmaWNhdGlvbnMgdG8gYGlzb2xhdGVfZm9saW9zKClgIGFuZCBgZXZpY3RfZm9saW9zKClgIHRvIHRyYWNrIGFuZCBtYW5hZ2UgdGhlIGZvbGlvIGNvdW50cyB3aXRoaW4gdGhlIGxydXZlYy5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgbGV0J3MgY2xhcmlmeSB0aGF0IGBzdHJ1Y3QgbHJ1X2dlbl9mb2xpb2AgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFdoZXJlIGlzIHRoaXMgc3RydWN0IGluaXRpYWxpemVkPyBJJ20gZ29pbmcgdG8gcXVpY2tseSBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciB3aGVyZSBgbHJ1Z2VuYCBvciBgc3RydWN0IGxydV9nZW5fZm9saW9gIGlzIGNyZWF0ZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgaXQncyB1c2VkLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgaWYgdGhlIG5ldyBgbnJfaXNvbGF0ZWRgIG1lbWJlciBpcyBiZWluZyBjb3JyZWN0bHkgc2V0IHVwIGFuZCBtYW5hZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQ4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTg6MDIuNzUwNTAyNjExWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjkxODU0MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0xNzU9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fdXBkYXRlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0xODEtXFx0ZW51bSBscnVfbGlzdCBscnUgPSB0eXBlICogTFJVX0lOQUNUSVZFX0ZJTEU7XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDoxODI6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTE4My1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjIwLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MjIxOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnVfZ2VuX2ZvbGlvX3NlcShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yMjItXFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjI2LVxcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MjI3OlxcdGNvbnN0IHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yMjgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTI1NT1zdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9hZGRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHJlY2xhaW1pbmcpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTI2MS1cXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MjYyOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yNjMtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTI2OC1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjI2OTpcXHRzZXEgPSBscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCByZWNsYWltaW5nKTtcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTI3MC1cXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTUzND1lbnVtIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTYyLSAqL1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTYzOnN0cnVjdCBscnVfZ2VuX2ZvbGlvIHtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTU2NC1cXHQvKiB0aGUgYWdpbmcgaW5jcmVtZW50cyB0aGUgeW91bmdlc3QgZ2VuZXJhdGlvbiBudW1iZXIgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTg2LVxcdGJvb2wgZW5hYmxlZDtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjU4NzpcXHQvKiB0aGUgbWVtY2cgZ2VuZXJhdGlvbiB0aGlzIGxydV9nZW5fZm9saW8gYmVsb25ncyB0byAqL1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTg4LVxcdHU4IGdlbjtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjU4OTpcXHQvKiB0aGUgbGlzdCBzZWdtZW50IHRoaXMgbHJ1X2dlbl9mb2xpbyBiZWxvbmdzIHRvICovXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01OTAtXFx0dTggc2VnO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTkxOlxcdC8qIHBlci1ub2RlIGxydV9nZW5fZm9saW8gbGlzdCBmb3IgZ2xvYmFsIHJlY2xhaW0gKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTU5Mi1cXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSBsaXN0O1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD02MTk9c3RydWN0IGxydV9nZW5fbW1fd2FsayB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTYyMS1cXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2MjI6XFx0LyogbWF4X3NlcSBmcm9tIGxydV9nZW5fZm9saW86IGNhbiBiZSBvdXQgb2YgZGF0ZSAqL1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNjIzLVxcdHVuc2lnbmVkIGxvbmcgc2VxO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD02ODE9c3RydWN0IGxydV9nZW5fbWVtY2cge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02ODMtXFx0dW5zaWduZWQgbG9uZyBzZXE7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2ODQ6XFx0LyogZWFjaCBtZW1jZyBoYXMgb25lIGxydV9nZW5fZm9saW8gcGVyIG5vZGUgKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTY4NS1cXHR1bnNpZ25lZCBsb25nIG5yX21lbWNnc1tNRU1DR19OUl9HRU5TXTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY4NjpcXHQvKiBwZXItbm9kZSBscnVfZ2VuX2ZvbGlvIGxpc3QgZm9yIGdsb2JhbCByZWNsYWltICovXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02ODctXFx0c3RydWN0IGhsaXN0X251bGxzX2hlYWRcXHRmaWZvW01FTUNHX05SX0dFTlNdW01FTUNHX05SX0JJTlNdO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD03Njg9c3RydWN0IGxydXZlYyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc4OS1cXHQvKiBldmljdGFibGUgcGFnZXMgZGl2aWRlZCBpbnRvIGdlbmVyYXRpb25zICovXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3OTA6XFx0c3RydWN0IGxydV9nZW5fZm9saW9cXHRcXHRscnVnZW47XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03OTEtI2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNDgwPXR5cGVkZWYgc3RydWN0IHBnbGlzdF9kYXRhIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTYwMC1cXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrIG1tX3dhbGs7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNjAxOlxcdC8qIGxydV9nZW5fZm9saW8gbGlzdCAqL1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTYwMi1cXHRzdHJ1Y3QgbHJ1X2dlbl9tZW1jZyBtZW1jZ19scnU7XFxuLS1cXG5tbS9mb2xpby5jPTQ2Nz12b2lkIGZvbGlvX2FkZF9scnUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNDc2LVxcdCAqIEZvciBwcmVmYXVsdGVkIGZpbGUgZm9saW9zLCBmb2xpb19tYXJrX2FjY2Vzc2VkKCkgc2V0c1xcbm1tL2ZvbGlvLmM6NDc3OlxcdCAqIFBHX3JlZmVyZW5jZWQgc28gbHJ1X2dlbl9mb2xpb19zZXEoKSBwbGFjZXMgdGhlbSBpbnRvXFxubW0vZm9saW8uYy00NzgtXFx0ICogdGhlIHNlY29uZCBvbGRlc3QgZ2VuZXJhdGlvbi5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTMxOTg9c3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXFxuLS1cXG5tbS92bXNjYW4uYy0zMjAxLVxcdGludCBpO1xcbm1tL3Ztc2Nhbi5jOjMyMDI6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy0zMjAzLVxcdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW3R5cGVdKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTMyMTc9c3RhdGljIHZvaWQgcmVzZXRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgYm9vbCBjYXJyeW92ZXIpXFxuLS1cXG5tbS92bXNjYW4uYy0zMjE5LVxcdGludCBoaXN0LCB0aWVyO1xcbm1tL3Ztc2Nhbi5jOjMyMjA6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy0zMjIxLVxcdGJvb2wgY2xlYXIgPSBjYXJyeW92ZXIgPyBOUl9ISVNUX0dFTlMgPT0gMSA6IE5SX0hJU1RfR0VOUyBcXHUwMDNlIDE7XFxuLS1cXG5tbS92bXNjYW4uYz0zMjk5PXN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS92bXNjYW4uYy0zMzAxLVxcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbm1tL3Ztc2Nhbi5jOjMzMDI6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy0zMzAzLVxcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbi0tXFxubW0vdm1zY2FuLmM9MzM0MT1zdGF0aWMgdm9pZCByZXNldF9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXFxuLS1cXG5tbS92bXNjYW4uYy0zMzQ0LVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGxydXZlY19saXZlX2xvY2tfaXJxKHdhbGstXFx1MDAzZWxydXZlYyk7XFxubW0vdm1zY2FuLmM6MzM0NTpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTMzNDYtXFxuLS1cXG5tbS92bXNjYW4uYz0zOTAwPXN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtMzkwMy1cXHRpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSDtcXG5tbS92bXNjYW4uYzozOTA0OlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtMzkwNS1cXHRpbnQgaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxuLS1cXG5tbS92bXNjYW4uYz0zOTUzPXN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtMzk1Ni1cXHRib29sIHNlcV9pbmNfZmxhZyA9IGZhbHNlO1xcbm1tL3Ztc2Nhbi5jOjM5NTc6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy0zOTU4LVxcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XFxuLS1cXG5tbS92bXNjYW4uYy0zOTg1LVxcbm1tL3Ztc2Nhbi5jOjM5ODY6XFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIGxydV9nZW5fZm9saW8gKi9cXG5tbS92bXNjYW4uYy0zOTg3LVxcdGlmIChzd2FwcGluZXNzIFxcdTAwMjZcXHUwMDI2IHN3YXBwaW5lc3MgXFx1MDAzYz0gTUFYX1NXQVBQSU5FU1MpIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwMDU9c3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy00MDA5LVxcdGludCB0eXBlLCB6b25lO1xcbm1tL3Ztc2Nhbi5jOjQwMTA6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy00MDExLXJlc3RhcnQ6XFxuLS1cXG5tbS92bXNjYW4uYz00MDcwPXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNDA3NS1cXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IE5VTEw7XFxubW0vdm1zY2FuLmM6NDA3NjpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQwNzctXFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XFxuLS1cXG5tbS92bXNjYW4uYz00MTU0PXN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY190eXBlX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXFxuLS1cXG5tbS92bXNjYW4uYy00MTU3LVxcdHVuc2lnbmVkIGxvbmcgc2VxLCB0b3RhbCA9IDA7XFxubW0vdm1zY2FuLmM6NDE1ODpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQxNTktXFx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ1OTg9c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2MDAte1xcbm1tL3Ztc2Nhbi5jOjQ2MDE6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmNoaWxkX2xydWdlbiwgKnBhcmVudF9scnVnZW47XFxubW0vdm1zY2FuLmMtNDYwMi1cXHRlbnVtIGxydV9saXN0IGxydSA9IHR5cGUgKiBMUlVfSU5BQ1RJVkVfRklMRTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ2NjM9c3RhdGljIGJvb2wgc29ydF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDY3Mi1cXHRpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzLCB3b3JraW5nc2V0KTtcXG5tbS92bXNjYW4uYzo0NjczOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtNDY3NC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ3MzY9c3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ3NDctXFx0dW5zaWduZWQgbG9uZyByZW1haW5pbmcgPSBucl90b19zY2FuO1xcbm1tL3Ztc2Nhbi5jOjQ3NDg6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy00NzQ5LVxcbi0tXFxubW0vdm1zY2FuLmM9NDk5OD1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwNzgtXFx0XFx0LyogZG9uJ3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cXG5tbS92bXNjYW4uYzo1MDc5OlxcdFxcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcXG5tbS92bXNjYW4uYy01MDgwLVxcdFxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xcbi0tXFxubW0vdm1zY2FuLmM9NTI4NT1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyOTEtXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbm1tL3Ztc2Nhbi5jOjUyOTI6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbjtcXG5tbS92bXNjYW4uYy01MjkzLVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU0MjI9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc3RhdGVfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbm1tL3Ztc2Nhbi5jLTU0MjMte1xcbm1tL3Ztc2Nhbi5jOjU0MjQ6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy01NDI1LVxcbi0tXFxubW0vdm1zY2FuLmM9NTY5Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX3NlcV9zaG93X2Z1bGwoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy01NzAzLVxcdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEoc2VxKTtcXG5tbS92bXNjYW4uYzo1NzA0OlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtNTcwNS1cXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU3NTI9c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3NTYtXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gdjtcXG5tbS92bXNjYW4uYzo1NzU3OlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtNTc1OC1cXHRpbnQgbmlkID0gbHJ1dmVjX3BnZGF0KGxydXZlYyktXFx1MDAzZW5vZGVfaWQ7XFxuLS1cXG5tbS92bXNjYW4uYz02MDE4PXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy02MDIxLVxcdGludCBnZW4sIHR5cGUsIHpvbmU7XFxubW0vdm1zY2FuLmM6NjAyMjpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTYwMjMtXFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MjM1PXN0YXRpYyB2b2lkICpscnVfZ2VuX2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtMjQwLVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG5tbS93b3JraW5nc2V0LmM6MjQxOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW47XFxubW0vd29ya2luZ3NldC5jLTI0Mi1cXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz0yOTI9c3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy0yOTgtXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbm1tL3dvcmtpbmdzZXQuYzoyOTk6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbjtcXG5tbS93b3JraW5nc2V0LmMtMzAwLVxcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMzoxODowNS4wNDIzNjIxNloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTc1NzUzMjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWwgaW4gdGhlIGZpZWxkLCBzdGFydGluZyB3aXRoIHRoZSByZXF1ZXN0ZWQgYm9sZGVkIGhlYWRlcjpcblxuKipEaXZpbmcgaW50byBgbHJ1X2dlbl9pbml0X2xydXZlY2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYGxydV9nZW5faW5pdF9scnV2ZWNgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHNwZWNpZmljIExSVSB2ZWN0b3IgaW5pdGlhbGl6YXRpb24gaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEknbSBhc3N1bWluZyB0aGlzIGlzIGEgY29yZSBjb21wb25lbnQsIHNvIGEgZGVlcCB1bmRlcnN0YW5kaW5nIGlzIGNydWNpYWwuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBncmFzcCBhbnkgc3VidGxlIG9wdGltaXphdGlvbnMsIHBvdGVudGlhbCBwaXRmYWxscywgb3IgZGVzaWduIGNob2ljZXMgdGhhdCBhcmUgYXQgcGxheSBoZXJlLiBMZXQncyBzZWUgaG93IHRoZXkncmUgaGFuZGxpbmcgdGhlIGluaXRpYWwgYWxsb2NhdGlvbiwgd2hhdCBwYXJhbWV0ZXJzIGl0IGFjY2VwdHMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBhbmQgZXZpY3Rpb24gbWVjaGFuaXNtcy4gTXkgbWFpbiBjb25jZXJuIGlzIHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdCBvbiBvdmVyYWxsIHBlcmZvcm1hbmNlIGFuZCBob3cgcm9idXN0IHRoaXMgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBpcy4gSSdtIGxvb2tpbmcgZm9yIGEgY2xlYXIgZGVzY3JpcHRpb24gb2YgYWxsIHRoZSBzdGVwcywgYW55IGFzc3VtcHRpb25zIG1hZGUsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGVycm9yIGNvbmRpdGlvbnMgaGFuZGxlZC4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjM4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTg6MDguNjE4MTE5NzIxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MDE4LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MDE4OlxcdHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuNjAxOTpcXHR7XFxuNjAyMDpcXHRcXHRpbnQgaTtcXG42MDIxOlxcdFxcdGludCBnZW4sIHR5cGUsIHpvbmU7XFxuNjAyMjpcXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbjYwMjM6XFx0XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XFxuNjAyNDpcXHRcXG42MDI1OlxcdFxcdGxydWdlbi1cXHUwMDNlbWF4X3NlcSA9IE1JTl9OUl9HRU5TICsgMTtcXG42MDI2OlxcdFxcdGxydWdlbi1cXHUwMDNlZW5hYmxlZCA9IGxydV9nZW5fZW5hYmxlZCgpO1xcbjYwMjc6XFx0XFxuNjAyODpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IE1JTl9OUl9HRU5TICsgMTsgaSsrKVxcbjYwMjk6XFx0XFx0XFx0bHJ1Z2VuLVxcdTAwM2V0aW1lc3RhbXBzW2ldID0gamlmZmllcztcXG42MDMwOlxcdFxcbjYwMzE6XFx0XFx0Zm9yX2VhY2hfZ2VuX3R5cGVfem9uZShnZW4sIHR5cGUsIHpvbmUpXFxuNjAzMjpcXHRcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bHJ1Z2VuLVxcdTAwM2Vmb2xpb3NbZ2VuXVt0eXBlXVt6b25lXSk7XFxuNjAzMzpcXHRcXG42MDM0OlxcdFxcdGlmIChtbV9zdGF0ZSlcXG42MDM1OlxcdFxcdFxcdG1tX3N0YXRlLVxcdTAwM2VzZXEgPSBNSU5fTlJfR0VOUztcXG42MDM2OlxcdH1cXG42MDM3OlxcdFxcbjYwMzg6XFx0I2lmZGVmIENPTkZJR19NRU1DR1xcbjYwMzk6XFx0XFxuNjA0MDpcXHR2b2lkIGxydV9nZW5faW5pdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuNjA0MTpcXHR7XFxuNjA0MjpcXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xcbjYwNDM6XFx0XFxuNjA0NDpcXHRcXHRpZiAoIW1tX2xpc3QpXFxuNjA0NTpcXHRcXHRcXHRyZXR1cm47XFxuNjA0NjpcXHRcXG42MDQ3OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZtbV9saXN0LVxcdTAwM2VmaWZvKTtcXG42MDQ4OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZtbV9saXN0LVxcdTAwM2Vsb2NrKTtcXG42MDQ5OlxcdH1cXG42MDUwOlxcdFxcbjYwNTE6XFx0dm9pZCBscnVfZ2VuX2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbjYwNTI6XFx0e1xcbjYwNTM6XFx0XFx0aW50IGk7XFxuNjA1NDpcXHRcXHRpbnQgbmlkO1xcbjYwNTU6XFx0XFx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcXG42MDU2OlxcdFxcbjYwNTc6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKG1tX2xpc3QgXFx1MDAyNlxcdTAwMjYgIWxpc3RfZW1wdHkoXFx1MDAyNm1tX2xpc3QtXFx1MDAzZWZpZm8pKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTg6MDguNjE4NTY1MzUxWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc0ODgyODYwNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS01TQU4gTmVlZCBpbiBUaGlzIE1HTFJVIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBhbmFseXNpcyBmb2N1c2VzIG9uIHdoZXRoZXIgdGhpcyBNR0xSVSBwYXRjaCBpbnRyb2R1Y2luZyBjaGFuZ2VzIGluIHBhZ2UgcmVjbGFpbSBhbmQgdGhyb3R0bGluZyBwb3NlcyBhIHJpc2sgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgdGh1cyBuZWNlc3NpdGF0aW5nIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgY2hlY2tzLiBJJ3ZlIGdvbmUgdGhyb3VnaCB0aGUgY29kZSBhbmQgdGhlIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyB3aXRoIGEgZmluZS10b290aCBjb21iLlxuXG5GaXJzdCwgSSBjb25maXJtIHRoYXQgdGhlIGBzdHJ1Y3QgbHJ1dmVjYCBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHksIGVpdGhlciB3aXRoaW4gYHN0cnVjdCBwZ2xpc3RfZGF0YWAgKHN0YXRpY2FsbHkgb3IgZHVyaW5nIGVhcmx5IGJvb3QpIG9yIHdpdGhpbiBgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGVgIHZpYSBga3phbGxvY2AuIFRoaXMgZW5zdXJlcyB0aGF0IGZpZWxkcyBhcmUgZWl0aGVyIHplcm9lZCBvciBvdGhlcndpc2Ugc2FmZWx5IGluaXRpYWxpemVkLiBJIGFsc28gbm90ZWQgdGhhdCBhdG9taWMgbG9uZyB0eXBlcywgbGlrZSBgZXZpY3RlZGAgYW5kIGByZWZhdWx0ZWRgIHdpdGhpbiBgc3RydWN0IGxydV9nZW5fZm9saW9gIGFyZSBhbHNvIHplcm8taW5pdGlhbGl6ZWQgYnkgZGVmYXVsdC5cblxuVGhlbiBJIGV4YW1pbmVkIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYCBhbmQgYGV2aWN0X2ZvbGlvc2AsIGZvY3VzaW5nIG9uIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uLiBJbiBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYCwgdGhlIGNvZGUgcGFzc2VzIGEgcG9pbnRlciB0byBgYm9vbCAqZmF0YWxgIGFuZCBpbml0aWFsaXplcyBpdCBpbW1lZGlhdGVseSB3aXRoIGAqZmF0YWwgPSBmYWxzZTtgLiBBIGxvY2FsIGBib29sIHN0YWxsZWQgPSBmYWxzZTtgIGlzIGFsc28gaW5pdGlhbGl6ZWQuIEluIGBldmljdF9mb2xpb3NgLCB0aGUgYHVuc2lnbmVkIGludCBhbGxvd2VkYCB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCBieSByZXR1cm4gZnJvbSBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYC4gVGhpcyBpcyBpbXBvcnRhbnQsIG1ha2luZyBpdCBzbyB0aGF0IGBmYXRhbGAgYW5kIGBhbGxvd2VkYCBhcmUgcHJvcGVybHkgc2V0LiBJZiBgIWFsbG93ZWRgIHRoZW4gYSBjb25kaXRpb24gZXhlY3V0ZXMgd2hlcmUgYHNjLVx1MDAzZW5yX3JlY2xhaW1lZCArPSBTV0FQX0NMVVNURVJfTUFYO2AgLlxuXG5UaGUgY29yZSBjb25jZXJuIGhlcmUgaXMgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHBvdGVudGlhbCBtZW1vcnkgbGVha3MsIGFuZCBhbnkgY2hhbmNlIG9mIHBhc3NpbmcgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgaW50byB1c2VyIHNwYWNlLiBJIGNhbiBjb25maXJtIHRoYXQgYWxsIHZhcmlhYmxlcywgbGlrZSBgYWxsb3dlZGAgYW5kIGBmYXRhbGAsIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgdGhlcmUgYXJlIG5vIGluc3RhbmNlcyBvZiB1c2VyLXNwYWNlIGNvcGllcyAoYGNvcHlfdG9fdXNlcmAsIHN5c2NhbGwgcmV0dXJuLCBldGMuKSB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuIEZ1cnRoZXJtb3JlLCBJIHNlZSBubyByaXNreSBzdGFjay9oZWFwIGJ1ZmZlciBtYW5pcHVsYXRpb25zIHRoYXQgY291bGQgbGVhdmUgbWVtb3J5IHVuaW5pdGlhbGl6ZWQuXG5cbk5vdywgbGV0J3Mgc3RlcCB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYS5cblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U6KiogTm9wZS4gTm90aGluZyBoZXJlIHRoYXQncyBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBOby4gQWxsIGJyYW5jaGluZyBkZWNpc2lvbnMgcmVseSBvbiB2YXJpYWJsZXMgdGhhdCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgYWxsIGZpZWxkcyBhcmUgc2FmZWx5IHplcm8tYWxsb2NhdGVkIG9yIG90aGVyd2lzZSBpbml0aWFsaXplZC5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyB1c2VkIGxhdGVyOioqIE5vdCBoZXJlLiBUaGUgc3RydWN0dXJlcyBhbmQgdGhlaXIgZmllbGRzIGFyZSBwcm9wZXJseSBzZXQgdXAuXG40LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YToqKiBOb3QgYXBwbGljYWJsZS4gVGhlcmUncyBubyBtYW5pcHVsYXRpb24gb2YgZXhpc3RpbmcgYnVmZmVycyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgdGhyb3VnaCBib3VuZHMgaXNzdWVzLlxuXG5HaXZlbiB0aGlzIHRob3JvdWdoIHJldmlldyBhZ2FpbnN0IHRoZSBOZWVkc0tNU0FOIGNyaXRlcmlhLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgKipLTVNBTiBpcyBub3QgbmVlZGVkIGhlcmUuKiogU3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgd291bGQgYmUgdGhlIGFwcHJvcHJpYXRlIHRvb2xzIHRvIGNoZWNrIGZvciBjb25jdXJyZW5jeS9sb2NraW5nL3JlZmVyZW5jZS9tZW1vcnkgc2FmZXR5IHByb2JsZW1zLiBUaGUgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIG1pbmltYWwgaW4gdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NTEsIk91dHB1dFRva2VucyI6MzAzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTg6MTYuMTA2ODUzNzk4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBlci1scnV2ZWMgaXNvbGF0aW9uIGFjY291bnRpbmcgKGBucl9pc29sYXRlZGApIGFuZCBpc29sYXRpb24gdGhyb3R0bGluZyAoYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRgLCBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYCkgZm9yIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0uXFxuXFxuQW5hbHlzaXMgYWdhaW5zdCBLTVNBTiBhcHBsaWNhYmlsaXR5OlxcbjEuIFVzZXItc3BhY2UgbGVha3M6IE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgZXhwb3NlZCB2aWEgaW9jdGxzL3N5c2ZzL25ldGxpbmsvQlBGIGJ1ZmZlcnMuXFxuMi4gVW5pbml0aWFsaXplZCB2YXJpYWJsZXM6IEFsbCBhZGRlZCBsb2NhbCB2YXJpYWJsZXMgKGBhbGxvd2VkYCwgYGZhdGFsYCwgYHN0YWxsZWRgKSBhbmQgc3RydWN0IGZpZWxkcyAoYG5yX2lzb2xhdGVkYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFuZCBtYW5hZ2VkIChlLmcuLCBgKmZhdGFsYCBpcyBpbml0aWFsaXplZCB0byBmYWxzZSB1cG9uIGVudGVyaW5nIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKWAsIGBzdHJ1Y3QgbHJ1dmVjYCBtZW1vcnkgaXMgemVyby1hbGxvY2F0ZWQgZHVyaW5nIG5vZGUvbWVtY2cgaW5pdGlhbGl6YXRpb24pLlxcbjMuIEJ1ZmZlciBib3VuZHMgLyBtZW1vcnkgaGFuZGxpbmc6IFRoZSBwYXRjaCBvbmx5IGFkanVzdHMgcmVjbGFpbWVyIHNjaGVkdWxpbmcsIHRocm90dGxpbmcsIGFuZCBpc29sYXRpb24gY291bnRlcnMgd2l0aG91dCB0b3VjaGluZyB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3MsIHZhcmlhYmxlLWxlbmd0aCBidWZmZXJzLCBvciBzdHJ1Y3QgcGFkZGluZy5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIHJlbGF0ZSB0byByZWNsYWltIHRocm90dGxpbmcsIGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBjb3VudGVyIGltYmFsYW5jZXMsIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgKExPQ0tERVAsIEtBU0FOLCBXQVJOX09OKS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBlci1scnV2ZWMgaXNvbGF0aW9uIGFjY291bnRpbmcgKGBucl9pc29sYXRlZGApIGFuZCBpc29sYXRpb24gdGhyb3R0bGluZyAoYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRgLCBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYCkgZm9yIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0uXFxuXFxuQW5hbHlzaXMgYWdhaW5zdCBLTVNBTiBhcHBsaWNhYmlsaXR5OlxcbjEuIFVzZXItc3BhY2UgbGVha3M6IE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgZXhwb3NlZCB2aWEgaW9jdGxzL3N5c2ZzL25ldGxpbmsvQlBGIGJ1ZmZlcnMuXFxuMi4gVW5pbml0aWFsaXplZCB2YXJpYWJsZXM6IEFsbCBhZGRlZCBsb2NhbCB2YXJpYWJsZXMgKGBhbGxvd2VkYCwgYGZhdGFsYCwgYHN0YWxsZWRgKSBhbmQgc3RydWN0IGZpZWxkcyAoYG5yX2lzb2xhdGVkYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFuZCBtYW5hZ2VkIChlLmcuLCBgKmZhdGFsYCBpcyBpbml0aWFsaXplZCB0byBmYWxzZSB1cG9uIGVudGVyaW5nIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKWAsIGBzdHJ1Y3QgbHJ1dmVjYCBtZW1vcnkgaXMgemVyby1hbGxvY2F0ZWQgZHVyaW5nIG5vZGUvbWVtY2cgaW5pdGlhbGl6YXRpb24pLlxcbjMuIEJ1ZmZlciBib3VuZHMgLyBtZW1vcnkgaGFuZGxpbmc6IFRoZSBwYXRjaCBvbmx5IGFkanVzdHMgcmVjbGFpbWVyIHNjaGVkdWxpbmcsIHRocm90dGxpbmcsIGFuZCBpc29sYXRpb24gY291bnRlcnMgd2l0aG91dCB0b3VjaGluZyB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3MsIHZhcmlhYmxlLWxlbmd0aCBidWZmZXJzLCBvciBzdHJ1Y3QgcGFkZGluZy5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIHJlbGF0ZSB0byByZWNsYWltIHRocm90dGxpbmcsIGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBjb3VudGVyIGltYmFsYW5jZXMsIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgKExPQ0tERVAsIEtBU0FOLCBXQVJOX09OKS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowjwbll[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 02:57:57 +0000 UTC FinishedAt: 2026-09-03 03:18:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "669520c8-5fd0-4a50-93f7-4a408f233daa" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "throttle_evictable_types", "lru_gen_too_many_isolated", "isolate_folios", "evict_folios", "lru_gen_seq_write" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzJiMzNDssCiAgICAmIzM0O2xydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQmIzM0OywKICAgICYjMzQ7aXNvbGF0ZV9mb2xpb3MmIzM0OywKICAgICYjMzQ7ZXZpY3RfZm9saW9zJiMzNDssCiAgICAmIzM0O2xydV9nZW5fc2VxX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwZXItbHJ1dmVjIGlzb2xhdGlvbiBhY2NvdW50aW5nIChgbnJfaXNvbGF0ZWRgKSBhbmQgaXNvbGF0aW9uIHRocm90dGxpbmcgKGBscnVfZ2VuX3Rvb19tYW55X2lzb2xhdGVkYCwgYHRocm90dGxlX2V2aWN0YWJsZV90eXBlc2ApIGZvciBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSByZWNsYWltLlxuXG5BbmFseXNpcyBhZ2FpbnN0IEtNU0FOIGFwcGxpY2FiaWxpdHk6XG4xLiBVc2VyLXNwYWNlIGxlYWtzOiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGV4cG9zZWQgdmlhIGlvY3Rscy9zeXNmcy9uZXRsaW5rL0JQRiBidWZmZXJzLlxuMi4gVW5pbml0aWFsaXplZCB2YXJpYWJsZXM6IEFsbCBhZGRlZCBsb2NhbCB2YXJpYWJsZXMgKGBhbGxvd2VkYCwgYGZhdGFsYCwgYHN0YWxsZWRgKSBhbmQgc3RydWN0IGZpZWxkcyAoYG5yX2lzb2xhdGVkYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFuZCBtYW5hZ2VkIChlLmcuLCBgKmZhdGFsYCBpcyBpbml0aWFsaXplZCB0byBmYWxzZSB1cG9uIGVudGVyaW5nIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKWAsIGBzdHJ1Y3QgbHJ1dmVjYCBtZW1vcnkgaXMgemVyby1hbGxvY2F0ZWQgZHVyaW5nIG5vZGUvbWVtY2cgaW5pdGlhbGl6YXRpb24pLlxuMy4gQnVmZmVyIGJvdW5kcyAvIG1lbW9yeSBoYW5kbGluZzogVGhlIHBhdGNoIG9ubHkgYWRqdXN0cyByZWNsYWltZXIgc2NoZWR1bGluZywgdGhyb3R0bGluZywgYW5kIGlzb2xhdGlvbiBjb3VudGVycyB3aXRob3V0IHRvdWNoaW5nIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGFjY2VzcywgdmFyaWFibGUtbGVuZ3RoIGJ1ZmZlcnMsIG9yIHN0cnVjdCBwYWRkaW5nLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIHJlbGF0ZSB0byByZWNsYWltIHRocm90dGxpbmcsIGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBjb3VudGVyIGltYmFsYW5jZXMsIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgKExPQ0tERVAsIEtBU0FOLCBXQVJOX09OKS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBpc29sYXRlZCBmb2xpbyBhY2NvdW50aW5nIGFuZCByZWNsYWltIHRocm90dGxpbmcgZm9yIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBpbiBtbS92bXNjYW4uYywgaW1wbGVtZW50aW5nIGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQoKSBhbmQgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzKCkgdG8gcHJldmVudCBleGNlc3NpdmUgZm9saW8gaXNvbGF0aW9uIGR1cmluZyBtZW1vcnkgcHJlc3N1cmUgYW5kIGRpcmVjdCByZWNsYWltLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMzoxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDgzNmQ5NjQzM2MwZWQ3NmQwNzExMjg5N2JkZjI2NjRiMWMyODc4MTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDAzOjE2OjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCA5NGY5YzNmZjU0MTYwLi44MTliNmMwNTkxMTZlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTU4MCw2ICYjNDM7NTgwLDggQEAgc3RydWN0IGxydV9nZW5fZm9saW8ge1xuIFx0LyogY2FuIGJlIG1vZGlmaWVkIHdpdGhvdXQgaG9sZGluZyB0aGUgTFJVIGxvY2sgKi9cbiBcdGF0b21pY19sb25nX3QgZXZpY3RlZFtOUl9ISVNUX0dFTlNdW0FOT05fQU5EX0ZJTEVdW01BWF9OUl9USUVSU107XG4gXHRhdG9taWNfbG9uZ190IHJlZmF1bHRlZFtOUl9ISVNUX0dFTlNdW0FOT05fQU5EX0ZJTEVdW01BWF9OUl9USUVSU107XG4mIzQzO1x0LyogdGhlIG51bWJlciBvZiBmb2xpb3MgaXNvbGF0ZWQgZnJvbSB0aGlzIGxydXZlYyBhbmQgYmVpbmcgcmVjbGFpbWVkICovXG4mIzQzO1x0YXRvbWljX2xvbmdfdCBucl9pc29sYXRlZFtBTk9OX0FORF9GSUxFXTtcbiBcdC8qIHdoZXRoZXIgdGhlIG11bHRpLWdlbiBMUlUgaXMgZW5hYmxlZCAqL1xuIFx0Ym9vbCBlbmFibGVkO1xuIFx0LyogdGhlIG1lbWNnIGdlbmVyYXRpb24gdGhpcyBscnVfZ2VuX2ZvbGlvIGJlbG9uZ3MgdG8gKi9cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBmMTE0OTFlZTllZDVjLi4yMTE4MzlkMTA5MDlhIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDE1MSwyNSAmIzQzOzQxNTEsMzQgQEAgc3RhdGljIHZvaWQgc2V0X2luaXRpYWxfcHJpb3JpdHkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbFxuIFx0c2MtXHUwMDNlcHJpb3JpdHkgPSBjbGFtcChwcmlvcml0eSwgREVGX1BSSU9SSVRZIC8gMiwgREVGX1BSSU9SSVRZKTtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY190eXBlX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXG4ge1xuLVx0aW50IGdlbiwgdHlwZSwgem9uZTtcbiYjNDM7XHRpbnQgZ2VuLCB6b25lO1xuIFx0dW5zaWduZWQgbG9uZyBzZXEsIHRvdGFsID0gMDtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuIFx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcbiBcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG4gXG4tXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7XG4tXHRcdGZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxIFx1MDAzYz0gbWF4X3NlcTsgc2VxJiM0MzsmIzQzOykge1xuLVx0XHRcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbi1cdFx0XHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KVxuLVx0XHRcdFx0dG90YWwgJiM0Mzs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7XG4tXHRcdH1cbiYjNDM7XHRmb3IgKHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSBcdTAwM2M9IG1heF9zZXE7IHNlcSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbiYjNDM7XHRcdGZvciAoem9uZSA9IDA7IHpvbmUgXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdHRvdGFsICYjNDM7PSBtYXgoUkVBRF9PTkNFKGxydWdlbi1cdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHRvdGFsO1xuIH1cbiBcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRvdGFsID0gMDtcbiYjNDM7XHRpbnQgdHlwZTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUodHlwZSwgc3dhcHBpbmVzcylcbiYjNDM7XHRcdHRvdGFsICYjNDM7PSBscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShscnV2ZWMsIHR5cGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdG90YWw7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgbHJ1dmVjX2lzX3NpemFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHRvdGFsO1xuQEAgLTQ4MzgsMTUgJiM0Mzs0ODQ3LDEyOCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbiBcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcdTAwMjZzcCwgXHUwMDI2cHYpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogVGhlIE1HTFJVIGNvdW50ZXJwYXJ0IHRvIHRvb19tYW55X2lzb2xhdGVkKCkuXG4mIzQzOyAqXG4mIzQzOyAqIHRvb19tYW55X2lzb2xhdGVkKCkgY29tcGFyZXMgbm9kZS13aWRlIGlzb2xhdGVkIGNvdW50cyBhZ2FpbnN0XG4mIzQzOyAqIG5vZGUtd2lkZSBpbmFjdGl2ZSBzaXplcy4gSXQgcHJlZGF0ZXMgcGVyLW1lbWNnIExSVSBsaXN0cywgd2hpY2hcbiYjNDM7ICogbW92ZWQgaXNvbGF0aW9uIHRvIHBlci1scnV2ZWMgZ3JhbnVsYXJpdHkuIE1HTFJVIHJlY2xhaW1lcnMgY29udGVuZFxuJiM0MzsgKiBwZXIgbHJ1dmVjLCBzbyB0aGlzIGNoZWNrIGlzIHBlciBscnV2ZWMgYXMgd2VsbCwgYW5kIGlzb2xhdGlvbiBpblxuJiM0MzsgKiBvbmUgbWVtY2cgZG9lcyBub3QgdGhyb3R0bGUgcmVjbGFpbSBpbiBhbm90aGVyLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgbGVnYWN5IHRocmVzaG9sZCwgdGhlIHNpemUgb2YgdGhlIGluYWN0aXZlIGxpc3QsIGlzIG5vdCB1c2FibGVcbiYjNDM7ICogaGVyZSBlaXRoZXI6IGluIE1HTFJVIHRoZSBpbmFjdGl2ZSBjb3VudGVycyBhcmUgb25seSBhIGNvbXBhdGliaWxpdHlcbiYjNDM7ICogc2hpbSAtIHRoZXkganVtcCBhcm91bmQgd2hlbiBzd2FwIHJ1bnMgb3V0IG9yIGEgbWVtY2cgaGl0cyBpdHMgc3dhcFxuJiM0MzsgKiBsaW1pdCwgYW5kIHByb2FjdGl2ZSBhZ2luZyBjYW4gaW5mbGF0ZSB0aGVtLiBDb21wYXJlIGFnYWluc3QgdGhlXG4mIzQzOyAqIHRvdGFsIG51bWJlciBvZiBldmljdGFibGUgcGFnZXMgb2YgdGhlIHR5cGUgZGl2aWRlZCBieSBNSU5fTlJfR0VOUyxcbiYjNDM7ICogYXBwcm94aW1hdGluZyB0aGUgc2l6ZSBvZiBvbmUgZ2VuZXJhdGlvbiAtIHRoZSBzYW1lIHVuaXQgdGhlXG4mIzQzOyAqIG9yaWdpbmFsIE1HTFJVIGFnaW5nIGhldXJpc3RpY3MgdXNlZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaXNvbGF0ZWQsIGV2aWN0YWJsZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICghd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzYykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlzb2xhdGVkID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuLm5yX2lzb2xhdGVkW3R5cGVdKTtcbiYjNDM7XHRldmljdGFibGUgPSBscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShscnV2ZWMsIHR5cGUpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEdGUF9OT0lPL0dGUF9OT0ZTIGNhbGxlcnMgYXJlIGFsbG93ZWQgdG8gaXNvbGF0ZSBtb3JlIHBhZ2VzLCBzb1xuJiM0MztcdCAqIHRoZXkgd29uJiMzOTt0IGJlIGJsb2NrZWQgYnkgbm9ybWFsIGRpcmVjdC1yZWNsYWltZXJzLCBmb3JtaW5nIGFcbiYjNDM7XHQgKiBjaXJjdWxhciBkZWFkbG9jay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZ2ZwX2hhc19pb19mcyhzYy1cdTAwM2VnZnBfbWFzaykpXG4mIzQzO1x0XHRldmljdGFibGUgXHUwMDNlXHUwMDNlPSAzO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaXNvbGF0ZWQgXHUwMDNlIGV2aWN0YWJsZSAvIE1JTl9OUl9HRU5TO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBVbmxpa2UgdGhlIGxlZ2FjeSBwYXRoLCB3aGVyZSB0aGUgTFJVIGxpc3QgdG8gaXNvbGF0ZSBmcm9tIGlzIGtub3duXG4mIzQzOyAqIGJlZm9yZSBpc29sYXRpb24sIGlzb2xhdGVfZm9saW9zKCkgcGlja3MgdGhlIHR5cGUgZnJvbSB0aGUgcmVmYXVsdFxuJiM0MzsgKiBmZWVkYmFjayBhbmQgbWF5IGZhbGwgYmFjayB0byB0aGUgb3RoZXIgb25lLiBUaGVyZWZvcmUsIGluc3RlYWQgb2ZcbiYjNDM7ICogdGhyb3R0bGluZyBvbiBhIHNpbmdsZSB0eXBlLCBjb2xsZWN0IHRoZSBldmljdGFibGUgdHlwZXMgdGhhdCBkbyBub3RcbiYjNDM7ICogaGF2ZSB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MsIGFuZCBvbmx5IHNsZWVwIHdoZW4gYWxsIG9mIHRoZW0gZG8uXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdGhlIG1hc2sgb2YgdGhlIHR5cGVzIGlzb2xhdGVfZm9saW9zKCkgbWF5IGlzb2xhdGUgZnJvbSwgb3JcbiYjNDM7ICogMCBpZiByZWNsYWltIHNob3VsZCBzdG9wLiBBbHNvIHNldHMgQGZhdGFsIHRvIHRlbGwgdGhlIGNhbGxlciB0aGF0XG4mIzQzOyAqIHRoZSB0YXNrIHJlY2VpdmVkIGEgZmF0YWwgc2lnbmFsIHdoaWxlIHdhaXRpbmcuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHRocm90dGxlX2V2aWN0YWJsZV90eXBlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGludCBzd2FwcGluZXNzLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgYm9vbCAqZmF0YWwpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgYWxsb3dlZDtcbiYjNDM7XHRib29sIHN0YWxsZWQgPSBmYWxzZTtcbiYjNDM7XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdCpmYXRhbCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRmb3IgKDs7KSB7XG4mIzQzO1x0XHRhbGxvd2VkID0gMDtcbiYjNDM7XHRcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQSB0eXBlIHdpdGggbm8gZXZpY3RhYmxlIGZvbGlvcyBoYXMgbm90aGluZyB0b1xuJiM0MztcdFx0XHQgKiBpc29sYXRlLiBEb24mIzM5O3QgYWxsb3cgaXQsIG90aGVyd2lzZSByZWNsYWltIGNhbiBiZVxuJiM0MztcdFx0XHQgKiByZWRpcmVjdGVkIHRvIGl0IGFuZCBzcGluIG1ha2luZyBubyBwcm9ncmVzcywgZS5nLlxuJiM0MztcdFx0XHQgKiB3aGVuIHRoZSBvbmx5IHR5cGUgd2l0aCBmb2xpb3MgaXMgb3Zlci1pc29sYXRlZC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmICghbHJ1dmVjX3R5cGVfZXZpY3RhYmxlX3NpemUobHJ1dmVjLCBpKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICghbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZChscnV2ZWMsIGksIHNjKSlcbiYjNDM7XHRcdFx0XHRhbGxvd2VkIHw9IEJJVChpKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoYWxsb3dlZCkge1xuJiM0MztcdFx0XHQvKiBXYWtlIHVwIHJlY2xhaW1lcnMgd2FpdGluZyBvbiB0aGUgaXNvbGF0aW9uIHRvIGdvIGRvd24uICovXG4mIzQzO1x0XHRcdHdha2VfdGhyb3R0bGVfaXNvbGF0ZWQocGdkYXQpO1xuJiM0MztcdFx0XHRyZXR1cm4gYWxsb3dlZDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQWxsIGV2aWN0YWJsZSB0eXBlcyBhcmUgb3Zlci1pc29sYXRlZC4gTGlrZSB0aGUgbGVnYWN5XG4mIzQzO1x0XHQgKiBwYXRoLCB3YWl0IG9uY2UgZm9yIGNvbmN1cnJlbnQgcmVjbGFpbWVycyB0byBwdXQgdGhlaXJcbiYjNDM7XHRcdCAqIGlzb2xhdGVkIGZvbGlvcyBiYWNrOyBnaXZlIHVwIGlmIHRoYXQgbWFrZXMgbm8gcHJvZ3Jlc3MuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChzdGFsbGVkKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0XHRzdGFsbGVkID0gdHJ1ZTtcbiYjNDM7XHRcdHJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7XG4mIzQzO1xuJiM0MztcdFx0LyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqL1xuJiM0MztcdFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG4mIzQzO1x0XHRcdCpmYXRhbCA9IHRydWU7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLFxuLVx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZCxcbi1cdFx0XHQgIGludCAqaXNvbGF0ZV90eXBlLCBpbnQgKmlzb2xhdGVfc2Nhbm5lZClcbiYjNDM7XHRcdFx0ICB1bnNpZ25lZCBpbnQgYWxsb3dlZCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbiYjNDM7XHRcdFx0ICBpbnQgKmlzb2xhdGVkLCBpbnQgKmlzb2xhdGVfdHlwZSwgaW50ICppc29sYXRlX3NjYW5uZWQpXG4ge1xuIFx0aW50IGk7XG4gXHRpbnQgdG90YWxfc2Nhbm5lZCA9IDA7XG4gXHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBwcmVmZXJyZWQgdHlwZSBtYXkgaGF2ZSBiZWVuIGV4Y2x1ZGVkIGJ5XG4mIzQzO1x0ICogdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzKCk7IHN0YXJ0IGZyb20gdGhlIG90aGVyIG9uZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIShhbGxvd2VkIFx1MDAyNiBCSVQodHlwZSkpKVxuJiM0MztcdFx0dHlwZSA9ICF0eXBlO1xuJiM0MztcbiBcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHtcbiBcdFx0aW50IHNjYW5uZWQ7XG4gXHRcdGludCB0aWVyID0gZ2V0X3RpZXJfaWR4KGxydXZlYywgdHlwZSk7XG5AQCAtNDg2Myw5ICYjNDM7NDk4NSwxMCBAQCBzdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHQvKlxuIFx0XHQgKiBJZiBzY2FubmVkIFx1MDAzZSAwIGFuZCBpc29sYXRlZCA9PSAwLCBhdm9pZCBmYWxsaW5nIGJhY2sgdG8gdGhlXG4gXHRcdCAqIG90aGVyIHR5cGUsIGFzIHRoaXMgdHlwZSByZW1haW5zIHN1ZmZpY2llbnQuIEZhbGxpbmcgYmFja1xuLVx0XHQgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLlxuJiM0MztcdFx0ICogdG9vIHJlYWRpbHkgY2FuIGRpc3J1cHQgdGhlIHBvc2l0aXZlX2N0cmxfZXJyKCkgYmlhcy4gT25seVxuJiM0MztcdFx0ICogZmFsbCBiYWNrIHRvIGEgdHlwZSB0aGF0IGlzIG5vdCB0aHJvdHRsZWQuXG4gXHRcdCAqL1xuLVx0XHRpZiAoIXNjYW5uZWQpXG4mIzQzO1x0XHRpZiAoIXNjYW5uZWQgXHUwMDI2XHUwMDI2IChhbGxvd2VkIFx1MDAyNiBCSVQoIXR5cGUpKSlcbiBcdFx0XHR0eXBlID0gIXR5cGU7XG4gXHR9XG4gXG5AQCAtNDg4OCwxNSAmIzQzOzUwMTEsMzYgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuJiM0MztcdHVuc2lnbmVkIGludCBhbGxvd2VkO1xuJiM0MztcdGJvb2wgZmF0YWw7XG4mIzQzO1xuJiM0MztcdGFsbG93ZWQgPSB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMobHJ1dmVjLCBzd2FwcGluZXNzLCBzYywgXHUwMDI2ZmF0YWwpO1xuJiM0MztcdGlmICghYWxsb3dlZCkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gTGlrZSB0aGUgbGVnYWN5XG4mIzQzO1x0XHQgKiBwYXRoLCBwcmV0ZW5kIHNvbWUgcGFnZXMgd2VyZSByZWNsYWltZWQgc28gcmVjbGFpbVxuJiM0MztcdFx0ICogdW53aW5kcyBxdWlja2x5IGluc3RlYWQgb2YgbG9vcGluZyBiYWNrIGludG8gdGhlXG4mIzQzO1x0XHQgKiB0aHJvdHRsZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGZhdGFsKVxuJiM0MztcdFx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgJiM0Mzs9IFNXQVBfQ0xVU1RFUl9NQVg7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuIFxuIFx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XG4gXG4gXHQvKiBJbiBjYXNlIGZvbGlvIGRlbGV0aW9uIGxlZnQgZW1wdHkgb2xkIGdlbnMsIGZsdXNoIHRoZW0gKi9cbiBcdHRyeV90b19pbmNfbWluX3NlcShscnV2ZWMsIHN3YXBwaW5lc3MpO1xuIFxuLVx0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsXG4mIzQzO1x0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsIGFsbG93ZWQsXG4gXHRcdFx0XHQgXHUwMDI2bGlzdCwgXHUwMDI2aXNvbGF0ZWQsIFx1MDAyNnR5cGUsIFx1MDAyNnR5cGVfc2Nhbm5lZCk7XG4gXHRucl9pc29sYXRlZCA9IGlzb2xhdGVkO1xuJiM0MztcdGlmIChucl9pc29sYXRlZCkge1xuJiM0MztcdFx0X19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgbnJfaXNvbGF0ZWQpO1xuJiM0MztcdFx0YXRvbWljX2xvbmdfYWRkKG5yX2lzb2xhdGVkLCBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuLm5yX2lzb2xhdGVkW3R5cGVdKTtcbiYjNDM7XHR9XG4gXG4gXHQvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqL1xuIFx0aWYgKHNjYW5uZWQpXG5AQCAtNDk1OSw2ICYjNDM7NTEwMyw5IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRnb3RvIHJldHJ5O1xuIFx0fVxuIFxuJiM0MztcdGF0b21pY19sb25nX3N1Yihucl9pc29sYXRlZCwgXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbi5ucl9pc29sYXRlZFt0eXBlXSk7XG4mIzQzO1x0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyB0eXBlLCAtbnJfaXNvbGF0ZWQpO1xuJiM0MztcbiBcdGlmIChucl9pc29sYXRlZCBcdTAwM2UgdG90YWxfcmVjbGFpbWVkKVxuIFx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiAmIzQzOyB0eXBlLFxuIFx0XHRcdFx0IG5yX2lzb2xhdGVkIC0gdG90YWxfcmVjbGFpbWVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMzoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rocm90dGxlX2V2aWN0YWJsZV90eXBlcyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3Rvb19tYW55X2lzb2xhdGVkJiMzNDssCiAgICAmIzM0O2lzb2xhdGVfZm9saW9zJiMzNDssCiAgICAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3NlcV93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGlzb2xhdGVkIGZvbGlvIGFjY291bnRpbmcgYW5kIHJlY2xhaW0gdGhyb3R0bGluZyBmb3IgTXVsdGktR2VuIExSVSAoTUdMUlUpIGluIG1tL3Ztc2Nhbi5jLCBpbXBsZW1lbnRpbmcgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZCgpIGFuZCB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBmb2xpbyBpc29sYXRpb24gZHVyaW5nIG1lbW9yeSBwcmVzc3VyZSBhbmQgZGlyZWN0IHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODM2ZDk2NDMzYzBlZDc2ZDA3MTEyODk3YmRmMjY2NGIxYzI4NzgxNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDM6MTY6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCA5NGY5YzNmZjU0MTYwLi44MTliNmMwNTkxMTZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTU4MCw2ICYjNDM7NTgwLDggQEAgc3RydWN0IGxydV9nZW5fZm9saW8gewogCS8qIGNhbiBiZSBtb2RpZmllZCB3aXRob3V0IGhvbGRpbmcgdGhlIExSVSBsb2NrICovCiAJYXRvbWljX2xvbmdfdCBldmljdGVkW05SX0hJU1RfR0VOU11bQU5PTl9BTkRfRklMRV1bTUFYX05SX1RJRVJTXTsKIAlhdG9taWNfbG9uZ190IHJlZmF1bHRlZFtOUl9ISVNUX0dFTlNdW0FOT05fQU5EX0ZJTEVdW01BWF9OUl9USUVSU107CiYjNDM7CS8qIHRoZSBudW1iZXIgb2YgZm9saW9zIGlzb2xhdGVkIGZyb20gdGhpcyBscnV2ZWMgYW5kIGJlaW5nIHJlY2xhaW1lZCAqLwomIzQzOwlhdG9taWNfbG9uZ190IG5yX2lzb2xhdGVkW0FOT05fQU5EX0ZJTEVdOwogCS8qIHdoZXRoZXIgdGhlIG11bHRpLWdlbiBMUlUgaXMgZW5hYmxlZCAqLwogCWJvb2wgZW5hYmxlZDsKIAkvKiB0aGUgbWVtY2cgZ2VuZXJhdGlvbiB0aGlzIGxydV9nZW5fZm9saW8gYmVsb25ncyB0byAqLwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBmMTE0OTFlZTllZDVjLi4yMTE4MzlkMTA5MDlhIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNDE1MSwyNSAmIzQzOzQxNTEsMzQgQEAgc3RhdGljIHZvaWQgc2V0X2luaXRpYWxfcHJpb3JpdHkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbAogCXNjLSZndDtwcmlvcml0eSA9IGNsYW1wKHByaW9yaXR5LCBERUZfUFJJT1JJVFkgLyAyLCBERUZfUFJJT1JJVFkpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcykKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKQogewotCWludCBnZW4sIHR5cGUsIHpvbmU7CiYjNDM7CWludCBnZW4sIHpvbmU7CiAJdW5zaWduZWQgbG9uZyBzZXEsIHRvdGFsID0gMDsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKIAlERUZJTkVfTUFYX1NFUShscnV2ZWMpOwogCURFRklORV9NSU5fU0VRKGxydXZlYyk7CiAKLQlmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7Ci0JCWZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxICZsdDs9IG1heF9zZXE7IHNlcSYjNDM7JiM0MzspIHsKLQkJCWdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTsKLQkJCWZvciAoem9uZSA9IDA7IHpvbmUgJmx0OyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KQotCQkJCXRvdGFsICYjNDM7PSBtYXgoUkVBRF9PTkNFKGxydWdlbi0mZ3Q7bnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTsKLQkJfQomIzQzOwlmb3IgKHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSAmbHQ7PSBtYXhfc2VxOyBzZXEmIzQzOyYjNDM7KSB7CiYjNDM7CQlnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7CiYjNDM7CQlmb3IgKHpvbmUgPSAwOyB6b25lICZsdDsgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOykKJiM0MzsJCQl0b3RhbCAmIzQzOz0gbWF4KFJFQURfT05DRShscnVnZW4tJmd0O25yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7CiAJfQogCiAJcmV0dXJuIHRvdGFsOwogfQogCiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHRvdGFsID0gMDsKJiM0MzsJaW50IHR5cGU7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKHR5cGUsIHN3YXBwaW5lc3MpCiYjNDM7CQl0b3RhbCAmIzQzOz0gbHJ1dmVjX3R5cGVfZXZpY3RhYmxlX3NpemUobHJ1dmVjLCB0eXBlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRvdGFsOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGxydXZlY19pc19zaXphYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7CiAJdW5zaWduZWQgbG9uZyB0b3RhbDsKQEAgLTQ4MzgsMTUgJiM0Mzs0ODQ3LDEyOCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcykKIAlyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoJmFtcDtzcCwgJmFtcDtwdik7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFRoZSBNR0xSVSBjb3VudGVycGFydCB0byB0b29fbWFueV9pc29sYXRlZCgpLgomIzQzOyAqCiYjNDM7ICogdG9vX21hbnlfaXNvbGF0ZWQoKSBjb21wYXJlcyBub2RlLXdpZGUgaXNvbGF0ZWQgY291bnRzIGFnYWluc3QKJiM0MzsgKiBub2RlLXdpZGUgaW5hY3RpdmUgc2l6ZXMuIEl0IHByZWRhdGVzIHBlci1tZW1jZyBMUlUgbGlzdHMsIHdoaWNoCiYjNDM7ICogbW92ZWQgaXNvbGF0aW9uIHRvIHBlci1scnV2ZWMgZ3JhbnVsYXJpdHkuIE1HTFJVIHJlY2xhaW1lcnMgY29udGVuZAomIzQzOyAqIHBlciBscnV2ZWMsIHNvIHRoaXMgY2hlY2sgaXMgcGVyIGxydXZlYyBhcyB3ZWxsLCBhbmQgaXNvbGF0aW9uIGluCiYjNDM7ICogb25lIG1lbWNnIGRvZXMgbm90IHRocm90dGxlIHJlY2xhaW0gaW4gYW5vdGhlci4KJiM0MzsgKgomIzQzOyAqIFRoZSBsZWdhY3kgdGhyZXNob2xkLCB0aGUgc2l6ZSBvZiB0aGUgaW5hY3RpdmUgbGlzdCwgaXMgbm90IHVzYWJsZQomIzQzOyAqIGhlcmUgZWl0aGVyOiBpbiBNR0xSVSB0aGUgaW5hY3RpdmUgY291bnRlcnMgYXJlIG9ubHkgYSBjb21wYXRpYmlsaXR5CiYjNDM7ICogc2hpbSAtIHRoZXkganVtcCBhcm91bmQgd2hlbiBzd2FwIHJ1bnMgb3V0IG9yIGEgbWVtY2cgaGl0cyBpdHMgc3dhcAomIzQzOyAqIGxpbWl0LCBhbmQgcHJvYWN0aXZlIGFnaW5nIGNhbiBpbmZsYXRlIHRoZW0uIENvbXBhcmUgYWdhaW5zdCB0aGUKJiM0MzsgKiB0b3RhbCBudW1iZXIgb2YgZXZpY3RhYmxlIHBhZ2VzIG9mIHRoZSB0eXBlIGRpdmlkZWQgYnkgTUlOX05SX0dFTlMsCiYjNDM7ICogYXBwcm94aW1hdGluZyB0aGUgc2l6ZSBvZiBvbmUgZ2VuZXJhdGlvbiAtIHRoZSBzYW1lIHVuaXQgdGhlCiYjNDM7ICogb3JpZ2luYWwgTUdMUlUgYWdpbmcgaGV1cmlzdGljcyB1c2VkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwKJiM0MzsJCQkJICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGlzb2xhdGVkLCBldmljdGFibGU7CiYjNDM7CiYjNDM7CWlmIChjdXJyZW50X2lzX2tzd2FwZCgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoIXdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc2MpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpc29sYXRlZCA9IGF0b21pY19sb25nX3JlYWQoJmFtcDtscnV2ZWMtJmd0O2xydWdlbi5ucl9pc29sYXRlZFt0eXBlXSk7CiYjNDM7CWV2aWN0YWJsZSA9IGxydXZlY190eXBlX2V2aWN0YWJsZV9zaXplKGxydXZlYywgdHlwZSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEdGUF9OT0lPL0dGUF9OT0ZTIGNhbGxlcnMgYXJlIGFsbG93ZWQgdG8gaXNvbGF0ZSBtb3JlIHBhZ2VzLCBzbwomIzQzOwkgKiB0aGV5IHdvbiYjMzk7dCBiZSBibG9ja2VkIGJ5IG5vcm1hbCBkaXJlY3QtcmVjbGFpbWVycywgZm9ybWluZyBhCiYjNDM7CSAqIGNpcmN1bGFyIGRlYWRsb2NrLgomIzQzOwkgKi8KJiM0MzsJaWYgKGdmcF9oYXNfaW9fZnMoc2MtJmd0O2dmcF9tYXNrKSkKJiM0MzsJCWV2aWN0YWJsZSAmZ3Q7Jmd0Oz0gMzsKJiM0MzsKJiM0MzsJcmV0dXJuIGlzb2xhdGVkICZndDsgZXZpY3RhYmxlIC8gTUlOX05SX0dFTlM7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVW5saWtlIHRoZSBsZWdhY3kgcGF0aCwgd2hlcmUgdGhlIExSVSBsaXN0IHRvIGlzb2xhdGUgZnJvbSBpcyBrbm93bgomIzQzOyAqIGJlZm9yZSBpc29sYXRpb24sIGlzb2xhdGVfZm9saW9zKCkgcGlja3MgdGhlIHR5cGUgZnJvbSB0aGUgcmVmYXVsdAomIzQzOyAqIGZlZWRiYWNrIGFuZCBtYXkgZmFsbCBiYWNrIHRvIHRoZSBvdGhlciBvbmUuIFRoZXJlZm9yZSwgaW5zdGVhZCBvZgomIzQzOyAqIHRocm90dGxpbmcgb24gYSBzaW5nbGUgdHlwZSwgY29sbGVjdCB0aGUgZXZpY3RhYmxlIHR5cGVzIHRoYXQgZG8gbm90CiYjNDM7ICogaGF2ZSB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MsIGFuZCBvbmx5IHNsZWVwIHdoZW4gYWxsIG9mIHRoZW0gZG8uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIHRoZSBtYXNrIG9mIHRoZSB0eXBlcyBpc29sYXRlX2ZvbGlvcygpIG1heSBpc29sYXRlIGZyb20sIG9yCiYjNDM7ICogMCBpZiByZWNsYWltIHNob3VsZCBzdG9wLiBBbHNvIHNldHMgQGZhdGFsIHRvIHRlbGwgdGhlIGNhbGxlciB0aGF0CiYjNDM7ICogdGhlIHRhc2sgcmVjZWl2ZWQgYSBmYXRhbCBzaWduYWwgd2hpbGUgd2FpdGluZy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHRocm90dGxlX2V2aWN0YWJsZV90eXBlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7CQkJCQkgICAgIGludCBzd2FwcGluZXNzLAomIzQzOwkJCQkJICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywKJiM0MzsJCQkJCSAgICAgYm9vbCAqZmF0YWwpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgYWxsb3dlZDsKJiM0MzsJYm9vbCBzdGFsbGVkID0gZmFsc2U7CiYjNDM7CXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CSpmYXRhbCA9IGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKDs7KSB7CiYjNDM7CQlhbGxvd2VkID0gMDsKJiM0MzsJCWZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgdHlwZSB3aXRoIG5vIGV2aWN0YWJsZSBmb2xpb3MgaGFzIG5vdGhpbmcgdG8KJiM0MzsJCQkgKiBpc29sYXRlLiBEb24mIzM5O3QgYWxsb3cgaXQsIG90aGVyd2lzZSByZWNsYWltIGNhbiBiZQomIzQzOwkJCSAqIHJlZGlyZWN0ZWQgdG8gaXQgYW5kIHNwaW4gbWFraW5nIG5vIHByb2dyZXNzLCBlLmcuCiYjNDM7CQkJICogd2hlbiB0aGUgb25seSB0eXBlIHdpdGggZm9saW9zIGlzIG92ZXItaXNvbGF0ZWQuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKCFscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShscnV2ZWMsIGkpKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlpZiAoIWxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQobHJ1dmVjLCBpLCBzYykpCiYjNDM7CQkJCWFsbG93ZWQgfD0gQklUKGkpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKGFsbG93ZWQpIHsKJiM0MzsJCQkvKiBXYWtlIHVwIHJlY2xhaW1lcnMgd2FpdGluZyBvbiB0aGUgaXNvbGF0aW9uIHRvIGdvIGRvd24uICovCiYjNDM7CQkJd2FrZV90aHJvdHRsZV9pc29sYXRlZChwZ2RhdCk7CiYjNDM7CQkJcmV0dXJuIGFsbG93ZWQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogQWxsIGV2aWN0YWJsZSB0eXBlcyBhcmUgb3Zlci1pc29sYXRlZC4gTGlrZSB0aGUgbGVnYWN5CiYjNDM7CQkgKiBwYXRoLCB3YWl0IG9uY2UgZm9yIGNvbmN1cnJlbnQgcmVjbGFpbWVycyB0byBwdXQgdGhlaXIKJiM0MzsJCSAqIGlzb2xhdGVkIGZvbGlvcyBiYWNrOyBnaXZlIHVwIGlmIHRoYXQgbWFrZXMgbm8gcHJvZ3Jlc3MuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChzdGFsbGVkKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJc3RhbGxlZCA9IHRydWU7CiYjNDM7CQlyZWNsYWltX3Rocm90dGxlKHBnZGF0LCBWTVNDQU5fVEhST1RUTEVfSVNPTEFURUQpOwomIzQzOwomIzQzOwkJLyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqLwomIzQzOwkJaWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiYjNDM7CQkJKmZhdGFsID0gdHJ1ZTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQkgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcywKLQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZCwKLQkJCSAgaW50ICppc29sYXRlX3R5cGUsIGludCAqaXNvbGF0ZV9zY2FubmVkKQomIzQzOwkJCSAgdW5zaWduZWQgaW50IGFsbG93ZWQsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCiYjNDM7CQkJICBpbnQgKmlzb2xhdGVkLCBpbnQgKmlzb2xhdGVfdHlwZSwgaW50ICppc29sYXRlX3NjYW5uZWQpCiB7CiAJaW50IGk7CiAJaW50IHRvdGFsX3NjYW5uZWQgPSAwOwogCWludCB0eXBlID0gZ2V0X3R5cGVfdG9fc2NhbihscnV2ZWMsIHN3YXBwaW5lc3MpOwogCiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBwcmVmZXJyZWQgdHlwZSBtYXkgaGF2ZSBiZWVuIGV4Y2x1ZGVkIGJ5CiYjNDM7CSAqIHRocm90dGxlX2V2aWN0YWJsZV90eXBlcygpOyBzdGFydCBmcm9tIHRoZSBvdGhlciBvbmUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIShhbGxvd2VkICZhbXA7IEJJVCh0eXBlKSkpCiYjNDM7CQl0eXBlID0gIXR5cGU7CiYjNDM7CiAJZm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUoaSwgc3dhcHBpbmVzcykgewogCQlpbnQgc2Nhbm5lZDsKIAkJaW50IHRpZXIgPSBnZXRfdGllcl9pZHgobHJ1dmVjLCB0eXBlKTsKQEAgLTQ4NjMsOSAmIzQzOzQ5ODUsMTAgQEAgc3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJLyoKIAkJICogSWYgc2Nhbm5lZCAmZ3Q7IDAgYW5kIGlzb2xhdGVkID09IDAsIGF2b2lkIGZhbGxpbmcgYmFjayB0byB0aGUKIAkJICogb3RoZXIgdHlwZSwgYXMgdGhpcyB0eXBlIHJlbWFpbnMgc3VmZmljaWVudC4gRmFsbGluZyBiYWNrCi0JCSAqIHRvbyByZWFkaWx5IGNhbiBkaXNydXB0IHRoZSBwb3NpdGl2ZV9jdHJsX2VycigpIGJpYXMuCiYjNDM7CQkgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLiBPbmx5CiYjNDM7CQkgKiBmYWxsIGJhY2sgdG8gYSB0eXBlIHRoYXQgaXMgbm90IHRocm90dGxlZC4KIAkJICovCi0JCWlmICghc2Nhbm5lZCkKJiM0MzsJCWlmICghc2Nhbm5lZCAmYW1wOyZhbXA7IChhbGxvd2VkICZhbXA7IEJJVCghdHlwZSkpKQogCQkJdHlwZSA9ICF0eXBlOwogCX0KIApAQCAtNDg4OCwxNSAmIzQzOzUwMTEsMzYgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJYm9vbCBza2lwX3JldHJ5ID0gZmFsc2U7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwomIzQzOwl1bnNpZ25lZCBpbnQgYWxsb3dlZDsKJiM0MzsJYm9vbCBmYXRhbDsKJiM0MzsKJiM0MzsJYWxsb3dlZCA9IHRocm90dGxlX2V2aWN0YWJsZV90eXBlcyhscnV2ZWMsIHN3YXBwaW5lc3MsIHNjLCAmYW1wO2ZhdGFsKTsKJiM0MzsJaWYgKCFhbGxvd2VkKSB7CiYjNDM7CQkvKgomIzQzOwkJICogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBMaWtlIHRoZSBsZWdhY3kKJiM0MzsJCSAqIHBhdGgsIHByZXRlbmQgc29tZSBwYWdlcyB3ZXJlIHJlY2xhaW1lZCBzbyByZWNsYWltCiYjNDM7CQkgKiB1bndpbmRzIHF1aWNrbHkgaW5zdGVhZCBvZiBsb29waW5nIGJhY2sgaW50byB0aGUKJiM0MzsJCSAqIHRocm90dGxlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoZmF0YWwpCiYjNDM7CQkJc2MtJmd0O25yX3JlY2xhaW1lZCAmIzQzOz0gU1dBUF9DTFVTVEVSX01BWDsKJiM0MzsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiAKIAlscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTsKIAogCS8qIEluIGNhc2UgZm9saW8gZGVsZXRpb24gbGVmdCBlbXB0eSBvbGQgZ2VucywgZmx1c2ggdGhlbSAqLwogCXRyeV90b19pbmNfbWluX3NlcShscnV2ZWMsIHN3YXBwaW5lc3MpOwogCi0Jc2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsCiYjNDM7CXNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLCBhbGxvd2VkLAogCQkJCSAmYW1wO2xpc3QsICZhbXA7aXNvbGF0ZWQsICZhbXA7dHlwZSwgJmFtcDt0eXBlX3NjYW5uZWQpOwogCW5yX2lzb2xhdGVkID0gaXNvbGF0ZWQ7CiYjNDM7CWlmIChucl9pc29sYXRlZCkgewomIzQzOwkJX19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGUsCiYjNDM7CQkJCSAgICAgIG5yX2lzb2xhdGVkKTsKJiM0MzsJCWF0b21pY19sb25nX2FkZChucl9pc29sYXRlZCwgJmFtcDtscnV2ZWMtJmd0O2xydWdlbi5ucl9pc29sYXRlZFt0eXBlXSk7CiYjNDM7CX0KIAogCS8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovCiAJaWYgKHNjYW5uZWQpCkBAIC00OTU5LDYgJiM0Mzs1MTAzLDkgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWdvdG8gcmV0cnk7CiAJfQogCiYjNDM7CWF0b21pY19sb25nX3N1Yihucl9pc29sYXRlZCwgJmFtcDtscnV2ZWMtJmd0O2xydWdlbi5ucl9pc29sYXRlZFt0eXBlXSk7CiYjNDM7CW1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZSwgLW5yX2lzb2xhdGVkKTsKJiM0MzsKIAlpZiAobnJfaXNvbGF0ZWQgJmd0OyB0b3RhbF9yZWNsYWltZWQpCiAJCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IHR5cGUsCiAJCQkJIG5yX2lzb2xhdGVkIC0gdG90YWxfcmVjbGFpbWVkKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA1MQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1HTFJVIElzb2xhdGlvbiBUaHJvdHRsaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaGl0cyBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAgYW5kIGBtbS92bXNjYW4uY2AuIEltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nIE1HTFJVLCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB0aGUgZGV0YWlscy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgYWRkaW5nIHNvbWUgaXNvbGF0aW9uIHRocm90dGxpbmcgZm9yIE11bHRpLUdlbiBMUlUuCgpTcGVjaWZpY2FsbHksIGluIGBtbS92bXNjYW4uY2AsIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgdHJhY2tpbmcgaXNvbGF0ZWQgcGFnZXMgZm9yIHRocm90dGxpbmcuIEEgbmV3IGBhdG9taWNfbG9uZ190IG5yX2lzb2xhdGVkW0FOT05fQU5EX0ZJTEVdYCBmaWVsZCBpcyBiZWluZyBhZGRlZCB0byB0aGUgYGxydV9nZW5fZm9saW9gIHN0cnVjdC4gV2UgaGF2ZSBhIGZldyBuZXcgZnVuY3Rpb25zIGFzIHdlbGw6IGBscnVfZ2VuX3Rvb19tYW55X2lzb2xhdGVkYCwgYHRocm90dGxlX2V2aWN0YWJsZV90eXBlc2AsIGFuZCB0aGVyZSBhcmUgdXBkYXRlcyB0byBgaXNvbGF0ZV9mb2xpb3NgIGFuZCBgZXZpY3RfZm9saW9zYC4gVGhpcyBhbGwgc2VlbXMgdG8gYmUgYWJvdXQgaW1wbGVtZW50aW5nIHRoZSBhY3R1YWwgdGhyb3R0bGluZyBtZWNoYW5pc20uIFRoZSBnb2FsIGlzIGxpa2VseSB0byBwcmV2ZW50IGEgcnVuYXdheSBzaXR1YXRpb24gd2hlcmUgdG9vIG1hbnkgcGFnZXMgYXJlIGlzb2xhdGVkLCB3aGljaCB3b3VsZCBibG9jayBwcm9ncmVzcy4KCk5vdywgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBJIHNob3VsZCBwcm9iYWJseSB1c2UgYGdyZXBwZXJgIG9yIGp1c3QganVtcCBpbnRvIGBtbS9LY29uZmlnYCB0byB2ZXJpZnkgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciBib3RoIE11bHRpLUdlbiBMUlUgKExSVV9HRU4sIHJpZ2h0PykgYW5kIHRoZSB2bXNjYW4gY29kZS4gR290dGEgbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgYnJlYWtpbmcgYW55IHByZS1leGlzdGluZyBjb25maWd1cmF0aW9ucyBvciBlbmFibGluZyB0aGlzIGluIGFuIHVuZXhwZWN0ZWQgc2NlbmFyaW8uIExldCYjMzk7cyBzZWUgaG93IHRoaXMgYWxsIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzOTM9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxuLS1cbm1tL0tjb25maWctMTQwMy0jIG11bHRpLWdlbiBMUlUge1xubW0vS2NvbmZpZzoxNDA0OmNvbmZpZyBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MDUtXHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTItXG5tbS9LY29uZmlnOjE0MTM6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDE0LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xubW0vS2NvbmZpZzoxNDE1Olx0ZGVwZW5kcyBvbiBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MTYtXHRoZWxwXG4tLVxubW0vS2NvbmZpZy0xNDE4LVxubW0vS2NvbmZpZzoxNDE5OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MjAtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xubW0vS2NvbmZpZzoxNDIxOlx0ZGVwZW5kcyBvbiBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MjItXHRoZWxwXG4tLVxubW0vS2NvbmZpZy0xNDI3LVxubW0vS2NvbmZpZzoxNDI4OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDI5LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzoxNDMwOlx0ZGVwZW5kcyBvbiBMUlVfR0VOIFx1MDAyNlx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcbm1tL0tjb25maWctMTQzMS0jIH1cbi0tXG5tbS9mb2xpby5jPTMyMj1zdGF0aWMgdm9pZCBfX2xydV9jYWNoZV9hY3RpdmF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtMzUxLVxubW0vZm9saW8uYzozNTI6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS9mb2xpby5jLTM1My1cbi0tXG5tbS9mb2xpby5jPTM3OD1zdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTM5NS1cbm1tL2ZvbGlvLmM6Mzk2OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xubW0vZm9saW8uYy0zOTctXG4tLVxubW0vZm9saW8uYz00MDI9c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy00MDYtXG5tbS9mb2xpby5jOjQwNzojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL2ZvbGlvLmMtNDA4LVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzY4NT1zdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNzQ1LVx0XHRcdFx0ICgxTCBcdTAwM2NcdTAwM2MgUEdfZHJvcGJlaGluZCkgfFxubW0vaHVnZV9tZW1vcnkuYzozNzQ2Olx0XHRcdFx0IExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX01BU0spKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMzc0Ny1cbi0tXG5tbS9tZW1jb250cm9sLmM9NDYyNz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NjQzLVxubW0vbWVtY29udHJvbC5jOjQ2NDQ6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS9tZW1jb250cm9sLmMtNDY0NS1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9nZW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldClcbi0tXG5tbS9tZW1jb250cm9sLmM9NDY2Mz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9nZW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkge31cbm1tL21lbWNvbnRyb2wuYzo0NjY0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vbWVtY29udHJvbC5jLTQ2NjUtXG4tLVxubW0vbWVtb3J5LmM9NjcyOD1zdGF0aWMgaW5saW5lIHZvaWQgbW1fYWNjb3VudF9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4tLVxubW0vbWVtb3J5LmMtNjc4MC1cbm1tL21lbW9yeS5jOjY3ODE6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS9tZW1vcnkuYy02NzgyLXN0YXRpYyB2b2lkIGxydV9nZW5fZW50ZXJfZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vbWVtb3J5LmM9Njc5Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX2V4aXRfZmF1bHQodm9pZClcbi0tXG5tbS9tZW1vcnkuYy02Nzk5LX1cbm1tL21lbW9yeS5jOjY4MDA6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS9tZW1vcnkuYy02ODAxLVxuLS1cbm1tL21tX2luaXQuYz0xMTI9dm9pZCBfX2luaXQgbW1pbml0X3ZlcmlmeV9wYWdlZmxhZ3NfbGF5b3V0KHZvaWQpXG4tLVxubW0vbW1faW5pdC5jLTEyNS1cdFx0S0FTQU5fVEFHX1dJRFRILFxubW0vbW1faW5pdC5jOjEyNjpcdFx0TFJVX0dFTl9XSURUSCxcbm1tL21tX2luaXQuYy0xMjctXHRcdExSVV9SRUZTX1dJRFRILFxuLS1cbm1tL3Ztc2Nhbi5jPTgyNz1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuLS1cbm1tL3Ztc2Nhbi5jLTgzMi1cbm1tL3Ztc2Nhbi5jOjgzMzojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTgzNC0vKlxuLS1cbm1tL3Ztc2Nhbi5jPTg2Mj1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4tLVxubW0vdm1zY2FuLmMtODY1LX1cbm1tL3Ztc2Nhbi5jOjg2NjojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTg2Ny1cbi0tXG5tbS92bXNjYW4uYz0yNjgwPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtMjY5MS1cbm1tL3Ztc2Nhbi5jOjI2OTI6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy0yNjkzLVxubW0vdm1zY2FuLmM9MjY5ND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jOjI2OTU6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jOjI2OTY6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG5tbS92bXNjYW4uYy0yNjk3LSNkZWZpbmUgZ2V0X2NhcChjYXApXHRzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcbm1tL3Ztc2Nhbi5jLTI2OTgtI2Vsc2Vcbm1tL3Ztc2Nhbi5jOjI2OTk6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfRkFMU0UobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xubW0vdm1zY2FuLmMtMjcwMC0jZGVmaW5lIGdldF9jYXAoY2FwKVx0c3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcbi0tXG5tbS92bXNjYW4uYz0yNzAzPXN0YXRpYyBib29sIHNob3VsZF93YWxrX21tdSh2b2lkKVxubW0vdm1zY2FuLmMtMjcwNC17XG5tbS92bXNjYW4uYzoyNzA1Olx0cmV0dXJuIGFyY2hfaGFzX2h3X3B0ZV95b3VuZygpIFx1MDAyNlx1MDAyNiBnZXRfY2FwKExSVV9HRU5fTU1fV0FMSyk7XG5tbS92bXNjYW4uYy0yNzA2LX1cbi0tXG5tbS92bXNjYW4uYz0yNzA4PXN0YXRpYyBib29sIHNob3VsZF9jbGVhcl9wbWRfeW91bmcodm9pZClcbm1tL3Ztc2Nhbi5jLTI3MDkte1xubW0vdm1zY2FuLmM6MjcxMDpcdHJldHVybiBhcmNoX2hhc19od19ub25sZWFmX3BtZF95b3VuZygpIFx1MDAyNlx1MDAyNiBnZXRfY2FwKExSVV9HRU5fTk9OTEVBRl9ZT1VORyk7XG5tbS92bXNjYW4uYy0yNzExLX1cbi0tXG5tbS92bXNjYW4uYy0yNzIxLVx0dW5zaWduZWQgbG9uZyBtaW5fc2VxW0FOT05fQU5EX0ZJTEVdID0ge1x0XHRcdFxcXG5tbS92bXNjYW4uYzoyNzIyOlx0XHRSRUFEX09OQ0UoKGxydXZlYyktXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbTFJVX0dFTl9BTk9OXSksXHRcXFxubW0vdm1zY2FuLmM6MjcyMzpcdFx0UkVBRF9PTkNFKChscnV2ZWMpLVx1MDAzZWxydWdlbi5taW5fc2VxW0xSVV9HRU5fRklMRV0pLFx0XFxcbm1tL3Ztc2Nhbi5jLTI3MjQtXHR9XG4tLVxubW0vdm1zY2FuLmM9Mjg4MD1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcbi0tXG5tbS92bXNjYW4uYy0yODk5LVxubW0vdm1zY2FuLmM6MjkwMDojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXG5tbS92bXNjYW4uYy0yOTAxLVxuLS1cbm1tL3Ztc2Nhbi5jPTMwMDk9dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMzAzNy1cbm1tL3Ztc2Nhbi5jOjMwMzg6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xubW0vdm1zY2FuLmMtMzAzOS1cbi0tXG5tbS92bXNjYW4uYz0zMjY5PXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuLS1cbm1tL3Ztc2Nhbi5jLTMyODctXHRcdC8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi9cbm1tL3Ztc2Nhbi5jOjMyODg6XHRcdGlmICghKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSlcbm1tL3Ztc2Nhbi5jLTMyODktXHRcdFx0cmV0dXJuIC0xO1xubW0vdm1zY2FuLmMtMzI5MC1cbm1tL3Ztc2Nhbi5jOjMyOTE6XHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG5tbS92bXNjYW4uYzozMjkyOlx0XHRuZXdfZmxhZ3MgfD0gKChnZW4gJiM0MzsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRikgfCBCSVQoUEdfd29ya2luZ3NldCk7XG5tbS92bXNjYW4uYy0zMjkzLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG5tbS92bXNjYW4uYy0zMjk0LVxubW0vdm1zY2FuLmM6MzI5NTpcdHJldHVybiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xubW0vdm1zY2FuLmMtMzI5Ni19XG4tLVxubW0vdm1zY2FuLmM9MzI5OT1zdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3Ztc2Nhbi5jLTMzMDUtXG5tbS92bXNjYW4uYzozMzA2Olx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG5tbS92bXNjYW4uYy0zMzA3LVxubW0vdm1zY2FuLmMtMzMwOC1cdGRvIHtcbm1tL3Ztc2Nhbi5jOjMzMDk6XHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xubW0vdm1zY2FuLmMtMzMxMC1cdFx0LyogZm9saW9fdXBkYXRlX2dlbigpIGhhcyBwcm9tb3RlZCB0aGlzIHBhZ2U/ICovXG4tLVxubW0vdm1zY2FuLmMtMzMxNS1cbm1tL3Ztc2Nhbi5jOjMzMTY6XHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG5tbS92bXNjYW4uYzozMzE3Olx0XHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gJiM0MzsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbm1tL3Ztc2Nhbi5jLTMzMTgtXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbi0tXG5tbS92bXNjYW4uYz0zOTUzPXN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTM5ODktXG5tbS92bXNjYW4uYzozOTkwOlx0XHRpZiAobWluX3NlcVtMUlVfR0VOX0FOT05dIFx1MDAzZSBzZXEgXHUwMDI2XHUwMDI2IG1pbl9zZXFbTFJVX0dFTl9GSUxFXSBcdTAwM2Mgc2VxKVxubW0vdm1zY2FuLmM6Mzk5MTpcdFx0XHRtaW5fc2VxW0xSVV9HRU5fQU5PTl0gPSBzZXE7XG5tbS92bXNjYW4uYzozOTkyOlx0XHRlbHNlIGlmIChtaW5fc2VxW0xSVV9HRU5fRklMRV0gXHUwMDNlIHNlcSBcdTAwMjZcdTAwMjYgbWluX3NlcVtMUlVfR0VOX0FOT05dIFx1MDAzYyBzZXEpXG5tbS92bXNjYW4uYzozOTkzOlx0XHRcdG1pbl9zZXFbTFJVX0dFTl9GSUxFXSA9IHNlcTtcbm1tL3Ztc2Nhbi5jLTM5OTQtXHR9XG4tLVxubW0vdm1zY2FuLmM9NDAwNT1zdGF0aWMgYm9vbCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy00MDM3LVx0ICogdGhlIGN1cnJlbnQgbWF4X3NlcSBuZWVkIHRvIGJlIGNvdmVyZWQsIHNpbmNlIG1heF9zZXEmIzQzOzEgY2FuIG92ZXJsYXBcbm1tL3Ztc2Nhbi5jOjQwMzg6XHQgKiB3aXRoIG1pbl9zZXFbTFJVX0dFTl9BTk9OXSBpZiBzd2FwcGluZyBpcyBjb25zdHJhaW5lZC4gQW5kIGlmIHRoZXkgZG9cbm1tL3Ztc2Nhbi5jLTQwMzktXHQgKiBvdmVybGFwLCBjb2xkL2hvdCBpbnZlcnNpb24gaGFwcGVucy5cbi0tXG5tbS92bXNjYW4uYz00ODMxPXN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ4MzUtXHRpZiAoc3dhcHBpbmVzcyBcdTAwM2M9IE1JTl9TV0FQUElORVNTICYjNDM7IDEpXG5tbS92bXNjYW4uYzo0ODM2Olx0XHRyZXR1cm4gTFJVX0dFTl9GSUxFO1xubW0vdm1zY2FuLmMtNDgzNy1cbm1tL3Ztc2Nhbi5jLTQ4MzgtXHRpZiAoc3dhcHBpbmVzcyBcdTAwM2U9IE1BWF9TV0FQUElORVNTKVxubW0vdm1zY2FuLmM6NDgzOTpcdFx0cmV0dXJuIExSVV9HRU5fQU5PTjtcbm1tL3Ztc2Nhbi5jLTQ4NDAtXHQvKlxuLS1cbm1tL3Ztc2Nhbi5jLTQ4NDMtXHQgKi9cbm1tL3Ztc2Nhbi5jOjQ4NDQ6XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFx1MDAyNnNwKTtcbm1tL3Ztc2Nhbi5jOjQ4NDU6XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xubW0vdm1zY2FuLmMtNDg0Ni1cbi0tXG5tbS92bXNjYW4uYz01NTA1PXN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcbi0tXG5tbS92bXNjYW4uYy01NTIxLVx0aWYgKGVuYWJsZWQpXG5tbS92bXNjYW4uYzo1NTIyOlx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZV9jcHVzbG9ja2VkKFx1MDAyNmxydV9nZW5fY2Fwc1tMUlVfR0VOX0NPUkVdKTtcbm1tL3Ztc2Nhbi5jLTU1MjMtXHRlbHNlXG5tbS92bXNjYW4uYzo1NTI0Olx0XHRzdGF0aWNfYnJhbmNoX2Rpc2FibGVfY3B1c2xvY2tlZChcdTAwMjZscnVfZ2VuX2NhcHNbTFJVX0dFTl9DT1JFXSk7XG5tbS92bXNjYW4uYy01NTI1LVxuLS1cbm1tL3Ztc2Nhbi5jPTU1ODY9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbi0tXG5tbS92bXNjYW4uYy01NTg5LVxubW0vdm1zY2FuLmM6NTU5MDpcdGlmIChnZXRfY2FwKExSVV9HRU5fQ09SRSkpXG5tbS92bXNjYW4uYzo1NTkxOlx0XHRjYXBzIHw9IEJJVChMUlVfR0VOX0NPUkUpO1xubW0vdm1zY2FuLmMtNTU5Mi1cbm1tL3Ztc2Nhbi5jLTU1OTMtXHRpZiAoc2hvdWxkX3dhbGtfbW11KCkpXG5tbS92bXNjYW4uYzo1NTk0Olx0XHRjYXBzIHw9IEJJVChMUlVfR0VOX01NX1dBTEspO1xubW0vdm1zY2FuLmMtNTU5NS1cbm1tL3Ztc2Nhbi5jLTU1OTYtXHRpZiAoc2hvdWxkX2NsZWFyX3BtZF95b3VuZygpKVxubW0vdm1zY2FuLmM6NTU5NzpcdFx0Y2FwcyB8PSBCSVQoTFJVX0dFTl9OT05MRUFGX1lPVU5HKTtcbm1tL3Ztc2Nhbi5jLTU1OTgtXG4tLVxubW0vdm1zY2FuLmM9NTYwMz1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vdm1zY2FuLmMtNTYxNS1cbm1tL3Ztc2Nhbi5jOjU2MTY6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9MUlVfR0VOX0NBUFM7IGkmIzQzOyYjNDM7KSB7XG5tbS92bXNjYW4uYy01NjE3LVx0XHRib29sIGVuYWJsZWQgPSBjYXBzIFx1MDAyNiBCSVQoaSk7XG5tbS92bXNjYW4uYy01NjE4LVxubW0vdm1zY2FuLmM6NTYxOTpcdFx0aWYgKGkgPT0gTFJVX0dFTl9DT1JFKVxubW0vdm1zY2FuLmMtNTYyMC1cdFx0XHRscnVfZ2VuX2NoYW5nZV9zdGF0ZShlbmFibGVkKTtcbi0tXG5tbS92bXNjYW4uYz02MDgwPXN0YXRpYyBpbnQgX19pbml0IGluaXRfbHJ1X2dlbih2b2lkKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwODItXHRCVUlMRF9CVUdfT04oTUlOX05SX0dFTlMgJiM0MzsgMSBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbm1tL3Ztc2Nhbi5jOjYwODM6XHRCVUlMRF9CVUdfT04oQklUKExSVV9HRU5fV0lEVEgpIFx1MDAzYz0gTUFYX05SX0dFTlMpO1xubW0vdm1zY2FuLmMtNjA4NC1cbi0tXG5tbS92bXNjYW4uYz02MDk1PWxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcbm1tL3Ztc2Nhbi5jLTYwOTYtXG5tbS92bXNjYW4uYzo2MDk3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtNjA5OC1cbi0tXG5tbS92bXNjYW4uYz02MTA5PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjExMy1cbm1tL3Ztc2Nhbi5jOjYxMTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy02MTE1LVxuLS1cbm1tL3dvcmtpbmdzZXQuYz0yMTM9c3RhdGljIHZvaWQgdW5wYWNrX3NoYWRvdyh2b2lkICpzaGFkb3csIGludCAqbWVtY2dpZHAsIHBnX2RhdGFfdCAqKnBnZGF0LFxuLS1cbm1tL3dvcmtpbmdzZXQuYy0yMzItXG5tbS93b3JraW5nc2V0LmM6MjMzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vd29ya2luZ3NldC5jLTIzNC1cbm1tL3dvcmtpbmdzZXQuYz0yMzU9c3RhdGljIHZvaWQgKmxydV9nZW5fZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS93b3JraW5nc2V0LmMtMjUwLVxubW0vd29ya2luZ3NldC5jOjI1MTpcdEJVSUxEX0JVR19PTihMUlVfR0VOX1dJRFRIICYjNDM7IExSVV9SRUZTX1dJRFRIIFx1MDAzZVxubW0vd29ya2luZ3NldC5jLTI1Mi1cdFx0ICAgICBCSVRTX1BFUl9MT05HIC0gbWF4KEVWSUNUSU9OX1NISUZULCBFVklDVElPTl9TSElGVF9BTk9OKSk7XG4tLVxubW0vd29ya2luZ3NldC5jPTI5Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuLS1cbm1tL3dvcmtpbmdzZXQuYy0zMzYtXG5tbS93b3JraW5nc2V0LmM6MzM3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xubW0vd29ya2luZ3NldC5jLTMzOC1cbi0tXG5tbS93b3JraW5nc2V0LmM9MzUwPXN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4tLVxubW0vd29ya2luZ3NldC5jLTM1My1cbm1tL3dvcmtpbmdzZXQuYzozNTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS93b3JraW5nc2V0LmMtMzU1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjI5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBLY29uZmlnOiBBIFRhcmdldGVkIEluc3BlY3Rpb24qKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gYG1tL0tjb25maWdgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHplcm9pbmcgaW4gYXJvdW5kIGxpbmUgMTQwMy4gVGhpcyBhcmVhIGxpa2VseSBkZWFscyB3aXRoIGEgc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgYSBzZXQgb2YgcmVsYXRlZCBvcHRpb25zLCBnaXZlbiB0aGUgY29udGV4dCBvZiB0aGUgS2NvbmZpZyBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgb3B0aW9uIGl0c2VsZiwgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZSBhc3NpZ25tZW50cywgb3IgdGhlIGhlbHAgdGV4dCB0aGF0IGd1aWRlcyB1c2Vycy4gSXQmIzM5O3MgYSB0YXJnZXRlZCBhcHByb2FjaDsgSSYjMzk7bSBub3QgZG9pbmcgYSBnZW5lcmFsIHN1cnZleS4gSSBoYXZlIGEgaHVuY2ggYWJvdXQgd2hhdCBJIGFtIGxvb2tpbmcgZm9yIHNvIEkgYW0gZ29pbmcgdG8gc2VlIGlmIG15IGh5cG90aGVzZXMgaG9sZCB1cCB3aGVuIEkgaW5zcGVjdCB0aGUgY29kZS4gSSBhbSBwcm9iYWJseSBsb29raW5nIGZvciBzb21lIHNwZWNpZmljIHNldHRpbmcgdGhhdCBjb250cm9scyB0aGUgdW5kZXJseWluZyBiZWhhdmlvci4gSSBhbSByZWFkeSB0byBkaWcgZGVlcGVyIGFzIG5lZWRlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDAwOlx0XHQgIHB1cnBvc2VzLiAgSXQgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gb25cbjE0MDE6XHRcdCAgZmlsZS1iYWNrZWQgbWVtb3J5IHR5cGVzIGxpa2Ugc2htZW0gYW5kIGh1Z2V0bGJmcy5cbjE0MDI6XHRcbjE0MDM6XHQjIG11bHRpLWdlbiBMUlUge1xuMTQwNDpcdGNvbmZpZyBMUlVfR0VOXG4xNDA1Olx0XHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbjE0MDY6XHRcdGRlcGVuZHMgb24gTU1VXG4xNDA3Olx0XHQjIG1ha2Ugc3VyZSBmb2xpby1cdTAwM2VmbGFncyBoYXMgZW5vdWdoIHNwYXJlIGJpdHNcbjE0MDg6XHRcdGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUFxuMTQwOTpcdFx0aGVscFxuMTQxMDpcdFx0ICBBIGhpZ2ggcGVyZm9ybWFuY2UgTFJVIGltcGxlbWVudGF0aW9uIHRvIG92ZXJjb21taXQgbWVtb3J5LiBTZWVcbjE0MTE6XHRcdCAgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzLlxuMTQxMjpcdFxuMTQxMzpcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbjE0MTQ6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbjE0MTU6XHRcdGRlcGVuZHMgb24gTFJVX0dFTlxuMTQxNjpcdFx0aGVscFxuMTQxNzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBtdWx0aS1nZW4gTFJVIGJ5IGRlZmF1bHQuXG4xNDE4Olx0XG4xNDE5Olx0Y29uZmlnIExSVV9HRU5fU1RBVFNcbjE0MjA6XHRcdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4xNDIxOlx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MjI6XHRcdGhlbHBcbjE0MjM6XHRcdCAgRG8gbm90IGVuYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IHBsYW4gdG8gbG9vayBhdCBoaXN0b3JpY2FsIHN0YXRzXG4xNDI0Olx0XHQgIGZyb20gZXZpY3RlZCBnZW5lcmF0aW9ucyBmb3IgZGVidWdnaW5nIHB1cnBvc2UuXG4xNDI1Olx0XG4xNDI2Olx0XHQgIFRoaXMgb3B0aW9uIGhhcyBhIHBlci1tZW1jZyBhbmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLlxuMTQyNzpcdFxuMTQyODpcdGNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxuMTQyOTpcdFx0ZGVmX2Jvb2wgeVxuMTQzMDpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFx1MDAyNlx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcbjE0MzE6XHQjIH1cbjE0MzI6XHRcbjE0MzM6XHRjb25maWcgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcbjE0MzQ6XHQgICAgICAgZGVmX2Jvb2wgblxuMTQzNTpcdFxuMTQzNjpcdGNvbmZpZyBQRVJfVk1BX0xPQ0tcbjE0Mzc6XHRcdGRlZl9ib29sIHlcbjE0Mzg6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sgXHUwMDI2XHUwMDI2IE1NVSBcdTAwMjZcdTAwMjYgU01QXG4xNDM5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwNjcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIExSVSBHZW5lcmF0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYENPTkZJR19MUlVfR0VOYCBvcHRpb24sIHdoaWNoIEkgYmVsaWV2ZSBpcyB0aGUga2V5IGhlcmUuIE5vdywgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIHNlZW1zIHRvIGJlIHRoZSBvbmUgdGhhdCB0dXJucyBpdCBvbiBieSBkZWZhdWx0LCBjb3JyZWN0PyBSaWdodCwgZ290IGl0LgoKVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgY2hhbmdlcyBtYWRlIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBJIG5lZWQgdG8gcmVhZCBjYXJlZnVsbHkgYXJvdW5kIHRoZSBsaW5lcyB0aGF0IHdlcmUgbW9kaWZpZWQsIEkgd2FudCB0byBnZXQgdGhlIGNvbnRleHQgcmlnaHQuIEkgd2lsbCBzdHVkeSB0aG9zZSBzZWN0aW9ucyBmb3Igbm93LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0ODMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ4MzA6XHRcbjQ4MzE6XHRzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbjQ4MzI6XHR7XG40ODMzOlx0XHRzdHJ1Y3QgY3RybF9wb3Mgc3AsIHB2ID0ge307XG40ODM0Olx0XG40ODM1Olx0XHRpZiAoc3dhcHBpbmVzcyBcdTAwM2M9IE1JTl9TV0FQUElORVNTICYjNDM7IDEpXG40ODM2Olx0XHRcdHJldHVybiBMUlVfR0VOX0ZJTEU7XG40ODM3Olx0XG40ODM4Olx0XHRpZiAoc3dhcHBpbmVzcyBcdTAwM2U9IE1BWF9TV0FQUElORVNTKVxuNDgzOTpcdFx0XHRyZXR1cm4gTFJVX0dFTl9BTk9OO1xuNDg0MDpcdFx0LypcbjQ4NDE6XHRcdCAqIENvbXBhcmUgdGhlIHN1bSBvZiBhbGwgdGllcnMgb2YgYW5vbiB3aXRoIHRoYXQgb2YgZmlsZSB0byBkZXRlcm1pbmVcbjQ4NDI6XHRcdCAqIHdoaWNoIHR5cGUgdG8gc2Nhbi5cbjQ4NDM6XHRcdCAqL1xuNDg0NDpcdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG40ODQ1Olx0XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xuNDg0NjpcdFxuNDg0NzpcdFx0cmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKFx1MDAyNnNwLCBcdTAwMjZwdik7XG40ODQ4Olx0fVxuNDg0OTpcdFxuNDg1MDpcdC8qXG40ODUxOlx0ICogVGhlIE1HTFJVIGNvdW50ZXJwYXJ0IHRvIHRvb19tYW55X2lzb2xhdGVkKCkuXG40ODUyOlx0ICpcbjQ4NTM6XHQgKiB0b29fbWFueV9pc29sYXRlZCgpIGNvbXBhcmVzIG5vZGUtd2lkZSBpc29sYXRlZCBjb3VudHMgYWdhaW5zdFxuNDg1NDpcdCAqIG5vZGUtd2lkZSBpbmFjdGl2ZSBzaXplcy4gSXQgcHJlZGF0ZXMgcGVyLW1lbWNnIExSVSBsaXN0cywgd2hpY2hcbjQ4NTU6XHQgKiBtb3ZlZCBpc29sYXRpb24gdG8gcGVyLWxydXZlYyBncmFudWxhcml0eS4gTUdMUlUgcmVjbGFpbWVycyBjb250ZW5kXG40ODU2Olx0ICogcGVyIGxydXZlYywgc28gdGhpcyBjaGVjayBpcyBwZXIgbHJ1dmVjIGFzIHdlbGwsIGFuZCBpc29sYXRpb24gaW5cbjQ4NTc6XHQgKiBvbmUgbWVtY2cgZG9lcyBub3QgdGhyb3R0bGUgcmVjbGFpbSBpbiBhbm90aGVyLlxuNDg1ODpcdCAqXG40ODU5Olx0ICogVGhlIGxlZ2FjeSB0aHJlc2hvbGQsIHRoZSBzaXplIG9mIHRoZSBpbmFjdGl2ZSBsaXN0LCBpcyBub3QgdXNhYmxlXG40ODYwOlx0ICogaGVyZSBlaXRoZXI6IGluIE1HTFJVIHRoZSBpbmFjdGl2ZSBjb3VudGVycyBhcmUgb25seSBhIGNvbXBhdGliaWxpdHlcbjQ4NjE6XHQgKiBzaGltIC0gdGhleSBqdW1wIGFyb3VuZCB3aGVuIHN3YXAgcnVucyBvdXQgb3IgYSBtZW1jZyBoaXRzIGl0cyBzd2FwXG40ODYyOlx0ICogbGltaXQsIGFuZCBwcm9hY3RpdmUgYWdpbmcgY2FuIGluZmxhdGUgdGhlbS4gQ29tcGFyZSBhZ2FpbnN0IHRoZVxuNDg2MzpcdCAqIHRvdGFsIG51bWJlciBvZiBldmljdGFibGUgcGFnZXMgb2YgdGhlIHR5cGUgZGl2aWRlZCBieSBNSU5fTlJfR0VOUyxcbjQ4NjQ6XHQgKiBhcHByb3hpbWF0aW5nIHRoZSBzaXplIG9mIG9uZSBnZW5lcmF0aW9uIC0gdGhlIHNhbWUgdW5pdCB0aGVcbjQ4NjU6XHQgKiBvcmlnaW5hbCBNR0xSVSBhZ2luZyBoZXVyaXN0aWNzIHVzZWQuXG40ODY2Olx0ICovXG40ODY3Olx0c3RhdGljIGJvb2wgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLFxuNDg2ODpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG40ODY5Olx0e1xuNDg3MDpcdFx0dW5zaWduZWQgbG9uZyBpc29sYXRlZCwgZXZpY3RhYmxlO1xuNDg3MTpcdFxuNDg3MjpcdFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG40ODczOlx0XHRcdHJldHVybiBmYWxzZTtcbjQ4NzQ6XHRcbjQ4NzU6XHRcdGlmICghd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzYykpXG40ODc2Olx0XHRcdHJldHVybiBmYWxzZTtcbjQ4Nzc6XHRcbjQ4Nzg6XHRcdGlzb2xhdGVkID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuLm5yX2lzb2xhdGVkW3R5cGVdKTtcbjQ4Nzk6XHRcdGV2aWN0YWJsZSA9IGxydXZlY190eXBlX2V2aWN0YWJsZV9zaXplKGxydXZlYywgdHlwZSk7XG40ODgwOlx0XG40ODgxOlx0XHQvKlxuNDg4MjpcdFx0ICogR0ZQX05PSU8vR0ZQX05PRlMgY2FsbGVycyBhcmUgYWxsb3dlZCB0byBpc29sYXRlIG1vcmUgcGFnZXMsIHNvXG40ODgzOlx0XHQgKiB0aGV5IHdvbiYjMzk7dCBiZSBibG9ja2VkIGJ5IG5vcm1hbCBkaXJlY3QtcmVjbGFpbWVycywgZm9ybWluZyBhXG40ODg0Olx0XHQgKiBjaXJjdWxhciBkZWFkbG9jay5cbjQ4ODU6XHRcdCAqL1xuNDg4NjpcdFx0aWYgKGdmcF9oYXNfaW9fZnMoc2MtXHUwMDNlZ2ZwX21hc2spKVxuNDg4NzpcdFx0XHRldmljdGFibGUgXHUwMDNlXHUwMDNlPSAzO1xuNDg4ODpcdFxuNDg4OTpcdFx0cmV0dXJuIGlzb2xhdGVkIFx1MDAzZSBldmljdGFibGUgLyBNSU5fTlJfR0VOUztcbjQ4OTA6XHR9XG40ODkxOlx0XG40ODkyOlx0LypcbjQ4OTM6XHQgKiBVbmxpa2UgdGhlIGxlZ2FjeSBwYXRoLCB3aGVyZSB0aGUgTFJVIGxpc3QgdG8gaXNvbGF0ZSBmcm9tIGlzIGtub3duXG40ODk0Olx0ICogYmVmb3JlIGlzb2xhdGlvbiwgaXNvbGF0ZV9mb2xpb3MoKSBwaWNrcyB0aGUgdHlwZSBmcm9tIHRoZSByZWZhdWx0XG40ODk1Olx0ICogZmVlZGJhY2sgYW5kIG1heSBmYWxsIGJhY2sgdG8gdGhlIG90aGVyIG9uZS4gVGhlcmVmb3JlLCBpbnN0ZWFkIG9mXG40ODk2Olx0ICogdGhyb3R0bGluZyBvbiBhIHNpbmdsZSB0eXBlLCBjb2xsZWN0IHRoZSBldmljdGFibGUgdHlwZXMgdGhhdCBkbyBub3RcbjQ4OTc6XHQgKiBoYXZlIHRvbyBtYW55IGlzb2xhdGVkIGZvbGlvcywgYW5kIG9ubHkgc2xlZXAgd2hlbiBhbGwgb2YgdGhlbSBkby5cbjQ4OTg6XHQgKlxuNDg5OTpcdCAqIFJldHVybnMgdGhlIG1hc2sgb2YgdGhlIHR5cGVzIGlzb2xhdGVfZm9saW9zKCkgbWF5IGlzb2xhdGUgZnJvbSwgb3JcbjQ5MDA6XHQgKiAwIGlmIHJlY2xhaW0gc2hvdWxkIHN0b3AuIEFsc28gc2V0cyBAZmF0YWwgdG8gdGVsbCB0aGUgY2FsbGVyIHRoYXRcbjQ5MDE6XHQgKiB0aGUgdGFzayByZWNlaXZlZCBhIGZhdGFsIHNpZ25hbCB3aGlsZSB3YWl0aW5nLlxuNDkwMjpcdCAqL1xuNDkwMzpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbjQ5MDQ6XHRcdFx0XHRcdFx0ICAgICBpbnQgc3dhcHBpbmVzcyxcbjQ5MDU6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbjQ5MDY6XHRcdFx0XHRcdFx0ICAgICBib29sICpmYXRhbClcbjQ5MDc6XHR7XG40OTA4Olx0XHR1bnNpZ25lZCBpbnQgYWxsb3dlZDtcbjQ5MDk6XHRcdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjUxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyB0aGVzZSBldmljdGlvbiBmdW5jdGlvbnMuCgoqKkRlY29uc3RydWN0aW5nIEZvbGlvIEV2aWN0aW9uIGFuZCBJc29sYXRpb24qKgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjYWxsZXJzIGFuZCB0aGUgY2FsbCBzdGFjayByZWxhdGVkIHRvIGBldmljdF9mb2xpb3NgLCBgaXNvbGF0ZV9mb2xpb3NgLCBhbmQgcmVsYXRlZCByb3V0aW5lcy4gVW5kZXJzdGFuZGluZyB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGludm9rZWQgaXMga2V5IHRvIGdyYXNwaW5nIHRoZWlyIG92ZXJhbGwgcm9sZSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgbGlmZWN5Y2xlLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQuCgpUaGVuLCBJJiMzOTttIGdvaW5nIHRvIHBpbnBvaW50IHRoZSBkZWZpbml0aW9uIG9mIGBldmljdF9mb2xpb3NgLCBzbyBJIHdpbGwgc2VhcmNoIGluIGBtbS92bXNjYW4uY2AuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgcGFnZS9mb2xpbyBzY2FubmluZyBhbmQgcmVjbGFpbWluZyBwcm9jZXNzLCBzbyB0aGF0IGxvY2F0aW9uIG1ha2VzIHNlbnNlIGFzIGEgc3RhcnRpbmcgcG9pbnQuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGhvdyBgZXZpY3RfZm9saW9zYCBpbnRlcmFjdHMgd2l0aCB0aGUgc3Vycm91bmRpbmcgY29kZSwgYW5kIGlkZW50aWZ5IG90aGVyIHBvaW50cyBvZiBpbnRlcmVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXZpY3RfZm9saW9zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NDk1Nj1zdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ5OTctXG5tbS92bXNjYW4uYzo0OTk4OnN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxubW0vdm1zY2FuLmMtNDk5OS1cdFx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmM9NTE5OT1zdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyMjItXHRcdG5yX2JhdGNoID0gbWluKG5yX3RvX3NjYW4sIE1JTl9MUlVfQkFUQ0gpO1xubW0vdm1zY2FuLmM6NTIyMzpcdFx0ZGVsdGEgPSBldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpO1xubW0vdm1zY2FuLmMtNTIyNC1cdFx0aWYgKCFkZWx0YSlcbi0tXG5tbS92bXNjYW4uYz01ODI2PXN0YXRpYyBpbnQgcnVuX2V2aWN0aW9uKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTU4NDYtXHRcdG5yX2JhdGNoID0gbWluKG5yX3RvX3JlY2xhaW0gLSBzYy1cdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xubW0vdm1zY2FuLmM6NTg0NzpcdFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxubW0vdm1zY2FuLmMtNTg0OC1cdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyOTUKCQkJCQkJCW91dHB1dDogNjAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9uczoKCioqRGlnZ2luZyBpbnRvIHRoZSBFdmljdGlvbiBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBydW5fZXZpY3Rpb25gLiBNeSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6IHdoZXJlIGFyZSB0aGVzZSB0aGluZ3MgYWN0dWFsbHkgKnVzZWQqPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCB0byBnZXQgYSBoYW5kbGUgb24gdGhlaXIgcHVycG9zZSB3aXRoaW4gdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gdHJhY2UgdGhlbSB0aHJvdWdoIHRoZSBjb2RlIGJhc2UgYW5kIHNlZSB0aGUgY29udGV4dCBpbiB3aGljaCB0aGVzZSBldmljdGlvbiBhbmQgc2hyaW5raW5nIG9wZXJhdGlvbnMgYXJlIGFjdHVhbGx5IHRyaWdnZXJlZC4gQXJlIHRoZXkgcGFydCBvZiBhIHNjaGVkdWxlZCBiYWNrZ3JvdW5kIHRhc2s/IEFyZSB0aGV5IGluIHJlc3BvbnNlIHRvIG1lbW9yeSBwcmVzc3VyZT8gQXJlIHRoZXkgcmVhY3RpbmcgdG8gc3BlY2lmaWMgZXZlbnRzIHdpdGhpbiB0aGUgTFJVIGNhY2hlIGl0c2VsZj8gS25vd2luZyB0aGUgY2FsbCBzaXRlcyBpcyB0aGUgZXNzZW50aWFsIGZpcnN0IHN0ZXAgdG8gdW5kZXJzdGFuZGluZyB3aGF0JiMzOTtzIHJlYWxseSBnb2luZyBvbiB3aXRoIHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgc3RvcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19zaHJpbmtfbHJ1dmVjfHJ1bl9ldmljdGlvbnxscnVfZ2VuX3Nocmlua19scnV2ZWN8bHJ1X2dlbl9zaHJpbmtfbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTUxNjQ9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTk4LSAqL1xubW0vdm1zY2FuLmM6NTE5OTpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTIwMC17XG4tLVxubW0vdm1zY2FuLmM9NTI0ND1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MjYzLVxubW0vdm1zY2FuLmM6NTI2NDpcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy01MjY1LVxuLS1cbm1tL3Ztc2Nhbi5jPTUyODU9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTM1NC1cbm1tL3Ztc2Nhbi5jOjUzNTU6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MzU2LXtcbi0tXG5tbS92bXNjYW4uYy01MzY3LVxubW0vdm1zY2FuLmM6NTM2ODpcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcbm1tL3Ztc2Nhbi5jLTUzNjktXHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcbi0tXG5tbS92bXNjYW4uYy01Mzc1LVxubW0vdm1zY2FuLmM6NTM3NjpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTM3Ny17XG4tLVxubW0vdm1zY2FuLmM9NTgxNT1zdGF0aWMgaW50IHJ1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxuLS1cbm1tL3Ztc2Nhbi5jLTU4MjUtXG5tbS92bXNjYW4uYzo1ODI2OnN0YXRpYyBpbnQgcnVuX2V2aWN0aW9uKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxubW0vdm1zY2FuLmMtNTgyNy1cdFx0XHRpbnQgc3dhcHBpbmVzcywgdW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxuLS1cbm1tL3Ztc2Nhbi5jPTU4NTY9c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxuLS1cbm1tL3Ztc2Nhbi5jLTU4ODctXHRjYXNlICYjMzk7LSYjMzk7OlxubW0vdm1zY2FuLmM6NTg4ODpcdFx0ZXJyID0gcnVuX2V2aWN0aW9uKGxydXZlYywgc2VxLCBzYywgc3dhcHBpbmVzcywgb3B0KTtcbm1tL3Ztc2Nhbi5jLTU4ODktXHRcdGJyZWFrO1xuLS1cbm1tL3Ztc2Nhbi5jPTYwOTk9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MTAzLVxubW0vdm1zY2FuLmM6NjEwNDpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTYxMDUte1xuLS1cbm1tL3Ztc2Nhbi5jLTYxMDgtXG5tbS92bXNjYW4uYzo2MTA5OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy02MTEwLXtcbi0tXG5tbS92bXNjYW4uYz02MTE2PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MTI3LVx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcbm1tL3Ztc2Nhbi5jOjYxMjg6XHRcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYxMjktXG4tLVxubW0vdm1zY2FuLmM9NjM4Nj1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MzkzLVx0XHRtZW1zZXQoXHUwMDI2c2MtXHUwMDNlbnIsIDAsIHNpemVvZihzYy1cdTAwM2VucikpO1xubW0vdm1zY2FuLmM6NjM5NDpcdFx0bHJ1X2dlbl9zaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNjM5NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NjYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBNZW1vcnkgUmVjbGFtYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgcmVjbGFtYXRpb24gd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB0aGUgbWFpbiBwYXRocy4gSSBrbm93IHRoYXQgYHNocmlua19scnV2ZWNgIGFuZCBgc2hyaW5rX25vZGVgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucywgdG91Y2hpbmcgb24gZGlyZWN0IHJlY2xhaW0sIGtzd2FwZCwgYW5kIG1lbW9yeSBjZ3JvdXAgKG1lbWNnKSByZWNsYWltIG1lY2hhbmlzbXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGVzZSBhbmQgbWF5YmUgZm9jdXMgb24gdGhlIG5ld2VyIHBhcnRzIGluIHRoZXNlIHBhdGhzLgoKQmV5b25kIHRoYXQsIEkgcmVtZW1iZXIgdGhlIGRlYnVnZnMgYW5kIHN5c2ZzIGludGVyZmFjZXMsIGxpa2UgdGhlIG9uZXMgdW5kZXIgYC9zeXMva2VybmVsL21tL2xydV9nZW4vYC4gVGhvc2UgY2FuIHByb3ZpZGUgdmFsdWFibGUgaW5zaWdodHMsIGxpa2UgdGhyb3VnaCBpbnRlcmZhY2VzIGxpa2UgYGxydV9nZW5fc2VxX3dyaXRlYCBhbmQgYHJ1bl9jbWRgLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCBgbHJ1X2dlbl9zZXFfd3JpdGVgLCBvciBtYXliZSBzb21lIG9mIHRoZSBvdGhlciBzeXNmcyBpbnRlcmZhY2VzLCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBwZXJzcGVjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnVuX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTU4MjY9c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNTg1NS1cbm1tL3Ztc2Nhbi5jOjU4NTY6c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxubW0vdm1zY2FuLmMtNTg1Ny1cdFx0ICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLCB1bnNpZ25lZCBsb25nIG9wdClcbi0tXG5tbS92bXNjYW4uYz01ODk4PXN0YXRpYyBzc2l6ZV90IGxydV9nZW5fc2VxX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLFxuLS1cbm1tL3Ztc2Nhbi5jLTU5NjYtXG5tbS92bXNjYW4uYzo1OTY3Olx0XHRlcnIgPSBydW5fY21kKGNtZCwgbWVtY2dfaWQsIG5pZCwgc2VxLCBcdTAwMjZzYywgc3dhcHBpbmVzcywgb3B0KTtcbm1tL3Ztc2Nhbi5jLTU5NjgtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjQwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIHByZXR0eSBjcml0aWNhbCBzdHVmZjogdGhlIGNvcmUga2VybmVsIGxvZ2ljIGZvciBNR0xSVSBwYWdlIHJlY2xhbWF0aW9uIGFuZCBpc29sYXRpb24gdGhyb3R0bGluZy4gSW5zdGFudGx5LCBteSBleHBlcnQgYnJhaW4gc2NyZWFtcywgJiMzNDtGdXp6IGl0ISYjMzQ7IEdpdmVuIHRoYXQgaXQmIzM5O3MgYWx0ZXJpbmcgZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIE1HTFJVIGZyYW1ld29yayAoaW50cm9kdWNpbmcgdGhpbmdzIGxpa2UgYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRgLCBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYCwgYXRvbWljIGNvdW50ZXIgbWFuaXB1bGF0aW9ucywgYW5kIHJldHJ5L2Fib3J0IGxvZ2ljIGZvciBzaWduYWwgaGFuZGxpbmcpLCBpdOKAmXMgcHJhY3RpY2FsbHkgYmVnZ2luZyBmb3IgaXQuIFRoaXMgaXMgYSBwcmltZSB0YXJnZXQgZm9yIHVuY292ZXJpbmcgc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrczoKCjEuICBgV29ydGhGdXp6aW5nYDogRGVmaW5pdGVseSBhIHJlc291bmRpbmcgJiMzNDt5ZXMmIzM0Oy4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLCBzbyB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBidWdzIGhlcmUgaXMgaHVnZS4KCjIuICBgRW5hYmxlQ29uZmlnc2A6IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBMb29rcyBsaWtlIGBMUlVfR0VOYCBpcyBlc3NlbnRpYWwsIGEgYm9vbCBkZXBlbmRlbnQgb24gYE1NVWAsIGA2NEJJVGAsIGAhU1BBUlNFTUVNYCBvciBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBBbmQgb2YgY291cnNlLCBgTFJVX0dFTl9FTkFCTEVEYCwgd2hpY2ggZGVwZW5kcyBvbiBgTFJVX0dFTmAuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZXNlIHR3byBhcmUgc3VmZmljaWVudCBvciBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIHN1Y2ggYXMgYExSVV9HRU5fU1RBVFNgIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIHNob3VsZCBhbHNvIGRvIGEgcXVpY2sgZ3JlcCBzZWFyY2ggZm9yIGFueXRoaW5nIGVsc2UgcmVsYXRlZCB0byBgbHJ1X2dlbmAgb3IgYHZtc2Nhbi5jYCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLiBJJiMzOTtsbCBzZWFyY2ggdGhlIHJlcG8gZm9yIGBDT05GSUdfTFJVX0dFTmAgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0xSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZm9saW8uYz0zMjI9c3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTM1MS1cbm1tL2ZvbGlvLmM6MzUyOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vZm9saW8uYy0zNTMtXG4tLVxubW0vZm9saW8uYz0zNzg9c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy0zOTUtXG5tbS9mb2xpby5jOjM5NjojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbm1tL2ZvbGlvLmMtMzk3LVxuLS1cbm1tL2ZvbGlvLmM9NDAyPXN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtNDA2LVxubW0vZm9saW8uYzo0MDc6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS9mb2xpby5jLTQwOC1cbi0tXG5tbS9tZW1jb250cm9sLmM9NDYyNz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NjQzLVxubW0vbWVtY29udHJvbC5jOjQ2NDQ6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS9tZW1jb250cm9sLmMtNDY0NS1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9nZW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldClcbi0tXG5tbS9tZW1jb250cm9sLmM9NDY2Mz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9nZW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkge31cbm1tL21lbWNvbnRyb2wuYzo0NjY0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vbWVtY29udHJvbC5jLTQ2NjUtXG4tLVxubW0vbWVtb3J5LmM9NjcyOD1zdGF0aWMgaW5saW5lIHZvaWQgbW1fYWNjb3VudF9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4tLVxubW0vbWVtb3J5LmMtNjc4MC1cbm1tL21lbW9yeS5jOjY3ODE6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS9tZW1vcnkuYy02NzgyLXN0YXRpYyB2b2lkIGxydV9nZW5fZW50ZXJfZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vbWVtb3J5LmM9Njc5Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX2V4aXRfZmF1bHQodm9pZClcbi0tXG5tbS9tZW1vcnkuYy02Nzk5LX1cbm1tL21lbW9yeS5jOjY4MDA6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS9tZW1vcnkuYy02ODAxLVxuLS1cbm1tL3Ztc2Nhbi5jPTgyNz1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuLS1cbm1tL3Ztc2Nhbi5jLTgzMi1cbm1tL3Ztc2Nhbi5jOjgzMzojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTgzNC0vKlxuLS1cbm1tL3Ztc2Nhbi5jPTg2Mj1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4tLVxubW0vdm1zY2FuLmMtODY1LX1cbm1tL3Ztc2Nhbi5jOjg2NjojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTg2Ny1cbi0tXG5tbS92bXNjYW4uYz0yNjgwPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtMjY5MS1cbm1tL3Ztc2Nhbi5jOjI2OTI6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy0yNjkzLVxubW0vdm1zY2FuLmM9MjY5ND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jOjI2OTU6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jLTI2OTYtREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG4tLVxubW0vdm1zY2FuLmM9Mjg4MD1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcbi0tXG5tbS92bXNjYW4uYy0yODk5LVxubW0vdm1zY2FuLmM6MjkwMDojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXG5tbS92bXNjYW4uYy0yOTAxLVxuLS1cbm1tL3Ztc2Nhbi5jPTMwMDk9dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMzAzNy1cbm1tL3Ztc2Nhbi5jOjMwMzg6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xubW0vdm1zY2FuLmMtMzAzOS1cbi0tXG5tbS92bXNjYW4uYz02MDk1PWxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcbm1tL3Ztc2Nhbi5jLTYwOTYtXG5tbS92bXNjYW4uYzo2MDk3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtNjA5OC1cbi0tXG5tbS92bXNjYW4uYz02MTA5PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjExMy1cbm1tL3Ztc2Nhbi5jOjYxMTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy02MTE1LVxuLS1cbm1tL3dvcmtpbmdzZXQuYz0yMTM9c3RhdGljIHZvaWQgdW5wYWNrX3NoYWRvdyh2b2lkICpzaGFkb3csIGludCAqbWVtY2dpZHAsIHBnX2RhdGFfdCAqKnBnZGF0LFxuLS1cbm1tL3dvcmtpbmdzZXQuYy0yMzItXG5tbS93b3JraW5nc2V0LmM6MjMzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vd29ya2luZ3NldC5jLTIzNC1cbi0tXG5tbS93b3JraW5nc2V0LmM9MjkyPXN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4tLVxubW0vd29ya2luZ3NldC5jLTMzNi1cbm1tL3dvcmtpbmdzZXQuYzozMzc6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG5tbS93b3JraW5nc2V0LmMtMzM4LVxuLS1cbm1tL3dvcmtpbmdzZXQuYz0zNTA9c3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbi0tXG5tbS93b3JraW5nc2V0LmMtMzUzLVxubW0vd29ya2luZ3NldC5jOjM1NDojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3dvcmtpbmdzZXQuYy0zNTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDA5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIExSVSBHZW5lcmF0aW9uIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgTFJVIGdlbmVyYXRpb24gZnV6emluZyBzZXR1cC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IHN5bWJvbHMgdG8gZm9jdXMgb24sIGtlZXBpbmcgaW4gbWluZCB0aGUgZ3VpZGFuY2U6ICYjMzQ7MS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4gQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4mIzM0OyBTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgbWFrZSBzdXJlIGBDT05GSUdfTFJVX0dFTmAgYW5kIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBhcmUgc2V0IGFwcHJvcHJpYXRlbHkuCgpOb3csIGxldCYjMzk7cyBleGFtaW5lIGBGb2N1c1N5bWJvbHNgIHRvIHNlZSB3aGF0JiMzOTtzIGFscmVhZHkgdGhlcmUgYW5kIGlmIEkgbmVlZCB0byBhZGQgYW55dGhpbmcuIE15IGF0dGVudGlvbiBpcyBkcmF3biB0byB0aGUgYG1tL3Ztc2Nhbi5jYCBmaWxlIHNpbmNlIGl0IHNlZW1zIHJlbGV2YW50IHRvIHRoaXMgYXJlYSBvZiBtZW1vcnkgbWFuYWdlbWVudC4gSSBzZWUgYSBidW5jaCBvZiBmdW5jdGlvbnMgaW4gdGhlcmUgdGhhdCBkZWFsIHdpdGggaXNvbGF0aW9uIGFuZCBMUlUgZ2VuZXJhdGlvbiBidXQgaXQgaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHdoYXQga2luZCBvZiBmdW5jdGlvbnMgYXJlIHByZWZlcnJlZCB0byBiZSB0YXJnZXRlZC4gSSBzZWUgYGV2aWN0X2ZvbGlvc2AsIGBpc29sYXRlX2ZvbGlvc2AsIGBscnVfZ2VuX3Rvb19tYW55X2lzb2xhdGVkYCwgYHRocm90dGxlX2V2aWN0YWJsZV90eXBlc2AsIGFuZCBgbHJ1dmVjX3R5cGVfZXZpY3RhYmxlX3NpemVgLCBidXQgYWxsIG9mIHRoZXNlIGFyZSBzdGF0aWMsIHNvIHRoZXkmIzM5O3JlIGxpa2VseSBoZWxwZXIgZnVuY3Rpb25zLiBgbHJ1X2dlbl9zZXFfd3JpdGVgIGlzIGEgZmlsZSBvcGVyYXRpb25zIGhhbmRsZXIsIHdoaWNoIG1pZ2h0IGJlIGludGVyZXN0aW5nIGlmIGl0IGV4cG9zZXMgc29tZXRoaW5nIHVzZWZ1bC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRoZSBzdHJhdGVneSBoZXJlIGlzIGNsZWFyOiBwaW5wb2ludCB0aGUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzIG9yIEFQSSBlbnRyeSBwb2ludHMuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGNhcmVmdWxseSBhbmFseXplICphbGwqIGZ1bmN0aW9ucyBpbiBgbW0vdm1zY2FuLmNgIHRoYXQgcmVsYXRlIHRvIExSVV9HRU4gb3IgaXNvbGF0aW9uIHRvIGlkZW50aWZ5IGFueSB2aWFibGUgY2FuZGlkYXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHJ1X2dlbl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzM0IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5tbS92bXNjYW4uYz04Mjc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcbi0tXG5tbS92bXNjYW4uYy04MzktICovXG5tbS92bXNjYW4uYzo4NDA6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxubW0vdm1zY2FuLmMtODQxLXtcbi0tXG5tbS92bXNjYW4uYy04NjEtI2Vsc2Vcbm1tL3Ztc2Nhbi5jOjg2MjpzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG5tbS92bXNjYW4uYy04NjMte1xuLS1cbm1tL3Ztc2Nhbi5jPTg2OD1zdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS92bXNjYW4uYy04OTItXG5tbS92bXNjYW4uYzo4OTM6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKSB7XG5tbS92bXNjYW4uYy04OTQtXHRcdGlmICghcmVmZXJlbmNlZF9wdGVzKVxuLS1cbm1tL3Ztc2Nhbi5jLTg5Ni1cbm1tL3Ztc2Nhbi5jOjg5NzpcdFx0cmV0dXJuIGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFx1MDAyNnZtYV9mbGFncykgPyBGT0xJT1JFRl9BQ1RJVkFURSA6IEZPTElPUkVGX0tFRVA7XG5tbS92bXNjYW4uYy04OTgtXHR9XG4tLVxubW0vdm1zY2FuLmM9MjI4MD1zdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy0yMjg2LVxubW0vdm1zY2FuLmM6MjI4NzpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXG5tbS92bXNjYW4uYy0yMjg4LVx0XHRyZXR1cm47XG4tLVxubW0vdm1zY2FuLmM9MjY5ND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jLTI2OTUtI2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jOjI2OTY6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG5tbS92bXNjYW4uYzoyNjk3OiNkZWZpbmUgZ2V0X2NhcChjYXApXHRzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcbm1tL3Ztc2Nhbi5jLTI2OTgtI2Vsc2Vcbm1tL3Ztc2Nhbi5jOjI2OTk6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfRkFMU0UobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xubW0vdm1zY2FuLmM6MjcwMDojZGVmaW5lIGdldF9jYXAoY2FwKVx0c3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcbm1tL3Ztc2Nhbi5jLTI3MDEtI2VuZGlmXG4tLVxubW0vdm1zY2FuLmM9Mjc4OD1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4MTctICogd2Fsa19wbWRfcmFuZ2UoKTsgdGhlIGV2aWN0aW9uIGFsc28gcmVwb3J0IHRoZW0gd2hlbiB3YWxraW5nIHRoZSBybWFwXG5tbS92bXNjYW4uYzoyODE4OiAqIGluIGxydV9nZW5fbG9va19hcm91bmQoKS5cbm1tL3Ztc2Nhbi5jLTI4MTktICpcbi0tXG5tbS92bXNjYW4uYz0yODM1PXN0YXRpYyB2b2lkIGdldF9pdGVtX2tleSh2b2lkICppdGVtLCBpbnQgKmtleSlcbi0tXG5tbS92bXNjYW4uYy0yODQ0LVxubW0vdm1zY2FuLmM6Mjg0NTpzdGF0aWMgYm9vbCB0ZXN0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxLFxubW0vdm1zY2FuLmMtMjg0Ni1cdFx0XHQgICAgICB2b2lkICppdGVtKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4NjAtXG5tbS92bXNjYW4uYzoyODYxOnN0YXRpYyB2b2lkIHVwZGF0ZV9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSxcbm1tL3Ztc2Nhbi5jLTI4NjItXHRcdFx0XHR2b2lkICppdGVtKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4NzktXG5tbS92bXNjYW4uYzoyODgwOnN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxubW0vdm1zY2FuLmMtMjg4MS17XG4tLVxubW0vdm1zY2FuLmMtMjkwMS1cbm1tL3Ztc2Nhbi5jOjI5MDI6c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3Ztc2Nhbi5jLTI5MDMte1xubW0vdm1zY2FuLmM6MjkwNDpcdHN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0IG1tX2xpc3QgPSB7XG5tbS92bXNjYW4uYy0yOTA1LVx0XHQuZmlmbyA9IExJU1RfSEVBRF9JTklUKG1tX2xpc3QuZmlmbyksXG4tLVxubW0vdm1zY2FuLmMtMjkxNy1cbm1tL3Ztc2Nhbi5jOjI5MTg6c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICpnZXRfbW1fc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxubW0vdm1zY2FuLmMtMjkxOS17XG4tLVxubW0vdm1zY2FuLmMtMjkyMi1cbm1tL3Ztc2Nhbi5jOjI5MjM6c3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKmdldF9uZXh0X21tKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG5tbS92bXNjYW4uYy0yOTI0LXtcbi0tXG5tbS92bXNjYW4uYy0yOTI3LVx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVx1MDAzZWxydXZlYyk7XG5tbS92bXNjYW4uYzoyOTI4Olx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKHdhbGstXHUwMDNlbHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTI5MjktXG4tLVxubW0vdm1zY2FuLmMtMjk0MS1cbm1tL3Ztc2Nhbi5jOjI5NDI6dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL3Ztc2Nhbi5jLTI5NDMte1xuLS1cbm1tL3Ztc2Nhbi5jLTI5NDUtXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcbm1tL3Ztc2Nhbi5jOjI5NDY6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xubW0vdm1zY2FuLmMtMjk0Ny1cbi0tXG5tbS92bXNjYW4uYy0yOTU2LVx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xubW0vdm1zY2FuLmM6Mjk1NzpcdFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG5tbS92bXNjYW4uYy0yOTU4LVxuLS1cbm1tL3Ztc2Nhbi5jLTI5NjgtXG5tbS92bXNjYW4uYzoyOTY5OnZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS92bXNjYW4uYy0yOTcwLXtcbm1tL3Ztc2Nhbi5jLTI5NzEtXHRpbnQgbmlkO1xubW0vdm1zY2FuLmM6Mjk3MjpcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3Q7XG5tbS92bXNjYW4uYy0yOTczLVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcbi0tXG5tbS92bXNjYW4uYy0yOTg2LVx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xubW0vdm1zY2FuLmM6Mjk4NzpcdFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG5tbS92bXNjYW4uYy0yOTg4LVxuLS1cbm1tL3Ztc2Nhbi5jLTMwMDgtI2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmM6MzAwOTp2b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL3Ztc2Nhbi5jLTMwMTAte1xuLS1cbm1tL3Ztc2Nhbi5jLTMwMzItXG5tbS92bXNjYW4uYzozMDMzOlx0bHJ1X2dlbl9kZWxfbW0obW0pO1xubW0vdm1zY2FuLmM6MzAzNDpcdGxydV9nZW5fYWRkX21tKG1tKTtcbm1tL3Ztc2Nhbi5jLTMwMzUtfVxuLS1cbm1tL3Ztc2Nhbi5jLTMwMzktXG5tbS92bXNjYW4uYzozMDQwOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy0zMDQxLXtcbi0tXG5tbS92bXNjYW4uYy0zMDQ0LVxubW0vdm1zY2FuLmM6MzA0NTpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKmdldF9tbV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy0zMDQ2LXtcbi0tXG5tbS92bXNjYW4uYy0zMDQ5LVxubW0vdm1zY2FuLmM6MzA1MDpzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbm1tL3Ztc2Nhbi5jLTMwNTEte1xuLS1cbm1tL3Ztc2Nhbi5jLTMwNTYtXG5tbS92bXNjYW4uYzozMDU3OnN0YXRpYyB2b2lkIHJlc2V0X21tX3N0YXRzKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIGJvb2wgbGFzdClcbm1tL3Ztc2Nhbi5jLTMwNTgte1xuLS1cbm1tL3Ztc2Nhbi5jLTMwNjEtXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSB3YWxrLVx1MDAzZWxydXZlYztcbm1tL3Ztc2Nhbi5jOjMwNjI6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTMwNjMtXG4tLVxubW0vdm1zY2FuLmMtMzA4MS1cbm1tL3Ztc2Nhbi5jOjMwODI6c3RhdGljIGJvb2wgaXRlcmF0ZV9tbV9saXN0KHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBtbV9zdHJ1Y3QgKippdGVyKVxubW0vdm1zY2FuLmMtMzA4My17XG4tLVxubW0vdm1zY2FuLmMtMzA4OC1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xubW0vdm1zY2FuLmM6MzA4OTpcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XG5tbS92bXNjYW4uYzozMDkwOlx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG5tbS92bXNjYW4uYy0zMDkxLVxuLS1cbm1tL3Ztc2Nhbi5jPTMxNDY9c3RhdGljIGJvb2wgaXRlcmF0ZV9tbV9saXN0X25vd2FsayhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxKVxuLS1cbm1tL3Ztc2Nhbi5jLTMxNDktXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jOjMxNTA6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xubW0vdm1zY2FuLmM6MzE1MTpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtMzE1Mi1cbi0tXG5tbS92bXNjYW4uYz0zMTk4PXN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxuLS1cbm1tL3Ztc2Nhbi5jLTMyMDEtXHRpbnQgaTtcbm1tL3Ztc2Nhbi5jOjMyMDI6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTMyMDMtXHRpbnQgaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbi0tXG5tbS92bXNjYW4uYz0zMjE3PXN0YXRpYyB2b2lkIHJlc2V0X2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGJvb2wgY2FycnlvdmVyKVxuLS1cbm1tL3Ztc2Nhbi5jLTMyMTktXHRpbnQgaGlzdCwgdGllcjtcbm1tL3Ztc2Nhbi5jOjMyMjA6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTMyMjEtXHRib29sIGNsZWFyID0gY2FycnlvdmVyID8gTlJfSElTVF9HRU5TID09IDEgOiBOUl9ISVNUX0dFTlMgXHUwMDNlIDE7XG4tLVxubW0vdm1zY2FuLmM9MzI2OT1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbi0tXG5tbS92bXNjYW4uYy0zMjg2LVx0ZG8ge1xubW0vdm1zY2FuLmM6MzI4NzpcdFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xubW0vdm1zY2FuLmMtMzI4OC1cdFx0aWYgKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spKVxuLS1cbm1tL3Ztc2Nhbi5jPTMyOTk9c3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS92bXNjYW4uYy0zMzAxLVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG5tbS92bXNjYW4uYzozMzAyOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYzozMzAzOlx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbm1tL3Ztc2Nhbi5jLTMzMDQtXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLS1cbm1tL3Ztc2Nhbi5jLTMzMTktXG5tbS92bXNjYW4uYzozMzIwOlx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbm1tL3Ztc2Nhbi5jLTMzMjEtXG4tLVxubW0vdm1zY2FuLmMtMzMyNC1cbm1tL3Ztc2Nhbi5jOjMzMjU6c3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3Ztc2Nhbi5jLTMzMjYtXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxuLS1cbm1tL3Ztc2Nhbi5jLTMzNDAtXG5tbS92bXNjYW4uYzozMzQxOnN0YXRpYyB2b2lkIHJlc2V0X2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbm1tL3Ztc2Nhbi5jLTMzNDIte1xuLS1cbm1tL3Ztc2Nhbi5jLTMzNDQtXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBscnV2ZWNfbGl2ZV9sb2NrX2lycSh3YWxrLVx1MDAzZWxydXZlYyk7XG5tbS92bXNjYW4uYzozMzQ1Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy0zMzQ2LVxuLS1cbm1tL3Ztc2Nhbi5jLTMzNTktXG5tbS92bXNjYW4uYzozMzYwOlx0XHRpZiAobHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pKVxubW0vdm1zY2FuLmMtMzM2MS1cdFx0XHRscnUgJiM0Mzs9IExSVV9BQ1RJVkU7XG4tLVxubW0vdm1zY2FuLmM9MzM2OD1zdGF0aWMgaW50IHNob3VsZF9za2lwX3ZtYSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKmFyZ3MpXG4tLVxubW0vdm1zY2FuLmMtMzM3MS1cdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gYXJncy1cdTAwM2V2bWE7XG5tbS92bXNjYW4uYzozMzcyOlx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbm1tL3Ztc2Nhbi5jLTMzNzMtXG4tLVxubW0vdm1zY2FuLmM9MzUwNj1zdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuLS1cbm1tL3Ztc2Nhbi5jLTM1MTMtXG5tbS92bXNjYW4uYzozNTE0OnN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vdm1zY2FuLmMtMzUxNS1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4tLVxubW0vdm1zY2FuLmMtMzUzMC1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG5tbS92bXNjYW4uYzozNTMxOlx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG5tbS92bXNjYW4uYy0zNTMyLVx0XHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XG4tLVxubW0vdm1zY2FuLmM9MzUzOD1zdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bXNjYW4uYy0zNTQ4LVx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcbm1tL3Ztc2Nhbi5jOjM1NDk6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xubW0vdm1zY2FuLmMtMzU1MC1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmMtMzU1Mi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jOjM1NTM6XHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbm1tL3Ztc2Nhbi5jLTM1NTQtXHR1bnNpZ25lZCBpbnQgbnI7XG4tLVxubW0vdm1zY2FuLmM9MzYyOT1zdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS92bXNjYW4uYy0zNjM2LVx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcbm1tL3Ztc2Nhbi5jOjM2Mzc6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xubW0vdm1zY2FuLmMtMzYzOC1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmMtMzY0MC1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jOjM2NDE6XHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbm1tL3Ztc2Nhbi5jLTM2NDItXG4tLVxubW0vdm1zY2FuLmM9MzcxNz1zdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bXNjYW4uYy0zNzI2LVx0dW5zaWduZWQgbG9uZyBmaXJzdCA9IC0xO1xubW0vdm1zY2FuLmM6MzcyNzpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG5tbS92bXNjYW4uYzozNzI4Olx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKHdhbGstXHUwMDNlbHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTM3MjktXG4tLVxubW0vdm1zY2FuLmM9Mzc5MD1zdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3Ztc2Nhbi5jLTM3OTYtXHR1bnNpZ25lZCBsb25nIG5leHQ7XG5tbS92bXNjYW4uYzozNzk3Olx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbm1tL3Ztc2Nhbi5jLTM3OTgtXG4tLVxubW0vdm1zY2FuLmMtMzgzMS1cbm1tL3Ztc2Nhbi5jOjM4MzI6c3RhdGljIHZvaWQgd2Fsa19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbm1tL3Ztc2Nhbi5jLTM4MzMte1xuLS1cbm1tL3Ztc2Nhbi5jLTM4NjYtXG5tbS92bXNjYW4uYzozODY3OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICpzZXRfbW1fd2FsayhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZvcmNlX2FsbG9jKVxubW0vdm1zY2FuLmMtMzg2OC17XG5tbS92bXNjYW4uYzozODY5Olx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGN1cnJlbnQtXHUwMDNlcmVjbGFpbV9zdGF0ZS1cdTAwM2VtbV93YWxrO1xubW0vdm1zY2FuLmMtMzg3MC1cbi0tXG5tbS92bXNjYW4uYz0zODg3PXN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcbm1tL3Ztc2Nhbi5jLTM4ODgte1xubW0vdm1zY2FuLmM6Mzg4OTpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBjdXJyZW50LVx1MDAzZXJlY2xhaW1fc3RhdGUtXHUwMDNlbW1fd2Fsaztcbm1tL3Ztc2Nhbi5jLTM4OTAtXG4tLVxubW0vdm1zY2FuLmM9MzkwMD1zdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy0zOTAzLVx0aW50IHJlbWFpbmluZyA9IE1BWF9MUlVfQkFUQ0g7XG5tbS92bXNjYW4uYzozOTA0Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy0zOTA1LVx0aW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG5tbS92bXNjYW4uYzozOTA2Olx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbm1tL3Ztc2Nhbi5jLTM5MDctXG4tLVxubW0vdm1zY2FuLmM9Mzk1Mz1zdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy0zOTU2LVx0Ym9vbCBzZXFfaW5jX2ZsYWcgPSBmYWxzZTtcbm1tL3Ztc2Nhbi5jOjM5NTc6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTM5NTgtXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuLS1cbm1tL3Ztc2Nhbi5jLTM5NjQtXHRcdHdoaWxlIChtaW5fc2VxW3R5cGVdICYjNDM7IE1JTl9OUl9HRU5TIFx1MDAzYz0gbHJ1Z2VuLVx1MDAzZW1heF9zZXEpIHtcbm1tL3Ztc2Nhbi5jOjM5NjU6XHRcdFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtaW5fc2VxW3R5cGVdKTtcbm1tL3Ztc2Nhbi5jLTM5NjYtXG4tLVxubW0vdm1zY2FuLmMtMzk4NS1cbm1tL3Ztc2Nhbi5jOjM5ODY6XHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gbHJ1X2dlbl9mb2xpbyAqL1xubW0vdm1zY2FuLmMtMzk4Ny1cdGlmIChzd2FwcGluZXNzIFx1MDAyNlx1MDAyNiBzd2FwcGluZXNzIFx1MDAzYz0gTUFYX1NXQVBQSU5FU1MpIHtcbi0tXG5tbS92bXNjYW4uYz00MDA1PXN0YXRpYyBib29sIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTQwMDktXHRpbnQgdHlwZSwgem9uZTtcbm1tL3Ztc2Nhbi5jOjQwMTA6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTQwMTEtcmVzdGFydDpcbi0tXG5tbS92bXNjYW4uYy00MDQwLVx0ICovXG5tbS92bXNjYW4uYzo0MDQxOlx0cHJldiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1heF9zZXEgLSAxKTtcbm1tL3Ztc2Nhbi5jOjQwNDI6XHRuZXh0ID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWF4X3NlcSAmIzQzOyAxKTtcbm1tL3Ztc2Nhbi5jLTQwNDMtXG4tLVxubW0vdm1zY2FuLmM9NDA3MD1zdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcbi0tXG5tbS92bXNjYW4uYy00MDczLVx0Ym9vbCBzdWNjZXNzO1xubW0vdm1zY2FuLmM6NDA3NDpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG5tbS92bXNjYW4uYy00MDc1LVx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMO1xubW0vdm1zY2FuLmM6NDA3NjpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmM6NDA3NzpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtNDA3OC1cbi0tXG5tbS92bXNjYW4uYy00MDg5LVx0ICogSWYgdGhlIGhhcmR3YXJlIGRvZXNuJiMzOTt0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXG5tbS92bXNjYW4uYzo0MDkwOlx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcbm1tL3Ztc2Nhbi5jLTQwOTEtXHQgKiBoYW5kZnVsIG9mIFBURXMuIFNwcmVhZGluZyB0aGUgd29yayBvdXQgb3ZlciBhIHBlcmlvZCBvZiB0aW1lIHVzdWFsbHlcbi0tXG5tbS92bXNjYW4uYz00MTU0PXN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY190eXBlX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXG4tLVxubW0vdm1zY2FuLmMtNDE1Ny1cdHVuc2lnbmVkIGxvbmcgc2VxLCB0b3RhbCA9IDA7XG5tbS92bXNjYW4uYzo0MTU4Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy00MTU5LVx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcbi0tXG5tbS92bXNjYW4uYy00MTYyLVx0Zm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXEmIzQzOyYjNDM7KSB7XG5tbS92bXNjYW4uYzo0MTYzOlx0XHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG5tbS92bXNjYW4uYy00MTY0LVx0XHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KVxuLS1cbm1tL3Ztc2Nhbi5jPTQxOTQ9c3RhdGljIGJvb2wgbHJ1dmVjX2lzX3JlY2xhaW1hYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNDIwOC1cbm1tL3Ztc2Nhbi5jOjQyMDk6XHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpKTtcbm1tL3Ztc2Nhbi5jLTQyMTAtXHRiaXJ0aCA9IFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLnRpbWVzdGFtcHNbZ2VuXSk7XG4tLVxubW0vdm1zY2FuLmMtNDIxNS0vKiB0byBwcm90ZWN0IHRoZSB3b3JraW5nIHNldCBvZiB0aGUgbGFzdCBOIGppZmZpZXMgKi9cbm1tL3Ztc2Nhbi5jOjQyMTY6c3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1X2dlbl9taW5fdHRsIF9fcmVhZF9tb3N0bHk7XG5tbS92bXNjYW4uYy00MjE3LVxubW0vdm1zY2FuLmM6NDIxODpzdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNDIxOS17XG5tbS92bXNjYW4uYy00MjIwLVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xubW0vdm1zY2FuLmM6NDIyMTpcdHVuc2lnbmVkIGxvbmcgbWluX3R0bCA9IFJFQURfT05DRShscnVfZ2VuX21pbl90dGwpO1xubW0vdm1zY2FuLmMtNDIyMi1cdGJvb2wgcmVjbGFpbWFibGUgPSAhbWluX3R0bDtcbi0tXG5tbS92bXNjYW4uYy00MjY0LSAqL1xubW0vdm1zY2FuLmM6NDI2NTpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG5tbS92bXNjYW4uYy00MjY2LXtcbi0tXG5tbS92bXNjYW4uYy00MjcwLVx0dW5zaWduZWQgbG9uZyBlbmQ7XG5tbS92bXNjYW4uYzo0MjcxOlx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaztcbm1tL3Ztc2Nhbi5jLTQyNzItXHRzdHJ1Y3QgZm9saW8gKmxhc3QgPSBOVUxMO1xuLS1cbm1tL3Ztc2Nhbi5jLTQyODAtXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG5tbS92bXNjYW4uYzo0MjgxOlx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xubW0vdm1zY2FuLmMtNDI4Mi1cdHVuc2lnbmVkIGxvbmcgbWF4X3NlcTtcbi0tXG5tbS92bXNjYW4uYy00MzIwLVx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG5tbS92bXNjYW4uYzo0MzIxOlx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbm1tL3Ztc2Nhbi5jLTQzMjItXHRtbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xuLS1cbm1tL3Ztc2Nhbi5jPTQzODM9ZW51bSB7XG4tLVxubW0vdm1zY2FuLmMtNDM5MC1cbm1tL3Ztc2Nhbi5jOjQzOTE6c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG5tbS92bXNjYW4uYy00MzkyLXtcbi0tXG5tbS92bXNjYW4uYy00NDM4LVxubW0vdm1zY2FuLmM6NDQzOTp2b2lkIGxydV9nZW5fb25saW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3Ztc2Nhbi5jLTQ0NDAte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ0NjMtXG5tbS92bXNjYW4uYzo0NDY0OnZvaWQgbHJ1X2dlbl9vZmZsaW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3Ztc2Nhbi5jLTQ0NjUte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ0NzAtXG5tbS92bXNjYW4uYzo0NDcxOlx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9PTEQpO1xubW0vdm1zY2FuLmMtNDQ3Mi1cdH1cbi0tXG5tbS92bXNjYW4uYy00NDc0LVxubW0vdm1zY2FuLmM6NDQ3NTp2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NDc2LXtcbi0tXG5tbS92bXNjYW4uYy00NTAwLVxubW0vdm1zY2FuLmM6NDUwMTp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ1MDIte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ1MDYtXHRpZiAoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4uc2VnKSAhPSBNRU1DR19MUlVfSEVBRClcbm1tL3Ztc2Nhbi5jOjQ1MDc6XHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX0hFQUQpO1xubW0vdm1zY2FuLmMtNDUwOC19XG5tbS92bXNjYW4uYy00NTA5LVxubW0vdm1zY2FuLmM6NDUxMDpib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDUxMS17XG4tLVxubW0vdm1zY2FuLmM9NDUyMz1zdGF0aWMgdm9pZCB0cnlfdG9faW5jX21heF9zZXFfbm93YWxrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy00NTI1LXtcbm1tL3Ztc2Nhbi5jOjQ1MjY6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xubW0vdm1zY2FuLmM6NDUyNzpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtNDUyOC1cdGludCBzd2FwcGluZXNzID0gbWVtX2Nncm91cF9zd2FwcGluZXNzKG1lbWNnKTtcbi0tXG5tbS92bXNjYW4uYy00NTU2LSAqL1xubW0vdm1zY2FuLmM6NDU1Nzp2b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ1NTgte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ1ODMtICogICAgZ2VuZXJhdGlvbnMgb24gYW4gTFJVIGxpc3QuXG5tbS92bXNjYW4uYzo0NTg0OiAqIDQuIEluIGxydV9nZW5fZGVsX2ZvbGlvKCksIHRoZSBnZW5lcmF0aW9uIHRvIHdoaWNoIHRoZSBmb2xpbyBiZWxvbmdzIGlzXG5tbS92bXNjYW4uYy00NTg1LSAqICAgIGZvdW5kIGJhc2VkIG9uIHRoZSBnZW5lcmF0aW9uIGluZm9ybWF0aW9uIGluIGZvbGlvLVx1MDAzZWZsYWdzLCBhbmQgdGhlXG4tLVxubW0vdm1zY2FuLmMtNDU4Ny0gKiAgICB0aGUgbHJ1IHNpemUgY29ycmVjdGx5IGR1cmluZyByZXBhcmVudGluZywgb3RoZXJ3aXNlIHRoZSBscnUgc2l6ZSBtYXlcbm1tL3Ztc2Nhbi5jOjQ1ODg6ICogICAgYmUgdXBkYXRlZCBpbmNvcnJlY3RseSBpbiBscnVfZ2VuX2RlbF9mb2xpbygpLlxubW0vdm1zY2FuLmMtNDU4OS0gKlxuLS1cbm1tL3Ztc2Nhbi5jLTQ1OTctICovXG5tbS92bXNjYW4uYzo0NTk4OnN0YXRpYyB2b2lkIF9fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsIHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMsXG5tbS92bXNjYW4uYy00NTk5LVx0XHRcdFx0ICAgICBpbnQgem9uZSwgaW50IHR5cGUpXG5tbS92bXNjYW4uYy00NjAwLXtcbm1tL3Ztc2Nhbi5jOjQ2MDE6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqY2hpbGRfbHJ1Z2VuLCAqcGFyZW50X2xydWdlbjtcbm1tL3Ztc2Nhbi5jLTQ2MDItXHRlbnVtIGxydV9saXN0IGxydSA9IHR5cGUgKiBMUlVfSU5BQ1RJVkVfRklMRTtcbi0tXG5tbS92bXNjYW4uYy00NjA4LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZ2V0X25yX2dlbnMoY2hpbGRfbHJ1dmVjLCB0eXBlKTsgaSYjNDM7JiM0MzspIHtcbm1tL3Ztc2Nhbi5jOjQ2MDk6XHRcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGNoaWxkX2xydWdlbi1cdTAwM2VtYXhfc2VxIC0gaSk7XG5tbS92bXNjYW4uYy00NjEwLVx0XHRsb25nIG5yX3BhZ2VzID0gY2hpbGRfbHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV07XG5tbS92bXNjYW4uYzo0NjExOlx0XHRpbnQgY2hpbGRfbHJ1X2FjdGl2ZSA9IGxydV9nZW5faXNfYWN0aXZlKGNoaWxkX2xydXZlYywgZ2VuKSA/IExSVV9BQ1RJVkUgOiAwO1xubW0vdm1zY2FuLmM6NDYxMjpcdFx0aW50IHBhcmVudF9scnVfYWN0aXZlID0gbHJ1X2dlbl9pc19hY3RpdmUocGFyZW50X2xydXZlYywgZ2VuKSA/IExSVV9BQ1RJVkUgOiAwO1xubW0vdm1zY2FuLmMtNDYxMy1cbi0tXG5tbS92bXNjYW4uYy00NjIxLVxubW0vdm1zY2FuLmM6NDYyMjpcdFx0aWYgKGxydV9nZW5faXNfYWN0aXZlKGNoaWxkX2xydXZlYywgZ2VuKSAhPSBscnVfZ2VuX2lzX2FjdGl2ZShwYXJlbnRfbHJ1dmVjLCBnZW4pKSB7XG5tbS92bXNjYW4uYy00NjIzLVx0XHRcdF9fdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1ICYjNDM7IGNoaWxkX2xydV9hY3RpdmUsIHpvbmUsIC1ucl9wYWdlcyk7XG4tLVxubW0vdm1zY2FuLmMtNDYyOC1cbm1tL3Ztc2Nhbi5jOjQ2Mjk6dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ2MzAte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ2NDAtXHRcdGZvciAodHlwZSA9IDA7IHR5cGUgXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUmIzQzOyYjNDM7KVxubW0vdm1zY2FuLmM6NDY0MTpcdFx0XHRfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCB6aWQsIHR5cGUpO1xubW0vdm1zY2FuLmMtNDY0Mi1cbi0tXG5tbS92bXNjYW4uYz00NjYzPXN0YXRpYyBib29sIHNvcnRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy00NjcyLVx0aW50IHRpZXIgPSBscnVfdGllcl9mcm9tX3JlZnMocmVmcywgd29ya2luZ3NldCk7XG5tbS92bXNjYW4uYzo0NjczOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy00Njc0LVxuLS1cbm1tL3Ztc2Nhbi5jLTQ2ODEtXHQvKiBwcm9tb3RlZCAqL1xubW0vdm1zY2FuLmM6NDY4MjpcdGlmIChnZW4gIT0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSkpIHtcbm1tL3Ztc2Nhbi5jLTQ2ODMtXHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxydWdlbi1cdTAwM2Vmb2xpb3NbZ2VuXVt0eXBlXVt6b25lXSk7XG4tLVxubW0vdm1zY2FuLmM9NDcxMj1zdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDcyOS1cbm1tL3Ztc2Nhbi5jOjQ3MzA6XHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XG5tbS92bXNjYW4uYy00NzMxLVx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7XG4tLVxubW0vdm1zY2FuLmM9NDczNj1zdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ3NDctXHR1bnNpZ25lZCBsb25nIHJlbWFpbmluZyA9IG5yX3RvX3NjYW47XG5tbS92bXNjYW4uYzo0NzQ4Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy00NzQ5LVxuLS1cbm1tL3Ztc2Nhbi5jLTQ3NTUtXG5tbS92bXNjYW4uYzo0NzU2Olx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG5tbS92bXNjYW4uYy00NzU3LVxuLS1cbm1tL3Ztc2Nhbi5jPTQ4MzE9c3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmMtNDg2Ni0gKi9cbm1tL3Ztc2Nhbi5jOjQ4Njc6c3RhdGljIGJvb2wgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLFxubW0vdm1zY2FuLmMtNDg2OC1cdFx0XHRcdCAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jPTQ5MDM9c3RhdGljIHVuc2lnbmVkIGludCB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ5MjYtXG5tbS92bXNjYW4uYzo0OTI3Olx0XHRcdGlmICghbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZChscnV2ZWMsIGksIHNjKSlcbm1tL3Ztc2Nhbi5jLTQ5MjgtXHRcdFx0XHRhbGxvd2VkIHw9IEJJVChpKTtcbi0tXG5tbS92bXNjYW4uYz00OTk4PXN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTUwMDYtXHRzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7XG5tbS92bXNjYW4uYzo1MDA3Olx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaztcbm1tL3Ztc2Nhbi5jLTUwMDgtXHRpbnQgc2Nhbm5lZCwgcmVjbGFpbWVkO1xuLS1cbm1tL3Ztc2Nhbi5jLTUwNzgtXHRcdC8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xubW0vdm1zY2FuLmM6NTA3OTpcdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKVxubW0vdm1zY2FuLmMtNTA4MC1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7XG4tLVxubW0vdm1zY2FuLmM9NTI0ND1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MjUxLVxubW0vdm1zY2FuLmM6NTI1MjpcdC8qIGxydV9nZW5fYWdlX25vZGUoKSBjYWxsZWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpICovXG5tbS92bXNjYW4uYy01MjUzLVx0aWYgKG1lbV9jZ3JvdXBfYmVsb3dfbWluKE5VTEwsIG1lbWNnKSlcbi0tXG5tbS92bXNjYW4uYz01Mjg1PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyOTEtXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG5tbS92bXNjYW4uYzo1MjkyOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbjtcbm1tL3Ztc2Nhbi5jLTUyOTMtXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4tLVxubW0vdm1zY2FuLmMtNTMwNS1cdFx0aWYgKG9wKSB7XG5tbS92bXNjYW4uYzo1MzA2Olx0XHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgb3ApO1xubW0vdm1zY2FuLmMtNTMwNy1cdFx0XHRvcCA9IDA7XG4tLVxubW0vdm1zY2FuLmMtNTMxOS1cdFx0aWYgKCFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpIHtcbm1tL3Ztc2Nhbi5jOjUzMjA6XHRcdFx0bHJ1X2dlbl9yZWxlYXNlX21lbWNnKG1lbWNnKTtcbm1tL3Ztc2Nhbi5jLTUzMjEtXHRcdFx0bWVtY2cgPSBOVUxMO1xuLS1cbm1tL3Ztc2Nhbi5jLTUzMzctXHRpZiAob3ApXG5tbS92bXNjYW4uYzo1MzM4Olx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIG9wKTtcbm1tL3Ztc2Nhbi5jLTUzMzktXG4tLVxubW0vdm1zY2FuLmMtNTM0NC1cbm1tL3Ztc2Nhbi5jOjUzNDU6XHQvKiByZXN0YXJ0IGlmIHJhY2VkIHdpdGggbHJ1X2dlbl9yb3RhdGVfbWVtY2coKSAqL1xubW0vdm1zY2FuLmMtNTM0Ni1cdGlmIChnZW4gIT0gZ2V0X251bGxzX3ZhbHVlKHBvcykpXG4tLVxubW0vdm1zY2FuLmMtNTM1NC1cbm1tL3Ztc2Nhbi5jOjUzNTU6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MzU2LXtcbi0tXG5tbS92bXNjYW4uYy01MzY4LVx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmM6NTM2OTpcdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xubW0vdm1zY2FuLmMtNTM3MC1cbi0tXG5tbS92bXNjYW4uYy01Mzc1LVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDE1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNR0xSVSBFdmljdGlvbiBQb2ludHMgZm9yIEZ1enppbmcgRm9jdXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgcHJpbWUgY2FuZGlkYXRlcyB3aXRoaW4gdGhlIE1HTFJVIGV2aWN0aW9uIHByb2Nlc3MgZm9yIGZvY3VzZWQgZnV6emluZy4gV2UmIzM5O3JlIGxvb2tpbmcgZm9yIGZ1bmN0aW9ucyB0aGF0IGFyZSBsaWtlbHkgZW50cnkgcG9pbnRzLCBhcmVuJiMzOTt0IGlubGluZWQgKHNvIHRoZXkgaGF2ZSBkaXN0aW5jdCBhZGRyZXNzZXMgZm9yIHRoZSBmdXp6ZXIpLCBhbmQgYXJlbiYjMzk7dCBvdmVybHkgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIFdlIHdhbnQgdG8gYXZvaWQgYmlhc2luZyB0aGUgdGVzdCBkaXN0cmlidXRpb24sIHNvIGJyb2FkLCBjb21tb24gZnVuY3Rpb25zIGFyZSBvdXQuCgpJJiMzOTttIHN0YXJ0aW5nIGJ5IGxvb2tpbmcgYXQgYGxydV9nZW5fc2VxX3dyaXRlYCwgc2luY2UgaXQmIzM5O3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBgL3N5cy9rZXJuZWwvbW0vbHJ1X2dlbi9gIHN5c2ZzIGludGVyZmFjZSBvciBkZWJ1Z2ZzLiBJdCBtYWtlcyBzZW5zZSB0byBjaGVjayBib3RoIHRoaXMgYW5kIGBlbmFibGVkX3N0b3JlYC4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgYXQgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgYGxydV9nZW5gIGNvbnRleHQsIHdoaWNoIGluY2x1ZGU6IGBscnVfZ2VuX3Rvb19tYW55X2lzb2xhdGVkYCwgYHRocm90dGxlX2V2aWN0YWJsZV90eXBlc2AsIGBpc29sYXRlX2ZvbGlvc2AsIGBldmljdF9mb2xpb3NgLCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCwgYGxydV9nZW5fc2hyaW5rX25vZGVgLCBhbmQgYGxydV9nZW5fc2VxX3dyaXRlYC4KClRoZSBpbnN0cnVjdGlvbnMgSSYjMzk7bSBmb2xsb3dpbmcgaGlnaGxpZ2h0IHRoZSBpbXBvcnRhbmNlIG9mIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhpcyB0ZWxscyBtZSBJIHNob3VsZCBwcmlvcml0aXplIGZ1bmN0aW9ucyB0aGF0IGFyZSAqbm90KiBzdGF0aWMsIGFzIHRoZSBjb21waWxlciBpcyBsaWtlbHkgdG8gaW5saW5lIHRob3NlIHdoaWNoIGRvbiYjMzk7dCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIGFuZCBhcmUgZXh0ZXJuYWwgdG8gdGhlIE1HTFJVIGNvZGUgYXMgZW50cnkgcG9pbnRzLgoKR2l2ZW4gdGhpcywgSSYjMzk7bSBub3cgY3Jvc3MtcmVmZXJlbmNpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aXRoIHRoZSBmdW5jdGlvbnMgSSBqdXN0IGxpc3RlZCwgc3BlY2lmaWNhbGx5IHRob3NlIGluIGBtbS92bXNjYW4uY2AuIFRoZSBvbmVzIHRoYXQganVtcCBvdXQgYXMgcG90ZW50aWFsIHRhcmdldHMgZm9yIGZ1enppbmcsIGdpdmVuIHRoZXNlIGNvbnN0cmFpbnRzIGFyZTogYGxydV9nZW5fc2VxX3dyaXRlYCwgYGxydV9nZW5fc2hyaW5rX25vZGVgLCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCwgYGV2aWN0X2ZvbGlvc2AsIGBpc29sYXRlX2ZvbGlvc2AsIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXNgLCBhbmQgYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRgLiBJIG5lZWQgdG8gbm93IGRldGVybWluZSBpZiBhbnkgYXJlIG5vbi1zdGF0aWMgYW5kIGZpdCB0aGlzIGNyaXRlcmlvbiwgYW5kIGFsc28gd2hldGhlciBhbnkgZnVuY3Rpb25zIGVsc2V3aGVyZSB0aGF0IHNlcnZlIGFzIGVudHJ5IHBvaW50cyBpbnRvIE1HTFJVIGV2aWN0aW9uIGFyZSB3b3J0aCBleHBsb3JpbmcuIExvb2tpbmcgYXQgc3lzZnMgYW5kIHByb2NmcyBmdW5jdGlvbnMgbGlrZSBgbHJ1X2dlbl9zZXFfd3JpdGVgIGlzIHByb2JhYmx5IGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgbG9jYXRpbmcgdGhvc2UgZW50cnkgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX3NlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01NjM4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxydV9nZW5fYXR0cl9ncm91cCA9IHtcbi0tXG5tbS92bXNjYW4uYy01NjQ2LVxubW0vdm1zY2FuLmM6NTY0NzpzdGF0aWMgdm9pZCAqbHJ1X2dlbl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcylcbm1tL3Ztc2Nhbi5jLTU2NDgte1xuLS1cbm1tL3Ztc2Nhbi5jLTU2NjgtXG5tbS92bXNjYW4uYzo1NjY5OnN0YXRpYyB2b2lkIGxydV9nZW5fc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxubW0vdm1zY2FuLmMtNTY3MC17XG4tLVxubW0vdm1zY2FuLmMtNTY3Ny1cbm1tL3Ztc2Nhbi5jOjU2Nzg6c3RhdGljIHZvaWQgKmxydV9nZW5fc2VxX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcbm1tL3Ztc2Nhbi5jLTU2Nzkte1xuLS1cbm1tL3Ztc2Nhbi5jLTU2OTYtXG5tbS92bXNjYW4uYzo1Njk3OnN0YXRpYyB2b2lkIGxydV9nZW5fc2VxX3Nob3dfZnVsbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL3Ztc2Nhbi5jLTU2OTgtXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSwgdW5zaWduZWQgbG9uZyAqbWluX3NlcSxcbi0tXG5tbS92bXNjYW4uYy01NzUxLS8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cbm1tL3Ztc2Nhbi5jOjU3NTI6c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbm1tL3Ztc2Nhbi5jLTU3NTMte1xuLS1cbm1tL3Ztc2Nhbi5jLTU4MDEtXHRcdGlmIChmdWxsKVxubW0vdm1zY2FuLmM6NTgwMjpcdFx0XHRscnVfZ2VuX3NlcV9zaG93X2Z1bGwobSwgbHJ1dmVjLCBtYXhfc2VxLCBtaW5fc2VxLCBzZXEpO1xubW0vdm1zY2FuLmMtNTgwMy1cdH1cbi0tXG5tbS92bXNjYW4uYy01ODA3LVxubW0vdm1zY2FuLmM6NTgwODpzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGxydV9nZW5fc2VxX29wcyA9IHtcbm1tL3Ztc2Nhbi5jOjU4MDk6XHQuc3RhcnQgPSBscnVfZ2VuX3NlcV9zdGFydCxcbm1tL3Ztc2Nhbi5jOjU4MTA6XHQuc3RvcCA9IGxydV9nZW5fc2VxX3N0b3AsXG5tbS92bXNjYW4uYzo1ODExOlx0Lm5leHQgPSBscnVfZ2VuX3NlcV9uZXh0LFxubW0vdm1zY2FuLmM6NTgxMjpcdC5zaG93ID0gbHJ1X2dlbl9zZXFfc2hvdyxcbm1tL3Ztc2Nhbi5jLTU4MTMtfTtcbi0tXG5tbS92bXNjYW4uYz01ODU2PXN0YXRpYyBpbnQgcnVuX2NtZChjaGFyIGNtZCwgdTY0IG1lbWNnX2lkLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHNlcSxcbi0tXG5tbS92bXNjYW4uYy01ODk3LS8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cbm1tL3Ztc2Nhbi5jOjU4OTg6c3RhdGljIHNzaXplX3QgbHJ1X2dlbl9zZXFfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsXG5tbS92bXNjYW4uYy01ODk5LVx0XHRcdFx0IHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxuLS1cbm1tL3Ztc2Nhbi5jLTU5ODEtXG5tbS92bXNjYW4uYzo1OTgyOnN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbm1tL3Ztc2Nhbi5jLTU5ODMte1xubW0vdm1zY2FuLmM6NTk4NDpcdHJldHVybiBzZXFfb3BlbihmaWxlLCBcdTAwMjZscnVfZ2VuX3NlcV9vcHMpO1xubW0vdm1zY2FuLmMtNTk4NS19XG4tLVxubW0vdm1zY2FuLmM9NTk4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscnVfZ2VuX3J3X2ZvcHMgPSB7XG5tbS92bXNjYW4uYzo1OTg4Olx0Lm9wZW4gPSBscnVfZ2VuX3NlcV9vcGVuLFxubW0vdm1zY2FuLmMtNTk4OS1cdC5yZWFkID0gc2VxX3JlYWQsXG5tbS92bXNjYW4uYzo1OTkwOlx0LndyaXRlID0gbHJ1X2dlbl9zZXFfd3JpdGUsXG5tbS92bXNjYW4uYy01OTkxLVx0Lmxsc2VlayA9IHNlcV9sc2Vlayxcbi0tXG5tbS92bXNjYW4uYz01OTk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxydV9nZW5fcm9fZm9wcyA9IHtcbm1tL3Ztc2Nhbi5jOjU5OTY6XHQub3BlbiA9IGxydV9nZW5fc2VxX29wZW4sXG5tbS92bXNjYW4uYy01OTk3LVx0LnJlYWQgPSBzZXFfcmVhZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAwNDcKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1HTFJVIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgdHJ5aW5nIHRvIGFjaGlldmUuIEkgc2VlIGl0JiMzOTtzIGZvY3VzaW5nIG9uIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgc3Vic3lzdGVtLCBhbmQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIG5ldyB0cmFja2luZyBhbmQgdGhyb3R0bGluZyBtZWNoYW5pc21zIGZvciBpc29sYXRlZCBwYWdlcy4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IGEgZmV3ICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsgd2hpY2ggYXJlOiBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYCwgYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRgLCBgaXNvbGF0ZV9mb2xpb3NgLCBgZXZpY3RfZm9saW9zYCwgYW5kIGBscnVfZ2VuX3NlcV93cml0ZWAuIFRoaXMgaGludHMgdGhhdCB0aGUgZ29hbCBoZXJlIGlzIHRvIHByZXZlbnQgbG9ja3VwcyBhbmQgZXhjZXNzaXZlIGlzb2xhdGlvbiBieSB0aHJvdHRsaW5nIHRoZSByZWNsYWltIHByb2Nlc3Mgd2hlbiB0b28gbWFueSBmb2xpb3MgYXJlIGluIGFuIGlzb2xhdGVkIHN0YXRlLiBTbyBpdCBsb29rcyBsaWtlIGEgbmV3IHRocm90dGxlIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBwcm9jZXNzLgoKTm93LCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0Oy4gSXQmIzM5O3MgdXNpbmcgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYC4gQSBxdWljayBsb29rIGF0IHRoZSBLY29uZmlnIGZpbGUgY29uZmlybXMgdGhlIGRlcGVuZGVuY2llczogYExSVV9HRU5gIHJlbGllcyBvbiBgTU1VYCBhbmQgYSBmZXcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmRpdGlvbnMsIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBkZXBlbmRzIG9uIGBMUlVfR0VOYC4gT2theSwgdGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuCgpCZWZvcmUgSSBzaWduIG9mZiwgSSBqdXN0IG5lZWQgdG8gc3VtbWFyaXplIGV2ZXJ5dGhpbmcuIFRoZSBwYXRjaCBpcyBkZWVtZWQgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBiZWNhdXNlIGl0JiMzOTtzIGFsdGVyaW5nIGNydWNpYWwgbWVtb3J5IHJlY2xhbWF0aW9uIGxvZ2ljIHdpdGhpbiB0aGUgTUdMUlUuIEl0JiMzOTtzIGFkZGluZyB0aGlzIG5ldyBpc29sYXRpb24gdHJhY2tpbmcgYW5kIHRocm90dGxpbmcsIHNwZWNpZmljYWxseSBpbiBgbW0vdm1zY2FuLmNgLCB0byBtYW5hZ2UgZXhjZXNzaXZlIGZvbGlvIGlzb2xhdGlvbi4gVGhlIGltcG9ydGFudCBGb2N1c1N5bWJvbHMgYW5kIEVuYWJsZUNvbmZpZ3MgYXJlOiBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYCwgYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRgLCBgaXNvbGF0ZV9mb2xpb3NgLCBgZXZpY3RfZm9saW9zYCwgYW5kIGBscnVfZ2VuX3NlcV93cml0ZWAsIGFuZCBgTFJVX0dFTmAsIGBMUlVfR0VOX0VOQUJMRURgIHJlc3BlY3RpdmVseS4KCk9rYXksIHRoYXQmIzM5O3MgZXZlcnl0aGluZy4gSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGFzc2Vzc21lbnQuIEkgd2lsbCBzZXQgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rocm90dGxlX2V2aWN0YWJsZV90eXBlcyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3Rvb19tYW55X2lzb2xhdGVkJiMzNDssCiAgICAmIzM0O2lzb2xhdGVfZm9saW9zJiMzNDssCiAgICAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3NlcV93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGlzb2xhdGVkIGZvbGlvIGFjY291bnRpbmcgYW5kIHJlY2xhaW0gdGhyb3R0bGluZyBmb3IgTXVsdGktR2VuIExSVSAoTUdMUlUpIGluIG1tL3Ztc2Nhbi5jLCBpbXBsZW1lbnRpbmcgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZCgpIGFuZCB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBmb2xpbyBpc29sYXRpb24gZHVyaW5nIG1lbW9yeSBwcmVzc3VyZSBhbmQgZGlyZWN0IHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rocm90dGxlX2V2aWN0YWJsZV90eXBlcyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3Rvb19tYW55X2lzb2xhdGVkJiMzNDssCiAgICAmIzM0O2lzb2xhdGVfZm9saW9zJiMzNDssCiAgICAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3NlcV93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGlzb2xhdGVkIGZvbGlvIGFjY291bnRpbmcgYW5kIHJlY2xhaW0gdGhyb3R0bGluZyBmb3IgTXVsdGktR2VuIExSVSAoTUdMUlUpIGluIG1tL3Ztc2Nhbi5jLCBpbXBsZW1lbnRpbmcgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZCgpIGFuZCB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBmb2xpbyBpc29sYXRpb24gZHVyaW5nIG1lbW9yeSBwcmVzc3VyZSBhbmQgZGlyZWN0IHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMzoxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwZXItbHJ1dmVjIGlzb2xhdGlvbiBhY2NvdW50aW5nIChgbnJfaXNvbGF0ZWRgKSBhbmQgaXNvbGF0aW9uIHRocm90dGxpbmcgKGBscnVfZ2VuX3Rvb19tYW55X2lzb2xhdGVkYCwgYHRocm90dGxlX2V2aWN0YWJsZV90eXBlc2ApIGZvciBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSByZWNsYWltLlxuXG5BbmFseXNpcyBhZ2FpbnN0IEtNU0FOIGFwcGxpY2FiaWxpdHk6XG4xLiBVc2VyLXNwYWNlIGxlYWtzOiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGV4cG9zZWQgdmlhIGlvY3Rscy9zeXNmcy9uZXRsaW5rL0JQRiBidWZmZXJzLlxuMi4gVW5pbml0aWFsaXplZCB2YXJpYWJsZXM6IEFsbCBhZGRlZCBsb2NhbCB2YXJpYWJsZXMgKGBhbGxvd2VkYCwgYGZhdGFsYCwgYHN0YWxsZWRgKSBhbmQgc3RydWN0IGZpZWxkcyAoYG5yX2lzb2xhdGVkYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFuZCBtYW5hZ2VkIChlLmcuLCBgKmZhdGFsYCBpcyBpbml0aWFsaXplZCB0byBmYWxzZSB1cG9uIGVudGVyaW5nIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKWAsIGBzdHJ1Y3QgbHJ1dmVjYCBtZW1vcnkgaXMgemVyby1hbGxvY2F0ZWQgZHVyaW5nIG5vZGUvbWVtY2cgaW5pdGlhbGl6YXRpb24pLlxuMy4gQnVmZmVyIGJvdW5kcyAvIG1lbW9yeSBoYW5kbGluZzogVGhlIHBhdGNoIG9ubHkgYWRqdXN0cyByZWNsYWltZXIgc2NoZWR1bGluZywgdGhyb3R0bGluZywgYW5kIGlzb2xhdGlvbiBjb3VudGVycyB3aXRob3V0IHRvdWNoaW5nIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGFjY2VzcywgdmFyaWFibGUtbGVuZ3RoIGJ1ZmZlcnMsIG9yIHN0cnVjdCBwYWRkaW5nLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIHJlbGF0ZSB0byByZWNsYWltIHRocm90dGxpbmcsIGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBjb3VudGVyIGltYmFsYW5jZXMsIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgKExPQ0tERVAsIEtBU0FOLCBXQVJOX09OKS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODM2ZDk2NDMzYzBlZDc2ZDA3MTEyODk3YmRmMjY2NGIxYzI4NzgxNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDM6MTY6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCA5NGY5YzNmZjU0MTYwLi44MTliNmMwNTkxMTZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTU4MCw2ICYjNDM7NTgwLDggQEAgc3RydWN0IGxydV9nZW5fZm9saW8gewogCS8qIGNhbiBiZSBtb2RpZmllZCB3aXRob3V0IGhvbGRpbmcgdGhlIExSVSBsb2NrICovCiAJYXRvbWljX2xvbmdfdCBldmljdGVkW05SX0hJU1RfR0VOU11bQU5PTl9BTkRfRklMRV1bTUFYX05SX1RJRVJTXTsKIAlhdG9taWNfbG9uZ190IHJlZmF1bHRlZFtOUl9ISVNUX0dFTlNdW0FOT05fQU5EX0ZJTEVdW01BWF9OUl9USUVSU107CiYjNDM7CS8qIHRoZSBudW1iZXIgb2YgZm9saW9zIGlzb2xhdGVkIGZyb20gdGhpcyBscnV2ZWMgYW5kIGJlaW5nIHJlY2xhaW1lZCAqLwomIzQzOwlhdG9taWNfbG9uZ190IG5yX2lzb2xhdGVkW0FOT05fQU5EX0ZJTEVdOwogCS8qIHdoZXRoZXIgdGhlIG11bHRpLWdlbiBMUlUgaXMgZW5hYmxlZCAqLwogCWJvb2wgZW5hYmxlZDsKIAkvKiB0aGUgbWVtY2cgZ2VuZXJhdGlvbiB0aGlzIGxydV9nZW5fZm9saW8gYmVsb25ncyB0byAqLwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBmMTE0OTFlZTllZDVjLi4yMTE4MzlkMTA5MDlhIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNDE1MSwyNSAmIzQzOzQxNTEsMzQgQEAgc3RhdGljIHZvaWQgc2V0X2luaXRpYWxfcHJpb3JpdHkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbAogCXNjLSZndDtwcmlvcml0eSA9IGNsYW1wKHByaW9yaXR5LCBERUZfUFJJT1JJVFkgLyAyLCBERUZfUFJJT1JJVFkpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcykKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKQogewotCWludCBnZW4sIHR5cGUsIHpvbmU7CiYjNDM7CWludCBnZW4sIHpvbmU7CiAJdW5zaWduZWQgbG9uZyBzZXEsIHRvdGFsID0gMDsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKIAlERUZJTkVfTUFYX1NFUShscnV2ZWMpOwogCURFRklORV9NSU5fU0VRKGxydXZlYyk7CiAKLQlmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7Ci0JCWZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxICZsdDs9IG1heF9zZXE7IHNlcSYjNDM7JiM0MzspIHsKLQkJCWdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTsKLQkJCWZvciAoem9uZSA9IDA7IHpvbmUgJmx0OyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KQotCQkJCXRvdGFsICYjNDM7PSBtYXgoUkVBRF9PTkNFKGxydWdlbi0mZ3Q7bnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTsKLQkJfQomIzQzOwlmb3IgKHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSAmbHQ7PSBtYXhfc2VxOyBzZXEmIzQzOyYjNDM7KSB7CiYjNDM7CQlnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7CiYjNDM7CQlmb3IgKHpvbmUgPSAwOyB6b25lICZsdDsgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOykKJiM0MzsJCQl0b3RhbCAmIzQzOz0gbWF4KFJFQURfT05DRShscnVnZW4tJmd0O25yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7CiAJfQogCiAJcmV0dXJuIHRvdGFsOwogfQogCiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHRvdGFsID0gMDsKJiM0MzsJaW50IHR5cGU7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKHR5cGUsIHN3YXBwaW5lc3MpCiYjNDM7CQl0b3RhbCAmIzQzOz0gbHJ1dmVjX3R5cGVfZXZpY3RhYmxlX3NpemUobHJ1dmVjLCB0eXBlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRvdGFsOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGxydXZlY19pc19zaXphYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7CiAJdW5zaWduZWQgbG9uZyB0b3RhbDsKQEAgLTQ4MzgsMTUgJiM0Mzs0ODQ3LDEyOCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcykKIAlyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoJmFtcDtzcCwgJmFtcDtwdik7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFRoZSBNR0xSVSBjb3VudGVycGFydCB0byB0b29fbWFueV9pc29sYXRlZCgpLgomIzQzOyAqCiYjNDM7ICogdG9vX21hbnlfaXNvbGF0ZWQoKSBjb21wYXJlcyBub2RlLXdpZGUgaXNvbGF0ZWQgY291bnRzIGFnYWluc3QKJiM0MzsgKiBub2RlLXdpZGUgaW5hY3RpdmUgc2l6ZXMuIEl0IHByZWRhdGVzIHBlci1tZW1jZyBMUlUgbGlzdHMsIHdoaWNoCiYjNDM7ICogbW92ZWQgaXNvbGF0aW9uIHRvIHBlci1scnV2ZWMgZ3JhbnVsYXJpdHkuIE1HTFJVIHJlY2xhaW1lcnMgY29udGVuZAomIzQzOyAqIHBlciBscnV2ZWMsIHNvIHRoaXMgY2hlY2sgaXMgcGVyIGxydXZlYyBhcyB3ZWxsLCBhbmQgaXNvbGF0aW9uIGluCiYjNDM7ICogb25lIG1lbWNnIGRvZXMgbm90IHRocm90dGxlIHJlY2xhaW0gaW4gYW5vdGhlci4KJiM0MzsgKgomIzQzOyAqIFRoZSBsZWdhY3kgdGhyZXNob2xkLCB0aGUgc2l6ZSBvZiB0aGUgaW5hY3RpdmUgbGlzdCwgaXMgbm90IHVzYWJsZQomIzQzOyAqIGhlcmUgZWl0aGVyOiBpbiBNR0xSVSB0aGUgaW5hY3RpdmUgY291bnRlcnMgYXJlIG9ubHkgYSBjb21wYXRpYmlsaXR5CiYjNDM7ICogc2hpbSAtIHRoZXkganVtcCBhcm91bmQgd2hlbiBzd2FwIHJ1bnMgb3V0IG9yIGEgbWVtY2cgaGl0cyBpdHMgc3dhcAomIzQzOyAqIGxpbWl0LCBhbmQgcHJvYWN0aXZlIGFnaW5nIGNhbiBpbmZsYXRlIHRoZW0uIENvbXBhcmUgYWdhaW5zdCB0aGUKJiM0MzsgKiB0b3RhbCBudW1iZXIgb2YgZXZpY3RhYmxlIHBhZ2VzIG9mIHRoZSB0eXBlIGRpdmlkZWQgYnkgTUlOX05SX0dFTlMsCiYjNDM7ICogYXBwcm94aW1hdGluZyB0aGUgc2l6ZSBvZiBvbmUgZ2VuZXJhdGlvbiAtIHRoZSBzYW1lIHVuaXQgdGhlCiYjNDM7ICogb3JpZ2luYWwgTUdMUlUgYWdpbmcgaGV1cmlzdGljcyB1c2VkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwKJiM0MzsJCQkJICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGlzb2xhdGVkLCBldmljdGFibGU7CiYjNDM7CiYjNDM7CWlmIChjdXJyZW50X2lzX2tzd2FwZCgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoIXdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc2MpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpc29sYXRlZCA9IGF0b21pY19sb25nX3JlYWQoJmFtcDtscnV2ZWMtJmd0O2xydWdlbi5ucl9pc29sYXRlZFt0eXBlXSk7CiYjNDM7CWV2aWN0YWJsZSA9IGxydXZlY190eXBlX2V2aWN0YWJsZV9zaXplKGxydXZlYywgdHlwZSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEdGUF9OT0lPL0dGUF9OT0ZTIGNhbGxlcnMgYXJlIGFsbG93ZWQgdG8gaXNvbGF0ZSBtb3JlIHBhZ2VzLCBzbwomIzQzOwkgKiB0aGV5IHdvbiYjMzk7dCBiZSBibG9ja2VkIGJ5IG5vcm1hbCBkaXJlY3QtcmVjbGFpbWVycywgZm9ybWluZyBhCiYjNDM7CSAqIGNpcmN1bGFyIGRlYWRsb2NrLgomIzQzOwkgKi8KJiM0MzsJaWYgKGdmcF9oYXNfaW9fZnMoc2MtJmd0O2dmcF9tYXNrKSkKJiM0MzsJCWV2aWN0YWJsZSAmZ3Q7Jmd0Oz0gMzsKJiM0MzsKJiM0MzsJcmV0dXJuIGlzb2xhdGVkICZndDsgZXZpY3RhYmxlIC8gTUlOX05SX0dFTlM7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVW5saWtlIHRoZSBsZWdhY3kgcGF0aCwgd2hlcmUgdGhlIExSVSBsaXN0IHRvIGlzb2xhdGUgZnJvbSBpcyBrbm93bgomIzQzOyAqIGJlZm9yZSBpc29sYXRpb24sIGlzb2xhdGVfZm9saW9zKCkgcGlja3MgdGhlIHR5cGUgZnJvbSB0aGUgcmVmYXVsdAomIzQzOyAqIGZlZWRiYWNrIGFuZCBtYXkgZmFsbCBiYWNrIHRvIHRoZSBvdGhlciBvbmUuIFRoZXJlZm9yZSwgaW5zdGVhZCBvZgomIzQzOyAqIHRocm90dGxpbmcgb24gYSBzaW5nbGUgdHlwZSwgY29sbGVjdCB0aGUgZXZpY3RhYmxlIHR5cGVzIHRoYXQgZG8gbm90CiYjNDM7ICogaGF2ZSB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MsIGFuZCBvbmx5IHNsZWVwIHdoZW4gYWxsIG9mIHRoZW0gZG8uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIHRoZSBtYXNrIG9mIHRoZSB0eXBlcyBpc29sYXRlX2ZvbGlvcygpIG1heSBpc29sYXRlIGZyb20sIG9yCiYjNDM7ICogMCBpZiByZWNsYWltIHNob3VsZCBzdG9wLiBBbHNvIHNldHMgQGZhdGFsIHRvIHRlbGwgdGhlIGNhbGxlciB0aGF0CiYjNDM7ICogdGhlIHRhc2sgcmVjZWl2ZWQgYSBmYXRhbCBzaWduYWwgd2hpbGUgd2FpdGluZy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHRocm90dGxlX2V2aWN0YWJsZV90eXBlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7CQkJCQkgICAgIGludCBzd2FwcGluZXNzLAomIzQzOwkJCQkJICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywKJiM0MzsJCQkJCSAgICAgYm9vbCAqZmF0YWwpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgYWxsb3dlZDsKJiM0MzsJYm9vbCBzdGFsbGVkID0gZmFsc2U7CiYjNDM7CXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CSpmYXRhbCA9IGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKDs7KSB7CiYjNDM7CQlhbGxvd2VkID0gMDsKJiM0MzsJCWZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgdHlwZSB3aXRoIG5vIGV2aWN0YWJsZSBmb2xpb3MgaGFzIG5vdGhpbmcgdG8KJiM0MzsJCQkgKiBpc29sYXRlLiBEb24mIzM5O3QgYWxsb3cgaXQsIG90aGVyd2lzZSByZWNsYWltIGNhbiBiZQomIzQzOwkJCSAqIHJlZGlyZWN0ZWQgdG8gaXQgYW5kIHNwaW4gbWFraW5nIG5vIHByb2dyZXNzLCBlLmcuCiYjNDM7CQkJICogd2hlbiB0aGUgb25seSB0eXBlIHdpdGggZm9saW9zIGlzIG92ZXItaXNvbGF0ZWQuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKCFscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShscnV2ZWMsIGkpKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlpZiAoIWxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQobHJ1dmVjLCBpLCBzYykpCiYjNDM7CQkJCWFsbG93ZWQgfD0gQklUKGkpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKGFsbG93ZWQpIHsKJiM0MzsJCQkvKiBXYWtlIHVwIHJlY2xhaW1lcnMgd2FpdGluZyBvbiB0aGUgaXNvbGF0aW9uIHRvIGdvIGRvd24uICovCiYjNDM7CQkJd2FrZV90aHJvdHRsZV9pc29sYXRlZChwZ2RhdCk7CiYjNDM7CQkJcmV0dXJuIGFsbG93ZWQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogQWxsIGV2aWN0YWJsZSB0eXBlcyBhcmUgb3Zlci1pc29sYXRlZC4gTGlrZSB0aGUgbGVnYWN5CiYjNDM7CQkgKiBwYXRoLCB3YWl0IG9uY2UgZm9yIGNvbmN1cnJlbnQgcmVjbGFpbWVycyB0byBwdXQgdGhlaXIKJiM0MzsJCSAqIGlzb2xhdGVkIGZvbGlvcyBiYWNrOyBnaXZlIHVwIGlmIHRoYXQgbWFrZXMgbm8gcHJvZ3Jlc3MuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChzdGFsbGVkKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJc3RhbGxlZCA9IHRydWU7CiYjNDM7CQlyZWNsYWltX3Rocm90dGxlKHBnZGF0LCBWTVNDQU5fVEhST1RUTEVfSVNPTEFURUQpOwomIzQzOwomIzQzOwkJLyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqLwomIzQzOwkJaWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiYjNDM7CQkJKmZhdGFsID0gdHJ1ZTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQkgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcywKLQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZCwKLQkJCSAgaW50ICppc29sYXRlX3R5cGUsIGludCAqaXNvbGF0ZV9zY2FubmVkKQomIzQzOwkJCSAgdW5zaWduZWQgaW50IGFsbG93ZWQsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCiYjNDM7CQkJICBpbnQgKmlzb2xhdGVkLCBpbnQgKmlzb2xhdGVfdHlwZSwgaW50ICppc29sYXRlX3NjYW5uZWQpCiB7CiAJaW50IGk7CiAJaW50IHRvdGFsX3NjYW5uZWQgPSAwOwogCWludCB0eXBlID0gZ2V0X3R5cGVfdG9fc2NhbihscnV2ZWMsIHN3YXBwaW5lc3MpOwogCiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBwcmVmZXJyZWQgdHlwZSBtYXkgaGF2ZSBiZWVuIGV4Y2x1ZGVkIGJ5CiYjNDM7CSAqIHRocm90dGxlX2V2aWN0YWJsZV90eXBlcygpOyBzdGFydCBmcm9tIHRoZSBvdGhlciBvbmUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIShhbGxvd2VkICZhbXA7IEJJVCh0eXBlKSkpCiYjNDM7CQl0eXBlID0gIXR5cGU7CiYjNDM7CiAJZm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUoaSwgc3dhcHBpbmVzcykgewogCQlpbnQgc2Nhbm5lZDsKIAkJaW50IHRpZXIgPSBnZXRfdGllcl9pZHgobHJ1dmVjLCB0eXBlKTsKQEAgLTQ4NjMsOSAmIzQzOzQ5ODUsMTAgQEAgc3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJLyoKIAkJICogSWYgc2Nhbm5lZCAmZ3Q7IDAgYW5kIGlzb2xhdGVkID09IDAsIGF2b2lkIGZhbGxpbmcgYmFjayB0byB0aGUKIAkJICogb3RoZXIgdHlwZSwgYXMgdGhpcyB0eXBlIHJlbWFpbnMgc3VmZmljaWVudC4gRmFsbGluZyBiYWNrCi0JCSAqIHRvbyByZWFkaWx5IGNhbiBkaXNydXB0IHRoZSBwb3NpdGl2ZV9jdHJsX2VycigpIGJpYXMuCiYjNDM7CQkgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLiBPbmx5CiYjNDM7CQkgKiBmYWxsIGJhY2sgdG8gYSB0eXBlIHRoYXQgaXMgbm90IHRocm90dGxlZC4KIAkJICovCi0JCWlmICghc2Nhbm5lZCkKJiM0MzsJCWlmICghc2Nhbm5lZCAmYW1wOyZhbXA7IChhbGxvd2VkICZhbXA7IEJJVCghdHlwZSkpKQogCQkJdHlwZSA9ICF0eXBlOwogCX0KIApAQCAtNDg4OCwxNSAmIzQzOzUwMTEsMzYgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJYm9vbCBza2lwX3JldHJ5ID0gZmFsc2U7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwomIzQzOwl1bnNpZ25lZCBpbnQgYWxsb3dlZDsKJiM0MzsJYm9vbCBmYXRhbDsKJiM0MzsKJiM0MzsJYWxsb3dlZCA9IHRocm90dGxlX2V2aWN0YWJsZV90eXBlcyhscnV2ZWMsIHN3YXBwaW5lc3MsIHNjLCAmYW1wO2ZhdGFsKTsKJiM0MzsJaWYgKCFhbGxvd2VkKSB7CiYjNDM7CQkvKgomIzQzOwkJICogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBMaWtlIHRoZSBsZWdhY3kKJiM0MzsJCSAqIHBhdGgsIHByZXRlbmQgc29tZSBwYWdlcyB3ZXJlIHJlY2xhaW1lZCBzbyByZWNsYWltCiYjNDM7CQkgKiB1bndpbmRzIHF1aWNrbHkgaW5zdGVhZCBvZiBsb29waW5nIGJhY2sgaW50byB0aGUKJiM0MzsJCSAqIHRocm90dGxlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoZmF0YWwpCiYjNDM7CQkJc2MtJmd0O25yX3JlY2xhaW1lZCAmIzQzOz0gU1dBUF9DTFVTVEVSX01BWDsKJiM0MzsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiAKIAlscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTsKIAogCS8qIEluIGNhc2UgZm9saW8gZGVsZXRpb24gbGVmdCBlbXB0eSBvbGQgZ2VucywgZmx1c2ggdGhlbSAqLwogCXRyeV90b19pbmNfbWluX3NlcShscnV2ZWMsIHN3YXBwaW5lc3MpOwogCi0Jc2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsCiYjNDM7CXNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLCBhbGxvd2VkLAogCQkJCSAmYW1wO2xpc3QsICZhbXA7aXNvbGF0ZWQsICZhbXA7dHlwZSwgJmFtcDt0eXBlX3NjYW5uZWQpOwogCW5yX2lzb2xhdGVkID0gaXNvbGF0ZWQ7CiYjNDM7CWlmIChucl9pc29sYXRlZCkgewomIzQzOwkJX19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGUsCiYjNDM7CQkJCSAgICAgIG5yX2lzb2xhdGVkKTsKJiM0MzsJCWF0b21pY19sb25nX2FkZChucl9pc29sYXRlZCwgJmFtcDtscnV2ZWMtJmd0O2xydWdlbi5ucl9pc29sYXRlZFt0eXBlXSk7CiYjNDM7CX0KIAogCS8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovCiAJaWYgKHNjYW5uZWQpCkBAIC00OTU5LDYgJiM0Mzs1MTAzLDkgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWdvdG8gcmV0cnk7CiAJfQogCiYjNDM7CWF0b21pY19sb25nX3N1Yihucl9pc29sYXRlZCwgJmFtcDtscnV2ZWMtJmd0O2xydWdlbi5ucl9pc29sYXRlZFt0eXBlXSk7CiYjNDM7CW1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZSwgLW5yX2lzb2xhdGVkKTsKJiM0MzsKIAlpZiAobnJfaXNvbGF0ZWQgJmd0OyB0b3RhbF9yZWNsYWltZWQpCiAJCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IHR5cGUsCiAJCQkJIG5yX2lzb2xhdGVkIC0gdG90YWxfcmVjbGFpbWVkKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIHRocm93IGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGF0IGl0LiBUaGUgY2hhbmdlcyBzZWVtIHRvIGJlIGluIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCBhbmQgYG1tL3Ztc2Nhbi5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uLiBBbnl0aGluZyB0b3VjaGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFydGljdWxhcmx5IHRoZXNlIGZpbGVzIGlzIGFsd2F5cyBhIHBvdGVudGlhbCBob3Qgc3BvdC4KClRoZSBjb3JlIGNoYW5nZXMgbG9vayB0byBiZToKMS4gIEFkZGluZyBgYXRvbWljX2xvbmdfdCBucl9pc29sYXRlZFtBTk9OX0FORF9GSUxFXTtgIHRvIGBzdHJ1Y3QgbHJ1X2dlbl9mb2xpb2AuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IHRyYWNraW5nIGlzb2xhdGVkIGZvbGlvcyBhdCBhIGBscnVfZ2VuX2ZvbGlvYCBsZXZlbCBpbmRpY2F0ZXMgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciBmb2xpbyBpc29sYXRpb24gd2l0aGluIExSVSBsaXN0cy4KMi4gIFVwZGF0ZXMgdG8gYGxydXZlY190eXBlX2V2aWN0YWJsZV9zaXplYCBhbmQgYGxydXZlY19ldmljdGFibGVfc2l6ZWAsIHdoaWNoIGlzIGV4cGVjdGVkIHRvIGdvIGFsb25nIHdpdGggbWFuYWdpbmcgdGhlc2UgaXNvbGF0ZWQgZm9saW9zLgozLiAgTmV3IGZ1bmN0aW9uczogYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQoKWAgYW5kIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKWAgaW4gYG1tL3Ztc2Nhbi5jYC4gVGhlc2UgaW1wbHkgYSBtZWNoYW5pc20gZm9yIHRocm90dGxpbmcgb3IgbGltaXRpbmcgZm9saW8gaXNvbGF0aW9uIGJhc2VkIG9uIHNvbWUgY3JpdGVyaWEsIGFuZCB0aGF04oCZcyBhIHNpZ25hbCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uLgo0LiAgTW9kaWZpY2F0aW9ucyB0byBgaXNvbGF0ZV9mb2xpb3MoKWAgYW5kIGBldmljdF9mb2xpb3MoKWAgdG8gdHJhY2sgYW5kIG1hbmFnZSB0aGUgZm9saW8gY291bnRzIHdpdGhpbiB0aGUgbHJ1dmVjLgoKQmVmb3JlIEkgZ28gZnVydGhlciwgbGV0JiMzOTtzIGNsYXJpZnkgdGhhdCBgc3RydWN0IGxydV9nZW5fZm9saW9gIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLiBXaGVyZSBpcyB0aGlzIHN0cnVjdCBpbml0aWFsaXplZD8gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIHdoZXJlIGBscnVnZW5gIG9yIGBzdHJ1Y3QgbHJ1X2dlbl9mb2xpb2AgaXMgY3JlYXRlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBpdCYjMzk7cyB1c2VkLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgaWYgdGhlIG5ldyBgbnJfaXNvbGF0ZWRgIG1lbWJlciBpcyBiZWluZyBjb3JyZWN0bHkgc2V0IHVwIGFuZCBtYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MTc1PXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3VwZGF0ZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTE4MS1cdGVudW0gbHJ1X2xpc3QgbHJ1ID0gdHlwZSAqIExSVV9JTkFDVElWRV9GSUxFO1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDoxODI6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMTgzLVxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjIwLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDoyMjE6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydV9nZW5fZm9saW9fc2VxKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjIyLVx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjI2LVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjIyNzpcdGNvbnN0IHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yMjgtXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0yNTU9c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fYWRkX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCByZWNsYWltaW5nKVxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjYxLVx0aW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTtcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MjYyOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTI2My1cbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTI2OC1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MjY5Olx0c2VxID0gbHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgcmVjbGFpbWluZyk7XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTI3MC1cdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTUzND1lbnVtIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTU2Mi0gKi9cbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTYzOnN0cnVjdCBscnVfZ2VuX2ZvbGlvIHtcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTY0LVx0LyogdGhlIGFnaW5nIGluY3JlbWVudHMgdGhlIHlvdW5nZXN0IGdlbmVyYXRpb24gbnVtYmVyICovXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01ODYtXHRib29sIGVuYWJsZWQ7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjU4NzpcdC8qIHRoZSBtZW1jZyBnZW5lcmF0aW9uIHRoaXMgbHJ1X2dlbl9mb2xpbyBiZWxvbmdzIHRvICovXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTU4OC1cdHU4IGdlbjtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTg5Olx0LyogdGhlIGxpc3Qgc2VnbWVudCB0aGlzIGxydV9nZW5fZm9saW8gYmVsb25ncyB0byAqL1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01OTAtXHR1OCBzZWc7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjU5MTpcdC8qIHBlci1ub2RlIGxydV9nZW5fZm9saW8gbGlzdCBmb3IgZ2xvYmFsIHJlY2xhaW0gKi9cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTkyLVx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgbGlzdDtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTYxOT1zdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTYyMS1cdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NjIyOlx0LyogbWF4X3NlcSBmcm9tIGxydV9nZW5fZm9saW86IGNhbiBiZSBvdXQgb2YgZGF0ZSAqL1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02MjMtXHR1bnNpZ25lZCBsb25nIHNlcTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTY4MT1zdHJ1Y3QgbHJ1X2dlbl9tZW1jZyB7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02ODMtXHR1bnNpZ25lZCBsb25nIHNlcTtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6Njg0Olx0LyogZWFjaCBtZW1jZyBoYXMgb25lIGxydV9nZW5fZm9saW8gcGVyIG5vZGUgKi9cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNjg1LVx0dW5zaWduZWQgbG9uZyBucl9tZW1jZ3NbTUVNQ0dfTlJfR0VOU107XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY4NjpcdC8qIHBlci1ub2RlIGxydV9nZW5fZm9saW8gbGlzdCBmb3IgZ2xvYmFsIHJlY2xhaW0gKi9cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNjg3LVx0c3RydWN0IGhsaXN0X251bGxzX2hlYWRcdGZpZm9bTUVNQ0dfTlJfR0VOU11bTUVNQ0dfTlJfQklOU107XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD03Njg9c3RydWN0IGxydXZlYyB7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03ODktXHQvKiBldmljdGFibGUgcGFnZXMgZGl2aWRlZCBpbnRvIGdlbmVyYXRpb25zICovXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc5MDpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvXHRcdGxydWdlbjtcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzkxLSNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE0ODA9dHlwZWRlZiBzdHJ1Y3QgcGdsaXN0X2RhdGEge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTYwMC1cdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgbW1fd2FsaztcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTYwMTpcdC8qIGxydV9nZW5fZm9saW8gbGlzdCAqL1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNjAyLVx0c3RydWN0IGxydV9nZW5fbWVtY2cgbWVtY2dfbHJ1O1xuLS1cbm1tL2ZvbGlvLmM9NDY3PXZvaWQgZm9saW9fYWRkX2xydShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtNDc2LVx0ICogRm9yIHByZWZhdWx0ZWQgZmlsZSBmb2xpb3MsIGZvbGlvX21hcmtfYWNjZXNzZWQoKSBzZXRzXG5tbS9mb2xpby5jOjQ3NzpcdCAqIFBHX3JlZmVyZW5jZWQgc28gbHJ1X2dlbl9mb2xpb19zZXEoKSBwbGFjZXMgdGhlbSBpbnRvXG5tbS9mb2xpby5jLTQ3OC1cdCAqIHRoZSBzZWNvbmQgb2xkZXN0IGdlbmVyYXRpb24uXG4tLVxubW0vdm1zY2FuLmM9MzE5OD1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2Fpbixcbi0tXG5tbS92bXNjYW4uYy0zMjAxLVx0aW50IGk7XG5tbS92bXNjYW4uYzozMjAyOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy0zMjAzLVx0aW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4tLVxubW0vdm1zY2FuLmM9MzIxNz1zdGF0aWMgdm9pZCByZXNldF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBib29sIGNhcnJ5b3Zlcilcbi0tXG5tbS92bXNjYW4uYy0zMjE5LVx0aW50IGhpc3QsIHRpZXI7XG5tbS92bXNjYW4uYzozMjIwOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy0zMjIxLVx0Ym9vbCBjbGVhciA9IGNhcnJ5b3ZlciA/IE5SX0hJU1RfR0VOUyA9PSAxIDogTlJfSElTVF9HRU5TIFx1MDAzZSAxO1xuLS1cbm1tL3Ztc2Nhbi5jPTMyOTk9c3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS92bXNjYW4uYy0zMzAxLVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG5tbS92bXNjYW4uYzozMzAyOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy0zMzAzLVx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbi0tXG5tbS92bXNjYW4uYz0zMzQxPXN0YXRpYyB2b2lkIHJlc2V0X2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbi0tXG5tbS92bXNjYW4uYy0zMzQ0LVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbHJ1dmVjX2xpdmVfbG9ja19pcnEod2Fsay1cdTAwM2VscnV2ZWMpO1xubW0vdm1zY2FuLmM6MzM0NTpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtMzM0Ni1cbi0tXG5tbS92bXNjYW4uYz0zOTAwPXN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTM5MDMtXHRpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSDtcbm1tL3Ztc2Nhbi5jOjM5MDQ6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTM5MDUtXHRpbnQgaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbi0tXG5tbS92bXNjYW4uYz0zOTUzPXN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTM5NTYtXHRib29sIHNlcV9pbmNfZmxhZyA9IGZhbHNlO1xubW0vdm1zY2FuLmM6Mzk1NzpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtMzk1OC1cdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmMtMzk4NS1cbm1tL3Ztc2Nhbi5jOjM5ODY6XHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gbHJ1X2dlbl9mb2xpbyAqL1xubW0vdm1zY2FuLmMtMzk4Ny1cdGlmIChzd2FwcGluZXNzIFx1MDAyNlx1MDAyNiBzd2FwcGluZXNzIFx1MDAzYz0gTUFYX1NXQVBQSU5FU1MpIHtcbi0tXG5tbS92bXNjYW4uYz00MDA1PXN0YXRpYyBib29sIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTQwMDktXHRpbnQgdHlwZSwgem9uZTtcbm1tL3Ztc2Nhbi5jOjQwMTA6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTQwMTEtcmVzdGFydDpcbi0tXG5tbS92bXNjYW4uYz00MDcwPXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxuLS1cbm1tL3Ztc2Nhbi5jLTQwNzUtXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IE5VTEw7XG5tbS92bXNjYW4uYzo0MDc2Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy00MDc3LVx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmM9NDE1ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuLS1cbm1tL3Ztc2Nhbi5jLTQxNTctXHR1bnNpZ25lZCBsb25nIHNlcSwgdG90YWwgPSAwO1xubW0vdm1zY2FuLmM6NDE1ODpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtNDE1OS1cdERFRklORV9NQVhfU0VRKGxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmM9NDU5OD1zdGF0aWMgdm9pZCBfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLCBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ2MDAte1xubW0vdm1zY2FuLmM6NDYwMTpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpjaGlsZF9scnVnZW4sICpwYXJlbnRfbHJ1Z2VuO1xubW0vdm1zY2FuLmMtNDYwMi1cdGVudW0gbHJ1X2xpc3QgbHJ1ID0gdHlwZSAqIExSVV9JTkFDVElWRV9GSUxFO1xuLS1cbm1tL3Ztc2Nhbi5jPTQ2NjM9c3RhdGljIGJvb2wgc29ydF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ2NzItXHRpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzLCB3b3JraW5nc2V0KTtcbm1tL3Ztc2Nhbi5jOjQ2NzM6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTQ2NzQtXG4tLVxubW0vdm1zY2FuLmM9NDczNj1zdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ3NDctXHR1bnNpZ25lZCBsb25nIHJlbWFpbmluZyA9IG5yX3RvX3NjYW47XG5tbS92bXNjYW4uYzo0NzQ4Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy00NzQ5LVxuLS1cbm1tL3Ztc2Nhbi5jPTQ5OTg9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNTA3OC1cdFx0LyogZG9uJiMzOTt0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG5tbS92bXNjYW4uYzo1MDc5Olx0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXG5tbS92bXNjYW4uYy01MDgwLVx0XHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR19hY3RpdmUpKTtcbi0tXG5tbS92bXNjYW4uYz01Mjg1PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyOTEtXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG5tbS92bXNjYW4uYzo1MjkyOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbjtcbm1tL3Ztc2Nhbi5jLTUyOTMtXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4tLVxubW0vdm1zY2FuLmM9NTQyMj1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzdGF0ZV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy01NDIzLXtcbm1tL3Ztc2Nhbi5jOjU0MjQ6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTU0MjUtXG4tLVxubW0vdm1zY2FuLmM9NTY5Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX3NlcV9zaG93X2Z1bGwoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNTcwMy1cdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEoc2VxKTtcbm1tL3Ztc2Nhbi5jOjU3MDQ6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTU3MDUtXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbi0tXG5tbS92bXNjYW4uYz01NzUyPXN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vdm1zY2FuLmMtNTc1Ni1cdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IHY7XG5tbS92bXNjYW4uYzo1NzU3Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy01NzU4LVx0aW50IG5pZCA9IGxydXZlY19wZ2RhdChscnV2ZWMpLVx1MDAzZW5vZGVfaWQ7XG4tLVxubW0vdm1zY2FuLmM9NjAxOD12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwMjEtXHRpbnQgZ2VuLCB0eXBlLCB6b25lO1xubW0vdm1zY2FuLmM6NjAyMjpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtNjAyMy1cdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xuLS1cbm1tL3dvcmtpbmdzZXQuYz0yMzU9c3RhdGljIHZvaWQgKmxydV9nZW5fZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS93b3JraW5nc2V0LmMtMjQwLVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xubW0vd29ya2luZ3NldC5jOjI0MTpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW47XG5tbS93b3JraW5nc2V0LmMtMjQyLVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4tLVxubW0vd29ya2luZ3NldC5jPTI5Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuLS1cbm1tL3dvcmtpbmdzZXQuYy0yOTgtXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG5tbS93b3JraW5nc2V0LmM6Mjk5Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbjtcbm1tL3dvcmtpbmdzZXQuYy0zMDAtXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYzOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsIGluIHRoZSBmaWVsZCwgc3RhcnRpbmcgd2l0aCB0aGUgcmVxdWVzdGVkIGJvbGRlZCBoZWFkZXI6CgoqKkRpdmluZyBpbnRvIGBscnVfZ2VuX2luaXRfbHJ1dmVjYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYGxydV9nZW5faW5pdF9scnV2ZWNgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHNwZWNpZmljIExSVSB2ZWN0b3IgaW5pdGlhbGl6YXRpb24gaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyBhIGNvcmUgY29tcG9uZW50LCBzbyBhIGRlZXAgdW5kZXJzdGFuZGluZyBpcyBjcnVjaWFsLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgYW55IHN1YnRsZSBvcHRpbWl6YXRpb25zLCBwb3RlbnRpYWwgcGl0ZmFsbHMsIG9yIGRlc2lnbiBjaG9pY2VzIHRoYXQgYXJlIGF0IHBsYXkgaGVyZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhlIGluaXRpYWwgYWxsb2NhdGlvbiwgd2hhdCBwYXJhbWV0ZXJzIGl0IGFjY2VwdHMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBhbmQgZXZpY3Rpb24gbWVjaGFuaXNtcy4gTXkgbWFpbiBjb25jZXJuIGlzIHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdCBvbiBvdmVyYWxsIHBlcmZvcm1hbmNlIGFuZCBob3cgcm9idXN0IHRoaXMgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBpcy4gSSYjMzk7bSBsb29raW5nIGZvciBhIGNsZWFyIGRlc2NyaXB0aW9uIG9mIGFsbCB0aGUgc3RlcHMsIGFueSBhc3N1bXB0aW9ucyBtYWRlLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBlcnJvciBjb25kaXRpb25zIGhhbmRsZWQuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgY29kZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwMTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjAxODpcdHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG42MDE5Olx0e1xuNjAyMDpcdFx0aW50IGk7XG42MDIxOlx0XHRpbnQgZ2VuLCB0eXBlLCB6b25lO1xuNjAyMjpcdFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG42MDIzOlx0XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbjYwMjQ6XHRcbjYwMjU6XHRcdGxydWdlbi1cdTAwM2VtYXhfc2VxID0gTUlOX05SX0dFTlMgJiM0MzsgMTtcbjYwMjY6XHRcdGxydWdlbi1cdTAwM2VlbmFibGVkID0gbHJ1X2dlbl9lbmFibGVkKCk7XG42MDI3Olx0XG42MDI4Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gTUlOX05SX0dFTlMgJiM0MzsgMTsgaSYjNDM7JiM0MzspXG42MDI5Olx0XHRcdGxydWdlbi1cdTAwM2V0aW1lc3RhbXBzW2ldID0gamlmZmllcztcbjYwMzA6XHRcbjYwMzE6XHRcdGZvcl9lYWNoX2dlbl90eXBlX3pvbmUoZ2VuLCB0eXBlLCB6b25lKVxuNjAzMjpcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZscnVnZW4tXHUwMDNlZm9saW9zW2dlbl1bdHlwZV1bem9uZV0pO1xuNjAzMzpcdFxuNjAzNDpcdFx0aWYgKG1tX3N0YXRlKVxuNjAzNTpcdFx0XHRtbV9zdGF0ZS1cdTAwM2VzZXEgPSBNSU5fTlJfR0VOUztcbjYwMzY6XHR9XG42MDM3Olx0XG42MDM4Olx0I2lmZGVmIENPTkZJR19NRU1DR1xuNjAzOTpcdFxuNjA0MDpcdHZvaWQgbHJ1X2dlbl9pbml0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbjYwNDE6XHR7XG42MDQyOlx0XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xuNjA0MzpcdFxuNjA0NDpcdFx0aWYgKCFtbV9saXN0KVxuNjA0NTpcdFx0XHRyZXR1cm47XG42MDQ2Olx0XG42MDQ3Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZtbV9saXN0LVx1MDAzZWZpZm8pO1xuNjA0ODpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bW1fbGlzdC1cdTAwM2Vsb2NrKTtcbjYwNDk6XHR9XG42MDUwOlx0XG42MDUxOlx0dm9pZCBscnVfZ2VuX2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuNjA1MjpcdHtcbjYwNTM6XHRcdGludCBpO1xuNjA1NDpcdFx0aW50IG5pZDtcbjYwNTU6XHRcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XG42MDU2Olx0XG42MDU3Olx0XHRWTV9XQVJOX09OX09OQ0UobW1fbGlzdCBcdTAwMjZcdTAwMjYgIWxpc3RfZW1wdHkoXHUwMDI2bW1fbGlzdC1cdTAwM2VmaWZvKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTUxCgkJCQkJCQlvdXRwdXQ6IDMwMwoJCQkJCQkJdGhvdWdodHM6IDYwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLTVNBTiBOZWVkIGluIFRoaXMgTUdMUlUgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgYW5hbHlzaXMgZm9jdXNlcyBvbiB3aGV0aGVyIHRoaXMgTUdMUlUgcGF0Y2ggaW50cm9kdWNpbmcgY2hhbmdlcyBpbiBwYWdlIHJlY2xhaW0gYW5kIHRocm90dGxpbmcgcG9zZXMgYSByaXNrIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIHRodXMgbmVjZXNzaXRhdGluZyBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGNoZWNrcy4gSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoZSBjb2RlIGFuZCB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggYSBmaW5lLXRvb3RoIGNvbWIuCgpGaXJzdCwgSSBjb25maXJtIHRoYXQgdGhlIGBzdHJ1Y3QgbHJ1dmVjYCBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHksIGVpdGhlciB3aXRoaW4gYHN0cnVjdCBwZ2xpc3RfZGF0YWAgKHN0YXRpY2FsbHkgb3IgZHVyaW5nIGVhcmx5IGJvb3QpIG9yIHdpdGhpbiBgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGVgIHZpYSBga3phbGxvY2AuIFRoaXMgZW5zdXJlcyB0aGF0IGZpZWxkcyBhcmUgZWl0aGVyIHplcm9lZCBvciBvdGhlcndpc2Ugc2FmZWx5IGluaXRpYWxpemVkLiBJIGFsc28gbm90ZWQgdGhhdCBhdG9taWMgbG9uZyB0eXBlcywgbGlrZSBgZXZpY3RlZGAgYW5kIGByZWZhdWx0ZWRgIHdpdGhpbiBgc3RydWN0IGxydV9nZW5fZm9saW9gIGFyZSBhbHNvIHplcm8taW5pdGlhbGl6ZWQgYnkgZGVmYXVsdC4KClRoZW4gSSBleGFtaW5lZCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYHRocm90dGxlX2V2aWN0YWJsZV90eXBlc2AgYW5kIGBldmljdF9mb2xpb3NgLCBmb2N1c2luZyBvbiB2YXJpYWJsZSBpbml0aWFsaXphdGlvbi4gSW4gYHRocm90dGxlX2V2aWN0YWJsZV90eXBlc2AsIHRoZSBjb2RlIHBhc3NlcyBhIHBvaW50ZXIgdG8gYGJvb2wgKmZhdGFsYCBhbmQgaW5pdGlhbGl6ZXMgaXQgaW1tZWRpYXRlbHkgd2l0aCBgKmZhdGFsID0gZmFsc2U7YC4gQSBsb2NhbCBgYm9vbCBzdGFsbGVkID0gZmFsc2U7YCBpcyBhbHNvIGluaXRpYWxpemVkLiBJbiBgZXZpY3RfZm9saW9zYCwgdGhlIGB1bnNpZ25lZCBpbnQgYWxsb3dlZGAgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgYnkgcmV0dXJuIGZyb20gYHRocm90dGxlX2V2aWN0YWJsZV90eXBlc2AuIFRoaXMgaXMgaW1wb3J0YW50LCBtYWtpbmcgaXQgc28gdGhhdCBgZmF0YWxgIGFuZCBgYWxsb3dlZGAgYXJlIHByb3Blcmx5IHNldC4gSWYgYCFhbGxvd2VkYCB0aGVuIGEgY29uZGl0aW9uIGV4ZWN1dGVzIHdoZXJlIGBzYy0mZ3Q7bnJfcmVjbGFpbWVkICYjNDM7PSBTV0FQX0NMVVNURVJfTUFYO2AgLgoKVGhlIGNvcmUgY29uY2VybiBoZXJlIGlzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLCBhbmQgYW55IGNoYW5jZSBvZiBwYXNzaW5nIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludG8gdXNlciBzcGFjZS4gSSBjYW4gY29uZmlybSB0aGF0IGFsbCB2YXJpYWJsZXMsIGxpa2UgYGFsbG93ZWRgIGFuZCBgZmF0YWxgLCBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIHRoZXJlIGFyZSBubyBpbnN0YW5jZXMgb2YgdXNlci1zcGFjZSBjb3BpZXMgKGBjb3B5X3RvX3VzZXJgLCBzeXNjYWxsIHJldHVybiwgZXRjLikgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLiBGdXJ0aGVybW9yZSwgSSBzZWUgbm8gcmlza3kgc3RhY2svaGVhcCBidWZmZXIgbWFuaXB1bGF0aW9ucyB0aGF0IGNvdWxkIGxlYXZlIG1lbW9yeSB1bmluaXRpYWxpemVkLgoKTm93LCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYS4KCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOioqIE5vcGUuIE5vdGhpbmcgaGVyZSB0aGF0JiMzOTtzIGxlYWtpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZS4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogTm8uIEFsbCBicmFuY2hpbmcgZGVjaXNpb25zIHJlbHkgb24gdmFyaWFibGVzIHRoYXQgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIGFsbCBmaWVsZHMgYXJlIHNhZmVseSB6ZXJvLWFsbG9jYXRlZCBvciBvdGhlcndpc2UgaW5pdGlhbGl6ZWQuCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyB1c2VkIGxhdGVyOioqIE5vdCBoZXJlLiBUaGUgc3RydWN0dXJlcyBhbmQgdGhlaXIgZmllbGRzIGFyZSBwcm9wZXJseSBzZXQgdXAuCjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhOioqIE5vdCBhcHBsaWNhYmxlLiBUaGVyZSYjMzk7cyBubyBtYW5pcHVsYXRpb24gb2YgZXhpc3RpbmcgYnVmZmVycyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgdGhyb3VnaCBib3VuZHMgaXNzdWVzLgoKR2l2ZW4gdGhpcyB0aG9yb3VnaCByZXZpZXcgYWdhaW5zdCB0aGUgTmVlZHNLTVNBTiBjcml0ZXJpYSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0ICoqS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLioqIFN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIHdvdWxkIGJlIHRoZSBhcHByb3ByaWF0ZSB0b29scyB0byBjaGVjayBmb3IgY29uY3VycmVuY3kvbG9ja2luZy9yZWZlcmVuY2UvbWVtb3J5IHNhZmV0eSBwcm9ibGVtcy4gVGhlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyZSBtaW5pbWFsIGluIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcGVyLWxydXZlYyBpc29sYXRpb24gYWNjb3VudGluZyAoYG5yX2lzb2xhdGVkYCkgYW5kIGlzb2xhdGlvbiB0aHJvdHRsaW5nIChgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZGAsIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXNgKSBmb3IgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFpbS5cblxuQW5hbHlzaXMgYWdhaW5zdCBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuMS4gVXNlci1zcGFjZSBsZWFrczogTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBleHBvc2VkIHZpYSBpb2N0bHMvc3lzZnMvbmV0bGluay9CUEYgYnVmZmVycy5cbjIuIFVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOiBBbGwgYWRkZWQgbG9jYWwgdmFyaWFibGVzIChgYWxsb3dlZGAsIGBmYXRhbGAsIGBzdGFsbGVkYCkgYW5kIHN0cnVjdCBmaWVsZHMgKGBucl9pc29sYXRlZGApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBhbmQgbWFuYWdlZCAoZS5nLiwgYCpmYXRhbGAgaXMgaW5pdGlhbGl6ZWQgdG8gZmFsc2UgdXBvbiBlbnRlcmluZyBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzKClgLCBgc3RydWN0IGxydXZlY2AgbWVtb3J5IGlzIHplcm8tYWxsb2NhdGVkIGR1cmluZyBub2RlL21lbWNnIGluaXRpYWxpemF0aW9uKS5cbjMuIEJ1ZmZlciBib3VuZHMgLyBtZW1vcnkgaGFuZGxpbmc6IFRoZSBwYXRjaCBvbmx5IGFkanVzdHMgcmVjbGFpbWVyIHNjaGVkdWxpbmcsIHRocm90dGxpbmcsIGFuZCBpc29sYXRpb24gY291bnRlcnMgd2l0aG91dCB0b3VjaGluZyB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3MsIHZhcmlhYmxlLWxlbmd0aCBidWZmZXJzLCBvciBzdHJ1Y3QgcGFkZGluZy5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCByZWxhdGUgdG8gcmVjbGFpbSB0aHJvdHRsaW5nLCBjb25jdXJyZW5jeSwgbG9ja2luZywgb3IgY291bnRlciBpbWJhbGFuY2VzLCB3aGljaCBhcmUgaGFuZGxlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIChMT0NLREVQLCBLQVNBTiwgV0FSTl9PTikuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHBlci1scnV2ZWMgaXNvbGF0aW9uIGFjY291bnRpbmcgKGBucl9pc29sYXRlZGApIGFuZCBpc29sYXRpb24gdGhyb3R0bGluZyAoYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRgLCBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYCkgZm9yIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0uXG5cbkFuYWx5c2lzIGFnYWluc3QgS01TQU4gYXBwbGljYWJpbGl0eTpcbjEuIFVzZXItc3BhY2UgbGVha3M6IE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgZXhwb3NlZCB2aWEgaW9jdGxzL3N5c2ZzL25ldGxpbmsvQlBGIGJ1ZmZlcnMuXG4yLiBVbmluaXRpYWxpemVkIHZhcmlhYmxlczogQWxsIGFkZGVkIGxvY2FsIHZhcmlhYmxlcyAoYGFsbG93ZWRgLCBgZmF0YWxgLCBgc3RhbGxlZGApIGFuZCBzdHJ1Y3QgZmllbGRzIChgbnJfaXNvbGF0ZWRgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIG1hbmFnZWQgKGUuZy4sIGAqZmF0YWxgIGlzIGluaXRpYWxpemVkIHRvIGZhbHNlIHVwb24gZW50ZXJpbmcgYHRocm90dGxlX2V2aWN0YWJsZV90eXBlcygpYCwgYHN0cnVjdCBscnV2ZWNgIG1lbW9yeSBpcyB6ZXJvLWFsbG9jYXRlZCBkdXJpbmcgbm9kZS9tZW1jZyBpbml0aWFsaXphdGlvbikuXG4zLiBCdWZmZXIgYm91bmRzIC8gbWVtb3J5IGhhbmRsaW5nOiBUaGUgcGF0Y2ggb25seSBhZGp1c3RzIHJlY2xhaW1lciBzY2hlZHVsaW5nLCB0aHJvdHRsaW5nLCBhbmQgaXNvbGF0aW9uIGNvdW50ZXJzIHdpdGhvdXQgdG91Y2hpbmcgdW5pbml0aWFsaXplZCBidWZmZXIgYWNjZXNzLCB2YXJpYWJsZS1sZW5ndGggYnVmZmVycywgb3Igc3RydWN0IHBhZGRpbmcuXG5cbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgcmVsYXRlIHRvIHJlY2xhaW0gdGhyb3R0bGluZywgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIGNvdW50ZXIgaW1iYWxhbmNlcywgd2hpY2ggYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyAoTE9DS0RFUCwgS0FTQU4sIFdBUk5fT04pLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMzoxNjo0Ny4zMzQ0Mjg0NjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODc3MjQ2MDA4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aHJvdHRsZV9ldmljdGFibGVfdHlwZXNcIixcbiAgICBcImxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRcIixcbiAgICBcImlzb2xhdGVfZm9saW9zXCIsXG4gICAgXCJldmljdF9mb2xpb3NcIixcbiAgICBcImxydV9nZW5fc2VxX3dyaXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBlci1scnV2ZWMgaXNvbGF0aW9uIGFjY291bnRpbmcgKGBucl9pc29sYXRlZGApIGFuZCBpc29sYXRpb24gdGhyb3R0bGluZyAoYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRgLCBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYCkgZm9yIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0uXFxuXFxuQW5hbHlzaXMgYWdhaW5zdCBLTVNBTiBhcHBsaWNhYmlsaXR5OlxcbjEuIFVzZXItc3BhY2UgbGVha3M6IE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgZXhwb3NlZCB2aWEgaW9jdGxzL3N5c2ZzL25ldGxpbmsvQlBGIGJ1ZmZlcnMuXFxuMi4gVW5pbml0aWFsaXplZCB2YXJpYWJsZXM6IEFsbCBhZGRlZCBsb2NhbCB2YXJpYWJsZXMgKGBhbGxvd2VkYCwgYGZhdGFsYCwgYHN0YWxsZWRgKSBhbmQgc3RydWN0IGZpZWxkcyAoYG5yX2lzb2xhdGVkYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFuZCBtYW5hZ2VkIChlLmcuLCBgKmZhdGFsYCBpcyBpbml0aWFsaXplZCB0byBmYWxzZSB1cG9uIGVudGVyaW5nIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKWAsIGBzdHJ1Y3QgbHJ1dmVjYCBtZW1vcnkgaXMgemVyby1hbGxvY2F0ZWQgZHVyaW5nIG5vZGUvbWVtY2cgaW5pdGlhbGl6YXRpb24pLlxcbjMuIEJ1ZmZlciBib3VuZHMgLyBtZW1vcnkgaGFuZGxpbmc6IFRoZSBwYXRjaCBvbmx5IGFkanVzdHMgcmVjbGFpbWVyIHNjaGVkdWxpbmcsIHRocm90dGxpbmcsIGFuZCBpc29sYXRpb24gY291bnRlcnMgd2l0aG91dCB0b3VjaGluZyB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3MsIHZhcmlhYmxlLWxlbmd0aCBidWZmZXJzLCBvciBzdHJ1Y3QgcGFkZGluZy5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIHJlbGF0ZSB0byByZWNsYWltIHRocm90dGxpbmcsIGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBjb3VudGVyIGltYmFsYW5jZXMsIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgKExPQ0tERVAsIEtBU0FOLCBXQVJOX09OKS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGlzb2xhdGVkIGZvbGlvIGFjY291bnRpbmcgYW5kIHJlY2xhaW0gdGhyb3R0bGluZyBmb3IgTXVsdGktR2VuIExSVSAoTUdMUlUpIGluIG1tL3Ztc2Nhbi5jLCBpbXBsZW1lbnRpbmcgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZCgpIGFuZCB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBmb2xpbyBpc29sYXRpb24gZHVyaW5nIG1lbW9yeSBwcmVzc3VyZSBhbmQgZGlyZWN0IHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMzoxNjo0Ny4zMzQ0MzMyODlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzYxNTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDgzNmQ5NjQzM2MwZWQ3NmQwNzExMjg5N2JkZjI2NjRiMWMyODc4MTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAwMzoxNjo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbmluZGV4IDk0ZjljM2ZmNTQxNjAuLjgxOWI2YzA1OTExNmUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5AQCAtNTgwLDYgKzU4MCw4IEBAIHN0cnVjdCBscnVfZ2VuX2ZvbGlvIHtcXG4gXFx0LyogY2FuIGJlIG1vZGlmaWVkIHdpdGhvdXQgaG9sZGluZyB0aGUgTFJVIGxvY2sgKi9cXG4gXFx0YXRvbWljX2xvbmdfdCBldmljdGVkW05SX0hJU1RfR0VOU11bQU5PTl9BTkRfRklMRV1bTUFYX05SX1RJRVJTXTtcXG4gXFx0YXRvbWljX2xvbmdfdCByZWZhdWx0ZWRbTlJfSElTVF9HRU5TXVtBTk9OX0FORF9GSUxFXVtNQVhfTlJfVElFUlNdO1xcbitcXHQvKiB0aGUgbnVtYmVyIG9mIGZvbGlvcyBpc29sYXRlZCBmcm9tIHRoaXMgbHJ1dmVjIGFuZCBiZWluZyByZWNsYWltZWQgKi9cXG4rXFx0YXRvbWljX2xvbmdfdCBucl9pc29sYXRlZFtBTk9OX0FORF9GSUxFXTtcXG4gXFx0Lyogd2hldGhlciB0aGUgbXVsdGktZ2VuIExSVSBpcyBlbmFibGVkICovXFxuIFxcdGJvb2wgZW5hYmxlZDtcXG4gXFx0LyogdGhlIG1lbWNnIGdlbmVyYXRpb24gdGhpcyBscnVfZ2VuX2ZvbGlvIGJlbG9uZ3MgdG8gKi9cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGYxMTQ5MWVlOWVkNWMuLjIxMTgzOWQxMDkwOWEgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC00MTUxLDI1ICs0MTUxLDM0IEBAIHN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2xcXG4gXFx0c2MtXFx1MDAzZXByaW9yaXR5ID0gY2xhbXAocHJpb3JpdHksIERFRl9QUklPUklUWSAvIDIsIERFRl9QUklPUklUWSk7XFxuIH1cXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY19ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxcbiB7XFxuLVxcdGludCBnZW4sIHR5cGUsIHpvbmU7XFxuK1xcdGludCBnZW4sIHpvbmU7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc2VxLCB0b3RhbCA9IDA7XFxuIFxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuIFxcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XFxuIFxcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XFxuIFxcbi1cXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7XFxuLVxcdFxcdGZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxIFxcdTAwM2M9IG1heF9zZXE7IHNlcSsrKSB7XFxuLVxcdFxcdFxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcXG4tXFx0XFx0XFx0Zm9yICh6b25lID0gMDsgem9uZSBcXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKVxcbi1cXHRcXHRcXHRcXHR0b3RhbCArPSBtYXgoUkVBRF9PTkNFKGxydWdlbi1cXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTtcXG4tXFx0XFx0fVxcbitcXHRmb3IgKHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSBcXHUwMDNjPSBtYXhfc2VxOyBzZXErKykge1xcbitcXHRcXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XFxuK1xcdFxcdGZvciAoem9uZSA9IDA7IHpvbmUgXFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUrKylcXG4rXFx0XFx0XFx0dG90YWwgKz0gbWF4KFJFQURfT05DRShscnVnZW4tXFx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiB0b3RhbDtcXG4gfVxcbiBcXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyB0b3RhbCA9IDA7XFxuK1xcdGludCB0eXBlO1xcbitcXG4rXFx0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUodHlwZSwgc3dhcHBpbmVzcylcXG4rXFx0XFx0dG90YWwgKz0gbHJ1dmVjX3R5cGVfZXZpY3RhYmxlX3NpemUobHJ1dmVjLCB0eXBlKTtcXG4rXFxuK1xcdHJldHVybiB0b3RhbDtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgbHJ1dmVjX2lzX3NpemFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHRvdGFsO1xcbkBAIC00ODM4LDE1ICs0ODQ3LDEyOCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4gXFx0cmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKFxcdTAwMjZzcCwgXFx1MDAyNnB2KTtcXG4gfVxcbiBcXG4rLypcXG4rICogVGhlIE1HTFJVIGNvdW50ZXJwYXJ0IHRvIHRvb19tYW55X2lzb2xhdGVkKCkuXFxuKyAqXFxuKyAqIHRvb19tYW55X2lzb2xhdGVkKCkgY29tcGFyZXMgbm9kZS13aWRlIGlzb2xhdGVkIGNvdW50cyBhZ2FpbnN0XFxuKyAqIG5vZGUtd2lkZSBpbmFjdGl2ZSBzaXplcy4gSXQgcHJlZGF0ZXMgcGVyLW1lbWNnIExSVSBsaXN0cywgd2hpY2hcXG4rICogbW92ZWQgaXNvbGF0aW9uIHRvIHBlci1scnV2ZWMgZ3JhbnVsYXJpdHkuIE1HTFJVIHJlY2xhaW1lcnMgY29udGVuZFxcbisgKiBwZXIgbHJ1dmVjLCBzbyB0aGlzIGNoZWNrIGlzIHBlciBscnV2ZWMgYXMgd2VsbCwgYW5kIGlzb2xhdGlvbiBpblxcbisgKiBvbmUgbWVtY2cgZG9lcyBub3QgdGhyb3R0bGUgcmVjbGFpbSBpbiBhbm90aGVyLlxcbisgKlxcbisgKiBUaGUgbGVnYWN5IHRocmVzaG9sZCwgdGhlIHNpemUgb2YgdGhlIGluYWN0aXZlIGxpc3QsIGlzIG5vdCB1c2FibGVcXG4rICogaGVyZSBlaXRoZXI6IGluIE1HTFJVIHRoZSBpbmFjdGl2ZSBjb3VudGVycyBhcmUgb25seSBhIGNvbXBhdGliaWxpdHlcXG4rICogc2hpbSAtIHRoZXkganVtcCBhcm91bmQgd2hlbiBzd2FwIHJ1bnMgb3V0IG9yIGEgbWVtY2cgaGl0cyBpdHMgc3dhcFxcbisgKiBsaW1pdCwgYW5kIHByb2FjdGl2ZSBhZ2luZyBjYW4gaW5mbGF0ZSB0aGVtLiBDb21wYXJlIGFnYWluc3QgdGhlXFxuKyAqIHRvdGFsIG51bWJlciBvZiBldmljdGFibGUgcGFnZXMgb2YgdGhlIHR5cGUgZGl2aWRlZCBieSBNSU5fTlJfR0VOUyxcXG4rICogYXBwcm94aW1hdGluZyB0aGUgc2l6ZSBvZiBvbmUgZ2VuZXJhdGlvbiAtIHRoZSBzYW1lIHVuaXQgdGhlXFxuKyAqIG9yaWdpbmFsIE1HTFJVIGFnaW5nIGhldXJpc3RpY3MgdXNlZC5cXG4rICovXFxuK3N0YXRpYyBib29sIGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBpc29sYXRlZCwgZXZpY3RhYmxlO1xcbitcXG4rXFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICghd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzYykpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlzb2xhdGVkID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW4ubnJfaXNvbGF0ZWRbdHlwZV0pO1xcbitcXHRldmljdGFibGUgPSBscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShscnV2ZWMsIHR5cGUpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogR0ZQX05PSU8vR0ZQX05PRlMgY2FsbGVycyBhcmUgYWxsb3dlZCB0byBpc29sYXRlIG1vcmUgcGFnZXMsIHNvXFxuK1xcdCAqIHRoZXkgd29uJ3QgYmUgYmxvY2tlZCBieSBub3JtYWwgZGlyZWN0LXJlY2xhaW1lcnMsIGZvcm1pbmcgYVxcbitcXHQgKiBjaXJjdWxhciBkZWFkbG9jay5cXG4rXFx0ICovXFxuK1xcdGlmIChnZnBfaGFzX2lvX2ZzKHNjLVxcdTAwM2VnZnBfbWFzaykpXFxuK1xcdFxcdGV2aWN0YWJsZSBcXHUwMDNlXFx1MDAzZT0gMztcXG4rXFxuK1xcdHJldHVybiBpc29sYXRlZCBcXHUwMDNlIGV2aWN0YWJsZSAvIE1JTl9OUl9HRU5TO1xcbit9XFxuK1xcbisvKlxcbisgKiBVbmxpa2UgdGhlIGxlZ2FjeSBwYXRoLCB3aGVyZSB0aGUgTFJVIGxpc3QgdG8gaXNvbGF0ZSBmcm9tIGlzIGtub3duXFxuKyAqIGJlZm9yZSBpc29sYXRpb24sIGlzb2xhdGVfZm9saW9zKCkgcGlja3MgdGhlIHR5cGUgZnJvbSB0aGUgcmVmYXVsdFxcbisgKiBmZWVkYmFjayBhbmQgbWF5IGZhbGwgYmFjayB0byB0aGUgb3RoZXIgb25lLiBUaGVyZWZvcmUsIGluc3RlYWQgb2ZcXG4rICogdGhyb3R0bGluZyBvbiBhIHNpbmdsZSB0eXBlLCBjb2xsZWN0IHRoZSBldmljdGFibGUgdHlwZXMgdGhhdCBkbyBub3RcXG4rICogaGF2ZSB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MsIGFuZCBvbmx5IHNsZWVwIHdoZW4gYWxsIG9mIHRoZW0gZG8uXFxuKyAqXFxuKyAqIFJldHVybnMgdGhlIG1hc2sgb2YgdGhlIHR5cGVzIGlzb2xhdGVfZm9saW9zKCkgbWF5IGlzb2xhdGUgZnJvbSwgb3JcXG4rICogMCBpZiByZWNsYWltIHNob3VsZCBzdG9wLiBBbHNvIHNldHMgQGZhdGFsIHRvIHRlbGwgdGhlIGNhbGxlciB0aGF0XFxuKyAqIHRoZSB0YXNrIHJlY2VpdmVkIGEgZmF0YWwgc2lnbmFsIHdoaWxlIHdhaXRpbmcuXFxuKyAqL1xcbitzdGF0aWMgdW5zaWduZWQgaW50IHRocm90dGxlX2V2aWN0YWJsZV90eXBlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgaW50IHN3YXBwaW5lc3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgYm9vbCAqZmF0YWwpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGFsbG93ZWQ7XFxuK1xcdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xcbitcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0KmZhdGFsID0gZmFsc2U7XFxuK1xcbitcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdGFsbG93ZWQgPSAwO1xcbitcXHRcXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZShpLCBzd2FwcGluZXNzKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEEgdHlwZSB3aXRoIG5vIGV2aWN0YWJsZSBmb2xpb3MgaGFzIG5vdGhpbmcgdG9cXG4rXFx0XFx0XFx0ICogaXNvbGF0ZS4gRG9uJ3QgYWxsb3cgaXQsIG90aGVyd2lzZSByZWNsYWltIGNhbiBiZVxcbitcXHRcXHRcXHQgKiByZWRpcmVjdGVkIHRvIGl0IGFuZCBzcGluIG1ha2luZyBubyBwcm9ncmVzcywgZS5nLlxcbitcXHRcXHRcXHQgKiB3aGVuIHRoZSBvbmx5IHR5cGUgd2l0aCBmb2xpb3MgaXMgb3Zlci1pc29sYXRlZC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmICghbHJ1dmVjX3R5cGVfZXZpY3RhYmxlX3NpemUobHJ1dmVjLCBpKSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRpZiAoIWxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQobHJ1dmVjLCBpLCBzYykpXFxuK1xcdFxcdFxcdFxcdGFsbG93ZWQgfD0gQklUKGkpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoYWxsb3dlZCkge1xcbitcXHRcXHRcXHQvKiBXYWtlIHVwIHJlY2xhaW1lcnMgd2FpdGluZyBvbiB0aGUgaXNvbGF0aW9uIHRvIGdvIGRvd24uICovXFxuK1xcdFxcdFxcdHdha2VfdGhyb3R0bGVfaXNvbGF0ZWQocGdkYXQpO1xcbitcXHRcXHRcXHRyZXR1cm4gYWxsb3dlZDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQWxsIGV2aWN0YWJsZSB0eXBlcyBhcmUgb3Zlci1pc29sYXRlZC4gTGlrZSB0aGUgbGVnYWN5XFxuK1xcdFxcdCAqIHBhdGgsIHdhaXQgb25jZSBmb3IgY29uY3VycmVudCByZWNsYWltZXJzIHRvIHB1dCB0aGVpclxcbitcXHRcXHQgKiBpc29sYXRlZCBmb2xpb3MgYmFjazsgZ2l2ZSB1cCBpZiB0aGF0IG1ha2VzIG5vIHByb2dyZXNzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHN0YWxsZWQpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0XFx0c3RhbGxlZCA9IHRydWU7XFxuK1xcdFxcdHJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7XFxuK1xcbitcXHRcXHQvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovXFxuK1xcdFxcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbitcXHRcXHRcXHQqZmF0YWwgPSB0cnVlO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdFxcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWQsXFxuLVxcdFxcdFxcdCAgaW50ICppc29sYXRlX3R5cGUsIGludCAqaXNvbGF0ZV9zY2FubmVkKVxcbitcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBhbGxvd2VkLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbitcXHRcXHRcXHQgIGludCAqaXNvbGF0ZWQsIGludCAqaXNvbGF0ZV90eXBlLCBpbnQgKmlzb2xhdGVfc2Nhbm5lZClcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFx0aW50IHRvdGFsX3NjYW5uZWQgPSAwO1xcbiBcXHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBwcmVmZXJyZWQgdHlwZSBtYXkgaGF2ZSBiZWVuIGV4Y2x1ZGVkIGJ5XFxuK1xcdCAqIHRocm90dGxlX2V2aWN0YWJsZV90eXBlcygpOyBzdGFydCBmcm9tIHRoZSBvdGhlciBvbmUuXFxuK1xcdCAqL1xcbitcXHRpZiAoIShhbGxvd2VkIFxcdTAwMjYgQklUKHR5cGUpKSlcXG4rXFx0XFx0dHlwZSA9ICF0eXBlO1xcbitcXG4gXFx0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUoaSwgc3dhcHBpbmVzcykge1xcbiBcXHRcXHRpbnQgc2Nhbm5lZDtcXG4gXFx0XFx0aW50IHRpZXIgPSBnZXRfdGllcl9pZHgobHJ1dmVjLCB0eXBlKTtcXG5AQCAtNDg2Myw5ICs0OTg1LDEwIEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIElmIHNjYW5uZWQgXFx1MDAzZSAwIGFuZCBpc29sYXRlZCA9PSAwLCBhdm9pZCBmYWxsaW5nIGJhY2sgdG8gdGhlXFxuIFxcdFxcdCAqIG90aGVyIHR5cGUsIGFzIHRoaXMgdHlwZSByZW1haW5zIHN1ZmZpY2llbnQuIEZhbGxpbmcgYmFja1xcbi1cXHRcXHQgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLlxcbitcXHRcXHQgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLiBPbmx5XFxuK1xcdFxcdCAqIGZhbGwgYmFjayB0byBhIHR5cGUgdGhhdCBpcyBub3QgdGhyb3R0bGVkLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCFzY2FubmVkKVxcbitcXHRcXHRpZiAoIXNjYW5uZWQgXFx1MDAyNlxcdTAwMjYgKGFsbG93ZWQgXFx1MDAyNiBCSVQoIXR5cGUpKSlcXG4gXFx0XFx0XFx0dHlwZSA9ICF0eXBlO1xcbiBcXHR9XFxuIFxcbkBAIC00ODg4LDE1ICs1MDExLDM2IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcXG4rXFx0dW5zaWduZWQgaW50IGFsbG93ZWQ7XFxuK1xcdGJvb2wgZmF0YWw7XFxuK1xcbitcXHRhbGxvd2VkID0gdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzKGxydXZlYywgc3dhcHBpbmVzcywgc2MsIFxcdTAwMjZmYXRhbCk7XFxuK1xcdGlmICghYWxsb3dlZCkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIExpa2UgdGhlIGxlZ2FjeVxcbitcXHRcXHQgKiBwYXRoLCBwcmV0ZW5kIHNvbWUgcGFnZXMgd2VyZSByZWNsYWltZWQgc28gcmVjbGFpbVxcbitcXHRcXHQgKiB1bndpbmRzIHF1aWNrbHkgaW5zdGVhZCBvZiBsb29waW5nIGJhY2sgaW50byB0aGVcXG4rXFx0XFx0ICogdGhyb3R0bGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoZmF0YWwpXFxuK1xcdFxcdFxcdHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgKz0gU1dBUF9DTFVTVEVSX01BWDtcXG4rXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuIFxcbiBcXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcXG4gXFxuIFxcdC8qIEluIGNhc2UgZm9saW8gZGVsZXRpb24gbGVmdCBlbXB0eSBvbGQgZ2VucywgZmx1c2ggdGhlbSAqL1xcbiBcXHR0cnlfdG9faW5jX21pbl9zZXEobHJ1dmVjLCBzd2FwcGluZXNzKTtcXG4gXFxuLVxcdHNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLFxcbitcXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcywgYWxsb3dlZCxcXG4gXFx0XFx0XFx0XFx0IFxcdTAwMjZsaXN0LCBcXHUwMDI2aXNvbGF0ZWQsIFxcdTAwMjZ0eXBlLCBcXHUwMDI2dHlwZV9zY2FubmVkKTtcXG4gXFx0bnJfaXNvbGF0ZWQgPSBpc29sYXRlZDtcXG4rXFx0aWYgKG5yX2lzb2xhdGVkKSB7XFxuK1xcdFxcdF9fbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIG5yX2lzb2xhdGVkKTtcXG4rXFx0XFx0YXRvbWljX2xvbmdfYWRkKG5yX2lzb2xhdGVkLCBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW4ubnJfaXNvbGF0ZWRbdHlwZV0pO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqL1xcbiBcXHRpZiAoc2Nhbm5lZClcXG5AQCAtNDk1OSw2ICs1MTAzLDkgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdGdvdG8gcmV0cnk7XFxuIFxcdH1cXG4gXFxuK1xcdGF0b21pY19sb25nX3N1Yihucl9pc29sYXRlZCwgXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuLm5yX2lzb2xhdGVkW3R5cGVdKTtcXG4rXFx0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIHR5cGUsIC1ucl9pc29sYXRlZCk7XFxuK1xcbiBcXHRpZiAobnJfaXNvbGF0ZWQgXFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXFxuIFxcdFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICsgdHlwZSxcXG4gXFx0XFx0XFx0XFx0IG5yX2lzb2xhdGVkIC0gdG90YWxfcmVjbGFpbWVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTY6NDcuODcyODE1MTI5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MzgwNzMxNDQxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aHJvdHRsZV9ldmljdGFibGVfdHlwZXNcIixcbiAgICBcImxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRcIixcbiAgICBcImlzb2xhdGVfZm9saW9zXCIsXG4gICAgXCJldmljdF9mb2xpb3NcIixcbiAgICBcImxydV9nZW5fc2VxX3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBpc29sYXRlZCBmb2xpbyBhY2NvdW50aW5nIGFuZCByZWNsYWltIHRocm90dGxpbmcgZm9yIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBpbiBtbS92bXNjYW4uYywgaW1wbGVtZW50aW5nIGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQoKSBhbmQgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzKCkgdG8gcHJldmVudCBleGNlc3NpdmUgZm9saW8gaXNvbGF0aW9uIGR1cmluZyBtZW1vcnkgcHJlc3N1cmUgYW5kIGRpcmVjdCByZWNsYWltLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODM2ZDk2NDMzYzBlZDc2ZDA3MTEyODk3YmRmMjY2NGIxYzI4NzgxN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDM6MTY6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuaW5kZXggOTRmOWMzZmY1NDE2MC4uODE5YjZjMDU5MTE2ZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbkBAIC01ODAsNiArNTgwLDggQEAgc3RydWN0IGxydV9nZW5fZm9saW8ge1xuIFx0LyogY2FuIGJlIG1vZGlmaWVkIHdpdGhvdXQgaG9sZGluZyB0aGUgTFJVIGxvY2sgKi9cbiBcdGF0b21pY19sb25nX3QgZXZpY3RlZFtOUl9ISVNUX0dFTlNdW0FOT05fQU5EX0ZJTEVdW01BWF9OUl9USUVSU107XG4gXHRhdG9taWNfbG9uZ190IHJlZmF1bHRlZFtOUl9ISVNUX0dFTlNdW0FOT05fQU5EX0ZJTEVdW01BWF9OUl9USUVSU107XG4rXHQvKiB0aGUgbnVtYmVyIG9mIGZvbGlvcyBpc29sYXRlZCBmcm9tIHRoaXMgbHJ1dmVjIGFuZCBiZWluZyByZWNsYWltZWQgKi9cbitcdGF0b21pY19sb25nX3QgbnJfaXNvbGF0ZWRbQU5PTl9BTkRfRklMRV07XG4gXHQvKiB3aGV0aGVyIHRoZSBtdWx0aS1nZW4gTFJVIGlzIGVuYWJsZWQgKi9cbiBcdGJvb2wgZW5hYmxlZDtcbiBcdC8qIHRoZSBtZW1jZyBnZW5lcmF0aW9uIHRoaXMgbHJ1X2dlbl9mb2xpbyBiZWxvbmdzIHRvICovXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggZjExNDkxZWU5ZWQ1Yy4uMjExODM5ZDEwOTA5YSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTQxNTEsMjUgKzQxNTEsMzQgQEAgc3RhdGljIHZvaWQgc2V0X2luaXRpYWxfcHJpb3JpdHkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbFxuIFx0c2MtXHUwMDNlcHJpb3JpdHkgPSBjbGFtcChwcmlvcml0eSwgREVGX1BSSU9SSVRZIC8gMiwgREVGX1BSSU9SSVRZKTtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3R5cGVfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbiB7XG4tXHRpbnQgZ2VuLCB0eXBlLCB6b25lO1xuK1x0aW50IGdlbiwgem9uZTtcbiBcdHVuc2lnbmVkIGxvbmcgc2VxLCB0b3RhbCA9IDA7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiBcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XG4gXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuIFxuLVx0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUodHlwZSwgc3dhcHBpbmVzcykge1xuLVx0XHRmb3IgKHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSBcdTAwM2M9IG1heF9zZXE7IHNlcSsrKSB7XG4tXHRcdFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xuLVx0XHRcdGZvciAoem9uZSA9IDA7IHpvbmUgXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKVxuLVx0XHRcdFx0dG90YWwgKz0gbWF4KFJFQURfT05DRShscnVnZW4tXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTtcbi1cdFx0fVxuK1x0Zm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXErKykge1xuK1x0XHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4rXHRcdGZvciAoem9uZSA9IDA7IHpvbmUgXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKVxuK1x0XHRcdHRvdGFsICs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gdG90YWw7XG4gfVxuIFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY19ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgdG90YWwgPSAwO1xuK1x0aW50IHR5cGU7XG4rXG4rXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKVxuK1x0XHR0b3RhbCArPSBscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShscnV2ZWMsIHR5cGUpO1xuK1xuK1x0cmV0dXJuIHRvdGFsO1xuK31cbitcbiBzdGF0aWMgYm9vbCBscnV2ZWNfaXNfc2l6YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgdG90YWw7XG5AQCAtNDgzOCwxNSArNDg0NywxMjggQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4gXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KTtcbiB9XG4gXG4rLypcbisgKiBUaGUgTUdMUlUgY291bnRlcnBhcnQgdG8gdG9vX21hbnlfaXNvbGF0ZWQoKS5cbisgKlxuKyAqIHRvb19tYW55X2lzb2xhdGVkKCkgY29tcGFyZXMgbm9kZS13aWRlIGlzb2xhdGVkIGNvdW50cyBhZ2FpbnN0XG4rICogbm9kZS13aWRlIGluYWN0aXZlIHNpemVzLiBJdCBwcmVkYXRlcyBwZXItbWVtY2cgTFJVIGxpc3RzLCB3aGljaFxuKyAqIG1vdmVkIGlzb2xhdGlvbiB0byBwZXItbHJ1dmVjIGdyYW51bGFyaXR5LiBNR0xSVSByZWNsYWltZXJzIGNvbnRlbmRcbisgKiBwZXIgbHJ1dmVjLCBzbyB0aGlzIGNoZWNrIGlzIHBlciBscnV2ZWMgYXMgd2VsbCwgYW5kIGlzb2xhdGlvbiBpblxuKyAqIG9uZSBtZW1jZyBkb2VzIG5vdCB0aHJvdHRsZSByZWNsYWltIGluIGFub3RoZXIuXG4rICpcbisgKiBUaGUgbGVnYWN5IHRocmVzaG9sZCwgdGhlIHNpemUgb2YgdGhlIGluYWN0aXZlIGxpc3QsIGlzIG5vdCB1c2FibGVcbisgKiBoZXJlIGVpdGhlcjogaW4gTUdMUlUgdGhlIGluYWN0aXZlIGNvdW50ZXJzIGFyZSBvbmx5IGEgY29tcGF0aWJpbGl0eVxuKyAqIHNoaW0gLSB0aGV5IGp1bXAgYXJvdW5kIHdoZW4gc3dhcCBydW5zIG91dCBvciBhIG1lbWNnIGhpdHMgaXRzIHN3YXBcbisgKiBsaW1pdCwgYW5kIHByb2FjdGl2ZSBhZ2luZyBjYW4gaW5mbGF0ZSB0aGVtLiBDb21wYXJlIGFnYWluc3QgdGhlXG4rICogdG90YWwgbnVtYmVyIG9mIGV2aWN0YWJsZSBwYWdlcyBvZiB0aGUgdHlwZSBkaXZpZGVkIGJ5IE1JTl9OUl9HRU5TLFxuKyAqIGFwcHJveGltYXRpbmcgdGhlIHNpemUgb2Ygb25lIGdlbmVyYXRpb24gLSB0aGUgc2FtZSB1bml0IHRoZVxuKyAqIG9yaWdpbmFsIE1HTFJVIGFnaW5nIGhldXJpc3RpY3MgdXNlZC5cbisgKi9cbitzdGF0aWMgYm9vbCBscnVfZ2VuX3Rvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbit7XG4rXHR1bnNpZ25lZCBsb25nIGlzb2xhdGVkLCBldmljdGFibGU7XG4rXG4rXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKCF3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHNjKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aXNvbGF0ZWQgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW4ubnJfaXNvbGF0ZWRbdHlwZV0pO1xuK1x0ZXZpY3RhYmxlID0gbHJ1dmVjX3R5cGVfZXZpY3RhYmxlX3NpemUobHJ1dmVjLCB0eXBlKTtcbitcbitcdC8qXG4rXHQgKiBHRlBfTk9JTy9HRlBfTk9GUyBjYWxsZXJzIGFyZSBhbGxvd2VkIHRvIGlzb2xhdGUgbW9yZSBwYWdlcywgc29cbitcdCAqIHRoZXkgd29uJ3QgYmUgYmxvY2tlZCBieSBub3JtYWwgZGlyZWN0LXJlY2xhaW1lcnMsIGZvcm1pbmcgYVxuK1x0ICogY2lyY3VsYXIgZGVhZGxvY2suXG4rXHQgKi9cbitcdGlmIChnZnBfaGFzX2lvX2ZzKHNjLVx1MDAzZWdmcF9tYXNrKSlcbitcdFx0ZXZpY3RhYmxlIFx1MDAzZVx1MDAzZT0gMztcbitcbitcdHJldHVybiBpc29sYXRlZCBcdTAwM2UgZXZpY3RhYmxlIC8gTUlOX05SX0dFTlM7XG4rfVxuK1xuKy8qXG4rICogVW5saWtlIHRoZSBsZWdhY3kgcGF0aCwgd2hlcmUgdGhlIExSVSBsaXN0IHRvIGlzb2xhdGUgZnJvbSBpcyBrbm93blxuKyAqIGJlZm9yZSBpc29sYXRpb24sIGlzb2xhdGVfZm9saW9zKCkgcGlja3MgdGhlIHR5cGUgZnJvbSB0aGUgcmVmYXVsdFxuKyAqIGZlZWRiYWNrIGFuZCBtYXkgZmFsbCBiYWNrIHRvIHRoZSBvdGhlciBvbmUuIFRoZXJlZm9yZSwgaW5zdGVhZCBvZlxuKyAqIHRocm90dGxpbmcgb24gYSBzaW5nbGUgdHlwZSwgY29sbGVjdCB0aGUgZXZpY3RhYmxlIHR5cGVzIHRoYXQgZG8gbm90XG4rICogaGF2ZSB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MsIGFuZCBvbmx5IHNsZWVwIHdoZW4gYWxsIG9mIHRoZW0gZG8uXG4rICpcbisgKiBSZXR1cm5zIHRoZSBtYXNrIG9mIHRoZSB0eXBlcyBpc29sYXRlX2ZvbGlvcygpIG1heSBpc29sYXRlIGZyb20sIG9yXG4rICogMCBpZiByZWNsYWltIHNob3VsZCBzdG9wLiBBbHNvIHNldHMgQGZhdGFsIHRvIHRlbGwgdGhlIGNhbGxlciB0aGF0XG4rICogdGhlIHRhc2sgcmVjZWl2ZWQgYSBmYXRhbCBzaWduYWwgd2hpbGUgd2FpdGluZy5cbisgKi9cbitzdGF0aWMgdW5zaWduZWQgaW50IHRocm90dGxlX2V2aWN0YWJsZV90eXBlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4rXHRcdFx0XHRcdCAgICAgaW50IHN3YXBwaW5lc3MsXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4rXHRcdFx0XHRcdCAgICAgYm9vbCAqZmF0YWwpXG4re1xuK1x0dW5zaWduZWQgaW50IGFsbG93ZWQ7XG4rXHRib29sIHN0YWxsZWQgPSBmYWxzZTtcbitcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbitcdGludCBpO1xuK1xuK1x0KmZhdGFsID0gZmFsc2U7XG4rXG4rXHRmb3IgKDs7KSB7XG4rXHRcdGFsbG93ZWQgPSAwO1xuK1x0XHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZShpLCBzd2FwcGluZXNzKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBBIHR5cGUgd2l0aCBubyBldmljdGFibGUgZm9saW9zIGhhcyBub3RoaW5nIHRvXG4rXHRcdFx0ICogaXNvbGF0ZS4gRG9uJ3QgYWxsb3cgaXQsIG90aGVyd2lzZSByZWNsYWltIGNhbiBiZVxuK1x0XHRcdCAqIHJlZGlyZWN0ZWQgdG8gaXQgYW5kIHNwaW4gbWFraW5nIG5vIHByb2dyZXNzLCBlLmcuXG4rXHRcdFx0ICogd2hlbiB0aGUgb25seSB0eXBlIHdpdGggZm9saW9zIGlzIG92ZXItaXNvbGF0ZWQuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKCFscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShscnV2ZWMsIGkpKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0aWYgKCFscnVfZ2VuX3Rvb19tYW55X2lzb2xhdGVkKGxydXZlYywgaSwgc2MpKVxuK1x0XHRcdFx0YWxsb3dlZCB8PSBCSVQoaSk7XG4rXHRcdH1cbitcbitcdFx0aWYgKGFsbG93ZWQpIHtcbitcdFx0XHQvKiBXYWtlIHVwIHJlY2xhaW1lcnMgd2FpdGluZyBvbiB0aGUgaXNvbGF0aW9uIHRvIGdvIGRvd24uICovXG4rXHRcdFx0d2FrZV90aHJvdHRsZV9pc29sYXRlZChwZ2RhdCk7XG4rXHRcdFx0cmV0dXJuIGFsbG93ZWQ7XG4rXHRcdH1cbitcbitcdFx0LypcbitcdFx0ICogQWxsIGV2aWN0YWJsZSB0eXBlcyBhcmUgb3Zlci1pc29sYXRlZC4gTGlrZSB0aGUgbGVnYWN5XG4rXHRcdCAqIHBhdGgsIHdhaXQgb25jZSBmb3IgY29uY3VycmVudCByZWNsYWltZXJzIHRvIHB1dCB0aGVpclxuK1x0XHQgKiBpc29sYXRlZCBmb2xpb3MgYmFjazsgZ2l2ZSB1cCBpZiB0aGF0IG1ha2VzIG5vIHByb2dyZXNzLlxuK1x0XHQgKi9cbitcdFx0aWYgKHN0YWxsZWQpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXG4rXHRcdHN0YWxsZWQgPSB0cnVlO1xuK1x0XHRyZWNsYWltX3Rocm90dGxlKHBnZGF0LCBWTVNDQU5fVEhST1RUTEVfSVNPTEFURUQpO1xuK1xuK1x0XHQvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovXG4rXHRcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuK1x0XHRcdCpmYXRhbCA9IHRydWU7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4gc3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcyxcbi1cdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWQsXG4tXHRcdFx0ICBpbnQgKmlzb2xhdGVfdHlwZSwgaW50ICppc29sYXRlX3NjYW5uZWQpXG4rXHRcdFx0ICB1bnNpZ25lZCBpbnQgYWxsb3dlZCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbitcdFx0XHQgIGludCAqaXNvbGF0ZWQsIGludCAqaXNvbGF0ZV90eXBlLCBpbnQgKmlzb2xhdGVfc2Nhbm5lZClcbiB7XG4gXHRpbnQgaTtcbiBcdGludCB0b3RhbF9zY2FubmVkID0gMDtcbiBcdGludCB0eXBlID0gZ2V0X3R5cGVfdG9fc2NhbihscnV2ZWMsIHN3YXBwaW5lc3MpO1xuIFxuK1x0LypcbitcdCAqIFRoZSBwcmVmZXJyZWQgdHlwZSBtYXkgaGF2ZSBiZWVuIGV4Y2x1ZGVkIGJ5XG4rXHQgKiB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKTsgc3RhcnQgZnJvbSB0aGUgb3RoZXIgb25lLlxuK1x0ICovXG4rXHRpZiAoIShhbGxvd2VkIFx1MDAyNiBCSVQodHlwZSkpKVxuK1x0XHR0eXBlID0gIXR5cGU7XG4rXG4gXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZShpLCBzd2FwcGluZXNzKSB7XG4gXHRcdGludCBzY2FubmVkO1xuIFx0XHRpbnQgdGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpO1xuQEAgLTQ4NjMsOSArNDk4NSwxMCBAQCBzdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHQvKlxuIFx0XHQgKiBJZiBzY2FubmVkIFx1MDAzZSAwIGFuZCBpc29sYXRlZCA9PSAwLCBhdm9pZCBmYWxsaW5nIGJhY2sgdG8gdGhlXG4gXHRcdCAqIG90aGVyIHR5cGUsIGFzIHRoaXMgdHlwZSByZW1haW5zIHN1ZmZpY2llbnQuIEZhbGxpbmcgYmFja1xuLVx0XHQgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLlxuK1x0XHQgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLiBPbmx5XG4rXHRcdCAqIGZhbGwgYmFjayB0byBhIHR5cGUgdGhhdCBpcyBub3QgdGhyb3R0bGVkLlxuIFx0XHQgKi9cbi1cdFx0aWYgKCFzY2FubmVkKVxuK1x0XHRpZiAoIXNjYW5uZWQgXHUwMDI2XHUwMDI2IChhbGxvd2VkIFx1MDAyNiBCSVQoIXR5cGUpKSlcbiBcdFx0XHR0eXBlID0gIXR5cGU7XG4gXHR9XG4gXG5AQCAtNDg4OCwxNSArNTAxMSwzNiBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdGJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4rXHR1bnNpZ25lZCBpbnQgYWxsb3dlZDtcbitcdGJvb2wgZmF0YWw7XG4rXG4rXHRhbGxvd2VkID0gdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzKGxydXZlYywgc3dhcHBpbmVzcywgc2MsIFx1MDAyNmZhdGFsKTtcbitcdGlmICghYWxsb3dlZCkge1xuK1x0XHQvKlxuK1x0XHQgKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIExpa2UgdGhlIGxlZ2FjeVxuK1x0XHQgKiBwYXRoLCBwcmV0ZW5kIHNvbWUgcGFnZXMgd2VyZSByZWNsYWltZWQgc28gcmVjbGFpbVxuK1x0XHQgKiB1bndpbmRzIHF1aWNrbHkgaW5zdGVhZCBvZiBsb29waW5nIGJhY2sgaW50byB0aGVcbitcdFx0ICogdGhyb3R0bGUuXG4rXHRcdCAqL1xuK1x0XHRpZiAoZmF0YWwpXG4rXHRcdFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkICs9IFNXQVBfQ0xVU1RFUl9NQVg7XG4rXG4rXHRcdHJldHVybiAwO1xuK1x0fVxuIFxuIFx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XG4gXG4gXHQvKiBJbiBjYXNlIGZvbGlvIGRlbGV0aW9uIGxlZnQgZW1wdHkgb2xkIGdlbnMsIGZsdXNoIHRoZW0gKi9cbiBcdHRyeV90b19pbmNfbWluX3NlcShscnV2ZWMsIHN3YXBwaW5lc3MpO1xuIFxuLVx0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsXG4rXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcywgYWxsb3dlZCxcbiBcdFx0XHRcdCBcdTAwMjZsaXN0LCBcdTAwMjZpc29sYXRlZCwgXHUwMDI2dHlwZSwgXHUwMDI2dHlwZV9zY2FubmVkKTtcbiBcdG5yX2lzb2xhdGVkID0gaXNvbGF0ZWQ7XG4rXHRpZiAobnJfaXNvbGF0ZWQpIHtcbitcdFx0X19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICsgdHlwZSxcbitcdFx0XHRcdCAgICAgIG5yX2lzb2xhdGVkKTtcbitcdFx0YXRvbWljX2xvbmdfYWRkKG5yX2lzb2xhdGVkLCBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuLm5yX2lzb2xhdGVkW3R5cGVdKTtcbitcdH1cbiBcbiBcdC8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovXG4gXHRpZiAoc2Nhbm5lZClcbkBAIC00OTU5LDYgKzUxMDMsOSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbiBcbitcdGF0b21pY19sb25nX3N1Yihucl9pc29sYXRlZCwgXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbi5ucl9pc29sYXRlZFt0eXBlXSk7XG4rXHRtb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICsgdHlwZSwgLW5yX2lzb2xhdGVkKTtcbitcbiBcdGlmIChucl9pc29sYXRlZCBcdTAwM2UgdG90YWxfcmVjbGFpbWVkKVxuIFx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIHR5cGUsXG4gXHRcdFx0XHQgbnJfaXNvbGF0ZWQgLSB0b3RhbF9yZWNsYWltZWQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTY6NDcuODcyODE2NjI5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODY4NTEwNzY5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1HTFJVIElzb2xhdGlvbiBUaHJvdHRsaW5nIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBoaXRzIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCBhbmQgYG1tL3Ztc2Nhbi5jYC4gSW1tZWRpYXRlbHksIEknbSB0aGlua2luZyBNR0xSVSwgd2hpY2ggaXMgYWx3YXlzIGludGVyZXN0aW5nLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB0aGUgZGV0YWlscy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRpbmcgc29tZSBpc29sYXRpb24gdGhyb3R0bGluZyBmb3IgTXVsdGktR2VuIExSVS5cblxuU3BlY2lmaWNhbGx5LCBpbiBgbW0vdm1zY2FuLmNgLCB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIHRyYWNraW5nIGlzb2xhdGVkIHBhZ2VzIGZvciB0aHJvdHRsaW5nLiBBIG5ldyBgYXRvbWljX2xvbmdfdCBucl9pc29sYXRlZFtBTk9OX0FORF9GSUxFXWAgZmllbGQgaXMgYmVpbmcgYWRkZWQgdG8gdGhlIGBscnVfZ2VuX2ZvbGlvYCBzdHJ1Y3QuIFdlIGhhdmUgYSBmZXcgbmV3IGZ1bmN0aW9ucyBhcyB3ZWxsOiBgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZGAsIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXNgLCBhbmQgdGhlcmUgYXJlIHVwZGF0ZXMgdG8gYGlzb2xhdGVfZm9saW9zYCBhbmQgYGV2aWN0X2ZvbGlvc2AuIFRoaXMgYWxsIHNlZW1zIHRvIGJlIGFib3V0IGltcGxlbWVudGluZyB0aGUgYWN0dWFsIHRocm90dGxpbmcgbWVjaGFuaXNtLiBUaGUgZ29hbCBpcyBsaWtlbHkgdG8gcHJldmVudCBhIHJ1bmF3YXkgc2l0dWF0aW9uIHdoZXJlIHRvbyBtYW55IHBhZ2VzIGFyZSBpc29sYXRlZCwgd2hpY2ggd291bGQgYmxvY2sgcHJvZ3Jlc3MuXG5cbk5vdywgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBJIHNob3VsZCBwcm9iYWJseSB1c2UgYGdyZXBwZXJgIG9yIGp1c3QganVtcCBpbnRvIGBtbS9LY29uZmlnYCB0byB2ZXJpZnkgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciBib3RoIE11bHRpLUdlbiBMUlUgKExSVV9HRU4sIHJpZ2h0PykgYW5kIHRoZSB2bXNjYW4gY29kZS4gR290dGEgbWFrZSBzdXJlIHdlJ3JlIG5vdCBicmVha2luZyBhbnkgcHJlLWV4aXN0aW5nIGNvbmZpZ3VyYXRpb25zIG9yIGVuYWJsaW5nIHRoaXMgaW4gYW4gdW5leHBlY3RlZCBzY2VuYXJpby4gTGV0J3Mgc2VlIGhvdyB0aGlzIGFsbCBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDUxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTY6NTYuNTU3OTI3OTM4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NjU5Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkxSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTE0MDMtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDUtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxMi1cXG5tbS9LY29uZmlnOjE0MTM6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxNC1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG5tbS9LY29uZmlnOjE0MTU6XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDE2LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWctMTQxOC1cXG5tbS9LY29uZmlnOjE0MTk6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MjAtXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbm1tL0tjb25maWc6MTQyMTpcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MjItXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZy0xNDI3LVxcbm1tL0tjb25maWc6MTQyODpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjktXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6MTQzMDpcXHRkZXBlbmRzIG9uIExSVV9HRU4gXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXFxubW0vS2NvbmZpZy0xNDMxLSMgfVxcbi0tXFxubW0vZm9saW8uYz0zMjI9c3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtMzUxLVxcbm1tL2ZvbGlvLmM6MzUyOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL2ZvbGlvLmMtMzUzLVxcbi0tXFxubW0vZm9saW8uYz0zNzg9c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTM5NS1cXG5tbS9mb2xpby5jOjM5NjojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5tbS9mb2xpby5jLTM5Ny1cXG4tLVxcbm1tL2ZvbGlvLmM9NDAyPXN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy00MDYtXFxubW0vZm9saW8uYzo0MDc6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vZm9saW8uYy00MDgtXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM2ODU9c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNzQ1LVxcdFxcdFxcdFxcdCAoMUwgXFx1MDAzY1xcdTAwM2MgUEdfZHJvcGJlaGluZCkgfFxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzc0NjpcXHRcXHRcXHRcXHQgTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfTUFTSykpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzc0Ny1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00NjI3PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDY0My1cXG5tbS9tZW1jb250cm9sLmM6NDY0NDojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS9tZW1jb250cm9sLmMtNDY0NS1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9nZW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00NjYzPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KSB7fVxcbm1tL21lbWNvbnRyb2wuYzo0NjY0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL21lbWNvbnRyb2wuYy00NjY1LVxcbi0tXFxubW0vbWVtb3J5LmM9NjcyOD1zdGF0aWMgaW5saW5lIHZvaWQgbW1fYWNjb3VudF9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5tbS9tZW1vcnkuYy02NzgwLVxcbm1tL21lbW9yeS5jOjY3ODE6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vbWVtb3J5LmMtNjc4Mi1zdGF0aWMgdm9pZCBscnVfZ2VuX2VudGVyX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vbWVtb3J5LmM9Njc5Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX2V4aXRfZmF1bHQodm9pZClcXG4tLVxcbm1tL21lbW9yeS5jLTY3OTktfVxcbm1tL21lbW9yeS5jOjY4MDA6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vbWVtb3J5LmMtNjgwMS1cXG4tLVxcbm1tL21tX2luaXQuYz0xMTI9dm9pZCBfX2luaXQgbW1pbml0X3ZlcmlmeV9wYWdlZmxhZ3NfbGF5b3V0KHZvaWQpXFxuLS1cXG5tbS9tbV9pbml0LmMtMTI1LVxcdFxcdEtBU0FOX1RBR19XSURUSCxcXG5tbS9tbV9pbml0LmM6MTI2OlxcdFxcdExSVV9HRU5fV0lEVEgsXFxubW0vbW1faW5pdC5jLTEyNy1cXHRcXHRMUlVfUkVGU19XSURUSCxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTgyNz1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xcbi0tXFxubW0vdm1zY2FuLmMtODMyLVxcbm1tL3Ztc2Nhbi5jOjgzMzojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy04MzQtLypcXG4tLVxcbm1tL3Ztc2Nhbi5jPTg2Mj1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuLS1cXG5tbS92bXNjYW4uYy04NjUtfVxcbm1tL3Ztc2Nhbi5jOjg2NjojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5tbS92bXNjYW4uYy04NjctXFxuLS1cXG5tbS92bXNjYW4uYz0yNjgwPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy0yNjkxLVxcbm1tL3Ztc2Nhbi5jOjI2OTI6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtMjY5My1cXG5tbS92bXNjYW4uYz0yNjk0PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xcbm1tL3Ztc2Nhbi5jOjI2OTU6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcXG5tbS92bXNjYW4uYzoyNjk2OkRFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcbm1tL3Ztc2Nhbi5jLTI2OTctI2RlZmluZSBnZXRfY2FwKGNhcClcXHRzdGF0aWNfYnJhbmNoX2xpa2VseShcXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXFxubW0vdm1zY2FuLmMtMjY5OC0jZWxzZVxcbm1tL3Ztc2Nhbi5jOjI2OTk6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfRkFMU0UobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcbm1tL3Ztc2Nhbi5jLTI3MDAtI2RlZmluZSBnZXRfY2FwKGNhcClcXHRzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI3MDM9c3RhdGljIGJvb2wgc2hvdWxkX3dhbGtfbW11KHZvaWQpXFxubW0vdm1zY2FuLmMtMjcwNC17XFxubW0vdm1zY2FuLmM6MjcwNTpcXHRyZXR1cm4gYXJjaF9oYXNfaHdfcHRlX3lvdW5nKCkgXFx1MDAyNlxcdTAwMjYgZ2V0X2NhcChMUlVfR0VOX01NX1dBTEspO1xcbm1tL3Ztc2Nhbi5jLTI3MDYtfVxcbi0tXFxubW0vdm1zY2FuLmM9MjcwOD1zdGF0aWMgYm9vbCBzaG91bGRfY2xlYXJfcG1kX3lvdW5nKHZvaWQpXFxubW0vdm1zY2FuLmMtMjcwOS17XFxubW0vdm1zY2FuLmM6MjcxMDpcXHRyZXR1cm4gYXJjaF9oYXNfaHdfbm9ubGVhZl9wbWRfeW91bmcoKSBcXHUwMDI2XFx1MDAyNiBnZXRfY2FwKExSVV9HRU5fTk9OTEVBRl9ZT1VORyk7XFxubW0vdm1zY2FuLmMtMjcxMS19XFxuLS1cXG5tbS92bXNjYW4uYy0yNzIxLVxcdHVuc2lnbmVkIGxvbmcgbWluX3NlcVtBTk9OX0FORF9GSUxFXSA9IHtcXHRcXHRcXHRcXFxcXFxubW0vdm1zY2FuLmM6MjcyMjpcXHRcXHRSRUFEX09OQ0UoKGxydXZlYyktXFx1MDAzZWxydWdlbi5taW5fc2VxW0xSVV9HRU5fQU5PTl0pLFxcdFxcXFxcXG5tbS92bXNjYW4uYzoyNzIzOlxcdFxcdFJFQURfT05DRSgobHJ1dmVjKS1cXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbTFJVX0dFTl9GSUxFXSksXFx0XFxcXFxcbm1tL3Ztc2Nhbi5jLTI3MjQtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmM9Mjg4MD1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4OTktXFxubW0vdm1zY2FuLmM6MjkwMDojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXFxubW0vdm1zY2FuLmMtMjkwMS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTMwMDk9dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0zMDM3LVxcbm1tL3Ztc2Nhbi5jOjMwMzg6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xcbm1tL3Ztc2Nhbi5jLTMwMzktXFxuLS1cXG5tbS92bXNjYW4uYz0zMjY5PXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbi0tXFxubW0vdm1zY2FuLmMtMzI4Ny1cXHRcXHQvKiBscnVfZ2VuX2RlbF9mb2xpbygpIGhhcyBpc29sYXRlZCB0aGlzIHBhZ2U/ICovXFxubW0vdm1zY2FuLmM6MzI4ODpcXHRcXHRpZiAoIShvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spKVxcbm1tL3Ztc2Nhbi5jLTMyODktXFx0XFx0XFx0cmV0dXJuIC0xO1xcbm1tL3Ztc2Nhbi5jLTMyOTAtXFxubW0vdm1zY2FuLmM6MzI5MTpcXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcXG5tbS92bXNjYW4uYzozMjkyOlxcdFxcdG5ld19mbGFncyB8PSAoKGdlbiArIDFVTCkgXFx1MDAzY1xcdTAwM2MgTFJVX0dFTl9QR09GRikgfCBCSVQoUEdfd29ya2luZ3NldCk7XFxubW0vdm1zY2FuLmMtMzI5My1cXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG5tbS92bXNjYW4uYy0zMjk0LVxcbm1tL3Ztc2Nhbi5jOjMyOTU6XFx0cmV0dXJuICgob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XFxubW0vdm1zY2FuLmMtMzI5Ni19XFxuLS1cXG5tbS92bXNjYW4uYz0zMjk5PXN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS92bXNjYW4uYy0zMzA1LVxcbm1tL3Ztc2Nhbi5jOjMzMDY6XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSwgZm9saW8pO1xcbm1tL3Ztc2Nhbi5jLTMzMDctXFxubW0vdm1zY2FuLmMtMzMwOC1cXHRkbyB7XFxubW0vdm1zY2FuLmM6MzMwOTpcXHRcXHRuZXdfZ2VuID0gKChvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spIFxcdTAwM2VcXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcXG5tbS92bXNjYW4uYy0zMzEwLVxcdFxcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xcbi0tXFxubW0vdm1zY2FuLmMtMzMxNS1cXG5tbS92bXNjYW4uYzozMzE2OlxcdFxcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xcbm1tL3Ztc2Nhbi5jOjMzMTc6XFx0XFx0bmV3X2ZsYWdzIHw9IChuZXdfZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGO1xcbm1tL3Ztc2Nhbi5jLTMzMTgtXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuLS1cXG5tbS92bXNjYW4uYz0zOTUzPXN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtMzk4OS1cXG5tbS92bXNjYW4uYzozOTkwOlxcdFxcdGlmIChtaW5fc2VxW0xSVV9HRU5fQU5PTl0gXFx1MDAzZSBzZXEgXFx1MDAyNlxcdTAwMjYgbWluX3NlcVtMUlVfR0VOX0ZJTEVdIFxcdTAwM2Mgc2VxKVxcbm1tL3Ztc2Nhbi5jOjM5OTE6XFx0XFx0XFx0bWluX3NlcVtMUlVfR0VOX0FOT05dID0gc2VxO1xcbm1tL3Ztc2Nhbi5jOjM5OTI6XFx0XFx0ZWxzZSBpZiAobWluX3NlcVtMUlVfR0VOX0ZJTEVdIFxcdTAwM2Ugc2VxIFxcdTAwMjZcXHUwMDI2IG1pbl9zZXFbTFJVX0dFTl9BTk9OXSBcXHUwMDNjIHNlcSlcXG5tbS92bXNjYW4uYzozOTkzOlxcdFxcdFxcdG1pbl9zZXFbTFJVX0dFTl9GSUxFXSA9IHNlcTtcXG5tbS92bXNjYW4uYy0zOTk0LVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwMDU9c3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy00MDM3LVxcdCAqIHRoZSBjdXJyZW50IG1heF9zZXEgbmVlZCB0byBiZSBjb3ZlcmVkLCBzaW5jZSBtYXhfc2VxKzEgY2FuIG92ZXJsYXBcXG5tbS92bXNjYW4uYzo0MDM4OlxcdCAqIHdpdGggbWluX3NlcVtMUlVfR0VOX0FOT05dIGlmIHN3YXBwaW5nIGlzIGNvbnN0cmFpbmVkLiBBbmQgaWYgdGhleSBkb1xcbm1tL3Ztc2Nhbi5jLTQwMzktXFx0ICogb3ZlcmxhcCwgY29sZC9ob3QgaW52ZXJzaW9uIGhhcHBlbnMuXFxuLS1cXG5tbS92bXNjYW4uYz00ODMxPXN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtNDgzNS1cXHRpZiAoc3dhcHBpbmVzcyBcXHUwMDNjPSBNSU5fU1dBUFBJTkVTUyArIDEpXFxubW0vdm1zY2FuLmM6NDgzNjpcXHRcXHRyZXR1cm4gTFJVX0dFTl9GSUxFO1xcbm1tL3Ztc2Nhbi5jLTQ4MzctXFxubW0vdm1zY2FuLmMtNDgzOC1cXHRpZiAoc3dhcHBpbmVzcyBcXHUwMDNlPSBNQVhfU1dBUFBJTkVTUylcXG5tbS92bXNjYW4uYzo0ODM5OlxcdFxcdHJldHVybiBMUlVfR0VOX0FOT047XFxubW0vdm1zY2FuLmMtNDg0MC1cXHQvKlxcbi0tXFxubW0vdm1zY2FuLmMtNDg0My1cXHQgKi9cXG5tbS92bXNjYW4uYzo0ODQ0OlxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgXFx1MDAyNnNwKTtcXG5tbS92bXNjYW4uYzo0ODQ1OlxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcXHUwMDI2cHYpO1xcbm1tL3Ztc2Nhbi5jLTQ4NDYtXFxuLS1cXG5tbS92bXNjYW4uYz01NTA1PXN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU1MjEtXFx0aWYgKGVuYWJsZWQpXFxubW0vdm1zY2FuLmM6NTUyMjpcXHRcXHRzdGF0aWNfYnJhbmNoX2VuYWJsZV9jcHVzbG9ja2VkKFxcdTAwMjZscnVfZ2VuX2NhcHNbTFJVX0dFTl9DT1JFXSk7XFxubW0vdm1zY2FuLmMtNTUyMy1cXHRlbHNlXFxubW0vdm1zY2FuLmM6NTUyNDpcXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGVfY3B1c2xvY2tlZChcXHUwMDI2bHJ1X2dlbl9jYXBzW0xSVV9HRU5fQ09SRV0pO1xcbm1tL3Ztc2Nhbi5jLTU1MjUtXFxuLS1cXG5tbS92bXNjYW4uYz01NTg2PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5tbS92bXNjYW4uYy01NTg5LVxcbm1tL3Ztc2Nhbi5jOjU1OTA6XFx0aWYgKGdldF9jYXAoTFJVX0dFTl9DT1JFKSlcXG5tbS92bXNjYW4uYzo1NTkxOlxcdFxcdGNhcHMgfD0gQklUKExSVV9HRU5fQ09SRSk7XFxubW0vdm1zY2FuLmMtNTU5Mi1cXG5tbS92bXNjYW4uYy01NTkzLVxcdGlmIChzaG91bGRfd2Fsa19tbXUoKSlcXG5tbS92bXNjYW4uYzo1NTk0OlxcdFxcdGNhcHMgfD0gQklUKExSVV9HRU5fTU1fV0FMSyk7XFxubW0vdm1zY2FuLmMtNTU5NS1cXG5tbS92bXNjYW4uYy01NTk2LVxcdGlmIChzaG91bGRfY2xlYXJfcG1kX3lvdW5nKCkpXFxubW0vdm1zY2FuLmM6NTU5NzpcXHRcXHRjYXBzIHw9IEJJVChMUlVfR0VOX05PTkxFQUZfWU9VTkcpO1xcbm1tL3Ztc2Nhbi5jLTU1OTgtXFxuLS1cXG5tbS92bXNjYW4uYz01NjAzPXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU2MTUtXFxubW0vdm1zY2FuLmM6NTYxNjpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlJfTFJVX0dFTl9DQVBTOyBpKyspIHtcXG5tbS92bXNjYW4uYy01NjE3LVxcdFxcdGJvb2wgZW5hYmxlZCA9IGNhcHMgXFx1MDAyNiBCSVQoaSk7XFxubW0vdm1zY2FuLmMtNTYxOC1cXG5tbS92bXNjYW4uYzo1NjE5OlxcdFxcdGlmIChpID09IExSVV9HRU5fQ09SRSlcXG5tbS92bXNjYW4uYy01NjIwLVxcdFxcdFxcdGxydV9nZW5fY2hhbmdlX3N0YXRlKGVuYWJsZWQpO1xcbi0tXFxubW0vdm1zY2FuLmM9NjA4MD1zdGF0aWMgaW50IF9faW5pdCBpbml0X2xydV9nZW4odm9pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwODItXFx0QlVJTERfQlVHX09OKE1JTl9OUl9HRU5TICsgMSBcXHUwMDNlPSBNQVhfTlJfR0VOUyk7XFxubW0vdm1zY2FuLmM6NjA4MzpcXHRCVUlMRF9CVUdfT04oQklUKExSVV9HRU5fV0lEVEgpIFxcdTAwM2M9IE1BWF9OUl9HRU5TKTtcXG5tbS92bXNjYW4uYy02MDg0LVxcbi0tXFxubW0vdm1zY2FuLmM9NjA5NT1sYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XFxubW0vdm1zY2FuLmMtNjA5Ni1cXG5tbS92bXNjYW4uYzo2MDk3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTYwOTgtXFxuLS1cXG5tbS92bXNjYW4uYz02MTA5PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MTEzLVxcbm1tL3Ztc2Nhbi5jOjYxMTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtNjExNS1cXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz0yMTM9c3RhdGljIHZvaWQgdW5wYWNrX3NoYWRvdyh2b2lkICpzaGFkb3csIGludCAqbWVtY2dpZHAsIHBnX2RhdGFfdCAqKnBnZGF0LFxcbi0tXFxubW0vd29ya2luZ3NldC5jLTIzMi1cXG5tbS93b3JraW5nc2V0LmM6MjMzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3dvcmtpbmdzZXQuYy0yMzQtXFxubW0vd29ya2luZ3NldC5jPTIzNT1zdGF0aWMgdm9pZCAqbHJ1X2dlbl9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTI1MC1cXG5tbS93b3JraW5nc2V0LmM6MjUxOlxcdEJVSUxEX0JVR19PTihMUlVfR0VOX1dJRFRIICsgTFJVX1JFRlNfV0lEVEggXFx1MDAzZVxcbm1tL3dvcmtpbmdzZXQuYy0yNTItXFx0XFx0ICAgICBCSVRTX1BFUl9MT05HIC0gbWF4KEVWSUNUSU9OX1NISUZULCBFVklDVElPTl9TSElGVF9BTk9OKSk7XFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MjkyPXN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtMzM2LVxcbm1tL3dvcmtpbmdzZXQuYzozMzc6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxubW0vd29ya2luZ3NldC5jLTMzOC1cXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz0zNTA9c3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy0zNTMtXFxubW0vd29ya2luZ3NldC5jOjM1NDojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5tbS93b3JraW5nc2V0LmMtMzU1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMzoxNjo1Ni42MTM1OTM1OTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NDM2NzAwMjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEtjb25maWc6IEEgVGFyZ2V0ZWQgSW5zcGVjdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGBtbS9LY29uZmlnYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHplcm9pbmcgaW4gYXJvdW5kIGxpbmUgMTQwMy4gVGhpcyBhcmVhIGxpa2VseSBkZWFscyB3aXRoIGEgc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgYSBzZXQgb2YgcmVsYXRlZCBvcHRpb25zLCBnaXZlbiB0aGUgY29udGV4dCBvZiB0aGUgS2NvbmZpZyBmaWxlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBvcHRpb24gaXRzZWxmLCBpdHMgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlIGFzc2lnbm1lbnRzLCBvciB0aGUgaGVscCB0ZXh0IHRoYXQgZ3VpZGVzIHVzZXJzLiBJdCdzIGEgdGFyZ2V0ZWQgYXBwcm9hY2g7IEknbSBub3QgZG9pbmcgYSBnZW5lcmFsIHN1cnZleS4gSSBoYXZlIGEgaHVuY2ggYWJvdXQgd2hhdCBJIGFtIGxvb2tpbmcgZm9yIHNvIEkgYW0gZ29pbmcgdG8gc2VlIGlmIG15IGh5cG90aGVzZXMgaG9sZCB1cCB3aGVuIEkgaW5zcGVjdCB0aGUgY29kZS4gSSBhbSBwcm9iYWJseSBsb29raW5nIGZvciBzb21lIHNwZWNpZmljIHNldHRpbmcgdGhhdCBjb250cm9scyB0aGUgdW5kZXJseWluZyBiZWhhdmlvci4gSSBhbSByZWFkeSB0byBkaWcgZGVlcGVyIGFzIG5lZWRlZC4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMzoxNzowMy4wNTAyOTgxNzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDAwOlxcdFxcdCAgcHVycG9zZXMuICBJdCBpcyByZXF1aXJlZCB0byBlbmFibGUgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBvblxcbjE0MDE6XFx0XFx0ICBmaWxlLWJhY2tlZCBtZW1vcnkgdHlwZXMgbGlrZSBzaG1lbSBhbmQgaHVnZXRsYmZzLlxcbjE0MDI6XFx0XFxuMTQwMzpcXHQjIG11bHRpLWdlbiBMUlUge1xcbjE0MDQ6XFx0Y29uZmlnIExSVV9HRU5cXG4xNDA1OlxcdFxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuMTQwNjpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbjE0MDc6XFx0XFx0IyBtYWtlIHN1cmUgZm9saW8tXFx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xcbjE0MDg6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXFxuMTQwOTpcXHRcXHRoZWxwXFxuMTQxMDpcXHRcXHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxcbjE0MTE6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXFxuMTQxMjpcXHRcXG4xNDEzOlxcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG4xNDE0OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbjE0MTU6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQxNjpcXHRcXHRoZWxwXFxuMTQxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cXG4xNDE4OlxcdFxcbjE0MTk6XFx0Y29uZmlnIExSVV9HRU5fU1RBVFNcXG4xNDIwOlxcdFxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4xNDIxOlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbjE0MjI6XFx0XFx0aGVscFxcbjE0MjM6XFx0XFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcXG4xNDI0OlxcdFxcdCAgZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cXG4xNDI1OlxcdFxcbjE0MjY6XFx0XFx0ICBUaGlzIG9wdGlvbiBoYXMgYSBwZXItbWVtY2cgYW5kIHBlci1ub2RlIG1lbW9yeSBvdmVyaGVhZC5cXG4xNDI3OlxcdFxcbjE0Mjg6XFx0Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxuMTQyOTpcXHRcXHRkZWZfYm9vbCB5XFxuMTQzMDpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU4gXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXFxuMTQzMTpcXHQjIH1cXG4xNDMyOlxcdFxcbjE0MzM6XFx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLXFxuMTQzNDpcXHQgICAgICAgZGVmX2Jvb2wgblxcbjE0MzU6XFx0XFxuMTQzNjpcXHRjb25maWcgUEVSX1ZNQV9MT0NLXFxuMTQzNzpcXHRcXHRkZWZfYm9vbCB5XFxuMTQzODpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLIFxcdTAwMjZcXHUwMDI2IE1NVSBcXHUwMDI2XFx1MDAyNiBTTVBcXG4xNDM5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTc6MDMuMDUwNDE1MjMzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgxMTY3NDAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgQ09ORklHX0xSVV9HRU5gIG9wdGlvbiwgd2hpY2ggSSBiZWxpZXZlIGlzIHRoZSBrZXkgaGVyZS4gTm93LCBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgc2VlbXMgdG8gYmUgdGhlIG9uZSB0aGF0IHR1cm5zIGl0IG9uIGJ5IGRlZmF1bHQsIGNvcnJlY3Q/IFJpZ2h0LCBnb3QgaXQuXG5cblRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZC4gSSdsbCBmb2N1cyBvbiB0aGUgY2hhbmdlcyBtYWRlIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBJIG5lZWQgdG8gcmVhZCBjYXJlZnVsbHkgYXJvdW5kIHRoZSBsaW5lcyB0aGF0IHdlcmUgbW9kaWZpZWQsIEkgd2FudCB0byBnZXQgdGhlIGNvbnRleHQgcmlnaHQuIEkgd2lsbCBzdHVkeSB0aG9zZSBzZWN0aW9ucyBmb3Igbm93LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDY3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMzoxNzowNS44NjIwOTIyNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNjI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0ODMwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0ODMwOlxcdFxcbjQ4MzE6XFx0c3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxuNDgzMjpcXHR7XFxuNDgzMzpcXHRcXHRzdHJ1Y3QgY3RybF9wb3Mgc3AsIHB2ID0ge307XFxuNDgzNDpcXHRcXG40ODM1OlxcdFxcdGlmIChzd2FwcGluZXNzIFxcdTAwM2M9IE1JTl9TV0FQUElORVNTICsgMSlcXG40ODM2OlxcdFxcdFxcdHJldHVybiBMUlVfR0VOX0ZJTEU7XFxuNDgzNzpcXHRcXG40ODM4OlxcdFxcdGlmIChzd2FwcGluZXNzIFxcdTAwM2U9IE1BWF9TV0FQUElORVNTKVxcbjQ4Mzk6XFx0XFx0XFx0cmV0dXJuIExSVV9HRU5fQU5PTjtcXG40ODQwOlxcdFxcdC8qXFxuNDg0MTpcXHRcXHQgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lXFxuNDg0MjpcXHRcXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXFxuNDg0MzpcXHRcXHQgKi9cXG40ODQ0OlxcdFxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgXFx1MDAyNnNwKTtcXG40ODQ1OlxcdFxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcXHUwMDI2cHYpO1xcbjQ4NDY6XFx0XFxuNDg0NzpcXHRcXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXFx1MDAyNnNwLCBcXHUwMDI2cHYpO1xcbjQ4NDg6XFx0fVxcbjQ4NDk6XFx0XFxuNDg1MDpcXHQvKlxcbjQ4NTE6XFx0ICogVGhlIE1HTFJVIGNvdW50ZXJwYXJ0IHRvIHRvb19tYW55X2lzb2xhdGVkKCkuXFxuNDg1MjpcXHQgKlxcbjQ4NTM6XFx0ICogdG9vX21hbnlfaXNvbGF0ZWQoKSBjb21wYXJlcyBub2RlLXdpZGUgaXNvbGF0ZWQgY291bnRzIGFnYWluc3RcXG40ODU0OlxcdCAqIG5vZGUtd2lkZSBpbmFjdGl2ZSBzaXplcy4gSXQgcHJlZGF0ZXMgcGVyLW1lbWNnIExSVSBsaXN0cywgd2hpY2hcXG40ODU1OlxcdCAqIG1vdmVkIGlzb2xhdGlvbiB0byBwZXItbHJ1dmVjIGdyYW51bGFyaXR5LiBNR0xSVSByZWNsYWltZXJzIGNvbnRlbmRcXG40ODU2OlxcdCAqIHBlciBscnV2ZWMsIHNvIHRoaXMgY2hlY2sgaXMgcGVyIGxydXZlYyBhcyB3ZWxsLCBhbmQgaXNvbGF0aW9uIGluXFxuNDg1NzpcXHQgKiBvbmUgbWVtY2cgZG9lcyBub3QgdGhyb3R0bGUgcmVjbGFpbSBpbiBhbm90aGVyLlxcbjQ4NTg6XFx0ICpcXG40ODU5OlxcdCAqIFRoZSBsZWdhY3kgdGhyZXNob2xkLCB0aGUgc2l6ZSBvZiB0aGUgaW5hY3RpdmUgbGlzdCwgaXMgbm90IHVzYWJsZVxcbjQ4NjA6XFx0ICogaGVyZSBlaXRoZXI6IGluIE1HTFJVIHRoZSBpbmFjdGl2ZSBjb3VudGVycyBhcmUgb25seSBhIGNvbXBhdGliaWxpdHlcXG40ODYxOlxcdCAqIHNoaW0gLSB0aGV5IGp1bXAgYXJvdW5kIHdoZW4gc3dhcCBydW5zIG91dCBvciBhIG1lbWNnIGhpdHMgaXRzIHN3YXBcXG40ODYyOlxcdCAqIGxpbWl0LCBhbmQgcHJvYWN0aXZlIGFnaW5nIGNhbiBpbmZsYXRlIHRoZW0uIENvbXBhcmUgYWdhaW5zdCB0aGVcXG40ODYzOlxcdCAqIHRvdGFsIG51bWJlciBvZiBldmljdGFibGUgcGFnZXMgb2YgdGhlIHR5cGUgZGl2aWRlZCBieSBNSU5fTlJfR0VOUyxcXG40ODY0OlxcdCAqIGFwcHJveGltYXRpbmcgdGhlIHNpemUgb2Ygb25lIGdlbmVyYXRpb24gLSB0aGUgc2FtZSB1bml0IHRoZVxcbjQ4NjU6XFx0ICogb3JpZ2luYWwgTUdMUlUgYWdpbmcgaGV1cmlzdGljcyB1c2VkLlxcbjQ4NjY6XFx0ICovXFxuNDg2NzpcXHRzdGF0aWMgYm9vbCBscnVfZ2VuX3Rvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsXFxuNDg2ODpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG40ODY5OlxcdHtcXG40ODcwOlxcdFxcdHVuc2lnbmVkIGxvbmcgaXNvbGF0ZWQsIGV2aWN0YWJsZTtcXG40ODcxOlxcdFxcbjQ4NzI6XFx0XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXFxuNDg3MzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNDg3NDpcXHRcXG40ODc1OlxcdFxcdGlmICghd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzYykpXFxuNDg3NjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNDg3NzpcXHRcXG40ODc4OlxcdFxcdGlzb2xhdGVkID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW4ubnJfaXNvbGF0ZWRbdHlwZV0pO1xcbjQ4Nzk6XFx0XFx0ZXZpY3RhYmxlID0gbHJ1dmVjX3R5cGVfZXZpY3RhYmxlX3NpemUobHJ1dmVjLCB0eXBlKTtcXG40ODgwOlxcdFxcbjQ4ODE6XFx0XFx0LypcXG40ODgyOlxcdFxcdCAqIEdGUF9OT0lPL0dGUF9OT0ZTIGNhbGxlcnMgYXJlIGFsbG93ZWQgdG8gaXNvbGF0ZSBtb3JlIHBhZ2VzLCBzb1xcbjQ4ODM6XFx0XFx0ICogdGhleSB3b24ndCBiZSBibG9ja2VkIGJ5IG5vcm1hbCBkaXJlY3QtcmVjbGFpbWVycywgZm9ybWluZyBhXFxuNDg4NDpcXHRcXHQgKiBjaXJjdWxhciBkZWFkbG9jay5cXG40ODg1OlxcdFxcdCAqL1xcbjQ4ODY6XFx0XFx0aWYgKGdmcF9oYXNfaW9fZnMoc2MtXFx1MDAzZWdmcF9tYXNrKSlcXG40ODg3OlxcdFxcdFxcdGV2aWN0YWJsZSBcXHUwMDNlXFx1MDAzZT0gMztcXG40ODg4OlxcdFxcbjQ4ODk6XFx0XFx0cmV0dXJuIGlzb2xhdGVkIFxcdTAwM2UgZXZpY3RhYmxlIC8gTUlOX05SX0dFTlM7XFxuNDg5MDpcXHR9XFxuNDg5MTpcXHRcXG40ODkyOlxcdC8qXFxuNDg5MzpcXHQgKiBVbmxpa2UgdGhlIGxlZ2FjeSBwYXRoLCB3aGVyZSB0aGUgTFJVIGxpc3QgdG8gaXNvbGF0ZSBmcm9tIGlzIGtub3duXFxuNDg5NDpcXHQgKiBiZWZvcmUgaXNvbGF0aW9uLCBpc29sYXRlX2ZvbGlvcygpIHBpY2tzIHRoZSB0eXBlIGZyb20gdGhlIHJlZmF1bHRcXG40ODk1OlxcdCAqIGZlZWRiYWNrIGFuZCBtYXkgZmFsbCBiYWNrIHRvIHRoZSBvdGhlciBvbmUuIFRoZXJlZm9yZSwgaW5zdGVhZCBvZlxcbjQ4OTY6XFx0ICogdGhyb3R0bGluZyBvbiBhIHNpbmdsZSB0eXBlLCBjb2xsZWN0IHRoZSBldmljdGFibGUgdHlwZXMgdGhhdCBkbyBub3RcXG40ODk3OlxcdCAqIGhhdmUgdG9vIG1hbnkgaXNvbGF0ZWQgZm9saW9zLCBhbmQgb25seSBzbGVlcCB3aGVuIGFsbCBvZiB0aGVtIGRvLlxcbjQ4OTg6XFx0ICpcXG40ODk5OlxcdCAqIFJldHVybnMgdGhlIG1hc2sgb2YgdGhlIHR5cGVzIGlzb2xhdGVfZm9saW9zKCkgbWF5IGlzb2xhdGUgZnJvbSwgb3JcXG40OTAwOlxcdCAqIDAgaWYgcmVjbGFpbSBzaG91bGQgc3RvcC4gQWxzbyBzZXRzIEBmYXRhbCB0byB0ZWxsIHRoZSBjYWxsZXIgdGhhdFxcbjQ5MDE6XFx0ICogdGhlIHRhc2sgcmVjZWl2ZWQgYSBmYXRhbCBzaWduYWwgd2hpbGUgd2FpdGluZy5cXG40OTAyOlxcdCAqL1xcbjQ5MDM6XFx0c3RhdGljIHVuc2lnbmVkIGludCB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbjQ5MDQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBpbnQgc3dhcHBpbmVzcyxcXG40OTA1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuNDkwNjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGJvb2wgKmZhdGFsKVxcbjQ5MDc6XFx0e1xcbjQ5MDg6XFx0XFx0dW5zaWduZWQgaW50IGFsbG93ZWQ7XFxuNDkwOTpcXHRcXHRib29sIHN0YWxsZWQgPSBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTc6MDUuODYyNDAwMjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTUyODkyMzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyB0aGVzZSBldmljdGlvbiBmdW5jdGlvbnMuXG5cbioqRGVjb25zdHJ1Y3RpbmcgRm9saW8gRXZpY3Rpb24gYW5kIElzb2xhdGlvbioqXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbGVycyBhbmQgdGhlIGNhbGwgc3RhY2sgcmVsYXRlZCB0byBgZXZpY3RfZm9saW9zYCwgYGlzb2xhdGVfZm9saW9zYCwgYW5kIHJlbGF0ZWQgcm91dGluZXMuIFVuZGVyc3RhbmRpbmcgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbnZva2VkIGlzIGtleSB0byBncmFzcGluZyB0aGVpciBvdmVyYWxsIHJvbGUgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxpZmVjeWNsZS4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0LlxuXG5UaGVuLCBJJ20gZ29pbmcgdG8gcGlucG9pbnQgdGhlIGRlZmluaXRpb24gb2YgYGV2aWN0X2ZvbGlvc2AsIHNvIEkgd2lsbCBzZWFyY2ggaW4gYG1tL3Ztc2Nhbi5jYC4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlIHBhZ2UvZm9saW8gc2Nhbm5pbmcgYW5kIHJlY2xhaW1pbmcgcHJvY2Vzcywgc28gdGhhdCBsb2NhdGlvbiBtYWtlcyBzZW5zZSBhcyBhIHN0YXJ0aW5nIHBvaW50LiBGcm9tIHRoZXJlLCBJJ2xsIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGhvdyBgZXZpY3RfZm9saW9zYCBpbnRlcmFjdHMgd2l0aCB0aGUgc3Vycm91bmRpbmcgY29kZSwgYW5kIGlkZW50aWZ5IG90aGVyIHBvaW50cyBvZiBpbnRlcmVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NTEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAzOjE3OjA4LjAxNTI5NDkyOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMzNzc0MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXZpY3RfZm9saW9zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ5NTY9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5OTctXFxubW0vdm1zY2FuLmM6NDk5ODpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00OTk5LVxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxOTk9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyMjItXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTIyMzpcXHRcXHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTIyNC1cXHRcXHRpZiAoIWRlbHRhKVxcbi0tXFxubW0vdm1zY2FuLmM9NTgyNj1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4NDYtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xcbm1tL3Ztc2Nhbi5jOjU4NDc6XFx0XFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxcbm1tL3Ztc2Nhbi5jLTU4NDgtXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAzOjE3OjA4LjA2ODY5MDM1NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODE5MDAyMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnM6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBFdmljdGlvbiBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgcnVuX2V2aWN0aW9uYC4gTXkgZmlyc3QgcXVlc3Rpb24gaXMgYWx3YXlzOiB3aGVyZSBhcmUgdGhlc2UgdGhpbmdzIGFjdHVhbGx5ICp1c2VkKj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZWlyIHB1cnBvc2Ugd2l0aGluIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoZW0gdGhyb3VnaCB0aGUgY29kZSBiYXNlIGFuZCBzZWUgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlc2UgZXZpY3Rpb24gYW5kIHNocmlua2luZyBvcGVyYXRpb25zIGFyZSBhY3R1YWxseSB0cmlnZ2VyZWQuIEFyZSB0aGV5IHBhcnQgb2YgYSBzY2hlZHVsZWQgYmFja2dyb3VuZCB0YXNrPyBBcmUgdGhleSBpbiByZXNwb25zZSB0byBtZW1vcnkgcHJlc3N1cmU/IEFyZSB0aGV5IHJlYWN0aW5nIHRvIHNwZWNpZmljIGV2ZW50cyB3aXRoaW4gdGhlIExSVSBjYWNoZSBpdHNlbGY/IEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgaXMgdGhlIGVzc2VudGlhbCBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgd2hhdCdzIHJlYWxseSBnb2luZyBvbiB3aXRoIHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgc3RvcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjk1LCJPdXRwdXRUb2tlbnMiOjYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTc6MTAuODg3Njk1NzczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTE1NzM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fc2hyaW5rX2xydXZlY3xydW5fZXZpY3Rpb258bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjfGxydV9nZW5fc2hyaW5rX25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTE2ND1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE5OC0gKi9cXG5tbS92bXNjYW4uYzo1MTk5OnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTIwMC17XFxuLS1cXG5tbS92bXNjYW4uYz01MjQ0PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI2My1cXG5tbS92bXNjYW4uYzo1MjY0OlxcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNTI2NS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUyODU9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MzU0LVxcbm1tL3Ztc2Nhbi5jOjUzNTU6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTM1Ni17XFxuLS1cXG5tbS92bXNjYW4uYy01MzY3LVxcbm1tL3Ztc2Nhbi5jOjUzNjg6XFx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxcbm1tL3Ztc2Nhbi5jLTUzNjktXFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xcbi0tXFxubW0vdm1zY2FuLmMtNTM3NS1cXG5tbS92bXNjYW4uYzo1Mzc2OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTM3Ny17XFxuLS1cXG5tbS92bXNjYW4uYz01ODE1PXN0YXRpYyBpbnQgcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy01ODI1LVxcbm1tL3Ztc2Nhbi5jOjU4MjY6c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxubW0vdm1zY2FuLmMtNTgyNy1cXHRcXHRcXHRpbnQgc3dhcHBpbmVzcywgdW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbi0tXFxubW0vdm1zY2FuLmM9NTg1Nj1zdGF0aWMgaW50IHJ1bl9jbWQoY2hhciBjbWQsIHU2NCBtZW1jZ19pZCwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy01ODg3LVxcdGNhc2UgJy0nOlxcbm1tL3Ztc2Nhbi5jOjU4ODg6XFx0XFx0ZXJyID0gcnVuX2V2aWN0aW9uKGxydXZlYywgc2VxLCBzYywgc3dhcHBpbmVzcywgb3B0KTtcXG5tbS92bXNjYW4uYy01ODg5LVxcdFxcdGJyZWFrO1xcbi0tXFxubW0vdm1zY2FuLmM9NjA5OT1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjEwMy1cXG5tbS92bXNjYW4uYzo2MTA0OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYxMDUte1xcbi0tXFxubW0vdm1zY2FuLmMtNjEwOC1cXG5tbS92bXNjYW4uYzo2MTA5OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNjExMC17XFxuLS1cXG5tbS92bXNjYW4uYz02MTE2PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxMjctXFx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcXHUwMDI2XFx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xcbm1tL3Ztc2Nhbi5jOjYxMjg6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYxMjktXFxuLS1cXG5tbS92bXNjYW4uYz02Mzg2PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjM5My1cXHRcXHRtZW1zZXQoXFx1MDAyNnNjLVxcdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVxcdTAwM2VucikpO1xcbm1tL3Ztc2Nhbi5jOjYzOTQ6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYzOTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAzOjE3OjEwLjk0Mjg2MTYxOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTU5MjI0ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gTWVtb3J5IFJlY2xhbWF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IG1lbW9yeSByZWNsYW1hdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRoZSBtYWluIHBhdGhzLiBJIGtub3cgdGhhdCBgc2hyaW5rX2xydXZlY2AgYW5kIGBzaHJpbmtfbm9kZWAgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLCB0b3VjaGluZyBvbiBkaXJlY3QgcmVjbGFpbSwga3N3YXBkLCBhbmQgbWVtb3J5IGNncm91cCAobWVtY2cpIHJlY2xhaW0gbWVjaGFuaXNtcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZXNlIGFuZCBtYXliZSBmb2N1cyBvbiB0aGUgbmV3ZXIgcGFydHMgaW4gdGhlc2UgcGF0aHMuXG5cbkJleW9uZCB0aGF0LCBJIHJlbWVtYmVyIHRoZSBkZWJ1Z2ZzIGFuZCBzeXNmcyBpbnRlcmZhY2VzLCBsaWtlIHRoZSBvbmVzIHVuZGVyIGAvc3lzL2tlcm5lbC9tbS9scnVfZ2VuL2AuIFRob3NlIGNhbiBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHRzLCBsaWtlIHRocm91Z2ggaW50ZXJmYWNlcyBsaWtlIGBscnVfZ2VuX3NlcV93cml0ZWAgYW5kIGBydW5fY21kYC4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgYGxydV9nZW5fc2VxX3dyaXRlYCwgb3IgbWF5YmUgc29tZSBvZiB0aGUgb3RoZXIgc3lzZnMgaW50ZXJmYWNlcywgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBwZXJzcGVjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NjYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTc6MTMuOTAyMDkxMjY3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM4NjM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydW5fY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTU4MjY9c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy01ODU1LVxcbm1tL3Ztc2Nhbi5jOjU4NTY6c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbm1tL3Ztc2Nhbi5jLTU4NTctXFx0XFx0ICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLCB1bnNpZ25lZCBsb25nIG9wdClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU4OTg9c3RhdGljIHNzaXplX3QgbHJ1X2dlbl9zZXFfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsXFxuLS1cXG5tbS92bXNjYW4uYy01OTY2LVxcbm1tL3Ztc2Nhbi5jOjU5Njc6XFx0XFx0ZXJyID0gcnVuX2NtZChjbWQsIG1lbWNnX2lkLCBuaWQsIHNlcSwgXFx1MDAyNnNjLCBzd2FwcGluZXNzLCBvcHQpO1xcbm1tL3Ztc2Nhbi5jLTU5NjgtXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTc6MTMuOTUwNDgzMTUzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4NDI0Nzc5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIHByZXR0eSBjcml0aWNhbCBzdHVmZjogdGhlIGNvcmUga2VybmVsIGxvZ2ljIGZvciBNR0xSVSBwYWdlIHJlY2xhbWF0aW9uIGFuZCBpc29sYXRpb24gdGhyb3R0bGluZy4gSW5zdGFudGx5LCBteSBleHBlcnQgYnJhaW4gc2NyZWFtcywgXCJGdXp6IGl0IVwiIEdpdmVuIHRoYXQgaXQncyBhbHRlcmluZyBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgTUdMUlUgZnJhbWV3b3JrIChpbnRyb2R1Y2luZyB0aGluZ3MgbGlrZSBgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZGAsIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXNgLCBhdG9taWMgY291bnRlciBtYW5pcHVsYXRpb25zLCBhbmQgcmV0cnkvYWJvcnQgbG9naWMgZm9yIHNpZ25hbCBoYW5kbGluZyksIGl04oCZcyBwcmFjdGljYWxseSBiZWdnaW5nIGZvciBpdC4gVGhpcyBpcyBhIHByaW1lIHRhcmdldCBmb3IgdW5jb3ZlcmluZyBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuTm93LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrczpcblxuMS4gIGBXb3J0aEZ1enppbmdgOiBEZWZpbml0ZWx5IGEgcmVzb3VuZGluZyBcInllc1wiLiBXZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbCwgc28gdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYnVncyBoZXJlIGlzIGh1Z2UuXG5cbjIuICBgRW5hYmxlQ29uZmlnc2A6IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBMb29rcyBsaWtlIGBMUlVfR0VOYCBpcyBlc3NlbnRpYWwsIGEgYm9vbCBkZXBlbmRlbnQgb24gYE1NVWAsIGA2NEJJVGAsIGAhU1BBUlNFTUVNYCBvciBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBBbmQgb2YgY291cnNlLCBgTFJVX0dFTl9FTkFCTEVEYCwgd2hpY2ggZGVwZW5kcyBvbiBgTFJVX0dFTmAuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgdHdvIGFyZSBzdWZmaWNpZW50IG9yIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucywgc3VjaCBhcyBgTFJVX0dFTl9TVEFUU2AgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkgc2hvdWxkIGFsc28gZG8gYSBxdWljayBncmVwIHNlYXJjaCBmb3IgYW55dGhpbmcgZWxzZSByZWxhdGVkIHRvIGBscnVfZ2VuYCBvciBgdm1zY2FuLmNgIHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2guIEknbGwgc2VhcmNoIHRoZSByZXBvIGZvciBgQ09ORklHX0xSVV9HRU5gIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjQwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAzOjE3OjE3Ljc5Mjk2NDYyM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxMTA3MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0xSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZvbGlvLmM9MzIyPXN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTM1MS1cXG5tbS9mb2xpby5jOjM1MjojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS9mb2xpby5jLTM1My1cXG4tLVxcbm1tL2ZvbGlvLmM9Mzc4PXN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy0zOTUtXFxubW0vZm9saW8uYzozOTY6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxubW0vZm9saW8uYy0zOTctXFxuLS1cXG5tbS9mb2xpby5jPTQwMj1zdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNDA2LVxcbm1tL2ZvbGlvLmM6NDA3OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL2ZvbGlvLmMtNDA4LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ2Mjc9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NjQzLVxcbm1tL21lbWNvbnRyb2wuYzo0NjQ0OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL21lbWNvbnRyb2wuYy00NjQ1LXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ2NjM9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9scnVfZ2VuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpIHt9XFxubW0vbWVtY29udHJvbC5jOjQ2NjQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vbWVtY29udHJvbC5jLTQ2NjUtXFxuLS1cXG5tbS9tZW1vcnkuYz02NzI4PXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9hY2NvdW50X2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyxcXG4tLVxcbm1tL21lbW9yeS5jLTY3ODAtXFxubW0vbWVtb3J5LmM6Njc4MTojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS9tZW1vcnkuYy02NzgyLXN0YXRpYyB2b2lkIGxydV9nZW5fZW50ZXJfZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9tZW1vcnkuYz02Nzk3PXN0YXRpYyB2b2lkIGxydV9nZW5fZXhpdF9mYXVsdCh2b2lkKVxcbi0tXFxubW0vbWVtb3J5LmMtNjc5OS19XFxubW0vbWVtb3J5LmM6NjgwMDojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5tbS9tZW1vcnkuYy02ODAxLVxcbi0tXFxubW0vdm1zY2FuLmM9ODI3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04MzItXFxubW0vdm1zY2FuLmM6ODMzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTgzNC0vKlxcbi0tXFxubW0vdm1zY2FuLmM9ODYyPXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg2NS19XFxubW0vdm1zY2FuLmM6ODY2OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTg2Ny1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2ODA9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2OTEtXFxubW0vdm1zY2FuLmM6MjY5MjojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy0yNjkzLVxcbm1tL3Ztc2Nhbi5jPTI2OTQ9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XFxubW0vdm1zY2FuLmM6MjY5NTojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbm1tL3Ztc2Nhbi5jLTI2OTYtREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODgwPXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg5OS1cXG5tbS92bXNjYW4uYzoyOTAwOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5tbS92bXNjYW4uYy0yOTAxLVxcbi0tXFxubW0vdm1zY2FuLmM9MzAwOT12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwMzctXFxubW0vdm1zY2FuLmM6MzAzODojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXFxubW0vdm1zY2FuLmMtMzAzOS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwOTU9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xcbm1tL3Ztc2Nhbi5jLTYwOTYtXFxubW0vdm1zY2FuLmM6NjA5NzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5tbS92bXNjYW4uYy02MDk4LVxcbi0tXFxubW0vdm1zY2FuLmM9NjEwOT1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjExMy1cXG5tbS92bXNjYW4uYzo2MTE0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTYxMTUtXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MjEzPXN0YXRpYyB2b2lkIHVucGFja19zaGFkb3codm9pZCAqc2hhZG93LCBpbnQgKm1lbWNnaWRwLCBwZ19kYXRhX3QgKipwZ2RhdCxcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy0yMzItXFxubW0vd29ya2luZ3NldC5jOjIzMzojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS93b3JraW5nc2V0LmMtMjM0LVxcbi0tXFxubW0vd29ya2luZ3NldC5jPTI5Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTMzNi1cXG5tbS93b3JraW5nc2V0LmM6MzM3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3dvcmtpbmdzZXQuYy0zMzgtXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MzUwPXN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtMzUzLVxcbm1tL3dvcmtpbmdzZXQuYzozNTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vd29ya2luZ3NldC5jLTM1NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTc6MTcuODQ2MDgxODhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjYxNTQ2OTg0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBMUlUgR2VuZXJhdGlvbiBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBMUlUgZ2VuZXJhdGlvbiBmdXp6aW5nIHNldHVwLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgc3ltYm9scyB0byBmb2N1cyBvbiwga2VlcGluZyBpbiBtaW5kIHRoZSBndWlkYW5jZTogXCIxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLiBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlwiIFNvLCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIG1ha2Ugc3VyZSBgQ09ORklHX0xSVV9HRU5gIGFuZCBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgYXJlIHNldCBhcHByb3ByaWF0ZWx5LlxuXG5Ob3csIGxldCdzIGV4YW1pbmUgYEZvY3VzU3ltYm9sc2AgdG8gc2VlIHdoYXQncyBhbHJlYWR5IHRoZXJlIGFuZCBpZiBJIG5lZWQgdG8gYWRkIGFueXRoaW5nLiBNeSBhdHRlbnRpb24gaXMgZHJhd24gdG8gdGhlIGBtbS92bXNjYW4uY2AgZmlsZSBzaW5jZSBpdCBzZWVtcyByZWxldmFudCB0byB0aGlzIGFyZWEgb2YgbWVtb3J5IG1hbmFnZW1lbnQuIEkgc2VlIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGluIHRoZXJlIHRoYXQgZGVhbCB3aXRoIGlzb2xhdGlvbiBhbmQgTFJVIGdlbmVyYXRpb24gYnV0IGl0IGlzIGltcG9ydGFudCB0byByZW1lbWJlciB3aGF0IGtpbmQgb2YgZnVuY3Rpb25zIGFyZSBwcmVmZXJyZWQgdG8gYmUgdGFyZ2V0ZWQuIEkgc2VlIGBldmljdF9mb2xpb3NgLCBgaXNvbGF0ZV9mb2xpb3NgLCBgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZGAsIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXNgLCBhbmQgYGxydXZlY190eXBlX2V2aWN0YWJsZV9zaXplYCwgYnV0IGFsbCBvZiB0aGVzZSBhcmUgc3RhdGljLCBzbyB0aGV5J3JlIGxpa2VseSBoZWxwZXIgZnVuY3Rpb25zLiBgbHJ1X2dlbl9zZXFfd3JpdGVgIGlzIGEgZmlsZSBvcGVyYXRpb25zIGhhbmRsZXIsIHdoaWNoIG1pZ2h0IGJlIGludGVyZXN0aW5nIGlmIGl0IGV4cG9zZXMgc29tZXRoaW5nIHVzZWZ1bC4gTGV0J3MgZGlnIGRlZXBlci4gVGhlIHN0cmF0ZWd5IGhlcmUgaXMgY2xlYXI6IHBpbnBvaW50IHRoZSBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMgb3IgQVBJIGVudHJ5IHBvaW50cy4gVGhhdCBtZWFucyBJIG5lZWQgdG8gY2FyZWZ1bGx5IGFuYWx5emUgKmFsbCogZnVuY3Rpb25zIGluIGBtbS92bXNjYW4uY2AgdGhhdCByZWxhdGUgdG8gTFJVX0dFTiBvciBpc29sYXRpb24gdG8gaWRlbnRpZnkgYW55IHZpYWJsZSBjYW5kaWRhdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQwOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMzoxNzoyNC40NjE1NTUxODRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5OTQ1MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzM0IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5tbS92bXNjYW4uYz04Mjc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgzOS0gKi9cXG5tbS92bXNjYW4uYzo4NDA6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbm1tL3Ztc2Nhbi5jLTg0MS17XFxuLS1cXG5tbS92bXNjYW4uYy04NjEtI2Vsc2VcXG5tbS92bXNjYW4uYzo4NjI6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbm1tL3Ztc2Nhbi5jLTg2My17XFxuLS1cXG5tbS92bXNjYW4uYz04Njg9c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy04OTItXFxubW0vdm1zY2FuLmM6ODkzOlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSkge1xcbm1tL3Ztc2Nhbi5jLTg5NC1cXHRcXHRpZiAoIXJlZmVyZW5jZWRfcHRlcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg5Ni1cXG5tbS92bXNjYW4uYzo4OTc6XFx0XFx0cmV0dXJuIGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFxcdTAwMjZ2bWFfZmxhZ3MpID8gRk9MSU9SRUZfQUNUSVZBVEUgOiBGT0xJT1JFRl9LRUVQO1xcbm1tL3Ztc2Nhbi5jLTg5OC1cXHR9XFxuLS1cXG5tbS92bXNjYW4uYz0yMjgwPXN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjI4Ni1cXG5tbS92bXNjYW4uYzoyMjg3OlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSlcXG5tbS92bXNjYW4uYy0yMjg4LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2OTQ9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XFxubW0vdm1zY2FuLmMtMjY5NS0jaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbm1tL3Ztc2Nhbi5jOjI2OTY6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxubW0vdm1zY2FuLmM6MjY5NzojZGVmaW5lIGdldF9jYXAoY2FwKVxcdHN0YXRpY19icmFuY2hfbGlrZWx5KFxcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcXG5tbS92bXNjYW4uYy0yNjk4LSNlbHNlXFxubW0vdm1zY2FuLmM6MjY5OTpERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9GQUxTRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxubW0vdm1zY2FuLmM6MjcwMDojZGVmaW5lIGdldF9jYXAoY2FwKVxcdHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNmxydV9nZW5fY2Fwc1tjYXBdKVxcbm1tL3Ztc2Nhbi5jLTI3MDEtI2VuZGlmXFxuLS1cXG5tbS92bXNjYW4uYz0yNzg4PXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy0yODE3LSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxcbm1tL3Ztc2Nhbi5jOjI4MTg6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxcbm1tL3Ztc2Nhbi5jLTI4MTktICpcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI4MzU9c3RhdGljIHZvaWQgZ2V0X2l0ZW1fa2V5KHZvaWQgKml0ZW0sIGludCAqa2V5KVxcbi0tXFxubW0vdm1zY2FuLmMtMjg0NC1cXG5tbS92bXNjYW4uYzoyODQ1OnN0YXRpYyBib29sIHRlc3RfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEsXFxubW0vdm1zY2FuLmMtMjg0Ni1cXHRcXHRcXHQgICAgICB2b2lkICppdGVtKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg2MC1cXG5tbS92bXNjYW4uYzoyODYxOnN0YXRpYyB2b2lkIHVwZGF0ZV9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSxcXG5tbS92bXNjYW4uYy0yODYyLVxcdFxcdFxcdFxcdHZvaWQgKml0ZW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yODc5LVxcbm1tL3Ztc2Nhbi5jOjI4ODA6c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXFxubW0vdm1zY2FuLmMtMjg4MS17XFxuLS1cXG5tbS92bXNjYW4uYy0yOTAxLVxcbm1tL3Ztc2Nhbi5jOjI5MDI6c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy0yOTAzLXtcXG5tbS92bXNjYW4uYzoyOTA0OlxcdHN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0IG1tX2xpc3QgPSB7XFxubW0vdm1zY2FuLmMtMjkwNS1cXHRcXHQuZmlmbyA9IExJU1RfSEVBRF9JTklUKG1tX2xpc3QuZmlmbyksXFxuLS1cXG5tbS92bXNjYW4uYy0yOTE3LVxcbm1tL3Ztc2Nhbi5jOjI5MTg6c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICpnZXRfbW1fc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbm1tL3Ztc2Nhbi5jLTI5MTkte1xcbi0tXFxubW0vdm1zY2FuLmMtMjkyMi1cXG5tbS92bXNjYW4uYzoyOTIzOnN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICpnZXRfbmV4dF9tbShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbm1tL3Ztc2Nhbi5jLTI5MjQte1xcbi0tXFxubW0vdm1zY2FuLmMtMjkyNy1cXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXFx1MDAzZWxydXZlYyk7XFxubW0vdm1zY2FuLmM6MjkyODpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG5tbS92bXNjYW4uYy0yOTI5LVxcbi0tXFxubW0vdm1zY2FuLmMtMjk0MS1cXG5tbS92bXNjYW4uYzoyOTQyOnZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubW0vdm1zY2FuLmMtMjk0My17XFxuLS1cXG5tbS92bXNjYW4uYy0yOTQ1LVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xcbm1tL3Ztc2Nhbi5jOjI5NDY6XFx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcXG5tbS92bXNjYW4uYy0yOTQ3LVxcbi0tXFxubW0vdm1zY2FuLmMtMjk1Ni1cXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xcbm1tL3Ztc2Nhbi5jOjI5NTc6XFx0XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XFxubW0vdm1zY2FuLmMtMjk1OC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NjgtXFxubW0vdm1zY2FuLmM6Mjk2OTp2b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTI5NzAte1xcbm1tL3Ztc2Nhbi5jLTI5NzEtXFx0aW50IG5pZDtcXG5tbS92bXNjYW4uYzoyOTcyOlxcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3Q7XFxubW0vdm1zY2FuLmMtMjk3My1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMO1xcbi0tXFxubW0vdm1zY2FuLmMtMjk4Ni1cXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xcbm1tL3Ztc2Nhbi5jOjI5ODc6XFx0XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XFxubW0vdm1zY2FuLmMtMjk4OC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwMDgtI2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jOjMwMDk6dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubW0vdm1zY2FuLmMtMzAxMC17XFxuLS1cXG5tbS92bXNjYW4uYy0zMDMyLVxcbm1tL3Ztc2Nhbi5jOjMwMzM6XFx0bHJ1X2dlbl9kZWxfbW0obW0pO1xcbm1tL3Ztc2Nhbi5jOjMwMzQ6XFx0bHJ1X2dlbl9hZGRfbW0obW0pO1xcbm1tL3Ztc2Nhbi5jLTMwMzUtfVxcbi0tXFxubW0vdm1zY2FuLmMtMzAzOS1cXG5tbS92bXNjYW4uYzozMDQwOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtMzA0MS17XFxuLS1cXG5tbS92bXNjYW4uYy0zMDQ0LVxcbm1tL3Ztc2Nhbi5jOjMwNDU6c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICpnZXRfbW1fc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbm1tL3Ztc2Nhbi5jLTMwNDYte1xcbi0tXFxubW0vdm1zY2FuLmMtMzA0OS1cXG5tbS92bXNjYW4uYzozMDUwOnN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICpnZXRfbmV4dF9tbShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbm1tL3Ztc2Nhbi5jLTMwNTEte1xcbi0tXFxubW0vdm1zY2FuLmMtMzA1Ni1cXG5tbS92bXNjYW4uYzozMDU3OnN0YXRpYyB2b2lkIHJlc2V0X21tX3N0YXRzKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIGJvb2wgbGFzdClcXG5tbS92bXNjYW4uYy0zMDU4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNjEtXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gd2Fsay1cXHUwMDNlbHJ1dmVjO1xcbm1tL3Ztc2Nhbi5jOjMwNjI6XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XFxubW0vdm1zY2FuLmMtMzA2My1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwODEtXFxubW0vdm1zY2FuLmM6MzA4MjpzdGF0aWMgYm9vbCBpdGVyYXRlX21tX2xpc3Qoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IG1tX3N0cnVjdCAqKml0ZXIpXFxubW0vdm1zY2FuLmMtMzA4My17XFxuLS1cXG5tbS92bXNjYW4uYy0zMDg4LVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjMwODk6XFx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcXG5tbS92bXNjYW4uYzozMDkwOlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTMwOTEtXFxuLS1cXG5tbS92bXNjYW4uYz0zMTQ2PXN0YXRpYyBib29sIGl0ZXJhdGVfbW1fbGlzdF9ub3dhbGsoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMxNDktXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XFxubW0vdm1zY2FuLmM6MzE1MDpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xcbm1tL3Ztc2Nhbi5jOjMxNTE6XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XFxubW0vdm1zY2FuLmMtMzE1Mi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTMxOTg9c3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXFxuLS1cXG5tbS92bXNjYW4uYy0zMjAxLVxcdGludCBpO1xcbm1tL3Ztc2Nhbi5jOjMyMDI6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy0zMjAzLVxcdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW3R5cGVdKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTMyMTc9c3RhdGljIHZvaWQgcmVzZXRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgYm9vbCBjYXJyeW92ZXIpXFxuLS1cXG5tbS92bXNjYW4uYy0zMjE5LVxcdGludCBoaXN0LCB0aWVyO1xcbm1tL3Ztc2Nhbi5jOjMyMjA6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy0zMjIxLVxcdGJvb2wgY2xlYXIgPSBjYXJyeW92ZXIgPyBOUl9ISVNUX0dFTlMgPT0gMSA6IE5SX0hJU1RfR0VOUyBcXHUwMDNlIDE7XFxuLS1cXG5tbS92bXNjYW4uYz0zMjY5PXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbi0tXFxubW0vdm1zY2FuLmMtMzI4Ni1cXHRkbyB7XFxubW0vdm1zY2FuLmM6MzI4NzpcXHRcXHQvKiBscnVfZ2VuX2RlbF9mb2xpbygpIGhhcyBpc29sYXRlZCB0aGlzIHBhZ2U/ICovXFxubW0vdm1zY2FuLmMtMzI4OC1cXHRcXHRpZiAoIShvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spKVxcbi0tXFxubW0vdm1zY2FuLmM9MzI5OT1zdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vdm1zY2FuLmMtMzMwMS1cXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG5tbS92bXNjYW4uYzozMzAyOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmM6MzMwMzpcXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW3R5cGVdKTtcXG5tbS92bXNjYW4uYy0zMzA0LVxcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXFx1MDAzZWZsYWdzLmYpO1xcbi0tXFxubW0vdm1zY2FuLmMtMzMxOS1cXG5tbS92bXNjYW4uYzozMzIwOlxcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XFxubW0vdm1zY2FuLmMtMzMyMS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzMjQtXFxubW0vdm1zY2FuLmM6MzMyNTpzdGF0aWMgdm9pZCB1cGRhdGVfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3Ztc2Nhbi5jLTMzMjYtXFx0XFx0XFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxcbi0tXFxubW0vdm1zY2FuLmMtMzM0MC1cXG5tbS92bXNjYW4uYzozMzQxOnN0YXRpYyB2b2lkIHJlc2V0X2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG5tbS92bXNjYW4uYy0zMzQyLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzNDQtXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbHJ1dmVjX2xpdmVfbG9ja19pcnEod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG5tbS92bXNjYW4uYzozMzQ1OlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtMzM0Ni1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzNTktXFxubW0vdm1zY2FuLmM6MzM2MDpcXHRcXHRpZiAobHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pKVxcbm1tL3Ztc2Nhbi5jLTMzNjEtXFx0XFx0XFx0bHJ1ICs9IExSVV9BQ1RJVkU7XFxuLS1cXG5tbS92bXNjYW4uYz0zMzY4PXN0YXRpYyBpbnQgc2hvdWxkX3NraXBfdm1hKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqYXJncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzNzEtXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBhcmdzLVxcdTAwM2V2bWE7XFxubW0vdm1zY2FuLmM6MzM3MjpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cXHUwMDNlcHJpdmF0ZTtcXG5tbS92bXNjYW4uYy0zMzczLVxcbi0tXFxubW0vdm1zY2FuLmM9MzUwNj1zdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxcbi0tXFxubW0vdm1zY2FuLmMtMzUxMy1cXG5tbS92bXNjYW4uYzozNTE0OnN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL3Ztc2Nhbi5jLTM1MTUtXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXFxuLS1cXG5tbS92bXNjYW4uYy0zNTMwLVxcdFxcdFxcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcXG5tbS92bXNjYW4uYzozNTMxOlxcdH0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXFx1MDAyNnZtYS1cXHUwMDNlZmxhZ3MpKSB7XFxubW0vdm1zY2FuLmMtMzUzMi1cXHRcXHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XFxuLS1cXG5tbS92bXNjYW4uYz0zNTM4PXN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1zY2FuLmMtMzU0OC1cXHRzdHJ1Y3QgZm9saW8gKmxhc3QgPSBOVUxMO1xcbm1tL3Ztc2Nhbi5jOjM1NDk6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxubW0vdm1zY2FuLmMtMzU1MC1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM1NTItXFx0REVGSU5FX01BWF9TRVEod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG5tbS92bXNjYW4uYzozNTUzOlxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbm1tL3Ztc2Nhbi5jLTM1NTQtXFx0dW5zaWduZWQgaW50IG5yO1xcbi0tXFxubW0vdm1zY2FuLmM9MzYyOT1zdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM2MzYtXFx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcXG5tbS92bXNjYW4uYzozNjM3OlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVxcdTAwM2Vwcml2YXRlO1xcbm1tL3Ztc2Nhbi5jLTM2MzgtXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLS1cXG5tbS92bXNjYW4uYy0zNjQwLVxcdERFRklORV9NQVhfU0VRKHdhbGstXFx1MDAzZWxydXZlYyk7XFxubW0vdm1zY2FuLmM6MzY0MTpcXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcXG5tbS92bXNjYW4uYy0zNjQyLVxcbi0tXFxubW0vdm1zY2FuLmM9MzcxNz1zdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM3MjYtXFx0dW5zaWduZWQgbG9uZyBmaXJzdCA9IC0xO1xcbm1tL3Ztc2Nhbi5jOjM3Mjc6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxubW0vdm1zY2FuLmM6MzcyODpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG5tbS92bXNjYW4uYy0zNzI5LVxcbi0tXFxubW0vdm1zY2FuLmM9Mzc5MD1zdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1zY2FuLmMtMzc5Ni1cXHR1bnNpZ25lZCBsb25nIG5leHQ7XFxubW0vdm1zY2FuLmM6Mzc5NzpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cXHUwMDNlcHJpdmF0ZTtcXG5tbS92bXNjYW4uYy0zNzk4LVxcbi0tXFxubW0vdm1zY2FuLmMtMzgzMS1cXG5tbS92bXNjYW4uYzozODMyOnN0YXRpYyB2b2lkIHdhbGtfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXFxubW0vdm1zY2FuLmMtMzgzMy17XFxuLS1cXG5tbS92bXNjYW4uYy0zODY2LVxcbm1tL3Ztc2Nhbi5jOjM4Njc6c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKnNldF9tbV93YWxrKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZm9yY2VfYWxsb2MpXFxubW0vdm1zY2FuLmMtMzg2OC17XFxubW0vdm1zY2FuLmM6Mzg2OTpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gY3VycmVudC1cXHUwMDNlcmVjbGFpbV9zdGF0ZS1cXHUwMDNlbW1fd2FsaztcXG5tbS92bXNjYW4uYy0zODcwLVxcbi0tXFxubW0vdm1zY2FuLmM9Mzg4Nz1zdGF0aWMgdm9pZCBjbGVhcl9tbV93YWxrKHZvaWQpXFxubW0vdm1zY2FuLmMtMzg4OC17XFxubW0vdm1zY2FuLmM6Mzg4OTpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gY3VycmVudC1cXHUwMDNlcmVjbGFpbV9zdGF0ZS1cXHUwMDNlbW1fd2FsaztcXG5tbS92bXNjYW4uYy0zODkwLVxcbi0tXFxubW0vdm1zY2FuLmM9MzkwMD1zdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM5MDMtXFx0aW50IHJlbWFpbmluZyA9IE1BWF9MUlVfQkFUQ0g7XFxubW0vdm1zY2FuLmM6MzkwNDpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTM5MDUtXFx0aW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbm1tL3Ztc2Nhbi5jOjM5MDY6XFx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxubW0vdm1zY2FuLmMtMzkwNy1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTM5NTM9c3RhdGljIHZvaWQgdHJ5X3RvX2luY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy0zOTU2LVxcdGJvb2wgc2VxX2luY19mbGFnID0gZmFsc2U7XFxubW0vdm1zY2FuLmM6Mzk1NzpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTM5NTgtXFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM5NjQtXFx0XFx0d2hpbGUgKG1pbl9zZXFbdHlwZV0gKyBNSU5fTlJfR0VOUyBcXHUwMDNjPSBscnVnZW4tXFx1MDAzZW1heF9zZXEpIHtcXG5tbS92bXNjYW4uYzozOTY1OlxcdFxcdFxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWluX3NlcVt0eXBlXSk7XFxubW0vdm1zY2FuLmMtMzk2Ni1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTM5ODUtXFxubW0vdm1zY2FuLmM6Mzk4NjpcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gbHJ1X2dlbl9mb2xpbyAqL1xcbm1tL3Ztc2Nhbi5jLTM5ODctXFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAyNlxcdTAwMjYgc3dhcHBpbmVzcyBcXHUwMDNjPSBNQVhfU1dBUFBJTkVTUykge1xcbi0tXFxubW0vdm1zY2FuLmM9NDAwNT1zdGF0aWMgYm9vbCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwMDktXFx0aW50IHR5cGUsIHpvbmU7XFxubW0vdm1zY2FuLmM6NDAxMDpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQwMTEtcmVzdGFydDpcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwNDAtXFx0ICovXFxubW0vdm1zY2FuLmM6NDA0MTpcXHRwcmV2ID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1heF9zZXEgLSAxKTtcXG5tbS92bXNjYW4uYzo0MDQyOlxcdG5leHQgPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWF4X3NlcSArIDEpO1xcbm1tL3Ztc2Nhbi5jLTQwNDMtXFxuLS1cXG5tbS92bXNjYW4uYz00MDcwPXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNDA3My1cXHRib29sIHN1Y2Nlc3M7XFxubW0vdm1zY2FuLmM6NDA3NDpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xcbm1tL3Ztc2Nhbi5jLTQwNzUtXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMO1xcbm1tL3Ztc2Nhbi5jOjQwNzY6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYzo0MDc3OlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTQwNzgtXFxuLS1cXG5tbS92bXNjYW4uYy00MDg5LVxcdCAqIElmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXFxubW0vdm1zY2FuLmM6NDA5MDpcXHQgKiB0byBscnVfZ2VuX2xvb2tfYXJvdW5kKCksIHdoaWNoIG9ubHkgY2xlYXJzIHRoZSBhY2Nlc3NlZCBiaXQgaW4gYVxcbm1tL3Ztc2Nhbi5jLTQwOTEtXFx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XFxuLS1cXG5tbS92bXNjYW4uYz00MTU0PXN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY190eXBlX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXFxuLS1cXG5tbS92bXNjYW4uYy00MTU3LVxcdHVuc2lnbmVkIGxvbmcgc2VxLCB0b3RhbCA9IDA7XFxubW0vdm1zY2FuLmM6NDE1ODpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQxNTktXFx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQxNjItXFx0Zm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXFx1MDAzYz0gbWF4X3NlcTsgc2VxKyspIHtcXG5tbS92bXNjYW4uYzo0MTYzOlxcdFxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcXG5tbS92bXNjYW4uYy00MTY0LVxcdFxcdGZvciAoem9uZSA9IDA7IHpvbmUgXFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUrKylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQxOTQ9c3RhdGljIGJvb2wgbHJ1dmVjX2lzX3JlY2xhaW1hYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy00MjA4LVxcbm1tL3Ztc2Nhbi5jOjQyMDk6XFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSk7XFxubW0vdm1zY2FuLmMtNDIxMC1cXHRiaXJ0aCA9IFJFQURfT05DRShscnV2ZWMtXFx1MDAzZWxydWdlbi50aW1lc3RhbXBzW2dlbl0pO1xcbi0tXFxubW0vdm1zY2FuLmMtNDIxNS0vKiB0byBwcm90ZWN0IHRoZSB3b3JraW5nIHNldCBvZiB0aGUgbGFzdCBOIGppZmZpZXMgKi9cXG5tbS92bXNjYW4uYzo0MjE2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGxydV9nZW5fbWluX3R0bCBfX3JlYWRfbW9zdGx5O1xcbm1tL3Ztc2Nhbi5jLTQyMTctXFxubW0vdm1zY2FuLmM6NDIxODpzdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTQyMTkte1xcbm1tL3Ztc2Nhbi5jLTQyMjAtXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbm1tL3Ztc2Nhbi5jOjQyMjE6XFx0dW5zaWduZWQgbG9uZyBtaW5fdHRsID0gUkVBRF9PTkNFKGxydV9nZW5fbWluX3R0bCk7XFxubW0vdm1zY2FuLmMtNDIyMi1cXHRib29sIHJlY2xhaW1hYmxlID0gIW1pbl90dGw7XFxuLS1cXG5tbS92bXNjYW4uYy00MjY0LSAqL1xcbm1tL3Ztc2Nhbi5jOjQyNjU6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbm1tL3Ztc2Nhbi5jLTQyNjYte1xcbi0tXFxubW0vdm1zY2FuLmMtNDI3MC1cXHR1bnNpZ25lZCBsb25nIGVuZDtcXG5tbS92bXNjYW4uYzo0MjcxOlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XFxubW0vdm1zY2FuLmMtNDI3Mi1cXHRzdHJ1Y3QgZm9saW8gKmxhc3QgPSBOVUxMO1xcbi0tXFxubW0vdm1zY2FuLmMtNDI4MC1cXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XFxubW0vdm1zY2FuLmM6NDI4MTpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGU7XFxubW0vdm1zY2FuLmMtNDI4Mi1cXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XFxuLS1cXG5tbS92bXNjYW4uYy00MzIwLVxcdG1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktXFx1MDAzZWxydWdlbi5tYXhfc2VxKTtcXG5tbS92bXNjYW4uYzo0MzIxOlxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XFxubW0vdm1zY2FuLmMtNDMyMi1cXHRtbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbi0tXFxubW0vdm1zY2FuLmM9NDM4Mz1lbnVtIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQzOTAtXFxubW0vdm1zY2FuLmM6NDM5MTpzdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcXG5tbS92bXNjYW4uYy00MzkyLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ0MzgtXFxubW0vdm1zY2FuLmM6NDQzOTp2b2lkIGxydV9nZW5fb25saW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy00NDQwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ0NjMtXFxubW0vdm1zY2FuLmM6NDQ2NDp2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNDQ2NS17XFxuLS1cXG5tbS92bXNjYW4uYy00NDcwLVxcbm1tL3Ztc2Nhbi5jOjQ0NzE6XFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfT0xEKTtcXG5tbS92bXNjYW4uYy00NDcyLVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ0NzQtXFxubW0vdm1zY2FuLmM6NDQ3NTp2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNDQ3Ni17XFxuLS1cXG5tbS92bXNjYW4uYy00NTAwLVxcbm1tL3Ztc2Nhbi5jOjQ1MDE6dm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDUwMi17XFxuLS1cXG5tbS92bXNjYW4uYy00NTA2LVxcdGlmIChSRUFEX09OQ0UobHJ1dmVjLVxcdTAwM2VscnVnZW4uc2VnKSAhPSBNRU1DR19MUlVfSEVBRClcXG5tbS92bXNjYW4uYzo0NTA3OlxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX0hFQUQpO1xcbm1tL3Ztc2Nhbi5jLTQ1MDgtfVxcbm1tL3Ztc2Nhbi5jLTQ1MDktXFxubW0vdm1zY2FuLmM6NDUxMDpib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ1MTEte1xcbi0tXFxubW0vdm1zY2FuLmM9NDUyMz1zdGF0aWMgdm9pZCB0cnlfdG9faW5jX21heF9zZXFfbm93YWxrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1MjUte1xcbm1tL3Ztc2Nhbi5jOjQ1MjY6XFx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcXG5tbS92bXNjYW4uYzo0NTI3OlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTQ1MjgtXFx0aW50IHN3YXBwaW5lc3MgPSBtZW1fY2dyb3VwX3N3YXBwaW5lc3MobWVtY2cpO1xcbi0tXFxubW0vdm1zY2FuLmMtNDU1Ni0gKi9cXG5tbS92bXNjYW4uYzo0NTU3OnZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ1NTgte1xcbi0tXFxubW0vdm1zY2FuLmMtNDU4My0gKiAgICBnZW5lcmF0aW9ucyBvbiBhbiBMUlUgbGlzdC5cXG5tbS92bXNjYW4uYzo0NTg0OiAqIDQuIEluIGxydV9nZW5fZGVsX2ZvbGlvKCksIHRoZSBnZW5lcmF0aW9uIHRvIHdoaWNoIHRoZSBmb2xpbyBiZWxvbmdzIGlzXFxubW0vdm1zY2FuLmMtNDU4NS0gKiAgICBmb3VuZCBiYXNlZCBvbiB0aGUgZ2VuZXJhdGlvbiBpbmZvcm1hdGlvbiBpbiBmb2xpby1cXHUwMDNlZmxhZ3MsIGFuZCB0aGVcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1ODctICogICAgdGhlIGxydSBzaXplIGNvcnJlY3RseSBkdXJpbmcgcmVwYXJlbnRpbmcsIG90aGVyd2lzZSB0aGUgbHJ1IHNpemUgbWF5XFxubW0vdm1zY2FuLmM6NDU4ODogKiAgICBiZSB1cGRhdGVkIGluY29ycmVjdGx5IGluIGxydV9nZW5fZGVsX2ZvbGlvKCkuXFxubW0vdm1zY2FuLmMtNDU4OS0gKlxcbi0tXFxubW0vdm1zY2FuLmMtNDU5Ny0gKi9cXG5tbS92bXNjYW4uYzo0NTk4OnN0YXRpYyB2b2lkIF9fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsIHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMsXFxubW0vdm1zY2FuLmMtNDU5OS1cXHRcXHRcXHRcXHQgICAgIGludCB6b25lLCBpbnQgdHlwZSlcXG5tbS92bXNjYW4uYy00NjAwLXtcXG5tbS92bXNjYW4uYzo0NjAxOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpjaGlsZF9scnVnZW4sICpwYXJlbnRfbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQ2MDItXFx0ZW51bSBscnVfbGlzdCBscnUgPSB0eXBlICogTFJVX0lOQUNUSVZFX0ZJTEU7XFxuLS1cXG5tbS92bXNjYW4uYy00NjA4LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBnZXRfbnJfZ2VucyhjaGlsZF9scnV2ZWMsIHR5cGUpOyBpKyspIHtcXG5tbS92bXNjYW4uYzo0NjA5OlxcdFxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGNoaWxkX2xydWdlbi1cXHUwMDNlbWF4X3NlcSAtIGkpO1xcbm1tL3Ztc2Nhbi5jLTQ2MTAtXFx0XFx0bG9uZyBucl9wYWdlcyA9IGNoaWxkX2xydWdlbi1cXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXTtcXG5tbS92bXNjYW4uYzo0NjExOlxcdFxcdGludCBjaGlsZF9scnVfYWN0aXZlID0gbHJ1X2dlbl9pc19hY3RpdmUoY2hpbGRfbHJ1dmVjLCBnZW4pID8gTFJVX0FDVElWRSA6IDA7XFxubW0vdm1zY2FuLmM6NDYxMjpcXHRcXHRpbnQgcGFyZW50X2xydV9hY3RpdmUgPSBscnVfZ2VuX2lzX2FjdGl2ZShwYXJlbnRfbHJ1dmVjLCBnZW4pID8gTFJVX0FDVElWRSA6IDA7XFxubW0vdm1zY2FuLmMtNDYxMy1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2MjEtXFxubW0vdm1zY2FuLmM6NDYyMjpcXHRcXHRpZiAobHJ1X2dlbl9pc19hY3RpdmUoY2hpbGRfbHJ1dmVjLCBnZW4pICE9IGxydV9nZW5faXNfYWN0aXZlKHBhcmVudF9scnV2ZWMsIGdlbikpIHtcXG5tbS92bXNjYW4uYy00NjIzLVxcdFxcdFxcdF9fdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1ICsgY2hpbGRfbHJ1X2FjdGl2ZSwgem9uZSwgLW5yX3BhZ2VzKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2MjgtXFxubW0vdm1zY2FuLmM6NDYyOTp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ2MzAte1xcbi0tXFxubW0vdm1zY2FuLmMtNDY0MC1cXHRcXHRmb3IgKHR5cGUgPSAwOyB0eXBlIFxcdTAwM2MgQU5PTl9BTkRfRklMRTsgdHlwZSsrKVxcbm1tL3Ztc2Nhbi5jOjQ2NDE6XFx0XFx0XFx0X19scnVfZ2VuX3JlcGFyZW50X21lbWNnKGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgemlkLCB0eXBlKTtcXG5tbS92bXNjYW4uYy00NjQyLVxcbi0tXFxubW0vdm1zY2FuLmM9NDY2Mz1zdGF0aWMgYm9vbCBzb3J0X2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy00NjcyLVxcdGludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpO1xcbm1tL3Ztc2Nhbi5jOjQ2NzM6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy00Njc0LVxcbi0tXFxubW0vdm1zY2FuLmMtNDY4MS1cXHQvKiBwcm9tb3RlZCAqL1xcbm1tL3Ztc2Nhbi5jOjQ2ODI6XFx0aWYgKGdlbiAhPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSkpIHtcXG5tbS92bXNjYW4uYy00NjgzLVxcdFxcdGxpc3RfbW92ZShcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgXFx1MDAyNmxydWdlbi1cXHUwMDNlZm9saW9zW2dlbl1bdHlwZV1bem9uZV0pO1xcbi0tXFxubW0vdm1zY2FuLmM9NDcxMj1zdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00NzI5LVxcbm1tL3Ztc2Nhbi5jOjQ3MzA6XFx0c3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpO1xcbm1tL3Ztc2Nhbi5jLTQ3MzEtXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7XFxuLS1cXG5tbS92bXNjYW4uYz00NzM2PXN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy00NzQ3LVxcdHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nID0gbnJfdG9fc2NhbjtcXG5tbS92bXNjYW4uYzo0NzQ4OlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtNDc0OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ3NTUtXFxubW0vdm1zY2FuLmM6NDc1NjpcXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxubW0vdm1zY2FuLmMtNDc1Ny1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ4MzE9c3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy00ODY2LSAqL1xcbm1tL3Ztc2Nhbi5jOjQ4Njc6c3RhdGljIGJvb2wgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLFxcbm1tL3Ztc2Nhbi5jLTQ4NjgtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYz00OTAzPXN0YXRpYyB1bnNpZ25lZCBpbnQgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5MjYtXFxubW0vdm1zY2FuLmM6NDkyNzpcXHRcXHRcXHRpZiAoIWxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQobHJ1dmVjLCBpLCBzYykpXFxubW0vdm1zY2FuLmMtNDkyOC1cXHRcXHRcXHRcXHRhbGxvd2VkIHw9IEJJVChpKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ5OTg9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy01MDA2LVxcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcXG5tbS92bXNjYW4uYzo1MDA3OlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XFxubW0vdm1zY2FuLmMtNTAwOC1cXHRpbnQgc2Nhbm5lZCwgcmVjbGFpbWVkO1xcbi0tXFxubW0vdm1zY2FuLmMtNTA3OC1cXHRcXHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xcbm1tL3Ztc2Nhbi5jOjUwNzk6XFx0XFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKVxcbm1tL3Ztc2Nhbi5jLTUwODAtXFx0XFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7XFxuLS1cXG5tbS92bXNjYW4uYz01MjQ0PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI1MS1cXG5tbS92bXNjYW4uYzo1MjUyOlxcdC8qIGxydV9nZW5fYWdlX25vZGUoKSBjYWxsZWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpICovXFxubW0vdm1zY2FuLmMtNTI1My1cXHRpZiAobWVtX2Nncm91cF9iZWxvd19taW4oTlVMTCwgbWVtY2cpKVxcbi0tXFxubW0vdm1zY2FuLmM9NTI4NT1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyOTEtXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbm1tL3Ztc2Nhbi5jOjUyOTI6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbjtcXG5tbS92bXNjYW4uYy01MjkzLVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzMDUtXFx0XFx0aWYgKG9wKSB7XFxubW0vdm1zY2FuLmM6NTMwNjpcXHRcXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIG9wKTtcXG5tbS92bXNjYW4uYy01MzA3LVxcdFxcdFxcdG9wID0gMDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzMTktXFx0XFx0aWYgKCFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpIHtcXG5tbS92bXNjYW4uYzo1MzIwOlxcdFxcdFxcdGxydV9nZW5fcmVsZWFzZV9tZW1jZyhtZW1jZyk7XFxubW0vdm1zY2FuLmMtNTMyMS1cXHRcXHRcXHRtZW1jZyA9IE5VTEw7XFxuLS1cXG5tbS92bXNjYW4uYy01MzM3LVxcdGlmIChvcClcXG5tbS92bXNjYW4uYzo1MzM4OlxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgb3ApO1xcbm1tL3Ztc2Nhbi5jLTUzMzktXFxuLS1cXG5tbS92bXNjYW4uYy01MzQ0LVxcbm1tL3Ztc2Nhbi5jOjUzNDU6XFx0LyogcmVzdGFydCBpZiByYWNlZCB3aXRoIGxydV9nZW5fcm90YXRlX21lbWNnKCkgKi9cXG5tbS92bXNjYW4uYy01MzQ2LVxcdGlmIChnZW4gIT0gZ2V0X251bGxzX3ZhbHVlKHBvcykpXFxuLS1cXG5tbS92bXNjYW4uYy01MzU0LVxcbm1tL3Ztc2Nhbi5jOjUzNTU6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTM1Ni17XFxuLS1cXG5tbS92bXNjYW4uYy01MzY4LVxcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYzo1MzY5OlxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcXG5tbS92bXNjYW4uYy01MzcwLVxcbi0tXFxubW0vdm1zY2FuLmMtNTM3NS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTc6MjQuNTExNTE0NTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjczOTkyNDQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTUdMUlUgRXZpY3Rpb24gUG9pbnRzIGZvciBGdXp6aW5nIEZvY3VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSBwcmltZSBjYW5kaWRhdGVzIHdpdGhpbiB0aGUgTUdMUlUgZXZpY3Rpb24gcHJvY2VzcyBmb3IgZm9jdXNlZCBmdXp6aW5nLiBXZSdyZSBsb29raW5nIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgbGlrZWx5IGVudHJ5IHBvaW50cywgYXJlbid0IGlubGluZWQgKHNvIHRoZXkgaGF2ZSBkaXN0aW5jdCBhZGRyZXNzZXMgZm9yIHRoZSBmdXp6ZXIpLCBhbmQgYXJlbid0IG92ZXJseSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gV2Ugd2FudCB0byBhdm9pZCBiaWFzaW5nIHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbiwgc28gYnJvYWQsIGNvbW1vbiBmdW5jdGlvbnMgYXJlIG91dC5cblxuSSdtIHN0YXJ0aW5nIGJ5IGxvb2tpbmcgYXQgYGxydV9nZW5fc2VxX3dyaXRlYCwgc2luY2UgaXQncyBhc3NvY2lhdGVkIHdpdGggdGhlIGAvc3lzL2tlcm5lbC9tbS9scnVfZ2VuL2Agc3lzZnMgaW50ZXJmYWNlIG9yIGRlYnVnZnMuIEl0IG1ha2VzIHNlbnNlIHRvIGNoZWNrIGJvdGggdGhpcyBhbmQgYGVuYWJsZWRfc3RvcmVgLiBJJ20gYWxzbyBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnMgaW4gdGhlIGBscnVfZ2VuYCBjb250ZXh0LCB3aGljaCBpbmNsdWRlOiBgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZGAsIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXNgLCBgaXNvbGF0ZV9mb2xpb3NgLCBgZXZpY3RfZm9saW9zYCwgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AsIGBscnVfZ2VuX3Nocmlua19ub2RlYCwgYW5kIGBscnVfZ2VuX3NlcV93cml0ZWAuXG5cblRoZSBpbnN0cnVjdGlvbnMgSSdtIGZvbGxvd2luZyBoaWdobGlnaHQgdGhlIGltcG9ydGFuY2Ugb2Ygbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGlzIHRlbGxzIG1lIEkgc2hvdWxkIHByaW9yaXRpemUgZnVuY3Rpb25zIHRoYXQgYXJlICpub3QqIHN0YXRpYywgYXMgdGhlIGNvbXBpbGVyIGlzIGxpa2VseSB0byBpbmxpbmUgdGhvc2Ugd2hpY2ggZG9uJ3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCBhbmQgYXJlIGV4dGVybmFsIHRvIHRoZSBNR0xSVSBjb2RlIGFzIGVudHJ5IHBvaW50cy5cblxuR2l2ZW4gdGhpcywgSSdtIG5vdyBjcm9zcy1yZWZlcmVuY2luZyB0aGlzIGluZm9ybWF0aW9uIHdpdGggdGhlIGZ1bmN0aW9ucyBJIGp1c3QgbGlzdGVkLCBzcGVjaWZpY2FsbHkgdGhvc2UgaW4gYG1tL3Ztc2Nhbi5jYC4gVGhlIG9uZXMgdGhhdCBqdW1wIG91dCBhcyBwb3RlbnRpYWwgdGFyZ2V0cyBmb3IgZnV6emluZywgZ2l2ZW4gdGhlc2UgY29uc3RyYWludHMgYXJlOiBgbHJ1X2dlbl9zZXFfd3JpdGVgLCBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAsIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgLCBgZXZpY3RfZm9saW9zYCwgYGlzb2xhdGVfZm9saW9zYCwgYHRocm90dGxlX2V2aWN0YWJsZV90eXBlc2AsIGFuZCBgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZGAuIEkgbmVlZCB0byBub3cgZGV0ZXJtaW5lIGlmIGFueSBhcmUgbm9uLXN0YXRpYyBhbmQgZml0IHRoaXMgY3JpdGVyaW9uLCBhbmQgYWxzbyB3aGV0aGVyIGFueSBmdW5jdGlvbnMgZWxzZXdoZXJlIHRoYXQgc2VydmUgYXMgZW50cnkgcG9pbnRzIGludG8gTUdMUlUgZXZpY3Rpb24gYXJlIHdvcnRoIGV4cGxvcmluZy4gTG9va2luZyBhdCBzeXNmcyBhbmQgcHJvY2ZzIGZ1bmN0aW9ucyBsaWtlIGBscnVfZ2VuX3NlcV93cml0ZWAgaXMgcHJvYmFibHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBsb2NhdGluZyB0aG9zZSBlbnRyeSBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDE1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAzOjE3OjMxLjI1MTQ0MjYwM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ2MTI3NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9zZXFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTU2Mzg9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbHJ1X2dlbl9hdHRyX2dyb3VwID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNTY0Ni1cXG5tbS92bXNjYW4uYzo1NjQ3OnN0YXRpYyB2b2lkICpscnVfZ2VuX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKVxcbm1tL3Ztc2Nhbi5jLTU2NDgte1xcbi0tXFxubW0vdm1zY2FuLmMtNTY2OC1cXG5tbS92bXNjYW4uYzo1NjY5OnN0YXRpYyB2b2lkIGxydV9nZW5fc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbm1tL3Ztc2Nhbi5jLTU2NzAte1xcbi0tXFxubW0vdm1zY2FuLmMtNTY3Ny1cXG5tbS92bXNjYW4uYzo1Njc4OnN0YXRpYyB2b2lkICpscnVfZ2VuX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXFxubW0vdm1zY2FuLmMtNTY3OS17XFxuLS1cXG5tbS92bXNjYW4uYy01Njk2LVxcbm1tL3Ztc2Nhbi5jOjU2OTc6c3RhdGljIHZvaWQgbHJ1X2dlbl9zZXFfc2hvd19mdWxsKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbm1tL3Ztc2Nhbi5jLTU2OTgtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIG1heF9zZXEsIHVuc2lnbmVkIGxvbmcgKm1pbl9zZXEsXFxuLS1cXG5tbS92bXNjYW4uYy01NzUxLS8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cXG5tbS92bXNjYW4uYzo1NzUyOnN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxubW0vdm1zY2FuLmMtNTc1My17XFxuLS1cXG5tbS92bXNjYW4uYy01ODAxLVxcdFxcdGlmIChmdWxsKVxcbm1tL3Ztc2Nhbi5jOjU4MDI6XFx0XFx0XFx0bHJ1X2dlbl9zZXFfc2hvd19mdWxsKG0sIGxydXZlYywgbWF4X3NlcSwgbWluX3NlcSwgc2VxKTtcXG5tbS92bXNjYW4uYy01ODAzLVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4MDctXFxubW0vdm1zY2FuLmM6NTgwODpzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGxydV9nZW5fc2VxX29wcyA9IHtcXG5tbS92bXNjYW4uYzo1ODA5OlxcdC5zdGFydCA9IGxydV9nZW5fc2VxX3N0YXJ0LFxcbm1tL3Ztc2Nhbi5jOjU4MTA6XFx0LnN0b3AgPSBscnVfZ2VuX3NlcV9zdG9wLFxcbm1tL3Ztc2Nhbi5jOjU4MTE6XFx0Lm5leHQgPSBscnVfZ2VuX3NlcV9uZXh0LFxcbm1tL3Ztc2Nhbi5jOjU4MTI6XFx0LnNob3cgPSBscnVfZ2VuX3NlcV9zaG93LFxcbm1tL3Ztc2Nhbi5jLTU4MTMtfTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU4NTY9c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNTg5Ny0vKiBzZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzICovXFxubW0vdm1zY2FuLmM6NTg5ODpzdGF0aWMgc3NpemVfdCBscnVfZ2VuX3NlcV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnNyYyxcXG5tbS92bXNjYW4uYy01ODk5LVxcdFxcdFxcdFxcdCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5ODEtXFxubW0vdm1zY2FuLmM6NTk4MjpzdGF0aWMgaW50IGxydV9nZW5fc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxubW0vdm1zY2FuLmMtNTk4My17XFxubW0vdm1zY2FuLmM6NTk4NDpcXHRyZXR1cm4gc2VxX29wZW4oZmlsZSwgXFx1MDAyNmxydV9nZW5fc2VxX29wcyk7XFxubW0vdm1zY2FuLmMtNTk4NS19XFxuLS1cXG5tbS92bXNjYW4uYz01OTg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxydV9nZW5fcndfZm9wcyA9IHtcXG5tbS92bXNjYW4uYzo1OTg4OlxcdC5vcGVuID0gbHJ1X2dlbl9zZXFfb3BlbixcXG5tbS92bXNjYW4uYy01OTg5LVxcdC5yZWFkID0gc2VxX3JlYWQsXFxubW0vdm1zY2FuLmM6NTk5MDpcXHQud3JpdGUgPSBscnVfZ2VuX3NlcV93cml0ZSxcXG5tbS92bXNjYW4uYy01OTkxLVxcdC5sbHNlZWsgPSBzZXFfbHNlZWssXFxuLS1cXG5tbS92bXNjYW4uYz01OTk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxydV9nZW5fcm9fZm9wcyA9IHtcXG5tbS92bXNjYW4uYzo1OTk2OlxcdC5vcGVuID0gbHJ1X2dlbl9zZXFfb3BlbixcXG5tbS92bXNjYW4uYy01OTk3LVxcdC5yZWFkID0gc2VxX3JlYWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAzOjE3OjMxLjMwNjA2NTA5OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDI4ODA0OTA1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNR0xSVSBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSB0cnlpbmcgdG8gYWNoaWV2ZS4gSSBzZWUgaXQncyBmb2N1c2luZyBvbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHN1YnN5c3RlbSwgYW5kIHNwZWNpZmljYWxseSBtZW50aW9ucyBuZXcgdHJhY2tpbmcgYW5kIHRocm90dGxpbmcgbWVjaGFuaXNtcyBmb3IgaXNvbGF0ZWQgcGFnZXMuIEknbSB0YWtpbmcgYSBsb29rIGF0IGEgZmV3IFwiRm9jdXNTeW1ib2xzXCIgd2hpY2ggYXJlOiBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYCwgYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRgLCBgaXNvbGF0ZV9mb2xpb3NgLCBgZXZpY3RfZm9saW9zYCwgYW5kIGBscnVfZ2VuX3NlcV93cml0ZWAuIFRoaXMgaGludHMgdGhhdCB0aGUgZ29hbCBoZXJlIGlzIHRvIHByZXZlbnQgbG9ja3VwcyBhbmQgZXhjZXNzaXZlIGlzb2xhdGlvbiBieSB0aHJvdHRsaW5nIHRoZSByZWNsYWltIHByb2Nlc3Mgd2hlbiB0b28gbWFueSBmb2xpb3MgYXJlIGluIGFuIGlzb2xhdGVkIHN0YXRlLiBTbyBpdCBsb29rcyBsaWtlIGEgbmV3IHRocm90dGxlIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBwcm9jZXNzLlxuXG5Ob3csIEknbGwgcXVpY2tseSBjaGVjayB0aGUgXCJFbmFibGVDb25maWdzXCIuIEl0J3MgdXNpbmcgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYC4gQSBxdWljayBsb29rIGF0IHRoZSBLY29uZmlnIGZpbGUgY29uZmlybXMgdGhlIGRlcGVuZGVuY2llczogYExSVV9HRU5gIHJlbGllcyBvbiBgTU1VYCBhbmQgYSBmZXcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmRpdGlvbnMsIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBkZXBlbmRzIG9uIGBMUlVfR0VOYC4gT2theSwgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC5cblxuQmVmb3JlIEkgc2lnbiBvZmYsIEkganVzdCBuZWVkIHRvIHN1bW1hcml6ZSBldmVyeXRoaW5nLiBUaGUgcGF0Y2ggaXMgZGVlbWVkIFwiV29ydGhGdXp6aW5nXCIgYmVjYXVzZSBpdCdzIGFsdGVyaW5nIGNydWNpYWwgbWVtb3J5IHJlY2xhbWF0aW9uIGxvZ2ljIHdpdGhpbiB0aGUgTUdMUlUuIEl0J3MgYWRkaW5nIHRoaXMgbmV3IGlzb2xhdGlvbiB0cmFja2luZyBhbmQgdGhyb3R0bGluZywgc3BlY2lmaWNhbGx5IGluIGBtbS92bXNjYW4uY2AsIHRvIG1hbmFnZSBleGNlc3NpdmUgZm9saW8gaXNvbGF0aW9uLiBUaGUgaW1wb3J0YW50IEZvY3VzU3ltYm9scyBhbmQgRW5hYmxlQ29uZmlncyBhcmU6IGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXNgLCBgbHJ1X2dlbl90b29fbWFueV9pc29sYXRlZGAsIGBpc29sYXRlX2ZvbGlvc2AsIGBldmljdF9mb2xpb3NgLCBhbmQgYGxydV9nZW5fc2VxX3dyaXRlYCwgYW5kIGBMUlVfR0VOYCwgYExSVV9HRU5fRU5BQkxFRGAgcmVzcGVjdGl2ZWx5LlxuXG5Pa2F5LCB0aGF0J3MgZXZlcnl0aGluZy4gSSdtIGNvbmZpZGVudCBpbiB0aGUgYXNzZXNzbWVudC4gSSB3aWxsIHNldCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAwNDcsIk91dHB1dFRva2VucyI6MTY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAzOjE3OjUxLjU5NDExOTM5NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MDA2NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aHJvdHRsZV9ldmljdGFibGVfdHlwZXNcIixcbiAgICBcImxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRcIixcbiAgICBcImlzb2xhdGVfZm9saW9zXCIsXG4gICAgXCJldmljdF9mb2xpb3NcIixcbiAgICBcImxydV9nZW5fc2VxX3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBpc29sYXRlZCBmb2xpbyBhY2NvdW50aW5nIGFuZCByZWNsYWltIHRocm90dGxpbmcgZm9yIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBpbiBtbS92bXNjYW4uYywgaW1wbGVtZW50aW5nIGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQoKSBhbmQgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzKCkgdG8gcHJldmVudCBleGNlc3NpdmUgZm9saW8gaXNvbGF0aW9uIGR1cmluZyBtZW1vcnkgcHJlc3N1cmUgYW5kIGRpcmVjdCByZWNsYWltLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aHJvdHRsZV9ldmljdGFibGVfdHlwZXNcIixcbiAgICBcImxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRcIixcbiAgICBcImlzb2xhdGVfZm9saW9zXCIsXG4gICAgXCJldmljdF9mb2xpb3NcIixcbiAgICBcImxydV9nZW5fc2VxX3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBpc29sYXRlZCBmb2xpbyBhY2NvdW50aW5nIGFuZCByZWNsYWltIHRocm90dGxpbmcgZm9yIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBpbiBtbS92bXNjYW4uYywgaW1wbGVtZW50aW5nIGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQoKSBhbmQgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzKCkgdG8gcHJldmVudCBleGNlc3NpdmUgZm9saW8gaXNvbGF0aW9uIGR1cmluZyBtZW1vcnkgcHJlc3N1cmUgYW5kIGRpcmVjdCByZWNsYWltLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTc6NTEuNjgwMTM0MjQ4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQyNjc0NDMyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAzOjE3OjUxLjY4MDc1MjgyOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0NDI2MTIxNjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBlci1scnV2ZWMgaXNvbGF0aW9uIGFjY291bnRpbmcgKGBucl9pc29sYXRlZGApIGFuZCBpc29sYXRpb24gdGhyb3R0bGluZyAoYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRgLCBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYCkgZm9yIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0uXFxuXFxuQW5hbHlzaXMgYWdhaW5zdCBLTVNBTiBhcHBsaWNhYmlsaXR5OlxcbjEuIFVzZXItc3BhY2UgbGVha3M6IE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgZXhwb3NlZCB2aWEgaW9jdGxzL3N5c2ZzL25ldGxpbmsvQlBGIGJ1ZmZlcnMuXFxuMi4gVW5pbml0aWFsaXplZCB2YXJpYWJsZXM6IEFsbCBhZGRlZCBsb2NhbCB2YXJpYWJsZXMgKGBhbGxvd2VkYCwgYGZhdGFsYCwgYHN0YWxsZWRgKSBhbmQgc3RydWN0IGZpZWxkcyAoYG5yX2lzb2xhdGVkYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFuZCBtYW5hZ2VkIChlLmcuLCBgKmZhdGFsYCBpcyBpbml0aWFsaXplZCB0byBmYWxzZSB1cG9uIGVudGVyaW5nIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKWAsIGBzdHJ1Y3QgbHJ1dmVjYCBtZW1vcnkgaXMgemVyby1hbGxvY2F0ZWQgZHVyaW5nIG5vZGUvbWVtY2cgaW5pdGlhbGl6YXRpb24pLlxcbjMuIEJ1ZmZlciBib3VuZHMgLyBtZW1vcnkgaGFuZGxpbmc6IFRoZSBwYXRjaCBvbmx5IGFkanVzdHMgcmVjbGFpbWVyIHNjaGVkdWxpbmcsIHRocm90dGxpbmcsIGFuZCBpc29sYXRpb24gY291bnRlcnMgd2l0aG91dCB0b3VjaGluZyB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3MsIHZhcmlhYmxlLWxlbmd0aCBidWZmZXJzLCBvciBzdHJ1Y3QgcGFkZGluZy5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIHJlbGF0ZSB0byByZWNsYWltIHRocm90dGxpbmcsIGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBjb3VudGVyIGltYmFsYW5jZXMsIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgKExPQ0tERVAsIEtBU0FOLCBXQVJOX09OKS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4MzZkOTY0MzNjMGVkNzZkMDcxMTI4OTdiZGYyNjY0YjFjMjg3ODE3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwMzoxNjo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCA5NGY5YzNmZjU0MTYwLi44MTliNmMwNTkxMTZlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTU4MCw2ICs1ODAsOCBAQCBzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyB7XG4gXHQvKiBjYW4gYmUgbW9kaWZpZWQgd2l0aG91dCBob2xkaW5nIHRoZSBMUlUgbG9jayAqL1xuIFx0YXRvbWljX2xvbmdfdCBldmljdGVkW05SX0hJU1RfR0VOU11bQU5PTl9BTkRfRklMRV1bTUFYX05SX1RJRVJTXTtcbiBcdGF0b21pY19sb25nX3QgcmVmYXVsdGVkW05SX0hJU1RfR0VOU11bQU5PTl9BTkRfRklMRV1bTUFYX05SX1RJRVJTXTtcbitcdC8qIHRoZSBudW1iZXIgb2YgZm9saW9zIGlzb2xhdGVkIGZyb20gdGhpcyBscnV2ZWMgYW5kIGJlaW5nIHJlY2xhaW1lZCAqL1xuK1x0YXRvbWljX2xvbmdfdCBucl9pc29sYXRlZFtBTk9OX0FORF9GSUxFXTtcbiBcdC8qIHdoZXRoZXIgdGhlIG11bHRpLWdlbiBMUlUgaXMgZW5hYmxlZCAqL1xuIFx0Ym9vbCBlbmFibGVkO1xuIFx0LyogdGhlIG1lbWNnIGdlbmVyYXRpb24gdGhpcyBscnVfZ2VuX2ZvbGlvIGJlbG9uZ3MgdG8gKi9cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBmMTE0OTFlZTllZDVjLi4yMTE4MzlkMTA5MDlhIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDE1MSwyNSArNDE1MSwzNCBAQCBzdGF0aWMgdm9pZCBzZXRfaW5pdGlhbF9wcmlvcml0eShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sXG4gXHRzYy1cdTAwM2Vwcmlvcml0eSA9IGNsYW1wKHByaW9yaXR5LCBERUZfUFJJT1JJVFkgLyAyLCBERUZfUFJJT1JJVFkpO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuIHtcbi1cdGludCBnZW4sIHR5cGUsIHpvbmU7XG4rXHRpbnQgZ2VuLCB6b25lO1xuIFx0dW5zaWduZWQgbG9uZyBzZXEsIHRvdGFsID0gMDtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuIFx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcbiBcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG4gXG4tXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7XG4tXHRcdGZvciAoc2VxID0gbWluX3NlcVt0eXBlXTsgc2VxIFx1MDAzYz0gbWF4X3NlcTsgc2VxKyspIHtcbi1cdFx0XHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4tXHRcdFx0Zm9yICh6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lKyspXG4tXHRcdFx0XHR0b3RhbCArPSBtYXgoUkVBRF9PTkNFKGxydWdlbi1cdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpO1xuLVx0XHR9XG4rXHRmb3IgKHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSBcdTAwM2M9IG1heF9zZXE7IHNlcSsrKSB7XG4rXHRcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbitcdFx0Zm9yICh6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lKyspXG4rXHRcdFx0dG90YWwgKz0gbWF4KFJFQURfT05DRShscnVnZW4tXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXSksIDBMKTtcbiBcdH1cbiBcbiBcdHJldHVybiB0b3RhbDtcbiB9XG4gXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4re1xuK1x0dW5zaWduZWQgbG9uZyB0b3RhbCA9IDA7XG4rXHRpbnQgdHlwZTtcbitcbitcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKHR5cGUsIHN3YXBwaW5lc3MpXG4rXHRcdHRvdGFsICs9IGxydXZlY190eXBlX2V2aWN0YWJsZV9zaXplKGxydXZlYywgdHlwZSk7XG4rXG4rXHRyZXR1cm4gdG90YWw7XG4rfVxuK1xuIHN0YXRpYyBib29sIGxydXZlY19pc19zaXphYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyB0b3RhbDtcbkBAIC00ODM4LDE1ICs0ODQ3LDEyOCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbiBcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcdTAwMjZzcCwgXHUwMDI2cHYpO1xuIH1cbiBcbisvKlxuKyAqIFRoZSBNR0xSVSBjb3VudGVycGFydCB0byB0b29fbWFueV9pc29sYXRlZCgpLlxuKyAqXG4rICogdG9vX21hbnlfaXNvbGF0ZWQoKSBjb21wYXJlcyBub2RlLXdpZGUgaXNvbGF0ZWQgY291bnRzIGFnYWluc3RcbisgKiBub2RlLXdpZGUgaW5hY3RpdmUgc2l6ZXMuIEl0IHByZWRhdGVzIHBlci1tZW1jZyBMUlUgbGlzdHMsIHdoaWNoXG4rICogbW92ZWQgaXNvbGF0aW9uIHRvIHBlci1scnV2ZWMgZ3JhbnVsYXJpdHkuIE1HTFJVIHJlY2xhaW1lcnMgY29udGVuZFxuKyAqIHBlciBscnV2ZWMsIHNvIHRoaXMgY2hlY2sgaXMgcGVyIGxydXZlYyBhcyB3ZWxsLCBhbmQgaXNvbGF0aW9uIGluXG4rICogb25lIG1lbWNnIGRvZXMgbm90IHRocm90dGxlIHJlY2xhaW0gaW4gYW5vdGhlci5cbisgKlxuKyAqIFRoZSBsZWdhY3kgdGhyZXNob2xkLCB0aGUgc2l6ZSBvZiB0aGUgaW5hY3RpdmUgbGlzdCwgaXMgbm90IHVzYWJsZVxuKyAqIGhlcmUgZWl0aGVyOiBpbiBNR0xSVSB0aGUgaW5hY3RpdmUgY291bnRlcnMgYXJlIG9ubHkgYSBjb21wYXRpYmlsaXR5XG4rICogc2hpbSAtIHRoZXkganVtcCBhcm91bmQgd2hlbiBzd2FwIHJ1bnMgb3V0IG9yIGEgbWVtY2cgaGl0cyBpdHMgc3dhcFxuKyAqIGxpbWl0LCBhbmQgcHJvYWN0aXZlIGFnaW5nIGNhbiBpbmZsYXRlIHRoZW0uIENvbXBhcmUgYWdhaW5zdCB0aGVcbisgKiB0b3RhbCBudW1iZXIgb2YgZXZpY3RhYmxlIHBhZ2VzIG9mIHRoZSB0eXBlIGRpdmlkZWQgYnkgTUlOX05SX0dFTlMsXG4rICogYXBwcm94aW1hdGluZyB0aGUgc2l6ZSBvZiBvbmUgZ2VuZXJhdGlvbiAtIHRoZSBzYW1lIHVuaXQgdGhlXG4rICogb3JpZ2luYWwgTUdMUlUgYWdpbmcgaGV1cmlzdGljcyB1c2VkLlxuKyAqL1xuK3N0YXRpYyBib29sIGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgaXNvbGF0ZWQsIGV2aWN0YWJsZTtcbitcbitcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoIXdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc2MpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpc29sYXRlZCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbi5ucl9pc29sYXRlZFt0eXBlXSk7XG4rXHRldmljdGFibGUgPSBscnV2ZWNfdHlwZV9ldmljdGFibGVfc2l6ZShscnV2ZWMsIHR5cGUpO1xuK1xuK1x0LypcbitcdCAqIEdGUF9OT0lPL0dGUF9OT0ZTIGNhbGxlcnMgYXJlIGFsbG93ZWQgdG8gaXNvbGF0ZSBtb3JlIHBhZ2VzLCBzb1xuK1x0ICogdGhleSB3b24ndCBiZSBibG9ja2VkIGJ5IG5vcm1hbCBkaXJlY3QtcmVjbGFpbWVycywgZm9ybWluZyBhXG4rXHQgKiBjaXJjdWxhciBkZWFkbG9jay5cbitcdCAqL1xuK1x0aWYgKGdmcF9oYXNfaW9fZnMoc2MtXHUwMDNlZ2ZwX21hc2spKVxuK1x0XHRldmljdGFibGUgXHUwMDNlXHUwMDNlPSAzO1xuK1xuK1x0cmV0dXJuIGlzb2xhdGVkIFx1MDAzZSBldmljdGFibGUgLyBNSU5fTlJfR0VOUztcbit9XG4rXG4rLypcbisgKiBVbmxpa2UgdGhlIGxlZ2FjeSBwYXRoLCB3aGVyZSB0aGUgTFJVIGxpc3QgdG8gaXNvbGF0ZSBmcm9tIGlzIGtub3duXG4rICogYmVmb3JlIGlzb2xhdGlvbiwgaXNvbGF0ZV9mb2xpb3MoKSBwaWNrcyB0aGUgdHlwZSBmcm9tIHRoZSByZWZhdWx0XG4rICogZmVlZGJhY2sgYW5kIG1heSBmYWxsIGJhY2sgdG8gdGhlIG90aGVyIG9uZS4gVGhlcmVmb3JlLCBpbnN0ZWFkIG9mXG4rICogdGhyb3R0bGluZyBvbiBhIHNpbmdsZSB0eXBlLCBjb2xsZWN0IHRoZSBldmljdGFibGUgdHlwZXMgdGhhdCBkbyBub3RcbisgKiBoYXZlIHRvbyBtYW55IGlzb2xhdGVkIGZvbGlvcywgYW5kIG9ubHkgc2xlZXAgd2hlbiBhbGwgb2YgdGhlbSBkby5cbisgKlxuKyAqIFJldHVybnMgdGhlIG1hc2sgb2YgdGhlIHR5cGVzIGlzb2xhdGVfZm9saW9zKCkgbWF5IGlzb2xhdGUgZnJvbSwgb3JcbisgKiAwIGlmIHJlY2xhaW0gc2hvdWxkIHN0b3AuIEFsc28gc2V0cyBAZmF0YWwgdG8gdGVsbCB0aGUgY2FsbGVyIHRoYXRcbisgKiB0aGUgdGFzayByZWNlaXZlZCBhIGZhdGFsIHNpZ25hbCB3aGlsZSB3YWl0aW5nLlxuKyAqL1xuK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbitcdFx0XHRcdFx0ICAgICBpbnQgc3dhcHBpbmVzcyxcbitcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbitcdFx0XHRcdFx0ICAgICBib29sICpmYXRhbClcbit7XG4rXHR1bnNpZ25lZCBpbnQgYWxsb3dlZDtcbitcdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xuK1x0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuK1x0aW50IGk7XG4rXG4rXHQqZmF0YWwgPSBmYWxzZTtcbitcbitcdGZvciAoOzspIHtcbitcdFx0YWxsb3dlZCA9IDA7XG4rXHRcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEEgdHlwZSB3aXRoIG5vIGV2aWN0YWJsZSBmb2xpb3MgaGFzIG5vdGhpbmcgdG9cbitcdFx0XHQgKiBpc29sYXRlLiBEb24ndCBhbGxvdyBpdCwgb3RoZXJ3aXNlIHJlY2xhaW0gY2FuIGJlXG4rXHRcdFx0ICogcmVkaXJlY3RlZCB0byBpdCBhbmQgc3BpbiBtYWtpbmcgbm8gcHJvZ3Jlc3MsIGUuZy5cbitcdFx0XHQgKiB3aGVuIHRoZSBvbmx5IHR5cGUgd2l0aCBmb2xpb3MgaXMgb3Zlci1pc29sYXRlZC5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoIWxydXZlY190eXBlX2V2aWN0YWJsZV9zaXplKGxydXZlYywgaSkpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRpZiAoIWxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQobHJ1dmVjLCBpLCBzYykpXG4rXHRcdFx0XHRhbGxvd2VkIHw9IEJJVChpKTtcbitcdFx0fVxuK1xuK1x0XHRpZiAoYWxsb3dlZCkge1xuK1x0XHRcdC8qIFdha2UgdXAgcmVjbGFpbWVycyB3YWl0aW5nIG9uIHRoZSBpc29sYXRpb24gdG8gZ28gZG93bi4gKi9cbitcdFx0XHR3YWtlX3Rocm90dGxlX2lzb2xhdGVkKHBnZGF0KTtcbitcdFx0XHRyZXR1cm4gYWxsb3dlZDtcbitcdFx0fVxuK1xuK1x0XHQvKlxuK1x0XHQgKiBBbGwgZXZpY3RhYmxlIHR5cGVzIGFyZSBvdmVyLWlzb2xhdGVkLiBMaWtlIHRoZSBsZWdhY3lcbitcdFx0ICogcGF0aCwgd2FpdCBvbmNlIGZvciBjb25jdXJyZW50IHJlY2xhaW1lcnMgdG8gcHV0IHRoZWlyXG4rXHRcdCAqIGlzb2xhdGVkIGZvbGlvcyBiYWNrOyBnaXZlIHVwIGlmIHRoYXQgbWFrZXMgbm8gcHJvZ3Jlc3MuXG4rXHRcdCAqL1xuK1x0XHRpZiAoc3RhbGxlZClcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0c3RhbGxlZCA9IHRydWU7XG4rXHRcdHJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7XG4rXG4rXHRcdC8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi9cbitcdFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG4rXHRcdFx0KmZhdGFsID0gdHJ1ZTtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLFxuLVx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZCxcbi1cdFx0XHQgIGludCAqaXNvbGF0ZV90eXBlLCBpbnQgKmlzb2xhdGVfc2Nhbm5lZClcbitcdFx0XHQgIHVuc2lnbmVkIGludCBhbGxvd2VkLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuK1x0XHRcdCAgaW50ICppc29sYXRlZCwgaW50ICppc29sYXRlX3R5cGUsIGludCAqaXNvbGF0ZV9zY2FubmVkKVxuIHtcbiBcdGludCBpO1xuIFx0aW50IHRvdGFsX3NjYW5uZWQgPSAwO1xuIFx0aW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XG4gXG4rXHQvKlxuK1x0ICogVGhlIHByZWZlcnJlZCB0eXBlIG1heSBoYXZlIGJlZW4gZXhjbHVkZWQgYnlcbitcdCAqIHRocm90dGxlX2V2aWN0YWJsZV90eXBlcygpOyBzdGFydCBmcm9tIHRoZSBvdGhlciBvbmUuXG4rXHQgKi9cbitcdGlmICghKGFsbG93ZWQgXHUwMDI2IEJJVCh0eXBlKSkpXG4rXHRcdHR5cGUgPSAhdHlwZTtcbitcbiBcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHtcbiBcdFx0aW50IHNjYW5uZWQ7XG4gXHRcdGludCB0aWVyID0gZ2V0X3RpZXJfaWR4KGxydXZlYywgdHlwZSk7XG5AQCAtNDg2Myw5ICs0OTg1LDEwIEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdC8qXG4gXHRcdCAqIElmIHNjYW5uZWQgXHUwMDNlIDAgYW5kIGlzb2xhdGVkID09IDAsIGF2b2lkIGZhbGxpbmcgYmFjayB0byB0aGVcbiBcdFx0ICogb3RoZXIgdHlwZSwgYXMgdGhpcyB0eXBlIHJlbWFpbnMgc3VmZmljaWVudC4gRmFsbGluZyBiYWNrXG4tXHRcdCAqIHRvbyByZWFkaWx5IGNhbiBkaXNydXB0IHRoZSBwb3NpdGl2ZV9jdHJsX2VycigpIGJpYXMuXG4rXHRcdCAqIHRvbyByZWFkaWx5IGNhbiBkaXNydXB0IHRoZSBwb3NpdGl2ZV9jdHJsX2VycigpIGJpYXMuIE9ubHlcbitcdFx0ICogZmFsbCBiYWNrIHRvIGEgdHlwZSB0aGF0IGlzIG5vdCB0aHJvdHRsZWQuXG4gXHRcdCAqL1xuLVx0XHRpZiAoIXNjYW5uZWQpXG4rXHRcdGlmICghc2Nhbm5lZCBcdTAwMjZcdTAwMjYgKGFsbG93ZWQgXHUwMDI2IEJJVCghdHlwZSkpKVxuIFx0XHRcdHR5cGUgPSAhdHlwZTtcbiBcdH1cbiBcbkBAIC00ODg4LDE1ICs1MDExLDM2IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0Ym9vbCBza2lwX3JldHJ5ID0gZmFsc2U7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbitcdHVuc2lnbmVkIGludCBhbGxvd2VkO1xuK1x0Ym9vbCBmYXRhbDtcbitcbitcdGFsbG93ZWQgPSB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMobHJ1dmVjLCBzd2FwcGluZXNzLCBzYywgXHUwMDI2ZmF0YWwpO1xuK1x0aWYgKCFhbGxvd2VkKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gTGlrZSB0aGUgbGVnYWN5XG4rXHRcdCAqIHBhdGgsIHByZXRlbmQgc29tZSBwYWdlcyB3ZXJlIHJlY2xhaW1lZCBzbyByZWNsYWltXG4rXHRcdCAqIHVud2luZHMgcXVpY2tseSBpbnN0ZWFkIG9mIGxvb3BpbmcgYmFjayBpbnRvIHRoZVxuK1x0XHQgKiB0aHJvdHRsZS5cbitcdFx0ICovXG4rXHRcdGlmIChmYXRhbClcbitcdFx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgKz0gU1dBUF9DTFVTVEVSX01BWDtcbitcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4gXG4gXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbiBcbiBcdC8qIEluIGNhc2UgZm9saW8gZGVsZXRpb24gbGVmdCBlbXB0eSBvbGQgZ2VucywgZmx1c2ggdGhlbSAqL1xuIFx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XG4gXG4tXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcbitcdHNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLCBhbGxvd2VkLFxuIFx0XHRcdFx0IFx1MDAyNmxpc3QsIFx1MDAyNmlzb2xhdGVkLCBcdTAwMjZ0eXBlLCBcdTAwMjZ0eXBlX3NjYW5uZWQpO1xuIFx0bnJfaXNvbGF0ZWQgPSBpc29sYXRlZDtcbitcdGlmIChucl9pc29sYXRlZCkge1xuK1x0XHRfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlLFxuK1x0XHRcdFx0ICAgICAgbnJfaXNvbGF0ZWQpO1xuK1x0XHRhdG9taWNfbG9uZ19hZGQobnJfaXNvbGF0ZWQsIFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW4ubnJfaXNvbGF0ZWRbdHlwZV0pO1xuK1x0fVxuIFxuIFx0LyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi9cbiBcdGlmIChzY2FubmVkKVxuQEAgLTQ5NTksNiArNTEwMyw5IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRnb3RvIHJldHJ5O1xuIFx0fVxuIFxuK1x0YXRvbWljX2xvbmdfc3ViKG5yX2lzb2xhdGVkLCBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuLm5yX2lzb2xhdGVkW3R5cGVdKTtcbitcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlLCAtbnJfaXNvbGF0ZWQpO1xuK1xuIFx0aWYgKG5yX2lzb2xhdGVkIFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXG4gXHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICsgdHlwZSxcbiBcdFx0XHRcdCBucl9pc29sYXRlZCAtIHRvdGFsX3JlY2xhaW1lZCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMzoxNzo1MS42ODA3NTM3OThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEwNjk3NDQ1OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgd2UgbmVlZCB0byB0aHJvdyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBhdCBpdC4gVGhlIGNoYW5nZXMgc2VlbSB0byBiZSBpbiBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAgYW5kIGBtbS92bXNjYW4uY2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIG15IGF0dGVudGlvbi4gQW55dGhpbmcgdG91Y2hpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhcnRpY3VsYXJseSB0aGVzZSBmaWxlcyBpcyBhbHdheXMgYSBwb3RlbnRpYWwgaG90IHNwb3QuXG5cblRoZSBjb3JlIGNoYW5nZXMgbG9vayB0byBiZTpcbjEuICBBZGRpbmcgYGF0b21pY19sb25nX3QgbnJfaXNvbGF0ZWRbQU5PTl9BTkRfRklMRV07YCB0byBgc3RydWN0IGxydV9nZW5fZm9saW9gLiBUaGlzIGlzIGludGVyZXN0aW5nOyB0cmFja2luZyBpc29sYXRlZCBmb2xpb3MgYXQgYSBgbHJ1X2dlbl9mb2xpb2AgbGV2ZWwgaW5kaWNhdGVzIGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgZm9saW8gaXNvbGF0aW9uIHdpdGhpbiBMUlUgbGlzdHMuXG4yLiAgVXBkYXRlcyB0byBgbHJ1dmVjX3R5cGVfZXZpY3RhYmxlX3NpemVgIGFuZCBgbHJ1dmVjX2V2aWN0YWJsZV9zaXplYCwgd2hpY2ggaXMgZXhwZWN0ZWQgdG8gZ28gYWxvbmcgd2l0aCBtYW5hZ2luZyB0aGVzZSBpc29sYXRlZCBmb2xpb3MuXG4zLiAgTmV3IGZ1bmN0aW9uczogYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWQoKWAgYW5kIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKWAgaW4gYG1tL3Ztc2Nhbi5jYC4gVGhlc2UgaW1wbHkgYSBtZWNoYW5pc20gZm9yIHRocm90dGxpbmcgb3IgbGltaXRpbmcgZm9saW8gaXNvbGF0aW9uIGJhc2VkIG9uIHNvbWUgY3JpdGVyaWEsIGFuZCB0aGF04oCZcyBhIHNpZ25hbCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uLlxuNC4gIE1vZGlmaWNhdGlvbnMgdG8gYGlzb2xhdGVfZm9saW9zKClgIGFuZCBgZXZpY3RfZm9saW9zKClgIHRvIHRyYWNrIGFuZCBtYW5hZ2UgdGhlIGZvbGlvIGNvdW50cyB3aXRoaW4gdGhlIGxydXZlYy5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgbGV0J3MgY2xhcmlmeSB0aGF0IGBzdHJ1Y3QgbHJ1X2dlbl9mb2xpb2AgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFdoZXJlIGlzIHRoaXMgc3RydWN0IGluaXRpYWxpemVkPyBJJ20gZ29pbmcgdG8gcXVpY2tseSBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciB3aGVyZSBgbHJ1Z2VuYCBvciBgc3RydWN0IGxydV9nZW5fZm9saW9gIGlzIGNyZWF0ZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgaXQncyB1c2VkLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgaWYgdGhlIG5ldyBgbnJfaXNvbGF0ZWRgIG1lbWJlciBpcyBiZWluZyBjb3JyZWN0bHkgc2V0IHVwIGFuZCBtYW5hZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQ4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTg6MDIuNzUwNTAyNjExWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjkxODU0MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0xNzU9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fdXBkYXRlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0xODEtXFx0ZW51bSBscnVfbGlzdCBscnUgPSB0eXBlICogTFJVX0lOQUNUSVZFX0ZJTEU7XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDoxODI6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTE4My1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjIwLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MjIxOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnVfZ2VuX2ZvbGlvX3NlcShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yMjItXFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjI2LVxcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MjI3OlxcdGNvbnN0IHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yMjgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTI1NT1zdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9hZGRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHJlY2xhaW1pbmcpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTI2MS1cXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MjYyOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yNjMtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTI2OC1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjI2OTpcXHRzZXEgPSBscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCByZWNsYWltaW5nKTtcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTI3MC1cXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTUzND1lbnVtIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTYyLSAqL1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTYzOnN0cnVjdCBscnVfZ2VuX2ZvbGlvIHtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTU2NC1cXHQvKiB0aGUgYWdpbmcgaW5jcmVtZW50cyB0aGUgeW91bmdlc3QgZ2VuZXJhdGlvbiBudW1iZXIgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTg2LVxcdGJvb2wgZW5hYmxlZDtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjU4NzpcXHQvKiB0aGUgbWVtY2cgZ2VuZXJhdGlvbiB0aGlzIGxydV9nZW5fZm9saW8gYmVsb25ncyB0byAqL1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTg4LVxcdHU4IGdlbjtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjU4OTpcXHQvKiB0aGUgbGlzdCBzZWdtZW50IHRoaXMgbHJ1X2dlbl9mb2xpbyBiZWxvbmdzIHRvICovXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01OTAtXFx0dTggc2VnO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTkxOlxcdC8qIHBlci1ub2RlIGxydV9nZW5fZm9saW8gbGlzdCBmb3IgZ2xvYmFsIHJlY2xhaW0gKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTU5Mi1cXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSBsaXN0O1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD02MTk9c3RydWN0IGxydV9nZW5fbW1fd2FsayB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTYyMS1cXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2MjI6XFx0LyogbWF4X3NlcSBmcm9tIGxydV9nZW5fZm9saW86IGNhbiBiZSBvdXQgb2YgZGF0ZSAqL1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNjIzLVxcdHVuc2lnbmVkIGxvbmcgc2VxO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD02ODE9c3RydWN0IGxydV9nZW5fbWVtY2cge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02ODMtXFx0dW5zaWduZWQgbG9uZyBzZXE7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2ODQ6XFx0LyogZWFjaCBtZW1jZyBoYXMgb25lIGxydV9nZW5fZm9saW8gcGVyIG5vZGUgKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTY4NS1cXHR1bnNpZ25lZCBsb25nIG5yX21lbWNnc1tNRU1DR19OUl9HRU5TXTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY4NjpcXHQvKiBwZXItbm9kZSBscnVfZ2VuX2ZvbGlvIGxpc3QgZm9yIGdsb2JhbCByZWNsYWltICovXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02ODctXFx0c3RydWN0IGhsaXN0X251bGxzX2hlYWRcXHRmaWZvW01FTUNHX05SX0dFTlNdW01FTUNHX05SX0JJTlNdO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD03Njg9c3RydWN0IGxydXZlYyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc4OS1cXHQvKiBldmljdGFibGUgcGFnZXMgZGl2aWRlZCBpbnRvIGdlbmVyYXRpb25zICovXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3OTA6XFx0c3RydWN0IGxydV9nZW5fZm9saW9cXHRcXHRscnVnZW47XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03OTEtI2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNDgwPXR5cGVkZWYgc3RydWN0IHBnbGlzdF9kYXRhIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTYwMC1cXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrIG1tX3dhbGs7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNjAxOlxcdC8qIGxydV9nZW5fZm9saW8gbGlzdCAqL1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTYwMi1cXHRzdHJ1Y3QgbHJ1X2dlbl9tZW1jZyBtZW1jZ19scnU7XFxuLS1cXG5tbS9mb2xpby5jPTQ2Nz12b2lkIGZvbGlvX2FkZF9scnUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNDc2LVxcdCAqIEZvciBwcmVmYXVsdGVkIGZpbGUgZm9saW9zLCBmb2xpb19tYXJrX2FjY2Vzc2VkKCkgc2V0c1xcbm1tL2ZvbGlvLmM6NDc3OlxcdCAqIFBHX3JlZmVyZW5jZWQgc28gbHJ1X2dlbl9mb2xpb19zZXEoKSBwbGFjZXMgdGhlbSBpbnRvXFxubW0vZm9saW8uYy00NzgtXFx0ICogdGhlIHNlY29uZCBvbGRlc3QgZ2VuZXJhdGlvbi5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTMxOTg9c3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXFxuLS1cXG5tbS92bXNjYW4uYy0zMjAxLVxcdGludCBpO1xcbm1tL3Ztc2Nhbi5jOjMyMDI6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy0zMjAzLVxcdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW3R5cGVdKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTMyMTc9c3RhdGljIHZvaWQgcmVzZXRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgYm9vbCBjYXJyeW92ZXIpXFxuLS1cXG5tbS92bXNjYW4uYy0zMjE5LVxcdGludCBoaXN0LCB0aWVyO1xcbm1tL3Ztc2Nhbi5jOjMyMjA6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy0zMjIxLVxcdGJvb2wgY2xlYXIgPSBjYXJyeW92ZXIgPyBOUl9ISVNUX0dFTlMgPT0gMSA6IE5SX0hJU1RfR0VOUyBcXHUwMDNlIDE7XFxuLS1cXG5tbS92bXNjYW4uYz0zMjk5PXN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS92bXNjYW4uYy0zMzAxLVxcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbm1tL3Ztc2Nhbi5jOjMzMDI6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy0zMzAzLVxcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbi0tXFxubW0vdm1zY2FuLmM9MzM0MT1zdGF0aWMgdm9pZCByZXNldF9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXFxuLS1cXG5tbS92bXNjYW4uYy0zMzQ0LVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGxydXZlY19saXZlX2xvY2tfaXJxKHdhbGstXFx1MDAzZWxydXZlYyk7XFxubW0vdm1zY2FuLmM6MzM0NTpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTMzNDYtXFxuLS1cXG5tbS92bXNjYW4uYz0zOTAwPXN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtMzkwMy1cXHRpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSDtcXG5tbS92bXNjYW4uYzozOTA0OlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtMzkwNS1cXHRpbnQgaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxuLS1cXG5tbS92bXNjYW4uYz0zOTUzPXN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtMzk1Ni1cXHRib29sIHNlcV9pbmNfZmxhZyA9IGZhbHNlO1xcbm1tL3Ztc2Nhbi5jOjM5NTc6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy0zOTU4LVxcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XFxuLS1cXG5tbS92bXNjYW4uYy0zOTg1LVxcbm1tL3Ztc2Nhbi5jOjM5ODY6XFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIGxydV9nZW5fZm9saW8gKi9cXG5tbS92bXNjYW4uYy0zOTg3LVxcdGlmIChzd2FwcGluZXNzIFxcdTAwMjZcXHUwMDI2IHN3YXBwaW5lc3MgXFx1MDAzYz0gTUFYX1NXQVBQSU5FU1MpIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwMDU9c3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy00MDA5LVxcdGludCB0eXBlLCB6b25lO1xcbm1tL3Ztc2Nhbi5jOjQwMTA6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy00MDExLXJlc3RhcnQ6XFxuLS1cXG5tbS92bXNjYW4uYz00MDcwPXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNDA3NS1cXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IE5VTEw7XFxubW0vdm1zY2FuLmM6NDA3NjpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQwNzctXFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XFxuLS1cXG5tbS92bXNjYW4uYz00MTU0PXN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY190eXBlX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXFxuLS1cXG5tbS92bXNjYW4uYy00MTU3LVxcdHVuc2lnbmVkIGxvbmcgc2VxLCB0b3RhbCA9IDA7XFxubW0vdm1zY2FuLmM6NDE1ODpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQxNTktXFx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ1OTg9c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2MDAte1xcbm1tL3Ztc2Nhbi5jOjQ2MDE6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmNoaWxkX2xydWdlbiwgKnBhcmVudF9scnVnZW47XFxubW0vdm1zY2FuLmMtNDYwMi1cXHRlbnVtIGxydV9saXN0IGxydSA9IHR5cGUgKiBMUlVfSU5BQ1RJVkVfRklMRTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ2NjM9c3RhdGljIGJvb2wgc29ydF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDY3Mi1cXHRpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzLCB3b3JraW5nc2V0KTtcXG5tbS92bXNjYW4uYzo0NjczOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtNDY3NC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ3MzY9c3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ3NDctXFx0dW5zaWduZWQgbG9uZyByZW1haW5pbmcgPSBucl90b19zY2FuO1xcbm1tL3Ztc2Nhbi5jOjQ3NDg6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy00NzQ5LVxcbi0tXFxubW0vdm1zY2FuLmM9NDk5OD1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwNzgtXFx0XFx0LyogZG9uJ3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cXG5tbS92bXNjYW4uYzo1MDc5OlxcdFxcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcXG5tbS92bXNjYW4uYy01MDgwLVxcdFxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xcbi0tXFxubW0vdm1zY2FuLmM9NTI4NT1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyOTEtXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbm1tL3Ztc2Nhbi5jOjUyOTI6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbjtcXG5tbS92bXNjYW4uYy01MjkzLVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU0MjI9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc3RhdGVfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbm1tL3Ztc2Nhbi5jLTU0MjMte1xcbm1tL3Ztc2Nhbi5jOjU0MjQ6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy01NDI1LVxcbi0tXFxubW0vdm1zY2FuLmM9NTY5Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX3NlcV9zaG93X2Z1bGwoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy01NzAzLVxcdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEoc2VxKTtcXG5tbS92bXNjYW4uYzo1NzA0OlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtNTcwNS1cXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU3NTI9c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3NTYtXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gdjtcXG5tbS92bXNjYW4uYzo1NzU3OlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtNTc1OC1cXHRpbnQgbmlkID0gbHJ1dmVjX3BnZGF0KGxydXZlYyktXFx1MDAzZW5vZGVfaWQ7XFxuLS1cXG5tbS92bXNjYW4uYz02MDE4PXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy02MDIxLVxcdGludCBnZW4sIHR5cGUsIHpvbmU7XFxubW0vdm1zY2FuLmM6NjAyMjpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTYwMjMtXFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MjM1PXN0YXRpYyB2b2lkICpscnVfZ2VuX2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtMjQwLVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG5tbS93b3JraW5nc2V0LmM6MjQxOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW47XFxubW0vd29ya2luZ3NldC5jLTI0Mi1cXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz0yOTI9c3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy0yOTgtXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbm1tL3dvcmtpbmdzZXQuYzoyOTk6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbjtcXG5tbS93b3JraW5nc2V0LmMtMzAwLVxcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMzoxODowNS4wNDIzNjIxNloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTc1NzUzMjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWwgaW4gdGhlIGZpZWxkLCBzdGFydGluZyB3aXRoIHRoZSByZXF1ZXN0ZWQgYm9sZGVkIGhlYWRlcjpcblxuKipEaXZpbmcgaW50byBgbHJ1X2dlbl9pbml0X2xydXZlY2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYGxydV9nZW5faW5pdF9scnV2ZWNgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHNwZWNpZmljIExSVSB2ZWN0b3IgaW5pdGlhbGl6YXRpb24gaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEknbSBhc3N1bWluZyB0aGlzIGlzIGEgY29yZSBjb21wb25lbnQsIHNvIGEgZGVlcCB1bmRlcnN0YW5kaW5nIGlzIGNydWNpYWwuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBncmFzcCBhbnkgc3VidGxlIG9wdGltaXphdGlvbnMsIHBvdGVudGlhbCBwaXRmYWxscywgb3IgZGVzaWduIGNob2ljZXMgdGhhdCBhcmUgYXQgcGxheSBoZXJlLiBMZXQncyBzZWUgaG93IHRoZXkncmUgaGFuZGxpbmcgdGhlIGluaXRpYWwgYWxsb2NhdGlvbiwgd2hhdCBwYXJhbWV0ZXJzIGl0IGFjY2VwdHMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBhbmQgZXZpY3Rpb24gbWVjaGFuaXNtcy4gTXkgbWFpbiBjb25jZXJuIGlzIHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdCBvbiBvdmVyYWxsIHBlcmZvcm1hbmNlIGFuZCBob3cgcm9idXN0IHRoaXMgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBpcy4gSSdtIGxvb2tpbmcgZm9yIGEgY2xlYXIgZGVzY3JpcHRpb24gb2YgYWxsIHRoZSBzdGVwcywgYW55IGFzc3VtcHRpb25zIG1hZGUsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGVycm9yIGNvbmRpdGlvbnMgaGFuZGxlZC4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjM4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTg6MDguNjE4MTE5NzIxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MDE4LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MDE4OlxcdHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuNjAxOTpcXHR7XFxuNjAyMDpcXHRcXHRpbnQgaTtcXG42MDIxOlxcdFxcdGludCBnZW4sIHR5cGUsIHpvbmU7XFxuNjAyMjpcXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbjYwMjM6XFx0XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XFxuNjAyNDpcXHRcXG42MDI1OlxcdFxcdGxydWdlbi1cXHUwMDNlbWF4X3NlcSA9IE1JTl9OUl9HRU5TICsgMTtcXG42MDI2OlxcdFxcdGxydWdlbi1cXHUwMDNlZW5hYmxlZCA9IGxydV9nZW5fZW5hYmxlZCgpO1xcbjYwMjc6XFx0XFxuNjAyODpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IE1JTl9OUl9HRU5TICsgMTsgaSsrKVxcbjYwMjk6XFx0XFx0XFx0bHJ1Z2VuLVxcdTAwM2V0aW1lc3RhbXBzW2ldID0gamlmZmllcztcXG42MDMwOlxcdFxcbjYwMzE6XFx0XFx0Zm9yX2VhY2hfZ2VuX3R5cGVfem9uZShnZW4sIHR5cGUsIHpvbmUpXFxuNjAzMjpcXHRcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bHJ1Z2VuLVxcdTAwM2Vmb2xpb3NbZ2VuXVt0eXBlXVt6b25lXSk7XFxuNjAzMzpcXHRcXG42MDM0OlxcdFxcdGlmIChtbV9zdGF0ZSlcXG42MDM1OlxcdFxcdFxcdG1tX3N0YXRlLVxcdTAwM2VzZXEgPSBNSU5fTlJfR0VOUztcXG42MDM2OlxcdH1cXG42MDM3OlxcdFxcbjYwMzg6XFx0I2lmZGVmIENPTkZJR19NRU1DR1xcbjYwMzk6XFx0XFxuNjA0MDpcXHR2b2lkIGxydV9nZW5faW5pdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuNjA0MTpcXHR7XFxuNjA0MjpcXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xcbjYwNDM6XFx0XFxuNjA0NDpcXHRcXHRpZiAoIW1tX2xpc3QpXFxuNjA0NTpcXHRcXHRcXHRyZXR1cm47XFxuNjA0NjpcXHRcXG42MDQ3OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZtbV9saXN0LVxcdTAwM2VmaWZvKTtcXG42MDQ4OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZtbV9saXN0LVxcdTAwM2Vsb2NrKTtcXG42MDQ5OlxcdH1cXG42MDUwOlxcdFxcbjYwNTE6XFx0dm9pZCBscnVfZ2VuX2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbjYwNTI6XFx0e1xcbjYwNTM6XFx0XFx0aW50IGk7XFxuNjA1NDpcXHRcXHRpbnQgbmlkO1xcbjYwNTU6XFx0XFx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcXG42MDU2OlxcdFxcbjYwNTc6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKG1tX2xpc3QgXFx1MDAyNlxcdTAwMjYgIWxpc3RfZW1wdHkoXFx1MDAyNm1tX2xpc3QtXFx1MDAzZWZpZm8pKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTg6MDguNjE4NTY1MzUxWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc0ODgyODYwNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS01TQU4gTmVlZCBpbiBUaGlzIE1HTFJVIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBhbmFseXNpcyBmb2N1c2VzIG9uIHdoZXRoZXIgdGhpcyBNR0xSVSBwYXRjaCBpbnRyb2R1Y2luZyBjaGFuZ2VzIGluIHBhZ2UgcmVjbGFpbSBhbmQgdGhyb3R0bGluZyBwb3NlcyBhIHJpc2sgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgdGh1cyBuZWNlc3NpdGF0aW5nIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgY2hlY2tzLiBJJ3ZlIGdvbmUgdGhyb3VnaCB0aGUgY29kZSBhbmQgdGhlIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyB3aXRoIGEgZmluZS10b290aCBjb21iLlxuXG5GaXJzdCwgSSBjb25maXJtIHRoYXQgdGhlIGBzdHJ1Y3QgbHJ1dmVjYCBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHksIGVpdGhlciB3aXRoaW4gYHN0cnVjdCBwZ2xpc3RfZGF0YWAgKHN0YXRpY2FsbHkgb3IgZHVyaW5nIGVhcmx5IGJvb3QpIG9yIHdpdGhpbiBgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGVgIHZpYSBga3phbGxvY2AuIFRoaXMgZW5zdXJlcyB0aGF0IGZpZWxkcyBhcmUgZWl0aGVyIHplcm9lZCBvciBvdGhlcndpc2Ugc2FmZWx5IGluaXRpYWxpemVkLiBJIGFsc28gbm90ZWQgdGhhdCBhdG9taWMgbG9uZyB0eXBlcywgbGlrZSBgZXZpY3RlZGAgYW5kIGByZWZhdWx0ZWRgIHdpdGhpbiBgc3RydWN0IGxydV9nZW5fZm9saW9gIGFyZSBhbHNvIHplcm8taW5pdGlhbGl6ZWQgYnkgZGVmYXVsdC5cblxuVGhlbiBJIGV4YW1pbmVkIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYCBhbmQgYGV2aWN0X2ZvbGlvc2AsIGZvY3VzaW5nIG9uIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uLiBJbiBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYCwgdGhlIGNvZGUgcGFzc2VzIGEgcG9pbnRlciB0byBgYm9vbCAqZmF0YWxgIGFuZCBpbml0aWFsaXplcyBpdCBpbW1lZGlhdGVseSB3aXRoIGAqZmF0YWwgPSBmYWxzZTtgLiBBIGxvY2FsIGBib29sIHN0YWxsZWQgPSBmYWxzZTtgIGlzIGFsc28gaW5pdGlhbGl6ZWQuIEluIGBldmljdF9mb2xpb3NgLCB0aGUgYHVuc2lnbmVkIGludCBhbGxvd2VkYCB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCBieSByZXR1cm4gZnJvbSBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYC4gVGhpcyBpcyBpbXBvcnRhbnQsIG1ha2luZyBpdCBzbyB0aGF0IGBmYXRhbGAgYW5kIGBhbGxvd2VkYCBhcmUgcHJvcGVybHkgc2V0LiBJZiBgIWFsbG93ZWRgIHRoZW4gYSBjb25kaXRpb24gZXhlY3V0ZXMgd2hlcmUgYHNjLVx1MDAzZW5yX3JlY2xhaW1lZCArPSBTV0FQX0NMVVNURVJfTUFYO2AgLlxuXG5UaGUgY29yZSBjb25jZXJuIGhlcmUgaXMgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHBvdGVudGlhbCBtZW1vcnkgbGVha3MsIGFuZCBhbnkgY2hhbmNlIG9mIHBhc3NpbmcgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgaW50byB1c2VyIHNwYWNlLiBJIGNhbiBjb25maXJtIHRoYXQgYWxsIHZhcmlhYmxlcywgbGlrZSBgYWxsb3dlZGAgYW5kIGBmYXRhbGAsIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgdGhlcmUgYXJlIG5vIGluc3RhbmNlcyBvZiB1c2VyLXNwYWNlIGNvcGllcyAoYGNvcHlfdG9fdXNlcmAsIHN5c2NhbGwgcmV0dXJuLCBldGMuKSB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuIEZ1cnRoZXJtb3JlLCBJIHNlZSBubyByaXNreSBzdGFjay9oZWFwIGJ1ZmZlciBtYW5pcHVsYXRpb25zIHRoYXQgY291bGQgbGVhdmUgbWVtb3J5IHVuaW5pdGlhbGl6ZWQuXG5cbk5vdywgbGV0J3Mgc3RlcCB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYS5cblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U6KiogTm9wZS4gTm90aGluZyBoZXJlIHRoYXQncyBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBOby4gQWxsIGJyYW5jaGluZyBkZWNpc2lvbnMgcmVseSBvbiB2YXJpYWJsZXMgdGhhdCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgYWxsIGZpZWxkcyBhcmUgc2FmZWx5IHplcm8tYWxsb2NhdGVkIG9yIG90aGVyd2lzZSBpbml0aWFsaXplZC5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyB1c2VkIGxhdGVyOioqIE5vdCBoZXJlLiBUaGUgc3RydWN0dXJlcyBhbmQgdGhlaXIgZmllbGRzIGFyZSBwcm9wZXJseSBzZXQgdXAuXG40LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YToqKiBOb3QgYXBwbGljYWJsZS4gVGhlcmUncyBubyBtYW5pcHVsYXRpb24gb2YgZXhpc3RpbmcgYnVmZmVycyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgdGhyb3VnaCBib3VuZHMgaXNzdWVzLlxuXG5HaXZlbiB0aGlzIHRob3JvdWdoIHJldmlldyBhZ2FpbnN0IHRoZSBOZWVkc0tNU0FOIGNyaXRlcmlhLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgKipLTVNBTiBpcyBub3QgbmVlZGVkIGhlcmUuKiogU3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgd291bGQgYmUgdGhlIGFwcHJvcHJpYXRlIHRvb2xzIHRvIGNoZWNrIGZvciBjb25jdXJyZW5jeS9sb2NraW5nL3JlZmVyZW5jZS9tZW1vcnkgc2FmZXR5IHByb2JsZW1zLiBUaGUgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJlIG1pbmltYWwgaW4gdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NTEsIk91dHB1dFRva2VucyI6MzAzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDM6MTg6MTYuMTA2ODUzNzk4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBlci1scnV2ZWMgaXNvbGF0aW9uIGFjY291bnRpbmcgKGBucl9pc29sYXRlZGApIGFuZCBpc29sYXRpb24gdGhyb3R0bGluZyAoYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRgLCBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYCkgZm9yIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0uXFxuXFxuQW5hbHlzaXMgYWdhaW5zdCBLTVNBTiBhcHBsaWNhYmlsaXR5OlxcbjEuIFVzZXItc3BhY2UgbGVha3M6IE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgZXhwb3NlZCB2aWEgaW9jdGxzL3N5c2ZzL25ldGxpbmsvQlBGIGJ1ZmZlcnMuXFxuMi4gVW5pbml0aWFsaXplZCB2YXJpYWJsZXM6IEFsbCBhZGRlZCBsb2NhbCB2YXJpYWJsZXMgKGBhbGxvd2VkYCwgYGZhdGFsYCwgYHN0YWxsZWRgKSBhbmQgc3RydWN0IGZpZWxkcyAoYG5yX2lzb2xhdGVkYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFuZCBtYW5hZ2VkIChlLmcuLCBgKmZhdGFsYCBpcyBpbml0aWFsaXplZCB0byBmYWxzZSB1cG9uIGVudGVyaW5nIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKWAsIGBzdHJ1Y3QgbHJ1dmVjYCBtZW1vcnkgaXMgemVyby1hbGxvY2F0ZWQgZHVyaW5nIG5vZGUvbWVtY2cgaW5pdGlhbGl6YXRpb24pLlxcbjMuIEJ1ZmZlciBib3VuZHMgLyBtZW1vcnkgaGFuZGxpbmc6IFRoZSBwYXRjaCBvbmx5IGFkanVzdHMgcmVjbGFpbWVyIHNjaGVkdWxpbmcsIHRocm90dGxpbmcsIGFuZCBpc29sYXRpb24gY291bnRlcnMgd2l0aG91dCB0b3VjaGluZyB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3MsIHZhcmlhYmxlLWxlbmd0aCBidWZmZXJzLCBvciBzdHJ1Y3QgcGFkZGluZy5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIHJlbGF0ZSB0byByZWNsYWltIHRocm90dGxpbmcsIGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBjb3VudGVyIGltYmFsYW5jZXMsIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgKExPQ0tERVAsIEtBU0FOLCBXQVJOX09OKS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBlci1scnV2ZWMgaXNvbGF0aW9uIGFjY291bnRpbmcgKGBucl9pc29sYXRlZGApIGFuZCBpc29sYXRpb24gdGhyb3R0bGluZyAoYGxydV9nZW5fdG9vX21hbnlfaXNvbGF0ZWRgLCBgdGhyb3R0bGVfZXZpY3RhYmxlX3R5cGVzYCkgZm9yIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0uXFxuXFxuQW5hbHlzaXMgYWdhaW5zdCBLTVNBTiBhcHBsaWNhYmlsaXR5OlxcbjEuIFVzZXItc3BhY2UgbGVha3M6IE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgZXhwb3NlZCB2aWEgaW9jdGxzL3N5c2ZzL25ldGxpbmsvQlBGIGJ1ZmZlcnMuXFxuMi4gVW5pbml0aWFsaXplZCB2YXJpYWJsZXM6IEFsbCBhZGRlZCBsb2NhbCB2YXJpYWJsZXMgKGBhbGxvd2VkYCwgYGZhdGFsYCwgYHN0YWxsZWRgKSBhbmQgc3RydWN0IGZpZWxkcyAoYG5yX2lzb2xhdGVkYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFuZCBtYW5hZ2VkIChlLmcuLCBgKmZhdGFsYCBpcyBpbml0aWFsaXplZCB0byBmYWxzZSB1cG9uIGVudGVyaW5nIGB0aHJvdHRsZV9ldmljdGFibGVfdHlwZXMoKWAsIGBzdHJ1Y3QgbHJ1dmVjYCBtZW1vcnkgaXMgemVyby1hbGxvY2F0ZWQgZHVyaW5nIG5vZGUvbWVtY2cgaW5pdGlhbGl6YXRpb24pLlxcbjMuIEJ1ZmZlciBib3VuZHMgLyBtZW1vcnkgaGFuZGxpbmc6IFRoZSBwYXRjaCBvbmx5IGFkanVzdHMgcmVjbGFpbWVyIHNjaGVkdWxpbmcsIHRocm90dGxpbmcsIGFuZCBpc29sYXRpb24gY291bnRlcnMgd2l0aG91dCB0b3VjaGluZyB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3MsIHZhcmlhYmxlLWxlbmd0aCBidWZmZXJzLCBvciBzdHJ1Y3QgcGFkZGluZy5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIHJlbGF0ZSB0byByZWNsYWltIHRocm90dGxpbmcsIGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBjb3VudGVyIGltYmFsYW5jZXMsIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgKExPQ0tERVAsIEtBU0FOLCBXQVJOX09OKS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowjwbll[1] Phase: Succeeded StartedAt: 2026-09-03 03:18:28 +0000 UTC FinishedAt: 2026-09-03 03:18:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbll[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 03:18:28 +0000 UTC FinishedAt: 2026-09-03 03:18:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbll[2] Phase: Succeeded StartedAt: 2026-09-03 03:18:28 +0000 UTC FinishedAt: 2026-09-03 06:58:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 03:18:28 +0000 UTC FinishedAt: 2026-09-03 06:58:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 03:18:28 +0000 UTC FinishedAt: 2026-09-03 03:18:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 03:18:28 +0000 UTC FinishedAt: 2026-09-03 03:18:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjwbll/series-workflowjwbll-convert-artifact-1609391215/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 03:18:38 +0000 UTC FinishedAt: 2026-09-03 03:35:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 03:18:38 +0000 UTC FinishedAt: 2026-09-03 03:35:51 +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:*fc6b10f4-1b30-406f-b44a-7d4bf33d183b,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-workflowjwbll/series-workflowjwbll-convert-artifact-1609391215/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": "417caab7-0b3a-4d49-bc90-9925daff28e5", "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-workflowjwbll/series-workflowjwbll-build-action-3622574389/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 03:18:38 +0000 UTC FinishedAt: 2026-09-03 03:35:41 +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:*fc6b10f4-1b30-406f-b44a-7d4bf33d183b,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-workflowjwbll/series-workflowjwbll-convert-artifact-1609391215/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": "417caab7-0b3a-4d49-bc90-9925daff28e5", "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-workflowjwbll/series-workflowjwbll-build-action-3622574389/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 03:35:51 +0000 UTC FinishedAt: 2026-09-03 03:35:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 03:35:51 +0000 UTC FinishedAt: 2026-09-03 03:35:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 03:35:51 +0000 UTC FinishedAt: 2026-09-03 03:36:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 03:35:51 +0000 UTC FinishedAt: 2026-09-03 03:35:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjwbll/series-workflowjwbll-convert-artifact-3022774974/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 03:36:01 +0000 UTC FinishedAt: 2026-09-03 03:37:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 03:36:01 +0000 UTC FinishedAt: 2026-09-03 03:37:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*417caab7-0b3a-4d49-bc90-9925daff28e5,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-workflowjwbll/series-workflowjwbll-build-action-3622574389/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-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 03:37:51 +0000 UTC FinishedAt: 2026-09-03 03:37:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 03:37:51 +0000 UTC FinishedAt: 2026-09-03 03:37:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 03:37:51 +0000 UTC FinishedAt: 2026-09-03 03:55:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 03:37:51 +0000 UTC FinishedAt: 2026-09-03 03:55:00 +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:*fc6b10f4-1b30-406f-b44a-7d4bf33d183b,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-workflowjwbll/series-workflowjwbll-convert-artifact-3022774974/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": "a56a5b35-ba4a-42d9-9b0f-782e27f4b55b", "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-workflowjwbll/series-workflowjwbll-build-action-780573714/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 03:37:51 +0000 UTC FinishedAt: 2026-09-03 03:54:50 +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:*fc6b10f4-1b30-406f-b44a-7d4bf33d183b,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-workflowjwbll/series-workflowjwbll-convert-artifact-3022774974/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": "a56a5b35-ba4a-42d9-9b0f-782e27f4b55b", "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-workflowjwbll/series-workflowjwbll-build-action-780573714/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 03:55:00 +0000 UTC FinishedAt: 2026-09-03 03:55:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 03:55:00 +0000 UTC FinishedAt: 2026-09-03 03:55:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 03:55:00 +0000 UTC FinishedAt: 2026-09-03 03:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 03:55:00 +0000 UTC FinishedAt: 2026-09-03 03:56:46 +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:*a56a5b35-ba4a-42d9-9b0f-782e27f4b55b,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-workflowjwbll/series-workflowjwbll-build-action-780573714/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-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 03:56:55 +0000 UTC FinishedAt: 2026-09-03 06:58:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 03:56:55 +0000 UTC FinishedAt: 2026-09-03 06:58:30 +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":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"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:*417caab7-0b3a-4d49-bc90-9925daff28e5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a56a5b35-ba4a-42d9-9b0f-782e27f4b55b,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-workflowjwbll/series-workflowjwbll-build-action-3622574389/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-workflowjwbll/series-workflowjwbll-build-action-780573714/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 03:56:55 +0000 UTC FinishedAt: 2026-09-03 03:57:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 03:56:55 +0000 UTC FinishedAt: 2026-09-03 03:56:59 +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":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"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-workflowjwbll/series-workflowjwbll-convert-artifact-478506691/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 03:56:55 +0000 UTC FinishedAt: 2026-09-03 03:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 03:56:55 +0000 UTC FinishedAt: 2026-09-03 03:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 03:56:55 +0000 UTC FinishedAt: 2026-09-03 03:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 03:57:05 +0000 UTC FinishedAt: 2026-09-03 06:58:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["throttle_evictable_types","lru_gen_too_many_isolated","isolate_folios","evict_folios","lru_gen_seq_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"69a9dc82f30f50c5ed1dae4a24ffdd25dabc2e1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"669520c8-5fd0-4a50-93f7-4a408f233daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 03:57:05 +0000 UTC FinishedAt: 2026-09-03 06:58:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*417caab7-0b3a-4d49-bc90-9925daff28e5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a56a5b35-ba4a-42d9-9b0f-782e27f4b55b,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-workflowjwbll/series-workflowjwbll-build-action-3622574389/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-workflowjwbll/series-workflowjwbll-build-action-780573714/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-workflowjwbll/series-workflowjwbll-convert-artifact-478506691/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}