Name: series-workflowvpl4n Phase: Succeeded StartedAt: 2026-08-11 05:41:14 +0000 UTC FinishedAt: 2026-08-11 09:42:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpl4n[0] Phase: Succeeded StartedAt: 2026-08-11 05:41:14 +0000 UTC FinishedAt: 2026-08-11 06:00:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpl4n[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 05:41:14 +0000 UTC FinishedAt: 2026-08-11 06:00:34 +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": "1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "CMA", "CPUSETS" ], "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": "1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "CMA", "CPUSETS" ], "series_id": "091a59e4-feb2-4ed2-83e0-cb8a357168cf" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hugetlb_cma_alloc_frozen_folio" ], "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+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7Q1BVU0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHdoZW4gYG5vZGVtYXNrYCBpcyBOVUxMIGJ5IGZhbGxpbmcgYmFjayB0byBgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkYCBhbmQgaW50cm9kdWNpbmcgYSByZXRyeSBsb29wLiBUaGUgbG9jYWwgdmFyaWFibGUgYGNwdXNldF9tZW1zX2Nvb2tpZWAgaXMgb25seSBpbml0aWFsaXplZCB3aGVuIGBub2RlbWFza2AgaXMgTlVMTCwgYnV0IGR1ZSB0byBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24gaW4gdGhlIGNvbmRpdGlvbiBgIW5vZGVtYXNrIFx1MDAyNlx1MDAyNiB1bmxpa2VseShyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKWAsIGl0IGlzIG5ldmVyIHJlYWQgdW5pbml0aWFsaXplZC4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIGFuZCBLQVNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgdG8gcmVzcGVjdCBjcHVzZXQgY29uc3RyYWludHMgd2hlbiBgbm9kZW1hc2tgIGlzIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIChIdWdlVExCICYjNDM7IENNQSkuIFRoZSBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHdoZW4gYWxsb2NhdGluZyBnaWdhbnRpYyBodWdlIHBhZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDRjY2I0MDQwNDkxZDBhN2E3MDUwMjMwNDFiOWUxYWM5M2RhYWM4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDA1OjU4OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfY21hLmMgYi9tbS9odWdldGxiX2NtYS5jXG5pbmRleCAzOTM0NGQ2Yzc4ZDg0Li4zZTIyMTYxNjg2ZDJmIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYl9jbWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYl9jbWEuY1xuQEAgLTMsNiAmIzQzOzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbWEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY3B1c2V0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbV9pbmxpbmUuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9wYWdlLmhcdTAwM2VcbkBAIC0zMCwxNSAmIzQzOzMxLDI1IEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRpbnQgbm9kZTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG4mIzQzO1x0Y29uc3Qgbm9kZW1hc2tfdCAqbm1hc2s7XG4mIzQzO1x0dW5zaWduZWQgaW50IGNwdXNldF9tZW1zX2Nvb2tpZTtcbiBcbiBcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSlcbiYjNDM7cmV0cnlfY3B1c2V0OlxuJiM0MztcdGlmICghbm9kZW1hc2spIHtcbiYjNDM7XHRcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG4mIzQzO1x0XHRubWFzayA9IFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0bm1hc2sgPSBub2RlbWFzaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChodWdldGxiX2NtYVtuaWRdIFx1MDAyNlx1MDAyNiBub2RlX2lzc2V0KG5pZCwgKm5tYXNrKSlcbiBcdFx0cGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpO1xuIFxuIFx0aWYgKCFwYWdlIFx1MDAyNlx1MDAyNiAhKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9USElTTk9ERSkpIHtcbi1cdFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsICpub2RlbWFzaykge1xuJiM0MztcdFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsICpubWFzaykge1xuIFx0XHRcdGlmIChub2RlID09IG5pZCB8fCAhaHVnZXRsYl9jbWFbbm9kZV0pXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbkBAIC00OCw4ICYjNDM7NTksMTIgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKCFwYWdlKVxuJiM0MztcdGlmICghcGFnZSkge1xuJiM0MztcdFx0aWYgKCFub2RlbWFzayBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICB1bmxpa2VseShyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKSlcbiYjNDM7XHRcdFx0Z290byByZXRyeV9jcHVzZXQ7XG4gXHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiBcbiBcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiBcdGZvbGlvX3NldF9odWdldGxiX2NtYShmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7Q1BVU0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB0byByZXNwZWN0IGNwdXNldCBjb25zdHJhaW50cyB3aGVuIGBub2RlbWFza2AgaXMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgKEh1Z2VUTEIgJiM0MzsgQ01BKS4gVGhlIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2Ugd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGh1Z2UgcGFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkNGNjYjQwNDA0OTFkMGE3YTcwNTAyMzA0MWI5ZTFhYzkzZGFhYzhmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMDU6NTg6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdldGxiX2NtYS5jIGIvbW0vaHVnZXRsYl9jbWEuYwppbmRleCAzOTM0NGQ2Yzc4ZDg0Li4zZTIyMTYxNjg2ZDJmIDEwMDY0NAotLS0gYS9tbS9odWdldGxiX2NtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGJfY21hLmMKQEAgLTMsNiAmIzQzOzMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY21hLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY3B1c2V0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW1faW5saW5lLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vcGFnZS5oJmd0OwpAQCAtMzAsMTUgJiM0MzszMSwyNSBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLAogCWludCBub2RlOwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwomIzQzOwljb25zdCBub2RlbWFza190ICpubWFzazsKJiM0MzsJdW5zaWduZWQgaW50IGNwdXNldF9tZW1zX2Nvb2tpZTsKIAogCWlmICghaHVnZXRsYl9jbWFfc2l6ZSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoaHVnZXRsYl9jbWFbbmlkXSkKJiM0MztyZXRyeV9jcHVzZXQ6CiYjNDM7CWlmICghbm9kZW1hc2spIHsKJiM0MzsJCWNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7CiYjNDM7CQlubWFzayA9ICZhbXA7Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkOwomIzQzOwl9IGVsc2UgewomIzQzOwkJbm1hc2sgPSBub2RlbWFzazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaHVnZXRsYl9jbWFbbmlkXSAmYW1wOyZhbXA7IG5vZGVfaXNzZXQobmlkLCAqbm1hc2spKQogCQlwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7CiAKIAlpZiAoIXBhZ2UgJmFtcDsmYW1wOyAhKGdmcF9tYXNrICZhbXA7IF9fR0ZQX1RISVNOT0RFKSkgewotCQlmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgKm5vZGVtYXNrKSB7CiYjNDM7CQlmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgKm5tYXNrKSB7CiAJCQlpZiAobm9kZSA9PSBuaWQgfHwgIWh1Z2V0bGJfY21hW25vZGVdKQogCQkJCWNvbnRpbnVlOwogCkBAIC00OCw4ICYjNDM7NTksMTIgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywKIAkJfQogCX0KIAotCWlmICghcGFnZSkKJiM0MzsJaWYgKCFwYWdlKSB7CiYjNDM7CQlpZiAoIW5vZGVtYXNrICZhbXA7JmFtcDsKJiM0MzsJCSAgICB1bmxpa2VseShyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKSkKJiM0MzsJCQlnb3RvIHJldHJ5X2NwdXNldDsKIAkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KIAogCWZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKIAlmb2xpb19zZXRfaHVnZXRsYl9jbWEoZm9saW8pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHVnZXRsYiBDTUEgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0vaHVnZXRsYl9jbWEuY2AsIHNwZWNpZmljYWxseSB0aGUgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24uIEZyb20gd2hhdCBJIGNhbiBzZWUsIGl0IHNlZW1zIHRoZSBjb3JlIGNoYW5nZSBmb2N1c2VzIG9uIGludGVncmF0aW5nIGNwdXNldCBub2RlbWFzayBjaGVja3MgZHVyaW5nIGh1Z2V0bGIgZm9saW8gYWxsb2NhdGlvbiBmcm9tIENNQS4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhhdCB3aGVuIGEgYG5vZGVtYXNrYCBpcyBhYnNlbnQsIHRoZSBjb2RlIHNtYXJ0bHkgZGVmYXVsdHMgdG8gdXNpbmcgYGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZGAsIGFuZCBpdOKAmXMgZXZlbiBzZXQgdXAgdG8gcmV0cnkgaWYgdGhlIGNwdXNldCBtZW1zIGNvbmZpZ3VyYXRpb24gc2hpZnRzIGluIHRoZSBtaWRkbGUgb2YgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4KCk5vdywgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2lkZWx5IHRoaXMgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24gaXMgdXNlZC4gVGhlIGNvbnRleHQgb2YgdGhpcyBtb2RpZmljYXRpb24gaXMgY3JpdGljYWwsIHNvIGxldOKAmXMgZGVsdmUgaW50byBpdHMgY2FsbCBzaXRlcy4gV2hhdCBhcmUgdGhlIHJlbGV2YW50IGNhbGxlcnMsIGFuZCB3aGF0IGFyZSB0aGVpciBzcGVjaWZpYyBuZWVkcz8gS25vd2luZyB0aGF0IHdpbGwgY2xhcmlmeSB0aGUgcG90ZW50aWFsIGltcGFjdCBhbmQgYW55IHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5ldyBub2RlbWFzayBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTEzNjA9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYi5jLTEzNjQtXG5tbS9odWdldGxiLmM6MTM2NTpcdGZvbGlvID0gaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKG9yZGVyLCBnZnBfbWFzaywgbmlkLCBub2RlbWFzayk7XG5tbS9odWdldGxiLmMtMTM2Ni1cdGlmIChmb2xpbylcbi0tXG5tbS9odWdldGxiX2NtYS5jPTIyPXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiX2NtYS5jLTI3LVxubW0vaHVnZXRsYl9jbWEuYzoyODpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxubW0vaHVnZXRsYl9jbWEuYy0yOS1cdFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4tLVxubW0vaHVnZXRsYl9jbWEuaD02PXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9odWdldGxiX2NtYS5oOjc6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbm1tL2h1Z2V0bGJfY21hLmgtOC1cdFx0XHRcdCAgICAgIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKTtcbi0tXG5tbS9odWdldGxiX2NtYS5oPTE2PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmgtMTktXG5tbS9odWdldGxiX2NtYS5oOjIwOnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLFxubW0vaHVnZXRsYl9jbWEuaC0yMS1cdFx0Z2ZwX3QgZ2ZwX21hc2ssXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjk2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqVHJhY2luZyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCoqCgpBbHJpZ2h0LCBzbyBJIHNlZSBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBjYWxsZWQgZnJvbSB3aXRoaW4gYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AsIHdoaWNoIGlzIGluIGBtbS9odWdldGxiLmNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgbGlrZWx5IGFuIGltcG9ydGFudCBjb25uZWN0aW9uIHRvIGZvbGxvdyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gd2l0aGluIHRoZSBodWdlIHBhZ2VzIHN1YnN5c3RlbS4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG1lY2hhbmljcyBvZiB0aGF0IGludGVyYWN0aW9uLiBHaXZlbiB0aGF0LCBsZXQgbWUgc3RhcnQgYnkgcXVpY2tseSBjaGVja2luZyB0aGUgdXNhZ2Ugb2YgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgaXRzZWxmLiBLbm93aW5nIHdoZXJlICppdCogaXMgY2FsbGVkIGZyb20gd2lsbCBoZWxwIG1lIGJ1aWxkIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIGZsb3cgYW5kIHB1cnBvc2Ugb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBhbmQgaXRzIHJlbGF0aW9uIHRvIHRoZSBvdmVyYWxsIGh1Z2UgcGFnZXMgYXJjaGl0ZWN0dXJlLiBJdCYjMzk7cyBhIGtleSBwYXJ0IG9mIHVudGFuZ2xpbmcgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0xMzIwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTM1OS0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0NPTlRJR19BTExPQylcbm1tL2h1Z2V0bGIuYzoxMzYwOnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxubW0vaHVnZXRsYi5jLTEzNjEtXHRcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL2h1Z2V0bGIuYy0xMzc2LSNlbHNlIC8qICFDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRSB8fCAhQ09ORklHX0NPTlRJR19BTExPQyAqL1xubW0vaHVnZXRsYi5jOjEzNzc6c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsXG5tbS9odWdldGxiLmMtMTM3OC1cdFx0XHRcdFx0ICBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9odWdldGxiLmM9MTgzNj1zdGF0aWMgc3RydWN0IGZvbGlvICpvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTg0Ni1cdGlmIChvcmRlcl9pc19naWdhbnRpYyhvcmRlcikpXG5tbS9odWdldGxiLmM6MTg0NzpcdFx0Zm9saW8gPSBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5tYXNrKTtcbm1tL2h1Z2V0bGIuYy0xODQ4LVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NDYKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGEgTGFyZ2UgTWVtb3J5IEFsbG9jYXRpb24qKgoKT2theSwgc28gSSBzZWUgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgaXMgYmVpbmcgY2FsbGVkIHNwZWNpZmljYWxseSBmcm9tIGBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW9gLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJdCBtZWFucyB0aGVyZSYjMzk7cyBhIHBhcnRpY3VsYXIsIGZvY3VzZWQgcGF0aHdheSBmb3IgdGhlc2UgJiMzNDtnaWdhbnRpYyYjMzQ7IGZvbGlvIGFsbG9jYXRpb25zLCBhbmQgaXQmIzM5O3MgdGllZCB0byBmcmVzaCBodWdlIHBhZ2UgYWxsb2NhdGlvbnMuIE15IG5leHQgbW92ZSBpcyBjbGVhcjogSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSB1c2FnZSBvZiBgb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYC4gVW5kZXJzdGFuZGluZyAqd2h5KiBhbmQgKmhvdyogaXQmIzM5O3MgYmVpbmcgY2FsbGVkIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcHVycG9zZSBvZiB0aGVzZSBsYXJnZSBhbGxvY2F0aW9ucyBhbmQgdGhlaXIgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gVGhpcyBzZWVtcyBsaWtlIGEgcHJvbWlzaW5nIGxlYWQgdG8gZm9sbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTc5MT1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19idWRkeV9mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9odWdldGxiLmMtMTgzNS1cbm1tL2h1Z2V0bGIuYzoxODM2OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKm9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxubW0vaHVnZXRsYi5jLTE4MzctXHRcdGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLCBub2RlbWFza190ICpubWFzayxcbi0tXG5tbS9odWdldGxiLmM9MTg2Mz1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTE4NjctXG5tbS9odWdldGxiLmM6MTg2ODpcdGZvbGlvID0gb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsIG5tYXNrLCBOVUxMKTtcbm1tL2h1Z2V0bGIuYy0xODY5LVx0aWYgKGZvbGlvKVxuLS1cbm1tL2h1Z2V0bGIuYz0xODk2PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX3Bvb2xfaHVnZV9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0xOTA2LVxubW0vaHVnZXRsYi5jOjE5MDc6XHRcdGZvbGlvID0gb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBub2RlLFxubW0vaHVnZXRsYi5jLTE5MDgtXHRcdFx0XHRcdG5vZGVzX2FsbG93ZWQsIG5vZGVfYWxsb2Nfbm9yZXRyeSk7XG4tLVxubW0vaHVnZXRsYi5jPTMzNzI9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfaHN0YXRlX2FsbG9jX3BhZ2VzX29uZW5vZGUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZClcbi0tXG5tbS9odWdldGxiLmMtMzM4NS1cbm1tL2h1Z2V0bGIuYzozMzg2Olx0XHRcdGZvbGlvID0gb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsXG5tbS9odWdldGxiLmMtMzM4Ny1cdFx0XHRcdFx0XHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBOVUxMKTtcbi0tXG5tbS9odWdldGxiLmMtMzM5MS1cdFx0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmZvbGlvX2xpc3QpO1xubW0vaHVnZXRsYi5jOjMzOTI6XHRcdFx0XHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLFxubW0vaHVnZXRsYi5jLTMzOTMtXHRcdFx0XHRcdFx0XHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBOVUxMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzY0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIdWdldGxiIEZvbGlvIEFsbG9jYXRpb24gYW5kIENwdXNldCBDb25zdHJhaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGh1Z2V0bGIgZm9saW9zIGFyZSBhbGxvY2F0ZWQuIFNwZWNpZmljYWxseSwgYGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW9gIGFuZCBgYWxsb2NfcG9vbF9odWdlX2ZvbGlvYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMsIHdoaWNoIEkga25vdyBhcmUgZnVuZGFtZW50YWwgdG8gdGhlIEh1Z2VUTEIgYW5kIENNQSBsb2dpYyDigJMgZGVmaW5pdGVseSBjb3JlIGtlcm5lbCBzdHVmZi4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24uIEl0JiMzOTtzIG1ha2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCB3aGljaCBhbHdheXMgd2FycmFudHMgY2xvc2UgYXR0ZW50aW9uLiBUaGUgY3JpdGljYWwgYXNwZWN0IGhlcmUgaXMgaG93IGl0IGludGVyYWN0cyB3aXRoIGNwdXNldHMgd2hlbiB0aGUgYG5vZGVtYXNrYCBpcyBzZXQgdG8gTlVMTC4KCk5vdywgSSBuZWVkIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLiBXaGF0IGFyZSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zPyBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBodWdldGxiX2NtYS5jYCBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYm90aCBgQ09ORklHX0NNQWAgYW5kIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBhcmUgZW5hYmxlZC4gVGltZSB0byBjaGVjayBgbW0vTWFrZWZpbGVgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGNvZGUgcGF0aCBpcyBhY3RpdmUgYW5kIHRoZXJlZm9yZSB0aGUgaW1wYWN0IG9mIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX2NtYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dD05NT1LZXJuZWwgcGFyYW1ldGVyc1xuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTIwNjMtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dDoyMDY0Olx0aHVnZXRsYl9jbWE9XHRbSFcsQ01BLEVBUkxZXSBUaGUgc2l6ZSBvZiBhIENNQSBhcmVhIHVzZWQgZm9yIGFsbG9jYXRpb25cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTIwNjUtXHRcdFx0b2YgZ2lnYW50aWMgaHVnZXBhZ2VzLiBPciB1c2luZyBub2RlIGZvcm1hdCwgdGhlIHNpemVcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc3LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ6MjA3ODpcdGh1Z2V0bGJfY21hX29ubHk9XG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc5LVx0XHRcdFtIVyxDTUEsRUFSTFldIFdoZW4gYWxsb2NhdGluZyBuZXcgSHVnZVRMQiBwYWdlcywgb25seVxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTIwODEtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dDoyMDgyOlx0XHRcdFRoaXMgb3B0aW9uIGRvZXMgbm90aGluZyBpZiBodWdldGxiX2NtYT0gaXMgbm90IGFsc29cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTIwODMtXHRcdFx0c3BlY2lmaWVkLlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9jeGwvbGludXgvZWFybHktYm9vdC5yc3Q9MTI2PW9uIE5VTUEgbm9kZXMgdGhhdCBhcmUgbm90IG9ubGluZSBkdXJpbmcgZWFybHkgYm9vdC4gOjpcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9jeGwvbGludXgvZWFybHktYm9vdC5yc3QtMTI3LVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2N4bC9saW51eC9lYXJseS1ib290LnJzdDoxMjg6ICB2b2lkIF9faW5pdCBodWdldGxiX2NtYV9yZXNlcnZlKHZvaWQpIHtcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9jeGwvbGludXgvZWFybHktYm9vdC5yc3QtMTI5LSAgICBpZiAoIW5vZGVfb25saW5lKG5pZCkpXG4tLVxuTUFJTlRBSU5FUlM9MTIwMjA9RjpcdG1tL2h1Z2V0bGJfY2dyb3VwLmNcbk1BSU5UQUlORVJTOjEyMDIxOkY6XHRtbS9odWdldGxiX2NtYS5jXG5NQUlOVEFJTkVSUzoxMjAyMjpGOlx0bW0vaHVnZXRsYl9jbWEuaFxuTUFJTlRBSU5FUlMtMTIwMjMtRjpcdG1tL2h1Z2V0bGJfc3lzY3RsLmNcbi0tXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtMzgtI2lmZGVmIENPTkZJR19DTUFcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYzozOTp1bnNpZ25lZCBpbnQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTQwLXtcbi0tXG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYz0yMDE9YXJjaF9pbml0Y2FsbChodWdldGxicGFnZV9pbml0KTtcbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jLTIwMi1cbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jOjIwMzp1bnNpZ25lZCBpbnQgX19pbml0IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jLTIwNC17XG4tLVxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jPTQ0OD1hcmNoX2luaXRjYWxsKGdpZ2FudGljX3BhZ2VzX2luaXQpO1xuLS1cbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYy00NTAtXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmM6NDUxOnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTQ1Mi17XG4tLVxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmM9MjI1PWJvb2wgX19pbml0IGFyY2hfaHVnZXRsYl92YWxpZF9zaXplKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbi0tXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYy0yMzQtXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYzoyMzU6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYy0yMzYte1xuLS1cbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmM9NDI9YXJjaF9pbml0Y2FsbChnaWdhbnRpY19wYWdlc19pbml0KTtcbi0tXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jLTQ1LVxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYzo0Njp1bnNpZ25lZCBpbnQgX19pbml0IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmMtNDcte1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTI3Nj12b2lkIGh1Z2V0bGJfc3BsaXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNzctXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNzg6dW5zaWduZWQgaW50IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZCk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNzktXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTI5OD1zdGF0aWMgaW5saW5lIHNwaW5sb2NrX3QgKmh1Z2VfcHRlX2xvY2soc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMzA4LSNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19DTUEpXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMzA5OmV4dGVybiB2b2lkIF9faW5pdCBodWdldGxiX2NtYV9yZXNlcnZlKHZvaWQpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMxMC0jZWxzZVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTMxMTpzdGF0aWMgaW5saW5lIF9faW5pdCB2b2lkIGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZClcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEzMTIte1xuLS1cbm1tL01ha2VmaWxlPTgyPWlmZGVmIENPTkZJR19DTUFcbm1tL01ha2VmaWxlOjgzOm9iai0kKENPTkZJR19IVUdFVExCRlMpXHQmIzQzOz0gaHVnZXRsYl9jbWEub1xubW0vTWFrZWZpbGUtODQtZW5kaWZcbi0tXG5tbS9jbWEuaD04PXN0cnVjdCBjbWFfa29iamVjdCB7XG4tLVxubW0vY21hLmgtMTQtICogTXVsdGktcmFuZ2Ugc3VwcG9ydC4gVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHRoZSBzaXplIG9mIHRoZSBhbGxvY2F0aW9uXG5tbS9jbWEuaDoxNTogKiBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgbGFyZ2VyIHRoYW4gdGhlIGFsaWdubWVudCAobGlrZSB3aXRoIGh1Z2V0bGJfY21hKSxcbm1tL2NtYS5oLTE2LSAqIGFuZCB0aGUgdG90YWwgYW1vdW50IG9mIG1lbW9yeSByZXF1ZXN0ZWQsIHdoaWxlIHNtYWxsZXIgdGhhbiB0aGUgdG90YWxcbi0tXG5tbS9odWdldGxiLmMtNTAtI2luY2x1ZGUgXCYjMzQ7aHVnZXRsYl92bWVtbWFwLmhcJiMzNDtcbm1tL2h1Z2V0bGIuYzo1MTojaW5jbHVkZSBcJiMzNDtodWdldGxiX2NtYS5oXCYjMzQ7XG5tbS9odWdldGxiLmMtNTItI2luY2x1ZGUgXCYjMzQ7aHVnZXRsYl9pbnRlcm5hbC5oXCYjMzQ7XG4tLVxubW0vaHVnZXRsYi5jPTEzNjA9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYi5jLTEzNjQtXG5tbS9odWdldGxiLmM6MTM2NTpcdGZvbGlvID0gaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKG9yZGVyLCBnZnBfbWFzaywgbmlkLCBub2RlbWFzayk7XG5tbS9odWdldGxiLmMtMTM2Ni1cdGlmIChmb2xpbylcbi0tXG5tbS9odWdldGxiLmMtMTM2OC1cbm1tL2h1Z2V0bGIuYzoxMzY5Olx0aWYgKGh1Z2V0bGJfY21hX2V4Y2x1c2l2ZV9hbGxvYygpKVxubW0vaHVnZXRsYi5jLTEzNzAtXHRcdHJldHVybiBOVUxMO1xuLS1cbm1tL2h1Z2V0bGIuYz0xNDU4PXN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTUwNy1cdFZNX0JVR19PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XG5tbS9odWdldGxiLmM6MTUwODpcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfY21hKGZvbGlvKSlcbm1tL2h1Z2V0bGIuYzoxNTA5Olx0XHRodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhmb2xpbyk7XG5tbS9odWdldGxiLmMtMTUxMC1cdGVsc2Vcbi0tXG5tbS9odWdldGxiLmM9MzAyOD1zdGF0aWMgX19pbml0IHZvaWQgKmFsbG9jX2Jvb3RtZW0oc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZCwgYm9vbCBub2RlX2V4YWN0KVxuLS1cbm1tL2h1Z2V0bGIuYy0zMDMzLVx0aWYgKGh1Z2V0bGJfZWFybHlfY21hKGgpKVxubW0vaHVnZXRsYi5jOjMwMzQ6XHRcdG0gPSBodWdldGxiX2NtYV9hbGxvY19ib290bWVtKGgsIFx1MDAyNmxpc3Rub2RlLCBub2RlX2V4YWN0KTtcbm1tL2h1Z2V0bGIuYy0zMDM1LVx0ZWxzZSB7XG4tLVxubW0vaHVnZXRsYi5jPTMxODA9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfYm9vdG1lbV9pbml0X21pZ3JhdGV0eXBlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vaHVnZXRsYi5jLTMxODctXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSAmIzQzOz0gcGFnZWJsb2NrX25yX3BhZ2VzKSB7XG5tbS9odWdldGxiLmM6MzE4ODpcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9jbWEoZm9saW8pKVxubW0vaHVnZXRsYi5jLTMxODktXHRcdFx0aW5pdF9jbWFfcGFnZWJsb2NrKGZvbGlvX3BhZ2UoZm9saW8sIGkpKTtcbi0tXG5tbS9odWdldGxiLmM9MzI4MT1zdGF0aWMgdm9pZCBfX2luaXQgZ2F0aGVyX2Jvb3RtZW1fcHJlYWxsb2Nfbm9kZSh1bnNpZ25lZCBsb25nIG5pZClcbi0tXG5tbS9odWdldGxiLmMtMzMyNi1cdFx0aWYgKGh1Z2V0bGJfYm9vdG1lbV9wYWdlX2Vhcmx5Y21hKG0pKVxubW0vaHVnZXRsYi5jOjMzMjc6XHRcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfY21hKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0zMzI4LVxuLS1cbm1tL2h1Z2V0bGIuYy0zMzM4LVx0XHQgKi9cbm1tL2h1Z2V0bGIuYzozMzM5Olx0XHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYl9jbWEoZm9saW8pKVxubW0vaHVnZXRsYi5jLTMzNDAtXHRcdFx0YWRqdXN0X21hbmFnZWRfcGFnZV9jb3VudChwYWdlLCBwYWdlc19wZXJfaHVnZV9wYWdlKGgpKTtcbi0tXG5tbS9odWdldGxiLmM9MzU2NT1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaClcbi0tXG5tbS9odWdldGxiLmMtMzU3Mi1cdCAqL1xubW0vaHVnZXRsYi5jOjM1NzM6XHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljKGgpIFx1MDAyNlx1MDAyNiBodWdldGxiX2NtYV90b3RhbF9zaXplKCkgXHUwMDI2XHUwMDI2XG5tbS9odWdldGxiLmMtMzU3NC1cdCAgICAhaHVnZXRsYl9lYXJseV9jbWEoaCkpIHtcbm1tL2h1Z2V0bGIuYzozNTc1Olx0XHRwcl93YXJuX29uY2UoXCYjMzQ7SHVnZVRMQjogaHVnZXRsYl9jbWEgaXMgZW5hYmxlZCwgc2tpcCBib290IHRpbWUgYWxsb2NhdGlvblxcblwmIzM0Oyk7XG5tbS9odWdldGxiLmMtMzU3Ni1cdFx0cmV0dXJuO1xuLS1cbm1tL2h1Z2V0bGIuYz0zNTk1PXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2luaXRfaHN0YXRlcyh2b2lkKVxuLS1cbm1tL2h1Z2V0bGIuYy0zNjIyLVx0XHRcdGNvbnRpbnVlO1xubW0vaHVnZXRsYi5jOjM2MjM6XHRcdGlmIChodWdldGxiX2NtYV90b3RhbF9zaXplKCkgXHUwMDI2XHUwMDI2IGgtXHUwMDNlb3JkZXIgXHUwMDNjPSBIVUdFVExCX1BBR0VfT1JERVIpXG5tbS9odWdldGxiLmMtMzYyNC1cdFx0XHRjb250aW51ZTtcbi0tXG5tbS9odWdldGxiLmM9MzkxOT1zdGF0aWMgbG9uZyBkZW1vdGVfZnJlZV9odWdldGxiX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpzcmMsIHN0cnVjdCBoc3RhdGUgKmRzdCxcbi0tXG5tbS9odWdldGxiLmMtMzk0Ni1cbm1tL2h1Z2V0bGIuYzozOTQ3Olx0XHRjbWEgPSBmb2xpb190ZXN0X2h1Z2V0bGJfY21hKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0zOTQ4LVxuLS1cbm1tL2h1Z2V0bGIuYy0zOTY1LVx0XHRcdGlmIChjbWEpXG5tbS9odWdldGxiLmM6Mzk2NjpcdFx0XHRcdGZvbGlvX3NldF9odWdldGxiX2NtYShuZXdfZm9saW8pO1xubW0vaHVnZXRsYi5jLTM5NjctXHRcdFx0bGlzdF9hZGQoXHUwMDI2bmV3X2ZvbGlvLVx1MDAzZWxydSwgXHUwMDI2ZHN0X2xpc3QpO1xuLS1cbm1tL2h1Z2V0bGIuYz00MjI3PXN0YXRpYyBfX2luaXQgdm9pZCBodWdldGxiX3BhcnNlX3BhcmFtcyh2b2lkKVxuLS1cbm1tL2h1Z2V0bGIuYy00MjM3LVxubW0vaHVnZXRsYi5jOjQyMzg6XHRodWdldGxiX2NtYV92YWxpZGF0ZV9wYXJhbXMoKTtcbm1tL2h1Z2V0bGIuYy00MjM5LX1cbi0tXG5tbS9odWdldGxiX2NtYS5jLTEzLSNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbm1tL2h1Z2V0bGJfY21hLmM6MTQ6I2luY2x1ZGUgXCYjMzQ7aHVnZXRsYl9jbWEuaFwmIzM0O1xubW0vaHVnZXRsYl9jbWEuYy0xNS1cbm1tL2h1Z2V0bGJfY21hLmMtMTYtXG5tbS9odWdldGxiX2NtYS5jOjE3OnN0YXRpYyBzdHJ1Y3QgY21hICpodWdldGxiX2NtYVtNQVhfTlVNTk9ERVNdIF9fcm9fYWZ0ZXJfaW5pdDtcbm1tL2h1Z2V0bGJfY21hLmM6MTg6c3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW01BWF9OVU1OT0RFU10gX19pbml0ZGF0YTtcbm1tL2h1Z2V0bGJfY21hLmM6MTk6c3RhdGljIGJvb2wgaHVnZXRsYl9jbWFfb25seSBfX3JvX2FmdGVyX2luaXQ7XG5tbS9odWdldGxiX2NtYS5jOjIwOnN0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfY21hX3NpemUgX19yb19hZnRlcl9pbml0O1xubW0vaHVnZXRsYl9jbWEuYy0yMS1cbm1tL2h1Z2V0bGJfY21hLmM6MjI6dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZXRsYl9jbWEuYy0yMy17XG5tbS9odWdldGxiX2NtYS5jOjI0Olx0V0FSTl9PTl9PTkNFKCFjbWFfcmVsZWFzZV9mcm96ZW4oaHVnZXRsYl9jbWFbZm9saW9fbmlkKGZvbGlvKV0sXG5tbS9odWdldGxiX2NtYS5jLTI1LVx0XHRcdFx0XHQgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgZm9saW9fbnJfcGFnZXMoZm9saW8pKSk7XG4tLVxubW0vaHVnZXRsYl9jbWEuYy0yNy1cbm1tL2h1Z2V0bGJfY21hLmM6Mjg6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbm1tL2h1Z2V0bGJfY21hLmMtMjktXHRcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMzYtXG5tbS9odWdldGxiX2NtYS5jOjM3Olx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxubW0vaHVnZXRsYl9jbWEuYy0zOC1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0vaHVnZXRsYl9jbWEuYy00Ny1cbm1tL2h1Z2V0bGJfY21hLmM6NDg6XHRpZiAoaHVnZXRsYl9jbWFbbmlkXSBcdTAwMjZcdTAwMjYgbm9kZV9pc3NldChuaWQsICpubWFzaykpXG5tbS9odWdldGxiX2NtYS5jOjQ5Olx0XHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7XG5tbS9odWdldGxiX2NtYS5jLTUwLVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtNTItXHRcdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCAqbm1hc2spIHtcbm1tL2h1Z2V0bGJfY21hLmM6NTM6XHRcdFx0aWYgKG5vZGUgPT0gbmlkIHx8ICFodWdldGxiX2NtYVtub2RlXSlcbm1tL2h1Z2V0bGJfY21hLmMtNTQtXHRcdFx0XHRjb250aW51ZTtcbm1tL2h1Z2V0bGJfY21hLmMtNTUtXG5tbS9odWdldGxiX2NtYS5jOjU2Olx0XHRcdHBhZ2UgPSBjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKGh1Z2V0bGJfY21hW25vZGVdLCBvcmRlcik7XG5tbS9odWdldGxiX2NtYS5jLTU3LVx0XHRcdGlmIChwYWdlKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtNjktXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG5tbS9odWdldGxiX2NtYS5jOjcwOlx0Zm9saW9fc2V0X2h1Z2V0bGJfY21hKGZvbGlvKTtcbm1tL2h1Z2V0bGJfY21hLmMtNzEtXHRyZXR1cm4gZm9saW87XG4tLVxubW0vaHVnZXRsYl9jbWEuYz03ND1zdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgKiBfX2luaXRcbm1tL2h1Z2V0bGJfY21hLmM6NzU6aHVnZXRsYl9jbWFfYWxsb2NfYm9vdG1lbShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgKm5pZCwgYm9vbCBub2RlX2V4YWN0KVxubW0vaHVnZXRsYl9jbWEuYy03Ni17XG4tLVxubW0vaHVnZXRsYl9jbWEuYy04MC1cbm1tL2h1Z2V0bGJfY21hLmM6ODE6XHRjbWEgPSBodWdldGxiX2NtYVsqbmlkXTtcbm1tL2h1Z2V0bGJfY21hLmMtODItXHRtID0gY21hX3Jlc2VydmVfZWFybHkoY21hLCBodWdlX3BhZ2Vfc2l6ZShoKSk7XG4tLVxubW0vaHVnZXRsYl9jbWEuYy04Ny1cdFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIGh1Z2V0bGJfYm9vdG1lbV9ub2Rlcykge1xubW0vaHVnZXRsYl9jbWEuYzo4ODpcdFx0XHRjbWEgPSBodWdldGxiX2NtYVtub2RlXTtcbm1tL2h1Z2V0bGJfY21hLmMtODktXHRcdFx0aWYgKCFjbWEgfHwgbm9kZSA9PSAqbmlkKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMTA2LVxubW0vaHVnZXRsYl9jbWEuYzoxMDc6c3RhdGljIGludCBfX2luaXQgY21kbGluZV9wYXJzZV9odWdldGxiX2NtYShjaGFyICpwKVxubW0vaHVnZXRsYl9jbWEuYy0xMDgte1xuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMTIzLVx0XHRcdHRtcCA9IG1lbXBhcnNlKHMsIFx1MDAyNnMpO1xubW0vaHVnZXRsYl9jbWEuYzoxMjQ6XHRcdFx0aHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW25pZF0gPSB0bXA7XG5tbS9odWdldGxiX2NtYS5jOjEyNTpcdFx0XHRodWdldGxiX2NtYV9zaXplICYjNDM7PSB0bXA7XG5tbS9odWdldGxiX2NtYS5jLTEyNi1cbi0tXG5tbS9odWdldGxiX2NtYS5jLTEzNS1cdFx0fSBlbHNlIHtcbm1tL2h1Z2V0bGJfY21hLmM6MTM2Olx0XHRcdGh1Z2V0bGJfY21hX3NpemUgPSBtZW1wYXJzZShwLCBcdTAwMjZwKTtcbm1tL2h1Z2V0bGJfY21hLmMtMTM3LVx0XHRcdGJyZWFrO1xuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMTQzLVxubW0vaHVnZXRsYl9jbWEuYzoxNDQ6ZWFybHlfcGFyYW0oXCYjMzQ7aHVnZXRsYl9jbWFcJiMzNDssIGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWEpO1xubW0vaHVnZXRsYl9jbWEuYy0xNDUtXG5tbS9odWdldGxiX2NtYS5jOjE0NjpzdGF0aWMgaW50IF9faW5pdCBjbWRsaW5lX3BhcnNlX2h1Z2V0bGJfY21hX29ubHkoY2hhciAqcClcbm1tL2h1Z2V0bGJfY21hLmMtMTQ3LXtcbm1tL2h1Z2V0bGJfY21hLmM6MTQ4Olx0cmV0dXJuIGtzdHJ0b2Jvb2wocCwgXHUwMDI2aHVnZXRsYl9jbWFfb25seSk7XG5tbS9odWdldGxiX2NtYS5jLTE0OS19XG5tbS9odWdldGxiX2NtYS5jLTE1MC1cbm1tL2h1Z2V0bGJfY21hLmM6MTUxOmVhcmx5X3BhcmFtKFwmIzM0O2h1Z2V0bGJfY21hX29ubHlcJiMzNDssIGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWFfb25seSk7XG5tbS9odWdldGxiX2NtYS5jLTE1Mi1cbm1tL2h1Z2V0bGJfY21hLmM6MTUzOnVuc2lnbmVkIGludCBfX3dlYWsgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxubW0vaHVnZXRsYl9jbWEuYy0xNTQte1xuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMTU3LVxubW0vaHVnZXRsYl9jbWEuYzoxNTg6dm9pZCBfX2luaXQgaHVnZXRsYl9jbWFfcmVzZXJ2ZSh2b2lkKVxubW0vaHVnZXRsYl9jbWEuYy0xNTkte1xuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMTYzLVxubW0vaHVnZXRsYl9jbWEuYzoxNjQ6XHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXG5tbS9odWdldGxiX2NtYS5jLTE2NS1cdFx0cmV0dXJuO1xubW0vaHVnZXRsYl9jbWEuYy0xNjYtXG5tbS9odWdldGxiX2NtYS5jOjE2NzpcdG9yZGVyID0gYXJjaF9odWdldGxiX2NtYV9vcmRlcigpO1xubW0vaHVnZXRsYl9jbWEuYy0xNjgtXHRpZiAoIW9yZGVyKSB7XG5tbS9odWdldGxiX2NtYS5jOjE2OTpcdFx0cHJfd2FybihcJiMzNDtodWdldGxiX2NtYTogdGhlIG9wdGlvbiBpc24mIzM5O3Qgc3VwcG9ydGVkIGJ5IGN1cnJlbnQgYXJjaFxcblwmIzM0Oyk7XG5tbS9odWdldGxiX2NtYS5jLTE3MC1cdFx0cmV0dXJuO1xuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMTg0LVx0Zm9yIChuaWQgPSAwOyBuaWQgXHUwMDNjIE1BWF9OVU1OT0RFUzsgbmlkJiM0MzsmIzQzOykge1xubW0vaHVnZXRsYl9jbWEuYzoxODU6XHRcdHNpemUgPSBodWdldGxiX2NtYV9zaXplX2luX25vZGVbbmlkXTtcbm1tL2h1Z2V0bGJfY21hLmMtMTg2LVx0XHRpZiAoc2l6ZSA9PSAwKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMTg5LVx0XHRpZiAoIW5vZGVfaXNzZXQobmlkLCBodWdldGxiX2Jvb3RtZW1fbm9kZXMpKSB7XG5tbS9odWdldGxiX2NtYS5jOjE5MDpcdFx0XHRwcl93YXJuKFwmIzM0O2h1Z2V0bGJfY21hOiBpbnZhbGlkIG5vZGUgJWQgc3BlY2lmaWVkXFxuXCYjMzQ7LCBuaWQpO1xubW0vaHVnZXRsYl9jbWEuYy0xOTEtXHRcdH0gZWxzZSBpZiAoIUlTX0FMSUdORUQoc2l6ZSwgZ2lnYW50aWNfcGFnZV9zaXplKSkge1xubW0vaHVnZXRsYl9jbWEuYzoxOTI6XHRcdFx0cHJfd2FybihcJiMzNDtodWdldGxiX2NtYTogY21hIGFyZWEgb2Ygbm9kZSAlZCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgJWx1IE1pQlxcblwmIzM0Oyxcbm1tL2h1Z2V0bGJfY21hLmMtMTkzLVx0XHRcdFx0bmlkLCBnaWdhbnRpY19wYWdlX3NpemUgLyBTWl8xTSk7XG4tLVxubW0vaHVnZXRsYl9jbWEuYy0xOTgtXG5tbS9odWdldGxiX2NtYS5jOjE5OTpcdFx0aHVnZXRsYl9jbWFfc2l6ZSAtPSBzaXplO1xubW0vaHVnZXRsYl9jbWEuYzoyMDA6XHRcdGh1Z2V0bGJfY21hX3NpemVfaW5fbm9kZVtuaWRdID0gMDtcbm1tL2h1Z2V0bGJfY21hLmMtMjAxLVx0fVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjAzLVx0LyogVmFsaWRhdGUgdGhlIENNQSBzaXplIGFnYWluIGluIGNhc2Ugc29tZSBpbnZhbGlkIG5vZGVzIHNwZWNpZmllZC4gKi9cbm1tL2h1Z2V0bGJfY21hLmM6MjA0Olx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxubW0vaHVnZXRsYl9jbWEuYy0yMDUtXHRcdHJldHVybjtcbm1tL2h1Z2V0bGJfY21hLmMtMjA2LVxubW0vaHVnZXRsYl9jbWEuYzoyMDc6XHRpZiAoIUlTX0FMSUdORUQoaHVnZXRsYl9jbWFfc2l6ZSwgZ2lnYW50aWNfcGFnZV9zaXplKSkge1xubW0vaHVnZXRsYl9jbWEuYzoyMDg6XHRcdHByX3dhcm4oXCYjMzQ7aHVnZXRsYl9jbWE6IGNtYSBhcmVhIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAlbHUgTWlCXFxuXCYjMzQ7LFxubW0vaHVnZXRsYl9jbWEuYy0yMDktXHRcdFx0Z2lnYW50aWNfcGFnZV9zaXplIC8gU1pfMU0pO1xubW0vaHVnZXRsYl9jbWEuYzoyMTA6XHRcdGh1Z2V0bGJfY21hX3NpemUgPSAwO1xubW0vaHVnZXRsYl9jbWEuYy0yMTEtXHRcdHJldHVybjtcbi0tXG5tbS9odWdldGxiX2NtYS5jLTIxOC1cdFx0ICovXG5tbS9odWdldGxiX2NtYS5jOjIxOTpcdFx0cGVyX25vZGUgPSBESVZfUk9VTkRfVVAoaHVnZXRsYl9jbWFfc2l6ZSxcbm1tL2h1Z2V0bGJfY21hLmMtMjIwLVx0XHRcdFx0XHRub2Rlc193ZWlnaHQoaHVnZXRsYl9ib290bWVtX25vZGVzKSk7XG5tbS9odWdldGxiX2NtYS5jLTIyMS1cdFx0cGVyX25vZGUgPSByb3VuZF91cChwZXJfbm9kZSwgZ2lnYW50aWNfcGFnZV9zaXplKTtcbm1tL2h1Z2V0bGJfY21hLmM6MjIyOlx0XHRwcl9pbmZvKFwmIzM0O2h1Z2V0bGJfY21hOiByZXNlcnZlICVsdSBNaUIsIHVwIHRvICVsdSBNaUIgcGVyIG5vZGVcXG5cJiMzNDssXG5tbS9odWdldGxiX2NtYS5jOjIyMzpcdFx0XHRodWdldGxiX2NtYV9zaXplIC8gU1pfMU0sIHBlcl9ub2RlIC8gU1pfMU0pO1xubW0vaHVnZXRsYl9jbWEuYy0yMjQtXHR9XG4tLVxubW0vaHVnZXRsYl9jbWEuYy0yMzEtXHRcdGlmIChub2RlX3NwZWNpZmljX2NtYV9hbGxvYykge1xubW0vaHVnZXRsYl9jbWEuYzoyMzI6XHRcdFx0aWYgKGh1Z2V0bGJfY21hX3NpemVfaW5fbm9kZVtuaWRdID09IDApXG5tbS9odWdldGxiX2NtYS5jLTIzMy1cdFx0XHRcdGNvbnRpbnVlO1xubW0vaHVnZXRsYl9jbWEuYy0yMzQtXG5tbS9odWdldGxiX2NtYS5jOjIzNTpcdFx0XHRzaXplID0gaHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW25pZF07XG5tbS9odWdldGxiX2NtYS5jLTIzNi1cdFx0fSBlbHNlIHtcbm1tL2h1Z2V0bGJfY21hLmM6MjM3Olx0XHRcdHNpemUgPSBtaW4ocGVyX25vZGUsIGh1Z2V0bGJfY21hX3NpemUgLSByZXNlcnZlZCk7XG5tbS9odWdldGxiX2NtYS5jLTIzOC1cdFx0fVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjQ3LVx0XHRcdFx0XHRIVUdFVExCX1BBR0VfT1JERVIsIG5hbWUsXG5tbS9odWdldGxiX2NtYS5jOjI0ODpcdFx0XHRcdFx0XHUwMDI2aHVnZXRsYl9jbWFbbmlkXSwgbmlkKTtcbm1tL2h1Z2V0bGJfY21hLmMtMjQ5LVx0XHRpZiAocmVzKSB7XG5tbS9odWdldGxiX2NtYS5jOjI1MDpcdFx0XHRwcl93YXJuKFwmIzM0O2h1Z2V0bGJfY21hOiByZXNlcnZhdGlvbiBmYWlsZWQ6IGVyciAlZCwgbm9kZSAlZFwmIzM0Oyxcbm1tL2h1Z2V0bGJfY21hLmMtMjUxLVx0XHRcdFx0cmVzLCBuaWQpO1xuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjU1LVx0XHRyZXNlcnZlZCAmIzQzOz0gc2l6ZTtcbm1tL2h1Z2V0bGJfY21hLmM6MjU2Olx0XHRwcl9pbmZvKFwmIzM0O2h1Z2V0bGJfY21hOiByZXNlcnZlZCAlbHUgTWlCIG9uIG5vZGUgJWRcXG5cJiMzNDssXG5tbS9odWdldGxiX2NtYS5jLTI1Ny1cdFx0XHRzaXplIC8gU1pfMU0sIG5pZCk7XG5tbS9odWdldGxiX2NtYS5jLTI1OC1cbm1tL2h1Z2V0bGJfY21hLmM6MjU5Olx0XHRpZiAocmVzZXJ2ZWQgXHUwMDNlPSBodWdldGxiX2NtYV9zaXplKVxubW0vaHVnZXRsYl9jbWEuYy0yNjAtXHRcdFx0YnJlYWs7XG4tLVxubW0vaHVnZXRsYl9jbWEuYy0yNjQtXHRcdC8qXG5tbS9odWdldGxiX2NtYS5jOjI2NTpcdFx0ICogaHVnZXRsYl9jbWFfc2l6ZSBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhbGxvY2F0aW9ucyBmcm9tXG5tbS9odWdldGxiX2NtYS5jLTI2Ni1cdFx0ICogY21hIGFyZSBwb3NzaWJsZS4gIFNldCB0byB6ZXJvIGlmIG5vIGNtYSByZWdpb25zIGFyZSBzZXQgdXAuXG5tbS9odWdldGxiX2NtYS5jLTI2Ny1cdFx0ICovXG5tbS9odWdldGxiX2NtYS5jOjI2ODpcdFx0aHVnZXRsYl9jbWFfc2l6ZSA9IDA7XG5tbS9odWdldGxiX2NtYS5jLTI2OS19XG5tbS9odWdldGxiX2NtYS5jLTI3MC1cbm1tL2h1Z2V0bGJfY21hLmM6MjcxOmJvb2wgaHVnZXRsYl9jbWFfZXhjbHVzaXZlX2FsbG9jKHZvaWQpXG5tbS9odWdldGxiX2NtYS5jLTI3Mi17XG5tbS9odWdldGxiX2NtYS5jOjI3MzpcdHJldHVybiBodWdldGxiX2NtYV9vbmx5O1xubW0vaHVnZXRsYl9jbWEuYy0yNzQtfVxubW0vaHVnZXRsYl9jbWEuYy0yNzUtXG5tbS9odWdldGxiX2NtYS5jOjI3Njp1bnNpZ25lZCBsb25nIF9faW5pdCBodWdldGxiX2NtYV90b3RhbF9zaXplKHZvaWQpXG5tbS9odWdldGxiX2NtYS5jLTI3Ny17XG5tbS9odWdldGxiX2NtYS5jOjI3ODpcdHJldHVybiBodWdldGxiX2NtYV9zaXplO1xubW0vaHVnZXRsYl9jbWEuYy0yNzktfVxubW0vaHVnZXRsYl9jbWEuYy0yODAtXG5tbS9odWdldGxiX2NtYS5jOjI4MTp2b2lkIF9faW5pdCBodWdldGxiX2NtYV92YWxpZGF0ZV9wYXJhbXModm9pZClcbm1tL2h1Z2V0bGJfY21hLmMtMjgyLXtcbm1tL2h1Z2V0bGJfY21hLmM6MjgzOlx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxubW0vaHVnZXRsYl9jbWEuYzoyODQ6XHRcdGh1Z2V0bGJfY21hX29ubHkgPSBmYWxzZTtcbm1tL2h1Z2V0bGJfY21hLmMtMjg1LX1cbi0tXG5tbS9odWdldGxiX2NtYS5jPTI4Nz1ib29sIF9faW5pdCBodWdldGxiX2Vhcmx5X2NtYShzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjkxLVxubW0vaHVnZXRsYl9jbWEuYzoyOTI6XHRyZXR1cm4gaHN0YXRlX2lzX2dpZ2FudGljKGgpIFx1MDAyNlx1MDAyNiBodWdldGxiX2NtYV9vbmx5O1xubW0vaHVnZXRsYl9jbWEuYy0yOTMtfVxuLS1cbm1tL2h1Z2V0bGJfY21hLmgtNS0jaWZkZWYgQ09ORklHX0NNQVxubW0vaHVnZXRsYl9jbWEuaDo2OnZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9odWdldGxiX2NtYS5oOjc6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbm1tL2h1Z2V0bGJfY21hLmgtOC1cdFx0XHRcdCAgICAgIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKTtcbm1tL2h1Z2V0bGJfY21hLmg6OTpzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgKmh1Z2V0bGJfY21hX2FsbG9jX2Jvb3RtZW0oc3RydWN0IGhzdGF0ZSAqaCwgaW50ICpuaWQsXG5tbS9odWdldGxiX2NtYS5oLTEwLVx0XHRcdFx0XHRcdCAgICBib29sIG5vZGVfZXhhY3QpO1xubW0vaHVnZXRsYl9jbWEuaDoxMTpib29sIGh1Z2V0bGJfY21hX2V4Y2x1c2l2ZV9hbGxvYyh2b2lkKTtcbm1tL2h1Z2V0bGJfY21hLmg6MTI6dW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV90b3RhbF9zaXplKHZvaWQpO1xubW0vaHVnZXRsYl9jbWEuaDoxMzp2b2lkIGh1Z2V0bGJfY21hX3ZhbGlkYXRlX3BhcmFtcyh2b2lkKTtcbm1tL2h1Z2V0bGJfY21hLmgtMTQtYm9vbCBodWdldGxiX2Vhcmx5X2NtYShzdHJ1Y3QgaHN0YXRlICpoKTtcbm1tL2h1Z2V0bGJfY21hLmgtMTUtI2Vsc2Vcbm1tL2h1Z2V0bGJfY21hLmg6MTY6c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9odWdldGxiX2NtYS5oLTE3LXtcbi0tXG5tbS9odWdldGxiX2NtYS5oLTE5LVxubW0vaHVnZXRsYl9jbWEuaDoyMDpzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlcixcbm1tL2h1Z2V0bGJfY21hLmgtMjEtXHRcdGdmcF90IGdmcF9tYXNrLFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4tLVxubW0vaHVnZXRsYl9jbWEuaD0yNj1zdGF0aWMgaW5saW5lXG5tbS9odWdldGxiX2NtYS5oOjI3OnN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqaHVnZXRsYl9jbWFfYWxsb2NfYm9vdG1lbShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgKm5pZCxcbm1tL2h1Z2V0bGJfY21hLmgtMjgtXHRcdFx0XHRcdFx0ICAgIGJvb2wgbm9kZV9leGFjdClcbi0tXG5tbS9odWdldGxiX2NtYS5oLTMyLVxubW0vaHVnZXRsYl9jbWEuaDozMzpzdGF0aWMgaW5saW5lIGJvb2wgaHVnZXRsYl9jbWFfZXhjbHVzaXZlX2FsbG9jKHZvaWQpXG5tbS9odWdldGxiX2NtYS5oLTM0LXtcbi0tXG5tbS9odWdldGxiX2NtYS5oLTM3LVxubW0vaHVnZXRsYl9jbWEuaDozODpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9jbWFfdG90YWxfc2l6ZSh2b2lkKVxubW0vaHVnZXRsYl9jbWEuaC0zOS17XG4tLVxubW0vaHVnZXRsYl9jbWEuaC00Mi1cbm1tL2h1Z2V0bGJfY21hLmg6NDM6c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY21hX3ZhbGlkYXRlX3BhcmFtcyh2b2lkKVxubW0vaHVnZXRsYl9jbWEuaC00NC17XG4tLVxubW0vbW1faW5pdC5jPTI2OTU9dm9pZCBfX2luaXQgbW1fY29yZV9pbml0X2Vhcmx5KHZvaWQpXG5tbS9tbV9pbml0LmMtMjY5Ni17XG5tbS9tbV9pbml0LmM6MjY5NzpcdGh1Z2V0bGJfY21hX3Jlc2VydmUoKTtcbm1tL21tX2luaXQuYy0yNjk4LVx0aHVnZXRsYl9ib290bWVtX2FsbG9jKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzcxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENvbXBpbGF0aW9uIFJlcXVpcmVtZW50cyBmb3IgYGh1Z2V0bGJfY21hLmNgKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBgaHVnZXRsYl9jbWEuY2AgZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpdCB3YXMgc2ltcGx5IGEgbWF0dGVyIG9mIGBDT05GSUdfQ01BYCBhbmQgYENPTkZJR19IVUdFVExCRlNgIGJvdGggYmVpbmcgZW5hYmxlZC4gQnV0IGxldCYjMzk7cyB2ZXJpZnkuIFJpZ2h0LCBsZXQgbWUgbG9vayBhdCB0aGUgYG1tL01ha2VmaWxlYCBhbmQgY29uZmlybS4gQWgsIHRoZXJlIGl0IGlzOgoKYGBgCmlmZGVmIENPTkZJR19DTUEKb2JqLSQoQ09ORklHX0hVR0VUTEJGUykgJiM0Mzs9IGh1Z2V0bGJfY21hLm8KZW5kaWYKYGBgCgpZZXAsIGFzIEkgc3VzcGVjdGVkLiBXZSBkZWZpbml0ZWx5IG5lZWQgKmJvdGgqIGBDT05GSUdfQ01BYCBhbmQgYENPTkZJR19IVUdFVExCRlNgIHRvIGJlIGVuYWJsZWQgZm9yIGBodWdldGxiX2NtYS5vYCB0byBiZSBidWlsdC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4KCkFuZCBub3cgSSB3YW50IHRvIHRlc3QgY3B1c2V0IGludGVyYWN0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBuZWVkIGBDT05GSUdfQ1BVU0VUU2AgZW5hYmxlZCBmb3IgdGhhdC4gSSBzaG91bGQgY29uZmlybSB3aGVyZSBJIGNhbiBmaW5kIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9ucyBhc3NvY2lhdGVkIHdpdGggQ1BVIHNldCBvcGVyYXRpb25zLiBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGZvciBgcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW5gIGluIGBpbmNsdWRlL2xpbnV4L2NwdXNldC5oYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9jcHVzZXQuaD0yMT1leHRlcm4gYm9vbCBsb2NrZGVwX2lzX2NwdXNldF9oZWxkKHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjYtICogU3RhdGljIGJyYW5jaCByZXdyaXRlcyBjYW4gaGFwcGVuIGluIGFuIGFyYml0cmFyeSBvcmRlciBmb3IgYSBnaXZlblxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoyNzogKiBrZXkuIEluIGNvZGUgcGF0aHMgd2hlcmUgd2UgbmVlZCB0byBsb29wIHdpdGggcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKSBhbmRcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjgtICogcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoKSB0byBnZXQgYSBjb25zaXN0ZW50IHZpZXcgb2YgbWVtc19hbGxvd2VkLCB3ZSBuZWVkXG4tLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaD0xMzU9ZXh0ZXJuIHZvaWQgY3B1c2V0X3Jlc2V0X3NjaGVkX2RvbWFpbnModm9pZCk7XG4tLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xMzctLypcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MTM4OiAqIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luIGlzIHJlcXVpcmVkIHdoZW4gbWFraW5nIGRlY2lzaW9ucyBpbnZvbHZpbmdcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTM5LSAqIG1lbXNfYWxsb3dlZCBzdWNoIGFzIGR1cmluZyBwYWdlIGFsbG9jYXRpb24uIG1lbXNfYWxsb3dlZCBjYW4gYmUgdXBkYXRlZCBpblxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNDAtICogcGFyYWxsZWwgYW5kIGRlcGVuZGluZyBvbiB0aGUgbmV3IHZhbHVlIGFuIG9wZXJhdGlvbiBjYW4gZmFpbCBwb3RlbnRpYWxseVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoxNDE6ICogY2F1c2luZyBwcm9jZXNzIGZhaWx1cmUuIEEgcmV0cnkgbG9vcCB3aXRoIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luIGFuZFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNDItICogcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkgcHJldmVudHMgdGhlc2UgYXJ0aWZpY2lhbCBmYWlsdXJlcy5cbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTQzLSAqL1xuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoxNDQ6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4odm9pZClcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTQ1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTE1My0gKiBJZiB0aGlzIHJldHVybnMgdHJ1ZSwgdGhlIG9wZXJhdGlvbiB0aGF0IHRvb2sgcGxhY2UgYWZ0ZXJcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MTU0OiAqIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luIG1heSBoYXZlIGZhaWxlZCBhcnRpZmljaWFsbHkgZHVlIHRvIGEgY29uY3VycmVudFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNTUtICogdXBkYXRlIG9mIG1lbXNfYWxsb3dlZC4gSXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byByZXRyeSB0aGUgb3BlcmF0aW9uIGlmXG4tLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaD0yODg9c3RhdGljIGlubGluZSB2b2lkIHNldF9tZW1zX2FsbG93ZWQobm9kZW1hc2tfdCBub2RlbWFzaylcbi0tXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTI5MS1cbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MjkyOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKHZvaWQpXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTI5My17XG4tLVxubW0vZmlsZW1hcC5jPTk5OT1zdHJ1Y3QgZm9saW8gKmZpbGVtYXBfYWxsb2NfZm9saW9fbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL2ZpbGVtYXAuYy0xMDExLVx0XHRkbyB7XG5tbS9maWxlbWFwLmM6MTAxMjpcdFx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vZmlsZW1hcC5jLTEwMTMtXHRcdFx0biA9IGNwdXNldF9tZW1fc3ByZWFkX25vZGUoKTtcbi0tXG5tbS9odWdldGxiLmM9MTI3NT1zdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYi5jLTEyOTAtcmV0cnlfY3B1c2V0OlxubW0vaHVnZXRsYi5jOjEyOTE6XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vaHVnZXRsYi5jLTEyOTItXHRmb3JfZWFjaF96b25lX3pvbmVsaXN0X25vZGVtYXNrKHpvbmUsIHosIHpvbmVsaXN0LCBnZnBfem9uZShnZnBfbWFzayksIG5tYXNrKSB7XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0yOD1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtNDEtXHRpZiAoIW5vZGVtYXNrKSB7XG5tbS9odWdldGxiX2NtYS5jOjQyOlx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vaHVnZXRsYl9jbWEuYy00My1cdFx0bm1hc2sgPSBcdTAwMjZjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7XG4tLVxubW0vbWVtcG9saWN5LmM9MjEwMD1zdGF0aWMgdW5zaWduZWQgaW50IHdlaWdodGVkX2ludGVybGVhdmVfbm9kZXMoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5KVxuLS1cbm1tL21lbXBvbGljeS5jLTIxMDYtXHQvKiB0byBwcmV2ZW50IG1pc2NvdW50IHVzZSB0c2stXHUwMDNlbWVtc19hbGxvd2VkX3NlcSB0byBkZXRlY3QgcmViaW5kICovXG5tbS9tZW1wb2xpY3kuYzoyMTA3Olx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcbm1tL21lbXBvbGljeS5jLTIxMDgtXHRub2RlID0gY3VycmVudC1cdTAwM2VpbF9wcmV2O1xuLS1cbm1tL21lbXBvbGljeS5jPTIxMjM9c3RhdGljIHVuc2lnbmVkIGludCBpbnRlcmxlYXZlX25vZGVzKHN0cnVjdCBtZW1wb2xpY3kgKnBvbGljeSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMTI5LVx0ZG8ge1xubW0vbWVtcG9saWN5LmM6MjEzMDpcdFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcbm1tL21lbXBvbGljeS5jLTIxMzEtXHRcdG5pZCA9IG5leHRfbm9kZV9pbihjdXJyZW50LVx1MDAzZWlsX3ByZXYsIHBvbGljeS1cdTAwM2Vub2Rlcyk7XG4tLVxubW0vbWVtcG9saWN5LmM9MjYzMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2NTUtXHRkbyB7XG5tbS9tZW1wb2xpY3kuYzoyNjU2Olx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vbWVtcG9saWN5LmMtMjY1Ny1cdFx0bm5vZGVzID0gcmVhZF9vbmNlX3BvbGljeV9ub2RlbWFzayhwb2wsIFx1MDAyNm5vZGVzKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDcyNT1fX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ3NjQtXHRjb21wYWN0X3ByaW9yaXR5ID0gREVGX0NPTVBBQ1RfUFJJT1JJVFk7XG5tbS9wYWdlX2FsbG9jLmM6NDc2NTpcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG5tbS9wYWdlX2FsbG9jLmMtNDc2Ni1cdHpvbmVsaXN0X2l0ZXJfY29va2llID0gem9uZWxpc3RfaXRlcl9iZWdpbigpO1xuLS1cbm1tL3Nob3dfbWVtLmM9MTE5PXN0YXRpYyBib29sIHNob3dfbWVtX25vZGVfc2tpcCh1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL3Nob3dfbWVtLmMtMTI1LVx0ICogbm8gbm9kZSBtYXNrIC0gYWthIGltcGxpY2l0IG1lbW9yeSBudW1hIHBvbGljeS4gRG8gbm90IGJvdGhlciB3aXRoXG5tbS9zaG93X21lbS5jOjEyNjpcdCAqIHRoZSBzeW5jaHJvbml6YXRpb24gLSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbiAtIGJlY2F1c2Ugd2UgZG8gbm90XG5tbS9zaG93X21lbS5jLTEyNy1cdCAqIGhhdmUgdG8gYmUgcHJlY2lzZSBoZXJlLlxuLS1cbm1tL3NsdWIuYz0zODYzPXN0YXRpYyB2b2lkICpnZXRfZnJvbV9hbnlfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuLS1cbm1tL3NsdWIuYy0zODk3LVx0XHQvKlxubW0vc2x1Yi5jOjM4OTg6XHRcdCAqIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCkgYWNjZXNzZXMgY3VycmVudC1cdTAwM2VtZW1zX2FsbG93ZWRfc2VxLFxubW0vc2x1Yi5jLTM4OTktXHRcdCAqIGEgc2VxY291bnRfc3BpbmxvY2tfdCB0aGF0IGlzIG5vdCBOTUktc2FmZS4gRG8gbm90IGFjY2Vzc1xuLS1cbm1tL3NsdWIuYy0zOTAzLVx0XHRpZiAoYWxsb3dfc3Bpbilcbm1tL3NsdWIuYzozOTA0Olx0XHRcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG5tbS9zbHViLmMtMzkwNS1cbi0tXG5tbS9zbHViLmM9NzIzMT1fX3JlZmlsbF9vYmplY3RzX2FueShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcbi0tXG5tbS9zbHViLmMtNzI0Ni1cdGRvIHtcbm1tL3NsdWIuYzo3MjQ3Olx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vc2x1Yi5jLTcyNDgtXHRcdHpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChtZW1wb2xpY3lfc2xhYl9ub2RlKCksIGdmcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDc3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB6ZXJvaW5nIGluIG9uIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBUaGF0IGZ1bmN0aW9uIGlzIGNydWNpYWw7IGl0JiMzOTtzIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50IGluIGBtbS9odWdldGxiX2NtYS5jYCwgc28gaXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTtyZSBmb2N1c2luZyBvdXIgYXR0ZW50aW9uIHRoZXJlLgoKV2UmIzM5O2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gYSBmZXcgY29uZmlnIG9wdGlvbnMsIG9mIGNvdXJzZS4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQ09ORklHX0NNQWAsIGBDT05GSUdfSFVHRVRMQkZTYCwgYW5kIGBDT05GSUdfQ1BVU0VUU2AgLSB0aG9zZSB3aWxsIGNlcnRhaW5seSBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yLgoKTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjazogc2luY2Ugd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBodWdldGxiIHBhZ2VzLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyB0aGUgY29ycmVjdCBjb25maWcgc2V0dGluZyB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbiwgYW5kIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgcmVsYXRlZCBzZXR0aW5ncyB0aGF0IGNvbWUgaW50byBwbGF5IGhlcmUuIFdlIGRvbiYjMzk7dCB3YW50IHRvIG1pc3MgYW55dGhpbmcgcmVsYXRlZCB0byB0aGUgYmFzZSBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjQ5LVxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1MDkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBc3Nlc3NpbmcgSHVnZSBQYWdlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGluaXRpYWwgcHJvbXB0IGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLCBpcyB0byB6ZXJvIGluIG9uIGBjb25maWcgSFVHRVRMQl9QQUdFYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkIHdoZW4gaXQgY29tZXMgdG8gaHVnZSBwYWdlIGltcGxlbWVudGF0aW9uIGF0IGEga2VybmVsIGxldmVsLiBUaGlzIGlzIHRoZSBseW5jaHBpbiDigJMgdGhlIG1hc3RlciBzd2l0Y2ggaWYgeW91IHdpbGwg4oCTIGZvciB3aGV0aGVyIG9yIG5vdCBodWdlIHBhZ2VzIGFyZSBldmVuIGVuYWJsZWQgYW5kIGhvdyB0aGUgc3lzdGVtIGV2ZW4gbG9va3MgZm9yIGxhcmdlIG1lbW9yeSBibG9ja3MuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYW55IHNlcmlvdXMgaW52ZXN0aWdhdGlvbiwgYmUgaXQgdHJvdWJsZXNob290aW5nIHBlcmZvcm1hbmNlIGlzc3VlcywgdmVyaWZ5aW5nIGEgc2V0dXAsIG9yIGNvbmZpcm1pbmcgYSBidWlsZCBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgaXRzIHN0YXRlIHRvIGRldGVybWluZSBuZXh0IHN0ZXBzLiBJJiMzOTttIGdvaW5nIHRvIGRldGVybWluZSB3aGF0IHRoYXQgbWVhbnMgZm9yIHBlcmZvcm1hbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQl9QQUdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvc2gvbW0vS2NvbmZpZz0xNTg9Y2hvaWNlXG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE2My1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjQ6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0S1xuYXJjaC9zaC9tbS9LY29uZmlnLTE2NS1cdGJvb2wgXCYjMzQ7NjRrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjctXG5hcmNoL3NoL21tL0tjb25maWc6MTY4OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8yNTZLXG5hcmNoL3NoL21tL0tjb25maWctMTY5LVx0Ym9vbCBcJiMzNDsyNTZrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzEtXG5hcmNoL3NoL21tL0tjb25maWc6MTcyOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0OzFNQlwmIzM0O1xuYXJjaC9zaC9tbS9LY29uZmlnLTE3NC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE3Ni1cdGJvb2wgXCYjMzQ7NE1CXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE3OC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xODAtXHRib29sIFwmIzM0OzY0TUJcJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG5mcy9LY29uZmlnLTI2NC1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI3Mi1cbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcbmZzL0tjb25maWctMjc0LVx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNzYtXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbmZzL0tjb25maWctMjc4LVx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG4tLVxubW0vS2NvbmZpZz03MDY9Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTcwOC1cbm1tL0tjb25maWc6NzA5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxubW0vS2NvbmZpZy03MTAtXHRkZWZfYm9vbCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzAzCgkJCQkJCQlvdXRwdXQ6IDE2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGRlbGl2ZXJlZCBhcyBpZiBJJiMzOTttIHJlZmxlY3Rpbmcgb24gaXQgbXlzZWxmOgoKKipJbml0aWFsIENvbmZpZ3VyYXRpb24gQ2hlY2sqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIG1haW4gdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgdGhhdCBgSFVHRVRMQkZTYCBpcyBzZXQgdXAgY29ycmVjdGx5LiBUaGF0JiMzOTtzIHRoZSBjb3JlLiBCZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBpdCYjMzk7cyB3b3J0aCBhIHF1aWNrIGxvb2sgYXQgYGNvbmZpZyBDTUFgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9uIGlzIHNldCB1cCB0b28uIEl0IG1ha2VzIHNlbnNlIHRvIGNoZWNrIGJvdGggb2YgdGhlc2UgdG9nZXRoZXIgYXMgdGhleSBhcmUgYm90aCBhYm91dCBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDTUEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2RtYS9LY29uZmlnPTE3Mz1jb25maWcgRE1BX05VTUFfQ01BXG4tLVxua2VybmVsL2RtYS9LY29uZmlnLTE4NS1cbmtlcm5lbC9kbWEvS2NvbmZpZzoxODY6Y29uZmlnIENNQV9TSVpFX1BFUk5VTUFcbmtlcm5lbC9kbWEvS2NvbmZpZy0xODctXHRib29sIFwmIzM0O0RlZmF1bHQgQ01BIGFyZWEgcGVyIE5VTUEgbm9kZVwmIzM0O1xuLS1cbmtlcm5lbC9kbWEvS2NvbmZpZz0xOTY9Y29tbWVudCBcJiMzNDtEZWZhdWx0IGNvbnRpZ3VvdXMgbWVtb3J5IGFyZWEgc2l6ZTpcJiMzNDtcbmtlcm5lbC9kbWEvS2NvbmZpZy0xOTctXG5rZXJuZWwvZG1hL0tjb25maWc6MTk4OmNvbmZpZyBDTUFfU0laRV9NQllURVNcbmtlcm5lbC9kbWEvS2NvbmZpZy0xOTktXHRpbnQgXCYjMzQ7U2l6ZSBpbiBNZWdhIEJ5dGVzXCYjMzQ7XG4tLVxua2VybmVsL2RtYS9LY29uZmlnLTIwOC1cbmtlcm5lbC9kbWEvS2NvbmZpZzoyMDk6Y29uZmlnIENNQV9TSVpFX1BFUkNFTlRBR0Vcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMTAtXHRpbnQgXCYjMzQ7UGVyY2VudGFnZSBvZiB0b3RhbCBtZW1vcnlcJiMzNDtcbi0tXG5rZXJuZWwvZG1hL0tjb25maWc9MjIwPWNob2ljZVxuLS1cbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjMtXG5rZXJuZWwvZG1hL0tjb25maWc6MjI0OmNvbmZpZyBDTUFfU0laRV9TRUxfTUJZVEVTXG5rZXJuZWwvZG1hL0tjb25maWctMjI1LVx0Ym9vbCBcJiMzNDtVc2UgbWVnYSBieXRlcyB2YWx1ZSBvbmx5XCYjMzQ7XG5rZXJuZWwvZG1hL0tjb25maWctMjI2LVxua2VybmVsL2RtYS9LY29uZmlnOjIyNzpjb25maWcgQ01BX1NJWkVfU0VMX1BFUkNFTlRBR0Vcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjgtXHRib29sIFwmIzM0O1VzZSBwZXJjZW50YWdlIHZhbHVlIG9ubHlcJiMzNDtcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjktXG5rZXJuZWwvZG1hL0tjb25maWc6MjMwOmNvbmZpZyBDTUFfU0laRV9TRUxfTUlOXG5rZXJuZWwvZG1hL0tjb25maWctMjMxLVx0Ym9vbCBcJiMzNDtVc2UgbG93ZXIgdmFsdWUgKG1pbmltdW0pXCYjMzQ7XG5rZXJuZWwvZG1hL0tjb25maWctMjMyLVxua2VybmVsL2RtYS9LY29uZmlnOjIzMzpjb25maWcgQ01BX1NJWkVfU0VMX01BWFxua2VybmVsL2RtYS9LY29uZmlnLTIzNC1cdGJvb2wgXCYjMzQ7VXNlIGhpZ2hlciB2YWx1ZSAobWF4aW11bSlcJiMzNDtcbi0tXG5rZXJuZWwvZG1hL0tjb25maWc9MjM2PWVuZGNob2ljZVxua2VybmVsL2RtYS9LY29uZmlnLTIzNy1cbmtlcm5lbC9kbWEvS2NvbmZpZzoyMzg6Y29uZmlnIENNQV9BTElHTk1FTlRcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzktXHRpbnQgXCYjMzQ7TWF4aW11bSBQQUdFX1NJWkUgb3JkZXIgb2YgYWxpZ25tZW50IGZvciBjb250aWd1b3VzIGJ1ZmZlcnNcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTEwNjQ9Y29uZmlnIEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXG4tLVxubW0vS2NvbmZpZy0xMDY2LVxubW0vS2NvbmZpZzoxMDY3OmNvbmZpZyBDTUFcbm1tL0tjb25maWctMTA2OC1cdGJvb2wgXCYjMzQ7Q29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDgxLVxubW0vS2NvbmZpZzoxMDgyOmNvbmZpZyBDTUFfREVCVUdGU1xubW0vS2NvbmZpZy0xMDgzLVx0Ym9vbCBcJiMzNDtDTUEgZGVidWdmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwODctXG5tbS9LY29uZmlnOjEwODg6Y29uZmlnIENNQV9TWVNGU1xubW0vS2NvbmZpZy0xMDg5LVx0Ym9vbCBcJiMzNDtDTUEgaW5mb3JtYXRpb24gdGhyb3VnaCBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwOTQtXG5tbS9LY29uZmlnOjEwOTU6Y29uZmlnIENNQV9BUkVBU1xubW0vS2NvbmZpZy0xMDk2LVx0aW50IFwmIzM0O01heGltdW0gY291bnQgb2YgdGhlIENNQSBhcmVhc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIxOAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiDigJMgQSBRdWljayBDaGVjayoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHN0YXJ0aW5nIHdpdGggYENPTkZJR19DTUFgLiBUaGF0JiMzOTtzIG91ciBmb2NhbCBwb2ludC4gTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3Mgd2hlcmUgd2UmIzM5O3JlIGF0IHdpdGggdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgc2V0dGluZ3Mgb24gdGhhdCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlci4KCkFuZCwgb2YgY291cnNlLCB0aGF0IGFsd2F5cyBsZWFkcyBtZSB0byBjb25zaWRlciBgY29uZmlnIENQVVNFVFNgLiBBIHF1aWNrIHJldmlldyBvZiB0aG9zZSBzZXR0aW5ncyB3aWxsIGJlIGltcG9ydGFudCB0byBlbnN1cmluZyBldmVyeXRoaW5nIGlzIHNldCB1cCBjb3JyZWN0bHkuIEdvdHRhIG1ha2Ugc3VyZSB0aG9zZSB0d28gYXJlIGNvbnNpc3RlbnQgd2l0aCBlYWNoIG90aGVyLiBUaGlzIGlzIGFsbCBwcmV0dHkgc3RhbmRhcmQsIGJ1dCB3b3J0aCBkb3VibGUtY2hlY2tpbmcgbm9uZXRoZWxlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDUFVTRVRTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMjg0PWNvbmZpZyBDR1JPVVBfSFVHRVRMQlxuLS1cbmluaXQvS2NvbmZpZy0xMjk5LVxuaW5pdC9LY29uZmlnOjEzMDA6Y29uZmlnIENQVVNFVFNcbmluaXQvS2NvbmZpZy0xMzAxLVx0Ym9vbCBcJiMzNDtDcHVzZXQgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMzEyLVxuaW5pdC9LY29uZmlnOjEzMTM6Y29uZmlnIENQVVNFVFNfVjFcbmluaXQvS2NvbmZpZy0xMzE0LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIGNwdXNldHMgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzUzNAoJCQkJCQkJb3V0cHV0OiAxMjMKCQkJCQkJCXRob3VnaHRzOiAzNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmdW5jdGlvbiBvZiBpbnRlcmVzdCBpcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gVGhlIGNvbmZpZywgYXMgZXhwZWN0ZWQsIHNlZW1zIHRvIGJlIHRpZWQgdG8gYENPTkZJR19DUFVTRVRTYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uLgoKSXQmIzM5O3MgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uLCByaWdodD8gSSBpbW1lZGlhdGVseSB3YW50IHRvIGNvbmZpcm0gaXRzIHJlYWNoYWJpbGl0eSBhbmQgdGVzdGFiaWxpdHkuIFRoZSBwYXRjaCBmb2N1c2VzICpzb2xlbHkqIG9uIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLCB3aGljaCBzaW1wbGlmaWVzIG15IGluaXRpYWwgYXNzZXNzbWVudDsgSSBkb24mIzM5O3QgaGF2ZSB0byBjaGFzZSBkb3duIG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9ucy4gVGhlIG1vZGlmaWNhdGlvbiB0byBgbW0vaHVnZXRsYl9jbWEuY2AgY29uZmlybXMgdGhhdCB0aGUgcmVsZXZhbnQgY29uZmlncyBoZXJlIGFyZSBgQ09ORklHX0NNQWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYC4KCk5vdywgaXMgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZXhwb3J0ZWQgb3IgZGlyZWN0bHkgYWNjZXNzaWJsZSB2aWEgYSBzeXNjYWxsPyBEaWdnaW5nIGEgYml0LCBpdCBsb29rcyBsaWtlIGl0ICppcyogcmVhY2hhYmxlIGR1cmluZyBnaWdhbnRpYyBodWdlIHBhZ2UgYWxsb2NhdGlvbi4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgaHVnZSBwYWdlcyBhbGxvY2F0ZWQgdmlhIGBtbWFwYCB3aXRoIGBNQVBfSFVHRVRMQmAgYW5kIGEgKmdpZ2FudGljKiBwYWdlIHNpemUsIG9yIHRocm91Z2ggYHN5c2ZzYCBieSBtYW5pcHVsYXRpbmcgYG5yX2h1Z2VwYWdlc2AuIEJpbmdvLCB0aGlzIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSEKCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aG9zZSBrZXkgY29uZmlndXJhdGlvbnM6IGBIVUdFVExCRlNgLCBgQ01BYCwgYW5kIGBDUFVTRVRTYC4KCkEgcXVpY2sgY2hlY2sgY29uZmlybXMgaXQmIzM5O3Mgbm90IGEgc3RhdGljIGZ1bmN0aW9uLgpgYGBjCnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssCgkJaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spCmBgYAoKQWxyaWdodCwgdGhhdCYjMzk7cyBlbm91Z2ggZm9yIG15IGluaXRpYWwgcGFzcy4gSSYjMzk7bSByZWFkeSB0byByZXBvcnQgbXkgZmluZGluZ3MgdXNpbmcgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7Q1BVU0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB0byByZXNwZWN0IGNwdXNldCBjb25zdHJhaW50cyB3aGVuIGBub2RlbWFza2AgaXMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgKEh1Z2VUTEIgJiM0MzsgQ01BKS4gVGhlIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2Ugd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGh1Z2UgcGFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7Q1BVU0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB0byByZXNwZWN0IGNwdXNldCBjb25zdHJhaW50cyB3aGVuIGBub2RlbWFza2AgaXMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgKEh1Z2VUTEIgJiM0MzsgQ01BKS4gVGhlIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2Ugd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGh1Z2UgcGFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2Agd2hlbiBgbm9kZW1hc2tgIGlzIE5VTEwgYnkgZmFsbGluZyBiYWNrIHRvIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgIGFuZCBpbnRyb2R1Y2luZyBhIHJldHJ5IGxvb3AuIFRoZSBsb2NhbCB2YXJpYWJsZSBgY3B1c2V0X21lbXNfY29va2llYCBpcyBvbmx5IGluaXRpYWxpemVkIHdoZW4gYG5vZGVtYXNrYCBpcyBOVUxMLCBidXQgZHVlIHRvIHNob3J0LWNpcmN1aXQgZXZhbHVhdGlvbiBpbiB0aGUgY29uZGl0aW9uIGAhbm9kZW1hc2sgXHUwMDI2XHUwMDI2IHVubGlrZWx5KHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpYCwgaXQgaXMgbmV2ZXIgcmVhZCB1bmluaXRpYWxpemVkLiBUaGUgYnVnIGJlaW5nIGZpeGVkIGlzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgYW5kIEtBU0FOLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgdG8gdXNlciBzcGFjZSBvciB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkNGNjYjQwNDA0OTFkMGE3YTcwNTAyMzA0MWI5ZTFhYzkzZGFhYzhmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMDU6NTg6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdldGxiX2NtYS5jIGIvbW0vaHVnZXRsYl9jbWEuYwppbmRleCAzOTM0NGQ2Yzc4ZDg0Li4zZTIyMTYxNjg2ZDJmIDEwMDY0NAotLS0gYS9tbS9odWdldGxiX2NtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGJfY21hLmMKQEAgLTMsNiAmIzQzOzMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY21hLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY3B1c2V0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW1faW5saW5lLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vcGFnZS5oJmd0OwpAQCAtMzAsMTUgJiM0MzszMSwyNSBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLAogCWludCBub2RlOwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwomIzQzOwljb25zdCBub2RlbWFza190ICpubWFzazsKJiM0MzsJdW5zaWduZWQgaW50IGNwdXNldF9tZW1zX2Nvb2tpZTsKIAogCWlmICghaHVnZXRsYl9jbWFfc2l6ZSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoaHVnZXRsYl9jbWFbbmlkXSkKJiM0MztyZXRyeV9jcHVzZXQ6CiYjNDM7CWlmICghbm9kZW1hc2spIHsKJiM0MzsJCWNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7CiYjNDM7CQlubWFzayA9ICZhbXA7Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkOwomIzQzOwl9IGVsc2UgewomIzQzOwkJbm1hc2sgPSBub2RlbWFzazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaHVnZXRsYl9jbWFbbmlkXSAmYW1wOyZhbXA7IG5vZGVfaXNzZXQobmlkLCAqbm1hc2spKQogCQlwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7CiAKIAlpZiAoIXBhZ2UgJmFtcDsmYW1wOyAhKGdmcF9tYXNrICZhbXA7IF9fR0ZQX1RISVNOT0RFKSkgewotCQlmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgKm5vZGVtYXNrKSB7CiYjNDM7CQlmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgKm5tYXNrKSB7CiAJCQlpZiAobm9kZSA9PSBuaWQgfHwgIWh1Z2V0bGJfY21hW25vZGVdKQogCQkJCWNvbnRpbnVlOwogCkBAIC00OCw4ICYjNDM7NTksMTIgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywKIAkJfQogCX0KIAotCWlmICghcGFnZSkKJiM0MzsJaWYgKCFwYWdlKSB7CiYjNDM7CQlpZiAoIW5vZGVtYXNrICZhbXA7JmFtcDsKJiM0MzsJCSAgICB1bmxpa2VseShyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKSkKJiM0MzsJCQlnb3RvIHJldHJ5X2NwdXNldDsKIAkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KIAogCWZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKIAlmb2xpb19zZXRfaHVnZXRsYl9jbWEoZm9saW8pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzNgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDExNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdldGxiIENNQSBBbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgbW9kaWZpZXMgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgaW4gYG1tL2h1Z2V0bGJfY21hLmNgLiBJdCYjMzk7cyBhZGRpbmcgY3B1c2V0IG5vZGVtYXNrIGhhbmRsaW5nLCB3aGljaCBpcyBhIGtleSBhcmVhIHRvIGdldCByaWdodC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIG1lbW9yeSBzYWZldHkg4oCTIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLgoKUmlnaHQsIHNvIHRoZSBiYXNpYyBsb2dpYyBpcyB0aGF0IGlmIGBub2RlbWFza2AgaXMgTlVMTCwgd2UgdXNlIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgIGFuZCB0aGUgYHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKClgIC8gYHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KClgIG1hY2hpbmVyeS4gSWYgaXQmIzM5O3Mgbm90IE5VTEwsIHdlIHVzZSB0aGUgcHJvdmlkZWQgYG5vZGVtYXNrYC4gIFRoZSBjb2RlIGNoZWNrcyBgbm9kZV9pc3NldChuaWQsICpubWFzaylgIGJlZm9yZSBhbGxvY2F0aW5nLiBDcnVjaWFsbHksIHRoZSBsb29wIG5vdyBpdGVyYXRlcyB1c2luZyBgZm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsICpubWFzaylgIGluc3RlYWQgb2YganVzdCBgKm5vZGVtYXNrYC4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIGltcHJvdmVtZW50IHRvIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLgoKTm93LCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQgYWJvdXQgYGNwdXNldF9tZW1zX2Nvb2tpZWA/IEkgc2VlIGl0JiMzOTtzIGluaXRpYWxpemVkIGJ5IGByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpYCwgYW5kIGBubWFza2AgaXMgc2V0IHRvIGVpdGhlciB0aGUgY3VycmVudCBhbGxvd2VkIG1lbXMgb3IgdGhlIHByb3ZpZGVkIGBub2RlbWFza2AuIFRoZSBsb29wIHVzZXMgYCpubWFza2AsIHdoaWNoIHNlZW1zIGZpbmUuIEhvd2V2ZXIsIGlmIGBub2RlbWFza2AgKmlzbiYjMzk7dCogTlVMTCwgdGhlbiBgY3B1c2V0X21lbXNfY29va2llYCBsb29rcyB1bmluaXRpYWxpemVkLgoKQnV0IHRoZW4gSSBzZWUgdGhlIGNoZWNrOgpgYGBjCglpZiAoIXBhZ2UpIHsKCQlpZiAoIW5vZGVtYXNrICZhbXA7JmFtcDsKCQkgICAgdW5saWtlbHkocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSkpCgkJCWdvdG8gcmV0cnlfY3B1c2V0OwoJCXJldHVybiBOVUxMOwoJfQpgYGAKQWhhISBDcnVjaWFsbHksIHRoZSBjaGVjayBpcyBgIW5vZGVtYXNrICZhbXA7JmFtcDsgLi4uYC4gIEJlY2F1c2Ugb2YgQyYjMzk7cyBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24sIGlmIGBub2RlbWFza2AgaXMgKm5vdCogTlVMTCwgdGhlIGNvbmRpdGlvbiBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgYCZhbXA7JmFtcDtgIGlzbiYjMzk7dCBldmVuIGV4ZWN1dGVkLiAgVGhlcmVmb3JlLCB0aGUgdW5pbml0aWFsaXplZCBgY3B1c2V0X21lbXNfY29va2llYCBpcyAqbm90KiByZWFkLiBUaGF0JiMzOTtzIGEgcmVsaWVmIQoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O20gY2hlY2tpbmcgaWYgYHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5YCBpcyBkb2luZyBhbnl0aGluZyBmdW5reS4gSXQmIzM5O3MgZWl0aGVyIGFuIGlubGluZSBmdW5jdGlvbiBvciBhIG1hY3JvLiBFaXRoZXIgd2F5LCBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24gb2YgYCZhbXA7JmFtcDtgIG1lYW5zIGl0IGRvZXNuJiMzOTt0IGdldCBleGVjdXRlZCB3aGVuIHRoZSBsZWZ0IHNpZGUgaXMgZmFsc2UuICBTbyBubyBpc3N1ZXMgdGhlcmUuIEkmIzM5O20gYWxzbyBjb25maXJtaW5nIHRoYXQgYGNwdXNldF9tZW1zX2Nvb2tpZWAgaXMgbG9jYWwgYW5kIG5vdCBzb21lIGdsb2JhbCBzdHJ1Y3R1cmUgc2hhcmVkIG91dHNpZGUgdGhlIGxvY2FsIGZ1bmN0aW9uLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29udHJvbCBmbG93IGluIHRoZSByZXRyeS4gVGhlIGNoYW5nZWQgY29kZSBpczoKYGBgYwotCWlmIChodWdldGxiX2NtYVtuaWRdKQomIzQzO3JldHJ5X2NwdXNldDoKJiM0MzsJaWYgKCFub2RlbWFzaykgewomIzQzOwkJY3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTsKJiM0MzsJCW5tYXNrID0gJmFtcDtjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlubWFzayA9IG5vZGVtYXNrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChodWdldGxiX2NtYVtuaWRdICZhbXA7JmFtcDsgbm9kZV9pc3NldChuaWQsICpubWFzaykpCiAJCXBhZ2UgPSBjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKGh1Z2V0bGJfY21hW25pZF0sIG9yZGVyKTsKYGBgCgpCYXNpY2FsbHksIGlmIGBub2RlbWFza2AgaXMgTlVMTCwgd2UgdXNlIHRoZSBjdXJyZW50IGFsbG93ZWQgbWVtcy4gSWYgaXQmIzM5O3Mgbm90IE5VTEwsIHdlIHVzZSB0aGUgcHJvdmlkZWQgYG5vZGVtYXNrYC4gQW5kIHRoYXQgZ2V0cyBwYXNzZWQgdG8gYG5vZGVfaXNzZXQoKWAuICBOb3csIEkmIzM5O20gdGhpbmtpbmcgYmFjazogZGlkbiYjMzk7dCB0aGUgKm9yaWdpbmFsKiBjb2RlIGhhdmUgYW4gaXNzdWUgaWYgYG5vZGVtYXNrYCAqd2FzKiBOVUxMPyBBaCB5ZXMsIHRoZSBvbGQgY29kZSBoYWQgdGhpczoKCmBgYGMKCWlmIChodWdldGxiX2NtYVtuaWRdKQoJCXBhZ2UgPSBjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKGh1Z2V0bGJfY21hW25pZF0sIG9yZGVyKTsKCglpZiAoIXBhZ2UgJmFtcDsmYW1wOyAhKGdmcF9tYXNrICZhbXA7IF9fR0ZQX1RISVNOT0RFKSkgewoJCWZvcl9lYWNoX25vZGVfbWFzayhub2RlLCAqbm9kZW1hc2spIHsKYGBgCgpJZiBgbm9kZW1hc2tgICp3YXMqIE5VTEwsIHRoYXQgYCpub2RlbWFza2Agd291bGQgYmUgZGVyZWZlcmVuY2luZyBhIE5VTEwgcG9pbnRlciwgcmlnaHQ/ICBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgZml4aW5nIHRoYXQgY3JpdGljYWwgaXNzdWUhCgpUbyBjb25maXJtLCBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoaXMgaXMgdGhlIHNvbGUgY2FsbC1zaXRlLiBJIHdhbnQgdG8gYmUgMTAwJSBzdXJlIHRoaXMgaGFuZGxlcyBgbm9kZW1hc2tgIGNvcnJlY3RseSBpbiBhbGwgY2FzZXMuIEkmIzM5O2xsIHNlYXJjaCBmb3IgdGhlIGNhbGxlcnMgb2YgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTM2MD1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9odWdldGxiLmMtMTM2NC1cbm1tL2h1Z2V0bGIuYzoxMzY1Olx0Zm9saW8gPSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5vZGVtYXNrKTtcbm1tL2h1Z2V0bGIuYy0xMzY2LVx0aWYgKGZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MjI9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjctXG5tbS9odWdldGxiX2NtYS5jOjI4OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9odWdldGxiX2NtYS5jLTI5LVx0XHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9odWdldGxiX2NtYS5oPTY9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2h1Z2V0bGJfY21hLmg6NzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxubW0vaHVnZXRsYl9jbWEuaC04LVx0XHRcdFx0ICAgICAgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spO1xuLS1cbm1tL2h1Z2V0bGJfY21hLmg9MTY9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYl9jbWEuaC0xOS1cbm1tL2h1Z2V0bGJfY21hLmg6MjA6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsXG5tbS9odWdldGxiX2NtYS5oLTIxLVx0XHRnZnBfdCBnZnBfbWFzayxcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTIyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgRnVuY3Rpb24qKgoKUmlnaHQsIHRoZSBjYWxsZXIgaWRlbnRpZmllZCBpcyBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCwgYW5kIGl0JiMzOTtzIGNvbWluZyBmcm9tIGBtbS9odWdldGxiLmNgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgcmVsYXRlZCB0byBIdWdlVExCIGZ1bmN0aW9uYWxpdHkuIE9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgZG9pbmcgc3BlY2lmaWNhbGx5LiBUaGlzIGZ1bmN0aW9uIG5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBoYXMgdG8gZG8gd2l0aCBhbGxvY2F0aW5nIGEgdmVyeSBsYXJnZSBwYWdlLCBhbmQgaXQgaXMgcG90ZW50aWFsbHkgYWxsb2NhdGluZyB0aGUgbWVtb3J5IGluIGEgd2F5IHRoYXQgaXRzIGNvbnRlbnRzIGFyZSBmcm96ZW4uIFdlIG5lZWQgdG8gY2hlY2sgaXQgYW5kIGRpdmUgaW50byBpdHMgbG9naWMuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgaW50cmljYWNpZXMgb2YgSHVnZVRMQiBtYW5hZ2VtZW50LCBwYWdlIHRhYmxlIGludGVyYWN0aW9ucywgYW5kIHBvdGVudGlhbGx5IHNvbWUgc3BlY2lhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ3kgZm9yIHRoZXNlIGxhcmdlIHBhZ2VzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0xMzIwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTM1OS0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0NPTlRJR19BTExPQylcbm1tL2h1Z2V0bGIuYzoxMzYwOnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxubW0vaHVnZXRsYi5jLTEzNjEtXHRcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL2h1Z2V0bGIuYy0xMzc2LSNlbHNlIC8qICFDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRSB8fCAhQ09ORklHX0NPTlRJR19BTExPQyAqL1xubW0vaHVnZXRsYi5jOjEzNzc6c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsXG5tbS9odWdldGxiLmMtMTM3OC1cdFx0XHRcdFx0ICBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9odWdldGxiLmM9MTgzNj1zdGF0aWMgc3RydWN0IGZvbGlvICpvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTg0Ni1cdGlmIChvcmRlcl9pc19naWdhbnRpYyhvcmRlcikpXG5tbS9odWdldGxiLmM6MTg0NzpcdFx0Zm9saW8gPSBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5tYXNrKTtcbm1tL2h1Z2V0bGIuYy0xODQ4LVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzU5CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AgQ29kZSBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCwgYW5kIGl0IGNhbGxzIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIHdpdGggYG5tYXNrYC4gUmlnaHQsIGlmIGBubWFza2AgaXMgTlVMTCwgdGhlbiB0aGUgYG5vZGVtYXNrYCBwYXJhbWV0ZXIgcGFzc2VkIHRvIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIG11c3QgYWxzbyBiZSBOVUxMLiBIYW5nIG9uIGEgc2Vjb25kLCB0aGUgcGF0Y2ggZGVzY3JpcHRpb24gbWVudGlvbnMgYSBmaXggcmVsYXRlZCB0byBhIHBvdGVudGlhbGx5IE5VTEwgYG5vZGVtYXNrYCBjYXVzaW5nIGEgZGVyZWZlcmVuY2UuIEFoLCBpdCYjMzk7cyBhICYjMzQ7c3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsgZml4IGZvciBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSEKClRoZSBjcnVjaWFsIHBhcnQgaXMgdGhlIGBub2RlX2lzc2V0KG5pZCwgKm5tYXNrKWAgY2hlY2suIElmIGBub2RlbWFza2AgKmlzKiBOVUxMLCB0aGVuIGBubWFza2AgaXMgYXNzaWduZWQgdG8gYCZhbXA7Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkYCwgd2hpY2ggaXMgYSBjbGV2ZXIgd2F5IHRvIHByZXZlbnQgdGhlIGRyZWFkZWQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBTbywgdGhlIHBhdGNoIHNlZW1zIHRvIGhhdmUgYWRkcmVzc2VkIHRoZSBjb3JlIGlzc3VlLgoKTm93LCBkb2VzIHRoaXMgZml4IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcz8gU3BlY2lmaWNhbGx5LCBkb2VzIGl0IG9wZW4gdGhlIGRvb3IgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlPyBMZXQmIzM5O3Mgc2VlLi4ubm8sIGl0IHNlZW1zIHRoYXQgaWYgYG5vZGVtYXNrYCBpcyBOVUxMLCBgY3B1c2V0X21lbXNfY29va2llYCBnZXRzIGluaXRpYWxpemVkLiBBbmQgaWYgYG5vZGVtYXNrYCBpc24mIzM5O3QgTlVMTCwgdGhlbiBpdCBpcyB1bmluaXRpYWxpemVkLCBidXQgaXQmIzM5O3Mgbm90IGFjdHVhbGx5IHVzZWQgZHVlIHRvIHNob3J0LWNpcmN1aXRpbmcsIHNvIHRoYXQmIzM5O3MgZ29vZC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5YCBpc24mIzM5O3QgYSBtYWNybyB0aGF0IHVuY29uZGl0aW9uYWxseSBldmFsdWF0ZXMgaXRzIGFyZ3VtZW50cywgd2hpY2ggd291bGQgYmUgcHJvYmxlbWF0aWMuIEkmIzM5O2xsIGNoZWNrIGl0cyBkZWZpbml0aW9uIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQxMQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGByZWFkX21lbXNfYWxsb3dlZF9yZXRyeWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGByZWFkX21lbXNfYWxsb3dlZF9yZXRyeWAuIFRoZXJlJiMzOTtzIHByb2JhYmx5IGEgc3VidGxlIG51YW5jZSBpbiBpdHMgaW1wbGVtZW50YXRpb24gdGhhdCBJJiMzOTttIG92ZXJsb29raW5nLCBvciBwZXJoYXBzIGEgZGVwZW5kZW5jeSBvbiBvdGhlciBjb21wb25lbnRzIEkmIzM5O20gbm90IGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIGRlZmluaXRpb24uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSByZXRyeSBsb2dpYyBpdHNlbGYgLSB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciBhIHJldHJ5LCBob3cgbWFueSB0aW1lcyBkb2VzIGl0IGF0dGVtcHQsIGFuZCB3aGF0IGFyZSB0aGUgYmFja29mZiBzdHJhdGVnaWVzIGlmIGFueT8gQXJlIHRoZXJlIGFueSBzaWRlIGVmZmVjdHM/IEkgYWxzbyBuZWVkIHRvIHZlcmlmeSBpdCYjMzk7cyB0aHJlYWQgc2FmZSBhbmQgYW55IHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWFkX21lbXNfYWxsb3dlZF9yZXRyeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2NwdXNldC5oPTIxPWV4dGVybiBib29sIGxvY2tkZXBfaXNfY3B1c2V0X2hlbGQodm9pZCk7XG4tLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yNy0gKiBrZXkuIEluIGNvZGUgcGF0aHMgd2hlcmUgd2UgbmVlZCB0byBsb29wIHdpdGggcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKSBhbmRcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6Mjg6ICogcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoKSB0byBnZXQgYSBjb25zaXN0ZW50IHZpZXcgb2YgbWVtc19hbGxvd2VkLCB3ZSBuZWVkXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTI5LSAqIHRvIGVuc3VyZSB0aGF0IGJlZ2luKCkgYWx3YXlzIGdldHMgcmV3cml0dGVuIGJlZm9yZSByZXRyeSgpIGluIHRoZVxuLS1cbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg9MTM1PWV4dGVybiB2b2lkIGNwdXNldF9yZXNldF9zY2hlZF9kb21haW5zKHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTQxLSAqIGNhdXNpbmcgcHJvY2VzcyBmYWlsdXJlLiBBIHJldHJ5IGxvb3Agd2l0aCByZWFkX21lbXNfYWxsb3dlZF9iZWdpbiBhbmRcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MTQyOiAqIHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5IHByZXZlbnRzIHRoZXNlIGFydGlmaWNpYWwgZmFpbHVyZXMuXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTE0My0gKi9cbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg9MTQ0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNTctICovXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjE1ODpzdGF0aWMgaW5saW5lIGJvb2wgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkodW5zaWduZWQgaW50IHNlcSlcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTU5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oPTI5Mj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByZWFkX21lbXNfYWxsb3dlZF9iZWdpbih2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjk2LVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoyOTc6c3RhdGljIGlubGluZSBib29sIHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KHVuc2lnbmVkIGludCBzZXEpXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTI5OC17XG4tLVxubW0vZmlsZW1hcC5jPTk5OT1zdHJ1Y3QgZm9saW8gKmZpbGVtYXBfYWxsb2NfZm9saW9fbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL2ZpbGVtYXAuYy0xMDE0LVx0XHRcdGZvbGlvID0gX19mb2xpb19hbGxvY19ub2RlX25vcHJvZihnZnAsIG9yZGVyLCBuKTtcbm1tL2ZpbGVtYXAuYzoxMDE1Olx0XHR9IHdoaWxlICghZm9saW8gXHUwMDI2XHUwMDI2IHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpO1xubW0vZmlsZW1hcC5jLTEwMTYtXG4tLVxubW0vaHVnZXRsYi5jPTEyNzU9c3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL2h1Z2V0bGIuYy0xMzA4LVx0fVxubW0vaHVnZXRsYi5jOjEzMDk6XHRpZiAodW5saWtlbHkocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSkpXG5tbS9odWdldGxiLmMtMTMxMC1cdFx0Z290byByZXRyeV9jcHVzZXQ7XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0yOD1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtNjMtXHRcdGlmICghbm9kZW1hc2sgXHUwMDI2XHUwMDI2XG5tbS9odWdldGxiX2NtYS5jOjY0Olx0XHQgICAgdW5saWtlbHkocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSkpXG5tbS9odWdldGxiX2NtYS5jLTY1LVx0XHRcdGdvdG8gcmV0cnlfY3B1c2V0O1xuLS1cbm1tL21lbXBvbGljeS5jPTIxMDA9c3RhdGljIHVuc2lnbmVkIGludCB3ZWlnaHRlZF9pbnRlcmxlYXZlX25vZGVzKHN0cnVjdCBtZW1wb2xpY3kgKnBvbGljeSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMTEwLVx0XHRub2RlID0gbmV4dF9ub2RlX2luKG5vZGUsIHBvbGljeS1cdTAwM2Vub2Rlcyk7XG5tbS9tZW1wb2xpY3kuYzoyMTExOlx0XHRpZiAocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSlcbm1tL21lbXBvbGljeS5jLTIxMTItXHRcdFx0Z290byByZXRyeTtcbi0tXG5tbS9tZW1wb2xpY3kuYz0yMTIzPXN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZXJsZWF2ZV9ub2RlcyhzdHJ1Y3QgbWVtcG9saWN5ICpwb2xpY3kpXG4tLVxubW0vbWVtcG9saWN5LmMtMjEzMS1cdFx0bmlkID0gbmV4dF9ub2RlX2luKGN1cnJlbnQtXHUwMDNlaWxfcHJldiwgcG9saWN5LVx1MDAzZW5vZGVzKTtcbm1tL21lbXBvbGljeS5jOjIxMzI6XHR9IHdoaWxlIChyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKTtcbm1tL21lbXBvbGljeS5jLTIxMzMtXG4tLVxubW0vbWVtcG9saWN5LmM9MjYzMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2NTctXHRcdG5ub2RlcyA9IHJlYWRfb25jZV9wb2xpY3lfbm9kZW1hc2socG9sLCBcdTAwMjZub2Rlcyk7XG5tbS9tZW1wb2xpY3kuYzoyNjU4Olx0fSB3aGlsZSAocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSk7XG5tbS9tZW1wb2xpY3kuYy0yNjU5LVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00NjU4PWNoZWNrX3JldHJ5X2NwdXNldChpbnQgY3B1c2V0X21lbXNfY29va2llLCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ2ODMtXHQgKi9cbm1tL3BhZ2VfYWxsb2MuYzo0Njg0Olx0aWYgKHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpXG5tbS9wYWdlX2FsbG9jLmMtNDY4NS1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vc2x1Yi5jPTM4NjM9c3RhdGljIHZvaWQgKmdldF9mcm9tX2FueV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBfZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTM5MTktXHRcdFx0XHRcdC8qXG5tbS9zbHViLmM6MzkyMDpcdFx0XHRcdFx0ICogRG9uJiMzOTt0IGNoZWNrIHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KClcbm1tL3NsdWIuYy0zOTIxLVx0XHRcdFx0XHQgKiBoZXJlIC0gaWYgbWVtc19hbGxvd2VkIHdhcyB1cGRhdGVkIGluXG4tLVxubW0vc2x1Yi5jLTM5MjktXHRcdH1cbm1tL3NsdWIuYzozOTMwOlx0fSB3aGlsZSAoYWxsb3dfc3BpbiBcdTAwMjZcdTAwMjYgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSk7XG5tbS9zbHViLmMtMzkzMS0jZW5kaWZcdC8qIENPTkZJR19OVU1BICovXG4tLVxubW0vc2x1Yi5jPTcyMzE9X19yZWZpbGxfb2JqZWN0c19hbnkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXG4tLVxubW0vc2x1Yi5jLTcyNjQtXHRcdFx0XHQvKlxubW0vc2x1Yi5jOjcyNjU6XHRcdFx0XHQgKiBEb24mIzM5O3QgY2hlY2sgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoKSBoZXJlIC1cbm1tL3NsdWIuYy03MjY2LVx0XHRcdFx0ICogaWYgbWVtc19hbGxvd2VkIHdhcyB1cGRhdGVkIGluIHBhcmFsbGVsLCB0aGF0XG4tLVxubW0vc2x1Yi5jLTcyNzUtXHRcdH1cbm1tL3NsdWIuYzo3Mjc2Olx0fSB3aGlsZSAocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSk7XG5tbS9zbHViLmMtNzI3Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIzMQoJCQkJCQkJb3V0cHV0OiAyMDIKCQkJCQkJCXRob3VnaHRzOiA5NjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHN0YW5kYXJkIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gVGhlIHZ1bG5lcmFiaWxpdHkgc3RlbXMgZnJvbSBhbiB1bmhhbmRsZWQgY2FzZSB3aGVyZSBgbm9kZW1hc2tgIGlzIE5VTEwuCgpJIHNlZSB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZCBhIGZpeCB0aGF0IGludHJvZHVjZXMgYSByZXRyeSBtZWNoYW5pc20gdXNpbmcgYHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKClgIGFuZCBgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoKWAuIENydWNpYWxseSwgYHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5YCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24sIHdoaWNoIGlzIGNyaXRpY2FsIGhlcmUuIFRoZSBDIGNvbXBpbGVyIHdpbGwgc2hvcnQtY2lyY3VpdCB0aGUgcmlnaHQtaGFuZCBzaWRlIG9mIHRoZSBgJmFtcDsmYW1wO2Agb3BlcmF0b3IuIFRoZXJlZm9yZSwgaWYgYCFub2RlbWFza2AgaXMgZmFsc2UsIHRoZSByaWdodCBzaWRlLCBgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKWAgd2lsbCBuZXZlciBiZSByZWFkLCBhbmQgdGhlIHZhbHVlIG9mIGBjcHVzZXRfbWVtc19jb29raWVgIGlzIGlycmVsZXZhbnQuIEl0JiMzOTtzIHNhZmUuIFRoZSBjb21waWxlciBwcmV2ZW50cyB0aGUgdXNlIG9mIHRoZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlLgoKTXkgZmlyc3QgdGhvdWdodCB3YXMsICYjMzQ7Q291bGQgdGhlcmUgYmUgb3RoZXIgcmlza3M/JiMzNDsgSG93ZXZlciwgbG9va2luZyBjbG9zZXIsIGBjcHVzZXRfbWVtc19jb29raWVgIGlzIGp1c3QgYW4gYHVuc2lnbmVkIGludGAgdXNlZCBpbiBhIHNlcWxvY2stbGlrZSByZXRyeSBsb29wLCB3aGljaCBpcyBjb21tb24uIEl0JiMzOTtzIG5vdCBpbnZvbHZlZCBpbiBtZW1vcnkgYWxsb2NhdGlvbiBvciBkYXRhIHBhc3NpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzLgoKVGhlIHBhdGNoIGl0c2VsZiBtb2RpZmllcyB0aGUgY29udHJvbCBmbG93IGFyb3VuZCB0aGUgYWxsb2NhdGlvbiBsb2dpYywgYnV0IHRoZSBjb3JlIGlzc3VlIGlzIHRoZSBOVUxMIGNoZWNrIGFuZCB0aGUgaGFuZGxpbmcgb2YgdGhlIGBub2RlbWFza2AuIFRoZSBmaXggZW5zdXJlcyB0aGF0IGlmIGBub2RlbWFza2AgaXMgTlVMTCwgd2UgZmFsbCBiYWNrIHRvIHVzaW5nIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgIGZyb20gYSBgY3B1c2V0YC4gVGhpcyBpcyB0aGUgaW1wb3J0YW50IHBhcnQgYmVjYXVzZSBpdCBwcmV2ZW50cyB0aGUgTlVMTCBkZXJlZmVyZW5jZS4KCkkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkOiB0aGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIEl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBjb25kaXRpb25hbCBsb2dpYyBub3cgZW5zdXJlcyB0aGF0IGFsbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIHJldHJ5IGxvb3AuIFRoZSBgY3B1c2V0X21lbXNfY29va2llYCBpcyBpbml0aWFsaXplZCBvbmx5IHdoZW4gYG5vZGVtYXNrYCBpcyBudWxsLCBidXQgaXMgc2hvcnQtY2lyY3VpdGVkIGlmIG5vdCwgYW5kIHRodXMgaXQgcmVtYWlucyB1bmluaXRpYWxpemVkIG9ubHkgd2hlbiB0aGUgY29uZGl0aW9uIGF2b2lkcyBpdHMgdXNlLgoKU28sIHN1bW1pbmcgaXQgdXAsIHRoZSBwYXRjaCBmaXhlcyBhIGtub3duIE5VTEwgcG9pbnRlciBpc3N1ZS4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLCBub3IgZG9lcyBpdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlIG9yaWdpbmFsIGJ1ZyBpcyBlYXNpbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQgaGVyZS4gSXQmIzM5O3MgYSAmIzM0O05lZWRzS01TQU49ZmFsc2UmIzM0OyBzaXR1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHdoZW4gYG5vZGVtYXNrYCBpcyBOVUxMIGJ5IGZhbGxpbmcgYmFjayB0byBgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkYCBhbmQgaW50cm9kdWNpbmcgYSByZXRyeSBsb29wLiBUaGUgbG9jYWwgdmFyaWFibGUgYGNwdXNldF9tZW1zX2Nvb2tpZWAgaXMgb25seSBpbml0aWFsaXplZCB3aGVuIGBub2RlbWFza2AgaXMgTlVMTCwgYnV0IGR1ZSB0byBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24gaW4gdGhlIGNvbmRpdGlvbiBgIW5vZGVtYXNrIFx1MDAyNlx1MDAyNiB1bmxpa2VseShyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKWAsIGl0IGlzIG5ldmVyIHJlYWQgdW5pbml0aWFsaXplZC4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIGFuZCBLQVNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHdoZW4gYG5vZGVtYXNrYCBpcyBOVUxMIGJ5IGZhbGxpbmcgYmFjayB0byBgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkYCBhbmQgaW50cm9kdWNpbmcgYSByZXRyeSBsb29wLiBUaGUgbG9jYWwgdmFyaWFibGUgYGNwdXNldF9tZW1zX2Nvb2tpZWAgaXMgb25seSBpbml0aWFsaXplZCB3aGVuIGBub2RlbWFza2AgaXMgTlVMTCwgYnV0IGR1ZSB0byBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24gaW4gdGhlIGNvbmRpdGlvbiBgIW5vZGVtYXNrIFx1MDAyNlx1MDAyNiB1bmxpa2VseShyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKWAsIGl0IGlzIG5ldmVyIHJlYWQgdW5pbml0aWFsaXplZC4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIGFuZCBLQVNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6NTg6MzguMzc5NjI5MzMxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0NzU0ODA1MTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiQ01BXCIsXG4gICAgXCJDUFVTRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB3aGVuIGBub2RlbWFza2AgaXMgTlVMTCBieSBmYWxsaW5nIGJhY2sgdG8gYGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZGAgYW5kIGludHJvZHVjaW5nIGEgcmV0cnkgbG9vcC4gVGhlIGxvY2FsIHZhcmlhYmxlIGBjcHVzZXRfbWVtc19jb29raWVgIGlzIG9ubHkgaW5pdGlhbGl6ZWQgd2hlbiBgbm9kZW1hc2tgIGlzIE5VTEwsIGJ1dCBkdWUgdG8gc2hvcnQtY2lyY3VpdCBldmFsdWF0aW9uIGluIHRoZSBjb25kaXRpb24gYCFub2RlbWFzayBcXHUwMDI2XFx1MDAyNiB1bmxpa2VseShyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKWAsIGl0IGlzIG5ldmVyIHJlYWQgdW5pbml0aWFsaXplZC4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIGFuZCBLQVNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB0byByZXNwZWN0IGNwdXNldCBjb25zdHJhaW50cyB3aGVuIGBub2RlbWFza2AgaXMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgKEh1Z2VUTEIgKyBDTUEpLiBUaGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB3aGVuIGFsbG9jYXRpbmcgZ2lnYW50aWMgaHVnZSBwYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6NTg6MzguMzc5NjM1NDIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzgyMzYzNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkNGNjYjQwNDA0OTFkMGE3YTcwNTAyMzA0MWI5ZTFhYzkzZGFhYzhmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDExIDA1OjU4OjM3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfY21hLmMgYi9tbS9odWdldGxiX2NtYS5jXFxuaW5kZXggMzkzNDRkNmM3OGQ4NC4uM2UyMjE2MTY4NmQyZiAxMDA2NDRcXG4tLS0gYS9tbS9odWdldGxiX2NtYS5jXFxuKysrIGIvbW0vaHVnZXRsYl9jbWEuY1xcbkBAIC0zLDYgKzMsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NtYS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGlsZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NwdXNldC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW1faW5saW5lLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3BhZ2UuaFxcdTAwM2VcXG5AQCAtMzAsMTUgKzMxLDI1IEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuIFxcdGludCBub2RlO1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XFxuK1xcdGNvbnN0IG5vZGVtYXNrX3QgKm5tYXNrO1xcbitcXHR1bnNpZ25lZCBpbnQgY3B1c2V0X21lbXNfY29va2llO1xcbiBcXG4gXFx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdGlmIChodWdldGxiX2NtYVtuaWRdKVxcbityZXRyeV9jcHVzZXQ6XFxuK1xcdGlmICghbm9kZW1hc2spIHtcXG4rXFx0XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG4rXFx0XFx0bm1hc2sgPSBcXHUwMDI2Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRubWFzayA9IG5vZGVtYXNrO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSBcXHUwMDI2XFx1MDAyNiBub2RlX2lzc2V0KG5pZCwgKm5tYXNrKSlcXG4gXFx0XFx0cGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpO1xcbiBcXG4gXFx0aWYgKCFwYWdlIFxcdTAwMjZcXHUwMDI2ICEoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9USElTTk9ERSkpIHtcXG4tXFx0XFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsICpub2RlbWFzaykge1xcbitcXHRcXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgKm5tYXNrKSB7XFxuIFxcdFxcdFxcdGlmIChub2RlID09IG5pZCB8fCAhaHVnZXRsYl9jbWFbbm9kZV0pXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG5AQCAtNDgsOCArNTksMTIgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIXBhZ2UpXFxuK1xcdGlmICghcGFnZSkge1xcbitcXHRcXHRpZiAoIW5vZGVtYXNrIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICB1bmxpa2VseShyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKSlcXG4rXFx0XFx0XFx0Z290byByZXRyeV9jcHVzZXQ7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuIFxcbiBcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuIFxcdGZvbGlvX3NldF9odWdldGxiX2NtYShmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjU4OjM4LjgxODQ4Mjk1OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU1OTE4MjgyOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiQ01BXCIsXG4gICAgXCJDUFVTRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgdG8gcmVzcGVjdCBjcHVzZXQgY29uc3RyYWludHMgd2hlbiBgbm9kZW1hc2tgIGlzIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIChIdWdlVExCICsgQ01BKS4gVGhlIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2Ugd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGh1Z2UgcGFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ0Y2NiNDA0MDQ5MWQwYTdhNzA1MDIzMDQxYjllMWFjOTNkYWFjOGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNTo1ODozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfY21hLmMgYi9tbS9odWdldGxiX2NtYS5jXG5pbmRleCAzOTM0NGQ2Yzc4ZDg0Li4zZTIyMTYxNjg2ZDJmIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYl9jbWEuY1xuKysrIGIvbW0vaHVnZXRsYl9jbWEuY1xuQEAgLTMsNiArMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NtYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdXNldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1faW5saW5lLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG5AQCAtMzAsMTUgKzMxLDI1IEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRpbnQgbm9kZTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG4rXHRjb25zdCBub2RlbWFza190ICpubWFzaztcbitcdHVuc2lnbmVkIGludCBjcHVzZXRfbWVtc19jb29raWU7XG4gXG4gXHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0aWYgKGh1Z2V0bGJfY21hW25pZF0pXG4rcmV0cnlfY3B1c2V0OlxuK1x0aWYgKCFub2RlbWFzaykge1xuK1x0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xuK1x0XHRubWFzayA9IFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcbitcdH0gZWxzZSB7XG4rXHRcdG5tYXNrID0gbm9kZW1hc2s7XG4rXHR9XG4rXG4rXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSBcdTAwMjZcdTAwMjYgbm9kZV9pc3NldChuaWQsICpubWFzaykpXG4gXHRcdHBhZ2UgPSBjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKGh1Z2V0bGJfY21hW25pZF0sIG9yZGVyKTtcbiBcbiBcdGlmICghcGFnZSBcdTAwMjZcdTAwMjYgIShnZnBfbWFzayBcdTAwMjYgX19HRlBfVEhJU05PREUpKSB7XG4tXHRcdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCAqbm9kZW1hc2spIHtcbitcdFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsICpubWFzaykge1xuIFx0XHRcdGlmIChub2RlID09IG5pZCB8fCAhaHVnZXRsYl9jbWFbbm9kZV0pXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbkBAIC00OCw4ICs1OSwxMiBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAoIXBhZ2UpXG4rXHRpZiAoIXBhZ2UpIHtcbitcdFx0aWYgKCFub2RlbWFzayBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHVubGlrZWx5KHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpKVxuK1x0XHRcdGdvdG8gcmV0cnlfY3B1c2V0O1xuIFx0XHRyZXR1cm4gTlVMTDtcbitcdH1cbiBcbiBcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiBcdGZvbGlvX3NldF9odWdldGxiX2NtYShmb2xpbyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTo1ODozOC44MTg0ODQxMjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDMzNjg2NDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZXRsYiBDTUEgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG1tL2h1Z2V0bGJfY21hLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGZ1bmN0aW9uLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBpdCBzZWVtcyB0aGUgY29yZSBjaGFuZ2UgZm9jdXNlcyBvbiBpbnRlZ3JhdGluZyBjcHVzZXQgbm9kZW1hc2sgY2hlY2tzIGR1cmluZyBodWdldGxiIGZvbGlvIGFsbG9jYXRpb24gZnJvbSBDTUEuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoYXQgd2hlbiBhIGBub2RlbWFza2AgaXMgYWJzZW50LCB0aGUgY29kZSBzbWFydGx5IGRlZmF1bHRzIHRvIHVzaW5nIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgLCBhbmQgaXTigJlzIGV2ZW4gc2V0IHVwIHRvIHJldHJ5IGlmIHRoZSBjcHVzZXQgbWVtcyBjb25maWd1cmF0aW9uIHNoaWZ0cyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MuXG5cbk5vdywgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2lkZWx5IHRoaXMgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24gaXMgdXNlZC4gVGhlIGNvbnRleHQgb2YgdGhpcyBtb2RpZmljYXRpb24gaXMgY3JpdGljYWwsIHNvIGxldOKAmXMgZGVsdmUgaW50byBpdHMgY2FsbCBzaXRlcy4gV2hhdCBhcmUgdGhlIHJlbGV2YW50IGNhbGxlcnMsIGFuZCB3aGF0IGFyZSB0aGVpciBzcGVjaWZpYyBuZWVkcz8gS25vd2luZyB0aGF0IHdpbGwgY2xhcmlmeSB0aGUgcG90ZW50aWFsIGltcGFjdCBhbmQgYW55IHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5ldyBub2RlbWFzayBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzOSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjU4OjQzLjI1MjE3MzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2ODA5NTU2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTEzNjA9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9odWdldGxiLmMtMTM2NC1cXG5tbS9odWdldGxiLmM6MTM2NTpcXHRmb2xpbyA9IGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhvcmRlciwgZ2ZwX21hc2ssIG5pZCwgbm9kZW1hc2spO1xcbm1tL2h1Z2V0bGIuYy0xMzY2LVxcdGlmIChmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MjI9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0yNy1cXG5tbS9odWdldGxiX2NtYS5jOjI4OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vaHVnZXRsYl9jbWEuYy0yOS1cXHRcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmg9Nj12b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2h1Z2V0bGJfY21hLmg6NzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbm1tL2h1Z2V0bGJfY21hLmgtOC1cXHRcXHRcXHRcXHQgICAgICBpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzayk7XFxuLS1cXG5tbS9odWdldGxiX2NtYS5oPTE2PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuaC0xOS1cXG5tbS9odWdldGxiX2NtYS5oOjIwOnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLFxcbm1tL2h1Z2V0bGJfY21hLmgtMjEtXFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssXFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjU4OjQ0LjkyMDI3NDk0MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTg0NTkzNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKlRyYWNpbmcgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AqKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBjYWxsZWQgZnJvbSB3aXRoaW4gYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AsIHdoaWNoIGlzIGluIGBtbS9odWdldGxiLmNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBsaWtlbHkgYW4gaW1wb3J0YW50IGNvbm5lY3Rpb24gdG8gZm9sbG93IGZvciBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gdGhlIGh1Z2UgcGFnZXMgc3Vic3lzdGVtLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtZWNoYW5pY3Mgb2YgdGhhdCBpbnRlcmFjdGlvbi4gR2l2ZW4gdGhhdCwgbGV0IG1lIHN0YXJ0IGJ5IHF1aWNrbHkgY2hlY2tpbmcgdGhlIHVzYWdlIG9mIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIGl0c2VsZi4gS25vd2luZyB3aGVyZSAqaXQqIGlzIGNhbGxlZCBmcm9tIHdpbGwgaGVscCBtZSBidWlsZCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBmbG93IGFuZCBwdXJwb3NlIG9mIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gYW5kIGl0cyByZWxhdGlvbiB0byB0aGUgb3ZlcmFsbCBodWdlIHBhZ2VzIGFyY2hpdGVjdHVyZS4gSXQncyBhIGtleSBwYXJ0IG9mIHVudGFuZ2xpbmcgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyOTYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTo1ODo0OC4zMTg3MzYyNzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4NjYyODEyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTEzMjA9c3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX3ZtYShzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEzNTktI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0NPTlRJR19BTExPQylcXG5tbS9odWdldGxiLmM6MTM2MDpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9odWdldGxiLmMtMTM2MS1cXHRcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzc2LSNlbHNlIC8qICFDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRSB8fCAhQ09ORklHX0NPTlRJR19BTExPQyAqL1xcbm1tL2h1Z2V0bGIuYzoxMzc3OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxcbm1tL2h1Z2V0bGIuYy0xMzc4LVxcdFxcdFxcdFxcdFxcdCAgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS9odWdldGxiLmM9MTgzNj1zdGF0aWMgc3RydWN0IGZvbGlvICpvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xODQ2LVxcdGlmIChvcmRlcl9pc19naWdhbnRpYyhvcmRlcikpXFxubW0vaHVnZXRsYi5jOjE4NDc6XFx0XFx0Zm9saW8gPSBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5tYXNrKTtcXG5tbS9odWdldGxiLmMtMTg0OC1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjU4OjUwLjMwNTM3MzUxNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTU0MTEwMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYSBMYXJnZSBNZW1vcnkgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIGlzIGJlaW5nIGNhbGxlZCBzcGVjaWZpY2FsbHkgZnJvbSBgb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYC4gVGhhdCdzIGludGVyZXN0aW5nLiBJdCBtZWFucyB0aGVyZSdzIGEgcGFydGljdWxhciwgZm9jdXNlZCBwYXRod2F5IGZvciB0aGVzZSBcImdpZ2FudGljXCIgZm9saW8gYWxsb2NhdGlvbnMsIGFuZCBpdCdzIHRpZWQgdG8gZnJlc2ggaHVnZSBwYWdlIGFsbG9jYXRpb25zLiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byBkaWcgaW50byB0aGUgdXNhZ2Ugb2YgYG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AuIFVuZGVyc3RhbmRpbmcgKndoeSogYW5kICpob3cqIGl0J3MgYmVpbmcgY2FsbGVkIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcHVycG9zZSBvZiB0aGVzZSBsYXJnZSBhbGxvY2F0aW9ucyBhbmQgdGhlaXIgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gVGhpcyBzZWVtcyBsaWtlIGEgcHJvbWlzaW5nIGxlYWQgdG8gZm9sbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTQ2LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6NTg6NTMuMzAwNzg3NDM4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDE4Mzg2MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xNzkxPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2J1ZGR5X2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE4MzUtXFxubW0vaHVnZXRsYi5jOjE4MzY6c3RhdGljIHN0cnVjdCBmb2xpbyAqb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxubW0vaHVnZXRsYi5jLTE4MzctXFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsIG5vZGVtYXNrX3QgKm5tYXNrLFxcbi0tXFxubW0vaHVnZXRsYi5jPTE4NjM9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE4NjctXFxubW0vaHVnZXRsYi5jOjE4Njg6XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCwgbm1hc2ssIE5VTEwpO1xcbm1tL2h1Z2V0bGIuYy0xODY5LVxcdGlmIChmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xODk2PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX3Bvb2xfaHVnZV9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE5MDYtXFxubW0vaHVnZXRsYi5jOjE5MDc6XFx0XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5vZGUsXFxubW0vaHVnZXRsYi5jLTE5MDgtXFx0XFx0XFx0XFx0XFx0bm9kZXNfYWxsb3dlZCwgbm9kZV9hbGxvY19ub3JldHJ5KTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zMzcyPXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlc19vbmVub2RlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBuaWQpXFxuLS1cXG5tbS9odWdldGxiLmMtMzM4NS1cXG5tbS9odWdldGxiLmM6MzM4NjpcXHRcXHRcXHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLFxcbm1tL2h1Z2V0bGIuYy0zMzg3LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIE5VTEwpO1xcbi0tXFxubW0vaHVnZXRsYi5jLTMzOTEtXFx0XFx0XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmZvbGlvX2xpc3QpO1xcbm1tL2h1Z2V0bGIuYzozMzkyOlxcdFxcdFxcdFxcdGZvbGlvID0gb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsXFxubW0vaHVnZXRsYi5jLTMzOTMtXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSwgTlVMTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjU4OjU0Ljg0MjYzNjUzM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzY2ODU5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEh1Z2V0bGIgRm9saW8gQWxsb2NhdGlvbiBhbmQgQ3B1c2V0IENvbnN0cmFpbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGh1Z2V0bGIgZm9saW9zIGFyZSBhbGxvY2F0ZWQuIFNwZWNpZmljYWxseSwgYGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW9gIGFuZCBgYWxsb2NfcG9vbF9odWdlX2ZvbGlvYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMsIHdoaWNoIEkga25vdyBhcmUgZnVuZGFtZW50YWwgdG8gdGhlIEh1Z2VUTEIgYW5kIENNQSBsb2dpYyDigJMgZGVmaW5pdGVseSBjb3JlIGtlcm5lbCBzdHVmZi4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24uIEl0J3MgbWFraW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIGFsd2F5cyB3YXJyYW50cyBjbG9zZSBhdHRlbnRpb24uIFRoZSBjcml0aWNhbCBhc3BlY3QgaGVyZSBpcyBob3cgaXQgaW50ZXJhY3RzIHdpdGggY3B1c2V0cyB3aGVuIHRoZSBgbm9kZW1hc2tgIGlzIHNldCB0byBOVUxMLlxuXG5Ob3csIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gV2hhdCBhcmUgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucz8gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgaHVnZXRsYl9jbWEuY2AgaXMgb25seSBjb21waWxlZCB3aGVuIGJvdGggYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIGVuYWJsZWQuIFRpbWUgdG8gY2hlY2sgYG1tL01ha2VmaWxlYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBjb2RlIHBhdGggaXMgYWN0aXZlIGFuZCB0aGVyZWZvcmUgdGhlIGltcGFjdCBvZiB0aGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2NCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTo1ODo1OS4zNzkzMjUyOTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzE3NzExNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl9jbWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ9OTU9S2VybmVsIHBhcmFtZXRlcnNcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTIwNjMtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ6MjA2NDpcXHRodWdldGxiX2NtYT1cXHRbSFcsQ01BLEVBUkxZXSBUaGUgc2l6ZSBvZiBhIENNQSBhcmVhIHVzZWQgZm9yIGFsbG9jYXRpb25cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDY1LVxcdFxcdFxcdG9mIGdpZ2FudGljIGh1Z2VwYWdlcy4gT3IgdXNpbmcgbm9kZSBmb3JtYXQsIHRoZSBzaXplXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc3LVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0OjIwNzg6XFx0aHVnZXRsYl9jbWFfb25seT1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc5LVxcdFxcdFxcdFtIVyxDTUEsRUFSTFldIFdoZW4gYWxsb2NhdGluZyBuZXcgSHVnZVRMQiBwYWdlcywgb25seVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA4MS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dDoyMDgyOlxcdFxcdFxcdFRoaXMgb3B0aW9uIGRvZXMgbm90aGluZyBpZiBodWdldGxiX2NtYT0gaXMgbm90IGFsc29cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDgzLVxcdFxcdFxcdHNwZWNpZmllZC5cXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9jeGwvbGludXgvZWFybHktYm9vdC5yc3Q9MTI2PW9uIE5VTUEgbm9kZXMgdGhhdCBhcmUgbm90IG9ubGluZSBkdXJpbmcgZWFybHkgYm9vdC4gOjpcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvY3hsL2xpbnV4L2Vhcmx5LWJvb3QucnN0LTEyNy1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvY3hsL2xpbnV4L2Vhcmx5LWJvb3QucnN0OjEyODogIHZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZCkge1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9jeGwvbGludXgvZWFybHktYm9vdC5yc3QtMTI5LSAgICBpZiAoIW5vZGVfb25saW5lKG5pZCkpXFxuLS1cXG5NQUlOVEFJTkVSUz0xMjAyMD1GOlxcdG1tL2h1Z2V0bGJfY2dyb3VwLmNcXG5NQUlOVEFJTkVSUzoxMjAyMTpGOlxcdG1tL2h1Z2V0bGJfY21hLmNcXG5NQUlOVEFJTkVSUzoxMjAyMjpGOlxcdG1tL2h1Z2V0bGJfY21hLmhcXG5NQUlOVEFJTkVSUy0xMjAyMy1GOlxcdG1tL2h1Z2V0bGJfc3lzY3RsLmNcXG4tLVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0zOC0jaWZkZWYgQ09ORklHX0NNQVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYzozOTp1bnNpZ25lZCBpbnQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy00MC17XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYz0yMDE9YXJjaF9pbml0Y2FsbChodWdldGxicGFnZV9pbml0KTtcXG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYy0yMDItXFxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmM6MjAzOnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jLTIwNC17XFxuLS1cXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmM9NDQ4PWFyY2hfaW5pdGNhbGwoZ2lnYW50aWNfcGFnZXNfaW5pdCk7XFxuLS1cXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDUwLVxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYzo0NTE6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTQ1Mi17XFxuLS1cXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYz0yMjU9Ym9vbCBfX2luaXQgYXJjaF9odWdldGxiX3ZhbGlkX3NpemUodW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmMtMjM0LVxcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jOjIzNTp1bnNpZ25lZCBpbnQgX19pbml0IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYy0yMzYte1xcbi0tXFxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYz00Mj1hcmNoX2luaXRjYWxsKGdpZ2FudGljX3BhZ2VzX2luaXQpO1xcbi0tXFxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy00NS1cXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jOjQ2OnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmMtNDcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9Mjc2PXZvaWQgaHVnZXRsYl9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNzctXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6Mjc4OnVuc2lnbmVkIGludCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI3OS1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTEyOTg9c3RhdGljIGlubGluZSBzcGlubG9ja190ICpodWdlX3B0ZV9sb2NrKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMzA4LSNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0NNQSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMzA5OmV4dGVybiB2b2lkIF9faW5pdCBodWdldGxiX2NtYV9yZXNlcnZlKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEzMTAtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMzExOnN0YXRpYyBpbmxpbmUgX19pbml0IHZvaWQgaHVnZXRsYl9jbWFfcmVzZXJ2ZSh2b2lkKVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEzMTIte1xcbi0tXFxubW0vTWFrZWZpbGU9ODI9aWZkZWYgQ09ORklHX0NNQVxcbm1tL01ha2VmaWxlOjgzOm9iai0kKENPTkZJR19IVUdFVExCRlMpXFx0Kz0gaHVnZXRsYl9jbWEub1xcbm1tL01ha2VmaWxlLTg0LWVuZGlmXFxuLS1cXG5tbS9jbWEuaD04PXN0cnVjdCBjbWFfa29iamVjdCB7XFxuLS1cXG5tbS9jbWEuaC0xNC0gKiBNdWx0aS1yYW5nZSBzdXBwb3J0LiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgdGhlIHNpemUgb2YgdGhlIGFsbG9jYXRpb25cXG5tbS9jbWEuaDoxNTogKiBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgbGFyZ2VyIHRoYW4gdGhlIGFsaWdubWVudCAobGlrZSB3aXRoIGh1Z2V0bGJfY21hKSxcXG5tbS9jbWEuaC0xNi0gKiBhbmQgdGhlIHRvdGFsIGFtb3VudCBvZiBtZW1vcnkgcmVxdWVzdGVkLCB3aGlsZSBzbWFsbGVyIHRoYW4gdGhlIHRvdGFsXFxuLS1cXG5tbS9odWdldGxiLmMtNTAtI2luY2x1ZGUgXFxcImh1Z2V0bGJfdm1lbW1hcC5oXFxcIlxcbm1tL2h1Z2V0bGIuYzo1MTojaW5jbHVkZSBcXFwiaHVnZXRsYl9jbWEuaFxcXCJcXG5tbS9odWdldGxiLmMtNTItI2luY2x1ZGUgXFxcImh1Z2V0bGJfaW50ZXJuYWwuaFxcXCJcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xMzYwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEzNjQtXFxubW0vaHVnZXRsYi5jOjEzNjU6XFx0Zm9saW8gPSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5vZGVtYXNrKTtcXG5tbS9odWdldGxiLmMtMTM2Ni1cXHRpZiAoZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmMtMTM2OC1cXG5tbS9odWdldGxiLmM6MTM2OTpcXHRpZiAoaHVnZXRsYl9jbWFfZXhjbHVzaXZlX2FsbG9jKCkpXFxubW0vaHVnZXRsYi5jLTEzNzAtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9odWdldGxiLmM9MTQ1OD1zdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMTUwNy1cXHRWTV9CVUdfT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pO1xcbm1tL2h1Z2V0bGIuYzoxNTA4OlxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfY21hKGZvbGlvKSlcXG5tbS9odWdldGxiLmM6MTUwOTpcXHRcXHRodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTE1MTAtXFx0ZWxzZVxcbi0tXFxubW0vaHVnZXRsYi5jPTMwMjg9c3RhdGljIF9faW5pdCB2b2lkICphbGxvY19ib290bWVtKHN0cnVjdCBoc3RhdGUgKmgsIGludCBuaWQsIGJvb2wgbm9kZV9leGFjdClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMDMzLVxcdGlmIChodWdldGxiX2Vhcmx5X2NtYShoKSlcXG5tbS9odWdldGxiLmM6MzAzNDpcXHRcXHRtID0gaHVnZXRsYl9jbWFfYWxsb2NfYm9vdG1lbShoLCBcXHUwMDI2bGlzdG5vZGUsIG5vZGVfZXhhY3QpO1xcbm1tL2h1Z2V0bGIuYy0zMDM1LVxcdGVsc2Uge1xcbi0tXFxubW0vaHVnZXRsYi5jPTMxODA9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfYm9vdG1lbV9pbml0X21pZ3JhdGV0eXBlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9odWdldGxiLmMtMzE4Ny1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcGFnZXM7IGkgKz0gcGFnZWJsb2NrX25yX3BhZ2VzKSB7XFxubW0vaHVnZXRsYi5jOjMxODg6XFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9jbWEoZm9saW8pKVxcbm1tL2h1Z2V0bGIuYy0zMTg5LVxcdFxcdFxcdGluaXRfY21hX3BhZ2VibG9jayhmb2xpb19wYWdlKGZvbGlvLCBpKSk7XFxuLS1cXG5tbS9odWdldGxiLmM9MzI4MT1zdGF0aWMgdm9pZCBfX2luaXQgZ2F0aGVyX2Jvb3RtZW1fcHJlYWxsb2Nfbm9kZSh1bnNpZ25lZCBsb25nIG5pZClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMzI2LVxcdFxcdGlmIChodWdldGxiX2Jvb3RtZW1fcGFnZV9lYXJseWNtYShtKSlcXG5tbS9odWdldGxiLmM6MzMyNzpcXHRcXHRcXHRmb2xpb19zZXRfaHVnZXRsYl9jbWEoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0zMzI4LVxcbi0tXFxubW0vaHVnZXRsYi5jLTMzMzgtXFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjMzMzk6XFx0XFx0aWYgKCFmb2xpb190ZXN0X2h1Z2V0bGJfY21hKGZvbGlvKSlcXG5tbS9odWdldGxiLmMtMzM0MC1cXHRcXHRcXHRhZGp1c3RfbWFuYWdlZF9wYWdlX2NvdW50KHBhZ2UsIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCkpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTM1NjU9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfaHN0YXRlX2FsbG9jX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgpXFxuLS1cXG5tbS9odWdldGxiLmMtMzU3Mi1cXHQgKi9cXG5tbS9odWdldGxiLmM6MzU3MzpcXHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljKGgpIFxcdTAwMjZcXHUwMDI2IGh1Z2V0bGJfY21hX3RvdGFsX3NpemUoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL2h1Z2V0bGIuYy0zNTc0LVxcdCAgICAhaHVnZXRsYl9lYXJseV9jbWEoaCkpIHtcXG5tbS9odWdldGxiLmM6MzU3NTpcXHRcXHRwcl93YXJuX29uY2UoXFxcIkh1Z2VUTEI6IGh1Z2V0bGJfY21hIGlzIGVuYWJsZWQsIHNraXAgYm9vdCB0aW1lIGFsbG9jYXRpb25cXFxcblxcXCIpO1xcbm1tL2h1Z2V0bGIuYy0zNTc2LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zNTk1PXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2luaXRfaHN0YXRlcyh2b2lkKVxcbi0tXFxubW0vaHVnZXRsYi5jLTM2MjItXFx0XFx0XFx0Y29udGludWU7XFxubW0vaHVnZXRsYi5jOjM2MjM6XFx0XFx0aWYgKGh1Z2V0bGJfY21hX3RvdGFsX3NpemUoKSBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VvcmRlciBcXHUwMDNjPSBIVUdFVExCX1BBR0VfT1JERVIpXFxubW0vaHVnZXRsYi5jLTM2MjQtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9odWdldGxiLmM9MzkxOT1zdGF0aWMgbG9uZyBkZW1vdGVfZnJlZV9odWdldGxiX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpzcmMsIHN0cnVjdCBoc3RhdGUgKmRzdCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zOTQ2LVxcbm1tL2h1Z2V0bGIuYzozOTQ3OlxcdFxcdGNtYSA9IGZvbGlvX3Rlc3RfaHVnZXRsYl9jbWEoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0zOTQ4LVxcbi0tXFxubW0vaHVnZXRsYi5jLTM5NjUtXFx0XFx0XFx0aWYgKGNtYSlcXG5tbS9odWdldGxiLmM6Mzk2NjpcXHRcXHRcXHRcXHRmb2xpb19zZXRfaHVnZXRsYl9jbWEobmV3X2ZvbGlvKTtcXG5tbS9odWdldGxiLmMtMzk2Ny1cXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2bmV3X2ZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZkc3RfbGlzdCk7XFxuLS1cXG5tbS9odWdldGxiLmM9NDIyNz1zdGF0aWMgX19pbml0IHZvaWQgaHVnZXRsYl9wYXJzZV9wYXJhbXModm9pZClcXG4tLVxcbm1tL2h1Z2V0bGIuYy00MjM3LVxcbm1tL2h1Z2V0bGIuYzo0MjM4OlxcdGh1Z2V0bGJfY21hX3ZhbGlkYXRlX3BhcmFtcygpO1xcbm1tL2h1Z2V0bGIuYy00MjM5LX1cXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMTMtI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxubW0vaHVnZXRsYl9jbWEuYzoxNDojaW5jbHVkZSBcXFwiaHVnZXRsYl9jbWEuaFxcXCJcXG5tbS9odWdldGxiX2NtYS5jLTE1LVxcbm1tL2h1Z2V0bGJfY21hLmMtMTYtXFxubW0vaHVnZXRsYl9jbWEuYzoxNzpzdGF0aWMgc3RydWN0IGNtYSAqaHVnZXRsYl9jbWFbTUFYX05VTU5PREVTXSBfX3JvX2FmdGVyX2luaXQ7XFxubW0vaHVnZXRsYl9jbWEuYzoxODpzdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV9zaXplX2luX25vZGVbTUFYX05VTU5PREVTXSBfX2luaXRkYXRhO1xcbm1tL2h1Z2V0bGJfY21hLmM6MTk6c3RhdGljIGJvb2wgaHVnZXRsYl9jbWFfb25seSBfX3JvX2FmdGVyX2luaXQ7XFxubW0vaHVnZXRsYl9jbWEuYzoyMDpzdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV9zaXplIF9fcm9fYWZ0ZXJfaW5pdDtcXG5tbS9odWdldGxiX2NtYS5jLTIxLVxcbm1tL2h1Z2V0bGJfY21hLmM6MjI6dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2V0bGJfY21hLmMtMjMte1xcbm1tL2h1Z2V0bGJfY21hLmM6MjQ6XFx0V0FSTl9PTl9PTkNFKCFjbWFfcmVsZWFzZV9mcm96ZW4oaHVnZXRsYl9jbWFbZm9saW9fbmlkKGZvbGlvKV0sXFxubW0vaHVnZXRsYl9jbWEuYy0yNS1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpKTtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjctXFxubW0vaHVnZXRsYl9jbWEuYzoyODpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbm1tL2h1Z2V0bGJfY21hLmMtMjktXFx0XFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTM2LVxcbm1tL2h1Z2V0bGJfY21hLmM6Mzc6XFx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxcbm1tL2h1Z2V0bGJfY21hLmMtMzgtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTQ3LVxcbm1tL2h1Z2V0bGJfY21hLmM6NDg6XFx0aWYgKGh1Z2V0bGJfY21hW25pZF0gXFx1MDAyNlxcdTAwMjYgbm9kZV9pc3NldChuaWQsICpubWFzaykpXFxubW0vaHVnZXRsYl9jbWEuYzo0OTpcXHRcXHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7XFxubW0vaHVnZXRsYl9jbWEuYy01MC1cXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtNTItXFx0XFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsICpubWFzaykge1xcbm1tL2h1Z2V0bGJfY21hLmM6NTM6XFx0XFx0XFx0aWYgKG5vZGUgPT0gbmlkIHx8ICFodWdldGxiX2NtYVtub2RlXSlcXG5tbS9odWdldGxiX2NtYS5jLTU0LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2h1Z2V0bGJfY21hLmMtNTUtXFxubW0vaHVnZXRsYl9jbWEuYzo1NjpcXHRcXHRcXHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtub2RlXSwgb3JkZXIpO1xcbm1tL2h1Z2V0bGJfY21hLmMtNTctXFx0XFx0XFx0aWYgKHBhZ2UpXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTY5LVxcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG5tbS9odWdldGxiX2NtYS5jOjcwOlxcdGZvbGlvX3NldF9odWdldGxiX2NtYShmb2xpbyk7XFxubW0vaHVnZXRsYl9jbWEuYy03MS1cXHRyZXR1cm4gZm9saW87XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTc0PXN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqIF9faW5pdFxcbm1tL2h1Z2V0bGJfY21hLmM6NzU6aHVnZXRsYl9jbWFfYWxsb2NfYm9vdG1lbShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgKm5pZCwgYm9vbCBub2RlX2V4YWN0KVxcbm1tL2h1Z2V0bGJfY21hLmMtNzYte1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy04MC1cXG5tbS9odWdldGxiX2NtYS5jOjgxOlxcdGNtYSA9IGh1Z2V0bGJfY21hWypuaWRdO1xcbm1tL2h1Z2V0bGJfY21hLmMtODItXFx0bSA9IGNtYV9yZXNlcnZlX2Vhcmx5KGNtYSwgaHVnZV9wYWdlX3NpemUoaCkpO1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy04Ny1cXHRcXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgaHVnZXRsYl9ib290bWVtX25vZGVzKSB7XFxubW0vaHVnZXRsYl9jbWEuYzo4ODpcXHRcXHRcXHRjbWEgPSBodWdldGxiX2NtYVtub2RlXTtcXG5tbS9odWdldGxiX2NtYS5jLTg5LVxcdFxcdFxcdGlmICghY21hIHx8IG5vZGUgPT0gKm5pZClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMTA2LVxcbm1tL2h1Z2V0bGJfY21hLmM6MTA3OnN0YXRpYyBpbnQgX19pbml0IGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWEoY2hhciAqcClcXG5tbS9odWdldGxiX2NtYS5jLTEwOC17XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTEyMy1cXHRcXHRcXHR0bXAgPSBtZW1wYXJzZShzLCBcXHUwMDI2cyk7XFxubW0vaHVnZXRsYl9jbWEuYzoxMjQ6XFx0XFx0XFx0aHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW25pZF0gPSB0bXA7XFxubW0vaHVnZXRsYl9jbWEuYzoxMjU6XFx0XFx0XFx0aHVnZXRsYl9jbWFfc2l6ZSArPSB0bXA7XFxubW0vaHVnZXRsYl9jbWEuYy0xMjYtXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTEzNS1cXHRcXHR9IGVsc2Uge1xcbm1tL2h1Z2V0bGJfY21hLmM6MTM2OlxcdFxcdFxcdGh1Z2V0bGJfY21hX3NpemUgPSBtZW1wYXJzZShwLCBcXHUwMDI2cCk7XFxubW0vaHVnZXRsYl9jbWEuYy0xMzctXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTE0My1cXG5tbS9odWdldGxiX2NtYS5jOjE0NDplYXJseV9wYXJhbShcXFwiaHVnZXRsYl9jbWFcXFwiLCBjbWRsaW5lX3BhcnNlX2h1Z2V0bGJfY21hKTtcXG5tbS9odWdldGxiX2NtYS5jLTE0NS1cXG5tbS9odWdldGxiX2NtYS5jOjE0NjpzdGF0aWMgaW50IF9faW5pdCBjbWRsaW5lX3BhcnNlX2h1Z2V0bGJfY21hX29ubHkoY2hhciAqcClcXG5tbS9odWdldGxiX2NtYS5jLTE0Ny17XFxubW0vaHVnZXRsYl9jbWEuYzoxNDg6XFx0cmV0dXJuIGtzdHJ0b2Jvb2wocCwgXFx1MDAyNmh1Z2V0bGJfY21hX29ubHkpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMTQ5LX1cXG5tbS9odWdldGxiX2NtYS5jLTE1MC1cXG5tbS9odWdldGxiX2NtYS5jOjE1MTplYXJseV9wYXJhbShcXFwiaHVnZXRsYl9jbWFfb25seVxcXCIsIGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWFfb25seSk7XFxubW0vaHVnZXRsYl9jbWEuYy0xNTItXFxubW0vaHVnZXRsYl9jbWEuYzoxNTM6dW5zaWduZWQgaW50IF9fd2VhayBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXFxubW0vaHVnZXRsYl9jbWEuYy0xNTQte1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0xNTctXFxubW0vaHVnZXRsYl9jbWEuYzoxNTg6dm9pZCBfX2luaXQgaHVnZXRsYl9jbWFfcmVzZXJ2ZSh2b2lkKVxcbm1tL2h1Z2V0bGJfY21hLmMtMTU5LXtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMTYzLVxcbm1tL2h1Z2V0bGJfY21hLmM6MTY0OlxcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcXG5tbS9odWdldGxiX2NtYS5jLTE2NS1cXHRcXHRyZXR1cm47XFxubW0vaHVnZXRsYl9jbWEuYy0xNjYtXFxubW0vaHVnZXRsYl9jbWEuYzoxNjc6XFx0b3JkZXIgPSBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKCk7XFxubW0vaHVnZXRsYl9jbWEuYy0xNjgtXFx0aWYgKCFvcmRlcikge1xcbm1tL2h1Z2V0bGJfY21hLmM6MTY5OlxcdFxcdHByX3dhcm4oXFxcImh1Z2V0bGJfY21hOiB0aGUgb3B0aW9uIGlzbid0IHN1cHBvcnRlZCBieSBjdXJyZW50IGFyY2hcXFxcblxcXCIpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMTcwLVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMTg0LVxcdGZvciAobmlkID0gMDsgbmlkIFxcdTAwM2MgTUFYX05VTU5PREVTOyBuaWQrKykge1xcbm1tL2h1Z2V0bGJfY21hLmM6MTg1OlxcdFxcdHNpemUgPSBodWdldGxiX2NtYV9zaXplX2luX25vZGVbbmlkXTtcXG5tbS9odWdldGxiX2NtYS5jLTE4Ni1cXHRcXHRpZiAoc2l6ZSA9PSAwKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0xODktXFx0XFx0aWYgKCFub2RlX2lzc2V0KG5pZCwgaHVnZXRsYl9ib290bWVtX25vZGVzKSkge1xcbm1tL2h1Z2V0bGJfY21hLmM6MTkwOlxcdFxcdFxcdHByX3dhcm4oXFxcImh1Z2V0bGJfY21hOiBpbnZhbGlkIG5vZGUgJWQgc3BlY2lmaWVkXFxcXG5cXFwiLCBuaWQpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMTkxLVxcdFxcdH0gZWxzZSBpZiAoIUlTX0FMSUdORUQoc2l6ZSwgZ2lnYW50aWNfcGFnZV9zaXplKSkge1xcbm1tL2h1Z2V0bGJfY21hLmM6MTkyOlxcdFxcdFxcdHByX3dhcm4oXFxcImh1Z2V0bGJfY21hOiBjbWEgYXJlYSBvZiBub2RlICVkIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAlbHUgTWlCXFxcXG5cXFwiLFxcbm1tL2h1Z2V0bGJfY21hLmMtMTkzLVxcdFxcdFxcdFxcdG5pZCwgZ2lnYW50aWNfcGFnZV9zaXplIC8gU1pfMU0pO1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0xOTgtXFxubW0vaHVnZXRsYl9jbWEuYzoxOTk6XFx0XFx0aHVnZXRsYl9jbWFfc2l6ZSAtPSBzaXplO1xcbm1tL2h1Z2V0bGJfY21hLmM6MjAwOlxcdFxcdGh1Z2V0bGJfY21hX3NpemVfaW5fbm9kZVtuaWRdID0gMDtcXG5tbS9odWdldGxiX2NtYS5jLTIwMS1cXHR9XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTIwMy1cXHQvKiBWYWxpZGF0ZSB0aGUgQ01BIHNpemUgYWdhaW4gaW4gY2FzZSBzb21lIGludmFsaWQgbm9kZXMgc3BlY2lmaWVkLiAqL1xcbm1tL2h1Z2V0bGJfY21hLmM6MjA0OlxcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcXG5tbS9odWdldGxiX2NtYS5jLTIwNS1cXHRcXHRyZXR1cm47XFxubW0vaHVnZXRsYl9jbWEuYy0yMDYtXFxubW0vaHVnZXRsYl9jbWEuYzoyMDc6XFx0aWYgKCFJU19BTElHTkVEKGh1Z2V0bGJfY21hX3NpemUsIGdpZ2FudGljX3BhZ2Vfc2l6ZSkpIHtcXG5tbS9odWdldGxiX2NtYS5jOjIwODpcXHRcXHRwcl93YXJuKFxcXCJodWdldGxiX2NtYTogY21hIGFyZWEgbXVzdCBiZSBhIG11bHRpcGxlIG9mICVsdSBNaUJcXFxcblxcXCIsXFxubW0vaHVnZXRsYl9jbWEuYy0yMDktXFx0XFx0XFx0Z2lnYW50aWNfcGFnZV9zaXplIC8gU1pfMU0pO1xcbm1tL2h1Z2V0bGJfY21hLmM6MjEwOlxcdFxcdGh1Z2V0bGJfY21hX3NpemUgPSAwO1xcbm1tL2h1Z2V0bGJfY21hLmMtMjExLVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjE4LVxcdFxcdCAqL1xcbm1tL2h1Z2V0bGJfY21hLmM6MjE5OlxcdFxcdHBlcl9ub2RlID0gRElWX1JPVU5EX1VQKGh1Z2V0bGJfY21hX3NpemUsXFxubW0vaHVnZXRsYl9jbWEuYy0yMjAtXFx0XFx0XFx0XFx0XFx0bm9kZXNfd2VpZ2h0KGh1Z2V0bGJfYm9vdG1lbV9ub2RlcykpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMjIxLVxcdFxcdHBlcl9ub2RlID0gcm91bmRfdXAocGVyX25vZGUsIGdpZ2FudGljX3BhZ2Vfc2l6ZSk7XFxubW0vaHVnZXRsYl9jbWEuYzoyMjI6XFx0XFx0cHJfaW5mbyhcXFwiaHVnZXRsYl9jbWE6IHJlc2VydmUgJWx1IE1pQiwgdXAgdG8gJWx1IE1pQiBwZXIgbm9kZVxcXFxuXFxcIixcXG5tbS9odWdldGxiX2NtYS5jOjIyMzpcXHRcXHRcXHRodWdldGxiX2NtYV9zaXplIC8gU1pfMU0sIHBlcl9ub2RlIC8gU1pfMU0pO1xcbm1tL2h1Z2V0bGJfY21hLmMtMjI0LVxcdH1cXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjMxLVxcdFxcdGlmIChub2RlX3NwZWNpZmljX2NtYV9hbGxvYykge1xcbm1tL2h1Z2V0bGJfY21hLmM6MjMyOlxcdFxcdFxcdGlmIChodWdldGxiX2NtYV9zaXplX2luX25vZGVbbmlkXSA9PSAwKVxcbm1tL2h1Z2V0bGJfY21hLmMtMjMzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2h1Z2V0bGJfY21hLmMtMjM0LVxcbm1tL2h1Z2V0bGJfY21hLmM6MjM1OlxcdFxcdFxcdHNpemUgPSBodWdldGxiX2NtYV9zaXplX2luX25vZGVbbmlkXTtcXG5tbS9odWdldGxiX2NtYS5jLTIzNi1cXHRcXHR9IGVsc2Uge1xcbm1tL2h1Z2V0bGJfY21hLmM6MjM3OlxcdFxcdFxcdHNpemUgPSBtaW4ocGVyX25vZGUsIGh1Z2V0bGJfY21hX3NpemUgLSByZXNlcnZlZCk7XFxubW0vaHVnZXRsYl9jbWEuYy0yMzgtXFx0XFx0fVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0yNDctXFx0XFx0XFx0XFx0XFx0SFVHRVRMQl9QQUdFX09SREVSLCBuYW1lLFxcbm1tL2h1Z2V0bGJfY21hLmM6MjQ4OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZodWdldGxiX2NtYVtuaWRdLCBuaWQpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMjQ5LVxcdFxcdGlmIChyZXMpIHtcXG5tbS9odWdldGxiX2NtYS5jOjI1MDpcXHRcXHRcXHRwcl93YXJuKFxcXCJodWdldGxiX2NtYTogcmVzZXJ2YXRpb24gZmFpbGVkOiBlcnIgJWQsIG5vZGUgJWRcXFwiLFxcbm1tL2h1Z2V0bGJfY21hLmMtMjUxLVxcdFxcdFxcdFxcdHJlcywgbmlkKTtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjU1LVxcdFxcdHJlc2VydmVkICs9IHNpemU7XFxubW0vaHVnZXRsYl9jbWEuYzoyNTY6XFx0XFx0cHJfaW5mbyhcXFwiaHVnZXRsYl9jbWE6IHJlc2VydmVkICVsdSBNaUIgb24gbm9kZSAlZFxcXFxuXFxcIixcXG5tbS9odWdldGxiX2NtYS5jLTI1Ny1cXHRcXHRcXHRzaXplIC8gU1pfMU0sIG5pZCk7XFxubW0vaHVnZXRsYl9jbWEuYy0yNTgtXFxubW0vaHVnZXRsYl9jbWEuYzoyNTk6XFx0XFx0aWYgKHJlc2VydmVkIFxcdTAwM2U9IGh1Z2V0bGJfY21hX3NpemUpXFxubW0vaHVnZXRsYl9jbWEuYy0yNjAtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTI2NC1cXHRcXHQvKlxcbm1tL2h1Z2V0bGJfY21hLmM6MjY1OlxcdFxcdCAqIGh1Z2V0bGJfY21hX3NpemUgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYWxsb2NhdGlvbnMgZnJvbVxcbm1tL2h1Z2V0bGJfY21hLmMtMjY2LVxcdFxcdCAqIGNtYSBhcmUgcG9zc2libGUuICBTZXQgdG8gemVybyBpZiBubyBjbWEgcmVnaW9ucyBhcmUgc2V0IHVwLlxcbm1tL2h1Z2V0bGJfY21hLmMtMjY3LVxcdFxcdCAqL1xcbm1tL2h1Z2V0bGJfY21hLmM6MjY4OlxcdFxcdGh1Z2V0bGJfY21hX3NpemUgPSAwO1xcbm1tL2h1Z2V0bGJfY21hLmMtMjY5LX1cXG5tbS9odWdldGxiX2NtYS5jLTI3MC1cXG5tbS9odWdldGxiX2NtYS5jOjI3MTpib29sIGh1Z2V0bGJfY21hX2V4Y2x1c2l2ZV9hbGxvYyh2b2lkKVxcbm1tL2h1Z2V0bGJfY21hLmMtMjcyLXtcXG5tbS9odWdldGxiX2NtYS5jOjI3MzpcXHRyZXR1cm4gaHVnZXRsYl9jbWFfb25seTtcXG5tbS9odWdldGxiX2NtYS5jLTI3NC19XFxubW0vaHVnZXRsYl9jbWEuYy0yNzUtXFxubW0vaHVnZXRsYl9jbWEuYzoyNzY6dW5zaWduZWQgbG9uZyBfX2luaXQgaHVnZXRsYl9jbWFfdG90YWxfc2l6ZSh2b2lkKVxcbm1tL2h1Z2V0bGJfY21hLmMtMjc3LXtcXG5tbS9odWdldGxiX2NtYS5jOjI3ODpcXHRyZXR1cm4gaHVnZXRsYl9jbWFfc2l6ZTtcXG5tbS9odWdldGxiX2NtYS5jLTI3OS19XFxubW0vaHVnZXRsYl9jbWEuYy0yODAtXFxubW0vaHVnZXRsYl9jbWEuYzoyODE6dm9pZCBfX2luaXQgaHVnZXRsYl9jbWFfdmFsaWRhdGVfcGFyYW1zKHZvaWQpXFxubW0vaHVnZXRsYl9jbWEuYy0yODIte1xcbm1tL2h1Z2V0bGJfY21hLmM6MjgzOlxcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcXG5tbS9odWdldGxiX2NtYS5jOjI4NDpcXHRcXHRodWdldGxiX2NtYV9vbmx5ID0gZmFsc2U7XFxubW0vaHVnZXRsYl9jbWEuYy0yODUtfVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0yODc9Ym9vbCBfX2luaXQgaHVnZXRsYl9lYXJseV9jbWEoc3RydWN0IGhzdGF0ZSAqaClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjkxLVxcbm1tL2h1Z2V0bGJfY21hLmM6MjkyOlxcdHJldHVybiBoc3RhdGVfaXNfZ2lnYW50aWMoaCkgXFx1MDAyNlxcdTAwMjYgaHVnZXRsYl9jbWFfb25seTtcXG5tbS9odWdldGxiX2NtYS5jLTI5My19XFxuLS1cXG5tbS9odWdldGxiX2NtYS5oLTUtI2lmZGVmIENPTkZJR19DTUFcXG5tbS9odWdldGxiX2NtYS5oOjY6dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9odWdldGxiX2NtYS5oOjc6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9odWdldGxiX2NtYS5oLTgtXFx0XFx0XFx0XFx0ICAgICAgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spO1xcbm1tL2h1Z2V0bGJfY21hLmg6OTpzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgKmh1Z2V0bGJfY21hX2FsbG9jX2Jvb3RtZW0oc3RydWN0IGhzdGF0ZSAqaCwgaW50ICpuaWQsXFxubW0vaHVnZXRsYl9jbWEuaC0xMC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgYm9vbCBub2RlX2V4YWN0KTtcXG5tbS9odWdldGxiX2NtYS5oOjExOmJvb2wgaHVnZXRsYl9jbWFfZXhjbHVzaXZlX2FsbG9jKHZvaWQpO1xcbm1tL2h1Z2V0bGJfY21hLmg6MTI6dW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV90b3RhbF9zaXplKHZvaWQpO1xcbm1tL2h1Z2V0bGJfY21hLmg6MTM6dm9pZCBodWdldGxiX2NtYV92YWxpZGF0ZV9wYXJhbXModm9pZCk7XFxubW0vaHVnZXRsYl9jbWEuaC0xNC1ib29sIGh1Z2V0bGJfZWFybHlfY21hKHN0cnVjdCBoc3RhdGUgKmgpO1xcbm1tL2h1Z2V0bGJfY21hLmgtMTUtI2Vsc2VcXG5tbS9odWdldGxiX2NtYS5oOjE2OnN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2V0bGJfY21hLmgtMTcte1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuaC0xOS1cXG5tbS9odWdldGxiX2NtYS5oOjIwOnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLFxcbm1tL2h1Z2V0bGJfY21hLmgtMjEtXFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssXFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS9odWdldGxiX2NtYS5oPTI2PXN0YXRpYyBpbmxpbmVcXG5tbS9odWdldGxiX2NtYS5oOjI3OnN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqaHVnZXRsYl9jbWFfYWxsb2NfYm9vdG1lbShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgKm5pZCxcXG5tbS9odWdldGxiX2NtYS5oLTI4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBib29sIG5vZGVfZXhhY3QpXFxuLS1cXG5tbS9odWdldGxiX2NtYS5oLTMyLVxcbm1tL2h1Z2V0bGJfY21hLmg6MzM6c3RhdGljIGlubGluZSBib29sIGh1Z2V0bGJfY21hX2V4Y2x1c2l2ZV9hbGxvYyh2b2lkKVxcbm1tL2h1Z2V0bGJfY21hLmgtMzQte1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuaC0zNy1cXG5tbS9odWdldGxiX2NtYS5oOjM4OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV90b3RhbF9zaXplKHZvaWQpXFxubW0vaHVnZXRsYl9jbWEuaC0zOS17XFxuLS1cXG5tbS9odWdldGxiX2NtYS5oLTQyLVxcbm1tL2h1Z2V0bGJfY21hLmg6NDM6c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY21hX3ZhbGlkYXRlX3BhcmFtcyh2b2lkKVxcbm1tL2h1Z2V0bGJfY21hLmgtNDQte1xcbi0tXFxubW0vbW1faW5pdC5jPTI2OTU9dm9pZCBfX2luaXQgbW1fY29yZV9pbml0X2Vhcmx5KHZvaWQpXFxubW0vbW1faW5pdC5jLTI2OTYte1xcbm1tL21tX2luaXQuYzoyNjk3OlxcdGh1Z2V0bGJfY21hX3Jlc2VydmUoKTtcXG5tbS9tbV9pbml0LmMtMjY5OC1cXHRodWdldGxiX2Jvb3RtZW1fYWxsb2MoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6NTk6MDAuOTUxMTAyODk2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Nzg3MDMzODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29tcGlsYXRpb24gUmVxdWlyZW1lbnRzIGZvciBgaHVnZXRsYl9jbWEuY2AqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBgaHVnZXRsYl9jbWEuY2AgZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpdCB3YXMgc2ltcGx5IGEgbWF0dGVyIG9mIGBDT05GSUdfQ01BYCBhbmQgYENPTkZJR19IVUdFVExCRlNgIGJvdGggYmVpbmcgZW5hYmxlZC4gQnV0IGxldCdzIHZlcmlmeS4gUmlnaHQsIGxldCBtZSBsb29rIGF0IHRoZSBgbW0vTWFrZWZpbGVgIGFuZCBjb25maXJtLiBBaCwgdGhlcmUgaXQgaXM6XG5cbmBgYFxuaWZkZWYgQ09ORklHX0NNQVxub2JqLSQoQ09ORklHX0hVR0VUTEJGUykgKz0gaHVnZXRsYl9jbWEub1xuZW5kaWZcbmBgYFxuXG5ZZXAsIGFzIEkgc3VzcGVjdGVkLiBXZSBkZWZpbml0ZWx5IG5lZWQgKmJvdGgqIGBDT05GSUdfQ01BYCBhbmQgYENPTkZJR19IVUdFVExCRlNgIHRvIGJlIGVuYWJsZWQgZm9yIGBodWdldGxiX2NtYS5vYCB0byBiZSBidWlsdC4gTWFrZXMgcGVyZmVjdCBzZW5zZS5cblxuQW5kIG5vdyBJIHdhbnQgdG8gdGVzdCBjcHVzZXQgaW50ZXJhY3Rpb25zLiBJJ20gZ29pbmcgdG8gbmVlZCBgQ09ORklHX0NQVVNFVFNgIGVuYWJsZWQgZm9yIHRoYXQuIEkgc2hvdWxkIGNvbmZpcm0gd2hlcmUgSSBjYW4gZmluZCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYXNzb2NpYXRlZCB3aXRoIENQVSBzZXQgb3BlcmF0aW9ucy4gSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBmb3IgYHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luYCBpbiBgaW5jbHVkZS9saW51eC9jcHVzZXQuaGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzcxLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjU5OjA0LjkyOTgwOTU5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMyMzA5MDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlYWRfbWVtc19hbGxvd2VkX2JlZ2luXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvY3B1c2V0Lmg9MjE9ZXh0ZXJuIGJvb2wgbG9ja2RlcF9pc19jcHVzZXRfaGVsZCh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjYtICogU3RhdGljIGJyYW5jaCByZXdyaXRlcyBjYW4gaGFwcGVuIGluIGFuIGFyYml0cmFyeSBvcmRlciBmb3IgYSBnaXZlblxcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6Mjc6ICoga2V5LiBJbiBjb2RlIHBhdGhzIHdoZXJlIHdlIG5lZWQgdG8gbG9vcCB3aXRoIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCkgYW5kXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yOC0gKiByZWFkX21lbXNfYWxsb3dlZF9yZXRyeSgpIHRvIGdldCBhIGNvbnNpc3RlbnQgdmlldyBvZiBtZW1zX2FsbG93ZWQsIHdlIG5lZWRcXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg9MTM1PWV4dGVybiB2b2lkIGNwdXNldF9yZXNldF9zY2hlZF9kb21haW5zKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xMzctLypcXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjEzODogKiByZWFkX21lbXNfYWxsb3dlZF9iZWdpbiBpcyByZXF1aXJlZCB3aGVuIG1ha2luZyBkZWNpc2lvbnMgaW52b2x2aW5nXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xMzktICogbWVtc19hbGxvd2VkIHN1Y2ggYXMgZHVyaW5nIHBhZ2UgYWxsb2NhdGlvbi4gbWVtc19hbGxvd2VkIGNhbiBiZSB1cGRhdGVkIGluXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNDAtICogcGFyYWxsZWwgYW5kIGRlcGVuZGluZyBvbiB0aGUgbmV3IHZhbHVlIGFuIG9wZXJhdGlvbiBjYW4gZmFpbCBwb3RlbnRpYWxseVxcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MTQxOiAqIGNhdXNpbmcgcHJvY2VzcyBmYWlsdXJlLiBBIHJldHJ5IGxvb3Agd2l0aCByZWFkX21lbXNfYWxsb3dlZF9iZWdpbiBhbmRcXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTE0Mi0gKiByZWFkX21lbXNfYWxsb3dlZF9yZXRyeSBwcmV2ZW50cyB0aGVzZSBhcnRpZmljaWFsIGZhaWx1cmVzLlxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTQzLSAqL1xcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MTQ0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKHZvaWQpXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNDUte1xcbi0tXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNTMtICogSWYgdGhpcyByZXR1cm5zIHRydWUsIHRoZSBvcGVyYXRpb24gdGhhdCB0b29rIHBsYWNlIGFmdGVyXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoxNTQ6ICogcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4gbWF5IGhhdmUgZmFpbGVkIGFydGlmaWNpYWxseSBkdWUgdG8gYSBjb25jdXJyZW50XFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNTUtICogdXBkYXRlIG9mIG1lbXNfYWxsb3dlZC4gSXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byByZXRyeSB0aGUgb3BlcmF0aW9uIGlmXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oPTI4OD1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X21lbXNfYWxsb3dlZChub2RlbWFza190IG5vZGVtYXNrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yOTEtXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoyOTI6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4odm9pZClcXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTI5My17XFxuLS1cXG5tbS9maWxlbWFwLmM9OTk5PXN0cnVjdCBmb2xpbyAqZmlsZW1hcF9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9maWxlbWFwLmMtMTAxMS1cXHRcXHRkbyB7XFxubW0vZmlsZW1hcC5jOjEwMTI6XFx0XFx0XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9maWxlbWFwLmMtMTAxMy1cXHRcXHRcXHRuID0gY3B1c2V0X21lbV9zcHJlYWRfbm9kZSgpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTEyNzU9c3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEyOTAtcmV0cnlfY3B1c2V0Olxcbm1tL2h1Z2V0bGIuYzoxMjkxOlxcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XFxubW0vaHVnZXRsYi5jLTEyOTItXFx0Zm9yX2VhY2hfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCB6b25lbGlzdCwgZ2ZwX3pvbmUoZ2ZwX21hc2spLCBubWFzaykge1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0yOD1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy00MS1cXHRpZiAoIW5vZGVtYXNrKSB7XFxubW0vaHVnZXRsYl9jbWEuYzo0MjpcXHRcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbm1tL2h1Z2V0bGJfY21hLmMtNDMtXFx0XFx0bm1hc2sgPSBcXHUwMDI2Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjEwMD1zdGF0aWMgdW5zaWduZWQgaW50IHdlaWdodGVkX2ludGVybGVhdmVfbm9kZXMoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5KVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjEwNi1cXHQvKiB0byBwcmV2ZW50IG1pc2NvdW50IHVzZSB0c2stXFx1MDAzZW1lbXNfYWxsb3dlZF9zZXEgdG8gZGV0ZWN0IHJlYmluZCAqL1xcbm1tL21lbXBvbGljeS5jOjIxMDc6XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9tZW1wb2xpY3kuYy0yMTA4LVxcdG5vZGUgPSBjdXJyZW50LVxcdTAwM2VpbF9wcmV2O1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjEyMz1zdGF0aWMgdW5zaWduZWQgaW50IGludGVybGVhdmVfbm9kZXMoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5KVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjEyOS1cXHRkbyB7XFxubW0vbWVtcG9saWN5LmM6MjEzMDpcXHRcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbm1tL21lbXBvbGljeS5jLTIxMzEtXFx0XFx0bmlkID0gbmV4dF9ub2RlX2luKGN1cnJlbnQtXFx1MDAzZWlsX3ByZXYsIHBvbGljeS1cXHUwMDNlbm9kZXMpO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjYzMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjY1NS1cXHRkbyB7XFxubW0vbWVtcG9saWN5LmM6MjY1NjpcXHRcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbm1tL21lbXBvbGljeS5jLTI2NTctXFx0XFx0bm5vZGVzID0gcmVhZF9vbmNlX3BvbGljeV9ub2RlbWFzayhwb2wsIFxcdTAwMjZub2Rlcyk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDcyNT1fX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDc2NC1cXHRjb21wYWN0X3ByaW9yaXR5ID0gREVGX0NPTVBBQ1RfUFJJT1JJVFk7XFxubW0vcGFnZV9hbGxvYy5jOjQ3NjU6XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9wYWdlX2FsbG9jLmMtNDc2Ni1cXHR6b25lbGlzdF9pdGVyX2Nvb2tpZSA9IHpvbmVsaXN0X2l0ZXJfYmVnaW4oKTtcXG4tLVxcbm1tL3Nob3dfbWVtLmM9MTE5PXN0YXRpYyBib29sIHNob3dfbWVtX25vZGVfc2tpcCh1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vc2hvd19tZW0uYy0xMjUtXFx0ICogbm8gbm9kZSBtYXNrIC0gYWthIGltcGxpY2l0IG1lbW9yeSBudW1hIHBvbGljeS4gRG8gbm90IGJvdGhlciB3aXRoXFxubW0vc2hvd19tZW0uYzoxMjY6XFx0ICogdGhlIHN5bmNocm9uaXphdGlvbiAtIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luIC0gYmVjYXVzZSB3ZSBkbyBub3RcXG5tbS9zaG93X21lbS5jLTEyNy1cXHQgKiBoYXZlIHRvIGJlIHByZWNpc2UgaGVyZS5cXG4tLVxcbm1tL3NsdWIuYz0zODYzPXN0YXRpYyB2b2lkICpnZXRfZnJvbV9hbnlfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTM4OTctXFx0XFx0LypcXG5tbS9zbHViLmM6Mzg5ODpcXHRcXHQgKiByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpIGFjY2Vzc2VzIGN1cnJlbnQtXFx1MDAzZW1lbXNfYWxsb3dlZF9zZXEsXFxubW0vc2x1Yi5jLTM4OTktXFx0XFx0ICogYSBzZXFjb3VudF9zcGlubG9ja190IHRoYXQgaXMgbm90IE5NSS1zYWZlLiBEbyBub3QgYWNjZXNzXFxuLS1cXG5tbS9zbHViLmMtMzkwMy1cXHRcXHRpZiAoYWxsb3dfc3BpbilcXG5tbS9zbHViLmM6MzkwNDpcXHRcXHRcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbm1tL3NsdWIuYy0zOTA1LVxcbi0tXFxubW0vc2x1Yi5jPTcyMzE9X19yZWZpbGxfb2JqZWN0c19hbnkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXFxuLS1cXG5tbS9zbHViLmMtNzI0Ni1cXHRkbyB7XFxubW0vc2x1Yi5jOjcyNDc6XFx0XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9zbHViLmMtNzI0OC1cXHRcXHR6b25lbGlzdCA9IG5vZGVfem9uZWxpc3QobWVtcG9saWN5X3NsYWJfbm9kZSgpLCBnZnApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTo1OTowNi41NjIxMjU1MzJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2NzQzOTI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB6ZXJvaW5nIGluIG9uIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBUaGF0IGZ1bmN0aW9uIGlzIGNydWNpYWw7IGl0J3MgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQgaW4gYG1tL2h1Z2V0bGJfY21hLmNgLCBzbyBpdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlcy4gTGV0J3MgbWFrZSBzdXJlIHdlJ3JlIGZvY3VzaW5nIG91ciBhdHRlbnRpb24gdGhlcmUuXG5cbldlJ2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gYSBmZXcgY29uZmlnIG9wdGlvbnMsIG9mIGNvdXJzZS4gV2UncmUgZGVhbGluZyB3aXRoIGBDT05GSUdfQ01BYCwgYENPTkZJR19IVUdFVExCRlNgLCBhbmQgYENPTkZJR19DUFVTRVRTYCAtIHRob3NlIHdpbGwgY2VydGFpbmx5IGluZmx1ZW5jZSB0aGUgYmVoYXZpb3IuXG5cbk5vdywgYSBxdWljayBzYW5pdHkgY2hlY2s6IHNpbmNlIHdlJ3JlIHdvcmtpbmcgd2l0aCBodWdldGxiIHBhZ2VzLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyB0aGUgY29ycmVjdCBjb25maWcgc2V0dGluZyB3ZSdyZSBpbnRlcmVzdGVkIGluLCBhbmQgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHJlbGF0ZWQgc2V0dGluZ3MgdGhhdCBjb21lIGludG8gcGxheSBoZXJlLiBXZSBkb24ndCB3YW50IHRvIG1pc3MgYW55dGhpbmcgcmVsYXRlZCB0byB0aGUgYmFzZSBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA3NywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTo1OToxMC42Mjk1NjkzMTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzY2MTE1OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTo1OToxMi4yMDYxODc3MjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4NzI5MzU4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQXNzZXNzaW5nIEh1Z2UgUGFnZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgcHJvbXB0IGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLCBpcyB0byB6ZXJvIGluIG9uIGBjb25maWcgSFVHRVRMQl9QQUdFYC4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgd2hlbiBpdCBjb21lcyB0byBodWdlIHBhZ2UgaW1wbGVtZW50YXRpb24gYXQgYSBrZXJuZWwgbGV2ZWwuIFRoaXMgaXMgdGhlIGx5bmNocGluIOKAkyB0aGUgbWFzdGVyIHN3aXRjaCBpZiB5b3Ugd2lsbCDigJMgZm9yIHdoZXRoZXIgb3Igbm90IGh1Z2UgcGFnZXMgYXJlIGV2ZW4gZW5hYmxlZCBhbmQgaG93IHRoZSBzeXN0ZW0gZXZlbiBsb29rcyBmb3IgbGFyZ2UgbWVtb3J5IGJsb2Nrcy4gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBzZXJpb3VzIGludmVzdGlnYXRpb24sIGJlIGl0IHRyb3VibGVzaG9vdGluZyBwZXJmb3JtYW5jZSBpc3N1ZXMsIHZlcmlmeWluZyBhIHNldHVwLCBvciBjb25maXJtaW5nIGEgYnVpbGQgY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIGtub3cgaXRzIHN0YXRlIHRvIGRldGVybWluZSBuZXh0IHN0ZXBzLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoYXQgdGhhdCBtZWFucyBmb3IgcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTA5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6NTk6MTUuMzkzNDg1ODg4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQyMTY5ODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCX1BBR0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zaC9tbS9LY29uZmlnPTE1OD1jaG9pY2VcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjMtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE2NDpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRLXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2NS1cXHRib29sIFxcXCI2NGtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2Ny1cXG5hcmNoL3NoL21tL0tjb25maWc6MTY4OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8yNTZLXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2OS1cXHRib29sIFxcXCIyNTZrQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzEtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3Mjpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMU1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3My1cXHRib29sIFxcXCIxTUJcXFwiXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3NC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTc1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUJcXG5hcmNoL3NoL21tL0tjb25maWctMTc2LVxcdGJvb2wgXFxcIjRNQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzgtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3OTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xODAtXFx0Ym9vbCBcXFwiNjRNQlxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXFxuZnMvS2NvbmZpZy0yNjQtXFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNzItXFxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxcbmZzL0tjb25maWctMjc0LVxcdGRlZl9ib29sIEhVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNzYtXFxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuZnMvS2NvbmZpZy0yNzgtXFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuLS1cXG5tbS9LY29uZmlnPTcwNj1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy03MDgtXFxubW0vS2NvbmZpZzo3MDk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxubW0vS2NvbmZpZy03MTAtXFx0ZGVmX2Jvb2wgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTo1OToxNy4wMzU2NjI0N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzY0NjMwMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGRlbGl2ZXJlZCBhcyBpZiBJJ20gcmVmbGVjdGluZyBvbiBpdCBteXNlbGY6XG5cbioqSW5pdGlhbCBDb25maWd1cmF0aW9uIENoZWNrKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgbWFpbiB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB0aGF0IGBIVUdFVExCRlNgIGlzIHNldCB1cCBjb3JyZWN0bHkuIFRoYXQncyB0aGUgY29yZS4gQmVmb3JlIGRpdmluZyB0b28gZGVlcCwgaXQncyB3b3J0aCBhIHF1aWNrIGxvb2sgYXQgYGNvbmZpZyBDTUFgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9uIGlzIHNldCB1cCB0b28uIEl0IG1ha2VzIHNlbnNlIHRvIGNoZWNrIGJvdGggb2YgdGhlc2UgdG9nZXRoZXIgYXMgdGhleSBhcmUgYm90aCBhYm91dCBtZW1vcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzAzLCJPdXRwdXRUb2tlbnMiOjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6NTk6MTkuODAwMjk1NTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjM5NzA3NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENNQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZG1hL0tjb25maWc9MTczPWNvbmZpZyBETUFfTlVNQV9DTUFcXG4tLVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0xODUtXFxua2VybmVsL2RtYS9LY29uZmlnOjE4Njpjb25maWcgQ01BX1NJWkVfUEVSTlVNQVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0xODctXFx0Ym9vbCBcXFwiRGVmYXVsdCBDTUEgYXJlYSBwZXIgTlVNQSBub2RlXFxcIlxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnPTE5Nj1jb21tZW50IFxcXCJEZWZhdWx0IGNvbnRpZ3VvdXMgbWVtb3J5IGFyZWEgc2l6ZTpcXFwiXFxua2VybmVsL2RtYS9LY29uZmlnLTE5Ny1cXG5rZXJuZWwvZG1hL0tjb25maWc6MTk4OmNvbmZpZyBDTUFfU0laRV9NQllURVNcXG5rZXJuZWwvZG1hL0tjb25maWctMTk5LVxcdGludCBcXFwiU2l6ZSBpbiBNZWdhIEJ5dGVzXFxcIlxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnLTIwOC1cXG5rZXJuZWwvZG1hL0tjb25maWc6MjA5OmNvbmZpZyBDTUFfU0laRV9QRVJDRU5UQUdFXFxua2VybmVsL2RtYS9LY29uZmlnLTIxMC1cXHRpbnQgXFxcIlBlcmNlbnRhZ2Ugb2YgdG90YWwgbWVtb3J5XFxcIlxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnPTIyMD1jaG9pY2VcXG4tLVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjMtXFxua2VybmVsL2RtYS9LY29uZmlnOjIyNDpjb25maWcgQ01BX1NJWkVfU0VMX01CWVRFU1xcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjUtXFx0Ym9vbCBcXFwiVXNlIG1lZ2EgYnl0ZXMgdmFsdWUgb25seVxcXCJcXG5rZXJuZWwvZG1hL0tjb25maWctMjI2LVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoyMjc6Y29uZmlnIENNQV9TSVpFX1NFTF9QRVJDRU5UQUdFXFxua2VybmVsL2RtYS9LY29uZmlnLTIyOC1cXHRib29sIFxcXCJVc2UgcGVyY2VudGFnZSB2YWx1ZSBvbmx5XFxcIlxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjktXFxua2VybmVsL2RtYS9LY29uZmlnOjIzMDpjb25maWcgQ01BX1NJWkVfU0VMX01JTlxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzEtXFx0Ym9vbCBcXFwiVXNlIGxvd2VyIHZhbHVlIChtaW5pbXVtKVxcXCJcXG5rZXJuZWwvZG1hL0tjb25maWctMjMyLVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoyMzM6Y29uZmlnIENNQV9TSVpFX1NFTF9NQVhcXG5rZXJuZWwvZG1hL0tjb25maWctMjM0LVxcdGJvb2wgXFxcIlVzZSBoaWdoZXIgdmFsdWUgKG1heGltdW0pXFxcIlxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnPTIzNj1lbmRjaG9pY2VcXG5rZXJuZWwvZG1hL0tjb25maWctMjM3LVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoyMzg6Y29uZmlnIENNQV9BTElHTk1FTlRcXG5rZXJuZWwvZG1hL0tjb25maWctMjM5LVxcdGludCBcXFwiTWF4aW11bSBQQUdFX1NJWkUgb3JkZXIgb2YgYWxpZ25tZW50IGZvciBjb250aWd1b3VzIGJ1ZmZlcnNcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTEwNjQ9Y29uZmlnIEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXFxuLS1cXG5tbS9LY29uZmlnLTEwNjYtXFxubW0vS2NvbmZpZzoxMDY3OmNvbmZpZyBDTUFcXG5tbS9LY29uZmlnLTEwNjgtXFx0Ym9vbCBcXFwiQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDgxLVxcbm1tL0tjb25maWc6MTA4Mjpjb25maWcgQ01BX0RFQlVHRlNcXG5tbS9LY29uZmlnLTEwODMtXFx0Ym9vbCBcXFwiQ01BIGRlYnVnZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDg3LVxcbm1tL0tjb25maWc6MTA4ODpjb25maWcgQ01BX1NZU0ZTXFxubW0vS2NvbmZpZy0xMDg5LVxcdGJvb2wgXFxcIkNNQSBpbmZvcm1hdGlvbiB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTA5NC1cXG5tbS9LY29uZmlnOjEwOTU6Y29uZmlnIENNQV9BUkVBU1xcbm1tL0tjb25maWctMTA5Ni1cXHRpbnQgXFxcIk1heGltdW0gY291bnQgb2YgdGhlIENNQSBhcmVhc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6NTk6MjEuMzI0MjcyMTQ1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDI2MTYzNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiDigJMgQSBRdWljayBDaGVjayoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBzdGFydGluZyB3aXRoIGBDT05GSUdfQ01BYC4gVGhhdCdzIG91ciBmb2NhbCBwb2ludC4gTWFrZXMgc2Vuc2UsIHRoYXQncyB3aGVyZSB3ZSdyZSBhdCB3aXRoIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgc2V0dGluZ3Mgb24gdGhhdCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlci5cblxuQW5kLCBvZiBjb3Vyc2UsIHRoYXQgYWx3YXlzIGxlYWRzIG1lIHRvIGNvbnNpZGVyIGBjb25maWcgQ1BVU0VUU2AuIEEgcXVpY2sgcmV2aWV3IG9mIHRob3NlIHNldHRpbmdzIHdpbGwgYmUgaW1wb3J0YW50IHRvIGVuc3VyaW5nIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGNvcnJlY3RseS4gR290dGEgbWFrZSBzdXJlIHRob3NlIHR3byBhcmUgY29uc2lzdGVudCB3aXRoIGVhY2ggb3RoZXIuIFRoaXMgaXMgYWxsIHByZXR0eSBzdGFuZGFyZCwgYnV0IHdvcnRoIGRvdWJsZS1jaGVja2luZyBub25ldGhlbGVzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMTgsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTo1OToyNC44NjY4OTE1OTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTc3OTY4MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENQVVNFVFNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEyODQ9Y29uZmlnIENHUk9VUF9IVUdFVExCXFxuLS1cXG5pbml0L0tjb25maWctMTI5OS1cXG5pbml0L0tjb25maWc6MTMwMDpjb25maWcgQ1BVU0VUU1xcbmluaXQvS2NvbmZpZy0xMzAxLVxcdGJvb2wgXFxcIkNwdXNldCBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEzMTItXFxuaW5pdC9LY29uZmlnOjEzMTM6Y29uZmlnIENQVVNFVFNfVjFcXG5pbml0L0tjb25maWctMTMxNC1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIGNwdXNldHMgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6NTk6MjYuMzY0NjkzNzFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI5NDIzNjAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmdW5jdGlvbiBvZiBpbnRlcmVzdCBpcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gVGhlIGNvbmZpZywgYXMgZXhwZWN0ZWQsIHNlZW1zIHRvIGJlIHRpZWQgdG8gYENPTkZJR19DUFVTRVRTYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uLlxuXG5JdCdzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbiwgcmlnaHQ/IEkgaW1tZWRpYXRlbHkgd2FudCB0byBjb25maXJtIGl0cyByZWFjaGFiaWxpdHkgYW5kIHRlc3RhYmlsaXR5LiBUaGUgcGF0Y2ggZm9jdXNlcyAqc29sZWx5KiBvbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCwgd2hpY2ggc2ltcGxpZmllcyBteSBpbml0aWFsIGFzc2Vzc21lbnQ7IEkgZG9uJ3QgaGF2ZSB0byBjaGFzZSBkb3duIG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9ucy4gVGhlIG1vZGlmaWNhdGlvbiB0byBgbW0vaHVnZXRsYl9jbWEuY2AgY29uZmlybXMgdGhhdCB0aGUgcmVsZXZhbnQgY29uZmlncyBoZXJlIGFyZSBgQ09ORklHX0NNQWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYC5cblxuTm93LCBpcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBleHBvcnRlZCBvciBkaXJlY3RseSBhY2Nlc3NpYmxlIHZpYSBhIHN5c2NhbGw/IERpZ2dpbmcgYSBiaXQsIGl0IGxvb2tzIGxpa2UgaXQgKmlzKiByZWFjaGFibGUgZHVyaW5nIGdpZ2FudGljIGh1Z2UgcGFnZSBhbGxvY2F0aW9uLiBXZSdyZSB0YWxraW5nIGFib3V0IGh1Z2UgcGFnZXMgYWxsb2NhdGVkIHZpYSBgbW1hcGAgd2l0aCBgTUFQX0hVR0VUTEJgIGFuZCBhICpnaWdhbnRpYyogcGFnZSBzaXplLCBvciB0aHJvdWdoIGBzeXNmc2AgYnkgbWFuaXB1bGF0aW5nIGBucl9odWdlcGFnZXNgLiBCaW5nbywgdGhpcyBpcyBkZWZpbml0ZWx5IGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UhXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRob3NlIGtleSBjb25maWd1cmF0aW9uczogYEhVR0VUTEJGU2AsIGBDTUFgLCBhbmQgYENQVVNFVFNgLlxuXG5BIHF1aWNrIGNoZWNrIGNvbmZpcm1zIGl0J3Mgbm90IGEgc3RhdGljIGZ1bmN0aW9uLlxuYGBgY1xuc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcblx0XHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbmBgYFxuXG5BbHJpZ2h0LCB0aGF0J3MgZW5vdWdoIGZvciBteSBpbml0aWFsIHBhc3MuIEknbSByZWFkeSB0byByZXBvcnQgbXkgZmluZGluZ3MgdXNpbmcgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1MzQsIk91dHB1dFRva2VucyI6MTIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjU5OjM0LjY1ODkzMjA5OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3ODMwMjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIkNNQVwiLFxuICAgIFwiQ1BVU0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHRvIHJlc3BlY3QgY3B1c2V0IGNvbnN0cmFpbnRzIHdoZW4gYG5vZGVtYXNrYCBpcyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyAoSHVnZVRMQiArIENNQSkuIFRoZSBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHdoZW4gYWxsb2NhdGluZyBnaWdhbnRpYyBodWdlIHBhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiQ01BXCIsXG4gICAgXCJDUFVTRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgdG8gcmVzcGVjdCBjcHVzZXQgY29uc3RyYWludHMgd2hlbiBgbm9kZW1hc2tgIGlzIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIChIdWdlVExCICsgQ01BKS4gVGhlIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2Ugd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGh1Z2UgcGFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjU5OjM0LjczNjc2OTg0N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzOTc2NTI1NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTo1OTozNC43MzcyOTk3MDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDgzOTcxMTg3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHdoZW4gYG5vZGVtYXNrYCBpcyBOVUxMIGJ5IGZhbGxpbmcgYmFjayB0byBgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkYCBhbmQgaW50cm9kdWNpbmcgYSByZXRyeSBsb29wLiBUaGUgbG9jYWwgdmFyaWFibGUgYGNwdXNldF9tZW1zX2Nvb2tpZWAgaXMgb25seSBpbml0aWFsaXplZCB3aGVuIGBub2RlbWFza2AgaXMgTlVMTCwgYnV0IGR1ZSB0byBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24gaW4gdGhlIGNvbmRpdGlvbiBgIW5vZGVtYXNrIFxcdTAwMjZcXHUwMDI2IHVubGlrZWx5KHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpYCwgaXQgaXMgbmV2ZXIgcmVhZCB1bmluaXRpYWxpemVkLiBUaGUgYnVnIGJlaW5nIGZpeGVkIGlzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgYW5kIEtBU0FOLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgdG8gdXNlciBzcGFjZSBvciB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ0Y2NiNDA0MDQ5MWQwYTdhNzA1MDIzMDQxYjllMWFjOTNkYWFjOGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNTo1ODozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfY21hLmMgYi9tbS9odWdldGxiX2NtYS5jXG5pbmRleCAzOTM0NGQ2Yzc4ZDg0Li4zZTIyMTYxNjg2ZDJmIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYl9jbWEuY1xuKysrIGIvbW0vaHVnZXRsYl9jbWEuY1xuQEAgLTMsNiArMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NtYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdXNldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1faW5saW5lLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG5AQCAtMzAsMTUgKzMxLDI1IEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRpbnQgbm9kZTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG4rXHRjb25zdCBub2RlbWFza190ICpubWFzaztcbitcdHVuc2lnbmVkIGludCBjcHVzZXRfbWVtc19jb29raWU7XG4gXG4gXHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0aWYgKGh1Z2V0bGJfY21hW25pZF0pXG4rcmV0cnlfY3B1c2V0OlxuK1x0aWYgKCFub2RlbWFzaykge1xuK1x0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xuK1x0XHRubWFzayA9IFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcbitcdH0gZWxzZSB7XG4rXHRcdG5tYXNrID0gbm9kZW1hc2s7XG4rXHR9XG4rXG4rXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSBcdTAwMjZcdTAwMjYgbm9kZV9pc3NldChuaWQsICpubWFzaykpXG4gXHRcdHBhZ2UgPSBjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKGh1Z2V0bGJfY21hW25pZF0sIG9yZGVyKTtcbiBcbiBcdGlmICghcGFnZSBcdTAwMjZcdTAwMjYgIShnZnBfbWFzayBcdTAwMjYgX19HRlBfVEhJU05PREUpKSB7XG4tXHRcdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCAqbm9kZW1hc2spIHtcbitcdFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsICpubWFzaykge1xuIFx0XHRcdGlmIChub2RlID09IG5pZCB8fCAhaHVnZXRsYl9jbWFbbm9kZV0pXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbkBAIC00OCw4ICs1OSwxMiBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAoIXBhZ2UpXG4rXHRpZiAoIXBhZ2UpIHtcbitcdFx0aWYgKCFub2RlbWFzayBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHVubGlrZWx5KHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpKVxuK1x0XHRcdGdvdG8gcmV0cnlfY3B1c2V0O1xuIFx0XHRyZXR1cm4gTlVMTDtcbitcdH1cbiBcbiBcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiBcdGZvbGlvX3NldF9odWdldGxiX2NtYShmb2xpbyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTo1OTozNC43MzczMDA3MzdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMyNjMxNzE1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIdWdldGxiIENNQSBBbGxvY2F0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IG1vZGlmaWVzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGluIGBtbS9odWdldGxiX2NtYS5jYC4gSXQncyBhZGRpbmcgY3B1c2V0IG5vZGVtYXNrIGhhbmRsaW5nLCB3aGljaCBpcyBhIGtleSBhcmVhIHRvIGdldCByaWdodC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIG1lbW9yeSBzYWZldHkg4oCTIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXG5cblJpZ2h0LCBzbyB0aGUgYmFzaWMgbG9naWMgaXMgdGhhdCBpZiBgbm9kZW1hc2tgIGlzIE5VTEwsIHdlIHVzZSBgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkYCBhbmQgdGhlIGByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpYCAvIGByZWFkX21lbXNfYWxsb3dlZF9yZXRyeSgpYCBtYWNoaW5lcnkuIElmIGl0J3Mgbm90IE5VTEwsIHdlIHVzZSB0aGUgcHJvdmlkZWQgYG5vZGVtYXNrYC4gIFRoZSBjb2RlIGNoZWNrcyBgbm9kZV9pc3NldChuaWQsICpubWFzaylgIGJlZm9yZSBhbGxvY2F0aW5nLiBDcnVjaWFsbHksIHRoZSBsb29wIG5vdyBpdGVyYXRlcyB1c2luZyBgZm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsICpubWFzaylgIGluc3RlYWQgb2YganVzdCBgKm5vZGVtYXNrYC4gVGhhdCdzIGEgZGVmaW5pdGUgaW1wcm92ZW1lbnQgdG8gdGhlIG9yaWdpbmFsIHZlcnNpb24uXG5cbk5vdywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aGF0IGFib3V0IGBjcHVzZXRfbWVtc19jb29raWVgPyBJIHNlZSBpdCdzIGluaXRpYWxpemVkIGJ5IGByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpYCwgYW5kIGBubWFza2AgaXMgc2V0IHRvIGVpdGhlciB0aGUgY3VycmVudCBhbGxvd2VkIG1lbXMgb3IgdGhlIHByb3ZpZGVkIGBub2RlbWFza2AuIFRoZSBsb29wIHVzZXMgYCpubWFza2AsIHdoaWNoIHNlZW1zIGZpbmUuIEhvd2V2ZXIsIGlmIGBub2RlbWFza2AgKmlzbid0KiBOVUxMLCB0aGVuIGBjcHVzZXRfbWVtc19jb29raWVgIGxvb2tzIHVuaW5pdGlhbGl6ZWQuXG5cbkJ1dCB0aGVuIEkgc2VlIHRoZSBjaGVjazpcbmBgYGNcblx0aWYgKCFwYWdlKSB7XG5cdFx0aWYgKCFub2RlbWFzayBcdTAwMjZcdTAwMjZcblx0XHQgICAgdW5saWtlbHkocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSkpXG5cdFx0XHRnb3RvIHJldHJ5X2NwdXNldDtcblx0XHRyZXR1cm4gTlVMTDtcblx0fVxuYGBgXG5BaGEhIENydWNpYWxseSwgdGhlIGNoZWNrIGlzIGAhbm9kZW1hc2sgXHUwMDI2XHUwMDI2IC4uLmAuICBCZWNhdXNlIG9mIEMncyBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24sIGlmIGBub2RlbWFza2AgaXMgKm5vdCogTlVMTCwgdGhlIGNvbmRpdGlvbiBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgYFx1MDAyNlx1MDAyNmAgaXNuJ3QgZXZlbiBleGVjdXRlZC4gIFRoZXJlZm9yZSwgdGhlIHVuaW5pdGlhbGl6ZWQgYGNwdXNldF9tZW1zX2Nvb2tpZWAgaXMgKm5vdCogcmVhZC4gVGhhdCdzIGEgcmVsaWVmIVxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdtIGNoZWNraW5nIGlmIGByZWFkX21lbXNfYWxsb3dlZF9yZXRyeWAgaXMgZG9pbmcgYW55dGhpbmcgZnVua3kuIEl0J3MgZWl0aGVyIGFuIGlubGluZSBmdW5jdGlvbiBvciBhIG1hY3JvLiBFaXRoZXIgd2F5LCBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24gb2YgYFx1MDAyNlx1MDAyNmAgbWVhbnMgaXQgZG9lc24ndCBnZXQgZXhlY3V0ZWQgd2hlbiB0aGUgbGVmdCBzaWRlIGlzIGZhbHNlLiAgU28gbm8gaXNzdWVzIHRoZXJlLiBJJ20gYWxzbyBjb25maXJtaW5nIHRoYXQgYGNwdXNldF9tZW1zX2Nvb2tpZWAgaXMgbG9jYWwgYW5kIG5vdCBzb21lIGdsb2JhbCBzdHJ1Y3R1cmUgc2hhcmVkIG91dHNpZGUgdGhlIGxvY2FsIGZ1bmN0aW9uLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGNvbnRyb2wgZmxvdyBpbiB0aGUgcmV0cnkuIFRoZSBjaGFuZ2VkIGNvZGUgaXM6XG5gYGBjXG4tXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSlcbityZXRyeV9jcHVzZXQ6XG4rXHRpZiAoIW5vZGVtYXNrKSB7XG4rXHRcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG4rXHRcdG5tYXNrID0gXHUwMDI2Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xuK1x0fSBlbHNlIHtcbitcdFx0bm1hc2sgPSBub2RlbWFzaztcbitcdH1cbitcbitcdGlmIChodWdldGxiX2NtYVtuaWRdIFx1MDAyNlx1MDAyNiBub2RlX2lzc2V0KG5pZCwgKm5tYXNrKSlcbiBcdFx0cGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpO1xuYGBgXG5cbkJhc2ljYWxseSwgaWYgYG5vZGVtYXNrYCBpcyBOVUxMLCB3ZSB1c2UgdGhlIGN1cnJlbnQgYWxsb3dlZCBtZW1zLiBJZiBpdCdzIG5vdCBOVUxMLCB3ZSB1c2UgdGhlIHByb3ZpZGVkIGBub2RlbWFza2AuIEFuZCB0aGF0IGdldHMgcGFzc2VkIHRvIGBub2RlX2lzc2V0KClgLiAgTm93LCBJJ20gdGhpbmtpbmcgYmFjazogZGlkbid0IHRoZSAqb3JpZ2luYWwqIGNvZGUgaGF2ZSBhbiBpc3N1ZSBpZiBgbm9kZW1hc2tgICp3YXMqIE5VTEw/IEFoIHllcywgdGhlIG9sZCBjb2RlIGhhZCB0aGlzOlxuXG5gYGBjXG5cdGlmIChodWdldGxiX2NtYVtuaWRdKVxuXHRcdHBhZ2UgPSBjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKGh1Z2V0bGJfY21hW25pZF0sIG9yZGVyKTtcblxuXHRpZiAoIXBhZ2UgXHUwMDI2XHUwMDI2ICEoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSkge1xuXHRcdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCAqbm9kZW1hc2spIHtcbmBgYFxuXG5JZiBgbm9kZW1hc2tgICp3YXMqIE5VTEwsIHRoYXQgYCpub2RlbWFza2Agd291bGQgYmUgZGVyZWZlcmVuY2luZyBhIE5VTEwgcG9pbnRlciwgcmlnaHQ/ICBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgZml4aW5nIHRoYXQgY3JpdGljYWwgaXNzdWUhXG5cblRvIGNvbmZpcm0sIEknbGwgdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggdGhlIGNvZGViYXNlIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGlzIGlzIHRoZSBzb2xlIGNhbGwtc2l0ZS4gSSB3YW50IHRvIGJlIDEwMCUgc3VyZSB0aGlzIGhhbmRsZXMgYG5vZGVtYXNrYCBjb3JyZWN0bHkgaW4gYWxsIGNhc2VzLiBJJ2xsIHNlYXJjaCBmb3IgdGhlIGNhbGxlcnMgb2YgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6NTk6NDguMDAwNDc2MzI0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMzOTgzNTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MTM2MD1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzY0LVxcbm1tL2h1Z2V0bGIuYzoxMzY1OlxcdGZvbGlvID0gaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKG9yZGVyLCBnZnBfbWFzaywgbmlkLCBub2RlbWFzayk7XFxubW0vaHVnZXRsYi5jLTEzNjYtXFx0aWYgKGZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0yMj12b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTI3LVxcbm1tL2h1Z2V0bGJfY21hLmM6Mjg6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9odWdldGxiX2NtYS5jLTI5LVxcdFxcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuaD02PXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vaHVnZXRsYl9jbWEuaDo3OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vaHVnZXRsYl9jbWEuaC04LVxcdFxcdFxcdFxcdCAgICAgIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKTtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmg9MTY9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiX2NtYS5oLTE5LVxcbm1tL2h1Z2V0bGJfY21hLmg6MjA6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsXFxubW0vaHVnZXRsYl9jbWEuaC0yMS1cXHRcXHRnZnBfdCBnZnBfbWFzayxcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6NTk6NDkuNjM0NDY1MTU2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTE1MzA0MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgRnVuY3Rpb24qKlxuXG5SaWdodCwgdGhlIGNhbGxlciBpZGVudGlmaWVkIGlzIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gLCBhbmQgaXQncyBjb21pbmcgZnJvbSBgbW0vaHVnZXRsYi5jYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gSHVnZVRMQiBmdW5jdGlvbmFsaXR5LiBPa2F5LCBsZXQncyB6ZXJvIGluIG9uIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgZG9pbmcgc3BlY2lmaWNhbGx5LiBUaGlzIGZ1bmN0aW9uIG5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBoYXMgdG8gZG8gd2l0aCBhbGxvY2F0aW5nIGEgdmVyeSBsYXJnZSBwYWdlLCBhbmQgaXQgaXMgcG90ZW50aWFsbHkgYWxsb2NhdGluZyB0aGUgbWVtb3J5IGluIGEgd2F5IHRoYXQgaXRzIGNvbnRlbnRzIGFyZSBmcm96ZW4uIFdlIG5lZWQgdG8gY2hlY2sgaXQgYW5kIGRpdmUgaW50byBpdHMgbG9naWMuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIHRoZSBpbnRyaWNhY2llcyBvZiBIdWdlVExCIG1hbmFnZW1lbnQsIHBhZ2UgdGFibGUgaW50ZXJhY3Rpb25zLCBhbmQgcG90ZW50aWFsbHkgc29tZSBzcGVjaWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneSBmb3IgdGhlc2UgbGFyZ2UgcGFnZXMuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEyMiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjU5OjUzLjQ0NTk5ODQzNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5NjgxNTExOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTEzMjA9c3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX3ZtYShzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEzNTktI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0NPTlRJR19BTExPQylcXG5tbS9odWdldGxiLmM6MTM2MDpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9odWdldGxiLmMtMTM2MS1cXHRcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzc2LSNlbHNlIC8qICFDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRSB8fCAhQ09ORklHX0NPTlRJR19BTExPQyAqL1xcbm1tL2h1Z2V0bGIuYzoxMzc3OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxcbm1tL2h1Z2V0bGIuYy0xMzc4LVxcdFxcdFxcdFxcdFxcdCAgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS9odWdldGxiLmM9MTgzNj1zdGF0aWMgc3RydWN0IGZvbGlvICpvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xODQ2LVxcdGlmIChvcmRlcl9pc19naWdhbnRpYyhvcmRlcikpXFxubW0vaHVnZXRsYi5jOjE4NDc6XFx0XFx0Zm9saW8gPSBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5tYXNrKTtcXG5tbS9odWdldGxiLmMtMTg0OC1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjU5OjU1LjI0MjgyMTE3M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTU2MzcyNzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AgQ29kZSBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AsIGFuZCBpdCBjYWxscyBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCB3aXRoIGBubWFza2AuIFJpZ2h0LCBpZiBgbm1hc2tgIGlzIE5VTEwsIHRoZW4gdGhlIGBub2RlbWFza2AgcGFyYW1ldGVyIHBhc3NlZCB0byBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCBtdXN0IGFsc28gYmUgTlVMTC4gSGFuZyBvbiBhIHNlY29uZCwgdGhlIHBhdGNoIGRlc2NyaXB0aW9uIG1lbnRpb25zIGEgZml4IHJlbGF0ZWQgdG8gYSBwb3RlbnRpYWxseSBOVUxMIGBub2RlbWFza2AgY2F1c2luZyBhIGRlcmVmZXJlbmNlLiBBaCwgaXQncyBhIFwic3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XCIgZml4IGZvciBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSFcblxuVGhlIGNydWNpYWwgcGFydCBpcyB0aGUgYG5vZGVfaXNzZXQobmlkLCAqbm1hc2spYCBjaGVjay4gSWYgYG5vZGVtYXNrYCAqaXMqIE5VTEwsIHRoZW4gYG5tYXNrYCBpcyBhc3NpZ25lZCB0byBgXHUwMDI2Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkYCwgd2hpY2ggaXMgYSBjbGV2ZXIgd2F5IHRvIHByZXZlbnQgdGhlIGRyZWFkZWQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBTbywgdGhlIHBhdGNoIHNlZW1zIHRvIGhhdmUgYWRkcmVzc2VkIHRoZSBjb3JlIGlzc3VlLlxuXG5Ob3csIGRvZXMgdGhpcyBmaXggaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzPyBTcGVjaWZpY2FsbHksIGRvZXMgaXQgb3BlbiB0aGUgZG9vciBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U/IExldCdzIHNlZS4uLm5vLCBpdCBzZWVtcyB0aGF0IGlmIGBub2RlbWFza2AgaXMgTlVMTCwgYGNwdXNldF9tZW1zX2Nvb2tpZWAgZ2V0cyBpbml0aWFsaXplZC4gQW5kIGlmIGBub2RlbWFza2AgaXNuJ3QgTlVMTCwgdGhlbiBpdCBpcyB1bmluaXRpYWxpemVkLCBidXQgaXQncyBub3QgYWN0dWFsbHkgdXNlZCBkdWUgdG8gc2hvcnQtY2lyY3VpdGluZywgc28gdGhhdCdzIGdvb2QuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5YCBpc24ndCBhIG1hY3JvIHRoYXQgdW5jb25kaXRpb25hbGx5IGV2YWx1YXRlcyBpdHMgYXJndW1lbnRzLCB3aGljaCB3b3VsZCBiZSBwcm9ibGVtYXRpYy4gSSdsbCBjaGVjayBpdHMgZGVmaW5pdGlvbiB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzU5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA2OjAwOjAxLjE5OTE5NjgzMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMTE2NTM1NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNjowMDowMi43MzAzNzQ3MjZaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU4Mjc2NTU0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5YCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGByZWFkX21lbXNfYWxsb3dlZF9yZXRyeWAuIFRoZXJlJ3MgcHJvYmFibHkgYSBzdWJ0bGUgbnVhbmNlIGluIGl0cyBpbXBsZW1lbnRhdGlvbiB0aGF0IEknbSBvdmVybG9va2luZywgb3IgcGVyaGFwcyBhIGRlcGVuZGVuY3kgb24gb3RoZXIgY29tcG9uZW50cyBJJ20gbm90IGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCB0aGUgZGVmaW5pdGlvbi4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgcmV0cnkgbG9naWMgaXRzZWxmIC0gd2hhdCBjb25kaXRpb25zIHRyaWdnZXIgYSByZXRyeSwgaG93IG1hbnkgdGltZXMgZG9lcyBpdCBhdHRlbXB0LCBhbmQgd2hhdCBhcmUgdGhlIGJhY2tvZmYgc3RyYXRlZ2llcyBpZiBhbnk/IEFyZSB0aGVyZSBhbnkgc2lkZSBlZmZlY3RzPyBJIGFsc28gbmVlZCB0byB2ZXJpZnkgaXQncyB0aHJlYWQgc2FmZSBhbmQgYW55IHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucy4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MTEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNjowMDowOS4zMTMxNDM4MDZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDczMjE4NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhZF9tZW1zX2FsbG93ZWRfcmV0cnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9jcHVzZXQuaD0yMT1leHRlcm4gYm9vbCBsb2NrZGVwX2lzX2NwdXNldF9oZWxkKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yNy0gKiBrZXkuIEluIGNvZGUgcGF0aHMgd2hlcmUgd2UgbmVlZCB0byBsb29wIHdpdGggcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKSBhbmRcXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjI4OiAqIHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KCkgdG8gZ2V0IGEgY29uc2lzdGVudCB2aWV3IG9mIG1lbXNfYWxsb3dlZCwgd2UgbmVlZFxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjktICogdG8gZW5zdXJlIHRoYXQgYmVnaW4oKSBhbHdheXMgZ2V0cyByZXdyaXR0ZW4gYmVmb3JlIHJldHJ5KCkgaW4gdGhlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oPTEzNT1leHRlcm4gdm9pZCBjcHVzZXRfcmVzZXRfc2NoZWRfZG9tYWlucyh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTQxLSAqIGNhdXNpbmcgcHJvY2VzcyBmYWlsdXJlLiBBIHJldHJ5IGxvb3Agd2l0aCByZWFkX21lbXNfYWxsb3dlZF9iZWdpbiBhbmRcXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjE0MjogKiByZWFkX21lbXNfYWxsb3dlZF9yZXRyeSBwcmV2ZW50cyB0aGVzZSBhcnRpZmljaWFsIGZhaWx1cmVzLlxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTQzLSAqL1xcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg9MTQ0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTE1Ny0gKi9cXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjE1ODpzdGF0aWMgaW5saW5lIGJvb2wgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkodW5zaWduZWQgaW50IHNlcSlcXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTE1OS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oPTI5Mj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByZWFkX21lbXNfYWxsb3dlZF9iZWdpbih2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yOTYtXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoyOTc6c3RhdGljIGlubGluZSBib29sIHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KHVuc2lnbmVkIGludCBzZXEpXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yOTgte1xcbi0tXFxubW0vZmlsZW1hcC5jPTk5OT1zdHJ1Y3QgZm9saW8gKmZpbGVtYXBfYWxsb2NfZm9saW9fbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vZmlsZW1hcC5jLTEwMTQtXFx0XFx0XFx0Zm9saW8gPSBfX2ZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcCwgb3JkZXIsIG4pO1xcbm1tL2ZpbGVtYXAuYzoxMDE1OlxcdFxcdH0gd2hpbGUgKCFmb2xpbyBcXHUwMDI2XFx1MDAyNiByZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKTtcXG5tbS9maWxlbWFwLmMtMTAxNi1cXG4tLVxcbm1tL2h1Z2V0bGIuYz0xMjc1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzA4LVxcdH1cXG5tbS9odWdldGxiLmM6MTMwOTpcXHRpZiAodW5saWtlbHkocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSkpXFxubW0vaHVnZXRsYi5jLTEzMTAtXFx0XFx0Z290byByZXRyeV9jcHVzZXQ7XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTI4PXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTYzLVxcdFxcdGlmICghbm9kZW1hc2sgXFx1MDAyNlxcdTAwMjZcXG5tbS9odWdldGxiX2NtYS5jOjY0OlxcdFxcdCAgICB1bmxpa2VseShyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKSlcXG5tbS9odWdldGxiX2NtYS5jLTY1LVxcdFxcdFxcdGdvdG8gcmV0cnlfY3B1c2V0O1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjEwMD1zdGF0aWMgdW5zaWduZWQgaW50IHdlaWdodGVkX2ludGVybGVhdmVfbm9kZXMoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5KVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjExMC1cXHRcXHRub2RlID0gbmV4dF9ub2RlX2luKG5vZGUsIHBvbGljeS1cXHUwMDNlbm9kZXMpO1xcbm1tL21lbXBvbGljeS5jOjIxMTE6XFx0XFx0aWYgKHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpXFxubW0vbWVtcG9saWN5LmMtMjExMi1cXHRcXHRcXHRnb3RvIHJldHJ5O1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjEyMz1zdGF0aWMgdW5zaWduZWQgaW50IGludGVybGVhdmVfbm9kZXMoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5KVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjEzMS1cXHRcXHRuaWQgPSBuZXh0X25vZGVfaW4oY3VycmVudC1cXHUwMDNlaWxfcHJldiwgcG9saWN5LVxcdTAwM2Vub2Rlcyk7XFxubW0vbWVtcG9saWN5LmM6MjEzMjpcXHR9IHdoaWxlIChyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKTtcXG5tbS9tZW1wb2xpY3kuYy0yMTMzLVxcbi0tXFxubW0vbWVtcG9saWN5LmM9MjYzMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjY1Ny1cXHRcXHRubm9kZXMgPSByZWFkX29uY2VfcG9saWN5X25vZGVtYXNrKHBvbCwgXFx1MDAyNm5vZGVzKTtcXG5tbS9tZW1wb2xpY3kuYzoyNjU4OlxcdH0gd2hpbGUgKHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpO1xcbm1tL21lbXBvbGljeS5jLTI2NTktXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDY1OD1jaGVja19yZXRyeV9jcHVzZXQoaW50IGNwdXNldF9tZW1zX2Nvb2tpZSwgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQ2ODMtXFx0ICovXFxubW0vcGFnZV9hbGxvYy5jOjQ2ODQ6XFx0aWYgKHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpXFxubW0vcGFnZV9hbGxvYy5jLTQ2ODUtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS9zbHViLmM9Mzg2Mz1zdGF0aWMgdm9pZCAqZ2V0X2Zyb21fYW55X3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcF9mbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zOTE5LVxcdFxcdFxcdFxcdFxcdC8qXFxubW0vc2x1Yi5jOjM5MjA6XFx0XFx0XFx0XFx0XFx0ICogRG9uJ3QgY2hlY2sgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoKVxcbm1tL3NsdWIuYy0zOTIxLVxcdFxcdFxcdFxcdFxcdCAqIGhlcmUgLSBpZiBtZW1zX2FsbG93ZWQgd2FzIHVwZGF0ZWQgaW5cXG4tLVxcbm1tL3NsdWIuYy0zOTI5LVxcdFxcdH1cXG5tbS9zbHViLmM6MzkzMDpcXHR9IHdoaWxlIChhbGxvd19zcGluIFxcdTAwMjZcXHUwMDI2IHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpO1xcbm1tL3NsdWIuYy0zOTMxLSNlbmRpZlxcdC8qIENPTkZJR19OVU1BICovXFxuLS1cXG5tbS9zbHViLmM9NzIzMT1fX3JlZmlsbF9vYmplY3RzX2FueShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcXG4tLVxcbm1tL3NsdWIuYy03MjY0LVxcdFxcdFxcdFxcdC8qXFxubW0vc2x1Yi5jOjcyNjU6XFx0XFx0XFx0XFx0ICogRG9uJ3QgY2hlY2sgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoKSBoZXJlIC1cXG5tbS9zbHViLmMtNzI2Ni1cXHRcXHRcXHRcXHQgKiBpZiBtZW1zX2FsbG93ZWQgd2FzIHVwZGF0ZWQgaW4gcGFyYWxsZWwsIHRoYXRcXG4tLVxcbm1tL3NsdWIuYy03Mjc1LVxcdFxcdH1cXG5tbS9zbHViLmM6NzI3NjpcXHR9IHdoaWxlIChyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKTtcXG5tbS9zbHViLmMtNzI3Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDY6MDA6MTAuODYwNDcxMDIxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMjczOTI0MzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgc3RhbmRhcmQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBUaGUgdnVsbmVyYWJpbGl0eSBzdGVtcyBmcm9tIGFuIHVuaGFuZGxlZCBjYXNlIHdoZXJlIGBub2RlbWFza2AgaXMgTlVMTC5cblxuSSBzZWUgdGhleSd2ZSBpbXBsZW1lbnRlZCBhIGZpeCB0aGF0IGludHJvZHVjZXMgYSByZXRyeSBtZWNoYW5pc20gdXNpbmcgYHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKClgIGFuZCBgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoKWAuIENydWNpYWxseSwgYHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5YCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24sIHdoaWNoIGlzIGNyaXRpY2FsIGhlcmUuIFRoZSBDIGNvbXBpbGVyIHdpbGwgc2hvcnQtY2lyY3VpdCB0aGUgcmlnaHQtaGFuZCBzaWRlIG9mIHRoZSBgXHUwMDI2XHUwMDI2YCBvcGVyYXRvci4gVGhlcmVmb3JlLCBpZiBgIW5vZGVtYXNrYCBpcyBmYWxzZSwgdGhlIHJpZ2h0IHNpZGUsIGByZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpYCB3aWxsIG5ldmVyIGJlIHJlYWQsIGFuZCB0aGUgdmFsdWUgb2YgYGNwdXNldF9tZW1zX2Nvb2tpZWAgaXMgaXJyZWxldmFudC4gSXQncyBzYWZlLiBUaGUgY29tcGlsZXIgcHJldmVudHMgdGhlIHVzZSBvZiB0aGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZS5cblxuTXkgZmlyc3QgdGhvdWdodCB3YXMsIFwiQ291bGQgdGhlcmUgYmUgb3RoZXIgcmlza3M/XCIgSG93ZXZlciwgbG9va2luZyBjbG9zZXIsIGBjcHVzZXRfbWVtc19jb29raWVgIGlzIGp1c3QgYW4gYHVuc2lnbmVkIGludGAgdXNlZCBpbiBhIHNlcWxvY2stbGlrZSByZXRyeSBsb29wLCB3aGljaCBpcyBjb21tb24uIEl0J3Mgbm90IGludm9sdmVkIGluIG1lbW9yeSBhbGxvY2F0aW9uIG9yIGRhdGEgcGFzc2luZyBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3MuXG5cblRoZSBwYXRjaCBpdHNlbGYgbW9kaWZpZXMgdGhlIGNvbnRyb2wgZmxvdyBhcm91bmQgdGhlIGFsbG9jYXRpb24gbG9naWMsIGJ1dCB0aGUgY29yZSBpc3N1ZSBpcyB0aGUgTlVMTCBjaGVjayBhbmQgdGhlIGhhbmRsaW5nIG9mIHRoZSBgbm9kZW1hc2tgLiBUaGUgZml4IGVuc3VyZXMgdGhhdCBpZiBgbm9kZW1hc2tgIGlzIE5VTEwsIHdlIGZhbGwgYmFjayB0byB1c2luZyBgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkYCBmcm9tIGEgYGNwdXNldGAuIFRoaXMgaXMgdGhlIGltcG9ydGFudCBwYXJ0IGJlY2F1c2UgaXQgcHJldmVudHMgdGhlIE5VTEwgZGVyZWZlcmVuY2UuXG5cbkkndmUgZG91YmxlLWNoZWNrZWQ6IHRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBJdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBjb25kaXRpb25hbCBsb2dpYyBub3cgZW5zdXJlcyB0aGF0IGFsbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIHJldHJ5IGxvb3AuIFRoZSBgY3B1c2V0X21lbXNfY29va2llYCBpcyBpbml0aWFsaXplZCBvbmx5IHdoZW4gYG5vZGVtYXNrYCBpcyBudWxsLCBidXQgaXMgc2hvcnQtY2lyY3VpdGVkIGlmIG5vdCwgYW5kIHRodXMgaXQgcmVtYWlucyB1bmluaXRpYWxpemVkIG9ubHkgd2hlbiB0aGUgY29uZGl0aW9uIGF2b2lkcyBpdHMgdXNlLlxuXG5Tbywgc3VtbWluZyBpdCB1cCwgdGhlIHBhdGNoIGZpeGVzIGEga25vd24gTlVMTCBwb2ludGVyIGlzc3VlLiBJdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcywgbm9yIGRvZXMgaXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZSBvcmlnaW5hbCBidWcgaXMgZWFzaWx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkIGhlcmUuIEl0J3MgYSBcIk5lZWRzS01TQU49ZmFsc2VcIiBzaXR1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMzEsIk91dHB1dFRva2VucyI6MjAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA2OjAwOjIzLjEzNDM5ODIyOVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2Agd2hlbiBgbm9kZW1hc2tgIGlzIE5VTEwgYnkgZmFsbGluZyBiYWNrIHRvIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgIGFuZCBpbnRyb2R1Y2luZyBhIHJldHJ5IGxvb3AuIFRoZSBsb2NhbCB2YXJpYWJsZSBgY3B1c2V0X21lbXNfY29va2llYCBpcyBvbmx5IGluaXRpYWxpemVkIHdoZW4gYG5vZGVtYXNrYCBpcyBOVUxMLCBidXQgZHVlIHRvIHNob3J0LWNpcmN1aXQgZXZhbHVhdGlvbiBpbiB0aGUgY29uZGl0aW9uIGAhbm9kZW1hc2sgXFx1MDAyNlxcdTAwMjYgdW5saWtlbHkocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSlgLCBpdCBpcyBuZXZlciByZWFkIHVuaW5pdGlhbGl6ZWQuIFRoZSBidWcgYmVpbmcgZml4ZWQgaXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBhbmQgS0FTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyB0byB1c2VyIHNwYWNlIG9yIHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2Agd2hlbiBgbm9kZW1hc2tgIGlzIE5VTEwgYnkgZmFsbGluZyBiYWNrIHRvIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgIGFuZCBpbnRyb2R1Y2luZyBhIHJldHJ5IGxvb3AuIFRoZSBsb2NhbCB2YXJpYWJsZSBgY3B1c2V0X21lbXNfY29va2llYCBpcyBvbmx5IGluaXRpYWxpemVkIHdoZW4gYG5vZGVtYXNrYCBpcyBOVUxMLCBidXQgZHVlIHRvIHNob3J0LWNpcmN1aXQgZXZhbHVhdGlvbiBpbiB0aGUgY29uZGl0aW9uIGAhbm9kZW1hc2sgXFx1MDAyNlxcdTAwMjYgdW5saWtlbHkocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSlgLCBpdCBpcyBuZXZlciByZWFkIHVuaW5pdGlhbGl6ZWQuIFRoZSBidWcgYmVpbmcgZml4ZWQgaXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBhbmQgS0FTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyB0byB1c2VyIHNwYWNlIG9yIHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowvpl4n[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 05:41:14 +0000 UTC FinishedAt: 2026-08-11 06:00:24 +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": "1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "CMA", "CPUSETS" ], "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": "1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "CMA", "CPUSETS" ], "series_id": "091a59e4-feb2-4ed2-83e0-cb8a357168cf" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hugetlb_cma_alloc_frozen_folio" ], "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+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7Q1BVU0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHdoZW4gYG5vZGVtYXNrYCBpcyBOVUxMIGJ5IGZhbGxpbmcgYmFjayB0byBgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkYCBhbmQgaW50cm9kdWNpbmcgYSByZXRyeSBsb29wLiBUaGUgbG9jYWwgdmFyaWFibGUgYGNwdXNldF9tZW1zX2Nvb2tpZWAgaXMgb25seSBpbml0aWFsaXplZCB3aGVuIGBub2RlbWFza2AgaXMgTlVMTCwgYnV0IGR1ZSB0byBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24gaW4gdGhlIGNvbmRpdGlvbiBgIW5vZGVtYXNrIFx1MDAyNlx1MDAyNiB1bmxpa2VseShyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKWAsIGl0IGlzIG5ldmVyIHJlYWQgdW5pbml0aWFsaXplZC4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIGFuZCBLQVNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgdG8gcmVzcGVjdCBjcHVzZXQgY29uc3RyYWludHMgd2hlbiBgbm9kZW1hc2tgIGlzIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIChIdWdlVExCICYjNDM7IENNQSkuIFRoZSBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHdoZW4gYWxsb2NhdGluZyBnaWdhbnRpYyBodWdlIHBhZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDRjY2I0MDQwNDkxZDBhN2E3MDUwMjMwNDFiOWUxYWM5M2RhYWM4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDA1OjU4OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfY21hLmMgYi9tbS9odWdldGxiX2NtYS5jXG5pbmRleCAzOTM0NGQ2Yzc4ZDg0Li4zZTIyMTYxNjg2ZDJmIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYl9jbWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYl9jbWEuY1xuQEAgLTMsNiAmIzQzOzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbWEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY3B1c2V0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbV9pbmxpbmUuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9wYWdlLmhcdTAwM2VcbkBAIC0zMCwxNSAmIzQzOzMxLDI1IEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRpbnQgbm9kZTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG4mIzQzO1x0Y29uc3Qgbm9kZW1hc2tfdCAqbm1hc2s7XG4mIzQzO1x0dW5zaWduZWQgaW50IGNwdXNldF9tZW1zX2Nvb2tpZTtcbiBcbiBcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSlcbiYjNDM7cmV0cnlfY3B1c2V0OlxuJiM0MztcdGlmICghbm9kZW1hc2spIHtcbiYjNDM7XHRcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG4mIzQzO1x0XHRubWFzayA9IFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0bm1hc2sgPSBub2RlbWFzaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChodWdldGxiX2NtYVtuaWRdIFx1MDAyNlx1MDAyNiBub2RlX2lzc2V0KG5pZCwgKm5tYXNrKSlcbiBcdFx0cGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpO1xuIFxuIFx0aWYgKCFwYWdlIFx1MDAyNlx1MDAyNiAhKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9USElTTk9ERSkpIHtcbi1cdFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsICpub2RlbWFzaykge1xuJiM0MztcdFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsICpubWFzaykge1xuIFx0XHRcdGlmIChub2RlID09IG5pZCB8fCAhaHVnZXRsYl9jbWFbbm9kZV0pXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbkBAIC00OCw4ICYjNDM7NTksMTIgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKCFwYWdlKVxuJiM0MztcdGlmICghcGFnZSkge1xuJiM0MztcdFx0aWYgKCFub2RlbWFzayBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICB1bmxpa2VseShyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKSlcbiYjNDM7XHRcdFx0Z290byByZXRyeV9jcHVzZXQ7XG4gXHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiBcbiBcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiBcdGZvbGlvX3NldF9odWdldGxiX2NtYShmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7Q1BVU0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB0byByZXNwZWN0IGNwdXNldCBjb25zdHJhaW50cyB3aGVuIGBub2RlbWFza2AgaXMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgKEh1Z2VUTEIgJiM0MzsgQ01BKS4gVGhlIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2Ugd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGh1Z2UgcGFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkNGNjYjQwNDA0OTFkMGE3YTcwNTAyMzA0MWI5ZTFhYzkzZGFhYzhmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMDU6NTg6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdldGxiX2NtYS5jIGIvbW0vaHVnZXRsYl9jbWEuYwppbmRleCAzOTM0NGQ2Yzc4ZDg0Li4zZTIyMTYxNjg2ZDJmIDEwMDY0NAotLS0gYS9tbS9odWdldGxiX2NtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGJfY21hLmMKQEAgLTMsNiAmIzQzOzMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY21hLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY3B1c2V0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW1faW5saW5lLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vcGFnZS5oJmd0OwpAQCAtMzAsMTUgJiM0MzszMSwyNSBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLAogCWludCBub2RlOwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwomIzQzOwljb25zdCBub2RlbWFza190ICpubWFzazsKJiM0MzsJdW5zaWduZWQgaW50IGNwdXNldF9tZW1zX2Nvb2tpZTsKIAogCWlmICghaHVnZXRsYl9jbWFfc2l6ZSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoaHVnZXRsYl9jbWFbbmlkXSkKJiM0MztyZXRyeV9jcHVzZXQ6CiYjNDM7CWlmICghbm9kZW1hc2spIHsKJiM0MzsJCWNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7CiYjNDM7CQlubWFzayA9ICZhbXA7Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkOwomIzQzOwl9IGVsc2UgewomIzQzOwkJbm1hc2sgPSBub2RlbWFzazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaHVnZXRsYl9jbWFbbmlkXSAmYW1wOyZhbXA7IG5vZGVfaXNzZXQobmlkLCAqbm1hc2spKQogCQlwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7CiAKIAlpZiAoIXBhZ2UgJmFtcDsmYW1wOyAhKGdmcF9tYXNrICZhbXA7IF9fR0ZQX1RISVNOT0RFKSkgewotCQlmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgKm5vZGVtYXNrKSB7CiYjNDM7CQlmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgKm5tYXNrKSB7CiAJCQlpZiAobm9kZSA9PSBuaWQgfHwgIWh1Z2V0bGJfY21hW25vZGVdKQogCQkJCWNvbnRpbnVlOwogCkBAIC00OCw4ICYjNDM7NTksMTIgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywKIAkJfQogCX0KIAotCWlmICghcGFnZSkKJiM0MzsJaWYgKCFwYWdlKSB7CiYjNDM7CQlpZiAoIW5vZGVtYXNrICZhbXA7JmFtcDsKJiM0MzsJCSAgICB1bmxpa2VseShyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKSkKJiM0MzsJCQlnb3RvIHJldHJ5X2NwdXNldDsKIAkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KIAogCWZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKIAlmb2xpb19zZXRfaHVnZXRsYl9jbWEoZm9saW8pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHVnZXRsYiBDTUEgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0vaHVnZXRsYl9jbWEuY2AsIHNwZWNpZmljYWxseSB0aGUgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24uIEZyb20gd2hhdCBJIGNhbiBzZWUsIGl0IHNlZW1zIHRoZSBjb3JlIGNoYW5nZSBmb2N1c2VzIG9uIGludGVncmF0aW5nIGNwdXNldCBub2RlbWFzayBjaGVja3MgZHVyaW5nIGh1Z2V0bGIgZm9saW8gYWxsb2NhdGlvbiBmcm9tIENNQS4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhhdCB3aGVuIGEgYG5vZGVtYXNrYCBpcyBhYnNlbnQsIHRoZSBjb2RlIHNtYXJ0bHkgZGVmYXVsdHMgdG8gdXNpbmcgYGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZGAsIGFuZCBpdOKAmXMgZXZlbiBzZXQgdXAgdG8gcmV0cnkgaWYgdGhlIGNwdXNldCBtZW1zIGNvbmZpZ3VyYXRpb24gc2hpZnRzIGluIHRoZSBtaWRkbGUgb2YgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4KCk5vdywgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2lkZWx5IHRoaXMgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24gaXMgdXNlZC4gVGhlIGNvbnRleHQgb2YgdGhpcyBtb2RpZmljYXRpb24gaXMgY3JpdGljYWwsIHNvIGxldOKAmXMgZGVsdmUgaW50byBpdHMgY2FsbCBzaXRlcy4gV2hhdCBhcmUgdGhlIHJlbGV2YW50IGNhbGxlcnMsIGFuZCB3aGF0IGFyZSB0aGVpciBzcGVjaWZpYyBuZWVkcz8gS25vd2luZyB0aGF0IHdpbGwgY2xhcmlmeSB0aGUgcG90ZW50aWFsIGltcGFjdCBhbmQgYW55IHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5ldyBub2RlbWFzayBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTEzNjA9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYi5jLTEzNjQtXG5tbS9odWdldGxiLmM6MTM2NTpcdGZvbGlvID0gaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKG9yZGVyLCBnZnBfbWFzaywgbmlkLCBub2RlbWFzayk7XG5tbS9odWdldGxiLmMtMTM2Ni1cdGlmIChmb2xpbylcbi0tXG5tbS9odWdldGxiX2NtYS5jPTIyPXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiX2NtYS5jLTI3LVxubW0vaHVnZXRsYl9jbWEuYzoyODpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxubW0vaHVnZXRsYl9jbWEuYy0yOS1cdFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4tLVxubW0vaHVnZXRsYl9jbWEuaD02PXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9odWdldGxiX2NtYS5oOjc6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbm1tL2h1Z2V0bGJfY21hLmgtOC1cdFx0XHRcdCAgICAgIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKTtcbi0tXG5tbS9odWdldGxiX2NtYS5oPTE2PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmgtMTktXG5tbS9odWdldGxiX2NtYS5oOjIwOnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLFxubW0vaHVnZXRsYl9jbWEuaC0yMS1cdFx0Z2ZwX3QgZ2ZwX21hc2ssXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjk2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqVHJhY2luZyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCoqCgpBbHJpZ2h0LCBzbyBJIHNlZSBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBjYWxsZWQgZnJvbSB3aXRoaW4gYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AsIHdoaWNoIGlzIGluIGBtbS9odWdldGxiLmNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgbGlrZWx5IGFuIGltcG9ydGFudCBjb25uZWN0aW9uIHRvIGZvbGxvdyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gd2l0aGluIHRoZSBodWdlIHBhZ2VzIHN1YnN5c3RlbS4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG1lY2hhbmljcyBvZiB0aGF0IGludGVyYWN0aW9uLiBHaXZlbiB0aGF0LCBsZXQgbWUgc3RhcnQgYnkgcXVpY2tseSBjaGVja2luZyB0aGUgdXNhZ2Ugb2YgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgaXRzZWxmLiBLbm93aW5nIHdoZXJlICppdCogaXMgY2FsbGVkIGZyb20gd2lsbCBoZWxwIG1lIGJ1aWxkIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIGZsb3cgYW5kIHB1cnBvc2Ugb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBhbmQgaXRzIHJlbGF0aW9uIHRvIHRoZSBvdmVyYWxsIGh1Z2UgcGFnZXMgYXJjaGl0ZWN0dXJlLiBJdCYjMzk7cyBhIGtleSBwYXJ0IG9mIHVudGFuZ2xpbmcgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0xMzIwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTM1OS0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0NPTlRJR19BTExPQylcbm1tL2h1Z2V0bGIuYzoxMzYwOnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxubW0vaHVnZXRsYi5jLTEzNjEtXHRcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL2h1Z2V0bGIuYy0xMzc2LSNlbHNlIC8qICFDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRSB8fCAhQ09ORklHX0NPTlRJR19BTExPQyAqL1xubW0vaHVnZXRsYi5jOjEzNzc6c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsXG5tbS9odWdldGxiLmMtMTM3OC1cdFx0XHRcdFx0ICBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9odWdldGxiLmM9MTgzNj1zdGF0aWMgc3RydWN0IGZvbGlvICpvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTg0Ni1cdGlmIChvcmRlcl9pc19naWdhbnRpYyhvcmRlcikpXG5tbS9odWdldGxiLmM6MTg0NzpcdFx0Zm9saW8gPSBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5tYXNrKTtcbm1tL2h1Z2V0bGIuYy0xODQ4LVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NDYKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGEgTGFyZ2UgTWVtb3J5IEFsbG9jYXRpb24qKgoKT2theSwgc28gSSBzZWUgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgaXMgYmVpbmcgY2FsbGVkIHNwZWNpZmljYWxseSBmcm9tIGBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW9gLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJdCBtZWFucyB0aGVyZSYjMzk7cyBhIHBhcnRpY3VsYXIsIGZvY3VzZWQgcGF0aHdheSBmb3IgdGhlc2UgJiMzNDtnaWdhbnRpYyYjMzQ7IGZvbGlvIGFsbG9jYXRpb25zLCBhbmQgaXQmIzM5O3MgdGllZCB0byBmcmVzaCBodWdlIHBhZ2UgYWxsb2NhdGlvbnMuIE15IG5leHQgbW92ZSBpcyBjbGVhcjogSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSB1c2FnZSBvZiBgb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYC4gVW5kZXJzdGFuZGluZyAqd2h5KiBhbmQgKmhvdyogaXQmIzM5O3MgYmVpbmcgY2FsbGVkIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcHVycG9zZSBvZiB0aGVzZSBsYXJnZSBhbGxvY2F0aW9ucyBhbmQgdGhlaXIgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gVGhpcyBzZWVtcyBsaWtlIGEgcHJvbWlzaW5nIGxlYWQgdG8gZm9sbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTc5MT1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19idWRkeV9mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9odWdldGxiLmMtMTgzNS1cbm1tL2h1Z2V0bGIuYzoxODM2OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKm9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxubW0vaHVnZXRsYi5jLTE4MzctXHRcdGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLCBub2RlbWFza190ICpubWFzayxcbi0tXG5tbS9odWdldGxiLmM9MTg2Mz1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTE4NjctXG5tbS9odWdldGxiLmM6MTg2ODpcdGZvbGlvID0gb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsIG5tYXNrLCBOVUxMKTtcbm1tL2h1Z2V0bGIuYy0xODY5LVx0aWYgKGZvbGlvKVxuLS1cbm1tL2h1Z2V0bGIuYz0xODk2PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX3Bvb2xfaHVnZV9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0xOTA2LVxubW0vaHVnZXRsYi5jOjE5MDc6XHRcdGZvbGlvID0gb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBub2RlLFxubW0vaHVnZXRsYi5jLTE5MDgtXHRcdFx0XHRcdG5vZGVzX2FsbG93ZWQsIG5vZGVfYWxsb2Nfbm9yZXRyeSk7XG4tLVxubW0vaHVnZXRsYi5jPTMzNzI9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfaHN0YXRlX2FsbG9jX3BhZ2VzX29uZW5vZGUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZClcbi0tXG5tbS9odWdldGxiLmMtMzM4NS1cbm1tL2h1Z2V0bGIuYzozMzg2Olx0XHRcdGZvbGlvID0gb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsXG5tbS9odWdldGxiLmMtMzM4Ny1cdFx0XHRcdFx0XHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBOVUxMKTtcbi0tXG5tbS9odWdldGxiLmMtMzM5MS1cdFx0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmZvbGlvX2xpc3QpO1xubW0vaHVnZXRsYi5jOjMzOTI6XHRcdFx0XHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLFxubW0vaHVnZXRsYi5jLTMzOTMtXHRcdFx0XHRcdFx0XHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBOVUxMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzY0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIdWdldGxiIEZvbGlvIEFsbG9jYXRpb24gYW5kIENwdXNldCBDb25zdHJhaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGh1Z2V0bGIgZm9saW9zIGFyZSBhbGxvY2F0ZWQuIFNwZWNpZmljYWxseSwgYGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW9gIGFuZCBgYWxsb2NfcG9vbF9odWdlX2ZvbGlvYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMsIHdoaWNoIEkga25vdyBhcmUgZnVuZGFtZW50YWwgdG8gdGhlIEh1Z2VUTEIgYW5kIENNQSBsb2dpYyDigJMgZGVmaW5pdGVseSBjb3JlIGtlcm5lbCBzdHVmZi4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24uIEl0JiMzOTtzIG1ha2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCB3aGljaCBhbHdheXMgd2FycmFudHMgY2xvc2UgYXR0ZW50aW9uLiBUaGUgY3JpdGljYWwgYXNwZWN0IGhlcmUgaXMgaG93IGl0IGludGVyYWN0cyB3aXRoIGNwdXNldHMgd2hlbiB0aGUgYG5vZGVtYXNrYCBpcyBzZXQgdG8gTlVMTC4KCk5vdywgSSBuZWVkIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLiBXaGF0IGFyZSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zPyBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBodWdldGxiX2NtYS5jYCBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYm90aCBgQ09ORklHX0NNQWAgYW5kIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBhcmUgZW5hYmxlZC4gVGltZSB0byBjaGVjayBgbW0vTWFrZWZpbGVgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGNvZGUgcGF0aCBpcyBhY3RpdmUgYW5kIHRoZXJlZm9yZSB0aGUgaW1wYWN0IG9mIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX2NtYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dD05NT1LZXJuZWwgcGFyYW1ldGVyc1xuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTIwNjMtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dDoyMDY0Olx0aHVnZXRsYl9jbWE9XHRbSFcsQ01BLEVBUkxZXSBUaGUgc2l6ZSBvZiBhIENNQSBhcmVhIHVzZWQgZm9yIGFsbG9jYXRpb25cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTIwNjUtXHRcdFx0b2YgZ2lnYW50aWMgaHVnZXBhZ2VzLiBPciB1c2luZyBub2RlIGZvcm1hdCwgdGhlIHNpemVcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc3LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ6MjA3ODpcdGh1Z2V0bGJfY21hX29ubHk9XG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc5LVx0XHRcdFtIVyxDTUEsRUFSTFldIFdoZW4gYWxsb2NhdGluZyBuZXcgSHVnZVRMQiBwYWdlcywgb25seVxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTIwODEtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dDoyMDgyOlx0XHRcdFRoaXMgb3B0aW9uIGRvZXMgbm90aGluZyBpZiBodWdldGxiX2NtYT0gaXMgbm90IGFsc29cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTIwODMtXHRcdFx0c3BlY2lmaWVkLlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9jeGwvbGludXgvZWFybHktYm9vdC5yc3Q9MTI2PW9uIE5VTUEgbm9kZXMgdGhhdCBhcmUgbm90IG9ubGluZSBkdXJpbmcgZWFybHkgYm9vdC4gOjpcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9jeGwvbGludXgvZWFybHktYm9vdC5yc3QtMTI3LVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2N4bC9saW51eC9lYXJseS1ib290LnJzdDoxMjg6ICB2b2lkIF9faW5pdCBodWdldGxiX2NtYV9yZXNlcnZlKHZvaWQpIHtcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9jeGwvbGludXgvZWFybHktYm9vdC5yc3QtMTI5LSAgICBpZiAoIW5vZGVfb25saW5lKG5pZCkpXG4tLVxuTUFJTlRBSU5FUlM9MTIwMjA9RjpcdG1tL2h1Z2V0bGJfY2dyb3VwLmNcbk1BSU5UQUlORVJTOjEyMDIxOkY6XHRtbS9odWdldGxiX2NtYS5jXG5NQUlOVEFJTkVSUzoxMjAyMjpGOlx0bW0vaHVnZXRsYl9jbWEuaFxuTUFJTlRBSU5FUlMtMTIwMjMtRjpcdG1tL2h1Z2V0bGJfc3lzY3RsLmNcbi0tXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtMzgtI2lmZGVmIENPTkZJR19DTUFcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYzozOTp1bnNpZ25lZCBpbnQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTQwLXtcbi0tXG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYz0yMDE9YXJjaF9pbml0Y2FsbChodWdldGxicGFnZV9pbml0KTtcbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jLTIwMi1cbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jOjIwMzp1bnNpZ25lZCBpbnQgX19pbml0IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jLTIwNC17XG4tLVxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jPTQ0OD1hcmNoX2luaXRjYWxsKGdpZ2FudGljX3BhZ2VzX2luaXQpO1xuLS1cbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYy00NTAtXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmM6NDUxOnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTQ1Mi17XG4tLVxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmM9MjI1PWJvb2wgX19pbml0IGFyY2hfaHVnZXRsYl92YWxpZF9zaXplKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbi0tXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYy0yMzQtXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYzoyMzU6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYy0yMzYte1xuLS1cbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmM9NDI9YXJjaF9pbml0Y2FsbChnaWdhbnRpY19wYWdlc19pbml0KTtcbi0tXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jLTQ1LVxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYzo0Njp1bnNpZ25lZCBpbnQgX19pbml0IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmMtNDcte1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTI3Nj12b2lkIGh1Z2V0bGJfc3BsaXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNzctXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNzg6dW5zaWduZWQgaW50IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZCk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNzktXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTI5OD1zdGF0aWMgaW5saW5lIHNwaW5sb2NrX3QgKmh1Z2VfcHRlX2xvY2soc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMzA4LSNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19DTUEpXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMzA5OmV4dGVybiB2b2lkIF9faW5pdCBodWdldGxiX2NtYV9yZXNlcnZlKHZvaWQpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMxMC0jZWxzZVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTMxMTpzdGF0aWMgaW5saW5lIF9faW5pdCB2b2lkIGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZClcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEzMTIte1xuLS1cbm1tL01ha2VmaWxlPTgyPWlmZGVmIENPTkZJR19DTUFcbm1tL01ha2VmaWxlOjgzOm9iai0kKENPTkZJR19IVUdFVExCRlMpXHQmIzQzOz0gaHVnZXRsYl9jbWEub1xubW0vTWFrZWZpbGUtODQtZW5kaWZcbi0tXG5tbS9jbWEuaD04PXN0cnVjdCBjbWFfa29iamVjdCB7XG4tLVxubW0vY21hLmgtMTQtICogTXVsdGktcmFuZ2Ugc3VwcG9ydC4gVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHRoZSBzaXplIG9mIHRoZSBhbGxvY2F0aW9uXG5tbS9jbWEuaDoxNTogKiBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgbGFyZ2VyIHRoYW4gdGhlIGFsaWdubWVudCAobGlrZSB3aXRoIGh1Z2V0bGJfY21hKSxcbm1tL2NtYS5oLTE2LSAqIGFuZCB0aGUgdG90YWwgYW1vdW50IG9mIG1lbW9yeSByZXF1ZXN0ZWQsIHdoaWxlIHNtYWxsZXIgdGhhbiB0aGUgdG90YWxcbi0tXG5tbS9odWdldGxiLmMtNTAtI2luY2x1ZGUgXCYjMzQ7aHVnZXRsYl92bWVtbWFwLmhcJiMzNDtcbm1tL2h1Z2V0bGIuYzo1MTojaW5jbHVkZSBcJiMzNDtodWdldGxiX2NtYS5oXCYjMzQ7XG5tbS9odWdldGxiLmMtNTItI2luY2x1ZGUgXCYjMzQ7aHVnZXRsYl9pbnRlcm5hbC5oXCYjMzQ7XG4tLVxubW0vaHVnZXRsYi5jPTEzNjA9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYi5jLTEzNjQtXG5tbS9odWdldGxiLmM6MTM2NTpcdGZvbGlvID0gaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKG9yZGVyLCBnZnBfbWFzaywgbmlkLCBub2RlbWFzayk7XG5tbS9odWdldGxiLmMtMTM2Ni1cdGlmIChmb2xpbylcbi0tXG5tbS9odWdldGxiLmMtMTM2OC1cbm1tL2h1Z2V0bGIuYzoxMzY5Olx0aWYgKGh1Z2V0bGJfY21hX2V4Y2x1c2l2ZV9hbGxvYygpKVxubW0vaHVnZXRsYi5jLTEzNzAtXHRcdHJldHVybiBOVUxMO1xuLS1cbm1tL2h1Z2V0bGIuYz0xNDU4PXN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTUwNy1cdFZNX0JVR19PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XG5tbS9odWdldGxiLmM6MTUwODpcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfY21hKGZvbGlvKSlcbm1tL2h1Z2V0bGIuYzoxNTA5Olx0XHRodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhmb2xpbyk7XG5tbS9odWdldGxiLmMtMTUxMC1cdGVsc2Vcbi0tXG5tbS9odWdldGxiLmM9MzAyOD1zdGF0aWMgX19pbml0IHZvaWQgKmFsbG9jX2Jvb3RtZW0oc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZCwgYm9vbCBub2RlX2V4YWN0KVxuLS1cbm1tL2h1Z2V0bGIuYy0zMDMzLVx0aWYgKGh1Z2V0bGJfZWFybHlfY21hKGgpKVxubW0vaHVnZXRsYi5jOjMwMzQ6XHRcdG0gPSBodWdldGxiX2NtYV9hbGxvY19ib290bWVtKGgsIFx1MDAyNmxpc3Rub2RlLCBub2RlX2V4YWN0KTtcbm1tL2h1Z2V0bGIuYy0zMDM1LVx0ZWxzZSB7XG4tLVxubW0vaHVnZXRsYi5jPTMxODA9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfYm9vdG1lbV9pbml0X21pZ3JhdGV0eXBlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vaHVnZXRsYi5jLTMxODctXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSAmIzQzOz0gcGFnZWJsb2NrX25yX3BhZ2VzKSB7XG5tbS9odWdldGxiLmM6MzE4ODpcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9jbWEoZm9saW8pKVxubW0vaHVnZXRsYi5jLTMxODktXHRcdFx0aW5pdF9jbWFfcGFnZWJsb2NrKGZvbGlvX3BhZ2UoZm9saW8sIGkpKTtcbi0tXG5tbS9odWdldGxiLmM9MzI4MT1zdGF0aWMgdm9pZCBfX2luaXQgZ2F0aGVyX2Jvb3RtZW1fcHJlYWxsb2Nfbm9kZSh1bnNpZ25lZCBsb25nIG5pZClcbi0tXG5tbS9odWdldGxiLmMtMzMyNi1cdFx0aWYgKGh1Z2V0bGJfYm9vdG1lbV9wYWdlX2Vhcmx5Y21hKG0pKVxubW0vaHVnZXRsYi5jOjMzMjc6XHRcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfY21hKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0zMzI4LVxuLS1cbm1tL2h1Z2V0bGIuYy0zMzM4LVx0XHQgKi9cbm1tL2h1Z2V0bGIuYzozMzM5Olx0XHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYl9jbWEoZm9saW8pKVxubW0vaHVnZXRsYi5jLTMzNDAtXHRcdFx0YWRqdXN0X21hbmFnZWRfcGFnZV9jb3VudChwYWdlLCBwYWdlc19wZXJfaHVnZV9wYWdlKGgpKTtcbi0tXG5tbS9odWdldGxiLmM9MzU2NT1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaClcbi0tXG5tbS9odWdldGxiLmMtMzU3Mi1cdCAqL1xubW0vaHVnZXRsYi5jOjM1NzM6XHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljKGgpIFx1MDAyNlx1MDAyNiBodWdldGxiX2NtYV90b3RhbF9zaXplKCkgXHUwMDI2XHUwMDI2XG5tbS9odWdldGxiLmMtMzU3NC1cdCAgICAhaHVnZXRsYl9lYXJseV9jbWEoaCkpIHtcbm1tL2h1Z2V0bGIuYzozNTc1Olx0XHRwcl93YXJuX29uY2UoXCYjMzQ7SHVnZVRMQjogaHVnZXRsYl9jbWEgaXMgZW5hYmxlZCwgc2tpcCBib290IHRpbWUgYWxsb2NhdGlvblxcblwmIzM0Oyk7XG5tbS9odWdldGxiLmMtMzU3Ni1cdFx0cmV0dXJuO1xuLS1cbm1tL2h1Z2V0bGIuYz0zNTk1PXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2luaXRfaHN0YXRlcyh2b2lkKVxuLS1cbm1tL2h1Z2V0bGIuYy0zNjIyLVx0XHRcdGNvbnRpbnVlO1xubW0vaHVnZXRsYi5jOjM2MjM6XHRcdGlmIChodWdldGxiX2NtYV90b3RhbF9zaXplKCkgXHUwMDI2XHUwMDI2IGgtXHUwMDNlb3JkZXIgXHUwMDNjPSBIVUdFVExCX1BBR0VfT1JERVIpXG5tbS9odWdldGxiLmMtMzYyNC1cdFx0XHRjb250aW51ZTtcbi0tXG5tbS9odWdldGxiLmM9MzkxOT1zdGF0aWMgbG9uZyBkZW1vdGVfZnJlZV9odWdldGxiX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpzcmMsIHN0cnVjdCBoc3RhdGUgKmRzdCxcbi0tXG5tbS9odWdldGxiLmMtMzk0Ni1cbm1tL2h1Z2V0bGIuYzozOTQ3Olx0XHRjbWEgPSBmb2xpb190ZXN0X2h1Z2V0bGJfY21hKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0zOTQ4LVxuLS1cbm1tL2h1Z2V0bGIuYy0zOTY1LVx0XHRcdGlmIChjbWEpXG5tbS9odWdldGxiLmM6Mzk2NjpcdFx0XHRcdGZvbGlvX3NldF9odWdldGxiX2NtYShuZXdfZm9saW8pO1xubW0vaHVnZXRsYi5jLTM5NjctXHRcdFx0bGlzdF9hZGQoXHUwMDI2bmV3X2ZvbGlvLVx1MDAzZWxydSwgXHUwMDI2ZHN0X2xpc3QpO1xuLS1cbm1tL2h1Z2V0bGIuYz00MjI3PXN0YXRpYyBfX2luaXQgdm9pZCBodWdldGxiX3BhcnNlX3BhcmFtcyh2b2lkKVxuLS1cbm1tL2h1Z2V0bGIuYy00MjM3LVxubW0vaHVnZXRsYi5jOjQyMzg6XHRodWdldGxiX2NtYV92YWxpZGF0ZV9wYXJhbXMoKTtcbm1tL2h1Z2V0bGIuYy00MjM5LX1cbi0tXG5tbS9odWdldGxiX2NtYS5jLTEzLSNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbm1tL2h1Z2V0bGJfY21hLmM6MTQ6I2luY2x1ZGUgXCYjMzQ7aHVnZXRsYl9jbWEuaFwmIzM0O1xubW0vaHVnZXRsYl9jbWEuYy0xNS1cbm1tL2h1Z2V0bGJfY21hLmMtMTYtXG5tbS9odWdldGxiX2NtYS5jOjE3OnN0YXRpYyBzdHJ1Y3QgY21hICpodWdldGxiX2NtYVtNQVhfTlVNTk9ERVNdIF9fcm9fYWZ0ZXJfaW5pdDtcbm1tL2h1Z2V0bGJfY21hLmM6MTg6c3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW01BWF9OVU1OT0RFU10gX19pbml0ZGF0YTtcbm1tL2h1Z2V0bGJfY21hLmM6MTk6c3RhdGljIGJvb2wgaHVnZXRsYl9jbWFfb25seSBfX3JvX2FmdGVyX2luaXQ7XG5tbS9odWdldGxiX2NtYS5jOjIwOnN0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfY21hX3NpemUgX19yb19hZnRlcl9pbml0O1xubW0vaHVnZXRsYl9jbWEuYy0yMS1cbm1tL2h1Z2V0bGJfY21hLmM6MjI6dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZXRsYl9jbWEuYy0yMy17XG5tbS9odWdldGxiX2NtYS5jOjI0Olx0V0FSTl9PTl9PTkNFKCFjbWFfcmVsZWFzZV9mcm96ZW4oaHVnZXRsYl9jbWFbZm9saW9fbmlkKGZvbGlvKV0sXG5tbS9odWdldGxiX2NtYS5jLTI1LVx0XHRcdFx0XHQgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgZm9saW9fbnJfcGFnZXMoZm9saW8pKSk7XG4tLVxubW0vaHVnZXRsYl9jbWEuYy0yNy1cbm1tL2h1Z2V0bGJfY21hLmM6Mjg6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbm1tL2h1Z2V0bGJfY21hLmMtMjktXHRcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMzYtXG5tbS9odWdldGxiX2NtYS5jOjM3Olx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxubW0vaHVnZXRsYl9jbWEuYy0zOC1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0vaHVnZXRsYl9jbWEuYy00Ny1cbm1tL2h1Z2V0bGJfY21hLmM6NDg6XHRpZiAoaHVnZXRsYl9jbWFbbmlkXSBcdTAwMjZcdTAwMjYgbm9kZV9pc3NldChuaWQsICpubWFzaykpXG5tbS9odWdldGxiX2NtYS5jOjQ5Olx0XHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7XG5tbS9odWdldGxiX2NtYS5jLTUwLVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtNTItXHRcdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCAqbm1hc2spIHtcbm1tL2h1Z2V0bGJfY21hLmM6NTM6XHRcdFx0aWYgKG5vZGUgPT0gbmlkIHx8ICFodWdldGxiX2NtYVtub2RlXSlcbm1tL2h1Z2V0bGJfY21hLmMtNTQtXHRcdFx0XHRjb250aW51ZTtcbm1tL2h1Z2V0bGJfY21hLmMtNTUtXG5tbS9odWdldGxiX2NtYS5jOjU2Olx0XHRcdHBhZ2UgPSBjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKGh1Z2V0bGJfY21hW25vZGVdLCBvcmRlcik7XG5tbS9odWdldGxiX2NtYS5jLTU3LVx0XHRcdGlmIChwYWdlKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtNjktXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG5tbS9odWdldGxiX2NtYS5jOjcwOlx0Zm9saW9fc2V0X2h1Z2V0bGJfY21hKGZvbGlvKTtcbm1tL2h1Z2V0bGJfY21hLmMtNzEtXHRyZXR1cm4gZm9saW87XG4tLVxubW0vaHVnZXRsYl9jbWEuYz03ND1zdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgKiBfX2luaXRcbm1tL2h1Z2V0bGJfY21hLmM6NzU6aHVnZXRsYl9jbWFfYWxsb2NfYm9vdG1lbShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgKm5pZCwgYm9vbCBub2RlX2V4YWN0KVxubW0vaHVnZXRsYl9jbWEuYy03Ni17XG4tLVxubW0vaHVnZXRsYl9jbWEuYy04MC1cbm1tL2h1Z2V0bGJfY21hLmM6ODE6XHRjbWEgPSBodWdldGxiX2NtYVsqbmlkXTtcbm1tL2h1Z2V0bGJfY21hLmMtODItXHRtID0gY21hX3Jlc2VydmVfZWFybHkoY21hLCBodWdlX3BhZ2Vfc2l6ZShoKSk7XG4tLVxubW0vaHVnZXRsYl9jbWEuYy04Ny1cdFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIGh1Z2V0bGJfYm9vdG1lbV9ub2Rlcykge1xubW0vaHVnZXRsYl9jbWEuYzo4ODpcdFx0XHRjbWEgPSBodWdldGxiX2NtYVtub2RlXTtcbm1tL2h1Z2V0bGJfY21hLmMtODktXHRcdFx0aWYgKCFjbWEgfHwgbm9kZSA9PSAqbmlkKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMTA2LVxubW0vaHVnZXRsYl9jbWEuYzoxMDc6c3RhdGljIGludCBfX2luaXQgY21kbGluZV9wYXJzZV9odWdldGxiX2NtYShjaGFyICpwKVxubW0vaHVnZXRsYl9jbWEuYy0xMDgte1xuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMTIzLVx0XHRcdHRtcCA9IG1lbXBhcnNlKHMsIFx1MDAyNnMpO1xubW0vaHVnZXRsYl9jbWEuYzoxMjQ6XHRcdFx0aHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW25pZF0gPSB0bXA7XG5tbS9odWdldGxiX2NtYS5jOjEyNTpcdFx0XHRodWdldGxiX2NtYV9zaXplICYjNDM7PSB0bXA7XG5tbS9odWdldGxiX2NtYS5jLTEyNi1cbi0tXG5tbS9odWdldGxiX2NtYS5jLTEzNS1cdFx0fSBlbHNlIHtcbm1tL2h1Z2V0bGJfY21hLmM6MTM2Olx0XHRcdGh1Z2V0bGJfY21hX3NpemUgPSBtZW1wYXJzZShwLCBcdTAwMjZwKTtcbm1tL2h1Z2V0bGJfY21hLmMtMTM3LVx0XHRcdGJyZWFrO1xuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMTQzLVxubW0vaHVnZXRsYl9jbWEuYzoxNDQ6ZWFybHlfcGFyYW0oXCYjMzQ7aHVnZXRsYl9jbWFcJiMzNDssIGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWEpO1xubW0vaHVnZXRsYl9jbWEuYy0xNDUtXG5tbS9odWdldGxiX2NtYS5jOjE0NjpzdGF0aWMgaW50IF9faW5pdCBjbWRsaW5lX3BhcnNlX2h1Z2V0bGJfY21hX29ubHkoY2hhciAqcClcbm1tL2h1Z2V0bGJfY21hLmMtMTQ3LXtcbm1tL2h1Z2V0bGJfY21hLmM6MTQ4Olx0cmV0dXJuIGtzdHJ0b2Jvb2wocCwgXHUwMDI2aHVnZXRsYl9jbWFfb25seSk7XG5tbS9odWdldGxiX2NtYS5jLTE0OS19XG5tbS9odWdldGxiX2NtYS5jLTE1MC1cbm1tL2h1Z2V0bGJfY21hLmM6MTUxOmVhcmx5X3BhcmFtKFwmIzM0O2h1Z2V0bGJfY21hX29ubHlcJiMzNDssIGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWFfb25seSk7XG5tbS9odWdldGxiX2NtYS5jLTE1Mi1cbm1tL2h1Z2V0bGJfY21hLmM6MTUzOnVuc2lnbmVkIGludCBfX3dlYWsgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxubW0vaHVnZXRsYl9jbWEuYy0xNTQte1xuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMTU3LVxubW0vaHVnZXRsYl9jbWEuYzoxNTg6dm9pZCBfX2luaXQgaHVnZXRsYl9jbWFfcmVzZXJ2ZSh2b2lkKVxubW0vaHVnZXRsYl9jbWEuYy0xNTkte1xuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMTYzLVxubW0vaHVnZXRsYl9jbWEuYzoxNjQ6XHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXG5tbS9odWdldGxiX2NtYS5jLTE2NS1cdFx0cmV0dXJuO1xubW0vaHVnZXRsYl9jbWEuYy0xNjYtXG5tbS9odWdldGxiX2NtYS5jOjE2NzpcdG9yZGVyID0gYXJjaF9odWdldGxiX2NtYV9vcmRlcigpO1xubW0vaHVnZXRsYl9jbWEuYy0xNjgtXHRpZiAoIW9yZGVyKSB7XG5tbS9odWdldGxiX2NtYS5jOjE2OTpcdFx0cHJfd2FybihcJiMzNDtodWdldGxiX2NtYTogdGhlIG9wdGlvbiBpc24mIzM5O3Qgc3VwcG9ydGVkIGJ5IGN1cnJlbnQgYXJjaFxcblwmIzM0Oyk7XG5tbS9odWdldGxiX2NtYS5jLTE3MC1cdFx0cmV0dXJuO1xuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMTg0LVx0Zm9yIChuaWQgPSAwOyBuaWQgXHUwMDNjIE1BWF9OVU1OT0RFUzsgbmlkJiM0MzsmIzQzOykge1xubW0vaHVnZXRsYl9jbWEuYzoxODU6XHRcdHNpemUgPSBodWdldGxiX2NtYV9zaXplX2luX25vZGVbbmlkXTtcbm1tL2h1Z2V0bGJfY21hLmMtMTg2LVx0XHRpZiAoc2l6ZSA9PSAwKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMTg5LVx0XHRpZiAoIW5vZGVfaXNzZXQobmlkLCBodWdldGxiX2Jvb3RtZW1fbm9kZXMpKSB7XG5tbS9odWdldGxiX2NtYS5jOjE5MDpcdFx0XHRwcl93YXJuKFwmIzM0O2h1Z2V0bGJfY21hOiBpbnZhbGlkIG5vZGUgJWQgc3BlY2lmaWVkXFxuXCYjMzQ7LCBuaWQpO1xubW0vaHVnZXRsYl9jbWEuYy0xOTEtXHRcdH0gZWxzZSBpZiAoIUlTX0FMSUdORUQoc2l6ZSwgZ2lnYW50aWNfcGFnZV9zaXplKSkge1xubW0vaHVnZXRsYl9jbWEuYzoxOTI6XHRcdFx0cHJfd2FybihcJiMzNDtodWdldGxiX2NtYTogY21hIGFyZWEgb2Ygbm9kZSAlZCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgJWx1IE1pQlxcblwmIzM0Oyxcbm1tL2h1Z2V0bGJfY21hLmMtMTkzLVx0XHRcdFx0bmlkLCBnaWdhbnRpY19wYWdlX3NpemUgLyBTWl8xTSk7XG4tLVxubW0vaHVnZXRsYl9jbWEuYy0xOTgtXG5tbS9odWdldGxiX2NtYS5jOjE5OTpcdFx0aHVnZXRsYl9jbWFfc2l6ZSAtPSBzaXplO1xubW0vaHVnZXRsYl9jbWEuYzoyMDA6XHRcdGh1Z2V0bGJfY21hX3NpemVfaW5fbm9kZVtuaWRdID0gMDtcbm1tL2h1Z2V0bGJfY21hLmMtMjAxLVx0fVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjAzLVx0LyogVmFsaWRhdGUgdGhlIENNQSBzaXplIGFnYWluIGluIGNhc2Ugc29tZSBpbnZhbGlkIG5vZGVzIHNwZWNpZmllZC4gKi9cbm1tL2h1Z2V0bGJfY21hLmM6MjA0Olx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxubW0vaHVnZXRsYl9jbWEuYy0yMDUtXHRcdHJldHVybjtcbm1tL2h1Z2V0bGJfY21hLmMtMjA2LVxubW0vaHVnZXRsYl9jbWEuYzoyMDc6XHRpZiAoIUlTX0FMSUdORUQoaHVnZXRsYl9jbWFfc2l6ZSwgZ2lnYW50aWNfcGFnZV9zaXplKSkge1xubW0vaHVnZXRsYl9jbWEuYzoyMDg6XHRcdHByX3dhcm4oXCYjMzQ7aHVnZXRsYl9jbWE6IGNtYSBhcmVhIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAlbHUgTWlCXFxuXCYjMzQ7LFxubW0vaHVnZXRsYl9jbWEuYy0yMDktXHRcdFx0Z2lnYW50aWNfcGFnZV9zaXplIC8gU1pfMU0pO1xubW0vaHVnZXRsYl9jbWEuYzoyMTA6XHRcdGh1Z2V0bGJfY21hX3NpemUgPSAwO1xubW0vaHVnZXRsYl9jbWEuYy0yMTEtXHRcdHJldHVybjtcbi0tXG5tbS9odWdldGxiX2NtYS5jLTIxOC1cdFx0ICovXG5tbS9odWdldGxiX2NtYS5jOjIxOTpcdFx0cGVyX25vZGUgPSBESVZfUk9VTkRfVVAoaHVnZXRsYl9jbWFfc2l6ZSxcbm1tL2h1Z2V0bGJfY21hLmMtMjIwLVx0XHRcdFx0XHRub2Rlc193ZWlnaHQoaHVnZXRsYl9ib290bWVtX25vZGVzKSk7XG5tbS9odWdldGxiX2NtYS5jLTIyMS1cdFx0cGVyX25vZGUgPSByb3VuZF91cChwZXJfbm9kZSwgZ2lnYW50aWNfcGFnZV9zaXplKTtcbm1tL2h1Z2V0bGJfY21hLmM6MjIyOlx0XHRwcl9pbmZvKFwmIzM0O2h1Z2V0bGJfY21hOiByZXNlcnZlICVsdSBNaUIsIHVwIHRvICVsdSBNaUIgcGVyIG5vZGVcXG5cJiMzNDssXG5tbS9odWdldGxiX2NtYS5jOjIyMzpcdFx0XHRodWdldGxiX2NtYV9zaXplIC8gU1pfMU0sIHBlcl9ub2RlIC8gU1pfMU0pO1xubW0vaHVnZXRsYl9jbWEuYy0yMjQtXHR9XG4tLVxubW0vaHVnZXRsYl9jbWEuYy0yMzEtXHRcdGlmIChub2RlX3NwZWNpZmljX2NtYV9hbGxvYykge1xubW0vaHVnZXRsYl9jbWEuYzoyMzI6XHRcdFx0aWYgKGh1Z2V0bGJfY21hX3NpemVfaW5fbm9kZVtuaWRdID09IDApXG5tbS9odWdldGxiX2NtYS5jLTIzMy1cdFx0XHRcdGNvbnRpbnVlO1xubW0vaHVnZXRsYl9jbWEuYy0yMzQtXG5tbS9odWdldGxiX2NtYS5jOjIzNTpcdFx0XHRzaXplID0gaHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW25pZF07XG5tbS9odWdldGxiX2NtYS5jLTIzNi1cdFx0fSBlbHNlIHtcbm1tL2h1Z2V0bGJfY21hLmM6MjM3Olx0XHRcdHNpemUgPSBtaW4ocGVyX25vZGUsIGh1Z2V0bGJfY21hX3NpemUgLSByZXNlcnZlZCk7XG5tbS9odWdldGxiX2NtYS5jLTIzOC1cdFx0fVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjQ3LVx0XHRcdFx0XHRIVUdFVExCX1BBR0VfT1JERVIsIG5hbWUsXG5tbS9odWdldGxiX2NtYS5jOjI0ODpcdFx0XHRcdFx0XHUwMDI2aHVnZXRsYl9jbWFbbmlkXSwgbmlkKTtcbm1tL2h1Z2V0bGJfY21hLmMtMjQ5LVx0XHRpZiAocmVzKSB7XG5tbS9odWdldGxiX2NtYS5jOjI1MDpcdFx0XHRwcl93YXJuKFwmIzM0O2h1Z2V0bGJfY21hOiByZXNlcnZhdGlvbiBmYWlsZWQ6IGVyciAlZCwgbm9kZSAlZFwmIzM0Oyxcbm1tL2h1Z2V0bGJfY21hLmMtMjUxLVx0XHRcdFx0cmVzLCBuaWQpO1xuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjU1LVx0XHRyZXNlcnZlZCAmIzQzOz0gc2l6ZTtcbm1tL2h1Z2V0bGJfY21hLmM6MjU2Olx0XHRwcl9pbmZvKFwmIzM0O2h1Z2V0bGJfY21hOiByZXNlcnZlZCAlbHUgTWlCIG9uIG5vZGUgJWRcXG5cJiMzNDssXG5tbS9odWdldGxiX2NtYS5jLTI1Ny1cdFx0XHRzaXplIC8gU1pfMU0sIG5pZCk7XG5tbS9odWdldGxiX2NtYS5jLTI1OC1cbm1tL2h1Z2V0bGJfY21hLmM6MjU5Olx0XHRpZiAocmVzZXJ2ZWQgXHUwMDNlPSBodWdldGxiX2NtYV9zaXplKVxubW0vaHVnZXRsYl9jbWEuYy0yNjAtXHRcdFx0YnJlYWs7XG4tLVxubW0vaHVnZXRsYl9jbWEuYy0yNjQtXHRcdC8qXG5tbS9odWdldGxiX2NtYS5jOjI2NTpcdFx0ICogaHVnZXRsYl9jbWFfc2l6ZSBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhbGxvY2F0aW9ucyBmcm9tXG5tbS9odWdldGxiX2NtYS5jLTI2Ni1cdFx0ICogY21hIGFyZSBwb3NzaWJsZS4gIFNldCB0byB6ZXJvIGlmIG5vIGNtYSByZWdpb25zIGFyZSBzZXQgdXAuXG5tbS9odWdldGxiX2NtYS5jLTI2Ny1cdFx0ICovXG5tbS9odWdldGxiX2NtYS5jOjI2ODpcdFx0aHVnZXRsYl9jbWFfc2l6ZSA9IDA7XG5tbS9odWdldGxiX2NtYS5jLTI2OS19XG5tbS9odWdldGxiX2NtYS5jLTI3MC1cbm1tL2h1Z2V0bGJfY21hLmM6MjcxOmJvb2wgaHVnZXRsYl9jbWFfZXhjbHVzaXZlX2FsbG9jKHZvaWQpXG5tbS9odWdldGxiX2NtYS5jLTI3Mi17XG5tbS9odWdldGxiX2NtYS5jOjI3MzpcdHJldHVybiBodWdldGxiX2NtYV9vbmx5O1xubW0vaHVnZXRsYl9jbWEuYy0yNzQtfVxubW0vaHVnZXRsYl9jbWEuYy0yNzUtXG5tbS9odWdldGxiX2NtYS5jOjI3Njp1bnNpZ25lZCBsb25nIF9faW5pdCBodWdldGxiX2NtYV90b3RhbF9zaXplKHZvaWQpXG5tbS9odWdldGxiX2NtYS5jLTI3Ny17XG5tbS9odWdldGxiX2NtYS5jOjI3ODpcdHJldHVybiBodWdldGxiX2NtYV9zaXplO1xubW0vaHVnZXRsYl9jbWEuYy0yNzktfVxubW0vaHVnZXRsYl9jbWEuYy0yODAtXG5tbS9odWdldGxiX2NtYS5jOjI4MTp2b2lkIF9faW5pdCBodWdldGxiX2NtYV92YWxpZGF0ZV9wYXJhbXModm9pZClcbm1tL2h1Z2V0bGJfY21hLmMtMjgyLXtcbm1tL2h1Z2V0bGJfY21hLmM6MjgzOlx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxubW0vaHVnZXRsYl9jbWEuYzoyODQ6XHRcdGh1Z2V0bGJfY21hX29ubHkgPSBmYWxzZTtcbm1tL2h1Z2V0bGJfY21hLmMtMjg1LX1cbi0tXG5tbS9odWdldGxiX2NtYS5jPTI4Nz1ib29sIF9faW5pdCBodWdldGxiX2Vhcmx5X2NtYShzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjkxLVxubW0vaHVnZXRsYl9jbWEuYzoyOTI6XHRyZXR1cm4gaHN0YXRlX2lzX2dpZ2FudGljKGgpIFx1MDAyNlx1MDAyNiBodWdldGxiX2NtYV9vbmx5O1xubW0vaHVnZXRsYl9jbWEuYy0yOTMtfVxuLS1cbm1tL2h1Z2V0bGJfY21hLmgtNS0jaWZkZWYgQ09ORklHX0NNQVxubW0vaHVnZXRsYl9jbWEuaDo2OnZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9odWdldGxiX2NtYS5oOjc6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbm1tL2h1Z2V0bGJfY21hLmgtOC1cdFx0XHRcdCAgICAgIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKTtcbm1tL2h1Z2V0bGJfY21hLmg6OTpzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgKmh1Z2V0bGJfY21hX2FsbG9jX2Jvb3RtZW0oc3RydWN0IGhzdGF0ZSAqaCwgaW50ICpuaWQsXG5tbS9odWdldGxiX2NtYS5oLTEwLVx0XHRcdFx0XHRcdCAgICBib29sIG5vZGVfZXhhY3QpO1xubW0vaHVnZXRsYl9jbWEuaDoxMTpib29sIGh1Z2V0bGJfY21hX2V4Y2x1c2l2ZV9hbGxvYyh2b2lkKTtcbm1tL2h1Z2V0bGJfY21hLmg6MTI6dW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV90b3RhbF9zaXplKHZvaWQpO1xubW0vaHVnZXRsYl9jbWEuaDoxMzp2b2lkIGh1Z2V0bGJfY21hX3ZhbGlkYXRlX3BhcmFtcyh2b2lkKTtcbm1tL2h1Z2V0bGJfY21hLmgtMTQtYm9vbCBodWdldGxiX2Vhcmx5X2NtYShzdHJ1Y3QgaHN0YXRlICpoKTtcbm1tL2h1Z2V0bGJfY21hLmgtMTUtI2Vsc2Vcbm1tL2h1Z2V0bGJfY21hLmg6MTY6c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9odWdldGxiX2NtYS5oLTE3LXtcbi0tXG5tbS9odWdldGxiX2NtYS5oLTE5LVxubW0vaHVnZXRsYl9jbWEuaDoyMDpzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlcixcbm1tL2h1Z2V0bGJfY21hLmgtMjEtXHRcdGdmcF90IGdmcF9tYXNrLFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4tLVxubW0vaHVnZXRsYl9jbWEuaD0yNj1zdGF0aWMgaW5saW5lXG5tbS9odWdldGxiX2NtYS5oOjI3OnN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqaHVnZXRsYl9jbWFfYWxsb2NfYm9vdG1lbShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgKm5pZCxcbm1tL2h1Z2V0bGJfY21hLmgtMjgtXHRcdFx0XHRcdFx0ICAgIGJvb2wgbm9kZV9leGFjdClcbi0tXG5tbS9odWdldGxiX2NtYS5oLTMyLVxubW0vaHVnZXRsYl9jbWEuaDozMzpzdGF0aWMgaW5saW5lIGJvb2wgaHVnZXRsYl9jbWFfZXhjbHVzaXZlX2FsbG9jKHZvaWQpXG5tbS9odWdldGxiX2NtYS5oLTM0LXtcbi0tXG5tbS9odWdldGxiX2NtYS5oLTM3LVxubW0vaHVnZXRsYl9jbWEuaDozODpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9jbWFfdG90YWxfc2l6ZSh2b2lkKVxubW0vaHVnZXRsYl9jbWEuaC0zOS17XG4tLVxubW0vaHVnZXRsYl9jbWEuaC00Mi1cbm1tL2h1Z2V0bGJfY21hLmg6NDM6c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY21hX3ZhbGlkYXRlX3BhcmFtcyh2b2lkKVxubW0vaHVnZXRsYl9jbWEuaC00NC17XG4tLVxubW0vbW1faW5pdC5jPTI2OTU9dm9pZCBfX2luaXQgbW1fY29yZV9pbml0X2Vhcmx5KHZvaWQpXG5tbS9tbV9pbml0LmMtMjY5Ni17XG5tbS9tbV9pbml0LmM6MjY5NzpcdGh1Z2V0bGJfY21hX3Jlc2VydmUoKTtcbm1tL21tX2luaXQuYy0yNjk4LVx0aHVnZXRsYl9ib290bWVtX2FsbG9jKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzcxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENvbXBpbGF0aW9uIFJlcXVpcmVtZW50cyBmb3IgYGh1Z2V0bGJfY21hLmNgKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBgaHVnZXRsYl9jbWEuY2AgZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpdCB3YXMgc2ltcGx5IGEgbWF0dGVyIG9mIGBDT05GSUdfQ01BYCBhbmQgYENPTkZJR19IVUdFVExCRlNgIGJvdGggYmVpbmcgZW5hYmxlZC4gQnV0IGxldCYjMzk7cyB2ZXJpZnkuIFJpZ2h0LCBsZXQgbWUgbG9vayBhdCB0aGUgYG1tL01ha2VmaWxlYCBhbmQgY29uZmlybS4gQWgsIHRoZXJlIGl0IGlzOgoKYGBgCmlmZGVmIENPTkZJR19DTUEKb2JqLSQoQ09ORklHX0hVR0VUTEJGUykgJiM0Mzs9IGh1Z2V0bGJfY21hLm8KZW5kaWYKYGBgCgpZZXAsIGFzIEkgc3VzcGVjdGVkLiBXZSBkZWZpbml0ZWx5IG5lZWQgKmJvdGgqIGBDT05GSUdfQ01BYCBhbmQgYENPTkZJR19IVUdFVExCRlNgIHRvIGJlIGVuYWJsZWQgZm9yIGBodWdldGxiX2NtYS5vYCB0byBiZSBidWlsdC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4KCkFuZCBub3cgSSB3YW50IHRvIHRlc3QgY3B1c2V0IGludGVyYWN0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBuZWVkIGBDT05GSUdfQ1BVU0VUU2AgZW5hYmxlZCBmb3IgdGhhdC4gSSBzaG91bGQgY29uZmlybSB3aGVyZSBJIGNhbiBmaW5kIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9ucyBhc3NvY2lhdGVkIHdpdGggQ1BVIHNldCBvcGVyYXRpb25zLiBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGZvciBgcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW5gIGluIGBpbmNsdWRlL2xpbnV4L2NwdXNldC5oYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9jcHVzZXQuaD0yMT1leHRlcm4gYm9vbCBsb2NrZGVwX2lzX2NwdXNldF9oZWxkKHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjYtICogU3RhdGljIGJyYW5jaCByZXdyaXRlcyBjYW4gaGFwcGVuIGluIGFuIGFyYml0cmFyeSBvcmRlciBmb3IgYSBnaXZlblxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoyNzogKiBrZXkuIEluIGNvZGUgcGF0aHMgd2hlcmUgd2UgbmVlZCB0byBsb29wIHdpdGggcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKSBhbmRcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjgtICogcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoKSB0byBnZXQgYSBjb25zaXN0ZW50IHZpZXcgb2YgbWVtc19hbGxvd2VkLCB3ZSBuZWVkXG4tLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaD0xMzU9ZXh0ZXJuIHZvaWQgY3B1c2V0X3Jlc2V0X3NjaGVkX2RvbWFpbnModm9pZCk7XG4tLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xMzctLypcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MTM4OiAqIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luIGlzIHJlcXVpcmVkIHdoZW4gbWFraW5nIGRlY2lzaW9ucyBpbnZvbHZpbmdcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTM5LSAqIG1lbXNfYWxsb3dlZCBzdWNoIGFzIGR1cmluZyBwYWdlIGFsbG9jYXRpb24uIG1lbXNfYWxsb3dlZCBjYW4gYmUgdXBkYXRlZCBpblxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNDAtICogcGFyYWxsZWwgYW5kIGRlcGVuZGluZyBvbiB0aGUgbmV3IHZhbHVlIGFuIG9wZXJhdGlvbiBjYW4gZmFpbCBwb3RlbnRpYWxseVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoxNDE6ICogY2F1c2luZyBwcm9jZXNzIGZhaWx1cmUuIEEgcmV0cnkgbG9vcCB3aXRoIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luIGFuZFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNDItICogcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkgcHJldmVudHMgdGhlc2UgYXJ0aWZpY2lhbCBmYWlsdXJlcy5cbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTQzLSAqL1xuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoxNDQ6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4odm9pZClcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTQ1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTE1My0gKiBJZiB0aGlzIHJldHVybnMgdHJ1ZSwgdGhlIG9wZXJhdGlvbiB0aGF0IHRvb2sgcGxhY2UgYWZ0ZXJcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MTU0OiAqIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luIG1heSBoYXZlIGZhaWxlZCBhcnRpZmljaWFsbHkgZHVlIHRvIGEgY29uY3VycmVudFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNTUtICogdXBkYXRlIG9mIG1lbXNfYWxsb3dlZC4gSXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byByZXRyeSB0aGUgb3BlcmF0aW9uIGlmXG4tLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaD0yODg9c3RhdGljIGlubGluZSB2b2lkIHNldF9tZW1zX2FsbG93ZWQobm9kZW1hc2tfdCBub2RlbWFzaylcbi0tXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTI5MS1cbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MjkyOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKHZvaWQpXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTI5My17XG4tLVxubW0vZmlsZW1hcC5jPTk5OT1zdHJ1Y3QgZm9saW8gKmZpbGVtYXBfYWxsb2NfZm9saW9fbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL2ZpbGVtYXAuYy0xMDExLVx0XHRkbyB7XG5tbS9maWxlbWFwLmM6MTAxMjpcdFx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vZmlsZW1hcC5jLTEwMTMtXHRcdFx0biA9IGNwdXNldF9tZW1fc3ByZWFkX25vZGUoKTtcbi0tXG5tbS9odWdldGxiLmM9MTI3NT1zdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYi5jLTEyOTAtcmV0cnlfY3B1c2V0OlxubW0vaHVnZXRsYi5jOjEyOTE6XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vaHVnZXRsYi5jLTEyOTItXHRmb3JfZWFjaF96b25lX3pvbmVsaXN0X25vZGVtYXNrKHpvbmUsIHosIHpvbmVsaXN0LCBnZnBfem9uZShnZnBfbWFzayksIG5tYXNrKSB7XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0yOD1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtNDEtXHRpZiAoIW5vZGVtYXNrKSB7XG5tbS9odWdldGxiX2NtYS5jOjQyOlx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vaHVnZXRsYl9jbWEuYy00My1cdFx0bm1hc2sgPSBcdTAwMjZjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7XG4tLVxubW0vbWVtcG9saWN5LmM9MjEwMD1zdGF0aWMgdW5zaWduZWQgaW50IHdlaWdodGVkX2ludGVybGVhdmVfbm9kZXMoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5KVxuLS1cbm1tL21lbXBvbGljeS5jLTIxMDYtXHQvKiB0byBwcmV2ZW50IG1pc2NvdW50IHVzZSB0c2stXHUwMDNlbWVtc19hbGxvd2VkX3NlcSB0byBkZXRlY3QgcmViaW5kICovXG5tbS9tZW1wb2xpY3kuYzoyMTA3Olx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcbm1tL21lbXBvbGljeS5jLTIxMDgtXHRub2RlID0gY3VycmVudC1cdTAwM2VpbF9wcmV2O1xuLS1cbm1tL21lbXBvbGljeS5jPTIxMjM9c3RhdGljIHVuc2lnbmVkIGludCBpbnRlcmxlYXZlX25vZGVzKHN0cnVjdCBtZW1wb2xpY3kgKnBvbGljeSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMTI5LVx0ZG8ge1xubW0vbWVtcG9saWN5LmM6MjEzMDpcdFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcbm1tL21lbXBvbGljeS5jLTIxMzEtXHRcdG5pZCA9IG5leHRfbm9kZV9pbihjdXJyZW50LVx1MDAzZWlsX3ByZXYsIHBvbGljeS1cdTAwM2Vub2Rlcyk7XG4tLVxubW0vbWVtcG9saWN5LmM9MjYzMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2NTUtXHRkbyB7XG5tbS9tZW1wb2xpY3kuYzoyNjU2Olx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vbWVtcG9saWN5LmMtMjY1Ny1cdFx0bm5vZGVzID0gcmVhZF9vbmNlX3BvbGljeV9ub2RlbWFzayhwb2wsIFx1MDAyNm5vZGVzKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDcyNT1fX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ3NjQtXHRjb21wYWN0X3ByaW9yaXR5ID0gREVGX0NPTVBBQ1RfUFJJT1JJVFk7XG5tbS9wYWdlX2FsbG9jLmM6NDc2NTpcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG5tbS9wYWdlX2FsbG9jLmMtNDc2Ni1cdHpvbmVsaXN0X2l0ZXJfY29va2llID0gem9uZWxpc3RfaXRlcl9iZWdpbigpO1xuLS1cbm1tL3Nob3dfbWVtLmM9MTE5PXN0YXRpYyBib29sIHNob3dfbWVtX25vZGVfc2tpcCh1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL3Nob3dfbWVtLmMtMTI1LVx0ICogbm8gbm9kZSBtYXNrIC0gYWthIGltcGxpY2l0IG1lbW9yeSBudW1hIHBvbGljeS4gRG8gbm90IGJvdGhlciB3aXRoXG5tbS9zaG93X21lbS5jOjEyNjpcdCAqIHRoZSBzeW5jaHJvbml6YXRpb24gLSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbiAtIGJlY2F1c2Ugd2UgZG8gbm90XG5tbS9zaG93X21lbS5jLTEyNy1cdCAqIGhhdmUgdG8gYmUgcHJlY2lzZSBoZXJlLlxuLS1cbm1tL3NsdWIuYz0zODYzPXN0YXRpYyB2b2lkICpnZXRfZnJvbV9hbnlfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuLS1cbm1tL3NsdWIuYy0zODk3LVx0XHQvKlxubW0vc2x1Yi5jOjM4OTg6XHRcdCAqIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCkgYWNjZXNzZXMgY3VycmVudC1cdTAwM2VtZW1zX2FsbG93ZWRfc2VxLFxubW0vc2x1Yi5jLTM4OTktXHRcdCAqIGEgc2VxY291bnRfc3BpbmxvY2tfdCB0aGF0IGlzIG5vdCBOTUktc2FmZS4gRG8gbm90IGFjY2Vzc1xuLS1cbm1tL3NsdWIuYy0zOTAzLVx0XHRpZiAoYWxsb3dfc3Bpbilcbm1tL3NsdWIuYzozOTA0Olx0XHRcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG5tbS9zbHViLmMtMzkwNS1cbi0tXG5tbS9zbHViLmM9NzIzMT1fX3JlZmlsbF9vYmplY3RzX2FueShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcbi0tXG5tbS9zbHViLmMtNzI0Ni1cdGRvIHtcbm1tL3NsdWIuYzo3MjQ3Olx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xubW0vc2x1Yi5jLTcyNDgtXHRcdHpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChtZW1wb2xpY3lfc2xhYl9ub2RlKCksIGdmcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDc3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB6ZXJvaW5nIGluIG9uIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBUaGF0IGZ1bmN0aW9uIGlzIGNydWNpYWw7IGl0JiMzOTtzIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50IGluIGBtbS9odWdldGxiX2NtYS5jYCwgc28gaXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTtyZSBmb2N1c2luZyBvdXIgYXR0ZW50aW9uIHRoZXJlLgoKV2UmIzM5O2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gYSBmZXcgY29uZmlnIG9wdGlvbnMsIG9mIGNvdXJzZS4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQ09ORklHX0NNQWAsIGBDT05GSUdfSFVHRVRMQkZTYCwgYW5kIGBDT05GSUdfQ1BVU0VUU2AgLSB0aG9zZSB3aWxsIGNlcnRhaW5seSBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yLgoKTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjazogc2luY2Ugd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBodWdldGxiIHBhZ2VzLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyB0aGUgY29ycmVjdCBjb25maWcgc2V0dGluZyB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbiwgYW5kIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgcmVsYXRlZCBzZXR0aW5ncyB0aGF0IGNvbWUgaW50byBwbGF5IGhlcmUuIFdlIGRvbiYjMzk7dCB3YW50IHRvIG1pc3MgYW55dGhpbmcgcmVsYXRlZCB0byB0aGUgYmFzZSBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjQ5LVxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1MDkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBc3Nlc3NpbmcgSHVnZSBQYWdlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGluaXRpYWwgcHJvbXB0IGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLCBpcyB0byB6ZXJvIGluIG9uIGBjb25maWcgSFVHRVRMQl9QQUdFYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkIHdoZW4gaXQgY29tZXMgdG8gaHVnZSBwYWdlIGltcGxlbWVudGF0aW9uIGF0IGEga2VybmVsIGxldmVsLiBUaGlzIGlzIHRoZSBseW5jaHBpbiDigJMgdGhlIG1hc3RlciBzd2l0Y2ggaWYgeW91IHdpbGwg4oCTIGZvciB3aGV0aGVyIG9yIG5vdCBodWdlIHBhZ2VzIGFyZSBldmVuIGVuYWJsZWQgYW5kIGhvdyB0aGUgc3lzdGVtIGV2ZW4gbG9va3MgZm9yIGxhcmdlIG1lbW9yeSBibG9ja3MuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYW55IHNlcmlvdXMgaW52ZXN0aWdhdGlvbiwgYmUgaXQgdHJvdWJsZXNob290aW5nIHBlcmZvcm1hbmNlIGlzc3VlcywgdmVyaWZ5aW5nIGEgc2V0dXAsIG9yIGNvbmZpcm1pbmcgYSBidWlsZCBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgaXRzIHN0YXRlIHRvIGRldGVybWluZSBuZXh0IHN0ZXBzLiBJJiMzOTttIGdvaW5nIHRvIGRldGVybWluZSB3aGF0IHRoYXQgbWVhbnMgZm9yIHBlcmZvcm1hbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQl9QQUdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvc2gvbW0vS2NvbmZpZz0xNTg9Y2hvaWNlXG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE2My1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjQ6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0S1xuYXJjaC9zaC9tbS9LY29uZmlnLTE2NS1cdGJvb2wgXCYjMzQ7NjRrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjctXG5hcmNoL3NoL21tL0tjb25maWc6MTY4OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8yNTZLXG5hcmNoL3NoL21tL0tjb25maWctMTY5LVx0Ym9vbCBcJiMzNDsyNTZrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzEtXG5hcmNoL3NoL21tL0tjb25maWc6MTcyOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0OzFNQlwmIzM0O1xuYXJjaC9zaC9tbS9LY29uZmlnLTE3NC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE3Ni1cdGJvb2wgXCYjMzQ7NE1CXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE3OC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xODAtXHRib29sIFwmIzM0OzY0TUJcJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG5mcy9LY29uZmlnLTI2NC1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI3Mi1cbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcbmZzL0tjb25maWctMjc0LVx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNzYtXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbmZzL0tjb25maWctMjc4LVx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG4tLVxubW0vS2NvbmZpZz03MDY9Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTcwOC1cbm1tL0tjb25maWc6NzA5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxubW0vS2NvbmZpZy03MTAtXHRkZWZfYm9vbCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzAzCgkJCQkJCQlvdXRwdXQ6IDE2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGRlbGl2ZXJlZCBhcyBpZiBJJiMzOTttIHJlZmxlY3Rpbmcgb24gaXQgbXlzZWxmOgoKKipJbml0aWFsIENvbmZpZ3VyYXRpb24gQ2hlY2sqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIG1haW4gdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgdGhhdCBgSFVHRVRMQkZTYCBpcyBzZXQgdXAgY29ycmVjdGx5LiBUaGF0JiMzOTtzIHRoZSBjb3JlLiBCZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBpdCYjMzk7cyB3b3J0aCBhIHF1aWNrIGxvb2sgYXQgYGNvbmZpZyBDTUFgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9uIGlzIHNldCB1cCB0b28uIEl0IG1ha2VzIHNlbnNlIHRvIGNoZWNrIGJvdGggb2YgdGhlc2UgdG9nZXRoZXIgYXMgdGhleSBhcmUgYm90aCBhYm91dCBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDTUEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2RtYS9LY29uZmlnPTE3Mz1jb25maWcgRE1BX05VTUFfQ01BXG4tLVxua2VybmVsL2RtYS9LY29uZmlnLTE4NS1cbmtlcm5lbC9kbWEvS2NvbmZpZzoxODY6Y29uZmlnIENNQV9TSVpFX1BFUk5VTUFcbmtlcm5lbC9kbWEvS2NvbmZpZy0xODctXHRib29sIFwmIzM0O0RlZmF1bHQgQ01BIGFyZWEgcGVyIE5VTUEgbm9kZVwmIzM0O1xuLS1cbmtlcm5lbC9kbWEvS2NvbmZpZz0xOTY9Y29tbWVudCBcJiMzNDtEZWZhdWx0IGNvbnRpZ3VvdXMgbWVtb3J5IGFyZWEgc2l6ZTpcJiMzNDtcbmtlcm5lbC9kbWEvS2NvbmZpZy0xOTctXG5rZXJuZWwvZG1hL0tjb25maWc6MTk4OmNvbmZpZyBDTUFfU0laRV9NQllURVNcbmtlcm5lbC9kbWEvS2NvbmZpZy0xOTktXHRpbnQgXCYjMzQ7U2l6ZSBpbiBNZWdhIEJ5dGVzXCYjMzQ7XG4tLVxua2VybmVsL2RtYS9LY29uZmlnLTIwOC1cbmtlcm5lbC9kbWEvS2NvbmZpZzoyMDk6Y29uZmlnIENNQV9TSVpFX1BFUkNFTlRBR0Vcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMTAtXHRpbnQgXCYjMzQ7UGVyY2VudGFnZSBvZiB0b3RhbCBtZW1vcnlcJiMzNDtcbi0tXG5rZXJuZWwvZG1hL0tjb25maWc9MjIwPWNob2ljZVxuLS1cbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjMtXG5rZXJuZWwvZG1hL0tjb25maWc6MjI0OmNvbmZpZyBDTUFfU0laRV9TRUxfTUJZVEVTXG5rZXJuZWwvZG1hL0tjb25maWctMjI1LVx0Ym9vbCBcJiMzNDtVc2UgbWVnYSBieXRlcyB2YWx1ZSBvbmx5XCYjMzQ7XG5rZXJuZWwvZG1hL0tjb25maWctMjI2LVxua2VybmVsL2RtYS9LY29uZmlnOjIyNzpjb25maWcgQ01BX1NJWkVfU0VMX1BFUkNFTlRBR0Vcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjgtXHRib29sIFwmIzM0O1VzZSBwZXJjZW50YWdlIHZhbHVlIG9ubHlcJiMzNDtcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjktXG5rZXJuZWwvZG1hL0tjb25maWc6MjMwOmNvbmZpZyBDTUFfU0laRV9TRUxfTUlOXG5rZXJuZWwvZG1hL0tjb25maWctMjMxLVx0Ym9vbCBcJiMzNDtVc2UgbG93ZXIgdmFsdWUgKG1pbmltdW0pXCYjMzQ7XG5rZXJuZWwvZG1hL0tjb25maWctMjMyLVxua2VybmVsL2RtYS9LY29uZmlnOjIzMzpjb25maWcgQ01BX1NJWkVfU0VMX01BWFxua2VybmVsL2RtYS9LY29uZmlnLTIzNC1cdGJvb2wgXCYjMzQ7VXNlIGhpZ2hlciB2YWx1ZSAobWF4aW11bSlcJiMzNDtcbi0tXG5rZXJuZWwvZG1hL0tjb25maWc9MjM2PWVuZGNob2ljZVxua2VybmVsL2RtYS9LY29uZmlnLTIzNy1cbmtlcm5lbC9kbWEvS2NvbmZpZzoyMzg6Y29uZmlnIENNQV9BTElHTk1FTlRcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzktXHRpbnQgXCYjMzQ7TWF4aW11bSBQQUdFX1NJWkUgb3JkZXIgb2YgYWxpZ25tZW50IGZvciBjb250aWd1b3VzIGJ1ZmZlcnNcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTEwNjQ9Y29uZmlnIEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXG4tLVxubW0vS2NvbmZpZy0xMDY2LVxubW0vS2NvbmZpZzoxMDY3OmNvbmZpZyBDTUFcbm1tL0tjb25maWctMTA2OC1cdGJvb2wgXCYjMzQ7Q29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDgxLVxubW0vS2NvbmZpZzoxMDgyOmNvbmZpZyBDTUFfREVCVUdGU1xubW0vS2NvbmZpZy0xMDgzLVx0Ym9vbCBcJiMzNDtDTUEgZGVidWdmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwODctXG5tbS9LY29uZmlnOjEwODg6Y29uZmlnIENNQV9TWVNGU1xubW0vS2NvbmZpZy0xMDg5LVx0Ym9vbCBcJiMzNDtDTUEgaW5mb3JtYXRpb24gdGhyb3VnaCBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwOTQtXG5tbS9LY29uZmlnOjEwOTU6Y29uZmlnIENNQV9BUkVBU1xubW0vS2NvbmZpZy0xMDk2LVx0aW50IFwmIzM0O01heGltdW0gY291bnQgb2YgdGhlIENNQSBhcmVhc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIxOAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiDigJMgQSBRdWljayBDaGVjayoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHN0YXJ0aW5nIHdpdGggYENPTkZJR19DTUFgLiBUaGF0JiMzOTtzIG91ciBmb2NhbCBwb2ludC4gTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3Mgd2hlcmUgd2UmIzM5O3JlIGF0IHdpdGggdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgc2V0dGluZ3Mgb24gdGhhdCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlci4KCkFuZCwgb2YgY291cnNlLCB0aGF0IGFsd2F5cyBsZWFkcyBtZSB0byBjb25zaWRlciBgY29uZmlnIENQVVNFVFNgLiBBIHF1aWNrIHJldmlldyBvZiB0aG9zZSBzZXR0aW5ncyB3aWxsIGJlIGltcG9ydGFudCB0byBlbnN1cmluZyBldmVyeXRoaW5nIGlzIHNldCB1cCBjb3JyZWN0bHkuIEdvdHRhIG1ha2Ugc3VyZSB0aG9zZSB0d28gYXJlIGNvbnNpc3RlbnQgd2l0aCBlYWNoIG90aGVyLiBUaGlzIGlzIGFsbCBwcmV0dHkgc3RhbmRhcmQsIGJ1dCB3b3J0aCBkb3VibGUtY2hlY2tpbmcgbm9uZXRoZWxlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDUFVTRVRTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMjg0PWNvbmZpZyBDR1JPVVBfSFVHRVRMQlxuLS1cbmluaXQvS2NvbmZpZy0xMjk5LVxuaW5pdC9LY29uZmlnOjEzMDA6Y29uZmlnIENQVVNFVFNcbmluaXQvS2NvbmZpZy0xMzAxLVx0Ym9vbCBcJiMzNDtDcHVzZXQgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMzEyLVxuaW5pdC9LY29uZmlnOjEzMTM6Y29uZmlnIENQVVNFVFNfVjFcbmluaXQvS2NvbmZpZy0xMzE0LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIGNwdXNldHMgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzUzNAoJCQkJCQkJb3V0cHV0OiAxMjMKCQkJCQkJCXRob3VnaHRzOiAzNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmdW5jdGlvbiBvZiBpbnRlcmVzdCBpcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gVGhlIGNvbmZpZywgYXMgZXhwZWN0ZWQsIHNlZW1zIHRvIGJlIHRpZWQgdG8gYENPTkZJR19DUFVTRVRTYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uLgoKSXQmIzM5O3MgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uLCByaWdodD8gSSBpbW1lZGlhdGVseSB3YW50IHRvIGNvbmZpcm0gaXRzIHJlYWNoYWJpbGl0eSBhbmQgdGVzdGFiaWxpdHkuIFRoZSBwYXRjaCBmb2N1c2VzICpzb2xlbHkqIG9uIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLCB3aGljaCBzaW1wbGlmaWVzIG15IGluaXRpYWwgYXNzZXNzbWVudDsgSSBkb24mIzM5O3QgaGF2ZSB0byBjaGFzZSBkb3duIG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9ucy4gVGhlIG1vZGlmaWNhdGlvbiB0byBgbW0vaHVnZXRsYl9jbWEuY2AgY29uZmlybXMgdGhhdCB0aGUgcmVsZXZhbnQgY29uZmlncyBoZXJlIGFyZSBgQ09ORklHX0NNQWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYC4KCk5vdywgaXMgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZXhwb3J0ZWQgb3IgZGlyZWN0bHkgYWNjZXNzaWJsZSB2aWEgYSBzeXNjYWxsPyBEaWdnaW5nIGEgYml0LCBpdCBsb29rcyBsaWtlIGl0ICppcyogcmVhY2hhYmxlIGR1cmluZyBnaWdhbnRpYyBodWdlIHBhZ2UgYWxsb2NhdGlvbi4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgaHVnZSBwYWdlcyBhbGxvY2F0ZWQgdmlhIGBtbWFwYCB3aXRoIGBNQVBfSFVHRVRMQmAgYW5kIGEgKmdpZ2FudGljKiBwYWdlIHNpemUsIG9yIHRocm91Z2ggYHN5c2ZzYCBieSBtYW5pcHVsYXRpbmcgYG5yX2h1Z2VwYWdlc2AuIEJpbmdvLCB0aGlzIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSEKCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aG9zZSBrZXkgY29uZmlndXJhdGlvbnM6IGBIVUdFVExCRlNgLCBgQ01BYCwgYW5kIGBDUFVTRVRTYC4KCkEgcXVpY2sgY2hlY2sgY29uZmlybXMgaXQmIzM5O3Mgbm90IGEgc3RhdGljIGZ1bmN0aW9uLgpgYGBjCnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssCgkJaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spCmBgYAoKQWxyaWdodCwgdGhhdCYjMzk7cyBlbm91Z2ggZm9yIG15IGluaXRpYWwgcGFzcy4gSSYjMzk7bSByZWFkeSB0byByZXBvcnQgbXkgZmluZGluZ3MgdXNpbmcgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7Q1BVU0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB0byByZXNwZWN0IGNwdXNldCBjb25zdHJhaW50cyB3aGVuIGBub2RlbWFza2AgaXMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgKEh1Z2VUTEIgJiM0MzsgQ01BKS4gVGhlIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2Ugd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGh1Z2UgcGFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7Q1BVU0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB0byByZXNwZWN0IGNwdXNldCBjb25zdHJhaW50cyB3aGVuIGBub2RlbWFza2AgaXMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgKEh1Z2VUTEIgJiM0MzsgQ01BKS4gVGhlIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2Ugd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGh1Z2UgcGFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2Agd2hlbiBgbm9kZW1hc2tgIGlzIE5VTEwgYnkgZmFsbGluZyBiYWNrIHRvIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgIGFuZCBpbnRyb2R1Y2luZyBhIHJldHJ5IGxvb3AuIFRoZSBsb2NhbCB2YXJpYWJsZSBgY3B1c2V0X21lbXNfY29va2llYCBpcyBvbmx5IGluaXRpYWxpemVkIHdoZW4gYG5vZGVtYXNrYCBpcyBOVUxMLCBidXQgZHVlIHRvIHNob3J0LWNpcmN1aXQgZXZhbHVhdGlvbiBpbiB0aGUgY29uZGl0aW9uIGAhbm9kZW1hc2sgXHUwMDI2XHUwMDI2IHVubGlrZWx5KHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpYCwgaXQgaXMgbmV2ZXIgcmVhZCB1bmluaXRpYWxpemVkLiBUaGUgYnVnIGJlaW5nIGZpeGVkIGlzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgYW5kIEtBU0FOLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgdG8gdXNlciBzcGFjZSBvciB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkNGNjYjQwNDA0OTFkMGE3YTcwNTAyMzA0MWI5ZTFhYzkzZGFhYzhmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMDU6NTg6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdldGxiX2NtYS5jIGIvbW0vaHVnZXRsYl9jbWEuYwppbmRleCAzOTM0NGQ2Yzc4ZDg0Li4zZTIyMTYxNjg2ZDJmIDEwMDY0NAotLS0gYS9tbS9odWdldGxiX2NtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGJfY21hLmMKQEAgLTMsNiAmIzQzOzMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY21hLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY3B1c2V0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW1faW5saW5lLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vcGFnZS5oJmd0OwpAQCAtMzAsMTUgJiM0MzszMSwyNSBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLAogCWludCBub2RlOwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwomIzQzOwljb25zdCBub2RlbWFza190ICpubWFzazsKJiM0MzsJdW5zaWduZWQgaW50IGNwdXNldF9tZW1zX2Nvb2tpZTsKIAogCWlmICghaHVnZXRsYl9jbWFfc2l6ZSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoaHVnZXRsYl9jbWFbbmlkXSkKJiM0MztyZXRyeV9jcHVzZXQ6CiYjNDM7CWlmICghbm9kZW1hc2spIHsKJiM0MzsJCWNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7CiYjNDM7CQlubWFzayA9ICZhbXA7Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkOwomIzQzOwl9IGVsc2UgewomIzQzOwkJbm1hc2sgPSBub2RlbWFzazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaHVnZXRsYl9jbWFbbmlkXSAmYW1wOyZhbXA7IG5vZGVfaXNzZXQobmlkLCAqbm1hc2spKQogCQlwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7CiAKIAlpZiAoIXBhZ2UgJmFtcDsmYW1wOyAhKGdmcF9tYXNrICZhbXA7IF9fR0ZQX1RISVNOT0RFKSkgewotCQlmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgKm5vZGVtYXNrKSB7CiYjNDM7CQlmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgKm5tYXNrKSB7CiAJCQlpZiAobm9kZSA9PSBuaWQgfHwgIWh1Z2V0bGJfY21hW25vZGVdKQogCQkJCWNvbnRpbnVlOwogCkBAIC00OCw4ICYjNDM7NTksMTIgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywKIAkJfQogCX0KIAotCWlmICghcGFnZSkKJiM0MzsJaWYgKCFwYWdlKSB7CiYjNDM7CQlpZiAoIW5vZGVtYXNrICZhbXA7JmFtcDsKJiM0MzsJCSAgICB1bmxpa2VseShyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKSkKJiM0MzsJCQlnb3RvIHJldHJ5X2NwdXNldDsKIAkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KIAogCWZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKIAlmb2xpb19zZXRfaHVnZXRsYl9jbWEoZm9saW8pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzNgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDExNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdldGxiIENNQSBBbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgbW9kaWZpZXMgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgaW4gYG1tL2h1Z2V0bGJfY21hLmNgLiBJdCYjMzk7cyBhZGRpbmcgY3B1c2V0IG5vZGVtYXNrIGhhbmRsaW5nLCB3aGljaCBpcyBhIGtleSBhcmVhIHRvIGdldCByaWdodC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIG1lbW9yeSBzYWZldHkg4oCTIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLgoKUmlnaHQsIHNvIHRoZSBiYXNpYyBsb2dpYyBpcyB0aGF0IGlmIGBub2RlbWFza2AgaXMgTlVMTCwgd2UgdXNlIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgIGFuZCB0aGUgYHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKClgIC8gYHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KClgIG1hY2hpbmVyeS4gSWYgaXQmIzM5O3Mgbm90IE5VTEwsIHdlIHVzZSB0aGUgcHJvdmlkZWQgYG5vZGVtYXNrYC4gIFRoZSBjb2RlIGNoZWNrcyBgbm9kZV9pc3NldChuaWQsICpubWFzaylgIGJlZm9yZSBhbGxvY2F0aW5nLiBDcnVjaWFsbHksIHRoZSBsb29wIG5vdyBpdGVyYXRlcyB1c2luZyBgZm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsICpubWFzaylgIGluc3RlYWQgb2YganVzdCBgKm5vZGVtYXNrYC4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIGltcHJvdmVtZW50IHRvIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLgoKTm93LCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQgYWJvdXQgYGNwdXNldF9tZW1zX2Nvb2tpZWA/IEkgc2VlIGl0JiMzOTtzIGluaXRpYWxpemVkIGJ5IGByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpYCwgYW5kIGBubWFza2AgaXMgc2V0IHRvIGVpdGhlciB0aGUgY3VycmVudCBhbGxvd2VkIG1lbXMgb3IgdGhlIHByb3ZpZGVkIGBub2RlbWFza2AuIFRoZSBsb29wIHVzZXMgYCpubWFza2AsIHdoaWNoIHNlZW1zIGZpbmUuIEhvd2V2ZXIsIGlmIGBub2RlbWFza2AgKmlzbiYjMzk7dCogTlVMTCwgdGhlbiBgY3B1c2V0X21lbXNfY29va2llYCBsb29rcyB1bmluaXRpYWxpemVkLgoKQnV0IHRoZW4gSSBzZWUgdGhlIGNoZWNrOgpgYGBjCglpZiAoIXBhZ2UpIHsKCQlpZiAoIW5vZGVtYXNrICZhbXA7JmFtcDsKCQkgICAgdW5saWtlbHkocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSkpCgkJCWdvdG8gcmV0cnlfY3B1c2V0OwoJCXJldHVybiBOVUxMOwoJfQpgYGAKQWhhISBDcnVjaWFsbHksIHRoZSBjaGVjayBpcyBgIW5vZGVtYXNrICZhbXA7JmFtcDsgLi4uYC4gIEJlY2F1c2Ugb2YgQyYjMzk7cyBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24sIGlmIGBub2RlbWFza2AgaXMgKm5vdCogTlVMTCwgdGhlIGNvbmRpdGlvbiBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgYCZhbXA7JmFtcDtgIGlzbiYjMzk7dCBldmVuIGV4ZWN1dGVkLiAgVGhlcmVmb3JlLCB0aGUgdW5pbml0aWFsaXplZCBgY3B1c2V0X21lbXNfY29va2llYCBpcyAqbm90KiByZWFkLiBUaGF0JiMzOTtzIGEgcmVsaWVmIQoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O20gY2hlY2tpbmcgaWYgYHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5YCBpcyBkb2luZyBhbnl0aGluZyBmdW5reS4gSXQmIzM5O3MgZWl0aGVyIGFuIGlubGluZSBmdW5jdGlvbiBvciBhIG1hY3JvLiBFaXRoZXIgd2F5LCBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24gb2YgYCZhbXA7JmFtcDtgIG1lYW5zIGl0IGRvZXNuJiMzOTt0IGdldCBleGVjdXRlZCB3aGVuIHRoZSBsZWZ0IHNpZGUgaXMgZmFsc2UuICBTbyBubyBpc3N1ZXMgdGhlcmUuIEkmIzM5O20gYWxzbyBjb25maXJtaW5nIHRoYXQgYGNwdXNldF9tZW1zX2Nvb2tpZWAgaXMgbG9jYWwgYW5kIG5vdCBzb21lIGdsb2JhbCBzdHJ1Y3R1cmUgc2hhcmVkIG91dHNpZGUgdGhlIGxvY2FsIGZ1bmN0aW9uLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29udHJvbCBmbG93IGluIHRoZSByZXRyeS4gVGhlIGNoYW5nZWQgY29kZSBpczoKYGBgYwotCWlmIChodWdldGxiX2NtYVtuaWRdKQomIzQzO3JldHJ5X2NwdXNldDoKJiM0MzsJaWYgKCFub2RlbWFzaykgewomIzQzOwkJY3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTsKJiM0MzsJCW5tYXNrID0gJmFtcDtjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlubWFzayA9IG5vZGVtYXNrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChodWdldGxiX2NtYVtuaWRdICZhbXA7JmFtcDsgbm9kZV9pc3NldChuaWQsICpubWFzaykpCiAJCXBhZ2UgPSBjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKGh1Z2V0bGJfY21hW25pZF0sIG9yZGVyKTsKYGBgCgpCYXNpY2FsbHksIGlmIGBub2RlbWFza2AgaXMgTlVMTCwgd2UgdXNlIHRoZSBjdXJyZW50IGFsbG93ZWQgbWVtcy4gSWYgaXQmIzM5O3Mgbm90IE5VTEwsIHdlIHVzZSB0aGUgcHJvdmlkZWQgYG5vZGVtYXNrYC4gQW5kIHRoYXQgZ2V0cyBwYXNzZWQgdG8gYG5vZGVfaXNzZXQoKWAuICBOb3csIEkmIzM5O20gdGhpbmtpbmcgYmFjazogZGlkbiYjMzk7dCB0aGUgKm9yaWdpbmFsKiBjb2RlIGhhdmUgYW4gaXNzdWUgaWYgYG5vZGVtYXNrYCAqd2FzKiBOVUxMPyBBaCB5ZXMsIHRoZSBvbGQgY29kZSBoYWQgdGhpczoKCmBgYGMKCWlmIChodWdldGxiX2NtYVtuaWRdKQoJCXBhZ2UgPSBjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKGh1Z2V0bGJfY21hW25pZF0sIG9yZGVyKTsKCglpZiAoIXBhZ2UgJmFtcDsmYW1wOyAhKGdmcF9tYXNrICZhbXA7IF9fR0ZQX1RISVNOT0RFKSkgewoJCWZvcl9lYWNoX25vZGVfbWFzayhub2RlLCAqbm9kZW1hc2spIHsKYGBgCgpJZiBgbm9kZW1hc2tgICp3YXMqIE5VTEwsIHRoYXQgYCpub2RlbWFza2Agd291bGQgYmUgZGVyZWZlcmVuY2luZyBhIE5VTEwgcG9pbnRlciwgcmlnaHQ/ICBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgZml4aW5nIHRoYXQgY3JpdGljYWwgaXNzdWUhCgpUbyBjb25maXJtLCBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoaXMgaXMgdGhlIHNvbGUgY2FsbC1zaXRlLiBJIHdhbnQgdG8gYmUgMTAwJSBzdXJlIHRoaXMgaGFuZGxlcyBgbm9kZW1hc2tgIGNvcnJlY3RseSBpbiBhbGwgY2FzZXMuIEkmIzM5O2xsIHNlYXJjaCBmb3IgdGhlIGNhbGxlcnMgb2YgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTM2MD1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9odWdldGxiLmMtMTM2NC1cbm1tL2h1Z2V0bGIuYzoxMzY1Olx0Zm9saW8gPSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5vZGVtYXNrKTtcbm1tL2h1Z2V0bGIuYy0xMzY2LVx0aWYgKGZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MjI9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjctXG5tbS9odWdldGxiX2NtYS5jOjI4OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9odWdldGxiX2NtYS5jLTI5LVx0XHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9odWdldGxiX2NtYS5oPTY9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2h1Z2V0bGJfY21hLmg6NzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxubW0vaHVnZXRsYl9jbWEuaC04LVx0XHRcdFx0ICAgICAgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spO1xuLS1cbm1tL2h1Z2V0bGJfY21hLmg9MTY9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYl9jbWEuaC0xOS1cbm1tL2h1Z2V0bGJfY21hLmg6MjA6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsXG5tbS9odWdldGxiX2NtYS5oLTIxLVx0XHRnZnBfdCBnZnBfbWFzayxcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTIyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgRnVuY3Rpb24qKgoKUmlnaHQsIHRoZSBjYWxsZXIgaWRlbnRpZmllZCBpcyBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCwgYW5kIGl0JiMzOTtzIGNvbWluZyBmcm9tIGBtbS9odWdldGxiLmNgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgcmVsYXRlZCB0byBIdWdlVExCIGZ1bmN0aW9uYWxpdHkuIE9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgZG9pbmcgc3BlY2lmaWNhbGx5LiBUaGlzIGZ1bmN0aW9uIG5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBoYXMgdG8gZG8gd2l0aCBhbGxvY2F0aW5nIGEgdmVyeSBsYXJnZSBwYWdlLCBhbmQgaXQgaXMgcG90ZW50aWFsbHkgYWxsb2NhdGluZyB0aGUgbWVtb3J5IGluIGEgd2F5IHRoYXQgaXRzIGNvbnRlbnRzIGFyZSBmcm96ZW4uIFdlIG5lZWQgdG8gY2hlY2sgaXQgYW5kIGRpdmUgaW50byBpdHMgbG9naWMuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgaW50cmljYWNpZXMgb2YgSHVnZVRMQiBtYW5hZ2VtZW50LCBwYWdlIHRhYmxlIGludGVyYWN0aW9ucywgYW5kIHBvdGVudGlhbGx5IHNvbWUgc3BlY2lhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ3kgZm9yIHRoZXNlIGxhcmdlIHBhZ2VzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0xMzIwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTM1OS0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0NPTlRJR19BTExPQylcbm1tL2h1Z2V0bGIuYzoxMzYwOnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxubW0vaHVnZXRsYi5jLTEzNjEtXHRcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL2h1Z2V0bGIuYy0xMzc2LSNlbHNlIC8qICFDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRSB8fCAhQ09ORklHX0NPTlRJR19BTExPQyAqL1xubW0vaHVnZXRsYi5jOjEzNzc6c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsXG5tbS9odWdldGxiLmMtMTM3OC1cdFx0XHRcdFx0ICBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9odWdldGxiLmM9MTgzNj1zdGF0aWMgc3RydWN0IGZvbGlvICpvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTg0Ni1cdGlmIChvcmRlcl9pc19naWdhbnRpYyhvcmRlcikpXG5tbS9odWdldGxiLmM6MTg0NzpcdFx0Zm9saW8gPSBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5tYXNrKTtcbm1tL2h1Z2V0bGIuYy0xODQ4LVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzU5CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AgQ29kZSBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCwgYW5kIGl0IGNhbGxzIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIHdpdGggYG5tYXNrYC4gUmlnaHQsIGlmIGBubWFza2AgaXMgTlVMTCwgdGhlbiB0aGUgYG5vZGVtYXNrYCBwYXJhbWV0ZXIgcGFzc2VkIHRvIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIG11c3QgYWxzbyBiZSBOVUxMLiBIYW5nIG9uIGEgc2Vjb25kLCB0aGUgcGF0Y2ggZGVzY3JpcHRpb24gbWVudGlvbnMgYSBmaXggcmVsYXRlZCB0byBhIHBvdGVudGlhbGx5IE5VTEwgYG5vZGVtYXNrYCBjYXVzaW5nIGEgZGVyZWZlcmVuY2UuIEFoLCBpdCYjMzk7cyBhICYjMzQ7c3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsgZml4IGZvciBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSEKClRoZSBjcnVjaWFsIHBhcnQgaXMgdGhlIGBub2RlX2lzc2V0KG5pZCwgKm5tYXNrKWAgY2hlY2suIElmIGBub2RlbWFza2AgKmlzKiBOVUxMLCB0aGVuIGBubWFza2AgaXMgYXNzaWduZWQgdG8gYCZhbXA7Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkYCwgd2hpY2ggaXMgYSBjbGV2ZXIgd2F5IHRvIHByZXZlbnQgdGhlIGRyZWFkZWQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBTbywgdGhlIHBhdGNoIHNlZW1zIHRvIGhhdmUgYWRkcmVzc2VkIHRoZSBjb3JlIGlzc3VlLgoKTm93LCBkb2VzIHRoaXMgZml4IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcz8gU3BlY2lmaWNhbGx5LCBkb2VzIGl0IG9wZW4gdGhlIGRvb3IgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlPyBMZXQmIzM5O3Mgc2VlLi4ubm8sIGl0IHNlZW1zIHRoYXQgaWYgYG5vZGVtYXNrYCBpcyBOVUxMLCBgY3B1c2V0X21lbXNfY29va2llYCBnZXRzIGluaXRpYWxpemVkLiBBbmQgaWYgYG5vZGVtYXNrYCBpc24mIzM5O3QgTlVMTCwgdGhlbiBpdCBpcyB1bmluaXRpYWxpemVkLCBidXQgaXQmIzM5O3Mgbm90IGFjdHVhbGx5IHVzZWQgZHVlIHRvIHNob3J0LWNpcmN1aXRpbmcsIHNvIHRoYXQmIzM5O3MgZ29vZC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5YCBpc24mIzM5O3QgYSBtYWNybyB0aGF0IHVuY29uZGl0aW9uYWxseSBldmFsdWF0ZXMgaXRzIGFyZ3VtZW50cywgd2hpY2ggd291bGQgYmUgcHJvYmxlbWF0aWMuIEkmIzM5O2xsIGNoZWNrIGl0cyBkZWZpbml0aW9uIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQxMQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGByZWFkX21lbXNfYWxsb3dlZF9yZXRyeWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGByZWFkX21lbXNfYWxsb3dlZF9yZXRyeWAuIFRoZXJlJiMzOTtzIHByb2JhYmx5IGEgc3VidGxlIG51YW5jZSBpbiBpdHMgaW1wbGVtZW50YXRpb24gdGhhdCBJJiMzOTttIG92ZXJsb29raW5nLCBvciBwZXJoYXBzIGEgZGVwZW5kZW5jeSBvbiBvdGhlciBjb21wb25lbnRzIEkmIzM5O20gbm90IGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIGRlZmluaXRpb24uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSByZXRyeSBsb2dpYyBpdHNlbGYgLSB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciBhIHJldHJ5LCBob3cgbWFueSB0aW1lcyBkb2VzIGl0IGF0dGVtcHQsIGFuZCB3aGF0IGFyZSB0aGUgYmFja29mZiBzdHJhdGVnaWVzIGlmIGFueT8gQXJlIHRoZXJlIGFueSBzaWRlIGVmZmVjdHM/IEkgYWxzbyBuZWVkIHRvIHZlcmlmeSBpdCYjMzk7cyB0aHJlYWQgc2FmZSBhbmQgYW55IHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWFkX21lbXNfYWxsb3dlZF9yZXRyeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2NwdXNldC5oPTIxPWV4dGVybiBib29sIGxvY2tkZXBfaXNfY3B1c2V0X2hlbGQodm9pZCk7XG4tLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yNy0gKiBrZXkuIEluIGNvZGUgcGF0aHMgd2hlcmUgd2UgbmVlZCB0byBsb29wIHdpdGggcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKSBhbmRcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6Mjg6ICogcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoKSB0byBnZXQgYSBjb25zaXN0ZW50IHZpZXcgb2YgbWVtc19hbGxvd2VkLCB3ZSBuZWVkXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTI5LSAqIHRvIGVuc3VyZSB0aGF0IGJlZ2luKCkgYWx3YXlzIGdldHMgcmV3cml0dGVuIGJlZm9yZSByZXRyeSgpIGluIHRoZVxuLS1cbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg9MTM1PWV4dGVybiB2b2lkIGNwdXNldF9yZXNldF9zY2hlZF9kb21haW5zKHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTQxLSAqIGNhdXNpbmcgcHJvY2VzcyBmYWlsdXJlLiBBIHJldHJ5IGxvb3Agd2l0aCByZWFkX21lbXNfYWxsb3dlZF9iZWdpbiBhbmRcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MTQyOiAqIHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5IHByZXZlbnRzIHRoZXNlIGFydGlmaWNpYWwgZmFpbHVyZXMuXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTE0My0gKi9cbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg9MTQ0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNTctICovXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjE1ODpzdGF0aWMgaW5saW5lIGJvb2wgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkodW5zaWduZWQgaW50IHNlcSlcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTU5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oPTI5Mj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByZWFkX21lbXNfYWxsb3dlZF9iZWdpbih2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjk2LVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoyOTc6c3RhdGljIGlubGluZSBib29sIHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KHVuc2lnbmVkIGludCBzZXEpXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTI5OC17XG4tLVxubW0vZmlsZW1hcC5jPTk5OT1zdHJ1Y3QgZm9saW8gKmZpbGVtYXBfYWxsb2NfZm9saW9fbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL2ZpbGVtYXAuYy0xMDE0LVx0XHRcdGZvbGlvID0gX19mb2xpb19hbGxvY19ub2RlX25vcHJvZihnZnAsIG9yZGVyLCBuKTtcbm1tL2ZpbGVtYXAuYzoxMDE1Olx0XHR9IHdoaWxlICghZm9saW8gXHUwMDI2XHUwMDI2IHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpO1xubW0vZmlsZW1hcC5jLTEwMTYtXG4tLVxubW0vaHVnZXRsYi5jPTEyNzU9c3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL2h1Z2V0bGIuYy0xMzA4LVx0fVxubW0vaHVnZXRsYi5jOjEzMDk6XHRpZiAodW5saWtlbHkocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSkpXG5tbS9odWdldGxiLmMtMTMxMC1cdFx0Z290byByZXRyeV9jcHVzZXQ7XG4tLVxubW0vaHVnZXRsYl9jbWEuYz0yOD1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtNjMtXHRcdGlmICghbm9kZW1hc2sgXHUwMDI2XHUwMDI2XG5tbS9odWdldGxiX2NtYS5jOjY0Olx0XHQgICAgdW5saWtlbHkocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSkpXG5tbS9odWdldGxiX2NtYS5jLTY1LVx0XHRcdGdvdG8gcmV0cnlfY3B1c2V0O1xuLS1cbm1tL21lbXBvbGljeS5jPTIxMDA9c3RhdGljIHVuc2lnbmVkIGludCB3ZWlnaHRlZF9pbnRlcmxlYXZlX25vZGVzKHN0cnVjdCBtZW1wb2xpY3kgKnBvbGljeSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMTEwLVx0XHRub2RlID0gbmV4dF9ub2RlX2luKG5vZGUsIHBvbGljeS1cdTAwM2Vub2Rlcyk7XG5tbS9tZW1wb2xpY3kuYzoyMTExOlx0XHRpZiAocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSlcbm1tL21lbXBvbGljeS5jLTIxMTItXHRcdFx0Z290byByZXRyeTtcbi0tXG5tbS9tZW1wb2xpY3kuYz0yMTIzPXN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZXJsZWF2ZV9ub2RlcyhzdHJ1Y3QgbWVtcG9saWN5ICpwb2xpY3kpXG4tLVxubW0vbWVtcG9saWN5LmMtMjEzMS1cdFx0bmlkID0gbmV4dF9ub2RlX2luKGN1cnJlbnQtXHUwMDNlaWxfcHJldiwgcG9saWN5LVx1MDAzZW5vZGVzKTtcbm1tL21lbXBvbGljeS5jOjIxMzI6XHR9IHdoaWxlIChyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKTtcbm1tL21lbXBvbGljeS5jLTIxMzMtXG4tLVxubW0vbWVtcG9saWN5LmM9MjYzMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2NTctXHRcdG5ub2RlcyA9IHJlYWRfb25jZV9wb2xpY3lfbm9kZW1hc2socG9sLCBcdTAwMjZub2Rlcyk7XG5tbS9tZW1wb2xpY3kuYzoyNjU4Olx0fSB3aGlsZSAocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSk7XG5tbS9tZW1wb2xpY3kuYy0yNjU5LVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00NjU4PWNoZWNrX3JldHJ5X2NwdXNldChpbnQgY3B1c2V0X21lbXNfY29va2llLCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ2ODMtXHQgKi9cbm1tL3BhZ2VfYWxsb2MuYzo0Njg0Olx0aWYgKHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpXG5tbS9wYWdlX2FsbG9jLmMtNDY4NS1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vc2x1Yi5jPTM4NjM9c3RhdGljIHZvaWQgKmdldF9mcm9tX2FueV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBfZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTM5MTktXHRcdFx0XHRcdC8qXG5tbS9zbHViLmM6MzkyMDpcdFx0XHRcdFx0ICogRG9uJiMzOTt0IGNoZWNrIHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KClcbm1tL3NsdWIuYy0zOTIxLVx0XHRcdFx0XHQgKiBoZXJlIC0gaWYgbWVtc19hbGxvd2VkIHdhcyB1cGRhdGVkIGluXG4tLVxubW0vc2x1Yi5jLTM5MjktXHRcdH1cbm1tL3NsdWIuYzozOTMwOlx0fSB3aGlsZSAoYWxsb3dfc3BpbiBcdTAwMjZcdTAwMjYgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSk7XG5tbS9zbHViLmMtMzkzMS0jZW5kaWZcdC8qIENPTkZJR19OVU1BICovXG4tLVxubW0vc2x1Yi5jPTcyMzE9X19yZWZpbGxfb2JqZWN0c19hbnkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXG4tLVxubW0vc2x1Yi5jLTcyNjQtXHRcdFx0XHQvKlxubW0vc2x1Yi5jOjcyNjU6XHRcdFx0XHQgKiBEb24mIzM5O3QgY2hlY2sgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoKSBoZXJlIC1cbm1tL3NsdWIuYy03MjY2LVx0XHRcdFx0ICogaWYgbWVtc19hbGxvd2VkIHdhcyB1cGRhdGVkIGluIHBhcmFsbGVsLCB0aGF0XG4tLVxubW0vc2x1Yi5jLTcyNzUtXHRcdH1cbm1tL3NsdWIuYzo3Mjc2Olx0fSB3aGlsZSAocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSk7XG5tbS9zbHViLmMtNzI3Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIzMQoJCQkJCQkJb3V0cHV0OiAyMDIKCQkJCQkJCXRob3VnaHRzOiA5NjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHN0YW5kYXJkIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gVGhlIHZ1bG5lcmFiaWxpdHkgc3RlbXMgZnJvbSBhbiB1bmhhbmRsZWQgY2FzZSB3aGVyZSBgbm9kZW1hc2tgIGlzIE5VTEwuCgpJIHNlZSB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZCBhIGZpeCB0aGF0IGludHJvZHVjZXMgYSByZXRyeSBtZWNoYW5pc20gdXNpbmcgYHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKClgIGFuZCBgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoKWAuIENydWNpYWxseSwgYHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5YCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24sIHdoaWNoIGlzIGNyaXRpY2FsIGhlcmUuIFRoZSBDIGNvbXBpbGVyIHdpbGwgc2hvcnQtY2lyY3VpdCB0aGUgcmlnaHQtaGFuZCBzaWRlIG9mIHRoZSBgJmFtcDsmYW1wO2Agb3BlcmF0b3IuIFRoZXJlZm9yZSwgaWYgYCFub2RlbWFza2AgaXMgZmFsc2UsIHRoZSByaWdodCBzaWRlLCBgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKWAgd2lsbCBuZXZlciBiZSByZWFkLCBhbmQgdGhlIHZhbHVlIG9mIGBjcHVzZXRfbWVtc19jb29raWVgIGlzIGlycmVsZXZhbnQuIEl0JiMzOTtzIHNhZmUuIFRoZSBjb21waWxlciBwcmV2ZW50cyB0aGUgdXNlIG9mIHRoZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlLgoKTXkgZmlyc3QgdGhvdWdodCB3YXMsICYjMzQ7Q291bGQgdGhlcmUgYmUgb3RoZXIgcmlza3M/JiMzNDsgSG93ZXZlciwgbG9va2luZyBjbG9zZXIsIGBjcHVzZXRfbWVtc19jb29raWVgIGlzIGp1c3QgYW4gYHVuc2lnbmVkIGludGAgdXNlZCBpbiBhIHNlcWxvY2stbGlrZSByZXRyeSBsb29wLCB3aGljaCBpcyBjb21tb24uIEl0JiMzOTtzIG5vdCBpbnZvbHZlZCBpbiBtZW1vcnkgYWxsb2NhdGlvbiBvciBkYXRhIHBhc3NpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzLgoKVGhlIHBhdGNoIGl0c2VsZiBtb2RpZmllcyB0aGUgY29udHJvbCBmbG93IGFyb3VuZCB0aGUgYWxsb2NhdGlvbiBsb2dpYywgYnV0IHRoZSBjb3JlIGlzc3VlIGlzIHRoZSBOVUxMIGNoZWNrIGFuZCB0aGUgaGFuZGxpbmcgb2YgdGhlIGBub2RlbWFza2AuIFRoZSBmaXggZW5zdXJlcyB0aGF0IGlmIGBub2RlbWFza2AgaXMgTlVMTCwgd2UgZmFsbCBiYWNrIHRvIHVzaW5nIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgIGZyb20gYSBgY3B1c2V0YC4gVGhpcyBpcyB0aGUgaW1wb3J0YW50IHBhcnQgYmVjYXVzZSBpdCBwcmV2ZW50cyB0aGUgTlVMTCBkZXJlZmVyZW5jZS4KCkkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkOiB0aGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIEl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBjb25kaXRpb25hbCBsb2dpYyBub3cgZW5zdXJlcyB0aGF0IGFsbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIHJldHJ5IGxvb3AuIFRoZSBgY3B1c2V0X21lbXNfY29va2llYCBpcyBpbml0aWFsaXplZCBvbmx5IHdoZW4gYG5vZGVtYXNrYCBpcyBudWxsLCBidXQgaXMgc2hvcnQtY2lyY3VpdGVkIGlmIG5vdCwgYW5kIHRodXMgaXQgcmVtYWlucyB1bmluaXRpYWxpemVkIG9ubHkgd2hlbiB0aGUgY29uZGl0aW9uIGF2b2lkcyBpdHMgdXNlLgoKU28sIHN1bW1pbmcgaXQgdXAsIHRoZSBwYXRjaCBmaXhlcyBhIGtub3duIE5VTEwgcG9pbnRlciBpc3N1ZS4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLCBub3IgZG9lcyBpdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlIG9yaWdpbmFsIGJ1ZyBpcyBlYXNpbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQgaGVyZS4gSXQmIzM5O3MgYSAmIzM0O05lZWRzS01TQU49ZmFsc2UmIzM0OyBzaXR1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHdoZW4gYG5vZGVtYXNrYCBpcyBOVUxMIGJ5IGZhbGxpbmcgYmFjayB0byBgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkYCBhbmQgaW50cm9kdWNpbmcgYSByZXRyeSBsb29wLiBUaGUgbG9jYWwgdmFyaWFibGUgYGNwdXNldF9tZW1zX2Nvb2tpZWAgaXMgb25seSBpbml0aWFsaXplZCB3aGVuIGBub2RlbWFza2AgaXMgTlVMTCwgYnV0IGR1ZSB0byBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24gaW4gdGhlIGNvbmRpdGlvbiBgIW5vZGVtYXNrIFx1MDAyNlx1MDAyNiB1bmxpa2VseShyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKWAsIGl0IGlzIG5ldmVyIHJlYWQgdW5pbml0aWFsaXplZC4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIGFuZCBLQVNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHdoZW4gYG5vZGVtYXNrYCBpcyBOVUxMIGJ5IGZhbGxpbmcgYmFjayB0byBgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkYCBhbmQgaW50cm9kdWNpbmcgYSByZXRyeSBsb29wLiBUaGUgbG9jYWwgdmFyaWFibGUgYGNwdXNldF9tZW1zX2Nvb2tpZWAgaXMgb25seSBpbml0aWFsaXplZCB3aGVuIGBub2RlbWFza2AgaXMgTlVMTCwgYnV0IGR1ZSB0byBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24gaW4gdGhlIGNvbmRpdGlvbiBgIW5vZGVtYXNrIFx1MDAyNlx1MDAyNiB1bmxpa2VseShyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKWAsIGl0IGlzIG5ldmVyIHJlYWQgdW5pbml0aWFsaXplZC4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIGFuZCBLQVNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6NTg6MzguMzc5NjI5MzMxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0NzU0ODA1MTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiQ01BXCIsXG4gICAgXCJDUFVTRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB3aGVuIGBub2RlbWFza2AgaXMgTlVMTCBieSBmYWxsaW5nIGJhY2sgdG8gYGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZGAgYW5kIGludHJvZHVjaW5nIGEgcmV0cnkgbG9vcC4gVGhlIGxvY2FsIHZhcmlhYmxlIGBjcHVzZXRfbWVtc19jb29raWVgIGlzIG9ubHkgaW5pdGlhbGl6ZWQgd2hlbiBgbm9kZW1hc2tgIGlzIE5VTEwsIGJ1dCBkdWUgdG8gc2hvcnQtY2lyY3VpdCBldmFsdWF0aW9uIGluIHRoZSBjb25kaXRpb24gYCFub2RlbWFzayBcXHUwMDI2XFx1MDAyNiB1bmxpa2VseShyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKWAsIGl0IGlzIG5ldmVyIHJlYWQgdW5pbml0aWFsaXplZC4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIGFuZCBLQVNBTi4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB0byByZXNwZWN0IGNwdXNldCBjb25zdHJhaW50cyB3aGVuIGBub2RlbWFza2AgaXMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgKEh1Z2VUTEIgKyBDTUEpLiBUaGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB3aGVuIGFsbG9jYXRpbmcgZ2lnYW50aWMgaHVnZSBwYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6NTg6MzguMzc5NjM1NDIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzgyMzYzNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkNGNjYjQwNDA0OTFkMGE3YTcwNTAyMzA0MWI5ZTFhYzkzZGFhYzhmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDExIDA1OjU4OjM3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfY21hLmMgYi9tbS9odWdldGxiX2NtYS5jXFxuaW5kZXggMzkzNDRkNmM3OGQ4NC4uM2UyMjE2MTY4NmQyZiAxMDA2NDRcXG4tLS0gYS9tbS9odWdldGxiX2NtYS5jXFxuKysrIGIvbW0vaHVnZXRsYl9jbWEuY1xcbkBAIC0zLDYgKzMsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NtYS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGlsZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NwdXNldC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW1faW5saW5lLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3BhZ2UuaFxcdTAwM2VcXG5AQCAtMzAsMTUgKzMxLDI1IEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuIFxcdGludCBub2RlO1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XFxuK1xcdGNvbnN0IG5vZGVtYXNrX3QgKm5tYXNrO1xcbitcXHR1bnNpZ25lZCBpbnQgY3B1c2V0X21lbXNfY29va2llO1xcbiBcXG4gXFx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdGlmIChodWdldGxiX2NtYVtuaWRdKVxcbityZXRyeV9jcHVzZXQ6XFxuK1xcdGlmICghbm9kZW1hc2spIHtcXG4rXFx0XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG4rXFx0XFx0bm1hc2sgPSBcXHUwMDI2Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRubWFzayA9IG5vZGVtYXNrO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSBcXHUwMDI2XFx1MDAyNiBub2RlX2lzc2V0KG5pZCwgKm5tYXNrKSlcXG4gXFx0XFx0cGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpO1xcbiBcXG4gXFx0aWYgKCFwYWdlIFxcdTAwMjZcXHUwMDI2ICEoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9USElTTk9ERSkpIHtcXG4tXFx0XFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsICpub2RlbWFzaykge1xcbitcXHRcXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgKm5tYXNrKSB7XFxuIFxcdFxcdFxcdGlmIChub2RlID09IG5pZCB8fCAhaHVnZXRsYl9jbWFbbm9kZV0pXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG5AQCAtNDgsOCArNTksMTIgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIXBhZ2UpXFxuK1xcdGlmICghcGFnZSkge1xcbitcXHRcXHRpZiAoIW5vZGVtYXNrIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICB1bmxpa2VseShyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKSlcXG4rXFx0XFx0XFx0Z290byByZXRyeV9jcHVzZXQ7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuIFxcbiBcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuIFxcdGZvbGlvX3NldF9odWdldGxiX2NtYShmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjU4OjM4LjgxODQ4Mjk1OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU1OTE4MjgyOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiQ01BXCIsXG4gICAgXCJDUFVTRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgdG8gcmVzcGVjdCBjcHVzZXQgY29uc3RyYWludHMgd2hlbiBgbm9kZW1hc2tgIGlzIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIChIdWdlVExCICsgQ01BKS4gVGhlIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2Ugd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGh1Z2UgcGFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ0Y2NiNDA0MDQ5MWQwYTdhNzA1MDIzMDQxYjllMWFjOTNkYWFjOGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNTo1ODozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfY21hLmMgYi9tbS9odWdldGxiX2NtYS5jXG5pbmRleCAzOTM0NGQ2Yzc4ZDg0Li4zZTIyMTYxNjg2ZDJmIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYl9jbWEuY1xuKysrIGIvbW0vaHVnZXRsYl9jbWEuY1xuQEAgLTMsNiArMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NtYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdXNldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1faW5saW5lLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG5AQCAtMzAsMTUgKzMxLDI1IEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRpbnQgbm9kZTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG4rXHRjb25zdCBub2RlbWFza190ICpubWFzaztcbitcdHVuc2lnbmVkIGludCBjcHVzZXRfbWVtc19jb29raWU7XG4gXG4gXHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0aWYgKGh1Z2V0bGJfY21hW25pZF0pXG4rcmV0cnlfY3B1c2V0OlxuK1x0aWYgKCFub2RlbWFzaykge1xuK1x0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xuK1x0XHRubWFzayA9IFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcbitcdH0gZWxzZSB7XG4rXHRcdG5tYXNrID0gbm9kZW1hc2s7XG4rXHR9XG4rXG4rXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSBcdTAwMjZcdTAwMjYgbm9kZV9pc3NldChuaWQsICpubWFzaykpXG4gXHRcdHBhZ2UgPSBjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKGh1Z2V0bGJfY21hW25pZF0sIG9yZGVyKTtcbiBcbiBcdGlmICghcGFnZSBcdTAwMjZcdTAwMjYgIShnZnBfbWFzayBcdTAwMjYgX19HRlBfVEhJU05PREUpKSB7XG4tXHRcdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCAqbm9kZW1hc2spIHtcbitcdFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsICpubWFzaykge1xuIFx0XHRcdGlmIChub2RlID09IG5pZCB8fCAhaHVnZXRsYl9jbWFbbm9kZV0pXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbkBAIC00OCw4ICs1OSwxMiBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAoIXBhZ2UpXG4rXHRpZiAoIXBhZ2UpIHtcbitcdFx0aWYgKCFub2RlbWFzayBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHVubGlrZWx5KHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpKVxuK1x0XHRcdGdvdG8gcmV0cnlfY3B1c2V0O1xuIFx0XHRyZXR1cm4gTlVMTDtcbitcdH1cbiBcbiBcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiBcdGZvbGlvX3NldF9odWdldGxiX2NtYShmb2xpbyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTo1ODozOC44MTg0ODQxMjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDMzNjg2NDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZXRsYiBDTUEgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG1tL2h1Z2V0bGJfY21hLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGZ1bmN0aW9uLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBpdCBzZWVtcyB0aGUgY29yZSBjaGFuZ2UgZm9jdXNlcyBvbiBpbnRlZ3JhdGluZyBjcHVzZXQgbm9kZW1hc2sgY2hlY2tzIGR1cmluZyBodWdldGxiIGZvbGlvIGFsbG9jYXRpb24gZnJvbSBDTUEuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoYXQgd2hlbiBhIGBub2RlbWFza2AgaXMgYWJzZW50LCB0aGUgY29kZSBzbWFydGx5IGRlZmF1bHRzIHRvIHVzaW5nIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgLCBhbmQgaXTigJlzIGV2ZW4gc2V0IHVwIHRvIHJldHJ5IGlmIHRoZSBjcHVzZXQgbWVtcyBjb25maWd1cmF0aW9uIHNoaWZ0cyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MuXG5cbk5vdywgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2lkZWx5IHRoaXMgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24gaXMgdXNlZC4gVGhlIGNvbnRleHQgb2YgdGhpcyBtb2RpZmljYXRpb24gaXMgY3JpdGljYWwsIHNvIGxldOKAmXMgZGVsdmUgaW50byBpdHMgY2FsbCBzaXRlcy4gV2hhdCBhcmUgdGhlIHJlbGV2YW50IGNhbGxlcnMsIGFuZCB3aGF0IGFyZSB0aGVpciBzcGVjaWZpYyBuZWVkcz8gS25vd2luZyB0aGF0IHdpbGwgY2xhcmlmeSB0aGUgcG90ZW50aWFsIGltcGFjdCBhbmQgYW55IHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5ldyBub2RlbWFzayBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzOSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjU4OjQzLjI1MjE3MzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2ODA5NTU2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTEzNjA9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9odWdldGxiLmMtMTM2NC1cXG5tbS9odWdldGxiLmM6MTM2NTpcXHRmb2xpbyA9IGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhvcmRlciwgZ2ZwX21hc2ssIG5pZCwgbm9kZW1hc2spO1xcbm1tL2h1Z2V0bGIuYy0xMzY2LVxcdGlmIChmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9MjI9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0yNy1cXG5tbS9odWdldGxiX2NtYS5jOjI4OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vaHVnZXRsYl9jbWEuYy0yOS1cXHRcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmg9Nj12b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2h1Z2V0bGJfY21hLmg6NzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbm1tL2h1Z2V0bGJfY21hLmgtOC1cXHRcXHRcXHRcXHQgICAgICBpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzayk7XFxuLS1cXG5tbS9odWdldGxiX2NtYS5oPTE2PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuaC0xOS1cXG5tbS9odWdldGxiX2NtYS5oOjIwOnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLFxcbm1tL2h1Z2V0bGJfY21hLmgtMjEtXFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssXFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjU4OjQ0LjkyMDI3NDk0MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTg0NTkzNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKlRyYWNpbmcgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AqKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBjYWxsZWQgZnJvbSB3aXRoaW4gYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AsIHdoaWNoIGlzIGluIGBtbS9odWdldGxiLmNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBsaWtlbHkgYW4gaW1wb3J0YW50IGNvbm5lY3Rpb24gdG8gZm9sbG93IGZvciBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gdGhlIGh1Z2UgcGFnZXMgc3Vic3lzdGVtLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtZWNoYW5pY3Mgb2YgdGhhdCBpbnRlcmFjdGlvbi4gR2l2ZW4gdGhhdCwgbGV0IG1lIHN0YXJ0IGJ5IHF1aWNrbHkgY2hlY2tpbmcgdGhlIHVzYWdlIG9mIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIGl0c2VsZi4gS25vd2luZyB3aGVyZSAqaXQqIGlzIGNhbGxlZCBmcm9tIHdpbGwgaGVscCBtZSBidWlsZCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBmbG93IGFuZCBwdXJwb3NlIG9mIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gYW5kIGl0cyByZWxhdGlvbiB0byB0aGUgb3ZlcmFsbCBodWdlIHBhZ2VzIGFyY2hpdGVjdHVyZS4gSXQncyBhIGtleSBwYXJ0IG9mIHVudGFuZ2xpbmcgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyOTYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTo1ODo0OC4zMTg3MzYyNzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4NjYyODEyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTEzMjA9c3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX3ZtYShzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEzNTktI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0NPTlRJR19BTExPQylcXG5tbS9odWdldGxiLmM6MTM2MDpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9odWdldGxiLmMtMTM2MS1cXHRcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzc2LSNlbHNlIC8qICFDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRSB8fCAhQ09ORklHX0NPTlRJR19BTExPQyAqL1xcbm1tL2h1Z2V0bGIuYzoxMzc3OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxcbm1tL2h1Z2V0bGIuYy0xMzc4LVxcdFxcdFxcdFxcdFxcdCAgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS9odWdldGxiLmM9MTgzNj1zdGF0aWMgc3RydWN0IGZvbGlvICpvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xODQ2LVxcdGlmIChvcmRlcl9pc19naWdhbnRpYyhvcmRlcikpXFxubW0vaHVnZXRsYi5jOjE4NDc6XFx0XFx0Zm9saW8gPSBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5tYXNrKTtcXG5tbS9odWdldGxiLmMtMTg0OC1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjU4OjUwLjMwNTM3MzUxNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTU0MTEwMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYSBMYXJnZSBNZW1vcnkgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIGlzIGJlaW5nIGNhbGxlZCBzcGVjaWZpY2FsbHkgZnJvbSBgb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYC4gVGhhdCdzIGludGVyZXN0aW5nLiBJdCBtZWFucyB0aGVyZSdzIGEgcGFydGljdWxhciwgZm9jdXNlZCBwYXRod2F5IGZvciB0aGVzZSBcImdpZ2FudGljXCIgZm9saW8gYWxsb2NhdGlvbnMsIGFuZCBpdCdzIHRpZWQgdG8gZnJlc2ggaHVnZSBwYWdlIGFsbG9jYXRpb25zLiBNeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byBkaWcgaW50byB0aGUgdXNhZ2Ugb2YgYG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AuIFVuZGVyc3RhbmRpbmcgKndoeSogYW5kICpob3cqIGl0J3MgYmVpbmcgY2FsbGVkIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcHVycG9zZSBvZiB0aGVzZSBsYXJnZSBhbGxvY2F0aW9ucyBhbmQgdGhlaXIgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gVGhpcyBzZWVtcyBsaWtlIGEgcHJvbWlzaW5nIGxlYWQgdG8gZm9sbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTQ2LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6NTg6NTMuMzAwNzg3NDM4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDE4Mzg2MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xNzkxPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2J1ZGR5X2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE4MzUtXFxubW0vaHVnZXRsYi5jOjE4MzY6c3RhdGljIHN0cnVjdCBmb2xpbyAqb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxubW0vaHVnZXRsYi5jLTE4MzctXFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsIG5vZGVtYXNrX3QgKm5tYXNrLFxcbi0tXFxubW0vaHVnZXRsYi5jPTE4NjM9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE4NjctXFxubW0vaHVnZXRsYi5jOjE4Njg6XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCwgbm1hc2ssIE5VTEwpO1xcbm1tL2h1Z2V0bGIuYy0xODY5LVxcdGlmIChmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xODk2PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX3Bvb2xfaHVnZV9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE5MDYtXFxubW0vaHVnZXRsYi5jOjE5MDc6XFx0XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5vZGUsXFxubW0vaHVnZXRsYi5jLTE5MDgtXFx0XFx0XFx0XFx0XFx0bm9kZXNfYWxsb3dlZCwgbm9kZV9hbGxvY19ub3JldHJ5KTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zMzcyPXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlc19vbmVub2RlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBuaWQpXFxuLS1cXG5tbS9odWdldGxiLmMtMzM4NS1cXG5tbS9odWdldGxiLmM6MzM4NjpcXHRcXHRcXHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLFxcbm1tL2h1Z2V0bGIuYy0zMzg3LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIE5VTEwpO1xcbi0tXFxubW0vaHVnZXRsYi5jLTMzOTEtXFx0XFx0XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmZvbGlvX2xpc3QpO1xcbm1tL2h1Z2V0bGIuYzozMzkyOlxcdFxcdFxcdFxcdGZvbGlvID0gb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsXFxubW0vaHVnZXRsYi5jLTMzOTMtXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSwgTlVMTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjU4OjU0Ljg0MjYzNjUzM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzY2ODU5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEh1Z2V0bGIgRm9saW8gQWxsb2NhdGlvbiBhbmQgQ3B1c2V0IENvbnN0cmFpbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGh1Z2V0bGIgZm9saW9zIGFyZSBhbGxvY2F0ZWQuIFNwZWNpZmljYWxseSwgYGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW9gIGFuZCBgYWxsb2NfcG9vbF9odWdlX2ZvbGlvYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMsIHdoaWNoIEkga25vdyBhcmUgZnVuZGFtZW50YWwgdG8gdGhlIEh1Z2VUTEIgYW5kIENNQSBsb2dpYyDigJMgZGVmaW5pdGVseSBjb3JlIGtlcm5lbCBzdHVmZi4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24uIEl0J3MgbWFraW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIGFsd2F5cyB3YXJyYW50cyBjbG9zZSBhdHRlbnRpb24uIFRoZSBjcml0aWNhbCBhc3BlY3QgaGVyZSBpcyBob3cgaXQgaW50ZXJhY3RzIHdpdGggY3B1c2V0cyB3aGVuIHRoZSBgbm9kZW1hc2tgIGlzIHNldCB0byBOVUxMLlxuXG5Ob3csIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gV2hhdCBhcmUgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucz8gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgaHVnZXRsYl9jbWEuY2AgaXMgb25seSBjb21waWxlZCB3aGVuIGJvdGggYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIGVuYWJsZWQuIFRpbWUgdG8gY2hlY2sgYG1tL01ha2VmaWxlYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBjb2RlIHBhdGggaXMgYWN0aXZlIGFuZCB0aGVyZWZvcmUgdGhlIGltcGFjdCBvZiB0aGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2NCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTo1ODo1OS4zNzkzMjUyOTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzE3NzExNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl9jbWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ9OTU9S2VybmVsIHBhcmFtZXRlcnNcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTIwNjMtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ6MjA2NDpcXHRodWdldGxiX2NtYT1cXHRbSFcsQ01BLEVBUkxZXSBUaGUgc2l6ZSBvZiBhIENNQSBhcmVhIHVzZWQgZm9yIGFsbG9jYXRpb25cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDY1LVxcdFxcdFxcdG9mIGdpZ2FudGljIGh1Z2VwYWdlcy4gT3IgdXNpbmcgbm9kZSBmb3JtYXQsIHRoZSBzaXplXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc3LVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0OjIwNzg6XFx0aHVnZXRsYl9jbWFfb25seT1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDc5LVxcdFxcdFxcdFtIVyxDTUEsRUFSTFldIFdoZW4gYWxsb2NhdGluZyBuZXcgSHVnZVRMQiBwYWdlcywgb25seVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMjA4MS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dDoyMDgyOlxcdFxcdFxcdFRoaXMgb3B0aW9uIGRvZXMgbm90aGluZyBpZiBodWdldGxiX2NtYT0gaXMgbm90IGFsc29cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0yMDgzLVxcdFxcdFxcdHNwZWNpZmllZC5cXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9jeGwvbGludXgvZWFybHktYm9vdC5yc3Q9MTI2PW9uIE5VTUEgbm9kZXMgdGhhdCBhcmUgbm90IG9ubGluZSBkdXJpbmcgZWFybHkgYm9vdC4gOjpcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvY3hsL2xpbnV4L2Vhcmx5LWJvb3QucnN0LTEyNy1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvY3hsL2xpbnV4L2Vhcmx5LWJvb3QucnN0OjEyODogIHZvaWQgX19pbml0IGh1Z2V0bGJfY21hX3Jlc2VydmUodm9pZCkge1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9jeGwvbGludXgvZWFybHktYm9vdC5yc3QtMTI5LSAgICBpZiAoIW5vZGVfb25saW5lKG5pZCkpXFxuLS1cXG5NQUlOVEFJTkVSUz0xMjAyMD1GOlxcdG1tL2h1Z2V0bGJfY2dyb3VwLmNcXG5NQUlOVEFJTkVSUzoxMjAyMTpGOlxcdG1tL2h1Z2V0bGJfY21hLmNcXG5NQUlOVEFJTkVSUzoxMjAyMjpGOlxcdG1tL2h1Z2V0bGJfY21hLmhcXG5NQUlOVEFJTkVSUy0xMjAyMy1GOlxcdG1tL2h1Z2V0bGJfc3lzY3RsLmNcXG4tLVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0zOC0jaWZkZWYgQ09ORklHX0NNQVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYzozOTp1bnNpZ25lZCBpbnQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy00MC17XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYz0yMDE9YXJjaF9pbml0Y2FsbChodWdldGxicGFnZV9pbml0KTtcXG5hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYy0yMDItXFxuYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmM6MjAzOnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbmFyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jLTIwNC17XFxuLS1cXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmM9NDQ4PWFyY2hfaW5pdGNhbGwoZ2lnYW50aWNfcGFnZXNfaW5pdCk7XFxuLS1cXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDUwLVxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYzo0NTE6dW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTQ1Mi17XFxuLS1cXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYz0yMjU9Ym9vbCBfX2luaXQgYXJjaF9odWdldGxiX3ZhbGlkX3NpemUodW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmMtMjM0LVxcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jOjIzNTp1bnNpZ25lZCBpbnQgX19pbml0IGFyY2hfaHVnZXRsYl9jbWFfb3JkZXIodm9pZClcXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYy0yMzYte1xcbi0tXFxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYz00Mj1hcmNoX2luaXRjYWxsKGdpZ2FudGljX3BhZ2VzX2luaXQpO1xcbi0tXFxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy00NS1cXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jOjQ2OnVuc2lnbmVkIGludCBfX2luaXQgYXJjaF9odWdldGxiX2NtYV9vcmRlcih2b2lkKVxcbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmMtNDcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9Mjc2PXZvaWQgaHVnZXRsYl9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNzctXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6Mjc4OnVuc2lnbmVkIGludCBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI3OS1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTEyOTg9c3RhdGljIGlubGluZSBzcGlubG9ja190ICpodWdlX3B0ZV9sb2NrKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMzA4LSNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0NNQSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMzA5OmV4dGVybiB2b2lkIF9faW5pdCBodWdldGxiX2NtYV9yZXNlcnZlKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEzMTAtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMzExOnN0YXRpYyBpbmxpbmUgX19pbml0IHZvaWQgaHVnZXRsYl9jbWFfcmVzZXJ2ZSh2b2lkKVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEzMTIte1xcbi0tXFxubW0vTWFrZWZpbGU9ODI9aWZkZWYgQ09ORklHX0NNQVxcbm1tL01ha2VmaWxlOjgzOm9iai0kKENPTkZJR19IVUdFVExCRlMpXFx0Kz0gaHVnZXRsYl9jbWEub1xcbm1tL01ha2VmaWxlLTg0LWVuZGlmXFxuLS1cXG5tbS9jbWEuaD04PXN0cnVjdCBjbWFfa29iamVjdCB7XFxuLS1cXG5tbS9jbWEuaC0xNC0gKiBNdWx0aS1yYW5nZSBzdXBwb3J0LiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgdGhlIHNpemUgb2YgdGhlIGFsbG9jYXRpb25cXG5tbS9jbWEuaDoxNTogKiBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgbGFyZ2VyIHRoYW4gdGhlIGFsaWdubWVudCAobGlrZSB3aXRoIGh1Z2V0bGJfY21hKSxcXG5tbS9jbWEuaC0xNi0gKiBhbmQgdGhlIHRvdGFsIGFtb3VudCBvZiBtZW1vcnkgcmVxdWVzdGVkLCB3aGlsZSBzbWFsbGVyIHRoYW4gdGhlIHRvdGFsXFxuLS1cXG5tbS9odWdldGxiLmMtNTAtI2luY2x1ZGUgXFxcImh1Z2V0bGJfdm1lbW1hcC5oXFxcIlxcbm1tL2h1Z2V0bGIuYzo1MTojaW5jbHVkZSBcXFwiaHVnZXRsYl9jbWEuaFxcXCJcXG5tbS9odWdldGxiLmMtNTItI2luY2x1ZGUgXFxcImh1Z2V0bGJfaW50ZXJuYWwuaFxcXCJcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xMzYwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEzNjQtXFxubW0vaHVnZXRsYi5jOjEzNjU6XFx0Zm9saW8gPSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5vZGVtYXNrKTtcXG5tbS9odWdldGxiLmMtMTM2Ni1cXHRpZiAoZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmMtMTM2OC1cXG5tbS9odWdldGxiLmM6MTM2OTpcXHRpZiAoaHVnZXRsYl9jbWFfZXhjbHVzaXZlX2FsbG9jKCkpXFxubW0vaHVnZXRsYi5jLTEzNzAtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9odWdldGxiLmM9MTQ1OD1zdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMTUwNy1cXHRWTV9CVUdfT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pO1xcbm1tL2h1Z2V0bGIuYzoxNTA4OlxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfY21hKGZvbGlvKSlcXG5tbS9odWdldGxiLmM6MTUwOTpcXHRcXHRodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTE1MTAtXFx0ZWxzZVxcbi0tXFxubW0vaHVnZXRsYi5jPTMwMjg9c3RhdGljIF9faW5pdCB2b2lkICphbGxvY19ib290bWVtKHN0cnVjdCBoc3RhdGUgKmgsIGludCBuaWQsIGJvb2wgbm9kZV9leGFjdClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMDMzLVxcdGlmIChodWdldGxiX2Vhcmx5X2NtYShoKSlcXG5tbS9odWdldGxiLmM6MzAzNDpcXHRcXHRtID0gaHVnZXRsYl9jbWFfYWxsb2NfYm9vdG1lbShoLCBcXHUwMDI2bGlzdG5vZGUsIG5vZGVfZXhhY3QpO1xcbm1tL2h1Z2V0bGIuYy0zMDM1LVxcdGVsc2Uge1xcbi0tXFxubW0vaHVnZXRsYi5jPTMxODA9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfYm9vdG1lbV9pbml0X21pZ3JhdGV0eXBlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9odWdldGxiLmMtMzE4Ny1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcGFnZXM7IGkgKz0gcGFnZWJsb2NrX25yX3BhZ2VzKSB7XFxubW0vaHVnZXRsYi5jOjMxODg6XFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9jbWEoZm9saW8pKVxcbm1tL2h1Z2V0bGIuYy0zMTg5LVxcdFxcdFxcdGluaXRfY21hX3BhZ2VibG9jayhmb2xpb19wYWdlKGZvbGlvLCBpKSk7XFxuLS1cXG5tbS9odWdldGxiLmM9MzI4MT1zdGF0aWMgdm9pZCBfX2luaXQgZ2F0aGVyX2Jvb3RtZW1fcHJlYWxsb2Nfbm9kZSh1bnNpZ25lZCBsb25nIG5pZClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMzI2LVxcdFxcdGlmIChodWdldGxiX2Jvb3RtZW1fcGFnZV9lYXJseWNtYShtKSlcXG5tbS9odWdldGxiLmM6MzMyNzpcXHRcXHRcXHRmb2xpb19zZXRfaHVnZXRsYl9jbWEoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0zMzI4LVxcbi0tXFxubW0vaHVnZXRsYi5jLTMzMzgtXFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjMzMzk6XFx0XFx0aWYgKCFmb2xpb190ZXN0X2h1Z2V0bGJfY21hKGZvbGlvKSlcXG5tbS9odWdldGxiLmMtMzM0MC1cXHRcXHRcXHRhZGp1c3RfbWFuYWdlZF9wYWdlX2NvdW50KHBhZ2UsIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCkpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTM1NjU9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfaHN0YXRlX2FsbG9jX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgpXFxuLS1cXG5tbS9odWdldGxiLmMtMzU3Mi1cXHQgKi9cXG5tbS9odWdldGxiLmM6MzU3MzpcXHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljKGgpIFxcdTAwMjZcXHUwMDI2IGh1Z2V0bGJfY21hX3RvdGFsX3NpemUoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL2h1Z2V0bGIuYy0zNTc0LVxcdCAgICAhaHVnZXRsYl9lYXJseV9jbWEoaCkpIHtcXG5tbS9odWdldGxiLmM6MzU3NTpcXHRcXHRwcl93YXJuX29uY2UoXFxcIkh1Z2VUTEI6IGh1Z2V0bGJfY21hIGlzIGVuYWJsZWQsIHNraXAgYm9vdCB0aW1lIGFsbG9jYXRpb25cXFxcblxcXCIpO1xcbm1tL2h1Z2V0bGIuYy0zNTc2LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zNTk1PXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2luaXRfaHN0YXRlcyh2b2lkKVxcbi0tXFxubW0vaHVnZXRsYi5jLTM2MjItXFx0XFx0XFx0Y29udGludWU7XFxubW0vaHVnZXRsYi5jOjM2MjM6XFx0XFx0aWYgKGh1Z2V0bGJfY21hX3RvdGFsX3NpemUoKSBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VvcmRlciBcXHUwMDNjPSBIVUdFVExCX1BBR0VfT1JERVIpXFxubW0vaHVnZXRsYi5jLTM2MjQtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9odWdldGxiLmM9MzkxOT1zdGF0aWMgbG9uZyBkZW1vdGVfZnJlZV9odWdldGxiX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpzcmMsIHN0cnVjdCBoc3RhdGUgKmRzdCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zOTQ2LVxcbm1tL2h1Z2V0bGIuYzozOTQ3OlxcdFxcdGNtYSA9IGZvbGlvX3Rlc3RfaHVnZXRsYl9jbWEoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0zOTQ4LVxcbi0tXFxubW0vaHVnZXRsYi5jLTM5NjUtXFx0XFx0XFx0aWYgKGNtYSlcXG5tbS9odWdldGxiLmM6Mzk2NjpcXHRcXHRcXHRcXHRmb2xpb19zZXRfaHVnZXRsYl9jbWEobmV3X2ZvbGlvKTtcXG5tbS9odWdldGxiLmMtMzk2Ny1cXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2bmV3X2ZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZkc3RfbGlzdCk7XFxuLS1cXG5tbS9odWdldGxiLmM9NDIyNz1zdGF0aWMgX19pbml0IHZvaWQgaHVnZXRsYl9wYXJzZV9wYXJhbXModm9pZClcXG4tLVxcbm1tL2h1Z2V0bGIuYy00MjM3LVxcbm1tL2h1Z2V0bGIuYzo0MjM4OlxcdGh1Z2V0bGJfY21hX3ZhbGlkYXRlX3BhcmFtcygpO1xcbm1tL2h1Z2V0bGIuYy00MjM5LX1cXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMTMtI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxubW0vaHVnZXRsYl9jbWEuYzoxNDojaW5jbHVkZSBcXFwiaHVnZXRsYl9jbWEuaFxcXCJcXG5tbS9odWdldGxiX2NtYS5jLTE1LVxcbm1tL2h1Z2V0bGJfY21hLmMtMTYtXFxubW0vaHVnZXRsYl9jbWEuYzoxNzpzdGF0aWMgc3RydWN0IGNtYSAqaHVnZXRsYl9jbWFbTUFYX05VTU5PREVTXSBfX3JvX2FmdGVyX2luaXQ7XFxubW0vaHVnZXRsYl9jbWEuYzoxODpzdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV9zaXplX2luX25vZGVbTUFYX05VTU5PREVTXSBfX2luaXRkYXRhO1xcbm1tL2h1Z2V0bGJfY21hLmM6MTk6c3RhdGljIGJvb2wgaHVnZXRsYl9jbWFfb25seSBfX3JvX2FmdGVyX2luaXQ7XFxubW0vaHVnZXRsYl9jbWEuYzoyMDpzdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV9zaXplIF9fcm9fYWZ0ZXJfaW5pdDtcXG5tbS9odWdldGxiX2NtYS5jLTIxLVxcbm1tL2h1Z2V0bGJfY21hLmM6MjI6dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2V0bGJfY21hLmMtMjMte1xcbm1tL2h1Z2V0bGJfY21hLmM6MjQ6XFx0V0FSTl9PTl9PTkNFKCFjbWFfcmVsZWFzZV9mcm96ZW4oaHVnZXRsYl9jbWFbZm9saW9fbmlkKGZvbGlvKV0sXFxubW0vaHVnZXRsYl9jbWEuYy0yNS1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpKTtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjctXFxubW0vaHVnZXRsYl9jbWEuYzoyODpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbm1tL2h1Z2V0bGJfY21hLmMtMjktXFx0XFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTM2LVxcbm1tL2h1Z2V0bGJfY21hLmM6Mzc6XFx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxcbm1tL2h1Z2V0bGJfY21hLmMtMzgtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTQ3LVxcbm1tL2h1Z2V0bGJfY21hLmM6NDg6XFx0aWYgKGh1Z2V0bGJfY21hW25pZF0gXFx1MDAyNlxcdTAwMjYgbm9kZV9pc3NldChuaWQsICpubWFzaykpXFxubW0vaHVnZXRsYl9jbWEuYzo0OTpcXHRcXHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7XFxubW0vaHVnZXRsYl9jbWEuYy01MC1cXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtNTItXFx0XFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsICpubWFzaykge1xcbm1tL2h1Z2V0bGJfY21hLmM6NTM6XFx0XFx0XFx0aWYgKG5vZGUgPT0gbmlkIHx8ICFodWdldGxiX2NtYVtub2RlXSlcXG5tbS9odWdldGxiX2NtYS5jLTU0LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2h1Z2V0bGJfY21hLmMtNTUtXFxubW0vaHVnZXRsYl9jbWEuYzo1NjpcXHRcXHRcXHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtub2RlXSwgb3JkZXIpO1xcbm1tL2h1Z2V0bGJfY21hLmMtNTctXFx0XFx0XFx0aWYgKHBhZ2UpXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTY5LVxcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG5tbS9odWdldGxiX2NtYS5jOjcwOlxcdGZvbGlvX3NldF9odWdldGxiX2NtYShmb2xpbyk7XFxubW0vaHVnZXRsYl9jbWEuYy03MS1cXHRyZXR1cm4gZm9saW87XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTc0PXN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqIF9faW5pdFxcbm1tL2h1Z2V0bGJfY21hLmM6NzU6aHVnZXRsYl9jbWFfYWxsb2NfYm9vdG1lbShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgKm5pZCwgYm9vbCBub2RlX2V4YWN0KVxcbm1tL2h1Z2V0bGJfY21hLmMtNzYte1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy04MC1cXG5tbS9odWdldGxiX2NtYS5jOjgxOlxcdGNtYSA9IGh1Z2V0bGJfY21hWypuaWRdO1xcbm1tL2h1Z2V0bGJfY21hLmMtODItXFx0bSA9IGNtYV9yZXNlcnZlX2Vhcmx5KGNtYSwgaHVnZV9wYWdlX3NpemUoaCkpO1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy04Ny1cXHRcXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgaHVnZXRsYl9ib290bWVtX25vZGVzKSB7XFxubW0vaHVnZXRsYl9jbWEuYzo4ODpcXHRcXHRcXHRjbWEgPSBodWdldGxiX2NtYVtub2RlXTtcXG5tbS9odWdldGxiX2NtYS5jLTg5LVxcdFxcdFxcdGlmICghY21hIHx8IG5vZGUgPT0gKm5pZClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMTA2LVxcbm1tL2h1Z2V0bGJfY21hLmM6MTA3OnN0YXRpYyBpbnQgX19pbml0IGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWEoY2hhciAqcClcXG5tbS9odWdldGxiX2NtYS5jLTEwOC17XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTEyMy1cXHRcXHRcXHR0bXAgPSBtZW1wYXJzZShzLCBcXHUwMDI2cyk7XFxubW0vaHVnZXRsYl9jbWEuYzoxMjQ6XFx0XFx0XFx0aHVnZXRsYl9jbWFfc2l6ZV9pbl9ub2RlW25pZF0gPSB0bXA7XFxubW0vaHVnZXRsYl9jbWEuYzoxMjU6XFx0XFx0XFx0aHVnZXRsYl9jbWFfc2l6ZSArPSB0bXA7XFxubW0vaHVnZXRsYl9jbWEuYy0xMjYtXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTEzNS1cXHRcXHR9IGVsc2Uge1xcbm1tL2h1Z2V0bGJfY21hLmM6MTM2OlxcdFxcdFxcdGh1Z2V0bGJfY21hX3NpemUgPSBtZW1wYXJzZShwLCBcXHUwMDI2cCk7XFxubW0vaHVnZXRsYl9jbWEuYy0xMzctXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTE0My1cXG5tbS9odWdldGxiX2NtYS5jOjE0NDplYXJseV9wYXJhbShcXFwiaHVnZXRsYl9jbWFcXFwiLCBjbWRsaW5lX3BhcnNlX2h1Z2V0bGJfY21hKTtcXG5tbS9odWdldGxiX2NtYS5jLTE0NS1cXG5tbS9odWdldGxiX2NtYS5jOjE0NjpzdGF0aWMgaW50IF9faW5pdCBjbWRsaW5lX3BhcnNlX2h1Z2V0bGJfY21hX29ubHkoY2hhciAqcClcXG5tbS9odWdldGxiX2NtYS5jLTE0Ny17XFxubW0vaHVnZXRsYl9jbWEuYzoxNDg6XFx0cmV0dXJuIGtzdHJ0b2Jvb2wocCwgXFx1MDAyNmh1Z2V0bGJfY21hX29ubHkpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMTQ5LX1cXG5tbS9odWdldGxiX2NtYS5jLTE1MC1cXG5tbS9odWdldGxiX2NtYS5jOjE1MTplYXJseV9wYXJhbShcXFwiaHVnZXRsYl9jbWFfb25seVxcXCIsIGNtZGxpbmVfcGFyc2VfaHVnZXRsYl9jbWFfb25seSk7XFxubW0vaHVnZXRsYl9jbWEuYy0xNTItXFxubW0vaHVnZXRsYl9jbWEuYzoxNTM6dW5zaWduZWQgaW50IF9fd2VhayBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKHZvaWQpXFxubW0vaHVnZXRsYl9jbWEuYy0xNTQte1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0xNTctXFxubW0vaHVnZXRsYl9jbWEuYzoxNTg6dm9pZCBfX2luaXQgaHVnZXRsYl9jbWFfcmVzZXJ2ZSh2b2lkKVxcbm1tL2h1Z2V0bGJfY21hLmMtMTU5LXtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMTYzLVxcbm1tL2h1Z2V0bGJfY21hLmM6MTY0OlxcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcXG5tbS9odWdldGxiX2NtYS5jLTE2NS1cXHRcXHRyZXR1cm47XFxubW0vaHVnZXRsYl9jbWEuYy0xNjYtXFxubW0vaHVnZXRsYl9jbWEuYzoxNjc6XFx0b3JkZXIgPSBhcmNoX2h1Z2V0bGJfY21hX29yZGVyKCk7XFxubW0vaHVnZXRsYl9jbWEuYy0xNjgtXFx0aWYgKCFvcmRlcikge1xcbm1tL2h1Z2V0bGJfY21hLmM6MTY5OlxcdFxcdHByX3dhcm4oXFxcImh1Z2V0bGJfY21hOiB0aGUgb3B0aW9uIGlzbid0IHN1cHBvcnRlZCBieSBjdXJyZW50IGFyY2hcXFxcblxcXCIpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMTcwLVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMTg0LVxcdGZvciAobmlkID0gMDsgbmlkIFxcdTAwM2MgTUFYX05VTU5PREVTOyBuaWQrKykge1xcbm1tL2h1Z2V0bGJfY21hLmM6MTg1OlxcdFxcdHNpemUgPSBodWdldGxiX2NtYV9zaXplX2luX25vZGVbbmlkXTtcXG5tbS9odWdldGxiX2NtYS5jLTE4Ni1cXHRcXHRpZiAoc2l6ZSA9PSAwKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0xODktXFx0XFx0aWYgKCFub2RlX2lzc2V0KG5pZCwgaHVnZXRsYl9ib290bWVtX25vZGVzKSkge1xcbm1tL2h1Z2V0bGJfY21hLmM6MTkwOlxcdFxcdFxcdHByX3dhcm4oXFxcImh1Z2V0bGJfY21hOiBpbnZhbGlkIG5vZGUgJWQgc3BlY2lmaWVkXFxcXG5cXFwiLCBuaWQpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMTkxLVxcdFxcdH0gZWxzZSBpZiAoIUlTX0FMSUdORUQoc2l6ZSwgZ2lnYW50aWNfcGFnZV9zaXplKSkge1xcbm1tL2h1Z2V0bGJfY21hLmM6MTkyOlxcdFxcdFxcdHByX3dhcm4oXFxcImh1Z2V0bGJfY21hOiBjbWEgYXJlYSBvZiBub2RlICVkIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAlbHUgTWlCXFxcXG5cXFwiLFxcbm1tL2h1Z2V0bGJfY21hLmMtMTkzLVxcdFxcdFxcdFxcdG5pZCwgZ2lnYW50aWNfcGFnZV9zaXplIC8gU1pfMU0pO1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0xOTgtXFxubW0vaHVnZXRsYl9jbWEuYzoxOTk6XFx0XFx0aHVnZXRsYl9jbWFfc2l6ZSAtPSBzaXplO1xcbm1tL2h1Z2V0bGJfY21hLmM6MjAwOlxcdFxcdGh1Z2V0bGJfY21hX3NpemVfaW5fbm9kZVtuaWRdID0gMDtcXG5tbS9odWdldGxiX2NtYS5jLTIwMS1cXHR9XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTIwMy1cXHQvKiBWYWxpZGF0ZSB0aGUgQ01BIHNpemUgYWdhaW4gaW4gY2FzZSBzb21lIGludmFsaWQgbm9kZXMgc3BlY2lmaWVkLiAqL1xcbm1tL2h1Z2V0bGJfY21hLmM6MjA0OlxcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcXG5tbS9odWdldGxiX2NtYS5jLTIwNS1cXHRcXHRyZXR1cm47XFxubW0vaHVnZXRsYl9jbWEuYy0yMDYtXFxubW0vaHVnZXRsYl9jbWEuYzoyMDc6XFx0aWYgKCFJU19BTElHTkVEKGh1Z2V0bGJfY21hX3NpemUsIGdpZ2FudGljX3BhZ2Vfc2l6ZSkpIHtcXG5tbS9odWdldGxiX2NtYS5jOjIwODpcXHRcXHRwcl93YXJuKFxcXCJodWdldGxiX2NtYTogY21hIGFyZWEgbXVzdCBiZSBhIG11bHRpcGxlIG9mICVsdSBNaUJcXFxcblxcXCIsXFxubW0vaHVnZXRsYl9jbWEuYy0yMDktXFx0XFx0XFx0Z2lnYW50aWNfcGFnZV9zaXplIC8gU1pfMU0pO1xcbm1tL2h1Z2V0bGJfY21hLmM6MjEwOlxcdFxcdGh1Z2V0bGJfY21hX3NpemUgPSAwO1xcbm1tL2h1Z2V0bGJfY21hLmMtMjExLVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjE4LVxcdFxcdCAqL1xcbm1tL2h1Z2V0bGJfY21hLmM6MjE5OlxcdFxcdHBlcl9ub2RlID0gRElWX1JPVU5EX1VQKGh1Z2V0bGJfY21hX3NpemUsXFxubW0vaHVnZXRsYl9jbWEuYy0yMjAtXFx0XFx0XFx0XFx0XFx0bm9kZXNfd2VpZ2h0KGh1Z2V0bGJfYm9vdG1lbV9ub2RlcykpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMjIxLVxcdFxcdHBlcl9ub2RlID0gcm91bmRfdXAocGVyX25vZGUsIGdpZ2FudGljX3BhZ2Vfc2l6ZSk7XFxubW0vaHVnZXRsYl9jbWEuYzoyMjI6XFx0XFx0cHJfaW5mbyhcXFwiaHVnZXRsYl9jbWE6IHJlc2VydmUgJWx1IE1pQiwgdXAgdG8gJWx1IE1pQiBwZXIgbm9kZVxcXFxuXFxcIixcXG5tbS9odWdldGxiX2NtYS5jOjIyMzpcXHRcXHRcXHRodWdldGxiX2NtYV9zaXplIC8gU1pfMU0sIHBlcl9ub2RlIC8gU1pfMU0pO1xcbm1tL2h1Z2V0bGJfY21hLmMtMjI0LVxcdH1cXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjMxLVxcdFxcdGlmIChub2RlX3NwZWNpZmljX2NtYV9hbGxvYykge1xcbm1tL2h1Z2V0bGJfY21hLmM6MjMyOlxcdFxcdFxcdGlmIChodWdldGxiX2NtYV9zaXplX2luX25vZGVbbmlkXSA9PSAwKVxcbm1tL2h1Z2V0bGJfY21hLmMtMjMzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2h1Z2V0bGJfY21hLmMtMjM0LVxcbm1tL2h1Z2V0bGJfY21hLmM6MjM1OlxcdFxcdFxcdHNpemUgPSBodWdldGxiX2NtYV9zaXplX2luX25vZGVbbmlkXTtcXG5tbS9odWdldGxiX2NtYS5jLTIzNi1cXHRcXHR9IGVsc2Uge1xcbm1tL2h1Z2V0bGJfY21hLmM6MjM3OlxcdFxcdFxcdHNpemUgPSBtaW4ocGVyX25vZGUsIGh1Z2V0bGJfY21hX3NpemUgLSByZXNlcnZlZCk7XFxubW0vaHVnZXRsYl9jbWEuYy0yMzgtXFx0XFx0fVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0yNDctXFx0XFx0XFx0XFx0XFx0SFVHRVRMQl9QQUdFX09SREVSLCBuYW1lLFxcbm1tL2h1Z2V0bGJfY21hLmM6MjQ4OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZodWdldGxiX2NtYVtuaWRdLCBuaWQpO1xcbm1tL2h1Z2V0bGJfY21hLmMtMjQ5LVxcdFxcdGlmIChyZXMpIHtcXG5tbS9odWdldGxiX2NtYS5jOjI1MDpcXHRcXHRcXHRwcl93YXJuKFxcXCJodWdldGxiX2NtYTogcmVzZXJ2YXRpb24gZmFpbGVkOiBlcnIgJWQsIG5vZGUgJWRcXFwiLFxcbm1tL2h1Z2V0bGJfY21hLmMtMjUxLVxcdFxcdFxcdFxcdHJlcywgbmlkKTtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjU1LVxcdFxcdHJlc2VydmVkICs9IHNpemU7XFxubW0vaHVnZXRsYl9jbWEuYzoyNTY6XFx0XFx0cHJfaW5mbyhcXFwiaHVnZXRsYl9jbWE6IHJlc2VydmVkICVsdSBNaUIgb24gbm9kZSAlZFxcXFxuXFxcIixcXG5tbS9odWdldGxiX2NtYS5jLTI1Ny1cXHRcXHRcXHRzaXplIC8gU1pfMU0sIG5pZCk7XFxubW0vaHVnZXRsYl9jbWEuYy0yNTgtXFxubW0vaHVnZXRsYl9jbWEuYzoyNTk6XFx0XFx0aWYgKHJlc2VydmVkIFxcdTAwM2U9IGh1Z2V0bGJfY21hX3NpemUpXFxubW0vaHVnZXRsYl9jbWEuYy0yNjAtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTI2NC1cXHRcXHQvKlxcbm1tL2h1Z2V0bGJfY21hLmM6MjY1OlxcdFxcdCAqIGh1Z2V0bGJfY21hX3NpemUgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYWxsb2NhdGlvbnMgZnJvbVxcbm1tL2h1Z2V0bGJfY21hLmMtMjY2LVxcdFxcdCAqIGNtYSBhcmUgcG9zc2libGUuICBTZXQgdG8gemVybyBpZiBubyBjbWEgcmVnaW9ucyBhcmUgc2V0IHVwLlxcbm1tL2h1Z2V0bGJfY21hLmMtMjY3LVxcdFxcdCAqL1xcbm1tL2h1Z2V0bGJfY21hLmM6MjY4OlxcdFxcdGh1Z2V0bGJfY21hX3NpemUgPSAwO1xcbm1tL2h1Z2V0bGJfY21hLmMtMjY5LX1cXG5tbS9odWdldGxiX2NtYS5jLTI3MC1cXG5tbS9odWdldGxiX2NtYS5jOjI3MTpib29sIGh1Z2V0bGJfY21hX2V4Y2x1c2l2ZV9hbGxvYyh2b2lkKVxcbm1tL2h1Z2V0bGJfY21hLmMtMjcyLXtcXG5tbS9odWdldGxiX2NtYS5jOjI3MzpcXHRyZXR1cm4gaHVnZXRsYl9jbWFfb25seTtcXG5tbS9odWdldGxiX2NtYS5jLTI3NC19XFxubW0vaHVnZXRsYl9jbWEuYy0yNzUtXFxubW0vaHVnZXRsYl9jbWEuYzoyNzY6dW5zaWduZWQgbG9uZyBfX2luaXQgaHVnZXRsYl9jbWFfdG90YWxfc2l6ZSh2b2lkKVxcbm1tL2h1Z2V0bGJfY21hLmMtMjc3LXtcXG5tbS9odWdldGxiX2NtYS5jOjI3ODpcXHRyZXR1cm4gaHVnZXRsYl9jbWFfc2l6ZTtcXG5tbS9odWdldGxiX2NtYS5jLTI3OS19XFxubW0vaHVnZXRsYl9jbWEuYy0yODAtXFxubW0vaHVnZXRsYl9jbWEuYzoyODE6dm9pZCBfX2luaXQgaHVnZXRsYl9jbWFfdmFsaWRhdGVfcGFyYW1zKHZvaWQpXFxubW0vaHVnZXRsYl9jbWEuYy0yODIte1xcbm1tL2h1Z2V0bGJfY21hLmM6MjgzOlxcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcXG5tbS9odWdldGxiX2NtYS5jOjI4NDpcXHRcXHRodWdldGxiX2NtYV9vbmx5ID0gZmFsc2U7XFxubW0vaHVnZXRsYl9jbWEuYy0yODUtfVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0yODc9Ym9vbCBfX2luaXQgaHVnZXRsYl9lYXJseV9jbWEoc3RydWN0IGhzdGF0ZSAqaClcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjkxLVxcbm1tL2h1Z2V0bGJfY21hLmM6MjkyOlxcdHJldHVybiBoc3RhdGVfaXNfZ2lnYW50aWMoaCkgXFx1MDAyNlxcdTAwMjYgaHVnZXRsYl9jbWFfb25seTtcXG5tbS9odWdldGxiX2NtYS5jLTI5My19XFxuLS1cXG5tbS9odWdldGxiX2NtYS5oLTUtI2lmZGVmIENPTkZJR19DTUFcXG5tbS9odWdldGxiX2NtYS5oOjY6dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9odWdldGxiX2NtYS5oOjc6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9odWdldGxiX2NtYS5oLTgtXFx0XFx0XFx0XFx0ICAgICAgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spO1xcbm1tL2h1Z2V0bGJfY21hLmg6OTpzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgKmh1Z2V0bGJfY21hX2FsbG9jX2Jvb3RtZW0oc3RydWN0IGhzdGF0ZSAqaCwgaW50ICpuaWQsXFxubW0vaHVnZXRsYl9jbWEuaC0xMC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgYm9vbCBub2RlX2V4YWN0KTtcXG5tbS9odWdldGxiX2NtYS5oOjExOmJvb2wgaHVnZXRsYl9jbWFfZXhjbHVzaXZlX2FsbG9jKHZvaWQpO1xcbm1tL2h1Z2V0bGJfY21hLmg6MTI6dW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV90b3RhbF9zaXplKHZvaWQpO1xcbm1tL2h1Z2V0bGJfY21hLmg6MTM6dm9pZCBodWdldGxiX2NtYV92YWxpZGF0ZV9wYXJhbXModm9pZCk7XFxubW0vaHVnZXRsYl9jbWEuaC0xNC1ib29sIGh1Z2V0bGJfZWFybHlfY21hKHN0cnVjdCBoc3RhdGUgKmgpO1xcbm1tL2h1Z2V0bGJfY21hLmgtMTUtI2Vsc2VcXG5tbS9odWdldGxiX2NtYS5oOjE2OnN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2V0bGJfY21hLmgtMTcte1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuaC0xOS1cXG5tbS9odWdldGxiX2NtYS5oOjIwOnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLFxcbm1tL2h1Z2V0bGJfY21hLmgtMjEtXFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssXFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS9odWdldGxiX2NtYS5oPTI2PXN0YXRpYyBpbmxpbmVcXG5tbS9odWdldGxiX2NtYS5oOjI3OnN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqaHVnZXRsYl9jbWFfYWxsb2NfYm9vdG1lbShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgKm5pZCxcXG5tbS9odWdldGxiX2NtYS5oLTI4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBib29sIG5vZGVfZXhhY3QpXFxuLS1cXG5tbS9odWdldGxiX2NtYS5oLTMyLVxcbm1tL2h1Z2V0bGJfY21hLmg6MzM6c3RhdGljIGlubGluZSBib29sIGh1Z2V0bGJfY21hX2V4Y2x1c2l2ZV9hbGxvYyh2b2lkKVxcbm1tL2h1Z2V0bGJfY21hLmgtMzQte1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuaC0zNy1cXG5tbS9odWdldGxiX2NtYS5oOjM4OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdldGxiX2NtYV90b3RhbF9zaXplKHZvaWQpXFxubW0vaHVnZXRsYl9jbWEuaC0zOS17XFxuLS1cXG5tbS9odWdldGxiX2NtYS5oLTQyLVxcbm1tL2h1Z2V0bGJfY21hLmg6NDM6c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY21hX3ZhbGlkYXRlX3BhcmFtcyh2b2lkKVxcbm1tL2h1Z2V0bGJfY21hLmgtNDQte1xcbi0tXFxubW0vbW1faW5pdC5jPTI2OTU9dm9pZCBfX2luaXQgbW1fY29yZV9pbml0X2Vhcmx5KHZvaWQpXFxubW0vbW1faW5pdC5jLTI2OTYte1xcbm1tL21tX2luaXQuYzoyNjk3OlxcdGh1Z2V0bGJfY21hX3Jlc2VydmUoKTtcXG5tbS9tbV9pbml0LmMtMjY5OC1cXHRodWdldGxiX2Jvb3RtZW1fYWxsb2MoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6NTk6MDAuOTUxMTAyODk2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Nzg3MDMzODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29tcGlsYXRpb24gUmVxdWlyZW1lbnRzIGZvciBgaHVnZXRsYl9jbWEuY2AqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBgaHVnZXRsYl9jbWEuY2AgZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpdCB3YXMgc2ltcGx5IGEgbWF0dGVyIG9mIGBDT05GSUdfQ01BYCBhbmQgYENPTkZJR19IVUdFVExCRlNgIGJvdGggYmVpbmcgZW5hYmxlZC4gQnV0IGxldCdzIHZlcmlmeS4gUmlnaHQsIGxldCBtZSBsb29rIGF0IHRoZSBgbW0vTWFrZWZpbGVgIGFuZCBjb25maXJtLiBBaCwgdGhlcmUgaXQgaXM6XG5cbmBgYFxuaWZkZWYgQ09ORklHX0NNQVxub2JqLSQoQ09ORklHX0hVR0VUTEJGUykgKz0gaHVnZXRsYl9jbWEub1xuZW5kaWZcbmBgYFxuXG5ZZXAsIGFzIEkgc3VzcGVjdGVkLiBXZSBkZWZpbml0ZWx5IG5lZWQgKmJvdGgqIGBDT05GSUdfQ01BYCBhbmQgYENPTkZJR19IVUdFVExCRlNgIHRvIGJlIGVuYWJsZWQgZm9yIGBodWdldGxiX2NtYS5vYCB0byBiZSBidWlsdC4gTWFrZXMgcGVyZmVjdCBzZW5zZS5cblxuQW5kIG5vdyBJIHdhbnQgdG8gdGVzdCBjcHVzZXQgaW50ZXJhY3Rpb25zLiBJJ20gZ29pbmcgdG8gbmVlZCBgQ09ORklHX0NQVVNFVFNgIGVuYWJsZWQgZm9yIHRoYXQuIEkgc2hvdWxkIGNvbmZpcm0gd2hlcmUgSSBjYW4gZmluZCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYXNzb2NpYXRlZCB3aXRoIENQVSBzZXQgb3BlcmF0aW9ucy4gSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBmb3IgYHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luYCBpbiBgaW5jbHVkZS9saW51eC9jcHVzZXQuaGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzcxLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjU5OjA0LjkyOTgwOTU5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMyMzA5MDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlYWRfbWVtc19hbGxvd2VkX2JlZ2luXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvY3B1c2V0Lmg9MjE9ZXh0ZXJuIGJvb2wgbG9ja2RlcF9pc19jcHVzZXRfaGVsZCh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjYtICogU3RhdGljIGJyYW5jaCByZXdyaXRlcyBjYW4gaGFwcGVuIGluIGFuIGFyYml0cmFyeSBvcmRlciBmb3IgYSBnaXZlblxcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6Mjc6ICoga2V5LiBJbiBjb2RlIHBhdGhzIHdoZXJlIHdlIG5lZWQgdG8gbG9vcCB3aXRoIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCkgYW5kXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yOC0gKiByZWFkX21lbXNfYWxsb3dlZF9yZXRyeSgpIHRvIGdldCBhIGNvbnNpc3RlbnQgdmlldyBvZiBtZW1zX2FsbG93ZWQsIHdlIG5lZWRcXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg9MTM1PWV4dGVybiB2b2lkIGNwdXNldF9yZXNldF9zY2hlZF9kb21haW5zKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xMzctLypcXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjEzODogKiByZWFkX21lbXNfYWxsb3dlZF9iZWdpbiBpcyByZXF1aXJlZCB3aGVuIG1ha2luZyBkZWNpc2lvbnMgaW52b2x2aW5nXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xMzktICogbWVtc19hbGxvd2VkIHN1Y2ggYXMgZHVyaW5nIHBhZ2UgYWxsb2NhdGlvbi4gbWVtc19hbGxvd2VkIGNhbiBiZSB1cGRhdGVkIGluXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNDAtICogcGFyYWxsZWwgYW5kIGRlcGVuZGluZyBvbiB0aGUgbmV3IHZhbHVlIGFuIG9wZXJhdGlvbiBjYW4gZmFpbCBwb3RlbnRpYWxseVxcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MTQxOiAqIGNhdXNpbmcgcHJvY2VzcyBmYWlsdXJlLiBBIHJldHJ5IGxvb3Agd2l0aCByZWFkX21lbXNfYWxsb3dlZF9iZWdpbiBhbmRcXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTE0Mi0gKiByZWFkX21lbXNfYWxsb3dlZF9yZXRyeSBwcmV2ZW50cyB0aGVzZSBhcnRpZmljaWFsIGZhaWx1cmVzLlxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTQzLSAqL1xcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MTQ0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKHZvaWQpXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNDUte1xcbi0tXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNTMtICogSWYgdGhpcyByZXR1cm5zIHRydWUsIHRoZSBvcGVyYXRpb24gdGhhdCB0b29rIHBsYWNlIGFmdGVyXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoxNTQ6ICogcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4gbWF5IGhhdmUgZmFpbGVkIGFydGlmaWNpYWxseSBkdWUgdG8gYSBjb25jdXJyZW50XFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0xNTUtICogdXBkYXRlIG9mIG1lbXNfYWxsb3dlZC4gSXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byByZXRyeSB0aGUgb3BlcmF0aW9uIGlmXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oPTI4OD1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X21lbXNfYWxsb3dlZChub2RlbWFza190IG5vZGVtYXNrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yOTEtXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoyOTI6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4odm9pZClcXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTI5My17XFxuLS1cXG5tbS9maWxlbWFwLmM9OTk5PXN0cnVjdCBmb2xpbyAqZmlsZW1hcF9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9maWxlbWFwLmMtMTAxMS1cXHRcXHRkbyB7XFxubW0vZmlsZW1hcC5jOjEwMTI6XFx0XFx0XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9maWxlbWFwLmMtMTAxMy1cXHRcXHRcXHRuID0gY3B1c2V0X21lbV9zcHJlYWRfbm9kZSgpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTEyNzU9c3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEyOTAtcmV0cnlfY3B1c2V0Olxcbm1tL2h1Z2V0bGIuYzoxMjkxOlxcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XFxubW0vaHVnZXRsYi5jLTEyOTItXFx0Zm9yX2VhY2hfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCB6b25lbGlzdCwgZ2ZwX3pvbmUoZ2ZwX21hc2spLCBubWFzaykge1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0yOD1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy00MS1cXHRpZiAoIW5vZGVtYXNrKSB7XFxubW0vaHVnZXRsYl9jbWEuYzo0MjpcXHRcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbm1tL2h1Z2V0bGJfY21hLmMtNDMtXFx0XFx0bm1hc2sgPSBcXHUwMDI2Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjEwMD1zdGF0aWMgdW5zaWduZWQgaW50IHdlaWdodGVkX2ludGVybGVhdmVfbm9kZXMoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5KVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjEwNi1cXHQvKiB0byBwcmV2ZW50IG1pc2NvdW50IHVzZSB0c2stXFx1MDAzZW1lbXNfYWxsb3dlZF9zZXEgdG8gZGV0ZWN0IHJlYmluZCAqL1xcbm1tL21lbXBvbGljeS5jOjIxMDc6XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9tZW1wb2xpY3kuYy0yMTA4LVxcdG5vZGUgPSBjdXJyZW50LVxcdTAwM2VpbF9wcmV2O1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjEyMz1zdGF0aWMgdW5zaWduZWQgaW50IGludGVybGVhdmVfbm9kZXMoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5KVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjEyOS1cXHRkbyB7XFxubW0vbWVtcG9saWN5LmM6MjEzMDpcXHRcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbm1tL21lbXBvbGljeS5jLTIxMzEtXFx0XFx0bmlkID0gbmV4dF9ub2RlX2luKGN1cnJlbnQtXFx1MDAzZWlsX3ByZXYsIHBvbGljeS1cXHUwMDNlbm9kZXMpO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjYzMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjY1NS1cXHRkbyB7XFxubW0vbWVtcG9saWN5LmM6MjY1NjpcXHRcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbm1tL21lbXBvbGljeS5jLTI2NTctXFx0XFx0bm5vZGVzID0gcmVhZF9vbmNlX3BvbGljeV9ub2RlbWFzayhwb2wsIFxcdTAwMjZub2Rlcyk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDcyNT1fX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDc2NC1cXHRjb21wYWN0X3ByaW9yaXR5ID0gREVGX0NPTVBBQ1RfUFJJT1JJVFk7XFxubW0vcGFnZV9hbGxvYy5jOjQ3NjU6XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9wYWdlX2FsbG9jLmMtNDc2Ni1cXHR6b25lbGlzdF9pdGVyX2Nvb2tpZSA9IHpvbmVsaXN0X2l0ZXJfYmVnaW4oKTtcXG4tLVxcbm1tL3Nob3dfbWVtLmM9MTE5PXN0YXRpYyBib29sIHNob3dfbWVtX25vZGVfc2tpcCh1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vc2hvd19tZW0uYy0xMjUtXFx0ICogbm8gbm9kZSBtYXNrIC0gYWthIGltcGxpY2l0IG1lbW9yeSBudW1hIHBvbGljeS4gRG8gbm90IGJvdGhlciB3aXRoXFxubW0vc2hvd19tZW0uYzoxMjY6XFx0ICogdGhlIHN5bmNocm9uaXphdGlvbiAtIHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luIC0gYmVjYXVzZSB3ZSBkbyBub3RcXG5tbS9zaG93X21lbS5jLTEyNy1cXHQgKiBoYXZlIHRvIGJlIHByZWNpc2UgaGVyZS5cXG4tLVxcbm1tL3NsdWIuYz0zODYzPXN0YXRpYyB2b2lkICpnZXRfZnJvbV9hbnlfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTM4OTctXFx0XFx0LypcXG5tbS9zbHViLmM6Mzg5ODpcXHRcXHQgKiByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpIGFjY2Vzc2VzIGN1cnJlbnQtXFx1MDAzZW1lbXNfYWxsb3dlZF9zZXEsXFxubW0vc2x1Yi5jLTM4OTktXFx0XFx0ICogYSBzZXFjb3VudF9zcGlubG9ja190IHRoYXQgaXMgbm90IE5NSS1zYWZlLiBEbyBub3QgYWNjZXNzXFxuLS1cXG5tbS9zbHViLmMtMzkwMy1cXHRcXHRpZiAoYWxsb3dfc3BpbilcXG5tbS9zbHViLmM6MzkwNDpcXHRcXHRcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbm1tL3NsdWIuYy0zOTA1LVxcbi0tXFxubW0vc2x1Yi5jPTcyMzE9X19yZWZpbGxfb2JqZWN0c19hbnkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXFxuLS1cXG5tbS9zbHViLmMtNzI0Ni1cXHRkbyB7XFxubW0vc2x1Yi5jOjcyNDc6XFx0XFx0Y3B1c2V0X21lbXNfY29va2llID0gcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKTtcXG5tbS9zbHViLmMtNzI0OC1cXHRcXHR6b25lbGlzdCA9IG5vZGVfem9uZWxpc3QobWVtcG9saWN5X3NsYWJfbm9kZSgpLCBnZnApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTo1OTowNi41NjIxMjU1MzJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2NzQzOTI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB6ZXJvaW5nIGluIG9uIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBUaGF0IGZ1bmN0aW9uIGlzIGNydWNpYWw7IGl0J3MgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQgaW4gYG1tL2h1Z2V0bGJfY21hLmNgLCBzbyBpdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlcy4gTGV0J3MgbWFrZSBzdXJlIHdlJ3JlIGZvY3VzaW5nIG91ciBhdHRlbnRpb24gdGhlcmUuXG5cbldlJ2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gYSBmZXcgY29uZmlnIG9wdGlvbnMsIG9mIGNvdXJzZS4gV2UncmUgZGVhbGluZyB3aXRoIGBDT05GSUdfQ01BYCwgYENPTkZJR19IVUdFVExCRlNgLCBhbmQgYENPTkZJR19DUFVTRVRTYCAtIHRob3NlIHdpbGwgY2VydGFpbmx5IGluZmx1ZW5jZSB0aGUgYmVoYXZpb3IuXG5cbk5vdywgYSBxdWljayBzYW5pdHkgY2hlY2s6IHNpbmNlIHdlJ3JlIHdvcmtpbmcgd2l0aCBodWdldGxiIHBhZ2VzLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyB0aGUgY29ycmVjdCBjb25maWcgc2V0dGluZyB3ZSdyZSBpbnRlcmVzdGVkIGluLCBhbmQgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHJlbGF0ZWQgc2V0dGluZ3MgdGhhdCBjb21lIGludG8gcGxheSBoZXJlLiBXZSBkb24ndCB3YW50IHRvIG1pc3MgYW55dGhpbmcgcmVsYXRlZCB0byB0aGUgYmFzZSBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA3NywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTo1OToxMC42Mjk1NjkzMTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzY2MTE1OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTo1OToxMi4yMDYxODc3MjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4NzI5MzU4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQXNzZXNzaW5nIEh1Z2UgUGFnZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgcHJvbXB0IGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLCBpcyB0byB6ZXJvIGluIG9uIGBjb25maWcgSFVHRVRMQl9QQUdFYC4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgd2hlbiBpdCBjb21lcyB0byBodWdlIHBhZ2UgaW1wbGVtZW50YXRpb24gYXQgYSBrZXJuZWwgbGV2ZWwuIFRoaXMgaXMgdGhlIGx5bmNocGluIOKAkyB0aGUgbWFzdGVyIHN3aXRjaCBpZiB5b3Ugd2lsbCDigJMgZm9yIHdoZXRoZXIgb3Igbm90IGh1Z2UgcGFnZXMgYXJlIGV2ZW4gZW5hYmxlZCBhbmQgaG93IHRoZSBzeXN0ZW0gZXZlbiBsb29rcyBmb3IgbGFyZ2UgbWVtb3J5IGJsb2Nrcy4gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBzZXJpb3VzIGludmVzdGlnYXRpb24sIGJlIGl0IHRyb3VibGVzaG9vdGluZyBwZXJmb3JtYW5jZSBpc3N1ZXMsIHZlcmlmeWluZyBhIHNldHVwLCBvciBjb25maXJtaW5nIGEgYnVpbGQgY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIGtub3cgaXRzIHN0YXRlIHRvIGRldGVybWluZSBuZXh0IHN0ZXBzLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoYXQgdGhhdCBtZWFucyBmb3IgcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTA5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6NTk6MTUuMzkzNDg1ODg4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQyMTY5ODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCX1BBR0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zaC9tbS9LY29uZmlnPTE1OD1jaG9pY2VcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjMtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE2NDpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRLXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2NS1cXHRib29sIFxcXCI2NGtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2Ny1cXG5hcmNoL3NoL21tL0tjb25maWc6MTY4OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8yNTZLXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2OS1cXHRib29sIFxcXCIyNTZrQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzEtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3Mjpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMU1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3My1cXHRib29sIFxcXCIxTUJcXFwiXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3NC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTc1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUJcXG5hcmNoL3NoL21tL0tjb25maWctMTc2LVxcdGJvb2wgXFxcIjRNQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzgtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3OTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xODAtXFx0Ym9vbCBcXFwiNjRNQlxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXFxuZnMvS2NvbmZpZy0yNjQtXFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNzItXFxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxcbmZzL0tjb25maWctMjc0LVxcdGRlZl9ib29sIEhVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNzYtXFxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuZnMvS2NvbmZpZy0yNzgtXFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuLS1cXG5tbS9LY29uZmlnPTcwNj1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy03MDgtXFxubW0vS2NvbmZpZzo3MDk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxubW0vS2NvbmZpZy03MTAtXFx0ZGVmX2Jvb2wgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTo1OToxNy4wMzU2NjI0N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzY0NjMwMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGRlbGl2ZXJlZCBhcyBpZiBJJ20gcmVmbGVjdGluZyBvbiBpdCBteXNlbGY6XG5cbioqSW5pdGlhbCBDb25maWd1cmF0aW9uIENoZWNrKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgbWFpbiB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB0aGF0IGBIVUdFVExCRlNgIGlzIHNldCB1cCBjb3JyZWN0bHkuIFRoYXQncyB0aGUgY29yZS4gQmVmb3JlIGRpdmluZyB0b28gZGVlcCwgaXQncyB3b3J0aCBhIHF1aWNrIGxvb2sgYXQgYGNvbmZpZyBDTUFgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9uIGlzIHNldCB1cCB0b28uIEl0IG1ha2VzIHNlbnNlIHRvIGNoZWNrIGJvdGggb2YgdGhlc2UgdG9nZXRoZXIgYXMgdGhleSBhcmUgYm90aCBhYm91dCBtZW1vcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzAzLCJPdXRwdXRUb2tlbnMiOjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6NTk6MTkuODAwMjk1NTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjM5NzA3NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENNQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZG1hL0tjb25maWc9MTczPWNvbmZpZyBETUFfTlVNQV9DTUFcXG4tLVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0xODUtXFxua2VybmVsL2RtYS9LY29uZmlnOjE4Njpjb25maWcgQ01BX1NJWkVfUEVSTlVNQVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0xODctXFx0Ym9vbCBcXFwiRGVmYXVsdCBDTUEgYXJlYSBwZXIgTlVNQSBub2RlXFxcIlxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnPTE5Nj1jb21tZW50IFxcXCJEZWZhdWx0IGNvbnRpZ3VvdXMgbWVtb3J5IGFyZWEgc2l6ZTpcXFwiXFxua2VybmVsL2RtYS9LY29uZmlnLTE5Ny1cXG5rZXJuZWwvZG1hL0tjb25maWc6MTk4OmNvbmZpZyBDTUFfU0laRV9NQllURVNcXG5rZXJuZWwvZG1hL0tjb25maWctMTk5LVxcdGludCBcXFwiU2l6ZSBpbiBNZWdhIEJ5dGVzXFxcIlxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnLTIwOC1cXG5rZXJuZWwvZG1hL0tjb25maWc6MjA5OmNvbmZpZyBDTUFfU0laRV9QRVJDRU5UQUdFXFxua2VybmVsL2RtYS9LY29uZmlnLTIxMC1cXHRpbnQgXFxcIlBlcmNlbnRhZ2Ugb2YgdG90YWwgbWVtb3J5XFxcIlxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnPTIyMD1jaG9pY2VcXG4tLVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjMtXFxua2VybmVsL2RtYS9LY29uZmlnOjIyNDpjb25maWcgQ01BX1NJWkVfU0VMX01CWVRFU1xcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjUtXFx0Ym9vbCBcXFwiVXNlIG1lZ2EgYnl0ZXMgdmFsdWUgb25seVxcXCJcXG5rZXJuZWwvZG1hL0tjb25maWctMjI2LVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoyMjc6Y29uZmlnIENNQV9TSVpFX1NFTF9QRVJDRU5UQUdFXFxua2VybmVsL2RtYS9LY29uZmlnLTIyOC1cXHRib29sIFxcXCJVc2UgcGVyY2VudGFnZSB2YWx1ZSBvbmx5XFxcIlxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjktXFxua2VybmVsL2RtYS9LY29uZmlnOjIzMDpjb25maWcgQ01BX1NJWkVfU0VMX01JTlxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzEtXFx0Ym9vbCBcXFwiVXNlIGxvd2VyIHZhbHVlIChtaW5pbXVtKVxcXCJcXG5rZXJuZWwvZG1hL0tjb25maWctMjMyLVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoyMzM6Y29uZmlnIENNQV9TSVpFX1NFTF9NQVhcXG5rZXJuZWwvZG1hL0tjb25maWctMjM0LVxcdGJvb2wgXFxcIlVzZSBoaWdoZXIgdmFsdWUgKG1heGltdW0pXFxcIlxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnPTIzNj1lbmRjaG9pY2VcXG5rZXJuZWwvZG1hL0tjb25maWctMjM3LVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoyMzg6Y29uZmlnIENNQV9BTElHTk1FTlRcXG5rZXJuZWwvZG1hL0tjb25maWctMjM5LVxcdGludCBcXFwiTWF4aW11bSBQQUdFX1NJWkUgb3JkZXIgb2YgYWxpZ25tZW50IGZvciBjb250aWd1b3VzIGJ1ZmZlcnNcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTEwNjQ9Y29uZmlnIEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXFxuLS1cXG5tbS9LY29uZmlnLTEwNjYtXFxubW0vS2NvbmZpZzoxMDY3OmNvbmZpZyBDTUFcXG5tbS9LY29uZmlnLTEwNjgtXFx0Ym9vbCBcXFwiQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDgxLVxcbm1tL0tjb25maWc6MTA4Mjpjb25maWcgQ01BX0RFQlVHRlNcXG5tbS9LY29uZmlnLTEwODMtXFx0Ym9vbCBcXFwiQ01BIGRlYnVnZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDg3LVxcbm1tL0tjb25maWc6MTA4ODpjb25maWcgQ01BX1NZU0ZTXFxubW0vS2NvbmZpZy0xMDg5LVxcdGJvb2wgXFxcIkNNQSBpbmZvcm1hdGlvbiB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTA5NC1cXG5tbS9LY29uZmlnOjEwOTU6Y29uZmlnIENNQV9BUkVBU1xcbm1tL0tjb25maWctMTA5Ni1cXHRpbnQgXFxcIk1heGltdW0gY291bnQgb2YgdGhlIENNQSBhcmVhc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6NTk6MjEuMzI0MjcyMTQ1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDI2MTYzNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiDigJMgQSBRdWljayBDaGVjayoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBzdGFydGluZyB3aXRoIGBDT05GSUdfQ01BYC4gVGhhdCdzIG91ciBmb2NhbCBwb2ludC4gTWFrZXMgc2Vuc2UsIHRoYXQncyB3aGVyZSB3ZSdyZSBhdCB3aXRoIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgc2V0dGluZ3Mgb24gdGhhdCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlci5cblxuQW5kLCBvZiBjb3Vyc2UsIHRoYXQgYWx3YXlzIGxlYWRzIG1lIHRvIGNvbnNpZGVyIGBjb25maWcgQ1BVU0VUU2AuIEEgcXVpY2sgcmV2aWV3IG9mIHRob3NlIHNldHRpbmdzIHdpbGwgYmUgaW1wb3J0YW50IHRvIGVuc3VyaW5nIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGNvcnJlY3RseS4gR290dGEgbWFrZSBzdXJlIHRob3NlIHR3byBhcmUgY29uc2lzdGVudCB3aXRoIGVhY2ggb3RoZXIuIFRoaXMgaXMgYWxsIHByZXR0eSBzdGFuZGFyZCwgYnV0IHdvcnRoIGRvdWJsZS1jaGVja2luZyBub25ldGhlbGVzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMTgsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTo1OToyNC44NjY4OTE1OTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTc3OTY4MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENQVVNFVFNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEyODQ9Y29uZmlnIENHUk9VUF9IVUdFVExCXFxuLS1cXG5pbml0L0tjb25maWctMTI5OS1cXG5pbml0L0tjb25maWc6MTMwMDpjb25maWcgQ1BVU0VUU1xcbmluaXQvS2NvbmZpZy0xMzAxLVxcdGJvb2wgXFxcIkNwdXNldCBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEzMTItXFxuaW5pdC9LY29uZmlnOjEzMTM6Y29uZmlnIENQVVNFVFNfVjFcXG5pbml0L0tjb25maWctMTMxNC1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIGNwdXNldHMgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6NTk6MjYuMzY0NjkzNzFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI5NDIzNjAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmdW5jdGlvbiBvZiBpbnRlcmVzdCBpcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gVGhlIGNvbmZpZywgYXMgZXhwZWN0ZWQsIHNlZW1zIHRvIGJlIHRpZWQgdG8gYENPTkZJR19DUFVTRVRTYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uLlxuXG5JdCdzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbiwgcmlnaHQ/IEkgaW1tZWRpYXRlbHkgd2FudCB0byBjb25maXJtIGl0cyByZWFjaGFiaWxpdHkgYW5kIHRlc3RhYmlsaXR5LiBUaGUgcGF0Y2ggZm9jdXNlcyAqc29sZWx5KiBvbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCwgd2hpY2ggc2ltcGxpZmllcyBteSBpbml0aWFsIGFzc2Vzc21lbnQ7IEkgZG9uJ3QgaGF2ZSB0byBjaGFzZSBkb3duIG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9ucy4gVGhlIG1vZGlmaWNhdGlvbiB0byBgbW0vaHVnZXRsYl9jbWEuY2AgY29uZmlybXMgdGhhdCB0aGUgcmVsZXZhbnQgY29uZmlncyBoZXJlIGFyZSBgQ09ORklHX0NNQWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYC5cblxuTm93LCBpcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBleHBvcnRlZCBvciBkaXJlY3RseSBhY2Nlc3NpYmxlIHZpYSBhIHN5c2NhbGw/IERpZ2dpbmcgYSBiaXQsIGl0IGxvb2tzIGxpa2UgaXQgKmlzKiByZWFjaGFibGUgZHVyaW5nIGdpZ2FudGljIGh1Z2UgcGFnZSBhbGxvY2F0aW9uLiBXZSdyZSB0YWxraW5nIGFib3V0IGh1Z2UgcGFnZXMgYWxsb2NhdGVkIHZpYSBgbW1hcGAgd2l0aCBgTUFQX0hVR0VUTEJgIGFuZCBhICpnaWdhbnRpYyogcGFnZSBzaXplLCBvciB0aHJvdWdoIGBzeXNmc2AgYnkgbWFuaXB1bGF0aW5nIGBucl9odWdlcGFnZXNgLiBCaW5nbywgdGhpcyBpcyBkZWZpbml0ZWx5IGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UhXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRob3NlIGtleSBjb25maWd1cmF0aW9uczogYEhVR0VUTEJGU2AsIGBDTUFgLCBhbmQgYENQVVNFVFNgLlxuXG5BIHF1aWNrIGNoZWNrIGNvbmZpcm1zIGl0J3Mgbm90IGEgc3RhdGljIGZ1bmN0aW9uLlxuYGBgY1xuc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcblx0XHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbmBgYFxuXG5BbHJpZ2h0LCB0aGF0J3MgZW5vdWdoIGZvciBteSBpbml0aWFsIHBhc3MuIEknbSByZWFkeSB0byByZXBvcnQgbXkgZmluZGluZ3MgdXNpbmcgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1MzQsIk91dHB1dFRva2VucyI6MTIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjU5OjM0LjY1ODkzMjA5OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3ODMwMjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIkNNQVwiLFxuICAgIFwiQ1BVU0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHRvIHJlc3BlY3QgY3B1c2V0IGNvbnN0cmFpbnRzIHdoZW4gYG5vZGVtYXNrYCBpcyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyAoSHVnZVRMQiArIENNQSkuIFRoZSBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHdoZW4gYWxsb2NhdGluZyBnaWdhbnRpYyBodWdlIHBhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiQ01BXCIsXG4gICAgXCJDUFVTRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgdG8gcmVzcGVjdCBjcHVzZXQgY29uc3RyYWludHMgd2hlbiBgbm9kZW1hc2tgIGlzIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIChIdWdlVExCICsgQ01BKS4gVGhlIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2Ugd2hlbiBhbGxvY2F0aW5nIGdpZ2FudGljIGh1Z2UgcGFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjU5OjM0LjczNjc2OTg0N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzOTc2NTI1NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTo1OTozNC43MzcyOTk3MDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDgzOTcxMTg3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHdoZW4gYG5vZGVtYXNrYCBpcyBOVUxMIGJ5IGZhbGxpbmcgYmFjayB0byBgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkYCBhbmQgaW50cm9kdWNpbmcgYSByZXRyeSBsb29wLiBUaGUgbG9jYWwgdmFyaWFibGUgYGNwdXNldF9tZW1zX2Nvb2tpZWAgaXMgb25seSBpbml0aWFsaXplZCB3aGVuIGBub2RlbWFza2AgaXMgTlVMTCwgYnV0IGR1ZSB0byBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24gaW4gdGhlIGNvbmRpdGlvbiBgIW5vZGVtYXNrIFxcdTAwMjZcXHUwMDI2IHVubGlrZWx5KHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpYCwgaXQgaXMgbmV2ZXIgcmVhZCB1bmluaXRpYWxpemVkLiBUaGUgYnVnIGJlaW5nIGZpeGVkIGlzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgYW5kIEtBU0FOLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgdG8gdXNlciBzcGFjZSBvciB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ0Y2NiNDA0MDQ5MWQwYTdhNzA1MDIzMDQxYjllMWFjOTNkYWFjOGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNTo1ODozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfY21hLmMgYi9tbS9odWdldGxiX2NtYS5jXG5pbmRleCAzOTM0NGQ2Yzc4ZDg0Li4zZTIyMTYxNjg2ZDJmIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYl9jbWEuY1xuKysrIGIvbW0vaHVnZXRsYl9jbWEuY1xuQEAgLTMsNiArMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NtYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdXNldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1faW5saW5lLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG5AQCAtMzAsMTUgKzMxLDI1IEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRpbnQgbm9kZTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG4rXHRjb25zdCBub2RlbWFza190ICpubWFzaztcbitcdHVuc2lnbmVkIGludCBjcHVzZXRfbWVtc19jb29raWU7XG4gXG4gXHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0aWYgKGh1Z2V0bGJfY21hW25pZF0pXG4rcmV0cnlfY3B1c2V0OlxuK1x0aWYgKCFub2RlbWFzaykge1xuK1x0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xuK1x0XHRubWFzayA9IFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcbitcdH0gZWxzZSB7XG4rXHRcdG5tYXNrID0gbm9kZW1hc2s7XG4rXHR9XG4rXG4rXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSBcdTAwMjZcdTAwMjYgbm9kZV9pc3NldChuaWQsICpubWFzaykpXG4gXHRcdHBhZ2UgPSBjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKGh1Z2V0bGJfY21hW25pZF0sIG9yZGVyKTtcbiBcbiBcdGlmICghcGFnZSBcdTAwMjZcdTAwMjYgIShnZnBfbWFzayBcdTAwMjYgX19HRlBfVEhJU05PREUpKSB7XG4tXHRcdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCAqbm9kZW1hc2spIHtcbitcdFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsICpubWFzaykge1xuIFx0XHRcdGlmIChub2RlID09IG5pZCB8fCAhaHVnZXRsYl9jbWFbbm9kZV0pXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbkBAIC00OCw4ICs1OSwxMiBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAoIXBhZ2UpXG4rXHRpZiAoIXBhZ2UpIHtcbitcdFx0aWYgKCFub2RlbWFzayBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHVubGlrZWx5KHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpKVxuK1x0XHRcdGdvdG8gcmV0cnlfY3B1c2V0O1xuIFx0XHRyZXR1cm4gTlVMTDtcbitcdH1cbiBcbiBcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiBcdGZvbGlvX3NldF9odWdldGxiX2NtYShmb2xpbyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNTo1OTozNC43MzczMDA3MzdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMyNjMxNzE1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIdWdldGxiIENNQSBBbGxvY2F0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IG1vZGlmaWVzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGluIGBtbS9odWdldGxiX2NtYS5jYC4gSXQncyBhZGRpbmcgY3B1c2V0IG5vZGVtYXNrIGhhbmRsaW5nLCB3aGljaCBpcyBhIGtleSBhcmVhIHRvIGdldCByaWdodC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIG1lbW9yeSBzYWZldHkg4oCTIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXG5cblJpZ2h0LCBzbyB0aGUgYmFzaWMgbG9naWMgaXMgdGhhdCBpZiBgbm9kZW1hc2tgIGlzIE5VTEwsIHdlIHVzZSBgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkYCBhbmQgdGhlIGByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpYCAvIGByZWFkX21lbXNfYWxsb3dlZF9yZXRyeSgpYCBtYWNoaW5lcnkuIElmIGl0J3Mgbm90IE5VTEwsIHdlIHVzZSB0aGUgcHJvdmlkZWQgYG5vZGVtYXNrYC4gIFRoZSBjb2RlIGNoZWNrcyBgbm9kZV9pc3NldChuaWQsICpubWFzaylgIGJlZm9yZSBhbGxvY2F0aW5nLiBDcnVjaWFsbHksIHRoZSBsb29wIG5vdyBpdGVyYXRlcyB1c2luZyBgZm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsICpubWFzaylgIGluc3RlYWQgb2YganVzdCBgKm5vZGVtYXNrYC4gVGhhdCdzIGEgZGVmaW5pdGUgaW1wcm92ZW1lbnQgdG8gdGhlIG9yaWdpbmFsIHZlcnNpb24uXG5cbk5vdywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aGF0IGFib3V0IGBjcHVzZXRfbWVtc19jb29raWVgPyBJIHNlZSBpdCdzIGluaXRpYWxpemVkIGJ5IGByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpYCwgYW5kIGBubWFza2AgaXMgc2V0IHRvIGVpdGhlciB0aGUgY3VycmVudCBhbGxvd2VkIG1lbXMgb3IgdGhlIHByb3ZpZGVkIGBub2RlbWFza2AuIFRoZSBsb29wIHVzZXMgYCpubWFza2AsIHdoaWNoIHNlZW1zIGZpbmUuIEhvd2V2ZXIsIGlmIGBub2RlbWFza2AgKmlzbid0KiBOVUxMLCB0aGVuIGBjcHVzZXRfbWVtc19jb29raWVgIGxvb2tzIHVuaW5pdGlhbGl6ZWQuXG5cbkJ1dCB0aGVuIEkgc2VlIHRoZSBjaGVjazpcbmBgYGNcblx0aWYgKCFwYWdlKSB7XG5cdFx0aWYgKCFub2RlbWFzayBcdTAwMjZcdTAwMjZcblx0XHQgICAgdW5saWtlbHkocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSkpXG5cdFx0XHRnb3RvIHJldHJ5X2NwdXNldDtcblx0XHRyZXR1cm4gTlVMTDtcblx0fVxuYGBgXG5BaGEhIENydWNpYWxseSwgdGhlIGNoZWNrIGlzIGAhbm9kZW1hc2sgXHUwMDI2XHUwMDI2IC4uLmAuICBCZWNhdXNlIG9mIEMncyBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24sIGlmIGBub2RlbWFza2AgaXMgKm5vdCogTlVMTCwgdGhlIGNvbmRpdGlvbiBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgYFx1MDAyNlx1MDAyNmAgaXNuJ3QgZXZlbiBleGVjdXRlZC4gIFRoZXJlZm9yZSwgdGhlIHVuaW5pdGlhbGl6ZWQgYGNwdXNldF9tZW1zX2Nvb2tpZWAgaXMgKm5vdCogcmVhZC4gVGhhdCdzIGEgcmVsaWVmIVxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdtIGNoZWNraW5nIGlmIGByZWFkX21lbXNfYWxsb3dlZF9yZXRyeWAgaXMgZG9pbmcgYW55dGhpbmcgZnVua3kuIEl0J3MgZWl0aGVyIGFuIGlubGluZSBmdW5jdGlvbiBvciBhIG1hY3JvLiBFaXRoZXIgd2F5LCBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24gb2YgYFx1MDAyNlx1MDAyNmAgbWVhbnMgaXQgZG9lc24ndCBnZXQgZXhlY3V0ZWQgd2hlbiB0aGUgbGVmdCBzaWRlIGlzIGZhbHNlLiAgU28gbm8gaXNzdWVzIHRoZXJlLiBJJ20gYWxzbyBjb25maXJtaW5nIHRoYXQgYGNwdXNldF9tZW1zX2Nvb2tpZWAgaXMgbG9jYWwgYW5kIG5vdCBzb21lIGdsb2JhbCBzdHJ1Y3R1cmUgc2hhcmVkIG91dHNpZGUgdGhlIGxvY2FsIGZ1bmN0aW9uLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGNvbnRyb2wgZmxvdyBpbiB0aGUgcmV0cnkuIFRoZSBjaGFuZ2VkIGNvZGUgaXM6XG5gYGBjXG4tXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSlcbityZXRyeV9jcHVzZXQ6XG4rXHRpZiAoIW5vZGVtYXNrKSB7XG4rXHRcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG4rXHRcdG5tYXNrID0gXHUwMDI2Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xuK1x0fSBlbHNlIHtcbitcdFx0bm1hc2sgPSBub2RlbWFzaztcbitcdH1cbitcbitcdGlmIChodWdldGxiX2NtYVtuaWRdIFx1MDAyNlx1MDAyNiBub2RlX2lzc2V0KG5pZCwgKm5tYXNrKSlcbiBcdFx0cGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpO1xuYGBgXG5cbkJhc2ljYWxseSwgaWYgYG5vZGVtYXNrYCBpcyBOVUxMLCB3ZSB1c2UgdGhlIGN1cnJlbnQgYWxsb3dlZCBtZW1zLiBJZiBpdCdzIG5vdCBOVUxMLCB3ZSB1c2UgdGhlIHByb3ZpZGVkIGBub2RlbWFza2AuIEFuZCB0aGF0IGdldHMgcGFzc2VkIHRvIGBub2RlX2lzc2V0KClgLiAgTm93LCBJJ20gdGhpbmtpbmcgYmFjazogZGlkbid0IHRoZSAqb3JpZ2luYWwqIGNvZGUgaGF2ZSBhbiBpc3N1ZSBpZiBgbm9kZW1hc2tgICp3YXMqIE5VTEw/IEFoIHllcywgdGhlIG9sZCBjb2RlIGhhZCB0aGlzOlxuXG5gYGBjXG5cdGlmIChodWdldGxiX2NtYVtuaWRdKVxuXHRcdHBhZ2UgPSBjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKGh1Z2V0bGJfY21hW25pZF0sIG9yZGVyKTtcblxuXHRpZiAoIXBhZ2UgXHUwMDI2XHUwMDI2ICEoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSkge1xuXHRcdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCAqbm9kZW1hc2spIHtcbmBgYFxuXG5JZiBgbm9kZW1hc2tgICp3YXMqIE5VTEwsIHRoYXQgYCpub2RlbWFza2Agd291bGQgYmUgZGVyZWZlcmVuY2luZyBhIE5VTEwgcG9pbnRlciwgcmlnaHQ/ICBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgZml4aW5nIHRoYXQgY3JpdGljYWwgaXNzdWUhXG5cblRvIGNvbmZpcm0sIEknbGwgdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggdGhlIGNvZGViYXNlIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGlzIGlzIHRoZSBzb2xlIGNhbGwtc2l0ZS4gSSB3YW50IHRvIGJlIDEwMCUgc3VyZSB0aGlzIGhhbmRsZXMgYG5vZGVtYXNrYCBjb3JyZWN0bHkgaW4gYWxsIGNhc2VzLiBJJ2xsIHNlYXJjaCBmb3IgdGhlIGNhbGxlcnMgb2YgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6NTk6NDguMDAwNDc2MzI0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMzOTgzNTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MTM2MD1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzY0LVxcbm1tL2h1Z2V0bGIuYzoxMzY1OlxcdGZvbGlvID0gaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKG9yZGVyLCBnZnBfbWFzaywgbmlkLCBub2RlbWFzayk7XFxubW0vaHVnZXRsYi5jLTEzNjYtXFx0aWYgKGZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0yMj12b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTI3LVxcbm1tL2h1Z2V0bGJfY21hLmM6Mjg6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9odWdldGxiX2NtYS5jLTI5LVxcdFxcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuaD02PXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vaHVnZXRsYl9jbWEuaDo3OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vaHVnZXRsYl9jbWEuaC04LVxcdFxcdFxcdFxcdCAgICAgIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKTtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmg9MTY9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiX2NtYS5oLTE5LVxcbm1tL2h1Z2V0bGJfY21hLmg6MjA6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsXFxubW0vaHVnZXRsYl9jbWEuaC0yMS1cXHRcXHRnZnBfdCBnZnBfbWFzayxcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDU6NTk6NDkuNjM0NDY1MTU2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTE1MzA0MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgRnVuY3Rpb24qKlxuXG5SaWdodCwgdGhlIGNhbGxlciBpZGVudGlmaWVkIGlzIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gLCBhbmQgaXQncyBjb21pbmcgZnJvbSBgbW0vaHVnZXRsYi5jYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gSHVnZVRMQiBmdW5jdGlvbmFsaXR5LiBPa2F5LCBsZXQncyB6ZXJvIGluIG9uIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgZG9pbmcgc3BlY2lmaWNhbGx5LiBUaGlzIGZ1bmN0aW9uIG5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBoYXMgdG8gZG8gd2l0aCBhbGxvY2F0aW5nIGEgdmVyeSBsYXJnZSBwYWdlLCBhbmQgaXQgaXMgcG90ZW50aWFsbHkgYWxsb2NhdGluZyB0aGUgbWVtb3J5IGluIGEgd2F5IHRoYXQgaXRzIGNvbnRlbnRzIGFyZSBmcm96ZW4uIFdlIG5lZWQgdG8gY2hlY2sgaXQgYW5kIGRpdmUgaW50byBpdHMgbG9naWMuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIHRoZSBpbnRyaWNhY2llcyBvZiBIdWdlVExCIG1hbmFnZW1lbnQsIHBhZ2UgdGFibGUgaW50ZXJhY3Rpb25zLCBhbmQgcG90ZW50aWFsbHkgc29tZSBzcGVjaWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneSBmb3IgdGhlc2UgbGFyZ2UgcGFnZXMuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEyMiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjU5OjUzLjQ0NTk5ODQzNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5NjgxNTExOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTEzMjA9c3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX3ZtYShzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEzNTktI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0NPTlRJR19BTExPQylcXG5tbS9odWdldGxiLmM6MTM2MDpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9odWdldGxiLmMtMTM2MS1cXHRcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzc2LSNlbHNlIC8qICFDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRSB8fCAhQ09ORklHX0NPTlRJR19BTExPQyAqL1xcbm1tL2h1Z2V0bGIuYzoxMzc3OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxcbm1tL2h1Z2V0bGIuYy0xMzc4LVxcdFxcdFxcdFxcdFxcdCAgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS9odWdldGxiLmM9MTgzNj1zdGF0aWMgc3RydWN0IGZvbGlvICpvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xODQ2LVxcdGlmIChvcmRlcl9pc19naWdhbnRpYyhvcmRlcikpXFxubW0vaHVnZXRsYi5jOjE4NDc6XFx0XFx0Zm9saW8gPSBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5tYXNrKTtcXG5tbS9odWdldGxiLmMtMTg0OC1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA1OjU5OjU1LjI0MjgyMTE3M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTU2MzcyNzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AgQ29kZSBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AsIGFuZCBpdCBjYWxscyBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCB3aXRoIGBubWFza2AuIFJpZ2h0LCBpZiBgbm1hc2tgIGlzIE5VTEwsIHRoZW4gdGhlIGBub2RlbWFza2AgcGFyYW1ldGVyIHBhc3NlZCB0byBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCBtdXN0IGFsc28gYmUgTlVMTC4gSGFuZyBvbiBhIHNlY29uZCwgdGhlIHBhdGNoIGRlc2NyaXB0aW9uIG1lbnRpb25zIGEgZml4IHJlbGF0ZWQgdG8gYSBwb3RlbnRpYWxseSBOVUxMIGBub2RlbWFza2AgY2F1c2luZyBhIGRlcmVmZXJlbmNlLiBBaCwgaXQncyBhIFwic3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XCIgZml4IGZvciBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSFcblxuVGhlIGNydWNpYWwgcGFydCBpcyB0aGUgYG5vZGVfaXNzZXQobmlkLCAqbm1hc2spYCBjaGVjay4gSWYgYG5vZGVtYXNrYCAqaXMqIE5VTEwsIHRoZW4gYG5tYXNrYCBpcyBhc3NpZ25lZCB0byBgXHUwMDI2Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkYCwgd2hpY2ggaXMgYSBjbGV2ZXIgd2F5IHRvIHByZXZlbnQgdGhlIGRyZWFkZWQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBTbywgdGhlIHBhdGNoIHNlZW1zIHRvIGhhdmUgYWRkcmVzc2VkIHRoZSBjb3JlIGlzc3VlLlxuXG5Ob3csIGRvZXMgdGhpcyBmaXggaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzPyBTcGVjaWZpY2FsbHksIGRvZXMgaXQgb3BlbiB0aGUgZG9vciBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U/IExldCdzIHNlZS4uLm5vLCBpdCBzZWVtcyB0aGF0IGlmIGBub2RlbWFza2AgaXMgTlVMTCwgYGNwdXNldF9tZW1zX2Nvb2tpZWAgZ2V0cyBpbml0aWFsaXplZC4gQW5kIGlmIGBub2RlbWFza2AgaXNuJ3QgTlVMTCwgdGhlbiBpdCBpcyB1bmluaXRpYWxpemVkLCBidXQgaXQncyBub3QgYWN0dWFsbHkgdXNlZCBkdWUgdG8gc2hvcnQtY2lyY3VpdGluZywgc28gdGhhdCdzIGdvb2QuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5YCBpc24ndCBhIG1hY3JvIHRoYXQgdW5jb25kaXRpb25hbGx5IGV2YWx1YXRlcyBpdHMgYXJndW1lbnRzLCB3aGljaCB3b3VsZCBiZSBwcm9ibGVtYXRpYy4gSSdsbCBjaGVjayBpdHMgZGVmaW5pdGlvbiB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzU5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA2OjAwOjAxLjE5OTE5NjgzMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMTE2NTM1NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNjowMDowMi43MzAzNzQ3MjZaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU4Mjc2NTU0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5YCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGByZWFkX21lbXNfYWxsb3dlZF9yZXRyeWAuIFRoZXJlJ3MgcHJvYmFibHkgYSBzdWJ0bGUgbnVhbmNlIGluIGl0cyBpbXBsZW1lbnRhdGlvbiB0aGF0IEknbSBvdmVybG9va2luZywgb3IgcGVyaGFwcyBhIGRlcGVuZGVuY3kgb24gb3RoZXIgY29tcG9uZW50cyBJJ20gbm90IGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCB0aGUgZGVmaW5pdGlvbi4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgcmV0cnkgbG9naWMgaXRzZWxmIC0gd2hhdCBjb25kaXRpb25zIHRyaWdnZXIgYSByZXRyeSwgaG93IG1hbnkgdGltZXMgZG9lcyBpdCBhdHRlbXB0LCBhbmQgd2hhdCBhcmUgdGhlIGJhY2tvZmYgc3RyYXRlZ2llcyBpZiBhbnk/IEFyZSB0aGVyZSBhbnkgc2lkZSBlZmZlY3RzPyBJIGFsc28gbmVlZCB0byB2ZXJpZnkgaXQncyB0aHJlYWQgc2FmZSBhbmQgYW55IHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucy4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MTEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNjowMDowOS4zMTMxNDM4MDZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDczMjE4NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhZF9tZW1zX2FsbG93ZWRfcmV0cnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9jcHVzZXQuaD0yMT1leHRlcm4gYm9vbCBsb2NrZGVwX2lzX2NwdXNldF9oZWxkKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yNy0gKiBrZXkuIEluIGNvZGUgcGF0aHMgd2hlcmUgd2UgbmVlZCB0byBsb29wIHdpdGggcmVhZF9tZW1zX2FsbG93ZWRfYmVnaW4oKSBhbmRcXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjI4OiAqIHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KCkgdG8gZ2V0IGEgY29uc2lzdGVudCB2aWV3IG9mIG1lbXNfYWxsb3dlZCwgd2UgbmVlZFxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjktICogdG8gZW5zdXJlIHRoYXQgYmVnaW4oKSBhbHdheXMgZ2V0cyByZXdyaXR0ZW4gYmVmb3JlIHJldHJ5KCkgaW4gdGhlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oPTEzNT1leHRlcm4gdm9pZCBjcHVzZXRfcmVzZXRfc2NoZWRfZG9tYWlucyh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTQxLSAqIGNhdXNpbmcgcHJvY2VzcyBmYWlsdXJlLiBBIHJldHJ5IGxvb3Agd2l0aCByZWFkX21lbXNfYWxsb3dlZF9iZWdpbiBhbmRcXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjE0MjogKiByZWFkX21lbXNfYWxsb3dlZF9yZXRyeSBwcmV2ZW50cyB0aGVzZSBhcnRpZmljaWFsIGZhaWx1cmVzLlxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMTQzLSAqL1xcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg9MTQ0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTE1Ny0gKi9cXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oOjE1ODpzdGF0aWMgaW5saW5lIGJvb2wgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkodW5zaWduZWQgaW50IHNlcSlcXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTE1OS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oPTI5Mj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByZWFkX21lbXNfYWxsb3dlZF9iZWdpbih2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yOTYtXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoyOTc6c3RhdGljIGlubGluZSBib29sIHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KHVuc2lnbmVkIGludCBzZXEpXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yOTgte1xcbi0tXFxubW0vZmlsZW1hcC5jPTk5OT1zdHJ1Y3QgZm9saW8gKmZpbGVtYXBfYWxsb2NfZm9saW9fbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vZmlsZW1hcC5jLTEwMTQtXFx0XFx0XFx0Zm9saW8gPSBfX2ZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcCwgb3JkZXIsIG4pO1xcbm1tL2ZpbGVtYXAuYzoxMDE1OlxcdFxcdH0gd2hpbGUgKCFmb2xpbyBcXHUwMDI2XFx1MDAyNiByZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKTtcXG5tbS9maWxlbWFwLmMtMTAxNi1cXG4tLVxcbm1tL2h1Z2V0bGIuYz0xMjc1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzA4LVxcdH1cXG5tbS9odWdldGxiLmM6MTMwOTpcXHRpZiAodW5saWtlbHkocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSkpXFxubW0vaHVnZXRsYi5jLTEzMTAtXFx0XFx0Z290byByZXRyeV9jcHVzZXQ7XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTI4PXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTYzLVxcdFxcdGlmICghbm9kZW1hc2sgXFx1MDAyNlxcdTAwMjZcXG5tbS9odWdldGxiX2NtYS5jOjY0OlxcdFxcdCAgICB1bmxpa2VseShyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKSlcXG5tbS9odWdldGxiX2NtYS5jLTY1LVxcdFxcdFxcdGdvdG8gcmV0cnlfY3B1c2V0O1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjEwMD1zdGF0aWMgdW5zaWduZWQgaW50IHdlaWdodGVkX2ludGVybGVhdmVfbm9kZXMoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5KVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjExMC1cXHRcXHRub2RlID0gbmV4dF9ub2RlX2luKG5vZGUsIHBvbGljeS1cXHUwMDNlbm9kZXMpO1xcbm1tL21lbXBvbGljeS5jOjIxMTE6XFx0XFx0aWYgKHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpXFxubW0vbWVtcG9saWN5LmMtMjExMi1cXHRcXHRcXHRnb3RvIHJldHJ5O1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjEyMz1zdGF0aWMgdW5zaWduZWQgaW50IGludGVybGVhdmVfbm9kZXMoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5KVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjEzMS1cXHRcXHRuaWQgPSBuZXh0X25vZGVfaW4oY3VycmVudC1cXHUwMDNlaWxfcHJldiwgcG9saWN5LVxcdTAwM2Vub2Rlcyk7XFxubW0vbWVtcG9saWN5LmM6MjEzMjpcXHR9IHdoaWxlIChyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKTtcXG5tbS9tZW1wb2xpY3kuYy0yMTMzLVxcbi0tXFxubW0vbWVtcG9saWN5LmM9MjYzMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjY1Ny1cXHRcXHRubm9kZXMgPSByZWFkX29uY2VfcG9saWN5X25vZGVtYXNrKHBvbCwgXFx1MDAyNm5vZGVzKTtcXG5tbS9tZW1wb2xpY3kuYzoyNjU4OlxcdH0gd2hpbGUgKHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpO1xcbm1tL21lbXBvbGljeS5jLTI2NTktXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDY1OD1jaGVja19yZXRyeV9jcHVzZXQoaW50IGNwdXNldF9tZW1zX2Nvb2tpZSwgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQ2ODMtXFx0ICovXFxubW0vcGFnZV9hbGxvYy5jOjQ2ODQ6XFx0aWYgKHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpXFxubW0vcGFnZV9hbGxvYy5jLTQ2ODUtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS9zbHViLmM9Mzg2Mz1zdGF0aWMgdm9pZCAqZ2V0X2Zyb21fYW55X3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcF9mbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zOTE5LVxcdFxcdFxcdFxcdFxcdC8qXFxubW0vc2x1Yi5jOjM5MjA6XFx0XFx0XFx0XFx0XFx0ICogRG9uJ3QgY2hlY2sgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoKVxcbm1tL3NsdWIuYy0zOTIxLVxcdFxcdFxcdFxcdFxcdCAqIGhlcmUgLSBpZiBtZW1zX2FsbG93ZWQgd2FzIHVwZGF0ZWQgaW5cXG4tLVxcbm1tL3NsdWIuYy0zOTI5LVxcdFxcdH1cXG5tbS9zbHViLmM6MzkzMDpcXHR9IHdoaWxlIChhbGxvd19zcGluIFxcdTAwMjZcXHUwMDI2IHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpO1xcbm1tL3NsdWIuYy0zOTMxLSNlbmRpZlxcdC8qIENPTkZJR19OVU1BICovXFxuLS1cXG5tbS9zbHViLmM9NzIzMT1fX3JlZmlsbF9vYmplY3RzX2FueShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcXG4tLVxcbm1tL3NsdWIuYy03MjY0LVxcdFxcdFxcdFxcdC8qXFxubW0vc2x1Yi5jOjcyNjU6XFx0XFx0XFx0XFx0ICogRG9uJ3QgY2hlY2sgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoKSBoZXJlIC1cXG5tbS9zbHViLmMtNzI2Ni1cXHRcXHRcXHRcXHQgKiBpZiBtZW1zX2FsbG93ZWQgd2FzIHVwZGF0ZWQgaW4gcGFyYWxsZWwsIHRoYXRcXG4tLVxcbm1tL3NsdWIuYy03Mjc1LVxcdFxcdH1cXG5tbS9zbHViLmM6NzI3NjpcXHR9IHdoaWxlIChyZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKTtcXG5tbS9zbHViLmMtNzI3Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDY6MDA6MTAuODYwNDcxMDIxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMjczOTI0MzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgc3RhbmRhcmQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBUaGUgdnVsbmVyYWJpbGl0eSBzdGVtcyBmcm9tIGFuIHVuaGFuZGxlZCBjYXNlIHdoZXJlIGBub2RlbWFza2AgaXMgTlVMTC5cblxuSSBzZWUgdGhleSd2ZSBpbXBsZW1lbnRlZCBhIGZpeCB0aGF0IGludHJvZHVjZXMgYSByZXRyeSBtZWNoYW5pc20gdXNpbmcgYHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKClgIGFuZCBgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoKWAuIENydWNpYWxseSwgYHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5YCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24sIHdoaWNoIGlzIGNyaXRpY2FsIGhlcmUuIFRoZSBDIGNvbXBpbGVyIHdpbGwgc2hvcnQtY2lyY3VpdCB0aGUgcmlnaHQtaGFuZCBzaWRlIG9mIHRoZSBgXHUwMDI2XHUwMDI2YCBvcGVyYXRvci4gVGhlcmVmb3JlLCBpZiBgIW5vZGVtYXNrYCBpcyBmYWxzZSwgdGhlIHJpZ2h0IHNpZGUsIGByZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpYCB3aWxsIG5ldmVyIGJlIHJlYWQsIGFuZCB0aGUgdmFsdWUgb2YgYGNwdXNldF9tZW1zX2Nvb2tpZWAgaXMgaXJyZWxldmFudC4gSXQncyBzYWZlLiBUaGUgY29tcGlsZXIgcHJldmVudHMgdGhlIHVzZSBvZiB0aGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZS5cblxuTXkgZmlyc3QgdGhvdWdodCB3YXMsIFwiQ291bGQgdGhlcmUgYmUgb3RoZXIgcmlza3M/XCIgSG93ZXZlciwgbG9va2luZyBjbG9zZXIsIGBjcHVzZXRfbWVtc19jb29raWVgIGlzIGp1c3QgYW4gYHVuc2lnbmVkIGludGAgdXNlZCBpbiBhIHNlcWxvY2stbGlrZSByZXRyeSBsb29wLCB3aGljaCBpcyBjb21tb24uIEl0J3Mgbm90IGludm9sdmVkIGluIG1lbW9yeSBhbGxvY2F0aW9uIG9yIGRhdGEgcGFzc2luZyBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3MuXG5cblRoZSBwYXRjaCBpdHNlbGYgbW9kaWZpZXMgdGhlIGNvbnRyb2wgZmxvdyBhcm91bmQgdGhlIGFsbG9jYXRpb24gbG9naWMsIGJ1dCB0aGUgY29yZSBpc3N1ZSBpcyB0aGUgTlVMTCBjaGVjayBhbmQgdGhlIGhhbmRsaW5nIG9mIHRoZSBgbm9kZW1hc2tgLiBUaGUgZml4IGVuc3VyZXMgdGhhdCBpZiBgbm9kZW1hc2tgIGlzIE5VTEwsIHdlIGZhbGwgYmFjayB0byB1c2luZyBgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkYCBmcm9tIGEgYGNwdXNldGAuIFRoaXMgaXMgdGhlIGltcG9ydGFudCBwYXJ0IGJlY2F1c2UgaXQgcHJldmVudHMgdGhlIE5VTEwgZGVyZWZlcmVuY2UuXG5cbkkndmUgZG91YmxlLWNoZWNrZWQ6IHRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBJdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBjb25kaXRpb25hbCBsb2dpYyBub3cgZW5zdXJlcyB0aGF0IGFsbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIHJldHJ5IGxvb3AuIFRoZSBgY3B1c2V0X21lbXNfY29va2llYCBpcyBpbml0aWFsaXplZCBvbmx5IHdoZW4gYG5vZGVtYXNrYCBpcyBudWxsLCBidXQgaXMgc2hvcnQtY2lyY3VpdGVkIGlmIG5vdCwgYW5kIHRodXMgaXQgcmVtYWlucyB1bmluaXRpYWxpemVkIG9ubHkgd2hlbiB0aGUgY29uZGl0aW9uIGF2b2lkcyBpdHMgdXNlLlxuXG5Tbywgc3VtbWluZyBpdCB1cCwgdGhlIHBhdGNoIGZpeGVzIGEga25vd24gTlVMTCBwb2ludGVyIGlzc3VlLiBJdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcywgbm9yIGRvZXMgaXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZSBvcmlnaW5hbCBidWcgaXMgZWFzaWx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkIGhlcmUuIEl0J3MgYSBcIk5lZWRzS01TQU49ZmFsc2VcIiBzaXR1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMzEsIk91dHB1dFRva2VucyI6MjAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA2OjAwOjIzLjEzNDM5ODIyOVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2Agd2hlbiBgbm9kZW1hc2tgIGlzIE5VTEwgYnkgZmFsbGluZyBiYWNrIHRvIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgIGFuZCBpbnRyb2R1Y2luZyBhIHJldHJ5IGxvb3AuIFRoZSBsb2NhbCB2YXJpYWJsZSBgY3B1c2V0X21lbXNfY29va2llYCBpcyBvbmx5IGluaXRpYWxpemVkIHdoZW4gYG5vZGVtYXNrYCBpcyBOVUxMLCBidXQgZHVlIHRvIHNob3J0LWNpcmN1aXQgZXZhbHVhdGlvbiBpbiB0aGUgY29uZGl0aW9uIGAhbm9kZW1hc2sgXFx1MDAyNlxcdTAwMjYgdW5saWtlbHkocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSlgLCBpdCBpcyBuZXZlciByZWFkIHVuaW5pdGlhbGl6ZWQuIFRoZSBidWcgYmVpbmcgZml4ZWQgaXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBhbmQgS0FTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyB0byB1c2VyIHNwYWNlIG9yIHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2Agd2hlbiBgbm9kZW1hc2tgIGlzIE5VTEwgYnkgZmFsbGluZyBiYWNrIHRvIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgIGFuZCBpbnRyb2R1Y2luZyBhIHJldHJ5IGxvb3AuIFRoZSBsb2NhbCB2YXJpYWJsZSBgY3B1c2V0X21lbXNfY29va2llYCBpcyBvbmx5IGluaXRpYWxpemVkIHdoZW4gYG5vZGVtYXNrYCBpcyBOVUxMLCBidXQgZHVlIHRvIHNob3J0LWNpcmN1aXQgZXZhbHVhdGlvbiBpbiB0aGUgY29uZGl0aW9uIGAhbm9kZW1hc2sgXFx1MDAyNlxcdTAwMjYgdW5saWtlbHkocmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSlgLCBpdCBpcyBuZXZlciByZWFkIHVuaW5pdGlhbGl6ZWQuIFRoZSBidWcgYmVpbmcgZml4ZWQgaXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBhbmQgS0FTQU4uIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyB0byB1c2VyIHNwYWNlIG9yIHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowvpl4n[1] Phase: Succeeded StartedAt: 2026-08-11 06:00:34 +0000 UTC FinishedAt: 2026-08-11 06:00:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpl4n[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 06:00:34 +0000 UTC FinishedAt: 2026-08-11 06:00:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpl4n[2] Phase: Succeeded StartedAt: 2026-08-11 06:00:34 +0000 UTC FinishedAt: 2026-08-11 09:42:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:00:34 +0000 UTC FinishedAt: 2026-08-11 09:42:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:00:34 +0000 UTC FinishedAt: 2026-08-11 06:00:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:00:34 +0000 UTC FinishedAt: 2026-08-11 06:00:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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-workflowvpl4n/series-workflowvpl4n-convert-artifact-516868798/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:00:44 +0000 UTC FinishedAt: 2026-08-11 06:17:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:00:44 +0000 UTC FinishedAt: 2026-08-11 06:17:11 +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:*a2d0e6b1-0e9b-4436-95ef-934e7e597ffc,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-workflowvpl4n/series-workflowvpl4n-convert-artifact-516868798/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": "1d597a1f-94d1-49df-a3d4-8665ff898b1b", "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-workflowvpl4n/series-workflowvpl4n-build-action-1078371236/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:00:44 +0000 UTC FinishedAt: 2026-08-11 06:17:01 +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:*a2d0e6b1-0e9b-4436-95ef-934e7e597ffc,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-workflowvpl4n/series-workflowvpl4n-convert-artifact-516868798/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": "1d597a1f-94d1-49df-a3d4-8665ff898b1b", "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-workflowvpl4n/series-workflowvpl4n-build-action-1078371236/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:17:11 +0000 UTC FinishedAt: 2026-08-11 06:17:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:17:11 +0000 UTC FinishedAt: 2026-08-11 06:17:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:17:11 +0000 UTC FinishedAt: 2026-08-11 06:17:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:17:11 +0000 UTC FinishedAt: 2026-08-11 06:17:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-workflowvpl4n/series-workflowvpl4n-convert-artifact-4175498737/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:17:22 +0000 UTC FinishedAt: 2026-08-11 06:19:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:17:22 +0000 UTC FinishedAt: 2026-08-11 06:19:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1d597a1f-94d1-49df-a3d4-8665ff898b1b,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-workflowvpl4n/series-workflowvpl4n-build-action-1078371236/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-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:19:21 +0000 UTC FinishedAt: 2026-08-11 06:19:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:19:21 +0000 UTC FinishedAt: 2026-08-11 06:19:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:19:21 +0000 UTC FinishedAt: 2026-08-11 06:35:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:19:21 +0000 UTC FinishedAt: 2026-08-11 06:35:42 +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:*a2d0e6b1-0e9b-4436-95ef-934e7e597ffc,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-workflowvpl4n/series-workflowvpl4n-convert-artifact-4175498737/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": "aa336f67-d2a6-4207-8ace-af5caf508baa", "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-workflowvpl4n/series-workflowvpl4n-build-action-1731636157/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:19:21 +0000 UTC FinishedAt: 2026-08-11 06:35:32 +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:*a2d0e6b1-0e9b-4436-95ef-934e7e597ffc,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-workflowvpl4n/series-workflowvpl4n-convert-artifact-4175498737/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": "aa336f67-d2a6-4207-8ace-af5caf508baa", "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-workflowvpl4n/series-workflowvpl4n-build-action-1731636157/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:35:42 +0000 UTC FinishedAt: 2026-08-11 06:35:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:35:42 +0000 UTC FinishedAt: 2026-08-11 06:35:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:35:42 +0000 UTC FinishedAt: 2026-08-11 06:37:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:35:42 +0000 UTC FinishedAt: 2026-08-11 06:37:29 +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:*aa336f67-d2a6-4207-8ace-af5caf508baa,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-workflowvpl4n/series-workflowvpl4n-build-action-1731636157/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-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:37:39 +0000 UTC FinishedAt: 2026-08-11 09:42:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:37:39 +0000 UTC FinishedAt: 2026-08-11 09:42:11 +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":["hugetlb_cma_alloc_frozen_folio"],"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:*1d597a1f-94d1-49df-a3d4-8665ff898b1b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aa336f67-d2a6-4207-8ace-af5caf508baa,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-workflowvpl4n/series-workflowvpl4n-build-action-1078371236/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-workflowvpl4n/series-workflowvpl4n-build-action-1731636157/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:37:39 +0000 UTC FinishedAt: 2026-08-11 06:37:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:37:39 +0000 UTC FinishedAt: 2026-08-11 06:37:44 +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":["hugetlb_cma_alloc_frozen_folio"],"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-workflowvpl4n/series-workflowvpl4n-convert-artifact-1866679974/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:37:39 +0000 UTC FinishedAt: 2026-08-11 06:37:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:37:39 +0000 UTC FinishedAt: 2026-08-11 06:37:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:37:39 +0000 UTC FinishedAt: 2026-08-11 06:37:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:37:49 +0000 UTC FinishedAt: 2026-08-11 09:42:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpl4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"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":["hugetlb_cma_alloc_frozen_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1ec0e6b6f7321feb769f50d2f094a0aa6c2eda63","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","CPUSETS"],"series_id":"091a59e4-feb2-4ed2-83e0-cb8a357168cf","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-08-11 06:37:49 +0000 UTC FinishedAt: 2026-08-11 09:42:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1d597a1f-94d1-49df-a3d4-8665ff898b1b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aa336f67-d2a6-4207-8ace-af5caf508baa,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-workflowvpl4n/series-workflowvpl4n-build-action-1078371236/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-workflowvpl4n/series-workflowvpl4n-build-action-1731636157/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-workflowvpl4n/series-workflowvpl4n-convert-artifact-1866679974/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,}