Name: series-workflow7r6vv Phase: Succeeded StartedAt: 2026-08-25 13:01:53 +0000 UTC FinishedAt: 2026-08-25 17:46:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r6vv[0] Phase: Succeeded StartedAt: 2026-08-25 13:01:53 +0000 UTC FinishedAt: 2026-08-25 13:57:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r6vv[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 13:01:53 +0000 UTC FinishedAt: 2026-08-25 13:57:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "8a9091052cc81caa5570835049c809da804baa3f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CMA", "MEMORY_HOTPLUG", "MEMORY_ISOLATION", "CONTIG_ALLOC" ], "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": "8a9091052cc81caa5570835049c809da804baa3f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CMA", "MEMORY_HOTPLUG", "MEMORY_ISOLATION", "CONTIG_ALLOC" ], "series_id": "2b180ee5-48d5-4336-9c6d-05b99e20e8a4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "start_isolate_page_range", "alloc_contig_range_noprof", "alloc_contig_frozen_range_noprof", "offline_pages" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7TUVNT1JZX0lTT0xBVElPTiYjMzQ7LAogICAgJiMzNDtDT05USUdfQUxMT0MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7YWxsb2NfY29udGlnX3JhbmdlX25vcHJvZiYjMzQ7LAogICAgJiMzNDthbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZiYjMzQ7LAogICAgJiMzNDtvZmZsaW5lX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyB3aGVuIHJlYWRpbmcgcGFnZSBidWRkeSBvcmRlciBhbmQgY29tcG91bmQgb3JkZXIgZHVyaW5nIHBhZ2UgaXNvbGF0aW9uLiBJdCByZXBsYWNlcyBgYnVkZHlfb3JkZXIoKWAgd2l0aCBgYnVkZHlfb3JkZXJfdW5zYWZlKClgIGFuZCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgUEZOIGluY3JlbWVudHMgb3IgaW5maW5pdGUgbG9vcHMgY2F1c2VkIGJ5IGNvbmN1cnJlbnRseSBtb2RpZmllZCBwYWdlIHN0YXRlcy4gVGhlc2UgY2hhbmdlcyBtaXRpZ2F0ZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHJlbHkgb24gdW5pbml0aWFsaXplZCBmaWVsZHMgZm9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcmFjZSBjb25kaXRpb25zIGluIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGJ5IHZhbGlkYXRpbmcgdGhlIG9yZGVyIG9mIGJ1ZGR5IGFuZCBjb21wb3VuZCBwYWdlcyBiZWZvcmUgdXNpbmcgdGhlbS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgaW52YWxpZCBtZW1vcnkgb3BlcmF0aW9ucyBkdXJpbmcgcGFnZSBpc29sYXRpb24sIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWViZmNmMTJlMDMyNjc1ZDg3NTE1OWM0MjBjMWI2MTRmM2M2NGY3MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDEzOjQ1OjExIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfaXNvbGF0aW9uLmMgYi9tbS9wYWdlX2lzb2xhdGlvbi5jXG5pbmRleCAzMmNlOGE3ZDlkZjM1Li5lY2E2ZmI3OGY3M2E4IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9pc29sYXRpb24uY1xuQEAgLTM4NywxMyAmIzQzOzM4NywxOSBAQCBzdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3BmbixcbiBcdFx0fVxuIFxuIFx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0aW50IG9yZGVyID0gYnVkZHlfb3JkZXIocGFnZSk7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludCBvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbiBcbi1cdFx0XHQvKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgaGFuZGxlZCB0aGlzICovXG4tXHRcdFx0Vk1fV0FSTl9PTl9PTkNFKHBmbiAmIzQzOyAoMSBcdTAwM2NcdTAwM2Mgb3JkZXIpIFx1MDAzZSBib3VuZGFyeV9wZm4pO1xuLVxuLVx0XHRcdHBmbiAmIzQzOz0gMVVMIFx1MDAzY1x1MDAzYyBvcmRlcjtcbi1cdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0LyogYnVkZHlfb3JkZXJfdW5zYWZlKCkgaXMgcmFjeS4gVmFsaWRhdGUgdGhlIG9yZGVyIGJlZm9yZSBzaGlmdGluZy4gKi9cbiYjNDM7XHRcdFx0aWYgKG9yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0LypcbiYjNDM7XHRcdFx0XHQgKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgc3BsaXRzXG4mIzQzO1x0XHRcdFx0ICogY3Jvc3MtYm91bmRhcnkgUGFnZUJ1ZGR5LCB2ZXJpZnkgaXQuXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0XHRcdCAgICBwZm4gJiM0MzsgKDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpIFx1MDAzYz0gYm91bmRhcnlfcGZuKSB7XG4mIzQzO1x0XHRcdFx0cGZuICYjNDM7PSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGdvdG8gZmFpbGVkO1xuIFx0XHR9XG4gXG4gXHRcdC8qXG5AQCAtNDEyLDEwICYjNDM7NDE4LDI4IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxuIFx0XHRpZiAoUGFnZUNvbXBvdW5kKHBhZ2UpKSB7XG4gXHRcdFx0c3RydWN0IHBhZ2UgKmhlYWQgPSBjb21wb3VuZF9oZWFkKHBhZ2UpO1xuIFx0XHRcdHVuc2lnbmVkIGxvbmcgaGVhZF9wZm4gPSBwYWdlX3RvX3BmbihoZWFkKTtcbi1cdFx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gY29tcG91bmRfbnIoaGVhZCk7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludCBvcmRlciA9IGNvbXBvdW5kX29yZGVyKGhlYWQpO1xuJiM0MztcdFx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogY29tcG91bmRfb3JkZXIoKSBpcyByYWN5LiBDYXAgaXQgYXQgTUFYX0ZPTElPX09SREVSLiAqL1xuJiM0MztcdFx0XHRpZiAob3JkZXIgXHUwMDNlIE1BWF9GT0xJT19PUkRFUilcbiYjNDM7XHRcdFx0XHRnb3RvIGZhaWxlZDtcbiYjNDM7XG4mIzQzO1x0XHRcdG5yX3BhZ2VzID0gMVVMIFx1MDAzY1x1MDAzYyBvcmRlcjtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIGNvbXBvdW5kX2hlYWQoKSBpcyBhbHNvIHJhY3ksIHNvIHRoZSBkZXJpdmVkIGhlYWRfcGZuXG4mIzQzO1x0XHRcdCAqIG5lZWRzIGFkZGl0aW9uYWwgY2hlY2tzIHRvIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZC5cbiYjNDM7XHRcdFx0ICogT3RoZXJ3aXNlLCBqdXN0IGZhaWwgdGhlIGNoZWNrLiBwZm4gY29tZXMgZnJvbVxuJiM0MztcdFx0XHQgKiBfX2ZpcnN0X3ZhbGlkX3BhZ2UoKSBhcyBhIGxlZ2l0aW1hdGUgUEZOLCBzbyB1c2UgaXQgdG9cbiYjNDM7XHRcdFx0ICogY2hlY2sgaGVhZF9wZm4uXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoaGVhZF9wZm4gXHUwMDNlIHBmbiB8fCAhSVNfQUxJR05FRChoZWFkX3BmbiwgbnJfcGFnZXMpIHx8XG4mIzQzO1x0XHRcdCAgICBwZm4gLSBoZWFkX3BmbiBcdTAwM2U9IG5yX3BhZ2VzKVxuJiM0MztcdFx0XHRcdGdvdG8gZmFpbGVkO1xuIFxuIFx0XHRcdGlmIChoZWFkX3BmbiAmIzQzOyBucl9wYWdlcyBcdTAwM2M9IGJvdW5kYXJ5X3BmbiB8fFxuLVx0XHRcdCAgICBQYWdlSHVnZShwYWdlKSkge1xuJiM0MztcdFx0XHQgICAgUGFnZUh1Z2UoaGVhZCkpIHtcbiBcdFx0XHRcdHBmbiA9IGhlYWRfcGZuICYjNDM7IG5yX3BhZ2VzO1xuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjExbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9JU09MQVRJT04mIzM0OywKICAgICYjMzQ7Q09OVElHX0FMTE9DJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlJiMzNDssCiAgICAmIzM0O2FsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YmIzM0OywKICAgICYjMzQ7b2ZmbGluZV9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgYnkgdmFsaWRhdGluZyB0aGUgb3JkZXIgb2YgYnVkZHkgYW5kIGNvbXBvdW5kIHBhZ2VzIGJlZm9yZSB1c2luZyB0aGVtLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciBpbnZhbGlkIG1lbW9yeSBvcGVyYXRpb25zIGR1cmluZyBwYWdlIGlzb2xhdGlvbiwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZWJmY2YxMmUwMzI2NzVkODc1MTU5YzQyMGMxYjYxNGYzYzY0ZjcwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMTM6NDU6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9wYWdlX2lzb2xhdGlvbi5jIGIvbW0vcGFnZV9pc29sYXRpb24uYwppbmRleCAzMmNlOGE3ZDlkZjM1Li5lY2E2ZmI3OGY3M2E4IDEwMDY0NAotLS0gYS9tbS9wYWdlX2lzb2xhdGlvbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfaXNvbGF0aW9uLmMKQEAgLTM4NywxMyAmIzQzOzM4NywxOSBAQCBzdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3BmbiwKIAkJfQogCiAJCWlmIChQYWdlQnVkZHkocGFnZSkpIHsKLQkJCWludCBvcmRlciA9IGJ1ZGR5X29yZGVyKHBhZ2UpOwomIzQzOwkJCXVuc2lnbmVkIGludCBvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTsKIAotCQkJLyogcGFnZWJsb2NrX2lzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcygpIGhhbmRsZWQgdGhpcyAqLwotCQkJVk1fV0FSTl9PTl9PTkNFKHBmbiAmIzQzOyAoMSAmbHQ7Jmx0OyBvcmRlcikgJmd0OyBib3VuZGFyeV9wZm4pOwotCi0JCQlwZm4gJiM0Mzs9IDFVTCAmbHQ7Jmx0OyBvcmRlcjsKLQkJCWNvbnRpbnVlOwomIzQzOwkJCS8qIGJ1ZGR5X29yZGVyX3Vuc2FmZSgpIGlzIHJhY3kuIFZhbGlkYXRlIHRoZSBvcmRlciBiZWZvcmUgc2hpZnRpbmcuICovCiYjNDM7CQkJaWYgKG9yZGVyICZsdDs9IE1BWF9QQUdFX09SREVSICZhbXA7JmFtcDsKJiM0MzsJCQkJLyoKJiM0MzsJCQkJICogcGFnZWJsb2NrX2lzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcygpIHNwbGl0cwomIzQzOwkJCQkgKiBjcm9zcy1ib3VuZGFyeSBQYWdlQnVkZHksIHZlcmlmeSBpdC4KJiM0MzsJCQkJICovCiYjNDM7CQkJICAgIHBmbiAmIzQzOyAoMVVMICZsdDsmbHQ7IG9yZGVyKSAmbHQ7PSBib3VuZGFyeV9wZm4pIHsKJiM0MzsJCQkJcGZuICYjNDM7PSAxVUwgJmx0OyZsdDsgb3JkZXI7CiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KJiM0MzsJCQlnb3RvIGZhaWxlZDsKIAkJfQogCiAJCS8qCkBAIC00MTIsMTAgJiM0Mzs0MTgsMjggQEAgc3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sCiAJCWlmIChQYWdlQ29tcG91bmQocGFnZSkpIHsKIAkJCXN0cnVjdCBwYWdlICpoZWFkID0gY29tcG91bmRfaGVhZChwYWdlKTsKIAkJCXVuc2lnbmVkIGxvbmcgaGVhZF9wZm4gPSBwYWdlX3RvX3BmbihoZWFkKTsKLQkJCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBjb21wb3VuZF9ucihoZWFkKTsKJiM0MzsJCQl1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wb3VuZF9vcmRlcihoZWFkKTsKJiM0MzsJCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOwomIzQzOwomIzQzOwkJCS8qIGNvbXBvdW5kX29yZGVyKCkgaXMgcmFjeS4gQ2FwIGl0IGF0IE1BWF9GT0xJT19PUkRFUi4gKi8KJiM0MzsJCQlpZiAob3JkZXIgJmd0OyBNQVhfRk9MSU9fT1JERVIpCiYjNDM7CQkJCWdvdG8gZmFpbGVkOwomIzQzOwomIzQzOwkJCW5yX3BhZ2VzID0gMVVMICZsdDsmbHQ7IG9yZGVyOwomIzQzOwomIzQzOwkJCS8qCiYjNDM7CQkJICogY29tcG91bmRfaGVhZCgpIGlzIGFsc28gcmFjeSwgc28gdGhlIGRlcml2ZWQgaGVhZF9wZm4KJiM0MzsJCQkgKiBuZWVkcyBhZGRpdGlvbmFsIGNoZWNrcyB0byBtYWtlIHN1cmUgaXQgaXMgdmFsaWQuCiYjNDM7CQkJICogT3RoZXJ3aXNlLCBqdXN0IGZhaWwgdGhlIGNoZWNrLiBwZm4gY29tZXMgZnJvbQomIzQzOwkJCSAqIF9fZmlyc3RfdmFsaWRfcGFnZSgpIGFzIGEgbGVnaXRpbWF0ZSBQRk4sIHNvIHVzZSBpdCB0bwomIzQzOwkJCSAqIGNoZWNrIGhlYWRfcGZuLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChoZWFkX3BmbiAmZ3Q7IHBmbiB8fCAhSVNfQUxJR05FRChoZWFkX3BmbiwgbnJfcGFnZXMpIHx8CiYjNDM7CQkJICAgIHBmbiAtIGhlYWRfcGZuICZndDs9IG5yX3BhZ2VzKQomIzQzOwkJCQlnb3RvIGZhaWxlZDsKIAogCQkJaWYgKGhlYWRfcGZuICYjNDM7IG5yX3BhZ2VzICZsdDs9IGJvdW5kYXJ5X3BmbiB8fAotCQkJICAgIFBhZ2VIdWdlKHBhZ2UpKSB7CiYjNDM7CQkJICAgIFBhZ2VIdWdlKGhlYWQpKSB7CiAJCQkJcGZuID0gaGVhZF9wZm4gJiM0MzsgbnJfcGFnZXM7CiAJCQkJY29udGludWU7CiAJCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYWdlIElzb2xhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL3BhZ2VfaXNvbGF0aW9uLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZXkmIzM5O3ZlIG1hZGUgc29tZSBjaGFuZ2VzIHRvIGhvdyB3ZSBoYW5kbGUgYGJ1ZGR5X29yZGVyYCBhbmQgYGNvbXBvdW5kX29yZGVyYCBoZXJlLiBJbnN0ZWFkIG9mIGp1c3QgdXNpbmcgYGJ1ZGR5X29yZGVyYCBkaXJlY3RseSwgd2hpY2ggaXMgc29tZXRpbWVzIHJpc2t5LCB0aGV5JiMzOTt2ZSBpbnRyb2R1Y2VkIGEgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIGFkZGVkIHZhbGlkYXRpb24gYXJvdW5kIHRoZSBvcmRlci4gVGhhdCYjMzk7cyBhIGdvb2QgbW92ZSwgZ2VuZXJhbGx5LCBzYWZldHkgaXMgcGFyYW1vdW50LCBwYXJ0aWN1bGFybHkgaW4gbWVtb3J5IG1hbmFnZW1lbnQuCgpUaGV5JiMzOTt2ZSBhbHNvIGFkZGVkIHZhbGlkYXRpb24gZm9yIHRoZSBgY29tcG91bmRfb3JkZXJgIGFuZCBgY29tcG91bmRfaGVhZGAsIHdoaWNoIEkmIzM5O20gZ2xhZCB0byBzZWUuIEl0JiMzOTtzIGVhc3kgdG8gbWFrZSBhIG1pc3Rha2UgdGhlcmUgYW5kIGludHJvZHVjZSBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBDbGVhcmx5IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBkZWVwIHdpdGhpbiB0aGUgcGFnZSBpc29sYXRpb24gc3Vic3lzdGVtLiBUaGlzIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIG9mIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGhvdHBsdWcsIENNQSwgYW5kIGh1Z2VwYWdlIGFsbG9jYXRpb25zIOKAkyBhbGwgb2Ygd2hpY2ggcmVseSBoZWF2aWx5IG9uIHRoaXMgbWVjaGFuaXNtLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIHRvIHVuZGVyc3RhbmQgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiB0aGVzZSBhZGRlZCBjaGVja3MuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGlzIGRvZXNuJiMzOTt0IGNyZWF0ZSBhbnkgbmV3IHJhY2UgY29uZGl0aW9ucy4gR290dGEgY2hlY2sgaG93IHRoaXMgYWZmZWN0cyB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgaW5mcmFzdHJ1Y3R1cmUsIHBhcnRpY3VsYXJseSBkdXJpbmcgY29uY3VycmVudCBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2lzb2xhdGlvbi5jPTI4Mz1fX2ZpcnN0X3ZhbGlkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy0yOTgtLyoqXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjI5OTogKiBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2soKSAtLSB0cmllcyB0byBpc29sYXRlIGEgcGFnZWJsb2NrIHRoYXQgbWlnaHQgYmVcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzAwLSAqIHdpdGhpbiBhIGZyZWUgb3IgaW4tdXNlIHBhZ2UuXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy0zMDQtICogQHNraXBfaXNvbGF0aW9uOlx0dGhlIGZsYWcgdG8gc2tpcCB0aGUgcGFnZWJsb2NrIGlzb2xhdGlvbiBpbiBzZWNvbmRcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6MzA1OiAqXHRcdFx0aXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKClcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzA2LSAqXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy0zMTktICovXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjMyMDpzdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3Bmbixcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzIxLVx0XHRcdGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUsIGJvb2wgaXNvbGF0ZV9iZWZvcmUsXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYz01MDY9aW50IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTE3LVx0LyogaXNvbGF0ZSBbaXNvbGF0ZV9zdGFydCwgaXNvbGF0ZV9zdGFydCAmIzQzOyBwYWdlYmxvY2tfbnJfcGFnZXMpIHBhZ2VibG9jayAqL1xubW0vcGFnZV9pc29sYXRpb24uYzo1MTg6XHRyZXQgPSBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2soaXNvbGF0ZV9zdGFydCwgbW9kZSwgZmFsc2UsXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUxOS1cdFx0XHRza2lwX2lzb2xhdGlvbik7XG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy01MjYtXHQvKiBpc29sYXRlIFtpc29sYXRlX2VuZCAtIHBhZ2VibG9ja19ucl9wYWdlcywgaXNvbGF0ZV9lbmQpIHBhZ2VibG9jayAqL1xubW0vcGFnZV9pc29sYXRpb24uYzo1Mjc6XHRyZXQgPSBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2soaXNvbGF0ZV9lbmQsIG1vZGUsIHRydWUsIHNraXBfaXNvbGF0aW9uKTtcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTI4LVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MDYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBDb2RlJiMzOTtzIExvZ2ljKioKCkFscmlnaHQsIHNvIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGlzIGtleSwgYW5kIGl0JiMzOTtzIGJlaW5nIGtpY2tlZCBvZmYgYnkgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAuIE1ha2VzIHNlbnNlLCB0aGV5JiMzOTtyZSBwcm9iYWJseSByZWxhdGVkIGluIGEgcGFnZSBpc29sYXRpb24gcHJvY2Vzcy4gTm93LCBJIG5lZWQgdG8gc2VlIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIGtub3cgKndoZXJlKiBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCBpcyBiZWluZyBjYWxsZWQuIFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgbmV4dCBzdGVwLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0cyBhbmQgd2hvIGlzIGdpdmluZyB0aGUgb3JkZXIgdG8gc3RhcnQgdGhlIHJhbmdlLWlzb2xhdGlvbiB3aWxsIGdpdmUgbWUgaW1wb3J0YW50IGluc2lnaHQgaW50byB0aGUgb3ZlcmFsbCBmdW5jdGlvbmFsaXR5LiBMZXQmIzM5O3MgdHJhY2UgYmFjayBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmg9NjE9Ym9vbCBwYWdlYmxvY2tfdW5pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlKTtcbmluY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaC02Mi1cbmluY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaDo2MzppbnQgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmgtNjQtXHRcdFx0ICAgICBlbnVtIHBiX2lzb2xhdGVfbW9kZSBtb2RlKTtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5MDI9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTY4LVx0Lyogc2V0IGFib3ZlIHJhbmdlIGFzIGlzb2xhdGVkICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE5Njk6XHRyZXQgPSBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2Uoc3RhcnRfcGZuLCBlbmRfcGZuLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTcwLVx0XHRcdFx0ICAgICAgIFBCX0lTT0xBVEVfTU9ERV9NRU1fT0ZGTElORSk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTcxMDg9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MTQ0LVx0ICogaGF2ZSBkaWZmZXJlbnQgc2l6ZXMsIGFuZCBkdWUgdG8gdGhlIHdheSBwYWdlIGFsbG9jYXRvclxubW0vcGFnZV9hbGxvYy5jOjcxNDU6XHQgKiB3b3JrLCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKSBoYXMgc3BlY2lhbCBoYW5kbGluZ3MgZm9yIHRoaXMuXG5tbS9wYWdlX2FsbG9jLmMtNzE0Ni1cdCAqXG4tLVxubW0vcGFnZV9hbGxvYy5jLTcxNjEtXG5tbS9wYWdlX2FsbG9jLmM6NzE2MjpcdHJldCA9IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZShzdGFydCwgZW5kLCBtb2RlKTtcbm1tL3BhZ2VfYWxsb2MuYy03MTYzLVx0aWYgKHJldClcbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jPTMyMD1zdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3Bmbixcbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ3MC0vKipcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NDcxOiAqIHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSgpIC0gbWFyayBwYWdlIHJhbmdlIE1JR1JBVEVfSVNPTEFURVxubW0vcGFnZV9pc29sYXRpb24uYy00NzItICogQHN0YXJ0X3BmbjpcdFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgcmFuZ2UgdG8gYmUgaXNvbGF0ZWQuXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy01MDUtICovXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjUwNjppbnQgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUwNy1cdFx0XHQgICAgIGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUpXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy01NDktLyoqXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjU1MDogKiB1bmRvX2lzb2xhdGVfcGFnZV9yYW5nZSAtIHVuZG8gZWZmZWN0cyBvZiBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKVxubW0vcGFnZV9pc29sYXRpb24uYy01NTEtICogQHN0YXJ0X3BmbjpcdFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgaXNvbGF0ZWQgcmFuZ2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzE0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKlRyYWNpbmcgdGhlIEFsbG9jYXRpb24gQ2hhaW4qKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgYmVpbmcgY2FsbGVkLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoZXJlKiBpdCYjMzk7cyBjb21pbmcgZnJvbS4gSXQgbG9va3MgbGlrZSBib3RoIGBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZmAgKGFuZCwgbW9yZSBsaWtlbHksIGBhbGxvY19jb250aWdfcmFuZ2VgIGl0c2VsZikgYW5kIGBvZmZsaW5lX3BhZ2VzYCBhcmUgdGhlIGN1bHByaXRzLiBIbW1tLCBnb3R0YSBmb2xsb3cgdGhlIGJyZWFkY3J1bWJzLiBTaW5jZSBgYWxsb2NfY29udGlnX3JhbmdlYCBzZWVtcyB0byBiZSB0aGUgbW9yZSBnZW5lcmFsIGFsbG9jYXRvciBoZXJlLCBsZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvICp0aGF0KiByb3V0aW5lLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGFjdGlvbiBpcyBwcm9iYWJseS4gSSYjMzk7bGwgZm9jdXMgb24gd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZSwgYW5kIHNlZSBpZiBpdCBnaXZlcyBtb3JlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfY29udGlnX3JhbmdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0PTM5MD1zY2VuYXJpb3M6IG1lbW9yeSBvZmZsaW5lLCBtZW1vcnkgZmFpbHVyZSwgbG9uZ3Rlcm0gcGlubmluZywgc3lzY2FsbHMobWJpbmQsXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdDozOTE6bWlncmF0ZV9wYWdlcyBhbmQgbW92ZV9wYWdlcyksIGFsbG9jX2NvbnRpZ19yYW5nZSgpIGFuZCBhbGxvY19jb250aWdfcGFnZXMoKS5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0LTM5Mi1Ob3cgb25seSBtZW1vcnkgb2ZmbGluZSwgbWVtb3J5IGZhaWx1cmUgYW5kIHN5c2NhbGxzIGFsbG93IGZhbGxiYWNraW5nIHRvIGFsbG9jYXRlXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jPTExODc9c3RhdGljIHZvaWQgdmlydGlvX21lbV9mYWtlX29ubGluZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTIwNS1cdFx0ICogb25saW5pbmcgdGhlIG1lbW9yeSBibG9jay4gT3RoZXJ3aXNlLCBpdCB3YXMgYWxsb2NhdGVkXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6MTIwNjpcdFx0ICogdXNpbmcgYWxsb2NfY29udGlnX3JhbmdlKCkuIEFsbCBwYWdlcyBpbiBhIHN1YmJsb2NrIGFyZVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTEyMDctXHRcdCAqIGFsaWtlLlxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYz0xMjI0PXN0YXRpYyBpbnQgdmlydGlvX21lbV9mYWtlX29mZmxpbmUoc3RydWN0IHZpcnRpb19tZW0gKnZtLCB1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTIzMC1cdC8qXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6MTIzMTpcdCAqIFRPRE86IFdlIHdhbnQgYW4gYWxsb2NfY29udGlnX3JhbmdlKCkgbW9kZSB0aGF0IHRyaWVzIHRvIGFsbG9jYXRlXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTIzMi1cdCAqIGhhcmRlciAoZS5nLiwgZGVhbGluZyB3aXRoIHRlbXBvcmFyaWx5IHBpbm5lZCBwYWdlcywgUENQKSwgZXNwZWNpYWxseVxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMjQ1LVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjEyNDY6XHRcdHJjID0gYWxsb2NfY29udGlnX3JhbmdlKHBmbiwgcGZuICYjNDM7IG5yX3BhZ2VzLCBBQ1JfRkxBR1NfTk9ORSxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMjQ3LVx0XHRcdFx0XHRHRlBfS0VSTkVMKTtcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9MjUzNT1zdGF0aWMgaW50IHZpcnRpb19tZW1faW5pdF9ob3RwbHVnKHN0cnVjdCB2aXJ0aW9fbWVtICp2bSlcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMjU1Ny1cdC8qXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6MjU1ODpcdCAqIGFsbG9jX2NvbnRpZ19yYW5nZSgpIHdvcmtzIHJlbGlhYmx5IHdpdGggcGFnZWJsb2NrXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMjU1OS1cdCAqIGdyYW51bGFyaXR5IG9uIFpPTkVfTk9STUFMLCB1c2UgcGFnZWJsb2NrX25yX3BhZ2VzLlxuLS1cbmluY2x1ZGUvbGludXgvY21hLmgtMTUtLypcbmluY2x1ZGUvbGludXgvY21hLmg6MTY6ICogIHRoZSBidWRkeSAtLSBlc3BlY2lhbGx5IHBhZ2VibG9jayBtZXJnaW5nIGFuZCBhbGxvY19jb250aWdfcmFuZ2UoKVxuaW5jbHVkZS9saW51eC9jbWEuaC0xNy0gKiAtLSBjYW4gZGVhbCB3aXRoIG9ubHkgc29tZSBwYWdlYmxvY2tzIG9mIGEgaGlnaGVyLW9yZGVyIHBhZ2UgYmVpbmdcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTQ0OD1pbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC00NTItXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQ1MzppbnQgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU0LVx0XHRhY3JfZmxhZ3NfdCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spO1xuaW5jbHVkZS9saW51eC9nZnAuaDo0NTU6I2RlZmluZSBhbGxvY19jb250aWdfcmFuZ2UoLi4uKVx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDU2Olx0YWxsb2NfaG9va3MoYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1Ny1cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTg3Mz1lbnVtIHpvbmVfdHlwZSB7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC05MzYtXHQgKiAgICBtZW1vcnkgb2ZmbGluaW5nLCBob3dldmVyLCBjYW5ub3QgYmUgbW92ZWQvYWxsb2NhdGVkLiBUaGVzZVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo5Mzc6XHQgKiAgICB0ZWNobmlxdWVzIG1pZ2h0IHVzZSBhbGxvY19jb250aWdfcmFuZ2UoKSB0byBoaWRlIHByZXZpb3VzbHlcbmluY2x1ZGUvbGludXgvbW16b25lLmgtOTM4LVx0ICogICAgZXhwb3NlZCBwYWdlcyBmcm9tIHRoZSBidWRkeSBhZ2FpbiAoZS5nLiwgdG8gaW1wbGVtZW50IHNvbWUgc29ydFxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtOTUwLVx0ICogSW4gZ2VuZXJhbCwgbm8gdW5tb3ZhYmxlIGFsbG9jYXRpb25zIHRoYXQgZGVncmFkZSBtZW1vcnkgb2ZmbGluaW5nXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjk1MTpcdCAqIHNob3VsZCBlbmQgdXAgaW4gWk9ORV9NT1ZBQkxFLiBBbGxvY2F0b3JzIChsaWtlIGFsbG9jX2NvbnRpZ19yYW5nZSgpKVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC05NTItXHQgKiBoYXZlIHRvIGV4cGVjdCB0aGF0IG1pZ3JhdGluZyBwYWdlcyBpbiBaT05FX01PVkFCTEUgY2FuIGZhaWwgKGV2ZW5cbi0tXG5tbS9jbWEuYz0xMDM9Ym9vbCBjbWFfdmFsaWRhdGVfem9uZXMoc3RydWN0IGNtYSAqY21hKVxuLS1cbm1tL2NtYS5jLTEyNC1cdFx0Lypcbm1tL2NtYS5jOjEyNTpcdFx0ICogYWxsb2NfY29udGlnX3JhbmdlKCkgcmVxdWlyZXMgdGhlIHBmbiByYW5nZSBzcGVjaWZpZWRcbm1tL2NtYS5jLTEyNi1cdFx0ICogdG8gYmUgaW4gdGhlIHNhbWUgem9uZS4gU2ltcGxpZnkgYnkgZm9yY2luZyB0aGUgZW50aXJlXG4tLVxubW0vaHVnZXRsYi5jPTI3Mjk9aW50IGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuLS1cbm1tL2h1Z2V0bGIuYy0yNzM4LVx0ICogRmVuY2Ugb2ZmIGdpZ2FudGljIHBhZ2VzIGFzIHRoZXJlIGlzIGEgY3ljbGljIGRlcGVuZGVuY3kgYmV0d2VlblxubW0vaHVnZXRsYi5jOjI3Mzk6XHQgKiBhbGxvY19jb250aWdfcmFuZ2UgYW5kIHRoZW0uIFJldHVybiAtRU5PTUVNIGFzIHRoaXMgaGFzIHRoZSBlZmZlY3Rcbm1tL2h1Z2V0bGIuYy0yNzQwLVx0ICogb2YgYmFpbGluZyBvdXQgcmlnaHQgYXdheSB3aXRob3V0IGZ1cnRoZXIgcmV0cnlpbmcuXG4tLVxubW0vaW50ZXJuYWwuaD0xMDE3PXN0cnVjdCBjb21wYWN0X2NvbnRyb2wge1xuLS1cbm1tL2ludGVybmFsLmgtMTA1My1cdFx0XHRcdFx0ICovXG5tbS9pbnRlcm5hbC5oOjEwNTQ6XHRib29sIGFsbG9jX2NvbnRpZztcdFx0LyogYWxsb2NfY29udGlnX3JhbmdlIGFsbG9jYXRpb24gKi9cbm1tL2ludGVybmFsLmgtMTA1NS19O1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz03MjQ2PUVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MjQ4LS8qKlxubW0vcGFnZV9hbGxvYy5jOjcyNDk6ICogYWxsb2NfY29udGlnX3JhbmdlKCkgLS0gdHJpZXMgdG8gYWxsb2NhdGUgZ2l2ZW4gcmFuZ2Ugb2YgcGFnZXNcbm1tL3BhZ2VfYWxsb2MuYy03MjUwLSAqIEBzdGFydDpcdHN0YXJ0IFBGTiB0byBhbGxvY2F0ZVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MjY0LSAqL1xubW0vcGFnZV9hbGxvYy5jOjcyNjU6aW50IGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG5tbS9wYWdlX2FsbG9jLmMtNzI2Ni1cdFx0XHQgICAgICBhY3JfZmxhZ3NfdCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0vcGFnZV9hbGxvYy5jLTcyNzgtfVxubW0vcGFnZV9hbGxvYy5jOjcyNzk6RVhQT1JUX1NZTUJPTChhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy03MjgwLVxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmM9MTM0PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqaGFzX3VubW92YWJsZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMTQ0LVx0XHQvKlxubW0vcGFnZV9pc29sYXRpb24uYzoxNDU6XHRcdCAqIENNQSBhbGxvY2F0aW9ucyAoYWxsb2NfY29udGlnX3JhbmdlKSByZWFsbHkgbmVlZCB0byBtYXJrXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTE0Ni1cdFx0ICogaXNvbGF0ZSBDTUEgcGFnZWJsb2NrcyBldmVuIHdoZW4gdGhleSBhcmUgbm90IG1vdmFibGUgaW4gZmFjdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMjkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA4MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgTWVtb3J5IElzb2xhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgLCB3aGljaCBpcyBjYWxsZWQgYnkgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAuIEFuZCBJIGtub3cgdGhhdCBgYWxsb2NfY29udGlnX3JhbmdlYCB1c2VzIHRoaXMgY29kZSBwYXRoLCBhbG9uZyB3aXRoIHZpcnRpb19tZW0sIGFuZCBodWdlcGFnZSBhbGxvY2F0aW9uIOKAkyBzbyBpdCYjMzk7cyBhICp2ZXJ5KiBpbXBvcnRhbnQgc2VjdGlvbiBvZiBjb2RlLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgY2hlY2tzIHJlbGF0ZWQgdG8gYGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKWAgYW5kIGBjb21wb3VuZF9vcmRlcihoZWFkKWAuIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGlzIGlzIGFib3V0IHByZXZlbnRpbmcgc29tZSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBkdXJpbmcgdGhlIHBhZ2UgaXNvbGF0aW9uIHByb2Nlc3MuIEZ1bmN0aW9uYWwgY2hhbmdlLCB0aGVuLgoKTGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgY2hhbmdlcywgbGluZSBieSBsaW5lLiBGaXJzdCwgd2l0aCBidWRkeSBwYWdlczogdGhlIGNvZGUgbm93IHVzZXMgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgKGluc3RlYWQgb2YgdGhlIG9sZGVyIHNhZmUgdmVyc2lvbiksIGJ1dCBhZGRzIGNoZWNrcyB0byB2YWxpZGF0ZSB0aGUgYG9yZGVyYCBiZWZvcmUgYW55IGNhbGN1bGF0aW9ucywgYW5kIGVuc3VyZXMgdGhlIHBhZ2UgYm91bmRhcnkgaXMgcmVzcGVjdGVkLiBUaGlzIGlzIHNtYXJ0LCBkZWFsaW5nIHdpdGggdGhvc2UgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aGVyZSBgYnVkZHlfb3JkZXJfdW5zYWZlYCBtaWdodCByZXR1cm4gYSB2YWx1ZSB0aGF0JiMzOTtzIG5vIGxvbmdlciB2YWxpZC4gSWYgdGhlc2UgY2hlY2tzIGZhaWwsIGl0IGp1bXBzIHRvIGBmYWlsZWRgLgoKQW5kIHRoZW4sIHdpdGggY29tcG91bmQgcGFnZXM6IGluc3RlYWQgb2YgZGlyZWN0bHkgY2FsY3VsYXRpbmcgYG5yX3BhZ2VzYCwgaXQgY2FsY3VsYXRlcyBhbiBgb3JkZXJgIHZpYSBgY29tcG91bmRfb3JkZXIoaGVhZClgLiBUaGVyZSYjMzk7cyBub3cgYSBjaGVjayB0aGF0IGNhcHMgdGhlIG9yZGVyIHRvIGBNQVhfRk9MSU9fT1JERVJgIChhbm90aGVyIGF0dGVtcHQgdG8gbWl0aWdhdGUgcmFjZXMpLiBBbHNvLCB3ZSYjMzk7cmUgdmFsaWRhdGluZyB0aGUgYGhlYWRfcGZuYCBub3cuICBXZSBjaGVjayB0aGF0IHRoZSBkZXJpdmVkIGBoZWFkX3BmbmAgZnJvbSBgY29tcG91bmRfaGVhZCgpYCBpcyBzdGlsbCB2YWxpZCwgZ2l2ZW4gYHBmbmAuIElmIGFueXRoaW5nIGlzIG91dCBvZiB3aGFjayAoaGVhZCBpcyBhZnRlciBwZm4sIG9yIHVuYWxpZ25lZCwgZXRjLiksIHdlIGJhaWwgb3V0LiBJdCBzZWVtcyBsaWtlIHRoZSBnb2FsIGhlcmUgaXMgdG8gbWFrZSBzdXJlIHdlIGRvbiYjMzk7dCBlbmQgdXAgd2l0aCBpbnZhbGlkIGNhbGN1bGF0aW9ucyBiYXNlZCBvbiBwb3RlbnRpYWxseSBzdGFsZSBjb21wb3VuZCBwYWdlIG1ldGFkYXRhLgoKVGhpcyBpcyBpbW1lZGlhdGVseSBzb21ldGhpbmcgd29ydGggZnV6emluZywgYW5kIHByb2JhYmx5IHdvcnRoIGEgZGVlcGVyIGRpdmUuIFNvLCB3aGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzPyBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBpdHNlbGYgaXMgc3RhdGljLCBzbyB0aGF0JiMzOTtzIG5vdCBkaXJlY3RseSBleHBvc2VkLiBIb3dldmVyLCBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCwgYGFsbG9jX2NvbnRpZ19yYW5nZWAsIGBhbGxvY19jb250aWdfcGFnZXNgLCBhbmQgYG9mZmxpbmVfcGFnZXNgIGFyZSAqbm90KiBzdGF0aWMuIFdlIHNob3VsZCBjaGVjayB0aGUgdXNhZ2Ugb2YgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgdG8gdW5kZXJzdGFuZCBpdHMgYnJvYWRlciBpbXBhY3QsIGJlY2F1c2UgdGhhdCBtaWdodCBiZSBvdXIgbWFpbiB0YXJnZXQgZm9yIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmg9NjE9Ym9vbCBwYWdlYmxvY2tfdW5pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlKTtcbmluY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaC02Mi1cbmluY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaDo2MzppbnQgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmgtNjQtXHRcdFx0ICAgICBlbnVtIHBiX2lzb2xhdGVfbW9kZSBtb2RlKTtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5MDI9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTY4LVx0Lyogc2V0IGFib3ZlIHJhbmdlIGFzIGlzb2xhdGVkICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE5Njk6XHRyZXQgPSBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2Uoc3RhcnRfcGZuLCBlbmRfcGZuLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTcwLVx0XHRcdFx0ICAgICAgIFBCX0lTT0xBVEVfTU9ERV9NRU1fT0ZGTElORSk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTcxMDg9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MTQ0LVx0ICogaGF2ZSBkaWZmZXJlbnQgc2l6ZXMsIGFuZCBkdWUgdG8gdGhlIHdheSBwYWdlIGFsbG9jYXRvclxubW0vcGFnZV9hbGxvYy5jOjcxNDU6XHQgKiB3b3JrLCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKSBoYXMgc3BlY2lhbCBoYW5kbGluZ3MgZm9yIHRoaXMuXG5tbS9wYWdlX2FsbG9jLmMtNzE0Ni1cdCAqXG4tLVxubW0vcGFnZV9hbGxvYy5jLTcxNjEtXG5tbS9wYWdlX2FsbG9jLmM6NzE2MjpcdHJldCA9IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZShzdGFydCwgZW5kLCBtb2RlKTtcbm1tL3BhZ2VfYWxsb2MuYy03MTYzLVx0aWYgKHJldClcbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jPTMyMD1zdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3Bmbixcbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ3MC0vKipcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NDcxOiAqIHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSgpIC0gbWFyayBwYWdlIHJhbmdlIE1JR1JBVEVfSVNPTEFURVxubW0vcGFnZV9pc29sYXRpb24uYy00NzItICogQHN0YXJ0X3BmbjpcdFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgcmFuZ2UgdG8gYmUgaXNvbGF0ZWQuXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy01MDUtICovXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjUwNjppbnQgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUwNy1cdFx0XHQgICAgIGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUpXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy01NDktLyoqXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjU1MDogKiB1bmRvX2lzb2xhdGVfcGFnZV9yYW5nZSAtIHVuZG8gZWZmZWN0cyBvZiBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKVxubW0vcGFnZV9pc29sYXRpb24uYy01NTEtICogQHN0YXJ0X3BmbjpcdFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgaXNvbGF0ZWQgcmFuZ2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM4MgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aGluZ3M6CgoqKkNoZWNraW5nIEdsb2JhbCBQYWdlIEFsbG9jYXRpb24gTWVjaGFuaXNtcyoqCgpPa2F5LCBzbyBJIHNlZSBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCBpcyBhIGdsb2JhbCB2YXJpYWJsZSwgYWNjZXNzaWJsZSBldmVyeXdoZXJlLiAgU2ltaWxhcmx5LCBgYWxsb2NfY29udGlnX3JhbmdlYCBoYXMgZ2xvYmFsIHNjb3BlIGFzIHdlbGwuIEFuZCBJIGNhbiYjMzk7dCBmb3JnZXQgYWJvdXQgYG9mZmxpbmVfcGFnZXNgISBUaGVzZSBhcmUga2V5IGNvbXBvbmVudHMuICBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgYWxsb2NfY29udGlnX3JhbmdlYCB3b3JrcyBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgaXQgaXMgaW50ZWdyYWwgdG8gaG93IHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgaGFuZGxlcyBjb250aWd1b3VzIHJhbmdlcy4gSSBzaG91bGQgZGVsdmUgaW50byBpdHMgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBnbG9iYWwgdmFyaWFibGVzLiAgQmVzdCBwbGFjZSB0byBzdGFydCBpcyBsaWtlbHkgYG1tL3BhZ2VfYWxsb2MuY2AgdG8gc2VlIGhvdyBpdCBpcyB3b3JraW5nLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIG90aGVyIHZhcmlhYmxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfY29udGlnX3JhbmdlX25vcHJvZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2dmcC5oPTQ0OD1pbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC00NTItXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQ1MzppbnQgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU0LVx0XHRhY3JfZmxhZ3NfdCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spO1xuaW5jbHVkZS9saW51eC9nZnAuaC00NTUtI2RlZmluZSBhbGxvY19jb250aWdfcmFuZ2UoLi4uKVx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDU2Olx0YWxsb2NfaG9va3MoYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1Ny1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzI0Nj1FWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzI2NC0gKi9cbm1tL3BhZ2VfYWxsb2MuYzo3MjY1OmludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vcGFnZV9hbGxvYy5jLTcyNjYtXHRcdFx0ICAgICAgYWNyX2ZsYWdzX3QgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03Mjc4LX1cbm1tL3BhZ2VfYWxsb2MuYzo3Mjc5OkVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZik7XG5tbS9wYWdlX2FsbG9jLmMtNzI4MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAxMAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRob3NlIGZ1bmN0aW9ucyBhcyBwb3RlbnRpYWwgY2FuZGlkYXRlcyBmb3IgYEZvY3VzU3ltYm9sc2AuCgoqKkZvY3VzU3ltYm9sIENhbmRpZGF0ZSBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZmAgYW5kIGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgLiBUaGV5IGJvdGgganVtcCBvdXQgYXMgcG90ZW50aWFsIGNhbmRpZGF0ZXMgZm9yIGluY2x1c2lvbiBpbiBgRm9jdXNTeW1ib2xzYC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgcHJlY29uZGl0aW9ucywgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCBiZWZvcmUgSSBjYW4gc3RhcnQgdG8gbG9vayBkZWVwZXIgaW50byBlaXRoZXIgZnVuY3Rpb24uCgpGaXJzdCwgSSYjMzk7bGwgZm9jdXMgb24gYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgc2luY2UgdGhlIGNvZGUgc2VlbXMgdG8gaW5kaWNhdGUgd2hlcmUgdGhlIHNvdXJjZSBmaWxlIG1pZ2h0IGJlOiBgbW0vcGFnZV9pc29sYXRpb24uY2AuIEkmIzM5O2xsIGdvIGNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgLCBhbmQgc2VlIGlmIEkgY2FuIHZlcmlmeSB0aGF0IGBwYWdlX2lzb2xhdGlvbi5vYCBpcyBiZWluZyBidWlsdCBhbmQgY29tcGlsZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGJhc2ljIGNvbmZpZGVuY2UgdG8gY29udGludWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VfaXNvbGF0aW9uLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTE3PW9iai0kKENPTkZJR19QQUdFX09XTkVSKSAmIzQzOz0gcGFnZV9vd25lci5vXG5tbS9NYWtlZmlsZToxMTg6b2JqLSQoQ09ORklHX01FTU9SWV9JU09MQVRJT04pICYjNDM7PSBwYWdlX2lzb2xhdGlvbi5vXG5tbS9NYWtlZmlsZS0xMTktb2JqLSQoQ09ORklHX1pTTUFMTE9DKVx0JiM0Mzs9IHpzbWFsbG9jLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM3OAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgcmVsYXRlcyB0byB0aGUga2VybmVsIGNvbmZpZzoKCioqTWVtb3J5IElzb2xhdGlvbiBDb25maWd1cmF0aW9uIFJldmlldyoqCgpPa2F5LCB0aGUgcHJvYmxlbSBzdGF0ZW1lbnQgZXhwbGljaXRseSBtZW50aW9ucyBgQ09ORklHX01FTU9SWV9JU09MQVRJT05gIGFzIGEgcmVxdWlyZW1lbnQuIFRpbWUgdG8gY29uZmlybSB0aGlzIGlzIGVuYWJsZWQgYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBzeXN0ZW0uIFNwZWNpZmljYWxseSwgdGhhdCBtZWFucyBkaWdnaW5nIGludG8gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIHJldmlldyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgdG8gc2VlIGhvdyBgQ09ORklHX01FTU9SWV9JU09MQVRJT05gIGlzIGhhbmRsZWQsIHdoYXQgb3RoZXIgb3B0aW9ucyBpdCBtaWdodCBkZXBlbmQgb24sIGFuZCBpZiB0aGVyZSBhcmUgYW55IGNhdmVhdHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBHb3R0YSBtYWtlIHN1cmUgd2UmIzM5O3JlIG5vdCBpbmFkdmVydGVudGx5IGRpc2FibGluZyBvdGhlciBjcnVjaWFsIGZlYXR1cmVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYG1tL0tjb25maWdgIHJldmVhbHMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9JU09MQVRJT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz00OTk9Y29uZmlnIE5VTUFfS0VFUF9NRU1JTkZPXG4tLVxubW0vS2NvbmZpZy01MDEtXG5tbS9LY29uZmlnOjUwMjpjb25maWcgTUVNT1JZX0lTT0xBVElPTlxubW0vS2NvbmZpZy01MDMtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NjgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgTUVNT1JZX0lTT0xBVElPTmAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgTUVNT1JZX0lTT0xBVElPTmAgaXMgYSBib29sZWFuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBkcml2aW5nIHRoaXMuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgYmVpbmcgc2VsZWN0ZWQgb3IgZW5hYmxlZCBieSBvdGhlciBjb25maWd1cmF0aW9ucyDigJMgYSBkZXBlbmRlbmN5LCBzbyB0byBzcGVhay4gVGltZSB0byB0cmFjZSB0aGUgc2VsZWN0cyBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgY2F1c2luZyB0aGlzIHRvIGZsaXAgdG8gdHJ1ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zIGhlcmU7IEkga25vdyB3aGF0IG1lbW9yeSBpc29sYXRpb24gKmlzKiwgYnV0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IGluICp0aGlzKiBzeXN0ZW0gd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoZXJlIHRoaXMgZmxhZyBpcyBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTUVNT1JZX0lTT0xBVElPTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTUyMz1tZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnLTUyNC1cdGJvb2wgXCYjMzQ7TWVtb3J5IGhvdHBsdWdcJiMzNDtcbm1tL0tjb25maWc6NTI1Olx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cbm1tL0tjb25maWctNTI2LVx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxuLS1cbm1tL0tjb25maWc9MTA2Nz1jb25maWcgQ01BXG4tLVxubW0vS2NvbmZpZy0xMDcwLVx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZzoxMDcxOlx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cbm1tL0tjb25maWctMTA3Mi1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMTkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBLZXJuZWwgTWVtb3J5IEFsbG9jYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB3b3JraW5nIG9uIGNvbmZpZ3VyaW5nIHRoaXMga2VybmVsLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gbWVtb3J5IGFsbG9jYXRpb24gZmVhdHVyZXMgYXJlIGltcG9ydGFudCBoZXJlLiBJIHNlZSB0aGF0IGlmIEkgZW5hYmxlIGBNRU1PUllfSE9UUExVR2Agb3IgYENNQWAsIEkgYXV0b21hdGljYWxseSBhbHNvIHNlbGVjdCBgTUVNT1JZX0lTT0xBVElPTmAuIE1ha2VzIHNlbnNlOyBob3RwbHVnZ2luZyBtZW1vcnkgb3IgdXNpbmcgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbiBsaWtlbHkgbmVlZHMgYSBkZWRpY2F0ZWQgaXNvbGF0ZWQgcmVnaW9uLiBUaGVyZWZvcmUsIEkgc2hvdWxkIGVuYWJsZSBib3RoIGBNRU1PUllfSE9UUExVR2AgYW5kIGBDTUFgLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4KCk5vdywgSSBhbHNvIHNlZSB0aGF0IGBDT05USUdfQUxMT0NgIGlzIHBvdGVudGlhbGx5IHRpZWQgdG8gYm90aCBgQ01BYCBhbmQgYE1FTU9SWV9JU09MQVRJT05gLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoYXQgY29ubmVjdGlvbi4gSSYjMzk7bGwgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBDT05USUdfQUxMT0NgIG5vdyB0byBjb25maXJtIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIHJvbGUgaW4gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUuIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBpbXBhY3Qgb2YgZW5hYmxpbmcgdGhlc2UgZGlmZmVyZW50IGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ09OVElHX0FMTE9DJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NzA5PWNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxuLS1cbm1tL0tjb25maWctNzE4LVxubW0vS2NvbmZpZzo3MTk6Y29uZmlnIENPTlRJR19BTExPQ1xubW0vS2NvbmZpZy03MjAtXHRkZWZfYm9vbCAoTUVNT1JZX0lTT0xBVElPTiBcdTAwMjZcdTAwMjYgQ09NUEFDVElPTikgfHwgQ01BXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzkwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIHRoZSBgQ09OVElHX0FMTE9DYCBvcHRpb24gaXMgZWZmZWN0aXZlbHkgcmVkdW5kYW50LiBJdCYjMzk7cyBkZWZpbmVkIGFzIGEgYm9vbGVhbiBleHByZXNzaW9uIHRoYXQgaGluZ2VzIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgTUVNT1JZX0lTT0xBVElPTmAsIGBDT01QQUNUSU9OYCwgYW5kIGBDTUFgIG9wdGlvbnMuIFRoZSBsb2dpYyBoZXJlIGlzIGNsZWFyOiBgQ09OVElHX0FMTE9DYCBpcyBlbmFibGVkIGlmICplaXRoZXIqIGBDTUFgIGlzIGVuYWJsZWQgKm9yKiBgTUVNT1JZX0lTT0xBVElPTmAgKmFuZCogYENPTVBBQ1RJT05gIGFyZSBlbmFibGVkIHRvZ2V0aGVyLiBUaGVyZWZvcmUsIGlmIHdlIHdhbnQgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbiwgd2UgY2FuIGp1c3QgZW5hYmxlIGBDTUFgIGRpcmVjdGx5LiBUaGF0JiMzOTtzIHRoZSBzaW1wbGVzdCBwYXRoIGFuZCBpdCBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIHRob3NlIG90aGVyIHR3byBhcmUgZW5hYmxlZCB0b28sIGJlY2F1c2UgdGhleSBnZXQgYnVuZGxlZCBpbnRvIHRoZSBlcXVhdGlvbi4KCk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGl04oCZcyBhbHdheXMgd2lzZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IG15IGFzc3VtcHRpb24gaG9sZHMgdXAgaW4gcHJhY3RpY2UsIHRoYXQgdGhlcmUgaXNuJiMzOTt0IHNvbWUgb3RoZXIgc3VidGxlIGNvbmRpdGlvbiBvciBkZXBlbmRlbmN5IGx1cmtpbmcgc29tZXdoZXJlLiBJIHNob3VsZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXRzIGJlaGF2aW91ciBpcyBnb3Zlcm5lZCBkaXJlY3RseSBieSBgQ01BYCBvciBgQ09OVElHX0FMTE9DYCwgb3IgdGhhdCBpdCYjMzk7cyBjb3JyZWN0bHkgaGFuZGxlZCB1bmRlciB0aGVzZSBjb25kaXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgY29udHJvbCBpdHMgZXhlY3V0aW9uLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfY29udGlnX3JhbmdlX25vcHJvZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2dmcC5oPTQ0OD1pbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC00NTItXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQ1MzppbnQgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU0LVx0XHRhY3JfZmxhZ3NfdCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spO1xuaW5jbHVkZS9saW51eC9nZnAuaC00NTUtI2RlZmluZSBhbGxvY19jb250aWdfcmFuZ2UoLi4uKVx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDU2Olx0YWxsb2NfaG9va3MoYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1Ny1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzI0Nj1FWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzI2NC0gKi9cbm1tL3BhZ2VfYWxsb2MuYzo3MjY1OmludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vcGFnZV9hbGxvYy5jLTcyNjYtXHRcdFx0ICAgICAgYWNyX2ZsYWdzX3QgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03Mjc4LX1cbm1tL3BhZ2VfYWxsb2MuYzo3Mjc5OkVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZik7XG5tbS9wYWdlX2FsbG9jLmMtNzI4MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNjQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHdoZXRoZXIgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdCBtaWdodCBiZSwgd2hpY2ggd291bGQgZGVwZW5kIG9uIGBDT05GSUdfQ09OVElHX0FMTE9DYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiYjMzk7cyBkZWZpbml0aW9uIGFuZCB1c2FnZSBhcmUgb25seSBwcmVzZW50IHdoZW4gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGVuYWJsZWQuIEdpdmVuIHRoZSBuYW1pbmcsIGl0JiMzOTtzIGEgcHJldHR5IHNhZmUgYmV0LCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgc3Vycm91bmRpbmcgdGhlIGNvZGUuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiwgYW5kIEkgd2FudCB0byBiZSAxMDAlIHN1cmUgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBmdW5jdGlvbmFsaXR5IG9yIGFueSBwb3RlbnRpYWwgaXNzdWVzLiBJZiBpdCAqaXMqIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIHRoZW4gSSBrbm93IEkgY2FuIHJlYXNvbiBhYm91dCBpdHMgZXhpc3RlbmNlIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0gYmFzZWQgb24gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIE90aGVyd2lzZSwgSSB3aWxsIGtub3cgaXQmIzM5O3MgYWx3YXlzIGF2YWlsYWJsZSBhbmQgY2FuIGNvbnRpbnVlIG15IGV4cGxvcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfQ09OVElHX0FMTE9DJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYz00MzQ9Ym9vbCBhcmNoX2h1Z2V0bGJfbWlncmF0aW9uX3N1cHBvcnRlZChzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYy00MzktXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmM6NDQwOiNpZmRlZiBDT05GSUdfQ09OVElHX0FMTE9DXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDQxLXN0YXRpYyBfX2luaXQgaW50IGdpZ2FudGljX3BhZ2VzX2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jPTI0PWJvb2wgX19pbml0IGFyY2hfaHVnZXRsYl92YWxpZF9zaXplKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbi0tXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jLTMzLVxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYzozNDojaWZkZWYgQ09ORklHX0NPTlRJR19BTExPQ1xuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy0zNS1zdGF0aWMgX19pbml0IGludCBnaWdhbnRpY19wYWdlc19pbml0KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaD00Mzk9ZXh0ZXJuIGdmcF90IHZtYV90aHBfZ2ZwX21hc2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuaW5jbHVkZS9saW51eC9nZnAuaC00NDAtXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQ0MTojaWZkZWYgQ09ORklHX0NPTlRJR19BTExPQ1xuaW5jbHVkZS9saW51eC9nZnAuaC00NDItXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTk3NT1kZWJ1Z192bV9wZ3RhYmxlX2ZyZWVfaHVnZV9wYWdlKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTk3Ny17XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTc4OiNpZmRlZiBDT05GSUdfQ09OVElHX0FMTE9DXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTc5LVx0aWYgKGFyZ3MtXHUwMDNlaXNfY29udGlndW91c19wYWdlKSB7XG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTEwNDY9ZGVidWdfdm1fcGd0YWJsZV9hbGxvY19odWdlX3BhZ2Uoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncywgaW50IG9yZGVyKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMDQ5LVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjEwNTA6I2lmZGVmIENPTkZJR19DT05USUdfQUxMT0Ncbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMDUxLVx0aWYgKG9yZGVyIFx1MDAzZSBNQVhfUEFHRV9PUkRFUikge1xuLS1cbm1tL2h1Z2V0bGIuYz0xMzIwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTM1OC1cbm1tL2h1Z2V0bGIuYzoxMzU5OiNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQ09OVElHX0FMTE9DKVxubW0vaHVnZXRsYi5jLTEzNjAtc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYi5jLTEzNzUtfVxubW0vaHVnZXRsYi5jOjEzNzY6I2Vsc2UgLyogIUNPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFIHx8ICFDT05GSUdfQ09OVElHX0FMTE9DICovXG5tbS9odWdldGxiLmMtMTM3Ny1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywgaW50IG5pZCxcbi0tXG5tbS9odWdldGxiLmM9MzczMj1zdGF0aWMgaW50IHNldF9tYXhfaHVnZV9wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCB1bnNpZ25lZCBsb25nIGNvdW50LCBpbnQgbmlkLFxuLS1cbm1tL2h1Z2V0bGIuYy0zNzg4LVx0ICovXG5tbS9odWdldGxiLmM6Mzc4OTpcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWMoaCkgXHUwMDI2XHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19DT05USUdfQUxMT0MpKSB7XG5tbS9odWdldGxiLmMtMzc5MC1cdFx0aWYgKGNvdW50IFx1MDAzZSBwZXJzaXN0ZW50X2h1Z2VfcGFnZXMoaCkpIHtcbi0tXG5tbS9rZmVuY2UvY29yZS5jPTEwMDc9c3RhdGljIGludCBrZmVuY2VfaW5pdF9sYXRlKHZvaWQpXG4tLVxubW0va2ZlbmNlL2NvcmUuYy0xMDE0LVxubW0va2ZlbmNlL2NvcmUuYzoxMDE1OiNpZmRlZiBDT05GSUdfQ09OVElHX0FMTE9DXG5tbS9rZmVuY2UvY29yZS5jLTEwMTYtXHRzdHJ1Y3QgcGFnZSAqcGFnZXM7XG4tLVxubW0va2ZlbmNlL2NvcmUuYy0xMDU4LVxubW0va2ZlbmNlL2NvcmUuYzoxMDU5OiNpZmRlZiBDT05GSUdfQ09OVElHX0FMTE9DXG5tbS9rZmVuY2UvY29yZS5jLTEwNjAtXHRmcmVlX2NvbnRpZ19yYW5nZShwYWdlX3RvX3Bmbih2aXJ0X3RvX3BhZ2UoKHZvaWQgKilrZmVuY2VfbWV0YWRhdGFfaW5pdCkpLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYz02OTQwPXZvaWQgX19mcmVlX2NvbnRpZ19yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNjk0NC1cbm1tL3BhZ2VfYWxsb2MuYzo2OTQ1OiNpZmRlZiBDT05GSUdfQ09OVElHX0FMTE9DXG5tbS9wYWdlX2FsbG9jLmMtNjk0Ni0vKiBVc2FnZTogU2VlIGFkbWluLWd1aWRlL2R5bmFtaWMtZGVidWctaG93dG8ucnN0ICovXG4tLVxubW0vcGFnZV9hbGxvYy5jPTc0OTI9RVhQT1JUX1NZTUJPTChmcmVlX2NvbnRpZ19yYW5nZSk7XG5tbS9wYWdlX2FsbG9jLmM6NzQ5MzojZW5kaWYgLyogQ09ORklHX0NPTlRJR19BTExPQyAqL1xubW0vcGFnZV9hbGxvYy5jLTc0OTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjYyCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGNvbmZpcm1pbmcgdGhhdCBgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZmAgZG9lcyBpbmRlZWQgbGl2ZSB1bmRlciBgQ09ORklHX0NPTlRJR19BTExPQ2AuIEFuZCwgYXMgSSBzdXNwZWN0ZWQsIGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgIGlzIHJpZ2h0IHRoZXJlIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCwgbWVhbmluZyBpdCYjMzk7cyBsaW5rZWQgdG8gYENPTkZJR19NRU1PUllfSVNPTEFUSU9OYC4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZW5hYmxlIGBDTUFgLCBgTUVNT1JZX0lTT0xBVElPTmAsIGBNRU1PUllfSE9UUExVR2AsIGFuZCBgQ09OVElHX0FMTE9DYCBmb3IgZnVsbCBmdW5jdGlvbmFsaXR5LiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBMZXQmIzM5O3MgdGhpbmsgdGhpcyB0aHJvdWdoLiBgQ01BYCAqYWxyZWFkeSogc2VsZWN0cyBgTUVNT1JZX0lTT0xBVElPTmAuIEFuZCBgQ09OVElHX0FMTE9DYCBpcyBkZWZpbmVkIGFzIGEgZnVuY3Rpb24gb2YgYE1FTU9SWV9JU09MQVRJT05gIGFuZCBgQ09NUEFDVElPTmAsIG9yIGRpcmVjdGx5IGJ5IGBDTUFgLiBTbywgaWYgYENNQWAgaXMgZW5hYmxlZCwgdGhlIG90aGVycyBzaG91bGQgYmUgdGFrZW4gY2FyZSBvZi4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBxdWl0ZSBhIGJpdC4gSXQgbWFrZXMgbW9yZSBzZW5zZSB0byBlbmFibGUgYENNQWAgZGlyZWN0bHkuCgpKdXN0IHRvIGJlIHNhZmUgYW5kIGVuc3VyZSBtYXhpbXVtIGNvbXBhdGliaWxpdHksIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBlbmFibGUgYE1FTU9SWV9IT1RQTFVHYCBhcyB3ZWxsLiBDYW4mIzM5O3QgaHVydCwgYW5kIG1pZ2h0IGJlIHVzZWZ1bCBkb3duIHRoZSBsaW5lLgoKRmluYWxseSwgSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYG9mZmxpbmVfcGFnZXNgIGluIGBtbS9tZW1vcnlfaG90cGx1Zy5jYCB0byBiZSBjZXJ0YWluIHRoZXJlIGlzbiYjMzk7dCBhbnl0aGluZyBJJiMzOTt2ZSBtaXNzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29mZmxpbmVfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9tbS9tbXUuYz0yMDc1PXN0YXRpYyBib29sIGNhbl91bm1hcF93aXRob3V0X3NwbGl0KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmMtMjEwNS0gKiBpbmFkdmVydGVudGx5IHJlbW92ZWQgYXMgaXQgYmxvY2tzIHBmbiByYW5nZSBvZmZsaW5pbmcgcHJvY2VzcyBpblxuYXJjaC9hcm02NC9tbS9tbXUuYzoyMTA2OiAqIF9fb2ZmbGluZV9wYWdlcygpLiBIZW5jZSB0aGlzIHByZXZlbnRzIGJvdGggb2ZmbGluaW5nIGFzIHdlbGwgYXNcbmFyY2gvYXJtNjQvbW0vbW11LmMtMjEwNy0gKiByZW1vdmFsIHByb2Nlc3MgZm9yIGJvb3QgbWVtb3J5IHdoaWNoIGlzIGluaXRpYWxseSBhbHdheXMgb25saW5lLlxuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yODA9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTI5MS1cdCAqIFVuYWNjb3VudCBiZWZvcmUgb2ZmbGluaW5nLCBzdWNoIHRoYXQgdW5wb3B1bGF0ZWQgem9uZSBhbmQga3RocmVhZHNcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzoyOTI6XHQgKiBjYW4gcHJvcGVybHkgYmUgdG9ybiBkb3duIGluIG9mZmxpbmVfcGFnZXMoKS5cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yOTMtXHQgKi9cbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzAxLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjMwMjpcdHJldCA9IG9mZmxpbmVfcGFnZXMoc3RhcnRfcGZuICYjNDM7IG5yX3ZtZW1tYXBfcGFnZXMsXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzAzLVx0XHRcdCAgICBucl9wYWdlcyAtIG5yX3ZtZW1tYXBfcGFnZXMsIG1lbS1cdTAwM2V6b25lLCBtZW0tXHUwMDNlZ3JvdXApO1xuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMwNC1cdGlmIChyZXQpIHtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzozMDU6XHRcdC8qIG9mZmxpbmVfcGFnZXMoKSBmYWlsZWQuIEFjY291bnQgYmFjay4gKi9cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMDYtXHRcdGlmIChucl92bWVtbWFwX3BhZ2VzKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaD0yNjQ9ZXh0ZXJuIHZvaWQgdHJ5X29mZmxpbmVfbm9kZShpbnQgbmlkKTtcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDoyNjU6ZXh0ZXJuIGludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTI2Ni1cdFx0XHQgc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg9MjcyPXN0YXRpYyBpbmxpbmUgdm9pZCB0cnlfb2ZmbGluZV9ub2RlKGludCBuaWQpIHt9XG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjczLVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjI3NDpzdGF0aWMgaW5saW5lIGludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTI3NS1cdFx0XHRcdHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cClcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTUzOT12b2lkIHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHN0cnVjdCB6b25lICp6b25lLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtNTgzLSAqIHN1cmUgdGhhdCBwYWdlcyBhcmUgbWFya2VkIHJlc2VydmVkIGFuZCB6b25lcyBhcmUgYWRqdXN0IHByb3Blcmx5IGJ5XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjU4NDogKiBjYWxsaW5nIG9mZmxpbmVfcGFnZXMoKS5cbm1tL21lbW9yeV9ob3RwbHVnLmMtNTg1LSAqL1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTg5MD1zdGF0aWMgaW50IGNvdW50X3N5c3RlbV9yYW1fcGFnZXNfY2IodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTAxLSAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxOTAyOmludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTAzLVx0XHRcdHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cClcbi0tXG5tbS9tbV9pbml0LmM9MTUzOT12b2lkIF9fcmVmIGZyZWVfYXJlYV9pbml0X2NvcmVfaG90cGx1ZyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLS1cbm1tL21tX2luaXQuYy0xNTc3LVx0ICogY2xlYXIgYWxsIHpvbmVzJiMzOTsgcHJlc2VudF9wYWdlcyBhbmQgbWFuYWdlZF9wYWdlcyBiZWNhdXNlIHRoZXkgd2lsbFxubW0vbW1faW5pdC5jOjE1Nzg6XHQgKiBiZSB1cGRhdGVkIGluIG9ubGluZV9wYWdlcygpIGFuZCBvZmZsaW5lX3BhZ2VzKCkuXG5tbS9tbV9pbml0LmMtMTU3OS1cdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDA4OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIE1lbW9yeSBIb3RwbHVnIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cmFjaW5nIGl0cyBleGVjdXRpb24uIEl0IGxvb2tzIGxpa2UgYG9mZmxpbmVfcGFnZXNgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgY2FsbGVkIGZyb20gYG1lbW9yeV9ibG9ja19vZmZsaW5lYCBpbiB0aGUgbWVtb3J5IGRyaXZlcnMuIFRoYXQgcG9pbnRzIGRpcmVjdGx5IHRvIG1lbW9yeSBob3RwbHVnLiBNeSBpbW1lZGlhdGUgZm9jdXMgdGhlbiBnb2VzIHRvIHRoZXNlIGZ1bmN0aW9uczogYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgLCBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCwgYW5kIG9mIGNvdXJzZSwgYG9mZmxpbmVfcGFnZXNgIGl0c2VsZi4KCkkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBxdWlja2x5OiBJcyBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBzdGF0aWM/IFllcCwgaXQgaXMuIEFuZCBJIHNlZSB0aGF0JiMzOTtzIHRoZSBmdW5jdGlvbiB0aGlzIHBhdGNoIGlzIGFjdHVhbGx5IG1vZGlmeWluZy4gSXQmIzM5O3MgdGFyZ2V0aW5nIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgLiBBcHBhcmVudGx5LCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgd2VyZSBjYXVzaW5nIGBidWRkeV9vcmRlcmAgYW5kIGBjb21wb3VuZF9vcmRlcmAgdG8gcmV0dXJuIGJhZCB2YWx1ZXMuIFRoZSBzb2x1dGlvbiBoZXJlIGlzIHRvIHVzZSBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgYGNvbXBvdW5kX29yZGVyYCwgYnV0IHdpdGggYWRkZWQgdmFsaWRhdGlvbiB0byBwcmV2ZW50IGludmFsaWQgdmFsdWVzIGZyb20gYmVpbmcgdXNlZC4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIGZpeCDigJMgaXQgZGlyZWN0bHkgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGJ1Zywgd2hpY2ggaXMgYSBnb29kIHRoaW5nIHRvIGZpeC4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIGNoYW5nZSwgZnV6emluZyBpcyBkZWZpbml0ZWx5IGEgc21hcnQgbW92ZS4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2VlIGBDTUFgLCBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0lTT0xBVElPTmAsIGFuZCBgQ09OVElHX0FMTE9DYC4gSSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgYENPTlRJR19BTExPQ2AgaXMgYSB2YWxpZCBjb25maWcgaGVyZS4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENPTlRJR19BTExPQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTcwOT1jb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbi0tXG5tbS9LY29uZmlnLTcxOC1cbm1tL0tjb25maWc6NzE5OmNvbmZpZyBDT05USUdfQUxMT0Ncbm1tL0tjb25maWctNzIwLVx0ZGVmX2Jvb2wgKE1FTU9SWV9JU09MQVRJT04gXHUwMDI2XHUwMDI2IENPTVBBQ1RJT04pIHx8IENNQVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc0OAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYENPTlRJR19BTExPQ2AsIGBNRU1PUllfSVNPTEFUSU9OYCwgYE1FTU9SWV9IT1RQTFVHYCwgYW5kIGBDTUFgIGFyZSBhbGwgdmFsaWQgY29uZmlndXJhdGlvbnMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBmcmFtZXdvcmsuIFRoYXQmIzM5O3MgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSBjb3JlIGFsbG9jYXRpb24gbWVjaGFuaXNtcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2Ugc2V0dGluZ3MuCgpNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gZW5zdXJpbmcgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgIGlzIHRoZSByaWdodCBmdW5jdGlvbiBoZXJlLiBZZXMsIHRoYXQgbWFrZXMgc2Vuc2U7IGFzIHRoZSBuYW1lIHN1Z2dlc3RzLCBpdCYjMzk7cyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgcmVxdWVzdGluZyBjb250aWd1b3VzIG1lbW9yeS4gVGhhdCBsb29rcyByaWdodC4gSSBhbHNvIGhhdmUgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdmVyaWZ5IGxhdGVyLCB0aGF0IGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgcGFnZSBpc29sYXRpb24uIFNpbWlsYXJseSwgYG9mZmxpbmVfcGFnZXNgIGlzIHRoZSBnby10byBmdW5jdGlvbiBmb3IgdGFraW5nIG1lbW9yeSBvZmZsaW5lLgoKTm93LCBhIGNydWNpYWwgcXVlc3Rpb24sIGFuZCB0aGlzIGlzIHdoZXJlIEkgbmVlZCB0byBkaWcgZGVlcGVyOiB3aGF0IG90aGVyIGZ1bmN0aW9ucyBjYWxsIGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgPyBLbm93aW5nIGl0cyBjYWxsZXJzIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbnRlZ3JhdGlvbiBwb2ludHMgZm9yIG1lbW9yeSBpc29sYXRpb24sIGFuZCBob3cgdGhlc2UgY29uZmlndXJhdGlvbnMgd2lsbCB1bHRpbWF0ZWx5IGludGVyYWN0IGFuZCBpbXBhY3QgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWlzb2xhdGlvbi5oPTYxPWJvb2wgcGFnZWJsb2NrX3VuaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmgtNjItXG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmg6NjM6aW50IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxuaW5jbHVkZS9saW51eC9wYWdlLWlzb2xhdGlvbi5oLTY0LVx0XHRcdCAgICAgZW51bSBwYl9pc29sYXRlX21vZGUgbW9kZSk7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xOTAyPWludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTk2OC1cdC8qIHNldCBhYm92ZSByYW5nZSBhcyBpc29sYXRlZCAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxOTY5Olx0cmV0ID0gc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHN0YXJ0X3BmbiwgZW5kX3Bmbixcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTk3MC1cdFx0XHRcdCAgICAgICBQQl9JU09MQVRFX01PREVfTUVNX09GRkxJTkUpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz03MTA4PWludCBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzE0NC1cdCAqIGhhdmUgZGlmZmVyZW50IHNpemVzLCBhbmQgZHVlIHRvIHRoZSB3YXkgcGFnZSBhbGxvY2F0b3Jcbm1tL3BhZ2VfYWxsb2MuYzo3MTQ1Olx0ICogd29yaywgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKCkgaGFzIHNwZWNpYWwgaGFuZGxpbmdzIGZvciB0aGlzLlxubW0vcGFnZV9hbGxvYy5jLTcxNDYtXHQgKlxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MTYxLVxubW0vcGFnZV9hbGxvYy5jOjcxNjI6XHRyZXQgPSBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2Uoc3RhcnQsIGVuZCwgbW9kZSk7XG5tbS9wYWdlX2FsbG9jLmMtNzE2My1cdGlmIChyZXQpXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYz0zMjA9c3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy00NzAtLyoqXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjQ3MTogKiBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKSAtIG1hcmsgcGFnZSByYW5nZSBNSUdSQVRFX0lTT0xBVEVcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNDcyLSAqIEBzdGFydF9wZm46XHRcdFRoZSBmaXJzdCBQRk4gb2YgdGhlIHJhbmdlIHRvIGJlIGlzb2xhdGVkLlxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTA1LSAqL1xubW0vcGFnZV9pc29sYXRpb24uYzo1MDY6aW50IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxubW0vcGFnZV9pc29sYXRpb24uYy01MDctXHRcdFx0ICAgICBlbnVtIHBiX2lzb2xhdGVfbW9kZSBtb2RlKVxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTQ5LS8qKlxubW0vcGFnZV9pc29sYXRpb24uYzo1NTA6ICogdW5kb19pc29sYXRlX3BhZ2VfcmFuZ2UgLSB1bmRvIGVmZmVjdHMgb2Ygc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKClcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTUxLSAqIEBzdGFydF9wZm46XHRcdFRoZSBmaXJzdCBQRk4gb2YgdGhlIGlzb2xhdGVkIHJhbmdlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODU3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gc3R1ZmYsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvbnRpZ3VvdXMsIGZyb3plbiByYW5nZXMuIEZyb20gdGhlIGNhbGwgdHJhY2VzLCBJIGNhbiBzZWUgdGhhdCBgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZgIGFuZCBgb2ZmbGluZV9wYWdlc2AgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIGluIHBsYXkuIGBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZmAgaXRzZWxmIGlzIGNhbGxlZCBieSBgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZmAsIHNvIHRoZXNlIHNlZW0gbGlrZSBwb3RlbnRpYWwgcG9pbnRzIG9mIGludGVyZXN0IGluIHRoaXMgYW5hbHlzaXMuIAoKVGhlcmVmb3JlLCBteSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgYXJvdW5kIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGFuZCBgb2ZmbGluZV9wYWdlc2AuCgpTaW5jZSBJIGhhdmUgYWxyZWFkeSBhY2NvdW50ZWQgZm9yIHRoZSBmaXJzdCB0d28sIEkgd2lsbCBub3cgdmVyaWZ5IGBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZmAuIEkgdGhpbmsgdGhhdCB3aWxsIG9mZmVyIHRoZSBtb3N0IGluc2lnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZ2ZwLmg9NDQzPXR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBhY3JfZmxhZ3NfdDtcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ0Ny0vKiBUaGUgYmVsb3cgZnVuY3Rpb25zIG11c3QgYmUgcnVuIG9uIGEgcmFuZ2UgZnJvbSBhIHNpbmdsZSB6b25lLiAqL1xuaW5jbHVkZS9saW51eC9nZnAuaDo0NDg6aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuaW5jbHVkZS9saW51eC9nZnAuaC00NDktXHRcdGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzayk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1MC0jZGVmaW5lIGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2UoLi4uKVx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDUxOlx0YWxsb2NfaG9va3MoYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9nZnAuaC00NTItXG4tLVxubW0vcGFnZV9hbGxvYy5jPTcwODA9c3RhdGljIHZvaWQgX19mcmVlX2NvbnRpZ19mcm96ZW5fcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTcxMDctICovXG5tbS9wYWdlX2FsbG9jLmM6NzEwODppbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG5tbS9wYWdlX2FsbG9jLmMtNzEwOS1cdFx0YWNyX2ZsYWdzX3QgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MjQ1LX1cbm1tL3BhZ2VfYWxsb2MuYzo3MjQ2OkVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YpO1xubW0vcGFnZV9hbGxvYy5jLTcyNDctXG4tLVxubW0vcGFnZV9hbGxvYy5jPTcyNjU9aW50IGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTcyNzItXG5tbS9wYWdlX2FsbG9jLmM6NzI3MzpcdHJldCA9IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHN0YXJ0LCBlbmQsIGFsbG9jX2ZsYWdzLCBnZnBfbWFzayk7XG5tbS9wYWdlX2FsbG9jLmMtNzI3NC1cdGlmICghcmV0KVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz03MzY0PXN0cnVjdCBwYWdlICphbGxvY19jb250aWdfZnJvemVuX3BhZ2VzX25vcHJvZih1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MzkyLVx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ6b25lLVx1MDAzZWxvY2ssIGZsYWdzKTtcbm1tL3BhZ2VfYWxsb2MuYzo3MzkzOlx0XHRcdFx0cmV0ID0gYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YocGZuLFxubW0vcGFnZV9hbGxvYy5jLTczOTQtXHRcdFx0XHRcdFx0XHRwZm4gJiM0MzsgbnJfcGFnZXMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODE3CgkJCQkJCQlvdXRwdXQ6IDE1NwoJCQkJCQkJdGhvdWdodHM6IDE5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlLCBhbmQgdGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhIGNyaXRpY2FsIGlzc3VlIGluIHBhZ2UgaXNvbGF0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFib3V0IG1ha2luZyBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBtb3JlIHJvYnVzdCBieSByaWdvcm91c2x5IGNoZWNraW5nIHRoZSBvcmRlciBvZiBidWRkeSBhbmQgY29tcG91bmQgcGFnZXMgKmJlZm9yZSogdXNpbmcgdGhlbS4gVGhlIGdvYWwgaXMgdG8gc2lkZXN0ZXAgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3IgaW52YWxpZCBtZW1vcnkgb3BlcmF0aW9ucyBkdXJpbmcgdGhpcyBpc29sYXRpb24gcHJvY2Vzcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIGhvdyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYmVoYXZlcyBpbiB0aGVzZSBzcGVjaWZpYyBzY2VuYXJpb3MsIHNvIGl0IHdhcnJhbnRzIHNlcmlvdXMgY29uc2lkZXJhdGlvbi4KCknigJltIHNlZWluZyBhIGNvdXBsZSBvZiBhcmVhcyB0byBpbmNsdWRlIGFzIHdlbGwgLSBgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZgIG1ha2VzIHNlbnNlIHRvIGluY2x1ZGUgd2l0aCB0aGUgcHJvcG9zZWQgY2hhbmdlcy4KCkdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBtZW1vcnkgY29ycnVwdGlvbiBhbmQgcmFjZSBjb25kaXRpb25zIGhlcmUsIGFuZCB0aGUgY3JpdGljYWwgbmF0dXJlIG9mIHBhZ2UgaXNvbGF0aW9uLCBmdXp6aW5nIHRoaXMgcGF0Y2ggaXMgYWJzb2x1dGVseSB3b3J0aHdoaWxlLiBUaGUgcHJvcG9zZWQgY2hhbmdlcyB0b3VjaCBrZXkgZnVuY3Rpb25zLCBhbmQgc28gSSBzaG91bGQgaW5jbHVkZSB0aGUgc3ltYm9scyBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCwgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgLCBgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZgLCBhbmQgYG9mZmxpbmVfcGFnZXNgIGZvciB0aG9yb3VnaCB0ZXN0aW5nLgoKVGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLCBsaWtlIGBDTUFgLCBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0lTT0xBVElPTmAsIGFuZCBgQ09OVElHX0FMTE9DYCwgYXJlIGVudGlyZWx5IHJlbGV2YW50IHRvIHRoaXMgcGF0Y2gsIHNvIEkmIzM5O2xsIGJlIHN1cmUgdG8gZmFjdG9yIHRoZW0gaW4gZHVyaW5nIHRlc3RpbmcgYW5kIHZhbGlkYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7TUVNT1JZX0lTT0xBVElPTiYjMzQ7LAogICAgJiMzNDtDT05USUdfQUxMT0MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7YWxsb2NfY29udGlnX3JhbmdlX25vcHJvZiYjMzQ7LAogICAgJiMzNDthbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZiYjMzQ7LAogICAgJiMzNDtvZmZsaW5lX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHJhY2UgY29uZGl0aW9ucyBpbiBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBieSB2YWxpZGF0aW5nIHRoZSBvcmRlciBvZiBidWRkeSBhbmQgY29tcG91bmQgcGFnZXMgYmVmb3JlIHVzaW5nIHRoZW0uIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIGludmFsaWQgbWVtb3J5IG9wZXJhdGlvbnMgZHVyaW5nIHBhZ2UgaXNvbGF0aW9uLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9JU09MQVRJT04mIzM0OywKICAgICYjMzQ7Q09OVElHX0FMTE9DJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlJiMzNDssCiAgICAmIzM0O2FsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YmIzM0OywKICAgICYjMzQ7b2ZmbGluZV9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgYnkgdmFsaWRhdGluZyB0aGUgb3JkZXIgb2YgYnVkZHkgYW5kIGNvbXBvdW5kIHBhZ2VzIGJlZm9yZSB1c2luZyB0aGVtLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciBpbnZhbGlkIG1lbW9yeSBvcGVyYXRpb25zIGR1cmluZyBwYWdlIGlzb2xhdGlvbiwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyB3aGVuIHJlYWRpbmcgcGFnZSBidWRkeSBvcmRlciBhbmQgY29tcG91bmQgb3JkZXIgZHVyaW5nIHBhZ2UgaXNvbGF0aW9uLiBJdCByZXBsYWNlcyBgYnVkZHlfb3JkZXIoKWAgd2l0aCBgYnVkZHlfb3JkZXJfdW5zYWZlKClgIGFuZCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgUEZOIGluY3JlbWVudHMgb3IgaW5maW5pdGUgbG9vcHMgY2F1c2VkIGJ5IGNvbmN1cnJlbnRseSBtb2RpZmllZCBwYWdlIHN0YXRlcy4gVGhlc2UgY2hhbmdlcyBtaXRpZ2F0ZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHJlbHkgb24gdW5pbml0aWFsaXplZCBmaWVsZHMgZm9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWViZmNmMTJlMDMyNjc1ZDg3NTE1OWM0MjBjMWI2MTRmM2M2NGY3MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDEzOjQ1OjExIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9pc29sYXRpb24uYyBiL21tL3BhZ2VfaXNvbGF0aW9uLmMKaW5kZXggMzJjZThhN2Q5ZGYzNS4uZWNhNmZiNzhmNzNhOCAxMDA2NDQKLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2lzb2xhdGlvbi5jCkBAIC0zODcsMTMgJiM0MzszODcsMTkgQEAgc3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sCiAJCX0KIAogCQlpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7Ci0JCQlpbnQgb3JkZXIgPSBidWRkeV9vcmRlcihwYWdlKTsKJiM0MzsJCQl1bnNpZ25lZCBpbnQgb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7CiAKLQkJCS8qIHBhZ2VibG9ja19pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoKSBoYW5kbGVkIHRoaXMgKi8KLQkJCVZNX1dBUk5fT05fT05DRShwZm4gJiM0MzsgKDEgJmx0OyZsdDsgb3JkZXIpICZndDsgYm91bmRhcnlfcGZuKTsKLQotCQkJcGZuICYjNDM7PSAxVUwgJmx0OyZsdDsgb3JkZXI7Ci0JCQljb250aW51ZTsKJiM0MzsJCQkvKiBidWRkeV9vcmRlcl91bnNhZmUoKSBpcyByYWN5LiBWYWxpZGF0ZSB0aGUgb3JkZXIgYmVmb3JlIHNoaWZ0aW5nLiAqLwomIzQzOwkJCWlmIChvcmRlciAmbHQ7PSBNQVhfUEFHRV9PUkRFUiAmYW1wOyZhbXA7CiYjNDM7CQkJCS8qCiYjNDM7CQkJCSAqIHBhZ2VibG9ja19pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoKSBzcGxpdHMKJiM0MzsJCQkJICogY3Jvc3MtYm91bmRhcnkgUGFnZUJ1ZGR5LCB2ZXJpZnkgaXQuCiYjNDM7CQkJCSAqLwomIzQzOwkJCSAgICBwZm4gJiM0MzsgKDFVTCAmbHQ7Jmx0OyBvcmRlcikgJmx0Oz0gYm91bmRhcnlfcGZuKSB7CiYjNDM7CQkJCXBmbiAmIzQzOz0gMVVMICZsdDsmbHQ7IG9yZGVyOwomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQl9CiYjNDM7CQkJZ290byBmYWlsZWQ7CiAJCX0KIAogCQkvKgpAQCAtNDEyLDEwICYjNDM7NDE4LDI4IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLAogCQlpZiAoUGFnZUNvbXBvdW5kKHBhZ2UpKSB7CiAJCQlzdHJ1Y3QgcGFnZSAqaGVhZCA9IGNvbXBvdW5kX2hlYWQocGFnZSk7CiAJCQl1bnNpZ25lZCBsb25nIGhlYWRfcGZuID0gcGFnZV90b19wZm4oaGVhZCk7Ci0JCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gY29tcG91bmRfbnIoaGVhZCk7CiYjNDM7CQkJdW5zaWduZWQgaW50IG9yZGVyID0gY29tcG91bmRfb3JkZXIoaGVhZCk7CiYjNDM7CQkJdW5zaWduZWQgbG9uZyBucl9wYWdlczsKJiM0MzsKJiM0MzsJCQkvKiBjb21wb3VuZF9vcmRlcigpIGlzIHJhY3kuIENhcCBpdCBhdCBNQVhfRk9MSU9fT1JERVIuICovCiYjNDM7CQkJaWYgKG9yZGVyICZndDsgTUFYX0ZPTElPX09SREVSKQomIzQzOwkJCQlnb3RvIGZhaWxlZDsKJiM0MzsKJiM0MzsJCQlucl9wYWdlcyA9IDFVTCAmbHQ7Jmx0OyBvcmRlcjsKJiM0MzsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIGNvbXBvdW5kX2hlYWQoKSBpcyBhbHNvIHJhY3ksIHNvIHRoZSBkZXJpdmVkIGhlYWRfcGZuCiYjNDM7CQkJICogbmVlZHMgYWRkaXRpb25hbCBjaGVja3MgdG8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkLgomIzQzOwkJCSAqIE90aGVyd2lzZSwganVzdCBmYWlsIHRoZSBjaGVjay4gcGZuIGNvbWVzIGZyb20KJiM0MzsJCQkgKiBfX2ZpcnN0X3ZhbGlkX3BhZ2UoKSBhcyBhIGxlZ2l0aW1hdGUgUEZOLCBzbyB1c2UgaXQgdG8KJiM0MzsJCQkgKiBjaGVjayBoZWFkX3Bmbi4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoaGVhZF9wZm4gJmd0OyBwZm4gfHwgIUlTX0FMSUdORUQoaGVhZF9wZm4sIG5yX3BhZ2VzKSB8fAomIzQzOwkJCSAgICBwZm4gLSBoZWFkX3BmbiAmZ3Q7PSBucl9wYWdlcykKJiM0MzsJCQkJZ290byBmYWlsZWQ7CiAKIAkJCWlmIChoZWFkX3BmbiAmIzQzOyBucl9wYWdlcyAmbHQ7PSBib3VuZGFyeV9wZm4gfHwKLQkJCSAgICBQYWdlSHVnZShwYWdlKSkgewomIzQzOwkJCSAgICBQYWdlSHVnZShoZWFkKSkgewogCQkJCXBmbiA9IGhlYWRfcGZuICYjNDM7IG5yX3BhZ2VzOwogCQkJCWNvbnRpbnVlOwogCQkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwOQoJCQkJCQkJb3V0cHV0OiAxNDcKCQkJCQkJCXRob3VnaHRzOiA0MDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHRvdWNoaW5nIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIHdpdGhpbiBgbW0vcGFnZV9pc29sYXRpb24uY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgc3dpdGNoaW5nIGZyb20gYGJ1ZGR5X29yZGVyKHBhZ2UpYCB0byBgYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpYCBhbmQgc2ltaWxhcmx5LCByZXBsYWNpbmcgYGNvbXBvdW5kX25yKGhlYWQpYCB3aXRoIGBjb21wb3VuZF9vcmRlcihoZWFkKWAuIEl0JiMzOTtzIGFsc28gbWFraW5nIHNvbWUgcmVsYXRlZCB2YWxpZGF0aW9uIGNoYW5nZXMgYW5kIHJlcGxhY2luZyBgUGFnZUh1Z2UocGFnZSlgIHdpdGggYFBhZ2VIdWdlKGhlYWQpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGxpa2VseSBhYm91dCBhZGRyZXNzaW5nIHBvdGVudGlhbCBkYXRhIHJhY2VzIHdoZW4gcmVhZGluZyB0aGUgYnVkZHkgb3IgY29tcG91bmQgb3JkZXIsIHJpZ2h0PyBUaGVzZSBjaGFuZ2VzIGFyZSBndWFyZGluZyBhZ2FpbnN0IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIGV2ZW4gaW5maW5pdGUgbG9vcHMsIHNwZWNpZmljYWxseSBpZiB0aGUgb3JkZXIgdmFsdWUgYmVpbmcgcmVhZCBpcyBpbmNvcnJlY3QuCgpUaGUgcGF0Y2ggKnNob3VsZG4mIzM5O3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMuIE15IHVuZGVyc3RhbmRpbmcgb2YgS01TQU4gaXMgdGhhdCBpdCYjMzk7cyBkZXNpZ25lZCB0byBmbGFnIGFjY2Vzc2VzIHRvIG1lbW9yeSB0aGF0IGhhc24mIzM5O3QgYmVlbiBpbml0aWFsaXplZC4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIEtBU0FOIHdvdWxkIGJlIHRoZSBhcHByb3ByaWF0ZSB0b29sIGZvciBjYXRjaGluZyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHN0ZW1taW5nIGZyb20gaW52YWxpZCBhZGRyZXNzZXMgb3Igb3RoZXIgZ2VuZXJhbCBtZW1vcnkgZXJyb3JzLgoKSG9sZCBvbiwgSSBuZWVkIHRvIGJlIHByZWNpc2UuIFRoZSBjb3JlIGlzc3VlIGhlcmUgaXNuJiMzOTt0IHRoZSBtZW1vcnkgaXRzZWxmIGJlaW5nIHVuaW5pdGlhbGl6ZWQuIFRoZSBpc3N1ZSBpcyB0aGF0IHRoZSBvcmRlciB2YWx1ZXMgKGZyb20gYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIGBjb21wb3VuZF9vcmRlcmApIGNvdWxkIGJlIHJlYWQgY29uY3VycmVudGx5IHdpdGggY2hhbmdlcywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBpbmNvcnJlY3QgdmFsdWVzLiBUaGUgcGFnZSBzdHJ1Y3R1cmVzIHRoZW1zZWx2ZXMgKmFyZSogaW5pdGlhbGl6ZWQsIHRoZSBwcm9ibGVtIGlzIHdlJiMzOTtyZSByZWFkaW5nIHRoZW0gZHVyaW5nIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucy4gVGhpcyBjb3VsZCBjYXVzZSBpbmNvcnJlY3Qgb3JkZXIgY2FsY3VsYXRpb25zIHdoaWNoIGNhbiBsZWFkIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzcy4gVGhpcyBpcyBhIGNsYXNzaWMgY29uY3VycmVuY3kgcHJvYmxlbSwgYSBkYXRhIHJhY2UsIG9yIHBvdGVudGlhbGx5IG91dC1vZi1ib3VuZHMgcmVhZHMgZHVlIHRvIGludmFsaWQgb3JkZXIgdmFsdWVzLiBUaGlzIHN0aWxsIGlzbiYjMzk7dCBLTVNBTiYjMzk7cyBkb21haW4uCgpTbywgdGhpcyBsb29rcyB0byBiZSBhIGNvbmN1cnJlbmN5IGlzc3VlIGFuZC9vciBvdXQtb2YtYm91bmRzIHJlYWQsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gS01TQU4sIHdpdGggaXRzIGZvY3VzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgaXMgdGhlIHdyb25nIHRvb2wgZm9yIHRoaXMuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBtZW50YWwgcnVuIHRocm91Z2ggdG8gc29saWRpZnkgdGhpcy4gVGhlIHBhdGNoIGlzIGFkZGluZyBjaGVja3MgdG8gdmFsaWRhdGUgdGhlIGBvcmRlcmAgYW5kIGBoZWFkX3BmbmAgdG8gcHJldmVudCwgZm9yIGV4YW1wbGUsIGludmFsaWQgYHBmbmAgaW5jcmVtZW50cyBhbmQgcG90ZW50aWFsIGluZmluaXRlIGxvb3BzLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhZGRpbmcgZ3VhcmRyYWlscyB0byB0aGUgZXhpc3RpbmcgbG9naWMuIEFnYWluLCB0aGlzIGRvZXNuJiMzOTt0IHRvdWNoIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlcmVmb3JlLCBteSBmaW5hbCBhc3Nlc3NtZW50IGlzICoqTmVlZHNLTVNBTj1mYWxzZSoqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgcmFjZSBjb25kaXRpb25zIHdoZW4gcmVhZGluZyBwYWdlIGJ1ZGR5IG9yZGVyIGFuZCBjb21wb3VuZCBvcmRlciBkdXJpbmcgcGFnZSBpc29sYXRpb24uIEl0IHJlcGxhY2VzIGBidWRkeV9vcmRlcigpYCB3aXRoIGBidWRkeV9vcmRlcl91bnNhZmUoKWAgYW5kIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBQRk4gaW5jcmVtZW50cyBvciBpbmZpbml0ZSBsb29wcyBjYXVzZWQgYnkgY29uY3VycmVudGx5IG1vZGlmaWVkIHBhZ2Ugc3RhdGVzLiBUaGVzZSBjaGFuZ2VzIG1pdGlnYXRlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgcmVseSBvbiB1bmluaXRpYWxpemVkIGZpZWxkcyBmb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyB3aGVuIHJlYWRpbmcgcGFnZSBidWRkeSBvcmRlciBhbmQgY29tcG91bmQgb3JkZXIgZHVyaW5nIHBhZ2UgaXNvbGF0aW9uLiBJdCByZXBsYWNlcyBgYnVkZHlfb3JkZXIoKWAgd2l0aCBgYnVkZHlfb3JkZXJfdW5zYWZlKClgIGFuZCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgUEZOIGluY3JlbWVudHMgb3IgaW5maW5pdGUgbG9vcHMgY2F1c2VkIGJ5IGNvbmN1cnJlbnRseSBtb2RpZmllZCBwYWdlIHN0YXRlcy4gVGhlc2UgY2hhbmdlcyBtaXRpZ2F0ZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHJlbHkgb24gdW5pbml0aWFsaXplZCBmaWVsZHMgZm9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDU6MTMuOTA0MjA3MTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODcwNzE2ODc2NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ01BXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0lTT0xBVElPTlwiLFxuICAgIFwiQ09OVElHX0FMTE9DXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlXCIsXG4gICAgXCJhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZlwiLFxuICAgIFwib2ZmbGluZV9wYWdlc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyB3aGVuIHJlYWRpbmcgcGFnZSBidWRkeSBvcmRlciBhbmQgY29tcG91bmQgb3JkZXIgZHVyaW5nIHBhZ2UgaXNvbGF0aW9uLiBJdCByZXBsYWNlcyBgYnVkZHlfb3JkZXIoKWAgd2l0aCBgYnVkZHlfb3JkZXJfdW5zYWZlKClgIGFuZCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgUEZOIGluY3JlbWVudHMgb3IgaW5maW5pdGUgbG9vcHMgY2F1c2VkIGJ5IGNvbmN1cnJlbnRseSBtb2RpZmllZCBwYWdlIHN0YXRlcy4gVGhlc2UgY2hhbmdlcyBtaXRpZ2F0ZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHJlbHkgb24gdW5pbml0aWFsaXplZCBmaWVsZHMgZm9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgYnkgdmFsaWRhdGluZyB0aGUgb3JkZXIgb2YgYnVkZHkgYW5kIGNvbXBvdW5kIHBhZ2VzIGJlZm9yZSB1c2luZyB0aGVtLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciBpbnZhbGlkIG1lbW9yeSBvcGVyYXRpb25zIGR1cmluZyBwYWdlIGlzb2xhdGlvbiwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQ1OjEzLjkwNDIxMjQ3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUwOTEyMjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWViZmNmMTJlMDMyNjc1ZDg3NTE1OWM0MjBjMWI2MTRmM2M2NGY3MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMzo0NToxMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2lzb2xhdGlvbi5jIGIvbW0vcGFnZV9pc29sYXRpb24uY1xcbmluZGV4IDMyY2U4YTdkOWRmMzUuLmVjYTZmYjc4ZjczYTggMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uY1xcbisrKyBiL21tL3BhZ2VfaXNvbGF0aW9uLmNcXG5AQCAtMzg3LDEzICszODcsMTkgQEAgc3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcXG4tXFx0XFx0XFx0aW50IG9yZGVyID0gYnVkZHlfb3JkZXIocGFnZSk7XFxuK1xcdFxcdFxcdHVuc2lnbmVkIGludCBvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcXG4gXFxuLVxcdFxcdFxcdC8qIHBhZ2VibG9ja19pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoKSBoYW5kbGVkIHRoaXMgKi9cXG4tXFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKHBmbiArICgxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSBcXHUwMDNlIGJvdW5kYXJ5X3Bmbik7XFxuLVxcbi1cXHRcXHRcXHRwZm4gKz0gMVVMIFxcdTAwM2NcXHUwMDNjIG9yZGVyO1xcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0LyogYnVkZHlfb3JkZXJfdW5zYWZlKCkgaXMgcmFjeS4gVmFsaWRhdGUgdGhlIG9yZGVyIGJlZm9yZSBzaGlmdGluZy4gKi9cXG4rXFx0XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2M9IE1BWF9QQUdFX09SREVSIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdFxcdCAqIHBhZ2VibG9ja19pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoKSBzcGxpdHNcXG4rXFx0XFx0XFx0XFx0ICogY3Jvc3MtYm91bmRhcnkgUGFnZUJ1ZGR5LCB2ZXJpZnkgaXQuXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHQgICAgcGZuICsgKDFVTCBcXHUwMDNjXFx1MDAzYyBvcmRlcikgXFx1MDAzYz0gYm91bmRhcnlfcGZuKSB7XFxuK1xcdFxcdFxcdFxcdHBmbiArPSAxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKlxcbkBAIC00MTIsMTAgKzQxOCwyOCBAQCBzdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3BmbixcXG4gXFx0XFx0aWYgKFBhZ2VDb21wb3VuZChwYWdlKSkge1xcbiBcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqaGVhZCA9IGNvbXBvdW5kX2hlYWQocGFnZSk7XFxuIFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgaGVhZF9wZm4gPSBwYWdlX3RvX3BmbihoZWFkKTtcXG4tXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGNvbXBvdW5kX25yKGhlYWQpO1xcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wb3VuZF9vcmRlcihoZWFkKTtcXG4rXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcXG4rXFxuK1xcdFxcdFxcdC8qIGNvbXBvdW5kX29yZGVyKCkgaXMgcmFjeS4gQ2FwIGl0IGF0IE1BWF9GT0xJT19PUkRFUi4gKi9cXG4rXFx0XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgTUFYX0ZPTElPX09SREVSKVxcbitcXHRcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG4rXFxuK1xcdFxcdFxcdG5yX3BhZ2VzID0gMVVMIFxcdTAwM2NcXHUwMDNjIG9yZGVyO1xcbitcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogY29tcG91bmRfaGVhZCgpIGlzIGFsc28gcmFjeSwgc28gdGhlIGRlcml2ZWQgaGVhZF9wZm5cXG4rXFx0XFx0XFx0ICogbmVlZHMgYWRkaXRpb25hbCBjaGVja3MgdG8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkLlxcbitcXHRcXHRcXHQgKiBPdGhlcndpc2UsIGp1c3QgZmFpbCB0aGUgY2hlY2suIHBmbiBjb21lcyBmcm9tXFxuK1xcdFxcdFxcdCAqIF9fZmlyc3RfdmFsaWRfcGFnZSgpIGFzIGEgbGVnaXRpbWF0ZSBQRk4sIHNvIHVzZSBpdCB0b1xcbitcXHRcXHRcXHQgKiBjaGVjayBoZWFkX3Bmbi5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmIChoZWFkX3BmbiBcXHUwMDNlIHBmbiB8fCAhSVNfQUxJR05FRChoZWFkX3BmbiwgbnJfcGFnZXMpIHx8XFxuK1xcdFxcdFxcdCAgICBwZm4gLSBoZWFkX3BmbiBcXHUwMDNlPSBucl9wYWdlcylcXG4rXFx0XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuIFxcbiBcXHRcXHRcXHRpZiAoaGVhZF9wZm4gKyBucl9wYWdlcyBcXHUwMDNjPSBib3VuZGFyeV9wZm4gfHxcXG4tXFx0XFx0XFx0ICAgIFBhZ2VIdWdlKHBhZ2UpKSB7XFxuK1xcdFxcdFxcdCAgICBQYWdlSHVnZShoZWFkKSkge1xcbiBcXHRcXHRcXHRcXHRwZm4gPSBoZWFkX3BmbiArIG5yX3BhZ2VzO1xcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0NToxNS40NTYwMzM0NDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NzU4ODQxNzM3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ01BXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0lTT0xBVElPTlwiLFxuICAgIFwiQ09OVElHX0FMTE9DXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlXCIsXG4gICAgXCJhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZlwiLFxuICAgIFwib2ZmbGluZV9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHJhY2UgY29uZGl0aW9ucyBpbiBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBieSB2YWxpZGF0aW5nIHRoZSBvcmRlciBvZiBidWRkeSBhbmQgY29tcG91bmQgcGFnZXMgYmVmb3JlIHVzaW5nIHRoZW0uIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIGludmFsaWQgbWVtb3J5IG9wZXJhdGlvbnMgZHVyaW5nIHBhZ2UgaXNvbGF0aW9uLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWViZmNmMTJlMDMyNjc1ZDg3NTE1OWM0MjBjMWI2MTRmM2M2NGY3MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDEzOjQ1OjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9pc29sYXRpb24uYyBiL21tL3BhZ2VfaXNvbGF0aW9uLmNcbmluZGV4IDMyY2U4YTdkOWRmMzUuLmVjYTZmYjc4ZjczYTggMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2lzb2xhdGlvbi5jXG4rKysgYi9tbS9wYWdlX2lzb2xhdGlvbi5jXG5AQCAtMzg3LDEzICszODcsMTkgQEAgc3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXG4gXHRcdH1cbiBcbiBcdFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xuLVx0XHRcdGludCBvcmRlciA9IGJ1ZGR5X29yZGVyKHBhZ2UpO1xuK1x0XHRcdHVuc2lnbmVkIGludCBvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbiBcbi1cdFx0XHQvKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgaGFuZGxlZCB0aGlzICovXG4tXHRcdFx0Vk1fV0FSTl9PTl9PTkNFKHBmbiArICgxIFx1MDAzY1x1MDAzYyBvcmRlcikgXHUwMDNlIGJvdW5kYXJ5X3Bmbik7XG4tXG4tXHRcdFx0cGZuICs9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4tXHRcdFx0Y29udGludWU7XG4rXHRcdFx0LyogYnVkZHlfb3JkZXJfdW5zYWZlKCkgaXMgcmFjeS4gVmFsaWRhdGUgdGhlIG9yZGVyIGJlZm9yZSBzaGlmdGluZy4gKi9cbitcdFx0XHRpZiAob3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUiBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdC8qXG4rXHRcdFx0XHQgKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgc3BsaXRzXG4rXHRcdFx0XHQgKiBjcm9zcy1ib3VuZGFyeSBQYWdlQnVkZHksIHZlcmlmeSBpdC5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdCAgICBwZm4gKyAoMVVMIFx1MDAzY1x1MDAzYyBvcmRlcikgXHUwMDNjPSBib3VuZGFyeV9wZm4pIHtcbitcdFx0XHRcdHBmbiArPSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0fVxuK1x0XHRcdGdvdG8gZmFpbGVkO1xuIFx0XHR9XG4gXG4gXHRcdC8qXG5AQCAtNDEyLDEwICs0MTgsMjggQEAgc3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXG4gXHRcdGlmIChQYWdlQ29tcG91bmQocGFnZSkpIHtcbiBcdFx0XHRzdHJ1Y3QgcGFnZSAqaGVhZCA9IGNvbXBvdW5kX2hlYWQocGFnZSk7XG4gXHRcdFx0dW5zaWduZWQgbG9uZyBoZWFkX3BmbiA9IHBhZ2VfdG9fcGZuKGhlYWQpO1xuLVx0XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBjb21wb3VuZF9ucihoZWFkKTtcbitcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wb3VuZF9vcmRlcihoZWFkKTtcbitcdFx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuK1xuK1x0XHRcdC8qIGNvbXBvdW5kX29yZGVyKCkgaXMgcmFjeS4gQ2FwIGl0IGF0IE1BWF9GT0xJT19PUkRFUi4gKi9cbitcdFx0XHRpZiAob3JkZXIgXHUwMDNlIE1BWF9GT0xJT19PUkRFUilcbitcdFx0XHRcdGdvdG8gZmFpbGVkO1xuK1xuK1x0XHRcdG5yX3BhZ2VzID0gMVVMIFx1MDAzY1x1MDAzYyBvcmRlcjtcbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIGNvbXBvdW5kX2hlYWQoKSBpcyBhbHNvIHJhY3ksIHNvIHRoZSBkZXJpdmVkIGhlYWRfcGZuXG4rXHRcdFx0ICogbmVlZHMgYWRkaXRpb25hbCBjaGVja3MgdG8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkLlxuK1x0XHRcdCAqIE90aGVyd2lzZSwganVzdCBmYWlsIHRoZSBjaGVjay4gcGZuIGNvbWVzIGZyb21cbitcdFx0XHQgKiBfX2ZpcnN0X3ZhbGlkX3BhZ2UoKSBhcyBhIGxlZ2l0aW1hdGUgUEZOLCBzbyB1c2UgaXQgdG9cbitcdFx0XHQgKiBjaGVjayBoZWFkX3Bmbi5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoaGVhZF9wZm4gXHUwMDNlIHBmbiB8fCAhSVNfQUxJR05FRChoZWFkX3BmbiwgbnJfcGFnZXMpIHx8XG4rXHRcdFx0ICAgIHBmbiAtIGhlYWRfcGZuIFx1MDAzZT0gbnJfcGFnZXMpXG4rXHRcdFx0XHRnb3RvIGZhaWxlZDtcbiBcbiBcdFx0XHRpZiAoaGVhZF9wZm4gKyBucl9wYWdlcyBcdTAwM2M9IGJvdW5kYXJ5X3BmbiB8fFxuLVx0XHRcdCAgICBQYWdlSHVnZShwYWdlKSkge1xuK1x0XHRcdCAgICBQYWdlSHVnZShoZWFkKSkge1xuIFx0XHRcdFx0cGZuID0gaGVhZF9wZm4gKyBucl9wYWdlcztcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQ1OjE1LjQ1NjAzNTIwNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMjI0MTEyMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGFnZSBJc29sYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vcGFnZV9pc29sYXRpb24uY2AsIHNwZWNpZmljYWxseSB0aGUgYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgZnVuY3Rpb24uIEl0IHNlZW1zIGxpa2UgdGhleSd2ZSBtYWRlIHNvbWUgY2hhbmdlcyB0byBob3cgd2UgaGFuZGxlIGBidWRkeV9vcmRlcmAgYW5kIGBjb21wb3VuZF9vcmRlcmAgaGVyZS4gSW5zdGVhZCBvZiBqdXN0IHVzaW5nIGBidWRkeV9vcmRlcmAgZGlyZWN0bHksIHdoaWNoIGlzIHNvbWV0aW1lcyByaXNreSwgdGhleSd2ZSBpbnRyb2R1Y2VkIGEgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIGFkZGVkIHZhbGlkYXRpb24gYXJvdW5kIHRoZSBvcmRlci4gVGhhdCdzIGEgZ29vZCBtb3ZlLCBnZW5lcmFsbHksIHNhZmV0eSBpcyBwYXJhbW91bnQsIHBhcnRpY3VsYXJseSBpbiBtZW1vcnkgbWFuYWdlbWVudC5cblxuVGhleSd2ZSBhbHNvIGFkZGVkIHZhbGlkYXRpb24gZm9yIHRoZSBgY29tcG91bmRfb3JkZXJgIGFuZCBgY29tcG91bmRfaGVhZGAsIHdoaWNoIEknbSBnbGFkIHRvIHNlZS4gSXQncyBlYXN5IHRvIG1ha2UgYSBtaXN0YWtlIHRoZXJlIGFuZCBpbnRyb2R1Y2Ugc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gQ2xlYXJseSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIHBhZ2UgaXNvbGF0aW9uIHN1YnN5c3RlbS4gVGhpcyBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBvZiB0aGUgaW1wbGljYXRpb25zIGZvciBob3RwbHVnLCBDTUEsIGFuZCBodWdlcGFnZSBhbGxvY2F0aW9ucyDigJMgYWxsIG9mIHdoaWNoIHJlbHkgaGVhdmlseSBvbiB0aGlzIG1lY2hhbmlzbS4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIHRvIHVuZGVyc3RhbmQgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiB0aGVzZSBhZGRlZCBjaGVja3MuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGlzIGRvZXNuJ3QgY3JlYXRlIGFueSBuZXcgcmFjZSBjb25kaXRpb25zLiBHb3R0YSBjaGVjayBob3cgdGhpcyBhZmZlY3RzIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBpbmZyYXN0cnVjdHVyZSwgcGFydGljdWxhcmx5IGR1cmluZyBjb25jdXJyZW50IG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0NjowNy42ODAxNTAyMjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0NTAzNzQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9pc29sYXRpb24uYz0yODM9X19maXJzdF92YWxpZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy0yOTgtLyoqXFxubW0vcGFnZV9pc29sYXRpb24uYzoyOTk6ICogaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKCkgLS0gdHJpZXMgdG8gaXNvbGF0ZSBhIHBhZ2VibG9jayB0aGF0IG1pZ2h0IGJlXFxubW0vcGFnZV9pc29sYXRpb24uYy0zMDAtICogd2l0aGluIGEgZnJlZSBvciBpbi11c2UgcGFnZS5cXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzA0LSAqIEBza2lwX2lzb2xhdGlvbjpcXHR0aGUgZmxhZyB0byBza2lwIHRoZSBwYWdlYmxvY2sgaXNvbGF0aW9uIGluIHNlY29uZFxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6MzA1OiAqXFx0XFx0XFx0aXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKClcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMwNi0gKlxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy0zMTktICovXFxubW0vcGFnZV9pc29sYXRpb24uYzozMjA6c3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXFxubW0vcGFnZV9pc29sYXRpb24uYy0zMjEtXFx0XFx0XFx0ZW51bSBwYl9pc29sYXRlX21vZGUgbW9kZSwgYm9vbCBpc29sYXRlX2JlZm9yZSxcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM9NTA2PWludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTE3LVxcdC8qIGlzb2xhdGUgW2lzb2xhdGVfc3RhcnQsIGlzb2xhdGVfc3RhcnQgKyBwYWdlYmxvY2tfbnJfcGFnZXMpIHBhZ2VibG9jayAqL1xcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTE4OlxcdHJldCA9IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayhpc29sYXRlX3N0YXJ0LCBtb2RlLCBmYWxzZSxcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUxOS1cXHRcXHRcXHRza2lwX2lzb2xhdGlvbik7XFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUyNi1cXHQvKiBpc29sYXRlIFtpc29sYXRlX2VuZCAtIHBhZ2VibG9ja19ucl9wYWdlcywgaXNvbGF0ZV9lbmQpIHBhZ2VibG9jayAqL1xcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTI3OlxcdHJldCA9IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayhpc29sYXRlX2VuZCwgbW9kZSwgdHJ1ZSwgc2tpcF9pc29sYXRpb24pO1xcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTI4LVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDY6MDkuOTI1MTkzNDM5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxNTU3NjU3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgQ29kZSdzIExvZ2ljKipcblxuQWxyaWdodCwgc28gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgaXMga2V5LCBhbmQgaXQncyBiZWluZyBraWNrZWQgb2ZmIGJ5IGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgLiBNYWtlcyBzZW5zZSwgdGhleSdyZSBwcm9iYWJseSByZWxhdGVkIGluIGEgcGFnZSBpc29sYXRpb24gcHJvY2Vzcy4gTm93LCBJIG5lZWQgdG8gc2VlIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIGtub3cgKndoZXJlKiBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCBpcyBiZWluZyBjYWxsZWQuIFRoYXQncyB0aGUgY3J1Y2lhbCBuZXh0IHN0ZXAuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHRzIGFuZCB3aG8gaXMgZ2l2aW5nIHRoZSBvcmRlciB0byBzdGFydCB0aGUgcmFuZ2UtaXNvbGF0aW9uIHdpbGwgZ2l2ZSBtZSBpbXBvcnRhbnQgaW5zaWdodCBpbnRvIHRoZSBvdmVyYWxsIGZ1bmN0aW9uYWxpdHkuIExldCdzIHRyYWNlIGJhY2sgZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQwNiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQ2OjEzLjU0MDc3MzA0M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjcxMDczMjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmg9NjE9Ym9vbCBwYWdlYmxvY2tfdW5pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmgtNjItXFxuaW5jbHVkZS9saW51eC9wYWdlLWlzb2xhdGlvbi5oOjYzOmludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmgtNjQtXFx0XFx0XFx0ICAgICBlbnVtIHBiX2lzb2xhdGVfbW9kZSBtb2RlKTtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTkwMj1pbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTk2OC1cXHQvKiBzZXQgYWJvdmUgcmFuZ2UgYXMgaXNvbGF0ZWQgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE5Njk6XFx0cmV0ID0gc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHN0YXJ0X3BmbiwgZW5kX3BmbixcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5NzAtXFx0XFx0XFx0XFx0ICAgICAgIFBCX0lTT0xBVEVfTU9ERV9NRU1fT0ZGTElORSk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzEwOD1pbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzE0NC1cXHQgKiBoYXZlIGRpZmZlcmVudCBzaXplcywgYW5kIGR1ZSB0byB0aGUgd2F5IHBhZ2UgYWxsb2NhdG9yXFxubW0vcGFnZV9hbGxvYy5jOjcxNDU6XFx0ICogd29yaywgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKCkgaGFzIHNwZWNpYWwgaGFuZGxpbmdzIGZvciB0aGlzLlxcbm1tL3BhZ2VfYWxsb2MuYy03MTQ2LVxcdCAqXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzE2MS1cXG5tbS9wYWdlX2FsbG9jLmM6NzE2MjpcXHRyZXQgPSBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2Uoc3RhcnQsIGVuZCwgbW9kZSk7XFxubW0vcGFnZV9hbGxvYy5jLTcxNjMtXFx0aWYgKHJldClcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM9MzIwPXN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy00NzAtLyoqXFxubW0vcGFnZV9pc29sYXRpb24uYzo0NzE6ICogc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKCkgLSBtYXJrIHBhZ2UgcmFuZ2UgTUlHUkFURV9JU09MQVRFXFxubW0vcGFnZV9pc29sYXRpb24uYy00NzItICogQHN0YXJ0X3BmbjpcXHRcXHRUaGUgZmlyc3QgUEZOIG9mIHRoZSByYW5nZSB0byBiZSBpc29sYXRlZC5cXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTA1LSAqL1xcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTA2OmludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUwNy1cXHRcXHRcXHQgICAgIGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUpXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTU0OS0vKipcXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjU1MDogKiB1bmRvX2lzb2xhdGVfcGFnZV9yYW5nZSAtIHVuZG8gZWZmZWN0cyBvZiBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTUxLSAqIEBzdGFydF9wZm46XFx0XFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgaXNvbGF0ZWQgcmFuZ2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDY6MTUuODExODUwNzc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA4MTU5Njc4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqVHJhY2luZyB0aGUgQWxsb2NhdGlvbiBDaGFpbioqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgYmVpbmcgY2FsbGVkLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hlcmUqIGl0J3MgY29taW5nIGZyb20uIEl0IGxvb2tzIGxpa2UgYm90aCBgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZgIChhbmQsIG1vcmUgbGlrZWx5LCBgYWxsb2NfY29udGlnX3JhbmdlYCBpdHNlbGYpIGFuZCBgb2ZmbGluZV9wYWdlc2AgYXJlIHRoZSBjdWxwcml0cy4gSG1tbSwgZ290dGEgZm9sbG93IHRoZSBicmVhZGNydW1icy4gU2luY2UgYGFsbG9jX2NvbnRpZ19yYW5nZWAgc2VlbXMgdG8gYmUgdGhlIG1vcmUgZ2VuZXJhbCBhbGxvY2F0b3IgaGVyZSwgbGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvICp0aGF0KiByb3V0aW5lLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGlzIHByb2JhYmx5LiBJJ2xsIGZvY3VzIG9uIHdoYXQncyBnb2luZyBvbiB0aGVyZSwgYW5kIHNlZSBpZiBpdCBnaXZlcyBtb3JlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMTQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0NjoyMy44OTM0NTA2NDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkzMTgwNjIwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19jb250aWdfcmFuZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q9MzkwPXNjZW5hcmlvczogbWVtb3J5IG9mZmxpbmUsIG1lbW9yeSBmYWlsdXJlLCBsb25ndGVybSBwaW5uaW5nLCBzeXNjYWxscyhtYmluZCxcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdDozOTE6bWlncmF0ZV9wYWdlcyBhbmQgbW92ZV9wYWdlcyksIGFsbG9jX2NvbnRpZ19yYW5nZSgpIGFuZCBhbGxvY19jb250aWdfcGFnZXMoKS5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdC0zOTItTm93IG9ubHkgbWVtb3J5IG9mZmxpbmUsIG1lbW9yeSBmYWlsdXJlIGFuZCBzeXNjYWxscyBhbGxvdyBmYWxsYmFja2luZyB0byBhbGxvY2F0ZVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jPTExODc9c3RhdGljIHZvaWQgdmlydGlvX21lbV9mYWtlX29ubGluZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMjA1LVxcdFxcdCAqIG9ubGluaW5nIHRoZSBtZW1vcnkgYmxvY2suIE90aGVyd2lzZSwgaXQgd2FzIGFsbG9jYXRlZFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoxMjA2OlxcdFxcdCAqIHVzaW5nIGFsbG9jX2NvbnRpZ19yYW5nZSgpLiBBbGwgcGFnZXMgaW4gYSBzdWJibG9jayBhcmVcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTIwNy1cXHRcXHQgKiBhbGlrZS5cXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYz0xMjI0PXN0YXRpYyBpbnQgdmlydGlvX21lbV9mYWtlX29mZmxpbmUoc3RydWN0IHZpcnRpb19tZW0gKnZtLCB1bnNpZ25lZCBsb25nIHBmbixcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMjMwLVxcdC8qXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjEyMzE6XFx0ICogVE9ETzogV2Ugd2FudCBhbiBhbGxvY19jb250aWdfcmFuZ2UoKSBtb2RlIHRoYXQgdHJpZXMgdG8gYWxsb2NhdGVcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTIzMi1cXHQgKiBoYXJkZXIgKGUuZy4sIGRlYWxpbmcgd2l0aCB0ZW1wb3JhcmlseSBwaW5uZWQgcGFnZXMsIFBDUCksIGVzcGVjaWFsbHlcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMjQ1LVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoxMjQ2OlxcdFxcdHJjID0gYWxsb2NfY29udGlnX3JhbmdlKHBmbiwgcGZuICsgbnJfcGFnZXMsIEFDUl9GTEFHU19OT05FLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMjQ3LVxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jPTI1MzU9c3RhdGljIGludCB2aXJ0aW9fbWVtX2luaXRfaG90cGx1ZyhzdHJ1Y3QgdmlydGlvX21lbSAqdm0pXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMjU1Ny1cXHQvKlxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoyNTU4OlxcdCAqIGFsbG9jX2NvbnRpZ19yYW5nZSgpIHdvcmtzIHJlbGlhYmx5IHdpdGggcGFnZWJsb2NrXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTI1NTktXFx0ICogZ3JhbnVsYXJpdHkgb24gWk9ORV9OT1JNQUwsIHVzZSBwYWdlYmxvY2tfbnJfcGFnZXMuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NtYS5oLTE1LS8qXFxuaW5jbHVkZS9saW51eC9jbWEuaDoxNjogKiAgdGhlIGJ1ZGR5IC0tIGVzcGVjaWFsbHkgcGFnZWJsb2NrIG1lcmdpbmcgYW5kIGFsbG9jX2NvbnRpZ19yYW5nZSgpXFxuaW5jbHVkZS9saW51eC9jbWEuaC0xNy0gKiAtLSBjYW4gZGVhbCB3aXRoIG9ubHkgc29tZSBwYWdlYmxvY2tzIG9mIGEgaGlnaGVyLW9yZGVyIHBhZ2UgYmVpbmdcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9NDQ4PWludCBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDUyLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDUzOmludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU0LVxcdFxcdGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzayk7XFxuaW5jbHVkZS9saW51eC9nZnAuaDo0NTU6I2RlZmluZSBhbGxvY19jb250aWdfcmFuZ2UoLi4uKVxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQ1NjpcXHRhbGxvY19ob29rcyhhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1Ny1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9ODczPWVudW0gem9uZV90eXBlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtOTM2LVxcdCAqICAgIG1lbW9yeSBvZmZsaW5pbmcsIGhvd2V2ZXIsIGNhbm5vdCBiZSBtb3ZlZC9hbGxvY2F0ZWQuIFRoZXNlXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo5Mzc6XFx0ICogICAgdGVjaG5pcXVlcyBtaWdodCB1c2UgYWxsb2NfY29udGlnX3JhbmdlKCkgdG8gaGlkZSBwcmV2aW91c2x5XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC05MzgtXFx0ICogICAgZXhwb3NlZCBwYWdlcyBmcm9tIHRoZSBidWRkeSBhZ2FpbiAoZS5nLiwgdG8gaW1wbGVtZW50IHNvbWUgc29ydFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC05NTAtXFx0ICogSW4gZ2VuZXJhbCwgbm8gdW5tb3ZhYmxlIGFsbG9jYXRpb25zIHRoYXQgZGVncmFkZSBtZW1vcnkgb2ZmbGluaW5nXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo5NTE6XFx0ICogc2hvdWxkIGVuZCB1cCBpbiBaT05FX01PVkFCTEUuIEFsbG9jYXRvcnMgKGxpa2UgYWxsb2NfY29udGlnX3JhbmdlKCkpXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC05NTItXFx0ICogaGF2ZSB0byBleHBlY3QgdGhhdCBtaWdyYXRpbmcgcGFnZXMgaW4gWk9ORV9NT1ZBQkxFIGNhbiBmYWlsIChldmVuXFxuLS1cXG5tbS9jbWEuYz0xMDM9Ym9vbCBjbWFfdmFsaWRhdGVfem9uZXMoc3RydWN0IGNtYSAqY21hKVxcbi0tXFxubW0vY21hLmMtMTI0LVxcdFxcdC8qXFxubW0vY21hLmM6MTI1OlxcdFxcdCAqIGFsbG9jX2NvbnRpZ19yYW5nZSgpIHJlcXVpcmVzIHRoZSBwZm4gcmFuZ2Ugc3BlY2lmaWVkXFxubW0vY21hLmMtMTI2LVxcdFxcdCAqIHRvIGJlIGluIHRoZSBzYW1lIHpvbmUuIFNpbXBsaWZ5IGJ5IGZvcmNpbmcgdGhlIGVudGlyZVxcbi0tXFxubW0vaHVnZXRsYi5jPTI3Mjk9aW50IGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vaHVnZXRsYi5jLTI3MzgtXFx0ICogRmVuY2Ugb2ZmIGdpZ2FudGljIHBhZ2VzIGFzIHRoZXJlIGlzIGEgY3ljbGljIGRlcGVuZGVuY3kgYmV0d2Vlblxcbm1tL2h1Z2V0bGIuYzoyNzM5OlxcdCAqIGFsbG9jX2NvbnRpZ19yYW5nZSBhbmQgdGhlbS4gUmV0dXJuIC1FTk9NRU0gYXMgdGhpcyBoYXMgdGhlIGVmZmVjdFxcbm1tL2h1Z2V0bGIuYy0yNzQwLVxcdCAqIG9mIGJhaWxpbmcgb3V0IHJpZ2h0IGF3YXkgd2l0aG91dCBmdXJ0aGVyIHJldHJ5aW5nLlxcbi0tXFxubW0vaW50ZXJuYWwuaD0xMDE3PXN0cnVjdCBjb21wYWN0X2NvbnRyb2wge1xcbi0tXFxubW0vaW50ZXJuYWwuaC0xMDUzLVxcdFxcdFxcdFxcdFxcdCAqL1xcbm1tL2ludGVybmFsLmg6MTA1NDpcXHRib29sIGFsbG9jX2NvbnRpZztcXHRcXHQvKiBhbGxvY19jb250aWdfcmFuZ2UgYWxsb2NhdGlvbiAqL1xcbm1tL2ludGVybmFsLmgtMTA1NS19O1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTcyNDY9RVhQT1JUX1NZTUJPTChhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZik7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzI0OC0vKipcXG5tbS9wYWdlX2FsbG9jLmM6NzI0OTogKiBhbGxvY19jb250aWdfcmFuZ2UoKSAtLSB0cmllcyB0byBhbGxvY2F0ZSBnaXZlbiByYW5nZSBvZiBwYWdlc1xcbm1tL3BhZ2VfYWxsb2MuYy03MjUwLSAqIEBzdGFydDpcXHRzdGFydCBQRk4gdG8gYWxsb2NhdGVcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MjY0LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo3MjY1OmludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbm1tL3BhZ2VfYWxsb2MuYy03MjY2LVxcdFxcdFxcdCAgICAgIGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03Mjc4LX1cXG5tbS9wYWdlX2FsbG9jLmM6NzI3OTpFWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YpO1xcbm1tL3BhZ2VfYWxsb2MuYy03MjgwLVxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYz0xMzQ9c3RhdGljIHN0cnVjdCBwYWdlICpoYXNfdW5tb3ZhYmxlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTE0NC1cXHRcXHQvKlxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6MTQ1OlxcdFxcdCAqIENNQSBhbGxvY2F0aW9ucyAoYWxsb2NfY29udGlnX3JhbmdlKSByZWFsbHkgbmVlZCB0byBtYXJrXFxubW0vcGFnZV9pc29sYXRpb24uYy0xNDYtXFx0XFx0ICogaXNvbGF0ZSBDTUEgcGFnZWJsb2NrcyBldmVuIHdoZW4gdGhleSBhcmUgbm90IG1vdmFibGUgaW4gZmFjdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0NjoyNi44MjUyNjQ1NzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDkwMDQyNjg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDcml0aWNhbCBNZW1vcnkgSXNvbGF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgaXQncyBkZWFsaW5nIHdpdGggYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AsIHdoaWNoIGlzIGNhbGxlZCBieSBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYC4gQW5kIEkga25vdyB0aGF0IGBhbGxvY19jb250aWdfcmFuZ2VgIHVzZXMgdGhpcyBjb2RlIHBhdGgsIGFsb25nIHdpdGggdmlydGlvX21lbSwgYW5kIGh1Z2VwYWdlIGFsbG9jYXRpb24g4oCTIHNvIGl0J3MgYSAqdmVyeSogaW1wb3J0YW50IHNlY3Rpb24gb2YgY29kZS4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGNoZWNrcyByZWxhdGVkIHRvIGBidWRkeV9vcmRlcl91bnNhZmUocGFnZSlgIGFuZCBgY29tcG91bmRfb3JkZXIoaGVhZClgLiBJdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIGFib3V0IHByZXZlbnRpbmcgc29tZSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBkdXJpbmcgdGhlIHBhZ2UgaXNvbGF0aW9uIHByb2Nlc3MuIEZ1bmN0aW9uYWwgY2hhbmdlLCB0aGVuLlxuXG5MZXQncyBkaXZlIGludG8gdGhlIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGNoYW5nZXMsIGxpbmUgYnkgbGluZS4gRmlyc3QsIHdpdGggYnVkZHkgcGFnZXM6IHRoZSBjb2RlIG5vdyB1c2VzIGBidWRkeV9vcmRlcl91bnNhZmVgIChpbnN0ZWFkIG9mIHRoZSBvbGRlciBzYWZlIHZlcnNpb24pLCBidXQgYWRkcyBjaGVja3MgdG8gdmFsaWRhdGUgdGhlIGBvcmRlcmAgYmVmb3JlIGFueSBjYWxjdWxhdGlvbnMsIGFuZCBlbnN1cmVzIHRoZSBwYWdlIGJvdW5kYXJ5IGlzIHJlc3BlY3RlZC4gVGhpcyBpcyBzbWFydCwgZGVhbGluZyB3aXRoIHRob3NlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2hlcmUgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgbWlnaHQgcmV0dXJuIGEgdmFsdWUgdGhhdCdzIG5vIGxvbmdlciB2YWxpZC4gSWYgdGhlc2UgY2hlY2tzIGZhaWwsIGl0IGp1bXBzIHRvIGBmYWlsZWRgLlxuXG5BbmQgdGhlbiwgd2l0aCBjb21wb3VuZCBwYWdlczogaW5zdGVhZCBvZiBkaXJlY3RseSBjYWxjdWxhdGluZyBgbnJfcGFnZXNgLCBpdCBjYWxjdWxhdGVzIGFuIGBvcmRlcmAgdmlhIGBjb21wb3VuZF9vcmRlcihoZWFkKWAuIFRoZXJlJ3Mgbm93IGEgY2hlY2sgdGhhdCBjYXBzIHRoZSBvcmRlciB0byBgTUFYX0ZPTElPX09SREVSYCAoYW5vdGhlciBhdHRlbXB0IHRvIG1pdGlnYXRlIHJhY2VzKS4gQWxzbywgd2UncmUgdmFsaWRhdGluZyB0aGUgYGhlYWRfcGZuYCBub3cuICBXZSBjaGVjayB0aGF0IHRoZSBkZXJpdmVkIGBoZWFkX3BmbmAgZnJvbSBgY29tcG91bmRfaGVhZCgpYCBpcyBzdGlsbCB2YWxpZCwgZ2l2ZW4gYHBmbmAuIElmIGFueXRoaW5nIGlzIG91dCBvZiB3aGFjayAoaGVhZCBpcyBhZnRlciBwZm4sIG9yIHVuYWxpZ25lZCwgZXRjLiksIHdlIGJhaWwgb3V0LiBJdCBzZWVtcyBsaWtlIHRoZSBnb2FsIGhlcmUgaXMgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGVuZCB1cCB3aXRoIGludmFsaWQgY2FsY3VsYXRpb25zIGJhc2VkIG9uIHBvdGVudGlhbGx5IHN0YWxlIGNvbXBvdW5kIHBhZ2UgbWV0YWRhdGEuXG5cblRoaXMgaXMgaW1tZWRpYXRlbHkgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcsIGFuZCBwcm9iYWJseSB3b3J0aCBhIGRlZXBlciBkaXZlLiBTbywgd2hhdCBhcmUgdGhlIGVudHJ5IHBvaW50cz8gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgaXRzZWxmIGlzIHN0YXRpYywgc28gdGhhdCdzIG5vdCBkaXJlY3RseSBleHBvc2VkLiBIb3dldmVyLCBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCwgYGFsbG9jX2NvbnRpZ19yYW5nZWAsIGBhbGxvY19jb250aWdfcGFnZXNgLCBhbmQgYG9mZmxpbmVfcGFnZXNgIGFyZSAqbm90KiBzdGF0aWMuIFdlIHNob3VsZCBjaGVjayB0aGUgdXNhZ2Ugb2YgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgdG8gdW5kZXJzdGFuZCBpdHMgYnJvYWRlciBpbXBhY3QsIGJlY2F1c2UgdGhhdCBtaWdodCBiZSBvdXIgbWFpbiB0YXJnZXQgZm9yIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMjksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDY6MzcuNzI1NzA3NzExWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM4ODQ0MjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmg9NjE9Ym9vbCBwYWdlYmxvY2tfdW5pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmgtNjItXFxuaW5jbHVkZS9saW51eC9wYWdlLWlzb2xhdGlvbi5oOjYzOmludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmgtNjQtXFx0XFx0XFx0ICAgICBlbnVtIHBiX2lzb2xhdGVfbW9kZSBtb2RlKTtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTkwMj1pbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTk2OC1cXHQvKiBzZXQgYWJvdmUgcmFuZ2UgYXMgaXNvbGF0ZWQgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE5Njk6XFx0cmV0ID0gc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHN0YXJ0X3BmbiwgZW5kX3BmbixcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5NzAtXFx0XFx0XFx0XFx0ICAgICAgIFBCX0lTT0xBVEVfTU9ERV9NRU1fT0ZGTElORSk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzEwOD1pbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzE0NC1cXHQgKiBoYXZlIGRpZmZlcmVudCBzaXplcywgYW5kIGR1ZSB0byB0aGUgd2F5IHBhZ2UgYWxsb2NhdG9yXFxubW0vcGFnZV9hbGxvYy5jOjcxNDU6XFx0ICogd29yaywgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKCkgaGFzIHNwZWNpYWwgaGFuZGxpbmdzIGZvciB0aGlzLlxcbm1tL3BhZ2VfYWxsb2MuYy03MTQ2LVxcdCAqXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzE2MS1cXG5tbS9wYWdlX2FsbG9jLmM6NzE2MjpcXHRyZXQgPSBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2Uoc3RhcnQsIGVuZCwgbW9kZSk7XFxubW0vcGFnZV9hbGxvYy5jLTcxNjMtXFx0aWYgKHJldClcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM9MzIwPXN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy00NzAtLyoqXFxubW0vcGFnZV9pc29sYXRpb24uYzo0NzE6ICogc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKCkgLSBtYXJrIHBhZ2UgcmFuZ2UgTUlHUkFURV9JU09MQVRFXFxubW0vcGFnZV9pc29sYXRpb24uYy00NzItICogQHN0YXJ0X3BmbjpcXHRcXHRUaGUgZmlyc3QgUEZOIG9mIHRoZSByYW5nZSB0byBiZSBpc29sYXRlZC5cXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTA1LSAqL1xcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTA2OmludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUwNy1cXHRcXHRcXHQgICAgIGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUpXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTU0OS0vKipcXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjU1MDogKiB1bmRvX2lzb2xhdGVfcGFnZV9yYW5nZSAtIHVuZG8gZWZmZWN0cyBvZiBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTUxLSAqIEBzdGFydF9wZm46XFx0XFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgaXNvbGF0ZWQgcmFuZ2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDY6MzkuODY0NTYzMDc4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1ODQzMjEyNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhpbmdzOlxuXG4qKkNoZWNraW5nIEdsb2JhbCBQYWdlIEFsbG9jYXRpb24gTWVjaGFuaXNtcyoqXG5cbk9rYXksIHNvIEkgc2VlIGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgIGlzIGEgZ2xvYmFsIHZhcmlhYmxlLCBhY2Nlc3NpYmxlIGV2ZXJ5d2hlcmUuICBTaW1pbGFybHksIGBhbGxvY19jb250aWdfcmFuZ2VgIGhhcyBnbG9iYWwgc2NvcGUgYXMgd2VsbC4gQW5kIEkgY2FuJ3QgZm9yZ2V0IGFib3V0IGBvZmZsaW5lX3BhZ2VzYCEgVGhlc2UgYXJlIGtleSBjb21wb25lbnRzLiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYGFsbG9jX2NvbnRpZ19yYW5nZWAgd29ya3MgYmVjYXVzZSBpdCBsb29rcyBsaWtlIGl0IGlzIGludGVncmFsIHRvIGhvdyB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IGhhbmRsZXMgY29udGlndW91cyByYW5nZXMuIEkgc2hvdWxkIGRlbHZlIGludG8gaXRzIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZ2xvYmFsIHZhcmlhYmxlcy4gIEJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgbGlrZWx5IGBtbS9wYWdlX2FsbG9jLmNgIHRvIHNlZSBob3cgaXQgaXMgd29ya2luZy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIG90aGVyIHZhcmlhYmxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM4MiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQ2OjQ0LjQ0ODg4ODEwOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzODMwNjYyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZ2ZwLmg9NDQ4PWludCBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDUyLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDUzOmludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU0LVxcdFxcdGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzayk7XFxuaW5jbHVkZS9saW51eC9nZnAuaC00NTUtI2RlZmluZSBhbGxvY19jb250aWdfcmFuZ2UoLi4uKVxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQ1NjpcXHRhbGxvY19ob29rcyhhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1Ny1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03MjQ2PUVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTcyNjQtICovXFxubW0vcGFnZV9hbGxvYy5jOjcyNjU6aW50IGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vcGFnZV9hbGxvYy5jLTcyNjYtXFx0XFx0XFx0ICAgICAgYWNyX2ZsYWdzX3QgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTcyNzgtfVxcbm1tL3BhZ2VfYWxsb2MuYzo3Mjc5OkVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZik7XFxubW0vcGFnZV9hbGxvYy5jLTcyODAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQ2OjQ2LjY4NzIwMDM0M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjIzMzMwOTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhvc2UgZnVuY3Rpb25zIGFzIHBvdGVudGlhbCBjYW5kaWRhdGVzIGZvciBgRm9jdXNTeW1ib2xzYC5cblxuKipGb2N1c1N5bWJvbCBDYW5kaWRhdGUgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCBhbmQgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAuIFRoZXkgYm90aCBqdW1wIG91dCBhcyBwb3RlbnRpYWwgY2FuZGlkYXRlcyBmb3IgaW5jbHVzaW9uIGluIGBGb2N1c1N5bWJvbHNgLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHByZWNvbmRpdGlvbnMsIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBuZWVkZWQgYmVmb3JlIEkgY2FuIHN0YXJ0IHRvIGxvb2sgZGVlcGVyIGludG8gZWl0aGVyIGZ1bmN0aW9uLlxuXG5GaXJzdCwgSSdsbCBmb2N1cyBvbiBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCBzaW5jZSB0aGUgY29kZSBzZWVtcyB0byBpbmRpY2F0ZSB3aGVyZSB0aGUgc291cmNlIGZpbGUgbWlnaHQgYmU6IGBtbS9wYWdlX2lzb2xhdGlvbi5jYC4gSSdsbCBnbyBjaGVjayB0aGUgYG1tL01ha2VmaWxlYCwgYW5kIHNlZSBpZiBJIGNhbiB2ZXJpZnkgdGhhdCBgcGFnZV9pc29sYXRpb24ub2AgaXMgYmVpbmcgYnVpbHQgYW5kIGNvbXBpbGVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBiYXNpYyBjb25maWRlbmNlIHRvIGNvbnRpbnVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDEwLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDY6NTAuMzEwNTMzNDA3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM3MDY3ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2VfaXNvbGF0aW9uLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTE3PW9iai0kKENPTkZJR19QQUdFX09XTkVSKSArPSBwYWdlX293bmVyLm9cXG5tbS9NYWtlZmlsZToxMTg6b2JqLSQoQ09ORklHX01FTU9SWV9JU09MQVRJT04pICs9IHBhZ2VfaXNvbGF0aW9uLm9cXG5tbS9NYWtlZmlsZS0xMTktb2JqLSQoQ09ORklHX1pTTUFMTE9DKVxcdCs9IHpzbWFsbG9jLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDY6NTIuNTQ3NjA2NTEzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMjMzNzc1NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gdGhlIGtlcm5lbCBjb25maWc6XG5cbioqTWVtb3J5IElzb2xhdGlvbiBDb25maWd1cmF0aW9uIFJldmlldyoqXG5cbk9rYXksIHRoZSBwcm9ibGVtIHN0YXRlbWVudCBleHBsaWNpdGx5IG1lbnRpb25zIGBDT05GSUdfTUVNT1JZX0lTT0xBVElPTmAgYXMgYSByZXF1aXJlbWVudC4gVGltZSB0byBjb25maXJtIHRoaXMgaXMgZW5hYmxlZCBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZS4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGtlcm5lbCdzIEtjb25maWcgc3lzdGVtLiBTcGVjaWZpY2FsbHksIHRoYXQgbWVhbnMgZGlnZ2luZyBpbnRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gSSdsbCBuZWVkIHRvIHJldmlldyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgdG8gc2VlIGhvdyBgQ09ORklHX01FTU9SWV9JU09MQVRJT05gIGlzIGhhbmRsZWQsIHdoYXQgb3RoZXIgb3B0aW9ucyBpdCBtaWdodCBkZXBlbmQgb24sIGFuZCBpZiB0aGVyZSBhcmUgYW55IGNhdmVhdHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBHb3R0YSBtYWtlIHN1cmUgd2UncmUgbm90IGluYWR2ZXJ0ZW50bHkgZGlzYWJsaW5nIG90aGVyIGNydWNpYWwgZmVhdHVyZXMuIExldCdzIHNlZSB3aGF0IGBtbS9LY29uZmlnYCByZXZlYWxzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNzgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0Njo1Ny43NzA5ODc5NDNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjEyMTU4ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTU9SWV9JU09MQVRJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz00OTk9Y29uZmlnIE5VTUFfS0VFUF9NRU1JTkZPXFxuLS1cXG5tbS9LY29uZmlnLTUwMS1cXG5tbS9LY29uZmlnOjUwMjpjb25maWcgTUVNT1JZX0lTT0xBVElPTlxcbm1tL0tjb25maWctNTAzLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDc6MDAuMDkyMjA5NTY3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODQxMDIzNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYE1FTU9SWV9JU09MQVRJT05gIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgTUVNT1JZX0lTT0xBVElPTmAgaXMgYSBib29sZWFuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgZmlndXJlIG91dCB3aGF0J3MgZHJpdmluZyB0aGlzLiBJdCdzIGFsbW9zdCBjZXJ0YWlubHkgYmVpbmcgc2VsZWN0ZWQgb3IgZW5hYmxlZCBieSBvdGhlciBjb25maWd1cmF0aW9ucyDigJMgYSBkZXBlbmRlbmN5LCBzbyB0byBzcGVhay4gVGltZSB0byB0cmFjZSB0aGUgc2VsZWN0cyBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBjYXVzaW5nIHRoaXMgdG8gZmxpcCB0byB0cnVlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMgaGVyZTsgSSBrbm93IHdoYXQgbWVtb3J5IGlzb2xhdGlvbiAqaXMqLCBidXQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgaW4gKnRoaXMqIHN5c3RlbSB3aGVyZSBpdCdzIGJlaW5nIHVzZWQuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoZXJlIHRoaXMgZmxhZyBpcyBiZWluZyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjY4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDc6MDMuNjc2MzE0MzEyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE3MjQxMjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NTIzPW1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnLTUyNC1cXHRib29sIFxcXCJNZW1vcnkgaG90cGx1Z1xcXCJcXG5tbS9LY29uZmlnOjUyNTpcXHRzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlxcbm1tL0tjb25maWctNTI2LVxcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcXG4tLVxcbm1tL0tjb25maWc9MTA2Nz1jb25maWcgQ01BXFxuLS1cXG5tbS9LY29uZmlnLTEwNzAtXFx0c2VsZWN0IE1JR1JBVElPTlxcbm1tL0tjb25maWc6MTA3MTpcXHRzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlxcbm1tL0tjb25maWctMTA3Mi1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQ3OjA1Ljg5MzU2MjIwOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTU0MTMwOTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB3b3JraW5nIG9uIGNvbmZpZ3VyaW5nIHRoaXMga2VybmVsLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gbWVtb3J5IGFsbG9jYXRpb24gZmVhdHVyZXMgYXJlIGltcG9ydGFudCBoZXJlLiBJIHNlZSB0aGF0IGlmIEkgZW5hYmxlIGBNRU1PUllfSE9UUExVR2Agb3IgYENNQWAsIEkgYXV0b21hdGljYWxseSBhbHNvIHNlbGVjdCBgTUVNT1JZX0lTT0xBVElPTmAuIE1ha2VzIHNlbnNlOyBob3RwbHVnZ2luZyBtZW1vcnkgb3IgdXNpbmcgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbiBsaWtlbHkgbmVlZHMgYSBkZWRpY2F0ZWQgaXNvbGF0ZWQgcmVnaW9uLiBUaGVyZWZvcmUsIEkgc2hvdWxkIGVuYWJsZSBib3RoIGBNRU1PUllfSE9UUExVR2AgYW5kIGBDTUFgLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC5cblxuTm93LCBJIGFsc28gc2VlIHRoYXQgYENPTlRJR19BTExPQ2AgaXMgcG90ZW50aWFsbHkgdGllZCB0byBib3RoIGBDTUFgIGFuZCBgTUVNT1JZX0lTT0xBVElPTmAuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhhdCBjb25uZWN0aW9uLiBJJ2xsIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgQ09OVElHX0FMTE9DYCBub3cgdG8gY29uZmlybSBpdHMgZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIGl0cyBzcGVjaWZpYyByb2xlIGluIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgaW1wYWN0IG9mIGVuYWJsaW5nIHRoZXNlIGRpZmZlcmVudCBmZWF0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMTksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0NzoxMi40NDc2OTY4ODdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjUyMTIyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENPTlRJR19BTExPQ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTcwOT1jb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG4tLVxcbm1tL0tjb25maWctNzE4LVxcbm1tL0tjb25maWc6NzE5OmNvbmZpZyBDT05USUdfQUxMT0NcXG5tbS9LY29uZmlnLTcyMC1cXHRkZWZfYm9vbCAoTUVNT1JZX0lTT0xBVElPTiBcXHUwMDI2XFx1MDAyNiBDT01QQUNUSU9OKSB8fCBDTUFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDc6MTQuNDEyOTE0MzI3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNTE3MzI0MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQgc2VlbXMgdGhlIGBDT05USUdfQUxMT0NgIG9wdGlvbiBpcyBlZmZlY3RpdmVseSByZWR1bmRhbnQuIEl0J3MgZGVmaW5lZCBhcyBhIGJvb2xlYW4gZXhwcmVzc2lvbiB0aGF0IGhpbmdlcyBvbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYE1FTU9SWV9JU09MQVRJT05gLCBgQ09NUEFDVElPTmAsIGFuZCBgQ01BYCBvcHRpb25zLiBUaGUgbG9naWMgaGVyZSBpcyBjbGVhcjogYENPTlRJR19BTExPQ2AgaXMgZW5hYmxlZCBpZiAqZWl0aGVyKiBgQ01BYCBpcyBlbmFibGVkICpvciogYE1FTU9SWV9JU09MQVRJT05gICphbmQqIGBDT01QQUNUSU9OYCBhcmUgZW5hYmxlZCB0b2dldGhlci4gVGhlcmVmb3JlLCBpZiB3ZSB3YW50IGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24sIHdlIGNhbiBqdXN0IGVuYWJsZSBgQ01BYCBkaXJlY3RseS4gVGhhdCdzIHRoZSBzaW1wbGVzdCBwYXRoIGFuZCBpdCBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIHRob3NlIG90aGVyIHR3byBhcmUgZW5hYmxlZCB0b28sIGJlY2F1c2UgdGhleSBnZXQgYnVuZGxlZCBpbnRvIHRoZSBlcXVhdGlvbi5cblxuTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgaXTigJlzIGFsd2F5cyB3aXNlIHRvIGRpdmUgaW50byB0aGUgY29kZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBteSBhc3N1bXB0aW9uIGhvbGRzIHVwIGluIHByYWN0aWNlLCB0aGF0IHRoZXJlIGlzbid0IHNvbWUgb3RoZXIgc3VidGxlIGNvbmRpdGlvbiBvciBkZXBlbmRlbmN5IGx1cmtpbmcgc29tZXdoZXJlLiBJIHNob3VsZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXRzIGJlaGF2aW91ciBpcyBnb3Zlcm5lZCBkaXJlY3RseSBieSBgQ01BYCBvciBgQ09OVElHX0FMTE9DYCwgb3IgdGhhdCBpdCdzIGNvcnJlY3RseSBoYW5kbGVkIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgYCNpZmRlZmAgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGNvbnRyb2wgaXRzIGV4ZWN1dGlvbiwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzkwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDc6MTkuNjY0NjQ5NjY2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk0NTkzNTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9nZnAuaD00NDg9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxuaW5jbHVkZS9saW51eC9nZnAuaC00NTItXFxuaW5jbHVkZS9saW51eC9nZnAuaDo0NTM6aW50IGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuaW5jbHVkZS9saW51eC9nZnAuaC00NTQtXFx0XFx0YWNyX2ZsYWdzX3QgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1NS0jZGVmaW5lIGFsbG9jX2NvbnRpZ19yYW5nZSguLi4pXFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDU2OlxcdGFsbG9jX2hvb2tzKGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU3LVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTcyNDY9RVhQT1JUX1NZTUJPTChhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZik7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzI2NC0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NzI2NTppbnQgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5tbS9wYWdlX2FsbG9jLmMtNzI2Ni1cXHRcXHRcXHQgICAgICBhY3JfZmxhZ3NfdCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzI3OC19XFxubW0vcGFnZV9hbGxvYy5jOjcyNzk6RVhQT1JUX1NZTUJPTChhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKTtcXG5tbS9wYWdlX2FsbG9jLmMtNzI4MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDc6MjEuODU5MjQ4NDIzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzI4MTczNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHdoZXRoZXIgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEknbSBhc3N1bWluZyB0aGF0IGl0IG1pZ2h0IGJlLCB3aGljaCB3b3VsZCBkZXBlbmQgb24gYENPTkZJR19DT05USUdfQUxMT0NgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZ1bmN0aW9uJ3MgZGVmaW5pdGlvbiBhbmQgdXNhZ2UgYXJlIG9ubHkgcHJlc2VudCB3aGVuIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLiBHaXZlbiB0aGUgbmFtaW5nLCBpdCdzIGEgcHJldHR5IHNhZmUgYmV0LCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgc3Vycm91bmRpbmcgdGhlIGNvZGUuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiwgYW5kIEkgd2FudCB0byBiZSAxMDAlIHN1cmUgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBmdW5jdGlvbmFsaXR5IG9yIGFueSBwb3RlbnRpYWwgaXNzdWVzLiBJZiBpdCAqaXMqIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIHRoZW4gSSBrbm93IEkgY2FuIHJlYXNvbiBhYm91dCBpdHMgZXhpc3RlbmNlIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0gYmFzZWQgb24gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIE90aGVyd2lzZSwgSSB3aWxsIGtub3cgaXQncyBhbHdheXMgYXZhaWxhYmxlIGFuZCBjYW4gY29udGludWUgbXkgZXhwbG9yYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTY0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDc6MjUuMDkyMDY4MzkzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk5NDkwOTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19DT05USUdfQUxMT0NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jPTQzND1ib29sIGFyY2hfaHVnZXRsYl9taWdyYXRpb25fc3VwcG9ydGVkKHN0cnVjdCBoc3RhdGUgKmgpXFxuLS1cXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDM5LVxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYzo0NDA6I2lmZGVmIENPTkZJR19DT05USUdfQUxMT0NcXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDQxLXN0YXRpYyBfX2luaXQgaW50IGdpZ2FudGljX3BhZ2VzX2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmM9MjQ9Ym9vbCBfX2luaXQgYXJjaF9odWdldGxiX3ZhbGlkX3NpemUodW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy0zMy1cXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jOjM0OiNpZmRlZiBDT05GSUdfQ09OVElHX0FMTE9DXFxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy0zNS1zdGF0aWMgX19pbml0IGludCBnaWdhbnRpY19wYWdlc19pbml0KHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTQzOT1leHRlcm4gZ2ZwX3Qgdm1hX3RocF9nZnBfbWFzayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuaW5jbHVkZS9saW51eC9nZnAuaC00NDAtXFxuaW5jbHVkZS9saW51eC9nZnAuaDo0NDE6I2lmZGVmIENPTkZJR19DT05USUdfQUxMT0NcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ0Mi1cXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz05NzU9ZGVidWdfdm1fcGd0YWJsZV9mcmVlX2h1Z2VfcGFnZShzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzLFxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTk3Ny17XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjk3ODojaWZkZWYgQ09ORklHX0NPTlRJR19BTExPQ1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05NzktXFx0aWYgKGFyZ3MtXFx1MDAzZWlzX2NvbnRpZ3VvdXNfcGFnZSkge1xcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTEwNDY9ZGVidWdfdm1fcGd0YWJsZV9hbGxvY19odWdlX3BhZ2Uoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncywgaW50IG9yZGVyKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTEwNDktXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjEwNTA6I2lmZGVmIENPTkZJR19DT05USUdfQUxMT0NcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTA1MS1cXHRpZiAob3JkZXIgXFx1MDAzZSBNQVhfUEFHRV9PUkRFUikge1xcbi0tXFxubW0vaHVnZXRsYi5jPTEzMjA9c3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX3ZtYShzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEzNTgtXFxubW0vaHVnZXRsYi5jOjEzNTk6I2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0NPTlRJR19BTExPQylcXG5tbS9odWdldGxiLmMtMTM2MC1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzc1LX1cXG5tbS9odWdldGxiLmM6MTM3NjojZWxzZSAvKiAhQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UgfHwgIUNPTkZJR19DT05USUdfQUxMT0MgKi9cXG5tbS9odWdldGxiLmMtMTM3Ny1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywgaW50IG5pZCxcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zNzMyPXN0YXRpYyBpbnQgc2V0X21heF9odWdlX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIHVuc2lnbmVkIGxvbmcgY291bnQsIGludCBuaWQsXFxuLS1cXG5tbS9odWdldGxiLmMtMzc4OC1cXHQgKi9cXG5tbS9odWdldGxiLmM6Mzc4OTpcXHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljKGgpIFxcdTAwMjZcXHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19DT05USUdfQUxMT0MpKSB7XFxubW0vaHVnZXRsYi5jLTM3OTAtXFx0XFx0aWYgKGNvdW50IFxcdTAwM2UgcGVyc2lzdGVudF9odWdlX3BhZ2VzKGgpKSB7XFxuLS1cXG5tbS9rZmVuY2UvY29yZS5jPTEwMDc9c3RhdGljIGludCBrZmVuY2VfaW5pdF9sYXRlKHZvaWQpXFxuLS1cXG5tbS9rZmVuY2UvY29yZS5jLTEwMTQtXFxubW0va2ZlbmNlL2NvcmUuYzoxMDE1OiNpZmRlZiBDT05GSUdfQ09OVElHX0FMTE9DXFxubW0va2ZlbmNlL2NvcmUuYy0xMDE2LVxcdHN0cnVjdCBwYWdlICpwYWdlcztcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmMtMTA1OC1cXG5tbS9rZmVuY2UvY29yZS5jOjEwNTk6I2lmZGVmIENPTkZJR19DT05USUdfQUxMT0NcXG5tbS9rZmVuY2UvY29yZS5jLTEwNjAtXFx0ZnJlZV9jb250aWdfcmFuZ2UocGFnZV90b19wZm4odmlydF90b19wYWdlKCh2b2lkICopa2ZlbmNlX21ldGFkYXRhX2luaXQpKSxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz02OTQwPXZvaWQgX19mcmVlX2NvbnRpZ19yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy02OTQ0LVxcbm1tL3BhZ2VfYWxsb2MuYzo2OTQ1OiNpZmRlZiBDT05GSUdfQ09OVElHX0FMTE9DXFxubW0vcGFnZV9hbGxvYy5jLTY5NDYtLyogVXNhZ2U6IFNlZSBhZG1pbi1ndWlkZS9keW5hbWljLWRlYnVnLWhvd3RvLnJzdCAqL1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTc0OTI9RVhQT1JUX1NZTUJPTChmcmVlX2NvbnRpZ19yYW5nZSk7XFxubW0vcGFnZV9hbGxvYy5jOjc0OTM6I2VuZGlmIC8qIENPTkZJR19DT05USUdfQUxMT0MgKi9cXG5tbS9wYWdlX2FsbG9jLmMtNzQ5NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDc6MjcuMjkxNjEzMzA5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MDc0NDc3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGNvbmZpcm1pbmcgdGhhdCBgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZmAgZG9lcyBpbmRlZWQgbGl2ZSB1bmRlciBgQ09ORklHX0NPTlRJR19BTExPQ2AuIEFuZCwgYXMgSSBzdXNwZWN0ZWQsIGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgIGlzIHJpZ2h0IHRoZXJlIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCwgbWVhbmluZyBpdCdzIGxpbmtlZCB0byBgQ09ORklHX01FTU9SWV9JU09MQVRJT05gLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGVuYWJsZSBgQ01BYCwgYE1FTU9SWV9JU09MQVRJT05gLCBgTUVNT1JZX0hPVFBMVUdgLCBhbmQgYENPTlRJR19BTExPQ2AgZm9yIGZ1bGwgZnVuY3Rpb25hbGl0eS4gQnV0IHdhaXQgYSBtaW51dGUuLi4gTGV0J3MgdGhpbmsgdGhpcyB0aHJvdWdoLiBgQ01BYCAqYWxyZWFkeSogc2VsZWN0cyBgTUVNT1JZX0lTT0xBVElPTmAuIEFuZCBgQ09OVElHX0FMTE9DYCBpcyBkZWZpbmVkIGFzIGEgZnVuY3Rpb24gb2YgYE1FTU9SWV9JU09MQVRJT05gIGFuZCBgQ09NUEFDVElPTmAsIG9yIGRpcmVjdGx5IGJ5IGBDTUFgLiBTbywgaWYgYENNQWAgaXMgZW5hYmxlZCwgdGhlIG90aGVycyBzaG91bGQgYmUgdGFrZW4gY2FyZSBvZi4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBxdWl0ZSBhIGJpdC4gSXQgbWFrZXMgbW9yZSBzZW5zZSB0byBlbmFibGUgYENNQWAgZGlyZWN0bHkuXG5cbkp1c3QgdG8gYmUgc2FmZSBhbmQgZW5zdXJlIG1heGltdW0gY29tcGF0aWJpbGl0eSwgSSdsbCBnbyBhaGVhZCBhbmQgZW5hYmxlIGBNRU1PUllfSE9UUExVR2AgYXMgd2VsbC4gQ2FuJ3QgaHVydCwgYW5kIG1pZ2h0IGJlIHVzZWZ1bCBkb3duIHRoZSBsaW5lLlxuXG5GaW5hbGx5LCBJJ2xsIHRha2UgYSBsb29rIGF0IGBvZmZsaW5lX3BhZ2VzYCBpbiBgbW0vbWVtb3J5X2hvdHBsdWcuY2AgdG8gYmUgY2VydGFpbiB0aGVyZSBpc24ndCBhbnl0aGluZyBJJ3ZlIG1pc3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NjIsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDc6MzIuNjk5MDYzMDM2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE3NTAzMTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9mZmxpbmVfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9tbS9tbXUuYz0yMDc1PXN0YXRpYyBib29sIGNhbl91bm1hcF93aXRob3V0X3NwbGl0KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYy0yMTA1LSAqIGluYWR2ZXJ0ZW50bHkgcmVtb3ZlZCBhcyBpdCBibG9ja3MgcGZuIHJhbmdlIG9mZmxpbmluZyBwcm9jZXNzIGluXFxuYXJjaC9hcm02NC9tbS9tbXUuYzoyMTA2OiAqIF9fb2ZmbGluZV9wYWdlcygpLiBIZW5jZSB0aGlzIHByZXZlbnRzIGJvdGggb2ZmbGluaW5nIGFzIHdlbGwgYXNcXG5hcmNoL2FybTY0L21tL21tdS5jLTIxMDctICogcmVtb3ZhbCBwcm9jZXNzIGZvciBib290IG1lbW9yeSB3aGljaCBpcyBpbml0aWFsbHkgYWx3YXlzIG9ubGluZS5cXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yODA9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjkxLVxcdCAqIFVuYWNjb3VudCBiZWZvcmUgb2ZmbGluaW5nLCBzdWNoIHRoYXQgdW5wb3B1bGF0ZWQgem9uZSBhbmQga3RocmVhZHNcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MjkyOlxcdCAqIGNhbiBwcm9wZXJseSBiZSB0b3JuIGRvd24gaW4gb2ZmbGluZV9wYWdlcygpLlxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yOTMtXFx0ICovXFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzAxLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzozMDI6XFx0cmV0ID0gb2ZmbGluZV9wYWdlcyhzdGFydF9wZm4gKyBucl92bWVtbWFwX3BhZ2VzLFxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMDMtXFx0XFx0XFx0ICAgIG5yX3BhZ2VzIC0gbnJfdm1lbW1hcF9wYWdlcywgbWVtLVxcdTAwM2V6b25lLCBtZW0tXFx1MDAzZWdyb3VwKTtcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzA0LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MzA1OlxcdFxcdC8qIG9mZmxpbmVfcGFnZXMoKSBmYWlsZWQuIEFjY291bnQgYmFjay4gKi9cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzA2LVxcdFxcdGlmIChucl92bWVtbWFwX3BhZ2VzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI2ND1leHRlcm4gdm9pZCB0cnlfb2ZmbGluZV9ub2RlKGludCBuaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDoyNjU6ZXh0ZXJuIGludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0yNjYtXFx0XFx0XFx0IHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg9MjcyPXN0YXRpYyBpbmxpbmUgdm9pZCB0cnlfb2ZmbGluZV9ub2RlKGludCBuaWQpIHt9XFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTI3My1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6Mjc0OnN0YXRpYyBpbmxpbmUgaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTI3NS1cXHRcXHRcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXApXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTUzOT12b2lkIHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHN0cnVjdCB6b25lICp6b25lLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy01ODMtICogc3VyZSB0aGF0IHBhZ2VzIGFyZSBtYXJrZWQgcmVzZXJ2ZWQgYW5kIHpvbmVzIGFyZSBhZGp1c3QgcHJvcGVybHkgYnlcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjU4NDogKiBjYWxsaW5nIG9mZmxpbmVfcGFnZXMoKS5cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTU4NS0gKi9cXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTg5MD1zdGF0aWMgaW50IGNvdW50X3N5c3RlbV9yYW1fcGFnZXNfY2IodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5MDEtICovXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxOTAyOmludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTkwMy1cXHRcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXApXFxuLS1cXG5tbS9tbV9pbml0LmM9MTUzOT12b2lkIF9fcmVmIGZyZWVfYXJlYV9pbml0X2NvcmVfaG90cGx1ZyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbi0tXFxubW0vbW1faW5pdC5jLTE1NzctXFx0ICogY2xlYXIgYWxsIHpvbmVzJyBwcmVzZW50X3BhZ2VzIGFuZCBtYW5hZ2VkX3BhZ2VzIGJlY2F1c2UgdGhleSB3aWxsXFxubW0vbW1faW5pdC5jOjE1Nzg6XFx0ICogYmUgdXBkYXRlZCBpbiBvbmxpbmVfcGFnZXMoKSBhbmQgb2ZmbGluZV9wYWdlcygpLlxcbm1tL21tX2luaXQuYy0xNTc5LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0NzozNS4wMTY1Njk2OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzIyODMxMzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgTWVtb3J5IEhvdHBsdWcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cmFjaW5nIGl0cyBleGVjdXRpb24uIEl0IGxvb2tzIGxpa2UgYG9mZmxpbmVfcGFnZXNgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgY2FsbGVkIGZyb20gYG1lbW9yeV9ibG9ja19vZmZsaW5lYCBpbiB0aGUgbWVtb3J5IGRyaXZlcnMuIFRoYXQgcG9pbnRzIGRpcmVjdGx5IHRvIG1lbW9yeSBob3RwbHVnLiBNeSBpbW1lZGlhdGUgZm9jdXMgdGhlbiBnb2VzIHRvIHRoZXNlIGZ1bmN0aW9uczogYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgLCBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCwgYW5kIG9mIGNvdXJzZSwgYG9mZmxpbmVfcGFnZXNgIGl0c2VsZi5cblxuSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIHF1aWNrbHk6IElzIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIHN0YXRpYz8gWWVwLCBpdCBpcy4gQW5kIEkgc2VlIHRoYXQncyB0aGUgZnVuY3Rpb24gdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBtb2RpZnlpbmcuIEl0J3MgdGFyZ2V0aW5nIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgLiBBcHBhcmVudGx5LCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgd2VyZSBjYXVzaW5nIGBidWRkeV9vcmRlcmAgYW5kIGBjb21wb3VuZF9vcmRlcmAgdG8gcmV0dXJuIGJhZCB2YWx1ZXMuIFRoZSBzb2x1dGlvbiBoZXJlIGlzIHRvIHVzZSBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgYGNvbXBvdW5kX29yZGVyYCwgYnV0IHdpdGggYWRkZWQgdmFsaWRhdGlvbiB0byBwcmV2ZW50IGludmFsaWQgdmFsdWVzIGZyb20gYmVpbmcgdXNlZC4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIGZpeCDigJMgaXQgZGlyZWN0bHkgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGJ1Zywgd2hpY2ggaXMgYSBnb29kIHRoaW5nIHRvIGZpeC4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIGNoYW5nZSwgZnV6emluZyBpcyBkZWZpbml0ZWx5IGEgc21hcnQgbW92ZS5cblxuTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBzZWUgYENNQWAsIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSVNPTEFUSU9OYCwgYW5kIGBDT05USUdfQUxMT0NgLiBJIHNob3VsZCBtYWtlIHN1cmUgdGhhdCBgQ09OVElHX0FMTE9DYCBpcyBhIHZhbGlkIGNvbmZpZyBoZXJlLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDg5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQ3OjQwLjczOTQwNDg0M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1NTAyNDc0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ09OVElHX0FMTE9DXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NzA5PWNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbi0tXFxubW0vS2NvbmZpZy03MTgtXFxubW0vS2NvbmZpZzo3MTk6Y29uZmlnIENPTlRJR19BTExPQ1xcbm1tL0tjb25maWctNzIwLVxcdGRlZl9ib29sIChNRU1PUllfSVNPTEFUSU9OIFxcdTAwMjZcXHUwMDI2IENPTVBBQ1RJT04pIHx8IENNQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0Nzo0Mi45OTQ0MzM3OThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYxNDI1NjAwMTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYENPTlRJR19BTExPQ2AsIGBNRU1PUllfSVNPTEFUSU9OYCwgYE1FTU9SWV9IT1RQTFVHYCwgYW5kIGBDTUFgIGFyZSBhbGwgdmFsaWQgY29uZmlndXJhdGlvbnMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBmcmFtZXdvcmsuIFRoYXQncyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBOb3csIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUgY29yZSBhbGxvY2F0aW9uIG1lY2hhbmlzbXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIHNldHRpbmdzLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gZW5zdXJpbmcgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgIGlzIHRoZSByaWdodCBmdW5jdGlvbiBoZXJlLiBZZXMsIHRoYXQgbWFrZXMgc2Vuc2U7IGFzIHRoZSBuYW1lIHN1Z2dlc3RzLCBpdCdzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciByZXF1ZXN0aW5nIGNvbnRpZ3VvdXMgbWVtb3J5LiBUaGF0IGxvb2tzIHJpZ2h0LiBJIGFsc28gaGF2ZSB0byBrZWVwIGluIG1pbmQsIGFuZCB2ZXJpZnkgbGF0ZXIsIHRoYXQgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBwYWdlIGlzb2xhdGlvbi4gU2ltaWxhcmx5LCBgb2ZmbGluZV9wYWdlc2AgaXMgdGhlIGdvLXRvIGZ1bmN0aW9uIGZvciB0YWtpbmcgbWVtb3J5IG9mZmxpbmUuXG5cbk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uLCBhbmQgdGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZGlnIGRlZXBlcjogd2hhdCBvdGhlciBmdW5jdGlvbnMgY2FsbCBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYD8gS25vd2luZyBpdHMgY2FsbGVycyB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW50ZWdyYXRpb24gcG9pbnRzIGZvciBtZW1vcnkgaXNvbGF0aW9uLCBhbmQgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIHdpbGwgdWx0aW1hdGVseSBpbnRlcmFjdCBhbmQgaW1wYWN0IHRoZSBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3NDgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NTA6MjQuNDIwMDM2NzM2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTMyNDAxMDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmg9NjE9Ym9vbCBwYWdlYmxvY2tfdW5pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmgtNjItXFxuaW5jbHVkZS9saW51eC9wYWdlLWlzb2xhdGlvbi5oOjYzOmludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmgtNjQtXFx0XFx0XFx0ICAgICBlbnVtIHBiX2lzb2xhdGVfbW9kZSBtb2RlKTtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTkwMj1pbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTk2OC1cXHQvKiBzZXQgYWJvdmUgcmFuZ2UgYXMgaXNvbGF0ZWQgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE5Njk6XFx0cmV0ID0gc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHN0YXJ0X3BmbiwgZW5kX3BmbixcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5NzAtXFx0XFx0XFx0XFx0ICAgICAgIFBCX0lTT0xBVEVfTU9ERV9NRU1fT0ZGTElORSk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzEwOD1pbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzE0NC1cXHQgKiBoYXZlIGRpZmZlcmVudCBzaXplcywgYW5kIGR1ZSB0byB0aGUgd2F5IHBhZ2UgYWxsb2NhdG9yXFxubW0vcGFnZV9hbGxvYy5jOjcxNDU6XFx0ICogd29yaywgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKCkgaGFzIHNwZWNpYWwgaGFuZGxpbmdzIGZvciB0aGlzLlxcbm1tL3BhZ2VfYWxsb2MuYy03MTQ2LVxcdCAqXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzE2MS1cXG5tbS9wYWdlX2FsbG9jLmM6NzE2MjpcXHRyZXQgPSBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2Uoc3RhcnQsIGVuZCwgbW9kZSk7XFxubW0vcGFnZV9hbGxvYy5jLTcxNjMtXFx0aWYgKHJldClcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM9MzIwPXN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy00NzAtLyoqXFxubW0vcGFnZV9pc29sYXRpb24uYzo0NzE6ICogc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKCkgLSBtYXJrIHBhZ2UgcmFuZ2UgTUlHUkFURV9JU09MQVRFXFxubW0vcGFnZV9pc29sYXRpb24uYy00NzItICogQHN0YXJ0X3BmbjpcXHRcXHRUaGUgZmlyc3QgUEZOIG9mIHRoZSByYW5nZSB0byBiZSBpc29sYXRlZC5cXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTA1LSAqL1xcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTA2OmludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUwNy1cXHRcXHRcXHQgICAgIGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUpXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTU0OS0vKipcXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjU1MDogKiB1bmRvX2lzb2xhdGVfcGFnZV9yYW5nZSAtIHVuZG8gZWZmZWN0cyBvZiBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTUxLSAqIEBzdGFydF9wZm46XFx0XFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgaXNvbGF0ZWQgcmFuZ2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NTA6MjYuMzUyNDQ1MTk4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTY0MDIxNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gc3R1ZmYsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyB3ZSdyZSBkZWFsaW5nIHdpdGggY29udGlndW91cywgZnJvemVuIHJhbmdlcy4gRnJvbSB0aGUgY2FsbCB0cmFjZXMsIEkgY2FuIHNlZSB0aGF0IGBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZmAgYW5kIGBvZmZsaW5lX3BhZ2VzYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaW4gcGxheS4gYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgc28gdGhlc2Ugc2VlbSBsaWtlIHBvdGVudGlhbCBwb2ludHMgb2YgaW50ZXJlc3QgaW4gdGhpcyBhbmFseXNpcy4gXG5cblRoZXJlZm9yZSwgbXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIGFyb3VuZCBgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZmAsIGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgLCBhbmQgYG9mZmxpbmVfcGFnZXNgLlxuXG5TaW5jZSBJIGhhdmUgYWxyZWFkeSBhY2NvdW50ZWQgZm9yIHRoZSBmaXJzdCB0d28sIEkgd2lsbCBub3cgdmVyaWZ5IGBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZmAuIEkgdGhpbmsgdGhhdCB3aWxsIG9mZmVyIHRoZSBtb3N0IGluc2lnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODU3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjUwOjMwLjU2ODg1MDI5NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1MDc2NzUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2dmcC5oPTQ0Mz10eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdpc2UgYWNyX2ZsYWdzX3Q7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ0Ny0vKiBUaGUgYmVsb3cgZnVuY3Rpb25zIG11c3QgYmUgcnVuIG9uIGEgcmFuZ2UgZnJvbSBhIHNpbmdsZSB6b25lLiAqL1xcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDQ4OmludCBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ0OS1cXHRcXHRhY3JfZmxhZ3NfdCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDUwLSNkZWZpbmUgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZSguLi4pXFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDUxOlxcdGFsbG9jX2hvb2tzKGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1Mi1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03MDgwPXN0YXRpYyB2b2lkIF9fZnJlZV9jb250aWdfZnJvemVuX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTcxMDctICovXFxubW0vcGFnZV9hbGxvYy5jOjcxMDg6aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbm1tL3BhZ2VfYWxsb2MuYy03MTA5LVxcdFxcdGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MjQ1LX1cXG5tbS9wYWdlX2FsbG9jLmM6NzI0NjpFWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKTtcXG5tbS9wYWdlX2FsbG9jLmMtNzI0Ny1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03MjY1PWludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTcyNzItXFxubW0vcGFnZV9hbGxvYy5jOjcyNzM6XFx0cmV0ID0gYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2Yoc3RhcnQsIGVuZCwgYWxsb2NfZmxhZ3MsIGdmcF9tYXNrKTtcXG5tbS9wYWdlX2FsbG9jLmMtNzI3NC1cXHRpZiAoIXJldClcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03MzY0PXN0cnVjdCBwYWdlICphbGxvY19jb250aWdfZnJvemVuX3BhZ2VzX25vcHJvZih1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTczOTItXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2em9uZS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbm1tL3BhZ2VfYWxsb2MuYzo3MzkzOlxcdFxcdFxcdFxcdHJldCA9IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHBmbixcXG5tbS9wYWdlX2FsbG9jLmMtNzM5NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRwZm4gKyBucl9wYWdlcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NTA6MzIuNzE5NjIyNjE1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODU0ODEwMTc0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSwgYW5kIHRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBjcml0aWNhbCBpc3N1ZSBpbiBwYWdlIGlzb2xhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IG1ha2luZyBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBtb3JlIHJvYnVzdCBieSByaWdvcm91c2x5IGNoZWNraW5nIHRoZSBvcmRlciBvZiBidWRkeSBhbmQgY29tcG91bmQgcGFnZXMgKmJlZm9yZSogdXNpbmcgdGhlbS4gVGhlIGdvYWwgaXMgdG8gc2lkZXN0ZXAgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3IgaW52YWxpZCBtZW1vcnkgb3BlcmF0aW9ucyBkdXJpbmcgdGhpcyBpc29sYXRpb24gcHJvY2Vzcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIGhvdyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYmVoYXZlcyBpbiB0aGVzZSBzcGVjaWZpYyBzY2VuYXJpb3MsIHNvIGl0IHdhcnJhbnRzIHNlcmlvdXMgY29uc2lkZXJhdGlvbi5cblxuSeKAmW0gc2VlaW5nIGEgY291cGxlIG9mIGFyZWFzIHRvIGluY2x1ZGUgYXMgd2VsbCAtIGBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZmAgbWFrZXMgc2Vuc2UgdG8gaW5jbHVkZSB3aXRoIHRoZSBwcm9wb3NlZCBjaGFuZ2VzLlxuXG5HaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIHJhY2UgY29uZGl0aW9ucyBoZXJlLCBhbmQgdGhlIGNyaXRpY2FsIG5hdHVyZSBvZiBwYWdlIGlzb2xhdGlvbiwgZnV6emluZyB0aGlzIHBhdGNoIGlzIGFic29sdXRlbHkgd29ydGh3aGlsZS4gVGhlIHByb3Bvc2VkIGNoYW5nZXMgdG91Y2gga2V5IGZ1bmN0aW9ucywgYW5kIHNvIEkgc2hvdWxkIGluY2x1ZGUgdGhlIHN5bWJvbHMgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCwgYW5kIGBvZmZsaW5lX3BhZ2VzYCBmb3IgdGhvcm91Z2ggdGVzdGluZy5cblxuVGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLCBsaWtlIGBDTUFgLCBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0lTT0xBVElPTmAsIGFuZCBgQ09OVElHX0FMTE9DYCwgYXJlIGVudGlyZWx5IHJlbGV2YW50IHRvIHRoaXMgcGF0Y2gsIHNvIEknbGwgYmUgc3VyZSB0byBmYWN0b3IgdGhlbSBpbiBkdXJpbmcgdGVzdGluZyBhbmQgdmFsaWRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MTcsIk91dHB1dFRva2VucyI6MTU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjU2OjMxLjI2NzcyNzAwMloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNDc4MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDTUFcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJNRU1PUllfSVNPTEFUSU9OXCIsXG4gICAgXCJDT05USUdfQUxMT0NcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VcIixcbiAgICBcImFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZcIixcbiAgICBcImFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mXCIsXG4gICAgXCJvZmZsaW5lX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcmFjZSBjb25kaXRpb25zIGluIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGJ5IHZhbGlkYXRpbmcgdGhlIG9yZGVyIG9mIGJ1ZGR5IGFuZCBjb21wb3VuZCBwYWdlcyBiZWZvcmUgdXNpbmcgdGhlbS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgaW52YWxpZCBtZW1vcnkgb3BlcmF0aW9ucyBkdXJpbmcgcGFnZSBpc29sYXRpb24sIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNNQVwiLFxuICAgIFwiTUVNT1JZX0hPVFBMVUdcIixcbiAgICBcIk1FTU9SWV9JU09MQVRJT05cIixcbiAgICBcIkNPTlRJR19BTExPQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZVwiLFxuICAgIFwiYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZlwiLFxuICAgIFwiYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZcIixcbiAgICBcIm9mZmxpbmVfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgYnkgdmFsaWRhdGluZyB0aGUgb3JkZXIgb2YgYnVkZHkgYW5kIGNvbXBvdW5kIHBhZ2VzIGJlZm9yZSB1c2luZyB0aGVtLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciBpbnZhbGlkIG1lbW9yeSBvcGVyYXRpb25zIGR1cmluZyBwYWdlIGlzb2xhdGlvbiwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjU2OjMxLjM0MDIxMDQ2MVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYzNTY3Mzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjU2OjMxLjM0MDY0MTMyMVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NjM1MjM5MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgcmFjZSBjb25kaXRpb25zIHdoZW4gcmVhZGluZyBwYWdlIGJ1ZGR5IG9yZGVyIGFuZCBjb21wb3VuZCBvcmRlciBkdXJpbmcgcGFnZSBpc29sYXRpb24uIEl0IHJlcGxhY2VzIGBidWRkeV9vcmRlcigpYCB3aXRoIGBidWRkeV9vcmRlcl91bnNhZmUoKWAgYW5kIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBQRk4gaW5jcmVtZW50cyBvciBpbmZpbml0ZSBsb29wcyBjYXVzZWQgYnkgY29uY3VycmVudGx5IG1vZGlmaWVkIHBhZ2Ugc3RhdGVzLiBUaGVzZSBjaGFuZ2VzIG1pdGlnYXRlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgcmVseSBvbiB1bmluaXRpYWxpemVkIGZpZWxkcyBmb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDllYmZjZjEyZTAzMjY3NWQ4NzUxNTljNDIwYzFiNjE0ZjNjNjRmNzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMzo0NToxMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfaXNvbGF0aW9uLmMgYi9tbS9wYWdlX2lzb2xhdGlvbi5jXG5pbmRleCAzMmNlOGE3ZDlkZjM1Li5lY2E2ZmI3OGY3M2E4IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uY1xuKysrIGIvbW0vcGFnZV9pc29sYXRpb24uY1xuQEAgLTM4NywxMyArMzg3LDE5IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxuIFx0XHR9XG4gXG4gXHRcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcbi1cdFx0XHRpbnQgb3JkZXIgPSBidWRkeV9vcmRlcihwYWdlKTtcbitcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XG4gXG4tXHRcdFx0LyogcGFnZWJsb2NrX2lzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcygpIGhhbmRsZWQgdGhpcyAqL1xuLVx0XHRcdFZNX1dBUk5fT05fT05DRShwZm4gKyAoMSBcdTAwM2NcdTAwM2Mgb3JkZXIpIFx1MDAzZSBib3VuZGFyeV9wZm4pO1xuLVxuLVx0XHRcdHBmbiArPSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuLVx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdC8qIGJ1ZGR5X29yZGVyX3Vuc2FmZSgpIGlzIHJhY3kuIFZhbGlkYXRlIHRoZSBvcmRlciBiZWZvcmUgc2hpZnRpbmcuICovXG4rXHRcdFx0aWYgKG9yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogcGFnZWJsb2NrX2lzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcygpIHNwbGl0c1xuK1x0XHRcdFx0ICogY3Jvc3MtYm91bmRhcnkgUGFnZUJ1ZGR5LCB2ZXJpZnkgaXQuXG4rXHRcdFx0XHQgKi9cbitcdFx0XHQgICAgcGZuICsgKDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpIFx1MDAzYz0gYm91bmRhcnlfcGZuKSB7XG4rXHRcdFx0XHRwZm4gKz0gMVVMIFx1MDAzY1x1MDAzYyBvcmRlcjtcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdH1cbitcdFx0XHRnb3RvIGZhaWxlZDtcbiBcdFx0fVxuIFxuIFx0XHQvKlxuQEAgLTQxMiwxMCArNDE4LDI4IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxuIFx0XHRpZiAoUGFnZUNvbXBvdW5kKHBhZ2UpKSB7XG4gXHRcdFx0c3RydWN0IHBhZ2UgKmhlYWQgPSBjb21wb3VuZF9oZWFkKHBhZ2UpO1xuIFx0XHRcdHVuc2lnbmVkIGxvbmcgaGVhZF9wZm4gPSBwYWdlX3RvX3BmbihoZWFkKTtcbi1cdFx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gY29tcG91bmRfbnIoaGVhZCk7XG4rXHRcdFx0dW5zaWduZWQgaW50IG9yZGVyID0gY29tcG91bmRfb3JkZXIoaGVhZCk7XG4rXHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcbitcbitcdFx0XHQvKiBjb21wb3VuZF9vcmRlcigpIGlzIHJhY3kuIENhcCBpdCBhdCBNQVhfRk9MSU9fT1JERVIuICovXG4rXHRcdFx0aWYgKG9yZGVyIFx1MDAzZSBNQVhfRk9MSU9fT1JERVIpXG4rXHRcdFx0XHRnb3RvIGZhaWxlZDtcbitcbitcdFx0XHRucl9wYWdlcyA9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4rXG4rXHRcdFx0LypcbitcdFx0XHQgKiBjb21wb3VuZF9oZWFkKCkgaXMgYWxzbyByYWN5LCBzbyB0aGUgZGVyaXZlZCBoZWFkX3BmblxuK1x0XHRcdCAqIG5lZWRzIGFkZGl0aW9uYWwgY2hlY2tzIHRvIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZC5cbitcdFx0XHQgKiBPdGhlcndpc2UsIGp1c3QgZmFpbCB0aGUgY2hlY2suIHBmbiBjb21lcyBmcm9tXG4rXHRcdFx0ICogX19maXJzdF92YWxpZF9wYWdlKCkgYXMgYSBsZWdpdGltYXRlIFBGTiwgc28gdXNlIGl0IHRvXG4rXHRcdFx0ICogY2hlY2sgaGVhZF9wZm4uXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKGhlYWRfcGZuIFx1MDAzZSBwZm4gfHwgIUlTX0FMSUdORUQoaGVhZF9wZm4sIG5yX3BhZ2VzKSB8fFxuK1x0XHRcdCAgICBwZm4gLSBoZWFkX3BmbiBcdTAwM2U9IG5yX3BhZ2VzKVxuK1x0XHRcdFx0Z290byBmYWlsZWQ7XG4gXG4gXHRcdFx0aWYgKGhlYWRfcGZuICsgbnJfcGFnZXMgXHUwMDNjPSBib3VuZGFyeV9wZm4gfHxcbi1cdFx0XHQgICAgUGFnZUh1Z2UocGFnZSkpIHtcbitcdFx0XHQgICAgUGFnZUh1Z2UoaGVhZCkpIHtcbiBcdFx0XHRcdHBmbiA9IGhlYWRfcGZuICsgbnJfcGFnZXM7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo1NjozMS4zNDA2NDE5ODFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTYzNTIxNjE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHRvdWNoaW5nIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIHdpdGhpbiBgbW0vcGFnZV9pc29sYXRpb24uY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgc3dpdGNoaW5nIGZyb20gYGJ1ZGR5X29yZGVyKHBhZ2UpYCB0byBgYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpYCBhbmQgc2ltaWxhcmx5LCByZXBsYWNpbmcgYGNvbXBvdW5kX25yKGhlYWQpYCB3aXRoIGBjb21wb3VuZF9vcmRlcihoZWFkKWAuIEl0J3MgYWxzbyBtYWtpbmcgc29tZSByZWxhdGVkIHZhbGlkYXRpb24gY2hhbmdlcyBhbmQgcmVwbGFjaW5nIGBQYWdlSHVnZShwYWdlKWAgd2l0aCBgUGFnZUh1Z2UoaGVhZClgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgbGlrZWx5IGFib3V0IGFkZHJlc3NpbmcgcG90ZW50aWFsIGRhdGEgcmFjZXMgd2hlbiByZWFkaW5nIHRoZSBidWRkeSBvciBjb21wb3VuZCBvcmRlciwgcmlnaHQ/IFRoZXNlIGNoYW5nZXMgYXJlIGd1YXJkaW5nIGFnYWluc3QgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3IgZXZlbiBpbmZpbml0ZSBsb29wcywgc3BlY2lmaWNhbGx5IGlmIHRoZSBvcmRlciB2YWx1ZSBiZWluZyByZWFkIGlzIGluY29ycmVjdC5cblxuVGhlIHBhdGNoICpzaG91bGRuJ3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMuIE15IHVuZGVyc3RhbmRpbmcgb2YgS01TQU4gaXMgdGhhdCBpdCdzIGRlc2lnbmVkIHRvIGZsYWcgYWNjZXNzZXMgdG8gbWVtb3J5IHRoYXQgaGFzbid0IGJlZW4gaW5pdGlhbGl6ZWQuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiB3b3VsZCBiZSB0aGUgYXBwcm9wcmlhdGUgdG9vbCBmb3IgY2F0Y2hpbmcgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBzdGVtbWluZyBmcm9tIGludmFsaWQgYWRkcmVzc2VzIG9yIG90aGVyIGdlbmVyYWwgbWVtb3J5IGVycm9ycy5cblxuSG9sZCBvbiwgSSBuZWVkIHRvIGJlIHByZWNpc2UuIFRoZSBjb3JlIGlzc3VlIGhlcmUgaXNuJ3QgdGhlIG1lbW9yeSBpdHNlbGYgYmVpbmcgdW5pbml0aWFsaXplZC4gVGhlIGlzc3VlIGlzIHRoYXQgdGhlIG9yZGVyIHZhbHVlcyAoZnJvbSBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgYGNvbXBvdW5kX29yZGVyYCkgY291bGQgYmUgcmVhZCBjb25jdXJyZW50bHkgd2l0aCBjaGFuZ2VzLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGluY29ycmVjdCB2YWx1ZXMuIFRoZSBwYWdlIHN0cnVjdHVyZXMgdGhlbXNlbHZlcyAqYXJlKiBpbml0aWFsaXplZCwgdGhlIHByb2JsZW0gaXMgd2UncmUgcmVhZGluZyB0aGVtIGR1cmluZyBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMuIFRoaXMgY291bGQgY2F1c2UgaW5jb3JyZWN0IG9yZGVyIGNhbGN1bGF0aW9ucyB3aGljaCBjYW4gbGVhZCB0byBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MuIFRoaXMgaXMgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IHByb2JsZW0sIGEgZGF0YSByYWNlLCBvciBwb3RlbnRpYWxseSBvdXQtb2YtYm91bmRzIHJlYWRzIGR1ZSB0byBpbnZhbGlkIG9yZGVyIHZhbHVlcy4gVGhpcyBzdGlsbCBpc24ndCBLTVNBTidzIGRvbWFpbi5cblxuU28sIHRoaXMgbG9va3MgdG8gYmUgYSBjb25jdXJyZW5jeSBpc3N1ZSBhbmQvb3Igb3V0LW9mLWJvdW5kcyByZWFkLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIEtNU0FOLCB3aXRoIGl0cyBmb2N1cyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGlzIHRoZSB3cm9uZyB0b29sIGZvciB0aGlzLlxuXG5MZXQncyBkbyBhIHF1aWNrIG1lbnRhbCBydW4gdGhyb3VnaCB0byBzb2xpZGlmeSB0aGlzLiBUaGUgcGF0Y2ggaXMgYWRkaW5nIGNoZWNrcyB0byB2YWxpZGF0ZSB0aGUgYG9yZGVyYCBhbmQgYGhlYWRfcGZuYCB0byBwcmV2ZW50LCBmb3IgZXhhbXBsZSwgaW52YWxpZCBgcGZuYCBpbmNyZW1lbnRzIGFuZCBwb3RlbnRpYWwgaW5maW5pdGUgbG9vcHMuIEl0J3MgZXNzZW50aWFsbHkgYWRkaW5nIGd1YXJkcmFpbHMgdG8gdGhlIGV4aXN0aW5nIGxvZ2ljLiBBZ2FpbiwgdGhpcyBkb2Vzbid0IHRvdWNoIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGVyZWZvcmUsIG15IGZpbmFsIGFzc2Vzc21lbnQgaXMgKipOZWVkc0tNU0FOPWZhbHNlKiouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MDksIk91dHB1dFRva2VucyI6MTQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NTY6NDAuOTc1ODYwNzcxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgcmFjZSBjb25kaXRpb25zIHdoZW4gcmVhZGluZyBwYWdlIGJ1ZGR5IG9yZGVyIGFuZCBjb21wb3VuZCBvcmRlciBkdXJpbmcgcGFnZSBpc29sYXRpb24uIEl0IHJlcGxhY2VzIGBidWRkeV9vcmRlcigpYCB3aXRoIGBidWRkeV9vcmRlcl91bnNhZmUoKWAgYW5kIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBQRk4gaW5jcmVtZW50cyBvciBpbmZpbml0ZSBsb29wcyBjYXVzZWQgYnkgY29uY3VycmVudGx5IG1vZGlmaWVkIHBhZ2Ugc3RhdGVzLiBUaGVzZSBjaGFuZ2VzIG1pdGlnYXRlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgcmVseSBvbiB1bmluaXRpYWxpemVkIGZpZWxkcyBmb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgd2hlbiByZWFkaW5nIHBhZ2UgYnVkZHkgb3JkZXIgYW5kIGNvbXBvdW5kIG9yZGVyIGR1cmluZyBwYWdlIGlzb2xhdGlvbi4gSXQgcmVwbGFjZXMgYGJ1ZGR5X29yZGVyKClgIHdpdGggYGJ1ZGR5X29yZGVyX3Vuc2FmZSgpYCBhbmQgYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIFBGTiBpbmNyZW1lbnRzIG9yIGluZmluaXRlIGxvb3BzIGNhdXNlZCBieSBjb25jdXJyZW50bHkgbW9kaWZpZWQgcGFnZSBzdGF0ZXMuIFRoZXNlIGNoYW5nZXMgbWl0aWdhdGUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgbG9naWMgZXJyb3JzLCB3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBvciByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGZvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7r6vv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 13:01:53 +0000 UTC FinishedAt: 2026-08-25 13:56:42 +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": "8a9091052cc81caa5570835049c809da804baa3f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CMA", "MEMORY_HOTPLUG", "MEMORY_ISOLATION", "CONTIG_ALLOC" ], "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": "8a9091052cc81caa5570835049c809da804baa3f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CMA", "MEMORY_HOTPLUG", "MEMORY_ISOLATION", "CONTIG_ALLOC" ], "series_id": "2b180ee5-48d5-4336-9c6d-05b99e20e8a4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "start_isolate_page_range", "alloc_contig_range_noprof", "alloc_contig_frozen_range_noprof", "offline_pages" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7TUVNT1JZX0lTT0xBVElPTiYjMzQ7LAogICAgJiMzNDtDT05USUdfQUxMT0MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7YWxsb2NfY29udGlnX3JhbmdlX25vcHJvZiYjMzQ7LAogICAgJiMzNDthbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZiYjMzQ7LAogICAgJiMzNDtvZmZsaW5lX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyB3aGVuIHJlYWRpbmcgcGFnZSBidWRkeSBvcmRlciBhbmQgY29tcG91bmQgb3JkZXIgZHVyaW5nIHBhZ2UgaXNvbGF0aW9uLiBJdCByZXBsYWNlcyBgYnVkZHlfb3JkZXIoKWAgd2l0aCBgYnVkZHlfb3JkZXJfdW5zYWZlKClgIGFuZCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgUEZOIGluY3JlbWVudHMgb3IgaW5maW5pdGUgbG9vcHMgY2F1c2VkIGJ5IGNvbmN1cnJlbnRseSBtb2RpZmllZCBwYWdlIHN0YXRlcy4gVGhlc2UgY2hhbmdlcyBtaXRpZ2F0ZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHJlbHkgb24gdW5pbml0aWFsaXplZCBmaWVsZHMgZm9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcmFjZSBjb25kaXRpb25zIGluIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGJ5IHZhbGlkYXRpbmcgdGhlIG9yZGVyIG9mIGJ1ZGR5IGFuZCBjb21wb3VuZCBwYWdlcyBiZWZvcmUgdXNpbmcgdGhlbS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgaW52YWxpZCBtZW1vcnkgb3BlcmF0aW9ucyBkdXJpbmcgcGFnZSBpc29sYXRpb24sIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWViZmNmMTJlMDMyNjc1ZDg3NTE1OWM0MjBjMWI2MTRmM2M2NGY3MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDEzOjQ1OjExIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfaXNvbGF0aW9uLmMgYi9tbS9wYWdlX2lzb2xhdGlvbi5jXG5pbmRleCAzMmNlOGE3ZDlkZjM1Li5lY2E2ZmI3OGY3M2E4IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9pc29sYXRpb24uY1xuQEAgLTM4NywxMyAmIzQzOzM4NywxOSBAQCBzdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3BmbixcbiBcdFx0fVxuIFxuIFx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0aW50IG9yZGVyID0gYnVkZHlfb3JkZXIocGFnZSk7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludCBvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbiBcbi1cdFx0XHQvKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgaGFuZGxlZCB0aGlzICovXG4tXHRcdFx0Vk1fV0FSTl9PTl9PTkNFKHBmbiAmIzQzOyAoMSBcdTAwM2NcdTAwM2Mgb3JkZXIpIFx1MDAzZSBib3VuZGFyeV9wZm4pO1xuLVxuLVx0XHRcdHBmbiAmIzQzOz0gMVVMIFx1MDAzY1x1MDAzYyBvcmRlcjtcbi1cdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0LyogYnVkZHlfb3JkZXJfdW5zYWZlKCkgaXMgcmFjeS4gVmFsaWRhdGUgdGhlIG9yZGVyIGJlZm9yZSBzaGlmdGluZy4gKi9cbiYjNDM7XHRcdFx0aWYgKG9yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0LypcbiYjNDM7XHRcdFx0XHQgKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgc3BsaXRzXG4mIzQzO1x0XHRcdFx0ICogY3Jvc3MtYm91bmRhcnkgUGFnZUJ1ZGR5LCB2ZXJpZnkgaXQuXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0XHRcdCAgICBwZm4gJiM0MzsgKDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpIFx1MDAzYz0gYm91bmRhcnlfcGZuKSB7XG4mIzQzO1x0XHRcdFx0cGZuICYjNDM7PSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGdvdG8gZmFpbGVkO1xuIFx0XHR9XG4gXG4gXHRcdC8qXG5AQCAtNDEyLDEwICYjNDM7NDE4LDI4IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxuIFx0XHRpZiAoUGFnZUNvbXBvdW5kKHBhZ2UpKSB7XG4gXHRcdFx0c3RydWN0IHBhZ2UgKmhlYWQgPSBjb21wb3VuZF9oZWFkKHBhZ2UpO1xuIFx0XHRcdHVuc2lnbmVkIGxvbmcgaGVhZF9wZm4gPSBwYWdlX3RvX3BmbihoZWFkKTtcbi1cdFx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gY29tcG91bmRfbnIoaGVhZCk7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludCBvcmRlciA9IGNvbXBvdW5kX29yZGVyKGhlYWQpO1xuJiM0MztcdFx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogY29tcG91bmRfb3JkZXIoKSBpcyByYWN5LiBDYXAgaXQgYXQgTUFYX0ZPTElPX09SREVSLiAqL1xuJiM0MztcdFx0XHRpZiAob3JkZXIgXHUwMDNlIE1BWF9GT0xJT19PUkRFUilcbiYjNDM7XHRcdFx0XHRnb3RvIGZhaWxlZDtcbiYjNDM7XG4mIzQzO1x0XHRcdG5yX3BhZ2VzID0gMVVMIFx1MDAzY1x1MDAzYyBvcmRlcjtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIGNvbXBvdW5kX2hlYWQoKSBpcyBhbHNvIHJhY3ksIHNvIHRoZSBkZXJpdmVkIGhlYWRfcGZuXG4mIzQzO1x0XHRcdCAqIG5lZWRzIGFkZGl0aW9uYWwgY2hlY2tzIHRvIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZC5cbiYjNDM7XHRcdFx0ICogT3RoZXJ3aXNlLCBqdXN0IGZhaWwgdGhlIGNoZWNrLiBwZm4gY29tZXMgZnJvbVxuJiM0MztcdFx0XHQgKiBfX2ZpcnN0X3ZhbGlkX3BhZ2UoKSBhcyBhIGxlZ2l0aW1hdGUgUEZOLCBzbyB1c2UgaXQgdG9cbiYjNDM7XHRcdFx0ICogY2hlY2sgaGVhZF9wZm4uXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoaGVhZF9wZm4gXHUwMDNlIHBmbiB8fCAhSVNfQUxJR05FRChoZWFkX3BmbiwgbnJfcGFnZXMpIHx8XG4mIzQzO1x0XHRcdCAgICBwZm4gLSBoZWFkX3BmbiBcdTAwM2U9IG5yX3BhZ2VzKVxuJiM0MztcdFx0XHRcdGdvdG8gZmFpbGVkO1xuIFxuIFx0XHRcdGlmIChoZWFkX3BmbiAmIzQzOyBucl9wYWdlcyBcdTAwM2M9IGJvdW5kYXJ5X3BmbiB8fFxuLVx0XHRcdCAgICBQYWdlSHVnZShwYWdlKSkge1xuJiM0MztcdFx0XHQgICAgUGFnZUh1Z2UoaGVhZCkpIHtcbiBcdFx0XHRcdHBmbiA9IGhlYWRfcGZuICYjNDM7IG5yX3BhZ2VzO1xuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjExbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9JU09MQVRJT04mIzM0OywKICAgICYjMzQ7Q09OVElHX0FMTE9DJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlJiMzNDssCiAgICAmIzM0O2FsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YmIzM0OywKICAgICYjMzQ7b2ZmbGluZV9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgYnkgdmFsaWRhdGluZyB0aGUgb3JkZXIgb2YgYnVkZHkgYW5kIGNvbXBvdW5kIHBhZ2VzIGJlZm9yZSB1c2luZyB0aGVtLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciBpbnZhbGlkIG1lbW9yeSBvcGVyYXRpb25zIGR1cmluZyBwYWdlIGlzb2xhdGlvbiwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZWJmY2YxMmUwMzI2NzVkODc1MTU5YzQyMGMxYjYxNGYzYzY0ZjcwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMTM6NDU6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9wYWdlX2lzb2xhdGlvbi5jIGIvbW0vcGFnZV9pc29sYXRpb24uYwppbmRleCAzMmNlOGE3ZDlkZjM1Li5lY2E2ZmI3OGY3M2E4IDEwMDY0NAotLS0gYS9tbS9wYWdlX2lzb2xhdGlvbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfaXNvbGF0aW9uLmMKQEAgLTM4NywxMyAmIzQzOzM4NywxOSBAQCBzdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3BmbiwKIAkJfQogCiAJCWlmIChQYWdlQnVkZHkocGFnZSkpIHsKLQkJCWludCBvcmRlciA9IGJ1ZGR5X29yZGVyKHBhZ2UpOwomIzQzOwkJCXVuc2lnbmVkIGludCBvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTsKIAotCQkJLyogcGFnZWJsb2NrX2lzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcygpIGhhbmRsZWQgdGhpcyAqLwotCQkJVk1fV0FSTl9PTl9PTkNFKHBmbiAmIzQzOyAoMSAmbHQ7Jmx0OyBvcmRlcikgJmd0OyBib3VuZGFyeV9wZm4pOwotCi0JCQlwZm4gJiM0Mzs9IDFVTCAmbHQ7Jmx0OyBvcmRlcjsKLQkJCWNvbnRpbnVlOwomIzQzOwkJCS8qIGJ1ZGR5X29yZGVyX3Vuc2FmZSgpIGlzIHJhY3kuIFZhbGlkYXRlIHRoZSBvcmRlciBiZWZvcmUgc2hpZnRpbmcuICovCiYjNDM7CQkJaWYgKG9yZGVyICZsdDs9IE1BWF9QQUdFX09SREVSICZhbXA7JmFtcDsKJiM0MzsJCQkJLyoKJiM0MzsJCQkJICogcGFnZWJsb2NrX2lzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcygpIHNwbGl0cwomIzQzOwkJCQkgKiBjcm9zcy1ib3VuZGFyeSBQYWdlQnVkZHksIHZlcmlmeSBpdC4KJiM0MzsJCQkJICovCiYjNDM7CQkJICAgIHBmbiAmIzQzOyAoMVVMICZsdDsmbHQ7IG9yZGVyKSAmbHQ7PSBib3VuZGFyeV9wZm4pIHsKJiM0MzsJCQkJcGZuICYjNDM7PSAxVUwgJmx0OyZsdDsgb3JkZXI7CiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KJiM0MzsJCQlnb3RvIGZhaWxlZDsKIAkJfQogCiAJCS8qCkBAIC00MTIsMTAgJiM0Mzs0MTgsMjggQEAgc3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sCiAJCWlmIChQYWdlQ29tcG91bmQocGFnZSkpIHsKIAkJCXN0cnVjdCBwYWdlICpoZWFkID0gY29tcG91bmRfaGVhZChwYWdlKTsKIAkJCXVuc2lnbmVkIGxvbmcgaGVhZF9wZm4gPSBwYWdlX3RvX3BmbihoZWFkKTsKLQkJCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBjb21wb3VuZF9ucihoZWFkKTsKJiM0MzsJCQl1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wb3VuZF9vcmRlcihoZWFkKTsKJiM0MzsJCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOwomIzQzOwomIzQzOwkJCS8qIGNvbXBvdW5kX29yZGVyKCkgaXMgcmFjeS4gQ2FwIGl0IGF0IE1BWF9GT0xJT19PUkRFUi4gKi8KJiM0MzsJCQlpZiAob3JkZXIgJmd0OyBNQVhfRk9MSU9fT1JERVIpCiYjNDM7CQkJCWdvdG8gZmFpbGVkOwomIzQzOwomIzQzOwkJCW5yX3BhZ2VzID0gMVVMICZsdDsmbHQ7IG9yZGVyOwomIzQzOwomIzQzOwkJCS8qCiYjNDM7CQkJICogY29tcG91bmRfaGVhZCgpIGlzIGFsc28gcmFjeSwgc28gdGhlIGRlcml2ZWQgaGVhZF9wZm4KJiM0MzsJCQkgKiBuZWVkcyBhZGRpdGlvbmFsIGNoZWNrcyB0byBtYWtlIHN1cmUgaXQgaXMgdmFsaWQuCiYjNDM7CQkJICogT3RoZXJ3aXNlLCBqdXN0IGZhaWwgdGhlIGNoZWNrLiBwZm4gY29tZXMgZnJvbQomIzQzOwkJCSAqIF9fZmlyc3RfdmFsaWRfcGFnZSgpIGFzIGEgbGVnaXRpbWF0ZSBQRk4sIHNvIHVzZSBpdCB0bwomIzQzOwkJCSAqIGNoZWNrIGhlYWRfcGZuLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChoZWFkX3BmbiAmZ3Q7IHBmbiB8fCAhSVNfQUxJR05FRChoZWFkX3BmbiwgbnJfcGFnZXMpIHx8CiYjNDM7CQkJICAgIHBmbiAtIGhlYWRfcGZuICZndDs9IG5yX3BhZ2VzKQomIzQzOwkJCQlnb3RvIGZhaWxlZDsKIAogCQkJaWYgKGhlYWRfcGZuICYjNDM7IG5yX3BhZ2VzICZsdDs9IGJvdW5kYXJ5X3BmbiB8fAotCQkJICAgIFBhZ2VIdWdlKHBhZ2UpKSB7CiYjNDM7CQkJICAgIFBhZ2VIdWdlKGhlYWQpKSB7CiAJCQkJcGZuID0gaGVhZF9wZm4gJiM0MzsgbnJfcGFnZXM7CiAJCQkJY29udGludWU7CiAJCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYWdlIElzb2xhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL3BhZ2VfaXNvbGF0aW9uLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZXkmIzM5O3ZlIG1hZGUgc29tZSBjaGFuZ2VzIHRvIGhvdyB3ZSBoYW5kbGUgYGJ1ZGR5X29yZGVyYCBhbmQgYGNvbXBvdW5kX29yZGVyYCBoZXJlLiBJbnN0ZWFkIG9mIGp1c3QgdXNpbmcgYGJ1ZGR5X29yZGVyYCBkaXJlY3RseSwgd2hpY2ggaXMgc29tZXRpbWVzIHJpc2t5LCB0aGV5JiMzOTt2ZSBpbnRyb2R1Y2VkIGEgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIGFkZGVkIHZhbGlkYXRpb24gYXJvdW5kIHRoZSBvcmRlci4gVGhhdCYjMzk7cyBhIGdvb2QgbW92ZSwgZ2VuZXJhbGx5LCBzYWZldHkgaXMgcGFyYW1vdW50LCBwYXJ0aWN1bGFybHkgaW4gbWVtb3J5IG1hbmFnZW1lbnQuCgpUaGV5JiMzOTt2ZSBhbHNvIGFkZGVkIHZhbGlkYXRpb24gZm9yIHRoZSBgY29tcG91bmRfb3JkZXJgIGFuZCBgY29tcG91bmRfaGVhZGAsIHdoaWNoIEkmIzM5O20gZ2xhZCB0byBzZWUuIEl0JiMzOTtzIGVhc3kgdG8gbWFrZSBhIG1pc3Rha2UgdGhlcmUgYW5kIGludHJvZHVjZSBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBDbGVhcmx5IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBkZWVwIHdpdGhpbiB0aGUgcGFnZSBpc29sYXRpb24gc3Vic3lzdGVtLiBUaGlzIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIG9mIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGhvdHBsdWcsIENNQSwgYW5kIGh1Z2VwYWdlIGFsbG9jYXRpb25zIOKAkyBhbGwgb2Ygd2hpY2ggcmVseSBoZWF2aWx5IG9uIHRoaXMgbWVjaGFuaXNtLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIHRvIHVuZGVyc3RhbmQgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiB0aGVzZSBhZGRlZCBjaGVja3MuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGlzIGRvZXNuJiMzOTt0IGNyZWF0ZSBhbnkgbmV3IHJhY2UgY29uZGl0aW9ucy4gR290dGEgY2hlY2sgaG93IHRoaXMgYWZmZWN0cyB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgaW5mcmFzdHJ1Y3R1cmUsIHBhcnRpY3VsYXJseSBkdXJpbmcgY29uY3VycmVudCBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2lzb2xhdGlvbi5jPTI4Mz1fX2ZpcnN0X3ZhbGlkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy0yOTgtLyoqXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjI5OTogKiBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2soKSAtLSB0cmllcyB0byBpc29sYXRlIGEgcGFnZWJsb2NrIHRoYXQgbWlnaHQgYmVcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzAwLSAqIHdpdGhpbiBhIGZyZWUgb3IgaW4tdXNlIHBhZ2UuXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy0zMDQtICogQHNraXBfaXNvbGF0aW9uOlx0dGhlIGZsYWcgdG8gc2tpcCB0aGUgcGFnZWJsb2NrIGlzb2xhdGlvbiBpbiBzZWNvbmRcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6MzA1OiAqXHRcdFx0aXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKClcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzA2LSAqXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy0zMTktICovXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjMyMDpzdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3Bmbixcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzIxLVx0XHRcdGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUsIGJvb2wgaXNvbGF0ZV9iZWZvcmUsXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYz01MDY9aW50IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTE3LVx0LyogaXNvbGF0ZSBbaXNvbGF0ZV9zdGFydCwgaXNvbGF0ZV9zdGFydCAmIzQzOyBwYWdlYmxvY2tfbnJfcGFnZXMpIHBhZ2VibG9jayAqL1xubW0vcGFnZV9pc29sYXRpb24uYzo1MTg6XHRyZXQgPSBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2soaXNvbGF0ZV9zdGFydCwgbW9kZSwgZmFsc2UsXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUxOS1cdFx0XHRza2lwX2lzb2xhdGlvbik7XG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy01MjYtXHQvKiBpc29sYXRlIFtpc29sYXRlX2VuZCAtIHBhZ2VibG9ja19ucl9wYWdlcywgaXNvbGF0ZV9lbmQpIHBhZ2VibG9jayAqL1xubW0vcGFnZV9pc29sYXRpb24uYzo1Mjc6XHRyZXQgPSBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2soaXNvbGF0ZV9lbmQsIG1vZGUsIHRydWUsIHNraXBfaXNvbGF0aW9uKTtcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTI4LVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MDYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBDb2RlJiMzOTtzIExvZ2ljKioKCkFscmlnaHQsIHNvIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGlzIGtleSwgYW5kIGl0JiMzOTtzIGJlaW5nIGtpY2tlZCBvZmYgYnkgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAuIE1ha2VzIHNlbnNlLCB0aGV5JiMzOTtyZSBwcm9iYWJseSByZWxhdGVkIGluIGEgcGFnZSBpc29sYXRpb24gcHJvY2Vzcy4gTm93LCBJIG5lZWQgdG8gc2VlIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIGtub3cgKndoZXJlKiBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCBpcyBiZWluZyBjYWxsZWQuIFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgbmV4dCBzdGVwLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0cyBhbmQgd2hvIGlzIGdpdmluZyB0aGUgb3JkZXIgdG8gc3RhcnQgdGhlIHJhbmdlLWlzb2xhdGlvbiB3aWxsIGdpdmUgbWUgaW1wb3J0YW50IGluc2lnaHQgaW50byB0aGUgb3ZlcmFsbCBmdW5jdGlvbmFsaXR5LiBMZXQmIzM5O3MgdHJhY2UgYmFjayBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmg9NjE9Ym9vbCBwYWdlYmxvY2tfdW5pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlKTtcbmluY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaC02Mi1cbmluY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaDo2MzppbnQgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmgtNjQtXHRcdFx0ICAgICBlbnVtIHBiX2lzb2xhdGVfbW9kZSBtb2RlKTtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5MDI9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTY4LVx0Lyogc2V0IGFib3ZlIHJhbmdlIGFzIGlzb2xhdGVkICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE5Njk6XHRyZXQgPSBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2Uoc3RhcnRfcGZuLCBlbmRfcGZuLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTcwLVx0XHRcdFx0ICAgICAgIFBCX0lTT0xBVEVfTU9ERV9NRU1fT0ZGTElORSk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTcxMDg9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MTQ0LVx0ICogaGF2ZSBkaWZmZXJlbnQgc2l6ZXMsIGFuZCBkdWUgdG8gdGhlIHdheSBwYWdlIGFsbG9jYXRvclxubW0vcGFnZV9hbGxvYy5jOjcxNDU6XHQgKiB3b3JrLCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKSBoYXMgc3BlY2lhbCBoYW5kbGluZ3MgZm9yIHRoaXMuXG5tbS9wYWdlX2FsbG9jLmMtNzE0Ni1cdCAqXG4tLVxubW0vcGFnZV9hbGxvYy5jLTcxNjEtXG5tbS9wYWdlX2FsbG9jLmM6NzE2MjpcdHJldCA9IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZShzdGFydCwgZW5kLCBtb2RlKTtcbm1tL3BhZ2VfYWxsb2MuYy03MTYzLVx0aWYgKHJldClcbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jPTMyMD1zdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3Bmbixcbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ3MC0vKipcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NDcxOiAqIHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSgpIC0gbWFyayBwYWdlIHJhbmdlIE1JR1JBVEVfSVNPTEFURVxubW0vcGFnZV9pc29sYXRpb24uYy00NzItICogQHN0YXJ0X3BmbjpcdFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgcmFuZ2UgdG8gYmUgaXNvbGF0ZWQuXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy01MDUtICovXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjUwNjppbnQgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUwNy1cdFx0XHQgICAgIGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUpXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy01NDktLyoqXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjU1MDogKiB1bmRvX2lzb2xhdGVfcGFnZV9yYW5nZSAtIHVuZG8gZWZmZWN0cyBvZiBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKVxubW0vcGFnZV9pc29sYXRpb24uYy01NTEtICogQHN0YXJ0X3BmbjpcdFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgaXNvbGF0ZWQgcmFuZ2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzE0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKlRyYWNpbmcgdGhlIEFsbG9jYXRpb24gQ2hhaW4qKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgYmVpbmcgY2FsbGVkLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoZXJlKiBpdCYjMzk7cyBjb21pbmcgZnJvbS4gSXQgbG9va3MgbGlrZSBib3RoIGBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZmAgKGFuZCwgbW9yZSBsaWtlbHksIGBhbGxvY19jb250aWdfcmFuZ2VgIGl0c2VsZikgYW5kIGBvZmZsaW5lX3BhZ2VzYCBhcmUgdGhlIGN1bHByaXRzLiBIbW1tLCBnb3R0YSBmb2xsb3cgdGhlIGJyZWFkY3J1bWJzLiBTaW5jZSBgYWxsb2NfY29udGlnX3JhbmdlYCBzZWVtcyB0byBiZSB0aGUgbW9yZSBnZW5lcmFsIGFsbG9jYXRvciBoZXJlLCBsZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvICp0aGF0KiByb3V0aW5lLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGFjdGlvbiBpcyBwcm9iYWJseS4gSSYjMzk7bGwgZm9jdXMgb24gd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZSwgYW5kIHNlZSBpZiBpdCBnaXZlcyBtb3JlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfY29udGlnX3JhbmdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0PTM5MD1zY2VuYXJpb3M6IG1lbW9yeSBvZmZsaW5lLCBtZW1vcnkgZmFpbHVyZSwgbG9uZ3Rlcm0gcGlubmluZywgc3lzY2FsbHMobWJpbmQsXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdDozOTE6bWlncmF0ZV9wYWdlcyBhbmQgbW92ZV9wYWdlcyksIGFsbG9jX2NvbnRpZ19yYW5nZSgpIGFuZCBhbGxvY19jb250aWdfcGFnZXMoKS5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0LTM5Mi1Ob3cgb25seSBtZW1vcnkgb2ZmbGluZSwgbWVtb3J5IGZhaWx1cmUgYW5kIHN5c2NhbGxzIGFsbG93IGZhbGxiYWNraW5nIHRvIGFsbG9jYXRlXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jPTExODc9c3RhdGljIHZvaWQgdmlydGlvX21lbV9mYWtlX29ubGluZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTIwNS1cdFx0ICogb25saW5pbmcgdGhlIG1lbW9yeSBibG9jay4gT3RoZXJ3aXNlLCBpdCB3YXMgYWxsb2NhdGVkXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6MTIwNjpcdFx0ICogdXNpbmcgYWxsb2NfY29udGlnX3JhbmdlKCkuIEFsbCBwYWdlcyBpbiBhIHN1YmJsb2NrIGFyZVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTEyMDctXHRcdCAqIGFsaWtlLlxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYz0xMjI0PXN0YXRpYyBpbnQgdmlydGlvX21lbV9mYWtlX29mZmxpbmUoc3RydWN0IHZpcnRpb19tZW0gKnZtLCB1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTIzMC1cdC8qXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6MTIzMTpcdCAqIFRPRE86IFdlIHdhbnQgYW4gYWxsb2NfY29udGlnX3JhbmdlKCkgbW9kZSB0aGF0IHRyaWVzIHRvIGFsbG9jYXRlXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTIzMi1cdCAqIGhhcmRlciAoZS5nLiwgZGVhbGluZyB3aXRoIHRlbXBvcmFyaWx5IHBpbm5lZCBwYWdlcywgUENQKSwgZXNwZWNpYWxseVxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMjQ1LVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjEyNDY6XHRcdHJjID0gYWxsb2NfY29udGlnX3JhbmdlKHBmbiwgcGZuICYjNDM7IG5yX3BhZ2VzLCBBQ1JfRkxBR1NfTk9ORSxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMjQ3LVx0XHRcdFx0XHRHRlBfS0VSTkVMKTtcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9MjUzNT1zdGF0aWMgaW50IHZpcnRpb19tZW1faW5pdF9ob3RwbHVnKHN0cnVjdCB2aXJ0aW9fbWVtICp2bSlcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMjU1Ny1cdC8qXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM6MjU1ODpcdCAqIGFsbG9jX2NvbnRpZ19yYW5nZSgpIHdvcmtzIHJlbGlhYmx5IHdpdGggcGFnZWJsb2NrXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMjU1OS1cdCAqIGdyYW51bGFyaXR5IG9uIFpPTkVfTk9STUFMLCB1c2UgcGFnZWJsb2NrX25yX3BhZ2VzLlxuLS1cbmluY2x1ZGUvbGludXgvY21hLmgtMTUtLypcbmluY2x1ZGUvbGludXgvY21hLmg6MTY6ICogIHRoZSBidWRkeSAtLSBlc3BlY2lhbGx5IHBhZ2VibG9jayBtZXJnaW5nIGFuZCBhbGxvY19jb250aWdfcmFuZ2UoKVxuaW5jbHVkZS9saW51eC9jbWEuaC0xNy0gKiAtLSBjYW4gZGVhbCB3aXRoIG9ubHkgc29tZSBwYWdlYmxvY2tzIG9mIGEgaGlnaGVyLW9yZGVyIHBhZ2UgYmVpbmdcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTQ0OD1pbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC00NTItXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQ1MzppbnQgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU0LVx0XHRhY3JfZmxhZ3NfdCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spO1xuaW5jbHVkZS9saW51eC9nZnAuaDo0NTU6I2RlZmluZSBhbGxvY19jb250aWdfcmFuZ2UoLi4uKVx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDU2Olx0YWxsb2NfaG9va3MoYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1Ny1cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTg3Mz1lbnVtIHpvbmVfdHlwZSB7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC05MzYtXHQgKiAgICBtZW1vcnkgb2ZmbGluaW5nLCBob3dldmVyLCBjYW5ub3QgYmUgbW92ZWQvYWxsb2NhdGVkLiBUaGVzZVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo5Mzc6XHQgKiAgICB0ZWNobmlxdWVzIG1pZ2h0IHVzZSBhbGxvY19jb250aWdfcmFuZ2UoKSB0byBoaWRlIHByZXZpb3VzbHlcbmluY2x1ZGUvbGludXgvbW16b25lLmgtOTM4LVx0ICogICAgZXhwb3NlZCBwYWdlcyBmcm9tIHRoZSBidWRkeSBhZ2FpbiAoZS5nLiwgdG8gaW1wbGVtZW50IHNvbWUgc29ydFxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtOTUwLVx0ICogSW4gZ2VuZXJhbCwgbm8gdW5tb3ZhYmxlIGFsbG9jYXRpb25zIHRoYXQgZGVncmFkZSBtZW1vcnkgb2ZmbGluaW5nXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjk1MTpcdCAqIHNob3VsZCBlbmQgdXAgaW4gWk9ORV9NT1ZBQkxFLiBBbGxvY2F0b3JzIChsaWtlIGFsbG9jX2NvbnRpZ19yYW5nZSgpKVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC05NTItXHQgKiBoYXZlIHRvIGV4cGVjdCB0aGF0IG1pZ3JhdGluZyBwYWdlcyBpbiBaT05FX01PVkFCTEUgY2FuIGZhaWwgKGV2ZW5cbi0tXG5tbS9jbWEuYz0xMDM9Ym9vbCBjbWFfdmFsaWRhdGVfem9uZXMoc3RydWN0IGNtYSAqY21hKVxuLS1cbm1tL2NtYS5jLTEyNC1cdFx0Lypcbm1tL2NtYS5jOjEyNTpcdFx0ICogYWxsb2NfY29udGlnX3JhbmdlKCkgcmVxdWlyZXMgdGhlIHBmbiByYW5nZSBzcGVjaWZpZWRcbm1tL2NtYS5jLTEyNi1cdFx0ICogdG8gYmUgaW4gdGhlIHNhbWUgem9uZS4gU2ltcGxpZnkgYnkgZm9yY2luZyB0aGUgZW50aXJlXG4tLVxubW0vaHVnZXRsYi5jPTI3Mjk9aW50IGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuLS1cbm1tL2h1Z2V0bGIuYy0yNzM4LVx0ICogRmVuY2Ugb2ZmIGdpZ2FudGljIHBhZ2VzIGFzIHRoZXJlIGlzIGEgY3ljbGljIGRlcGVuZGVuY3kgYmV0d2VlblxubW0vaHVnZXRsYi5jOjI3Mzk6XHQgKiBhbGxvY19jb250aWdfcmFuZ2UgYW5kIHRoZW0uIFJldHVybiAtRU5PTUVNIGFzIHRoaXMgaGFzIHRoZSBlZmZlY3Rcbm1tL2h1Z2V0bGIuYy0yNzQwLVx0ICogb2YgYmFpbGluZyBvdXQgcmlnaHQgYXdheSB3aXRob3V0IGZ1cnRoZXIgcmV0cnlpbmcuXG4tLVxubW0vaW50ZXJuYWwuaD0xMDE3PXN0cnVjdCBjb21wYWN0X2NvbnRyb2wge1xuLS1cbm1tL2ludGVybmFsLmgtMTA1My1cdFx0XHRcdFx0ICovXG5tbS9pbnRlcm5hbC5oOjEwNTQ6XHRib29sIGFsbG9jX2NvbnRpZztcdFx0LyogYWxsb2NfY29udGlnX3JhbmdlIGFsbG9jYXRpb24gKi9cbm1tL2ludGVybmFsLmgtMTA1NS19O1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz03MjQ2PUVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MjQ4LS8qKlxubW0vcGFnZV9hbGxvYy5jOjcyNDk6ICogYWxsb2NfY29udGlnX3JhbmdlKCkgLS0gdHJpZXMgdG8gYWxsb2NhdGUgZ2l2ZW4gcmFuZ2Ugb2YgcGFnZXNcbm1tL3BhZ2VfYWxsb2MuYy03MjUwLSAqIEBzdGFydDpcdHN0YXJ0IFBGTiB0byBhbGxvY2F0ZVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MjY0LSAqL1xubW0vcGFnZV9hbGxvYy5jOjcyNjU6aW50IGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG5tbS9wYWdlX2FsbG9jLmMtNzI2Ni1cdFx0XHQgICAgICBhY3JfZmxhZ3NfdCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0vcGFnZV9hbGxvYy5jLTcyNzgtfVxubW0vcGFnZV9hbGxvYy5jOjcyNzk6RVhQT1JUX1NZTUJPTChhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy03MjgwLVxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmM9MTM0PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqaGFzX3VubW92YWJsZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMTQ0LVx0XHQvKlxubW0vcGFnZV9pc29sYXRpb24uYzoxNDU6XHRcdCAqIENNQSBhbGxvY2F0aW9ucyAoYWxsb2NfY29udGlnX3JhbmdlKSByZWFsbHkgbmVlZCB0byBtYXJrXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTE0Ni1cdFx0ICogaXNvbGF0ZSBDTUEgcGFnZWJsb2NrcyBldmVuIHdoZW4gdGhleSBhcmUgbm90IG1vdmFibGUgaW4gZmFjdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMjkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA4MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgTWVtb3J5IElzb2xhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgLCB3aGljaCBpcyBjYWxsZWQgYnkgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAuIEFuZCBJIGtub3cgdGhhdCBgYWxsb2NfY29udGlnX3JhbmdlYCB1c2VzIHRoaXMgY29kZSBwYXRoLCBhbG9uZyB3aXRoIHZpcnRpb19tZW0sIGFuZCBodWdlcGFnZSBhbGxvY2F0aW9uIOKAkyBzbyBpdCYjMzk7cyBhICp2ZXJ5KiBpbXBvcnRhbnQgc2VjdGlvbiBvZiBjb2RlLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgY2hlY2tzIHJlbGF0ZWQgdG8gYGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKWAgYW5kIGBjb21wb3VuZF9vcmRlcihoZWFkKWAuIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGlzIGlzIGFib3V0IHByZXZlbnRpbmcgc29tZSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBkdXJpbmcgdGhlIHBhZ2UgaXNvbGF0aW9uIHByb2Nlc3MuIEZ1bmN0aW9uYWwgY2hhbmdlLCB0aGVuLgoKTGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgY2hhbmdlcywgbGluZSBieSBsaW5lLiBGaXJzdCwgd2l0aCBidWRkeSBwYWdlczogdGhlIGNvZGUgbm93IHVzZXMgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgKGluc3RlYWQgb2YgdGhlIG9sZGVyIHNhZmUgdmVyc2lvbiksIGJ1dCBhZGRzIGNoZWNrcyB0byB2YWxpZGF0ZSB0aGUgYG9yZGVyYCBiZWZvcmUgYW55IGNhbGN1bGF0aW9ucywgYW5kIGVuc3VyZXMgdGhlIHBhZ2UgYm91bmRhcnkgaXMgcmVzcGVjdGVkLiBUaGlzIGlzIHNtYXJ0LCBkZWFsaW5nIHdpdGggdGhvc2UgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aGVyZSBgYnVkZHlfb3JkZXJfdW5zYWZlYCBtaWdodCByZXR1cm4gYSB2YWx1ZSB0aGF0JiMzOTtzIG5vIGxvbmdlciB2YWxpZC4gSWYgdGhlc2UgY2hlY2tzIGZhaWwsIGl0IGp1bXBzIHRvIGBmYWlsZWRgLgoKQW5kIHRoZW4sIHdpdGggY29tcG91bmQgcGFnZXM6IGluc3RlYWQgb2YgZGlyZWN0bHkgY2FsY3VsYXRpbmcgYG5yX3BhZ2VzYCwgaXQgY2FsY3VsYXRlcyBhbiBgb3JkZXJgIHZpYSBgY29tcG91bmRfb3JkZXIoaGVhZClgLiBUaGVyZSYjMzk7cyBub3cgYSBjaGVjayB0aGF0IGNhcHMgdGhlIG9yZGVyIHRvIGBNQVhfRk9MSU9fT1JERVJgIChhbm90aGVyIGF0dGVtcHQgdG8gbWl0aWdhdGUgcmFjZXMpLiBBbHNvLCB3ZSYjMzk7cmUgdmFsaWRhdGluZyB0aGUgYGhlYWRfcGZuYCBub3cuICBXZSBjaGVjayB0aGF0IHRoZSBkZXJpdmVkIGBoZWFkX3BmbmAgZnJvbSBgY29tcG91bmRfaGVhZCgpYCBpcyBzdGlsbCB2YWxpZCwgZ2l2ZW4gYHBmbmAuIElmIGFueXRoaW5nIGlzIG91dCBvZiB3aGFjayAoaGVhZCBpcyBhZnRlciBwZm4sIG9yIHVuYWxpZ25lZCwgZXRjLiksIHdlIGJhaWwgb3V0LiBJdCBzZWVtcyBsaWtlIHRoZSBnb2FsIGhlcmUgaXMgdG8gbWFrZSBzdXJlIHdlIGRvbiYjMzk7dCBlbmQgdXAgd2l0aCBpbnZhbGlkIGNhbGN1bGF0aW9ucyBiYXNlZCBvbiBwb3RlbnRpYWxseSBzdGFsZSBjb21wb3VuZCBwYWdlIG1ldGFkYXRhLgoKVGhpcyBpcyBpbW1lZGlhdGVseSBzb21ldGhpbmcgd29ydGggZnV6emluZywgYW5kIHByb2JhYmx5IHdvcnRoIGEgZGVlcGVyIGRpdmUuIFNvLCB3aGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzPyBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBpdHNlbGYgaXMgc3RhdGljLCBzbyB0aGF0JiMzOTtzIG5vdCBkaXJlY3RseSBleHBvc2VkLiBIb3dldmVyLCBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCwgYGFsbG9jX2NvbnRpZ19yYW5nZWAsIGBhbGxvY19jb250aWdfcGFnZXNgLCBhbmQgYG9mZmxpbmVfcGFnZXNgIGFyZSAqbm90KiBzdGF0aWMuIFdlIHNob3VsZCBjaGVjayB0aGUgdXNhZ2Ugb2YgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgdG8gdW5kZXJzdGFuZCBpdHMgYnJvYWRlciBpbXBhY3QsIGJlY2F1c2UgdGhhdCBtaWdodCBiZSBvdXIgbWFpbiB0YXJnZXQgZm9yIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmg9NjE9Ym9vbCBwYWdlYmxvY2tfdW5pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlKTtcbmluY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaC02Mi1cbmluY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaDo2MzppbnQgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmgtNjQtXHRcdFx0ICAgICBlbnVtIHBiX2lzb2xhdGVfbW9kZSBtb2RlKTtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5MDI9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTY4LVx0Lyogc2V0IGFib3ZlIHJhbmdlIGFzIGlzb2xhdGVkICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE5Njk6XHRyZXQgPSBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2Uoc3RhcnRfcGZuLCBlbmRfcGZuLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTcwLVx0XHRcdFx0ICAgICAgIFBCX0lTT0xBVEVfTU9ERV9NRU1fT0ZGTElORSk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTcxMDg9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MTQ0LVx0ICogaGF2ZSBkaWZmZXJlbnQgc2l6ZXMsIGFuZCBkdWUgdG8gdGhlIHdheSBwYWdlIGFsbG9jYXRvclxubW0vcGFnZV9hbGxvYy5jOjcxNDU6XHQgKiB3b3JrLCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKSBoYXMgc3BlY2lhbCBoYW5kbGluZ3MgZm9yIHRoaXMuXG5tbS9wYWdlX2FsbG9jLmMtNzE0Ni1cdCAqXG4tLVxubW0vcGFnZV9hbGxvYy5jLTcxNjEtXG5tbS9wYWdlX2FsbG9jLmM6NzE2MjpcdHJldCA9IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZShzdGFydCwgZW5kLCBtb2RlKTtcbm1tL3BhZ2VfYWxsb2MuYy03MTYzLVx0aWYgKHJldClcbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jPTMyMD1zdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3Bmbixcbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ3MC0vKipcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NDcxOiAqIHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSgpIC0gbWFyayBwYWdlIHJhbmdlIE1JR1JBVEVfSVNPTEFURVxubW0vcGFnZV9pc29sYXRpb24uYy00NzItICogQHN0YXJ0X3BmbjpcdFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgcmFuZ2UgdG8gYmUgaXNvbGF0ZWQuXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy01MDUtICovXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjUwNjppbnQgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUwNy1cdFx0XHQgICAgIGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUpXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy01NDktLyoqXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjU1MDogKiB1bmRvX2lzb2xhdGVfcGFnZV9yYW5nZSAtIHVuZG8gZWZmZWN0cyBvZiBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKVxubW0vcGFnZV9pc29sYXRpb24uYy01NTEtICogQHN0YXJ0X3BmbjpcdFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgaXNvbGF0ZWQgcmFuZ2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM4MgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aGluZ3M6CgoqKkNoZWNraW5nIEdsb2JhbCBQYWdlIEFsbG9jYXRpb24gTWVjaGFuaXNtcyoqCgpPa2F5LCBzbyBJIHNlZSBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCBpcyBhIGdsb2JhbCB2YXJpYWJsZSwgYWNjZXNzaWJsZSBldmVyeXdoZXJlLiAgU2ltaWxhcmx5LCBgYWxsb2NfY29udGlnX3JhbmdlYCBoYXMgZ2xvYmFsIHNjb3BlIGFzIHdlbGwuIEFuZCBJIGNhbiYjMzk7dCBmb3JnZXQgYWJvdXQgYG9mZmxpbmVfcGFnZXNgISBUaGVzZSBhcmUga2V5IGNvbXBvbmVudHMuICBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgYWxsb2NfY29udGlnX3JhbmdlYCB3b3JrcyBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgaXQgaXMgaW50ZWdyYWwgdG8gaG93IHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgaGFuZGxlcyBjb250aWd1b3VzIHJhbmdlcy4gSSBzaG91bGQgZGVsdmUgaW50byBpdHMgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBnbG9iYWwgdmFyaWFibGVzLiAgQmVzdCBwbGFjZSB0byBzdGFydCBpcyBsaWtlbHkgYG1tL3BhZ2VfYWxsb2MuY2AgdG8gc2VlIGhvdyBpdCBpcyB3b3JraW5nLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIG90aGVyIHZhcmlhYmxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfY29udGlnX3JhbmdlX25vcHJvZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2dmcC5oPTQ0OD1pbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC00NTItXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQ1MzppbnQgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU0LVx0XHRhY3JfZmxhZ3NfdCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spO1xuaW5jbHVkZS9saW51eC9nZnAuaC00NTUtI2RlZmluZSBhbGxvY19jb250aWdfcmFuZ2UoLi4uKVx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDU2Olx0YWxsb2NfaG9va3MoYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1Ny1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzI0Nj1FWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzI2NC0gKi9cbm1tL3BhZ2VfYWxsb2MuYzo3MjY1OmludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vcGFnZV9hbGxvYy5jLTcyNjYtXHRcdFx0ICAgICAgYWNyX2ZsYWdzX3QgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03Mjc4LX1cbm1tL3BhZ2VfYWxsb2MuYzo3Mjc5OkVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZik7XG5tbS9wYWdlX2FsbG9jLmMtNzI4MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAxMAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRob3NlIGZ1bmN0aW9ucyBhcyBwb3RlbnRpYWwgY2FuZGlkYXRlcyBmb3IgYEZvY3VzU3ltYm9sc2AuCgoqKkZvY3VzU3ltYm9sIENhbmRpZGF0ZSBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZmAgYW5kIGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgLiBUaGV5IGJvdGgganVtcCBvdXQgYXMgcG90ZW50aWFsIGNhbmRpZGF0ZXMgZm9yIGluY2x1c2lvbiBpbiBgRm9jdXNTeW1ib2xzYC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgcHJlY29uZGl0aW9ucywgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCBiZWZvcmUgSSBjYW4gc3RhcnQgdG8gbG9vayBkZWVwZXIgaW50byBlaXRoZXIgZnVuY3Rpb24uCgpGaXJzdCwgSSYjMzk7bGwgZm9jdXMgb24gYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgc2luY2UgdGhlIGNvZGUgc2VlbXMgdG8gaW5kaWNhdGUgd2hlcmUgdGhlIHNvdXJjZSBmaWxlIG1pZ2h0IGJlOiBgbW0vcGFnZV9pc29sYXRpb24uY2AuIEkmIzM5O2xsIGdvIGNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgLCBhbmQgc2VlIGlmIEkgY2FuIHZlcmlmeSB0aGF0IGBwYWdlX2lzb2xhdGlvbi5vYCBpcyBiZWluZyBidWlsdCBhbmQgY29tcGlsZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGJhc2ljIGNvbmZpZGVuY2UgdG8gY29udGludWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VfaXNvbGF0aW9uLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTE3PW9iai0kKENPTkZJR19QQUdFX09XTkVSKSAmIzQzOz0gcGFnZV9vd25lci5vXG5tbS9NYWtlZmlsZToxMTg6b2JqLSQoQ09ORklHX01FTU9SWV9JU09MQVRJT04pICYjNDM7PSBwYWdlX2lzb2xhdGlvbi5vXG5tbS9NYWtlZmlsZS0xMTktb2JqLSQoQ09ORklHX1pTTUFMTE9DKVx0JiM0Mzs9IHpzbWFsbG9jLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM3OAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgcmVsYXRlcyB0byB0aGUga2VybmVsIGNvbmZpZzoKCioqTWVtb3J5IElzb2xhdGlvbiBDb25maWd1cmF0aW9uIFJldmlldyoqCgpPa2F5LCB0aGUgcHJvYmxlbSBzdGF0ZW1lbnQgZXhwbGljaXRseSBtZW50aW9ucyBgQ09ORklHX01FTU9SWV9JU09MQVRJT05gIGFzIGEgcmVxdWlyZW1lbnQuIFRpbWUgdG8gY29uZmlybSB0aGlzIGlzIGVuYWJsZWQgYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBzeXN0ZW0uIFNwZWNpZmljYWxseSwgdGhhdCBtZWFucyBkaWdnaW5nIGludG8gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIHJldmlldyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgdG8gc2VlIGhvdyBgQ09ORklHX01FTU9SWV9JU09MQVRJT05gIGlzIGhhbmRsZWQsIHdoYXQgb3RoZXIgb3B0aW9ucyBpdCBtaWdodCBkZXBlbmQgb24sIGFuZCBpZiB0aGVyZSBhcmUgYW55IGNhdmVhdHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBHb3R0YSBtYWtlIHN1cmUgd2UmIzM5O3JlIG5vdCBpbmFkdmVydGVudGx5IGRpc2FibGluZyBvdGhlciBjcnVjaWFsIGZlYXR1cmVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYG1tL0tjb25maWdgIHJldmVhbHMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9JU09MQVRJT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz00OTk9Y29uZmlnIE5VTUFfS0VFUF9NRU1JTkZPXG4tLVxubW0vS2NvbmZpZy01MDEtXG5tbS9LY29uZmlnOjUwMjpjb25maWcgTUVNT1JZX0lTT0xBVElPTlxubW0vS2NvbmZpZy01MDMtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NjgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgTUVNT1JZX0lTT0xBVElPTmAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgTUVNT1JZX0lTT0xBVElPTmAgaXMgYSBib29sZWFuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBkcml2aW5nIHRoaXMuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgYmVpbmcgc2VsZWN0ZWQgb3IgZW5hYmxlZCBieSBvdGhlciBjb25maWd1cmF0aW9ucyDigJMgYSBkZXBlbmRlbmN5LCBzbyB0byBzcGVhay4gVGltZSB0byB0cmFjZSB0aGUgc2VsZWN0cyBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgY2F1c2luZyB0aGlzIHRvIGZsaXAgdG8gdHJ1ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zIGhlcmU7IEkga25vdyB3aGF0IG1lbW9yeSBpc29sYXRpb24gKmlzKiwgYnV0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IGluICp0aGlzKiBzeXN0ZW0gd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoZXJlIHRoaXMgZmxhZyBpcyBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTUVNT1JZX0lTT0xBVElPTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTUyMz1tZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnLTUyNC1cdGJvb2wgXCYjMzQ7TWVtb3J5IGhvdHBsdWdcJiMzNDtcbm1tL0tjb25maWc6NTI1Olx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cbm1tL0tjb25maWctNTI2LVx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxuLS1cbm1tL0tjb25maWc9MTA2Nz1jb25maWcgQ01BXG4tLVxubW0vS2NvbmZpZy0xMDcwLVx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZzoxMDcxOlx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cbm1tL0tjb25maWctMTA3Mi1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMTkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBLZXJuZWwgTWVtb3J5IEFsbG9jYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB3b3JraW5nIG9uIGNvbmZpZ3VyaW5nIHRoaXMga2VybmVsLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gbWVtb3J5IGFsbG9jYXRpb24gZmVhdHVyZXMgYXJlIGltcG9ydGFudCBoZXJlLiBJIHNlZSB0aGF0IGlmIEkgZW5hYmxlIGBNRU1PUllfSE9UUExVR2Agb3IgYENNQWAsIEkgYXV0b21hdGljYWxseSBhbHNvIHNlbGVjdCBgTUVNT1JZX0lTT0xBVElPTmAuIE1ha2VzIHNlbnNlOyBob3RwbHVnZ2luZyBtZW1vcnkgb3IgdXNpbmcgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbiBsaWtlbHkgbmVlZHMgYSBkZWRpY2F0ZWQgaXNvbGF0ZWQgcmVnaW9uLiBUaGVyZWZvcmUsIEkgc2hvdWxkIGVuYWJsZSBib3RoIGBNRU1PUllfSE9UUExVR2AgYW5kIGBDTUFgLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4KCk5vdywgSSBhbHNvIHNlZSB0aGF0IGBDT05USUdfQUxMT0NgIGlzIHBvdGVudGlhbGx5IHRpZWQgdG8gYm90aCBgQ01BYCBhbmQgYE1FTU9SWV9JU09MQVRJT05gLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoYXQgY29ubmVjdGlvbi4gSSYjMzk7bGwgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBDT05USUdfQUxMT0NgIG5vdyB0byBjb25maXJtIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIHJvbGUgaW4gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUuIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBpbXBhY3Qgb2YgZW5hYmxpbmcgdGhlc2UgZGlmZmVyZW50IGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ09OVElHX0FMTE9DJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NzA5PWNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxuLS1cbm1tL0tjb25maWctNzE4LVxubW0vS2NvbmZpZzo3MTk6Y29uZmlnIENPTlRJR19BTExPQ1xubW0vS2NvbmZpZy03MjAtXHRkZWZfYm9vbCAoTUVNT1JZX0lTT0xBVElPTiBcdTAwMjZcdTAwMjYgQ09NUEFDVElPTikgfHwgQ01BXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzkwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIHRoZSBgQ09OVElHX0FMTE9DYCBvcHRpb24gaXMgZWZmZWN0aXZlbHkgcmVkdW5kYW50LiBJdCYjMzk7cyBkZWZpbmVkIGFzIGEgYm9vbGVhbiBleHByZXNzaW9uIHRoYXQgaGluZ2VzIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgTUVNT1JZX0lTT0xBVElPTmAsIGBDT01QQUNUSU9OYCwgYW5kIGBDTUFgIG9wdGlvbnMuIFRoZSBsb2dpYyBoZXJlIGlzIGNsZWFyOiBgQ09OVElHX0FMTE9DYCBpcyBlbmFibGVkIGlmICplaXRoZXIqIGBDTUFgIGlzIGVuYWJsZWQgKm9yKiBgTUVNT1JZX0lTT0xBVElPTmAgKmFuZCogYENPTVBBQ1RJT05gIGFyZSBlbmFibGVkIHRvZ2V0aGVyLiBUaGVyZWZvcmUsIGlmIHdlIHdhbnQgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbiwgd2UgY2FuIGp1c3QgZW5hYmxlIGBDTUFgIGRpcmVjdGx5LiBUaGF0JiMzOTtzIHRoZSBzaW1wbGVzdCBwYXRoIGFuZCBpdCBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIHRob3NlIG90aGVyIHR3byBhcmUgZW5hYmxlZCB0b28sIGJlY2F1c2UgdGhleSBnZXQgYnVuZGxlZCBpbnRvIHRoZSBlcXVhdGlvbi4KCk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGl04oCZcyBhbHdheXMgd2lzZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IG15IGFzc3VtcHRpb24gaG9sZHMgdXAgaW4gcHJhY3RpY2UsIHRoYXQgdGhlcmUgaXNuJiMzOTt0IHNvbWUgb3RoZXIgc3VidGxlIGNvbmRpdGlvbiBvciBkZXBlbmRlbmN5IGx1cmtpbmcgc29tZXdoZXJlLiBJIHNob3VsZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXRzIGJlaGF2aW91ciBpcyBnb3Zlcm5lZCBkaXJlY3RseSBieSBgQ01BYCBvciBgQ09OVElHX0FMTE9DYCwgb3IgdGhhdCBpdCYjMzk7cyBjb3JyZWN0bHkgaGFuZGxlZCB1bmRlciB0aGVzZSBjb25kaXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgY29udHJvbCBpdHMgZXhlY3V0aW9uLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfY29udGlnX3JhbmdlX25vcHJvZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2dmcC5oPTQ0OD1pbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC00NTItXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQ1MzppbnQgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU0LVx0XHRhY3JfZmxhZ3NfdCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spO1xuaW5jbHVkZS9saW51eC9nZnAuaC00NTUtI2RlZmluZSBhbGxvY19jb250aWdfcmFuZ2UoLi4uKVx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDU2Olx0YWxsb2NfaG9va3MoYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1Ny1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzI0Nj1FWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzI2NC0gKi9cbm1tL3BhZ2VfYWxsb2MuYzo3MjY1OmludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vcGFnZV9hbGxvYy5jLTcyNjYtXHRcdFx0ICAgICAgYWNyX2ZsYWdzX3QgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03Mjc4LX1cbm1tL3BhZ2VfYWxsb2MuYzo3Mjc5OkVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZik7XG5tbS9wYWdlX2FsbG9jLmMtNzI4MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNjQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHdoZXRoZXIgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdCBtaWdodCBiZSwgd2hpY2ggd291bGQgZGVwZW5kIG9uIGBDT05GSUdfQ09OVElHX0FMTE9DYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiYjMzk7cyBkZWZpbml0aW9uIGFuZCB1c2FnZSBhcmUgb25seSBwcmVzZW50IHdoZW4gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGVuYWJsZWQuIEdpdmVuIHRoZSBuYW1pbmcsIGl0JiMzOTtzIGEgcHJldHR5IHNhZmUgYmV0LCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgc3Vycm91bmRpbmcgdGhlIGNvZGUuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiwgYW5kIEkgd2FudCB0byBiZSAxMDAlIHN1cmUgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBmdW5jdGlvbmFsaXR5IG9yIGFueSBwb3RlbnRpYWwgaXNzdWVzLiBJZiBpdCAqaXMqIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIHRoZW4gSSBrbm93IEkgY2FuIHJlYXNvbiBhYm91dCBpdHMgZXhpc3RlbmNlIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0gYmFzZWQgb24gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIE90aGVyd2lzZSwgSSB3aWxsIGtub3cgaXQmIzM5O3MgYWx3YXlzIGF2YWlsYWJsZSBhbmQgY2FuIGNvbnRpbnVlIG15IGV4cGxvcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfQ09OVElHX0FMTE9DJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYz00MzQ9Ym9vbCBhcmNoX2h1Z2V0bGJfbWlncmF0aW9uX3N1cHBvcnRlZChzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYy00MzktXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmM6NDQwOiNpZmRlZiBDT05GSUdfQ09OVElHX0FMTE9DXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDQxLXN0YXRpYyBfX2luaXQgaW50IGdpZ2FudGljX3BhZ2VzX2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jPTI0PWJvb2wgX19pbml0IGFyY2hfaHVnZXRsYl92YWxpZF9zaXplKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbi0tXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jLTMzLVxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYzozNDojaWZkZWYgQ09ORklHX0NPTlRJR19BTExPQ1xuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy0zNS1zdGF0aWMgX19pbml0IGludCBnaWdhbnRpY19wYWdlc19pbml0KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaD00Mzk9ZXh0ZXJuIGdmcF90IHZtYV90aHBfZ2ZwX21hc2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuaW5jbHVkZS9saW51eC9nZnAuaC00NDAtXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQ0MTojaWZkZWYgQ09ORklHX0NPTlRJR19BTExPQ1xuaW5jbHVkZS9saW51eC9nZnAuaC00NDItXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTk3NT1kZWJ1Z192bV9wZ3RhYmxlX2ZyZWVfaHVnZV9wYWdlKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTk3Ny17XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTc4OiNpZmRlZiBDT05GSUdfQ09OVElHX0FMTE9DXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTc5LVx0aWYgKGFyZ3MtXHUwMDNlaXNfY29udGlndW91c19wYWdlKSB7XG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTEwNDY9ZGVidWdfdm1fcGd0YWJsZV9hbGxvY19odWdlX3BhZ2Uoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncywgaW50IG9yZGVyKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMDQ5LVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjEwNTA6I2lmZGVmIENPTkZJR19DT05USUdfQUxMT0Ncbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMDUxLVx0aWYgKG9yZGVyIFx1MDAzZSBNQVhfUEFHRV9PUkRFUikge1xuLS1cbm1tL2h1Z2V0bGIuYz0xMzIwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTM1OC1cbm1tL2h1Z2V0bGIuYzoxMzU5OiNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQ09OVElHX0FMTE9DKVxubW0vaHVnZXRsYi5jLTEzNjAtc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYi5jLTEzNzUtfVxubW0vaHVnZXRsYi5jOjEzNzY6I2Vsc2UgLyogIUNPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFIHx8ICFDT05GSUdfQ09OVElHX0FMTE9DICovXG5tbS9odWdldGxiLmMtMTM3Ny1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywgaW50IG5pZCxcbi0tXG5tbS9odWdldGxiLmM9MzczMj1zdGF0aWMgaW50IHNldF9tYXhfaHVnZV9wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCB1bnNpZ25lZCBsb25nIGNvdW50LCBpbnQgbmlkLFxuLS1cbm1tL2h1Z2V0bGIuYy0zNzg4LVx0ICovXG5tbS9odWdldGxiLmM6Mzc4OTpcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWMoaCkgXHUwMDI2XHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19DT05USUdfQUxMT0MpKSB7XG5tbS9odWdldGxiLmMtMzc5MC1cdFx0aWYgKGNvdW50IFx1MDAzZSBwZXJzaXN0ZW50X2h1Z2VfcGFnZXMoaCkpIHtcbi0tXG5tbS9rZmVuY2UvY29yZS5jPTEwMDc9c3RhdGljIGludCBrZmVuY2VfaW5pdF9sYXRlKHZvaWQpXG4tLVxubW0va2ZlbmNlL2NvcmUuYy0xMDE0LVxubW0va2ZlbmNlL2NvcmUuYzoxMDE1OiNpZmRlZiBDT05GSUdfQ09OVElHX0FMTE9DXG5tbS9rZmVuY2UvY29yZS5jLTEwMTYtXHRzdHJ1Y3QgcGFnZSAqcGFnZXM7XG4tLVxubW0va2ZlbmNlL2NvcmUuYy0xMDU4LVxubW0va2ZlbmNlL2NvcmUuYzoxMDU5OiNpZmRlZiBDT05GSUdfQ09OVElHX0FMTE9DXG5tbS9rZmVuY2UvY29yZS5jLTEwNjAtXHRmcmVlX2NvbnRpZ19yYW5nZShwYWdlX3RvX3Bmbih2aXJ0X3RvX3BhZ2UoKHZvaWQgKilrZmVuY2VfbWV0YWRhdGFfaW5pdCkpLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYz02OTQwPXZvaWQgX19mcmVlX2NvbnRpZ19yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNjk0NC1cbm1tL3BhZ2VfYWxsb2MuYzo2OTQ1OiNpZmRlZiBDT05GSUdfQ09OVElHX0FMTE9DXG5tbS9wYWdlX2FsbG9jLmMtNjk0Ni0vKiBVc2FnZTogU2VlIGFkbWluLWd1aWRlL2R5bmFtaWMtZGVidWctaG93dG8ucnN0ICovXG4tLVxubW0vcGFnZV9hbGxvYy5jPTc0OTI9RVhQT1JUX1NZTUJPTChmcmVlX2NvbnRpZ19yYW5nZSk7XG5tbS9wYWdlX2FsbG9jLmM6NzQ5MzojZW5kaWYgLyogQ09ORklHX0NPTlRJR19BTExPQyAqL1xubW0vcGFnZV9hbGxvYy5jLTc0OTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjYyCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGNvbmZpcm1pbmcgdGhhdCBgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZmAgZG9lcyBpbmRlZWQgbGl2ZSB1bmRlciBgQ09ORklHX0NPTlRJR19BTExPQ2AuIEFuZCwgYXMgSSBzdXNwZWN0ZWQsIGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgIGlzIHJpZ2h0IHRoZXJlIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCwgbWVhbmluZyBpdCYjMzk7cyBsaW5rZWQgdG8gYENPTkZJR19NRU1PUllfSVNPTEFUSU9OYC4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZW5hYmxlIGBDTUFgLCBgTUVNT1JZX0lTT0xBVElPTmAsIGBNRU1PUllfSE9UUExVR2AsIGFuZCBgQ09OVElHX0FMTE9DYCBmb3IgZnVsbCBmdW5jdGlvbmFsaXR5LiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBMZXQmIzM5O3MgdGhpbmsgdGhpcyB0aHJvdWdoLiBgQ01BYCAqYWxyZWFkeSogc2VsZWN0cyBgTUVNT1JZX0lTT0xBVElPTmAuIEFuZCBgQ09OVElHX0FMTE9DYCBpcyBkZWZpbmVkIGFzIGEgZnVuY3Rpb24gb2YgYE1FTU9SWV9JU09MQVRJT05gIGFuZCBgQ09NUEFDVElPTmAsIG9yIGRpcmVjdGx5IGJ5IGBDTUFgLiBTbywgaWYgYENNQWAgaXMgZW5hYmxlZCwgdGhlIG90aGVycyBzaG91bGQgYmUgdGFrZW4gY2FyZSBvZi4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBxdWl0ZSBhIGJpdC4gSXQgbWFrZXMgbW9yZSBzZW5zZSB0byBlbmFibGUgYENNQWAgZGlyZWN0bHkuCgpKdXN0IHRvIGJlIHNhZmUgYW5kIGVuc3VyZSBtYXhpbXVtIGNvbXBhdGliaWxpdHksIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBlbmFibGUgYE1FTU9SWV9IT1RQTFVHYCBhcyB3ZWxsLiBDYW4mIzM5O3QgaHVydCwgYW5kIG1pZ2h0IGJlIHVzZWZ1bCBkb3duIHRoZSBsaW5lLgoKRmluYWxseSwgSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYG9mZmxpbmVfcGFnZXNgIGluIGBtbS9tZW1vcnlfaG90cGx1Zy5jYCB0byBiZSBjZXJ0YWluIHRoZXJlIGlzbiYjMzk7dCBhbnl0aGluZyBJJiMzOTt2ZSBtaXNzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29mZmxpbmVfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9tbS9tbXUuYz0yMDc1PXN0YXRpYyBib29sIGNhbl91bm1hcF93aXRob3V0X3NwbGl0KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmMtMjEwNS0gKiBpbmFkdmVydGVudGx5IHJlbW92ZWQgYXMgaXQgYmxvY2tzIHBmbiByYW5nZSBvZmZsaW5pbmcgcHJvY2VzcyBpblxuYXJjaC9hcm02NC9tbS9tbXUuYzoyMTA2OiAqIF9fb2ZmbGluZV9wYWdlcygpLiBIZW5jZSB0aGlzIHByZXZlbnRzIGJvdGggb2ZmbGluaW5nIGFzIHdlbGwgYXNcbmFyY2gvYXJtNjQvbW0vbW11LmMtMjEwNy0gKiByZW1vdmFsIHByb2Nlc3MgZm9yIGJvb3QgbWVtb3J5IHdoaWNoIGlzIGluaXRpYWxseSBhbHdheXMgb25saW5lLlxuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yODA9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTI5MS1cdCAqIFVuYWNjb3VudCBiZWZvcmUgb2ZmbGluaW5nLCBzdWNoIHRoYXQgdW5wb3B1bGF0ZWQgem9uZSBhbmQga3RocmVhZHNcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzoyOTI6XHQgKiBjYW4gcHJvcGVybHkgYmUgdG9ybiBkb3duIGluIG9mZmxpbmVfcGFnZXMoKS5cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yOTMtXHQgKi9cbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzAxLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjMwMjpcdHJldCA9IG9mZmxpbmVfcGFnZXMoc3RhcnRfcGZuICYjNDM7IG5yX3ZtZW1tYXBfcGFnZXMsXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzAzLVx0XHRcdCAgICBucl9wYWdlcyAtIG5yX3ZtZW1tYXBfcGFnZXMsIG1lbS1cdTAwM2V6b25lLCBtZW0tXHUwMDNlZ3JvdXApO1xuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMwNC1cdGlmIChyZXQpIHtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzozMDU6XHRcdC8qIG9mZmxpbmVfcGFnZXMoKSBmYWlsZWQuIEFjY291bnQgYmFjay4gKi9cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMDYtXHRcdGlmIChucl92bWVtbWFwX3BhZ2VzKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaD0yNjQ9ZXh0ZXJuIHZvaWQgdHJ5X29mZmxpbmVfbm9kZShpbnQgbmlkKTtcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDoyNjU6ZXh0ZXJuIGludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTI2Ni1cdFx0XHQgc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg9MjcyPXN0YXRpYyBpbmxpbmUgdm9pZCB0cnlfb2ZmbGluZV9ub2RlKGludCBuaWQpIHt9XG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjczLVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjI3NDpzdGF0aWMgaW5saW5lIGludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTI3NS1cdFx0XHRcdHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cClcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTUzOT12b2lkIHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHN0cnVjdCB6b25lICp6b25lLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtNTgzLSAqIHN1cmUgdGhhdCBwYWdlcyBhcmUgbWFya2VkIHJlc2VydmVkIGFuZCB6b25lcyBhcmUgYWRqdXN0IHByb3Blcmx5IGJ5XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjU4NDogKiBjYWxsaW5nIG9mZmxpbmVfcGFnZXMoKS5cbm1tL21lbW9yeV9ob3RwbHVnLmMtNTg1LSAqL1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTg5MD1zdGF0aWMgaW50IGNvdW50X3N5c3RlbV9yYW1fcGFnZXNfY2IodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTAxLSAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxOTAyOmludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTAzLVx0XHRcdHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cClcbi0tXG5tbS9tbV9pbml0LmM9MTUzOT12b2lkIF9fcmVmIGZyZWVfYXJlYV9pbml0X2NvcmVfaG90cGx1ZyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLS1cbm1tL21tX2luaXQuYy0xNTc3LVx0ICogY2xlYXIgYWxsIHpvbmVzJiMzOTsgcHJlc2VudF9wYWdlcyBhbmQgbWFuYWdlZF9wYWdlcyBiZWNhdXNlIHRoZXkgd2lsbFxubW0vbW1faW5pdC5jOjE1Nzg6XHQgKiBiZSB1cGRhdGVkIGluIG9ubGluZV9wYWdlcygpIGFuZCBvZmZsaW5lX3BhZ2VzKCkuXG5tbS9tbV9pbml0LmMtMTU3OS1cdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDA4OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIE1lbW9yeSBIb3RwbHVnIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cmFjaW5nIGl0cyBleGVjdXRpb24uIEl0IGxvb2tzIGxpa2UgYG9mZmxpbmVfcGFnZXNgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgY2FsbGVkIGZyb20gYG1lbW9yeV9ibG9ja19vZmZsaW5lYCBpbiB0aGUgbWVtb3J5IGRyaXZlcnMuIFRoYXQgcG9pbnRzIGRpcmVjdGx5IHRvIG1lbW9yeSBob3RwbHVnLiBNeSBpbW1lZGlhdGUgZm9jdXMgdGhlbiBnb2VzIHRvIHRoZXNlIGZ1bmN0aW9uczogYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgLCBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCwgYW5kIG9mIGNvdXJzZSwgYG9mZmxpbmVfcGFnZXNgIGl0c2VsZi4KCkkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBxdWlja2x5OiBJcyBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBzdGF0aWM/IFllcCwgaXQgaXMuIEFuZCBJIHNlZSB0aGF0JiMzOTtzIHRoZSBmdW5jdGlvbiB0aGlzIHBhdGNoIGlzIGFjdHVhbGx5IG1vZGlmeWluZy4gSXQmIzM5O3MgdGFyZ2V0aW5nIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgLiBBcHBhcmVudGx5LCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgd2VyZSBjYXVzaW5nIGBidWRkeV9vcmRlcmAgYW5kIGBjb21wb3VuZF9vcmRlcmAgdG8gcmV0dXJuIGJhZCB2YWx1ZXMuIFRoZSBzb2x1dGlvbiBoZXJlIGlzIHRvIHVzZSBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgYGNvbXBvdW5kX29yZGVyYCwgYnV0IHdpdGggYWRkZWQgdmFsaWRhdGlvbiB0byBwcmV2ZW50IGludmFsaWQgdmFsdWVzIGZyb20gYmVpbmcgdXNlZC4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIGZpeCDigJMgaXQgZGlyZWN0bHkgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGJ1Zywgd2hpY2ggaXMgYSBnb29kIHRoaW5nIHRvIGZpeC4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIGNoYW5nZSwgZnV6emluZyBpcyBkZWZpbml0ZWx5IGEgc21hcnQgbW92ZS4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2VlIGBDTUFgLCBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0lTT0xBVElPTmAsIGFuZCBgQ09OVElHX0FMTE9DYC4gSSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgYENPTlRJR19BTExPQ2AgaXMgYSB2YWxpZCBjb25maWcgaGVyZS4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENPTlRJR19BTExPQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTcwOT1jb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbi0tXG5tbS9LY29uZmlnLTcxOC1cbm1tL0tjb25maWc6NzE5OmNvbmZpZyBDT05USUdfQUxMT0Ncbm1tL0tjb25maWctNzIwLVx0ZGVmX2Jvb2wgKE1FTU9SWV9JU09MQVRJT04gXHUwMDI2XHUwMDI2IENPTVBBQ1RJT04pIHx8IENNQVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc0OAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYENPTlRJR19BTExPQ2AsIGBNRU1PUllfSVNPTEFUSU9OYCwgYE1FTU9SWV9IT1RQTFVHYCwgYW5kIGBDTUFgIGFyZSBhbGwgdmFsaWQgY29uZmlndXJhdGlvbnMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBmcmFtZXdvcmsuIFRoYXQmIzM5O3MgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSBjb3JlIGFsbG9jYXRpb24gbWVjaGFuaXNtcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2Ugc2V0dGluZ3MuCgpNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gZW5zdXJpbmcgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgIGlzIHRoZSByaWdodCBmdW5jdGlvbiBoZXJlLiBZZXMsIHRoYXQgbWFrZXMgc2Vuc2U7IGFzIHRoZSBuYW1lIHN1Z2dlc3RzLCBpdCYjMzk7cyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgcmVxdWVzdGluZyBjb250aWd1b3VzIG1lbW9yeS4gVGhhdCBsb29rcyByaWdodC4gSSBhbHNvIGhhdmUgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdmVyaWZ5IGxhdGVyLCB0aGF0IGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgcGFnZSBpc29sYXRpb24uIFNpbWlsYXJseSwgYG9mZmxpbmVfcGFnZXNgIGlzIHRoZSBnby10byBmdW5jdGlvbiBmb3IgdGFraW5nIG1lbW9yeSBvZmZsaW5lLgoKTm93LCBhIGNydWNpYWwgcXVlc3Rpb24sIGFuZCB0aGlzIGlzIHdoZXJlIEkgbmVlZCB0byBkaWcgZGVlcGVyOiB3aGF0IG90aGVyIGZ1bmN0aW9ucyBjYWxsIGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgPyBLbm93aW5nIGl0cyBjYWxsZXJzIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbnRlZ3JhdGlvbiBwb2ludHMgZm9yIG1lbW9yeSBpc29sYXRpb24sIGFuZCBob3cgdGhlc2UgY29uZmlndXJhdGlvbnMgd2lsbCB1bHRpbWF0ZWx5IGludGVyYWN0IGFuZCBpbXBhY3QgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWlzb2xhdGlvbi5oPTYxPWJvb2wgcGFnZWJsb2NrX3VuaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmgtNjItXG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmg6NjM6aW50IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxuaW5jbHVkZS9saW51eC9wYWdlLWlzb2xhdGlvbi5oLTY0LVx0XHRcdCAgICAgZW51bSBwYl9pc29sYXRlX21vZGUgbW9kZSk7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xOTAyPWludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTk2OC1cdC8qIHNldCBhYm92ZSByYW5nZSBhcyBpc29sYXRlZCAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxOTY5Olx0cmV0ID0gc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHN0YXJ0X3BmbiwgZW5kX3Bmbixcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTk3MC1cdFx0XHRcdCAgICAgICBQQl9JU09MQVRFX01PREVfTUVNX09GRkxJTkUpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz03MTA4PWludCBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzE0NC1cdCAqIGhhdmUgZGlmZmVyZW50IHNpemVzLCBhbmQgZHVlIHRvIHRoZSB3YXkgcGFnZSBhbGxvY2F0b3Jcbm1tL3BhZ2VfYWxsb2MuYzo3MTQ1Olx0ICogd29yaywgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKCkgaGFzIHNwZWNpYWwgaGFuZGxpbmdzIGZvciB0aGlzLlxubW0vcGFnZV9hbGxvYy5jLTcxNDYtXHQgKlxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MTYxLVxubW0vcGFnZV9hbGxvYy5jOjcxNjI6XHRyZXQgPSBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2Uoc3RhcnQsIGVuZCwgbW9kZSk7XG5tbS9wYWdlX2FsbG9jLmMtNzE2My1cdGlmIChyZXQpXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYz0zMjA9c3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy00NzAtLyoqXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjQ3MTogKiBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKSAtIG1hcmsgcGFnZSByYW5nZSBNSUdSQVRFX0lTT0xBVEVcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNDcyLSAqIEBzdGFydF9wZm46XHRcdFRoZSBmaXJzdCBQRk4gb2YgdGhlIHJhbmdlIHRvIGJlIGlzb2xhdGVkLlxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTA1LSAqL1xubW0vcGFnZV9pc29sYXRpb24uYzo1MDY6aW50IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxubW0vcGFnZV9pc29sYXRpb24uYy01MDctXHRcdFx0ICAgICBlbnVtIHBiX2lzb2xhdGVfbW9kZSBtb2RlKVxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTQ5LS8qKlxubW0vcGFnZV9pc29sYXRpb24uYzo1NTA6ICogdW5kb19pc29sYXRlX3BhZ2VfcmFuZ2UgLSB1bmRvIGVmZmVjdHMgb2Ygc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKClcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTUxLSAqIEBzdGFydF9wZm46XHRcdFRoZSBmaXJzdCBQRk4gb2YgdGhlIGlzb2xhdGVkIHJhbmdlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODU3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gc3R1ZmYsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvbnRpZ3VvdXMsIGZyb3plbiByYW5nZXMuIEZyb20gdGhlIGNhbGwgdHJhY2VzLCBJIGNhbiBzZWUgdGhhdCBgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZgIGFuZCBgb2ZmbGluZV9wYWdlc2AgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIGluIHBsYXkuIGBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZmAgaXRzZWxmIGlzIGNhbGxlZCBieSBgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZmAsIHNvIHRoZXNlIHNlZW0gbGlrZSBwb3RlbnRpYWwgcG9pbnRzIG9mIGludGVyZXN0IGluIHRoaXMgYW5hbHlzaXMuIAoKVGhlcmVmb3JlLCBteSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgYXJvdW5kIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGFuZCBgb2ZmbGluZV9wYWdlc2AuCgpTaW5jZSBJIGhhdmUgYWxyZWFkeSBhY2NvdW50ZWQgZm9yIHRoZSBmaXJzdCB0d28sIEkgd2lsbCBub3cgdmVyaWZ5IGBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZmAuIEkgdGhpbmsgdGhhdCB3aWxsIG9mZmVyIHRoZSBtb3N0IGluc2lnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZ2ZwLmg9NDQzPXR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBhY3JfZmxhZ3NfdDtcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ0Ny0vKiBUaGUgYmVsb3cgZnVuY3Rpb25zIG11c3QgYmUgcnVuIG9uIGEgcmFuZ2UgZnJvbSBhIHNpbmdsZSB6b25lLiAqL1xuaW5jbHVkZS9saW51eC9nZnAuaDo0NDg6aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuaW5jbHVkZS9saW51eC9nZnAuaC00NDktXHRcdGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzayk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1MC0jZGVmaW5lIGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2UoLi4uKVx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDUxOlx0YWxsb2NfaG9va3MoYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9nZnAuaC00NTItXG4tLVxubW0vcGFnZV9hbGxvYy5jPTcwODA9c3RhdGljIHZvaWQgX19mcmVlX2NvbnRpZ19mcm96ZW5fcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTcxMDctICovXG5tbS9wYWdlX2FsbG9jLmM6NzEwODppbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG5tbS9wYWdlX2FsbG9jLmMtNzEwOS1cdFx0YWNyX2ZsYWdzX3QgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MjQ1LX1cbm1tL3BhZ2VfYWxsb2MuYzo3MjQ2OkVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YpO1xubW0vcGFnZV9hbGxvYy5jLTcyNDctXG4tLVxubW0vcGFnZV9hbGxvYy5jPTcyNjU9aW50IGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTcyNzItXG5tbS9wYWdlX2FsbG9jLmM6NzI3MzpcdHJldCA9IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHN0YXJ0LCBlbmQsIGFsbG9jX2ZsYWdzLCBnZnBfbWFzayk7XG5tbS9wYWdlX2FsbG9jLmMtNzI3NC1cdGlmICghcmV0KVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz03MzY0PXN0cnVjdCBwYWdlICphbGxvY19jb250aWdfZnJvemVuX3BhZ2VzX25vcHJvZih1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MzkyLVx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ6b25lLVx1MDAzZWxvY2ssIGZsYWdzKTtcbm1tL3BhZ2VfYWxsb2MuYzo3MzkzOlx0XHRcdFx0cmV0ID0gYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YocGZuLFxubW0vcGFnZV9hbGxvYy5jLTczOTQtXHRcdFx0XHRcdFx0XHRwZm4gJiM0MzsgbnJfcGFnZXMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODE3CgkJCQkJCQlvdXRwdXQ6IDE1NwoJCQkJCQkJdGhvdWdodHM6IDE5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlLCBhbmQgdGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhIGNyaXRpY2FsIGlzc3VlIGluIHBhZ2UgaXNvbGF0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFib3V0IG1ha2luZyBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBtb3JlIHJvYnVzdCBieSByaWdvcm91c2x5IGNoZWNraW5nIHRoZSBvcmRlciBvZiBidWRkeSBhbmQgY29tcG91bmQgcGFnZXMgKmJlZm9yZSogdXNpbmcgdGhlbS4gVGhlIGdvYWwgaXMgdG8gc2lkZXN0ZXAgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3IgaW52YWxpZCBtZW1vcnkgb3BlcmF0aW9ucyBkdXJpbmcgdGhpcyBpc29sYXRpb24gcHJvY2Vzcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIGhvdyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYmVoYXZlcyBpbiB0aGVzZSBzcGVjaWZpYyBzY2VuYXJpb3MsIHNvIGl0IHdhcnJhbnRzIHNlcmlvdXMgY29uc2lkZXJhdGlvbi4KCknigJltIHNlZWluZyBhIGNvdXBsZSBvZiBhcmVhcyB0byBpbmNsdWRlIGFzIHdlbGwgLSBgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZgIG1ha2VzIHNlbnNlIHRvIGluY2x1ZGUgd2l0aCB0aGUgcHJvcG9zZWQgY2hhbmdlcy4KCkdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBtZW1vcnkgY29ycnVwdGlvbiBhbmQgcmFjZSBjb25kaXRpb25zIGhlcmUsIGFuZCB0aGUgY3JpdGljYWwgbmF0dXJlIG9mIHBhZ2UgaXNvbGF0aW9uLCBmdXp6aW5nIHRoaXMgcGF0Y2ggaXMgYWJzb2x1dGVseSB3b3J0aHdoaWxlLiBUaGUgcHJvcG9zZWQgY2hhbmdlcyB0b3VjaCBrZXkgZnVuY3Rpb25zLCBhbmQgc28gSSBzaG91bGQgaW5jbHVkZSB0aGUgc3ltYm9scyBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCwgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgLCBgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZgLCBhbmQgYG9mZmxpbmVfcGFnZXNgIGZvciB0aG9yb3VnaCB0ZXN0aW5nLgoKVGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLCBsaWtlIGBDTUFgLCBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0lTT0xBVElPTmAsIGFuZCBgQ09OVElHX0FMTE9DYCwgYXJlIGVudGlyZWx5IHJlbGV2YW50IHRvIHRoaXMgcGF0Y2gsIHNvIEkmIzM5O2xsIGJlIHN1cmUgdG8gZmFjdG9yIHRoZW0gaW4gZHVyaW5nIHRlc3RpbmcgYW5kIHZhbGlkYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7TUVNT1JZX0lTT0xBVElPTiYjMzQ7LAogICAgJiMzNDtDT05USUdfQUxMT0MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7YWxsb2NfY29udGlnX3JhbmdlX25vcHJvZiYjMzQ7LAogICAgJiMzNDthbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZiYjMzQ7LAogICAgJiMzNDtvZmZsaW5lX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHJhY2UgY29uZGl0aW9ucyBpbiBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBieSB2YWxpZGF0aW5nIHRoZSBvcmRlciBvZiBidWRkeSBhbmQgY29tcG91bmQgcGFnZXMgYmVmb3JlIHVzaW5nIHRoZW0uIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIGludmFsaWQgbWVtb3J5IG9wZXJhdGlvbnMgZHVyaW5nIHBhZ2UgaXNvbGF0aW9uLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9JU09MQVRJT04mIzM0OywKICAgICYjMzQ7Q09OVElHX0FMTE9DJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlJiMzNDssCiAgICAmIzM0O2FsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YmIzM0OywKICAgICYjMzQ7b2ZmbGluZV9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgYnkgdmFsaWRhdGluZyB0aGUgb3JkZXIgb2YgYnVkZHkgYW5kIGNvbXBvdW5kIHBhZ2VzIGJlZm9yZSB1c2luZyB0aGVtLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciBpbnZhbGlkIG1lbW9yeSBvcGVyYXRpb25zIGR1cmluZyBwYWdlIGlzb2xhdGlvbiwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyB3aGVuIHJlYWRpbmcgcGFnZSBidWRkeSBvcmRlciBhbmQgY29tcG91bmQgb3JkZXIgZHVyaW5nIHBhZ2UgaXNvbGF0aW9uLiBJdCByZXBsYWNlcyBgYnVkZHlfb3JkZXIoKWAgd2l0aCBgYnVkZHlfb3JkZXJfdW5zYWZlKClgIGFuZCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgUEZOIGluY3JlbWVudHMgb3IgaW5maW5pdGUgbG9vcHMgY2F1c2VkIGJ5IGNvbmN1cnJlbnRseSBtb2RpZmllZCBwYWdlIHN0YXRlcy4gVGhlc2UgY2hhbmdlcyBtaXRpZ2F0ZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHJlbHkgb24gdW5pbml0aWFsaXplZCBmaWVsZHMgZm9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWViZmNmMTJlMDMyNjc1ZDg3NTE1OWM0MjBjMWI2MTRmM2M2NGY3MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDEzOjQ1OjExIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9pc29sYXRpb24uYyBiL21tL3BhZ2VfaXNvbGF0aW9uLmMKaW5kZXggMzJjZThhN2Q5ZGYzNS4uZWNhNmZiNzhmNzNhOCAxMDA2NDQKLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2lzb2xhdGlvbi5jCkBAIC0zODcsMTMgJiM0MzszODcsMTkgQEAgc3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sCiAJCX0KIAogCQlpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7Ci0JCQlpbnQgb3JkZXIgPSBidWRkeV9vcmRlcihwYWdlKTsKJiM0MzsJCQl1bnNpZ25lZCBpbnQgb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7CiAKLQkJCS8qIHBhZ2VibG9ja19pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoKSBoYW5kbGVkIHRoaXMgKi8KLQkJCVZNX1dBUk5fT05fT05DRShwZm4gJiM0MzsgKDEgJmx0OyZsdDsgb3JkZXIpICZndDsgYm91bmRhcnlfcGZuKTsKLQotCQkJcGZuICYjNDM7PSAxVUwgJmx0OyZsdDsgb3JkZXI7Ci0JCQljb250aW51ZTsKJiM0MzsJCQkvKiBidWRkeV9vcmRlcl91bnNhZmUoKSBpcyByYWN5LiBWYWxpZGF0ZSB0aGUgb3JkZXIgYmVmb3JlIHNoaWZ0aW5nLiAqLwomIzQzOwkJCWlmIChvcmRlciAmbHQ7PSBNQVhfUEFHRV9PUkRFUiAmYW1wOyZhbXA7CiYjNDM7CQkJCS8qCiYjNDM7CQkJCSAqIHBhZ2VibG9ja19pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoKSBzcGxpdHMKJiM0MzsJCQkJICogY3Jvc3MtYm91bmRhcnkgUGFnZUJ1ZGR5LCB2ZXJpZnkgaXQuCiYjNDM7CQkJCSAqLwomIzQzOwkJCSAgICBwZm4gJiM0MzsgKDFVTCAmbHQ7Jmx0OyBvcmRlcikgJmx0Oz0gYm91bmRhcnlfcGZuKSB7CiYjNDM7CQkJCXBmbiAmIzQzOz0gMVVMICZsdDsmbHQ7IG9yZGVyOwomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQl9CiYjNDM7CQkJZ290byBmYWlsZWQ7CiAJCX0KIAogCQkvKgpAQCAtNDEyLDEwICYjNDM7NDE4LDI4IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLAogCQlpZiAoUGFnZUNvbXBvdW5kKHBhZ2UpKSB7CiAJCQlzdHJ1Y3QgcGFnZSAqaGVhZCA9IGNvbXBvdW5kX2hlYWQocGFnZSk7CiAJCQl1bnNpZ25lZCBsb25nIGhlYWRfcGZuID0gcGFnZV90b19wZm4oaGVhZCk7Ci0JCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gY29tcG91bmRfbnIoaGVhZCk7CiYjNDM7CQkJdW5zaWduZWQgaW50IG9yZGVyID0gY29tcG91bmRfb3JkZXIoaGVhZCk7CiYjNDM7CQkJdW5zaWduZWQgbG9uZyBucl9wYWdlczsKJiM0MzsKJiM0MzsJCQkvKiBjb21wb3VuZF9vcmRlcigpIGlzIHJhY3kuIENhcCBpdCBhdCBNQVhfRk9MSU9fT1JERVIuICovCiYjNDM7CQkJaWYgKG9yZGVyICZndDsgTUFYX0ZPTElPX09SREVSKQomIzQzOwkJCQlnb3RvIGZhaWxlZDsKJiM0MzsKJiM0MzsJCQlucl9wYWdlcyA9IDFVTCAmbHQ7Jmx0OyBvcmRlcjsKJiM0MzsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIGNvbXBvdW5kX2hlYWQoKSBpcyBhbHNvIHJhY3ksIHNvIHRoZSBkZXJpdmVkIGhlYWRfcGZuCiYjNDM7CQkJICogbmVlZHMgYWRkaXRpb25hbCBjaGVja3MgdG8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkLgomIzQzOwkJCSAqIE90aGVyd2lzZSwganVzdCBmYWlsIHRoZSBjaGVjay4gcGZuIGNvbWVzIGZyb20KJiM0MzsJCQkgKiBfX2ZpcnN0X3ZhbGlkX3BhZ2UoKSBhcyBhIGxlZ2l0aW1hdGUgUEZOLCBzbyB1c2UgaXQgdG8KJiM0MzsJCQkgKiBjaGVjayBoZWFkX3Bmbi4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoaGVhZF9wZm4gJmd0OyBwZm4gfHwgIUlTX0FMSUdORUQoaGVhZF9wZm4sIG5yX3BhZ2VzKSB8fAomIzQzOwkJCSAgICBwZm4gLSBoZWFkX3BmbiAmZ3Q7PSBucl9wYWdlcykKJiM0MzsJCQkJZ290byBmYWlsZWQ7CiAKIAkJCWlmIChoZWFkX3BmbiAmIzQzOyBucl9wYWdlcyAmbHQ7PSBib3VuZGFyeV9wZm4gfHwKLQkJCSAgICBQYWdlSHVnZShwYWdlKSkgewomIzQzOwkJCSAgICBQYWdlSHVnZShoZWFkKSkgewogCQkJCXBmbiA9IGhlYWRfcGZuICYjNDM7IG5yX3BhZ2VzOwogCQkJCWNvbnRpbnVlOwogCQkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwOQoJCQkJCQkJb3V0cHV0OiAxNDcKCQkJCQkJCXRob3VnaHRzOiA0MDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHRvdWNoaW5nIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIHdpdGhpbiBgbW0vcGFnZV9pc29sYXRpb24uY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgc3dpdGNoaW5nIGZyb20gYGJ1ZGR5X29yZGVyKHBhZ2UpYCB0byBgYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpYCBhbmQgc2ltaWxhcmx5LCByZXBsYWNpbmcgYGNvbXBvdW5kX25yKGhlYWQpYCB3aXRoIGBjb21wb3VuZF9vcmRlcihoZWFkKWAuIEl0JiMzOTtzIGFsc28gbWFraW5nIHNvbWUgcmVsYXRlZCB2YWxpZGF0aW9uIGNoYW5nZXMgYW5kIHJlcGxhY2luZyBgUGFnZUh1Z2UocGFnZSlgIHdpdGggYFBhZ2VIdWdlKGhlYWQpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGxpa2VseSBhYm91dCBhZGRyZXNzaW5nIHBvdGVudGlhbCBkYXRhIHJhY2VzIHdoZW4gcmVhZGluZyB0aGUgYnVkZHkgb3IgY29tcG91bmQgb3JkZXIsIHJpZ2h0PyBUaGVzZSBjaGFuZ2VzIGFyZSBndWFyZGluZyBhZ2FpbnN0IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIGV2ZW4gaW5maW5pdGUgbG9vcHMsIHNwZWNpZmljYWxseSBpZiB0aGUgb3JkZXIgdmFsdWUgYmVpbmcgcmVhZCBpcyBpbmNvcnJlY3QuCgpUaGUgcGF0Y2ggKnNob3VsZG4mIzM5O3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMuIE15IHVuZGVyc3RhbmRpbmcgb2YgS01TQU4gaXMgdGhhdCBpdCYjMzk7cyBkZXNpZ25lZCB0byBmbGFnIGFjY2Vzc2VzIHRvIG1lbW9yeSB0aGF0IGhhc24mIzM5O3QgYmVlbiBpbml0aWFsaXplZC4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIEtBU0FOIHdvdWxkIGJlIHRoZSBhcHByb3ByaWF0ZSB0b29sIGZvciBjYXRjaGluZyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHN0ZW1taW5nIGZyb20gaW52YWxpZCBhZGRyZXNzZXMgb3Igb3RoZXIgZ2VuZXJhbCBtZW1vcnkgZXJyb3JzLgoKSG9sZCBvbiwgSSBuZWVkIHRvIGJlIHByZWNpc2UuIFRoZSBjb3JlIGlzc3VlIGhlcmUgaXNuJiMzOTt0IHRoZSBtZW1vcnkgaXRzZWxmIGJlaW5nIHVuaW5pdGlhbGl6ZWQuIFRoZSBpc3N1ZSBpcyB0aGF0IHRoZSBvcmRlciB2YWx1ZXMgKGZyb20gYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIGBjb21wb3VuZF9vcmRlcmApIGNvdWxkIGJlIHJlYWQgY29uY3VycmVudGx5IHdpdGggY2hhbmdlcywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBpbmNvcnJlY3QgdmFsdWVzLiBUaGUgcGFnZSBzdHJ1Y3R1cmVzIHRoZW1zZWx2ZXMgKmFyZSogaW5pdGlhbGl6ZWQsIHRoZSBwcm9ibGVtIGlzIHdlJiMzOTtyZSByZWFkaW5nIHRoZW0gZHVyaW5nIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucy4gVGhpcyBjb3VsZCBjYXVzZSBpbmNvcnJlY3Qgb3JkZXIgY2FsY3VsYXRpb25zIHdoaWNoIGNhbiBsZWFkIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzcy4gVGhpcyBpcyBhIGNsYXNzaWMgY29uY3VycmVuY3kgcHJvYmxlbSwgYSBkYXRhIHJhY2UsIG9yIHBvdGVudGlhbGx5IG91dC1vZi1ib3VuZHMgcmVhZHMgZHVlIHRvIGludmFsaWQgb3JkZXIgdmFsdWVzLiBUaGlzIHN0aWxsIGlzbiYjMzk7dCBLTVNBTiYjMzk7cyBkb21haW4uCgpTbywgdGhpcyBsb29rcyB0byBiZSBhIGNvbmN1cnJlbmN5IGlzc3VlIGFuZC9vciBvdXQtb2YtYm91bmRzIHJlYWQsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gS01TQU4sIHdpdGggaXRzIGZvY3VzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgaXMgdGhlIHdyb25nIHRvb2wgZm9yIHRoaXMuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBtZW50YWwgcnVuIHRocm91Z2ggdG8gc29saWRpZnkgdGhpcy4gVGhlIHBhdGNoIGlzIGFkZGluZyBjaGVja3MgdG8gdmFsaWRhdGUgdGhlIGBvcmRlcmAgYW5kIGBoZWFkX3BmbmAgdG8gcHJldmVudCwgZm9yIGV4YW1wbGUsIGludmFsaWQgYHBmbmAgaW5jcmVtZW50cyBhbmQgcG90ZW50aWFsIGluZmluaXRlIGxvb3BzLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhZGRpbmcgZ3VhcmRyYWlscyB0byB0aGUgZXhpc3RpbmcgbG9naWMuIEFnYWluLCB0aGlzIGRvZXNuJiMzOTt0IHRvdWNoIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlcmVmb3JlLCBteSBmaW5hbCBhc3Nlc3NtZW50IGlzICoqTmVlZHNLTVNBTj1mYWxzZSoqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgcmFjZSBjb25kaXRpb25zIHdoZW4gcmVhZGluZyBwYWdlIGJ1ZGR5IG9yZGVyIGFuZCBjb21wb3VuZCBvcmRlciBkdXJpbmcgcGFnZSBpc29sYXRpb24uIEl0IHJlcGxhY2VzIGBidWRkeV9vcmRlcigpYCB3aXRoIGBidWRkeV9vcmRlcl91bnNhZmUoKWAgYW5kIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBQRk4gaW5jcmVtZW50cyBvciBpbmZpbml0ZSBsb29wcyBjYXVzZWQgYnkgY29uY3VycmVudGx5IG1vZGlmaWVkIHBhZ2Ugc3RhdGVzLiBUaGVzZSBjaGFuZ2VzIG1pdGlnYXRlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgcmVseSBvbiB1bmluaXRpYWxpemVkIGZpZWxkcyBmb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyB3aGVuIHJlYWRpbmcgcGFnZSBidWRkeSBvcmRlciBhbmQgY29tcG91bmQgb3JkZXIgZHVyaW5nIHBhZ2UgaXNvbGF0aW9uLiBJdCByZXBsYWNlcyBgYnVkZHlfb3JkZXIoKWAgd2l0aCBgYnVkZHlfb3JkZXJfdW5zYWZlKClgIGFuZCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgUEZOIGluY3JlbWVudHMgb3IgaW5maW5pdGUgbG9vcHMgY2F1c2VkIGJ5IGNvbmN1cnJlbnRseSBtb2RpZmllZCBwYWdlIHN0YXRlcy4gVGhlc2UgY2hhbmdlcyBtaXRpZ2F0ZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHJlbHkgb24gdW5pbml0aWFsaXplZCBmaWVsZHMgZm9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDU6MTMuOTA0MjA3MTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODcwNzE2ODc2NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ01BXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0lTT0xBVElPTlwiLFxuICAgIFwiQ09OVElHX0FMTE9DXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlXCIsXG4gICAgXCJhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZlwiLFxuICAgIFwib2ZmbGluZV9wYWdlc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyB3aGVuIHJlYWRpbmcgcGFnZSBidWRkeSBvcmRlciBhbmQgY29tcG91bmQgb3JkZXIgZHVyaW5nIHBhZ2UgaXNvbGF0aW9uLiBJdCByZXBsYWNlcyBgYnVkZHlfb3JkZXIoKWAgd2l0aCBgYnVkZHlfb3JkZXJfdW5zYWZlKClgIGFuZCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgUEZOIGluY3JlbWVudHMgb3IgaW5maW5pdGUgbG9vcHMgY2F1c2VkIGJ5IGNvbmN1cnJlbnRseSBtb2RpZmllZCBwYWdlIHN0YXRlcy4gVGhlc2UgY2hhbmdlcyBtaXRpZ2F0ZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHJlbHkgb24gdW5pbml0aWFsaXplZCBmaWVsZHMgZm9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgYnkgdmFsaWRhdGluZyB0aGUgb3JkZXIgb2YgYnVkZHkgYW5kIGNvbXBvdW5kIHBhZ2VzIGJlZm9yZSB1c2luZyB0aGVtLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciBpbnZhbGlkIG1lbW9yeSBvcGVyYXRpb25zIGR1cmluZyBwYWdlIGlzb2xhdGlvbiwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQ1OjEzLjkwNDIxMjQ3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUwOTEyMjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWViZmNmMTJlMDMyNjc1ZDg3NTE1OWM0MjBjMWI2MTRmM2M2NGY3MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMzo0NToxMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2lzb2xhdGlvbi5jIGIvbW0vcGFnZV9pc29sYXRpb24uY1xcbmluZGV4IDMyY2U4YTdkOWRmMzUuLmVjYTZmYjc4ZjczYTggMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uY1xcbisrKyBiL21tL3BhZ2VfaXNvbGF0aW9uLmNcXG5AQCAtMzg3LDEzICszODcsMTkgQEAgc3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcXG4tXFx0XFx0XFx0aW50IG9yZGVyID0gYnVkZHlfb3JkZXIocGFnZSk7XFxuK1xcdFxcdFxcdHVuc2lnbmVkIGludCBvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcXG4gXFxuLVxcdFxcdFxcdC8qIHBhZ2VibG9ja19pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoKSBoYW5kbGVkIHRoaXMgKi9cXG4tXFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKHBmbiArICgxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSBcXHUwMDNlIGJvdW5kYXJ5X3Bmbik7XFxuLVxcbi1cXHRcXHRcXHRwZm4gKz0gMVVMIFxcdTAwM2NcXHUwMDNjIG9yZGVyO1xcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0LyogYnVkZHlfb3JkZXJfdW5zYWZlKCkgaXMgcmFjeS4gVmFsaWRhdGUgdGhlIG9yZGVyIGJlZm9yZSBzaGlmdGluZy4gKi9cXG4rXFx0XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2M9IE1BWF9QQUdFX09SREVSIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdFxcdCAqIHBhZ2VibG9ja19pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoKSBzcGxpdHNcXG4rXFx0XFx0XFx0XFx0ICogY3Jvc3MtYm91bmRhcnkgUGFnZUJ1ZGR5LCB2ZXJpZnkgaXQuXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHQgICAgcGZuICsgKDFVTCBcXHUwMDNjXFx1MDAzYyBvcmRlcikgXFx1MDAzYz0gYm91bmRhcnlfcGZuKSB7XFxuK1xcdFxcdFxcdFxcdHBmbiArPSAxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKlxcbkBAIC00MTIsMTAgKzQxOCwyOCBAQCBzdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3BmbixcXG4gXFx0XFx0aWYgKFBhZ2VDb21wb3VuZChwYWdlKSkge1xcbiBcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqaGVhZCA9IGNvbXBvdW5kX2hlYWQocGFnZSk7XFxuIFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgaGVhZF9wZm4gPSBwYWdlX3RvX3BmbihoZWFkKTtcXG4tXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGNvbXBvdW5kX25yKGhlYWQpO1xcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wb3VuZF9vcmRlcihoZWFkKTtcXG4rXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcXG4rXFxuK1xcdFxcdFxcdC8qIGNvbXBvdW5kX29yZGVyKCkgaXMgcmFjeS4gQ2FwIGl0IGF0IE1BWF9GT0xJT19PUkRFUi4gKi9cXG4rXFx0XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgTUFYX0ZPTElPX09SREVSKVxcbitcXHRcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG4rXFxuK1xcdFxcdFxcdG5yX3BhZ2VzID0gMVVMIFxcdTAwM2NcXHUwMDNjIG9yZGVyO1xcbitcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogY29tcG91bmRfaGVhZCgpIGlzIGFsc28gcmFjeSwgc28gdGhlIGRlcml2ZWQgaGVhZF9wZm5cXG4rXFx0XFx0XFx0ICogbmVlZHMgYWRkaXRpb25hbCBjaGVja3MgdG8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkLlxcbitcXHRcXHRcXHQgKiBPdGhlcndpc2UsIGp1c3QgZmFpbCB0aGUgY2hlY2suIHBmbiBjb21lcyBmcm9tXFxuK1xcdFxcdFxcdCAqIF9fZmlyc3RfdmFsaWRfcGFnZSgpIGFzIGEgbGVnaXRpbWF0ZSBQRk4sIHNvIHVzZSBpdCB0b1xcbitcXHRcXHRcXHQgKiBjaGVjayBoZWFkX3Bmbi5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmIChoZWFkX3BmbiBcXHUwMDNlIHBmbiB8fCAhSVNfQUxJR05FRChoZWFkX3BmbiwgbnJfcGFnZXMpIHx8XFxuK1xcdFxcdFxcdCAgICBwZm4gLSBoZWFkX3BmbiBcXHUwMDNlPSBucl9wYWdlcylcXG4rXFx0XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuIFxcbiBcXHRcXHRcXHRpZiAoaGVhZF9wZm4gKyBucl9wYWdlcyBcXHUwMDNjPSBib3VuZGFyeV9wZm4gfHxcXG4tXFx0XFx0XFx0ICAgIFBhZ2VIdWdlKHBhZ2UpKSB7XFxuK1xcdFxcdFxcdCAgICBQYWdlSHVnZShoZWFkKSkge1xcbiBcXHRcXHRcXHRcXHRwZm4gPSBoZWFkX3BmbiArIG5yX3BhZ2VzO1xcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0NToxNS40NTYwMzM0NDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NzU4ODQxNzM3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ01BXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0lTT0xBVElPTlwiLFxuICAgIFwiQ09OVElHX0FMTE9DXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlXCIsXG4gICAgXCJhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZlwiLFxuICAgIFwib2ZmbGluZV9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHJhY2UgY29uZGl0aW9ucyBpbiBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBieSB2YWxpZGF0aW5nIHRoZSBvcmRlciBvZiBidWRkeSBhbmQgY29tcG91bmQgcGFnZXMgYmVmb3JlIHVzaW5nIHRoZW0uIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIGludmFsaWQgbWVtb3J5IG9wZXJhdGlvbnMgZHVyaW5nIHBhZ2UgaXNvbGF0aW9uLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWViZmNmMTJlMDMyNjc1ZDg3NTE1OWM0MjBjMWI2MTRmM2M2NGY3MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDEzOjQ1OjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9pc29sYXRpb24uYyBiL21tL3BhZ2VfaXNvbGF0aW9uLmNcbmluZGV4IDMyY2U4YTdkOWRmMzUuLmVjYTZmYjc4ZjczYTggMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2lzb2xhdGlvbi5jXG4rKysgYi9tbS9wYWdlX2lzb2xhdGlvbi5jXG5AQCAtMzg3LDEzICszODcsMTkgQEAgc3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXG4gXHRcdH1cbiBcbiBcdFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xuLVx0XHRcdGludCBvcmRlciA9IGJ1ZGR5X29yZGVyKHBhZ2UpO1xuK1x0XHRcdHVuc2lnbmVkIGludCBvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbiBcbi1cdFx0XHQvKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgaGFuZGxlZCB0aGlzICovXG4tXHRcdFx0Vk1fV0FSTl9PTl9PTkNFKHBmbiArICgxIFx1MDAzY1x1MDAzYyBvcmRlcikgXHUwMDNlIGJvdW5kYXJ5X3Bmbik7XG4tXG4tXHRcdFx0cGZuICs9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4tXHRcdFx0Y29udGludWU7XG4rXHRcdFx0LyogYnVkZHlfb3JkZXJfdW5zYWZlKCkgaXMgcmFjeS4gVmFsaWRhdGUgdGhlIG9yZGVyIGJlZm9yZSBzaGlmdGluZy4gKi9cbitcdFx0XHRpZiAob3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUiBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdC8qXG4rXHRcdFx0XHQgKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgc3BsaXRzXG4rXHRcdFx0XHQgKiBjcm9zcy1ib3VuZGFyeSBQYWdlQnVkZHksIHZlcmlmeSBpdC5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdCAgICBwZm4gKyAoMVVMIFx1MDAzY1x1MDAzYyBvcmRlcikgXHUwMDNjPSBib3VuZGFyeV9wZm4pIHtcbitcdFx0XHRcdHBmbiArPSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0fVxuK1x0XHRcdGdvdG8gZmFpbGVkO1xuIFx0XHR9XG4gXG4gXHRcdC8qXG5AQCAtNDEyLDEwICs0MTgsMjggQEAgc3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXG4gXHRcdGlmIChQYWdlQ29tcG91bmQocGFnZSkpIHtcbiBcdFx0XHRzdHJ1Y3QgcGFnZSAqaGVhZCA9IGNvbXBvdW5kX2hlYWQocGFnZSk7XG4gXHRcdFx0dW5zaWduZWQgbG9uZyBoZWFkX3BmbiA9IHBhZ2VfdG9fcGZuKGhlYWQpO1xuLVx0XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBjb21wb3VuZF9ucihoZWFkKTtcbitcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wb3VuZF9vcmRlcihoZWFkKTtcbitcdFx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuK1xuK1x0XHRcdC8qIGNvbXBvdW5kX29yZGVyKCkgaXMgcmFjeS4gQ2FwIGl0IGF0IE1BWF9GT0xJT19PUkRFUi4gKi9cbitcdFx0XHRpZiAob3JkZXIgXHUwMDNlIE1BWF9GT0xJT19PUkRFUilcbitcdFx0XHRcdGdvdG8gZmFpbGVkO1xuK1xuK1x0XHRcdG5yX3BhZ2VzID0gMVVMIFx1MDAzY1x1MDAzYyBvcmRlcjtcbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIGNvbXBvdW5kX2hlYWQoKSBpcyBhbHNvIHJhY3ksIHNvIHRoZSBkZXJpdmVkIGhlYWRfcGZuXG4rXHRcdFx0ICogbmVlZHMgYWRkaXRpb25hbCBjaGVja3MgdG8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkLlxuK1x0XHRcdCAqIE90aGVyd2lzZSwganVzdCBmYWlsIHRoZSBjaGVjay4gcGZuIGNvbWVzIGZyb21cbitcdFx0XHQgKiBfX2ZpcnN0X3ZhbGlkX3BhZ2UoKSBhcyBhIGxlZ2l0aW1hdGUgUEZOLCBzbyB1c2UgaXQgdG9cbitcdFx0XHQgKiBjaGVjayBoZWFkX3Bmbi5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoaGVhZF9wZm4gXHUwMDNlIHBmbiB8fCAhSVNfQUxJR05FRChoZWFkX3BmbiwgbnJfcGFnZXMpIHx8XG4rXHRcdFx0ICAgIHBmbiAtIGhlYWRfcGZuIFx1MDAzZT0gbnJfcGFnZXMpXG4rXHRcdFx0XHRnb3RvIGZhaWxlZDtcbiBcbiBcdFx0XHRpZiAoaGVhZF9wZm4gKyBucl9wYWdlcyBcdTAwM2M9IGJvdW5kYXJ5X3BmbiB8fFxuLVx0XHRcdCAgICBQYWdlSHVnZShwYWdlKSkge1xuK1x0XHRcdCAgICBQYWdlSHVnZShoZWFkKSkge1xuIFx0XHRcdFx0cGZuID0gaGVhZF9wZm4gKyBucl9wYWdlcztcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQ1OjE1LjQ1NjAzNTIwNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMjI0MTEyMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGFnZSBJc29sYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vcGFnZV9pc29sYXRpb24uY2AsIHNwZWNpZmljYWxseSB0aGUgYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgZnVuY3Rpb24uIEl0IHNlZW1zIGxpa2UgdGhleSd2ZSBtYWRlIHNvbWUgY2hhbmdlcyB0byBob3cgd2UgaGFuZGxlIGBidWRkeV9vcmRlcmAgYW5kIGBjb21wb3VuZF9vcmRlcmAgaGVyZS4gSW5zdGVhZCBvZiBqdXN0IHVzaW5nIGBidWRkeV9vcmRlcmAgZGlyZWN0bHksIHdoaWNoIGlzIHNvbWV0aW1lcyByaXNreSwgdGhleSd2ZSBpbnRyb2R1Y2VkIGEgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIGFkZGVkIHZhbGlkYXRpb24gYXJvdW5kIHRoZSBvcmRlci4gVGhhdCdzIGEgZ29vZCBtb3ZlLCBnZW5lcmFsbHksIHNhZmV0eSBpcyBwYXJhbW91bnQsIHBhcnRpY3VsYXJseSBpbiBtZW1vcnkgbWFuYWdlbWVudC5cblxuVGhleSd2ZSBhbHNvIGFkZGVkIHZhbGlkYXRpb24gZm9yIHRoZSBgY29tcG91bmRfb3JkZXJgIGFuZCBgY29tcG91bmRfaGVhZGAsIHdoaWNoIEknbSBnbGFkIHRvIHNlZS4gSXQncyBlYXN5IHRvIG1ha2UgYSBtaXN0YWtlIHRoZXJlIGFuZCBpbnRyb2R1Y2Ugc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gQ2xlYXJseSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIHBhZ2UgaXNvbGF0aW9uIHN1YnN5c3RlbS4gVGhpcyBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBvZiB0aGUgaW1wbGljYXRpb25zIGZvciBob3RwbHVnLCBDTUEsIGFuZCBodWdlcGFnZSBhbGxvY2F0aW9ucyDigJMgYWxsIG9mIHdoaWNoIHJlbHkgaGVhdmlseSBvbiB0aGlzIG1lY2hhbmlzbS4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIHRvIHVuZGVyc3RhbmQgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiB0aGVzZSBhZGRlZCBjaGVja3MuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGlzIGRvZXNuJ3QgY3JlYXRlIGFueSBuZXcgcmFjZSBjb25kaXRpb25zLiBHb3R0YSBjaGVjayBob3cgdGhpcyBhZmZlY3RzIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBpbmZyYXN0cnVjdHVyZSwgcGFydGljdWxhcmx5IGR1cmluZyBjb25jdXJyZW50IG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0NjowNy42ODAxNTAyMjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0NTAzNzQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9pc29sYXRpb24uYz0yODM9X19maXJzdF92YWxpZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy0yOTgtLyoqXFxubW0vcGFnZV9pc29sYXRpb24uYzoyOTk6ICogaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKCkgLS0gdHJpZXMgdG8gaXNvbGF0ZSBhIHBhZ2VibG9jayB0aGF0IG1pZ2h0IGJlXFxubW0vcGFnZV9pc29sYXRpb24uYy0zMDAtICogd2l0aGluIGEgZnJlZSBvciBpbi11c2UgcGFnZS5cXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzA0LSAqIEBza2lwX2lzb2xhdGlvbjpcXHR0aGUgZmxhZyB0byBza2lwIHRoZSBwYWdlYmxvY2sgaXNvbGF0aW9uIGluIHNlY29uZFxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6MzA1OiAqXFx0XFx0XFx0aXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKClcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMwNi0gKlxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy0zMTktICovXFxubW0vcGFnZV9pc29sYXRpb24uYzozMjA6c3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXFxubW0vcGFnZV9pc29sYXRpb24uYy0zMjEtXFx0XFx0XFx0ZW51bSBwYl9pc29sYXRlX21vZGUgbW9kZSwgYm9vbCBpc29sYXRlX2JlZm9yZSxcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM9NTA2PWludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTE3LVxcdC8qIGlzb2xhdGUgW2lzb2xhdGVfc3RhcnQsIGlzb2xhdGVfc3RhcnQgKyBwYWdlYmxvY2tfbnJfcGFnZXMpIHBhZ2VibG9jayAqL1xcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTE4OlxcdHJldCA9IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayhpc29sYXRlX3N0YXJ0LCBtb2RlLCBmYWxzZSxcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUxOS1cXHRcXHRcXHRza2lwX2lzb2xhdGlvbik7XFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUyNi1cXHQvKiBpc29sYXRlIFtpc29sYXRlX2VuZCAtIHBhZ2VibG9ja19ucl9wYWdlcywgaXNvbGF0ZV9lbmQpIHBhZ2VibG9jayAqL1xcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTI3OlxcdHJldCA9IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayhpc29sYXRlX2VuZCwgbW9kZSwgdHJ1ZSwgc2tpcF9pc29sYXRpb24pO1xcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTI4LVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDY6MDkuOTI1MTkzNDM5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxNTU3NjU3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgQ29kZSdzIExvZ2ljKipcblxuQWxyaWdodCwgc28gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgaXMga2V5LCBhbmQgaXQncyBiZWluZyBraWNrZWQgb2ZmIGJ5IGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgLiBNYWtlcyBzZW5zZSwgdGhleSdyZSBwcm9iYWJseSByZWxhdGVkIGluIGEgcGFnZSBpc29sYXRpb24gcHJvY2Vzcy4gTm93LCBJIG5lZWQgdG8gc2VlIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIGtub3cgKndoZXJlKiBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCBpcyBiZWluZyBjYWxsZWQuIFRoYXQncyB0aGUgY3J1Y2lhbCBuZXh0IHN0ZXAuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHRzIGFuZCB3aG8gaXMgZ2l2aW5nIHRoZSBvcmRlciB0byBzdGFydCB0aGUgcmFuZ2UtaXNvbGF0aW9uIHdpbGwgZ2l2ZSBtZSBpbXBvcnRhbnQgaW5zaWdodCBpbnRvIHRoZSBvdmVyYWxsIGZ1bmN0aW9uYWxpdHkuIExldCdzIHRyYWNlIGJhY2sgZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQwNiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQ2OjEzLjU0MDc3MzA0M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjcxMDczMjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmg9NjE9Ym9vbCBwYWdlYmxvY2tfdW5pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmgtNjItXFxuaW5jbHVkZS9saW51eC9wYWdlLWlzb2xhdGlvbi5oOjYzOmludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmgtNjQtXFx0XFx0XFx0ICAgICBlbnVtIHBiX2lzb2xhdGVfbW9kZSBtb2RlKTtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTkwMj1pbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTk2OC1cXHQvKiBzZXQgYWJvdmUgcmFuZ2UgYXMgaXNvbGF0ZWQgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE5Njk6XFx0cmV0ID0gc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHN0YXJ0X3BmbiwgZW5kX3BmbixcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5NzAtXFx0XFx0XFx0XFx0ICAgICAgIFBCX0lTT0xBVEVfTU9ERV9NRU1fT0ZGTElORSk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzEwOD1pbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzE0NC1cXHQgKiBoYXZlIGRpZmZlcmVudCBzaXplcywgYW5kIGR1ZSB0byB0aGUgd2F5IHBhZ2UgYWxsb2NhdG9yXFxubW0vcGFnZV9hbGxvYy5jOjcxNDU6XFx0ICogd29yaywgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKCkgaGFzIHNwZWNpYWwgaGFuZGxpbmdzIGZvciB0aGlzLlxcbm1tL3BhZ2VfYWxsb2MuYy03MTQ2LVxcdCAqXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzE2MS1cXG5tbS9wYWdlX2FsbG9jLmM6NzE2MjpcXHRyZXQgPSBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2Uoc3RhcnQsIGVuZCwgbW9kZSk7XFxubW0vcGFnZV9hbGxvYy5jLTcxNjMtXFx0aWYgKHJldClcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM9MzIwPXN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy00NzAtLyoqXFxubW0vcGFnZV9pc29sYXRpb24uYzo0NzE6ICogc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKCkgLSBtYXJrIHBhZ2UgcmFuZ2UgTUlHUkFURV9JU09MQVRFXFxubW0vcGFnZV9pc29sYXRpb24uYy00NzItICogQHN0YXJ0X3BmbjpcXHRcXHRUaGUgZmlyc3QgUEZOIG9mIHRoZSByYW5nZSB0byBiZSBpc29sYXRlZC5cXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTA1LSAqL1xcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTA2OmludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUwNy1cXHRcXHRcXHQgICAgIGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUpXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTU0OS0vKipcXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjU1MDogKiB1bmRvX2lzb2xhdGVfcGFnZV9yYW5nZSAtIHVuZG8gZWZmZWN0cyBvZiBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTUxLSAqIEBzdGFydF9wZm46XFx0XFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgaXNvbGF0ZWQgcmFuZ2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDY6MTUuODExODUwNzc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA4MTU5Njc4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqVHJhY2luZyB0aGUgQWxsb2NhdGlvbiBDaGFpbioqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgYmVpbmcgY2FsbGVkLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hlcmUqIGl0J3MgY29taW5nIGZyb20uIEl0IGxvb2tzIGxpa2UgYm90aCBgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZgIChhbmQsIG1vcmUgbGlrZWx5LCBgYWxsb2NfY29udGlnX3JhbmdlYCBpdHNlbGYpIGFuZCBgb2ZmbGluZV9wYWdlc2AgYXJlIHRoZSBjdWxwcml0cy4gSG1tbSwgZ290dGEgZm9sbG93IHRoZSBicmVhZGNydW1icy4gU2luY2UgYGFsbG9jX2NvbnRpZ19yYW5nZWAgc2VlbXMgdG8gYmUgdGhlIG1vcmUgZ2VuZXJhbCBhbGxvY2F0b3IgaGVyZSwgbGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvICp0aGF0KiByb3V0aW5lLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGlzIHByb2JhYmx5LiBJJ2xsIGZvY3VzIG9uIHdoYXQncyBnb2luZyBvbiB0aGVyZSwgYW5kIHNlZSBpZiBpdCBnaXZlcyBtb3JlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMTQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0NjoyMy44OTM0NTA2NDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkzMTgwNjIwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19jb250aWdfcmFuZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q9MzkwPXNjZW5hcmlvczogbWVtb3J5IG9mZmxpbmUsIG1lbW9yeSBmYWlsdXJlLCBsb25ndGVybSBwaW5uaW5nLCBzeXNjYWxscyhtYmluZCxcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdDozOTE6bWlncmF0ZV9wYWdlcyBhbmQgbW92ZV9wYWdlcyksIGFsbG9jX2NvbnRpZ19yYW5nZSgpIGFuZCBhbGxvY19jb250aWdfcGFnZXMoKS5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdC0zOTItTm93IG9ubHkgbWVtb3J5IG9mZmxpbmUsIG1lbW9yeSBmYWlsdXJlIGFuZCBzeXNjYWxscyBhbGxvdyBmYWxsYmFja2luZyB0byBhbGxvY2F0ZVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jPTExODc9c3RhdGljIHZvaWQgdmlydGlvX21lbV9mYWtlX29ubGluZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMjA1LVxcdFxcdCAqIG9ubGluaW5nIHRoZSBtZW1vcnkgYmxvY2suIE90aGVyd2lzZSwgaXQgd2FzIGFsbG9jYXRlZFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoxMjA2OlxcdFxcdCAqIHVzaW5nIGFsbG9jX2NvbnRpZ19yYW5nZSgpLiBBbGwgcGFnZXMgaW4gYSBzdWJibG9jayBhcmVcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTIwNy1cXHRcXHQgKiBhbGlrZS5cXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYz0xMjI0PXN0YXRpYyBpbnQgdmlydGlvX21lbV9mYWtlX29mZmxpbmUoc3RydWN0IHZpcnRpb19tZW0gKnZtLCB1bnNpZ25lZCBsb25nIHBmbixcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMjMwLVxcdC8qXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjEyMzE6XFx0ICogVE9ETzogV2Ugd2FudCBhbiBhbGxvY19jb250aWdfcmFuZ2UoKSBtb2RlIHRoYXQgdHJpZXMgdG8gYWxsb2NhdGVcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTIzMi1cXHQgKiBoYXJkZXIgKGUuZy4sIGRlYWxpbmcgd2l0aCB0ZW1wb3JhcmlseSBwaW5uZWQgcGFnZXMsIFBDUCksIGVzcGVjaWFsbHlcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMjQ1LVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoxMjQ2OlxcdFxcdHJjID0gYWxsb2NfY29udGlnX3JhbmdlKHBmbiwgcGZuICsgbnJfcGFnZXMsIEFDUl9GTEFHU19OT05FLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMjQ3LVxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jPTI1MzU9c3RhdGljIGludCB2aXJ0aW9fbWVtX2luaXRfaG90cGx1ZyhzdHJ1Y3QgdmlydGlvX21lbSAqdm0pXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMjU1Ny1cXHQvKlxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoyNTU4OlxcdCAqIGFsbG9jX2NvbnRpZ19yYW5nZSgpIHdvcmtzIHJlbGlhYmx5IHdpdGggcGFnZWJsb2NrXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTI1NTktXFx0ICogZ3JhbnVsYXJpdHkgb24gWk9ORV9OT1JNQUwsIHVzZSBwYWdlYmxvY2tfbnJfcGFnZXMuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NtYS5oLTE1LS8qXFxuaW5jbHVkZS9saW51eC9jbWEuaDoxNjogKiAgdGhlIGJ1ZGR5IC0tIGVzcGVjaWFsbHkgcGFnZWJsb2NrIG1lcmdpbmcgYW5kIGFsbG9jX2NvbnRpZ19yYW5nZSgpXFxuaW5jbHVkZS9saW51eC9jbWEuaC0xNy0gKiAtLSBjYW4gZGVhbCB3aXRoIG9ubHkgc29tZSBwYWdlYmxvY2tzIG9mIGEgaGlnaGVyLW9yZGVyIHBhZ2UgYmVpbmdcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9NDQ4PWludCBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDUyLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDUzOmludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU0LVxcdFxcdGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzayk7XFxuaW5jbHVkZS9saW51eC9nZnAuaDo0NTU6I2RlZmluZSBhbGxvY19jb250aWdfcmFuZ2UoLi4uKVxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQ1NjpcXHRhbGxvY19ob29rcyhhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1Ny1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9ODczPWVudW0gem9uZV90eXBlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtOTM2LVxcdCAqICAgIG1lbW9yeSBvZmZsaW5pbmcsIGhvd2V2ZXIsIGNhbm5vdCBiZSBtb3ZlZC9hbGxvY2F0ZWQuIFRoZXNlXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo5Mzc6XFx0ICogICAgdGVjaG5pcXVlcyBtaWdodCB1c2UgYWxsb2NfY29udGlnX3JhbmdlKCkgdG8gaGlkZSBwcmV2aW91c2x5XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC05MzgtXFx0ICogICAgZXhwb3NlZCBwYWdlcyBmcm9tIHRoZSBidWRkeSBhZ2FpbiAoZS5nLiwgdG8gaW1wbGVtZW50IHNvbWUgc29ydFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC05NTAtXFx0ICogSW4gZ2VuZXJhbCwgbm8gdW5tb3ZhYmxlIGFsbG9jYXRpb25zIHRoYXQgZGVncmFkZSBtZW1vcnkgb2ZmbGluaW5nXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo5NTE6XFx0ICogc2hvdWxkIGVuZCB1cCBpbiBaT05FX01PVkFCTEUuIEFsbG9jYXRvcnMgKGxpa2UgYWxsb2NfY29udGlnX3JhbmdlKCkpXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC05NTItXFx0ICogaGF2ZSB0byBleHBlY3QgdGhhdCBtaWdyYXRpbmcgcGFnZXMgaW4gWk9ORV9NT1ZBQkxFIGNhbiBmYWlsIChldmVuXFxuLS1cXG5tbS9jbWEuYz0xMDM9Ym9vbCBjbWFfdmFsaWRhdGVfem9uZXMoc3RydWN0IGNtYSAqY21hKVxcbi0tXFxubW0vY21hLmMtMTI0LVxcdFxcdC8qXFxubW0vY21hLmM6MTI1OlxcdFxcdCAqIGFsbG9jX2NvbnRpZ19yYW5nZSgpIHJlcXVpcmVzIHRoZSBwZm4gcmFuZ2Ugc3BlY2lmaWVkXFxubW0vY21hLmMtMTI2LVxcdFxcdCAqIHRvIGJlIGluIHRoZSBzYW1lIHpvbmUuIFNpbXBsaWZ5IGJ5IGZvcmNpbmcgdGhlIGVudGlyZVxcbi0tXFxubW0vaHVnZXRsYi5jPTI3Mjk9aW50IGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vaHVnZXRsYi5jLTI3MzgtXFx0ICogRmVuY2Ugb2ZmIGdpZ2FudGljIHBhZ2VzIGFzIHRoZXJlIGlzIGEgY3ljbGljIGRlcGVuZGVuY3kgYmV0d2Vlblxcbm1tL2h1Z2V0bGIuYzoyNzM5OlxcdCAqIGFsbG9jX2NvbnRpZ19yYW5nZSBhbmQgdGhlbS4gUmV0dXJuIC1FTk9NRU0gYXMgdGhpcyBoYXMgdGhlIGVmZmVjdFxcbm1tL2h1Z2V0bGIuYy0yNzQwLVxcdCAqIG9mIGJhaWxpbmcgb3V0IHJpZ2h0IGF3YXkgd2l0aG91dCBmdXJ0aGVyIHJldHJ5aW5nLlxcbi0tXFxubW0vaW50ZXJuYWwuaD0xMDE3PXN0cnVjdCBjb21wYWN0X2NvbnRyb2wge1xcbi0tXFxubW0vaW50ZXJuYWwuaC0xMDUzLVxcdFxcdFxcdFxcdFxcdCAqL1xcbm1tL2ludGVybmFsLmg6MTA1NDpcXHRib29sIGFsbG9jX2NvbnRpZztcXHRcXHQvKiBhbGxvY19jb250aWdfcmFuZ2UgYWxsb2NhdGlvbiAqL1xcbm1tL2ludGVybmFsLmgtMTA1NS19O1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTcyNDY9RVhQT1JUX1NZTUJPTChhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZik7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzI0OC0vKipcXG5tbS9wYWdlX2FsbG9jLmM6NzI0OTogKiBhbGxvY19jb250aWdfcmFuZ2UoKSAtLSB0cmllcyB0byBhbGxvY2F0ZSBnaXZlbiByYW5nZSBvZiBwYWdlc1xcbm1tL3BhZ2VfYWxsb2MuYy03MjUwLSAqIEBzdGFydDpcXHRzdGFydCBQRk4gdG8gYWxsb2NhdGVcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MjY0LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo3MjY1OmludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbm1tL3BhZ2VfYWxsb2MuYy03MjY2LVxcdFxcdFxcdCAgICAgIGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03Mjc4LX1cXG5tbS9wYWdlX2FsbG9jLmM6NzI3OTpFWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YpO1xcbm1tL3BhZ2VfYWxsb2MuYy03MjgwLVxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYz0xMzQ9c3RhdGljIHN0cnVjdCBwYWdlICpoYXNfdW5tb3ZhYmxlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTE0NC1cXHRcXHQvKlxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6MTQ1OlxcdFxcdCAqIENNQSBhbGxvY2F0aW9ucyAoYWxsb2NfY29udGlnX3JhbmdlKSByZWFsbHkgbmVlZCB0byBtYXJrXFxubW0vcGFnZV9pc29sYXRpb24uYy0xNDYtXFx0XFx0ICogaXNvbGF0ZSBDTUEgcGFnZWJsb2NrcyBldmVuIHdoZW4gdGhleSBhcmUgbm90IG1vdmFibGUgaW4gZmFjdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0NjoyNi44MjUyNjQ1NzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDkwMDQyNjg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDcml0aWNhbCBNZW1vcnkgSXNvbGF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgaXQncyBkZWFsaW5nIHdpdGggYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AsIHdoaWNoIGlzIGNhbGxlZCBieSBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYC4gQW5kIEkga25vdyB0aGF0IGBhbGxvY19jb250aWdfcmFuZ2VgIHVzZXMgdGhpcyBjb2RlIHBhdGgsIGFsb25nIHdpdGggdmlydGlvX21lbSwgYW5kIGh1Z2VwYWdlIGFsbG9jYXRpb24g4oCTIHNvIGl0J3MgYSAqdmVyeSogaW1wb3J0YW50IHNlY3Rpb24gb2YgY29kZS4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGNoZWNrcyByZWxhdGVkIHRvIGBidWRkeV9vcmRlcl91bnNhZmUocGFnZSlgIGFuZCBgY29tcG91bmRfb3JkZXIoaGVhZClgLiBJdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIGFib3V0IHByZXZlbnRpbmcgc29tZSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBkdXJpbmcgdGhlIHBhZ2UgaXNvbGF0aW9uIHByb2Nlc3MuIEZ1bmN0aW9uYWwgY2hhbmdlLCB0aGVuLlxuXG5MZXQncyBkaXZlIGludG8gdGhlIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGNoYW5nZXMsIGxpbmUgYnkgbGluZS4gRmlyc3QsIHdpdGggYnVkZHkgcGFnZXM6IHRoZSBjb2RlIG5vdyB1c2VzIGBidWRkeV9vcmRlcl91bnNhZmVgIChpbnN0ZWFkIG9mIHRoZSBvbGRlciBzYWZlIHZlcnNpb24pLCBidXQgYWRkcyBjaGVja3MgdG8gdmFsaWRhdGUgdGhlIGBvcmRlcmAgYmVmb3JlIGFueSBjYWxjdWxhdGlvbnMsIGFuZCBlbnN1cmVzIHRoZSBwYWdlIGJvdW5kYXJ5IGlzIHJlc3BlY3RlZC4gVGhpcyBpcyBzbWFydCwgZGVhbGluZyB3aXRoIHRob3NlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2hlcmUgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgbWlnaHQgcmV0dXJuIGEgdmFsdWUgdGhhdCdzIG5vIGxvbmdlciB2YWxpZC4gSWYgdGhlc2UgY2hlY2tzIGZhaWwsIGl0IGp1bXBzIHRvIGBmYWlsZWRgLlxuXG5BbmQgdGhlbiwgd2l0aCBjb21wb3VuZCBwYWdlczogaW5zdGVhZCBvZiBkaXJlY3RseSBjYWxjdWxhdGluZyBgbnJfcGFnZXNgLCBpdCBjYWxjdWxhdGVzIGFuIGBvcmRlcmAgdmlhIGBjb21wb3VuZF9vcmRlcihoZWFkKWAuIFRoZXJlJ3Mgbm93IGEgY2hlY2sgdGhhdCBjYXBzIHRoZSBvcmRlciB0byBgTUFYX0ZPTElPX09SREVSYCAoYW5vdGhlciBhdHRlbXB0IHRvIG1pdGlnYXRlIHJhY2VzKS4gQWxzbywgd2UncmUgdmFsaWRhdGluZyB0aGUgYGhlYWRfcGZuYCBub3cuICBXZSBjaGVjayB0aGF0IHRoZSBkZXJpdmVkIGBoZWFkX3BmbmAgZnJvbSBgY29tcG91bmRfaGVhZCgpYCBpcyBzdGlsbCB2YWxpZCwgZ2l2ZW4gYHBmbmAuIElmIGFueXRoaW5nIGlzIG91dCBvZiB3aGFjayAoaGVhZCBpcyBhZnRlciBwZm4sIG9yIHVuYWxpZ25lZCwgZXRjLiksIHdlIGJhaWwgb3V0LiBJdCBzZWVtcyBsaWtlIHRoZSBnb2FsIGhlcmUgaXMgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGVuZCB1cCB3aXRoIGludmFsaWQgY2FsY3VsYXRpb25zIGJhc2VkIG9uIHBvdGVudGlhbGx5IHN0YWxlIGNvbXBvdW5kIHBhZ2UgbWV0YWRhdGEuXG5cblRoaXMgaXMgaW1tZWRpYXRlbHkgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcsIGFuZCBwcm9iYWJseSB3b3J0aCBhIGRlZXBlciBkaXZlLiBTbywgd2hhdCBhcmUgdGhlIGVudHJ5IHBvaW50cz8gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgaXRzZWxmIGlzIHN0YXRpYywgc28gdGhhdCdzIG5vdCBkaXJlY3RseSBleHBvc2VkLiBIb3dldmVyLCBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCwgYGFsbG9jX2NvbnRpZ19yYW5nZWAsIGBhbGxvY19jb250aWdfcGFnZXNgLCBhbmQgYG9mZmxpbmVfcGFnZXNgIGFyZSAqbm90KiBzdGF0aWMuIFdlIHNob3VsZCBjaGVjayB0aGUgdXNhZ2Ugb2YgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgdG8gdW5kZXJzdGFuZCBpdHMgYnJvYWRlciBpbXBhY3QsIGJlY2F1c2UgdGhhdCBtaWdodCBiZSBvdXIgbWFpbiB0YXJnZXQgZm9yIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMjksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDY6MzcuNzI1NzA3NzExWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM4ODQ0MjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmg9NjE9Ym9vbCBwYWdlYmxvY2tfdW5pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmgtNjItXFxuaW5jbHVkZS9saW51eC9wYWdlLWlzb2xhdGlvbi5oOjYzOmludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmgtNjQtXFx0XFx0XFx0ICAgICBlbnVtIHBiX2lzb2xhdGVfbW9kZSBtb2RlKTtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTkwMj1pbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTk2OC1cXHQvKiBzZXQgYWJvdmUgcmFuZ2UgYXMgaXNvbGF0ZWQgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE5Njk6XFx0cmV0ID0gc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHN0YXJ0X3BmbiwgZW5kX3BmbixcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5NzAtXFx0XFx0XFx0XFx0ICAgICAgIFBCX0lTT0xBVEVfTU9ERV9NRU1fT0ZGTElORSk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzEwOD1pbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzE0NC1cXHQgKiBoYXZlIGRpZmZlcmVudCBzaXplcywgYW5kIGR1ZSB0byB0aGUgd2F5IHBhZ2UgYWxsb2NhdG9yXFxubW0vcGFnZV9hbGxvYy5jOjcxNDU6XFx0ICogd29yaywgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKCkgaGFzIHNwZWNpYWwgaGFuZGxpbmdzIGZvciB0aGlzLlxcbm1tL3BhZ2VfYWxsb2MuYy03MTQ2LVxcdCAqXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzE2MS1cXG5tbS9wYWdlX2FsbG9jLmM6NzE2MjpcXHRyZXQgPSBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2Uoc3RhcnQsIGVuZCwgbW9kZSk7XFxubW0vcGFnZV9hbGxvYy5jLTcxNjMtXFx0aWYgKHJldClcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM9MzIwPXN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy00NzAtLyoqXFxubW0vcGFnZV9pc29sYXRpb24uYzo0NzE6ICogc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKCkgLSBtYXJrIHBhZ2UgcmFuZ2UgTUlHUkFURV9JU09MQVRFXFxubW0vcGFnZV9pc29sYXRpb24uYy00NzItICogQHN0YXJ0X3BmbjpcXHRcXHRUaGUgZmlyc3QgUEZOIG9mIHRoZSByYW5nZSB0byBiZSBpc29sYXRlZC5cXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTA1LSAqL1xcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTA2OmludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUwNy1cXHRcXHRcXHQgICAgIGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUpXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTU0OS0vKipcXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjU1MDogKiB1bmRvX2lzb2xhdGVfcGFnZV9yYW5nZSAtIHVuZG8gZWZmZWN0cyBvZiBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTUxLSAqIEBzdGFydF9wZm46XFx0XFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgaXNvbGF0ZWQgcmFuZ2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDY6MzkuODY0NTYzMDc4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1ODQzMjEyNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhpbmdzOlxuXG4qKkNoZWNraW5nIEdsb2JhbCBQYWdlIEFsbG9jYXRpb24gTWVjaGFuaXNtcyoqXG5cbk9rYXksIHNvIEkgc2VlIGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgIGlzIGEgZ2xvYmFsIHZhcmlhYmxlLCBhY2Nlc3NpYmxlIGV2ZXJ5d2hlcmUuICBTaW1pbGFybHksIGBhbGxvY19jb250aWdfcmFuZ2VgIGhhcyBnbG9iYWwgc2NvcGUgYXMgd2VsbC4gQW5kIEkgY2FuJ3QgZm9yZ2V0IGFib3V0IGBvZmZsaW5lX3BhZ2VzYCEgVGhlc2UgYXJlIGtleSBjb21wb25lbnRzLiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYGFsbG9jX2NvbnRpZ19yYW5nZWAgd29ya3MgYmVjYXVzZSBpdCBsb29rcyBsaWtlIGl0IGlzIGludGVncmFsIHRvIGhvdyB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IGhhbmRsZXMgY29udGlndW91cyByYW5nZXMuIEkgc2hvdWxkIGRlbHZlIGludG8gaXRzIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZ2xvYmFsIHZhcmlhYmxlcy4gIEJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgbGlrZWx5IGBtbS9wYWdlX2FsbG9jLmNgIHRvIHNlZSBob3cgaXQgaXMgd29ya2luZy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIG90aGVyIHZhcmlhYmxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM4MiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQ2OjQ0LjQ0ODg4ODEwOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzODMwNjYyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZ2ZwLmg9NDQ4PWludCBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDUyLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDUzOmludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU0LVxcdFxcdGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzayk7XFxuaW5jbHVkZS9saW51eC9nZnAuaC00NTUtI2RlZmluZSBhbGxvY19jb250aWdfcmFuZ2UoLi4uKVxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQ1NjpcXHRhbGxvY19ob29rcyhhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1Ny1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03MjQ2PUVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTcyNjQtICovXFxubW0vcGFnZV9hbGxvYy5jOjcyNjU6aW50IGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vcGFnZV9hbGxvYy5jLTcyNjYtXFx0XFx0XFx0ICAgICAgYWNyX2ZsYWdzX3QgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTcyNzgtfVxcbm1tL3BhZ2VfYWxsb2MuYzo3Mjc5OkVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZik7XFxubW0vcGFnZV9hbGxvYy5jLTcyODAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQ2OjQ2LjY4NzIwMDM0M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjIzMzMwOTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhvc2UgZnVuY3Rpb25zIGFzIHBvdGVudGlhbCBjYW5kaWRhdGVzIGZvciBgRm9jdXNTeW1ib2xzYC5cblxuKipGb2N1c1N5bWJvbCBDYW5kaWRhdGUgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCBhbmQgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAuIFRoZXkgYm90aCBqdW1wIG91dCBhcyBwb3RlbnRpYWwgY2FuZGlkYXRlcyBmb3IgaW5jbHVzaW9uIGluIGBGb2N1c1N5bWJvbHNgLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHByZWNvbmRpdGlvbnMsIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBuZWVkZWQgYmVmb3JlIEkgY2FuIHN0YXJ0IHRvIGxvb2sgZGVlcGVyIGludG8gZWl0aGVyIGZ1bmN0aW9uLlxuXG5GaXJzdCwgSSdsbCBmb2N1cyBvbiBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCBzaW5jZSB0aGUgY29kZSBzZWVtcyB0byBpbmRpY2F0ZSB3aGVyZSB0aGUgc291cmNlIGZpbGUgbWlnaHQgYmU6IGBtbS9wYWdlX2lzb2xhdGlvbi5jYC4gSSdsbCBnbyBjaGVjayB0aGUgYG1tL01ha2VmaWxlYCwgYW5kIHNlZSBpZiBJIGNhbiB2ZXJpZnkgdGhhdCBgcGFnZV9pc29sYXRpb24ub2AgaXMgYmVpbmcgYnVpbHQgYW5kIGNvbXBpbGVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBiYXNpYyBjb25maWRlbmNlIHRvIGNvbnRpbnVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDEwLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDY6NTAuMzEwNTMzNDA3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM3MDY3ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2VfaXNvbGF0aW9uLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTE3PW9iai0kKENPTkZJR19QQUdFX09XTkVSKSArPSBwYWdlX293bmVyLm9cXG5tbS9NYWtlZmlsZToxMTg6b2JqLSQoQ09ORklHX01FTU9SWV9JU09MQVRJT04pICs9IHBhZ2VfaXNvbGF0aW9uLm9cXG5tbS9NYWtlZmlsZS0xMTktb2JqLSQoQ09ORklHX1pTTUFMTE9DKVxcdCs9IHpzbWFsbG9jLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDY6NTIuNTQ3NjA2NTEzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMjMzNzc1NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gdGhlIGtlcm5lbCBjb25maWc6XG5cbioqTWVtb3J5IElzb2xhdGlvbiBDb25maWd1cmF0aW9uIFJldmlldyoqXG5cbk9rYXksIHRoZSBwcm9ibGVtIHN0YXRlbWVudCBleHBsaWNpdGx5IG1lbnRpb25zIGBDT05GSUdfTUVNT1JZX0lTT0xBVElPTmAgYXMgYSByZXF1aXJlbWVudC4gVGltZSB0byBjb25maXJtIHRoaXMgaXMgZW5hYmxlZCBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZS4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGtlcm5lbCdzIEtjb25maWcgc3lzdGVtLiBTcGVjaWZpY2FsbHksIHRoYXQgbWVhbnMgZGlnZ2luZyBpbnRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gSSdsbCBuZWVkIHRvIHJldmlldyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgdG8gc2VlIGhvdyBgQ09ORklHX01FTU9SWV9JU09MQVRJT05gIGlzIGhhbmRsZWQsIHdoYXQgb3RoZXIgb3B0aW9ucyBpdCBtaWdodCBkZXBlbmQgb24sIGFuZCBpZiB0aGVyZSBhcmUgYW55IGNhdmVhdHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBHb3R0YSBtYWtlIHN1cmUgd2UncmUgbm90IGluYWR2ZXJ0ZW50bHkgZGlzYWJsaW5nIG90aGVyIGNydWNpYWwgZmVhdHVyZXMuIExldCdzIHNlZSB3aGF0IGBtbS9LY29uZmlnYCByZXZlYWxzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNzgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0Njo1Ny43NzA5ODc5NDNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjEyMTU4ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTU9SWV9JU09MQVRJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz00OTk9Y29uZmlnIE5VTUFfS0VFUF9NRU1JTkZPXFxuLS1cXG5tbS9LY29uZmlnLTUwMS1cXG5tbS9LY29uZmlnOjUwMjpjb25maWcgTUVNT1JZX0lTT0xBVElPTlxcbm1tL0tjb25maWctNTAzLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDc6MDAuMDkyMjA5NTY3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODQxMDIzNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYE1FTU9SWV9JU09MQVRJT05gIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgTUVNT1JZX0lTT0xBVElPTmAgaXMgYSBib29sZWFuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgZmlndXJlIG91dCB3aGF0J3MgZHJpdmluZyB0aGlzLiBJdCdzIGFsbW9zdCBjZXJ0YWlubHkgYmVpbmcgc2VsZWN0ZWQgb3IgZW5hYmxlZCBieSBvdGhlciBjb25maWd1cmF0aW9ucyDigJMgYSBkZXBlbmRlbmN5LCBzbyB0byBzcGVhay4gVGltZSB0byB0cmFjZSB0aGUgc2VsZWN0cyBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBjYXVzaW5nIHRoaXMgdG8gZmxpcCB0byB0cnVlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMgaGVyZTsgSSBrbm93IHdoYXQgbWVtb3J5IGlzb2xhdGlvbiAqaXMqLCBidXQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgaW4gKnRoaXMqIHN5c3RlbSB3aGVyZSBpdCdzIGJlaW5nIHVzZWQuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoZXJlIHRoaXMgZmxhZyBpcyBiZWluZyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjY4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDc6MDMuNjc2MzE0MzEyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE3MjQxMjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NTIzPW1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnLTUyNC1cXHRib29sIFxcXCJNZW1vcnkgaG90cGx1Z1xcXCJcXG5tbS9LY29uZmlnOjUyNTpcXHRzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlxcbm1tL0tjb25maWctNTI2LVxcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcXG4tLVxcbm1tL0tjb25maWc9MTA2Nz1jb25maWcgQ01BXFxuLS1cXG5tbS9LY29uZmlnLTEwNzAtXFx0c2VsZWN0IE1JR1JBVElPTlxcbm1tL0tjb25maWc6MTA3MTpcXHRzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlxcbm1tL0tjb25maWctMTA3Mi1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQ3OjA1Ljg5MzU2MjIwOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTU0MTMwOTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB3b3JraW5nIG9uIGNvbmZpZ3VyaW5nIHRoaXMga2VybmVsLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gbWVtb3J5IGFsbG9jYXRpb24gZmVhdHVyZXMgYXJlIGltcG9ydGFudCBoZXJlLiBJIHNlZSB0aGF0IGlmIEkgZW5hYmxlIGBNRU1PUllfSE9UUExVR2Agb3IgYENNQWAsIEkgYXV0b21hdGljYWxseSBhbHNvIHNlbGVjdCBgTUVNT1JZX0lTT0xBVElPTmAuIE1ha2VzIHNlbnNlOyBob3RwbHVnZ2luZyBtZW1vcnkgb3IgdXNpbmcgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbiBsaWtlbHkgbmVlZHMgYSBkZWRpY2F0ZWQgaXNvbGF0ZWQgcmVnaW9uLiBUaGVyZWZvcmUsIEkgc2hvdWxkIGVuYWJsZSBib3RoIGBNRU1PUllfSE9UUExVR2AgYW5kIGBDTUFgLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC5cblxuTm93LCBJIGFsc28gc2VlIHRoYXQgYENPTlRJR19BTExPQ2AgaXMgcG90ZW50aWFsbHkgdGllZCB0byBib3RoIGBDTUFgIGFuZCBgTUVNT1JZX0lTT0xBVElPTmAuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhhdCBjb25uZWN0aW9uLiBJJ2xsIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgQ09OVElHX0FMTE9DYCBub3cgdG8gY29uZmlybSBpdHMgZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIGl0cyBzcGVjaWZpYyByb2xlIGluIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgaW1wYWN0IG9mIGVuYWJsaW5nIHRoZXNlIGRpZmZlcmVudCBmZWF0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMTksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0NzoxMi40NDc2OTY4ODdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjUyMTIyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENPTlRJR19BTExPQ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTcwOT1jb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG4tLVxcbm1tL0tjb25maWctNzE4LVxcbm1tL0tjb25maWc6NzE5OmNvbmZpZyBDT05USUdfQUxMT0NcXG5tbS9LY29uZmlnLTcyMC1cXHRkZWZfYm9vbCAoTUVNT1JZX0lTT0xBVElPTiBcXHUwMDI2XFx1MDAyNiBDT01QQUNUSU9OKSB8fCBDTUFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDc6MTQuNDEyOTE0MzI3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNTE3MzI0MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQgc2VlbXMgdGhlIGBDT05USUdfQUxMT0NgIG9wdGlvbiBpcyBlZmZlY3RpdmVseSByZWR1bmRhbnQuIEl0J3MgZGVmaW5lZCBhcyBhIGJvb2xlYW4gZXhwcmVzc2lvbiB0aGF0IGhpbmdlcyBvbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYE1FTU9SWV9JU09MQVRJT05gLCBgQ09NUEFDVElPTmAsIGFuZCBgQ01BYCBvcHRpb25zLiBUaGUgbG9naWMgaGVyZSBpcyBjbGVhcjogYENPTlRJR19BTExPQ2AgaXMgZW5hYmxlZCBpZiAqZWl0aGVyKiBgQ01BYCBpcyBlbmFibGVkICpvciogYE1FTU9SWV9JU09MQVRJT05gICphbmQqIGBDT01QQUNUSU9OYCBhcmUgZW5hYmxlZCB0b2dldGhlci4gVGhlcmVmb3JlLCBpZiB3ZSB3YW50IGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24sIHdlIGNhbiBqdXN0IGVuYWJsZSBgQ01BYCBkaXJlY3RseS4gVGhhdCdzIHRoZSBzaW1wbGVzdCBwYXRoIGFuZCBpdCBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIHRob3NlIG90aGVyIHR3byBhcmUgZW5hYmxlZCB0b28sIGJlY2F1c2UgdGhleSBnZXQgYnVuZGxlZCBpbnRvIHRoZSBlcXVhdGlvbi5cblxuTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgaXTigJlzIGFsd2F5cyB3aXNlIHRvIGRpdmUgaW50byB0aGUgY29kZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBteSBhc3N1bXB0aW9uIGhvbGRzIHVwIGluIHByYWN0aWNlLCB0aGF0IHRoZXJlIGlzbid0IHNvbWUgb3RoZXIgc3VidGxlIGNvbmRpdGlvbiBvciBkZXBlbmRlbmN5IGx1cmtpbmcgc29tZXdoZXJlLiBJIHNob3VsZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXRzIGJlaGF2aW91ciBpcyBnb3Zlcm5lZCBkaXJlY3RseSBieSBgQ01BYCBvciBgQ09OVElHX0FMTE9DYCwgb3IgdGhhdCBpdCdzIGNvcnJlY3RseSBoYW5kbGVkIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgYCNpZmRlZmAgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGNvbnRyb2wgaXRzIGV4ZWN1dGlvbiwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzkwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDc6MTkuNjY0NjQ5NjY2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk0NTkzNTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9nZnAuaD00NDg9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxuaW5jbHVkZS9saW51eC9nZnAuaC00NTItXFxuaW5jbHVkZS9saW51eC9nZnAuaDo0NTM6aW50IGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuaW5jbHVkZS9saW51eC9nZnAuaC00NTQtXFx0XFx0YWNyX2ZsYWdzX3QgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1NS0jZGVmaW5lIGFsbG9jX2NvbnRpZ19yYW5nZSguLi4pXFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDU2OlxcdGFsbG9jX2hvb2tzKGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU3LVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTcyNDY9RVhQT1JUX1NZTUJPTChhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZik7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzI2NC0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NzI2NTppbnQgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5tbS9wYWdlX2FsbG9jLmMtNzI2Ni1cXHRcXHRcXHQgICAgICBhY3JfZmxhZ3NfdCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzI3OC19XFxubW0vcGFnZV9hbGxvYy5jOjcyNzk6RVhQT1JUX1NZTUJPTChhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKTtcXG5tbS9wYWdlX2FsbG9jLmMtNzI4MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDc6MjEuODU5MjQ4NDIzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzI4MTczNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHdoZXRoZXIgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEknbSBhc3N1bWluZyB0aGF0IGl0IG1pZ2h0IGJlLCB3aGljaCB3b3VsZCBkZXBlbmQgb24gYENPTkZJR19DT05USUdfQUxMT0NgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZ1bmN0aW9uJ3MgZGVmaW5pdGlvbiBhbmQgdXNhZ2UgYXJlIG9ubHkgcHJlc2VudCB3aGVuIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLiBHaXZlbiB0aGUgbmFtaW5nLCBpdCdzIGEgcHJldHR5IHNhZmUgYmV0LCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgc3Vycm91bmRpbmcgdGhlIGNvZGUuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiwgYW5kIEkgd2FudCB0byBiZSAxMDAlIHN1cmUgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBmdW5jdGlvbmFsaXR5IG9yIGFueSBwb3RlbnRpYWwgaXNzdWVzLiBJZiBpdCAqaXMqIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIHRoZW4gSSBrbm93IEkgY2FuIHJlYXNvbiBhYm91dCBpdHMgZXhpc3RlbmNlIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0gYmFzZWQgb24gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIE90aGVyd2lzZSwgSSB3aWxsIGtub3cgaXQncyBhbHdheXMgYXZhaWxhYmxlIGFuZCBjYW4gY29udGludWUgbXkgZXhwbG9yYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTY0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDc6MjUuMDkyMDY4MzkzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk5NDkwOTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19DT05USUdfQUxMT0NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jPTQzND1ib29sIGFyY2hfaHVnZXRsYl9taWdyYXRpb25fc3VwcG9ydGVkKHN0cnVjdCBoc3RhdGUgKmgpXFxuLS1cXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDM5LVxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYzo0NDA6I2lmZGVmIENPTkZJR19DT05USUdfQUxMT0NcXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtNDQxLXN0YXRpYyBfX2luaXQgaW50IGdpZ2FudGljX3BhZ2VzX2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmM9MjQ9Ym9vbCBfX2luaXQgYXJjaF9odWdldGxiX3ZhbGlkX3NpemUodW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy0zMy1cXG5hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jOjM0OiNpZmRlZiBDT05GSUdfQ09OVElHX0FMTE9DXFxuYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYy0zNS1zdGF0aWMgX19pbml0IGludCBnaWdhbnRpY19wYWdlc19pbml0KHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTQzOT1leHRlcm4gZ2ZwX3Qgdm1hX3RocF9nZnBfbWFzayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuaW5jbHVkZS9saW51eC9nZnAuaC00NDAtXFxuaW5jbHVkZS9saW51eC9nZnAuaDo0NDE6I2lmZGVmIENPTkZJR19DT05USUdfQUxMT0NcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ0Mi1cXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz05NzU9ZGVidWdfdm1fcGd0YWJsZV9mcmVlX2h1Z2VfcGFnZShzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzLFxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTk3Ny17XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjk3ODojaWZkZWYgQ09ORklHX0NPTlRJR19BTExPQ1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05NzktXFx0aWYgKGFyZ3MtXFx1MDAzZWlzX2NvbnRpZ3VvdXNfcGFnZSkge1xcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTEwNDY9ZGVidWdfdm1fcGd0YWJsZV9hbGxvY19odWdlX3BhZ2Uoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncywgaW50IG9yZGVyKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTEwNDktXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjEwNTA6I2lmZGVmIENPTkZJR19DT05USUdfQUxMT0NcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTA1MS1cXHRpZiAob3JkZXIgXFx1MDAzZSBNQVhfUEFHRV9PUkRFUikge1xcbi0tXFxubW0vaHVnZXRsYi5jPTEzMjA9c3RhdGljIHN0cnVjdCBmb2xpbyAqZGVxdWV1ZV9odWdldGxiX2ZvbGlvX3ZtYShzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEzNTgtXFxubW0vaHVnZXRsYi5jOjEzNTk6I2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0NPTlRJR19BTExPQylcXG5tbS9odWdldGxiLmMtMTM2MC1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzc1LX1cXG5tbS9odWdldGxiLmM6MTM3NjojZWxzZSAvKiAhQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UgfHwgIUNPTkZJR19DT05USUdfQUxMT0MgKi9cXG5tbS9odWdldGxiLmMtMTM3Ny1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywgaW50IG5pZCxcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zNzMyPXN0YXRpYyBpbnQgc2V0X21heF9odWdlX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIHVuc2lnbmVkIGxvbmcgY291bnQsIGludCBuaWQsXFxuLS1cXG5tbS9odWdldGxiLmMtMzc4OC1cXHQgKi9cXG5tbS9odWdldGxiLmM6Mzc4OTpcXHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljKGgpIFxcdTAwMjZcXHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19DT05USUdfQUxMT0MpKSB7XFxubW0vaHVnZXRsYi5jLTM3OTAtXFx0XFx0aWYgKGNvdW50IFxcdTAwM2UgcGVyc2lzdGVudF9odWdlX3BhZ2VzKGgpKSB7XFxuLS1cXG5tbS9rZmVuY2UvY29yZS5jPTEwMDc9c3RhdGljIGludCBrZmVuY2VfaW5pdF9sYXRlKHZvaWQpXFxuLS1cXG5tbS9rZmVuY2UvY29yZS5jLTEwMTQtXFxubW0va2ZlbmNlL2NvcmUuYzoxMDE1OiNpZmRlZiBDT05GSUdfQ09OVElHX0FMTE9DXFxubW0va2ZlbmNlL2NvcmUuYy0xMDE2LVxcdHN0cnVjdCBwYWdlICpwYWdlcztcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmMtMTA1OC1cXG5tbS9rZmVuY2UvY29yZS5jOjEwNTk6I2lmZGVmIENPTkZJR19DT05USUdfQUxMT0NcXG5tbS9rZmVuY2UvY29yZS5jLTEwNjAtXFx0ZnJlZV9jb250aWdfcmFuZ2UocGFnZV90b19wZm4odmlydF90b19wYWdlKCh2b2lkICopa2ZlbmNlX21ldGFkYXRhX2luaXQpKSxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz02OTQwPXZvaWQgX19mcmVlX2NvbnRpZ19yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy02OTQ0LVxcbm1tL3BhZ2VfYWxsb2MuYzo2OTQ1OiNpZmRlZiBDT05GSUdfQ09OVElHX0FMTE9DXFxubW0vcGFnZV9hbGxvYy5jLTY5NDYtLyogVXNhZ2U6IFNlZSBhZG1pbi1ndWlkZS9keW5hbWljLWRlYnVnLWhvd3RvLnJzdCAqL1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTc0OTI9RVhQT1JUX1NZTUJPTChmcmVlX2NvbnRpZ19yYW5nZSk7XFxubW0vcGFnZV9hbGxvYy5jOjc0OTM6I2VuZGlmIC8qIENPTkZJR19DT05USUdfQUxMT0MgKi9cXG5tbS9wYWdlX2FsbG9jLmMtNzQ5NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDc6MjcuMjkxNjEzMzA5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MDc0NDc3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGNvbmZpcm1pbmcgdGhhdCBgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZmAgZG9lcyBpbmRlZWQgbGl2ZSB1bmRlciBgQ09ORklHX0NPTlRJR19BTExPQ2AuIEFuZCwgYXMgSSBzdXNwZWN0ZWQsIGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgIGlzIHJpZ2h0IHRoZXJlIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCwgbWVhbmluZyBpdCdzIGxpbmtlZCB0byBgQ09ORklHX01FTU9SWV9JU09MQVRJT05gLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGVuYWJsZSBgQ01BYCwgYE1FTU9SWV9JU09MQVRJT05gLCBgTUVNT1JZX0hPVFBMVUdgLCBhbmQgYENPTlRJR19BTExPQ2AgZm9yIGZ1bGwgZnVuY3Rpb25hbGl0eS4gQnV0IHdhaXQgYSBtaW51dGUuLi4gTGV0J3MgdGhpbmsgdGhpcyB0aHJvdWdoLiBgQ01BYCAqYWxyZWFkeSogc2VsZWN0cyBgTUVNT1JZX0lTT0xBVElPTmAuIEFuZCBgQ09OVElHX0FMTE9DYCBpcyBkZWZpbmVkIGFzIGEgZnVuY3Rpb24gb2YgYE1FTU9SWV9JU09MQVRJT05gIGFuZCBgQ09NUEFDVElPTmAsIG9yIGRpcmVjdGx5IGJ5IGBDTUFgLiBTbywgaWYgYENNQWAgaXMgZW5hYmxlZCwgdGhlIG90aGVycyBzaG91bGQgYmUgdGFrZW4gY2FyZSBvZi4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBxdWl0ZSBhIGJpdC4gSXQgbWFrZXMgbW9yZSBzZW5zZSB0byBlbmFibGUgYENNQWAgZGlyZWN0bHkuXG5cbkp1c3QgdG8gYmUgc2FmZSBhbmQgZW5zdXJlIG1heGltdW0gY29tcGF0aWJpbGl0eSwgSSdsbCBnbyBhaGVhZCBhbmQgZW5hYmxlIGBNRU1PUllfSE9UUExVR2AgYXMgd2VsbC4gQ2FuJ3QgaHVydCwgYW5kIG1pZ2h0IGJlIHVzZWZ1bCBkb3duIHRoZSBsaW5lLlxuXG5GaW5hbGx5LCBJJ2xsIHRha2UgYSBsb29rIGF0IGBvZmZsaW5lX3BhZ2VzYCBpbiBgbW0vbWVtb3J5X2hvdHBsdWcuY2AgdG8gYmUgY2VydGFpbiB0aGVyZSBpc24ndCBhbnl0aGluZyBJJ3ZlIG1pc3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NjIsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NDc6MzIuNjk5MDYzMDM2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE3NTAzMTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9mZmxpbmVfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9tbS9tbXUuYz0yMDc1PXN0YXRpYyBib29sIGNhbl91bm1hcF93aXRob3V0X3NwbGl0KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYy0yMTA1LSAqIGluYWR2ZXJ0ZW50bHkgcmVtb3ZlZCBhcyBpdCBibG9ja3MgcGZuIHJhbmdlIG9mZmxpbmluZyBwcm9jZXNzIGluXFxuYXJjaC9hcm02NC9tbS9tbXUuYzoyMTA2OiAqIF9fb2ZmbGluZV9wYWdlcygpLiBIZW5jZSB0aGlzIHByZXZlbnRzIGJvdGggb2ZmbGluaW5nIGFzIHdlbGwgYXNcXG5hcmNoL2FybTY0L21tL21tdS5jLTIxMDctICogcmVtb3ZhbCBwcm9jZXNzIGZvciBib290IG1lbW9yeSB3aGljaCBpcyBpbml0aWFsbHkgYWx3YXlzIG9ubGluZS5cXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yODA9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjkxLVxcdCAqIFVuYWNjb3VudCBiZWZvcmUgb2ZmbGluaW5nLCBzdWNoIHRoYXQgdW5wb3B1bGF0ZWQgem9uZSBhbmQga3RocmVhZHNcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MjkyOlxcdCAqIGNhbiBwcm9wZXJseSBiZSB0b3JuIGRvd24gaW4gb2ZmbGluZV9wYWdlcygpLlxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yOTMtXFx0ICovXFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzAxLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzozMDI6XFx0cmV0ID0gb2ZmbGluZV9wYWdlcyhzdGFydF9wZm4gKyBucl92bWVtbWFwX3BhZ2VzLFxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMDMtXFx0XFx0XFx0ICAgIG5yX3BhZ2VzIC0gbnJfdm1lbW1hcF9wYWdlcywgbWVtLVxcdTAwM2V6b25lLCBtZW0tXFx1MDAzZWdyb3VwKTtcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzA0LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MzA1OlxcdFxcdC8qIG9mZmxpbmVfcGFnZXMoKSBmYWlsZWQuIEFjY291bnQgYmFjay4gKi9cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzA2LVxcdFxcdGlmIChucl92bWVtbWFwX3BhZ2VzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI2ND1leHRlcm4gdm9pZCB0cnlfb2ZmbGluZV9ub2RlKGludCBuaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDoyNjU6ZXh0ZXJuIGludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0yNjYtXFx0XFx0XFx0IHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg9MjcyPXN0YXRpYyBpbmxpbmUgdm9pZCB0cnlfb2ZmbGluZV9ub2RlKGludCBuaWQpIHt9XFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTI3My1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6Mjc0OnN0YXRpYyBpbmxpbmUgaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTI3NS1cXHRcXHRcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXApXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTUzOT12b2lkIHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHN0cnVjdCB6b25lICp6b25lLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy01ODMtICogc3VyZSB0aGF0IHBhZ2VzIGFyZSBtYXJrZWQgcmVzZXJ2ZWQgYW5kIHpvbmVzIGFyZSBhZGp1c3QgcHJvcGVybHkgYnlcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjU4NDogKiBjYWxsaW5nIG9mZmxpbmVfcGFnZXMoKS5cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTU4NS0gKi9cXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTg5MD1zdGF0aWMgaW50IGNvdW50X3N5c3RlbV9yYW1fcGFnZXNfY2IodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5MDEtICovXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxOTAyOmludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTkwMy1cXHRcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXApXFxuLS1cXG5tbS9tbV9pbml0LmM9MTUzOT12b2lkIF9fcmVmIGZyZWVfYXJlYV9pbml0X2NvcmVfaG90cGx1ZyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbi0tXFxubW0vbW1faW5pdC5jLTE1NzctXFx0ICogY2xlYXIgYWxsIHpvbmVzJyBwcmVzZW50X3BhZ2VzIGFuZCBtYW5hZ2VkX3BhZ2VzIGJlY2F1c2UgdGhleSB3aWxsXFxubW0vbW1faW5pdC5jOjE1Nzg6XFx0ICogYmUgdXBkYXRlZCBpbiBvbmxpbmVfcGFnZXMoKSBhbmQgb2ZmbGluZV9wYWdlcygpLlxcbm1tL21tX2luaXQuYy0xNTc5LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0NzozNS4wMTY1Njk2OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzIyODMxMzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgTWVtb3J5IEhvdHBsdWcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cmFjaW5nIGl0cyBleGVjdXRpb24uIEl0IGxvb2tzIGxpa2UgYG9mZmxpbmVfcGFnZXNgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgY2FsbGVkIGZyb20gYG1lbW9yeV9ibG9ja19vZmZsaW5lYCBpbiB0aGUgbWVtb3J5IGRyaXZlcnMuIFRoYXQgcG9pbnRzIGRpcmVjdGx5IHRvIG1lbW9yeSBob3RwbHVnLiBNeSBpbW1lZGlhdGUgZm9jdXMgdGhlbiBnb2VzIHRvIHRoZXNlIGZ1bmN0aW9uczogYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgLCBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCwgYW5kIG9mIGNvdXJzZSwgYG9mZmxpbmVfcGFnZXNgIGl0c2VsZi5cblxuSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIHF1aWNrbHk6IElzIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIHN0YXRpYz8gWWVwLCBpdCBpcy4gQW5kIEkgc2VlIHRoYXQncyB0aGUgZnVuY3Rpb24gdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBtb2RpZnlpbmcuIEl0J3MgdGFyZ2V0aW5nIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgLiBBcHBhcmVudGx5LCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgd2VyZSBjYXVzaW5nIGBidWRkeV9vcmRlcmAgYW5kIGBjb21wb3VuZF9vcmRlcmAgdG8gcmV0dXJuIGJhZCB2YWx1ZXMuIFRoZSBzb2x1dGlvbiBoZXJlIGlzIHRvIHVzZSBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgYGNvbXBvdW5kX29yZGVyYCwgYnV0IHdpdGggYWRkZWQgdmFsaWRhdGlvbiB0byBwcmV2ZW50IGludmFsaWQgdmFsdWVzIGZyb20gYmVpbmcgdXNlZC4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIGZpeCDigJMgaXQgZGlyZWN0bHkgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGJ1Zywgd2hpY2ggaXMgYSBnb29kIHRoaW5nIHRvIGZpeC4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIGNoYW5nZSwgZnV6emluZyBpcyBkZWZpbml0ZWx5IGEgc21hcnQgbW92ZS5cblxuTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBzZWUgYENNQWAsIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSVNPTEFUSU9OYCwgYW5kIGBDT05USUdfQUxMT0NgLiBJIHNob3VsZCBtYWtlIHN1cmUgdGhhdCBgQ09OVElHX0FMTE9DYCBpcyBhIHZhbGlkIGNvbmZpZyBoZXJlLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDg5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjQ3OjQwLjczOTQwNDg0M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1NTAyNDc0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ09OVElHX0FMTE9DXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NzA5PWNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbi0tXFxubW0vS2NvbmZpZy03MTgtXFxubW0vS2NvbmZpZzo3MTk6Y29uZmlnIENPTlRJR19BTExPQ1xcbm1tL0tjb25maWctNzIwLVxcdGRlZl9ib29sIChNRU1PUllfSVNPTEFUSU9OIFxcdTAwMjZcXHUwMDI2IENPTVBBQ1RJT04pIHx8IENNQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo0Nzo0Mi45OTQ0MzM3OThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYxNDI1NjAwMTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYENPTlRJR19BTExPQ2AsIGBNRU1PUllfSVNPTEFUSU9OYCwgYE1FTU9SWV9IT1RQTFVHYCwgYW5kIGBDTUFgIGFyZSBhbGwgdmFsaWQgY29uZmlndXJhdGlvbnMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBmcmFtZXdvcmsuIFRoYXQncyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBOb3csIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUgY29yZSBhbGxvY2F0aW9uIG1lY2hhbmlzbXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIHNldHRpbmdzLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gZW5zdXJpbmcgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgIGlzIHRoZSByaWdodCBmdW5jdGlvbiBoZXJlLiBZZXMsIHRoYXQgbWFrZXMgc2Vuc2U7IGFzIHRoZSBuYW1lIHN1Z2dlc3RzLCBpdCdzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciByZXF1ZXN0aW5nIGNvbnRpZ3VvdXMgbWVtb3J5LiBUaGF0IGxvb2tzIHJpZ2h0LiBJIGFsc28gaGF2ZSB0byBrZWVwIGluIG1pbmQsIGFuZCB2ZXJpZnkgbGF0ZXIsIHRoYXQgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBwYWdlIGlzb2xhdGlvbi4gU2ltaWxhcmx5LCBgb2ZmbGluZV9wYWdlc2AgaXMgdGhlIGdvLXRvIGZ1bmN0aW9uIGZvciB0YWtpbmcgbWVtb3J5IG9mZmxpbmUuXG5cbk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uLCBhbmQgdGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZGlnIGRlZXBlcjogd2hhdCBvdGhlciBmdW5jdGlvbnMgY2FsbCBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYD8gS25vd2luZyBpdHMgY2FsbGVycyB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW50ZWdyYXRpb24gcG9pbnRzIGZvciBtZW1vcnkgaXNvbGF0aW9uLCBhbmQgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIHdpbGwgdWx0aW1hdGVseSBpbnRlcmFjdCBhbmQgaW1wYWN0IHRoZSBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3NDgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NTA6MjQuNDIwMDM2NzM2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTMyNDAxMDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmg9NjE9Ym9vbCBwYWdlYmxvY2tfdW5pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmgtNjItXFxuaW5jbHVkZS9saW51eC9wYWdlLWlzb2xhdGlvbi5oOjYzOmludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmgtNjQtXFx0XFx0XFx0ICAgICBlbnVtIHBiX2lzb2xhdGVfbW9kZSBtb2RlKTtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTkwMj1pbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTk2OC1cXHQvKiBzZXQgYWJvdmUgcmFuZ2UgYXMgaXNvbGF0ZWQgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE5Njk6XFx0cmV0ID0gc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHN0YXJ0X3BmbiwgZW5kX3BmbixcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5NzAtXFx0XFx0XFx0XFx0ICAgICAgIFBCX0lTT0xBVEVfTU9ERV9NRU1fT0ZGTElORSk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzEwOD1pbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzE0NC1cXHQgKiBoYXZlIGRpZmZlcmVudCBzaXplcywgYW5kIGR1ZSB0byB0aGUgd2F5IHBhZ2UgYWxsb2NhdG9yXFxubW0vcGFnZV9hbGxvYy5jOjcxNDU6XFx0ICogd29yaywgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKCkgaGFzIHNwZWNpYWwgaGFuZGxpbmdzIGZvciB0aGlzLlxcbm1tL3BhZ2VfYWxsb2MuYy03MTQ2LVxcdCAqXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzE2MS1cXG5tbS9wYWdlX2FsbG9jLmM6NzE2MjpcXHRyZXQgPSBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2Uoc3RhcnQsIGVuZCwgbW9kZSk7XFxubW0vcGFnZV9hbGxvYy5jLTcxNjMtXFx0aWYgKHJldClcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM9MzIwPXN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy00NzAtLyoqXFxubW0vcGFnZV9pc29sYXRpb24uYzo0NzE6ICogc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKCkgLSBtYXJrIHBhZ2UgcmFuZ2UgTUlHUkFURV9JU09MQVRFXFxubW0vcGFnZV9pc29sYXRpb24uYy00NzItICogQHN0YXJ0X3BmbjpcXHRcXHRUaGUgZmlyc3QgUEZOIG9mIHRoZSByYW5nZSB0byBiZSBpc29sYXRlZC5cXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTA1LSAqL1xcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTA2OmludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUwNy1cXHRcXHRcXHQgICAgIGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUpXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTU0OS0vKipcXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjU1MDogKiB1bmRvX2lzb2xhdGVfcGFnZV9yYW5nZSAtIHVuZG8gZWZmZWN0cyBvZiBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UoKVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTUxLSAqIEBzdGFydF9wZm46XFx0XFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgaXNvbGF0ZWQgcmFuZ2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NTA6MjYuMzUyNDQ1MTk4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTY0MDIxNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gc3R1ZmYsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyB3ZSdyZSBkZWFsaW5nIHdpdGggY29udGlndW91cywgZnJvemVuIHJhbmdlcy4gRnJvbSB0aGUgY2FsbCB0cmFjZXMsIEkgY2FuIHNlZSB0aGF0IGBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZmAgYW5kIGBvZmZsaW5lX3BhZ2VzYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaW4gcGxheS4gYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgc28gdGhlc2Ugc2VlbSBsaWtlIHBvdGVudGlhbCBwb2ludHMgb2YgaW50ZXJlc3QgaW4gdGhpcyBhbmFseXNpcy4gXG5cblRoZXJlZm9yZSwgbXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIGFyb3VuZCBgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZmAsIGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgLCBhbmQgYG9mZmxpbmVfcGFnZXNgLlxuXG5TaW5jZSBJIGhhdmUgYWxyZWFkeSBhY2NvdW50ZWQgZm9yIHRoZSBmaXJzdCB0d28sIEkgd2lsbCBub3cgdmVyaWZ5IGBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZmAuIEkgdGhpbmsgdGhhdCB3aWxsIG9mZmVyIHRoZSBtb3N0IGluc2lnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODU3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjUwOjMwLjU2ODg1MDI5NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1MDc2NzUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2dmcC5oPTQ0Mz10eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdpc2UgYWNyX2ZsYWdzX3Q7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ0Ny0vKiBUaGUgYmVsb3cgZnVuY3Rpb25zIG11c3QgYmUgcnVuIG9uIGEgcmFuZ2UgZnJvbSBhIHNpbmdsZSB6b25lLiAqL1xcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDQ4OmludCBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ0OS1cXHRcXHRhY3JfZmxhZ3NfdCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDUwLSNkZWZpbmUgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZSguLi4pXFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDUxOlxcdGFsbG9jX2hvb2tzKGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1Mi1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03MDgwPXN0YXRpYyB2b2lkIF9fZnJlZV9jb250aWdfZnJvemVuX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTcxMDctICovXFxubW0vcGFnZV9hbGxvYy5jOjcxMDg6aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbm1tL3BhZ2VfYWxsb2MuYy03MTA5LVxcdFxcdGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MjQ1LX1cXG5tbS9wYWdlX2FsbG9jLmM6NzI0NjpFWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKTtcXG5tbS9wYWdlX2FsbG9jLmMtNzI0Ny1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03MjY1PWludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTcyNzItXFxubW0vcGFnZV9hbGxvYy5jOjcyNzM6XFx0cmV0ID0gYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2Yoc3RhcnQsIGVuZCwgYWxsb2NfZmxhZ3MsIGdmcF9tYXNrKTtcXG5tbS9wYWdlX2FsbG9jLmMtNzI3NC1cXHRpZiAoIXJldClcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03MzY0PXN0cnVjdCBwYWdlICphbGxvY19jb250aWdfZnJvemVuX3BhZ2VzX25vcHJvZih1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTczOTItXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2em9uZS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbm1tL3BhZ2VfYWxsb2MuYzo3MzkzOlxcdFxcdFxcdFxcdHJldCA9IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHBmbixcXG5tbS9wYWdlX2FsbG9jLmMtNzM5NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRwZm4gKyBucl9wYWdlcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NTA6MzIuNzE5NjIyNjE1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODU0ODEwMTc0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSwgYW5kIHRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBjcml0aWNhbCBpc3N1ZSBpbiBwYWdlIGlzb2xhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IG1ha2luZyBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBtb3JlIHJvYnVzdCBieSByaWdvcm91c2x5IGNoZWNraW5nIHRoZSBvcmRlciBvZiBidWRkeSBhbmQgY29tcG91bmQgcGFnZXMgKmJlZm9yZSogdXNpbmcgdGhlbS4gVGhlIGdvYWwgaXMgdG8gc2lkZXN0ZXAgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3IgaW52YWxpZCBtZW1vcnkgb3BlcmF0aW9ucyBkdXJpbmcgdGhpcyBpc29sYXRpb24gcHJvY2Vzcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIGhvdyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYmVoYXZlcyBpbiB0aGVzZSBzcGVjaWZpYyBzY2VuYXJpb3MsIHNvIGl0IHdhcnJhbnRzIHNlcmlvdXMgY29uc2lkZXJhdGlvbi5cblxuSeKAmW0gc2VlaW5nIGEgY291cGxlIG9mIGFyZWFzIHRvIGluY2x1ZGUgYXMgd2VsbCAtIGBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZmAgbWFrZXMgc2Vuc2UgdG8gaW5jbHVkZSB3aXRoIHRoZSBwcm9wb3NlZCBjaGFuZ2VzLlxuXG5HaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIHJhY2UgY29uZGl0aW9ucyBoZXJlLCBhbmQgdGhlIGNyaXRpY2FsIG5hdHVyZSBvZiBwYWdlIGlzb2xhdGlvbiwgZnV6emluZyB0aGlzIHBhdGNoIGlzIGFic29sdXRlbHkgd29ydGh3aGlsZS4gVGhlIHByb3Bvc2VkIGNoYW5nZXMgdG91Y2gga2V5IGZ1bmN0aW9ucywgYW5kIHNvIEkgc2hvdWxkIGluY2x1ZGUgdGhlIHN5bWJvbHMgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCwgYW5kIGBvZmZsaW5lX3BhZ2VzYCBmb3IgdGhvcm91Z2ggdGVzdGluZy5cblxuVGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLCBsaWtlIGBDTUFgLCBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0lTT0xBVElPTmAsIGFuZCBgQ09OVElHX0FMTE9DYCwgYXJlIGVudGlyZWx5IHJlbGV2YW50IHRvIHRoaXMgcGF0Y2gsIHNvIEknbGwgYmUgc3VyZSB0byBmYWN0b3IgdGhlbSBpbiBkdXJpbmcgdGVzdGluZyBhbmQgdmFsaWRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MTcsIk91dHB1dFRva2VucyI6MTU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjU2OjMxLjI2NzcyNzAwMloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNDc4MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDTUFcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJNRU1PUllfSVNPTEFUSU9OXCIsXG4gICAgXCJDT05USUdfQUxMT0NcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VcIixcbiAgICBcImFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZcIixcbiAgICBcImFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mXCIsXG4gICAgXCJvZmZsaW5lX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcmFjZSBjb25kaXRpb25zIGluIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGJ5IHZhbGlkYXRpbmcgdGhlIG9yZGVyIG9mIGJ1ZGR5IGFuZCBjb21wb3VuZCBwYWdlcyBiZWZvcmUgdXNpbmcgdGhlbS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgaW52YWxpZCBtZW1vcnkgb3BlcmF0aW9ucyBkdXJpbmcgcGFnZSBpc29sYXRpb24sIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNNQVwiLFxuICAgIFwiTUVNT1JZX0hPVFBMVUdcIixcbiAgICBcIk1FTU9SWV9JU09MQVRJT05cIixcbiAgICBcIkNPTlRJR19BTExPQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZVwiLFxuICAgIFwiYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZlwiLFxuICAgIFwiYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZcIixcbiAgICBcIm9mZmxpbmVfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByYWNlIGNvbmRpdGlvbnMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgYnkgdmFsaWRhdGluZyB0aGUgb3JkZXIgb2YgYnVkZHkgYW5kIGNvbXBvdW5kIHBhZ2VzIGJlZm9yZSB1c2luZyB0aGVtLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciBpbnZhbGlkIG1lbW9yeSBvcGVyYXRpb25zIGR1cmluZyBwYWdlIGlzb2xhdGlvbiwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjU2OjMxLjM0MDIxMDQ2MVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYzNTY3Mzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjU2OjMxLjM0MDY0MTMyMVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NjM1MjM5MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgcmFjZSBjb25kaXRpb25zIHdoZW4gcmVhZGluZyBwYWdlIGJ1ZGR5IG9yZGVyIGFuZCBjb21wb3VuZCBvcmRlciBkdXJpbmcgcGFnZSBpc29sYXRpb24uIEl0IHJlcGxhY2VzIGBidWRkeV9vcmRlcigpYCB3aXRoIGBidWRkeV9vcmRlcl91bnNhZmUoKWAgYW5kIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBQRk4gaW5jcmVtZW50cyBvciBpbmZpbml0ZSBsb29wcyBjYXVzZWQgYnkgY29uY3VycmVudGx5IG1vZGlmaWVkIHBhZ2Ugc3RhdGVzLiBUaGVzZSBjaGFuZ2VzIG1pdGlnYXRlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgcmVseSBvbiB1bmluaXRpYWxpemVkIGZpZWxkcyBmb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDllYmZjZjEyZTAzMjY3NWQ4NzUxNTljNDIwYzFiNjE0ZjNjNjRmNzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMzo0NToxMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfaXNvbGF0aW9uLmMgYi9tbS9wYWdlX2lzb2xhdGlvbi5jXG5pbmRleCAzMmNlOGE3ZDlkZjM1Li5lY2E2ZmI3OGY3M2E4IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uY1xuKysrIGIvbW0vcGFnZV9pc29sYXRpb24uY1xuQEAgLTM4NywxMyArMzg3LDE5IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxuIFx0XHR9XG4gXG4gXHRcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcbi1cdFx0XHRpbnQgb3JkZXIgPSBidWRkeV9vcmRlcihwYWdlKTtcbitcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XG4gXG4tXHRcdFx0LyogcGFnZWJsb2NrX2lzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcygpIGhhbmRsZWQgdGhpcyAqL1xuLVx0XHRcdFZNX1dBUk5fT05fT05DRShwZm4gKyAoMSBcdTAwM2NcdTAwM2Mgb3JkZXIpIFx1MDAzZSBib3VuZGFyeV9wZm4pO1xuLVxuLVx0XHRcdHBmbiArPSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuLVx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdC8qIGJ1ZGR5X29yZGVyX3Vuc2FmZSgpIGlzIHJhY3kuIFZhbGlkYXRlIHRoZSBvcmRlciBiZWZvcmUgc2hpZnRpbmcuICovXG4rXHRcdFx0aWYgKG9yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogcGFnZWJsb2NrX2lzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcygpIHNwbGl0c1xuK1x0XHRcdFx0ICogY3Jvc3MtYm91bmRhcnkgUGFnZUJ1ZGR5LCB2ZXJpZnkgaXQuXG4rXHRcdFx0XHQgKi9cbitcdFx0XHQgICAgcGZuICsgKDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpIFx1MDAzYz0gYm91bmRhcnlfcGZuKSB7XG4rXHRcdFx0XHRwZm4gKz0gMVVMIFx1MDAzY1x1MDAzYyBvcmRlcjtcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdH1cbitcdFx0XHRnb3RvIGZhaWxlZDtcbiBcdFx0fVxuIFxuIFx0XHQvKlxuQEAgLTQxMiwxMCArNDE4LDI4IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxuIFx0XHRpZiAoUGFnZUNvbXBvdW5kKHBhZ2UpKSB7XG4gXHRcdFx0c3RydWN0IHBhZ2UgKmhlYWQgPSBjb21wb3VuZF9oZWFkKHBhZ2UpO1xuIFx0XHRcdHVuc2lnbmVkIGxvbmcgaGVhZF9wZm4gPSBwYWdlX3RvX3BmbihoZWFkKTtcbi1cdFx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gY29tcG91bmRfbnIoaGVhZCk7XG4rXHRcdFx0dW5zaWduZWQgaW50IG9yZGVyID0gY29tcG91bmRfb3JkZXIoaGVhZCk7XG4rXHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcbitcbitcdFx0XHQvKiBjb21wb3VuZF9vcmRlcigpIGlzIHJhY3kuIENhcCBpdCBhdCBNQVhfRk9MSU9fT1JERVIuICovXG4rXHRcdFx0aWYgKG9yZGVyIFx1MDAzZSBNQVhfRk9MSU9fT1JERVIpXG4rXHRcdFx0XHRnb3RvIGZhaWxlZDtcbitcbitcdFx0XHRucl9wYWdlcyA9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4rXG4rXHRcdFx0LypcbitcdFx0XHQgKiBjb21wb3VuZF9oZWFkKCkgaXMgYWxzbyByYWN5LCBzbyB0aGUgZGVyaXZlZCBoZWFkX3BmblxuK1x0XHRcdCAqIG5lZWRzIGFkZGl0aW9uYWwgY2hlY2tzIHRvIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZC5cbitcdFx0XHQgKiBPdGhlcndpc2UsIGp1c3QgZmFpbCB0aGUgY2hlY2suIHBmbiBjb21lcyBmcm9tXG4rXHRcdFx0ICogX19maXJzdF92YWxpZF9wYWdlKCkgYXMgYSBsZWdpdGltYXRlIFBGTiwgc28gdXNlIGl0IHRvXG4rXHRcdFx0ICogY2hlY2sgaGVhZF9wZm4uXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKGhlYWRfcGZuIFx1MDAzZSBwZm4gfHwgIUlTX0FMSUdORUQoaGVhZF9wZm4sIG5yX3BhZ2VzKSB8fFxuK1x0XHRcdCAgICBwZm4gLSBoZWFkX3BmbiBcdTAwM2U9IG5yX3BhZ2VzKVxuK1x0XHRcdFx0Z290byBmYWlsZWQ7XG4gXG4gXHRcdFx0aWYgKGhlYWRfcGZuICsgbnJfcGFnZXMgXHUwMDNjPSBib3VuZGFyeV9wZm4gfHxcbi1cdFx0XHQgICAgUGFnZUh1Z2UocGFnZSkpIHtcbitcdFx0XHQgICAgUGFnZUh1Z2UoaGVhZCkpIHtcbiBcdFx0XHRcdHBmbiA9IGhlYWRfcGZuICsgbnJfcGFnZXM7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzo1NjozMS4zNDA2NDE5ODFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTYzNTIxNjE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHRvdWNoaW5nIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIHdpdGhpbiBgbW0vcGFnZV9pc29sYXRpb24uY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgc3dpdGNoaW5nIGZyb20gYGJ1ZGR5X29yZGVyKHBhZ2UpYCB0byBgYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpYCBhbmQgc2ltaWxhcmx5LCByZXBsYWNpbmcgYGNvbXBvdW5kX25yKGhlYWQpYCB3aXRoIGBjb21wb3VuZF9vcmRlcihoZWFkKWAuIEl0J3MgYWxzbyBtYWtpbmcgc29tZSByZWxhdGVkIHZhbGlkYXRpb24gY2hhbmdlcyBhbmQgcmVwbGFjaW5nIGBQYWdlSHVnZShwYWdlKWAgd2l0aCBgUGFnZUh1Z2UoaGVhZClgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgbGlrZWx5IGFib3V0IGFkZHJlc3NpbmcgcG90ZW50aWFsIGRhdGEgcmFjZXMgd2hlbiByZWFkaW5nIHRoZSBidWRkeSBvciBjb21wb3VuZCBvcmRlciwgcmlnaHQ/IFRoZXNlIGNoYW5nZXMgYXJlIGd1YXJkaW5nIGFnYWluc3QgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3IgZXZlbiBpbmZpbml0ZSBsb29wcywgc3BlY2lmaWNhbGx5IGlmIHRoZSBvcmRlciB2YWx1ZSBiZWluZyByZWFkIGlzIGluY29ycmVjdC5cblxuVGhlIHBhdGNoICpzaG91bGRuJ3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMuIE15IHVuZGVyc3RhbmRpbmcgb2YgS01TQU4gaXMgdGhhdCBpdCdzIGRlc2lnbmVkIHRvIGZsYWcgYWNjZXNzZXMgdG8gbWVtb3J5IHRoYXQgaGFzbid0IGJlZW4gaW5pdGlhbGl6ZWQuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiB3b3VsZCBiZSB0aGUgYXBwcm9wcmlhdGUgdG9vbCBmb3IgY2F0Y2hpbmcgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBzdGVtbWluZyBmcm9tIGludmFsaWQgYWRkcmVzc2VzIG9yIG90aGVyIGdlbmVyYWwgbWVtb3J5IGVycm9ycy5cblxuSG9sZCBvbiwgSSBuZWVkIHRvIGJlIHByZWNpc2UuIFRoZSBjb3JlIGlzc3VlIGhlcmUgaXNuJ3QgdGhlIG1lbW9yeSBpdHNlbGYgYmVpbmcgdW5pbml0aWFsaXplZC4gVGhlIGlzc3VlIGlzIHRoYXQgdGhlIG9yZGVyIHZhbHVlcyAoZnJvbSBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgYGNvbXBvdW5kX29yZGVyYCkgY291bGQgYmUgcmVhZCBjb25jdXJyZW50bHkgd2l0aCBjaGFuZ2VzLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGluY29ycmVjdCB2YWx1ZXMuIFRoZSBwYWdlIHN0cnVjdHVyZXMgdGhlbXNlbHZlcyAqYXJlKiBpbml0aWFsaXplZCwgdGhlIHByb2JsZW0gaXMgd2UncmUgcmVhZGluZyB0aGVtIGR1cmluZyBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMuIFRoaXMgY291bGQgY2F1c2UgaW5jb3JyZWN0IG9yZGVyIGNhbGN1bGF0aW9ucyB3aGljaCBjYW4gbGVhZCB0byBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MuIFRoaXMgaXMgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IHByb2JsZW0sIGEgZGF0YSByYWNlLCBvciBwb3RlbnRpYWxseSBvdXQtb2YtYm91bmRzIHJlYWRzIGR1ZSB0byBpbnZhbGlkIG9yZGVyIHZhbHVlcy4gVGhpcyBzdGlsbCBpc24ndCBLTVNBTidzIGRvbWFpbi5cblxuU28sIHRoaXMgbG9va3MgdG8gYmUgYSBjb25jdXJyZW5jeSBpc3N1ZSBhbmQvb3Igb3V0LW9mLWJvdW5kcyByZWFkLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIEtNU0FOLCB3aXRoIGl0cyBmb2N1cyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGlzIHRoZSB3cm9uZyB0b29sIGZvciB0aGlzLlxuXG5MZXQncyBkbyBhIHF1aWNrIG1lbnRhbCBydW4gdGhyb3VnaCB0byBzb2xpZGlmeSB0aGlzLiBUaGUgcGF0Y2ggaXMgYWRkaW5nIGNoZWNrcyB0byB2YWxpZGF0ZSB0aGUgYG9yZGVyYCBhbmQgYGhlYWRfcGZuYCB0byBwcmV2ZW50LCBmb3IgZXhhbXBsZSwgaW52YWxpZCBgcGZuYCBpbmNyZW1lbnRzIGFuZCBwb3RlbnRpYWwgaW5maW5pdGUgbG9vcHMuIEl0J3MgZXNzZW50aWFsbHkgYWRkaW5nIGd1YXJkcmFpbHMgdG8gdGhlIGV4aXN0aW5nIGxvZ2ljLiBBZ2FpbiwgdGhpcyBkb2Vzbid0IHRvdWNoIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGVyZWZvcmUsIG15IGZpbmFsIGFzc2Vzc21lbnQgaXMgKipOZWVkc0tNU0FOPWZhbHNlKiouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MDksIk91dHB1dFRva2VucyI6MTQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6NTY6NDAuOTc1ODYwNzcxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgcmFjZSBjb25kaXRpb25zIHdoZW4gcmVhZGluZyBwYWdlIGJ1ZGR5IG9yZGVyIGFuZCBjb21wb3VuZCBvcmRlciBkdXJpbmcgcGFnZSBpc29sYXRpb24uIEl0IHJlcGxhY2VzIGBidWRkeV9vcmRlcigpYCB3aXRoIGBidWRkeV9vcmRlcl91bnNhZmUoKWAgYW5kIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBQRk4gaW5jcmVtZW50cyBvciBpbmZpbml0ZSBsb29wcyBjYXVzZWQgYnkgY29uY3VycmVudGx5IG1vZGlmaWVkIHBhZ2Ugc3RhdGVzLiBUaGVzZSBjaGFuZ2VzIG1pdGlnYXRlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgcmVseSBvbiB1bmluaXRpYWxpemVkIGZpZWxkcyBmb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgd2hlbiByZWFkaW5nIHBhZ2UgYnVkZHkgb3JkZXIgYW5kIGNvbXBvdW5kIG9yZGVyIGR1cmluZyBwYWdlIGlzb2xhdGlvbi4gSXQgcmVwbGFjZXMgYGJ1ZGR5X29yZGVyKClgIHdpdGggYGJ1ZGR5X29yZGVyX3Vuc2FmZSgpYCBhbmQgYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIFBGTiBpbmNyZW1lbnRzIG9yIGluZmluaXRlIGxvb3BzIGNhdXNlZCBieSBjb25jdXJyZW50bHkgbW9kaWZpZWQgcGFnZSBzdGF0ZXMuIFRoZXNlIGNoYW5nZXMgbWl0aWdhdGUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgbG9naWMgZXJyb3JzLCB3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBvciByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGZvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7r6vv[1] Phase: Succeeded StartedAt: 2026-08-25 13:57:24 +0000 UTC FinishedAt: 2026-08-25 13:57:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r6vv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 13:57:24 +0000 UTC FinishedAt: 2026-08-25 13:57:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r6vv[2] Phase: Succeeded StartedAt: 2026-08-25 13:57:24 +0000 UTC FinishedAt: 2026-08-25 17:46:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 13:57:24 +0000 UTC FinishedAt: 2026-08-25 17:46:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","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-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 13:57:24 +0000 UTC FinishedAt: 2026-08-25 13:57:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 13:57:24 +0000 UTC FinishedAt: 2026-08-25 13:57:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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-workflow7r6vv/series-workflow7r6vv-convert-artifact-2890355602/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 13:57:34 +0000 UTC FinishedAt: 2026-08-25 14:17:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 13:57:34 +0000 UTC FinishedAt: 2026-08-25 14:17:19 +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:*ebf71bae-c988-445e-baaf-937a043047f3,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-workflow7r6vv/series-workflow7r6vv-convert-artifact-2890355602/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": "f5c8e785-e9a9-42bd-8472-e23acc0e0658", "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-workflow7r6vv/series-workflow7r6vv-build-action-1013044496/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 13:57:34 +0000 UTC FinishedAt: 2026-08-25 14:16:44 +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:*ebf71bae-c988-445e-baaf-937a043047f3,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-workflow7r6vv/series-workflow7r6vv-convert-artifact-2890355602/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": "f5c8e785-e9a9-42bd-8472-e23acc0e0658", "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-workflow7r6vv/series-workflow7r6vv-build-action-1013044496/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 14:17:19 +0000 UTC FinishedAt: 2026-08-25 14:17:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 14:17:19 +0000 UTC FinishedAt: 2026-08-25 14:17:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 14:17:19 +0000 UTC FinishedAt: 2026-08-25 14:17:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 14:17:19 +0000 UTC FinishedAt: 2026-08-25 14:17:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","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-workflow7r6vv/series-workflow7r6vv-convert-artifact-1950343853/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 14:17:29 +0000 UTC FinishedAt: 2026-08-25 14:19:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 14:17:29 +0000 UTC FinishedAt: 2026-08-25 14:19:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f5c8e785-e9a9-42bd-8472-e23acc0e0658,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-workflow7r6vv/series-workflow7r6vv-build-action-1013044496/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-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 14:19:33 +0000 UTC FinishedAt: 2026-08-25 14:19:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 14:19:33 +0000 UTC FinishedAt: 2026-08-25 14:19:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 14:19:33 +0000 UTC FinishedAt: 2026-08-25 14:39:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 14:19:33 +0000 UTC FinishedAt: 2026-08-25 14:39:38 +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:*ebf71bae-c988-445e-baaf-937a043047f3,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-workflow7r6vv/series-workflow7r6vv-convert-artifact-1950343853/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": "b0d649bc-41dc-462d-af6f-dcb9714f4d37", "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-workflow7r6vv/series-workflow7r6vv-build-action-1703159561/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 14:19:33 +0000 UTC FinishedAt: 2026-08-25 14:39:16 +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:*ebf71bae-c988-445e-baaf-937a043047f3,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-workflow7r6vv/series-workflow7r6vv-convert-artifact-1950343853/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": "b0d649bc-41dc-462d-af6f-dcb9714f4d37", "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-workflow7r6vv/series-workflow7r6vv-build-action-1703159561/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 14:39:38 +0000 UTC FinishedAt: 2026-08-25 14:39:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 14:39:38 +0000 UTC FinishedAt: 2026-08-25 14:39:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 14:39:38 +0000 UTC FinishedAt: 2026-08-25 14:41:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 14:39:38 +0000 UTC FinishedAt: 2026-08-25 14:41:33 +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:*b0d649bc-41dc-462d-af6f-dcb9714f4d37,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-workflow7r6vv/series-workflow7r6vv-build-action-1703159561/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-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 14:41:43 +0000 UTC FinishedAt: 2026-08-25 17:46:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 14:41:43 +0000 UTC FinishedAt: 2026-08-25 17:46:29 +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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"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:*f5c8e785-e9a9-42bd-8472-e23acc0e0658,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b0d649bc-41dc-462d-af6f-dcb9714f4d37,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-workflow7r6vv/series-workflow7r6vv-build-action-1013044496/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-workflow7r6vv/series-workflow7r6vv-build-action-1703159561/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 14:41:43 +0000 UTC FinishedAt: 2026-08-25 14:42:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 14:41:43 +0000 UTC FinishedAt: 2026-08-25 14:41:50 +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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"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-workflow7r6vv/series-workflow7r6vv-convert-artifact-2560543250/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 14:41:43 +0000 UTC FinishedAt: 2026-08-25 14:41:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 14:41:43 +0000 UTC FinishedAt: 2026-08-25 14:41:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 14:41:43 +0000 UTC FinishedAt: 2026-08-25 14:41:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 14:42:04 +0000 UTC FinishedAt: 2026-08-25 17:46:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r6vv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG","MEMORY_ISOLATION","CONTIG_ALLOC"],"series_id":"2b180ee5-48d5-4336-9c6d-05b99e20e8a4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 14:42:04 +0000 UTC FinishedAt: 2026-08-25 17:46:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f5c8e785-e9a9-42bd-8472-e23acc0e0658,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b0d649bc-41dc-462d-af6f-dcb9714f4d37,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-workflow7r6vv/series-workflow7r6vv-build-action-1013044496/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-workflow7r6vv/series-workflow7r6vv-build-action-1703159561/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-workflow7r6vv/series-workflow7r6vv-convert-artifact-2560543250/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,}