Name: series-workflow8kczn Phase: Succeeded StartedAt: 2026-07-29 23:06:23 +0000 UTC FinishedAt: 2026-07-30 03:18:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kczn[0] Phase: Succeeded StartedAt: 2026-07-29 23:06:23 +0000 UTC FinishedAt: 2026-07-29 23:31:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kczn[0].run-triage Phase: Succeeded StartedAt: 2026-07-29 23:06:23 +0000 UTC FinishedAt: 2026-07-29 23:31:57 +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": "aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMORY_FAILURE" ], "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": "aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMORY_FAILURE" ], "series_id": "664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "free_huge_folio", "dissolve_free_hugetlb_folio", "demote_pool_huge_page", "__nr_hugepages_store_common" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZyZWVfaHVnZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8mIzM0OywKICAgICYjMzQ7ZGVtb3RlX3Bvb2xfaHVnZV9wYWdlJiMzNDssCiAgICAmIzM0O19fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBmb2xpb19jbGVhcl9odWdldGxiYCB0aGF0IHdyYXBzIGBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGJgIGFuZCBhZGRzIGxvZ2ljIHRvIG1vdmUgdGhlIEhXUG9pc29uIGZsYWcgdG8gZWFjaCBlcnJvciBwYWdlIGlmIHRoZSBmb2xpbyBoYXMgaHdwb2lzb25lZCBwYWdlcy4gSXQgcmVwbGFjZXMgY2FsbHMgdG8gYF9fZm9saW9fY2xlYXJfaHVnZXRsYmAgd2l0aCBgZm9saW9fY2xlYXJfaHVnZXRsYmAgaW4gc2V2ZXJhbCBwbGFjZXMsIGNoYW5naW5nIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGFuZCBlbnN1cmluZyB0aGUgSFdQb2lzb24gZmxhZyBpcyBwcm9wZXJseSBoYW5kbGVkIHdoZW4gYSBIdWdlVExCIGZvbGlvIGlzIHJlbW92ZWQgb3IgZnJlZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChIdWdlVExCIGFuZCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZykgYW5kIGlzIHJlYWNoYWJsZSB2aWEgSHVnZVRMQiBhbGxvY2F0aW9uL2ZyZWVpbmcgYW5kIG1lbW9yeSBmYWlsdXJlIGluamVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDMxZTVhNjczZGYwNzY2NTc2MTMzNTRhMWRmY2NkY2RiZGZkMTY0NThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAyMzoyODowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWUuLjI3ZWUyZGZhYWZhNjMgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTEzODEsNiAmIzQzOzEzODEsMTggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssIGludFxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7c3RhdGljIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNb3ZlIEhXUG9pc29uIGZsYWcgdG8gZWFjaCBlcnJvciBwYWdlXG4mIzQzO1x0ICogd2hpY2ggbWFrZXMgYW55IGhlYWx0aHkgcGFnZXMgcmV1c2FibGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSlcbiYjNDM7XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oZm9saW8pO1xuJiM0MztcbiYjNDM7XHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogUmVtb3ZlIGh1Z2V0bGIgZm9saW8gZnJvbSBsaXN0cy5cbiAgKiBJZiB2bWVtbWFwIGV4aXN0cyBmb3IgdGhlIGZvbGlvLCBjbGVhciB0aGUgaHVnZXRsYiBmbGFnIHNvIHRoYXQgdGhlXG5AQCAtMTQxOSw3ICYjNDM7MTQzMSw3IEBAIHZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdCAqIHRvIHRhaWwgc3RydWN0IHBhZ2VzLlxuIFx0ICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpXG4tXHRcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4mIzQzO1x0XHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbiBcbiBcdGgtXHUwMDNlbnJfaHVnZV9wYWdlcy0tO1xuIFx0aC1cdTAwM2Vucl9odWdlX3BhZ2VzX25vZGVbbmlkXS0tO1xuQEAgLTE0OTMsMTcgJiM0MzsxNTA1LDEwIEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbiBcdCAqL1xuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbiBcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuLVx0XHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuJiM0MztcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIE1vdmUgUGFnZUhXUG9pc29uIGZsYWcgZnJvbSBoZWFkIHBhZ2UgdG8gdGhlIHJhdyBlcnJvciBwYWdlcyxcbi1cdCAqIHdoaWNoIG1ha2VzIGFueSBoZWFsdGh5IHN1YnBhZ2VzIHJldXNhYmxlLlxuLVx0ICovXG4tXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKVxuLVx0XHRmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTtcbi1cbiBcdFZNX0JVR19PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XG4gXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX2NtYShmb2xpbykpXG4gXHRcdGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKGZvbGlvKTtcbkBAIC0xNTk1LDcgJiM0MzsxNjAwLDcgQEAgc3RhdGljIHZvaWQgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCB0X2ZvbGlvLCBub25faHZvX2ZvbGlvcywgbHJ1KSB7XG4gXHRcdFx0bGlzdF9kZWwoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1KTtcbiBcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4tXHRcdFx0X19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbiYjNDM7XHRcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4gXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHRcdFx0dXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGZhbHNlKTtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbkBAIC0xNjIwLDcgJiM0MzsxNjI1LDcgQEAgc3RhdGljIHZvaWQgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0bGlzdF9kZWwoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1KTtcbiBcdFx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdFx0XHRcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4mIzQzO1x0XHRcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4gXHRcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdFx0XHRcdHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XG4gXHRcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbkBAIC0xNjUzLDE0ICYjNDM7MTY1OCwxNCBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLFxuIFx0ICogc2hvdWxkIG9ubHkgYmUgcGFnZXMgb24gdGhlIG5vbl9odm9fZm9saW9zIGxpc3QuXG4gXHQgKiBEbyBub3RlIHRoYXQgdGhlIG5vbl9odm9fZm9saW9zIGxpc3QgY291bGQgYmUgZW1wdHkuXG4gXHQgKiBXaXRob3V0IEhWTyBlbmFibGVkLCByZXQgd2lsbCBiZSAwIGFuZCB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGxcbi1cdCAqIF9fZm9saW9fY2xlYXJfaHVnZXRsYiBhcyB0aGlzIHdhcyBkb25lIHByZXZpb3VzbHkuXG4mIzQzO1x0ICogZm9saW9fY2xlYXJfaHVnZXRsYiBhcyB0aGlzIHdhcyBkb25lIHByZXZpb3VzbHkuXG4gXHQgKi9cbiBcdFZNX1dBUk5fT04oIWxpc3RfZW1wdHkoZm9saW9fbGlzdCkpO1xuIFx0Vk1fV0FSTl9PTihyZXQgXHUwMDNjIDApO1xuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNm5vbl9odm9fZm9saW9zKSBcdTAwMjZcdTAwMjYgcmV0KSB7XG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmb2xpbywgXHUwMDI2bm9uX2h2b19mb2xpb3MsIGxydSlcbi1cdFx0XHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuJiM0MztcdFx0XHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbiBcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZyZWVfaHVnZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8mIzM0OywKICAgICYjMzQ7ZGVtb3RlX3Bvb2xfaHVnZV9wYWdlJiMzNDssCiAgICAmIzM0O19fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBmb2xpb19jbGVhcl9odWdldGxiYCB0aGF0IHdyYXBzIGBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGJgIGFuZCBhZGRzIGxvZ2ljIHRvIG1vdmUgdGhlIEhXUG9pc29uIGZsYWcgdG8gZWFjaCBlcnJvciBwYWdlIGlmIHRoZSBmb2xpbyBoYXMgaHdwb2lzb25lZCBwYWdlcy4gSXQgcmVwbGFjZXMgY2FsbHMgdG8gYF9fZm9saW9fY2xlYXJfaHVnZXRsYmAgd2l0aCBgZm9saW9fY2xlYXJfaHVnZXRsYmAgaW4gc2V2ZXJhbCBwbGFjZXMsIGNoYW5naW5nIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGFuZCBlbnN1cmluZyB0aGUgSFdQb2lzb24gZmxhZyBpcyBwcm9wZXJseSBoYW5kbGVkIHdoZW4gYSBIdWdlVExCIGZvbGlvIGlzIHJlbW92ZWQgb3IgZnJlZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChIdWdlVExCIGFuZCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZykgYW5kIGlzIHJlYWNoYWJsZSB2aWEgSHVnZVRMQiBhbGxvY2F0aW9uL2ZyZWVpbmcgYW5kIG1lbW9yeSBmYWlsdXJlIGluamVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMxZTVhNjczZGYwNzY2NTc2MTMzNTRhMWRmY2NkY2RiZGZkMTY0NTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyOSAyMzoyODowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA1NzEyMTJiODA4MzVlLi4yN2VlMmRmYWFmYTYzIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC0xMzgxLDYgJiM0MzsxMzgxLDE4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnQKIH0KICNlbmRpZgogCiYjNDM7c3RhdGljIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogTW92ZSBIV1BvaXNvbiBmbGFnIHRvIGVhY2ggZXJyb3IgcGFnZQomIzQzOwkgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBwYWdlcyByZXVzYWJsZS4KJiM0MzsJICovCiYjNDM7CWlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpCiYjNDM7CQlmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTsKJiM0MzsKJiM0MzsJX19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogUmVtb3ZlIGh1Z2V0bGIgZm9saW8gZnJvbSBsaXN0cy4KICAqIElmIHZtZW1tYXAgZXhpc3RzIGZvciB0aGUgZm9saW8sIGNsZWFyIHRoZSBodWdldGxiIGZsYWcgc28gdGhhdCB0aGUKQEAgLTE0MTksNyAmIzQzOzE0MzEsNyBAQCB2b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJICogdG8gdGFpbCBzdHJ1Y3QgcGFnZXMuCiAJICovCiAJaWYgKCFmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pKQotCQlfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pOwomIzQzOwkJZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7CiAKIAloLSZndDtucl9odWdlX3BhZ2VzLS07CiAJaC0mZ3Q7bnJfaHVnZV9wYWdlc19ub2RlW25pZF0tLTsKQEAgLTE0OTMsMTcgJiM0MzsxNTA1LDEwIEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwKIAkgKi8KIAlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkgewogCQlzcGluX2xvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKLQkJX19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTsKJiM0MzsJCWZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pOwogCQlzcGluX3VubG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwogCX0KIAotCS8qCi0JICogTW92ZSBQYWdlSFdQb2lzb24gZmxhZyBmcm9tIGhlYWQgcGFnZSB0byB0aGUgcmF3IGVycm9yIHBhZ2VzLAotCSAqIHdoaWNoIG1ha2VzIGFueSBoZWFsdGh5IHN1YnBhZ2VzIHJldXNhYmxlLgotCSAqLwotCWlmICh1bmxpa2VseShmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkpCi0JCWZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oZm9saW8pOwotCiAJVk1fQlVHX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTsKIAlpZiAoZm9saW9fdGVzdF9odWdldGxiX2NtYShmb2xpbykpCiAJCWh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKGZvbGlvKTsKQEAgLTE1OTUsNyAmIzQzOzE2MDAsNyBAQCBzdGF0aWMgdm9pZCBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIHRfZm9saW8sIG5vbl9odm9fZm9saW9zLCBscnUpIHsKIAkJCWxpc3RfZGVsKCZhbXA7Zm9saW8tJmd0O2xydSk7CiAJCQlzcGluX2xvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKLQkJCV9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7CiYjNDM7CQkJZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7CiAJCQlzcGluX3VubG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwogCQkJdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGZhbHNlKTsKIAkJCWNvbmRfcmVzY2hlZCgpOwpAQCAtMTYyMCw3ICYjNDM7MTYyNSw3IEBAIHN0YXRpYyB2b2lkIGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsCiAJCQl9IGVsc2UgewogCQkJCWxpc3RfZGVsKCZhbXA7Zm9saW8tJmd0O2xydSk7CiAJCQkJc3Bpbl9sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7Ci0JCQkJX19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTsKJiM0MzsJCQkJZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7CiAJCQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKIAkJCQl1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpOwogCQkJCWNvbmRfcmVzY2hlZCgpOwpAQCAtMTY1MywxNCAmIzQzOzE2NTgsMTQgQEAgc3RhdGljIHZvaWQgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGsoc3RydWN0IGhzdGF0ZSAqaCwKIAkgKiBzaG91bGQgb25seSBiZSBwYWdlcyBvbiB0aGUgbm9uX2h2b19mb2xpb3MgbGlzdC4KIAkgKiBEbyBub3RlIHRoYXQgdGhlIG5vbl9odm9fZm9saW9zIGxpc3QgY291bGQgYmUgZW1wdHkuCiAJICogV2l0aG91dCBIVk8gZW5hYmxlZCwgcmV0IHdpbGwgYmUgMCBhbmQgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsCi0JICogX19mb2xpb19jbGVhcl9odWdldGxiIGFzIHRoaXMgd2FzIGRvbmUgcHJldmlvdXNseS4KJiM0MzsJICogZm9saW9fY2xlYXJfaHVnZXRsYiBhcyB0aGlzIHdhcyBkb25lIHByZXZpb3VzbHkuCiAJICovCiAJVk1fV0FSTl9PTighbGlzdF9lbXB0eShmb2xpb19saXN0KSk7CiAJVk1fV0FSTl9PTihyZXQgJmx0OyAwKTsKIAlpZiAoIWxpc3RfZW1wdHkoJmFtcDtub25faHZvX2ZvbGlvcykgJmFtcDsmYW1wOyByZXQpIHsKIAkJc3Bpbl9sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoZm9saW8sICZhbXA7bm9uX2h2b19mb2xpb3MsIGxydSkKLQkJCV9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7CiYjNDM7CQkJZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7CiAJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNzEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdldGxiIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vaHVnZXRsYi5jYC4gSXQmIzM5O3MgaW50cm9kdWNpbmcgYGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhlIGxvZ2ljIGZsb3cgaXMgc3RyYWlnaHRmb3J3YXJkOiBpZiBhIGZvbGlvIGlzIGhhcmR3YXJlIHBvaXNvbmVkIChhcyBpbmRpY2F0ZWQgYnkgYGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pYCksIGl0IGNhbGxzIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKWAgYW5kIHRoZW4gdW5jb25kaXRpb25hbGx5IGNhbGxzIGBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pYC4gU2VlbXMgbGlrZSBhIHNlbnNpYmxlIGFwcHJvYWNoIGZvciBjbGVhbmluZyB1cCBodWdlIHBhZ2UgZW50cmllcy4KCldoYXQmIzM5O3MgaW1tZWRpYXRlbHkgY2F0Y2hpbmcgbXkgZXllIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyAqcmVwbGFjaW5nKiBzZXZlcmFsIGluc3RhbmNlcyBvZiBgX19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKWAgd2l0aCB0aGUgbmV3IGBmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKWAgZnVuY3Rpb24uIFRoaXMgc3VnZ2VzdHMgYSBzaGlmdCBpbiBob3cgd2UgaGFuZGxlIHBvdGVudGlhbGx5IHBvaXNvbmVkIHBhZ2VzIGR1cmluZyB0aGUgY2xlYW51cCBwcm9jZXNzLiBBbHNvLCBpdCBhcHBlYXJzIGEgYmxvY2sgb2YgY29kZSByZWxhdGVkIHRvIGhhbmRsaW5nIHRoZSBgUGFnZUhXUG9pc29uYCBmbGFnIGluIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCBoYXMgYmVlbiByZW1vdmVkLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGRpdGNoaW5nIHRoZSBtYW51YWwgbW92ZSBvZiBgUGFnZUhXUG9pc29uYCB0byB0aGUgJiMzNDtyYXcgZXJyb3IgcGFnZXMmIzM0Oy4KCldhaXQgYSBzZWNvbmTigKYgSSBzZWUgdGhhdCB0aGUgbmV3IGNvZGUgdXNlcyBgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbylgIHdoZXJlIHRoZSBvbGQgY29kZSB1c2VkIGBmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBkaWZmZXJlbmNlIGFuZCBpbXBsaWNhdGlvbnMgaGVyZS4gVGhleSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBoYXJkd2FyZSBwb2lzb24gZmxhZyBpcyBzZXQgYW5kIGNsZWFyZWQuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbnMgb2YgdGhvc2UgbWFjcm9zLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhpcyBmcm9tIGEgdGVzdGluZyBwZXJzcGVjdGl2ZS4gVGhpcyBpcyBodWdldGxiLCB3aGljaCBpcyBhIGNyaXRpY2FsIHBhcnQgb2YgbWVtb3J5IG1hbmFnZW1lbnQuIEl0JiMzOTtzIGEgaGlnaC12YWx1ZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBhIGZldyBrZXkgZnVuY3Rpb25zOiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AsIGBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcmAsIGFuZCBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGtgLiBUaGVzZSBhcmUgYWxsIHBhcnRzIG9mIHRoZSBjb2RlIGJhc2UgdGhhdCBhcmUgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyBhbmQgbWFuYWdpbmcgbWVtb3J5IHBhZ2VzLiBUaGF0JiMzOTtzIGdvb2QgY292ZXJhZ2UgZm9yIGEgZnV6emluZyBjYW1wYWlnbi4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGFjdHVhbGx5IGRvZXMuIEkmIzM5O20gZ29pbmcgdG8gcnVuIGEgYGdyZXBwZXJgIHNlYXJjaCBmb3IgdGhhdCBmdW5jdGlvbiB0byBzZWUgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IGl0JiMzOTtzIHVzZWQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCB3aXRoIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD04Nzc9aW50IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb3ModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODgwLSNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjg4MTpleHRlcm4gdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODgyLSNlbHNlXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo4ODM6c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTg4NC17XG4tLVxubW0vaHVnZXRsYi5jPTEzODQ9c3RhdGljIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGIuYy0xMzkwLVx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSlcbm1tL2h1Z2V0bGIuYzoxMzkxOlx0XHRmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0xMzkyLVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTkyOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTQ2LVxubW0vbWVtb3J5LWZhaWx1cmUuYzoxOTQ3OnZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTQ4LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIwMjU9c3RhdGljIGludCB0cnlfbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjA2Mi1cdGlmIChod3BvaXNvbl9maWx0ZXIocCkpIHtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjA2MzpcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwNjQtXHRcdGlmIChtaWdyYXRhYmxlX2NsZWFyZWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEwNAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEh1Z2V0bGIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vaHVnZXRsYi5jYCwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZGVmaW5pdGVseSBpbiBhIGNyaXRpY2FsIGFyZWEuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcmVmaW5pbmcgaG93IGh1Z2UgcGFnZSBmYXVsdCBoYW5kbGluZyB3b3Jrcywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeS4gVGhlIGludHJvZHVjdGlvbiBvZiBgZm9saW9fY2xlYXJfaHVnZXRsYmAgaXMgdGhlIGtleS4gSXQgd3JhcHMgdXAgdGhlIGxvZ2ljLCBjYWxsaW5nIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBvbmx5IHdoZW4gYSBmb2xpbyBpcyBhY3R1YWxseSBmbGFnZ2VkIGFzIGJlaW5nIGhhcmR3YXJlLXBvaXNvbmVkLiBUaGF0JiMzOTtzIGdvb2QsIGl0IHN1Z2dlc3RzIGEgbW9yZSBlZmZpY2llbnQgYW5kIHRhcmdldGVkIGFwcHJvYWNoLgoKVGhlIHJlcGxhY2VtZW50IG9mIGBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGJgIGNhbGxzIHdpdGggYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIGlzIGEgY2xlYW4tdXAsIGNvbnNvbGlkYXRpbmcgdGhlIGxvZ2ljIHVuZGVyIGEgc2luZ2xlIGZ1bmN0aW9uLiBBbmQgdGhlbiwgdGhlIHJlbW92YWwgb2YgdGhlIHNwZWNpZmljIGNhbGwgdG8gYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGZyb20gYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gLi4ucmlnaHQsIGJlY2F1c2UgYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIG5vdyBoYW5kbGVzIHRoYXQgY29uZGl0aW9uYWwgY2hlY2suIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgbGVzcyBkdXBsaWNhdGlvbiwgaW1wcm92ZWQgbWFpbnRhaW5hYmlsaXR5LgoKRnVuY3Rpb25hbGx5LCB0aGlzIHNlZW1zIHNvdW5kLiBJdCYjMzk7cyBhIGZvY3VzZWQgcmVmYWN0b3JpbmcgdGhhdCBzaG91bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgY2xhcml0eSB3aXRoaW4gdGhlIGh1Z2V0bGIgc3Vic3lzdGVtLiBOb3csIHRoZSBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAgZnVuY3Rpb24sIGFzIGV4cGVjdGVkLCBpcyBnYXRlZCBieSBgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gSSBzaG91bGQgY29uZmlybSB0aGF0IGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBhbHNvIGVuYWJsZWQsIGFzIGV4cGVjdGVkLCBiZWNhdXNlIG9mIHRoZSBmdW5jdGlvbmFsaXR5IGluIHRoZSBmaWxlIGJlaW5nIG1vZGlmaWVkLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCX1BBR0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zaC9tbS9LY29uZmlnPTE1OD1jaG9pY2Vcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTYzLVxuYXJjaC9zaC9tbS9LY29uZmlnOjE2NDpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRLXG5hcmNoL3NoL21tL0tjb25maWctMTY1LVx0Ym9vbCBcJiMzNDs2NGtCXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE2Ny1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjg6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjktXHRib29sIFwmIzM0OzI1NmtCXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE3MS1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzFNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE3My1cdGJvb2wgXCYjMzQ7MU1CXCYjMzQ7XG5hcmNoL3NoL21tL0tjb25maWctMTc0LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3NTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNE1CXG5hcmNoL3NoL21tL0tjb25maWctMTc2LVx0Ym9vbCBcJiMzNDs0TUJcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTc4LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3OTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE4MC1cdGJvb2wgXCYjMzQ7NjRNQlwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbmZzL0tjb25maWctMjY0LVx0Ym9vbCBcJiMzNDtIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcbmZzL0tjb25maWctMjcyLVxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxuZnMvS2NvbmZpZy0yNzQtXHRkZWZfYm9vbCBIVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI3Ni1cbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuZnMvS2NvbmZpZy0yNzgtXHRkZWZfYm9vbCBIVUdFVExCX1BBR0Vcbi0tXG5tbS9LY29uZmlnPTcwNj1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNzA4LVxubW0vS2NvbmZpZzo3MDk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG5tbS9LY29uZmlnLTcxMC1cdGRlZl9ib29sIG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDUxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0ZBSUxVUkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03NzQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc3Ni1cbm1tL0tjb25maWc6Nzc3OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NzgtXHRkZXBlbmRzIG9uIE1NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNDMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0MzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBtbS9odWdldGxiLmNgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBpbnRyb2R1Y2luZyBgZm9saW9fY2xlYXJfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKWAsIGEgbmV3IGZ1bmN0aW9uIHRoYXQgd3JhcHMgYF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbylgLiBUaGUga2V5IGNoYW5nZSBoZXJlIGlzIG1vdmluZyB0aGUgY2FsbCB0byBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbylgICppbnNpZGUqIHRoaXMgbmV3IHdyYXBwZXIsIHJpZ2h0IGJlZm9yZSB0aGUgY29yZSBjbGVhciBvcGVyYXRpb24uIFByZXZpb3VzbHksIHRoZSBIV1BvaXNvbiBjbGVhcmluZyBoYXBwZW5lZCAqYWZ0ZXIqIHRoZSBtYWluIGNsZWFyIGFuZCBhbnkgQ01BIGZyZWVpbmcgaW4gYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oKWAuIFNvLCB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBjb25jZXJuaW5nIGhhcmR3YXJlIHBvaXNvbmluZyBpcyBhbHRlcmVkLgoKR2l2ZW4gdGhpcyByZW9yZGVyaW5nLCBJIG5lZWQgdG8gZXZhbHVhdGUgdGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcsIHdoaWNoIGlzIHByb2JhYmx5IHRoZSBpbnRlbnQuIFRoZSBmYWN0IHRoYXQgdGhlIGNhbGwgaXMgKm5vdyogdXNlZCBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oKWAsIGBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcigpYCwgYW5kIGB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsaygpYCBtYWtlcyBpdCBhIGJpdCBtb3JlIHdpZGVseSB1c2VkIHRoYW4gYmVmb3JlLiBUaGF0IGFkZHMgdG8gdGhlIHJpc2suCgpUaGlzIGZlZWxzIHJlYWNoYWJsZTsgaHVnZXRsYiBpcyBkZWZpbml0ZWx5IGEgcmVsZXZhbnQgc3Vic3lzdGVtLiBHaXZlbiB0aGF0IHdlIGFyZSBjaGFuZ2luZyB0aGUgb3JkZXIgb2YgSFdQb2lzb24gZmxhZ3MgYXJlIGNsZWFyZWQsIHRoaXMgaXMgcHJvYmFibHkgd29ydGggYSBmdXp6aW5nIGNhbXBhaWduLiBJJiMzOTttIHRoaW5raW5nIHRoZSBjaGFuZ2UgaW4gb3JkZXJpbmcgYW5kIHRoZSBicm9hZGVyIHJlYWNoIG9mIHRoZSBuZXcgYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIGZ1bmN0aW9uIG1ha2UgaXQgYSBoaWdoLXZhbHVlIHRhcmdldCBmb3IgZnV6emluZy4KClRvIGZvY3VzIG15IGVmZm9ydHMsIHRoZSBsaWtlbHkgc3BvdHMgd2hlcmUgaXNzdWVzIHdvdWxkIGFyaXNlIGluY2x1ZGU6IGByZW1vdmVfaHVnZXRsYl9mb2xpb2AsIGBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcmAsIGFuZCBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGtgLiBJJiMzOTtsbCBhbHNvIGJlIGZvY3VzaW5nIG9uIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCBzaW5jZSB0aGF0IGlzIHdoZXJlIHRoZSBvcmlnaW5hbCBjb2RlIGNoYW5nZSB0b29rIHBsYWNlLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGByZW1vdmVfaHVnZXRsYl9mb2xpb2AuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGEgY2hhbmdlIHRvIHRoaXMgYXJlYSB3b3VsZCBhZmZlY3QgaG93IGhhcmR3YXJlIHBvaXNvbmluZyBpcyBoYW5kbGVkLgoKVGhlIGNvbmZpZ3MgdG8gaGF2ZSBlbmFibGVkIGFyZSBIVUdFVExCRlMgYW5kIE1FTU9SWV9GQUlMVVJFLCB3aGljaCBzZWVtcyBvYnZpb3VzLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AgYW5kIGB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsa2AgaW5zaWRlIGBtbS9odWdldGxiLmNgIHRvIHNlZSB0aGUgZXhhY3QgY29kZS4gSSYjMzk7bGwgYWxzbyBjaGVjayBpZiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGlzIGV4cG9ydGVkIG9yIGdsb2JhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCByZW1vdmVfaHVnZXRsYl9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTM4ND1zdGF0aWMgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jLTE0MDMtICovXG5tbS9odWdldGxiLmM6MTQwNDp2b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9odWdldGxiLmMtMTQwNS1cdFx0XHQgIGJvb2wgYWRqdXN0X3N1cnBsdXMpXG4tLVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oPTcxPXN0YXRpYyBpbmxpbmUgaW50IGhzdGF0ZV9uZXh0X25vZGVfdG9fZnJlZShzdHJ1Y3QgaHN0YXRlICpoLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkKVxuLS1cbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC05NC1cbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaDo5NTpleHRlcm4gdm9pZCByZW1vdmVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTk2LVx0XHRcdFx0IGJvb2wgYWRqdXN0X3N1cnBsdXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTA5CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGdW5jdGlvbiBWaXNpYmlsaXR5IGFuZCBDYWxsZXIgUmVsYXRpb25zaGlwcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLCBgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3JgLCBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGtgLCBhbmQgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gLiBIbW0sIGByZW1vdmVfaHVnZXRsYl9mb2xpb2AgaXMgZ2xvYmFsLCB3aGljaCBpcyBmaW5lLCBidXQgdGhlIG90aGVyIHRocmVlLCBgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3JgLCBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGtgLCBhbmQgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIGFyZSBkZWNsYXJlZCBhcyBlaXRoZXIgc3RhdGljLgoKTm93LCB3YWl0IGEgbWludXRlLCB0aGUgcHJvbXB0IGluIGZyb250IG9mIG1lIGV4cGxpY2l0bHkgc3RhdGVzIGEgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlcnMuIFRoYXQmIzM5O3MgYSBrZXkgZ3VpZGVsaW5lIHdlIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBXZSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyIHJlZmFjdG9yaW5nIGhlcmUuCgpUaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBpZGVudGlmeSB0aGUgY2FsbGVycyBvZiB0aG9zZSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGJlaW5nIHVzZWQuIEFyZSB0aGV5IHRydWx5IGludGVybmFsLCBvciBhcmUgd2UgcG90ZW50aWFsbHkgZXhwb3NpbmcgYW4gQVBJIGltcGxpY2l0bHkgdGhyb3VnaCB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBzaG91bGQgcGVyaGFwcyBiZSBleHBvc2VkIGluIGEgbW9yZSBleHBsaWNpdCwgbm9uLXN0YXRpYyBtYW5uZXI/IEZpbmRpbmcgb3V0IHRoZSBjYWxsIHNpdGVzIGlzIGtleSBiZWZvcmUgZGVjaWRpbmcgb24gdGhlIG5leHQgc3RlcHMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgZWFjaCBvZiB0aGVzZSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZWlyIGltcGFjdCBhbmQgaWYgdGhleSYjMzk7cmUgYWN0aW5nIGFzIGEgZGUtZmFjdG8gQVBJIHRoYXQgd2Ugc2hvdWxkIHJldmlzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTE1Njc9c3RhdGljIHZvaWQgdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9odWdldGxiLmMtMTU4NS1cbm1tL2h1Z2V0bGIuYzoxNTg2OnN0YXRpYyB2b2lkIGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtMTU4Ny1cdFx0XHRcdFx0c3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS9odWdldGxiLmM9MTYzNz1zdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0xNjUxLVx0aWYgKHJldCBcdTAwM2MgMCkge1xubW0vaHVnZXRsYi5jOjE2NTI6XHRcdGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yKGgsIGZvbGlvX2xpc3QsIFx1MDAyNm5vbl9odm9fZm9saW9zKTtcbm1tL2h1Z2V0bGIuYy0xNjUzLVx0XHRnb3RvIHJldHJ5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTk4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWJ1Z2dpbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBJc3N1ZSoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUuIEkmIzM5O3ZlIGdvdCBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGtgIGhpZ2hsaWdodGVkLCBhbmQgSSBzZWUgaXQmIzM5O3MgY2FsbGluZyBgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3JgLiAgTXkgZmlyc3QgcXVlc3Rpb24gYWx3YXlzIGhhcyB0byBiZSwgd2hhdCYjMzk7cyB1cHN0cmVhbT8gV2hlcmUgZG9lcyBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGtgIGV2ZW4gKmNvbWUqIGZyb20/IEkgbmVlZCB0byB0cmFjZSBiYWNrIHRoZSBjYWxsIHN0YWNrIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyByZXN0b3JlIGVycm9yLiAgSXMgdGhpcyBhIHNwZWNpZmljIGRldmljZSBkcml2ZXIsIGEgZ2VuZXJhbCBtZW1vcnkgcmVjbGFpbSBwYXRoLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVyIHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBjbHVlcyBhYm91dCB0aGUgcG90ZW50aWFsIHNvdXJjZSBvZiB0aGUgcHJvYmxlbS4gQW0gSSBkZWFsaW5nIHdpdGggYSBzcGVjaWZpYyBlcnJvciBjb25kaXRpb24gaW4gYSBwYXJ0aWN1bGFyIHN1YnN5c3RlbSwgb3IgYSBtb3JlIGdlbmVyYWwgaXNzdWUgaW4gbWVtb3J5IG1hbmFnZW1lbnQ/IFRpbWUgdG8gZmlyZSB1cCB0aGUgZGVidWdnZXIgYW5kIHRyYWNlIHRob3NlIGNhbGwgcGF0aHMuIEkgbmVlZCB0byBrbm93IHRoZSB3aHkgYmVmb3JlIEkgY2FuIGV2ZW4gdGhpbmsgYWJvdXQgdGhlIGhvdyB0byBmaXggdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTE1ODY9c3RhdGljIHZvaWQgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTYzNi1cbm1tL2h1Z2V0bGIuYzoxNjM3OnN0YXRpYyB2b2lkIHVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtMTYzOC1cdFx0XHRcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxuLS1cbm1tL2h1Z2V0bGIuYz0yMzU1PXN0YXRpYyB2b2lkIHJldHVybl91bnVzZWRfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yMzkzLVx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG5tbS9odWdldGxiLmM6MjM5NDpcdHVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrKGgsIFx1MDAyNnBhZ2VfbGlzdCk7XG5tbS9odWdldGxiLmMtMjM5NS1cdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi0tXG5tbS9odWdldGxiLmM9MzY2Mz1zdGF0aWMgdm9pZCB0cnlfdG9fZnJlZV9sb3coc3RydWN0IGhzdGF0ZSAqaCwgdW5zaWduZWQgbG9uZyBjb3VudCxcbi0tXG5tbS9odWdldGxiLmMtMzY5MC1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xubW0vaHVnZXRsYi5jOjM2OTE6XHR1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhoLCBcdTAwMjZwYWdlX2xpc3QpO1xubW0vaHVnZXRsYi5jLTM2OTItXHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4tLVxubW0vaHVnZXRsYi5jPTM3MzU9c3RhdGljIGludCBzZXRfbWF4X2h1Z2VfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwgdW5zaWduZWQgbG9uZyBjb3VudCwgaW50IG5pZCxcbi0tXG5tbS9odWdldGxiLmMtMzkwNS1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xubW0vaHVnZXRsYi5jOjM5MDY6XHR1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhoLCBcdTAwMjZwYWdlX2xpc3QpO1xubW0vaHVnZXRsYi5jLTM5MDctXHRmbHVzaF9mcmVlX2hwYWdlX3dvcmsoaCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNjQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqQW5hbHl6aW5nIEh1Z2UgUGFnZSBNYW5hZ2VtZW50IGluIHRoZSBLZXJuZWwqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIGBzZXRfbWF4X2h1Z2VfcGFnZXNgLi4uIHllcywgdGhhdCYjMzk7cyBhIHNlbnNpYmxlIGVudHJ5IHBvaW50LiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2Qgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gYW5kIHBlcmhhcHMgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBmb3IgaHVnZSBwYWdlIG1hbmFnZW1lbnQsIGZpZ3VyaW5nIG91dCBob3cgdGhlIHN5c3RlbSYjMzk7cyBtYXhpbXVtIGNhcGFjaXR5IGlzIGVzdGFibGlzaGVkLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBsaW1pdHMuCgpgdHJ5X3RvX2ZyZWVfbG93YC4uLiB0aGF0JiMzOTtzIHN0YXRpYywgaW50ZXJlc3RpbmcuIFN0YXRpYyBtZWFucyBpdCYjMzk7cyBwcm9iYWJseSBvbmx5IHZpc2libGUgd2l0aGluIGEgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdCwgbWF5YmUgcGFydCBvZiBhIG1vcmUgZm9jdXNlZCBsb3ctbWVtb3J5IHJlY2xhaW0gc3RyYXRlZ3kuIEl0IHdvdWxkbiYjMzk7dCBiZSBkaXJlY3RseSBleHBvc2VkLCBtYWtpbmcgbWUgd29uZGVyIGFib3V0IGl0cyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBsYXJnZXIgbWVtb3J5IG1hbmFnZW1lbnQgcGljdHVyZSBhbmQgaG93IGl0IHJlYWN0cyB0byBzcGVjaWZpYyBsb3ctbWVtb3J5IGNvbmRpdGlvbnMuIElzIGl0IGludm9sdmVkIGluIGEgcHJpb3JpdHktYmFzZWQgcmVjbGFpbSBwcm9jZXNzPwoKQW5kIHRoZW4gYHJldHVybl91bnVzZWRfc3VycGx1c19wYWdlc2AgaXMgYWxzbyBzdGF0aWMuIE9rYXksIHNvIHRoaXMgbXVzdCBiZSByZWxhdGVkIHRvIHJldHVybmluZyBwYWdlcyAqYmFjayogdG8gdGhlIHN5c3RlbS4gV2hlcmUgd291bGQgdGhpcyBmaXQ/IElzIGl0IHRpZWQgdG8gYSBzcGVjaWZpYyBwcm9jZXNzIG9yIHN1YnN5c3RlbSwgYW5kIHdoYXQgdHJpZ2dlcnMgdGhpcyBwYWdlIHJldHVybj8gVGhpbmtpbmcgYWxvdWQsIEkmIzM5O20gbm93IGN1cmlvdXMgYWJvdXQgd2hldGhlciB0aGVyZSBpcyBzb21lIHNvcnQgb2YgdW51c2VkIHBhZ2UgbW9uaXRvciBvciB0aW1lciBmdW5jdGlvbiBhdCBwbGF5LgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbi4gV2hvICpjYWxscyogYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gPyBUaGF0JiMzOTtzIHRoZSBjb3JlLiBUaGUgZW50aXJlIHBvaW50LiBJdCYjMzk7cyB0aGUgYWN0aW9uLiBUaGF0JiMzOTtzIHRoZSBtZWF0IG9mIHRoZSBtZW1vcnkgcmVjbGFtYXRpb24gcHJvY2Vzcy4gSXQgaXMgd2hhdCBhY3R1YWxseSBmcmVlcyB0aGUgcGFnZXMuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSAqYWN0dWFsKiBwcm9jZXNzIG9mIHJlbGVhc2luZyB1bnVzZWQgaHVnZSBwYWdlcy4gVGhlIGNhbGwgc3RhY2sgdGhhdCBsZWFkcyB0byB0aGF0IGZ1bmN0aW9uIGlzIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgbG9naWMgb2YgaHVnZSBwYWdlIGRlYWxsb2NhdGlvbiByZXNpZGVzLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTE0NDA9dm9pZCBhZGRfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2h1Z2V0bGIuYy0xNDY5LVxubW0vaHVnZXRsYi5jOjE0NzA6c3RhdGljIHZvaWQgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxubW0vaHVnZXRsYi5jLTE0NzEtXHRcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiLmM9MTUzMj1zdGF0aWMgdm9pZCBmcmVlX2hwYWdlX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vaHVnZXRsYi5jLTE1NTMtXG5tbS9odWdldGxiLmM6MTU1NDpcdFx0X191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbyk7XG5tbS9odWdldGxiLmMtMTU1NS1cbi0tXG5tbS9odWdldGxiLmM9MTU2Nz1zdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2h1Z2V0bGIuYy0xNTcwLVx0aWYgKCFmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pIHx8ICFhdG9taWMpIHtcbm1tL2h1Z2V0bGIuYzoxNTcxOlx0XHRfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0xNTcyLVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NTQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIGEgSHVnZVRMQiBNZW1vcnkgUG9pc29uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIGEgcHJldHR5IGZvY3VzZWQgY2hhbmdlOiBpdCYjMzk7cyBhYm91dCBoYW5kbGluZyBoYXJkd2FyZS1wb2lzb25lZCAoSFdQb2lzb24pIEh1Z2VUTEIgcGFnZXMsIHNwZWNpZmljYWxseSBtb3ZpbmcgdGhlIEhXUG9pc29uIGZsYWcgdG8gZWFjaCBlcnJvciBwYWdlIHRvIGFsbG93IHJldXNlIG9mIGhlYWx0aHkgcGFnZXMuIFRoZSBwcmltYXJ5IGZ1bmN0aW9uIGludHJvZHVjZWQgaGVyZSBpcyBgZm9saW9fY2xlYXJfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKWAsIHdoaWNoIGlzIHJlcGxhY2luZyB0aGUgb2xkZXIgYF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbylgIGluIGEgZmV3IGtleSBsb2NhdGlvbnM6IGByZW1vdmVfaHVnZXRsYl9mb2xpb2AsIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCwgYGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yYCwgYW5kIGB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsa2AuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gaG93IHRoZSBIV1BvaXNvbiBmbGFnIGlzIGhhbmRsZWQuIE9yaWdpbmFsbHksIHRoZSBjb2RlIGluIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCBoYWQgYSBkaXN0aW5jdCBzZWN0aW9uIGZvciBtb3ZpbmcgdGhlIGBQYWdlSFdQb2lzb25gIGZsYWcgKmFmdGVyKiBjYWxsaW5nIGBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGJgLiAgVGhlIHBhdGNoIGVzc2VudGlhbGx5IGNvbnNvbGlkYXRlcyB0aGVzZSBzdGVwcyBieSBtb3ZpbmcgdGhlIEhXUG9pc29uIGZsYWcgY2xlYXJpbmcgYmVmb3JlIGNhbGxpbmcgYF9fZm9saW9fY2xlYXJfaHVnZXRsYmAuICBUaGUgbmV3IGBmb2xpb19jbGVhcl9odWdldGxiYCBmdW5jdGlvbiBpdHNlbGYgbm93IGNhbGxzIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBiZWZvcmUgYF9fZm9saW9fY2xlYXJfaHVnZXRsYmAsIHdoaWNoIGlzIHRoZSBrZXkgbW9kaWZpY2F0aW9uLgoKRnVuY3Rpb25hbGx5LCB0aGlzIGltcGFjdHMgbWVtb3J5IGZhaWx1cmUgc2NlbmFyaW9zIHdpdGggSHVnZVRMQiBwYWdlcy4gIFRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGU7IEh1Z2VUTEIgYWxsb2NhdGlvbi9mcmVlaW5nLCBjb3VwbGVkIHdpdGggaW5qZWN0ZWQgbWVtb3J5IGZhaWx1cmVzLCBhcmUgdGhlIHRyaWdnZXIuICBBbmQgeWVzLCB0aGlzIGlzIGRlZmluaXRlbHkgZnV6emFibGUgd2l0aCBzeXprYWxsZXIsIHdoaWNoIGNhbiBpbmplY3QgSFdQb2lzb24gZmFpbHVyZXMgKGUuZy4sIHZpYSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWApIGFuZCBtYW5pcHVsYXRlIGh1Z2UgcGFnZXMuCgpMb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9ucywgd2UmIzM5O2xsIG5lZWQgYEhVR0VUTEJGU2AgKG9yLCBgSFVHRVRMQl9QQUdFYCkgZm9yIEh1Z2VUTEIgc3VwcG9ydCwgYW5kIGRlZmluaXRlbHkgYE1FTU9SWV9GQUlMVVJFYCBiZWNhdXNlIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBpcyBjb25kaXRpb25hbCBvbiBpdC4gIEl0IGxvb2tzIGxpa2UgYE1FTU9SWV9GQUlMVVJFYCBhbHNvIGRlcGVuZHMgb24gYE1NVWAuICBgSFdQT0lTT05fSU5KRUNUYCBtaWdodCBiZSB1c2VmdWwgZm9yIGZ1enppbmcgSFdQb2lzb24gc3BlY2lmaWNhbGx5LCBzaW5jZSBzeXprYWxsZXIgdXNlcyBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAsIHdoaWNoIGFsc28gcmVsaWVzIG9uIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLgoKRm9jdXNpbmcgb24gdGhlIGV4cG9zZWQgc3ltYm9scywgaXQgc2VlbXMgbGlrZSB3ZSBjYW4gdGFyZ2V0IGByZW1vdmVfaHVnZXRsYl9mb2xpb2AsIGBzZXRfbWF4X2h1Z2VfcGFnZXNgLCBgcmV0dXJuX3VudXNlZF9zdXJwbHVzX3BhZ2VzYCwgYW5kIGB0cnlfdG9fZnJlZV9sb3dgLiAgYHVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrYCBhbmQgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCB3ZSBjYW4mIzM5O3QgZGlyZWN0bHkgdGFyZ2V0LCBidXQgdGhlaXIgY2FsbGVycyBhcmUgaW1wb3J0YW50LgoKYHJlbW92ZV9odWdldGxiX2ZvbGlvYCBpcyBhY3R1YWxseSBjYWxsZWQgZnJvbSBtYW55IHBsYWNlczogYGZyZWVfaHVnZV9mb2xpb2AsIGBhbGxvY19idWRkeV9odWdlX3BhZ2VgLCBgYWxsb2NfcG9vbF9odWdlX3BhZ2VgLCBgYWxsb2Nfc3VycGx1c19odWdlX3BhZ2VgLCBgYWxsb2NfbWlncmF0ZV9odWdlX3BhZ2VgLCBgYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2VfcGFnZWAsIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gLCBhbmQgYGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9wYWdlYC4gIFNvLCB0aGF0JiMzOTtzIGEgZ29vZCBlbnRyeSBwb2ludC4KCmBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBpcyBkZWZpbmVkIHdpdGhpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIGFuZCBzbyBpdCBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgc2V0LiAgU28gd2UgYWJzb2x1dGVseSBuZWVkIGBNRU1PUllfRkFJTFVSRWAuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIGFnYWluIHRoYXQgYEhVR0VUTEJGU2AgaXMgdGhlIGNvcnJlY3QgY29uZmlnLiAgYEhVR0VUTEJfUEFHRWAgZGVwZW5kcyBvbiBgSFVHRVRMQkZTYCwgc28gYEhVR0VUTEJGU2Agd2lsbCBkby4KClNpbmNlIHdlIGFyZSBsb29raW5nIGZvciBub24tc3RhdGljIGVudHJ5IHBvaW50cywgbGV0JiMzOTtzIGV4cGxvcmUgdGhvc2U6IGBodWdldGxiX3N5c2N0bF9oYW5kbGVyYCwgYG5yX2h1Z2VwYWdlc19zdG9yZWAsIGBucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uYCwgYGh1Z2V0bGJfb3ZlcmNvbW1pdF9oYW5kbGVyYCwgYW5kIGBucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19zdG9yZWAuCgpJbiBwcmFjdGljZSwgd2Ugd2lsbCB1c2UgYHJlbW92ZV9odWdldGxiX2ZvbGlvYCBhbmQgYGZyZWVfaHVnZV9mb2xpb2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlbW92ZV9odWdldGxiX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0xMzg0PXN0YXRpYyB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiLmMtMTQwMy0gKi9cbm1tL2h1Z2V0bGIuYzoxNDA0OnZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL2h1Z2V0bGIuYy0xNDA1LVx0XHRcdCAgYm9vbCBhZGp1c3Rfc3VycGx1cylcbi0tXG5tbS9odWdldGxiLmM9MTUzMj1zdGF0aWMgdm9pZCBmcmVlX2hwYWdlX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vaHVnZXRsYi5jLTE1NDgtXHRcdCAqIGZvbGlvX2hzdGF0ZSgpIGlzIGdvaW5nIHRvIHRyaWdnZXIgYmVjYXVzZSBhIHByZXZpb3VzIGNhbGwgdG9cbm1tL2h1Z2V0bGIuYzoxNTQ5Olx0XHQgKiByZW1vdmVfaHVnZXRsYl9mb2xpbygpIHdpbGwgY2xlYXIgdGhlIGh1Z2V0bGIgYml0LCBzbyBkb1xubW0vaHVnZXRsYi5jLTE1NTAtXHRcdCAqIG5vdCB1c2UgZm9saW9faHN0YXRlKCkgZGlyZWN0bHkuXG4tLVxubW0vaHVnZXRsYi5jPTE2ODk9dm9pZCBmcmVlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiLmMtMTc0MS1cdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfdGVtcG9yYXJ5KGZvbGlvKSkge1xubW0vaHVnZXRsYi5jOjE3NDI6XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtMTc0My1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcbi0tXG5tbS9odWdldGxiLmMtMTc0Ni1cdFx0LyogcmVtb3ZlIHRoZSBwYWdlIGZyb20gYWN0aXZlIGxpc3QgKi9cbm1tL2h1Z2V0bGIuYzoxNzQ3Olx0XHRyZW1vdmVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgdHJ1ZSk7XG5tbS9odWdldGxiLmMtMTc0OC1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcbi0tXG5tbS9odWdldGxiLmM9MTkyOD1zdGF0aWMgc3RydWN0IGZvbGlvICpyZW1vdmVfcG9vbF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTE5NDMtXHRcdFx0XHRcdCAgc3RydWN0IGZvbGlvLCBscnUpO1xubW0vaHVnZXRsYi5jOjE5NDQ6XHRcdFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGFjY3Rfc3VycGx1cyk7XG5tbS9odWdldGxiLmMtMTk0NS1cdFx0XHRicmVhaztcbi0tXG5tbS9odWdldGxiLmM9MTk2Nj1pbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jLTIwMDgtXHRcdFx0YWRqdXN0X3N1cnBsdXMgPSB0cnVlO1xubW0vaHVnZXRsYi5jOjIwMDk6XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBhZGp1c3Rfc3VycGx1cyk7XG5tbS9odWdldGxiLmMtMjAxMC1cdFx0aC1cdTAwM2VtYXhfaHVnZV9wYWdlcy0tO1xuLS1cbm1tL2h1Z2V0bGIuYy0yMDIxLVx0XHQgKiBUaGUgZm9saW9fdGVzdF9odWdldGxiIGNoZWNrIGhlcmUgaXMgYmVjYXVzZVxubW0vaHVnZXRsYi5jOjIwMjI6XHRcdCAqIHJlbW92ZV9odWdldGxiX2ZvbGlvIHdpbGwgY2xlYXIgaHVnZXRsYiBmb2xpbyBmbGFnIGZvclxubW0vaHVnZXRsYi5jLTIwMjMtXHRcdCAqIG5vbi12bWVtbWFwIG9wdGltaXplZCBodWdldGxiIGZvbGlvcy5cbi0tXG5tbS9odWdldGxiLmM9MjY0Nj1zdGF0aWMgaW50IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNzA1LVx0XHQgKi9cbm1tL2h1Z2V0bGIuYzoyNzA2Olx0XHRyZW1vdmVfaHVnZXRsYl9mb2xpbyhoLCBvbGRfZm9saW8sIGZhbHNlKTtcbm1tL2h1Z2V0bGIuYy0yNzA3LVxuLS1cbm1tL2h1Z2V0bGIuYz0zNjYzPXN0YXRpYyB2b2lkIHRyeV90b19mcmVlX2xvdyhzdHJ1Y3QgaHN0YXRlICpoLCB1bnNpZ25lZCBsb25nIGNvdW50LFxuLS1cbm1tL2h1Z2V0bGIuYy0zNjgzLVx0XHRcdFx0Y29udGludWU7XG5tbS9odWdldGxiLmM6MzY4NDpcdFx0XHRyZW1vdmVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpO1xubW0vaHVnZXRsYi5jLTM2ODUtXHRcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZwYWdlX2xpc3QpO1xuLS1cbm1tL2h1Z2V0bGIuYz0zOTgzPWxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbi0tXG5tbS9odWdldGxiLmMtNDAwOC1cbm1tL2h1Z2V0bGIuYzo0MDA5Olx0XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTtcbm1tL2h1Z2V0bGIuYy00MDEwLVx0XHRcdGxpc3RfYWRkKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2bGlzdCk7XG4tLVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oPTcxPXN0YXRpYyBpbmxpbmUgaW50IGhzdGF0ZV9uZXh0X25vZGVfdG9fZnJlZShzdHJ1Y3QgaHN0YXRlICpoLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkKVxuLS1cbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC05NC1cbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaDo5NTpleHRlcm4gdm9pZCByZW1vdmVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTk2LVx0XHRcdFx0IGJvb2wgYWRqdXN0X3N1cnBsdXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA2NwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEzNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdlVExCIEhXUG9pc29uIFJlZmFjdG9yaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGEgcmVmYWN0b3JpbmcsIHBvc3NpYmx5IGEgYnVnIGZpeCwgcmVsYXRlZCB0byBob3cgSFdQb2lzb24gaW50ZXJhY3RzIHdpdGggSHVnZVRMQiBwYWdlcy4gVGhlIHBhdGNoIG1vZGlmaWVzIGBtbS9odWdldGxiLmNgLCB3aGljaCBpcyB0aGUgZXhwZWN0ZWQgbG9jYXRpb24gZm9yIHRoaXMgdHlwZSBvZiBjaGFuZ2UuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYGZvbGlvX2NsZWFyX2h1Z2V0bGJgLCB3aGljaCBhY3RzIGFzIGEgY2VudHJhbCBwb2ludCBmb3IgaGFuZGxpbmcgdGhlIGNsZWFyaW5nIG9mIEh1Z2VUTEIgZm9saW9zLCBpbmNvcnBvcmF0aW5nIHRoZSBgaHdwb2lzb25gIGxvZ2ljLiBJdCBjb25kaXRpb25hbGx5IGNhbGxzIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBpZiB0aGUgZm9saW8gaXMgcG9pc29uZWQsIGFuZCB0aGVuIGFsd2F5cyBjYWxscyBgX19mb2xpb19jbGVhcl9odWdldGxiYC4gIFRoaXMgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gbW92ZSB0aGUgSFdQb2lzb24gZmxhZyBoYW5kbGluZyB0byBiZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCB0aGUgY29yZSBmcmVlaW5nIHByb2Nlc3MuCgpUaGUgbWFpbiBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIHJlcGxhY2VtZW50IG9mIGRpcmVjdCBjYWxscyB0byBgX19mb2xpb19jbGVhcl9odWdldGxiYCB3aXRoIGNhbGxzIHRvIHRoaXMgbmV3IGBmb2xpb19jbGVhcl9odWdldGxiYCBpbiBzZXZlcmFsIGNyaXRpY2FsIGZ1bmN0aW9uczogYHJlbW92ZV9odWdldGxiX2ZvbGlvYCwgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gLCBgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3JgLCBhbmQgYHVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrYC4gIFRoZXkgYWxzbyByZW1vdmVkIHRoZSBkaXJlY3QgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGNhbGwgZnJvbSAgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIG5vdyBiZWNhdXNlIGl0IGlzIGhhbmRsZWQgYnkgdGhlIG5ldyB3cmFwcGVyIGZ1bmN0aW9uLiBUaGlzIGNlbnRyYWxpemF0aW9uIGlzIGdvb2QsIGl0IHNpbXBsaWZpZXMgdGhlIGNvZGUuCgpNeSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6IElzIHRoaXMgZnVuY3Rpb25hbGx5IHNvdW5kPyAgRnJvbSB3aGF0IEkgc2VlLCBpdCBsb29rcyBsaWtlIGl0IGlzLiBJdCBlbnN1cmVzIHRoZSBIV1BvaXNvbiBmbGFnIGlzIGhhbmRsZWQgY29uc2lzdGVudGx5IHdoZW5ldmVyIGEgaHVnZSBwYWdlIGlzIGJlaW5nIGNsZWFyZWQuIFNvIHRoZSBwb2lzb25lZCBmbGFnIGlzIG1vdmVkIGZyb20gdGhlIGhlYWQgZm9saW8gdG8gdGhlIHJhdyBlcnJvciBwYWdlKHMpLiBJdCBpcyBub3cgY2FsbGVkIGluIGByZW1vdmVfaHVnZXRsYl9mb2xpb2AsIGBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcmAsIGFuZCBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGtgICpvbmx5KiB3aGVuIHRoZSBmb2xpbyBpcyBhY3R1YWxseSBwb2lzb25lZCwgdmlhIGBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKWAuCgpCdXQsIHdhaXQgYSBtaW51dGUuLi4gYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGlzIG9ubHkgZGVmaW5lZCBpZiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyBlbmFibGVkLiBPa2F5LCBJIGJldHRlciB2ZXJpZnkgdGhhdCBxdWlja2x5LiAgWWVwLCBjb25maXJtZWQuIEl0JiMzOTtzIGFuIGlubGluZSBuby1vcCBpZiB0aGF0IGNvbmZpZyBpc24mIzM5O3Qgc2V0LCB3aGljaCBtZWFucyB0aGUgZnVuY3Rpb25hbCBpbXBhY3QgaXMgb25seSByZWxldmFudCB3aGVuIGBNRU1PUllfRkFJTFVSRWAgaXMgYWN0aXZlLiBBbmQsIG9mIGNvdXJzZSwgYEhVR0VUTEJfUEFHRWAgaXMgbmVlZGVkIGZvciBgbW0vaHVnZXRsYi5jYC4gIFNvIHRoZXNlIGFyZSB0aGUgdHdvIHJlbGV2YW50IGNvbmZpZ3MuCgpOb3cgSSBuZWVkIHRvIHRoaW5rIGFib3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgaW1wb3J0YW50LgpgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIHNlZW1zIGltcG9ydGFudCBhcyBpdCBpcyBjYWxsZWQgZnJvbSBgZnJlZV9odWdlX2ZvbGlvYCwgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AsIGV0Yy4KYHVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrYCBpcyBpbXBvcnRhbnQgdG9vLCBjYWxsZWQgZnJvbSBzb21lIGNyaXRpY2FsIGZ1bmN0aW9ucy4KQW5kIGBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcmAsIGJlY2F1c2UgaXQgaXMgY2FsbGVkIGJ5IHRoZSBidWxrIGZ1bmN0aW9uLgoKT2ssIGxldCYjMzk7cyBjb25maXJtIHRoZSB2aXNpYmlsaXR5IG9mIHRob3NlIGZ1bmN0aW9uczogYGZyZWVfaHVnZV9mb2xpb2AsIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gLCBhbmQgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAuCmBmcmVlX2h1Z2VfZm9saW9gIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIGl0JiMzOTtzIGNhbGxlZCB3aGVuIGEgaHVnZSBwYWdlIGlzIGZyZWVkLgpgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCBpcyBhIGdvb2QgZW50cnlwb2ludCB0byBsb29rIGF0IGR1cmluZyBtZW1vcnkgZmFpbHVyZSBvciBvZmZsaW5lIG9wZXJhdGlvbnMuCkFuZCBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYCBpcyBnbG9iYWwgYXMgd2VsbC4KCk5vdywgYHVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrYCBpcyBjYWxsZWQgZnJvbSBgc2V0X21heF9odWdlX3BhZ2VzYCwgc28gYG5yX2h1Z2VwYWdlc19zdG9yZV9jb21tb25gLCBgaHVnZXRsYl9zeXNjdGxfaGFuZGxlcmAgb3IgYGh1Z2V0bGJfb3ZlcmNvbW1pdF9oYW5kbGVyYCBtYXkgYmUgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuCkFscmlnaHQsIGl0IHNlZW1zIGxpa2UgYGZyZWVfaHVnZV9mb2xpb2AsIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gIGFuZCBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYCBhcmUgZ29vZCBzcG90cyB0byBmb2N1cyBvbi4KTGV0JiMzOTtzIHZlcmlmeSB3aGF0IGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBhY3R1YWxseSBkb2VzLCBqdXN0IHRvIGJlIHN1cmUuLi4gbG9va3MgZ29vZCwgY2xlYXJpbmcgdGhlIGh3cG9pc29uIGZsYWcuCgpTbywgdG8gc3VtbWFyaXplLCB0aGlzIHBhdGNoIGNlbnRyYWxpemVzIGFuZCBwb3RlbnRpYWxseSBpbXByb3ZlcyB0aGUgaGFuZGxpbmcgb2YgSFdQb2lzb24gZmxhZ3Mgd2hlbiBIdWdlVExCIGZvbGlvcyBhcmUgY2xlYXJlZC4gSXQgaXMgZnVuY3Rpb25hbCwgZ2l2ZW4gdGhlIGNvbmZpZ3VyYXRpb25zIGBIVUdFVExCX1BBR0VgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgLiBUaGUga2V5IGVudHJ5cG9pbnRzIHRvIHRlc3QgYXJlIGBmcmVlX2h1Z2VfZm9saW9gLCBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCwgYW5kIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgLiBJIHdpbGwgbG9vayBhdCB0aG9zZSBjbG9zZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0zOTgzPWxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbi0tXG5tbS9odWdldGxiLmMtNDA1MS1cbm1tL2h1Z2V0bGIuYzo0MDUyOnNzaXplX3QgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKGJvb2wgb2JleV9tZW1wb2xpY3ksXG5tbS9odWdldGxiLmMtNDA1My1cdFx0XHRcdFx0ICAgc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZCxcbi0tXG5tbS9odWdldGxiX2ludGVybmFsLmg9MTAyPWV4dGVybiBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsXG4tLVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTEwNC1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBucl90b19kZW1vdGUpO1xubW0vaHVnZXRsYl9pbnRlcm5hbC5oOjEwNTpleHRlcm4gc3NpemVfdCBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24oYm9vbCBvYmV5X21lbXBvbGljeSxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC0xMDYtXHRcdFx0XHRcdCAgIHN0cnVjdCBoc3RhdGUgKmgsIGludCBuaWQsXG4tLVxubW0vaHVnZXRsYl9zeXNjdGwuYz0zMD1zdGF0aWMgaW50IGh1Z2V0bGJfc3lzY3RsX2hhbmRsZXJfY29tbW9uKGJvb2wgb2JleV9tZW1wb2xpY3ksXG4tLVxubW0vaHVnZXRsYl9zeXNjdGwuYy00Ni1cdGlmICh3cml0ZSlcbm1tL2h1Z2V0bGJfc3lzY3RsLmM6NDc6XHRcdHJldCA9IF9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbihvYmV5X21lbXBvbGljeSwgaCxcbm1tL2h1Z2V0bGJfc3lzY3RsLmMtNDgtXHRcdFx0XHRcdFx0ICBOVU1BX05PX05PREUsIHRtcCwgKmxlbmd0aCk7XG4tLVxubW0vaHVnZXRsYl9zeXNmcy5jPTQyPXN0YXRpYyBzc2l6ZV90IG5yX2h1Z2VwYWdlc19zaG93X2NvbW1vbihzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9odWdldGxiX3N5c2ZzLmMtNTctXG5tbS9odWdldGxiX3N5c2ZzLmM6NTg6c3RhdGljIHNzaXplX3QgbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbihib29sIG9iZXlfbWVtcG9saWN5LFxubW0vaHVnZXRsYl9zeXNmcy5jLTU5LVx0XHRcdFx0XHQgc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IGNoYXIgKmJ1Zixcbi0tXG5tbS9odWdldGxiX3N5c2ZzLmMtNzEtXHRoID0ga29ial90b19oc3RhdGUoa29iaiwgXHUwMDI2bmlkKTtcbm1tL2h1Z2V0bGJfc3lzZnMuYzo3MjpcdHJldHVybiBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24ob2JleV9tZW1wb2xpY3ksIGgsIG5pZCwgY291bnQsIGxlbik7XG5tbS9odWdldGxiX3N5c2ZzLmMtNzMtfVxuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYz04MT1zdGF0aWMgc3NpemVfdCBucl9odWdlcGFnZXNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vaHVnZXRsYl9zeXNmcy5jLTgzLXtcbm1tL2h1Z2V0bGJfc3lzZnMuYzo4NDpcdHJldHVybiBucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKGZhbHNlLCBrb2JqLCBidWYsIGxlbik7XG5tbS9odWdldGxiX3N5c2ZzLmMtODUtfVxuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYz0xMDE9c3RhdGljIHNzaXplX3QgbnJfaHVnZXBhZ2VzX21lbXBvbGljeV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9odWdldGxiX3N5c2ZzLmMtMTAzLXtcbm1tL2h1Z2V0bGJfc3lzZnMuYzoxMDQ6XHRyZXR1cm4gbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbih0cnVlLCBrb2JqLCBidWYsIGxlbik7XG5tbS9odWdldGxiX3N5c2ZzLmMtMTA1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4ODEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZW1vdGVfcG9vbF9odWdlX3BhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTM5MjQ9c3RhdGljIGxvbmcgZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqc3JjLCBzdHJ1Y3QgaHN0YXRlICpkc3QsXG4tLVxubW0vaHVnZXRsYi5jLTM5ODItXG5tbS9odWdldGxiLmM6Mzk4Mzpsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG5tbS9odWdldGxiLmMtMzk4NC1cdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3RvX2RlbW90ZSlcbi0tXG5tbS9odWdldGxiLmMtMzk5NS1cdGlmICghc3JjLVx1MDAzZWRlbW90ZV9vcmRlcikge1xubW0vaHVnZXRsYi5jOjM5OTY6XHRcdHByX3dhcm4oXCYjMzQ7SHVnZVRMQjogTlVMTCBkZW1vdGUgb3JkZXIgcGFzc2VkIHRvIGRlbW90ZV9wb29sX2h1Z2VfcGFnZS5cXG5cJiMzNDspO1xubW0vaHVnZXRsYi5jLTM5OTctXHRcdHJldHVybiAtRUlOVkFMO1x0XHQvKiBpbnRlcm5hbCBlcnJvciAqL1xuLS1cbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaD0xMDA9ZXh0ZXJuIHZvaWQgcHJlcF9hbmRfYWRkX2FsbG9jYXRlZF9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqaCxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC0xMDEtXHRcdFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCk7XG5tbS9odWdldGxiX2ludGVybmFsLmg6MTAyOmV4dGVybiBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsXG5tbS9odWdldGxiX2ludGVybmFsLmgtMTAzLVx0XHRcdFx0ICBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLFxuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYz0xODE9c3RhdGljIHNzaXplX3QgZGVtb3RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMTEtXHRcdCAqIENoZWNrIGZvciBhdmFpbGFibGUgcGFnZXMgdG8gZGVtb3RlIGVhY2ggdGltZSB0aG9yb3VnaCB0aGVcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyMTI6XHRcdCAqIGxvb3AgYXMgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlIHdpbGwgZHJvcCBodWdldGxiX2xvY2suXG5tbS9odWdldGxiX3N5c2ZzLmMtMjEzLVx0XHQgKi9cbi0tXG5tbS9odWdldGxiX3N5c2ZzLmMtMjIxLVxubW0vaHVnZXRsYl9zeXNmcy5jOjIyMjpcdFx0cmMgPSBkZW1vdGVfcG9vbF9odWdlX3BhZ2UoaCwgbl9tYXNrLCBucl9kZW1vdGUpO1xubW0vaHVnZXRsYl9zeXNmcy5jLTIyMy1cdFx0aWYgKHJjIFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDQ4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0zOTgzPWxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbi0tXG5tbS9odWdldGxiLmMtNDA1MS1cbm1tL2h1Z2V0bGIuYzo0MDUyOnNzaXplX3QgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKGJvb2wgb2JleV9tZW1wb2xpY3ksXG5tbS9odWdldGxiLmMtNDA1My1cdFx0XHRcdFx0ICAgc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZCxcbi0tXG5tbS9odWdldGxiX2ludGVybmFsLmg9MTAyPWV4dGVybiBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsXG4tLVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTEwNC1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBucl90b19kZW1vdGUpO1xubW0vaHVnZXRsYl9pbnRlcm5hbC5oOjEwNTpleHRlcm4gc3NpemVfdCBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24oYm9vbCBvYmV5X21lbXBvbGljeSxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC0xMDYtXHRcdFx0XHRcdCAgIHN0cnVjdCBoc3RhdGUgKmgsIGludCBuaWQsXG4tLVxubW0vaHVnZXRsYl9zeXNjdGwuYz0zMD1zdGF0aWMgaW50IGh1Z2V0bGJfc3lzY3RsX2hhbmRsZXJfY29tbW9uKGJvb2wgb2JleV9tZW1wb2xpY3ksXG4tLVxubW0vaHVnZXRsYl9zeXNjdGwuYy00Ni1cdGlmICh3cml0ZSlcbm1tL2h1Z2V0bGJfc3lzY3RsLmM6NDc6XHRcdHJldCA9IF9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbihvYmV5X21lbXBvbGljeSwgaCxcbm1tL2h1Z2V0bGJfc3lzY3RsLmMtNDgtXHRcdFx0XHRcdFx0ICBOVU1BX05PX05PREUsIHRtcCwgKmxlbmd0aCk7XG4tLVxubW0vaHVnZXRsYl9zeXNmcy5jPTU4PXN0YXRpYyBzc2l6ZV90IG5yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24oYm9vbCBvYmV5X21lbXBvbGljeSxcbi0tXG5tbS9odWdldGxiX3N5c2ZzLmMtNzEtXHRoID0ga29ial90b19oc3RhdGUoa29iaiwgXHUwMDI2bmlkKTtcbm1tL2h1Z2V0bGJfc3lzZnMuYzo3MjpcdHJldHVybiBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24ob2JleV9tZW1wb2xpY3ksIGgsIG5pZCwgY291bnQsIGxlbik7XG5tbS9odWdldGxiX3N5c2ZzLmMtNzMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk3MAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0yNTY1PXZvaWQgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNjM5LS8qXG5tbS9odWdldGxiLmM6MjY0MDogKiBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpbyAtIEFsbG9jYXRlIGEgbmV3IGZvbGlvIGFuZCBkaXNzb2x2ZVxubW0vaHVnZXRsYi5jLTI2NDEtICogdGhlIG9sZCBvbmVcbi0tXG5tbS9odWdldGxiLmMtMjY0NS0gKi9cbm1tL2h1Z2V0bGIuYzoyNjQ2OnN0YXRpYyBpbnQgYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpvbGRfZm9saW8sXG5tbS9odWdldGxiLmMtMjY0Ny1cdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuLS1cbm1tL2h1Z2V0bGIuYz0yNzMyPWludCBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdldGxiLmMtMjc1MC1cdGVsc2UgaWYgKCFmb2xpb19yZWZfY291bnQoZm9saW8pKVxubW0vaHVnZXRsYi5jOjI3NTE6XHRcdHJldCA9IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKGZvbGlvLCBsaXN0KTtcbm1tL2h1Z2V0bGIuYy0yNzUyLVxuLS1cbm1tL2h1Z2V0bGIuYz0yNzYzPWludCByZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4tLVxubW0vaHVnZXRsYi5jLTI4MDItXG5tbS9odWdldGxiLmM6MjgwMzpcdFx0XHRcdHJldCA9IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKGZvbGlvLCBcdTAwMjZsaXN0KTtcbm1tL2h1Z2V0bGIuYy0yODA0LVx0XHRcdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1NTUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA0NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgSHVnZSBQYWdlIE1hbmFnZW1lbnQgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgaHVnZSBwYWdlcyBhcmUgbWFuYWdlZCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBmZXcga2V5IGZ1bmN0aW9ucyBhcmUgdGhlIHdvcmtob3JzZXMgaGVyZS4gSSYjMzk7dmUgaWRlbnRpZmllZCBgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uYCwgd2hpY2ggaXNuJiMzOTt0IHN0YXRpYywgYW5kIGl0IHNlZW1zIHRvIGJlIHRoZSBlbnRyeSBwb2ludCBmb3Igc2V0dGluZyB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMuIFRoYXQgdGhlbiBsZWFkcyB0byBgc2V0X21heF9odWdlX3BhZ2VzYCBhbmQgdWx0aW1hdGVseSwgdGhpbmdzIGxpa2UgYHVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrYCBhbmQgYHJlbW92ZV9odWdldGxiX2ZvbGlvYC4gYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAgYWxzbyBpc24mIzM5O3Qgc3RhdGljIGFuZCBpcyByZXNwb25zaWJsZSBmb3IgZGVtb3RpbmcgaHVnZSBwYWdlcywgd2hpY2gsIGFnYWluLCBlbmRzIHVwIGNhbGxpbmcgYHJlbW92ZV9odWdldGxiX2ZvbGlvYC4gYGZyZWVfaHVnZV9mb2xpb2AgaXMgc2ltaWxhciwgaGFuZGxpbmcgdGhlIGZyZWVpbmcgb2YgcGFnZXMgYW5kIGNhbGxpbmcgYHJlbW92ZV9odWdldGxiX2ZvbGlvYCwgYXMgZG9lcyBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCBmb3IgZGlzc29sdmluZy4gVGhlbiB3ZSBoYXZlIGBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9gLCB3aGljaCBjYWxscyBgYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW9gLCB3aGljaCBpbiB0dXJuLCBjYWxscyBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLgoKU28sIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOgoqICAgYGZyZWVfaHVnZV9mb2xpb2AKKiAgIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gCiogICBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYAoqICAgYF9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbmAKKiAgIGBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9gCgpXYWl0IGEgbWludXRlLCBgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uYCBpcyBhIHN5c2ZzL3N5c2N0bCBoYW5kbGVyLCBpc24mIzM5O3QgaXQ/IEhtbSwgaXMgdGhhdCBnb2luZyB0byBiZSB1c2VmdWwgZm9yIGZ1enppbmc/IE9oIHllYWgsIHN5emthbGxlciBjYW4gd3JpdGUgdG8gdGhvc2Ugc3lzZnMvc3lzY3RsIGludGVyZmFjZXMhIEJ1dCwgYGZyZWVfaHVnZV9mb2xpb2AgbG9va3MgbW9yZSBmdW5kYW1lbnRhbCBhbmQgc2hvdWxkIGJlIHJlYWNoYWJsZSB0aHJvdWdoIHJlZ3VsYXIgc3lzY2FsbHMgbGlrZSBgbXVubWFwYCBhbmQgYG1hZHZpc2VgLCB3aGljaCBJIHByZWZlciB0byB3b3JrIHdpdGggZGlyZWN0bHkuIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gIHNlZW1zIGxpa2UgaXQmIzM5O3MgY29ubmVjdGVkIHRvIG1lbW9yeSBmYWlsdXJlIGluamVjdGlvbi4KClRoZSByZWxldmFudCBrZXJuZWwgY29uZmlncyBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBhcmUgYEhVR0VUTEJGU2AgYW5kIGBNRU1PUllfRkFJTFVSRWAuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IHRoZSBgSFVHRVRMQkZTYCBpcyBhY3R1YWxseSBjYWxsZWQgdGhhdCwgdGhvdWdoLiBPa2F5LCBZZXAsIGBjb25maWcgSFVHRVRMQkZTYCBpbiBgZnMvS2NvbmZpZ2AuIEFuZCwgYGNvbmZpZyBNRU1PUllfRkFJTFVSRWAgaXMgaW4gYG1tL0tjb25maWdgLgoKSG1tLCBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnM/IExldCBtZSBzZWUuIEFoLCBgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZGAgaXMgYWxzbyB1c2VkLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCYjMzk7cyBkZWZpbmVkIGZvciBtb3JlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA4Nj1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDg4LVx0cmV0dXJuIGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pIHx8XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDg5Olx0ICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA5MC19XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zNTI3PXN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM1MzAtXHQvKiBTY2FuIHBvaXNvbmVkIHBhZ2VzIHdoZW4gc3BsaXQgYSBwb2lzb25lZCBmb2xpbyB0byBsYXJnZSBmb2xpb3MgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6MzUzMTpcdGNvbnN0IGJvb2wgaGFuZGxlX2h3cG9pc29uID0gZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykgXHUwMDI2XHUwMDI2IG5ld19vcmRlcjtcbm1tL2h1Z2VfbWVtb3J5LmMtMzUzMi1cdGxvbmcgbmV3X25yX3BhZ2VzID0gMSBcdTAwM2NcdTAwM2MgbmV3X29yZGVyO1xuLS1cbm1tL2h1Z2V0bGIuYz0xMzg0PXN0YXRpYyB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiLmMtMTM4OS1cdCAqL1xubW0vaHVnZXRsYi5jOjEzOTA6XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKVxubW0vaHVnZXRsYi5jLTEzOTEtXHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oZm9saW8pO1xuLS1cbm1tL21lbW9yeS5jPTU0Njg9dm1fZmF1bHRfdCBkb19zZXRfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9tZW1vcnkuYy01NDk5LVx0ICovXG5tbS9tZW1vcnkuYzo1NTAwOlx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSlcbm1tL21lbW9yeS5jLTU1MDEtXHRcdHJldHVybiByZXQ7XG4tLVxubW0vc2htZW0uYz0zMjg4PXN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5tbS9zaG1lbS5jLTMzMjYtXHRcdFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFx1MDAyNlx1MDAyNlxubW0vc2htZW0uYzozMzI3Olx0XHRcdCAgICBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbm1tL3NobWVtLmMtMzMyOC1cdFx0XHRcdGZhbGxiYWNrX3BhZ2VfY29weSA9IHRydWU7XG4tLVxubW0vc2htZW0uYz0zNDc1PXN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4tLVxubW0vc2htZW0uYy0zNTE2LVx0XHRcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbm1tL3NobWVtLmM6MzUxNzpcdFx0XHQgICAgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG5tbS9zaG1lbS5jLTM1MTgtXHRcdFx0XHRmYWxsYmFja19wYWdlX3NwbGljZSA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzI5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fdGVzdF9od3BvaXNvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9odWdldGxiZnMvaW5vZGUuYz0yMTk9c3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMjYwLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MjYxOlx0XHRcdGlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0yNjItXHRcdFx0XHR3YW50ID0gbnI7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA4Nj1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbylcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwODcte1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA4ODpcdHJldHVybiBmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSB8fFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA4OS1cdCAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTtcbi0tXG5tbS9odWdldGxiLmM9MTI0Nz1zdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZV9leGFjdChzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0xMjU3LVxubW0vaHVnZXRsYi5jOjEyNTg6XHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbm1tL2h1Z2V0bGIuYy0xMjU5LVx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL2h1Z2V0bGIuYz0zOTgzPWxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbi0tXG5tbS9odWdldGxiLmMtNDAwNS1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCBuZXh0LCBcdTAwMjZzcmMtXHUwMDNlaHVnZXBhZ2VfZnJlZWxpc3RzW25vZGVdLCBscnUpIHtcbm1tL2h1Z2V0bGIuYzo0MDA2Olx0XHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbm1tL2h1Z2V0bGIuYy00MDA3LVx0XHRcdFx0Y29udGludWU7XG4tLVxubW0vaHVnZXRsYi5jPTU2OTY9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL2h1Z2V0bGIuYy01ODE2LVx0XHQgKi9cbm1tL2h1Z2V0bGIuYzo1ODE3Olx0XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKSB7XG5tbS9odWdldGxiLmMtNTgxOC1cdFx0XHRyZXQgPSBWTV9GQVVMVF9IV1BPSVNPTl9MQVJHRSB8XG4tLVxubW0vaHVnZXRsYi5jPTYxNjg9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcbi0tXG5tbS9odWdldGxiLmMtNjMyNS1cdHJldCA9IC1FSU87XG5tbS9odWdldGxiLmM6NjMyNjpcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbm1tL2h1Z2V0bGIuYy02MzI3LVx0XHRnb3RvIG91dF9yZWxlYXNlX3VubG9jaztcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE4MjU9Ym9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4MzEtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE4MzI6XHRpZiAoIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODMzLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz03NTQ9c3RhdGljIHN0cnVjdCBmb2xpbyAqX19rdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzc2LVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo3Nzc6XHRpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpIHtcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzc4LVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY1MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX2NsZWFyX2h1Z2V0bGImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmg9NjExPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NjEyOnZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjEzLVx0e1x0dm9pZCAqcHJpdmF0ZSA9IFx1MDAyNmZvbGlvLVx1MDAzZXByaXZhdGU7XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NjI4PXN0YXRpYyBpbmxpbmUgdm9pZFx0XHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo2Mjk6Zm9saW9fY2xlYXJfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjMwLVx0eyB9XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9ODc3PWludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTg4MC0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo4ODE6ZXh0ZXJuIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTg4Mi0jZWxzZVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODgzOnN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04ODQte1xuLS1cbm1tL2h1Z2V0bGIuYz0xMjQ3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlX2V4YWN0KHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTEyNjUtXHRcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7XG5tbS9odWdldGxiLmM6MTI2NjpcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9mcmVlZChmb2xpbyk7XG5tbS9odWdldGxiLmMtMTI2Ny1cdFx0aC1cdTAwM2VmcmVlX2h1Z2VfcGFnZXMtLTtcbi0tXG5tbS9odWdldGxiLmM9MTM3Nz1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywgaW50IG5pZCxcbi0tXG5tbS9odWdldGxiLmMtMTM4My1cbm1tL2h1Z2V0bGIuYzoxMzg0OnN0YXRpYyB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2h1Z2V0bGIuYy0xMzg1LXtcbi0tXG5tbS9odWdldGxiLmMtMTM5MC1cdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpXG5tbS9odWdldGxiLmM6MTM5MTpcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XG5tbS9odWdldGxiLmMtMTM5Mi1cbm1tL2h1Z2V0bGIuYzoxMzkzOlx0X19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0xMzk0LX1cbi0tXG5tbS9odWdldGxiLmM9MTQwND12b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vaHVnZXRsYi5jLTE0MTgtXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX2ZyZWVkKGZvbGlvKSkge1xubW0vaHVnZXRsYi5jOjE0MTk6XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfZnJlZWQoZm9saW8pO1xubW0vaHVnZXRsYi5jLTE0MjAtXHRcdGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzLS07XG4tLVxubW0vaHVnZXRsYi5jLTE0MzMtXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpXG5tbS9odWdldGxiLmM6MTQzNDpcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG5tbS9odWdldGxiLmMtMTQzNS1cbi0tXG5tbS9odWdldGxiLmM9MTQ3MD1zdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTE1MDctXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbm1tL2h1Z2V0bGIuYzoxNTA4Olx0XHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0xNTA5LVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi0tXG5tbS9odWdldGxiLmM9MTU4Nj1zdGF0aWMgdm9pZCBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0xNjAyLVx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbm1tL2h1Z2V0bGIuYzoxNjAzOlx0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xubW0vaHVnZXRsYi5jLTE2MDQtXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4tLVxubW0vaHVnZXRsYi5jLTE2MjctXHRcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG5tbS9odWdldGxiLmM6MTYyODpcdFx0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xubW0vaHVnZXRsYi5jLTE2MjktXHRcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi0tXG5tbS9odWdldGxiLmM9MTYzNz1zdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0xNjYwLVx0ICogV2l0aG91dCBIVk8gZW5hYmxlZCwgcmV0IHdpbGwgYmUgMCBhbmQgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsXG5tbS9odWdldGxiLmM6MTY2MTpcdCAqIGZvbGlvX2NsZWFyX2h1Z2V0bGIgYXMgdGhpcyB3YXMgZG9uZSBwcmV2aW91c2x5LlxubW0vaHVnZXRsYi5jLTE2NjItXHQgKi9cbi0tXG5tbS9odWdldGxiLmMtMTY2Ny1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmb2xpbywgXHUwMDI2bm9uX2h2b19mb2xpb3MsIGxydSlcbm1tL2h1Z2V0bGIuYzoxNjY4Olx0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xubW0vaHVnZXRsYi5jLTE2NjktXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuLS1cbm1tL2h1Z2V0bGIuYz0xNjg5PXZvaWQgZnJlZV9odWdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jLTE3MDgtXHRyZXN0b3JlX3Jlc2VydmUgPSBmb2xpb190ZXN0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYzoxNzA5Olx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTE3MTAtXG4tLVxubW0vaHVnZXRsYi5jLTE3MzAtXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcbm1tL2h1Z2V0bGIuYzoxNzMxOlx0Zm9saW9fY2xlYXJfaHVnZXRsYl9taWdyYXRhYmxlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0xNzMyLVx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfZm9saW8oaHN0YXRlX2luZGV4KGgpLFxuLS1cbm1tL2h1Z2V0bGIuYz0yNTY1PXZvaWQgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNTgyLVx0XHRcdCAqL1xubW0vaHVnZXRsYi5jOjI1ODM6XHRcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTI1ODQtXHRcdGVsc2UgaWYgKHJjKVxuLS1cbm1tL2h1Z2V0bGIuYz01MTQ2PXZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTI4My1cdFx0XHRcdCAqL1xubW0vaHVnZXRsYi5jOjUyODQ6XHRcdFx0XHRmb2xpb19jbGVhcl9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XG5tbS9odWdldGxiLmMtNTI4NS1cdFx0XHRlbHNlIGlmIChyYylcbi0tXG5tbS9odWdldGxiLmM9NTYzMz1pbnQgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9odWdldGxiLmMtNTY0Ny1cdH1cbm1tL2h1Z2V0bGIuYzo1NjQ4Olx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTU2NDktXG4tLVxubW0vaHVnZXRsYi5jPTcxMzM9Ym9vbCBmb2xpb19pc29sYXRlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdldGxiLmMtNzE0My1cdH1cbm1tL2h1Z2V0bGIuYzo3MTQ0Olx0Zm9saW9fY2xlYXJfaHVnZXRsYl9taWdyYXRhYmxlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy03MTQ1LVx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBsaXN0KTtcbi0tXG5tbS9odWdldGxiLmM9NzE5MD12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pXG4tLVxubW0vaHVnZXRsYi5jLTcyMTEtXHRcdGZvbGlvX3NldF9odWdldGxiX3RlbXBvcmFyeShvbGRfZm9saW8pO1xubW0vaHVnZXRsYi5jOjcyMTI6XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfdGVtcG9yYXJ5KG5ld19mb2xpbyk7XG5tbS9odWdldGxiLmMtNzIxMy1cbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYz0zOTU9c3RhdGljIGludCBfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmMtNDE5LVx0aWYgKCFyZXQpXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo0MjA6XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pO1xubW0vaHVnZXRsYl92bWVtbWFwLmMtNDIxLVxuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTUyMj1zdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmMtNTc3LVx0aWYgKHJldClcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjU3ODpcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbyk7XG5tbS9odWdldGxiX3ZtZW1tYXAuYy01NzktXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xOTI4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5NDYtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE5NDc6dm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5NDgte1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTk1Nz1zdGF0aWMgaW50IGdldF9odWdlX3BhZ2VfZm9yX2h3cG9pc29uKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTk4LVx0aWYgKGNvdW50X2luY3JlYXNlZCBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9odWdldGxiX21pZ3JhdGFibGUoZm9saW8pKSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjE5OTk6XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfbWlncmF0YWJsZShmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwMDAtXHRcdCptaWdyYXRhYmxlX2NsZWFyZWQgPSB0cnVlO1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MjAyNT1zdGF0aWMgaW50IHRyeV9tZW1vcnlfZmFpbHVyZV9odWdldGxiKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDYyLVx0aWYgKGh3cG9pc29uX2ZpbHRlcihwKSkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyMDYzOlx0XHRmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjA2NC1cdFx0aWYgKG1pZ3JhdGFibGVfY2xlYXJlZClcbi0tXG5tbS9ybWFwLmM9MzE0Mj12b2lkIGh1Z2V0bGJfYWRkX25ld19hbm9uX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtMzE1MC1cdGF0b21pY19zZXQoXHUwMDI2Zm9saW8tXHUwMDNlX2xhcmdlX21hcGNvdW50LCAwKTtcbm1tL3JtYXAuYzozMTUxOlx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vcm1hcC5jLTMxNTItXHRfX2ZvbGlvX3NldF9hbm9uKGZvbGlvLCB2bWEsIGFkZHJlc3MsIHRydWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQ5OQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZm9saW9fY2xlYXJfaHVnZXRsYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTM4ND1zdGF0aWMgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jLTEzOTItXG5tbS9odWdldGxiLmM6MTM5MzpcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG5tbS9odWdldGxiLmMtMTM5NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjMwCgkJCQkJCQlvdXRwdXQ6IDIyNAoJCQkJCQkJdGhvdWdodHM6IDI2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBmb2xpb19jbGVhcl9odWdldGxiYCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHJlbmFtZXMgYF9fZm9saW9fY2xlYXJfaHVnZXRsYmAgdG8gYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIGFuZCwgaW1wb3J0YW50bHksIGl0IGFsc28gY2xlYXJzIHRoZSBgaHdwb2lzb25gIGZsYWcgaWYgc2V0LiBUaGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGNsZWFyIG9uZS4gTWFrZXMgc2Vuc2UuCgpOb3csIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFRoZSBwYXRjaCBkZXNjcmlwdGlvbiBtZW50aW9ucyBgSFVHRVRMQkZTYCBhbmQgYE1FTU9SWV9GQUlMVVJFYC4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRob3NlIGFyZSBjb3JyZWN0Li4uIFllcCwgYEhVR0VUTEJGU2AgaXMgaW4gYGZzL0tjb25maWdgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgIGlzIGluIGBtbS9LY29uZmlnYCwganVzdCBhcyBleHBlY3RlZC4KCkZvciB0aGUgZm9jdXMgc3ltYm9scywgSSBpbml0aWFsbHkgam90dGVkIGRvd24gYGZyZWVfaHVnZV9mb2xpb2AsIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gLCBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYCwgYF9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbmAsIGFuZCBgaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX2ZvbGlvYC4gQWN0dWFsbHksIGxldCYjMzk7cyByZW1vdmUgYF9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbmAuIEl0JiMzOTtzIHJlbGF0ZWQsIGJ1dCBub3QgcmVhbGx5IGEgY29yZSBmb2N1cyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGNoYW5nZS4gVGhlIGZpcnN0IHRocmVlIHN5bWJvbHMgYXJlIG1vcmUgdGhhbiBlbm91Z2g6IGBmcmVlX2h1Z2VfZm9saW9gLCBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCwgYW5kIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgLiBUaG9zZSB3aWxsIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGVyZSB0aGlzIGNoYW5nZSB0b3VjaGVzLgoKT2theSwgSSYjMzk7bSBzYXRpc2ZpZWQuIFRpbWUgdG8gdXNlIGBzZXQtcmVzdWx0c2AgYW5kIHN1Ym1pdCB0aGlzIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnJlZV9odWdlX2ZvbGlvJiMzNDssCiAgICAmIzM0O2Rpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICAgJiMzNDtkZW1vdGVfcG9vbF9odWdlX3BhZ2UmIzM0OywKICAgICYjMzQ7X19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIHRoYXQgd3JhcHMgYF9fZm9saW9fY2xlYXJfaHVnZXRsYmAgYW5kIGFkZHMgbG9naWMgdG8gbW92ZSB0aGUgSFdQb2lzb24gZmxhZyB0byBlYWNoIGVycm9yIHBhZ2UgaWYgdGhlIGZvbGlvIGhhcyBod3BvaXNvbmVkIHBhZ2VzLiBJdCByZXBsYWNlcyBjYWxscyB0byBgX19mb2xpb19jbGVhcl9odWdldGxiYCB3aXRoIGBmb2xpb19jbGVhcl9odWdldGxiYCBpbiBzZXZlcmFsIHBsYWNlcywgY2hhbmdpbmcgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgYW5kIGVuc3VyaW5nIHRoZSBIV1BvaXNvbiBmbGFnIGlzIHByb3Blcmx5IGhhbmRsZWQgd2hlbiBhIEh1Z2VUTEIgZm9saW8gaXMgcmVtb3ZlZCBvciBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKEh1Z2VUTEIgYW5kIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nKSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBIdWdlVExCIGFsbG9jYXRpb24vZnJlZWluZyBhbmQgbWVtb3J5IGZhaWx1cmUgaW5qZWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmcmVlX2h1Z2VfZm9saW8mIzM0OywKICAgICYjMzQ7ZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvJiMzNDssCiAgICAmIzM0O2RlbW90ZV9wb29sX2h1Z2VfcGFnZSYjMzQ7LAogICAgJiMzNDtfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgZm9saW9fY2xlYXJfaHVnZXRsYmAgdGhhdCB3cmFwcyBgX19mb2xpb19jbGVhcl9odWdldGxiYCBhbmQgYWRkcyBsb2dpYyB0byBtb3ZlIHRoZSBIV1BvaXNvbiBmbGFnIHRvIGVhY2ggZXJyb3IgcGFnZSBpZiB0aGUgZm9saW8gaGFzIGh3cG9pc29uZWQgcGFnZXMuIEl0IHJlcGxhY2VzIGNhbGxzIHRvIGBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGJgIHdpdGggYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIGluIHNldmVyYWwgcGxhY2VzLCBjaGFuZ2luZyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBhbmQgZW5zdXJpbmcgdGhlIEhXUG9pc29uIGZsYWcgaXMgcHJvcGVybHkgaGFuZGxlZCB3aGVuIGEgSHVnZVRMQiBmb2xpbyBpcyByZW1vdmVkIG9yIGZyZWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoSHVnZVRMQiBhbmQgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcpIGFuZCBpcyByZWFjaGFibGUgdmlhIEh1Z2VUTEIgYWxsb2NhdGlvbi9mcmVlaW5nIGFuZCBtZW1vcnkgZmFpbHVyZSBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzoyODowNi44NTQ2NDk5NTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk1NDgzMDIyOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZyZWVfaHVnZV9mb2xpb1wiLFxuICAgIFwiZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJkZW1vdGVfcG9vbF9odWdlX3BhZ2VcIixcbiAgICBcIl9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIHRoYXQgd3JhcHMgYF9fZm9saW9fY2xlYXJfaHVnZXRsYmAgYW5kIGFkZHMgbG9naWMgdG8gbW92ZSB0aGUgSFdQb2lzb24gZmxhZyB0byBlYWNoIGVycm9yIHBhZ2UgaWYgdGhlIGZvbGlvIGhhcyBod3BvaXNvbmVkIHBhZ2VzLiBJdCByZXBsYWNlcyBjYWxscyB0byBgX19mb2xpb19jbGVhcl9odWdldGxiYCB3aXRoIGBmb2xpb19jbGVhcl9odWdldGxiYCBpbiBzZXZlcmFsIHBsYWNlcywgY2hhbmdpbmcgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgYW5kIGVuc3VyaW5nIHRoZSBIV1BvaXNvbiBmbGFnIGlzIHByb3Blcmx5IGhhbmRsZWQgd2hlbiBhIEh1Z2VUTEIgZm9saW8gaXMgcmVtb3ZlZCBvciBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKEh1Z2VUTEIgYW5kIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nKSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBIdWdlVExCIGFsbG9jYXRpb24vZnJlZWluZyBhbmQgbWVtb3J5IGZhaWx1cmUgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzoyODowNi44NTQ2NTY2NjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMDUyNDk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMxZTVhNjczZGYwNzY2NTc2MTMzNTRhMWRmY2NkY2RiZGZkMTY0NThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjkgMjM6Mjg6MDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXFxuaW5kZXggNTcxMjEyYjgwODM1ZS4uMjdlZTJkZmFhZmE2MyAxMDA2NDRcXG4tLS0gYS9tbS9odWdldGxiLmNcXG4rKysgYi9tbS9odWdldGxiLmNcXG5AQCAtMTM4MSw2ICsxMzgxLDE4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnRcXG4gfVxcbiAjZW5kaWZcXG4gXFxuK3N0YXRpYyB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHQvKlxcbitcXHQgKiBNb3ZlIEhXUG9pc29uIGZsYWcgdG8gZWFjaCBlcnJvciBwYWdlXFxuK1xcdCAqIHdoaWNoIG1ha2VzIGFueSBoZWFsdGh5IHBhZ2VzIHJldXNhYmxlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSlcXG4rXFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XFxuK1xcbitcXHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBSZW1vdmUgaHVnZXRsYiBmb2xpbyBmcm9tIGxpc3RzLlxcbiAgKiBJZiB2bWVtbWFwIGV4aXN0cyBmb3IgdGhlIGZvbGlvLCBjbGVhciB0aGUgaHVnZXRsYiBmbGFnIHNvIHRoYXQgdGhlXFxuQEAgLTE0MTksNyArMTQzMSw3IEBAIHZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0ICogdG8gdGFpbCBzdHJ1Y3QgcGFnZXMuXFxuIFxcdCAqL1xcbiBcXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpXFxuLVxcdFxcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XFxuK1xcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbiBcXG4gXFx0aC1cXHUwMDNlbnJfaHVnZV9wYWdlcy0tO1xcbiBcXHRoLVxcdTAwM2Vucl9odWdlX3BhZ2VzX25vZGVbbmlkXS0tO1xcbkBAIC0xNDkzLDE3ICsxNTA1LDEwIEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0ICovXFxuIFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XFxuIFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuLVxcdFxcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XFxuK1xcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbiBcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuIFxcdH1cXG4gXFxuLVxcdC8qXFxuLVxcdCAqIE1vdmUgUGFnZUhXUG9pc29uIGZsYWcgZnJvbSBoZWFkIHBhZ2UgdG8gdGhlIHJhdyBlcnJvciBwYWdlcyxcXG4tXFx0ICogd2hpY2ggbWFrZXMgYW55IGhlYWx0aHkgc3VicGFnZXMgcmV1c2FibGUuXFxuLVxcdCAqL1xcbi1cXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKVxcbi1cXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTtcXG4tXFxuIFxcdFZNX0JVR19PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XFxuIFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfY21hKGZvbGlvKSlcXG4gXFx0XFx0aHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oZm9saW8pO1xcbkBAIC0xNTk1LDcgKzE2MDAsNyBAQCBzdGF0aWMgdm9pZCBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLFxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIHRfZm9saW8sIG5vbl9odm9fZm9saW9zLCBscnUpIHtcXG4gXFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUpO1xcbiBcXHRcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbi1cXHRcXHRcXHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbitcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcXG4gXFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbiBcXHRcXHRcXHR1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpO1xcbiBcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5AQCAtMTYyMCw3ICsxNjI1LDcgQEAgc3RhdGljIHZvaWQgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUpO1xcbiBcXHRcXHRcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbi1cXHRcXHRcXHRcXHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbitcXHRcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcXG4gXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbiBcXHRcXHRcXHRcXHR1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpO1xcbiBcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5AQCAtMTY1MywxNCArMTY1OCwxNCBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLFxcbiBcXHQgKiBzaG91bGQgb25seSBiZSBwYWdlcyBvbiB0aGUgbm9uX2h2b19mb2xpb3MgbGlzdC5cXG4gXFx0ICogRG8gbm90ZSB0aGF0IHRoZSBub25faHZvX2ZvbGlvcyBsaXN0IGNvdWxkIGJlIGVtcHR5LlxcbiBcXHQgKiBXaXRob3V0IEhWTyBlbmFibGVkLCByZXQgd2lsbCBiZSAwIGFuZCB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGxcXG4tXFx0ICogX19mb2xpb19jbGVhcl9odWdldGxiIGFzIHRoaXMgd2FzIGRvbmUgcHJldmlvdXNseS5cXG4rXFx0ICogZm9saW9fY2xlYXJfaHVnZXRsYiBhcyB0aGlzIHdhcyBkb25lIHByZXZpb3VzbHkuXFxuIFxcdCAqL1xcbiBcXHRWTV9XQVJOX09OKCFsaXN0X2VtcHR5KGZvbGlvX2xpc3QpKTtcXG4gXFx0Vk1fV0FSTl9PTihyZXQgXFx1MDAzYyAwKTtcXG4gXFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZub25faHZvX2ZvbGlvcykgXFx1MDAyNlxcdTAwMjYgcmV0KSB7XFxuIFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuIFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZm9saW8sIFxcdTAwMjZub25faHZvX2ZvbGlvcywgbHJ1KVxcbi1cXHRcXHRcXHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbitcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcXG4gXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzoyODowNy4yODY1ODc3MzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMTkxMTYzNTU3OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZyZWVfaHVnZV9mb2xpb1wiLFxuICAgIFwiZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJkZW1vdGVfcG9vbF9odWdlX3BhZ2VcIixcbiAgICBcIl9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIHRoYXQgd3JhcHMgYF9fZm9saW9fY2xlYXJfaHVnZXRsYmAgYW5kIGFkZHMgbG9naWMgdG8gbW92ZSB0aGUgSFdQb2lzb24gZmxhZyB0byBlYWNoIGVycm9yIHBhZ2UgaWYgdGhlIGZvbGlvIGhhcyBod3BvaXNvbmVkIHBhZ2VzLiBJdCByZXBsYWNlcyBjYWxscyB0byBgX19mb2xpb19jbGVhcl9odWdldGxiYCB3aXRoIGBmb2xpb19jbGVhcl9odWdldGxiYCBpbiBzZXZlcmFsIHBsYWNlcywgY2hhbmdpbmcgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgYW5kIGVuc3VyaW5nIHRoZSBIV1BvaXNvbiBmbGFnIGlzIHByb3Blcmx5IGhhbmRsZWQgd2hlbiBhIEh1Z2VUTEIgZm9saW8gaXMgcmVtb3ZlZCBvciBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKEh1Z2VUTEIgYW5kIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nKSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBIdWdlVExCIGFsbG9jYXRpb24vZnJlZWluZyBhbmQgbWVtb3J5IGZhaWx1cmUgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMWU1YTY3M2RmMDc2NjU3NjEzMzU0YTFkZmNjZGNkYmRmZDE2NDU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMjM6Mjg6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWUuLjI3ZWUyZGZhYWZhNjMgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTEzODEsNiArMTM4MSwxOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywgaW50XG4gfVxuICNlbmRpZlxuIFxuK3N0YXRpYyB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHQvKlxuK1x0ICogTW92ZSBIV1BvaXNvbiBmbGFnIHRvIGVhY2ggZXJyb3IgcGFnZVxuK1x0ICogd2hpY2ggbWFrZXMgYW55IGhlYWx0aHkgcGFnZXMgcmV1c2FibGUuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpXG4rXHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oZm9saW8pO1xuK1xuK1x0X19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbit9XG4rXG4gLypcbiAgKiBSZW1vdmUgaHVnZXRsYiBmb2xpbyBmcm9tIGxpc3RzLlxuICAqIElmIHZtZW1tYXAgZXhpc3RzIGZvciB0aGUgZm9saW8sIGNsZWFyIHRoZSBodWdldGxiIGZsYWcgc28gdGhhdCB0aGVcbkBAIC0xNDE5LDcgKzE0MzEsNyBAQCB2b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHQgKiB0byB0YWlsIHN0cnVjdCBwYWdlcy5cbiBcdCAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pKVxuLVx0XHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuK1x0XHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbiBcbiBcdGgtXHUwMDNlbnJfaHVnZV9wYWdlcy0tO1xuIFx0aC1cdTAwM2Vucl9odWdlX3BhZ2VzX25vZGVbbmlkXS0tO1xuQEAgLTE0OTMsMTcgKzE1MDUsMTAgQEAgc3RhdGljIHZvaWQgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuIFx0ICovXG4gXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4tXHRcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4rXHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuIFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdH1cbiBcbi1cdC8qXG4tXHQgKiBNb3ZlIFBhZ2VIV1BvaXNvbiBmbGFnIGZyb20gaGVhZCBwYWdlIHRvIHRoZSByYXcgZXJyb3IgcGFnZXMsXG4tXHQgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBzdWJwYWdlcyByZXVzYWJsZS5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSlcbi1cdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XG4tXG4gXHRWTV9CVUdfT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pO1xuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9jbWEoZm9saW8pKVxuIFx0XHRodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhmb2xpbyk7XG5AQCAtMTU5NSw3ICsxNjAwLDcgQEAgc3RhdGljIHZvaWQgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCB0X2ZvbGlvLCBub25faHZvX2ZvbGlvcywgbHJ1KSB7XG4gXHRcdFx0bGlzdF9kZWwoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1KTtcbiBcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4tXHRcdFx0X19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbitcdFx0XHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbiBcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdFx0XHR1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpO1xuIFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuQEAgLTE2MjAsNyArMTYyNSw3IEBAIHN0YXRpYyB2b2lkIGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdGxpc3RfZGVsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSk7XG4gXHRcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4tXHRcdFx0XHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuK1x0XHRcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4gXHRcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdFx0XHRcdHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XG4gXHRcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbkBAIC0xNjUzLDE0ICsxNjU4LDE0IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHQgKiBzaG91bGQgb25seSBiZSBwYWdlcyBvbiB0aGUgbm9uX2h2b19mb2xpb3MgbGlzdC5cbiBcdCAqIERvIG5vdGUgdGhhdCB0aGUgbm9uX2h2b19mb2xpb3MgbGlzdCBjb3VsZCBiZSBlbXB0eS5cbiBcdCAqIFdpdGhvdXQgSFZPIGVuYWJsZWQsIHJldCB3aWxsIGJlIDAgYW5kIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsbFxuLVx0ICogX19mb2xpb19jbGVhcl9odWdldGxiIGFzIHRoaXMgd2FzIGRvbmUgcHJldmlvdXNseS5cbitcdCAqIGZvbGlvX2NsZWFyX2h1Z2V0bGIgYXMgdGhpcyB3YXMgZG9uZSBwcmV2aW91c2x5LlxuIFx0ICovXG4gXHRWTV9XQVJOX09OKCFsaXN0X2VtcHR5KGZvbGlvX2xpc3QpKTtcbiBcdFZNX1dBUk5fT04ocmV0IFx1MDAzYyAwKTtcbiBcdGlmICghbGlzdF9lbXB0eShcdTAwMjZub25faHZvX2ZvbGlvcykgXHUwMDI2XHUwMDI2IHJldCkge1xuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZm9saW8sIFx1MDAyNm5vbl9odm9fZm9saW9zLCBscnUpXG4tXHRcdFx0X19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbitcdFx0XHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbiBcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzoyODowNy4yODY1OTAzMjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTk5NzcxMzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZXRsYiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9odWdldGxiLmNgLiBJdCdzIGludHJvZHVjaW5nIGBmb2xpb19jbGVhcl9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoZSBsb2dpYyBmbG93IGlzIHN0cmFpZ2h0Zm9yd2FyZDogaWYgYSBmb2xpbyBpcyBoYXJkd2FyZSBwb2lzb25lZCAoYXMgaW5kaWNhdGVkIGJ5IGBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKWApLCBpdCBjYWxscyBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbylgIGFuZCB0aGVuIHVuY29uZGl0aW9uYWxseSBjYWxscyBgX19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKWAuIFNlZW1zIGxpa2UgYSBzZW5zaWJsZSBhcHByb2FjaCBmb3IgY2xlYW5pbmcgdXAgaHVnZSBwYWdlIGVudHJpZXMuXG5cbldoYXQncyBpbW1lZGlhdGVseSBjYXRjaGluZyBteSBleWUgaXMgdGhhdCB0aGlzIHBhdGNoIGlzICpyZXBsYWNpbmcqIHNldmVyYWwgaW5zdGFuY2VzIG9mIGBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pYCB3aXRoIHRoZSBuZXcgYGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pYCBmdW5jdGlvbi4gVGhpcyBzdWdnZXN0cyBhIHNoaWZ0IGluIGhvdyB3ZSBoYW5kbGUgcG90ZW50aWFsbHkgcG9pc29uZWQgcGFnZXMgZHVyaW5nIHRoZSBjbGVhbnVwIHByb2Nlc3MuIEFsc28sIGl0IGFwcGVhcnMgYSBibG9jayBvZiBjb2RlIHJlbGF0ZWQgdG8gaGFuZGxpbmcgdGhlIGBQYWdlSFdQb2lzb25gIGZsYWcgaW4gYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIGhhcyBiZWVuIHJlbW92ZWQuIFNwZWNpZmljYWxseSwgaXQncyBkaXRjaGluZyB0aGUgbWFudWFsIG1vdmUgb2YgYFBhZ2VIV1BvaXNvbmAgdG8gdGhlIFwicmF3IGVycm9yIHBhZ2VzXCIuXG5cbldhaXQgYSBzZWNvbmTigKYgSSBzZWUgdGhhdCB0aGUgbmV3IGNvZGUgdXNlcyBgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbylgIHdoZXJlIHRoZSBvbGQgY29kZSB1c2VkIGBmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBkaWZmZXJlbmNlIGFuZCBpbXBsaWNhdGlvbnMgaGVyZS4gVGhleSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBoYXJkd2FyZSBwb2lzb24gZmxhZyBpcyBzZXQgYW5kIGNsZWFyZWQuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbnMgb2YgdGhvc2UgbWFjcm9zLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoaXMgZnJvbSBhIHRlc3RpbmcgcGVyc3BlY3RpdmUuIFRoaXMgaXMgaHVnZXRsYiwgd2hpY2ggaXMgYSBjcml0aWNhbCBwYXJ0IG9mIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCdzIGEgaGlnaC12YWx1ZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBhIGZldyBrZXkgZnVuY3Rpb25zOiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AsIGBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcmAsIGFuZCBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGtgLiBUaGVzZSBhcmUgYWxsIHBhcnRzIG9mIHRoZSBjb2RlIGJhc2UgdGhhdCBhcmUgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyBhbmQgbWFuYWdpbmcgbWVtb3J5IHBhZ2VzLiBUaGF0J3MgZ29vZCBjb3ZlcmFnZSBmb3IgYSBmdXp6aW5nIGNhbXBhaWduLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBhY3R1YWxseSBkb2VzLiBJJ20gZ29pbmcgdG8gcnVuIGEgYGdyZXBwZXJgIHNlYXJjaCBmb3IgdGhhdCBmdW5jdGlvbiB0byBzZWUgd2hlcmUgaXQncyBkZWZpbmVkIGFuZCBob3cgaXQncyB1c2VkLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIHdpdGggdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjI4OjEzLjQ4NjM2NTU3MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA0NDA4OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9ODc3PWludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODgwLSNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo4ODE6ZXh0ZXJuIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04ODItI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo4ODM6c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04ODQte1xcbi0tXFxubW0vaHVnZXRsYi5jPTEzODQ9c3RhdGljIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jLTEzOTAtXFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSlcXG5tbS9odWdldGxiLmM6MTM5MTpcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMTM5Mi1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTkyOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5NDYtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxOTQ3OnZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTk0OC17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIwMjU9c3RhdGljIGludCB0cnlfbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDYyLVxcdGlmIChod3BvaXNvbl9maWx0ZXIocCkpIHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIwNjM6XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDY0LVxcdFxcdGlmIChtaWdyYXRhYmxlX2NsZWFyZWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjI4OjE1LjY5MDc4MDYyNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NTMzODI3NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZXRsYiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL2h1Z2V0bGIuY2AsIHdoaWNoIG1lYW5zIGl0J3MgZGVmaW5pdGVseSBpbiBhIGNyaXRpY2FsIGFyZWEuIEl0IGxvb2tzIGxpa2UgaXQncyByZWZpbmluZyBob3cgaHVnZSBwYWdlIGZhdWx0IGhhbmRsaW5nIHdvcmtzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5LiBUaGUgaW50cm9kdWN0aW9uIG9mIGBmb2xpb19jbGVhcl9odWdldGxiYCBpcyB0aGUga2V5LiBJdCB3cmFwcyB1cCB0aGUgbG9naWMsIGNhbGxpbmcgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIG9ubHkgd2hlbiBhIGZvbGlvIGlzIGFjdHVhbGx5IGZsYWdnZWQgYXMgYmVpbmcgaGFyZHdhcmUtcG9pc29uZWQuIFRoYXQncyBnb29kLCBpdCBzdWdnZXN0cyBhIG1vcmUgZWZmaWNpZW50IGFuZCB0YXJnZXRlZCBhcHByb2FjaC5cblxuVGhlIHJlcGxhY2VtZW50IG9mIGBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGJgIGNhbGxzIHdpdGggYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIGlzIGEgY2xlYW4tdXAsIGNvbnNvbGlkYXRpbmcgdGhlIGxvZ2ljIHVuZGVyIGEgc2luZ2xlIGZ1bmN0aW9uLiBBbmQgdGhlbiwgdGhlIHJlbW92YWwgb2YgdGhlIHNwZWNpZmljIGNhbGwgdG8gYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGZyb20gYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gLi4ucmlnaHQsIGJlY2F1c2UgYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIG5vdyBoYW5kbGVzIHRoYXQgY29uZGl0aW9uYWwgY2hlY2suIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgbGVzcyBkdXBsaWNhdGlvbiwgaW1wcm92ZWQgbWFpbnRhaW5hYmlsaXR5LlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgc2VlbXMgc291bmQuIEl0J3MgYSBmb2N1c2VkIHJlZmFjdG9yaW5nIHRoYXQgc2hvdWxkIGltcHJvdmUgcGVyZm9ybWFuY2UgYW5kIGNsYXJpdHkgd2l0aGluIHRoZSBodWdldGxiIHN1YnN5c3RlbS4gTm93LCB0aGUgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGZ1bmN0aW9uLCBhcyBleHBlY3RlZCwgaXMgZ2F0ZWQgYnkgYENPTkZJR19NRU1PUllfRkFJTFVSRWAuIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMgYWxzbyBlbmFibGVkLCBhcyBleHBlY3RlZCwgYmVjYXVzZSBvZiB0aGUgZnVuY3Rpb25hbGl0eSBpbiB0aGUgZmlsZSBiZWluZyBtb2RpZmllZC4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTA0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjI4OjMxLjIyNDYxMDA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDM5MjI1NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJfUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3NoL21tL0tjb25maWc9MTU4PWNob2ljZVxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2My1cXG5hcmNoL3NoL21tL0tjb25maWc6MTY0OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcXG5hcmNoL3NoL21tL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIjY0a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTY3LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjg6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcXG5hcmNoL3NoL21tL0tjb25maWctMTY5LVxcdGJvb2wgXFxcIjI1NmtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3MS1cXG5hcmNoL3NoL21tL0tjb25maWc6MTcyOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcXG5hcmNoL3NoL21tL0tjb25maWctMTczLVxcdGJvb2wgXFxcIjFNQlxcXCJcXG5hcmNoL3NoL21tL0tjb25maWctMTc0LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzYtXFx0Ym9vbCBcXFwiNE1CXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3OC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTc5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE4MC1cXHRib29sIFxcXCI2NE1CXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG5mcy9LY29uZmlnLTI2NC1cXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI3Mi1cXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZy0yNzQtXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI3Ni1cXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG5mcy9LY29uZmlnLTI3OC1cXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG4tLVxcbm1tL0tjb25maWc9NzA2PWNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTcwOC1cXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG5tbS9LY29uZmlnLTcxMC1cXHRkZWZfYm9vbCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjI4OjMzLjYyODUzNzcwMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTkxMTAzMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6NTA1MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6Mjg6NDMuODE5NjQzNjRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwMjg2MDkxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0ZBSUxVUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03NzQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzc2LVxcbm1tL0tjb25maWc6Nzc3OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWctNzc4LVxcdGRlcGVuZHMgb24gTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjI4OjQ1LjkyMjUwOTAwOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1OTQ0MzY5MTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBtbS9odWdldGxiLmNgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGludHJvZHVjaW5nIGBmb2xpb19jbGVhcl9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pYCwgYSBuZXcgZnVuY3Rpb24gdGhhdCB3cmFwcyBgX19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKWAuIFRoZSBrZXkgY2hhbmdlIGhlcmUgaXMgbW92aW5nIHRoZSBjYWxsIHRvIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKWAgKmluc2lkZSogdGhpcyBuZXcgd3JhcHBlciwgcmlnaHQgYmVmb3JlIHRoZSBjb3JlIGNsZWFyIG9wZXJhdGlvbi4gUHJldmlvdXNseSwgdGhlIEhXUG9pc29uIGNsZWFyaW5nIGhhcHBlbmVkICphZnRlciogdGhlIG1haW4gY2xlYXIgYW5kIGFueSBDTUEgZnJlZWluZyBpbiBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbygpYC4gU28sIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGNvbmNlcm5pbmcgaGFyZHdhcmUgcG9pc29uaW5nIGlzIGFsdGVyZWQuXG5cbkdpdmVuIHRoaXMgcmVvcmRlcmluZywgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLCB3aGljaCBpcyBwcm9iYWJseSB0aGUgaW50ZW50LiBUaGUgZmFjdCB0aGF0IHRoZSBjYWxsIGlzICpub3cqIHVzZWQgaW4gYHJlbW92ZV9odWdldGxiX2ZvbGlvKClgLCBgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3IoKWAsIGFuZCBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGsoKWAgbWFrZXMgaXQgYSBiaXQgbW9yZSB3aWRlbHkgdXNlZCB0aGFuIGJlZm9yZS4gVGhhdCBhZGRzIHRvIHRoZSByaXNrLlxuXG5UaGlzIGZlZWxzIHJlYWNoYWJsZTsgaHVnZXRsYiBpcyBkZWZpbml0ZWx5IGEgcmVsZXZhbnQgc3Vic3lzdGVtLiBHaXZlbiB0aGF0IHdlIGFyZSBjaGFuZ2luZyB0aGUgb3JkZXIgb2YgSFdQb2lzb24gZmxhZ3MgYXJlIGNsZWFyZWQsIHRoaXMgaXMgcHJvYmFibHkgd29ydGggYSBmdXp6aW5nIGNhbXBhaWduLiBJJ20gdGhpbmtpbmcgdGhlIGNoYW5nZSBpbiBvcmRlcmluZyBhbmQgdGhlIGJyb2FkZXIgcmVhY2ggb2YgdGhlIG5ldyBgZm9saW9fY2xlYXJfaHVnZXRsYmAgZnVuY3Rpb24gbWFrZSBpdCBhIGhpZ2gtdmFsdWUgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5UbyBmb2N1cyBteSBlZmZvcnRzLCB0aGUgbGlrZWx5IHNwb3RzIHdoZXJlIGlzc3VlcyB3b3VsZCBhcmlzZSBpbmNsdWRlOiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLCBgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3JgLCBhbmQgYHVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrYC4gSSdsbCBhbHNvIGJlIGZvY3VzaW5nIG9uIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCBzaW5jZSB0aGF0IGlzIHdoZXJlIHRoZSBvcmlnaW5hbCBjb2RlIGNoYW5nZSB0b29rIHBsYWNlLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGByZW1vdmVfaHVnZXRsYl9mb2xpb2AuIEl0J3MgbGlrZWx5IHRoYXQgYSBjaGFuZ2UgdG8gdGhpcyBhcmVhIHdvdWxkIGFmZmVjdCBob3cgaGFyZHdhcmUgcG9pc29uaW5nIGlzIGhhbmRsZWQuXG5cblRoZSBjb25maWdzIHRvIGhhdmUgZW5hYmxlZCBhcmUgSFVHRVRMQkZTIGFuZCBNRU1PUllfRkFJTFVSRSwgd2hpY2ggc2VlbXMgb2J2aW91cy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AgYW5kIGB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsa2AgaW5zaWRlIGBtbS9odWdldGxiLmNgIHRvIHNlZSB0aGUgZXhhY3QgY29kZS4gSSdsbCBhbHNvIGNoZWNrIGlmIGByZW1vdmVfaHVnZXRsYl9mb2xpb2AgaXMgZXhwb3J0ZWQgb3IgZ2xvYmFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTQzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjI5OjAxLjg2Njg4MTI1MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5NDkwNjYzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xMzg0PXN0YXRpYyB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNDAzLSAqL1xcbm1tL2h1Z2V0bGIuYzoxNDA0OnZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9odWdldGxiLmMtMTQwNS1cXHRcXHRcXHQgIGJvb2wgYWRqdXN0X3N1cnBsdXMpXFxuLS1cXG5tbS9odWdldGxiX2ludGVybmFsLmg9NzE9c3RhdGljIGlubGluZSBpbnQgaHN0YXRlX25leHRfbm9kZV90b19mcmVlKHN0cnVjdCBoc3RhdGUgKmgsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQpXFxuLS1cXG5tbS9odWdldGxiX2ludGVybmFsLmgtOTQtXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oOjk1OmV4dGVybiB2b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTk2LVxcdFxcdFxcdFxcdCBib29sIGFkanVzdF9zdXJwbHVzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6Mjk6MDQuMTYxNzk1MzA2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjYwMzg5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZ1bmN0aW9uIFZpc2liaWxpdHkgYW5kIENhbGxlciBSZWxhdGlvbnNoaXBzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLCBgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3JgLCBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGtgLCBhbmQgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gLiBIbW0sIGByZW1vdmVfaHVnZXRsYl9mb2xpb2AgaXMgZ2xvYmFsLCB3aGljaCBpcyBmaW5lLCBidXQgdGhlIG90aGVyIHRocmVlLCBgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3JgLCBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGtgLCBhbmQgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIGFyZSBkZWNsYXJlZCBhcyBlaXRoZXIgc3RhdGljLlxuXG5Ob3csIHdhaXQgYSBtaW51dGUsIHRoZSBwcm9tcHQgaW4gZnJvbnQgb2YgbWUgZXhwbGljaXRseSBzdGF0ZXMgYSBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVycy4gVGhhdCdzIGEga2V5IGd1aWRlbGluZSB3ZSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gV2UgbWlnaHQgbmVlZCB0byBjb25zaWRlciByZWZhY3RvcmluZyBoZXJlLlxuXG5UaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBpZGVudGlmeSB0aGUgY2FsbGVycyBvZiB0aG9zZSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGJlaW5nIHVzZWQuIEFyZSB0aGV5IHRydWx5IGludGVybmFsLCBvciBhcmUgd2UgcG90ZW50aWFsbHkgZXhwb3NpbmcgYW4gQVBJIGltcGxpY2l0bHkgdGhyb3VnaCB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBzaG91bGQgcGVyaGFwcyBiZSBleHBvc2VkIGluIGEgbW9yZSBleHBsaWNpdCwgbm9uLXN0YXRpYyBtYW5uZXI/IEZpbmRpbmcgb3V0IHRoZSBjYWxsIHNpdGVzIGlzIGtleSBiZWZvcmUgZGVjaWRpbmcgb24gdGhlIG5leHQgc3RlcHMuIEknbGwgbmVlZCB0byB0cmFjZSBlYWNoIG9mIHRoZXNlIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlaXIgaW1wYWN0IGFuZCBpZiB0aGV5J3JlIGFjdGluZyBhcyBhIGRlLWZhY3RvIEFQSSB0aGF0IHdlIHNob3VsZCByZXZpc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MDksIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6Mjk6MDcuOTI3ODM2NDU3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzA0MTU2NTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xNTY3PXN0YXRpYyB2b2lkIHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9odWdldGxiLmMtMTU4NS1cXG5tbS9odWdldGxiLmM6MTU4NjpzdGF0aWMgdm9pZCBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLFxcbm1tL2h1Z2V0bGIuYy0xNTg3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS9odWdldGxiLmM9MTYzNz1zdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE2NTEtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG5tbS9odWdldGxiLmM6MTY1MjpcXHRcXHRidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcihoLCBmb2xpb19saXN0LCBcXHUwMDI2bm9uX2h2b19mb2xpb3MpO1xcbm1tL2h1Z2V0bGIuYy0xNjUzLVxcdFxcdGdvdG8gcmV0cnk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjI5OjEwLjYzMTk5NzA0M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDIzNzI3NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGVidWdnaW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgSXNzdWUqKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gSSd2ZSBnb3QgYHVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrYCBoaWdobGlnaHRlZCwgYW5kIEkgc2VlIGl0J3MgY2FsbGluZyBgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3JgLiAgTXkgZmlyc3QgcXVlc3Rpb24gYWx3YXlzIGhhcyB0byBiZSwgd2hhdCdzIHVwc3RyZWFtPyBXaGVyZSBkb2VzIGB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsa2AgZXZlbiAqY29tZSogZnJvbT8gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhlIGNhbGwgc3RhY2sgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIHJlc3RvcmUgZXJyb3IuICBJcyB0aGlzIGEgc3BlY2lmaWMgZGV2aWNlIGRyaXZlciwgYSBnZW5lcmFsIG1lbW9yeSByZWNsYWltIHBhdGgsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXIgd2lsbCBpbW1lZGlhdGVseSBnaXZlIG1lIGNsdWVzIGFib3V0IHRoZSBwb3RlbnRpYWwgc291cmNlIG9mIHRoZSBwcm9ibGVtLiBBbSBJIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIGVycm9yIGNvbmRpdGlvbiBpbiBhIHBhcnRpY3VsYXIgc3Vic3lzdGVtLCBvciBhIG1vcmUgZ2VuZXJhbCBpc3N1ZSBpbiBtZW1vcnkgbWFuYWdlbWVudD8gVGltZSB0byBmaXJlIHVwIHRoZSBkZWJ1Z2dlciBhbmQgdHJhY2UgdGhvc2UgY2FsbCBwYXRocy4gSSBuZWVkIHRvIGtub3cgdGhlIHdoeSBiZWZvcmUgSSBjYW4gZXZlbiB0aGluayBhYm91dCB0aGUgaG93IHRvIGZpeCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTk4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6Mjk6MTcuNjU1NzI4MjE4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYxMDAxMzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xNTg2PXN0YXRpYyB2b2lkIGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMTYzNi1cXG5tbS9odWdldGxiLmM6MTYzNzpzdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLFxcbm1tL2h1Z2V0bGIuYy0xNjM4LVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXFxuLS1cXG5tbS9odWdldGxiLmM9MjM1NT1zdGF0aWMgdm9pZCByZXR1cm5fdW51c2VkX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMzkzLVxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG5tbS9odWdldGxiLmM6MjM5NDpcXHR1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhoLCBcXHUwMDI2cGFnZV9saXN0KTtcXG5tbS9odWdldGxiLmMtMjM5NS1cXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbi0tXFxubW0vaHVnZXRsYi5jPTM2NjM9c3RhdGljIHZvaWQgdHJ5X3RvX2ZyZWVfbG93KHN0cnVjdCBoc3RhdGUgKmgsIHVuc2lnbmVkIGxvbmcgY291bnQsXFxuLS1cXG5tbS9odWdldGxiLmMtMzY5MC1cXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxubW0vaHVnZXRsYi5jOjM2OTE6XFx0dXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGsoaCwgXFx1MDAyNnBhZ2VfbGlzdCk7XFxubW0vaHVnZXRsYi5jLTM2OTItXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zNzM1PXN0YXRpYyBpbnQgc2V0X21heF9odWdlX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIHVuc2lnbmVkIGxvbmcgY291bnQsIGludCBuaWQsXFxuLS1cXG5tbS9odWdldGxiLmMtMzkwNS1cXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxubW0vaHVnZXRsYi5jOjM5MDY6XFx0dXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGsoaCwgXFx1MDAyNnBhZ2VfbGlzdCk7XFxubW0vaHVnZXRsYi5jLTM5MDctXFx0Zmx1c2hfZnJlZV9ocGFnZV93b3JrKGgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzoyOToxOS44MTY3MzQxMjNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzMzY5MjU5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOlxuXG4qKkFuYWx5emluZyBIdWdlIFBhZ2UgTWFuYWdlbWVudCBpbiB0aGUgS2VybmVsKipcblxuUmlnaHQsIGxldCdzIHNlZS4gYHNldF9tYXhfaHVnZV9wYWdlc2AuLi4geWVzLCB0aGF0J3MgYSBzZW5zaWJsZSBlbnRyeSBwb2ludC4gVGhhdCdzIHdoZXJlIEknZCBzdGFydCBkaWdnaW5nIGludG8gdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBhbmQgcGVyaGFwcyBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGZvciBodWdlIHBhZ2UgbWFuYWdlbWVudCwgZmlndXJpbmcgb3V0IGhvdyB0aGUgc3lzdGVtJ3MgbWF4aW11bSBjYXBhY2l0eSBpcyBlc3RhYmxpc2hlZC4gSXQncyBhIGtleSBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBsaW1pdHMuXG5cbmB0cnlfdG9fZnJlZV9sb3dgLi4uIHRoYXQncyBzdGF0aWMsIGludGVyZXN0aW5nLiBTdGF0aWMgbWVhbnMgaXQncyBwcm9iYWJseSBvbmx5IHZpc2libGUgd2l0aGluIGEgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdCwgbWF5YmUgcGFydCBvZiBhIG1vcmUgZm9jdXNlZCBsb3ctbWVtb3J5IHJlY2xhaW0gc3RyYXRlZ3kuIEl0IHdvdWxkbid0IGJlIGRpcmVjdGx5IGV4cG9zZWQsIG1ha2luZyBtZSB3b25kZXIgYWJvdXQgaXRzIGludGVncmF0aW9uIHdpdGggdGhlIGxhcmdlciBtZW1vcnkgbWFuYWdlbWVudCBwaWN0dXJlIGFuZCBob3cgaXQgcmVhY3RzIHRvIHNwZWNpZmljIGxvdy1tZW1vcnkgY29uZGl0aW9ucy4gSXMgaXQgaW52b2x2ZWQgaW4gYSBwcmlvcml0eS1iYXNlZCByZWNsYWltIHByb2Nlc3M/XG5cbkFuZCB0aGVuIGByZXR1cm5fdW51c2VkX3N1cnBsdXNfcGFnZXNgIGlzIGFsc28gc3RhdGljLiBPa2F5LCBzbyB0aGlzIG11c3QgYmUgcmVsYXRlZCB0byByZXR1cm5pbmcgcGFnZXMgKmJhY2sqIHRvIHRoZSBzeXN0ZW0uIFdoZXJlIHdvdWxkIHRoaXMgZml0PyBJcyBpdCB0aWVkIHRvIGEgc3BlY2lmaWMgcHJvY2VzcyBvciBzdWJzeXN0ZW0sIGFuZCB3aGF0IHRyaWdnZXJzIHRoaXMgcGFnZSByZXR1cm4/IFRoaW5raW5nIGFsb3VkLCBJJ20gbm93IGN1cmlvdXMgYWJvdXQgd2hldGhlciB0aGVyZSBpcyBzb21lIHNvcnQgb2YgdW51c2VkIHBhZ2UgbW9uaXRvciBvciB0aW1lciBmdW5jdGlvbiBhdCBwbGF5LlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uLiBXaG8gKmNhbGxzKiBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2A/IFRoYXQncyB0aGUgY29yZS4gVGhlIGVudGlyZSBwb2ludC4gSXQncyB0aGUgYWN0aW9uLiBUaGF0J3MgdGhlIG1lYXQgb2YgdGhlIG1lbW9yeSByZWNsYW1hdGlvbiBwcm9jZXNzLiBJdCBpcyB3aGF0IGFjdHVhbGx5IGZyZWVzIHRoZSBwYWdlcy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlICphY3R1YWwqIHByb2Nlc3Mgb2YgcmVsZWFzaW5nIHVudXNlZCBodWdlIHBhZ2VzLiBUaGUgY2FsbCBzdGFjayB0aGF0IGxlYWRzIHRvIHRoYXQgZnVuY3Rpb24gaXMgd2hhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGxvZ2ljIG9mIGh1Z2UgcGFnZSBkZWFsbG9jYXRpb24gcmVzaWRlcy4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNjQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzoyOToyMy45NTA0Mjk5MzRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTczMTYwMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MTQ0MD12b2lkIGFkZF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9odWdldGxiLmMtMTQ2OS1cXG5tbS9odWdldGxiLmM6MTQ3MDpzdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxubW0vaHVnZXRsYi5jLTE0NzEtXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xNTMyPXN0YXRpYyB2b2lkIGZyZWVfaHBhZ2Vfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNTUzLVxcbm1tL2h1Z2V0bGIuYzoxNTU0OlxcdFxcdF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0xNTU1LVxcbi0tXFxubW0vaHVnZXRsYi5jPTE1Njc9c3RhdGljIHZvaWQgdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNTcwLVxcdGlmICghZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKSB8fCAhYXRvbWljKSB7XFxubW0vaHVnZXRsYi5jOjE1NzE6XFx0XFx0X191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTE1NzItXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzoyOToyNi4xMDc3NTE0NzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQwNzIwNDQ1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgYSBIdWdlVExCIE1lbW9yeSBQb2lzb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1ha2luZyBhIHByZXR0eSBmb2N1c2VkIGNoYW5nZTogaXQncyBhYm91dCBoYW5kbGluZyBoYXJkd2FyZS1wb2lzb25lZCAoSFdQb2lzb24pIEh1Z2VUTEIgcGFnZXMsIHNwZWNpZmljYWxseSBtb3ZpbmcgdGhlIEhXUG9pc29uIGZsYWcgdG8gZWFjaCBlcnJvciBwYWdlIHRvIGFsbG93IHJldXNlIG9mIGhlYWx0aHkgcGFnZXMuIFRoZSBwcmltYXJ5IGZ1bmN0aW9uIGludHJvZHVjZWQgaGVyZSBpcyBgZm9saW9fY2xlYXJfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKWAsIHdoaWNoIGlzIHJlcGxhY2luZyB0aGUgb2xkZXIgYF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbylgIGluIGEgZmV3IGtleSBsb2NhdGlvbnM6IGByZW1vdmVfaHVnZXRsYl9mb2xpb2AsIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCwgYGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yYCwgYW5kIGB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsa2AuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiBob3cgdGhlIEhXUG9pc29uIGZsYWcgaXMgaGFuZGxlZC4gT3JpZ2luYWxseSwgdGhlIGNvZGUgaW4gYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIGhhZCBhIGRpc3RpbmN0IHNlY3Rpb24gZm9yIG1vdmluZyB0aGUgYFBhZ2VIV1BvaXNvbmAgZmxhZyAqYWZ0ZXIqIGNhbGxpbmcgYF9fZm9saW9fY2xlYXJfaHVnZXRsYmAuICBUaGUgcGF0Y2ggZXNzZW50aWFsbHkgY29uc29saWRhdGVzIHRoZXNlIHN0ZXBzIGJ5IG1vdmluZyB0aGUgSFdQb2lzb24gZmxhZyBjbGVhcmluZyBiZWZvcmUgY2FsbGluZyBgX19mb2xpb19jbGVhcl9odWdldGxiYC4gIFRoZSBuZXcgYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIGZ1bmN0aW9uIGl0c2VsZiBub3cgY2FsbHMgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGJlZm9yZSBgX19mb2xpb19jbGVhcl9odWdldGxiYCwgd2hpY2ggaXMgdGhlIGtleSBtb2RpZmljYXRpb24uXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpbXBhY3RzIG1lbW9yeSBmYWlsdXJlIHNjZW5hcmlvcyB3aXRoIEh1Z2VUTEIgcGFnZXMuICBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlOyBIdWdlVExCIGFsbG9jYXRpb24vZnJlZWluZywgY291cGxlZCB3aXRoIGluamVjdGVkIG1lbW9yeSBmYWlsdXJlcywgYXJlIHRoZSB0cmlnZ2VyLiAgQW5kIHllcywgdGhpcyBpcyBkZWZpbml0ZWx5IGZ1enphYmxlIHdpdGggc3l6a2FsbGVyLCB3aGljaCBjYW4gaW5qZWN0IEhXUG9pc29uIGZhaWx1cmVzIChlLmcuLCB2aWEgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgKSBhbmQgbWFuaXB1bGF0ZSBodWdlIHBhZ2VzLlxuXG5Mb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9ucywgd2UnbGwgbmVlZCBgSFVHRVRMQkZTYCAob3IsIGBIVUdFVExCX1BBR0VgKSBmb3IgSHVnZVRMQiBzdXBwb3J0LCBhbmQgZGVmaW5pdGVseSBgTUVNT1JZX0ZBSUxVUkVgIGJlY2F1c2UgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGlzIGNvbmRpdGlvbmFsIG9uIGl0LiAgSXQgbG9va3MgbGlrZSBgTUVNT1JZX0ZBSUxVUkVgIGFsc28gZGVwZW5kcyBvbiBgTU1VYC4gIGBIV1BPSVNPTl9JTkpFQ1RgIG1pZ2h0IGJlIHVzZWZ1bCBmb3IgZnV6emluZyBIV1BvaXNvbiBzcGVjaWZpY2FsbHksIHNpbmNlIHN5emthbGxlciB1c2VzIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCwgd2hpY2ggYWxzbyByZWxpZXMgb24gYENPTkZJR19NRU1PUllfRkFJTFVSRWAuXG5cbkZvY3VzaW5nIG9uIHRoZSBleHBvc2VkIHN5bWJvbHMsIGl0IHNlZW1zIGxpa2Ugd2UgY2FuIHRhcmdldCBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLCBgc2V0X21heF9odWdlX3BhZ2VzYCwgYHJldHVybl91bnVzZWRfc3VycGx1c19wYWdlc2AsIGFuZCBgdHJ5X3RvX2ZyZWVfbG93YC4gIGB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsa2AgYW5kIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCBhcmUgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggd2UgY2FuJ3QgZGlyZWN0bHkgdGFyZ2V0LCBidXQgdGhlaXIgY2FsbGVycyBhcmUgaW1wb3J0YW50LlxuXG5gcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGlzIGFjdHVhbGx5IGNhbGxlZCBmcm9tIG1hbnkgcGxhY2VzOiBgZnJlZV9odWdlX2ZvbGlvYCwgYGFsbG9jX2J1ZGR5X2h1Z2VfcGFnZWAsIGBhbGxvY19wb29sX2h1Z2VfcGFnZWAsIGBhbGxvY19zdXJwbHVzX2h1Z2VfcGFnZWAsIGBhbGxvY19taWdyYXRlX2h1Z2VfcGFnZWAsIGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZV9wYWdlYCwgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AsIGFuZCBgaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX3BhZ2VgLiAgU28sIHRoYXQncyBhIGdvb2QgZW50cnkgcG9pbnQuXG5cbmBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBpcyBkZWZpbmVkIHdpdGhpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIGFuZCBzbyBpdCBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgc2V0LiAgU28gd2UgYWJzb2x1dGVseSBuZWVkIGBNRU1PUllfRkFJTFVSRWAuXG5cbkxldCdzIGRvdWJsZS1jaGVjayBhZ2FpbiB0aGF0IGBIVUdFVExCRlNgIGlzIHRoZSBjb3JyZWN0IGNvbmZpZy4gIGBIVUdFVExCX1BBR0VgIGRlcGVuZHMgb24gYEhVR0VUTEJGU2AsIHNvIGBIVUdFVExCRlNgIHdpbGwgZG8uXG5cblNpbmNlIHdlIGFyZSBsb29raW5nIGZvciBub24tc3RhdGljIGVudHJ5IHBvaW50cywgbGV0J3MgZXhwbG9yZSB0aG9zZTogYGh1Z2V0bGJfc3lzY3RsX2hhbmRsZXJgLCBgbnJfaHVnZXBhZ2VzX3N0b3JlYCwgYG5yX2h1Z2VwYWdlc19zdG9yZV9jb21tb25gLCBgaHVnZXRsYl9vdmVyY29tbWl0X2hhbmRsZXJgLCBhbmQgYG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3N0b3JlYC5cblxuSW4gcHJhY3RpY2UsIHdlIHdpbGwgdXNlIGByZW1vdmVfaHVnZXRsYl9mb2xpb2AgYW5kIGBmcmVlX2h1Z2VfZm9saW9gLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTU0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzoyOTo1MC4xNzk3OTkwMjZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDAxMTA5MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVtb3ZlX2h1Z2V0bGJfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTEzODQ9c3RhdGljIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE0MDMtICovXFxubW0vaHVnZXRsYi5jOjE0MDQ6dm9pZCByZW1vdmVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL2h1Z2V0bGIuYy0xNDA1LVxcdFxcdFxcdCAgYm9vbCBhZGp1c3Rfc3VycGx1cylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xNTMyPXN0YXRpYyB2b2lkIGZyZWVfaHBhZ2Vfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNTQ4LVxcdFxcdCAqIGZvbGlvX2hzdGF0ZSgpIGlzIGdvaW5nIHRvIHRyaWdnZXIgYmVjYXVzZSBhIHByZXZpb3VzIGNhbGwgdG9cXG5tbS9odWdldGxiLmM6MTU0OTpcXHRcXHQgKiByZW1vdmVfaHVnZXRsYl9mb2xpbygpIHdpbGwgY2xlYXIgdGhlIGh1Z2V0bGIgYml0LCBzbyBkb1xcbm1tL2h1Z2V0bGIuYy0xNTUwLVxcdFxcdCAqIG5vdCB1c2UgZm9saW9faHN0YXRlKCkgZGlyZWN0bHkuXFxuLS1cXG5tbS9odWdldGxiLmM9MTY4OT12b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE3NDEtXFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl90ZW1wb3JhcnkoZm9saW8pKSB7XFxubW0vaHVnZXRsYi5jOjE3NDI6XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtMTc0My1cXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNzQ2LVxcdFxcdC8qIHJlbW92ZSB0aGUgcGFnZSBmcm9tIGFjdGl2ZSBsaXN0ICovXFxubW0vaHVnZXRsYi5jOjE3NDc6XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIHRydWUpO1xcbm1tL2h1Z2V0bGIuYy0xNzQ4LVxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmh1Z2V0bGJfbG9jaywgZmxhZ3MpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTE5Mjg9c3RhdGljIHN0cnVjdCBmb2xpbyAqcmVtb3ZlX3Bvb2xfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE5NDMtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZm9saW8sIGxydSk7XFxubW0vaHVnZXRsYi5jOjE5NDQ6XFx0XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGFjY3Rfc3VycGx1cyk7XFxubW0vaHVnZXRsYi5jLTE5NDUtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9odWdldGxiLmM9MTk2Nj1pbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmMtMjAwOC1cXHRcXHRcXHRhZGp1c3Rfc3VycGx1cyA9IHRydWU7XFxubW0vaHVnZXRsYi5jOjIwMDk6XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGFkanVzdF9zdXJwbHVzKTtcXG5tbS9odWdldGxiLmMtMjAxMC1cXHRcXHRoLVxcdTAwM2VtYXhfaHVnZV9wYWdlcy0tO1xcbi0tXFxubW0vaHVnZXRsYi5jLTIwMjEtXFx0XFx0ICogVGhlIGZvbGlvX3Rlc3RfaHVnZXRsYiBjaGVjayBoZXJlIGlzIGJlY2F1c2VcXG5tbS9odWdldGxiLmM6MjAyMjpcXHRcXHQgKiByZW1vdmVfaHVnZXRsYl9mb2xpbyB3aWxsIGNsZWFyIGh1Z2V0bGIgZm9saW8gZmxhZyBmb3JcXG5tbS9odWdldGxiLmMtMjAyMy1cXHRcXHQgKiBub24tdm1lbW1hcCBvcHRpbWl6ZWQgaHVnZXRsYiBmb2xpb3MuXFxuLS1cXG5tbS9odWdldGxiLmM9MjY0Nj1zdGF0aWMgaW50IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI3MDUtXFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjI3MDY6XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgb2xkX2ZvbGlvLCBmYWxzZSk7XFxubW0vaHVnZXRsYi5jLTI3MDctXFxuLS1cXG5tbS9odWdldGxiLmM9MzY2Mz1zdGF0aWMgdm9pZCB0cnlfdG9fZnJlZV9sb3coc3RydWN0IGhzdGF0ZSAqaCwgdW5zaWduZWQgbG9uZyBjb3VudCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNjgzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2h1Z2V0bGIuYzozNjg0OlxcdFxcdFxcdHJlbW92ZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XFxubW0vaHVnZXRsYi5jLTM2ODUtXFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZwYWdlX2xpc3QpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTM5ODM9bG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLFxcbi0tXFxubW0vaHVnZXRsYi5jLTQwMDgtXFxubW0vaHVnZXRsYi5jOjQwMDk6XFx0XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3JjLCBmb2xpbywgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy00MDEwLVxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2bGlzdCk7XFxuLS1cXG5tbS9odWdldGxiX2ludGVybmFsLmg9NzE9c3RhdGljIGlubGluZSBpbnQgaHN0YXRlX25leHRfbm9kZV90b19mcmVlKHN0cnVjdCBoc3RhdGUgKmgsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQpXFxuLS1cXG5tbS9odWdldGxiX2ludGVybmFsLmgtOTQtXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oOjk1OmV4dGVybiB2b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTk2LVxcdFxcdFxcdFxcdCBib29sIGFkanVzdF9zdXJwbHVzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6Mjk6NTIuNjE5OTE0MzU5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyMDc2MTI5NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZVRMQiBIV1BvaXNvbiBSZWZhY3RvcmluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBhIHJlZmFjdG9yaW5nLCBwb3NzaWJseSBhIGJ1ZyBmaXgsIHJlbGF0ZWQgdG8gaG93IEhXUG9pc29uIGludGVyYWN0cyB3aXRoIEh1Z2VUTEIgcGFnZXMuIFRoZSBwYXRjaCBtb2RpZmllcyBgbW0vaHVnZXRsYi5jYCwgd2hpY2ggaXMgdGhlIGV4cGVjdGVkIGxvY2F0aW9uIGZvciB0aGlzIHR5cGUgb2YgY2hhbmdlLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYGZvbGlvX2NsZWFyX2h1Z2V0bGJgLCB3aGljaCBhY3RzIGFzIGEgY2VudHJhbCBwb2ludCBmb3IgaGFuZGxpbmcgdGhlIGNsZWFyaW5nIG9mIEh1Z2VUTEIgZm9saW9zLCBpbmNvcnBvcmF0aW5nIHRoZSBgaHdwb2lzb25gIGxvZ2ljLiBJdCBjb25kaXRpb25hbGx5IGNhbGxzIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBpZiB0aGUgZm9saW8gaXMgcG9pc29uZWQsIGFuZCB0aGVuIGFsd2F5cyBjYWxscyBgX19mb2xpb19jbGVhcl9odWdldGxiYC4gIFRoaXMgbG9va3MgbGlrZSB0aGV5J3JlIHRyeWluZyB0byBtb3ZlIHRoZSBIV1BvaXNvbiBmbGFnIGhhbmRsaW5nIHRvIGJlIG1vcmUgY29uc2lzdGVudCB3aXRoIHRoZSBjb3JlIGZyZWVpbmcgcHJvY2Vzcy5cblxuVGhlIG1haW4gY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSByZXBsYWNlbWVudCBvZiBkaXJlY3QgY2FsbHMgdG8gYF9fZm9saW9fY2xlYXJfaHVnZXRsYmAgd2l0aCBjYWxscyB0byB0aGlzIG5ldyBgZm9saW9fY2xlYXJfaHVnZXRsYmAgaW4gc2V2ZXJhbCBjcml0aWNhbCBmdW5jdGlvbnM6IGByZW1vdmVfaHVnZXRsYl9mb2xpb2AsIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCwgYGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yYCwgYW5kIGB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsa2AuICBUaGV5IGFsc28gcmVtb3ZlZCB0aGUgZGlyZWN0IGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBjYWxsIGZyb20gIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCBub3cgYmVjYXVzZSBpdCBpcyBoYW5kbGVkIGJ5IHRoZSBuZXcgd3JhcHBlciBmdW5jdGlvbi4gVGhpcyBjZW50cmFsaXphdGlvbiBpcyBnb29kLCBpdCBzaW1wbGlmaWVzIHRoZSBjb2RlLlxuXG5NeSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6IElzIHRoaXMgZnVuY3Rpb25hbGx5IHNvdW5kPyAgRnJvbSB3aGF0IEkgc2VlLCBpdCBsb29rcyBsaWtlIGl0IGlzLiBJdCBlbnN1cmVzIHRoZSBIV1BvaXNvbiBmbGFnIGlzIGhhbmRsZWQgY29uc2lzdGVudGx5IHdoZW5ldmVyIGEgaHVnZSBwYWdlIGlzIGJlaW5nIGNsZWFyZWQuIFNvIHRoZSBwb2lzb25lZCBmbGFnIGlzIG1vdmVkIGZyb20gdGhlIGhlYWQgZm9saW8gdG8gdGhlIHJhdyBlcnJvciBwYWdlKHMpLiBJdCBpcyBub3cgY2FsbGVkIGluIGByZW1vdmVfaHVnZXRsYl9mb2xpb2AsIGBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcmAsIGFuZCBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGtgICpvbmx5KiB3aGVuIHRoZSBmb2xpbyBpcyBhY3R1YWxseSBwb2lzb25lZCwgdmlhIGBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKWAuXG5cbkJ1dCwgd2FpdCBhIG1pbnV0ZS4uLiBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAgaXMgb25seSBkZWZpbmVkIGlmIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGVuYWJsZWQuIE9rYXksIEkgYmV0dGVyIHZlcmlmeSB0aGF0IHF1aWNrbHkuICBZZXAsIGNvbmZpcm1lZC4gSXQncyBhbiBpbmxpbmUgbm8tb3AgaWYgdGhhdCBjb25maWcgaXNuJ3Qgc2V0LCB3aGljaCBtZWFucyB0aGUgZnVuY3Rpb25hbCBpbXBhY3QgaXMgb25seSByZWxldmFudCB3aGVuIGBNRU1PUllfRkFJTFVSRWAgaXMgYWN0aXZlLiBBbmQsIG9mIGNvdXJzZSwgYEhVR0VUTEJfUEFHRWAgaXMgbmVlZGVkIGZvciBgbW0vaHVnZXRsYi5jYC4gIFNvIHRoZXNlIGFyZSB0aGUgdHdvIHJlbGV2YW50IGNvbmZpZ3MuXG5cbk5vdyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSBpbXBvcnRhbnQuXG5gcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIHNlZW1zIGltcG9ydGFudCBhcyBpdCBpcyBjYWxsZWQgZnJvbSBgZnJlZV9odWdlX2ZvbGlvYCwgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AsIGV0Yy5cbmB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsa2AgaXMgaW1wb3J0YW50IHRvbywgY2FsbGVkIGZyb20gc29tZSBjcml0aWNhbCBmdW5jdGlvbnMuXG5BbmQgYGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yYCwgYmVjYXVzZSBpdCBpcyBjYWxsZWQgYnkgdGhlIGJ1bGsgZnVuY3Rpb24uXG5cbk9rLCBsZXQncyBjb25maXJtIHRoZSB2aXNpYmlsaXR5IG9mIHRob3NlIGZ1bmN0aW9uczogYGZyZWVfaHVnZV9mb2xpb2AsIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gLCBhbmQgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAuXG5gZnJlZV9odWdlX2ZvbGlvYCBpcyBkZWZpbml0ZWx5IGV4cG9ydGVkLCBpdCdzIGNhbGxlZCB3aGVuIGEgaHVnZSBwYWdlIGlzIGZyZWVkLlxuYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgaXMgYSBnb29kIGVudHJ5cG9pbnQgdG8gbG9vayBhdCBkdXJpbmcgbWVtb3J5IGZhaWx1cmUgb3Igb2ZmbGluZSBvcGVyYXRpb25zLlxuQW5kIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGlzIGdsb2JhbCBhcyB3ZWxsLlxuXG5Ob3csIGB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsa2AgaXMgY2FsbGVkIGZyb20gYHNldF9tYXhfaHVnZV9wYWdlc2AsIHNvIGBucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uYCwgYGh1Z2V0bGJfc3lzY3RsX2hhbmRsZXJgIG9yIGBodWdldGxiX292ZXJjb21taXRfaGFuZGxlcmAgbWF5IGJlIGludGVyZXN0aW5nIGZvciBmdXp6aW5nLlxuQWxyaWdodCwgaXQgc2VlbXMgbGlrZSBgZnJlZV9odWdlX2ZvbGlvYCwgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgYW5kIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGFyZSBnb29kIHNwb3RzIHRvIGZvY3VzIG9uLlxuTGV0J3MgdmVyaWZ5IHdoYXQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGFjdHVhbGx5IGRvZXMsIGp1c3QgdG8gYmUgc3VyZS4uLiBsb29rcyBnb29kLCBjbGVhcmluZyB0aGUgaHdwb2lzb24gZmxhZy5cblxuU28sIHRvIHN1bW1hcml6ZSwgdGhpcyBwYXRjaCBjZW50cmFsaXplcyBhbmQgcG90ZW50aWFsbHkgaW1wcm92ZXMgdGhlIGhhbmRsaW5nIG9mIEhXUG9pc29uIGZsYWdzIHdoZW4gSHVnZVRMQiBmb2xpb3MgYXJlIGNsZWFyZWQuIEl0IGlzIGZ1bmN0aW9uYWwsIGdpdmVuIHRoZSBjb25maWd1cmF0aW9ucyBgSFVHRVRMQl9QQUdFYCBhbmQgYE1FTU9SWV9GQUlMVVJFYC4gVGhlIGtleSBlbnRyeXBvaW50cyB0byB0ZXN0IGFyZSBgZnJlZV9odWdlX2ZvbGlvYCwgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AsIGFuZCBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYC4gSSB3aWxsIGxvb2sgYXQgdGhvc2UgY2xvc2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNjcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjMwOjE0LjY5NjA0NjMxNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MTEwMDU4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0zOTgzPWxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy00MDUxLVxcbm1tL2h1Z2V0bGIuYzo0MDUyOnNzaXplX3QgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKGJvb2wgb2JleV9tZW1wb2xpY3ksXFxubW0vaHVnZXRsYi5jLTQwNTMtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZCxcXG4tLVxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaD0xMDI9ZXh0ZXJuIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYyxcXG4tLVxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC0xMDQtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIG5yX3RvX2RlbW90ZSk7XFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oOjEwNTpleHRlcm4gc3NpemVfdCBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24oYm9vbCBvYmV5X21lbXBvbGljeSxcXG5tbS9odWdldGxiX2ludGVybmFsLmgtMTA2LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBoc3RhdGUgKmgsIGludCBuaWQsXFxuLS1cXG5tbS9odWdldGxiX3N5c2N0bC5jPTMwPXN0YXRpYyBpbnQgaHVnZXRsYl9zeXNjdGxfaGFuZGxlcl9jb21tb24oYm9vbCBvYmV5X21lbXBvbGljeSxcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzY3RsLmMtNDYtXFx0aWYgKHdyaXRlKVxcbm1tL2h1Z2V0bGJfc3lzY3RsLmM6NDc6XFx0XFx0cmV0ID0gX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKG9iZXlfbWVtcG9saWN5LCBoLFxcbm1tL2h1Z2V0bGJfc3lzY3RsLmMtNDgtXFx0XFx0XFx0XFx0XFx0XFx0ICBOVU1BX05PX05PREUsIHRtcCwgKmxlbmd0aCk7XFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmM9NDI9c3RhdGljIHNzaXplX3QgbnJfaHVnZXBhZ2VzX3Nob3dfY29tbW9uKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vaHVnZXRsYl9zeXNmcy5jLTU3LVxcbm1tL2h1Z2V0bGJfc3lzZnMuYzo1ODpzdGF0aWMgc3NpemVfdCBucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKGJvb2wgb2JleV9tZW1wb2xpY3ksXFxubW0vaHVnZXRsYl9zeXNmcy5jLTU5LVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qga29iamVjdCAqa29iaiwgY29uc3QgY2hhciAqYnVmLFxcbi0tXFxubW0vaHVnZXRsYl9zeXNmcy5jLTcxLVxcdGggPSBrb2JqX3RvX2hzdGF0ZShrb2JqLCBcXHUwMDI2bmlkKTtcXG5tbS9odWdldGxiX3N5c2ZzLmM6NzI6XFx0cmV0dXJuIF9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbihvYmV5X21lbXBvbGljeSwgaCwgbmlkLCBjb3VudCwgbGVuKTtcXG5tbS9odWdldGxiX3N5c2ZzLmMtNzMtfVxcbi0tXFxubW0vaHVnZXRsYl9zeXNmcy5jPTgxPXN0YXRpYyBzc2l6ZV90IG5yX2h1Z2VwYWdlc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy04My17XFxubW0vaHVnZXRsYl9zeXNmcy5jOjg0OlxcdHJldHVybiBucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKGZhbHNlLCBrb2JqLCBidWYsIGxlbik7XFxubW0vaHVnZXRsYl9zeXNmcy5jLTg1LX1cXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYz0xMDE9c3RhdGljIHNzaXplX3QgbnJfaHVnZXBhZ2VzX21lbXBvbGljeV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0xMDMte1xcbm1tL2h1Z2V0bGJfc3lzZnMuYzoxMDQ6XFx0cmV0dXJuIG5yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24odHJ1ZSwga29iaiwgYnVmLCBsZW4pO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYy0xMDUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzozMDoxNi4zNjcxNTExNjdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMzNzg0MjE0NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxMTg4MSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6MzA6MjkuNzQ1NTc0OTU1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcyNjk3NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlbW90ZV9wb29sX2h1Z2VfcGFnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MzkyND1zdGF0aWMgbG9uZyBkZW1vdGVfZnJlZV9odWdldGxiX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpzcmMsIHN0cnVjdCBoc3RhdGUgKmRzdCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zOTgyLVxcbm1tL2h1Z2V0bGIuYzozOTgzOmxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcXG5tbS9odWdldGxiLmMtMzk4NC1cXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3RvX2RlbW90ZSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zOTk1LVxcdGlmICghc3JjLVxcdTAwM2VkZW1vdGVfb3JkZXIpIHtcXG5tbS9odWdldGxiLmM6Mzk5NjpcXHRcXHRwcl93YXJuKFxcXCJIdWdlVExCOiBOVUxMIGRlbW90ZSBvcmRlciBwYXNzZWQgdG8gZGVtb3RlX3Bvb2xfaHVnZV9wYWdlLlxcXFxuXFxcIik7XFxubW0vaHVnZXRsYi5jLTM5OTctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFx0XFx0LyogaW50ZXJuYWwgZXJyb3IgKi9cXG4tLVxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaD0xMDA9ZXh0ZXJuIHZvaWQgcHJlcF9hbmRfYWRkX2FsbG9jYXRlZF9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqaCxcXG5tbS9odWdldGxiX2ludGVybmFsLmgtMTAxLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCk7XFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oOjEwMjpleHRlcm4gbG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLFxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC0xMDMtXFx0XFx0XFx0XFx0ICBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLFxcbi0tXFxubW0vaHVnZXRsYl9zeXNmcy5jPTE4MT1zdGF0aWMgc3NpemVfdCBkZW1vdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmMtMjExLVxcdFxcdCAqIENoZWNrIGZvciBhdmFpbGFibGUgcGFnZXMgdG8gZGVtb3RlIGVhY2ggdGltZSB0aG9yb3VnaCB0aGVcXG5tbS9odWdldGxiX3N5c2ZzLmM6MjEyOlxcdFxcdCAqIGxvb3AgYXMgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlIHdpbGwgZHJvcCBodWdldGxiX2xvY2suXFxubW0vaHVnZXRsYl9zeXNmcy5jLTIxMy1cXHRcXHQgKi9cXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMjEtXFxubW0vaHVnZXRsYl9zeXNmcy5jOjIyMjpcXHRcXHRyYyA9IGRlbW90ZV9wb29sX2h1Z2VfcGFnZShoLCBuX21hc2ssIG5yX2RlbW90ZSk7XFxubW0vaHVnZXRsYl9zeXNmcy5jLTIyMy1cXHRcXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjMwOjMxLjIxODI3NzQzMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzA4Mzc1NzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTI0NDgsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjMwOjQwLjUyNjY1NTI4NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0Mjc2MjY0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTM5ODM9bG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLFxcbi0tXFxubW0vaHVnZXRsYi5jLTQwNTEtXFxubW0vaHVnZXRsYi5jOjQwNTI6c3NpemVfdCBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24oYm9vbCBvYmV5X21lbXBvbGljeSxcXG5tbS9odWdldGxiLmMtNDA1My1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgbmlkLFxcbi0tXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oPTEwMj1leHRlcm4gbG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLFxcbi0tXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTEwNC1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgbnJfdG9fZGVtb3RlKTtcXG5tbS9odWdldGxiX2ludGVybmFsLmg6MTA1OmV4dGVybiBzc2l6ZV90IF9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbihib29sIG9iZXlfbWVtcG9saWN5LFxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC0xMDYtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZCxcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzY3RsLmM9MzA9c3RhdGljIGludCBodWdldGxiX3N5c2N0bF9oYW5kbGVyX2NvbW1vbihib29sIG9iZXlfbWVtcG9saWN5LFxcbi0tXFxubW0vaHVnZXRsYl9zeXNjdGwuYy00Ni1cXHRpZiAod3JpdGUpXFxubW0vaHVnZXRsYl9zeXNjdGwuYzo0NzpcXHRcXHRyZXQgPSBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24ob2JleV9tZW1wb2xpY3ksIGgsXFxubW0vaHVnZXRsYl9zeXNjdGwuYy00OC1cXHRcXHRcXHRcXHRcXHRcXHQgIE5VTUFfTk9fTk9ERSwgdG1wLCAqbGVuZ3RoKTtcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYz01OD1zdGF0aWMgc3NpemVfdCBucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKGJvb2wgb2JleV9tZW1wb2xpY3ksXFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmMtNzEtXFx0aCA9IGtvYmpfdG9faHN0YXRlKGtvYmosIFxcdTAwMjZuaWQpO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYzo3MjpcXHRyZXR1cm4gX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKG9iZXlfbWVtcG9saWN5LCBoLCBuaWQsIGNvdW50LCBsZW4pO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYy03My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjMwOjQxLjk2OTQyMjIyN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDM5MzMyMTY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjEyOTcwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzozMDo1Mi4zNjI3NDY1NjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDk2MzQ1MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTI1NjU9dm9pZCByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtMjYzOS0vKlxcbm1tL2h1Z2V0bGIuYzoyNjQwOiAqIGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvIC0gQWxsb2NhdGUgYSBuZXcgZm9saW8gYW5kIGRpc3NvbHZlXFxubW0vaHVnZXRsYi5jLTI2NDEtICogdGhlIG9sZCBvbmVcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNjQ1LSAqL1xcbm1tL2h1Z2V0bGIuYzoyNjQ2OnN0YXRpYyBpbnQgYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpvbGRfZm9saW8sXFxubW0vaHVnZXRsYi5jLTI2NDctXFx0XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yNzMyPWludCBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNzUwLVxcdGVsc2UgaWYgKCFmb2xpb19yZWZfY291bnQoZm9saW8pKVxcbm1tL2h1Z2V0bGIuYzoyNzUxOlxcdFxcdHJldCA9IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKGZvbGlvLCBsaXN0KTtcXG5tbS9odWdldGxiLmMtMjc1Mi1cXG4tLVxcbm1tL2h1Z2V0bGIuYz0yNzYzPWludCByZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXFxuLS1cXG5tbS9odWdldGxiLmMtMjgwMi1cXG5tbS9odWdldGxiLmM6MjgwMzpcXHRcXHRcXHRcXHRyZXQgPSBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpbyhmb2xpbywgXFx1MDAyNmxpc3QpO1xcbm1tL2h1Z2V0bGIuYy0yODA0LVxcdFxcdFxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjMwOjUzLjgxMjM4NTg4MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzQ4NDUwMTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEh1Z2UgUGFnZSBNYW5hZ2VtZW50IGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBodWdlIHBhZ2VzIGFyZSBtYW5hZ2VkLCBhbmQgaXQgbG9va3MgbGlrZSBhIGZldyBrZXkgZnVuY3Rpb25zIGFyZSB0aGUgd29ya2hvcnNlcyBoZXJlLiBJJ3ZlIGlkZW50aWZpZWQgYF9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbmAsIHdoaWNoIGlzbid0IHN0YXRpYywgYW5kIGl0IHNlZW1zIHRvIGJlIHRoZSBlbnRyeSBwb2ludCBmb3Igc2V0dGluZyB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMuIFRoYXQgdGhlbiBsZWFkcyB0byBgc2V0X21heF9odWdlX3BhZ2VzYCBhbmQgdWx0aW1hdGVseSwgdGhpbmdzIGxpa2UgYHVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrYCBhbmQgYHJlbW92ZV9odWdldGxiX2ZvbGlvYC4gYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAgYWxzbyBpc24ndCBzdGF0aWMgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBkZW1vdGluZyBodWdlIHBhZ2VzLCB3aGljaCwgYWdhaW4sIGVuZHMgdXAgY2FsbGluZyBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLiBgZnJlZV9odWdlX2ZvbGlvYCBpcyBzaW1pbGFyLCBoYW5kbGluZyB0aGUgZnJlZWluZyBvZiBwYWdlcyBhbmQgY2FsbGluZyBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLCBhcyBkb2VzIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gIGZvciBkaXNzb2x2aW5nLiBUaGVuIHdlIGhhdmUgYGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpb2AsIHdoaWNoIGNhbGxzIGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpb2AsIHdoaWNoIGluIHR1cm4sIGNhbGxzIGByZW1vdmVfaHVnZXRsYl9mb2xpb2AuXG5cblNvLCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZTpcbiogICBgZnJlZV9odWdlX2ZvbGlvYFxuKiAgIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gXG4qICAgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWBcbiogICBgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uYFxuKiAgIGBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9gXG5cbldhaXQgYSBtaW51dGUsIGBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb25gIGlzIGEgc3lzZnMvc3lzY3RsIGhhbmRsZXIsIGlzbid0IGl0PyBIbW0sIGlzIHRoYXQgZ29pbmcgdG8gYmUgdXNlZnVsIGZvciBmdXp6aW5nPyBPaCB5ZWFoLCBzeXprYWxsZXIgY2FuIHdyaXRlIHRvIHRob3NlIHN5c2ZzL3N5c2N0bCBpbnRlcmZhY2VzISBCdXQsIGBmcmVlX2h1Z2VfZm9saW9gIGxvb2tzIG1vcmUgZnVuZGFtZW50YWwgYW5kIHNob3VsZCBiZSByZWFjaGFibGUgdGhyb3VnaCByZWd1bGFyIHN5c2NhbGxzIGxpa2UgYG11bm1hcGAgYW5kIGBtYWR2aXNlYCwgd2hpY2ggSSBwcmVmZXIgdG8gd29yayB3aXRoIGRpcmVjdGx5LiBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCBzZWVtcyBsaWtlIGl0J3MgY29ubmVjdGVkIHRvIG1lbW9yeSBmYWlsdXJlIGluamVjdGlvbi5cblxuVGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWdzIEknbGwgbmVlZCB0byBlbmFibGUgYXJlIGBIVUdFVExCRlNgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgLiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhhdCB0aGUgYEhVR0VUTEJGU2AgaXMgYWN0dWFsbHkgY2FsbGVkIHRoYXQsIHRob3VnaC4gT2theSwgWWVwLCBgY29uZmlnIEhVR0VUTEJGU2AgaW4gYGZzL0tjb25maWdgLiBBbmQsIGBjb25maWcgTUVNT1JZX0ZBSUxVUkVgIGlzIGluIGBtbS9LY29uZmlnYC5cblxuSG1tLCBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnM/IExldCBtZSBzZWUuIEFoLCBgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZGAgaXMgYWxzbyB1c2VkLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0J3MgZGVmaW5lZCBmb3IgbW9yZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU1NSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzozMTowMS4xNjA4Mzg3OTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzU5MzAyNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDg2PXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA4OC1cXHRyZXR1cm4gZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgfHxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDg5OlxcdCAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwOTAtfVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zNTI3PXN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzUzMC1cXHQvKiBTY2FuIHBvaXNvbmVkIHBhZ2VzIHdoZW4gc3BsaXQgYSBwb2lzb25lZCBmb2xpbyB0byBsYXJnZSBmb2xpb3MgKi9cXG5tbS9odWdlX21lbW9yeS5jOjM1MzE6XFx0Y29uc3QgYm9vbCBoYW5kbGVfaHdwb2lzb24gPSBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBuZXdfb3JkZXI7XFxubW0vaHVnZV9tZW1vcnkuYy0zNTMyLVxcdGxvbmcgbmV3X25yX3BhZ2VzID0gMSBcXHUwMDNjXFx1MDAzYyBuZXdfb3JkZXI7XFxuLS1cXG5tbS9odWdldGxiLmM9MTM4ND1zdGF0aWMgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmMtMTM4OS1cXHQgKi9cXG5tbS9odWdldGxiLmM6MTM5MDpcXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKVxcbm1tL2h1Z2V0bGIuYy0xMzkxLVxcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oZm9saW8pO1xcbi0tXFxubW0vbWVtb3J5LmM9NTQ2OD12bV9mYXVsdF90IGRvX3NldF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWVtb3J5LmMtNTQ5OS1cXHQgKi9cXG5tbS9tZW1vcnkuYzo1NTAwOlxcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpXFxubW0vbWVtb3J5LmMtNTUwMS1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxubW0vc2htZW0uYz0zMjg4PXN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG4tLVxcbm1tL3NobWVtLmMtMzMyNi1cXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG5tbS9zaG1lbS5jOjMzMjc6XFx0XFx0XFx0ICAgIGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxcbm1tL3NobWVtLmMtMzMyOC1cXHRcXHRcXHRcXHRmYWxsYmFja19wYWdlX2NvcHkgPSB0cnVlO1xcbi0tXFxubW0vc2htZW0uYz0zNDc1PXN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXFxuLS1cXG5tbS9zaG1lbS5jLTM1MTYtXFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxubW0vc2htZW0uYzozNTE3OlxcdFxcdFxcdCAgICBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcXG5tbS9zaG1lbS5jLTM1MTgtXFx0XFx0XFx0XFx0ZmFsbGJhY2tfcGFnZV9zcGxpY2UgPSB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzozMTowMi41OTY3NzMzM1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjk3ODIwNTM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjE0NzI5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzozMToxNS41NzQ5ODEwMjZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDc1MjI3ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fdGVzdF9od3BvaXNvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9odWdldGxiZnMvaW5vZGUuYz0yMTk9c3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0yNjAtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MjYxOlxcdFxcdFxcdGlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMjYyLVxcdFxcdFxcdFxcdHdhbnQgPSBucjtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwODY9c3RhdGljIGlubGluZSBib29sIGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA4Ny17XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA4ODpcXHRyZXR1cm4gZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgfHxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDg5LVxcdCAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTEyNDc9c3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVfZXhhY3Qoc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMjU3LVxcbm1tL2h1Z2V0bGIuYzoxMjU4OlxcdFxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcXG5tbS9odWdldGxiLmMtMTI1OS1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zOTgzPWxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy00MDA1LVxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgbmV4dCwgXFx1MDAyNnNyYy1cXHUwMDNlaHVnZXBhZ2VfZnJlZWxpc3RzW25vZGVdLCBscnUpIHtcXG5tbS9odWdldGxiLmM6NDAwNjpcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXFxubW0vaHVnZXRsYi5jLTQwMDctXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9odWdldGxiLmM9NTY5Nj1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9odWdldGxiLmMtNTgxNi1cXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6NTgxNzpcXHRcXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKSB7XFxubW0vaHVnZXRsYi5jLTU4MTgtXFx0XFx0XFx0cmV0ID0gVk1fRkFVTFRfSFdQT0lTT05fTEFSR0UgfFxcbi0tXFxubW0vaHVnZXRsYi5jPTYxNjg9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MzI1LVxcdHJldCA9IC1FSU87XFxubW0vaHVnZXRsYi5jOjYzMjY6XFx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxcbm1tL2h1Z2V0bGIuYy02MzI3LVxcdFxcdGdvdG8gb3V0X3JlbGVhc2VfdW5sb2NrO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODI1PWJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4MzEtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxODMyOlxcdGlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODMzLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9NzU0PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzc2LVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6Nzc3OlxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkge1xcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzc4LVxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjMxOjE3LjI4MjUwODE5MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTcyODkxMjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTU2NTAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjMxOjI2Ljg1NTQwMTkwNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MDM3MzU3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb19jbGVhcl9odWdldGxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTYxMT1zdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjYxMjp2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjEzLVxcdHtcXHR2b2lkICpwcml2YXRlID0gXFx1MDAyNmZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTYyOD1zdGF0aWMgaW5saW5lIHZvaWRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NjI5OmZvbGlvX2NsZWFyX2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjMwLVxcdHsgfVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9ODc3PWludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODgwLSNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo4ODE6ZXh0ZXJuIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04ODItI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo4ODM6c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04ODQte1xcbi0tXFxubW0vaHVnZXRsYi5jPTEyNDc9c3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVfZXhhY3Qoc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMjY1LVxcdFxcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7XFxubW0vaHVnZXRsYi5jOjEyNjY6XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9mcmVlZChmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTEyNjctXFx0XFx0aC1cXHUwMDNlZnJlZV9odWdlX3BhZ2VzLS07XFxuLS1cXG5tbS9odWdldGxiLmM9MTM3Nz1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywgaW50IG5pZCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzgzLVxcbm1tL2h1Z2V0bGIuYzoxMzg0OnN0YXRpYyB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9odWdldGxiLmMtMTM4NS17XFxuLS1cXG5tbS9odWdldGxiLmMtMTM5MC1cXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKVxcbm1tL2h1Z2V0bGIuYzoxMzkxOlxcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0xMzkyLVxcbm1tL2h1Z2V0bGIuYzoxMzkzOlxcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTEzOTQtfVxcbi0tXFxubW0vaHVnZXRsYi5jPTE0MDQ9dm9pZCByZW1vdmVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE0MTgtXFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9mcmVlZChmb2xpbykpIHtcXG5tbS9odWdldGxiLmM6MTQxOTpcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX2ZyZWVkKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMTQyMC1cXHRcXHRoLVxcdTAwM2VmcmVlX2h1Z2VfcGFnZXMtLTtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNDMzLVxcdGlmICghZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKSlcXG5tbS9odWdldGxiLmM6MTQzNDpcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMTQzNS1cXG4tLVxcbm1tL2h1Z2V0bGIuYz0xNDcwPXN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNTA3LVxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxubW0vaHVnZXRsYi5jOjE1MDg6XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTE1MDktXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbi0tXFxubW0vaHVnZXRsYi5jPTE1ODY9c3RhdGljIHZvaWQgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNjAyLVxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxubW0vaHVnZXRsYi5jOjE2MDM6XFx0XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTE2MDQtXFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbi0tXFxubW0vaHVnZXRsYi5jLTE2MjctXFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG5tbS9odWdldGxiLmM6MTYyODpcXHRcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMTYyOS1cXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuLS1cXG5tbS9odWdldGxiLmM9MTYzNz1zdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE2NjAtXFx0ICogV2l0aG91dCBIVk8gZW5hYmxlZCwgcmV0IHdpbGwgYmUgMCBhbmQgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsXFxubW0vaHVnZXRsYi5jOjE2NjE6XFx0ICogZm9saW9fY2xlYXJfaHVnZXRsYiBhcyB0aGlzIHdhcyBkb25lIHByZXZpb3VzbHkuXFxubW0vaHVnZXRsYi5jLTE2NjItXFx0ICovXFxuLS1cXG5tbS9odWdldGxiLmMtMTY2Ny1cXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGZvbGlvLCBcXHUwMDI2bm9uX2h2b19mb2xpb3MsIGxydSlcXG5tbS9odWdldGxiLmM6MTY2ODpcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMTY2OS1cXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuLS1cXG5tbS9odWdldGxiLmM9MTY4OT12b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE3MDgtXFx0cmVzdG9yZV9yZXNlcnZlID0gZm9saW9fdGVzdF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jOjE3MDk6XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0xNzEwLVxcbi0tXFxubW0vaHVnZXRsYi5jLTE3MzAtXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmh1Z2V0bGJfbG9jaywgZmxhZ3MpO1xcbm1tL2h1Z2V0bGIuYzoxNzMxOlxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfbWlncmF0YWJsZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTE3MzItXFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfZm9saW8oaHN0YXRlX2luZGV4KGgpLFxcbi0tXFxubW0vaHVnZXRsYi5jPTI1NjU9dm9pZCByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtMjU4Mi1cXHRcXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6MjU4MzpcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTI1ODQtXFx0XFx0ZWxzZSBpZiAocmMpXFxuLS1cXG5tbS9odWdldGxiLmM9NTE0Nj12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTI4My1cXHRcXHRcXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6NTI4NDpcXHRcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTUyODUtXFx0XFx0XFx0ZWxzZSBpZiAocmMpXFxuLS1cXG5tbS9odWdldGxiLmM9NTYzMz1pbnQgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01NjQ3LVxcdH1cXG5tbS9odWdldGxiLmM6NTY0ODpcXHRmb2xpb19jbGVhcl9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTU2NDktXFxuLS1cXG5tbS9odWdldGxiLmM9NzEzMz1ib29sIGZvbGlvX2lzb2xhdGVfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vaHVnZXRsYi5jLTcxNDMtXFx0fVxcbm1tL2h1Z2V0bGIuYzo3MTQ0OlxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfbWlncmF0YWJsZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTcxNDUtXFx0bGlzdF9tb3ZlX3RhaWwoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIGxpc3QpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTcxOTA9dm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxcbi0tXFxubW0vaHVnZXRsYi5jLTcyMTEtXFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfdGVtcG9yYXJ5KG9sZF9mb2xpbyk7XFxubW0vaHVnZXRsYi5jOjcyMTI6XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl90ZW1wb3JhcnkobmV3X2ZvbGlvKTtcXG5tbS9odWdldGxiLmMtNzIxMy1cXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTM5NT1zdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTQxOS1cXHRpZiAoIXJldClcXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo0MjA6XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbyk7XFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNDIxLVxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmM9NTIyPXN0YXRpYyBpbnQgX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTU3Ny1cXHRpZiAocmV0KVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjU3ODpcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKTtcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy01NzktXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE5Mjg9c3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTQ2LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTk0Nzp2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5NDgte1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xOTU3PXN0YXRpYyBpbnQgZ2V0X2h1Z2VfcGFnZV9mb3JfaHdwb2lzb24odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTk5OC1cXHRpZiAoY291bnRfaW5jcmVhc2VkIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3RfaHVnZXRsYl9taWdyYXRhYmxlKGZvbGlvKSkge1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTk5OTpcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX21pZ3JhdGFibGUoZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjAwMC1cXHRcXHQqbWlncmF0YWJsZV9jbGVhcmVkID0gdHJ1ZTtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjAyNT1zdGF0aWMgaW50IHRyeV9tZW1vcnlfZmFpbHVyZV9odWdldGxiKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwNjItXFx0aWYgKGh3cG9pc29uX2ZpbHRlcihwKSkge1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjA2MzpcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwNjQtXFx0XFx0aWYgKG1pZ3JhdGFibGVfY2xlYXJlZClcXG4tLVxcbm1tL3JtYXAuYz0zMTQyPXZvaWQgaHVnZXRsYl9hZGRfbmV3X2Fub25fcm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTMxNTAtXFx0YXRvbWljX3NldChcXHUwMDI2Zm9saW8tXFx1MDAzZV9sYXJnZV9tYXBjb3VudCwgMCk7XFxubW0vcm1hcC5jOjMxNTE6XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL3JtYXAuYy0zMTUyLVxcdF9fZm9saW9fc2V0X2Fub24oZm9saW8sIHZtYSwgYWRkcmVzcywgdHJ1ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjMxOjI4LjMwNTc3OTQ5N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDE5MjE5NDQwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjE4NDk5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzozMTozOC40OTc5NzY0OTVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDA0MzY4ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19mb2xpb19jbGVhcl9odWdldGxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xMzg0PXN0YXRpYyB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzkyLVxcbm1tL2h1Z2V0bGIuYzoxMzkzOlxcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTEzOTQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzozMTozOS45Mzg0MTk2NThaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM4NTEzNzU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBmb2xpb19jbGVhcl9odWdldGxiYCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggcmVuYW1lcyBgX19mb2xpb19jbGVhcl9odWdldGxiYCB0byBgZm9saW9fY2xlYXJfaHVnZXRsYmAgYW5kLCBpbXBvcnRhbnRseSwgaXQgYWxzbyBjbGVhcnMgdGhlIGBod3BvaXNvbmAgZmxhZyBpZiBzZXQuIFRoYXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBjbGVhciBvbmUuIE1ha2VzIHNlbnNlLlxuXG5Ob3csIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFRoZSBwYXRjaCBkZXNjcmlwdGlvbiBtZW50aW9ucyBgSFVHRVRMQkZTYCBhbmQgYE1FTU9SWV9GQUlMVVJFYC4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRob3NlIGFyZSBjb3JyZWN0Li4uIFllcCwgYEhVR0VUTEJGU2AgaXMgaW4gYGZzL0tjb25maWdgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgIGlzIGluIGBtbS9LY29uZmlnYCwganVzdCBhcyBleHBlY3RlZC5cblxuRm9yIHRoZSBmb2N1cyBzeW1ib2xzLCBJIGluaXRpYWxseSBqb3R0ZWQgZG93biBgZnJlZV9odWdlX2ZvbGlvYCwgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AsIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgLCBgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uYCwgYW5kIGBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9gLiBBY3R1YWxseSwgbGV0J3MgcmVtb3ZlIGBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb25gLiBJdCdzIHJlbGF0ZWQsIGJ1dCBub3QgcmVhbGx5IGEgY29yZSBmb2N1cyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGNoYW5nZS4gVGhlIGZpcnN0IHRocmVlIHN5bWJvbHMgYXJlIG1vcmUgdGhhbiBlbm91Z2g6IGBmcmVlX2h1Z2VfZm9saW9gLCBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCwgYW5kIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgLiBUaG9zZSB3aWxsIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGVyZSB0aGlzIGNoYW5nZSB0b3VjaGVzLlxuXG5Pa2F5LCBJJ20gc2F0aXNmaWVkLiBUaW1lIHRvIHVzZSBgc2V0LXJlc3VsdHNgIGFuZCBzdWJtaXQgdGhpcyBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyMzAsIk91dHB1dFRva2VucyI6MjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjMxOjQ2LjMyMzU1OTEyNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MzgxNzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnJlZV9odWdlX2ZvbGlvXCIsXG4gICAgXCJkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9cIixcbiAgICBcImRlbW90ZV9wb29sX2h1Z2VfcGFnZVwiLFxuICAgIFwiX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgZm9saW9fY2xlYXJfaHVnZXRsYmAgdGhhdCB3cmFwcyBgX19mb2xpb19jbGVhcl9odWdldGxiYCBhbmQgYWRkcyBsb2dpYyB0byBtb3ZlIHRoZSBIV1BvaXNvbiBmbGFnIHRvIGVhY2ggZXJyb3IgcGFnZSBpZiB0aGUgZm9saW8gaGFzIGh3cG9pc29uZWQgcGFnZXMuIEl0IHJlcGxhY2VzIGNhbGxzIHRvIGBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGJgIHdpdGggYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIGluIHNldmVyYWwgcGxhY2VzLCBjaGFuZ2luZyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBhbmQgZW5zdXJpbmcgdGhlIEhXUG9pc29uIGZsYWcgaXMgcHJvcGVybHkgaGFuZGxlZCB3aGVuIGEgSHVnZVRMQiBmb2xpbyBpcyByZW1vdmVkIG9yIGZyZWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoSHVnZVRMQiBhbmQgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcpIGFuZCBpcyByZWFjaGFibGUgdmlhIEh1Z2VUTEIgYWxsb2NhdGlvbi9mcmVlaW5nIGFuZCBtZW1vcnkgZmFpbHVyZSBpbmplY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZyZWVfaHVnZV9mb2xpb1wiLFxuICAgIFwiZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJkZW1vdGVfcG9vbF9odWdlX3BhZ2VcIixcbiAgICBcIl9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIHRoYXQgd3JhcHMgYF9fZm9saW9fY2xlYXJfaHVnZXRsYmAgYW5kIGFkZHMgbG9naWMgdG8gbW92ZSB0aGUgSFdQb2lzb24gZmxhZyB0byBlYWNoIGVycm9yIHBhZ2UgaWYgdGhlIGZvbGlvIGhhcyBod3BvaXNvbmVkIHBhZ2VzLiBJdCByZXBsYWNlcyBjYWxscyB0byBgX19mb2xpb19jbGVhcl9odWdldGxiYCB3aXRoIGBmb2xpb19jbGVhcl9odWdldGxiYCBpbiBzZXZlcmFsIHBsYWNlcywgY2hhbmdpbmcgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgYW5kIGVuc3VyaW5nIHRoZSBIV1BvaXNvbiBmbGFnIGlzIHByb3Blcmx5IGhhbmRsZWQgd2hlbiBhIEh1Z2VUTEIgZm9saW8gaXMgcmVtb3ZlZCBvciBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKEh1Z2VUTEIgYW5kIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nKSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBIdWdlVExCIGFsbG9jYXRpb24vZnJlZWluZyBhbmQgbWVtb3J5IGZhaWx1cmUgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kczn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-29 23:06:23 +0000 UTC FinishedAt: 2026-07-29 23:31:47 +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": "aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMORY_FAILURE" ], "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": "aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMORY_FAILURE" ], "series_id": "664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "free_huge_folio", "dissolve_free_hugetlb_folio", "demote_pool_huge_page", "__nr_hugepages_store_common" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZyZWVfaHVnZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8mIzM0OywKICAgICYjMzQ7ZGVtb3RlX3Bvb2xfaHVnZV9wYWdlJiMzNDssCiAgICAmIzM0O19fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBmb2xpb19jbGVhcl9odWdldGxiYCB0aGF0IHdyYXBzIGBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGJgIGFuZCBhZGRzIGxvZ2ljIHRvIG1vdmUgdGhlIEhXUG9pc29uIGZsYWcgdG8gZWFjaCBlcnJvciBwYWdlIGlmIHRoZSBmb2xpbyBoYXMgaHdwb2lzb25lZCBwYWdlcy4gSXQgcmVwbGFjZXMgY2FsbHMgdG8gYF9fZm9saW9fY2xlYXJfaHVnZXRsYmAgd2l0aCBgZm9saW9fY2xlYXJfaHVnZXRsYmAgaW4gc2V2ZXJhbCBwbGFjZXMsIGNoYW5naW5nIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGFuZCBlbnN1cmluZyB0aGUgSFdQb2lzb24gZmxhZyBpcyBwcm9wZXJseSBoYW5kbGVkIHdoZW4gYSBIdWdlVExCIGZvbGlvIGlzIHJlbW92ZWQgb3IgZnJlZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChIdWdlVExCIGFuZCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZykgYW5kIGlzIHJlYWNoYWJsZSB2aWEgSHVnZVRMQiBhbGxvY2F0aW9uL2ZyZWVpbmcgYW5kIG1lbW9yeSBmYWlsdXJlIGluamVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDMxZTVhNjczZGYwNzY2NTc2MTMzNTRhMWRmY2NkY2RiZGZkMTY0NThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAyMzoyODowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWUuLjI3ZWUyZGZhYWZhNjMgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTEzODEsNiAmIzQzOzEzODEsMTggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssIGludFxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7c3RhdGljIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNb3ZlIEhXUG9pc29uIGZsYWcgdG8gZWFjaCBlcnJvciBwYWdlXG4mIzQzO1x0ICogd2hpY2ggbWFrZXMgYW55IGhlYWx0aHkgcGFnZXMgcmV1c2FibGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSlcbiYjNDM7XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oZm9saW8pO1xuJiM0MztcbiYjNDM7XHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogUmVtb3ZlIGh1Z2V0bGIgZm9saW8gZnJvbSBsaXN0cy5cbiAgKiBJZiB2bWVtbWFwIGV4aXN0cyBmb3IgdGhlIGZvbGlvLCBjbGVhciB0aGUgaHVnZXRsYiBmbGFnIHNvIHRoYXQgdGhlXG5AQCAtMTQxOSw3ICYjNDM7MTQzMSw3IEBAIHZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdCAqIHRvIHRhaWwgc3RydWN0IHBhZ2VzLlxuIFx0ICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpXG4tXHRcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4mIzQzO1x0XHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbiBcbiBcdGgtXHUwMDNlbnJfaHVnZV9wYWdlcy0tO1xuIFx0aC1cdTAwM2Vucl9odWdlX3BhZ2VzX25vZGVbbmlkXS0tO1xuQEAgLTE0OTMsMTcgJiM0MzsxNTA1LDEwIEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbiBcdCAqL1xuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbiBcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuLVx0XHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuJiM0MztcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIE1vdmUgUGFnZUhXUG9pc29uIGZsYWcgZnJvbSBoZWFkIHBhZ2UgdG8gdGhlIHJhdyBlcnJvciBwYWdlcyxcbi1cdCAqIHdoaWNoIG1ha2VzIGFueSBoZWFsdGh5IHN1YnBhZ2VzIHJldXNhYmxlLlxuLVx0ICovXG4tXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKVxuLVx0XHRmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTtcbi1cbiBcdFZNX0JVR19PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XG4gXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX2NtYShmb2xpbykpXG4gXHRcdGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKGZvbGlvKTtcbkBAIC0xNTk1LDcgJiM0MzsxNjAwLDcgQEAgc3RhdGljIHZvaWQgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCB0X2ZvbGlvLCBub25faHZvX2ZvbGlvcywgbHJ1KSB7XG4gXHRcdFx0bGlzdF9kZWwoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1KTtcbiBcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4tXHRcdFx0X19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbiYjNDM7XHRcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4gXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHRcdFx0dXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGZhbHNlKTtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbkBAIC0xNjIwLDcgJiM0MzsxNjI1LDcgQEAgc3RhdGljIHZvaWQgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0bGlzdF9kZWwoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1KTtcbiBcdFx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdFx0XHRcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4mIzQzO1x0XHRcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4gXHRcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdFx0XHRcdHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XG4gXHRcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbkBAIC0xNjUzLDE0ICYjNDM7MTY1OCwxNCBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLFxuIFx0ICogc2hvdWxkIG9ubHkgYmUgcGFnZXMgb24gdGhlIG5vbl9odm9fZm9saW9zIGxpc3QuXG4gXHQgKiBEbyBub3RlIHRoYXQgdGhlIG5vbl9odm9fZm9saW9zIGxpc3QgY291bGQgYmUgZW1wdHkuXG4gXHQgKiBXaXRob3V0IEhWTyBlbmFibGVkLCByZXQgd2lsbCBiZSAwIGFuZCB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGxcbi1cdCAqIF9fZm9saW9fY2xlYXJfaHVnZXRsYiBhcyB0aGlzIHdhcyBkb25lIHByZXZpb3VzbHkuXG4mIzQzO1x0ICogZm9saW9fY2xlYXJfaHVnZXRsYiBhcyB0aGlzIHdhcyBkb25lIHByZXZpb3VzbHkuXG4gXHQgKi9cbiBcdFZNX1dBUk5fT04oIWxpc3RfZW1wdHkoZm9saW9fbGlzdCkpO1xuIFx0Vk1fV0FSTl9PTihyZXQgXHUwMDNjIDApO1xuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNm5vbl9odm9fZm9saW9zKSBcdTAwMjZcdTAwMjYgcmV0KSB7XG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmb2xpbywgXHUwMDI2bm9uX2h2b19mb2xpb3MsIGxydSlcbi1cdFx0XHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuJiM0MztcdFx0XHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbiBcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZyZWVfaHVnZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8mIzM0OywKICAgICYjMzQ7ZGVtb3RlX3Bvb2xfaHVnZV9wYWdlJiMzNDssCiAgICAmIzM0O19fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBmb2xpb19jbGVhcl9odWdldGxiYCB0aGF0IHdyYXBzIGBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGJgIGFuZCBhZGRzIGxvZ2ljIHRvIG1vdmUgdGhlIEhXUG9pc29uIGZsYWcgdG8gZWFjaCBlcnJvciBwYWdlIGlmIHRoZSBmb2xpbyBoYXMgaHdwb2lzb25lZCBwYWdlcy4gSXQgcmVwbGFjZXMgY2FsbHMgdG8gYF9fZm9saW9fY2xlYXJfaHVnZXRsYmAgd2l0aCBgZm9saW9fY2xlYXJfaHVnZXRsYmAgaW4gc2V2ZXJhbCBwbGFjZXMsIGNoYW5naW5nIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGFuZCBlbnN1cmluZyB0aGUgSFdQb2lzb24gZmxhZyBpcyBwcm9wZXJseSBoYW5kbGVkIHdoZW4gYSBIdWdlVExCIGZvbGlvIGlzIHJlbW92ZWQgb3IgZnJlZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChIdWdlVExCIGFuZCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZykgYW5kIGlzIHJlYWNoYWJsZSB2aWEgSHVnZVRMQiBhbGxvY2F0aW9uL2ZyZWVpbmcgYW5kIG1lbW9yeSBmYWlsdXJlIGluamVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMxZTVhNjczZGYwNzY2NTc2MTMzNTRhMWRmY2NkY2RiZGZkMTY0NTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyOSAyMzoyODowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA1NzEyMTJiODA4MzVlLi4yN2VlMmRmYWFmYTYzIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC0xMzgxLDYgJiM0MzsxMzgxLDE4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnQKIH0KICNlbmRpZgogCiYjNDM7c3RhdGljIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogTW92ZSBIV1BvaXNvbiBmbGFnIHRvIGVhY2ggZXJyb3IgcGFnZQomIzQzOwkgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBwYWdlcyByZXVzYWJsZS4KJiM0MzsJICovCiYjNDM7CWlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpCiYjNDM7CQlmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTsKJiM0MzsKJiM0MzsJX19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogUmVtb3ZlIGh1Z2V0bGIgZm9saW8gZnJvbSBsaXN0cy4KICAqIElmIHZtZW1tYXAgZXhpc3RzIGZvciB0aGUgZm9saW8sIGNsZWFyIHRoZSBodWdldGxiIGZsYWcgc28gdGhhdCB0aGUKQEAgLTE0MTksNyAmIzQzOzE0MzEsNyBAQCB2b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJICogdG8gdGFpbCBzdHJ1Y3QgcGFnZXMuCiAJICovCiAJaWYgKCFmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pKQotCQlfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pOwomIzQzOwkJZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7CiAKIAloLSZndDtucl9odWdlX3BhZ2VzLS07CiAJaC0mZ3Q7bnJfaHVnZV9wYWdlc19ub2RlW25pZF0tLTsKQEAgLTE0OTMsMTcgJiM0MzsxNTA1LDEwIEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwKIAkgKi8KIAlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkgewogCQlzcGluX2xvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKLQkJX19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTsKJiM0MzsJCWZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pOwogCQlzcGluX3VubG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwogCX0KIAotCS8qCi0JICogTW92ZSBQYWdlSFdQb2lzb24gZmxhZyBmcm9tIGhlYWQgcGFnZSB0byB0aGUgcmF3IGVycm9yIHBhZ2VzLAotCSAqIHdoaWNoIG1ha2VzIGFueSBoZWFsdGh5IHN1YnBhZ2VzIHJldXNhYmxlLgotCSAqLwotCWlmICh1bmxpa2VseShmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkpCi0JCWZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oZm9saW8pOwotCiAJVk1fQlVHX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTsKIAlpZiAoZm9saW9fdGVzdF9odWdldGxiX2NtYShmb2xpbykpCiAJCWh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKGZvbGlvKTsKQEAgLTE1OTUsNyAmIzQzOzE2MDAsNyBAQCBzdGF0aWMgdm9pZCBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIHRfZm9saW8sIG5vbl9odm9fZm9saW9zLCBscnUpIHsKIAkJCWxpc3RfZGVsKCZhbXA7Zm9saW8tJmd0O2xydSk7CiAJCQlzcGluX2xvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKLQkJCV9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7CiYjNDM7CQkJZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7CiAJCQlzcGluX3VubG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwogCQkJdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGZhbHNlKTsKIAkJCWNvbmRfcmVzY2hlZCgpOwpAQCAtMTYyMCw3ICYjNDM7MTYyNSw3IEBAIHN0YXRpYyB2b2lkIGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsCiAJCQl9IGVsc2UgewogCQkJCWxpc3RfZGVsKCZhbXA7Zm9saW8tJmd0O2xydSk7CiAJCQkJc3Bpbl9sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7Ci0JCQkJX19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTsKJiM0MzsJCQkJZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7CiAJCQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKIAkJCQl1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpOwogCQkJCWNvbmRfcmVzY2hlZCgpOwpAQCAtMTY1MywxNCAmIzQzOzE2NTgsMTQgQEAgc3RhdGljIHZvaWQgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGsoc3RydWN0IGhzdGF0ZSAqaCwKIAkgKiBzaG91bGQgb25seSBiZSBwYWdlcyBvbiB0aGUgbm9uX2h2b19mb2xpb3MgbGlzdC4KIAkgKiBEbyBub3RlIHRoYXQgdGhlIG5vbl9odm9fZm9saW9zIGxpc3QgY291bGQgYmUgZW1wdHkuCiAJICogV2l0aG91dCBIVk8gZW5hYmxlZCwgcmV0IHdpbGwgYmUgMCBhbmQgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsCi0JICogX19mb2xpb19jbGVhcl9odWdldGxiIGFzIHRoaXMgd2FzIGRvbmUgcHJldmlvdXNseS4KJiM0MzsJICogZm9saW9fY2xlYXJfaHVnZXRsYiBhcyB0aGlzIHdhcyBkb25lIHByZXZpb3VzbHkuCiAJICovCiAJVk1fV0FSTl9PTighbGlzdF9lbXB0eShmb2xpb19saXN0KSk7CiAJVk1fV0FSTl9PTihyZXQgJmx0OyAwKTsKIAlpZiAoIWxpc3RfZW1wdHkoJmFtcDtub25faHZvX2ZvbGlvcykgJmFtcDsmYW1wOyByZXQpIHsKIAkJc3Bpbl9sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoZm9saW8sICZhbXA7bm9uX2h2b19mb2xpb3MsIGxydSkKLQkJCV9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7CiYjNDM7CQkJZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7CiAJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNzEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdldGxiIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vaHVnZXRsYi5jYC4gSXQmIzM5O3MgaW50cm9kdWNpbmcgYGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhlIGxvZ2ljIGZsb3cgaXMgc3RyYWlnaHRmb3J3YXJkOiBpZiBhIGZvbGlvIGlzIGhhcmR3YXJlIHBvaXNvbmVkIChhcyBpbmRpY2F0ZWQgYnkgYGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pYCksIGl0IGNhbGxzIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKWAgYW5kIHRoZW4gdW5jb25kaXRpb25hbGx5IGNhbGxzIGBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pYC4gU2VlbXMgbGlrZSBhIHNlbnNpYmxlIGFwcHJvYWNoIGZvciBjbGVhbmluZyB1cCBodWdlIHBhZ2UgZW50cmllcy4KCldoYXQmIzM5O3MgaW1tZWRpYXRlbHkgY2F0Y2hpbmcgbXkgZXllIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyAqcmVwbGFjaW5nKiBzZXZlcmFsIGluc3RhbmNlcyBvZiBgX19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKWAgd2l0aCB0aGUgbmV3IGBmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKWAgZnVuY3Rpb24uIFRoaXMgc3VnZ2VzdHMgYSBzaGlmdCBpbiBob3cgd2UgaGFuZGxlIHBvdGVudGlhbGx5IHBvaXNvbmVkIHBhZ2VzIGR1cmluZyB0aGUgY2xlYW51cCBwcm9jZXNzLiBBbHNvLCBpdCBhcHBlYXJzIGEgYmxvY2sgb2YgY29kZSByZWxhdGVkIHRvIGhhbmRsaW5nIHRoZSBgUGFnZUhXUG9pc29uYCBmbGFnIGluIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCBoYXMgYmVlbiByZW1vdmVkLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGRpdGNoaW5nIHRoZSBtYW51YWwgbW92ZSBvZiBgUGFnZUhXUG9pc29uYCB0byB0aGUgJiMzNDtyYXcgZXJyb3IgcGFnZXMmIzM0Oy4KCldhaXQgYSBzZWNvbmTigKYgSSBzZWUgdGhhdCB0aGUgbmV3IGNvZGUgdXNlcyBgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbylgIHdoZXJlIHRoZSBvbGQgY29kZSB1c2VkIGBmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBkaWZmZXJlbmNlIGFuZCBpbXBsaWNhdGlvbnMgaGVyZS4gVGhleSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBoYXJkd2FyZSBwb2lzb24gZmxhZyBpcyBzZXQgYW5kIGNsZWFyZWQuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbnMgb2YgdGhvc2UgbWFjcm9zLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhpcyBmcm9tIGEgdGVzdGluZyBwZXJzcGVjdGl2ZS4gVGhpcyBpcyBodWdldGxiLCB3aGljaCBpcyBhIGNyaXRpY2FsIHBhcnQgb2YgbWVtb3J5IG1hbmFnZW1lbnQuIEl0JiMzOTtzIGEgaGlnaC12YWx1ZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBhIGZldyBrZXkgZnVuY3Rpb25zOiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AsIGBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcmAsIGFuZCBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGtgLiBUaGVzZSBhcmUgYWxsIHBhcnRzIG9mIHRoZSBjb2RlIGJhc2UgdGhhdCBhcmUgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyBhbmQgbWFuYWdpbmcgbWVtb3J5IHBhZ2VzLiBUaGF0JiMzOTtzIGdvb2QgY292ZXJhZ2UgZm9yIGEgZnV6emluZyBjYW1wYWlnbi4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGFjdHVhbGx5IGRvZXMuIEkmIzM5O20gZ29pbmcgdG8gcnVuIGEgYGdyZXBwZXJgIHNlYXJjaCBmb3IgdGhhdCBmdW5jdGlvbiB0byBzZWUgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IGl0JiMzOTtzIHVzZWQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCB3aXRoIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD04Nzc9aW50IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb3ModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODgwLSNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjg4MTpleHRlcm4gdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODgyLSNlbHNlXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo4ODM6c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTg4NC17XG4tLVxubW0vaHVnZXRsYi5jPTEzODQ9c3RhdGljIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGIuYy0xMzkwLVx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSlcbm1tL2h1Z2V0bGIuYzoxMzkxOlx0XHRmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0xMzkyLVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTkyOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTQ2LVxubW0vbWVtb3J5LWZhaWx1cmUuYzoxOTQ3OnZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTQ4LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIwMjU9c3RhdGljIGludCB0cnlfbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjA2Mi1cdGlmIChod3BvaXNvbl9maWx0ZXIocCkpIHtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjA2MzpcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwNjQtXHRcdGlmIChtaWdyYXRhYmxlX2NsZWFyZWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEwNAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEh1Z2V0bGIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vaHVnZXRsYi5jYCwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZGVmaW5pdGVseSBpbiBhIGNyaXRpY2FsIGFyZWEuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcmVmaW5pbmcgaG93IGh1Z2UgcGFnZSBmYXVsdCBoYW5kbGluZyB3b3Jrcywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeS4gVGhlIGludHJvZHVjdGlvbiBvZiBgZm9saW9fY2xlYXJfaHVnZXRsYmAgaXMgdGhlIGtleS4gSXQgd3JhcHMgdXAgdGhlIGxvZ2ljLCBjYWxsaW5nIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBvbmx5IHdoZW4gYSBmb2xpbyBpcyBhY3R1YWxseSBmbGFnZ2VkIGFzIGJlaW5nIGhhcmR3YXJlLXBvaXNvbmVkLiBUaGF0JiMzOTtzIGdvb2QsIGl0IHN1Z2dlc3RzIGEgbW9yZSBlZmZpY2llbnQgYW5kIHRhcmdldGVkIGFwcHJvYWNoLgoKVGhlIHJlcGxhY2VtZW50IG9mIGBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGJgIGNhbGxzIHdpdGggYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIGlzIGEgY2xlYW4tdXAsIGNvbnNvbGlkYXRpbmcgdGhlIGxvZ2ljIHVuZGVyIGEgc2luZ2xlIGZ1bmN0aW9uLiBBbmQgdGhlbiwgdGhlIHJlbW92YWwgb2YgdGhlIHNwZWNpZmljIGNhbGwgdG8gYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGZyb20gYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gLi4ucmlnaHQsIGJlY2F1c2UgYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIG5vdyBoYW5kbGVzIHRoYXQgY29uZGl0aW9uYWwgY2hlY2suIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgbGVzcyBkdXBsaWNhdGlvbiwgaW1wcm92ZWQgbWFpbnRhaW5hYmlsaXR5LgoKRnVuY3Rpb25hbGx5LCB0aGlzIHNlZW1zIHNvdW5kLiBJdCYjMzk7cyBhIGZvY3VzZWQgcmVmYWN0b3JpbmcgdGhhdCBzaG91bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgY2xhcml0eSB3aXRoaW4gdGhlIGh1Z2V0bGIgc3Vic3lzdGVtLiBOb3csIHRoZSBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAgZnVuY3Rpb24sIGFzIGV4cGVjdGVkLCBpcyBnYXRlZCBieSBgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gSSBzaG91bGQgY29uZmlybSB0aGF0IGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBhbHNvIGVuYWJsZWQsIGFzIGV4cGVjdGVkLCBiZWNhdXNlIG9mIHRoZSBmdW5jdGlvbmFsaXR5IGluIHRoZSBmaWxlIGJlaW5nIG1vZGlmaWVkLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCX1BBR0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zaC9tbS9LY29uZmlnPTE1OD1jaG9pY2Vcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTYzLVxuYXJjaC9zaC9tbS9LY29uZmlnOjE2NDpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRLXG5hcmNoL3NoL21tL0tjb25maWctMTY1LVx0Ym9vbCBcJiMzNDs2NGtCXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE2Ny1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjg6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjktXHRib29sIFwmIzM0OzI1NmtCXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE3MS1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzFNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE3My1cdGJvb2wgXCYjMzQ7MU1CXCYjMzQ7XG5hcmNoL3NoL21tL0tjb25maWctMTc0LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3NTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNE1CXG5hcmNoL3NoL21tL0tjb25maWctMTc2LVx0Ym9vbCBcJiMzNDs0TUJcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTc4LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3OTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE4MC1cdGJvb2wgXCYjMzQ7NjRNQlwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbmZzL0tjb25maWctMjY0LVx0Ym9vbCBcJiMzNDtIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcbmZzL0tjb25maWctMjcyLVxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxuZnMvS2NvbmZpZy0yNzQtXHRkZWZfYm9vbCBIVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI3Ni1cbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuZnMvS2NvbmZpZy0yNzgtXHRkZWZfYm9vbCBIVUdFVExCX1BBR0Vcbi0tXG5tbS9LY29uZmlnPTcwNj1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNzA4LVxubW0vS2NvbmZpZzo3MDk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG5tbS9LY29uZmlnLTcxMC1cdGRlZl9ib29sIG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDUxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0ZBSUxVUkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03NzQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc3Ni1cbm1tL0tjb25maWc6Nzc3OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NzgtXHRkZXBlbmRzIG9uIE1NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNDMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0MzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBtbS9odWdldGxiLmNgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBpbnRyb2R1Y2luZyBgZm9saW9fY2xlYXJfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKWAsIGEgbmV3IGZ1bmN0aW9uIHRoYXQgd3JhcHMgYF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbylgLiBUaGUga2V5IGNoYW5nZSBoZXJlIGlzIG1vdmluZyB0aGUgY2FsbCB0byBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbylgICppbnNpZGUqIHRoaXMgbmV3IHdyYXBwZXIsIHJpZ2h0IGJlZm9yZSB0aGUgY29yZSBjbGVhciBvcGVyYXRpb24uIFByZXZpb3VzbHksIHRoZSBIV1BvaXNvbiBjbGVhcmluZyBoYXBwZW5lZCAqYWZ0ZXIqIHRoZSBtYWluIGNsZWFyIGFuZCBhbnkgQ01BIGZyZWVpbmcgaW4gYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oKWAuIFNvLCB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBjb25jZXJuaW5nIGhhcmR3YXJlIHBvaXNvbmluZyBpcyBhbHRlcmVkLgoKR2l2ZW4gdGhpcyByZW9yZGVyaW5nLCBJIG5lZWQgdG8gZXZhbHVhdGUgdGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcsIHdoaWNoIGlzIHByb2JhYmx5IHRoZSBpbnRlbnQuIFRoZSBmYWN0IHRoYXQgdGhlIGNhbGwgaXMgKm5vdyogdXNlZCBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oKWAsIGBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcigpYCwgYW5kIGB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsaygpYCBtYWtlcyBpdCBhIGJpdCBtb3JlIHdpZGVseSB1c2VkIHRoYW4gYmVmb3JlLiBUaGF0IGFkZHMgdG8gdGhlIHJpc2suCgpUaGlzIGZlZWxzIHJlYWNoYWJsZTsgaHVnZXRsYiBpcyBkZWZpbml0ZWx5IGEgcmVsZXZhbnQgc3Vic3lzdGVtLiBHaXZlbiB0aGF0IHdlIGFyZSBjaGFuZ2luZyB0aGUgb3JkZXIgb2YgSFdQb2lzb24gZmxhZ3MgYXJlIGNsZWFyZWQsIHRoaXMgaXMgcHJvYmFibHkgd29ydGggYSBmdXp6aW5nIGNhbXBhaWduLiBJJiMzOTttIHRoaW5raW5nIHRoZSBjaGFuZ2UgaW4gb3JkZXJpbmcgYW5kIHRoZSBicm9hZGVyIHJlYWNoIG9mIHRoZSBuZXcgYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIGZ1bmN0aW9uIG1ha2UgaXQgYSBoaWdoLXZhbHVlIHRhcmdldCBmb3IgZnV6emluZy4KClRvIGZvY3VzIG15IGVmZm9ydHMsIHRoZSBsaWtlbHkgc3BvdHMgd2hlcmUgaXNzdWVzIHdvdWxkIGFyaXNlIGluY2x1ZGU6IGByZW1vdmVfaHVnZXRsYl9mb2xpb2AsIGBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcmAsIGFuZCBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGtgLiBJJiMzOTtsbCBhbHNvIGJlIGZvY3VzaW5nIG9uIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCBzaW5jZSB0aGF0IGlzIHdoZXJlIHRoZSBvcmlnaW5hbCBjb2RlIGNoYW5nZSB0b29rIHBsYWNlLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGByZW1vdmVfaHVnZXRsYl9mb2xpb2AuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGEgY2hhbmdlIHRvIHRoaXMgYXJlYSB3b3VsZCBhZmZlY3QgaG93IGhhcmR3YXJlIHBvaXNvbmluZyBpcyBoYW5kbGVkLgoKVGhlIGNvbmZpZ3MgdG8gaGF2ZSBlbmFibGVkIGFyZSBIVUdFVExCRlMgYW5kIE1FTU9SWV9GQUlMVVJFLCB3aGljaCBzZWVtcyBvYnZpb3VzLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AgYW5kIGB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsa2AgaW5zaWRlIGBtbS9odWdldGxiLmNgIHRvIHNlZSB0aGUgZXhhY3QgY29kZS4gSSYjMzk7bGwgYWxzbyBjaGVjayBpZiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGlzIGV4cG9ydGVkIG9yIGdsb2JhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCByZW1vdmVfaHVnZXRsYl9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTM4ND1zdGF0aWMgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jLTE0MDMtICovXG5tbS9odWdldGxiLmM6MTQwNDp2b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9odWdldGxiLmMtMTQwNS1cdFx0XHQgIGJvb2wgYWRqdXN0X3N1cnBsdXMpXG4tLVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oPTcxPXN0YXRpYyBpbmxpbmUgaW50IGhzdGF0ZV9uZXh0X25vZGVfdG9fZnJlZShzdHJ1Y3QgaHN0YXRlICpoLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkKVxuLS1cbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC05NC1cbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaDo5NTpleHRlcm4gdm9pZCByZW1vdmVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTk2LVx0XHRcdFx0IGJvb2wgYWRqdXN0X3N1cnBsdXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTA5CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGdW5jdGlvbiBWaXNpYmlsaXR5IGFuZCBDYWxsZXIgUmVsYXRpb25zaGlwcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLCBgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3JgLCBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGtgLCBhbmQgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gLiBIbW0sIGByZW1vdmVfaHVnZXRsYl9mb2xpb2AgaXMgZ2xvYmFsLCB3aGljaCBpcyBmaW5lLCBidXQgdGhlIG90aGVyIHRocmVlLCBgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3JgLCBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGtgLCBhbmQgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIGFyZSBkZWNsYXJlZCBhcyBlaXRoZXIgc3RhdGljLgoKTm93LCB3YWl0IGEgbWludXRlLCB0aGUgcHJvbXB0IGluIGZyb250IG9mIG1lIGV4cGxpY2l0bHkgc3RhdGVzIGEgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlcnMuIFRoYXQmIzM5O3MgYSBrZXkgZ3VpZGVsaW5lIHdlIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBXZSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyIHJlZmFjdG9yaW5nIGhlcmUuCgpUaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBpZGVudGlmeSB0aGUgY2FsbGVycyBvZiB0aG9zZSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGJlaW5nIHVzZWQuIEFyZSB0aGV5IHRydWx5IGludGVybmFsLCBvciBhcmUgd2UgcG90ZW50aWFsbHkgZXhwb3NpbmcgYW4gQVBJIGltcGxpY2l0bHkgdGhyb3VnaCB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBzaG91bGQgcGVyaGFwcyBiZSBleHBvc2VkIGluIGEgbW9yZSBleHBsaWNpdCwgbm9uLXN0YXRpYyBtYW5uZXI/IEZpbmRpbmcgb3V0IHRoZSBjYWxsIHNpdGVzIGlzIGtleSBiZWZvcmUgZGVjaWRpbmcgb24gdGhlIG5leHQgc3RlcHMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgZWFjaCBvZiB0aGVzZSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZWlyIGltcGFjdCBhbmQgaWYgdGhleSYjMzk7cmUgYWN0aW5nIGFzIGEgZGUtZmFjdG8gQVBJIHRoYXQgd2Ugc2hvdWxkIHJldmlzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTE1Njc9c3RhdGljIHZvaWQgdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9odWdldGxiLmMtMTU4NS1cbm1tL2h1Z2V0bGIuYzoxNTg2OnN0YXRpYyB2b2lkIGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtMTU4Ny1cdFx0XHRcdFx0c3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS9odWdldGxiLmM9MTYzNz1zdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0xNjUxLVx0aWYgKHJldCBcdTAwM2MgMCkge1xubW0vaHVnZXRsYi5jOjE2NTI6XHRcdGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yKGgsIGZvbGlvX2xpc3QsIFx1MDAyNm5vbl9odm9fZm9saW9zKTtcbm1tL2h1Z2V0bGIuYy0xNjUzLVx0XHRnb3RvIHJldHJ5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTk4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWJ1Z2dpbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBJc3N1ZSoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUuIEkmIzM5O3ZlIGdvdCBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGtgIGhpZ2hsaWdodGVkLCBhbmQgSSBzZWUgaXQmIzM5O3MgY2FsbGluZyBgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3JgLiAgTXkgZmlyc3QgcXVlc3Rpb24gYWx3YXlzIGhhcyB0byBiZSwgd2hhdCYjMzk7cyB1cHN0cmVhbT8gV2hlcmUgZG9lcyBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGtgIGV2ZW4gKmNvbWUqIGZyb20/IEkgbmVlZCB0byB0cmFjZSBiYWNrIHRoZSBjYWxsIHN0YWNrIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyByZXN0b3JlIGVycm9yLiAgSXMgdGhpcyBhIHNwZWNpZmljIGRldmljZSBkcml2ZXIsIGEgZ2VuZXJhbCBtZW1vcnkgcmVjbGFpbSBwYXRoLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVyIHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBjbHVlcyBhYm91dCB0aGUgcG90ZW50aWFsIHNvdXJjZSBvZiB0aGUgcHJvYmxlbS4gQW0gSSBkZWFsaW5nIHdpdGggYSBzcGVjaWZpYyBlcnJvciBjb25kaXRpb24gaW4gYSBwYXJ0aWN1bGFyIHN1YnN5c3RlbSwgb3IgYSBtb3JlIGdlbmVyYWwgaXNzdWUgaW4gbWVtb3J5IG1hbmFnZW1lbnQ/IFRpbWUgdG8gZmlyZSB1cCB0aGUgZGVidWdnZXIgYW5kIHRyYWNlIHRob3NlIGNhbGwgcGF0aHMuIEkgbmVlZCB0byBrbm93IHRoZSB3aHkgYmVmb3JlIEkgY2FuIGV2ZW4gdGhpbmsgYWJvdXQgdGhlIGhvdyB0byBmaXggdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTE1ODY9c3RhdGljIHZvaWQgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTYzNi1cbm1tL2h1Z2V0bGIuYzoxNjM3OnN0YXRpYyB2b2lkIHVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtMTYzOC1cdFx0XHRcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxuLS1cbm1tL2h1Z2V0bGIuYz0yMzU1PXN0YXRpYyB2b2lkIHJldHVybl91bnVzZWRfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yMzkzLVx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG5tbS9odWdldGxiLmM6MjM5NDpcdHVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrKGgsIFx1MDAyNnBhZ2VfbGlzdCk7XG5tbS9odWdldGxiLmMtMjM5NS1cdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi0tXG5tbS9odWdldGxiLmM9MzY2Mz1zdGF0aWMgdm9pZCB0cnlfdG9fZnJlZV9sb3coc3RydWN0IGhzdGF0ZSAqaCwgdW5zaWduZWQgbG9uZyBjb3VudCxcbi0tXG5tbS9odWdldGxiLmMtMzY5MC1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xubW0vaHVnZXRsYi5jOjM2OTE6XHR1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhoLCBcdTAwMjZwYWdlX2xpc3QpO1xubW0vaHVnZXRsYi5jLTM2OTItXHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4tLVxubW0vaHVnZXRsYi5jPTM3MzU9c3RhdGljIGludCBzZXRfbWF4X2h1Z2VfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwgdW5zaWduZWQgbG9uZyBjb3VudCwgaW50IG5pZCxcbi0tXG5tbS9odWdldGxiLmMtMzkwNS1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xubW0vaHVnZXRsYi5jOjM5MDY6XHR1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhoLCBcdTAwMjZwYWdlX2xpc3QpO1xubW0vaHVnZXRsYi5jLTM5MDctXHRmbHVzaF9mcmVlX2hwYWdlX3dvcmsoaCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNjQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqQW5hbHl6aW5nIEh1Z2UgUGFnZSBNYW5hZ2VtZW50IGluIHRoZSBLZXJuZWwqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIGBzZXRfbWF4X2h1Z2VfcGFnZXNgLi4uIHllcywgdGhhdCYjMzk7cyBhIHNlbnNpYmxlIGVudHJ5IHBvaW50LiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2Qgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gYW5kIHBlcmhhcHMgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBmb3IgaHVnZSBwYWdlIG1hbmFnZW1lbnQsIGZpZ3VyaW5nIG91dCBob3cgdGhlIHN5c3RlbSYjMzk7cyBtYXhpbXVtIGNhcGFjaXR5IGlzIGVzdGFibGlzaGVkLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBsaW1pdHMuCgpgdHJ5X3RvX2ZyZWVfbG93YC4uLiB0aGF0JiMzOTtzIHN0YXRpYywgaW50ZXJlc3RpbmcuIFN0YXRpYyBtZWFucyBpdCYjMzk7cyBwcm9iYWJseSBvbmx5IHZpc2libGUgd2l0aGluIGEgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdCwgbWF5YmUgcGFydCBvZiBhIG1vcmUgZm9jdXNlZCBsb3ctbWVtb3J5IHJlY2xhaW0gc3RyYXRlZ3kuIEl0IHdvdWxkbiYjMzk7dCBiZSBkaXJlY3RseSBleHBvc2VkLCBtYWtpbmcgbWUgd29uZGVyIGFib3V0IGl0cyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBsYXJnZXIgbWVtb3J5IG1hbmFnZW1lbnQgcGljdHVyZSBhbmQgaG93IGl0IHJlYWN0cyB0byBzcGVjaWZpYyBsb3ctbWVtb3J5IGNvbmRpdGlvbnMuIElzIGl0IGludm9sdmVkIGluIGEgcHJpb3JpdHktYmFzZWQgcmVjbGFpbSBwcm9jZXNzPwoKQW5kIHRoZW4gYHJldHVybl91bnVzZWRfc3VycGx1c19wYWdlc2AgaXMgYWxzbyBzdGF0aWMuIE9rYXksIHNvIHRoaXMgbXVzdCBiZSByZWxhdGVkIHRvIHJldHVybmluZyBwYWdlcyAqYmFjayogdG8gdGhlIHN5c3RlbS4gV2hlcmUgd291bGQgdGhpcyBmaXQ/IElzIGl0IHRpZWQgdG8gYSBzcGVjaWZpYyBwcm9jZXNzIG9yIHN1YnN5c3RlbSwgYW5kIHdoYXQgdHJpZ2dlcnMgdGhpcyBwYWdlIHJldHVybj8gVGhpbmtpbmcgYWxvdWQsIEkmIzM5O20gbm93IGN1cmlvdXMgYWJvdXQgd2hldGhlciB0aGVyZSBpcyBzb21lIHNvcnQgb2YgdW51c2VkIHBhZ2UgbW9uaXRvciBvciB0aW1lciBmdW5jdGlvbiBhdCBwbGF5LgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbi4gV2hvICpjYWxscyogYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gPyBUaGF0JiMzOTtzIHRoZSBjb3JlLiBUaGUgZW50aXJlIHBvaW50LiBJdCYjMzk7cyB0aGUgYWN0aW9uLiBUaGF0JiMzOTtzIHRoZSBtZWF0IG9mIHRoZSBtZW1vcnkgcmVjbGFtYXRpb24gcHJvY2Vzcy4gSXQgaXMgd2hhdCBhY3R1YWxseSBmcmVlcyB0aGUgcGFnZXMuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSAqYWN0dWFsKiBwcm9jZXNzIG9mIHJlbGVhc2luZyB1bnVzZWQgaHVnZSBwYWdlcy4gVGhlIGNhbGwgc3RhY2sgdGhhdCBsZWFkcyB0byB0aGF0IGZ1bmN0aW9uIGlzIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgbG9naWMgb2YgaHVnZSBwYWdlIGRlYWxsb2NhdGlvbiByZXNpZGVzLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTE0NDA9dm9pZCBhZGRfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2h1Z2V0bGIuYy0xNDY5LVxubW0vaHVnZXRsYi5jOjE0NzA6c3RhdGljIHZvaWQgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxubW0vaHVnZXRsYi5jLTE0NzEtXHRcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiLmM9MTUzMj1zdGF0aWMgdm9pZCBmcmVlX2hwYWdlX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vaHVnZXRsYi5jLTE1NTMtXG5tbS9odWdldGxiLmM6MTU1NDpcdFx0X191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbyk7XG5tbS9odWdldGxiLmMtMTU1NS1cbi0tXG5tbS9odWdldGxiLmM9MTU2Nz1zdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2h1Z2V0bGIuYy0xNTcwLVx0aWYgKCFmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pIHx8ICFhdG9taWMpIHtcbm1tL2h1Z2V0bGIuYzoxNTcxOlx0XHRfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0xNTcyLVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NTQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIGEgSHVnZVRMQiBNZW1vcnkgUG9pc29uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIGEgcHJldHR5IGZvY3VzZWQgY2hhbmdlOiBpdCYjMzk7cyBhYm91dCBoYW5kbGluZyBoYXJkd2FyZS1wb2lzb25lZCAoSFdQb2lzb24pIEh1Z2VUTEIgcGFnZXMsIHNwZWNpZmljYWxseSBtb3ZpbmcgdGhlIEhXUG9pc29uIGZsYWcgdG8gZWFjaCBlcnJvciBwYWdlIHRvIGFsbG93IHJldXNlIG9mIGhlYWx0aHkgcGFnZXMuIFRoZSBwcmltYXJ5IGZ1bmN0aW9uIGludHJvZHVjZWQgaGVyZSBpcyBgZm9saW9fY2xlYXJfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKWAsIHdoaWNoIGlzIHJlcGxhY2luZyB0aGUgb2xkZXIgYF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbylgIGluIGEgZmV3IGtleSBsb2NhdGlvbnM6IGByZW1vdmVfaHVnZXRsYl9mb2xpb2AsIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCwgYGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yYCwgYW5kIGB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsa2AuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gaG93IHRoZSBIV1BvaXNvbiBmbGFnIGlzIGhhbmRsZWQuIE9yaWdpbmFsbHksIHRoZSBjb2RlIGluIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCBoYWQgYSBkaXN0aW5jdCBzZWN0aW9uIGZvciBtb3ZpbmcgdGhlIGBQYWdlSFdQb2lzb25gIGZsYWcgKmFmdGVyKiBjYWxsaW5nIGBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGJgLiAgVGhlIHBhdGNoIGVzc2VudGlhbGx5IGNvbnNvbGlkYXRlcyB0aGVzZSBzdGVwcyBieSBtb3ZpbmcgdGhlIEhXUG9pc29uIGZsYWcgY2xlYXJpbmcgYmVmb3JlIGNhbGxpbmcgYF9fZm9saW9fY2xlYXJfaHVnZXRsYmAuICBUaGUgbmV3IGBmb2xpb19jbGVhcl9odWdldGxiYCBmdW5jdGlvbiBpdHNlbGYgbm93IGNhbGxzIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBiZWZvcmUgYF9fZm9saW9fY2xlYXJfaHVnZXRsYmAsIHdoaWNoIGlzIHRoZSBrZXkgbW9kaWZpY2F0aW9uLgoKRnVuY3Rpb25hbGx5LCB0aGlzIGltcGFjdHMgbWVtb3J5IGZhaWx1cmUgc2NlbmFyaW9zIHdpdGggSHVnZVRMQiBwYWdlcy4gIFRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGU7IEh1Z2VUTEIgYWxsb2NhdGlvbi9mcmVlaW5nLCBjb3VwbGVkIHdpdGggaW5qZWN0ZWQgbWVtb3J5IGZhaWx1cmVzLCBhcmUgdGhlIHRyaWdnZXIuICBBbmQgeWVzLCB0aGlzIGlzIGRlZmluaXRlbHkgZnV6emFibGUgd2l0aCBzeXprYWxsZXIsIHdoaWNoIGNhbiBpbmplY3QgSFdQb2lzb24gZmFpbHVyZXMgKGUuZy4sIHZpYSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWApIGFuZCBtYW5pcHVsYXRlIGh1Z2UgcGFnZXMuCgpMb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9ucywgd2UmIzM5O2xsIG5lZWQgYEhVR0VUTEJGU2AgKG9yLCBgSFVHRVRMQl9QQUdFYCkgZm9yIEh1Z2VUTEIgc3VwcG9ydCwgYW5kIGRlZmluaXRlbHkgYE1FTU9SWV9GQUlMVVJFYCBiZWNhdXNlIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBpcyBjb25kaXRpb25hbCBvbiBpdC4gIEl0IGxvb2tzIGxpa2UgYE1FTU9SWV9GQUlMVVJFYCBhbHNvIGRlcGVuZHMgb24gYE1NVWAuICBgSFdQT0lTT05fSU5KRUNUYCBtaWdodCBiZSB1c2VmdWwgZm9yIGZ1enppbmcgSFdQb2lzb24gc3BlY2lmaWNhbGx5LCBzaW5jZSBzeXprYWxsZXIgdXNlcyBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAsIHdoaWNoIGFsc28gcmVsaWVzIG9uIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLgoKRm9jdXNpbmcgb24gdGhlIGV4cG9zZWQgc3ltYm9scywgaXQgc2VlbXMgbGlrZSB3ZSBjYW4gdGFyZ2V0IGByZW1vdmVfaHVnZXRsYl9mb2xpb2AsIGBzZXRfbWF4X2h1Z2VfcGFnZXNgLCBgcmV0dXJuX3VudXNlZF9zdXJwbHVzX3BhZ2VzYCwgYW5kIGB0cnlfdG9fZnJlZV9sb3dgLiAgYHVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrYCBhbmQgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCB3ZSBjYW4mIzM5O3QgZGlyZWN0bHkgdGFyZ2V0LCBidXQgdGhlaXIgY2FsbGVycyBhcmUgaW1wb3J0YW50LgoKYHJlbW92ZV9odWdldGxiX2ZvbGlvYCBpcyBhY3R1YWxseSBjYWxsZWQgZnJvbSBtYW55IHBsYWNlczogYGZyZWVfaHVnZV9mb2xpb2AsIGBhbGxvY19idWRkeV9odWdlX3BhZ2VgLCBgYWxsb2NfcG9vbF9odWdlX3BhZ2VgLCBgYWxsb2Nfc3VycGx1c19odWdlX3BhZ2VgLCBgYWxsb2NfbWlncmF0ZV9odWdlX3BhZ2VgLCBgYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2VfcGFnZWAsIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gLCBhbmQgYGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9wYWdlYC4gIFNvLCB0aGF0JiMzOTtzIGEgZ29vZCBlbnRyeSBwb2ludC4KCmBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBpcyBkZWZpbmVkIHdpdGhpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIGFuZCBzbyBpdCBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgc2V0LiAgU28gd2UgYWJzb2x1dGVseSBuZWVkIGBNRU1PUllfRkFJTFVSRWAuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIGFnYWluIHRoYXQgYEhVR0VUTEJGU2AgaXMgdGhlIGNvcnJlY3QgY29uZmlnLiAgYEhVR0VUTEJfUEFHRWAgZGVwZW5kcyBvbiBgSFVHRVRMQkZTYCwgc28gYEhVR0VUTEJGU2Agd2lsbCBkby4KClNpbmNlIHdlIGFyZSBsb29raW5nIGZvciBub24tc3RhdGljIGVudHJ5IHBvaW50cywgbGV0JiMzOTtzIGV4cGxvcmUgdGhvc2U6IGBodWdldGxiX3N5c2N0bF9oYW5kbGVyYCwgYG5yX2h1Z2VwYWdlc19zdG9yZWAsIGBucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uYCwgYGh1Z2V0bGJfb3ZlcmNvbW1pdF9oYW5kbGVyYCwgYW5kIGBucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19zdG9yZWAuCgpJbiBwcmFjdGljZSwgd2Ugd2lsbCB1c2UgYHJlbW92ZV9odWdldGxiX2ZvbGlvYCBhbmQgYGZyZWVfaHVnZV9mb2xpb2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlbW92ZV9odWdldGxiX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0xMzg0PXN0YXRpYyB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiLmMtMTQwMy0gKi9cbm1tL2h1Z2V0bGIuYzoxNDA0OnZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL2h1Z2V0bGIuYy0xNDA1LVx0XHRcdCAgYm9vbCBhZGp1c3Rfc3VycGx1cylcbi0tXG5tbS9odWdldGxiLmM9MTUzMj1zdGF0aWMgdm9pZCBmcmVlX2hwYWdlX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vaHVnZXRsYi5jLTE1NDgtXHRcdCAqIGZvbGlvX2hzdGF0ZSgpIGlzIGdvaW5nIHRvIHRyaWdnZXIgYmVjYXVzZSBhIHByZXZpb3VzIGNhbGwgdG9cbm1tL2h1Z2V0bGIuYzoxNTQ5Olx0XHQgKiByZW1vdmVfaHVnZXRsYl9mb2xpbygpIHdpbGwgY2xlYXIgdGhlIGh1Z2V0bGIgYml0LCBzbyBkb1xubW0vaHVnZXRsYi5jLTE1NTAtXHRcdCAqIG5vdCB1c2UgZm9saW9faHN0YXRlKCkgZGlyZWN0bHkuXG4tLVxubW0vaHVnZXRsYi5jPTE2ODk9dm9pZCBmcmVlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiLmMtMTc0MS1cdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfdGVtcG9yYXJ5KGZvbGlvKSkge1xubW0vaHVnZXRsYi5jOjE3NDI6XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtMTc0My1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcbi0tXG5tbS9odWdldGxiLmMtMTc0Ni1cdFx0LyogcmVtb3ZlIHRoZSBwYWdlIGZyb20gYWN0aXZlIGxpc3QgKi9cbm1tL2h1Z2V0bGIuYzoxNzQ3Olx0XHRyZW1vdmVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgdHJ1ZSk7XG5tbS9odWdldGxiLmMtMTc0OC1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcbi0tXG5tbS9odWdldGxiLmM9MTkyOD1zdGF0aWMgc3RydWN0IGZvbGlvICpyZW1vdmVfcG9vbF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTE5NDMtXHRcdFx0XHRcdCAgc3RydWN0IGZvbGlvLCBscnUpO1xubW0vaHVnZXRsYi5jOjE5NDQ6XHRcdFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGFjY3Rfc3VycGx1cyk7XG5tbS9odWdldGxiLmMtMTk0NS1cdFx0XHRicmVhaztcbi0tXG5tbS9odWdldGxiLmM9MTk2Nj1pbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jLTIwMDgtXHRcdFx0YWRqdXN0X3N1cnBsdXMgPSB0cnVlO1xubW0vaHVnZXRsYi5jOjIwMDk6XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBhZGp1c3Rfc3VycGx1cyk7XG5tbS9odWdldGxiLmMtMjAxMC1cdFx0aC1cdTAwM2VtYXhfaHVnZV9wYWdlcy0tO1xuLS1cbm1tL2h1Z2V0bGIuYy0yMDIxLVx0XHQgKiBUaGUgZm9saW9fdGVzdF9odWdldGxiIGNoZWNrIGhlcmUgaXMgYmVjYXVzZVxubW0vaHVnZXRsYi5jOjIwMjI6XHRcdCAqIHJlbW92ZV9odWdldGxiX2ZvbGlvIHdpbGwgY2xlYXIgaHVnZXRsYiBmb2xpbyBmbGFnIGZvclxubW0vaHVnZXRsYi5jLTIwMjMtXHRcdCAqIG5vbi12bWVtbWFwIG9wdGltaXplZCBodWdldGxiIGZvbGlvcy5cbi0tXG5tbS9odWdldGxiLmM9MjY0Nj1zdGF0aWMgaW50IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNzA1LVx0XHQgKi9cbm1tL2h1Z2V0bGIuYzoyNzA2Olx0XHRyZW1vdmVfaHVnZXRsYl9mb2xpbyhoLCBvbGRfZm9saW8sIGZhbHNlKTtcbm1tL2h1Z2V0bGIuYy0yNzA3LVxuLS1cbm1tL2h1Z2V0bGIuYz0zNjYzPXN0YXRpYyB2b2lkIHRyeV90b19mcmVlX2xvdyhzdHJ1Y3QgaHN0YXRlICpoLCB1bnNpZ25lZCBsb25nIGNvdW50LFxuLS1cbm1tL2h1Z2V0bGIuYy0zNjgzLVx0XHRcdFx0Y29udGludWU7XG5tbS9odWdldGxiLmM6MzY4NDpcdFx0XHRyZW1vdmVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpO1xubW0vaHVnZXRsYi5jLTM2ODUtXHRcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZwYWdlX2xpc3QpO1xuLS1cbm1tL2h1Z2V0bGIuYz0zOTgzPWxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbi0tXG5tbS9odWdldGxiLmMtNDAwOC1cbm1tL2h1Z2V0bGIuYzo0MDA5Olx0XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTtcbm1tL2h1Z2V0bGIuYy00MDEwLVx0XHRcdGxpc3RfYWRkKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2bGlzdCk7XG4tLVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oPTcxPXN0YXRpYyBpbmxpbmUgaW50IGhzdGF0ZV9uZXh0X25vZGVfdG9fZnJlZShzdHJ1Y3QgaHN0YXRlICpoLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkKVxuLS1cbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC05NC1cbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaDo5NTpleHRlcm4gdm9pZCByZW1vdmVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTk2LVx0XHRcdFx0IGJvb2wgYWRqdXN0X3N1cnBsdXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA2NwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEzNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdlVExCIEhXUG9pc29uIFJlZmFjdG9yaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGEgcmVmYWN0b3JpbmcsIHBvc3NpYmx5IGEgYnVnIGZpeCwgcmVsYXRlZCB0byBob3cgSFdQb2lzb24gaW50ZXJhY3RzIHdpdGggSHVnZVRMQiBwYWdlcy4gVGhlIHBhdGNoIG1vZGlmaWVzIGBtbS9odWdldGxiLmNgLCB3aGljaCBpcyB0aGUgZXhwZWN0ZWQgbG9jYXRpb24gZm9yIHRoaXMgdHlwZSBvZiBjaGFuZ2UuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYGZvbGlvX2NsZWFyX2h1Z2V0bGJgLCB3aGljaCBhY3RzIGFzIGEgY2VudHJhbCBwb2ludCBmb3IgaGFuZGxpbmcgdGhlIGNsZWFyaW5nIG9mIEh1Z2VUTEIgZm9saW9zLCBpbmNvcnBvcmF0aW5nIHRoZSBgaHdwb2lzb25gIGxvZ2ljLiBJdCBjb25kaXRpb25hbGx5IGNhbGxzIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBpZiB0aGUgZm9saW8gaXMgcG9pc29uZWQsIGFuZCB0aGVuIGFsd2F5cyBjYWxscyBgX19mb2xpb19jbGVhcl9odWdldGxiYC4gIFRoaXMgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gbW92ZSB0aGUgSFdQb2lzb24gZmxhZyBoYW5kbGluZyB0byBiZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCB0aGUgY29yZSBmcmVlaW5nIHByb2Nlc3MuCgpUaGUgbWFpbiBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIHJlcGxhY2VtZW50IG9mIGRpcmVjdCBjYWxscyB0byBgX19mb2xpb19jbGVhcl9odWdldGxiYCB3aXRoIGNhbGxzIHRvIHRoaXMgbmV3IGBmb2xpb19jbGVhcl9odWdldGxiYCBpbiBzZXZlcmFsIGNyaXRpY2FsIGZ1bmN0aW9uczogYHJlbW92ZV9odWdldGxiX2ZvbGlvYCwgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gLCBgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3JgLCBhbmQgYHVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrYC4gIFRoZXkgYWxzbyByZW1vdmVkIHRoZSBkaXJlY3QgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGNhbGwgZnJvbSAgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIG5vdyBiZWNhdXNlIGl0IGlzIGhhbmRsZWQgYnkgdGhlIG5ldyB3cmFwcGVyIGZ1bmN0aW9uLiBUaGlzIGNlbnRyYWxpemF0aW9uIGlzIGdvb2QsIGl0IHNpbXBsaWZpZXMgdGhlIGNvZGUuCgpNeSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6IElzIHRoaXMgZnVuY3Rpb25hbGx5IHNvdW5kPyAgRnJvbSB3aGF0IEkgc2VlLCBpdCBsb29rcyBsaWtlIGl0IGlzLiBJdCBlbnN1cmVzIHRoZSBIV1BvaXNvbiBmbGFnIGlzIGhhbmRsZWQgY29uc2lzdGVudGx5IHdoZW5ldmVyIGEgaHVnZSBwYWdlIGlzIGJlaW5nIGNsZWFyZWQuIFNvIHRoZSBwb2lzb25lZCBmbGFnIGlzIG1vdmVkIGZyb20gdGhlIGhlYWQgZm9saW8gdG8gdGhlIHJhdyBlcnJvciBwYWdlKHMpLiBJdCBpcyBub3cgY2FsbGVkIGluIGByZW1vdmVfaHVnZXRsYl9mb2xpb2AsIGBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcmAsIGFuZCBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGtgICpvbmx5KiB3aGVuIHRoZSBmb2xpbyBpcyBhY3R1YWxseSBwb2lzb25lZCwgdmlhIGBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKWAuCgpCdXQsIHdhaXQgYSBtaW51dGUuLi4gYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGlzIG9ubHkgZGVmaW5lZCBpZiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyBlbmFibGVkLiBPa2F5LCBJIGJldHRlciB2ZXJpZnkgdGhhdCBxdWlja2x5LiAgWWVwLCBjb25maXJtZWQuIEl0JiMzOTtzIGFuIGlubGluZSBuby1vcCBpZiB0aGF0IGNvbmZpZyBpc24mIzM5O3Qgc2V0LCB3aGljaCBtZWFucyB0aGUgZnVuY3Rpb25hbCBpbXBhY3QgaXMgb25seSByZWxldmFudCB3aGVuIGBNRU1PUllfRkFJTFVSRWAgaXMgYWN0aXZlLiBBbmQsIG9mIGNvdXJzZSwgYEhVR0VUTEJfUEFHRWAgaXMgbmVlZGVkIGZvciBgbW0vaHVnZXRsYi5jYC4gIFNvIHRoZXNlIGFyZSB0aGUgdHdvIHJlbGV2YW50IGNvbmZpZ3MuCgpOb3cgSSBuZWVkIHRvIHRoaW5rIGFib3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgaW1wb3J0YW50LgpgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIHNlZW1zIGltcG9ydGFudCBhcyBpdCBpcyBjYWxsZWQgZnJvbSBgZnJlZV9odWdlX2ZvbGlvYCwgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AsIGV0Yy4KYHVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrYCBpcyBpbXBvcnRhbnQgdG9vLCBjYWxsZWQgZnJvbSBzb21lIGNyaXRpY2FsIGZ1bmN0aW9ucy4KQW5kIGBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcmAsIGJlY2F1c2UgaXQgaXMgY2FsbGVkIGJ5IHRoZSBidWxrIGZ1bmN0aW9uLgoKT2ssIGxldCYjMzk7cyBjb25maXJtIHRoZSB2aXNpYmlsaXR5IG9mIHRob3NlIGZ1bmN0aW9uczogYGZyZWVfaHVnZV9mb2xpb2AsIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gLCBhbmQgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAuCmBmcmVlX2h1Z2VfZm9saW9gIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIGl0JiMzOTtzIGNhbGxlZCB3aGVuIGEgaHVnZSBwYWdlIGlzIGZyZWVkLgpgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCBpcyBhIGdvb2QgZW50cnlwb2ludCB0byBsb29rIGF0IGR1cmluZyBtZW1vcnkgZmFpbHVyZSBvciBvZmZsaW5lIG9wZXJhdGlvbnMuCkFuZCBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYCBpcyBnbG9iYWwgYXMgd2VsbC4KCk5vdywgYHVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrYCBpcyBjYWxsZWQgZnJvbSBgc2V0X21heF9odWdlX3BhZ2VzYCwgc28gYG5yX2h1Z2VwYWdlc19zdG9yZV9jb21tb25gLCBgaHVnZXRsYl9zeXNjdGxfaGFuZGxlcmAgb3IgYGh1Z2V0bGJfb3ZlcmNvbW1pdF9oYW5kbGVyYCBtYXkgYmUgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuCkFscmlnaHQsIGl0IHNlZW1zIGxpa2UgYGZyZWVfaHVnZV9mb2xpb2AsIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gIGFuZCBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYCBhcmUgZ29vZCBzcG90cyB0byBmb2N1cyBvbi4KTGV0JiMzOTtzIHZlcmlmeSB3aGF0IGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBhY3R1YWxseSBkb2VzLCBqdXN0IHRvIGJlIHN1cmUuLi4gbG9va3MgZ29vZCwgY2xlYXJpbmcgdGhlIGh3cG9pc29uIGZsYWcuCgpTbywgdG8gc3VtbWFyaXplLCB0aGlzIHBhdGNoIGNlbnRyYWxpemVzIGFuZCBwb3RlbnRpYWxseSBpbXByb3ZlcyB0aGUgaGFuZGxpbmcgb2YgSFdQb2lzb24gZmxhZ3Mgd2hlbiBIdWdlVExCIGZvbGlvcyBhcmUgY2xlYXJlZC4gSXQgaXMgZnVuY3Rpb25hbCwgZ2l2ZW4gdGhlIGNvbmZpZ3VyYXRpb25zIGBIVUdFVExCX1BBR0VgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgLiBUaGUga2V5IGVudHJ5cG9pbnRzIHRvIHRlc3QgYXJlIGBmcmVlX2h1Z2VfZm9saW9gLCBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCwgYW5kIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgLiBJIHdpbGwgbG9vayBhdCB0aG9zZSBjbG9zZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0zOTgzPWxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbi0tXG5tbS9odWdldGxiLmMtNDA1MS1cbm1tL2h1Z2V0bGIuYzo0MDUyOnNzaXplX3QgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKGJvb2wgb2JleV9tZW1wb2xpY3ksXG5tbS9odWdldGxiLmMtNDA1My1cdFx0XHRcdFx0ICAgc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZCxcbi0tXG5tbS9odWdldGxiX2ludGVybmFsLmg9MTAyPWV4dGVybiBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsXG4tLVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTEwNC1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBucl90b19kZW1vdGUpO1xubW0vaHVnZXRsYl9pbnRlcm5hbC5oOjEwNTpleHRlcm4gc3NpemVfdCBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24oYm9vbCBvYmV5X21lbXBvbGljeSxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC0xMDYtXHRcdFx0XHRcdCAgIHN0cnVjdCBoc3RhdGUgKmgsIGludCBuaWQsXG4tLVxubW0vaHVnZXRsYl9zeXNjdGwuYz0zMD1zdGF0aWMgaW50IGh1Z2V0bGJfc3lzY3RsX2hhbmRsZXJfY29tbW9uKGJvb2wgb2JleV9tZW1wb2xpY3ksXG4tLVxubW0vaHVnZXRsYl9zeXNjdGwuYy00Ni1cdGlmICh3cml0ZSlcbm1tL2h1Z2V0bGJfc3lzY3RsLmM6NDc6XHRcdHJldCA9IF9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbihvYmV5X21lbXBvbGljeSwgaCxcbm1tL2h1Z2V0bGJfc3lzY3RsLmMtNDgtXHRcdFx0XHRcdFx0ICBOVU1BX05PX05PREUsIHRtcCwgKmxlbmd0aCk7XG4tLVxubW0vaHVnZXRsYl9zeXNmcy5jPTQyPXN0YXRpYyBzc2l6ZV90IG5yX2h1Z2VwYWdlc19zaG93X2NvbW1vbihzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9odWdldGxiX3N5c2ZzLmMtNTctXG5tbS9odWdldGxiX3N5c2ZzLmM6NTg6c3RhdGljIHNzaXplX3QgbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbihib29sIG9iZXlfbWVtcG9saWN5LFxubW0vaHVnZXRsYl9zeXNmcy5jLTU5LVx0XHRcdFx0XHQgc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IGNoYXIgKmJ1Zixcbi0tXG5tbS9odWdldGxiX3N5c2ZzLmMtNzEtXHRoID0ga29ial90b19oc3RhdGUoa29iaiwgXHUwMDI2bmlkKTtcbm1tL2h1Z2V0bGJfc3lzZnMuYzo3MjpcdHJldHVybiBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24ob2JleV9tZW1wb2xpY3ksIGgsIG5pZCwgY291bnQsIGxlbik7XG5tbS9odWdldGxiX3N5c2ZzLmMtNzMtfVxuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYz04MT1zdGF0aWMgc3NpemVfdCBucl9odWdlcGFnZXNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vaHVnZXRsYl9zeXNmcy5jLTgzLXtcbm1tL2h1Z2V0bGJfc3lzZnMuYzo4NDpcdHJldHVybiBucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKGZhbHNlLCBrb2JqLCBidWYsIGxlbik7XG5tbS9odWdldGxiX3N5c2ZzLmMtODUtfVxuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYz0xMDE9c3RhdGljIHNzaXplX3QgbnJfaHVnZXBhZ2VzX21lbXBvbGljeV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9odWdldGxiX3N5c2ZzLmMtMTAzLXtcbm1tL2h1Z2V0bGJfc3lzZnMuYzoxMDQ6XHRyZXR1cm4gbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbih0cnVlLCBrb2JqLCBidWYsIGxlbik7XG5tbS9odWdldGxiX3N5c2ZzLmMtMTA1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4ODEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZW1vdGVfcG9vbF9odWdlX3BhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTM5MjQ9c3RhdGljIGxvbmcgZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqc3JjLCBzdHJ1Y3QgaHN0YXRlICpkc3QsXG4tLVxubW0vaHVnZXRsYi5jLTM5ODItXG5tbS9odWdldGxiLmM6Mzk4Mzpsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG5tbS9odWdldGxiLmMtMzk4NC1cdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3RvX2RlbW90ZSlcbi0tXG5tbS9odWdldGxiLmMtMzk5NS1cdGlmICghc3JjLVx1MDAzZWRlbW90ZV9vcmRlcikge1xubW0vaHVnZXRsYi5jOjM5OTY6XHRcdHByX3dhcm4oXCYjMzQ7SHVnZVRMQjogTlVMTCBkZW1vdGUgb3JkZXIgcGFzc2VkIHRvIGRlbW90ZV9wb29sX2h1Z2VfcGFnZS5cXG5cJiMzNDspO1xubW0vaHVnZXRsYi5jLTM5OTctXHRcdHJldHVybiAtRUlOVkFMO1x0XHQvKiBpbnRlcm5hbCBlcnJvciAqL1xuLS1cbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaD0xMDA9ZXh0ZXJuIHZvaWQgcHJlcF9hbmRfYWRkX2FsbG9jYXRlZF9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqaCxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC0xMDEtXHRcdFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCk7XG5tbS9odWdldGxiX2ludGVybmFsLmg6MTAyOmV4dGVybiBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsXG5tbS9odWdldGxiX2ludGVybmFsLmgtMTAzLVx0XHRcdFx0ICBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLFxuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYz0xODE9c3RhdGljIHNzaXplX3QgZGVtb3RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMTEtXHRcdCAqIENoZWNrIGZvciBhdmFpbGFibGUgcGFnZXMgdG8gZGVtb3RlIGVhY2ggdGltZSB0aG9yb3VnaCB0aGVcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyMTI6XHRcdCAqIGxvb3AgYXMgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlIHdpbGwgZHJvcCBodWdldGxiX2xvY2suXG5tbS9odWdldGxiX3N5c2ZzLmMtMjEzLVx0XHQgKi9cbi0tXG5tbS9odWdldGxiX3N5c2ZzLmMtMjIxLVxubW0vaHVnZXRsYl9zeXNmcy5jOjIyMjpcdFx0cmMgPSBkZW1vdGVfcG9vbF9odWdlX3BhZ2UoaCwgbl9tYXNrLCBucl9kZW1vdGUpO1xubW0vaHVnZXRsYl9zeXNmcy5jLTIyMy1cdFx0aWYgKHJjIFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDQ4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0zOTgzPWxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbi0tXG5tbS9odWdldGxiLmMtNDA1MS1cbm1tL2h1Z2V0bGIuYzo0MDUyOnNzaXplX3QgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKGJvb2wgb2JleV9tZW1wb2xpY3ksXG5tbS9odWdldGxiLmMtNDA1My1cdFx0XHRcdFx0ICAgc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZCxcbi0tXG5tbS9odWdldGxiX2ludGVybmFsLmg9MTAyPWV4dGVybiBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsXG4tLVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTEwNC1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBucl90b19kZW1vdGUpO1xubW0vaHVnZXRsYl9pbnRlcm5hbC5oOjEwNTpleHRlcm4gc3NpemVfdCBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24oYm9vbCBvYmV5X21lbXBvbGljeSxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC0xMDYtXHRcdFx0XHRcdCAgIHN0cnVjdCBoc3RhdGUgKmgsIGludCBuaWQsXG4tLVxubW0vaHVnZXRsYl9zeXNjdGwuYz0zMD1zdGF0aWMgaW50IGh1Z2V0bGJfc3lzY3RsX2hhbmRsZXJfY29tbW9uKGJvb2wgb2JleV9tZW1wb2xpY3ksXG4tLVxubW0vaHVnZXRsYl9zeXNjdGwuYy00Ni1cdGlmICh3cml0ZSlcbm1tL2h1Z2V0bGJfc3lzY3RsLmM6NDc6XHRcdHJldCA9IF9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbihvYmV5X21lbXBvbGljeSwgaCxcbm1tL2h1Z2V0bGJfc3lzY3RsLmMtNDgtXHRcdFx0XHRcdFx0ICBOVU1BX05PX05PREUsIHRtcCwgKmxlbmd0aCk7XG4tLVxubW0vaHVnZXRsYl9zeXNmcy5jPTU4PXN0YXRpYyBzc2l6ZV90IG5yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24oYm9vbCBvYmV5X21lbXBvbGljeSxcbi0tXG5tbS9odWdldGxiX3N5c2ZzLmMtNzEtXHRoID0ga29ial90b19oc3RhdGUoa29iaiwgXHUwMDI2bmlkKTtcbm1tL2h1Z2V0bGJfc3lzZnMuYzo3MjpcdHJldHVybiBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24ob2JleV9tZW1wb2xpY3ksIGgsIG5pZCwgY291bnQsIGxlbik7XG5tbS9odWdldGxiX3N5c2ZzLmMtNzMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk3MAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0yNTY1PXZvaWQgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNjM5LS8qXG5tbS9odWdldGxiLmM6MjY0MDogKiBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpbyAtIEFsbG9jYXRlIGEgbmV3IGZvbGlvIGFuZCBkaXNzb2x2ZVxubW0vaHVnZXRsYi5jLTI2NDEtICogdGhlIG9sZCBvbmVcbi0tXG5tbS9odWdldGxiLmMtMjY0NS0gKi9cbm1tL2h1Z2V0bGIuYzoyNjQ2OnN0YXRpYyBpbnQgYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpvbGRfZm9saW8sXG5tbS9odWdldGxiLmMtMjY0Ny1cdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuLS1cbm1tL2h1Z2V0bGIuYz0yNzMyPWludCBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdldGxiLmMtMjc1MC1cdGVsc2UgaWYgKCFmb2xpb19yZWZfY291bnQoZm9saW8pKVxubW0vaHVnZXRsYi5jOjI3NTE6XHRcdHJldCA9IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKGZvbGlvLCBsaXN0KTtcbm1tL2h1Z2V0bGIuYy0yNzUyLVxuLS1cbm1tL2h1Z2V0bGIuYz0yNzYzPWludCByZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4tLVxubW0vaHVnZXRsYi5jLTI4MDItXG5tbS9odWdldGxiLmM6MjgwMzpcdFx0XHRcdHJldCA9IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKGZvbGlvLCBcdTAwMjZsaXN0KTtcbm1tL2h1Z2V0bGIuYy0yODA0LVx0XHRcdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1NTUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA0NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgSHVnZSBQYWdlIE1hbmFnZW1lbnQgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgaHVnZSBwYWdlcyBhcmUgbWFuYWdlZCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBmZXcga2V5IGZ1bmN0aW9ucyBhcmUgdGhlIHdvcmtob3JzZXMgaGVyZS4gSSYjMzk7dmUgaWRlbnRpZmllZCBgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uYCwgd2hpY2ggaXNuJiMzOTt0IHN0YXRpYywgYW5kIGl0IHNlZW1zIHRvIGJlIHRoZSBlbnRyeSBwb2ludCBmb3Igc2V0dGluZyB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMuIFRoYXQgdGhlbiBsZWFkcyB0byBgc2V0X21heF9odWdlX3BhZ2VzYCBhbmQgdWx0aW1hdGVseSwgdGhpbmdzIGxpa2UgYHVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrYCBhbmQgYHJlbW92ZV9odWdldGxiX2ZvbGlvYC4gYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAgYWxzbyBpc24mIzM5O3Qgc3RhdGljIGFuZCBpcyByZXNwb25zaWJsZSBmb3IgZGVtb3RpbmcgaHVnZSBwYWdlcywgd2hpY2gsIGFnYWluLCBlbmRzIHVwIGNhbGxpbmcgYHJlbW92ZV9odWdldGxiX2ZvbGlvYC4gYGZyZWVfaHVnZV9mb2xpb2AgaXMgc2ltaWxhciwgaGFuZGxpbmcgdGhlIGZyZWVpbmcgb2YgcGFnZXMgYW5kIGNhbGxpbmcgYHJlbW92ZV9odWdldGxiX2ZvbGlvYCwgYXMgZG9lcyBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCBmb3IgZGlzc29sdmluZy4gVGhlbiB3ZSBoYXZlIGBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9gLCB3aGljaCBjYWxscyBgYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW9gLCB3aGljaCBpbiB0dXJuLCBjYWxscyBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLgoKU28sIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOgoqICAgYGZyZWVfaHVnZV9mb2xpb2AKKiAgIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gCiogICBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYAoqICAgYF9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbmAKKiAgIGBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9gCgpXYWl0IGEgbWludXRlLCBgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uYCBpcyBhIHN5c2ZzL3N5c2N0bCBoYW5kbGVyLCBpc24mIzM5O3QgaXQ/IEhtbSwgaXMgdGhhdCBnb2luZyB0byBiZSB1c2VmdWwgZm9yIGZ1enppbmc/IE9oIHllYWgsIHN5emthbGxlciBjYW4gd3JpdGUgdG8gdGhvc2Ugc3lzZnMvc3lzY3RsIGludGVyZmFjZXMhIEJ1dCwgYGZyZWVfaHVnZV9mb2xpb2AgbG9va3MgbW9yZSBmdW5kYW1lbnRhbCBhbmQgc2hvdWxkIGJlIHJlYWNoYWJsZSB0aHJvdWdoIHJlZ3VsYXIgc3lzY2FsbHMgbGlrZSBgbXVubWFwYCBhbmQgYG1hZHZpc2VgLCB3aGljaCBJIHByZWZlciB0byB3b3JrIHdpdGggZGlyZWN0bHkuIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gIHNlZW1zIGxpa2UgaXQmIzM5O3MgY29ubmVjdGVkIHRvIG1lbW9yeSBmYWlsdXJlIGluamVjdGlvbi4KClRoZSByZWxldmFudCBrZXJuZWwgY29uZmlncyBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBhcmUgYEhVR0VUTEJGU2AgYW5kIGBNRU1PUllfRkFJTFVSRWAuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IHRoZSBgSFVHRVRMQkZTYCBpcyBhY3R1YWxseSBjYWxsZWQgdGhhdCwgdGhvdWdoLiBPa2F5LCBZZXAsIGBjb25maWcgSFVHRVRMQkZTYCBpbiBgZnMvS2NvbmZpZ2AuIEFuZCwgYGNvbmZpZyBNRU1PUllfRkFJTFVSRWAgaXMgaW4gYG1tL0tjb25maWdgLgoKSG1tLCBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnM/IExldCBtZSBzZWUuIEFoLCBgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZGAgaXMgYWxzbyB1c2VkLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCYjMzk7cyBkZWZpbmVkIGZvciBtb3JlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA4Nj1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDg4LVx0cmV0dXJuIGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pIHx8XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDg5Olx0ICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA5MC19XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zNTI3PXN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM1MzAtXHQvKiBTY2FuIHBvaXNvbmVkIHBhZ2VzIHdoZW4gc3BsaXQgYSBwb2lzb25lZCBmb2xpbyB0byBsYXJnZSBmb2xpb3MgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6MzUzMTpcdGNvbnN0IGJvb2wgaGFuZGxlX2h3cG9pc29uID0gZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykgXHUwMDI2XHUwMDI2IG5ld19vcmRlcjtcbm1tL2h1Z2VfbWVtb3J5LmMtMzUzMi1cdGxvbmcgbmV3X25yX3BhZ2VzID0gMSBcdTAwM2NcdTAwM2MgbmV3X29yZGVyO1xuLS1cbm1tL2h1Z2V0bGIuYz0xMzg0PXN0YXRpYyB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiLmMtMTM4OS1cdCAqL1xubW0vaHVnZXRsYi5jOjEzOTA6XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKVxubW0vaHVnZXRsYi5jLTEzOTEtXHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oZm9saW8pO1xuLS1cbm1tL21lbW9yeS5jPTU0Njg9dm1fZmF1bHRfdCBkb19zZXRfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9tZW1vcnkuYy01NDk5LVx0ICovXG5tbS9tZW1vcnkuYzo1NTAwOlx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSlcbm1tL21lbW9yeS5jLTU1MDEtXHRcdHJldHVybiByZXQ7XG4tLVxubW0vc2htZW0uYz0zMjg4PXN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5tbS9zaG1lbS5jLTMzMjYtXHRcdFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFx1MDAyNlx1MDAyNlxubW0vc2htZW0uYzozMzI3Olx0XHRcdCAgICBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcbm1tL3NobWVtLmMtMzMyOC1cdFx0XHRcdGZhbGxiYWNrX3BhZ2VfY29weSA9IHRydWU7XG4tLVxubW0vc2htZW0uYz0zNDc1PXN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4tLVxubW0vc2htZW0uYy0zNTE2LVx0XHRcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbm1tL3NobWVtLmM6MzUxNzpcdFx0XHQgICAgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG5tbS9zaG1lbS5jLTM1MTgtXHRcdFx0XHRmYWxsYmFja19wYWdlX3NwbGljZSA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzI5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMjM6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fdGVzdF9od3BvaXNvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9odWdldGxiZnMvaW5vZGUuYz0yMTk9c3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMjYwLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MjYxOlx0XHRcdGlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0yNjItXHRcdFx0XHR3YW50ID0gbnI7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA4Nj1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbylcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwODcte1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA4ODpcdHJldHVybiBmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSB8fFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA4OS1cdCAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTtcbi0tXG5tbS9odWdldGxiLmM9MTI0Nz1zdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fbm9kZV9leGFjdChzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0xMjU3LVxubW0vaHVnZXRsYi5jOjEyNTg6XHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbm1tL2h1Z2V0bGIuYy0xMjU5LVx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL2h1Z2V0bGIuYz0zOTgzPWxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbi0tXG5tbS9odWdldGxiLmMtNDAwNS1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCBuZXh0LCBcdTAwMjZzcmMtXHUwMDNlaHVnZXBhZ2VfZnJlZWxpc3RzW25vZGVdLCBscnUpIHtcbm1tL2h1Z2V0bGIuYzo0MDA2Olx0XHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbm1tL2h1Z2V0bGIuYy00MDA3LVx0XHRcdFx0Y29udGludWU7XG4tLVxubW0vaHVnZXRsYi5jPTU2OTY9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL2h1Z2V0bGIuYy01ODE2LVx0XHQgKi9cbm1tL2h1Z2V0bGIuYzo1ODE3Olx0XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKSB7XG5tbS9odWdldGxiLmMtNTgxOC1cdFx0XHRyZXQgPSBWTV9GQVVMVF9IV1BPSVNPTl9MQVJHRSB8XG4tLVxubW0vaHVnZXRsYi5jPTYxNjg9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcbi0tXG5tbS9odWdldGxiLmMtNjMyNS1cdHJldCA9IC1FSU87XG5tbS9odWdldGxiLmM6NjMyNjpcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbm1tL2h1Z2V0bGIuYy02MzI3LVx0XHRnb3RvIG91dF9yZWxlYXNlX3VubG9jaztcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE4MjU9Ym9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4MzEtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE4MzI6XHRpZiAoIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODMzLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz03NTQ9c3RhdGljIHN0cnVjdCBmb2xpbyAqX19rdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzc2LVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo3Nzc6XHRpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpIHtcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzc4LVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY1MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX2NsZWFyX2h1Z2V0bGImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmg9NjExPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NjEyOnZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjEzLVx0e1x0dm9pZCAqcHJpdmF0ZSA9IFx1MDAyNmZvbGlvLVx1MDAzZXByaXZhdGU7XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NjI4PXN0YXRpYyBpbmxpbmUgdm9pZFx0XHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo2Mjk6Zm9saW9fY2xlYXJfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjMwLVx0eyB9XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9ODc3PWludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTg4MC0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo4ODE6ZXh0ZXJuIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTg4Mi0jZWxzZVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODgzOnN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04ODQte1xuLS1cbm1tL2h1Z2V0bGIuYz0xMjQ3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb19ub2RlX2V4YWN0KHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTEyNjUtXHRcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7XG5tbS9odWdldGxiLmM6MTI2NjpcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9mcmVlZChmb2xpbyk7XG5tbS9odWdldGxiLmMtMTI2Ny1cdFx0aC1cdTAwM2VmcmVlX2h1Z2VfcGFnZXMtLTtcbi0tXG5tbS9odWdldGxiLmM9MTM3Nz1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywgaW50IG5pZCxcbi0tXG5tbS9odWdldGxiLmMtMTM4My1cbm1tL2h1Z2V0bGIuYzoxMzg0OnN0YXRpYyB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2h1Z2V0bGIuYy0xMzg1LXtcbi0tXG5tbS9odWdldGxiLmMtMTM5MC1cdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpXG5tbS9odWdldGxiLmM6MTM5MTpcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XG5tbS9odWdldGxiLmMtMTM5Mi1cbm1tL2h1Z2V0bGIuYzoxMzkzOlx0X19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0xMzk0LX1cbi0tXG5tbS9odWdldGxiLmM9MTQwND12b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vaHVnZXRsYi5jLTE0MTgtXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX2ZyZWVkKGZvbGlvKSkge1xubW0vaHVnZXRsYi5jOjE0MTk6XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfZnJlZWQoZm9saW8pO1xubW0vaHVnZXRsYi5jLTE0MjAtXHRcdGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzLS07XG4tLVxubW0vaHVnZXRsYi5jLTE0MzMtXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpXG5tbS9odWdldGxiLmM6MTQzNDpcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG5tbS9odWdldGxiLmMtMTQzNS1cbi0tXG5tbS9odWdldGxiLmM9MTQ3MD1zdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTE1MDctXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbm1tL2h1Z2V0bGIuYzoxNTA4Olx0XHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0xNTA5LVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi0tXG5tbS9odWdldGxiLmM9MTU4Nj1zdGF0aWMgdm9pZCBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0xNjAyLVx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbm1tL2h1Z2V0bGIuYzoxNjAzOlx0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xubW0vaHVnZXRsYi5jLTE2MDQtXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4tLVxubW0vaHVnZXRsYi5jLTE2MjctXHRcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG5tbS9odWdldGxiLmM6MTYyODpcdFx0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xubW0vaHVnZXRsYi5jLTE2MjktXHRcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi0tXG5tbS9odWdldGxiLmM9MTYzNz1zdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0xNjYwLVx0ICogV2l0aG91dCBIVk8gZW5hYmxlZCwgcmV0IHdpbGwgYmUgMCBhbmQgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsXG5tbS9odWdldGxiLmM6MTY2MTpcdCAqIGZvbGlvX2NsZWFyX2h1Z2V0bGIgYXMgdGhpcyB3YXMgZG9uZSBwcmV2aW91c2x5LlxubW0vaHVnZXRsYi5jLTE2NjItXHQgKi9cbi0tXG5tbS9odWdldGxiLmMtMTY2Ny1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmb2xpbywgXHUwMDI2bm9uX2h2b19mb2xpb3MsIGxydSlcbm1tL2h1Z2V0bGIuYzoxNjY4Olx0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xubW0vaHVnZXRsYi5jLTE2NjktXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuLS1cbm1tL2h1Z2V0bGIuYz0xNjg5PXZvaWQgZnJlZV9odWdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jLTE3MDgtXHRyZXN0b3JlX3Jlc2VydmUgPSBmb2xpb190ZXN0X2h1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYzoxNzA5Olx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTE3MTAtXG4tLVxubW0vaHVnZXRsYi5jLTE3MzAtXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcbm1tL2h1Z2V0bGIuYzoxNzMxOlx0Zm9saW9fY2xlYXJfaHVnZXRsYl9taWdyYXRhYmxlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0xNzMyLVx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfZm9saW8oaHN0YXRlX2luZGV4KGgpLFxuLS1cbm1tL2h1Z2V0bGIuYz0yNTY1PXZvaWQgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNTgyLVx0XHRcdCAqL1xubW0vaHVnZXRsYi5jOjI1ODM6XHRcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTI1ODQtXHRcdGVsc2UgaWYgKHJjKVxuLS1cbm1tL2h1Z2V0bGIuYz01MTQ2PXZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTI4My1cdFx0XHRcdCAqL1xubW0vaHVnZXRsYi5jOjUyODQ6XHRcdFx0XHRmb2xpb19jbGVhcl9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XG5tbS9odWdldGxiLmMtNTI4NS1cdFx0XHRlbHNlIGlmIChyYylcbi0tXG5tbS9odWdldGxiLmM9NTYzMz1pbnQgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9odWdldGxiLmMtNTY0Ny1cdH1cbm1tL2h1Z2V0bGIuYzo1NjQ4Olx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vaHVnZXRsYi5jLTU2NDktXG4tLVxubW0vaHVnZXRsYi5jPTcxMzM9Ym9vbCBmb2xpb19pc29sYXRlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdldGxiLmMtNzE0My1cdH1cbm1tL2h1Z2V0bGIuYzo3MTQ0Olx0Zm9saW9fY2xlYXJfaHVnZXRsYl9taWdyYXRhYmxlKGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy03MTQ1LVx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBsaXN0KTtcbi0tXG5tbS9odWdldGxiLmM9NzE5MD12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pXG4tLVxubW0vaHVnZXRsYi5jLTcyMTEtXHRcdGZvbGlvX3NldF9odWdldGxiX3RlbXBvcmFyeShvbGRfZm9saW8pO1xubW0vaHVnZXRsYi5jOjcyMTI6XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfdGVtcG9yYXJ5KG5ld19mb2xpbyk7XG5tbS9odWdldGxiLmMtNzIxMy1cbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYz0zOTU9c3RhdGljIGludCBfX2h1Z2V0bGJfdm1lbW1hcF9yZXN0b3JlX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmMtNDE5LVx0aWYgKCFyZXQpXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo0MjA6XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pO1xubW0vaHVnZXRsYl92bWVtbWFwLmMtNDIxLVxuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTUyMj1zdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvKGNvbnN0IHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmMtNTc3LVx0aWYgKHJldClcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjU3ODpcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbyk7XG5tbS9odWdldGxiX3ZtZW1tYXAuYy01NzktXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xOTI4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5NDYtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE5NDc6dm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5NDgte1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTk1Nz1zdGF0aWMgaW50IGdldF9odWdlX3BhZ2VfZm9yX2h3cG9pc29uKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTk4LVx0aWYgKGNvdW50X2luY3JlYXNlZCBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9odWdldGxiX21pZ3JhdGFibGUoZm9saW8pKSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjE5OTk6XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfbWlncmF0YWJsZShmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwMDAtXHRcdCptaWdyYXRhYmxlX2NsZWFyZWQgPSB0cnVlO1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MjAyNT1zdGF0aWMgaW50IHRyeV9tZW1vcnlfZmFpbHVyZV9odWdldGxiKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDYyLVx0aWYgKGh3cG9pc29uX2ZpbHRlcihwKSkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyMDYzOlx0XHRmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjA2NC1cdFx0aWYgKG1pZ3JhdGFibGVfY2xlYXJlZClcbi0tXG5tbS9ybWFwLmM9MzE0Mj12b2lkIGh1Z2V0bGJfYWRkX25ld19hbm9uX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtMzE1MC1cdGF0b21pY19zZXQoXHUwMDI2Zm9saW8tXHUwMDNlX2xhcmdlX21hcGNvdW50LCAwKTtcbm1tL3JtYXAuYzozMTUxOlx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xubW0vcm1hcC5jLTMxNTItXHRfX2ZvbGlvX3NldF9hbm9uKGZvbGlvLCB2bWEsIGFkZHJlc3MsIHRydWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQ5OQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZm9saW9fY2xlYXJfaHVnZXRsYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTM4ND1zdGF0aWMgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jLTEzOTItXG5tbS9odWdldGxiLmM6MTM5MzpcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG5tbS9odWdldGxiLmMtMTM5NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDIzOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjMwCgkJCQkJCQlvdXRwdXQ6IDIyNAoJCQkJCQkJdGhvdWdodHM6IDI2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBmb2xpb19jbGVhcl9odWdldGxiYCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHJlbmFtZXMgYF9fZm9saW9fY2xlYXJfaHVnZXRsYmAgdG8gYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIGFuZCwgaW1wb3J0YW50bHksIGl0IGFsc28gY2xlYXJzIHRoZSBgaHdwb2lzb25gIGZsYWcgaWYgc2V0LiBUaGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGNsZWFyIG9uZS4gTWFrZXMgc2Vuc2UuCgpOb3csIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFRoZSBwYXRjaCBkZXNjcmlwdGlvbiBtZW50aW9ucyBgSFVHRVRMQkZTYCBhbmQgYE1FTU9SWV9GQUlMVVJFYC4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRob3NlIGFyZSBjb3JyZWN0Li4uIFllcCwgYEhVR0VUTEJGU2AgaXMgaW4gYGZzL0tjb25maWdgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgIGlzIGluIGBtbS9LY29uZmlnYCwganVzdCBhcyBleHBlY3RlZC4KCkZvciB0aGUgZm9jdXMgc3ltYm9scywgSSBpbml0aWFsbHkgam90dGVkIGRvd24gYGZyZWVfaHVnZV9mb2xpb2AsIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gLCBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYCwgYF9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbmAsIGFuZCBgaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX2ZvbGlvYC4gQWN0dWFsbHksIGxldCYjMzk7cyByZW1vdmUgYF9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbmAuIEl0JiMzOTtzIHJlbGF0ZWQsIGJ1dCBub3QgcmVhbGx5IGEgY29yZSBmb2N1cyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGNoYW5nZS4gVGhlIGZpcnN0IHRocmVlIHN5bWJvbHMgYXJlIG1vcmUgdGhhbiBlbm91Z2g6IGBmcmVlX2h1Z2VfZm9saW9gLCBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCwgYW5kIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgLiBUaG9zZSB3aWxsIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGVyZSB0aGlzIGNoYW5nZSB0b3VjaGVzLgoKT2theSwgSSYjMzk7bSBzYXRpc2ZpZWQuIFRpbWUgdG8gdXNlIGBzZXQtcmVzdWx0c2AgYW5kIHN1Ym1pdCB0aGlzIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAyMzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnJlZV9odWdlX2ZvbGlvJiMzNDssCiAgICAmIzM0O2Rpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICAgJiMzNDtkZW1vdGVfcG9vbF9odWdlX3BhZ2UmIzM0OywKICAgICYjMzQ7X19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIHRoYXQgd3JhcHMgYF9fZm9saW9fY2xlYXJfaHVnZXRsYmAgYW5kIGFkZHMgbG9naWMgdG8gbW92ZSB0aGUgSFdQb2lzb24gZmxhZyB0byBlYWNoIGVycm9yIHBhZ2UgaWYgdGhlIGZvbGlvIGhhcyBod3BvaXNvbmVkIHBhZ2VzLiBJdCByZXBsYWNlcyBjYWxscyB0byBgX19mb2xpb19jbGVhcl9odWdldGxiYCB3aXRoIGBmb2xpb19jbGVhcl9odWdldGxiYCBpbiBzZXZlcmFsIHBsYWNlcywgY2hhbmdpbmcgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgYW5kIGVuc3VyaW5nIHRoZSBIV1BvaXNvbiBmbGFnIGlzIHByb3Blcmx5IGhhbmRsZWQgd2hlbiBhIEh1Z2VUTEIgZm9saW8gaXMgcmVtb3ZlZCBvciBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKEh1Z2VUTEIgYW5kIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nKSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBIdWdlVExCIGFsbG9jYXRpb24vZnJlZWluZyBhbmQgbWVtb3J5IGZhaWx1cmUgaW5qZWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmcmVlX2h1Z2VfZm9saW8mIzM0OywKICAgICYjMzQ7ZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvJiMzNDssCiAgICAmIzM0O2RlbW90ZV9wb29sX2h1Z2VfcGFnZSYjMzQ7LAogICAgJiMzNDtfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgZm9saW9fY2xlYXJfaHVnZXRsYmAgdGhhdCB3cmFwcyBgX19mb2xpb19jbGVhcl9odWdldGxiYCBhbmQgYWRkcyBsb2dpYyB0byBtb3ZlIHRoZSBIV1BvaXNvbiBmbGFnIHRvIGVhY2ggZXJyb3IgcGFnZSBpZiB0aGUgZm9saW8gaGFzIGh3cG9pc29uZWQgcGFnZXMuIEl0IHJlcGxhY2VzIGNhbGxzIHRvIGBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGJgIHdpdGggYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIGluIHNldmVyYWwgcGxhY2VzLCBjaGFuZ2luZyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBhbmQgZW5zdXJpbmcgdGhlIEhXUG9pc29uIGZsYWcgaXMgcHJvcGVybHkgaGFuZGxlZCB3aGVuIGEgSHVnZVRMQiBmb2xpbyBpcyByZW1vdmVkIG9yIGZyZWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoSHVnZVRMQiBhbmQgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcpIGFuZCBpcyByZWFjaGFibGUgdmlhIEh1Z2VUTEIgYWxsb2NhdGlvbi9mcmVlaW5nIGFuZCBtZW1vcnkgZmFpbHVyZSBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzoyODowNi44NTQ2NDk5NTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk1NDgzMDIyOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZyZWVfaHVnZV9mb2xpb1wiLFxuICAgIFwiZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJkZW1vdGVfcG9vbF9odWdlX3BhZ2VcIixcbiAgICBcIl9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIHRoYXQgd3JhcHMgYF9fZm9saW9fY2xlYXJfaHVnZXRsYmAgYW5kIGFkZHMgbG9naWMgdG8gbW92ZSB0aGUgSFdQb2lzb24gZmxhZyB0byBlYWNoIGVycm9yIHBhZ2UgaWYgdGhlIGZvbGlvIGhhcyBod3BvaXNvbmVkIHBhZ2VzLiBJdCByZXBsYWNlcyBjYWxscyB0byBgX19mb2xpb19jbGVhcl9odWdldGxiYCB3aXRoIGBmb2xpb19jbGVhcl9odWdldGxiYCBpbiBzZXZlcmFsIHBsYWNlcywgY2hhbmdpbmcgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgYW5kIGVuc3VyaW5nIHRoZSBIV1BvaXNvbiBmbGFnIGlzIHByb3Blcmx5IGhhbmRsZWQgd2hlbiBhIEh1Z2VUTEIgZm9saW8gaXMgcmVtb3ZlZCBvciBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKEh1Z2VUTEIgYW5kIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nKSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBIdWdlVExCIGFsbG9jYXRpb24vZnJlZWluZyBhbmQgbWVtb3J5IGZhaWx1cmUgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzoyODowNi44NTQ2NTY2NjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMDUyNDk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMxZTVhNjczZGYwNzY2NTc2MTMzNTRhMWRmY2NkY2RiZGZkMTY0NThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjkgMjM6Mjg6MDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXFxuaW5kZXggNTcxMjEyYjgwODM1ZS4uMjdlZTJkZmFhZmE2MyAxMDA2NDRcXG4tLS0gYS9tbS9odWdldGxiLmNcXG4rKysgYi9tbS9odWdldGxiLmNcXG5AQCAtMTM4MSw2ICsxMzgxLDE4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnRcXG4gfVxcbiAjZW5kaWZcXG4gXFxuK3N0YXRpYyB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHQvKlxcbitcXHQgKiBNb3ZlIEhXUG9pc29uIGZsYWcgdG8gZWFjaCBlcnJvciBwYWdlXFxuK1xcdCAqIHdoaWNoIG1ha2VzIGFueSBoZWFsdGh5IHBhZ2VzIHJldXNhYmxlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSlcXG4rXFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XFxuK1xcbitcXHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBSZW1vdmUgaHVnZXRsYiBmb2xpbyBmcm9tIGxpc3RzLlxcbiAgKiBJZiB2bWVtbWFwIGV4aXN0cyBmb3IgdGhlIGZvbGlvLCBjbGVhciB0aGUgaHVnZXRsYiBmbGFnIHNvIHRoYXQgdGhlXFxuQEAgLTE0MTksNyArMTQzMSw3IEBAIHZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0ICogdG8gdGFpbCBzdHJ1Y3QgcGFnZXMuXFxuIFxcdCAqL1xcbiBcXHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbykpXFxuLVxcdFxcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XFxuK1xcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbiBcXG4gXFx0aC1cXHUwMDNlbnJfaHVnZV9wYWdlcy0tO1xcbiBcXHRoLVxcdTAwM2Vucl9odWdlX3BhZ2VzX25vZGVbbmlkXS0tO1xcbkBAIC0xNDkzLDE3ICsxNTA1LDEwIEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0ICovXFxuIFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XFxuIFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuLVxcdFxcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XFxuK1xcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbiBcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuIFxcdH1cXG4gXFxuLVxcdC8qXFxuLVxcdCAqIE1vdmUgUGFnZUhXUG9pc29uIGZsYWcgZnJvbSBoZWFkIHBhZ2UgdG8gdGhlIHJhdyBlcnJvciBwYWdlcyxcXG4tXFx0ICogd2hpY2ggbWFrZXMgYW55IGhlYWx0aHkgc3VicGFnZXMgcmV1c2FibGUuXFxuLVxcdCAqL1xcbi1cXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKVxcbi1cXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTtcXG4tXFxuIFxcdFZNX0JVR19PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XFxuIFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfY21hKGZvbGlvKSlcXG4gXFx0XFx0aHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oZm9saW8pO1xcbkBAIC0xNTk1LDcgKzE2MDAsNyBAQCBzdGF0aWMgdm9pZCBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLFxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIHRfZm9saW8sIG5vbl9odm9fZm9saW9zLCBscnUpIHtcXG4gXFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUpO1xcbiBcXHRcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbi1cXHRcXHRcXHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbitcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcXG4gXFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbiBcXHRcXHRcXHR1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpO1xcbiBcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5AQCAtMTYyMCw3ICsxNjI1LDcgQEAgc3RhdGljIHZvaWQgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCxcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUpO1xcbiBcXHRcXHRcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbi1cXHRcXHRcXHRcXHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbitcXHRcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcXG4gXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbiBcXHRcXHRcXHRcXHR1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpO1xcbiBcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5AQCAtMTY1MywxNCArMTY1OCwxNCBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLFxcbiBcXHQgKiBzaG91bGQgb25seSBiZSBwYWdlcyBvbiB0aGUgbm9uX2h2b19mb2xpb3MgbGlzdC5cXG4gXFx0ICogRG8gbm90ZSB0aGF0IHRoZSBub25faHZvX2ZvbGlvcyBsaXN0IGNvdWxkIGJlIGVtcHR5LlxcbiBcXHQgKiBXaXRob3V0IEhWTyBlbmFibGVkLCByZXQgd2lsbCBiZSAwIGFuZCB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGxcXG4tXFx0ICogX19mb2xpb19jbGVhcl9odWdldGxiIGFzIHRoaXMgd2FzIGRvbmUgcHJldmlvdXNseS5cXG4rXFx0ICogZm9saW9fY2xlYXJfaHVnZXRsYiBhcyB0aGlzIHdhcyBkb25lIHByZXZpb3VzbHkuXFxuIFxcdCAqL1xcbiBcXHRWTV9XQVJOX09OKCFsaXN0X2VtcHR5KGZvbGlvX2xpc3QpKTtcXG4gXFx0Vk1fV0FSTl9PTihyZXQgXFx1MDAzYyAwKTtcXG4gXFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZub25faHZvX2ZvbGlvcykgXFx1MDAyNlxcdTAwMjYgcmV0KSB7XFxuIFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuIFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZm9saW8sIFxcdTAwMjZub25faHZvX2ZvbGlvcywgbHJ1KVxcbi1cXHRcXHRcXHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xcbitcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcXG4gXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzoyODowNy4yODY1ODc3MzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMTkxMTYzNTU3OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZyZWVfaHVnZV9mb2xpb1wiLFxuICAgIFwiZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJkZW1vdGVfcG9vbF9odWdlX3BhZ2VcIixcbiAgICBcIl9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIHRoYXQgd3JhcHMgYF9fZm9saW9fY2xlYXJfaHVnZXRsYmAgYW5kIGFkZHMgbG9naWMgdG8gbW92ZSB0aGUgSFdQb2lzb24gZmxhZyB0byBlYWNoIGVycm9yIHBhZ2UgaWYgdGhlIGZvbGlvIGhhcyBod3BvaXNvbmVkIHBhZ2VzLiBJdCByZXBsYWNlcyBjYWxscyB0byBgX19mb2xpb19jbGVhcl9odWdldGxiYCB3aXRoIGBmb2xpb19jbGVhcl9odWdldGxiYCBpbiBzZXZlcmFsIHBsYWNlcywgY2hhbmdpbmcgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgYW5kIGVuc3VyaW5nIHRoZSBIV1BvaXNvbiBmbGFnIGlzIHByb3Blcmx5IGhhbmRsZWQgd2hlbiBhIEh1Z2VUTEIgZm9saW8gaXMgcmVtb3ZlZCBvciBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKEh1Z2VUTEIgYW5kIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nKSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBIdWdlVExCIGFsbG9jYXRpb24vZnJlZWluZyBhbmQgbWVtb3J5IGZhaWx1cmUgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMWU1YTY3M2RmMDc2NjU3NjEzMzU0YTFkZmNjZGNkYmRmZDE2NDU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMjM6Mjg6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWUuLjI3ZWUyZGZhYWZhNjMgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTEzODEsNiArMTM4MSwxOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywgaW50XG4gfVxuICNlbmRpZlxuIFxuK3N0YXRpYyB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHQvKlxuK1x0ICogTW92ZSBIV1BvaXNvbiBmbGFnIHRvIGVhY2ggZXJyb3IgcGFnZVxuK1x0ICogd2hpY2ggbWFrZXMgYW55IGhlYWx0aHkgcGFnZXMgcmV1c2FibGUuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpXG4rXHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oZm9saW8pO1xuK1xuK1x0X19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbit9XG4rXG4gLypcbiAgKiBSZW1vdmUgaHVnZXRsYiBmb2xpbyBmcm9tIGxpc3RzLlxuICAqIElmIHZtZW1tYXAgZXhpc3RzIGZvciB0aGUgZm9saW8sIGNsZWFyIHRoZSBodWdldGxiIGZsYWcgc28gdGhhdCB0aGVcbkBAIC0xNDE5LDcgKzE0MzEsNyBAQCB2b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHQgKiB0byB0YWlsIHN0cnVjdCBwYWdlcy5cbiBcdCAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pKVxuLVx0XHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuK1x0XHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbiBcbiBcdGgtXHUwMDNlbnJfaHVnZV9wYWdlcy0tO1xuIFx0aC1cdTAwM2Vucl9odWdlX3BhZ2VzX25vZGVbbmlkXS0tO1xuQEAgLTE0OTMsMTcgKzE1MDUsMTAgQEAgc3RhdGljIHZvaWQgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuIFx0ICovXG4gXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4tXHRcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4rXHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuIFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdH1cbiBcbi1cdC8qXG4tXHQgKiBNb3ZlIFBhZ2VIV1BvaXNvbiBmbGFnIGZyb20gaGVhZCBwYWdlIHRvIHRoZSByYXcgZXJyb3IgcGFnZXMsXG4tXHQgKiB3aGljaCBtYWtlcyBhbnkgaGVhbHRoeSBzdWJwYWdlcyByZXVzYWJsZS5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKSlcbi1cdFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XG4tXG4gXHRWTV9CVUdfT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pO1xuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9jbWEoZm9saW8pKVxuIFx0XHRodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhmb2xpbyk7XG5AQCAtMTU5NSw3ICsxNjAwLDcgQEAgc3RhdGljIHZvaWQgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCxcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCB0X2ZvbGlvLCBub25faHZvX2ZvbGlvcywgbHJ1KSB7XG4gXHRcdFx0bGlzdF9kZWwoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1KTtcbiBcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4tXHRcdFx0X19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbitcdFx0XHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbiBcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdFx0XHR1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpO1xuIFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuQEAgLTE2MjAsNyArMTYyNSw3IEBAIHN0YXRpYyB2b2lkIGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdGxpc3RfZGVsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSk7XG4gXHRcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4tXHRcdFx0XHRfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pO1xuK1x0XHRcdFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XG4gXHRcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcdFx0XHRcdHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XG4gXHRcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbkBAIC0xNjUzLDE0ICsxNjU4LDE0IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrKHN0cnVjdCBoc3RhdGUgKmgsXG4gXHQgKiBzaG91bGQgb25seSBiZSBwYWdlcyBvbiB0aGUgbm9uX2h2b19mb2xpb3MgbGlzdC5cbiBcdCAqIERvIG5vdGUgdGhhdCB0aGUgbm9uX2h2b19mb2xpb3MgbGlzdCBjb3VsZCBiZSBlbXB0eS5cbiBcdCAqIFdpdGhvdXQgSFZPIGVuYWJsZWQsIHJldCB3aWxsIGJlIDAgYW5kIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsbFxuLVx0ICogX19mb2xpb19jbGVhcl9odWdldGxiIGFzIHRoaXMgd2FzIGRvbmUgcHJldmlvdXNseS5cbitcdCAqIGZvbGlvX2NsZWFyX2h1Z2V0bGIgYXMgdGhpcyB3YXMgZG9uZSBwcmV2aW91c2x5LlxuIFx0ICovXG4gXHRWTV9XQVJOX09OKCFsaXN0X2VtcHR5KGZvbGlvX2xpc3QpKTtcbiBcdFZNX1dBUk5fT04ocmV0IFx1MDAzYyAwKTtcbiBcdGlmICghbGlzdF9lbXB0eShcdTAwMjZub25faHZvX2ZvbGlvcykgXHUwMDI2XHUwMDI2IHJldCkge1xuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZm9saW8sIFx1MDAyNm5vbl9odm9fZm9saW9zLCBscnUpXG4tXHRcdFx0X19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbitcdFx0XHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcbiBcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzoyODowNy4yODY1OTAzMjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTk5NzcxMzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZXRsYiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9odWdldGxiLmNgLiBJdCdzIGludHJvZHVjaW5nIGBmb2xpb19jbGVhcl9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoZSBsb2dpYyBmbG93IGlzIHN0cmFpZ2h0Zm9yd2FyZDogaWYgYSBmb2xpbyBpcyBoYXJkd2FyZSBwb2lzb25lZCAoYXMgaW5kaWNhdGVkIGJ5IGBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKWApLCBpdCBjYWxscyBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbylgIGFuZCB0aGVuIHVuY29uZGl0aW9uYWxseSBjYWxscyBgX19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKWAuIFNlZW1zIGxpa2UgYSBzZW5zaWJsZSBhcHByb2FjaCBmb3IgY2xlYW5pbmcgdXAgaHVnZSBwYWdlIGVudHJpZXMuXG5cbldoYXQncyBpbW1lZGlhdGVseSBjYXRjaGluZyBteSBleWUgaXMgdGhhdCB0aGlzIHBhdGNoIGlzICpyZXBsYWNpbmcqIHNldmVyYWwgaW5zdGFuY2VzIG9mIGBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pYCB3aXRoIHRoZSBuZXcgYGZvbGlvX2NsZWFyX2h1Z2V0bGIoZm9saW8pYCBmdW5jdGlvbi4gVGhpcyBzdWdnZXN0cyBhIHNoaWZ0IGluIGhvdyB3ZSBoYW5kbGUgcG90ZW50aWFsbHkgcG9pc29uZWQgcGFnZXMgZHVyaW5nIHRoZSBjbGVhbnVwIHByb2Nlc3MuIEFsc28sIGl0IGFwcGVhcnMgYSBibG9jayBvZiBjb2RlIHJlbGF0ZWQgdG8gaGFuZGxpbmcgdGhlIGBQYWdlSFdQb2lzb25gIGZsYWcgaW4gYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIGhhcyBiZWVuIHJlbW92ZWQuIFNwZWNpZmljYWxseSwgaXQncyBkaXRjaGluZyB0aGUgbWFudWFsIG1vdmUgb2YgYFBhZ2VIV1BvaXNvbmAgdG8gdGhlIFwicmF3IGVycm9yIHBhZ2VzXCIuXG5cbldhaXQgYSBzZWNvbmTigKYgSSBzZWUgdGhhdCB0aGUgbmV3IGNvZGUgdXNlcyBgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbylgIHdoZXJlIHRoZSBvbGQgY29kZSB1c2VkIGBmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBkaWZmZXJlbmNlIGFuZCBpbXBsaWNhdGlvbnMgaGVyZS4gVGhleSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBoYXJkd2FyZSBwb2lzb24gZmxhZyBpcyBzZXQgYW5kIGNsZWFyZWQuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbnMgb2YgdGhvc2UgbWFjcm9zLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoaXMgZnJvbSBhIHRlc3RpbmcgcGVyc3BlY3RpdmUuIFRoaXMgaXMgaHVnZXRsYiwgd2hpY2ggaXMgYSBjcml0aWNhbCBwYXJ0IG9mIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCdzIGEgaGlnaC12YWx1ZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBhIGZldyBrZXkgZnVuY3Rpb25zOiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AsIGBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcmAsIGFuZCBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGtgLiBUaGVzZSBhcmUgYWxsIHBhcnRzIG9mIHRoZSBjb2RlIGJhc2UgdGhhdCBhcmUgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyBhbmQgbWFuYWdpbmcgbWVtb3J5IHBhZ2VzLiBUaGF0J3MgZ29vZCBjb3ZlcmFnZSBmb3IgYSBmdXp6aW5nIGNhbXBhaWduLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBhY3R1YWxseSBkb2VzLiBJJ20gZ29pbmcgdG8gcnVuIGEgYGdyZXBwZXJgIHNlYXJjaCBmb3IgdGhhdCBmdW5jdGlvbiB0byBzZWUgd2hlcmUgaXQncyBkZWZpbmVkIGFuZCBob3cgaXQncyB1c2VkLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIHdpdGggdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjI4OjEzLjQ4NjM2NTU3MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA0NDA4OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9ODc3PWludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODgwLSNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo4ODE6ZXh0ZXJuIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04ODItI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo4ODM6c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04ODQte1xcbi0tXFxubW0vaHVnZXRsYi5jPTEzODQ9c3RhdGljIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jLTEzOTAtXFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKSlcXG5tbS9odWdldGxiLmM6MTM5MTpcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMTM5Mi1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTkyOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5NDYtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxOTQ3OnZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTk0OC17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIwMjU9c3RhdGljIGludCB0cnlfbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDYyLVxcdGlmIChod3BvaXNvbl9maWx0ZXIocCkpIHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIwNjM6XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDY0LVxcdFxcdGlmIChtaWdyYXRhYmxlX2NsZWFyZWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjI4OjE1LjY5MDc4MDYyNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NTMzODI3NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZXRsYiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL2h1Z2V0bGIuY2AsIHdoaWNoIG1lYW5zIGl0J3MgZGVmaW5pdGVseSBpbiBhIGNyaXRpY2FsIGFyZWEuIEl0IGxvb2tzIGxpa2UgaXQncyByZWZpbmluZyBob3cgaHVnZSBwYWdlIGZhdWx0IGhhbmRsaW5nIHdvcmtzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5LiBUaGUgaW50cm9kdWN0aW9uIG9mIGBmb2xpb19jbGVhcl9odWdldGxiYCBpcyB0aGUga2V5LiBJdCB3cmFwcyB1cCB0aGUgbG9naWMsIGNhbGxpbmcgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIG9ubHkgd2hlbiBhIGZvbGlvIGlzIGFjdHVhbGx5IGZsYWdnZWQgYXMgYmVpbmcgaGFyZHdhcmUtcG9pc29uZWQuIFRoYXQncyBnb29kLCBpdCBzdWdnZXN0cyBhIG1vcmUgZWZmaWNpZW50IGFuZCB0YXJnZXRlZCBhcHByb2FjaC5cblxuVGhlIHJlcGxhY2VtZW50IG9mIGBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGJgIGNhbGxzIHdpdGggYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIGlzIGEgY2xlYW4tdXAsIGNvbnNvbGlkYXRpbmcgdGhlIGxvZ2ljIHVuZGVyIGEgc2luZ2xlIGZ1bmN0aW9uLiBBbmQgdGhlbiwgdGhlIHJlbW92YWwgb2YgdGhlIHNwZWNpZmljIGNhbGwgdG8gYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGZyb20gYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gLi4ucmlnaHQsIGJlY2F1c2UgYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIG5vdyBoYW5kbGVzIHRoYXQgY29uZGl0aW9uYWwgY2hlY2suIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgbGVzcyBkdXBsaWNhdGlvbiwgaW1wcm92ZWQgbWFpbnRhaW5hYmlsaXR5LlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgc2VlbXMgc291bmQuIEl0J3MgYSBmb2N1c2VkIHJlZmFjdG9yaW5nIHRoYXQgc2hvdWxkIGltcHJvdmUgcGVyZm9ybWFuY2UgYW5kIGNsYXJpdHkgd2l0aGluIHRoZSBodWdldGxiIHN1YnN5c3RlbS4gTm93LCB0aGUgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGZ1bmN0aW9uLCBhcyBleHBlY3RlZCwgaXMgZ2F0ZWQgYnkgYENPTkZJR19NRU1PUllfRkFJTFVSRWAuIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMgYWxzbyBlbmFibGVkLCBhcyBleHBlY3RlZCwgYmVjYXVzZSBvZiB0aGUgZnVuY3Rpb25hbGl0eSBpbiB0aGUgZmlsZSBiZWluZyBtb2RpZmllZC4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTA0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjI4OjMxLjIyNDYxMDA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDM5MjI1NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJfUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3NoL21tL0tjb25maWc9MTU4PWNob2ljZVxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2My1cXG5hcmNoL3NoL21tL0tjb25maWc6MTY0OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcXG5hcmNoL3NoL21tL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIjY0a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTY3LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjg6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcXG5hcmNoL3NoL21tL0tjb25maWctMTY5LVxcdGJvb2wgXFxcIjI1NmtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3MS1cXG5hcmNoL3NoL21tL0tjb25maWc6MTcyOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcXG5hcmNoL3NoL21tL0tjb25maWctMTczLVxcdGJvb2wgXFxcIjFNQlxcXCJcXG5hcmNoL3NoL21tL0tjb25maWctMTc0LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzYtXFx0Ym9vbCBcXFwiNE1CXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3OC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTc5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE4MC1cXHRib29sIFxcXCI2NE1CXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG5mcy9LY29uZmlnLTI2NC1cXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI3Mi1cXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZy0yNzQtXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI3Ni1cXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG5mcy9LY29uZmlnLTI3OC1cXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG4tLVxcbm1tL0tjb25maWc9NzA2PWNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTcwOC1cXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG5tbS9LY29uZmlnLTcxMC1cXHRkZWZfYm9vbCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjI4OjMzLjYyODUzNzcwMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTkxMTAzMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6NTA1MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6Mjg6NDMuODE5NjQzNjRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwMjg2MDkxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0ZBSUxVUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03NzQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzc2LVxcbm1tL0tjb25maWc6Nzc3OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWctNzc4LVxcdGRlcGVuZHMgb24gTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjI4OjQ1LjkyMjUwOTAwOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1OTQ0MzY5MTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBtbS9odWdldGxiLmNgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGludHJvZHVjaW5nIGBmb2xpb19jbGVhcl9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pYCwgYSBuZXcgZnVuY3Rpb24gdGhhdCB3cmFwcyBgX19mb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKWAuIFRoZSBrZXkgY2hhbmdlIGhlcmUgaXMgbW92aW5nIHRoZSBjYWxsIHRvIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKWAgKmluc2lkZSogdGhpcyBuZXcgd3JhcHBlciwgcmlnaHQgYmVmb3JlIHRoZSBjb3JlIGNsZWFyIG9wZXJhdGlvbi4gUHJldmlvdXNseSwgdGhlIEhXUG9pc29uIGNsZWFyaW5nIGhhcHBlbmVkICphZnRlciogdGhlIG1haW4gY2xlYXIgYW5kIGFueSBDTUEgZnJlZWluZyBpbiBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbygpYC4gU28sIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGNvbmNlcm5pbmcgaGFyZHdhcmUgcG9pc29uaW5nIGlzIGFsdGVyZWQuXG5cbkdpdmVuIHRoaXMgcmVvcmRlcmluZywgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLCB3aGljaCBpcyBwcm9iYWJseSB0aGUgaW50ZW50LiBUaGUgZmFjdCB0aGF0IHRoZSBjYWxsIGlzICpub3cqIHVzZWQgaW4gYHJlbW92ZV9odWdldGxiX2ZvbGlvKClgLCBgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3IoKWAsIGFuZCBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGsoKWAgbWFrZXMgaXQgYSBiaXQgbW9yZSB3aWRlbHkgdXNlZCB0aGFuIGJlZm9yZS4gVGhhdCBhZGRzIHRvIHRoZSByaXNrLlxuXG5UaGlzIGZlZWxzIHJlYWNoYWJsZTsgaHVnZXRsYiBpcyBkZWZpbml0ZWx5IGEgcmVsZXZhbnQgc3Vic3lzdGVtLiBHaXZlbiB0aGF0IHdlIGFyZSBjaGFuZ2luZyB0aGUgb3JkZXIgb2YgSFdQb2lzb24gZmxhZ3MgYXJlIGNsZWFyZWQsIHRoaXMgaXMgcHJvYmFibHkgd29ydGggYSBmdXp6aW5nIGNhbXBhaWduLiBJJ20gdGhpbmtpbmcgdGhlIGNoYW5nZSBpbiBvcmRlcmluZyBhbmQgdGhlIGJyb2FkZXIgcmVhY2ggb2YgdGhlIG5ldyBgZm9saW9fY2xlYXJfaHVnZXRsYmAgZnVuY3Rpb24gbWFrZSBpdCBhIGhpZ2gtdmFsdWUgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5UbyBmb2N1cyBteSBlZmZvcnRzLCB0aGUgbGlrZWx5IHNwb3RzIHdoZXJlIGlzc3VlcyB3b3VsZCBhcmlzZSBpbmNsdWRlOiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLCBgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3JgLCBhbmQgYHVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrYC4gSSdsbCBhbHNvIGJlIGZvY3VzaW5nIG9uIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCBzaW5jZSB0aGF0IGlzIHdoZXJlIHRoZSBvcmlnaW5hbCBjb2RlIGNoYW5nZSB0b29rIHBsYWNlLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGByZW1vdmVfaHVnZXRsYl9mb2xpb2AuIEl0J3MgbGlrZWx5IHRoYXQgYSBjaGFuZ2UgdG8gdGhpcyBhcmVhIHdvdWxkIGFmZmVjdCBob3cgaGFyZHdhcmUgcG9pc29uaW5nIGlzIGhhbmRsZWQuXG5cblRoZSBjb25maWdzIHRvIGhhdmUgZW5hYmxlZCBhcmUgSFVHRVRMQkZTIGFuZCBNRU1PUllfRkFJTFVSRSwgd2hpY2ggc2VlbXMgb2J2aW91cy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AgYW5kIGB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsa2AgaW5zaWRlIGBtbS9odWdldGxiLmNgIHRvIHNlZSB0aGUgZXhhY3QgY29kZS4gSSdsbCBhbHNvIGNoZWNrIGlmIGByZW1vdmVfaHVnZXRsYl9mb2xpb2AgaXMgZXhwb3J0ZWQgb3IgZ2xvYmFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTQzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjI5OjAxLjg2Njg4MTI1MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5NDkwNjYzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xMzg0PXN0YXRpYyB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNDAzLSAqL1xcbm1tL2h1Z2V0bGIuYzoxNDA0OnZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9odWdldGxiLmMtMTQwNS1cXHRcXHRcXHQgIGJvb2wgYWRqdXN0X3N1cnBsdXMpXFxuLS1cXG5tbS9odWdldGxiX2ludGVybmFsLmg9NzE9c3RhdGljIGlubGluZSBpbnQgaHN0YXRlX25leHRfbm9kZV90b19mcmVlKHN0cnVjdCBoc3RhdGUgKmgsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQpXFxuLS1cXG5tbS9odWdldGxiX2ludGVybmFsLmgtOTQtXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oOjk1OmV4dGVybiB2b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTk2LVxcdFxcdFxcdFxcdCBib29sIGFkanVzdF9zdXJwbHVzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6Mjk6MDQuMTYxNzk1MzA2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjYwMzg5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZ1bmN0aW9uIFZpc2liaWxpdHkgYW5kIENhbGxlciBSZWxhdGlvbnNoaXBzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLCBgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3JgLCBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGtgLCBhbmQgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gLiBIbW0sIGByZW1vdmVfaHVnZXRsYl9mb2xpb2AgaXMgZ2xvYmFsLCB3aGljaCBpcyBmaW5lLCBidXQgdGhlIG90aGVyIHRocmVlLCBgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3JgLCBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGtgLCBhbmQgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIGFyZSBkZWNsYXJlZCBhcyBlaXRoZXIgc3RhdGljLlxuXG5Ob3csIHdhaXQgYSBtaW51dGUsIHRoZSBwcm9tcHQgaW4gZnJvbnQgb2YgbWUgZXhwbGljaXRseSBzdGF0ZXMgYSBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVycy4gVGhhdCdzIGEga2V5IGd1aWRlbGluZSB3ZSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gV2UgbWlnaHQgbmVlZCB0byBjb25zaWRlciByZWZhY3RvcmluZyBoZXJlLlxuXG5UaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBpZGVudGlmeSB0aGUgY2FsbGVycyBvZiB0aG9zZSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGJlaW5nIHVzZWQuIEFyZSB0aGV5IHRydWx5IGludGVybmFsLCBvciBhcmUgd2UgcG90ZW50aWFsbHkgZXhwb3NpbmcgYW4gQVBJIGltcGxpY2l0bHkgdGhyb3VnaCB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBzaG91bGQgcGVyaGFwcyBiZSBleHBvc2VkIGluIGEgbW9yZSBleHBsaWNpdCwgbm9uLXN0YXRpYyBtYW5uZXI/IEZpbmRpbmcgb3V0IHRoZSBjYWxsIHNpdGVzIGlzIGtleSBiZWZvcmUgZGVjaWRpbmcgb24gdGhlIG5leHQgc3RlcHMuIEknbGwgbmVlZCB0byB0cmFjZSBlYWNoIG9mIHRoZXNlIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlaXIgaW1wYWN0IGFuZCBpZiB0aGV5J3JlIGFjdGluZyBhcyBhIGRlLWZhY3RvIEFQSSB0aGF0IHdlIHNob3VsZCByZXZpc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MDksIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6Mjk6MDcuOTI3ODM2NDU3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzA0MTU2NTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xNTY3PXN0YXRpYyB2b2lkIHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9odWdldGxiLmMtMTU4NS1cXG5tbS9odWdldGxiLmM6MTU4NjpzdGF0aWMgdm9pZCBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLFxcbm1tL2h1Z2V0bGIuYy0xNTg3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS9odWdldGxiLmM9MTYzNz1zdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE2NTEtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG5tbS9odWdldGxiLmM6MTY1MjpcXHRcXHRidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcihoLCBmb2xpb19saXN0LCBcXHUwMDI2bm9uX2h2b19mb2xpb3MpO1xcbm1tL2h1Z2V0bGIuYy0xNjUzLVxcdFxcdGdvdG8gcmV0cnk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjI5OjEwLjYzMTk5NzA0M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDIzNzI3NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGVidWdnaW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgSXNzdWUqKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gSSd2ZSBnb3QgYHVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrYCBoaWdobGlnaHRlZCwgYW5kIEkgc2VlIGl0J3MgY2FsbGluZyBgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3JgLiAgTXkgZmlyc3QgcXVlc3Rpb24gYWx3YXlzIGhhcyB0byBiZSwgd2hhdCdzIHVwc3RyZWFtPyBXaGVyZSBkb2VzIGB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsa2AgZXZlbiAqY29tZSogZnJvbT8gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhlIGNhbGwgc3RhY2sgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIHJlc3RvcmUgZXJyb3IuICBJcyB0aGlzIGEgc3BlY2lmaWMgZGV2aWNlIGRyaXZlciwgYSBnZW5lcmFsIG1lbW9yeSByZWNsYWltIHBhdGgsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXIgd2lsbCBpbW1lZGlhdGVseSBnaXZlIG1lIGNsdWVzIGFib3V0IHRoZSBwb3RlbnRpYWwgc291cmNlIG9mIHRoZSBwcm9ibGVtLiBBbSBJIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIGVycm9yIGNvbmRpdGlvbiBpbiBhIHBhcnRpY3VsYXIgc3Vic3lzdGVtLCBvciBhIG1vcmUgZ2VuZXJhbCBpc3N1ZSBpbiBtZW1vcnkgbWFuYWdlbWVudD8gVGltZSB0byBmaXJlIHVwIHRoZSBkZWJ1Z2dlciBhbmQgdHJhY2UgdGhvc2UgY2FsbCBwYXRocy4gSSBuZWVkIHRvIGtub3cgdGhlIHdoeSBiZWZvcmUgSSBjYW4gZXZlbiB0aGluayBhYm91dCB0aGUgaG93IHRvIGZpeCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTk4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6Mjk6MTcuNjU1NzI4MjE4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYxMDAxMzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xNTg2PXN0YXRpYyB2b2lkIGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMTYzNi1cXG5tbS9odWdldGxiLmM6MTYzNzpzdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLFxcbm1tL2h1Z2V0bGIuYy0xNjM4LVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXFxuLS1cXG5tbS9odWdldGxiLmM9MjM1NT1zdGF0aWMgdm9pZCByZXR1cm5fdW51c2VkX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMzkzLVxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG5tbS9odWdldGxiLmM6MjM5NDpcXHR1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhoLCBcXHUwMDI2cGFnZV9saXN0KTtcXG5tbS9odWdldGxiLmMtMjM5NS1cXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbi0tXFxubW0vaHVnZXRsYi5jPTM2NjM9c3RhdGljIHZvaWQgdHJ5X3RvX2ZyZWVfbG93KHN0cnVjdCBoc3RhdGUgKmgsIHVuc2lnbmVkIGxvbmcgY291bnQsXFxuLS1cXG5tbS9odWdldGxiLmMtMzY5MC1cXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxubW0vaHVnZXRsYi5jOjM2OTE6XFx0dXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGsoaCwgXFx1MDAyNnBhZ2VfbGlzdCk7XFxubW0vaHVnZXRsYi5jLTM2OTItXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zNzM1PXN0YXRpYyBpbnQgc2V0X21heF9odWdlX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIHVuc2lnbmVkIGxvbmcgY291bnQsIGludCBuaWQsXFxuLS1cXG5tbS9odWdldGxiLmMtMzkwNS1cXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxubW0vaHVnZXRsYi5jOjM5MDY6XFx0dXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGsoaCwgXFx1MDAyNnBhZ2VfbGlzdCk7XFxubW0vaHVnZXRsYi5jLTM5MDctXFx0Zmx1c2hfZnJlZV9ocGFnZV93b3JrKGgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzoyOToxOS44MTY3MzQxMjNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzMzY5MjU5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOlxuXG4qKkFuYWx5emluZyBIdWdlIFBhZ2UgTWFuYWdlbWVudCBpbiB0aGUgS2VybmVsKipcblxuUmlnaHQsIGxldCdzIHNlZS4gYHNldF9tYXhfaHVnZV9wYWdlc2AuLi4geWVzLCB0aGF0J3MgYSBzZW5zaWJsZSBlbnRyeSBwb2ludC4gVGhhdCdzIHdoZXJlIEknZCBzdGFydCBkaWdnaW5nIGludG8gdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBhbmQgcGVyaGFwcyBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGZvciBodWdlIHBhZ2UgbWFuYWdlbWVudCwgZmlndXJpbmcgb3V0IGhvdyB0aGUgc3lzdGVtJ3MgbWF4aW11bSBjYXBhY2l0eSBpcyBlc3RhYmxpc2hlZC4gSXQncyBhIGtleSBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBsaW1pdHMuXG5cbmB0cnlfdG9fZnJlZV9sb3dgLi4uIHRoYXQncyBzdGF0aWMsIGludGVyZXN0aW5nLiBTdGF0aWMgbWVhbnMgaXQncyBwcm9iYWJseSBvbmx5IHZpc2libGUgd2l0aGluIGEgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdCwgbWF5YmUgcGFydCBvZiBhIG1vcmUgZm9jdXNlZCBsb3ctbWVtb3J5IHJlY2xhaW0gc3RyYXRlZ3kuIEl0IHdvdWxkbid0IGJlIGRpcmVjdGx5IGV4cG9zZWQsIG1ha2luZyBtZSB3b25kZXIgYWJvdXQgaXRzIGludGVncmF0aW9uIHdpdGggdGhlIGxhcmdlciBtZW1vcnkgbWFuYWdlbWVudCBwaWN0dXJlIGFuZCBob3cgaXQgcmVhY3RzIHRvIHNwZWNpZmljIGxvdy1tZW1vcnkgY29uZGl0aW9ucy4gSXMgaXQgaW52b2x2ZWQgaW4gYSBwcmlvcml0eS1iYXNlZCByZWNsYWltIHByb2Nlc3M/XG5cbkFuZCB0aGVuIGByZXR1cm5fdW51c2VkX3N1cnBsdXNfcGFnZXNgIGlzIGFsc28gc3RhdGljLiBPa2F5LCBzbyB0aGlzIG11c3QgYmUgcmVsYXRlZCB0byByZXR1cm5pbmcgcGFnZXMgKmJhY2sqIHRvIHRoZSBzeXN0ZW0uIFdoZXJlIHdvdWxkIHRoaXMgZml0PyBJcyBpdCB0aWVkIHRvIGEgc3BlY2lmaWMgcHJvY2VzcyBvciBzdWJzeXN0ZW0sIGFuZCB3aGF0IHRyaWdnZXJzIHRoaXMgcGFnZSByZXR1cm4/IFRoaW5raW5nIGFsb3VkLCBJJ20gbm93IGN1cmlvdXMgYWJvdXQgd2hldGhlciB0aGVyZSBpcyBzb21lIHNvcnQgb2YgdW51c2VkIHBhZ2UgbW9uaXRvciBvciB0aW1lciBmdW5jdGlvbiBhdCBwbGF5LlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uLiBXaG8gKmNhbGxzKiBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2A/IFRoYXQncyB0aGUgY29yZS4gVGhlIGVudGlyZSBwb2ludC4gSXQncyB0aGUgYWN0aW9uLiBUaGF0J3MgdGhlIG1lYXQgb2YgdGhlIG1lbW9yeSByZWNsYW1hdGlvbiBwcm9jZXNzLiBJdCBpcyB3aGF0IGFjdHVhbGx5IGZyZWVzIHRoZSBwYWdlcy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlICphY3R1YWwqIHByb2Nlc3Mgb2YgcmVsZWFzaW5nIHVudXNlZCBodWdlIHBhZ2VzLiBUaGUgY2FsbCBzdGFjayB0aGF0IGxlYWRzIHRvIHRoYXQgZnVuY3Rpb24gaXMgd2hhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGxvZ2ljIG9mIGh1Z2UgcGFnZSBkZWFsbG9jYXRpb24gcmVzaWRlcy4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNjQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzoyOToyMy45NTA0Mjk5MzRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTczMTYwMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MTQ0MD12b2lkIGFkZF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9odWdldGxiLmMtMTQ2OS1cXG5tbS9odWdldGxiLmM6MTQ3MDpzdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxubW0vaHVnZXRsYi5jLTE0NzEtXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xNTMyPXN0YXRpYyB2b2lkIGZyZWVfaHBhZ2Vfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNTUzLVxcbm1tL2h1Z2V0bGIuYzoxNTU0OlxcdFxcdF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0xNTU1LVxcbi0tXFxubW0vaHVnZXRsYi5jPTE1Njc9c3RhdGljIHZvaWQgdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNTcwLVxcdGlmICghZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKSB8fCAhYXRvbWljKSB7XFxubW0vaHVnZXRsYi5jOjE1NzE6XFx0XFx0X191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTE1NzItXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzoyOToyNi4xMDc3NTE0NzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQwNzIwNDQ1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgYSBIdWdlVExCIE1lbW9yeSBQb2lzb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1ha2luZyBhIHByZXR0eSBmb2N1c2VkIGNoYW5nZTogaXQncyBhYm91dCBoYW5kbGluZyBoYXJkd2FyZS1wb2lzb25lZCAoSFdQb2lzb24pIEh1Z2VUTEIgcGFnZXMsIHNwZWNpZmljYWxseSBtb3ZpbmcgdGhlIEhXUG9pc29uIGZsYWcgdG8gZWFjaCBlcnJvciBwYWdlIHRvIGFsbG93IHJldXNlIG9mIGhlYWx0aHkgcGFnZXMuIFRoZSBwcmltYXJ5IGZ1bmN0aW9uIGludHJvZHVjZWQgaGVyZSBpcyBgZm9saW9fY2xlYXJfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKWAsIHdoaWNoIGlzIHJlcGxhY2luZyB0aGUgb2xkZXIgYF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbylgIGluIGEgZmV3IGtleSBsb2NhdGlvbnM6IGByZW1vdmVfaHVnZXRsYl9mb2xpb2AsIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCwgYGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yYCwgYW5kIGB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsa2AuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiBob3cgdGhlIEhXUG9pc29uIGZsYWcgaXMgaGFuZGxlZC4gT3JpZ2luYWxseSwgdGhlIGNvZGUgaW4gYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIGhhZCBhIGRpc3RpbmN0IHNlY3Rpb24gZm9yIG1vdmluZyB0aGUgYFBhZ2VIV1BvaXNvbmAgZmxhZyAqYWZ0ZXIqIGNhbGxpbmcgYF9fZm9saW9fY2xlYXJfaHVnZXRsYmAuICBUaGUgcGF0Y2ggZXNzZW50aWFsbHkgY29uc29saWRhdGVzIHRoZXNlIHN0ZXBzIGJ5IG1vdmluZyB0aGUgSFdQb2lzb24gZmxhZyBjbGVhcmluZyBiZWZvcmUgY2FsbGluZyBgX19mb2xpb19jbGVhcl9odWdldGxiYC4gIFRoZSBuZXcgYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIGZ1bmN0aW9uIGl0c2VsZiBub3cgY2FsbHMgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGJlZm9yZSBgX19mb2xpb19jbGVhcl9odWdldGxiYCwgd2hpY2ggaXMgdGhlIGtleSBtb2RpZmljYXRpb24uXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpbXBhY3RzIG1lbW9yeSBmYWlsdXJlIHNjZW5hcmlvcyB3aXRoIEh1Z2VUTEIgcGFnZXMuICBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlOyBIdWdlVExCIGFsbG9jYXRpb24vZnJlZWluZywgY291cGxlZCB3aXRoIGluamVjdGVkIG1lbW9yeSBmYWlsdXJlcywgYXJlIHRoZSB0cmlnZ2VyLiAgQW5kIHllcywgdGhpcyBpcyBkZWZpbml0ZWx5IGZ1enphYmxlIHdpdGggc3l6a2FsbGVyLCB3aGljaCBjYW4gaW5qZWN0IEhXUG9pc29uIGZhaWx1cmVzIChlLmcuLCB2aWEgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgKSBhbmQgbWFuaXB1bGF0ZSBodWdlIHBhZ2VzLlxuXG5Mb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9ucywgd2UnbGwgbmVlZCBgSFVHRVRMQkZTYCAob3IsIGBIVUdFVExCX1BBR0VgKSBmb3IgSHVnZVRMQiBzdXBwb3J0LCBhbmQgZGVmaW5pdGVseSBgTUVNT1JZX0ZBSUxVUkVgIGJlY2F1c2UgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGlzIGNvbmRpdGlvbmFsIG9uIGl0LiAgSXQgbG9va3MgbGlrZSBgTUVNT1JZX0ZBSUxVUkVgIGFsc28gZGVwZW5kcyBvbiBgTU1VYC4gIGBIV1BPSVNPTl9JTkpFQ1RgIG1pZ2h0IGJlIHVzZWZ1bCBmb3IgZnV6emluZyBIV1BvaXNvbiBzcGVjaWZpY2FsbHksIHNpbmNlIHN5emthbGxlciB1c2VzIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCwgd2hpY2ggYWxzbyByZWxpZXMgb24gYENPTkZJR19NRU1PUllfRkFJTFVSRWAuXG5cbkZvY3VzaW5nIG9uIHRoZSBleHBvc2VkIHN5bWJvbHMsIGl0IHNlZW1zIGxpa2Ugd2UgY2FuIHRhcmdldCBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLCBgc2V0X21heF9odWdlX3BhZ2VzYCwgYHJldHVybl91bnVzZWRfc3VycGx1c19wYWdlc2AsIGFuZCBgdHJ5X3RvX2ZyZWVfbG93YC4gIGB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsa2AgYW5kIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCBhcmUgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggd2UgY2FuJ3QgZGlyZWN0bHkgdGFyZ2V0LCBidXQgdGhlaXIgY2FsbGVycyBhcmUgaW1wb3J0YW50LlxuXG5gcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGlzIGFjdHVhbGx5IGNhbGxlZCBmcm9tIG1hbnkgcGxhY2VzOiBgZnJlZV9odWdlX2ZvbGlvYCwgYGFsbG9jX2J1ZGR5X2h1Z2VfcGFnZWAsIGBhbGxvY19wb29sX2h1Z2VfcGFnZWAsIGBhbGxvY19zdXJwbHVzX2h1Z2VfcGFnZWAsIGBhbGxvY19taWdyYXRlX2h1Z2VfcGFnZWAsIGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZV9wYWdlYCwgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AsIGFuZCBgaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX3BhZ2VgLiAgU28sIHRoYXQncyBhIGdvb2QgZW50cnkgcG9pbnQuXG5cbmBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBpcyBkZWZpbmVkIHdpdGhpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIGFuZCBzbyBpdCBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgc2V0LiAgU28gd2UgYWJzb2x1dGVseSBuZWVkIGBNRU1PUllfRkFJTFVSRWAuXG5cbkxldCdzIGRvdWJsZS1jaGVjayBhZ2FpbiB0aGF0IGBIVUdFVExCRlNgIGlzIHRoZSBjb3JyZWN0IGNvbmZpZy4gIGBIVUdFVExCX1BBR0VgIGRlcGVuZHMgb24gYEhVR0VUTEJGU2AsIHNvIGBIVUdFVExCRlNgIHdpbGwgZG8uXG5cblNpbmNlIHdlIGFyZSBsb29raW5nIGZvciBub24tc3RhdGljIGVudHJ5IHBvaW50cywgbGV0J3MgZXhwbG9yZSB0aG9zZTogYGh1Z2V0bGJfc3lzY3RsX2hhbmRsZXJgLCBgbnJfaHVnZXBhZ2VzX3N0b3JlYCwgYG5yX2h1Z2VwYWdlc19zdG9yZV9jb21tb25gLCBgaHVnZXRsYl9vdmVyY29tbWl0X2hhbmRsZXJgLCBhbmQgYG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3N0b3JlYC5cblxuSW4gcHJhY3RpY2UsIHdlIHdpbGwgdXNlIGByZW1vdmVfaHVnZXRsYl9mb2xpb2AgYW5kIGBmcmVlX2h1Z2VfZm9saW9gLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTU0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzoyOTo1MC4xNzk3OTkwMjZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDAxMTA5MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVtb3ZlX2h1Z2V0bGJfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTEzODQ9c3RhdGljIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE0MDMtICovXFxubW0vaHVnZXRsYi5jOjE0MDQ6dm9pZCByZW1vdmVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL2h1Z2V0bGIuYy0xNDA1LVxcdFxcdFxcdCAgYm9vbCBhZGp1c3Rfc3VycGx1cylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xNTMyPXN0YXRpYyB2b2lkIGZyZWVfaHBhZ2Vfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNTQ4LVxcdFxcdCAqIGZvbGlvX2hzdGF0ZSgpIGlzIGdvaW5nIHRvIHRyaWdnZXIgYmVjYXVzZSBhIHByZXZpb3VzIGNhbGwgdG9cXG5tbS9odWdldGxiLmM6MTU0OTpcXHRcXHQgKiByZW1vdmVfaHVnZXRsYl9mb2xpbygpIHdpbGwgY2xlYXIgdGhlIGh1Z2V0bGIgYml0LCBzbyBkb1xcbm1tL2h1Z2V0bGIuYy0xNTUwLVxcdFxcdCAqIG5vdCB1c2UgZm9saW9faHN0YXRlKCkgZGlyZWN0bHkuXFxuLS1cXG5tbS9odWdldGxiLmM9MTY4OT12b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE3NDEtXFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl90ZW1wb3JhcnkoZm9saW8pKSB7XFxubW0vaHVnZXRsYi5jOjE3NDI6XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtMTc0My1cXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNzQ2LVxcdFxcdC8qIHJlbW92ZSB0aGUgcGFnZSBmcm9tIGFjdGl2ZSBsaXN0ICovXFxubW0vaHVnZXRsYi5jOjE3NDc6XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIHRydWUpO1xcbm1tL2h1Z2V0bGIuYy0xNzQ4LVxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmh1Z2V0bGJfbG9jaywgZmxhZ3MpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTE5Mjg9c3RhdGljIHN0cnVjdCBmb2xpbyAqcmVtb3ZlX3Bvb2xfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE5NDMtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZm9saW8sIGxydSk7XFxubW0vaHVnZXRsYi5jOjE5NDQ6XFx0XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGFjY3Rfc3VycGx1cyk7XFxubW0vaHVnZXRsYi5jLTE5NDUtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9odWdldGxiLmM9MTk2Nj1pbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmMtMjAwOC1cXHRcXHRcXHRhZGp1c3Rfc3VycGx1cyA9IHRydWU7XFxubW0vaHVnZXRsYi5jOjIwMDk6XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGFkanVzdF9zdXJwbHVzKTtcXG5tbS9odWdldGxiLmMtMjAxMC1cXHRcXHRoLVxcdTAwM2VtYXhfaHVnZV9wYWdlcy0tO1xcbi0tXFxubW0vaHVnZXRsYi5jLTIwMjEtXFx0XFx0ICogVGhlIGZvbGlvX3Rlc3RfaHVnZXRsYiBjaGVjayBoZXJlIGlzIGJlY2F1c2VcXG5tbS9odWdldGxiLmM6MjAyMjpcXHRcXHQgKiByZW1vdmVfaHVnZXRsYl9mb2xpbyB3aWxsIGNsZWFyIGh1Z2V0bGIgZm9saW8gZmxhZyBmb3JcXG5tbS9odWdldGxiLmMtMjAyMy1cXHRcXHQgKiBub24tdm1lbW1hcCBvcHRpbWl6ZWQgaHVnZXRsYiBmb2xpb3MuXFxuLS1cXG5tbS9odWdldGxiLmM9MjY0Nj1zdGF0aWMgaW50IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI3MDUtXFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjI3MDY6XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgb2xkX2ZvbGlvLCBmYWxzZSk7XFxubW0vaHVnZXRsYi5jLTI3MDctXFxuLS1cXG5tbS9odWdldGxiLmM9MzY2Mz1zdGF0aWMgdm9pZCB0cnlfdG9fZnJlZV9sb3coc3RydWN0IGhzdGF0ZSAqaCwgdW5zaWduZWQgbG9uZyBjb3VudCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNjgzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2h1Z2V0bGIuYzozNjg0OlxcdFxcdFxcdHJlbW92ZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XFxubW0vaHVnZXRsYi5jLTM2ODUtXFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZwYWdlX2xpc3QpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTM5ODM9bG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLFxcbi0tXFxubW0vaHVnZXRsYi5jLTQwMDgtXFxubW0vaHVnZXRsYi5jOjQwMDk6XFx0XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3JjLCBmb2xpbywgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy00MDEwLVxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2bGlzdCk7XFxuLS1cXG5tbS9odWdldGxiX2ludGVybmFsLmg9NzE9c3RhdGljIGlubGluZSBpbnQgaHN0YXRlX25leHRfbm9kZV90b19mcmVlKHN0cnVjdCBoc3RhdGUgKmgsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQpXFxuLS1cXG5tbS9odWdldGxiX2ludGVybmFsLmgtOTQtXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oOjk1OmV4dGVybiB2b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTk2LVxcdFxcdFxcdFxcdCBib29sIGFkanVzdF9zdXJwbHVzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6Mjk6NTIuNjE5OTE0MzU5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyMDc2MTI5NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZVRMQiBIV1BvaXNvbiBSZWZhY3RvcmluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBhIHJlZmFjdG9yaW5nLCBwb3NzaWJseSBhIGJ1ZyBmaXgsIHJlbGF0ZWQgdG8gaG93IEhXUG9pc29uIGludGVyYWN0cyB3aXRoIEh1Z2VUTEIgcGFnZXMuIFRoZSBwYXRjaCBtb2RpZmllcyBgbW0vaHVnZXRsYi5jYCwgd2hpY2ggaXMgdGhlIGV4cGVjdGVkIGxvY2F0aW9uIGZvciB0aGlzIHR5cGUgb2YgY2hhbmdlLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYGZvbGlvX2NsZWFyX2h1Z2V0bGJgLCB3aGljaCBhY3RzIGFzIGEgY2VudHJhbCBwb2ludCBmb3IgaGFuZGxpbmcgdGhlIGNsZWFyaW5nIG9mIEh1Z2VUTEIgZm9saW9zLCBpbmNvcnBvcmF0aW5nIHRoZSBgaHdwb2lzb25gIGxvZ2ljLiBJdCBjb25kaXRpb25hbGx5IGNhbGxzIGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBpZiB0aGUgZm9saW8gaXMgcG9pc29uZWQsIGFuZCB0aGVuIGFsd2F5cyBjYWxscyBgX19mb2xpb19jbGVhcl9odWdldGxiYC4gIFRoaXMgbG9va3MgbGlrZSB0aGV5J3JlIHRyeWluZyB0byBtb3ZlIHRoZSBIV1BvaXNvbiBmbGFnIGhhbmRsaW5nIHRvIGJlIG1vcmUgY29uc2lzdGVudCB3aXRoIHRoZSBjb3JlIGZyZWVpbmcgcHJvY2Vzcy5cblxuVGhlIG1haW4gY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSByZXBsYWNlbWVudCBvZiBkaXJlY3QgY2FsbHMgdG8gYF9fZm9saW9fY2xlYXJfaHVnZXRsYmAgd2l0aCBjYWxscyB0byB0aGlzIG5ldyBgZm9saW9fY2xlYXJfaHVnZXRsYmAgaW4gc2V2ZXJhbCBjcml0aWNhbCBmdW5jdGlvbnM6IGByZW1vdmVfaHVnZXRsYl9mb2xpb2AsIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCwgYGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yYCwgYW5kIGB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsa2AuICBUaGV5IGFsc28gcmVtb3ZlZCB0aGUgZGlyZWN0IGBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uYCBjYWxsIGZyb20gIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCBub3cgYmVjYXVzZSBpdCBpcyBoYW5kbGVkIGJ5IHRoZSBuZXcgd3JhcHBlciBmdW5jdGlvbi4gVGhpcyBjZW50cmFsaXphdGlvbiBpcyBnb29kLCBpdCBzaW1wbGlmaWVzIHRoZSBjb2RlLlxuXG5NeSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6IElzIHRoaXMgZnVuY3Rpb25hbGx5IHNvdW5kPyAgRnJvbSB3aGF0IEkgc2VlLCBpdCBsb29rcyBsaWtlIGl0IGlzLiBJdCBlbnN1cmVzIHRoZSBIV1BvaXNvbiBmbGFnIGlzIGhhbmRsZWQgY29uc2lzdGVudGx5IHdoZW5ldmVyIGEgaHVnZSBwYWdlIGlzIGJlaW5nIGNsZWFyZWQuIFNvIHRoZSBwb2lzb25lZCBmbGFnIGlzIG1vdmVkIGZyb20gdGhlIGhlYWQgZm9saW8gdG8gdGhlIHJhdyBlcnJvciBwYWdlKHMpLiBJdCBpcyBub3cgY2FsbGVkIGluIGByZW1vdmVfaHVnZXRsYl9mb2xpb2AsIGBidWxrX3ZtZW1tYXBfcmVzdG9yZV9lcnJvcmAsIGFuZCBgdXBkYXRlX2FuZF9mcmVlX3BhZ2VzX2J1bGtgICpvbmx5KiB3aGVuIHRoZSBmb2xpbyBpcyBhY3R1YWxseSBwb2lzb25lZCwgdmlhIGBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKWAuXG5cbkJ1dCwgd2FpdCBhIG1pbnV0ZS4uLiBgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbmAgaXMgb25seSBkZWZpbmVkIGlmIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGVuYWJsZWQuIE9rYXksIEkgYmV0dGVyIHZlcmlmeSB0aGF0IHF1aWNrbHkuICBZZXAsIGNvbmZpcm1lZC4gSXQncyBhbiBpbmxpbmUgbm8tb3AgaWYgdGhhdCBjb25maWcgaXNuJ3Qgc2V0LCB3aGljaCBtZWFucyB0aGUgZnVuY3Rpb25hbCBpbXBhY3QgaXMgb25seSByZWxldmFudCB3aGVuIGBNRU1PUllfRkFJTFVSRWAgaXMgYWN0aXZlLiBBbmQsIG9mIGNvdXJzZSwgYEhVR0VUTEJfUEFHRWAgaXMgbmVlZGVkIGZvciBgbW0vaHVnZXRsYi5jYC4gIFNvIHRoZXNlIGFyZSB0aGUgdHdvIHJlbGV2YW50IGNvbmZpZ3MuXG5cbk5vdyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSBpbXBvcnRhbnQuXG5gcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIHNlZW1zIGltcG9ydGFudCBhcyBpdCBpcyBjYWxsZWQgZnJvbSBgZnJlZV9odWdlX2ZvbGlvYCwgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AsIGV0Yy5cbmB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsa2AgaXMgaW1wb3J0YW50IHRvbywgY2FsbGVkIGZyb20gc29tZSBjcml0aWNhbCBmdW5jdGlvbnMuXG5BbmQgYGJ1bGtfdm1lbW1hcF9yZXN0b3JlX2Vycm9yYCwgYmVjYXVzZSBpdCBpcyBjYWxsZWQgYnkgdGhlIGJ1bGsgZnVuY3Rpb24uXG5cbk9rLCBsZXQncyBjb25maXJtIHRoZSB2aXNpYmlsaXR5IG9mIHRob3NlIGZ1bmN0aW9uczogYGZyZWVfaHVnZV9mb2xpb2AsIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gLCBhbmQgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAuXG5gZnJlZV9odWdlX2ZvbGlvYCBpcyBkZWZpbml0ZWx5IGV4cG9ydGVkLCBpdCdzIGNhbGxlZCB3aGVuIGEgaHVnZSBwYWdlIGlzIGZyZWVkLlxuYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgaXMgYSBnb29kIGVudHJ5cG9pbnQgdG8gbG9vayBhdCBkdXJpbmcgbWVtb3J5IGZhaWx1cmUgb3Igb2ZmbGluZSBvcGVyYXRpb25zLlxuQW5kIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGlzIGdsb2JhbCBhcyB3ZWxsLlxuXG5Ob3csIGB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsa2AgaXMgY2FsbGVkIGZyb20gYHNldF9tYXhfaHVnZV9wYWdlc2AsIHNvIGBucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uYCwgYGh1Z2V0bGJfc3lzY3RsX2hhbmRsZXJgIG9yIGBodWdldGxiX292ZXJjb21taXRfaGFuZGxlcmAgbWF5IGJlIGludGVyZXN0aW5nIGZvciBmdXp6aW5nLlxuQWxyaWdodCwgaXQgc2VlbXMgbGlrZSBgZnJlZV9odWdlX2ZvbGlvYCwgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgYW5kIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGFyZSBnb29kIHNwb3RzIHRvIGZvY3VzIG9uLlxuTGV0J3MgdmVyaWZ5IHdoYXQgYGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb25gIGFjdHVhbGx5IGRvZXMsIGp1c3QgdG8gYmUgc3VyZS4uLiBsb29rcyBnb29kLCBjbGVhcmluZyB0aGUgaHdwb2lzb24gZmxhZy5cblxuU28sIHRvIHN1bW1hcml6ZSwgdGhpcyBwYXRjaCBjZW50cmFsaXplcyBhbmQgcG90ZW50aWFsbHkgaW1wcm92ZXMgdGhlIGhhbmRsaW5nIG9mIEhXUG9pc29uIGZsYWdzIHdoZW4gSHVnZVRMQiBmb2xpb3MgYXJlIGNsZWFyZWQuIEl0IGlzIGZ1bmN0aW9uYWwsIGdpdmVuIHRoZSBjb25maWd1cmF0aW9ucyBgSFVHRVRMQl9QQUdFYCBhbmQgYE1FTU9SWV9GQUlMVVJFYC4gVGhlIGtleSBlbnRyeXBvaW50cyB0byB0ZXN0IGFyZSBgZnJlZV9odWdlX2ZvbGlvYCwgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AsIGFuZCBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYC4gSSB3aWxsIGxvb2sgYXQgdGhvc2UgY2xvc2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNjcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjMwOjE0LjY5NjA0NjMxNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MTEwMDU4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0zOTgzPWxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy00MDUxLVxcbm1tL2h1Z2V0bGIuYzo0MDUyOnNzaXplX3QgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKGJvb2wgb2JleV9tZW1wb2xpY3ksXFxubW0vaHVnZXRsYi5jLTQwNTMtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZCxcXG4tLVxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaD0xMDI9ZXh0ZXJuIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYyxcXG4tLVxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC0xMDQtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIG5yX3RvX2RlbW90ZSk7XFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oOjEwNTpleHRlcm4gc3NpemVfdCBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24oYm9vbCBvYmV5X21lbXBvbGljeSxcXG5tbS9odWdldGxiX2ludGVybmFsLmgtMTA2LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBoc3RhdGUgKmgsIGludCBuaWQsXFxuLS1cXG5tbS9odWdldGxiX3N5c2N0bC5jPTMwPXN0YXRpYyBpbnQgaHVnZXRsYl9zeXNjdGxfaGFuZGxlcl9jb21tb24oYm9vbCBvYmV5X21lbXBvbGljeSxcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzY3RsLmMtNDYtXFx0aWYgKHdyaXRlKVxcbm1tL2h1Z2V0bGJfc3lzY3RsLmM6NDc6XFx0XFx0cmV0ID0gX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKG9iZXlfbWVtcG9saWN5LCBoLFxcbm1tL2h1Z2V0bGJfc3lzY3RsLmMtNDgtXFx0XFx0XFx0XFx0XFx0XFx0ICBOVU1BX05PX05PREUsIHRtcCwgKmxlbmd0aCk7XFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmM9NDI9c3RhdGljIHNzaXplX3QgbnJfaHVnZXBhZ2VzX3Nob3dfY29tbW9uKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vaHVnZXRsYl9zeXNmcy5jLTU3LVxcbm1tL2h1Z2V0bGJfc3lzZnMuYzo1ODpzdGF0aWMgc3NpemVfdCBucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKGJvb2wgb2JleV9tZW1wb2xpY3ksXFxubW0vaHVnZXRsYl9zeXNmcy5jLTU5LVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qga29iamVjdCAqa29iaiwgY29uc3QgY2hhciAqYnVmLFxcbi0tXFxubW0vaHVnZXRsYl9zeXNmcy5jLTcxLVxcdGggPSBrb2JqX3RvX2hzdGF0ZShrb2JqLCBcXHUwMDI2bmlkKTtcXG5tbS9odWdldGxiX3N5c2ZzLmM6NzI6XFx0cmV0dXJuIF9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbihvYmV5X21lbXBvbGljeSwgaCwgbmlkLCBjb3VudCwgbGVuKTtcXG5tbS9odWdldGxiX3N5c2ZzLmMtNzMtfVxcbi0tXFxubW0vaHVnZXRsYl9zeXNmcy5jPTgxPXN0YXRpYyBzc2l6ZV90IG5yX2h1Z2VwYWdlc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy04My17XFxubW0vaHVnZXRsYl9zeXNmcy5jOjg0OlxcdHJldHVybiBucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKGZhbHNlLCBrb2JqLCBidWYsIGxlbik7XFxubW0vaHVnZXRsYl9zeXNmcy5jLTg1LX1cXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYz0xMDE9c3RhdGljIHNzaXplX3QgbnJfaHVnZXBhZ2VzX21lbXBvbGljeV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0xMDMte1xcbm1tL2h1Z2V0bGJfc3lzZnMuYzoxMDQ6XFx0cmV0dXJuIG5yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24odHJ1ZSwga29iaiwgYnVmLCBsZW4pO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYy0xMDUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzozMDoxNi4zNjcxNTExNjdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMzNzg0MjE0NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxMTg4MSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMjM6MzA6MjkuNzQ1NTc0OTU1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcyNjk3NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlbW90ZV9wb29sX2h1Z2VfcGFnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MzkyND1zdGF0aWMgbG9uZyBkZW1vdGVfZnJlZV9odWdldGxiX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpzcmMsIHN0cnVjdCBoc3RhdGUgKmRzdCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zOTgyLVxcbm1tL2h1Z2V0bGIuYzozOTgzOmxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcXG5tbS9odWdldGxiLmMtMzk4NC1cXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3RvX2RlbW90ZSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zOTk1LVxcdGlmICghc3JjLVxcdTAwM2VkZW1vdGVfb3JkZXIpIHtcXG5tbS9odWdldGxiLmM6Mzk5NjpcXHRcXHRwcl93YXJuKFxcXCJIdWdlVExCOiBOVUxMIGRlbW90ZSBvcmRlciBwYXNzZWQgdG8gZGVtb3RlX3Bvb2xfaHVnZV9wYWdlLlxcXFxuXFxcIik7XFxubW0vaHVnZXRsYi5jLTM5OTctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFx0XFx0LyogaW50ZXJuYWwgZXJyb3IgKi9cXG4tLVxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaD0xMDA9ZXh0ZXJuIHZvaWQgcHJlcF9hbmRfYWRkX2FsbG9jYXRlZF9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqaCxcXG5tbS9odWdldGxiX2ludGVybmFsLmgtMTAxLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCk7XFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oOjEwMjpleHRlcm4gbG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLFxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC0xMDMtXFx0XFx0XFx0XFx0ICBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLFxcbi0tXFxubW0vaHVnZXRsYl9zeXNmcy5jPTE4MT1zdGF0aWMgc3NpemVfdCBkZW1vdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmMtMjExLVxcdFxcdCAqIENoZWNrIGZvciBhdmFpbGFibGUgcGFnZXMgdG8gZGVtb3RlIGVhY2ggdGltZSB0aG9yb3VnaCB0aGVcXG5tbS9odWdldGxiX3N5c2ZzLmM6MjEyOlxcdFxcdCAqIGxvb3AgYXMgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlIHdpbGwgZHJvcCBodWdldGxiX2xvY2suXFxubW0vaHVnZXRsYl9zeXNmcy5jLTIxMy1cXHRcXHQgKi9cXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMjEtXFxubW0vaHVnZXRsYl9zeXNmcy5jOjIyMjpcXHRcXHRyYyA9IGRlbW90ZV9wb29sX2h1Z2VfcGFnZShoLCBuX21hc2ssIG5yX2RlbW90ZSk7XFxubW0vaHVnZXRsYl9zeXNmcy5jLTIyMy1cXHRcXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjMwOjMxLjIxODI3NzQzMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzA4Mzc1NzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTI0NDgsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjMwOjQwLjUyNjY1NTI4NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0Mjc2MjY0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTM5ODM9bG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLFxcbi0tXFxubW0vaHVnZXRsYi5jLTQwNTEtXFxubW0vaHVnZXRsYi5jOjQwNTI6c3NpemVfdCBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24oYm9vbCBvYmV5X21lbXBvbGljeSxcXG5tbS9odWdldGxiLmMtNDA1My1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgbmlkLFxcbi0tXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oPTEwMj1leHRlcm4gbG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLFxcbi0tXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTEwNC1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgbnJfdG9fZGVtb3RlKTtcXG5tbS9odWdldGxiX2ludGVybmFsLmg6MTA1OmV4dGVybiBzc2l6ZV90IF9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbihib29sIG9iZXlfbWVtcG9saWN5LFxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC0xMDYtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZCxcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzY3RsLmM9MzA9c3RhdGljIGludCBodWdldGxiX3N5c2N0bF9oYW5kbGVyX2NvbW1vbihib29sIG9iZXlfbWVtcG9saWN5LFxcbi0tXFxubW0vaHVnZXRsYl9zeXNjdGwuYy00Ni1cXHRpZiAod3JpdGUpXFxubW0vaHVnZXRsYl9zeXNjdGwuYzo0NzpcXHRcXHRyZXQgPSBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24ob2JleV9tZW1wb2xpY3ksIGgsXFxubW0vaHVnZXRsYl9zeXNjdGwuYy00OC1cXHRcXHRcXHRcXHRcXHRcXHQgIE5VTUFfTk9fTk9ERSwgdG1wLCAqbGVuZ3RoKTtcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYz01OD1zdGF0aWMgc3NpemVfdCBucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKGJvb2wgb2JleV9tZW1wb2xpY3ksXFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmMtNzEtXFx0aCA9IGtvYmpfdG9faHN0YXRlKGtvYmosIFxcdTAwMjZuaWQpO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYzo3MjpcXHRyZXR1cm4gX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uKG9iZXlfbWVtcG9saWN5LCBoLCBuaWQsIGNvdW50LCBsZW4pO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYy03My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjMwOjQxLjk2OTQyMjIyN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDM5MzMyMTY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjEyOTcwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzozMDo1Mi4zNjI3NDY1NjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDk2MzQ1MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTI1NjU9dm9pZCByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtMjYzOS0vKlxcbm1tL2h1Z2V0bGIuYzoyNjQwOiAqIGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvIC0gQWxsb2NhdGUgYSBuZXcgZm9saW8gYW5kIGRpc3NvbHZlXFxubW0vaHVnZXRsYi5jLTI2NDEtICogdGhlIG9sZCBvbmVcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNjQ1LSAqL1xcbm1tL2h1Z2V0bGIuYzoyNjQ2OnN0YXRpYyBpbnQgYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpvbGRfZm9saW8sXFxubW0vaHVnZXRsYi5jLTI2NDctXFx0XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yNzMyPWludCBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNzUwLVxcdGVsc2UgaWYgKCFmb2xpb19yZWZfY291bnQoZm9saW8pKVxcbm1tL2h1Z2V0bGIuYzoyNzUxOlxcdFxcdHJldCA9IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKGZvbGlvLCBsaXN0KTtcXG5tbS9odWdldGxiLmMtMjc1Mi1cXG4tLVxcbm1tL2h1Z2V0bGIuYz0yNzYzPWludCByZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXFxuLS1cXG5tbS9odWdldGxiLmMtMjgwMi1cXG5tbS9odWdldGxiLmM6MjgwMzpcXHRcXHRcXHRcXHRyZXQgPSBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpbyhmb2xpbywgXFx1MDAyNmxpc3QpO1xcbm1tL2h1Z2V0bGIuYy0yODA0LVxcdFxcdFxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjMwOjUzLjgxMjM4NTg4MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzQ4NDUwMTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEh1Z2UgUGFnZSBNYW5hZ2VtZW50IGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBodWdlIHBhZ2VzIGFyZSBtYW5hZ2VkLCBhbmQgaXQgbG9va3MgbGlrZSBhIGZldyBrZXkgZnVuY3Rpb25zIGFyZSB0aGUgd29ya2hvcnNlcyBoZXJlLiBJJ3ZlIGlkZW50aWZpZWQgYF9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbmAsIHdoaWNoIGlzbid0IHN0YXRpYywgYW5kIGl0IHNlZW1zIHRvIGJlIHRoZSBlbnRyeSBwb2ludCBmb3Igc2V0dGluZyB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMuIFRoYXQgdGhlbiBsZWFkcyB0byBgc2V0X21heF9odWdlX3BhZ2VzYCBhbmQgdWx0aW1hdGVseSwgdGhpbmdzIGxpa2UgYHVwZGF0ZV9hbmRfZnJlZV9wYWdlc19idWxrYCBhbmQgYHJlbW92ZV9odWdldGxiX2ZvbGlvYC4gYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAgYWxzbyBpc24ndCBzdGF0aWMgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBkZW1vdGluZyBodWdlIHBhZ2VzLCB3aGljaCwgYWdhaW4sIGVuZHMgdXAgY2FsbGluZyBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLiBgZnJlZV9odWdlX2ZvbGlvYCBpcyBzaW1pbGFyLCBoYW5kbGluZyB0aGUgZnJlZWluZyBvZiBwYWdlcyBhbmQgY2FsbGluZyBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLCBhcyBkb2VzIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gIGZvciBkaXNzb2x2aW5nLiBUaGVuIHdlIGhhdmUgYGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpb2AsIHdoaWNoIGNhbGxzIGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpb2AsIHdoaWNoIGluIHR1cm4sIGNhbGxzIGByZW1vdmVfaHVnZXRsYl9mb2xpb2AuXG5cblNvLCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZTpcbiogICBgZnJlZV9odWdlX2ZvbGlvYFxuKiAgIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gXG4qICAgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWBcbiogICBgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uYFxuKiAgIGBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9gXG5cbldhaXQgYSBtaW51dGUsIGBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb25gIGlzIGEgc3lzZnMvc3lzY3RsIGhhbmRsZXIsIGlzbid0IGl0PyBIbW0sIGlzIHRoYXQgZ29pbmcgdG8gYmUgdXNlZnVsIGZvciBmdXp6aW5nPyBPaCB5ZWFoLCBzeXprYWxsZXIgY2FuIHdyaXRlIHRvIHRob3NlIHN5c2ZzL3N5c2N0bCBpbnRlcmZhY2VzISBCdXQsIGBmcmVlX2h1Z2VfZm9saW9gIGxvb2tzIG1vcmUgZnVuZGFtZW50YWwgYW5kIHNob3VsZCBiZSByZWFjaGFibGUgdGhyb3VnaCByZWd1bGFyIHN5c2NhbGxzIGxpa2UgYG11bm1hcGAgYW5kIGBtYWR2aXNlYCwgd2hpY2ggSSBwcmVmZXIgdG8gd29yayB3aXRoIGRpcmVjdGx5LiBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCBzZWVtcyBsaWtlIGl0J3MgY29ubmVjdGVkIHRvIG1lbW9yeSBmYWlsdXJlIGluamVjdGlvbi5cblxuVGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWdzIEknbGwgbmVlZCB0byBlbmFibGUgYXJlIGBIVUdFVExCRlNgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgLiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhhdCB0aGUgYEhVR0VUTEJGU2AgaXMgYWN0dWFsbHkgY2FsbGVkIHRoYXQsIHRob3VnaC4gT2theSwgWWVwLCBgY29uZmlnIEhVR0VUTEJGU2AgaW4gYGZzL0tjb25maWdgLiBBbmQsIGBjb25maWcgTUVNT1JZX0ZBSUxVUkVgIGlzIGluIGBtbS9LY29uZmlnYC5cblxuSG1tLCBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnM/IExldCBtZSBzZWUuIEFoLCBgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZGAgaXMgYWxzbyB1c2VkLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0J3MgZGVmaW5lZCBmb3IgbW9yZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU1NSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzozMTowMS4xNjA4Mzg3OTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzU5MzAyNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDg2PXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA4OC1cXHRyZXR1cm4gZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgfHxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDg5OlxcdCAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwOTAtfVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zNTI3PXN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzUzMC1cXHQvKiBTY2FuIHBvaXNvbmVkIHBhZ2VzIHdoZW4gc3BsaXQgYSBwb2lzb25lZCBmb2xpbyB0byBsYXJnZSBmb2xpb3MgKi9cXG5tbS9odWdlX21lbW9yeS5jOjM1MzE6XFx0Y29uc3QgYm9vbCBoYW5kbGVfaHdwb2lzb24gPSBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBuZXdfb3JkZXI7XFxubW0vaHVnZV9tZW1vcnkuYy0zNTMyLVxcdGxvbmcgbmV3X25yX3BhZ2VzID0gMSBcXHUwMDNjXFx1MDAzYyBuZXdfb3JkZXI7XFxuLS1cXG5tbS9odWdldGxiLmM9MTM4ND1zdGF0aWMgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmMtMTM4OS1cXHQgKi9cXG5tbS9odWdldGxiLmM6MTM5MDpcXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKVxcbm1tL2h1Z2V0bGIuYy0xMzkxLVxcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oZm9saW8pO1xcbi0tXFxubW0vbWVtb3J5LmM9NTQ2OD12bV9mYXVsdF90IGRvX3NldF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWVtb3J5LmMtNTQ5OS1cXHQgKi9cXG5tbS9tZW1vcnkuYzo1NTAwOlxcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSkpXFxubW0vbWVtb3J5LmMtNTUwMS1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxubW0vc2htZW0uYz0zMjg4PXN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG4tLVxcbm1tL3NobWVtLmMtMzMyNi1cXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG5tbS9zaG1lbS5jOjMzMjc6XFx0XFx0XFx0ICAgIGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKVxcbm1tL3NobWVtLmMtMzMyOC1cXHRcXHRcXHRcXHRmYWxsYmFja19wYWdlX2NvcHkgPSB0cnVlO1xcbi0tXFxubW0vc2htZW0uYz0zNDc1PXN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXFxuLS1cXG5tbS9zaG1lbS5jLTM1MTYtXFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxubW0vc2htZW0uYzozNTE3OlxcdFxcdFxcdCAgICBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSlcXG5tbS9zaG1lbS5jLTM1MTgtXFx0XFx0XFx0XFx0ZmFsbGJhY2tfcGFnZV9zcGxpY2UgPSB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzozMTowMi41OTY3NzMzM1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjk3ODIwNTM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjE0NzI5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzozMToxNS41NzQ5ODEwMjZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDc1MjI3ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fdGVzdF9od3BvaXNvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9odWdldGxiZnMvaW5vZGUuYz0yMTk9c3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0yNjAtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MjYxOlxcdFxcdFxcdGlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMjYyLVxcdFxcdFxcdFxcdHdhbnQgPSBucjtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwODY9c3RhdGljIGlubGluZSBib29sIGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA4Ny17XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA4ODpcXHRyZXR1cm4gZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgfHxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDg5LVxcdCAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTEyNDc9c3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVfZXhhY3Qoc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMjU3LVxcbm1tL2h1Z2V0bGIuYzoxMjU4OlxcdFxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcXG5tbS9odWdldGxiLmMtMTI1OS1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zOTgzPWxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy00MDA1LVxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgbmV4dCwgXFx1MDAyNnNyYy1cXHUwMDNlaHVnZXBhZ2VfZnJlZWxpc3RzW25vZGVdLCBscnUpIHtcXG5tbS9odWdldGxiLmM6NDAwNjpcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXFxubW0vaHVnZXRsYi5jLTQwMDctXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9odWdldGxiLmM9NTY5Nj1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9odWdldGxiLmMtNTgxNi1cXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6NTgxNzpcXHRcXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpKSB7XFxubW0vaHVnZXRsYi5jLTU4MTgtXFx0XFx0XFx0cmV0ID0gVk1fRkFVTFRfSFdQT0lTT05fTEFSR0UgfFxcbi0tXFxubW0vaHVnZXRsYi5jPTYxNjg9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MzI1LVxcdHJldCA9IC1FSU87XFxubW0vaHVnZXRsYi5jOjYzMjY6XFx0aWYgKGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxcbm1tL2h1Z2V0bGIuYy02MzI3LVxcdFxcdGdvdG8gb3V0X3JlbGVhc2VfdW5sb2NrO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODI1PWJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4MzEtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxODMyOlxcdGlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODMzLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9NzU0PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzc2LVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6Nzc3OlxcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkge1xcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzc4LVxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjMxOjE3LjI4MjUwODE5MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTcyODkxMjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTU2NTAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjMxOjI2Ljg1NTQwMTkwNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MDM3MzU3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb19jbGVhcl9odWdldGxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTYxMT1zdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjYxMjp2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjEzLVxcdHtcXHR2b2lkICpwcml2YXRlID0gXFx1MDAyNmZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTYyOD1zdGF0aWMgaW5saW5lIHZvaWRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NjI5OmZvbGlvX2NsZWFyX2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjMwLVxcdHsgfVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9ODc3PWludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODgwLSNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo4ODE6ZXh0ZXJuIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04ODItI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo4ODM6c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04ODQte1xcbi0tXFxubW0vaHVnZXRsYi5jPTEyNDc9c3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX25vZGVfZXhhY3Qoc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMjY1LVxcdFxcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7XFxubW0vaHVnZXRsYi5jOjEyNjY6XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9mcmVlZChmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTEyNjctXFx0XFx0aC1cXHUwMDNlZnJlZV9odWdlX3BhZ2VzLS07XFxuLS1cXG5tbS9odWdldGxiLmM9MTM3Nz1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywgaW50IG5pZCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzgzLVxcbm1tL2h1Z2V0bGIuYzoxMzg0OnN0YXRpYyB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9odWdldGxiLmMtMTM4NS17XFxuLS1cXG5tbS9odWdldGxiLmMtMTM5MC1cXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpKVxcbm1tL2h1Z2V0bGIuYzoxMzkxOlxcdFxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0xMzkyLVxcbm1tL2h1Z2V0bGIuYzoxMzkzOlxcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTEzOTQtfVxcbi0tXFxubW0vaHVnZXRsYi5jPTE0MDQ9dm9pZCByZW1vdmVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE0MTgtXFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9mcmVlZChmb2xpbykpIHtcXG5tbS9odWdldGxiLmM6MTQxOTpcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX2ZyZWVkKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMTQyMC1cXHRcXHRoLVxcdTAwM2VmcmVlX2h1Z2VfcGFnZXMtLTtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNDMzLVxcdGlmICghZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKSlcXG5tbS9odWdldGxiLmM6MTQzNDpcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMTQzNS1cXG4tLVxcbm1tL2h1Z2V0bGIuYz0xNDcwPXN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNTA3LVxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxubW0vaHVnZXRsYi5jOjE1MDg6XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTE1MDktXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbi0tXFxubW0vaHVnZXRsYi5jPTE1ODY9c3RhdGljIHZvaWQgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNjAyLVxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxubW0vaHVnZXRsYi5jOjE2MDM6XFx0XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTE2MDQtXFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbi0tXFxubW0vaHVnZXRsYi5jLTE2MjctXFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG5tbS9odWdldGxiLmM6MTYyODpcXHRcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMTYyOS1cXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuLS1cXG5tbS9odWdldGxiLmM9MTYzNz1zdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE2NjAtXFx0ICogV2l0aG91dCBIVk8gZW5hYmxlZCwgcmV0IHdpbGwgYmUgMCBhbmQgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsXFxubW0vaHVnZXRsYi5jOjE2NjE6XFx0ICogZm9saW9fY2xlYXJfaHVnZXRsYiBhcyB0aGlzIHdhcyBkb25lIHByZXZpb3VzbHkuXFxubW0vaHVnZXRsYi5jLTE2NjItXFx0ICovXFxuLS1cXG5tbS9odWdldGxiLmMtMTY2Ny1cXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGZvbGlvLCBcXHUwMDI2bm9uX2h2b19mb2xpb3MsIGxydSlcXG5tbS9odWdldGxiLmM6MTY2ODpcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiKGZvbGlvKTtcXG5tbS9odWdldGxiLmMtMTY2OS1cXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuLS1cXG5tbS9odWdldGxiLmM9MTY4OT12b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE3MDgtXFx0cmVzdG9yZV9yZXNlcnZlID0gZm9saW9fdGVzdF9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jOjE3MDk6XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0xNzEwLVxcbi0tXFxubW0vaHVnZXRsYi5jLTE3MzAtXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmh1Z2V0bGJfbG9jaywgZmxhZ3MpO1xcbm1tL2h1Z2V0bGIuYzoxNzMxOlxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfbWlncmF0YWJsZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTE3MzItXFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfZm9saW8oaHN0YXRlX2luZGV4KGgpLFxcbi0tXFxubW0vaHVnZXRsYi5jPTI1NjU9dm9pZCByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtMjU4Mi1cXHRcXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6MjU4MzpcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTI1ODQtXFx0XFx0ZWxzZSBpZiAocmMpXFxuLS1cXG5tbS9odWdldGxiLmM9NTE0Nj12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTI4My1cXHRcXHRcXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6NTI4NDpcXHRcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTUyODUtXFx0XFx0XFx0ZWxzZSBpZiAocmMpXFxuLS1cXG5tbS9odWdldGxiLmM9NTYzMz1pbnQgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01NjQ3LVxcdH1cXG5tbS9odWdldGxiLmM6NTY0ODpcXHRmb2xpb19jbGVhcl9odWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTU2NDktXFxuLS1cXG5tbS9odWdldGxiLmM9NzEzMz1ib29sIGZvbGlvX2lzb2xhdGVfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vaHVnZXRsYi5jLTcxNDMtXFx0fVxcbm1tL2h1Z2V0bGIuYzo3MTQ0OlxcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfbWlncmF0YWJsZShmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTcxNDUtXFx0bGlzdF9tb3ZlX3RhaWwoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIGxpc3QpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTcxOTA9dm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxcbi0tXFxubW0vaHVnZXRsYi5jLTcyMTEtXFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfdGVtcG9yYXJ5KG9sZF9mb2xpbyk7XFxubW0vaHVnZXRsYi5jOjcyMTI6XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl90ZW1wb3JhcnkobmV3X2ZvbGlvKTtcXG5tbS9odWdldGxiLmMtNzIxMy1cXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTM5NT1zdGF0aWMgaW50IF9faHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTQxOS1cXHRpZiAoIXJldClcXG5tbS9odWdldGxiX3ZtZW1tYXAuYzo0MjA6XFx0XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbyk7XFxubW0vaHVnZXRsYl92bWVtbWFwLmMtNDIxLVxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmM9NTIyPXN0YXRpYyBpbnQgX19odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTU3Ny1cXHRpZiAocmV0KVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjU3ODpcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKTtcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy01NzktXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE5Mjg9c3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTQ2LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTk0Nzp2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5NDgte1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xOTU3PXN0YXRpYyBpbnQgZ2V0X2h1Z2VfcGFnZV9mb3JfaHdwb2lzb24odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTk5OC1cXHRpZiAoY291bnRfaW5jcmVhc2VkIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3RfaHVnZXRsYl9taWdyYXRhYmxlKGZvbGlvKSkge1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTk5OTpcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX21pZ3JhdGFibGUoZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjAwMC1cXHRcXHQqbWlncmF0YWJsZV9jbGVhcmVkID0gdHJ1ZTtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjAyNT1zdGF0aWMgaW50IHRyeV9tZW1vcnlfZmFpbHVyZV9odWdldGxiKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwNjItXFx0aWYgKGh3cG9pc29uX2ZpbHRlcihwKSkge1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjA2MzpcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwNjQtXFx0XFx0aWYgKG1pZ3JhdGFibGVfY2xlYXJlZClcXG4tLVxcbm1tL3JtYXAuYz0zMTQyPXZvaWQgaHVnZXRsYl9hZGRfbmV3X2Fub25fcm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTMxNTAtXFx0YXRvbWljX3NldChcXHUwMDI2Zm9saW8tXFx1MDAzZV9sYXJnZV9tYXBjb3VudCwgMCk7XFxubW0vcm1hcC5jOjMxNTE6XFx0Zm9saW9fY2xlYXJfaHVnZXRsYl9yZXN0b3JlX3Jlc2VydmUoZm9saW8pO1xcbm1tL3JtYXAuYy0zMTUyLVxcdF9fZm9saW9fc2V0X2Fub24oZm9saW8sIHZtYSwgYWRkcmVzcywgdHJ1ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjMxOjI4LjMwNTc3OTQ5N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDE5MjE5NDQwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjE4NDk5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzozMTozOC40OTc5NzY0OTVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDA0MzY4ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19mb2xpb19jbGVhcl9odWdldGxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xMzg0PXN0YXRpYyB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzkyLVxcbm1tL2h1Z2V0bGIuYzoxMzkzOlxcdF9fZm9saW9fY2xlYXJfaHVnZXRsYihmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTEzOTQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQyMzozMTozOS45Mzg0MTk2NThaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM4NTEzNzU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBmb2xpb19jbGVhcl9odWdldGxiYCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggcmVuYW1lcyBgX19mb2xpb19jbGVhcl9odWdldGxiYCB0byBgZm9saW9fY2xlYXJfaHVnZXRsYmAgYW5kLCBpbXBvcnRhbnRseSwgaXQgYWxzbyBjbGVhcnMgdGhlIGBod3BvaXNvbmAgZmxhZyBpZiBzZXQuIFRoYXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBjbGVhciBvbmUuIE1ha2VzIHNlbnNlLlxuXG5Ob3csIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFRoZSBwYXRjaCBkZXNjcmlwdGlvbiBtZW50aW9ucyBgSFVHRVRMQkZTYCBhbmQgYE1FTU9SWV9GQUlMVVJFYC4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRob3NlIGFyZSBjb3JyZWN0Li4uIFllcCwgYEhVR0VUTEJGU2AgaXMgaW4gYGZzL0tjb25maWdgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgIGlzIGluIGBtbS9LY29uZmlnYCwganVzdCBhcyBleHBlY3RlZC5cblxuRm9yIHRoZSBmb2N1cyBzeW1ib2xzLCBJIGluaXRpYWxseSBqb3R0ZWQgZG93biBgZnJlZV9odWdlX2ZvbGlvYCwgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AsIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgLCBgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uYCwgYW5kIGBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9gLiBBY3R1YWxseSwgbGV0J3MgcmVtb3ZlIGBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb25gLiBJdCdzIHJlbGF0ZWQsIGJ1dCBub3QgcmVhbGx5IGEgY29yZSBmb2N1cyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGNoYW5nZS4gVGhlIGZpcnN0IHRocmVlIHN5bWJvbHMgYXJlIG1vcmUgdGhhbiBlbm91Z2g6IGBmcmVlX2h1Z2VfZm9saW9gLCBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCwgYW5kIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgLiBUaG9zZSB3aWxsIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGVyZSB0aGlzIGNoYW5nZSB0b3VjaGVzLlxuXG5Pa2F5LCBJJ20gc2F0aXNmaWVkLiBUaW1lIHRvIHVzZSBgc2V0LXJlc3VsdHNgIGFuZCBzdWJtaXQgdGhpcyBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyMzAsIk91dHB1dFRva2VucyI6MjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDIzOjMxOjQ2LjMyMzU1OTEyNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MzgxNzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnJlZV9odWdlX2ZvbGlvXCIsXG4gICAgXCJkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9cIixcbiAgICBcImRlbW90ZV9wb29sX2h1Z2VfcGFnZVwiLFxuICAgIFwiX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgZm9saW9fY2xlYXJfaHVnZXRsYmAgdGhhdCB3cmFwcyBgX19mb2xpb19jbGVhcl9odWdldGxiYCBhbmQgYWRkcyBsb2dpYyB0byBtb3ZlIHRoZSBIV1BvaXNvbiBmbGFnIHRvIGVhY2ggZXJyb3IgcGFnZSBpZiB0aGUgZm9saW8gaGFzIGh3cG9pc29uZWQgcGFnZXMuIEl0IHJlcGxhY2VzIGNhbGxzIHRvIGBfX2ZvbGlvX2NsZWFyX2h1Z2V0bGJgIHdpdGggYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIGluIHNldmVyYWwgcGxhY2VzLCBjaGFuZ2luZyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBhbmQgZW5zdXJpbmcgdGhlIEhXUG9pc29uIGZsYWcgaXMgcHJvcGVybHkgaGFuZGxlZCB3aGVuIGEgSHVnZVRMQiBmb2xpbyBpcyByZW1vdmVkIG9yIGZyZWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoSHVnZVRMQiBhbmQgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcpIGFuZCBpcyByZWFjaGFibGUgdmlhIEh1Z2VUTEIgYWxsb2NhdGlvbi9mcmVlaW5nIGFuZCBtZW1vcnkgZmFpbHVyZSBpbmplY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZyZWVfaHVnZV9mb2xpb1wiLFxuICAgIFwiZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJkZW1vdGVfcG9vbF9odWdlX3BhZ2VcIixcbiAgICBcIl9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGZvbGlvX2NsZWFyX2h1Z2V0bGJgIHRoYXQgd3JhcHMgYF9fZm9saW9fY2xlYXJfaHVnZXRsYmAgYW5kIGFkZHMgbG9naWMgdG8gbW92ZSB0aGUgSFdQb2lzb24gZmxhZyB0byBlYWNoIGVycm9yIHBhZ2UgaWYgdGhlIGZvbGlvIGhhcyBod3BvaXNvbmVkIHBhZ2VzLiBJdCByZXBsYWNlcyBjYWxscyB0byBgX19mb2xpb19jbGVhcl9odWdldGxiYCB3aXRoIGBmb2xpb19jbGVhcl9odWdldGxiYCBpbiBzZXZlcmFsIHBsYWNlcywgY2hhbmdpbmcgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgYW5kIGVuc3VyaW5nIHRoZSBIV1BvaXNvbiBmbGFnIGlzIHByb3Blcmx5IGhhbmRsZWQgd2hlbiBhIEh1Z2VUTEIgZm9saW8gaXMgcmVtb3ZlZCBvciBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKEh1Z2VUTEIgYW5kIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nKSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBIdWdlVExCIGFsbG9jYXRpb24vZnJlZWluZyBhbmQgbWVtb3J5IGZhaWx1cmUgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kczn[1] Phase: Succeeded StartedAt: 2026-07-29 23:31:57 +0000 UTC FinishedAt: 2026-07-29 23:31:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kczn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-29 23:31:57 +0000 UTC FinishedAt: 2026-07-29 23:31:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kczn[2] Phase: Succeeded StartedAt: 2026-07-29 23:31:57 +0000 UTC FinishedAt: 2026-07-30 03:18:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-29 23:31:57 +0000 UTC FinishedAt: 2026-07-30 03:18:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-29 23:31:57 +0000 UTC FinishedAt: 2026-07-29 23:32:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-29 23:31:57 +0000 UTC FinishedAt: 2026-07-29 23:32:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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-workflow8kczn/series-workflow8kczn-convert-artifact-3596736101/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-29 23:32:07 +0000 UTC FinishedAt: 2026-07-29 23:52:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-29 23:32:07 +0000 UTC FinishedAt: 2026-07-29 23:52:22 +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:*86d45bbc-8f8b-46d1-8a24-f576068fa8fa,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-workflow8kczn/series-workflow8kczn-convert-artifact-3596736101/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": "f49a2768-36bd-45c6-b8c4-0534a7d1ab46", "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-workflow8kczn/series-workflow8kczn-build-action-82104971/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-29 23:32:07 +0000 UTC FinishedAt: 2026-07-29 23:52:12 +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:*86d45bbc-8f8b-46d1-8a24-f576068fa8fa,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-workflow8kczn/series-workflow8kczn-convert-artifact-3596736101/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": "f49a2768-36bd-45c6-b8c4-0534a7d1ab46", "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-workflow8kczn/series-workflow8kczn-build-action-82104971/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-29 23:52:22 +0000 UTC FinishedAt: 2026-07-29 23:52:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-29 23:52:22 +0000 UTC FinishedAt: 2026-07-29 23:52:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-29 23:52:22 +0000 UTC FinishedAt: 2026-07-29 23:52:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-29 23:52:22 +0000 UTC FinishedAt: 2026-07-29 23:52:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-workflow8kczn/series-workflow8kczn-convert-artifact-1057728320/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-29 23:52:47 +0000 UTC FinishedAt: 2026-07-29 23:54:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-29 23:52:47 +0000 UTC FinishedAt: 2026-07-29 23:54:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f49a2768-36bd-45c6-b8c4-0534a7d1ab46,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-workflow8kczn/series-workflow8kczn-build-action-82104971/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-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-29 23:54:42 +0000 UTC FinishedAt: 2026-07-29 23:54:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-29 23:54:42 +0000 UTC FinishedAt: 2026-07-29 23:54:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-29 23:54:42 +0000 UTC FinishedAt: 2026-07-30 00:13:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-29 23:54:42 +0000 UTC FinishedAt: 2026-07-30 00:13:36 +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:*86d45bbc-8f8b-46d1-8a24-f576068fa8fa,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-workflow8kczn/series-workflow8kczn-convert-artifact-1057728320/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": "83c7f099-9e7e-4a2d-bf1a-33e93d994885", "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-workflow8kczn/series-workflow8kczn-build-action-2376537340/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-29 23:54:42 +0000 UTC FinishedAt: 2026-07-30 00:13:26 +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:*86d45bbc-8f8b-46d1-8a24-f576068fa8fa,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-workflow8kczn/series-workflow8kczn-convert-artifact-1057728320/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": "83c7f099-9e7e-4a2d-bf1a-33e93d994885", "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-workflow8kczn/series-workflow8kczn-build-action-2376537340/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-30 00:13:36 +0000 UTC FinishedAt: 2026-07-30 00:13:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-30 00:13:36 +0000 UTC FinishedAt: 2026-07-30 00:13:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-30 00:13:36 +0000 UTC FinishedAt: 2026-07-30 00:15:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-30 00:13:36 +0000 UTC FinishedAt: 2026-07-30 00:15:18 +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:*83c7f099-9e7e-4a2d-bf1a-33e93d994885,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-workflow8kczn/series-workflow8kczn-build-action-2376537340/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-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-30 00:15:28 +0000 UTC FinishedAt: 2026-07-30 03:18:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-30 00:15:28 +0000 UTC FinishedAt: 2026-07-30 03:18:46 +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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"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:*f49a2768-36bd-45c6-b8c4-0534a7d1ab46,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*83c7f099-9e7e-4a2d-bf1a-33e93d994885,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-workflow8kczn/series-workflow8kczn-build-action-82104971/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-workflow8kczn/series-workflow8kczn-build-action-2376537340/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-30 00:15:28 +0000 UTC FinishedAt: 2026-07-30 00:15:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-30 00:15:28 +0000 UTC FinishedAt: 2026-07-30 00:15:32 +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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"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-workflow8kczn/series-workflow8kczn-convert-artifact-3007958681/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-30 00:15:28 +0000 UTC FinishedAt: 2026-07-30 00:15:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-30 00:15:28 +0000 UTC FinishedAt: 2026-07-30 00:15:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-30 00:15:28 +0000 UTC FinishedAt: 2026-07-30 00:15:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-30 00:15:38 +0000 UTC FinishedAt: 2026-07-30 03:18:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kczn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"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":["free_huge_folio","dissolve_free_hugetlb_folio","demote_pool_huge_page","__nr_hugepages_store_common"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aa6fc3defb36b11eb82c4d1f4e95b5f6d8a0bca6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"664cb70d-d1cb-4b8e-bc63-37ebb0ec6e3e","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-07-30 00:15:38 +0000 UTC FinishedAt: 2026-07-30 03:18:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f49a2768-36bd-45c6-b8c4-0534a7d1ab46,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*83c7f099-9e7e-4a2d-bf1a-33e93d994885,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-workflow8kczn/series-workflow8kczn-build-action-82104971/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-workflow8kczn/series-workflow8kczn-build-action-2376537340/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-workflow8kczn/series-workflow8kczn-convert-artifact-3007958681/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,}