Name: series-workflowz7cqv Phase: Succeeded StartedAt: 2026-08-12 11:41:56 +0000 UTC FinishedAt: 2026-08-12 15:43:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cqv[0] Phase: Succeeded StartedAt: 2026-08-12 11:41:56 +0000 UTC FinishedAt: 2026-08-12 11:58:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cqv[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 11:41:56 +0000 UTC FinishedAt: 2026-08-12 11:58:12 +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": "480a31230b426efb005b6e71a14ef80f405f18b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "KEXEC", "KEXEC_FILE" ], "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": "480a31230b426efb005b6e71a14ef80f405f18b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "KEXEC", "KEXEC_FILE" ], "series_id": "968a0663-8b87-4c6a-8b60-2fe5e05dfdf6" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "sanity_check_segment_list", "kexec_locate_mem_hole", "range_first_hwpoison", "range_last_hwpoison" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0tFWEVDJiMzNDssCiAgICAmIzM0O0tFWEVDX0ZJTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0JiMzNDssCiAgICAmIzM0O2tleGVjX2xvY2F0ZV9tZW1faG9sZSYjMzQ7LAogICAgJiMzNDtyYW5nZV9maXJzdF9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtyYW5nZV9sYXN0X2h3cG9pc29uJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBjaGVja3MgdG8gYXZvaWQgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGR1cmluZyBrZXhlYyBzZWdtZW50IGFsbG9jYXRpb24gYW5kIHZhbGlkYXRpb24uIEl0IG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIHRvIHNraXAgcG9pc29uZWQgcGFnZXMgYW5kIHJlamVjdHMga2V4ZWMgc2VnbWVudHMgdGhhdCBsYW5kIG9uIHBvaXNvbmVkIG1lbW9yeS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGtleGVjIHN1YnN5c3RlbSB0byBhdm9pZCBhbGxvY2F0aW5nIG1lbW9yeSBvbiBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHRoZSBrZXhlY19sb2FkIGFuZCBrZXhlY19maWxlX2xvYWQgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhODYzZjZhYzViNWI2MTcwODAyMGIzYmMzNDMzNDJhZDdhZTUwNmNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTE6NTc6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCAxMzkwMjM2ODQ3MWUxLi5mZjgzYWU3YTdlZmU2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC01MjUyLDYgJiM0Mzs1MjUyLDggQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVtb3J5X2ZhaWx1cmVfYXR0cl9ncm91cDtcbiBleHRlcm4gdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pO1xuIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKTtcbiYjNDM7cGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4mIzQzO3BoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbiB7XG5AQCAtNTI2NCw2ICYjNDM7NTI2NiwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbilcbiBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKVxuIHtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBQSFlTX0FERFJfTUFYO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHNpemUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gUEhZU19BRERSX01BWDtcbiYjNDM7fVxuICNlbmRpZlxuIFxuICNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19jb3JlLmMgYi9rZXJuZWwva2V4ZWNfY29yZS5jXG5pbmRleCBkYzc3MGI5YTZkMDUzLi43ZWU4YzlmMDc4ZjZiIDEwMDY0NFxuLS0tIGEva2VybmVsL2tleGVjX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2tleGVjX2NvcmUuY1xuQEAgLTIxMiw2ICYjNDM7MjEyLDE2IEBAIGludCBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0KHN0cnVjdCBraW1hZ2UgKmltYWdlKVxuIFx0fVxuICNlbmRpZlxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVqZWN0IGRlc3RpbmF0aW9ucyB0aGF0IGxhbmQgb24gaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5OiB0aGVcbiYjNDM7XHQgKiByZWxvY2F0aW9uIGNvcHkgd291bGQgbWFjaGluZS1jaGVjayBvbiB0aGUgYmFkIGZyYW1lLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3NlZ21lbnRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHJhbmdlX2ZpcnN0X2h3cG9pc29uKGltYWdlLVx1MDAzZXNlZ21lbnRbaV0ubWVtLFxuJiM0MztcdFx0XHRcdFx0IGltYWdlLVx1MDAzZXNlZ21lbnRbaV0ubWVtc3opICE9IFBIWVNfQUREUl9NQVgpXG4mIzQzO1x0XHRcdHJldHVybiAtRUhXUE9JU09OO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKlxuIFx0ICogVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBhcmUgc2VhcmNoZWQgZnJvbSBzeXN0ZW0gUkFNIHJhdGhlciB0aGFuXG4gXHQgKiBiZWluZyBhbGxvY2F0ZWQgZnJvbSB0aGUgYnVkZHkgYWxsb2NhdG9yLCBzbyB0aGV5IGFyZSBub3QgZ3VhcmFudGVlZFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19maWxlLmMgYi9rZXJuZWwva2V4ZWNfZmlsZS5jXG5pbmRleCAyYmZiYjJkMTQ0ZTY5Li41MjdmZDgwNWEzYTZiIDEwMDY0NFxuLS0tIGEva2VybmVsL2tleGVjX2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2tleGVjX2ZpbGUuY1xuQEAgLTQ3NCw2ICYjNDM7NDc0LDcgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4ge1xuIFx0c3RydWN0IGtpbWFnZSAqaW1hZ2UgPSBrYnVmLVx1MDAzZWltYWdlO1xuIFx0dW5zaWduZWQgbG9uZyB0ZW1wX3N0YXJ0LCB0ZW1wX2VuZDtcbiYjNDM7XHRwaHlzX2FkZHJfdCBwb2lzb247XG4gXG4gXHR0ZW1wX2VuZCA9IG1pbihlbmQsIGtidWYtXHUwMDNlYnVmX21heCk7XG4gXHR0ZW1wX3N0YXJ0ID0gdGVtcF9lbmQgLSBrYnVmLVx1MDAzZW1lbXN6ICYjNDM7IDE7XG5AQCAtNDgzLDcgJiM0Mzs0ODQsOSBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0LyogYWxpZ24gZG93biBzdGFydCAqL1xuIFx0XHR0ZW1wX3N0YXJ0ID0gQUxJR05fRE9XTih0ZW1wX3N0YXJ0LCBrYnVmLVx1MDAzZWJ1Zl9hbGlnbik7XG4gXG4tXHRcdGlmICh0ZW1wX3N0YXJ0IFx1MDAzYyBzdGFydCB8fCB0ZW1wX3N0YXJ0IFx1MDAzYyBrYnVmLVx1MDAzZWJ1Zl9taW4pXG4mIzQzO1x0XHQvKiBBIGNhbmRpZGF0ZSBhYm92ZSB0aGUgcmFuZ2UgbWVhbnMgdGhlIHdhbGsgd3JhcHBlZCBhcm91bmQgKi9cbiYjNDM7XHRcdGlmICh0ZW1wX3N0YXJ0IFx1MDAzYyBzdGFydCB8fCB0ZW1wX3N0YXJ0IFx1MDAzYyBrYnVmLVx1MDAzZWJ1Zl9taW4gfHxcbiYjNDM7XHRcdCAgICB0ZW1wX3N0YXJ0IFx1MDAzZSBlbmQpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdHRlbXBfZW5kID0gdGVtcF9zdGFydCAmIzQzOyBrYnVmLVx1MDAzZW1lbXN6IC0gMTtcbkBAIC01MDMsNiAmIzQzOzUwNiwxMyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuJiM0MztcdFx0cG9pc29uID0gcmFuZ2VfZmlyc3RfaHdwb2lzb24odGVtcF9zdGFydCwga2J1Zi1cdTAwM2VtZW1zeik7XG4mIzQzO1x0XHRpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHtcbiYjNDM7XHRcdFx0Lyogd2UgaGl0IGEgcG9pc29uZWQgcGFnZSAqL1xuJiM0MztcdFx0XHR0ZW1wX3N0YXJ0ID0gcG9pc29uIC0ga2J1Zi1cdTAwM2VtZW1zejtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHQvKiBXZSBmb3VuZCBhIHN1aXRhYmxlIG1lbW9yeSByYW5nZSAqL1xuIFx0XHRicmVhaztcbiBcdH0gd2hpbGUgKDEpO1xuQEAgLTUxOSw2ICYjNDM7NTI5LDcgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfYm90dG9tX3VwKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIHtcbiBcdHN0cnVjdCBraW1hZ2UgKmltYWdlID0ga2J1Zi1cdTAwM2VpbWFnZTtcbiBcdHVuc2lnbmVkIGxvbmcgdGVtcF9zdGFydCwgdGVtcF9lbmQ7XG4mIzQzO1x0cGh5c19hZGRyX3QgcG9pc29uO1xuIFxuIFx0dGVtcF9zdGFydCA9IG1heChzdGFydCwga2J1Zi1cdTAwM2VidWZfbWluKTtcbiBcbkBAIC01NDUsNiAmIzQzOzU1NiwxMyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbiYjNDM7XHRcdHBvaXNvbiA9IHJhbmdlX2xhc3RfaHdwb2lzb24odGVtcF9zdGFydCwga2J1Zi1cdTAwM2VtZW1zeik7XG4mIzQzO1x0XHRpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHtcbiYjNDM7XHRcdFx0Lyogd2UgaGl0IGEgcG9pc29uZWQgcGFnZSAqL1xuJiM0MztcdFx0XHR0ZW1wX3N0YXJ0ID0gcG9pc29uICYjNDM7IFBBR0VfU0laRTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHQvKiBXZSBmb3VuZCBhIHN1aXRhYmxlIG1lbW9yeSByYW5nZSAqL1xuIFx0XHRicmVhaztcbiBcdH0gd2hpbGUgKDEpO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCBhOGIwM2UyOTIwYmE4Li5hMmNhOGRmNTAxY2FlIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTk2LDYgJiM0Mzs5Niw0NiBAQCB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSlcbiBcdFx0bWVtYmxrX25yX3BvaXNvbl9zdWIocGZuLCBpKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJldHVybiB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgaGFyZHdhcmUtcG9pc29uZWQgb25saW5lIHBhZ2UgaW4gW3N0YXJ0LFxuJiM0MzsgKiBzdGFydCAmIzQzOyBzaXplKSwgb3IgUEhZU19BRERSX01BWCBpZiB0aGUgcmFuZ2UgaXMgY2xlYW4uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgcGh5c19hZGRyX3QgcmFuZ2VfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbiYjNDM7XHRcdFx0XHQgIGJvb2wgZmlyc3QpXG4mIzQzO3tcbiYjNDM7XHRwaHlzX2FkZHJfdCBwb2lzb24gPSBQSFlTX0FERFJfTUFYO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcGZuLCBlbmRfcGZuO1xuJiM0MztcbiYjNDM7XHRpZiAoIXNpemUgfHwgIWF0b21pY19sb25nX3JlYWQoXHUwMDI2bnVtX3BvaXNvbmVkX3BhZ2VzKSlcbiYjNDM7XHRcdHJldHVybiBwb2lzb247XG4mIzQzO1xuJiM0MztcdGVuZF9wZm4gPSBQSFlTX1BGTihzdGFydCAmIzQzOyBzaXplIC0gMSk7XG4mIzQzO1x0Zm9yIChwZm4gPSBQSFlTX1BGTihzdGFydCk7IHBmbiBcdTAwM2M9IGVuZF9wZm47IHBmbiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHBhZ2UgXHUwMDI2XHUwMDI2IGlzX3BhZ2VfaHdwb2lzb24ocGFnZSkpIHtcbiYjNDM7XHRcdFx0aWYgKGZpcnN0KVxuJiM0MztcdFx0XHRcdHJldHVybiBQRk5fUEhZUyhwZm4pO1xuJiM0MztcbiYjNDM7XHRcdFx0cG9pc29uID0gUEZOX1BIWVMocGZuKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRjb25kX3Jlc2NoZWQoKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBwb2lzb247XG4mIzQzO31cbiYjNDM7XG4mIzQzO3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmFuZ2VfaHdwb2lzb24oc3RhcnQsIHNpemUsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmFuZ2VfaHdwb2lzb24oc3RhcnQsIHNpemUsIGZhbHNlKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBNRl9BVFRSX1JPIC0gQ3JlYXRlIHN5c2ZzIGVudHJ5IGZvciBlYWNoIG1lbW9yeSBmYWlsdXJlIHN0YXRpc3RpY3MuXG4gICogQF9uYW1lOiBuYW1lIG9mIHRoZSBmaWxlIGluIHRoZSBwZXIgTlVNQSBzeXNmcyBkaXJlY3RvcnkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0tFWEVDJiMzNDssCiAgICAmIzM0O0tFWEVDX0ZJTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0JiMzNDssCiAgICAmIzM0O2tleGVjX2xvY2F0ZV9tZW1faG9sZSYjMzQ7LAogICAgJiMzNDtyYW5nZV9maXJzdF9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtyYW5nZV9sYXN0X2h3cG9pc29uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBrZXhlYyBzdWJzeXN0ZW0gdG8gYXZvaWQgYWxsb2NhdGluZyBtZW1vcnkgb24gaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB0aGUga2V4ZWNfbG9hZCBhbmQga2V4ZWNfZmlsZV9sb2FkIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTg2M2Y2YWM1YjViNjE3MDgwMjBiM2JjMzQzMzQyYWQ3YWU1MDZjYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDExOjU3OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDEzOTAyMzY4NDcxZTEuLmZmODNhZTdhN2VmZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTUyNTIsNiAmIzQzOzUyNTIsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBtZW1vcnlfZmFpbHVyZV9hdHRyX2dyb3VwOwogZXh0ZXJuIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyk7CiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pOwogdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpOwomIzQzO3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOwomIzQzO3BoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpCiB7CkBAIC01MjY0LDYgJiM0Mzs1MjY2LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKQogc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSkKIHsKIH0KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LAomIzQzOwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBQSFlTX0FERFJfTUFYOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsCiYjNDM7CQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gUEhZU19BRERSX01BWDsKJiM0Mzt9CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKQpkaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjX2NvcmUuYyBiL2tlcm5lbC9rZXhlY19jb3JlLmMKaW5kZXggZGM3NzBiOWE2ZDA1My4uN2VlOGM5ZjA3OGY2YiAxMDA2NDQKLS0tIGEva2VybmVsL2tleGVjX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwva2V4ZWNfY29yZS5jCkBAIC0yMTIsNiAmIzQzOzIxMiwxNiBAQCBpbnQgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChzdHJ1Y3Qga2ltYWdlICppbWFnZSkKIAl9CiAjZW5kaWYKIAomIzQzOwkvKgomIzQzOwkgKiBSZWplY3QgZGVzdGluYXRpb25zIHRoYXQgbGFuZCBvbiBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnk6IHRoZQomIzQzOwkgKiByZWxvY2F0aW9uIGNvcHkgd291bGQgbWFjaGluZS1jaGVjayBvbiB0aGUgYmFkIGZyYW1lLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3NlZ21lbnRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHJhbmdlX2ZpcnN0X2h3cG9pc29uKGltYWdlLSZndDtzZWdtZW50W2ldLm1lbSwKJiM0MzsJCQkJCSBpbWFnZS0mZ3Q7c2VnbWVudFtpXS5tZW1zeikgIT0gUEhZU19BRERSX01BWCkKJiM0MzsJCQlyZXR1cm4gLUVIV1BPSVNPTjsKJiM0MzsJfQomIzQzOwogCS8qCiAJICogVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBhcmUgc2VhcmNoZWQgZnJvbSBzeXN0ZW0gUkFNIHJhdGhlciB0aGFuCiAJICogYmVpbmcgYWxsb2NhdGVkIGZyb20gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgc28gdGhleSBhcmUgbm90IGd1YXJhbnRlZWQKZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19maWxlLmMgYi9rZXJuZWwva2V4ZWNfZmlsZS5jCmluZGV4IDJiZmJiMmQxNDRlNjkuLjUyN2ZkODA1YTNhNmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZXhlY19maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2tleGVjX2ZpbGUuYwpAQCAtNDc0LDYgJiM0Mzs0NzQsNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIHsKIAlzdHJ1Y3Qga2ltYWdlICppbWFnZSA9IGtidWYtJmd0O2ltYWdlOwogCXVuc2lnbmVkIGxvbmcgdGVtcF9zdGFydCwgdGVtcF9lbmQ7CiYjNDM7CXBoeXNfYWRkcl90IHBvaXNvbjsKIAogCXRlbXBfZW5kID0gbWluKGVuZCwga2J1Zi0mZ3Q7YnVmX21heCk7CiAJdGVtcF9zdGFydCA9IHRlbXBfZW5kIC0ga2J1Zi0mZ3Q7bWVtc3ogJiM0MzsgMTsKQEAgLTQ4Myw3ICYjNDM7NDg0LDkgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCS8qIGFsaWduIGRvd24gc3RhcnQgKi8KIAkJdGVtcF9zdGFydCA9IEFMSUdOX0RPV04odGVtcF9zdGFydCwga2J1Zi0mZ3Q7YnVmX2FsaWduKTsKIAotCQlpZiAodGVtcF9zdGFydCAmbHQ7IHN0YXJ0IHx8IHRlbXBfc3RhcnQgJmx0OyBrYnVmLSZndDtidWZfbWluKQomIzQzOwkJLyogQSBjYW5kaWRhdGUgYWJvdmUgdGhlIHJhbmdlIG1lYW5zIHRoZSB3YWxrIHdyYXBwZWQgYXJvdW5kICovCiYjNDM7CQlpZiAodGVtcF9zdGFydCAmbHQ7IHN0YXJ0IHx8IHRlbXBfc3RhcnQgJmx0OyBrYnVmLSZndDtidWZfbWluIHx8CiYjNDM7CQkgICAgdGVtcF9zdGFydCAmZ3Q7IGVuZCkKIAkJCXJldHVybiAwOwogCiAJCXRlbXBfZW5kID0gdGVtcF9zdGFydCAmIzQzOyBrYnVmLSZndDttZW1zeiAtIDE7CkBAIC01MDMsNiAmIzQzOzUwNiwxMyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCWNvbnRpbnVlOwogCQl9CiAKJiM0MzsJCXBvaXNvbiA9IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHRlbXBfc3RhcnQsIGtidWYtJmd0O21lbXN6KTsKJiM0MzsJCWlmIChwb2lzb24gIT0gUEhZU19BRERSX01BWCkgewomIzQzOwkJCS8qIHdlIGhpdCBhIHBvaXNvbmVkIHBhZ2UgKi8KJiM0MzsJCQl0ZW1wX3N0YXJ0ID0gcG9pc29uIC0ga2J1Zi0mZ3Q7bWVtc3o7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCS8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovCiAJCWJyZWFrOwogCX0gd2hpbGUgKDEpOwpAQCAtNTE5LDYgJiM0Mzs1MjksNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiB7CiAJc3RydWN0IGtpbWFnZSAqaW1hZ2UgPSBrYnVmLSZndDtpbWFnZTsKIAl1bnNpZ25lZCBsb25nIHRlbXBfc3RhcnQsIHRlbXBfZW5kOwomIzQzOwlwaHlzX2FkZHJfdCBwb2lzb247CiAKIAl0ZW1wX3N0YXJ0ID0gbWF4KHN0YXJ0LCBrYnVmLSZndDtidWZfbWluKTsKIApAQCAtNTQ1LDYgJiM0Mzs1NTYsMTMgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfYm90dG9tX3VwKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJY29udGludWU7CiAJCX0KIAomIzQzOwkJcG9pc29uID0gcmFuZ2VfbGFzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLSZndDttZW1zeik7CiYjNDM7CQlpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHsKJiM0MzsJCQkvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovCiYjNDM7CQkJdGVtcF9zdGFydCA9IHBvaXNvbiAmIzQzOyBQQUdFX1NJWkU7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCS8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovCiAJCWJyZWFrOwogCX0gd2hpbGUgKDEpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggYThiMDNlMjkyMGJhOC4uYTJjYThkZjUwMWNhZSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC05Niw2ICYjNDM7OTYsNDYgQEAgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpCiAJCW1lbWJsa19ucl9wb2lzb25fc3ViKHBmbiwgaSk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJldHVybiB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgaGFyZHdhcmUtcG9pc29uZWQgb25saW5lIHBhZ2UgaW4gW3N0YXJ0LAomIzQzOyAqIHN0YXJ0ICYjNDM7IHNpemUpLCBvciBQSFlTX0FERFJfTUFYIGlmIHRoZSByYW5nZSBpcyBjbGVhbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgcGh5c19hZGRyX3QgcmFuZ2VfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKJiM0MzsJCQkJICBib29sIGZpcnN0KQomIzQzO3sKJiM0MzsJcGh5c19hZGRyX3QgcG9pc29uID0gUEhZU19BRERSX01BWDsKJiM0MzsJdW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm47CiYjNDM7CiYjNDM7CWlmICghc2l6ZSB8fCAhYXRvbWljX2xvbmdfcmVhZCgmYW1wO251bV9wb2lzb25lZF9wYWdlcykpCiYjNDM7CQlyZXR1cm4gcG9pc29uOwomIzQzOwomIzQzOwllbmRfcGZuID0gUEhZU19QRk4oc3RhcnQgJiM0Mzsgc2l6ZSAtIDEpOwomIzQzOwlmb3IgKHBmbiA9IFBIWVNfUEZOKHN0YXJ0KTsgcGZuICZsdDs9IGVuZF9wZm47IHBmbiYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7CiYjNDM7CiYjNDM7CQlpZiAocGFnZSAmYW1wOyZhbXA7IGlzX3BhZ2VfaHdwb2lzb24ocGFnZSkpIHsKJiM0MzsJCQlpZiAoZmlyc3QpCiYjNDM7CQkJCXJldHVybiBQRk5fUEhZUyhwZm4pOwomIzQzOwomIzQzOwkJCXBvaXNvbiA9IFBGTl9QSFlTKHBmbik7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQljb25kX3Jlc2NoZWQoKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcG9pc29uOwomIzQzO30KJiM0MzsKJiM0MztwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7cGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCBmYWxzZSk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBNRl9BVFRSX1JPIC0gQ3JlYXRlIHN5c2ZzIGVudHJ5IGZvciBlYWNoIG1lbW9yeSBmYWlsdXJlIHN0YXRpc3RpY3MuCiAgKiBAX25hbWU6IG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIHBlciBOVU1BIHN5c2ZzIGRpcmVjdG9yeS4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc1NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIENhbmRpZGF0ZSBFdmFsdWF0aW9uOiBLZXJuZWwgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZ2l2ZW4gYSBwYXRjaCBzZXJpZXMgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCB3YXJyYW50IGZ1enppbmcuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBtb2RpZmllcyBgaW5jbHVkZS9saW51eC9tbS5oYCwgYGtlcm5lbC9rZXhlY19jb3JlLmNgLCBga2VybmVsL2tleGVjX2ZpbGUuY2AsIGFuZCBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoYXQmIzM5O3MgYSBkZWNlbnQgc3ByZWFkLCBpbmRpY2F0aW5nIGNoYW5nZXMgaW4gYm90aCBrZXhlYyBhbmQgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcg4oCTIGNyaXRpY2FsIGFyZWFzLCBkZWZpbml0ZWx5LgoKU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgaG93IGtleGVjIGludGVyYWN0cyB3aXRoIGFuZCBoYW5kbGVzIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeS4gVGhlIHBhdGNoIGFkZHMgY2hlY2tzIGluIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YCwgcHJldmVudGluZyBrZXhlYyBzZWdtZW50cyBmcm9tIGJlaW5nIGxvYWRlZCBpbnRvIHBvaXNvbmVkIG1lbW9yeSwgYW5kIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiBrZXhlYyB1c2luZyBgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duYCBhbmQgYGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXBgIHRvIHNraXAgb3ZlciB0aGVzZSBwb2lzb25lZCByZWdpb25zLiBUaGUgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFkZGl0aW9ucyBsb29rIGxpa2UgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBvaXNvbmluZyByYW5nZSBtZWNoYW5pc21zLgoKR2l2ZW4gdGhhdCBpdCB0b3VjaGVzIHRoZSBrZXhlYyBzdWJzeXN0ZW0gYW5kIG1lbW9yeSBmYWlsdXJlLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIHF1ZXN0aW9uIG5vdyBiZWNvbWVzOiBXaGF0IGZ1bmN0aW9ucyBzaG91bGQgd2UgdGFyZ2V0PyBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGBGb2N1c1N5bWJvbHNgLiBMZXQmIzM5O3Mgc2VlOgoKKiAgIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YCBpcyBhIHN0cm9uZyBjYW5kaWRhdGUsIGFzIGl0IGlzIGEgY2VudHJhbCBjaGVjaywgcmVqZWN0aW5nIHBvaXNvbmVkIG1lbW9yeS4KCiogICBgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duYCBhbmQgYGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXBgIGFyZSBnb29kLCBidXQgSSByZW1lbWJlciwgb3Igc2hvdWxkIHF1aWNrbHkgY2hlY2ssIHRoZSBwcm9tcHQgc2F5cyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuCgoqICAgQ2hlY2tpbmcgYGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bmAgYW5kIGBsb2NhdGVfbWVtX2hvbGVfYm90dG9tX3VwYCwgb2ggeWVhaCwgdGhlc2UgYXJlIGBzdGF0aWNgIGZ1bmN0aW9ucywgc28gdGhleSBhcmUgbm90IGRpcmVjdGx5IGV4cG9zZWQgYW5kIHVzZWQuIEkgd2lsbCBsb29rIGZvciBjYWxscyB0byB0aGVzZSBmdW5jdGlvbnMgdG8gaWRlbnRpZnkgZW50cnlwb2ludHMuCgpTbywgSSB3aWxsIGxvb2sgZm9yIHRoZSBjYWxsIHNpdGVzIHRvIHRob3NlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwva2V4ZWNfZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9rZXhlY19maWxlLmM9MzY0PVNZU0NBTExfREVGSU5FNShrZXhlY19maWxlX2xvYWQsIGludCwga2VybmVsX2ZkLCBpbnQsIGluaXRyZF9mZCxcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTQ3MS1cbmtlcm5lbC9rZXhlY19maWxlLmM6NDcyOnN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxua2VybmVsL2tleGVjX2ZpbGUuYy00NzMtXHRcdFx0XHQgICAgc3RydWN0IGtleGVjX2J1ZiAqa2J1Zilcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jPTU3Nz1zdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFjayhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdm9pZCAqYXJnKVxuLS1cbmtlcm5lbC9rZXhlY19maWxlLmMtNTk5LVx0aWYgKGtidWYtXHUwMDNldG9wX2Rvd24pXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjYwMDpcdFx0cmV0dXJuIGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bihzdGFydCwgZW5kLCBrYnVmKTtcbmtlcm5lbC9rZXhlY19maWxlLmMtNjAxLVx0cmV0dXJuIGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAoc3RhcnQsIGVuZCwga2J1Zik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk0NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKlRyYWNpbmcgdGhlIFNvdXJjZSBvZiBgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrYCoqCgpPa2F5LCBgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrYCBoYXMgYmVlbiBpbnZva2VkLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiAqV2hlcmUqIGRpZCB0aGlzIGNhbGwgb3JpZ2luYXRlPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY2FsbGluZyBmdW5jdGlvbiBvciBmdW5jdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhpcyBjYWxsIGlzIGNydWNpYWwuIEtub3dpbmcgdGhlIGNhbGxlciB3aWxsIHRlbGwgbWUgYSBncmVhdCBkZWFsIGFib3V0IHdoeSBpdCB3YXMgY2FsbGVkIGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHN0cmF0ZWdpZXMgdG8gdHJhY2UgYmFjayB0aGUgZXhlY3V0aW9uIHBhdGguIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgc3RhcnQgdGhlIGh1bnQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2tleGVjX2ZpbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwva2V4ZWNfZmlsZS5jPTUyNz1zdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxua2VybmVsL2tleGVjX2ZpbGUuYy01NzYtXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjU3NzpzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFjayhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdm9pZCAqYXJnKVxua2VybmVsL2tleGVjX2ZpbGUuYy01Nzgte1xuLS1cbmtlcm5lbC9rZXhlY19maWxlLmM9NjA1PXN0YXRpYyBpbnQga2V4ZWNfd2Fsa19tZW1ibG9jayhzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLFxuLS1cbmtlcm5lbC9rZXhlY19maWxlLmMtNjIwLVx0ICogSU9SRVNPVVJDRV9TWVNSQU1fRFJJVkVSX01BTkFHRUQgaGFuZGxpbmcgaW5cbmtlcm5lbC9rZXhlY19maWxlLmM6NjIxOlx0ICogbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrKCkuXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTYyMi1cdCAqL1xuLS1cbmtlcm5lbC9rZXhlY19maWxlLmM9NzMzPWludCBrZXhlY19sb2NhdGVfbWVtX2hvbGUoc3RydWN0IGtleGVjX2J1ZiAqa2J1Zilcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTc0NC1cdCAqL1xua2VybmVsL2tleGVjX2ZpbGUuYzo3NDU6XHRyZXQgPSBraG9fbG9jYXRlX21lbV9ob2xlKGtidWYsIGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFjayk7XG5rZXJuZWwva2V4ZWNfZmlsZS5jLTc0Ni1cdGlmIChyZXQgXHUwMDNjPSAwKVxuLS1cbmtlcm5lbC9rZXhlY19maWxlLmMtNzU2LVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spKVxua2VybmVsL2tleGVjX2ZpbGUuYzo3NTc6XHRcdHJldCA9IGtleGVjX3dhbGtfcmVzb3VyY2VzKGtidWYsIGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFjayk7XG5rZXJuZWwva2V4ZWNfZmlsZS5jLTc1OC1cdGVsc2Vcbmtlcm5lbC9rZXhlY19maWxlLmM6NzU5Olx0XHRyZXQgPSBrZXhlY193YWxrX21lbWJsb2NrKGtidWYsIGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFjayk7XG5rZXJuZWwva2V4ZWNfZmlsZS5jLTc2MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTg2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsJiMzOTtzIEJvb3QgUHJvY2VzcyoqCgpBbHJpZ2h0LCB0aGUgZGVidWdnaW5nIGhhcyBsZWQgbWUgdG8gYGtleGVjX2xvY2F0ZV9tZW1faG9sZWAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGJlZ2lucywgdGhlIGVudHJ5IHBvaW50IGZvciBtZW1vcnkgaG9sZSBkZXRlY3Rpb24gaW4gdGhpcyBrZXhlYyBpbXBsZW1lbnRhdGlvbi4gTm93LCBiZWZvcmUgSSBldmVuIHN0YXJ0IHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmb3VuZGF0aW9uYWwgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbiBvcmRlci4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHNlZ21lbnQgbGlzdCBpcyBjb2hlcmVudCBiZWZvcmUgdHJ1c3RpbmcgdGhlIHJlc3Qgb2YgdGhlIGxvZ2ljLiBHYXJiYWdlIGluLCBnYXJiYWdlIG91dCwgYXMgdGhleSBzYXkhIEl0JiMzOTtzIGxpa2VseSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2hlY2tpbmcgZm9yIG92ZXJsYXBzLCBpbnZhbGlkIGFkZHJlc3Nlcywgb3Igb3RoZXIgc3RydWN0dXJhbCBwcm9ibGVtcyBpbiB0aGUgbWVtb3J5IG1hcCB1c2VkIGJ5IGtleGVjLiBBIGJhZCBzZWdtZW50IGxpc3Qgd2lsbCB0aHJvdyBhIHdyZW5jaCBpbnRvIGV2ZXJ5dGhpbmcsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBjcmFzaCBsYXRlci4gU28sIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGludGVncml0eSBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2tleGVjX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwva2V4ZWNfY29yZS5jPTEwNj1zdGF0aWMgc3RydWN0IHBhZ2UgKmtpbWFnZV9hbGxvY19wYWdlKHN0cnVjdCBraW1hZ2UgKmltYWdlLFxuLS1cbmtlcm5lbC9rZXhlY19jb3JlLmMtMTA5LVxua2VybmVsL2tleGVjX2NvcmUuYzoxMTA6aW50IHNhbml0eV9jaGVja19zZWdtZW50X2xpc3Qoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXG5rZXJuZWwva2V4ZWNfY29yZS5jLTExMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk0OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipUcmFjaW5nIHRoZSBDYWxsIFN0YWNrIGZvciBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IG9mIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkZXRlcm1pbmUgaXRzIHVwc3RyZWFtIGRlcGVuZGVuY2llcy4gSSYjMzk7bSB0aGlua2luZywgd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqY2FsbGVkKj8gS25vd2luZyB0aGF0IHdpbGwgcHJvdmlkZSBjcnVjaWFsIGluc2lnaHQgaW50byBpdHMgcHVycG9zZSBhbmQgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSBuZWVkIHRvIHF1aWNrbHkgdHJhY2UgdGhlIGNhbGwgc3RhY2sgdG8gc2VlIHdoYXQgZnVuY3Rpb25zIGludm9rZSBpdC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgaW1tZWRpYXRlIGNhbGxlcnMsIGFuZCB0aGVuIHBvdGVudGlhbGx5IHRoZWlyIGNhbGxlcnMsIGFuZCBzbyBvbiwgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyByb2xlLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIGluIGRlYnVnZ2luZyBvciB1bmRlcnN0YW5kaW5nIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgdG8gdGhpcyBzZWdtZW50LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBzb21lIHRvb2xzIG9yIGdvb2Qgb2xkLWZhc2hpb25lZCBjb2RlIGRpdmluZyB0byBxdWlja2x5IGZpbmQgYWxsIGluc3RhbmNlcyBvZiBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nhbml0eV9jaGVja19zZWdtZW50X2xpc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9rZXhlYy5jPTIyPXN0YXRpYyBpbnQga2ltYWdlX2FsbG9jX2luaXQoc3RydWN0IGtpbWFnZSAqKnJpbWFnZSwgdW5zaWduZWQgbG9uZyBlbnRyeSxcbi0tXG5rZXJuZWwva2V4ZWMuYy01Ni1cbmtlcm5lbC9rZXhlYy5jOjU3Olx0cmV0ID0gc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChpbWFnZSk7XG5rZXJuZWwva2V4ZWMuYy01OC1cdGlmIChyZXQpXG4tLVxua2VybmVsL2tleGVjX2NvcmUuYz0xMDY9c3RhdGljIHN0cnVjdCBwYWdlICpraW1hZ2VfYWxsb2NfcGFnZShzdHJ1Y3Qga2ltYWdlICppbWFnZSxcbi0tXG5rZXJuZWwva2V4ZWNfY29yZS5jLTEwOS1cbmtlcm5lbC9rZXhlY19jb3JlLmM6MTEwOmludCBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0KHN0cnVjdCBraW1hZ2UgKmltYWdlKVxua2VybmVsL2tleGVjX2NvcmUuYy0xMTEte1xuLS1cbmtlcm5lbC9rZXhlY19maWxlLmM9MzA1PWtpbWFnZV9maWxlX2FsbG9jX2luaXQoc3RydWN0IGtpbWFnZSAqKnJpbWFnZSwgaW50IGtlcm5lbF9mZCxcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTMzMi1cbmtlcm5lbC9rZXhlY19maWxlLmM6MzMzOlx0cmV0ID0gc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChpbWFnZSk7XG5rZXJuZWwva2V4ZWNfZmlsZS5jLTMzNC1cdGlmIChyZXQpXG4tLVxua2VybmVsL2tleGVjX2ludGVybmFsLmg9OT1zdHJ1Y3Qga2ltYWdlICpkb19raW1hZ2VfYWxsb2NfaW5pdCh2b2lkKTtcbmtlcm5lbC9rZXhlY19pbnRlcm5hbC5oOjEwOmludCBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0KHN0cnVjdCBraW1hZ2UgKmltYWdlKTtcbmtlcm5lbC9rZXhlY19pbnRlcm5hbC5oLTExLXZvaWQga2ltYWdlX2ZyZWVfcGFnZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTUxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIGBrZXhlY2AgYW5kIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBga2V4ZWNgIGxvYWQgcHJvY2Vzcy4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgYGtpbWFnZV9hbGxvY19pbml0YCBhbmQgYGtpbWFnZV9maWxlX2FsbG9jX2luaXRgIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cywgc3BlY2lmaWNhbGx5IGNhbGxlZCBmcm9tIGBzeXNfa2V4ZWNfbG9hZGAgYW5kIGBzeXNfa2V4ZWNfZmlsZV9sb2FkYC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YCBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZm9jdXNlZCBhbmFseXNpcyB3aXRoaW4gdGhlIGNvZGUuIFRoZW4gSSBhbHNvIHNob3VsZCBsb29rIGludG8gYGtleGVjX2xvY2F0ZV9tZW1faG9sZWAuCgpGdXJ0aGVybW9yZSwgSSBzaG91bGQgYmUgbG9va2luZyBhdCBgcmFuZ2VfZmlyc3RfaHdwb2lzb25gIGFuZCBgcmFuZ2VfbGFzdF9od3BvaXNvbmAuIFRoZXkmIzM5O3JlIGV4cG9ydGVkIGZ1bmN0aW9ucyByZXNpZGluZyBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIHdoaWNoIGxpa2VseSBtZWFucyB0aGV5JiMzOTtyZSBjb3JlIHRvIHRoZSBtZW1vcnktZmFpbHVyZSBoYW5kbGluZy4KCk5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dC4gVGhpcyBwYXRjaCB0b3VjaGVzIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhhdCBmaWxlJiMzOTtzIGNvbXBpbGF0aW9uIGlzIGdhdGVkIGJ5IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLiBJIHNob3VsZCBjb25maXJtIHRoYXQgb3B0aW9uJiMzOTtzIHN0YXR1cy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhhdCBmbGFnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1vcnktZmFpbHVyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTExMT1vYmotJChDT05GSUdfRE1BUE9PTF9URVNUKSAmIzQzOz0gZG1hcG9vbF90ZXN0Lm9cbm1tL01ha2VmaWxlOjExMjpvYmotJChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpICYjNDM7PSBtZW1vcnktZmFpbHVyZS5vXG5tbS9NYWtlZmlsZS0xMTMtb2JqLSQoQ09ORklHX0hXUE9JU09OX0lOSkVDVCkgJiM0Mzs9IGh3cG9pc29uLWluamVjdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwODYKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEtlcm5lbCBCdWlsZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgZGVmaW5pdGVseSBhIHByZXJlcXVpc2l0ZSBoZXJlLiBUaGF0JiMzOTtzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLiBBbHNvLCBJJiMzOTttIG5vdGluZyB0aGF0IGJvdGggYGtleGVjX2NvcmUuY2AgYW5kIGBrZXhlY19maWxlLmNgIGFyZSBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19LRVhFQ19DT1JFYCBhbmQgYENPTkZJR19LRVhFQ19GSUxFYCBhcmUgYWN0dWFsbHkgKmVuYWJsZWQqIGluIHRoZSBrZXJuZWwgY29uZmlnLiBKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIGFyZSBhbGwgaW4gbGluZS4gR2l2ZW4gdGhpcywgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgdGhlIGtlcm5lbCYjMzk7cyBgTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcnVsZXMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZXhlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvTWFrZWZpbGU9ODA9b2JqLSQoQ09ORklHX0NSQVNIX1JFU0VSVkUpICYjNDM7PSBjcmFzaF9yZXNlcnZlLm9cbmtlcm5lbC9NYWtlZmlsZTo4MTpvYmotJChDT05GSUdfS0VYRUNfQ09SRSkgJiM0Mzs9IGtleGVjX2NvcmUub1xua2VybmVsL01ha2VmaWxlLTgyLW9iai0kKENPTkZJR19DUkFTSF9EVU1QKSAmIzQzOz0gY3Jhc2hfY29yZS5vXG4tLVxua2VybmVsL01ha2VmaWxlPTg0PW9iai0kKENPTkZJR19DUkFTSF9EVU1QX0tVTklUX1RFU1QpICYjNDM7PSBjcmFzaF9jb3JlX3Rlc3Qub1xua2VybmVsL01ha2VmaWxlOjg1Om9iai0kKENPTkZJR19LRVhFQykgJiM0Mzs9IGtleGVjLm9cbmtlcm5lbC9NYWtlZmlsZTo4NjpvYmotJChDT05GSUdfS0VYRUNfRklMRSkgJiM0Mzs9IGtleGVjX2ZpbGUub1xua2VybmVsL01ha2VmaWxlOjg3Om9iai0kKENPTkZJR19LRVhFQ19FTEYpICYjNDM7PSBrZXhlY19lbGYub1xua2VybmVsL01ha2VmaWxlLTg4LW9iai0kKENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUKSAmIzQzOz0gYmFja3RyYWNldGVzdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NDAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIGtleGVjIGZ1bmN0aW9uYWxpdHksIHRoZSBmdW5kYW1lbnRhbHMg4oCTIGBDT05GSUdfS0VYRUNfQ09SRWAgYW5kIGBDT05GSUdfS0VYRUNfRklMRWAg4oCTIHRob3NlIGFyZSBhIGdpdmVuLiBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCBiZWZvcmUgSSBnbyB0b28gZmFyIGRvd24gdGhpcyByb2FkLCBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLiBJdCYjMzk7cyBwcmV0dHkgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIGtleGVjIGFyY2hpdGVjdHVyZSwgZXNwZWNpYWxseSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIG1lbW9yeSBzaXR1YXRpb25zLiBHb3R0YSBiZSBwcm9hY3RpdmUgYWJvdXQgdGhhdCBwb3RlbnRpYWwgaW1wYWN0LCByaWdodD8gTmVlZCB0byBnZXQgYSBncmFzcCBvZiB0aGF0IGltcGFjdCB0byBwcmV2ZW50IHNvbWUgaGVhZGFjaGUgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9GQUlMVVJFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTc2Mj1jb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuLS1cbm1tL0tjb25maWctNzY0LVxubW0vS2NvbmZpZzo3NjU6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXG5tbS9LY29uZmlnLTc2Ni1cdGRlcGVuZHMgb24gTU1VXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MzMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6CgoqKkRlcGVuZGVuY2llcywgRGVwZW5kZW5jaWVzLCBEZXBlbmRlbmNpZXMhKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIEZpcnN0IHRoaW5ncyBmaXJzdDogYENPTkZJR19LRVhFQ2AgYW5kIGBDT05GSUdfS0VYRUNfRklMRWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBhcmUgcmVsYXRlZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIHdoYXQgdGhleSBkZXBlbmQgb24uIEkga25vdyB0aGUgZ2VuZXJhbCBhcmVhLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnkgc3VidGxlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaW50ZXJhY3Rpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB0byBlbnN1cmUgcHJvcGVyIHNldHRpbmdzIGZvciB0aGUgZmVhdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtFWEVDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcua2V4ZWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcua2V4ZWM9OD1jb25maWcgVk1DT1JFX0lORk9cbi0tXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0xMC1cbmtlcm5lbC9LY29uZmlnLmtleGVjOjExOmNvbmZpZyBLRVhFQ19DT1JFXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0xMi1cdGJvb2xcbmtlcm5lbC9LY29uZmlnLmtleGVjLTEzLVxua2VybmVsL0tjb25maWcua2V4ZWM6MTQ6Y29uZmlnIEtFWEVDX0VMRlxua2VybmVsL0tjb25maWcua2V4ZWMtMTUtXHRib29sXG4tLVxua2VybmVsL0tjb25maWcua2V4ZWM9MTc9Y29uZmlnIEhBVkVfSU1BX0tFWEVDXG4tLVxua2VybmVsL0tjb25maWcua2V4ZWMtMTktXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzoyMDpjb25maWcgS0VYRUNcbmtlcm5lbC9LY29uZmlnLmtleGVjLTIxLVx0Ym9vbCBcJiMzNDtFbmFibGUga2V4ZWMgc3lzdGVtIGNhbGxcJiMzNDtcbi0tXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0zNy1cbmtlcm5lbC9LY29uZmlnLmtleGVjOjM4OmNvbmZpZyBLRVhFQ19GSUxFXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0zOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGtleGVjIGZpbGUgYmFzZWQgc3lzdGVtIGNhbGxcJiMzNDtcbi0tXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy00OC1cbmtlcm5lbC9LY29uZmlnLmtleGVjOjQ5OmNvbmZpZyBLRVhFQ19TSUdcbmtlcm5lbC9LY29uZmlnLmtleGVjLTUwLVx0Ym9vbCBcJiMzNDtWZXJpZnkga2VybmVsIHNpZ25hdHVyZSBkdXJpbmcga2V4ZWNfZmlsZV9sb2FkKCkgc3lzY2FsbFwmIzM0O1xuLS1cbmtlcm5lbC9LY29uZmlnLmtleGVjLTYyLVxua2VybmVsL0tjb25maWcua2V4ZWM6NjM6Y29uZmlnIEtFWEVDX1NJR19GT1JDRVxua2VybmVsL0tjb25maWcua2V4ZWMtNjQtXHRib29sIFwmIzM0O1JlcXVpcmUgYSB2YWxpZCBzaWduYXR1cmUgaW4ga2V4ZWNfZmlsZV9sb2FkKCkgc3lzY2FsbFwmIzM0O1xuLS1cbmtlcm5lbC9LY29uZmlnLmtleGVjLTcwLVxua2VybmVsL0tjb25maWcua2V4ZWM6NzE6Y29uZmlnIEtFWEVDX0lNQUdFX1ZFUklGWV9TSUdcbmtlcm5lbC9LY29uZmlnLmtleGVjLTcyLVx0Ym9vbCBcJiMzNDtFbmFibGUgSW1hZ2Ugc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBzdXBwb3J0IChBUk0pXCYjMzQ7XG4tLVxua2VybmVsL0tjb25maWcua2V4ZWMtNzktXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzo4MDpjb25maWcgS0VYRUNfQlpJTUFHRV9WRVJJRllfU0lHXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy04MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ6SW1hZ2Ugc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxua2VybmVsL0tjb25maWcua2V4ZWMtODgtXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzo4OTpjb25maWcgS0VYRUNfSlVNUFxua2VybmVsL0tjb25maWcua2V4ZWMtOTAtXHRib29sIFwmIzM0O2tleGVjIGp1bXBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUzNQoJCQkJCQkJb3V0cHV0OiAxMzMKCQkJCQkJCXRob3VnaHRzOiA0ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVGhpcyBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYnJva2VuIHRoaXMgcGF0Y2ggZG93bi4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGNoYW5nZSB3aXRoaW4gdGhlIGBrZXhlY2Agc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYWltaW5nIHRvIHByZXZlbnQgbWVtb3J5IGFsbG9jYXRpb24gb24gaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMuIFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBjcmFzaGVzIGFuZCByZXN0YXJ0cy4KCkZpcnN0LCB0aGUgY29yZSBlbGVtZW50cy4gSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgY29uZmlndXJhdGlvbnMgd2UmIzM5O2xsIG5lZWQgdG8gZW5hYmxlOiBgTUVNT1JZX0ZBSUxVUkVgLCBgS0VYRUNgLCBhbmQgYEtFWEVDX0ZJTEVgLiBgTUVNT1JZX0ZBSUxVUkVgIGlzIGNvbnRpbmdlbnQgb24gYE1NVWAgYW5kIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIFRoZSBvdGhlciB0d28gYXJlIGZhaXJseSBzdGFuZGFyZCBmb3Iga2V4ZWMgb24gc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXMuCgpOb3cgZm9yIHRoZSBmb2N1cyBzeW1ib2xzLCB0aGVzZSBhcmUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMuIEkmIzM5O3ZlIHZlcmlmaWVkIG15IGNob2ljZXM6IGBrZXhlY19sb2NhdGVfbWVtX2hvbGVgLCBpdCBzZWVtcywgaXMgdGhlIGNvcnJlY3QgZnVuY3Rpb24gYXMgYGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bmAgYW5kIGBsb2NhdGVfbWVtX2hvbGVfYm90dG9tX3VwYCBhcmUgY2FsbGVkIGFuZCBhcmUgdXNlZCBieSBga2V4ZWNfbG9jYXRlX21lbV9ob2xlYC4gR29vZC4gVGhlbiwgYHJhbmdlX2ZpcnN0X2h3cG9pc29uYCBhbmQgYHJhbmdlX2xhc3RfaHdwb2lzb25gIGFyZSBnb29kIGZvY3VzIHN5bWJvbHMgYXMgdGhleSBhcmUgbm90IHN0YXRpYywgYW5kIGhhdmUgYmVlbiBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9tbS5oYCBhbmQgZGVmaW5lZCBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFNhbWUgY2FzZSBmb3IgYHNhbml0eV9jaGVja19zZWdtZW50X2xpc3RgLCB3aGljaCBpcyBkZWZpbmVkIGluIGBrZXJuZWwva2V4ZWNfY29yZS5jYCBhbmQgZGVjbGFyZWQgaW4gYGtlcm5lbC9rZXhlY19pbnRlcm5hbC5oYC4KCkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIG1vZGlmaWVzIGZ1bmRhbWVudGFsIGtlcm5lbCBsb2dpYy4gVGhlIGBrZXhlY19sb2FkYCBhbmQgYGtleGVjX2ZpbGVfbG9hZGAgc3lzY2FsbHMgYXJlIHJlbGV2YW50LgoKU28gbXkgYXNzZXNzbWVudDoKCiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlCiogICAqKlJlYXNvbmluZzoqKiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBwb2lzb25lZCBwYWdlcyB3aXRoaW4gdGhlIGBrZXhlY2Agc3Vic3lzdGVtLiBJdCB0b3VjaGVzIGNvcmUga2VybmVsIGxvZ2ljIGFjY2Vzc2libGUgdmlhIHN5c2NhbGxzLgoqICAgKipGb2N1c1N5bWJvbHM6KiogYHNhbml0eV9jaGVja19zZWdtZW50X2xpc3RgLCBga2V4ZWNfbG9jYXRlX21lbV9ob2xlYCwgYHJhbmdlX2ZpcnN0X2h3cG9pc29uYCwgYHJhbmdlX2xhc3RfaHdwb2lzb25gCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE1FTU9SWV9GQUlMVVJFYCwgYEtFWEVDYCwgYEtFWEVDX0ZJTEVgCgpJJiMzOTttIHJlYWR5IHRvIHVzZSB0aGUgc2V0LXJlc3VsdHMgdG9vbCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtLRVhFQyYjMzQ7LAogICAgJiMzNDtLRVhFQ19GSUxFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdCYjMzQ7LAogICAgJiMzNDtrZXhlY19sb2NhdGVfbWVtX2hvbGUmIzM0OywKICAgICYjMzQ7cmFuZ2VfZmlyc3RfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7cmFuZ2VfbGFzdF9od3BvaXNvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUga2V4ZWMgc3Vic3lzdGVtIHRvIGF2b2lkIGFsbG9jYXRpbmcgbWVtb3J5IG9uIGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdGhlIGtleGVjX2xvYWQgYW5kIGtleGVjX2ZpbGVfbG9hZCBzeXNjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7S0VYRUMmIzM0OywKICAgICYjMzQ7S0VYRUNfRklMRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nhbml0eV9jaGVja19zZWdtZW50X2xpc3QmIzM0OywKICAgICYjMzQ7a2V4ZWNfbG9jYXRlX21lbV9ob2xlJiMzNDssCiAgICAmIzM0O3JhbmdlX2ZpcnN0X2h3cG9pc29uJiMzNDssCiAgICAmIzM0O3JhbmdlX2xhc3RfaHdwb2lzb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGtleGVjIHN1YnN5c3RlbSB0byBhdm9pZCBhbGxvY2F0aW5nIG1lbW9yeSBvbiBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHRoZSBrZXhlY19sb2FkIGFuZCBrZXhlY19maWxlX2xvYWQgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBjaGVja3MgdG8gYXZvaWQgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGR1cmluZyBrZXhlYyBzZWdtZW50IGFsbG9jYXRpb24gYW5kIHZhbGlkYXRpb24uIEl0IG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIHRvIHNraXAgcG9pc29uZWQgcGFnZXMgYW5kIHJlamVjdHMga2V4ZWMgc2VnbWVudHMgdGhhdCBsYW5kIG9uIHBvaXNvbmVkIG1lbW9yeS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTg2M2Y2YWM1YjViNjE3MDgwMjBiM2JjMzQzMzQyYWQ3YWU1MDZjYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDExOjU3OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDEzOTAyMzY4NDcxZTEuLmZmODNhZTdhN2VmZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTUyNTIsNiAmIzQzOzUyNTIsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBtZW1vcnlfZmFpbHVyZV9hdHRyX2dyb3VwOwogZXh0ZXJuIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyk7CiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pOwogdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpOwomIzQzO3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOwomIzQzO3BoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpCiB7CkBAIC01MjY0LDYgJiM0Mzs1MjY2LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKQogc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSkKIHsKIH0KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LAomIzQzOwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBQSFlTX0FERFJfTUFYOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsCiYjNDM7CQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gUEhZU19BRERSX01BWDsKJiM0Mzt9CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKQpkaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjX2NvcmUuYyBiL2tlcm5lbC9rZXhlY19jb3JlLmMKaW5kZXggZGM3NzBiOWE2ZDA1My4uN2VlOGM5ZjA3OGY2YiAxMDA2NDQKLS0tIGEva2VybmVsL2tleGVjX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwva2V4ZWNfY29yZS5jCkBAIC0yMTIsNiAmIzQzOzIxMiwxNiBAQCBpbnQgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChzdHJ1Y3Qga2ltYWdlICppbWFnZSkKIAl9CiAjZW5kaWYKIAomIzQzOwkvKgomIzQzOwkgKiBSZWplY3QgZGVzdGluYXRpb25zIHRoYXQgbGFuZCBvbiBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnk6IHRoZQomIzQzOwkgKiByZWxvY2F0aW9uIGNvcHkgd291bGQgbWFjaGluZS1jaGVjayBvbiB0aGUgYmFkIGZyYW1lLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3NlZ21lbnRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHJhbmdlX2ZpcnN0X2h3cG9pc29uKGltYWdlLSZndDtzZWdtZW50W2ldLm1lbSwKJiM0MzsJCQkJCSBpbWFnZS0mZ3Q7c2VnbWVudFtpXS5tZW1zeikgIT0gUEhZU19BRERSX01BWCkKJiM0MzsJCQlyZXR1cm4gLUVIV1BPSVNPTjsKJiM0MzsJfQomIzQzOwogCS8qCiAJICogVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBhcmUgc2VhcmNoZWQgZnJvbSBzeXN0ZW0gUkFNIHJhdGhlciB0aGFuCiAJICogYmVpbmcgYWxsb2NhdGVkIGZyb20gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgc28gdGhleSBhcmUgbm90IGd1YXJhbnRlZWQKZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19maWxlLmMgYi9rZXJuZWwva2V4ZWNfZmlsZS5jCmluZGV4IDJiZmJiMmQxNDRlNjkuLjUyN2ZkODA1YTNhNmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZXhlY19maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2tleGVjX2ZpbGUuYwpAQCAtNDc0LDYgJiM0Mzs0NzQsNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIHsKIAlzdHJ1Y3Qga2ltYWdlICppbWFnZSA9IGtidWYtJmd0O2ltYWdlOwogCXVuc2lnbmVkIGxvbmcgdGVtcF9zdGFydCwgdGVtcF9lbmQ7CiYjNDM7CXBoeXNfYWRkcl90IHBvaXNvbjsKIAogCXRlbXBfZW5kID0gbWluKGVuZCwga2J1Zi0mZ3Q7YnVmX21heCk7CiAJdGVtcF9zdGFydCA9IHRlbXBfZW5kIC0ga2J1Zi0mZ3Q7bWVtc3ogJiM0MzsgMTsKQEAgLTQ4Myw3ICYjNDM7NDg0LDkgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCS8qIGFsaWduIGRvd24gc3RhcnQgKi8KIAkJdGVtcF9zdGFydCA9IEFMSUdOX0RPV04odGVtcF9zdGFydCwga2J1Zi0mZ3Q7YnVmX2FsaWduKTsKIAotCQlpZiAodGVtcF9zdGFydCAmbHQ7IHN0YXJ0IHx8IHRlbXBfc3RhcnQgJmx0OyBrYnVmLSZndDtidWZfbWluKQomIzQzOwkJLyogQSBjYW5kaWRhdGUgYWJvdmUgdGhlIHJhbmdlIG1lYW5zIHRoZSB3YWxrIHdyYXBwZWQgYXJvdW5kICovCiYjNDM7CQlpZiAodGVtcF9zdGFydCAmbHQ7IHN0YXJ0IHx8IHRlbXBfc3RhcnQgJmx0OyBrYnVmLSZndDtidWZfbWluIHx8CiYjNDM7CQkgICAgdGVtcF9zdGFydCAmZ3Q7IGVuZCkKIAkJCXJldHVybiAwOwogCiAJCXRlbXBfZW5kID0gdGVtcF9zdGFydCAmIzQzOyBrYnVmLSZndDttZW1zeiAtIDE7CkBAIC01MDMsNiAmIzQzOzUwNiwxMyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCWNvbnRpbnVlOwogCQl9CiAKJiM0MzsJCXBvaXNvbiA9IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHRlbXBfc3RhcnQsIGtidWYtJmd0O21lbXN6KTsKJiM0MzsJCWlmIChwb2lzb24gIT0gUEhZU19BRERSX01BWCkgewomIzQzOwkJCS8qIHdlIGhpdCBhIHBvaXNvbmVkIHBhZ2UgKi8KJiM0MzsJCQl0ZW1wX3N0YXJ0ID0gcG9pc29uIC0ga2J1Zi0mZ3Q7bWVtc3o7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCS8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovCiAJCWJyZWFrOwogCX0gd2hpbGUgKDEpOwpAQCAtNTE5LDYgJiM0Mzs1MjksNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiB7CiAJc3RydWN0IGtpbWFnZSAqaW1hZ2UgPSBrYnVmLSZndDtpbWFnZTsKIAl1bnNpZ25lZCBsb25nIHRlbXBfc3RhcnQsIHRlbXBfZW5kOwomIzQzOwlwaHlzX2FkZHJfdCBwb2lzb247CiAKIAl0ZW1wX3N0YXJ0ID0gbWF4KHN0YXJ0LCBrYnVmLSZndDtidWZfbWluKTsKIApAQCAtNTQ1LDYgJiM0Mzs1NTYsMTMgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfYm90dG9tX3VwKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJY29udGludWU7CiAJCX0KIAomIzQzOwkJcG9pc29uID0gcmFuZ2VfbGFzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLSZndDttZW1zeik7CiYjNDM7CQlpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHsKJiM0MzsJCQkvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovCiYjNDM7CQkJdGVtcF9zdGFydCA9IHBvaXNvbiAmIzQzOyBQQUdFX1NJWkU7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCS8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovCiAJCWJyZWFrOwogCX0gd2hpbGUgKDEpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggYThiMDNlMjkyMGJhOC4uYTJjYThkZjUwMWNhZSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC05Niw2ICYjNDM7OTYsNDYgQEAgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpCiAJCW1lbWJsa19ucl9wb2lzb25fc3ViKHBmbiwgaSk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJldHVybiB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgaGFyZHdhcmUtcG9pc29uZWQgb25saW5lIHBhZ2UgaW4gW3N0YXJ0LAomIzQzOyAqIHN0YXJ0ICYjNDM7IHNpemUpLCBvciBQSFlTX0FERFJfTUFYIGlmIHRoZSByYW5nZSBpcyBjbGVhbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgcGh5c19hZGRyX3QgcmFuZ2VfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKJiM0MzsJCQkJICBib29sIGZpcnN0KQomIzQzO3sKJiM0MzsJcGh5c19hZGRyX3QgcG9pc29uID0gUEhZU19BRERSX01BWDsKJiM0MzsJdW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm47CiYjNDM7CiYjNDM7CWlmICghc2l6ZSB8fCAhYXRvbWljX2xvbmdfcmVhZCgmYW1wO251bV9wb2lzb25lZF9wYWdlcykpCiYjNDM7CQlyZXR1cm4gcG9pc29uOwomIzQzOwomIzQzOwllbmRfcGZuID0gUEhZU19QRk4oc3RhcnQgJiM0Mzsgc2l6ZSAtIDEpOwomIzQzOwlmb3IgKHBmbiA9IFBIWVNfUEZOKHN0YXJ0KTsgcGZuICZsdDs9IGVuZF9wZm47IHBmbiYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7CiYjNDM7CiYjNDM7CQlpZiAocGFnZSAmYW1wOyZhbXA7IGlzX3BhZ2VfaHdwb2lzb24ocGFnZSkpIHsKJiM0MzsJCQlpZiAoZmlyc3QpCiYjNDM7CQkJCXJldHVybiBQRk5fUEhZUyhwZm4pOwomIzQzOwomIzQzOwkJCXBvaXNvbiA9IFBGTl9QSFlTKHBmbik7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQljb25kX3Jlc2NoZWQoKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcG9pc29uOwomIzQzO30KJiM0MzsKJiM0MztwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7cGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCBmYWxzZSk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBNRl9BVFRSX1JPIC0gQ3JlYXRlIHN5c2ZzIGVudHJ5IGZvciBlYWNoIG1lbW9yeSBmYWlsdXJlIHN0YXRpc3RpY3MuCiAgKiBAX25hbWU6IG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIHBlciBOVU1BIHN5c2ZzIGRpcmVjdG9yeS4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NTQKCQkJCQkJCW91dHB1dDogMTI1CgkJCQkJCQl0aG91Z2h0czogMTAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZXcgUmlza3MgSGVyZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyBpcyBmb2N1c2VkIG9uICpwcmV2ZW50aW5nKiB0aGUgdXNlIG9mIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSB3aXRoaW4gdGhlIGtleGVjIHByb2Nlc3MsIG5vdCBpbnRyb2R1Y2luZyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBXZSYjMzk7cmUgbW9kaWZ5aW5nIGhvdyBrZXhlYyBoYW5kbGVzIG1lbW9yeSwgc3BlY2lmaWNhbGx5IHRvICphdm9pZCogYmFkIG1lbW9yeSwgd2hpY2ggaXMgYSBnb29kIHRoaW5nLgoKVGhlIHBhdGNoIHRvdWNoZXMgYG1tLmhgLCBga2V4ZWNfY29yZS5jYCwgYGtleGVjX2ZpbGUuY2AsIGFuZCBgbWVtb3J5LWZhaWx1cmUuY2AuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgbW9kaWZpY2F0aW9ucyBkb24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgS01TQU4tcmVsZXZhbnQgaXNzdWVzLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkZpcnN0LCBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAgbm93IHZhbGlkYXRlcyBrZXhlYyBzZWdtZW50cyBhZ2FpbnN0IHBvaXNvbmVkIG1lbW9yeS4gSXQgdXNlcyBgcmFuZ2VfZmlyc3RfaHdwb2lzb25gIGFuZCByZXR1cm5zIGFuIGVycm9yIGlmIGFueSBwb2lzb25lZCBtZW1vcnkgaXMgZm91bmQuIFRoaXMgaXMgYSAqdmFsaWRhdGlvbiogc3RlcC4gSSBkb24mIzM5O3Qgc2VlIGFueSByaXNrIGhlcmU7IHdlJiMzOTtyZSByZWplY3RpbmcgcHJvYmxlbWF0aWMgc2VnbWVudHMsIG5vdCB1c2luZyB1bmluaXRpYWxpemVkIGRhdGEuCgpOZXh0LCBgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duYCBhbmQgYGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXBgIG5vdyBpbmNsdWRlIGNoZWNrcyBmb3IgcG9pc29uZWQgbWVtb3J5IHVzaW5nIGByYW5nZV9maXJzdF9od3BvaXNvbmAgb3IgYHJhbmdlX2xhc3RfaHdwb2lzb25gLiBUaGV5JiMzOTtyZSAqYWxsb2NhdGluZyogbWVtb3J5IGZvciBrZXhlYyBzZWdtZW50cywgYnV0IG5vdyB0aGV5IGFyZSBhY3RpdmVseSBhdm9pZGluZyBwb2lzb25lZCBtZW1vcnkgcmVnaW9ucy4gVGhlIGZ1bmN0aW9ucyBhZGp1c3QgdGhlaXIgc2VhcmNoIGJhc2VkIG9uIHRoZSBwb2lzb25lZCBzdGF0dXMgb2YgdGhlIGNhbmRpZGF0ZSByZWdpb24uIENydWNpYWxseSwgdGhleSBkbyBub3QgcmVhZCBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGV5IGFyZSBtZXJlbHkgdXNpbmcgYSBmdW5jdGlvbiB0byBhdm9pZCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyByZWdpb25zLgoKRmluYWxseSwgYHJhbmdlX2h3cG9pc29uYCBqdXN0IGl0ZXJhdGVzIHRocm91Z2ggYSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIGFuZCBjYWxscyBgaXNfcGFnZV9od3BvaXNvbmAuIEFnYWluLCBpdCYjMzk7cyBhYm91dCBkZXRlY3RpbmcgYW5kIHJlcG9ydGluZyBwb2lzb25lZCBwYWdlcywgbm90ICpjcmVhdGluZyogdGhlbSBvciBleHBvc2luZyB0aGVtLgoKU28sIGxldCYjMzk7cyBzdW1tYXJpemUgdGhlIGtleSBwb2ludHM6CgoqICAgVGhlIHBhdGNoICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIG5ldyBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IGdldCBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLgoqICAgTm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlczsgdGhlIGNvZGUgc2VlbXMgY2xlYW4gd2l0aCBwcm9wZXIgaW5pdGlhbGl6YXRpb24uCiogICBObyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIGFuZCBsZWZ0IHVuaW5pdGlhbGl6ZWQuCiogICBUaGUgYm91bmRzIGNoZWNrcyBoYXZlIGJlZW4gdXBkYXRlZCB0byAqYXZvaWQqIHVzaW5nIHBvaXNvbmVkIG1lbW9yeS4gVGhpcyBpcyBleGFjdGx5IHdoYXQgd2Ugd2FudC4gSXQgZG9lc24mIzM5O3QgYWxsb3cgYWNjZXNzZXMgdG8gdW5pbml0aWFsaXplZCBieXRlcyBvZiAqZXhpc3RpbmcqIGJ1ZmZlcnMuCgpUaGVyZWZvcmUsIHNpbmNlIHRoZSBwYXRjaCYjMzk7cyBwcmltYXJ5IGZ1bmN0aW9uIGlzIHRvICphdm9pZCogdGhlIHV0aWxpemF0aW9uIG9mIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBkdXJpbmcga2V4ZWMsIGl0IGRvZXMgbm90IGludm9sdmUgZGF0YSB0cmFuc2ZlciB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGNyZWF0ZSBhbnkgcG90ZW50aWFsIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY29kZSBpdHNlbGYsIHRoYXQgSSYjMzk7dmUgcmV2aWV3ZWQsIGFwcGVhcnMgdG8gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYXMgd2VsbC4gSSBkb24mIzM5O3Qgc2VlIGEgcmlzayB0aGF0IGp1c3RpZmllcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHNob3VsZCBiZSBzdWZmaWNpZW50LgoKT2theSwgbGV0IG1lIGRvIG9uZSBsYXN0IHNwb3QgY2hlY2suIEluIGBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd25gIGFuZCBgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cGAsIHRoZSB2YXJpYWJsZSBgcG9pc29uYCBpcyBhbHdheXMgYXNzaWduZWQgYmVmb3JlIGl0JiMzOTtzIHVzZWQuIFNhbWUgd2l0aCBgcmFuZ2VfaHdwb2lzb25gOyBhbGwgdmFyaWFibGVzIGluIHRoYXQgZnVuY3Rpb24gYXJlIGFsc28gaW5pdGlhbGl6ZWQuIEFsbCBjbGVhciB0aGVyZS4KCioqRmluYWwgY29uY2x1c2lvbjogTmVlZHNLTVNBTiA9IGZhbHNlLioqIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBXZSYjMzk7cmUgZ29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBjaGVja3MgdG8gYXZvaWQgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGR1cmluZyBrZXhlYyBzZWdtZW50IGFsbG9jYXRpb24gYW5kIHZhbGlkYXRpb24uIEl0IG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIHRvIHNraXAgcG9pc29uZWQgcGFnZXMgYW5kIHJlamVjdHMga2V4ZWMgc2VnbWVudHMgdGhhdCBsYW5kIG9uIHBvaXNvbmVkIG1lbW9yeS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgY2hlY2tzIHRvIGF2b2lkIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBkdXJpbmcga2V4ZWMgc2VnbWVudCBhbGxvY2F0aW9uIGFuZCB2YWxpZGF0aW9uLiBJdCBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyB0byBza2lwIHBvaXNvbmVkIHBhZ2VzIGFuZCByZWplY3RzIGtleGVjIHNlZ21lbnRzIHRoYXQgbGFuZCBvbiBwb2lzb25lZCBtZW1vcnkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBsZWF2ZSBhbnkgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgdW5pbml0aWFsaXplZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU3OjA3LjQyOTgxMjc5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMyNzU1MzE2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIktFWEVDXCIsXG4gICAgXCJLRVhFQ19GSUxFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdFwiLFxuICAgIFwia2V4ZWNfbG9jYXRlX21lbV9ob2xlXCIsXG4gICAgXCJyYW5nZV9maXJzdF9od3BvaXNvblwiLFxuICAgIFwicmFuZ2VfbGFzdF9od3BvaXNvblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBjaGVja3MgdG8gYXZvaWQgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGR1cmluZyBrZXhlYyBzZWdtZW50IGFsbG9jYXRpb24gYW5kIHZhbGlkYXRpb24uIEl0IG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIHRvIHNraXAgcG9pc29uZWQgcGFnZXMgYW5kIHJlamVjdHMga2V4ZWMgc2VnbWVudHMgdGhhdCBsYW5kIG9uIHBvaXNvbmVkIG1lbW9yeS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUga2V4ZWMgc3Vic3lzdGVtIHRvIGF2b2lkIGFsbG9jYXRpbmcgbWVtb3J5IG9uIGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdGhlIGtleGVjX2xvYWQgYW5kIGtleGVjX2ZpbGVfbG9hZCBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTc6MDcuNDI5ODE4NjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTIwNjkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE4NjNmNmFjNWI1YjYxNzA4MDIwYjNiYzM0MzM0MmFkN2FlNTA2Y2NcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTE6NTc6MDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuaW5kZXggMTM5MDIzNjg0NzFlMS4uZmY4M2FlN2E3ZWZlNiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5AQCAtNTI1Miw2ICs1MjUyLDggQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVtb3J5X2ZhaWx1cmVfYXR0cl9ncm91cDtcXG4gZXh0ZXJuIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyk7XFxuIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbik7XFxuIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKTtcXG4rcGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XFxuK3BoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbiB7XFxuQEAgLTUyNjQsNiArNTI2NiwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbilcXG4gc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSlcXG4ge1xcbiB9XFxuK1xcbitzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBzaXplKVxcbit7XFxuK1xcdHJldHVybiBQSFlTX0FERFJfTUFYO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4re1xcbitcXHRyZXR1cm4gUEhZU19BRERSX01BWDtcXG4rfVxcbiAjZW5kaWZcXG4gXFxuICNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0hPVFBMVUcpXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19jb3JlLmMgYi9rZXJuZWwva2V4ZWNfY29yZS5jXFxuaW5kZXggZGM3NzBiOWE2ZDA1My4uN2VlOGM5ZjA3OGY2YiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwva2V4ZWNfY29yZS5jXFxuKysrIGIva2VybmVsL2tleGVjX2NvcmUuY1xcbkBAIC0yMTIsNiArMjEyLDE2IEBAIGludCBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0KHN0cnVjdCBraW1hZ2UgKmltYWdlKVxcbiBcXHR9XFxuICNlbmRpZlxcbiBcXG4rXFx0LypcXG4rXFx0ICogUmVqZWN0IGRlc3RpbmF0aW9ucyB0aGF0IGxhbmQgb24gaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5OiB0aGVcXG4rXFx0ICogcmVsb2NhdGlvbiBjb3B5IHdvdWxkIG1hY2hpbmUtY2hlY2sgb24gdGhlIGJhZCBmcmFtZS5cXG4rXFx0ICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9zZWdtZW50czsgaSsrKSB7XFxuK1xcdFxcdGlmIChyYW5nZV9maXJzdF9od3BvaXNvbihpbWFnZS1cXHUwMDNlc2VnbWVudFtpXS5tZW0sXFxuK1xcdFxcdFxcdFxcdFxcdCBpbWFnZS1cXHUwMDNlc2VnbWVudFtpXS5tZW1zeikgIT0gUEhZU19BRERSX01BWClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSFdQT0lTT047XFxuK1xcdH1cXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgYXJlIHNlYXJjaGVkIGZyb20gc3lzdGVtIFJBTSByYXRoZXIgdGhhblxcbiBcXHQgKiBiZWluZyBhbGxvY2F0ZWQgZnJvbSB0aGUgYnVkZHkgYWxsb2NhdG9yLCBzbyB0aGV5IGFyZSBub3QgZ3VhcmFudGVlZFxcbmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWNfZmlsZS5jIGIva2VybmVsL2tleGVjX2ZpbGUuY1xcbmluZGV4IDJiZmJiMmQxNDRlNjkuLjUyN2ZkODA1YTNhNmIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2tleGVjX2ZpbGUuY1xcbisrKyBiL2tlcm5lbC9rZXhlY19maWxlLmNcXG5AQCAtNDc0LDYgKzQ3NCw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiB7XFxuIFxcdHN0cnVjdCBraW1hZ2UgKmltYWdlID0ga2J1Zi1cXHUwMDNlaW1hZ2U7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdGVtcF9zdGFydCwgdGVtcF9lbmQ7XFxuK1xcdHBoeXNfYWRkcl90IHBvaXNvbjtcXG4gXFxuIFxcdHRlbXBfZW5kID0gbWluKGVuZCwga2J1Zi1cXHUwMDNlYnVmX21heCk7XFxuIFxcdHRlbXBfc3RhcnQgPSB0ZW1wX2VuZCAtIGtidWYtXFx1MDAzZW1lbXN6ICsgMTtcXG5AQCAtNDgzLDcgKzQ4NCw5IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHQvKiBhbGlnbiBkb3duIHN0YXJ0ICovXFxuIFxcdFxcdHRlbXBfc3RhcnQgPSBBTElHTl9ET1dOKHRlbXBfc3RhcnQsIGtidWYtXFx1MDAzZWJ1Zl9hbGlnbik7XFxuIFxcbi1cXHRcXHRpZiAodGVtcF9zdGFydCBcXHUwMDNjIHN0YXJ0IHx8IHRlbXBfc3RhcnQgXFx1MDAzYyBrYnVmLVxcdTAwM2VidWZfbWluKVxcbitcXHRcXHQvKiBBIGNhbmRpZGF0ZSBhYm92ZSB0aGUgcmFuZ2UgbWVhbnMgdGhlIHdhbGsgd3JhcHBlZCBhcm91bmQgKi9cXG4rXFx0XFx0aWYgKHRlbXBfc3RhcnQgXFx1MDAzYyBzdGFydCB8fCB0ZW1wX3N0YXJ0IFxcdTAwM2Mga2J1Zi1cXHUwMDNlYnVmX21pbiB8fFxcbitcXHRcXHQgICAgdGVtcF9zdGFydCBcXHUwMDNlIGVuZClcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRcXHR0ZW1wX2VuZCA9IHRlbXBfc3RhcnQgKyBrYnVmLVxcdTAwM2VtZW1zeiAtIDE7XFxuQEAgLTUwMyw2ICs1MDYsMTMgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcbitcXHRcXHRwb2lzb24gPSByYW5nZV9maXJzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLVxcdTAwM2VtZW1zeik7XFxuK1xcdFxcdGlmIChwb2lzb24gIT0gUEhZU19BRERSX01BWCkge1xcbitcXHRcXHRcXHQvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovXFxuK1xcdFxcdFxcdHRlbXBfc3RhcnQgPSBwb2lzb24gLSBrYnVmLVxcdTAwM2VtZW1zejtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdC8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9IHdoaWxlICgxKTtcXG5AQCAtNTE5LDYgKzUyOSw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4ge1xcbiBcXHRzdHJ1Y3Qga2ltYWdlICppbWFnZSA9IGtidWYtXFx1MDAzZWltYWdlO1xcbiBcXHR1bnNpZ25lZCBsb25nIHRlbXBfc3RhcnQsIHRlbXBfZW5kO1xcbitcXHRwaHlzX2FkZHJfdCBwb2lzb247XFxuIFxcbiBcXHR0ZW1wX3N0YXJ0ID0gbWF4KHN0YXJ0LCBrYnVmLVxcdTAwM2VidWZfbWluKTtcXG4gXFxuQEAgLTU0NSw2ICs1NTYsMTMgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfYm90dG9tX3VwKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0cG9pc29uID0gcmFuZ2VfbGFzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLVxcdTAwM2VtZW1zeik7XFxuK1xcdFxcdGlmIChwb2lzb24gIT0gUEhZU19BRERSX01BWCkge1xcbitcXHRcXHRcXHQvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovXFxuK1xcdFxcdFxcdHRlbXBfc3RhcnQgPSBwb2lzb24gKyBQQUdFX1NJWkU7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHQvKiBXZSBmb3VuZCBhIHN1aXRhYmxlIG1lbW9yeSByYW5nZSAqL1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fSB3aGlsZSAoMSk7XFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuaW5kZXggYThiMDNlMjkyMGJhOC4uYTJjYThkZjUwMWNhZSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXFxuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbkBAIC05Niw2ICs5Niw0NiBAQCB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSlcXG4gXFx0XFx0bWVtYmxrX25yX3BvaXNvbl9zdWIocGZuLCBpKTtcXG4gfVxcbiBcXG4rLypcXG4rICogUmV0dXJuIHRoZSBmaXJzdCBvciB0aGUgbGFzdCBoYXJkd2FyZS1wb2lzb25lZCBvbmxpbmUgcGFnZSBpbiBbc3RhcnQsXFxuKyAqIHN0YXJ0ICsgc2l6ZSksIG9yIFBIWVNfQUREUl9NQVggaWYgdGhlIHJhbmdlIGlzIGNsZWFuLlxcbisgKi9cXG4rc3RhdGljIHBoeXNfYWRkcl90IHJhbmdlX2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUsXFxuK1xcdFxcdFxcdFxcdCAgYm9vbCBmaXJzdClcXG4re1xcbitcXHRwaHlzX2FkZHJfdCBwb2lzb24gPSBQSFlTX0FERFJfTUFYO1xcbitcXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbjtcXG4rXFxuK1xcdGlmICghc2l6ZSB8fCAhYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bnVtX3BvaXNvbmVkX3BhZ2VzKSlcXG4rXFx0XFx0cmV0dXJuIHBvaXNvbjtcXG4rXFxuK1xcdGVuZF9wZm4gPSBQSFlTX1BGTihzdGFydCArIHNpemUgLSAxKTtcXG4rXFx0Zm9yIChwZm4gPSBQSFlTX1BGTihzdGFydCk7IHBmbiBcXHUwMDNjPSBlbmRfcGZuOyBwZm4rKykge1xcbitcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19vbmxpbmVfcGFnZShwZm4pO1xcbitcXG4rXFx0XFx0aWYgKHBhZ2UgXFx1MDAyNlxcdTAwMjYgaXNfcGFnZV9od3BvaXNvbihwYWdlKSkge1xcbitcXHRcXHRcXHRpZiAoZmlyc3QpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBQRk5fUEhZUyhwZm4pO1xcbitcXG4rXFx0XFx0XFx0cG9pc29uID0gUEZOX1BIWVMocGZuKTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBwb2lzb247XFxuK31cXG4rXFxuK3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpXFxuK3tcXG4rXFx0cmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCB0cnVlKTtcXG4rfVxcbitcXG4rcGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxcbit7XFxuK1xcdHJldHVybiByYW5nZV9od3BvaXNvbihzdGFydCwgc2l6ZSwgZmFsc2UpO1xcbit9XFxuK1xcbiAvKipcXG4gICogTUZfQVRUUl9STyAtIENyZWF0ZSBzeXNmcyBlbnRyeSBmb3IgZWFjaCBtZW1vcnkgZmFpbHVyZSBzdGF0aXN0aWNzLlxcbiAgKiBAX25hbWU6IG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIHBlciBOVU1BIHN5c2ZzIGRpcmVjdG9yeS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTc6MDcuODk1Nzg3MTY1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDAxNjY5MjgxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIktFWEVDXCIsXG4gICAgXCJLRVhFQ19GSUxFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdFwiLFxuICAgIFwia2V4ZWNfbG9jYXRlX21lbV9ob2xlXCIsXG4gICAgXCJyYW5nZV9maXJzdF9od3BvaXNvblwiLFxuICAgIFwicmFuZ2VfbGFzdF9od3BvaXNvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBrZXhlYyBzdWJzeXN0ZW0gdG8gYXZvaWQgYWxsb2NhdGluZyBtZW1vcnkgb24gaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB0aGUga2V4ZWNfbG9hZCBhbmQga2V4ZWNfZmlsZV9sb2FkIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhODYzZjZhYzViNWI2MTcwODAyMGIzYmMzNDMzNDJhZDdhZTUwNmNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTE6NTc6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDEzOTAyMzY4NDcxZTEuLmZmODNhZTdhN2VmZTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTUyNTIsNiArNTI1Miw4IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXA7XG4gZXh0ZXJuIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyk7XG4gdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSk7XG4rcGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4rcGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuIHtcbkBAIC01MjY0LDYgKzUyNjYsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pXG4gc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSlcbiB7XG4gfVxuK1xuK3N0YXRpYyBpbmxpbmUgcGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsXG4rXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0cmV0dXJuIFBIWVNfQUREUl9NQVg7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgcGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCxcbitcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBzaXplKVxuK3tcbitcdHJldHVybiBQSFlTX0FERFJfTUFYO1xuK31cbiAjZW5kaWZcbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRylcbmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWNfY29yZS5jIGIva2VybmVsL2tleGVjX2NvcmUuY1xuaW5kZXggZGM3NzBiOWE2ZDA1My4uN2VlOGM5ZjA3OGY2YiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9rZXhlY19jb3JlLmNcbisrKyBiL2tlcm5lbC9rZXhlY19jb3JlLmNcbkBAIC0yMTIsNiArMjEyLDE2IEBAIGludCBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0KHN0cnVjdCBraW1hZ2UgKmltYWdlKVxuIFx0fVxuICNlbmRpZlxuIFxuK1x0LypcbitcdCAqIFJlamVjdCBkZXN0aW5hdGlvbnMgdGhhdCBsYW5kIG9uIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeTogdGhlXG4rXHQgKiByZWxvY2F0aW9uIGNvcHkgd291bGQgbWFjaGluZS1jaGVjayBvbiB0aGUgYmFkIGZyYW1lLlxuK1x0ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9zZWdtZW50czsgaSsrKSB7XG4rXHRcdGlmIChyYW5nZV9maXJzdF9od3BvaXNvbihpbWFnZS1cdTAwM2VzZWdtZW50W2ldLm1lbSxcbitcdFx0XHRcdFx0IGltYWdlLVx1MDAzZXNlZ21lbnRbaV0ubWVtc3opICE9IFBIWVNfQUREUl9NQVgpXG4rXHRcdFx0cmV0dXJuIC1FSFdQT0lTT047XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBhcmUgc2VhcmNoZWQgZnJvbSBzeXN0ZW0gUkFNIHJhdGhlciB0aGFuXG4gXHQgKiBiZWluZyBhbGxvY2F0ZWQgZnJvbSB0aGUgYnVkZHkgYWxsb2NhdG9yLCBzbyB0aGV5IGFyZSBub3QgZ3VhcmFudGVlZFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19maWxlLmMgYi9rZXJuZWwva2V4ZWNfZmlsZS5jXG5pbmRleCAyYmZiYjJkMTQ0ZTY5Li41MjdmZDgwNWEzYTZiIDEwMDY0NFxuLS0tIGEva2VybmVsL2tleGVjX2ZpbGUuY1xuKysrIGIva2VybmVsL2tleGVjX2ZpbGUuY1xuQEAgLTQ3NCw2ICs0NzQsNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiB7XG4gXHRzdHJ1Y3Qga2ltYWdlICppbWFnZSA9IGtidWYtXHUwMDNlaW1hZ2U7XG4gXHR1bnNpZ25lZCBsb25nIHRlbXBfc3RhcnQsIHRlbXBfZW5kO1xuK1x0cGh5c19hZGRyX3QgcG9pc29uO1xuIFxuIFx0dGVtcF9lbmQgPSBtaW4oZW5kLCBrYnVmLVx1MDAzZWJ1Zl9tYXgpO1xuIFx0dGVtcF9zdGFydCA9IHRlbXBfZW5kIC0ga2J1Zi1cdTAwM2VtZW1zeiArIDE7XG5AQCAtNDgzLDcgKzQ4NCw5IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHQvKiBhbGlnbiBkb3duIHN0YXJ0ICovXG4gXHRcdHRlbXBfc3RhcnQgPSBBTElHTl9ET1dOKHRlbXBfc3RhcnQsIGtidWYtXHUwMDNlYnVmX2FsaWduKTtcbiBcbi1cdFx0aWYgKHRlbXBfc3RhcnQgXHUwMDNjIHN0YXJ0IHx8IHRlbXBfc3RhcnQgXHUwMDNjIGtidWYtXHUwMDNlYnVmX21pbilcbitcdFx0LyogQSBjYW5kaWRhdGUgYWJvdmUgdGhlIHJhbmdlIG1lYW5zIHRoZSB3YWxrIHdyYXBwZWQgYXJvdW5kICovXG4rXHRcdGlmICh0ZW1wX3N0YXJ0IFx1MDAzYyBzdGFydCB8fCB0ZW1wX3N0YXJ0IFx1MDAzYyBrYnVmLVx1MDAzZWJ1Zl9taW4gfHxcbitcdFx0ICAgIHRlbXBfc3RhcnQgXHUwMDNlIGVuZClcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0dGVtcF9lbmQgPSB0ZW1wX3N0YXJ0ICsga2J1Zi1cdTAwM2VtZW1zeiAtIDE7XG5AQCAtNTAzLDYgKzUwNiwxMyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuK1x0XHRwb2lzb24gPSByYW5nZV9maXJzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLVx1MDAzZW1lbXN6KTtcbitcdFx0aWYgKHBvaXNvbiAhPSBQSFlTX0FERFJfTUFYKSB7XG4rXHRcdFx0Lyogd2UgaGl0IGEgcG9pc29uZWQgcGFnZSAqL1xuK1x0XHRcdHRlbXBfc3RhcnQgPSBwb2lzb24gLSBrYnVmLVx1MDAzZW1lbXN6O1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdC8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovXG4gXHRcdGJyZWFrO1xuIFx0fSB3aGlsZSAoMSk7XG5AQCAtNTE5LDYgKzUyOSw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiB7XG4gXHRzdHJ1Y3Qga2ltYWdlICppbWFnZSA9IGtidWYtXHUwMDNlaW1hZ2U7XG4gXHR1bnNpZ25lZCBsb25nIHRlbXBfc3RhcnQsIHRlbXBfZW5kO1xuK1x0cGh5c19hZGRyX3QgcG9pc29uO1xuIFxuIFx0dGVtcF9zdGFydCA9IG1heChzdGFydCwga2J1Zi1cdTAwM2VidWZfbWluKTtcbiBcbkBAIC01NDUsNiArNTU2LDEzIEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuK1x0XHRwb2lzb24gPSByYW5nZV9sYXN0X2h3cG9pc29uKHRlbXBfc3RhcnQsIGtidWYtXHUwMDNlbWVtc3opO1xuK1x0XHRpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHtcbitcdFx0XHQvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovXG4rXHRcdFx0dGVtcF9zdGFydCA9IHBvaXNvbiArIFBBR0VfU0laRTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuIFx0XHQvKiBXZSBmb3VuZCBhIHN1aXRhYmxlIG1lbW9yeSByYW5nZSAqL1xuIFx0XHRicmVhaztcbiBcdH0gd2hpbGUgKDEpO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCBhOGIwM2UyOTIwYmE4Li5hMmNhOGRmNTAxY2FlIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTk2LDYgKzk2LDQ2IEBAIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKVxuIFx0XHRtZW1ibGtfbnJfcG9pc29uX3N1YihwZm4sIGkpO1xuIH1cbiBcbisvKlxuKyAqIFJldHVybiB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgaGFyZHdhcmUtcG9pc29uZWQgb25saW5lIHBhZ2UgaW4gW3N0YXJ0LFxuKyAqIHN0YXJ0ICsgc2l6ZSksIG9yIFBIWVNfQUREUl9NQVggaWYgdGhlIHJhbmdlIGlzIGNsZWFuLlxuKyAqL1xuK3N0YXRpYyBwaHlzX2FkZHJfdCByYW5nZV9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxuK1x0XHRcdFx0ICBib29sIGZpcnN0KVxuK3tcbitcdHBoeXNfYWRkcl90IHBvaXNvbiA9IFBIWVNfQUREUl9NQVg7XG4rXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbjtcbitcbitcdGlmICghc2l6ZSB8fCAhYXRvbWljX2xvbmdfcmVhZChcdTAwMjZudW1fcG9pc29uZWRfcGFnZXMpKVxuK1x0XHRyZXR1cm4gcG9pc29uO1xuK1xuK1x0ZW5kX3BmbiA9IFBIWVNfUEZOKHN0YXJ0ICsgc2l6ZSAtIDEpO1xuK1x0Zm9yIChwZm4gPSBQSFlTX1BGTihzdGFydCk7IHBmbiBcdTAwM2M9IGVuZF9wZm47IHBmbisrKSB7XG4rXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4rXG4rXHRcdGlmIChwYWdlIFx1MDAyNlx1MDAyNiBpc19wYWdlX2h3cG9pc29uKHBhZ2UpKSB7XG4rXHRcdFx0aWYgKGZpcnN0KVxuK1x0XHRcdFx0cmV0dXJuIFBGTl9QSFlTKHBmbik7XG4rXG4rXHRcdFx0cG9pc29uID0gUEZOX1BIWVMocGZuKTtcbitcdFx0fVxuK1xuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbitcdH1cbitcbitcdHJldHVybiBwb2lzb247XG4rfVxuK1xuK3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0cmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCB0cnVlKTtcbit9XG4rXG4rcGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxuK3tcbitcdHJldHVybiByYW5nZV9od3BvaXNvbihzdGFydCwgc2l6ZSwgZmFsc2UpO1xuK31cbitcbiAvKipcbiAgKiBNRl9BVFRSX1JPIC0gQ3JlYXRlIHN5c2ZzIGVudHJ5IGZvciBlYWNoIG1lbW9yeSBmYWlsdXJlIHN0YXRpc3RpY3MuXG4gICogQF9uYW1lOiBuYW1lIG9mIHRoZSBmaWxlIGluIHRoZSBwZXIgTlVNQSBzeXNmcyBkaXJlY3RvcnkuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1NzowNy44OTU3ODg2MTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODcxMzIxNTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQ2FuZGlkYXRlIEV2YWx1YXRpb246IEtlcm5lbCBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZ2l2ZW4gYSBwYXRjaCBzZXJpZXMgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCB3YXJyYW50IGZ1enppbmcuIExldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCB0aGlzIHBhdGNoIG1vZGlmaWVzIGBpbmNsdWRlL2xpbnV4L21tLmhgLCBga2VybmVsL2tleGVjX2NvcmUuY2AsIGBrZXJuZWwva2V4ZWNfZmlsZS5jYCwgYW5kIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhhdCdzIGEgZGVjZW50IHNwcmVhZCwgaW5kaWNhdGluZyBjaGFuZ2VzIGluIGJvdGgga2V4ZWMgYW5kIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIOKAkyBjcml0aWNhbCBhcmVhcywgZGVmaW5pdGVseS5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgaG93IGtleGVjIGludGVyYWN0cyB3aXRoIGFuZCBoYW5kbGVzIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeS4gVGhlIHBhdGNoIGFkZHMgY2hlY2tzIGluIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YCwgcHJldmVudGluZyBrZXhlYyBzZWdtZW50cyBmcm9tIGJlaW5nIGxvYWRlZCBpbnRvIHBvaXNvbmVkIG1lbW9yeSwgYW5kIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiBrZXhlYyB1c2luZyBgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duYCBhbmQgYGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXBgIHRvIHNraXAgb3ZlciB0aGVzZSBwb2lzb25lZCByZWdpb25zLiBUaGUgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFkZGl0aW9ucyBsb29rIGxpa2UgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBvaXNvbmluZyByYW5nZSBtZWNoYW5pc21zLlxuXG5HaXZlbiB0aGF0IGl0IHRvdWNoZXMgdGhlIGtleGVjIHN1YnN5c3RlbSBhbmQgbWVtb3J5IGZhaWx1cmUsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IFdoYXQgZnVuY3Rpb25zIHNob3VsZCB3ZSB0YXJnZXQ/IEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgYEZvY3VzU3ltYm9sc2AuIExldCdzIHNlZTpcblxuKiAgIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YCBpcyBhIHN0cm9uZyBjYW5kaWRhdGUsIGFzIGl0IGlzIGEgY2VudHJhbCBjaGVjaywgcmVqZWN0aW5nIHBvaXNvbmVkIG1lbW9yeS5cblxuKiAgIGBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd25gIGFuZCBgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cGAgYXJlIGdvb2QsIGJ1dCBJIHJlbWVtYmVyLCBvciBzaG91bGQgcXVpY2tseSBjaGVjaywgdGhlIHByb21wdCBzYXlzIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy5cblxuKiAgIENoZWNraW5nIGBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd25gIGFuZCBgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cGAsIG9oIHllYWgsIHRoZXNlIGFyZSBgc3RhdGljYCBmdW5jdGlvbnMsIHNvIHRoZXkgYXJlIG5vdCBkaXJlY3RseSBleHBvc2VkIGFuZCB1c2VkLiBJIHdpbGwgbG9vayBmb3IgY2FsbHMgdG8gdGhlc2UgZnVuY3Rpb25zIHRvIGlkZW50aWZ5IGVudHJ5cG9pbnRzLlxuXG5TbywgSSB3aWxsIGxvb2sgZm9yIHRoZSBjYWxsIHNpdGVzIHRvIHRob3NlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc1NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU3OjE1Ljc2NzExMjcyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzAxNDAyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2tleGVjX2ZpbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwva2V4ZWNfZmlsZS5jPTM2ND1TWVNDQUxMX0RFRklORTUoa2V4ZWNfZmlsZV9sb2FkLCBpbnQsIGtlcm5lbF9mZCwgaW50LCBpbml0cmRfZmQsXFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTQ3MS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjQ3MjpzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTQ3My1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGtleGVjX2J1ZiAqa2J1ZilcXG4tLVxcbmtlcm5lbC9rZXhlY19maWxlLmM9NTc3PXN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB2b2lkICphcmcpXFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTU5OS1cXHRpZiAoa2J1Zi1cXHUwMDNldG9wX2Rvd24pXFxua2VybmVsL2tleGVjX2ZpbGUuYzo2MDA6XFx0XFx0cmV0dXJuIGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bihzdGFydCwgZW5kLCBrYnVmKTtcXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTYwMS1cXHRyZXR1cm4gbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cChzdGFydCwgZW5kLCBrYnVmKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTc6MTUuODIwMTMyNTE2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2NDAyMzQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqVHJhY2luZyB0aGUgU291cmNlIG9mIGBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2tgKipcblxuT2theSwgYGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFja2AgaGFzIGJlZW4gaW52b2tlZC4gTXkgZmlyc3QgdGhvdWdodCBpczogKldoZXJlKiBkaWQgdGhpcyBjYWxsIG9yaWdpbmF0ZT8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNhbGxpbmcgZnVuY3Rpb24gb3IgZnVuY3Rpb25zLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgY2FsbCBpcyBjcnVjaWFsLiBLbm93aW5nIHRoZSBjYWxsZXIgd2lsbCB0ZWxsIG1lIGEgZ3JlYXQgZGVhbCBhYm91dCB3aHkgaXQgd2FzIGNhbGxlZCBhbmQgd2hhdCdzIGdvaW5nIG9uLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIGRlYnVnZ2luZyB0b29scyBhbmQgc3RyYXRlZ2llcyB0byB0cmFjZSBiYWNrIHRoZSBleGVjdXRpb24gcGF0aC4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBzdGFydCB0aGUgaHVudCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDk0NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU3OjE4Ljc4NDE1ODQ0M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk3ODYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2tleGVjX2ZpbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwva2V4ZWNfZmlsZS5jPTUyNz1zdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTU3Ni1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjU3NzpzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFjayhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdm9pZCAqYXJnKVxcbmtlcm5lbC9rZXhlY19maWxlLmMtNTc4LXtcXG4tLVxcbmtlcm5lbC9rZXhlY19maWxlLmM9NjA1PXN0YXRpYyBpbnQga2V4ZWNfd2Fsa19tZW1ibG9jayhzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLFxcbi0tXFxua2VybmVsL2tleGVjX2ZpbGUuYy02MjAtXFx0ICogSU9SRVNPVVJDRV9TWVNSQU1fRFJJVkVSX01BTkFHRUQgaGFuZGxpbmcgaW5cXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjYyMTpcXHQgKiBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2soKS5cXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTYyMi1cXHQgKi9cXG4tLVxcbmtlcm5lbC9rZXhlY19maWxlLmM9NzMzPWludCBrZXhlY19sb2NhdGVfbWVtX2hvbGUoc3RydWN0IGtleGVjX2J1ZiAqa2J1ZilcXG4tLVxcbmtlcm5lbC9rZXhlY19maWxlLmMtNzQ0LVxcdCAqL1xcbmtlcm5lbC9rZXhlY19maWxlLmM6NzQ1OlxcdHJldCA9IGtob19sb2NhdGVfbWVtX2hvbGUoa2J1ZiwgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrKTtcXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTc0Ni1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTc1Ni1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykpXFxua2VybmVsL2tleGVjX2ZpbGUuYzo3NTc6XFx0XFx0cmV0ID0ga2V4ZWNfd2Fsa19yZXNvdXJjZXMoa2J1ZiwgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrKTtcXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTc1OC1cXHRlbHNlXFxua2VybmVsL2tleGVjX2ZpbGUuYzo3NTk6XFx0XFx0cmV0ID0ga2V4ZWNfd2Fsa19tZW1ibG9jayhrYnVmLCBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2spO1xcbmtlcm5lbC9rZXhlY19maWxlLmMtNzYwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1NzoxOC44MzAxNDQxNzJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDA4MTgyMTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCdzIEJvb3QgUHJvY2VzcyoqXG5cbkFscmlnaHQsIHRoZSBkZWJ1Z2dpbmcgaGFzIGxlZCBtZSB0byBga2V4ZWNfbG9jYXRlX21lbV9ob2xlYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgYmVnaW5zLCB0aGUgZW50cnkgcG9pbnQgZm9yIG1lbW9yeSBob2xlIGRldGVjdGlvbiBpbiB0aGlzIGtleGVjIGltcGxlbWVudGF0aW9uLiBOb3csIGJlZm9yZSBJIGV2ZW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IGFsbG9jYXRpb24sIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZvdW5kYXRpb25hbCBkYXRhIHN0cnVjdHVyZXMgYXJlIGluIG9yZGVyLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgc2VnbWVudCBsaXN0IGlzIGNvaGVyZW50IGJlZm9yZSB0cnVzdGluZyB0aGUgcmVzdCBvZiB0aGUgbG9naWMuIEdhcmJhZ2UgaW4sIGdhcmJhZ2Ugb3V0LCBhcyB0aGV5IHNheSEgSXQncyBsaWtlbHkgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNoZWNraW5nIGZvciBvdmVybGFwcywgaW52YWxpZCBhZGRyZXNzZXMsIG9yIG90aGVyIHN0cnVjdHVyYWwgcHJvYmxlbXMgaW4gdGhlIG1lbW9yeSBtYXAgdXNlZCBieSBrZXhlYy4gQSBiYWQgc2VnbWVudCBsaXN0IHdpbGwgdGhyb3cgYSB3cmVuY2ggaW50byBldmVyeXRoaW5nLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGEgY3Jhc2ggbGF0ZXIuIFNvLCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBpbnRlZ3JpdHkgZmlyc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1ODYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1NzoyMi44MzgzMjkyOTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxMjQyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwva2V4ZWNfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9rZXhlY19jb3JlLmM9MTA2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqa2ltYWdlX2FsbG9jX3BhZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UsXFxuLS1cXG5rZXJuZWwva2V4ZWNfY29yZS5jLTEwOS1cXG5rZXJuZWwva2V4ZWNfY29yZS5jOjExMDppbnQgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChzdHJ1Y3Qga2ltYWdlICppbWFnZSlcXG5rZXJuZWwva2V4ZWNfY29yZS5jLTExMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU3OjIyLjg4MjQ2MDgwNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0Mjk4MDY2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipUcmFjaW5nIHRoZSBDYWxsIFN0YWNrIGZvciBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIGNvbnRleHQgb2YgYHNhbml0eV9jaGVja19zZWdtZW50X2xpc3RgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRldGVybWluZSBpdHMgdXBzdHJlYW0gZGVwZW5kZW5jaWVzLiBJJ20gdGhpbmtpbmcsIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKmNhbGxlZCo/IEtub3dpbmcgdGhhdCB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBpbnNpZ2h0IGludG8gaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCdzIHVzZWQgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSBuZWVkIHRvIHF1aWNrbHkgdHJhY2UgdGhlIGNhbGwgc3RhY2sgdG8gc2VlIHdoYXQgZnVuY3Rpb25zIGludm9rZSBpdC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBpbW1lZGlhdGUgY2FsbGVycywgYW5kIHRoZW4gcG90ZW50aWFsbHkgdGhlaXIgY2FsbGVycywgYW5kIHNvIG9uLCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIHJvbGUuIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gZGVidWdnaW5nIG9yIHVuZGVyc3RhbmRpbmcgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcyB0byB0aGlzIHNlZ21lbnQuIEknbGwgbmVlZCB0byB1c2Ugc29tZSB0b29scyBvciBnb29kIG9sZC1mYXNoaW9uZWQgY29kZSBkaXZpbmcgdG8gcXVpY2tseSBmaW5kIGFsbCBpbnN0YW5jZXMgb2YgYHNhbml0eV9jaGVja19zZWdtZW50X2xpc3RgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTQ5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTc6MjYuMzEyMjcwMjA3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTA5MTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2tleGVjLmM9MjI9c3RhdGljIGludCBraW1hZ2VfYWxsb2NfaW5pdChzdHJ1Y3Qga2ltYWdlICoqcmltYWdlLCB1bnNpZ25lZCBsb25nIGVudHJ5LFxcbi0tXFxua2VybmVsL2tleGVjLmMtNTYtXFxua2VybmVsL2tleGVjLmM6NTc6XFx0cmV0ID0gc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChpbWFnZSk7XFxua2VybmVsL2tleGVjLmMtNTgtXFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9rZXhlY19jb3JlLmM9MTA2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqa2ltYWdlX2FsbG9jX3BhZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UsXFxuLS1cXG5rZXJuZWwva2V4ZWNfY29yZS5jLTEwOS1cXG5rZXJuZWwva2V4ZWNfY29yZS5jOjExMDppbnQgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChzdHJ1Y3Qga2ltYWdlICppbWFnZSlcXG5rZXJuZWwva2V4ZWNfY29yZS5jLTExMS17XFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jPTMwNT1raW1hZ2VfZmlsZV9hbGxvY19pbml0KHN0cnVjdCBraW1hZ2UgKipyaW1hZ2UsIGludCBrZXJuZWxfZmQsXFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTMzMi1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjMzMzpcXHRyZXQgPSBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0KGltYWdlKTtcXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTMzNC1cXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL2tleGVjX2ludGVybmFsLmg9OT1zdHJ1Y3Qga2ltYWdlICpkb19raW1hZ2VfYWxsb2NfaW5pdCh2b2lkKTtcXG5rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaDoxMDppbnQgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChzdHJ1Y3Qga2ltYWdlICppbWFnZSk7XFxua2VybmVsL2tleGVjX2ludGVybmFsLmgtMTEtdm9pZCBraW1hZ2VfZnJlZV9wYWdlX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU3OjI2LjM2NzM3MzIyNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYwNDY3NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIGBrZXhlY2AgYW5kIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYGtleGVjYCBsb2FkIHByb2Nlc3MuIEZyb20gd2hhdCBJIGNhbiBzZWUsIGBraW1hZ2VfYWxsb2NfaW5pdGAgYW5kIGBraW1hZ2VfZmlsZV9hbGxvY19pbml0YCBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMsIHNwZWNpZmljYWxseSBjYWxsZWQgZnJvbSBgc3lzX2tleGVjX2xvYWRgIGFuZCBgc3lzX2tleGVjX2ZpbGVfbG9hZGAuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhhdCBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZvY3VzZWQgYW5hbHlzaXMgd2l0aGluIHRoZSBjb2RlLiBUaGVuIEkgYWxzbyBzaG91bGQgbG9vayBpbnRvIGBrZXhlY19sb2NhdGVfbWVtX2hvbGVgLlxuXG5GdXJ0aGVybW9yZSwgSSBzaG91bGQgYmUgbG9va2luZyBhdCBgcmFuZ2VfZmlyc3RfaHdwb2lzb25gIGFuZCBgcmFuZ2VfbGFzdF9od3BvaXNvbmAuIFRoZXkncmUgZXhwb3J0ZWQgZnVuY3Rpb25zIHJlc2lkaW5nIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgd2hpY2ggbGlrZWx5IG1lYW5zIHRoZXkncmUgY29yZSB0byB0aGUgbWVtb3J5LWZhaWx1cmUgaGFuZGxpbmcuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dC4gVGhpcyBwYXRjaCB0b3VjaGVzIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhhdCBmaWxlJ3MgY29tcGlsYXRpb24gaXMgZ2F0ZWQgYnkgYENPTkZJR19NRU1PUllfRkFJTFVSRWAuIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBvcHRpb24ncyBzdGF0dXMuIEknbGwgbmVlZCB0byBjaGVjayBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhhdCBmbGFnLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTUxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU3OjMwLjYyNzg0MzcxMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0MzI5NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtb3J5LWZhaWx1cmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTExPW9iai0kKENPTkZJR19ETUFQT09MX1RFU1QpICs9IGRtYXBvb2xfdGVzdC5vXFxubW0vTWFrZWZpbGU6MTEyOm9iai0kKENPTkZJR19NRU1PUllfRkFJTFVSRSkgKz0gbWVtb3J5LWZhaWx1cmUub1xcbm1tL01ha2VmaWxlLTExMy1vYmotJChDT05GSUdfSFdQT0lTT05fSU5KRUNUKSArPSBod3BvaXNvbi1pbmplY3Qub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1NzozMC42NzEyODI5OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQwNDEwNTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgS2VybmVsIEJ1aWxkIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUgaGVyZS4gVGhhdCdzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLiBBbHNvLCBJJ20gbm90aW5nIHRoYXQgYm90aCBga2V4ZWNfY29yZS5jYCBhbmQgYGtleGVjX2ZpbGUuY2AgYXJlIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX0tFWEVDX0NPUkVgIGFuZCBgQ09ORklHX0tFWEVDX0ZJTEVgIGFyZSBhY3R1YWxseSAqZW5hYmxlZCogaW4gdGhlIGtlcm5lbCBjb25maWcuIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gZW5zdXJlIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgYXJlIGFsbCBpbiBsaW5lLiBHaXZlbiB0aGlzLCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCB0aGUga2VybmVsJ3MgYE1ha2VmaWxlYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHJ1bGVzLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1NzozNC4xMTE2OTY4MTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzE1NDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtleGVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvTWFrZWZpbGU9ODA9b2JqLSQoQ09ORklHX0NSQVNIX1JFU0VSVkUpICs9IGNyYXNoX3Jlc2VydmUub1xcbmtlcm5lbC9NYWtlZmlsZTo4MTpvYmotJChDT05GSUdfS0VYRUNfQ09SRSkgKz0ga2V4ZWNfY29yZS5vXFxua2VybmVsL01ha2VmaWxlLTgyLW9iai0kKENPTkZJR19DUkFTSF9EVU1QKSArPSBjcmFzaF9jb3JlLm9cXG4tLVxcbmtlcm5lbC9NYWtlZmlsZT04ND1vYmotJChDT05GSUdfQ1JBU0hfRFVNUF9LVU5JVF9URVNUKSArPSBjcmFzaF9jb3JlX3Rlc3Qub1xcbmtlcm5lbC9NYWtlZmlsZTo4NTpvYmotJChDT05GSUdfS0VYRUMpICs9IGtleGVjLm9cXG5rZXJuZWwvTWFrZWZpbGU6ODY6b2JqLSQoQ09ORklHX0tFWEVDX0ZJTEUpICs9IGtleGVjX2ZpbGUub1xcbmtlcm5lbC9NYWtlZmlsZTo4NzpvYmotJChDT05GSUdfS0VYRUNfRUxGKSArPSBrZXhlY19lbGYub1xcbmtlcm5lbC9NYWtlZmlsZS04OC1vYmotJChDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCkgKz0gYmFja3RyYWNldGVzdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU3OjM0LjE1NjQyMzQxMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTA2MDExMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMga2V4ZWMgZnVuY3Rpb25hbGl0eSwgdGhlIGZ1bmRhbWVudGFscyDigJMgYENPTkZJR19LRVhFQ19DT1JFYCBhbmQgYENPTkZJR19LRVhFQ19GSUxFYCDigJMgdGhvc2UgYXJlIGEgZ2l2ZW4uIE5vIHN1cnByaXNlcyB0aGVyZS4gQnV0IGJlZm9yZSBJIGdvIHRvbyBmYXIgZG93biB0aGlzIHJvYWQsIEknbSB0aGlua2luZywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLiBJdCdzIHByZXR0eSBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIG92ZXJhbGwga2V4ZWMgYXJjaGl0ZWN0dXJlLCBlc3BlY2lhbGx5IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBtZW1vcnkgc2l0dWF0aW9ucy4gR290dGEgYmUgcHJvYWN0aXZlIGFib3V0IHRoYXQgcG90ZW50aWFsIGltcGFjdCwgcmlnaHQ/IE5lZWQgdG8gZ2V0IGEgZ3Jhc3Agb2YgdGhhdCBpbXBhY3QgdG8gcHJldmVudCBzb21lIGhlYWRhY2hlIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NDAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1NzozNy4wNjI0MzY5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQzNDI1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0ZBSUxVUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc2Mj1jb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbi0tXFxubW0vS2NvbmZpZy03NjQtXFxubW0vS2NvbmZpZzo3NjU6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXFxubW0vS2NvbmZpZy03NjYtXFx0ZGVwZW5kcyBvbiBNTVVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTc6MzcuMTA1ODc4NzM5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTgzNjQ2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqRGVwZW5kZW5jaWVzLCBEZXBlbmRlbmNpZXMsIERlcGVuZGVuY2llcyEqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IGBDT05GSUdfS0VYRUNgIGFuZCBgQ09ORklHX0tFWEVDX0ZJTEVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgYXJlIHJlbGF0ZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB3aGF0IHRoZXkgZGVwZW5kIG9uLiBJIGtub3cgdGhlIGdlbmVyYWwgYXJlYSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBhbnkgc3VidGxlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaW50ZXJhY3Rpb25zLiBMZXQncyBzZWUuLi4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gdG8gZW5zdXJlIHByb3BlciBzZXR0aW5ncyBmb3IgdGhlIGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MzMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1NzozOS45NjQyNDk2NTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzUyMjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLRVhFQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvS2NvbmZpZy5rZXhlY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvS2NvbmZpZy5rZXhlYz04PWNvbmZpZyBWTUNPUkVfSU5GT1xcbi0tXFxua2VybmVsL0tjb25maWcua2V4ZWMtMTAtXFxua2VybmVsL0tjb25maWcua2V4ZWM6MTE6Y29uZmlnIEtFWEVDX0NPUkVcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0xMi1cXHRib29sXFxua2VybmVsL0tjb25maWcua2V4ZWMtMTMtXFxua2VybmVsL0tjb25maWcua2V4ZWM6MTQ6Y29uZmlnIEtFWEVDX0VMRlxcbmtlcm5lbC9LY29uZmlnLmtleGVjLTE1LVxcdGJvb2xcXG4tLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjPTE3PWNvbmZpZyBIQVZFX0lNQV9LRVhFQ1xcbi0tXFxua2VybmVsL0tjb25maWcua2V4ZWMtMTktXFxua2VybmVsL0tjb25maWcua2V4ZWM6MjA6Y29uZmlnIEtFWEVDXFxua2VybmVsL0tjb25maWcua2V4ZWMtMjEtXFx0Ym9vbCBcXFwiRW5hYmxlIGtleGVjIHN5c3RlbSBjYWxsXFxcIlxcbi0tXFxua2VybmVsL0tjb25maWcua2V4ZWMtMzctXFxua2VybmVsL0tjb25maWcua2V4ZWM6Mzg6Y29uZmlnIEtFWEVDX0ZJTEVcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0zOS1cXHRib29sIFxcXCJFbmFibGUga2V4ZWMgZmlsZSBiYXNlZCBzeXN0ZW0gY2FsbFxcXCJcXG4tLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjLTQ4LVxcbmtlcm5lbC9LY29uZmlnLmtleGVjOjQ5OmNvbmZpZyBLRVhFQ19TSUdcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy01MC1cXHRib29sIFxcXCJWZXJpZnkga2VybmVsIHNpZ25hdHVyZSBkdXJpbmcga2V4ZWNfZmlsZV9sb2FkKCkgc3lzY2FsbFxcXCJcXG4tLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjLTYyLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjOjYzOmNvbmZpZyBLRVhFQ19TSUdfRk9SQ0VcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy02NC1cXHRib29sIFxcXCJSZXF1aXJlIGEgdmFsaWQgc2lnbmF0dXJlIGluIGtleGVjX2ZpbGVfbG9hZCgpIHN5c2NhbGxcXFwiXFxuLS1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy03MC1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzo3MTpjb25maWcgS0VYRUNfSU1BR0VfVkVSSUZZX1NJR1xcbmtlcm5lbC9LY29uZmlnLmtleGVjLTcyLVxcdGJvb2wgXFxcIkVuYWJsZSBJbWFnZSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIHN1cHBvcnQgKEFSTSlcXFwiXFxuLS1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy03OS1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzo4MDpjb25maWcgS0VYRUNfQlpJTUFHRV9WRVJJRllfU0lHXFxua2VybmVsL0tjb25maWcua2V4ZWMtODEtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ6SW1hZ2Ugc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBzdXBwb3J0XFxcIlxcbi0tXFxua2VybmVsL0tjb25maWcua2V4ZWMtODgtXFxua2VybmVsL0tjb25maWcua2V4ZWM6ODk6Y29uZmlnIEtFWEVDX0pVTVBcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy05MC1cXHRib29sIFxcXCJrZXhlYyBqdW1wXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1Nzo0MC4wMTE2MDk4MjhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk2NTE2MTA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYnJva2VuIHRoaXMgcGF0Y2ggZG93bi4gV2UncmUgZGVhbGluZyB3aXRoIGEgY2hhbmdlIHdpdGhpbiB0aGUgYGtleGVjYCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBhaW1pbmcgdG8gcHJldmVudCBtZW1vcnkgYWxsb2NhdGlvbiBvbiBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcy4gVGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGNyYXNoZXMgYW5kIHJlc3RhcnRzLlxuXG5GaXJzdCwgdGhlIGNvcmUgZWxlbWVudHMuIEkndmUgaWRlbnRpZmllZCB0aGUgY29uZmlndXJhdGlvbnMgd2UnbGwgbmVlZCB0byBlbmFibGU6IGBNRU1PUllfRkFJTFVSRWAsIGBLRVhFQ2AsIGFuZCBgS0VYRUNfRklMRWAuIGBNRU1PUllfRkFJTFVSRWAgaXMgY29udGluZ2VudCBvbiBgTU1VYCBhbmQgYEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVgLCB3aGljaCBpcyBleHBlY3RlZC4gVGhlIG90aGVyIHR3byBhcmUgZmFpcmx5IHN0YW5kYXJkIGZvciBrZXhlYyBvbiBzdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlcy5cblxuTm93IGZvciB0aGUgZm9jdXMgc3ltYm9scywgdGhlc2UgYXJlIGtleSBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzLiBJJ3ZlIHZlcmlmaWVkIG15IGNob2ljZXM6IGBrZXhlY19sb2NhdGVfbWVtX2hvbGVgLCBpdCBzZWVtcywgaXMgdGhlIGNvcnJlY3QgZnVuY3Rpb24gYXMgYGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bmAgYW5kIGBsb2NhdGVfbWVtX2hvbGVfYm90dG9tX3VwYCBhcmUgY2FsbGVkIGFuZCBhcmUgdXNlZCBieSBga2V4ZWNfbG9jYXRlX21lbV9ob2xlYC4gR29vZC4gVGhlbiwgYHJhbmdlX2ZpcnN0X2h3cG9pc29uYCBhbmQgYHJhbmdlX2xhc3RfaHdwb2lzb25gIGFyZSBnb29kIGZvY3VzIHN5bWJvbHMgYXMgdGhleSBhcmUgbm90IHN0YXRpYywgYW5kIGhhdmUgYmVlbiBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9tbS5oYCBhbmQgZGVmaW5lZCBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFNhbWUgY2FzZSBmb3IgYHNhbml0eV9jaGVja19zZWdtZW50X2xpc3RgLCB3aGljaCBpcyBkZWZpbmVkIGluIGBrZXJuZWwva2V4ZWNfY29yZS5jYCBhbmQgZGVjbGFyZWQgaW4gYGtlcm5lbC9rZXhlY19pbnRlcm5hbC5oYC5cblxuRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggbW9kaWZpZXMgZnVuZGFtZW50YWwga2VybmVsIGxvZ2ljLiBUaGUgYGtleGVjX2xvYWRgIGFuZCBga2V4ZWNfZmlsZV9sb2FkYCBzeXNjYWxscyBhcmUgcmVsZXZhbnQuXG5cblNvIG15IGFzc2Vzc21lbnQ6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlXG4qICAgKipSZWFzb25pbmc6KiogVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gcG9pc29uZWQgcGFnZXMgd2l0aGluIHRoZSBga2V4ZWNgIHN1YnN5c3RlbS4gSXQgdG91Y2hlcyBjb3JlIGtlcm5lbCBsb2dpYyBhY2Nlc3NpYmxlIHZpYSBzeXNjYWxscy5cbiogICAqKkZvY3VzU3ltYm9sczoqKiBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAsIGBrZXhlY19sb2NhdGVfbWVtX2hvbGVgLCBgcmFuZ2VfZmlyc3RfaHdwb2lzb25gLCBgcmFuZ2VfbGFzdF9od3BvaXNvbmBcbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE1FTU9SWV9GQUlMVVJFYCwgYEtFWEVDYCwgYEtFWEVDX0ZJTEVgXG5cbkknbSByZWFkeSB0byB1c2UgdGhlIHNldC1yZXN1bHRzIHRvb2wgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTM1LCJPdXRwdXRUb2tlbnMiOjEzMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1Nzo0Ny45NzY3NzM0MjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTkzNzk0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIktFWEVDXCIsXG4gICAgXCJLRVhFQ19GSUxFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdFwiLFxuICAgIFwia2V4ZWNfbG9jYXRlX21lbV9ob2xlXCIsXG4gICAgXCJyYW5nZV9maXJzdF9od3BvaXNvblwiLFxuICAgIFwicmFuZ2VfbGFzdF9od3BvaXNvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBrZXhlYyBzdWJzeXN0ZW0gdG8gYXZvaWQgYWxsb2NhdGluZyBtZW1vcnkgb24gaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB0aGUga2V4ZWNfbG9hZCBhbmQga2V4ZWNfZmlsZV9sb2FkIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJLRVhFQ1wiLFxuICAgIFwiS0VYRUNfRklMRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNhbml0eV9jaGVja19zZWdtZW50X2xpc3RcIixcbiAgICBcImtleGVjX2xvY2F0ZV9tZW1faG9sZVwiLFxuICAgIFwicmFuZ2VfZmlyc3RfaHdwb2lzb25cIixcbiAgICBcInJhbmdlX2xhc3RfaHdwb2lzb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUga2V4ZWMgc3Vic3lzdGVtIHRvIGF2b2lkIGFsbG9jYXRpbmcgbWVtb3J5IG9uIGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdGhlIGtleGVjX2xvYWQgYW5kIGtleGVjX2ZpbGVfbG9hZCBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTc6NDguMDYyNzIwMTM1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY0MjYxMjQ2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU3OjQ4LjA2MzMwMjE4NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjY0MjAyNTI2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBjaGVja3MgdG8gYXZvaWQgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGR1cmluZyBrZXhlYyBzZWdtZW50IGFsbG9jYXRpb24gYW5kIHZhbGlkYXRpb24uIEl0IG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIHRvIHNraXAgcG9pc29uZWQgcGFnZXMgYW5kIHJlamVjdHMga2V4ZWMgc2VnbWVudHMgdGhhdCBsYW5kIG9uIHBvaXNvbmVkIG1lbW9yeS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhODYzZjZhYzViNWI2MTcwODAyMGIzYmMzNDMzNDJhZDdhZTUwNmNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTE6NTc6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDEzOTAyMzY4NDcxZTEuLmZmODNhZTdhN2VmZTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTUyNTIsNiArNTI1Miw4IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXA7XG4gZXh0ZXJuIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyk7XG4gdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSk7XG4rcGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4rcGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuIHtcbkBAIC01MjY0LDYgKzUyNjYsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pXG4gc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSlcbiB7XG4gfVxuK1xuK3N0YXRpYyBpbmxpbmUgcGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsXG4rXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0cmV0dXJuIFBIWVNfQUREUl9NQVg7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgcGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCxcbitcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBzaXplKVxuK3tcbitcdHJldHVybiBQSFlTX0FERFJfTUFYO1xuK31cbiAjZW5kaWZcbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRylcbmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWNfY29yZS5jIGIva2VybmVsL2tleGVjX2NvcmUuY1xuaW5kZXggZGM3NzBiOWE2ZDA1My4uN2VlOGM5ZjA3OGY2YiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9rZXhlY19jb3JlLmNcbisrKyBiL2tlcm5lbC9rZXhlY19jb3JlLmNcbkBAIC0yMTIsNiArMjEyLDE2IEBAIGludCBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0KHN0cnVjdCBraW1hZ2UgKmltYWdlKVxuIFx0fVxuICNlbmRpZlxuIFxuK1x0LypcbitcdCAqIFJlamVjdCBkZXN0aW5hdGlvbnMgdGhhdCBsYW5kIG9uIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeTogdGhlXG4rXHQgKiByZWxvY2F0aW9uIGNvcHkgd291bGQgbWFjaGluZS1jaGVjayBvbiB0aGUgYmFkIGZyYW1lLlxuK1x0ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9zZWdtZW50czsgaSsrKSB7XG4rXHRcdGlmIChyYW5nZV9maXJzdF9od3BvaXNvbihpbWFnZS1cdTAwM2VzZWdtZW50W2ldLm1lbSxcbitcdFx0XHRcdFx0IGltYWdlLVx1MDAzZXNlZ21lbnRbaV0ubWVtc3opICE9IFBIWVNfQUREUl9NQVgpXG4rXHRcdFx0cmV0dXJuIC1FSFdQT0lTT047XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBhcmUgc2VhcmNoZWQgZnJvbSBzeXN0ZW0gUkFNIHJhdGhlciB0aGFuXG4gXHQgKiBiZWluZyBhbGxvY2F0ZWQgZnJvbSB0aGUgYnVkZHkgYWxsb2NhdG9yLCBzbyB0aGV5IGFyZSBub3QgZ3VhcmFudGVlZFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19maWxlLmMgYi9rZXJuZWwva2V4ZWNfZmlsZS5jXG5pbmRleCAyYmZiYjJkMTQ0ZTY5Li41MjdmZDgwNWEzYTZiIDEwMDY0NFxuLS0tIGEva2VybmVsL2tleGVjX2ZpbGUuY1xuKysrIGIva2VybmVsL2tleGVjX2ZpbGUuY1xuQEAgLTQ3NCw2ICs0NzQsNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiB7XG4gXHRzdHJ1Y3Qga2ltYWdlICppbWFnZSA9IGtidWYtXHUwMDNlaW1hZ2U7XG4gXHR1bnNpZ25lZCBsb25nIHRlbXBfc3RhcnQsIHRlbXBfZW5kO1xuK1x0cGh5c19hZGRyX3QgcG9pc29uO1xuIFxuIFx0dGVtcF9lbmQgPSBtaW4oZW5kLCBrYnVmLVx1MDAzZWJ1Zl9tYXgpO1xuIFx0dGVtcF9zdGFydCA9IHRlbXBfZW5kIC0ga2J1Zi1cdTAwM2VtZW1zeiArIDE7XG5AQCAtNDgzLDcgKzQ4NCw5IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHQvKiBhbGlnbiBkb3duIHN0YXJ0ICovXG4gXHRcdHRlbXBfc3RhcnQgPSBBTElHTl9ET1dOKHRlbXBfc3RhcnQsIGtidWYtXHUwMDNlYnVmX2FsaWduKTtcbiBcbi1cdFx0aWYgKHRlbXBfc3RhcnQgXHUwMDNjIHN0YXJ0IHx8IHRlbXBfc3RhcnQgXHUwMDNjIGtidWYtXHUwMDNlYnVmX21pbilcbitcdFx0LyogQSBjYW5kaWRhdGUgYWJvdmUgdGhlIHJhbmdlIG1lYW5zIHRoZSB3YWxrIHdyYXBwZWQgYXJvdW5kICovXG4rXHRcdGlmICh0ZW1wX3N0YXJ0IFx1MDAzYyBzdGFydCB8fCB0ZW1wX3N0YXJ0IFx1MDAzYyBrYnVmLVx1MDAzZWJ1Zl9taW4gfHxcbitcdFx0ICAgIHRlbXBfc3RhcnQgXHUwMDNlIGVuZClcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0dGVtcF9lbmQgPSB0ZW1wX3N0YXJ0ICsga2J1Zi1cdTAwM2VtZW1zeiAtIDE7XG5AQCAtNTAzLDYgKzUwNiwxMyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuK1x0XHRwb2lzb24gPSByYW5nZV9maXJzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLVx1MDAzZW1lbXN6KTtcbitcdFx0aWYgKHBvaXNvbiAhPSBQSFlTX0FERFJfTUFYKSB7XG4rXHRcdFx0Lyogd2UgaGl0IGEgcG9pc29uZWQgcGFnZSAqL1xuK1x0XHRcdHRlbXBfc3RhcnQgPSBwb2lzb24gLSBrYnVmLVx1MDAzZW1lbXN6O1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdC8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovXG4gXHRcdGJyZWFrO1xuIFx0fSB3aGlsZSAoMSk7XG5AQCAtNTE5LDYgKzUyOSw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiB7XG4gXHRzdHJ1Y3Qga2ltYWdlICppbWFnZSA9IGtidWYtXHUwMDNlaW1hZ2U7XG4gXHR1bnNpZ25lZCBsb25nIHRlbXBfc3RhcnQsIHRlbXBfZW5kO1xuK1x0cGh5c19hZGRyX3QgcG9pc29uO1xuIFxuIFx0dGVtcF9zdGFydCA9IG1heChzdGFydCwga2J1Zi1cdTAwM2VidWZfbWluKTtcbiBcbkBAIC01NDUsNiArNTU2LDEzIEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuK1x0XHRwb2lzb24gPSByYW5nZV9sYXN0X2h3cG9pc29uKHRlbXBfc3RhcnQsIGtidWYtXHUwMDNlbWVtc3opO1xuK1x0XHRpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHtcbitcdFx0XHQvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovXG4rXHRcdFx0dGVtcF9zdGFydCA9IHBvaXNvbiArIFBBR0VfU0laRTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuIFx0XHQvKiBXZSBmb3VuZCBhIHN1aXRhYmxlIG1lbW9yeSByYW5nZSAqL1xuIFx0XHRicmVhaztcbiBcdH0gd2hpbGUgKDEpO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCBhOGIwM2UyOTIwYmE4Li5hMmNhOGRmNTAxY2FlIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTk2LDYgKzk2LDQ2IEBAIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKVxuIFx0XHRtZW1ibGtfbnJfcG9pc29uX3N1YihwZm4sIGkpO1xuIH1cbiBcbisvKlxuKyAqIFJldHVybiB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgaGFyZHdhcmUtcG9pc29uZWQgb25saW5lIHBhZ2UgaW4gW3N0YXJ0LFxuKyAqIHN0YXJ0ICsgc2l6ZSksIG9yIFBIWVNfQUREUl9NQVggaWYgdGhlIHJhbmdlIGlzIGNsZWFuLlxuKyAqL1xuK3N0YXRpYyBwaHlzX2FkZHJfdCByYW5nZV9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxuK1x0XHRcdFx0ICBib29sIGZpcnN0KVxuK3tcbitcdHBoeXNfYWRkcl90IHBvaXNvbiA9IFBIWVNfQUREUl9NQVg7XG4rXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbjtcbitcbitcdGlmICghc2l6ZSB8fCAhYXRvbWljX2xvbmdfcmVhZChcdTAwMjZudW1fcG9pc29uZWRfcGFnZXMpKVxuK1x0XHRyZXR1cm4gcG9pc29uO1xuK1xuK1x0ZW5kX3BmbiA9IFBIWVNfUEZOKHN0YXJ0ICsgc2l6ZSAtIDEpO1xuK1x0Zm9yIChwZm4gPSBQSFlTX1BGTihzdGFydCk7IHBmbiBcdTAwM2M9IGVuZF9wZm47IHBmbisrKSB7XG4rXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4rXG4rXHRcdGlmIChwYWdlIFx1MDAyNlx1MDAyNiBpc19wYWdlX2h3cG9pc29uKHBhZ2UpKSB7XG4rXHRcdFx0aWYgKGZpcnN0KVxuK1x0XHRcdFx0cmV0dXJuIFBGTl9QSFlTKHBmbik7XG4rXG4rXHRcdFx0cG9pc29uID0gUEZOX1BIWVMocGZuKTtcbitcdFx0fVxuK1xuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbitcdH1cbitcbitcdHJldHVybiBwb2lzb247XG4rfVxuK1xuK3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0cmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCB0cnVlKTtcbit9XG4rXG4rcGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxuK3tcbitcdHJldHVybiByYW5nZV9od3BvaXNvbihzdGFydCwgc2l6ZSwgZmFsc2UpO1xuK31cbitcbiAvKipcbiAgKiBNRl9BVFRSX1JPIC0gQ3JlYXRlIHN5c2ZzIGVudHJ5IGZvciBlYWNoIG1lbW9yeSBmYWlsdXJlIHN0YXRpc3RpY3MuXG4gICogQF9uYW1lOiBuYW1lIG9mIHRoZSBmaWxlIGluIHRoZSBwZXIgTlVNQSBzeXNmcyBkaXJlY3RvcnkuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1Nzo0OC4wNjMzMDM0OTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI2NDE5OTczMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gTmV3IFJpc2tzIEhlcmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGZvY3VzZWQgb24gKnByZXZlbnRpbmcqIHRoZSB1c2Ugb2YgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHdpdGhpbiB0aGUga2V4ZWMgcHJvY2Vzcywgbm90IGludHJvZHVjaW5nIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIFdlJ3JlIG1vZGlmeWluZyBob3cga2V4ZWMgaGFuZGxlcyBtZW1vcnksIHNwZWNpZmljYWxseSB0byAqYXZvaWQqIGJhZCBtZW1vcnksIHdoaWNoIGlzIGEgZ29vZCB0aGluZy5cblxuVGhlIHBhdGNoIHRvdWNoZXMgYG1tLmhgLCBga2V4ZWNfY29yZS5jYCwgYGtleGVjX2ZpbGUuY2AsIGFuZCBgbWVtb3J5LWZhaWx1cmUuY2AuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgbW9kaWZpY2F0aW9ucyBkb24ndCBpbnRyb2R1Y2UgYW55IG5ldyBLTVNBTi1yZWxldmFudCBpc3N1ZXMsIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5GaXJzdCwgYHNhbml0eV9jaGVja19zZWdtZW50X2xpc3RgIG5vdyB2YWxpZGF0ZXMga2V4ZWMgc2VnbWVudHMgYWdhaW5zdCBwb2lzb25lZCBtZW1vcnkuIEl0IHVzZXMgYHJhbmdlX2ZpcnN0X2h3cG9pc29uYCBhbmQgcmV0dXJucyBhbiBlcnJvciBpZiBhbnkgcG9pc29uZWQgbWVtb3J5IGlzIGZvdW5kLiBUaGlzIGlzIGEgKnZhbGlkYXRpb24qIHN0ZXAuIEkgZG9uJ3Qgc2VlIGFueSByaXNrIGhlcmU7IHdlJ3JlIHJlamVjdGluZyBwcm9ibGVtYXRpYyBzZWdtZW50cywgbm90IHVzaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuTmV4dCwgYGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bmAgYW5kIGBsb2NhdGVfbWVtX2hvbGVfYm90dG9tX3VwYCBub3cgaW5jbHVkZSBjaGVja3MgZm9yIHBvaXNvbmVkIG1lbW9yeSB1c2luZyBgcmFuZ2VfZmlyc3RfaHdwb2lzb25gIG9yIGByYW5nZV9sYXN0X2h3cG9pc29uYC4gVGhleSdyZSAqYWxsb2NhdGluZyogbWVtb3J5IGZvciBrZXhlYyBzZWdtZW50cywgYnV0IG5vdyB0aGV5IGFyZSBhY3RpdmVseSBhdm9pZGluZyBwb2lzb25lZCBtZW1vcnkgcmVnaW9ucy4gVGhlIGZ1bmN0aW9ucyBhZGp1c3QgdGhlaXIgc2VhcmNoIGJhc2VkIG9uIHRoZSBwb2lzb25lZCBzdGF0dXMgb2YgdGhlIGNhbmRpZGF0ZSByZWdpb24uIENydWNpYWxseSwgdGhleSBkbyBub3QgcmVhZCBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGV5IGFyZSBtZXJlbHkgdXNpbmcgYSBmdW5jdGlvbiB0byBhdm9pZCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyByZWdpb25zLlxuXG5GaW5hbGx5LCBgcmFuZ2VfaHdwb2lzb25gIGp1c3QgaXRlcmF0ZXMgdGhyb3VnaCBhIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgYW5kIGNhbGxzIGBpc19wYWdlX2h3cG9pc29uYC4gQWdhaW4sIGl0J3MgYWJvdXQgZGV0ZWN0aW5nIGFuZCByZXBvcnRpbmcgcG9pc29uZWQgcGFnZXMsIG5vdCAqY3JlYXRpbmcqIHRoZW0gb3IgZXhwb3NpbmcgdGhlbS5cblxuU28sIGxldCdzIHN1bW1hcml6ZSB0aGUga2V5IHBvaW50czpcblxuKiAgIFRoZSBwYXRjaCAqZG9lc24ndCogaW50cm9kdWNlIG5ldyBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IGdldCBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxuKiAgIE5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM7IHRoZSBjb2RlIHNlZW1zIGNsZWFuIHdpdGggcHJvcGVyIGluaXRpYWxpemF0aW9uLlxuKiAgIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgYW5kIGxlZnQgdW5pbml0aWFsaXplZC5cbiogICBUaGUgYm91bmRzIGNoZWNrcyBoYXZlIGJlZW4gdXBkYXRlZCB0byAqYXZvaWQqIHVzaW5nIHBvaXNvbmVkIG1lbW9yeS4gVGhpcyBpcyBleGFjdGx5IHdoYXQgd2Ugd2FudC4gSXQgZG9lc24ndCBhbGxvdyBhY2Nlc3NlcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mICpleGlzdGluZyogYnVmZmVycy5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgcGF0Y2gncyBwcmltYXJ5IGZ1bmN0aW9uIGlzIHRvICphdm9pZCogdGhlIHV0aWxpemF0aW9uIG9mIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBkdXJpbmcga2V4ZWMsIGl0IGRvZXMgbm90IGludm9sdmUgZGF0YSB0cmFuc2ZlciB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGNyZWF0ZSBhbnkgcG90ZW50aWFsIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY29kZSBpdHNlbGYsIHRoYXQgSSd2ZSByZXZpZXdlZCwgYXBwZWFycyB0byBiZSBwcm9wZXJseSBpbml0aWFsaXplZCBhcyB3ZWxsLiBJIGRvbid0IHNlZSBhIHJpc2sgdGhhdCBqdXN0aWZpZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBzaG91bGQgYmUgc3VmZmljaWVudC5cblxuT2theSwgbGV0IG1lIGRvIG9uZSBsYXN0IHNwb3QgY2hlY2suIEluIGBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd25gIGFuZCBgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cGAsIHRoZSB2YXJpYWJsZSBgcG9pc29uYCBpcyBhbHdheXMgYXNzaWduZWQgYmVmb3JlIGl0J3MgdXNlZC4gU2FtZSB3aXRoIGByYW5nZV9od3BvaXNvbmA7IGFsbCB2YXJpYWJsZXMgaW4gdGhhdCBmdW5jdGlvbiBhcmUgYWxzbyBpbml0aWFsaXplZC4gQWxsIGNsZWFyIHRoZXJlLlxuXG4qKkZpbmFsIGNvbmNsdXNpb246IE5lZWRzS01TQU4gPSBmYWxzZS4qKiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBXZSdyZSBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzU0LCJPdXRwdXRUb2tlbnMiOjEyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1ODowMC43MDUzMDUzNjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgY2hlY2tzIHRvIGF2b2lkIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBkdXJpbmcga2V4ZWMgc2VnbWVudCBhbGxvY2F0aW9uIGFuZCB2YWxpZGF0aW9uLiBJdCBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyB0byBza2lwIHBvaXNvbmVkIHBhZ2VzIGFuZCByZWplY3RzIGtleGVjIHNlZ21lbnRzIHRoYXQgbGFuZCBvbiBwb2lzb25lZCBtZW1vcnkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBsZWF2ZSBhbnkgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgdW5pbml0aWFsaXplZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBjaGVja3MgdG8gYXZvaWQgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGR1cmluZyBrZXhlYyBzZWdtZW50IGFsbG9jYXRpb24gYW5kIHZhbGlkYXRpb24uIEl0IG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIHRvIHNraXAgcG9pc29uZWQgcGFnZXMgYW5kIHJlamVjdHMga2V4ZWMgc2VnbWVudHMgdGhhdCBsYW5kIG9uIHBvaXNvbmVkIG1lbW9yeS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7cqv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 11:41:56 +0000 UTC FinishedAt: 2026-08-12 11:58:02 +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": "480a31230b426efb005b6e71a14ef80f405f18b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "KEXEC", "KEXEC_FILE" ], "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": "480a31230b426efb005b6e71a14ef80f405f18b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "KEXEC", "KEXEC_FILE" ], "series_id": "968a0663-8b87-4c6a-8b60-2fe5e05dfdf6" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "sanity_check_segment_list", "kexec_locate_mem_hole", "range_first_hwpoison", "range_last_hwpoison" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0tFWEVDJiMzNDssCiAgICAmIzM0O0tFWEVDX0ZJTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0JiMzNDssCiAgICAmIzM0O2tleGVjX2xvY2F0ZV9tZW1faG9sZSYjMzQ7LAogICAgJiMzNDtyYW5nZV9maXJzdF9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtyYW5nZV9sYXN0X2h3cG9pc29uJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBjaGVja3MgdG8gYXZvaWQgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGR1cmluZyBrZXhlYyBzZWdtZW50IGFsbG9jYXRpb24gYW5kIHZhbGlkYXRpb24uIEl0IG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIHRvIHNraXAgcG9pc29uZWQgcGFnZXMgYW5kIHJlamVjdHMga2V4ZWMgc2VnbWVudHMgdGhhdCBsYW5kIG9uIHBvaXNvbmVkIG1lbW9yeS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGtleGVjIHN1YnN5c3RlbSB0byBhdm9pZCBhbGxvY2F0aW5nIG1lbW9yeSBvbiBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHRoZSBrZXhlY19sb2FkIGFuZCBrZXhlY19maWxlX2xvYWQgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhODYzZjZhYzViNWI2MTcwODAyMGIzYmMzNDMzNDJhZDdhZTUwNmNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTE6NTc6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCAxMzkwMjM2ODQ3MWUxLi5mZjgzYWU3YTdlZmU2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC01MjUyLDYgJiM0Mzs1MjUyLDggQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVtb3J5X2ZhaWx1cmVfYXR0cl9ncm91cDtcbiBleHRlcm4gdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pO1xuIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKTtcbiYjNDM7cGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4mIzQzO3BoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbiB7XG5AQCAtNTI2NCw2ICYjNDM7NTI2NiwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbilcbiBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKVxuIHtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBQSFlTX0FERFJfTUFYO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHNpemUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gUEhZU19BRERSX01BWDtcbiYjNDM7fVxuICNlbmRpZlxuIFxuICNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19jb3JlLmMgYi9rZXJuZWwva2V4ZWNfY29yZS5jXG5pbmRleCBkYzc3MGI5YTZkMDUzLi43ZWU4YzlmMDc4ZjZiIDEwMDY0NFxuLS0tIGEva2VybmVsL2tleGVjX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2tleGVjX2NvcmUuY1xuQEAgLTIxMiw2ICYjNDM7MjEyLDE2IEBAIGludCBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0KHN0cnVjdCBraW1hZ2UgKmltYWdlKVxuIFx0fVxuICNlbmRpZlxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVqZWN0IGRlc3RpbmF0aW9ucyB0aGF0IGxhbmQgb24gaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5OiB0aGVcbiYjNDM7XHQgKiByZWxvY2F0aW9uIGNvcHkgd291bGQgbWFjaGluZS1jaGVjayBvbiB0aGUgYmFkIGZyYW1lLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3NlZ21lbnRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHJhbmdlX2ZpcnN0X2h3cG9pc29uKGltYWdlLVx1MDAzZXNlZ21lbnRbaV0ubWVtLFxuJiM0MztcdFx0XHRcdFx0IGltYWdlLVx1MDAzZXNlZ21lbnRbaV0ubWVtc3opICE9IFBIWVNfQUREUl9NQVgpXG4mIzQzO1x0XHRcdHJldHVybiAtRUhXUE9JU09OO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKlxuIFx0ICogVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBhcmUgc2VhcmNoZWQgZnJvbSBzeXN0ZW0gUkFNIHJhdGhlciB0aGFuXG4gXHQgKiBiZWluZyBhbGxvY2F0ZWQgZnJvbSB0aGUgYnVkZHkgYWxsb2NhdG9yLCBzbyB0aGV5IGFyZSBub3QgZ3VhcmFudGVlZFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19maWxlLmMgYi9rZXJuZWwva2V4ZWNfZmlsZS5jXG5pbmRleCAyYmZiYjJkMTQ0ZTY5Li41MjdmZDgwNWEzYTZiIDEwMDY0NFxuLS0tIGEva2VybmVsL2tleGVjX2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2tleGVjX2ZpbGUuY1xuQEAgLTQ3NCw2ICYjNDM7NDc0LDcgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4ge1xuIFx0c3RydWN0IGtpbWFnZSAqaW1hZ2UgPSBrYnVmLVx1MDAzZWltYWdlO1xuIFx0dW5zaWduZWQgbG9uZyB0ZW1wX3N0YXJ0LCB0ZW1wX2VuZDtcbiYjNDM7XHRwaHlzX2FkZHJfdCBwb2lzb247XG4gXG4gXHR0ZW1wX2VuZCA9IG1pbihlbmQsIGtidWYtXHUwMDNlYnVmX21heCk7XG4gXHR0ZW1wX3N0YXJ0ID0gdGVtcF9lbmQgLSBrYnVmLVx1MDAzZW1lbXN6ICYjNDM7IDE7XG5AQCAtNDgzLDcgJiM0Mzs0ODQsOSBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0LyogYWxpZ24gZG93biBzdGFydCAqL1xuIFx0XHR0ZW1wX3N0YXJ0ID0gQUxJR05fRE9XTih0ZW1wX3N0YXJ0LCBrYnVmLVx1MDAzZWJ1Zl9hbGlnbik7XG4gXG4tXHRcdGlmICh0ZW1wX3N0YXJ0IFx1MDAzYyBzdGFydCB8fCB0ZW1wX3N0YXJ0IFx1MDAzYyBrYnVmLVx1MDAzZWJ1Zl9taW4pXG4mIzQzO1x0XHQvKiBBIGNhbmRpZGF0ZSBhYm92ZSB0aGUgcmFuZ2UgbWVhbnMgdGhlIHdhbGsgd3JhcHBlZCBhcm91bmQgKi9cbiYjNDM7XHRcdGlmICh0ZW1wX3N0YXJ0IFx1MDAzYyBzdGFydCB8fCB0ZW1wX3N0YXJ0IFx1MDAzYyBrYnVmLVx1MDAzZWJ1Zl9taW4gfHxcbiYjNDM7XHRcdCAgICB0ZW1wX3N0YXJ0IFx1MDAzZSBlbmQpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdHRlbXBfZW5kID0gdGVtcF9zdGFydCAmIzQzOyBrYnVmLVx1MDAzZW1lbXN6IC0gMTtcbkBAIC01MDMsNiAmIzQzOzUwNiwxMyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuJiM0MztcdFx0cG9pc29uID0gcmFuZ2VfZmlyc3RfaHdwb2lzb24odGVtcF9zdGFydCwga2J1Zi1cdTAwM2VtZW1zeik7XG4mIzQzO1x0XHRpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHtcbiYjNDM7XHRcdFx0Lyogd2UgaGl0IGEgcG9pc29uZWQgcGFnZSAqL1xuJiM0MztcdFx0XHR0ZW1wX3N0YXJ0ID0gcG9pc29uIC0ga2J1Zi1cdTAwM2VtZW1zejtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHQvKiBXZSBmb3VuZCBhIHN1aXRhYmxlIG1lbW9yeSByYW5nZSAqL1xuIFx0XHRicmVhaztcbiBcdH0gd2hpbGUgKDEpO1xuQEAgLTUxOSw2ICYjNDM7NTI5LDcgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfYm90dG9tX3VwKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIHtcbiBcdHN0cnVjdCBraW1hZ2UgKmltYWdlID0ga2J1Zi1cdTAwM2VpbWFnZTtcbiBcdHVuc2lnbmVkIGxvbmcgdGVtcF9zdGFydCwgdGVtcF9lbmQ7XG4mIzQzO1x0cGh5c19hZGRyX3QgcG9pc29uO1xuIFxuIFx0dGVtcF9zdGFydCA9IG1heChzdGFydCwga2J1Zi1cdTAwM2VidWZfbWluKTtcbiBcbkBAIC01NDUsNiAmIzQzOzU1NiwxMyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbiYjNDM7XHRcdHBvaXNvbiA9IHJhbmdlX2xhc3RfaHdwb2lzb24odGVtcF9zdGFydCwga2J1Zi1cdTAwM2VtZW1zeik7XG4mIzQzO1x0XHRpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHtcbiYjNDM7XHRcdFx0Lyogd2UgaGl0IGEgcG9pc29uZWQgcGFnZSAqL1xuJiM0MztcdFx0XHR0ZW1wX3N0YXJ0ID0gcG9pc29uICYjNDM7IFBBR0VfU0laRTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHQvKiBXZSBmb3VuZCBhIHN1aXRhYmxlIG1lbW9yeSByYW5nZSAqL1xuIFx0XHRicmVhaztcbiBcdH0gd2hpbGUgKDEpO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCBhOGIwM2UyOTIwYmE4Li5hMmNhOGRmNTAxY2FlIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTk2LDYgJiM0Mzs5Niw0NiBAQCB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSlcbiBcdFx0bWVtYmxrX25yX3BvaXNvbl9zdWIocGZuLCBpKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJldHVybiB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgaGFyZHdhcmUtcG9pc29uZWQgb25saW5lIHBhZ2UgaW4gW3N0YXJ0LFxuJiM0MzsgKiBzdGFydCAmIzQzOyBzaXplKSwgb3IgUEhZU19BRERSX01BWCBpZiB0aGUgcmFuZ2UgaXMgY2xlYW4uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgcGh5c19hZGRyX3QgcmFuZ2VfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbiYjNDM7XHRcdFx0XHQgIGJvb2wgZmlyc3QpXG4mIzQzO3tcbiYjNDM7XHRwaHlzX2FkZHJfdCBwb2lzb24gPSBQSFlTX0FERFJfTUFYO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcGZuLCBlbmRfcGZuO1xuJiM0MztcbiYjNDM7XHRpZiAoIXNpemUgfHwgIWF0b21pY19sb25nX3JlYWQoXHUwMDI2bnVtX3BvaXNvbmVkX3BhZ2VzKSlcbiYjNDM7XHRcdHJldHVybiBwb2lzb247XG4mIzQzO1xuJiM0MztcdGVuZF9wZm4gPSBQSFlTX1BGTihzdGFydCAmIzQzOyBzaXplIC0gMSk7XG4mIzQzO1x0Zm9yIChwZm4gPSBQSFlTX1BGTihzdGFydCk7IHBmbiBcdTAwM2M9IGVuZF9wZm47IHBmbiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHBhZ2UgXHUwMDI2XHUwMDI2IGlzX3BhZ2VfaHdwb2lzb24ocGFnZSkpIHtcbiYjNDM7XHRcdFx0aWYgKGZpcnN0KVxuJiM0MztcdFx0XHRcdHJldHVybiBQRk5fUEhZUyhwZm4pO1xuJiM0MztcbiYjNDM7XHRcdFx0cG9pc29uID0gUEZOX1BIWVMocGZuKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRjb25kX3Jlc2NoZWQoKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBwb2lzb247XG4mIzQzO31cbiYjNDM7XG4mIzQzO3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmFuZ2VfaHdwb2lzb24oc3RhcnQsIHNpemUsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmFuZ2VfaHdwb2lzb24oc3RhcnQsIHNpemUsIGZhbHNlKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBNRl9BVFRSX1JPIC0gQ3JlYXRlIHN5c2ZzIGVudHJ5IGZvciBlYWNoIG1lbW9yeSBmYWlsdXJlIHN0YXRpc3RpY3MuXG4gICogQF9uYW1lOiBuYW1lIG9mIHRoZSBmaWxlIGluIHRoZSBwZXIgTlVNQSBzeXNmcyBkaXJlY3RvcnkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0tFWEVDJiMzNDssCiAgICAmIzM0O0tFWEVDX0ZJTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0JiMzNDssCiAgICAmIzM0O2tleGVjX2xvY2F0ZV9tZW1faG9sZSYjMzQ7LAogICAgJiMzNDtyYW5nZV9maXJzdF9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtyYW5nZV9sYXN0X2h3cG9pc29uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBrZXhlYyBzdWJzeXN0ZW0gdG8gYXZvaWQgYWxsb2NhdGluZyBtZW1vcnkgb24gaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB0aGUga2V4ZWNfbG9hZCBhbmQga2V4ZWNfZmlsZV9sb2FkIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTg2M2Y2YWM1YjViNjE3MDgwMjBiM2JjMzQzMzQyYWQ3YWU1MDZjYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDExOjU3OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDEzOTAyMzY4NDcxZTEuLmZmODNhZTdhN2VmZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTUyNTIsNiAmIzQzOzUyNTIsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBtZW1vcnlfZmFpbHVyZV9hdHRyX2dyb3VwOwogZXh0ZXJuIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyk7CiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pOwogdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpOwomIzQzO3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOwomIzQzO3BoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpCiB7CkBAIC01MjY0LDYgJiM0Mzs1MjY2LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKQogc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSkKIHsKIH0KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LAomIzQzOwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBQSFlTX0FERFJfTUFYOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsCiYjNDM7CQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gUEhZU19BRERSX01BWDsKJiM0Mzt9CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKQpkaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjX2NvcmUuYyBiL2tlcm5lbC9rZXhlY19jb3JlLmMKaW5kZXggZGM3NzBiOWE2ZDA1My4uN2VlOGM5ZjA3OGY2YiAxMDA2NDQKLS0tIGEva2VybmVsL2tleGVjX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwva2V4ZWNfY29yZS5jCkBAIC0yMTIsNiAmIzQzOzIxMiwxNiBAQCBpbnQgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChzdHJ1Y3Qga2ltYWdlICppbWFnZSkKIAl9CiAjZW5kaWYKIAomIzQzOwkvKgomIzQzOwkgKiBSZWplY3QgZGVzdGluYXRpb25zIHRoYXQgbGFuZCBvbiBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnk6IHRoZQomIzQzOwkgKiByZWxvY2F0aW9uIGNvcHkgd291bGQgbWFjaGluZS1jaGVjayBvbiB0aGUgYmFkIGZyYW1lLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3NlZ21lbnRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHJhbmdlX2ZpcnN0X2h3cG9pc29uKGltYWdlLSZndDtzZWdtZW50W2ldLm1lbSwKJiM0MzsJCQkJCSBpbWFnZS0mZ3Q7c2VnbWVudFtpXS5tZW1zeikgIT0gUEhZU19BRERSX01BWCkKJiM0MzsJCQlyZXR1cm4gLUVIV1BPSVNPTjsKJiM0MzsJfQomIzQzOwogCS8qCiAJICogVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBhcmUgc2VhcmNoZWQgZnJvbSBzeXN0ZW0gUkFNIHJhdGhlciB0aGFuCiAJICogYmVpbmcgYWxsb2NhdGVkIGZyb20gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgc28gdGhleSBhcmUgbm90IGd1YXJhbnRlZWQKZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19maWxlLmMgYi9rZXJuZWwva2V4ZWNfZmlsZS5jCmluZGV4IDJiZmJiMmQxNDRlNjkuLjUyN2ZkODA1YTNhNmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZXhlY19maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2tleGVjX2ZpbGUuYwpAQCAtNDc0LDYgJiM0Mzs0NzQsNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIHsKIAlzdHJ1Y3Qga2ltYWdlICppbWFnZSA9IGtidWYtJmd0O2ltYWdlOwogCXVuc2lnbmVkIGxvbmcgdGVtcF9zdGFydCwgdGVtcF9lbmQ7CiYjNDM7CXBoeXNfYWRkcl90IHBvaXNvbjsKIAogCXRlbXBfZW5kID0gbWluKGVuZCwga2J1Zi0mZ3Q7YnVmX21heCk7CiAJdGVtcF9zdGFydCA9IHRlbXBfZW5kIC0ga2J1Zi0mZ3Q7bWVtc3ogJiM0MzsgMTsKQEAgLTQ4Myw3ICYjNDM7NDg0LDkgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCS8qIGFsaWduIGRvd24gc3RhcnQgKi8KIAkJdGVtcF9zdGFydCA9IEFMSUdOX0RPV04odGVtcF9zdGFydCwga2J1Zi0mZ3Q7YnVmX2FsaWduKTsKIAotCQlpZiAodGVtcF9zdGFydCAmbHQ7IHN0YXJ0IHx8IHRlbXBfc3RhcnQgJmx0OyBrYnVmLSZndDtidWZfbWluKQomIzQzOwkJLyogQSBjYW5kaWRhdGUgYWJvdmUgdGhlIHJhbmdlIG1lYW5zIHRoZSB3YWxrIHdyYXBwZWQgYXJvdW5kICovCiYjNDM7CQlpZiAodGVtcF9zdGFydCAmbHQ7IHN0YXJ0IHx8IHRlbXBfc3RhcnQgJmx0OyBrYnVmLSZndDtidWZfbWluIHx8CiYjNDM7CQkgICAgdGVtcF9zdGFydCAmZ3Q7IGVuZCkKIAkJCXJldHVybiAwOwogCiAJCXRlbXBfZW5kID0gdGVtcF9zdGFydCAmIzQzOyBrYnVmLSZndDttZW1zeiAtIDE7CkBAIC01MDMsNiAmIzQzOzUwNiwxMyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCWNvbnRpbnVlOwogCQl9CiAKJiM0MzsJCXBvaXNvbiA9IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHRlbXBfc3RhcnQsIGtidWYtJmd0O21lbXN6KTsKJiM0MzsJCWlmIChwb2lzb24gIT0gUEhZU19BRERSX01BWCkgewomIzQzOwkJCS8qIHdlIGhpdCBhIHBvaXNvbmVkIHBhZ2UgKi8KJiM0MzsJCQl0ZW1wX3N0YXJ0ID0gcG9pc29uIC0ga2J1Zi0mZ3Q7bWVtc3o7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCS8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovCiAJCWJyZWFrOwogCX0gd2hpbGUgKDEpOwpAQCAtNTE5LDYgJiM0Mzs1MjksNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiB7CiAJc3RydWN0IGtpbWFnZSAqaW1hZ2UgPSBrYnVmLSZndDtpbWFnZTsKIAl1bnNpZ25lZCBsb25nIHRlbXBfc3RhcnQsIHRlbXBfZW5kOwomIzQzOwlwaHlzX2FkZHJfdCBwb2lzb247CiAKIAl0ZW1wX3N0YXJ0ID0gbWF4KHN0YXJ0LCBrYnVmLSZndDtidWZfbWluKTsKIApAQCAtNTQ1LDYgJiM0Mzs1NTYsMTMgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfYm90dG9tX3VwKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJY29udGludWU7CiAJCX0KIAomIzQzOwkJcG9pc29uID0gcmFuZ2VfbGFzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLSZndDttZW1zeik7CiYjNDM7CQlpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHsKJiM0MzsJCQkvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovCiYjNDM7CQkJdGVtcF9zdGFydCA9IHBvaXNvbiAmIzQzOyBQQUdFX1NJWkU7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCS8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovCiAJCWJyZWFrOwogCX0gd2hpbGUgKDEpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggYThiMDNlMjkyMGJhOC4uYTJjYThkZjUwMWNhZSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC05Niw2ICYjNDM7OTYsNDYgQEAgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpCiAJCW1lbWJsa19ucl9wb2lzb25fc3ViKHBmbiwgaSk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJldHVybiB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgaGFyZHdhcmUtcG9pc29uZWQgb25saW5lIHBhZ2UgaW4gW3N0YXJ0LAomIzQzOyAqIHN0YXJ0ICYjNDM7IHNpemUpLCBvciBQSFlTX0FERFJfTUFYIGlmIHRoZSByYW5nZSBpcyBjbGVhbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgcGh5c19hZGRyX3QgcmFuZ2VfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKJiM0MzsJCQkJICBib29sIGZpcnN0KQomIzQzO3sKJiM0MzsJcGh5c19hZGRyX3QgcG9pc29uID0gUEhZU19BRERSX01BWDsKJiM0MzsJdW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm47CiYjNDM7CiYjNDM7CWlmICghc2l6ZSB8fCAhYXRvbWljX2xvbmdfcmVhZCgmYW1wO251bV9wb2lzb25lZF9wYWdlcykpCiYjNDM7CQlyZXR1cm4gcG9pc29uOwomIzQzOwomIzQzOwllbmRfcGZuID0gUEhZU19QRk4oc3RhcnQgJiM0Mzsgc2l6ZSAtIDEpOwomIzQzOwlmb3IgKHBmbiA9IFBIWVNfUEZOKHN0YXJ0KTsgcGZuICZsdDs9IGVuZF9wZm47IHBmbiYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7CiYjNDM7CiYjNDM7CQlpZiAocGFnZSAmYW1wOyZhbXA7IGlzX3BhZ2VfaHdwb2lzb24ocGFnZSkpIHsKJiM0MzsJCQlpZiAoZmlyc3QpCiYjNDM7CQkJCXJldHVybiBQRk5fUEhZUyhwZm4pOwomIzQzOwomIzQzOwkJCXBvaXNvbiA9IFBGTl9QSFlTKHBmbik7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQljb25kX3Jlc2NoZWQoKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcG9pc29uOwomIzQzO30KJiM0MzsKJiM0MztwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7cGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCBmYWxzZSk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBNRl9BVFRSX1JPIC0gQ3JlYXRlIHN5c2ZzIGVudHJ5IGZvciBlYWNoIG1lbW9yeSBmYWlsdXJlIHN0YXRpc3RpY3MuCiAgKiBAX25hbWU6IG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIHBlciBOVU1BIHN5c2ZzIGRpcmVjdG9yeS4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc1NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIENhbmRpZGF0ZSBFdmFsdWF0aW9uOiBLZXJuZWwgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZ2l2ZW4gYSBwYXRjaCBzZXJpZXMgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCB3YXJyYW50IGZ1enppbmcuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBtb2RpZmllcyBgaW5jbHVkZS9saW51eC9tbS5oYCwgYGtlcm5lbC9rZXhlY19jb3JlLmNgLCBga2VybmVsL2tleGVjX2ZpbGUuY2AsIGFuZCBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoYXQmIzM5O3MgYSBkZWNlbnQgc3ByZWFkLCBpbmRpY2F0aW5nIGNoYW5nZXMgaW4gYm90aCBrZXhlYyBhbmQgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcg4oCTIGNyaXRpY2FsIGFyZWFzLCBkZWZpbml0ZWx5LgoKU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgaG93IGtleGVjIGludGVyYWN0cyB3aXRoIGFuZCBoYW5kbGVzIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeS4gVGhlIHBhdGNoIGFkZHMgY2hlY2tzIGluIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YCwgcHJldmVudGluZyBrZXhlYyBzZWdtZW50cyBmcm9tIGJlaW5nIGxvYWRlZCBpbnRvIHBvaXNvbmVkIG1lbW9yeSwgYW5kIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiBrZXhlYyB1c2luZyBgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duYCBhbmQgYGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXBgIHRvIHNraXAgb3ZlciB0aGVzZSBwb2lzb25lZCByZWdpb25zLiBUaGUgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFkZGl0aW9ucyBsb29rIGxpa2UgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBvaXNvbmluZyByYW5nZSBtZWNoYW5pc21zLgoKR2l2ZW4gdGhhdCBpdCB0b3VjaGVzIHRoZSBrZXhlYyBzdWJzeXN0ZW0gYW5kIG1lbW9yeSBmYWlsdXJlLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIHF1ZXN0aW9uIG5vdyBiZWNvbWVzOiBXaGF0IGZ1bmN0aW9ucyBzaG91bGQgd2UgdGFyZ2V0PyBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGBGb2N1c1N5bWJvbHNgLiBMZXQmIzM5O3Mgc2VlOgoKKiAgIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YCBpcyBhIHN0cm9uZyBjYW5kaWRhdGUsIGFzIGl0IGlzIGEgY2VudHJhbCBjaGVjaywgcmVqZWN0aW5nIHBvaXNvbmVkIG1lbW9yeS4KCiogICBgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duYCBhbmQgYGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXBgIGFyZSBnb29kLCBidXQgSSByZW1lbWJlciwgb3Igc2hvdWxkIHF1aWNrbHkgY2hlY2ssIHRoZSBwcm9tcHQgc2F5cyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuCgoqICAgQ2hlY2tpbmcgYGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bmAgYW5kIGBsb2NhdGVfbWVtX2hvbGVfYm90dG9tX3VwYCwgb2ggeWVhaCwgdGhlc2UgYXJlIGBzdGF0aWNgIGZ1bmN0aW9ucywgc28gdGhleSBhcmUgbm90IGRpcmVjdGx5IGV4cG9zZWQgYW5kIHVzZWQuIEkgd2lsbCBsb29rIGZvciBjYWxscyB0byB0aGVzZSBmdW5jdGlvbnMgdG8gaWRlbnRpZnkgZW50cnlwb2ludHMuCgpTbywgSSB3aWxsIGxvb2sgZm9yIHRoZSBjYWxsIHNpdGVzIHRvIHRob3NlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwva2V4ZWNfZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9rZXhlY19maWxlLmM9MzY0PVNZU0NBTExfREVGSU5FNShrZXhlY19maWxlX2xvYWQsIGludCwga2VybmVsX2ZkLCBpbnQsIGluaXRyZF9mZCxcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTQ3MS1cbmtlcm5lbC9rZXhlY19maWxlLmM6NDcyOnN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxua2VybmVsL2tleGVjX2ZpbGUuYy00NzMtXHRcdFx0XHQgICAgc3RydWN0IGtleGVjX2J1ZiAqa2J1Zilcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jPTU3Nz1zdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFjayhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdm9pZCAqYXJnKVxuLS1cbmtlcm5lbC9rZXhlY19maWxlLmMtNTk5LVx0aWYgKGtidWYtXHUwMDNldG9wX2Rvd24pXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjYwMDpcdFx0cmV0dXJuIGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bihzdGFydCwgZW5kLCBrYnVmKTtcbmtlcm5lbC9rZXhlY19maWxlLmMtNjAxLVx0cmV0dXJuIGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAoc3RhcnQsIGVuZCwga2J1Zik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk0NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKlRyYWNpbmcgdGhlIFNvdXJjZSBvZiBgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrYCoqCgpPa2F5LCBgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrYCBoYXMgYmVlbiBpbnZva2VkLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiAqV2hlcmUqIGRpZCB0aGlzIGNhbGwgb3JpZ2luYXRlPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY2FsbGluZyBmdW5jdGlvbiBvciBmdW5jdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhpcyBjYWxsIGlzIGNydWNpYWwuIEtub3dpbmcgdGhlIGNhbGxlciB3aWxsIHRlbGwgbWUgYSBncmVhdCBkZWFsIGFib3V0IHdoeSBpdCB3YXMgY2FsbGVkIGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHN0cmF0ZWdpZXMgdG8gdHJhY2UgYmFjayB0aGUgZXhlY3V0aW9uIHBhdGguIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgc3RhcnQgdGhlIGh1bnQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2tleGVjX2ZpbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwva2V4ZWNfZmlsZS5jPTUyNz1zdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxua2VybmVsL2tleGVjX2ZpbGUuYy01NzYtXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjU3NzpzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFjayhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdm9pZCAqYXJnKVxua2VybmVsL2tleGVjX2ZpbGUuYy01Nzgte1xuLS1cbmtlcm5lbC9rZXhlY19maWxlLmM9NjA1PXN0YXRpYyBpbnQga2V4ZWNfd2Fsa19tZW1ibG9jayhzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLFxuLS1cbmtlcm5lbC9rZXhlY19maWxlLmMtNjIwLVx0ICogSU9SRVNPVVJDRV9TWVNSQU1fRFJJVkVSX01BTkFHRUQgaGFuZGxpbmcgaW5cbmtlcm5lbC9rZXhlY19maWxlLmM6NjIxOlx0ICogbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrKCkuXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTYyMi1cdCAqL1xuLS1cbmtlcm5lbC9rZXhlY19maWxlLmM9NzMzPWludCBrZXhlY19sb2NhdGVfbWVtX2hvbGUoc3RydWN0IGtleGVjX2J1ZiAqa2J1Zilcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTc0NC1cdCAqL1xua2VybmVsL2tleGVjX2ZpbGUuYzo3NDU6XHRyZXQgPSBraG9fbG9jYXRlX21lbV9ob2xlKGtidWYsIGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFjayk7XG5rZXJuZWwva2V4ZWNfZmlsZS5jLTc0Ni1cdGlmIChyZXQgXHUwMDNjPSAwKVxuLS1cbmtlcm5lbC9rZXhlY19maWxlLmMtNzU2LVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spKVxua2VybmVsL2tleGVjX2ZpbGUuYzo3NTc6XHRcdHJldCA9IGtleGVjX3dhbGtfcmVzb3VyY2VzKGtidWYsIGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFjayk7XG5rZXJuZWwva2V4ZWNfZmlsZS5jLTc1OC1cdGVsc2Vcbmtlcm5lbC9rZXhlY19maWxlLmM6NzU5Olx0XHRyZXQgPSBrZXhlY193YWxrX21lbWJsb2NrKGtidWYsIGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFjayk7XG5rZXJuZWwva2V4ZWNfZmlsZS5jLTc2MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTg2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsJiMzOTtzIEJvb3QgUHJvY2VzcyoqCgpBbHJpZ2h0LCB0aGUgZGVidWdnaW5nIGhhcyBsZWQgbWUgdG8gYGtleGVjX2xvY2F0ZV9tZW1faG9sZWAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGJlZ2lucywgdGhlIGVudHJ5IHBvaW50IGZvciBtZW1vcnkgaG9sZSBkZXRlY3Rpb24gaW4gdGhpcyBrZXhlYyBpbXBsZW1lbnRhdGlvbi4gTm93LCBiZWZvcmUgSSBldmVuIHN0YXJ0IHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmb3VuZGF0aW9uYWwgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbiBvcmRlci4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHNlZ21lbnQgbGlzdCBpcyBjb2hlcmVudCBiZWZvcmUgdHJ1c3RpbmcgdGhlIHJlc3Qgb2YgdGhlIGxvZ2ljLiBHYXJiYWdlIGluLCBnYXJiYWdlIG91dCwgYXMgdGhleSBzYXkhIEl0JiMzOTtzIGxpa2VseSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2hlY2tpbmcgZm9yIG92ZXJsYXBzLCBpbnZhbGlkIGFkZHJlc3Nlcywgb3Igb3RoZXIgc3RydWN0dXJhbCBwcm9ibGVtcyBpbiB0aGUgbWVtb3J5IG1hcCB1c2VkIGJ5IGtleGVjLiBBIGJhZCBzZWdtZW50IGxpc3Qgd2lsbCB0aHJvdyBhIHdyZW5jaCBpbnRvIGV2ZXJ5dGhpbmcsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBjcmFzaCBsYXRlci4gU28sIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGludGVncml0eSBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2tleGVjX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwva2V4ZWNfY29yZS5jPTEwNj1zdGF0aWMgc3RydWN0IHBhZ2UgKmtpbWFnZV9hbGxvY19wYWdlKHN0cnVjdCBraW1hZ2UgKmltYWdlLFxuLS1cbmtlcm5lbC9rZXhlY19jb3JlLmMtMTA5LVxua2VybmVsL2tleGVjX2NvcmUuYzoxMTA6aW50IHNhbml0eV9jaGVja19zZWdtZW50X2xpc3Qoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXG5rZXJuZWwva2V4ZWNfY29yZS5jLTExMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk0OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipUcmFjaW5nIHRoZSBDYWxsIFN0YWNrIGZvciBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IG9mIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkZXRlcm1pbmUgaXRzIHVwc3RyZWFtIGRlcGVuZGVuY2llcy4gSSYjMzk7bSB0aGlua2luZywgd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqY2FsbGVkKj8gS25vd2luZyB0aGF0IHdpbGwgcHJvdmlkZSBjcnVjaWFsIGluc2lnaHQgaW50byBpdHMgcHVycG9zZSBhbmQgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSBuZWVkIHRvIHF1aWNrbHkgdHJhY2UgdGhlIGNhbGwgc3RhY2sgdG8gc2VlIHdoYXQgZnVuY3Rpb25zIGludm9rZSBpdC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgaW1tZWRpYXRlIGNhbGxlcnMsIGFuZCB0aGVuIHBvdGVudGlhbGx5IHRoZWlyIGNhbGxlcnMsIGFuZCBzbyBvbiwgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyByb2xlLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIGluIGRlYnVnZ2luZyBvciB1bmRlcnN0YW5kaW5nIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgdG8gdGhpcyBzZWdtZW50LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBzb21lIHRvb2xzIG9yIGdvb2Qgb2xkLWZhc2hpb25lZCBjb2RlIGRpdmluZyB0byBxdWlja2x5IGZpbmQgYWxsIGluc3RhbmNlcyBvZiBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nhbml0eV9jaGVja19zZWdtZW50X2xpc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9rZXhlYy5jPTIyPXN0YXRpYyBpbnQga2ltYWdlX2FsbG9jX2luaXQoc3RydWN0IGtpbWFnZSAqKnJpbWFnZSwgdW5zaWduZWQgbG9uZyBlbnRyeSxcbi0tXG5rZXJuZWwva2V4ZWMuYy01Ni1cbmtlcm5lbC9rZXhlYy5jOjU3Olx0cmV0ID0gc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChpbWFnZSk7XG5rZXJuZWwva2V4ZWMuYy01OC1cdGlmIChyZXQpXG4tLVxua2VybmVsL2tleGVjX2NvcmUuYz0xMDY9c3RhdGljIHN0cnVjdCBwYWdlICpraW1hZ2VfYWxsb2NfcGFnZShzdHJ1Y3Qga2ltYWdlICppbWFnZSxcbi0tXG5rZXJuZWwva2V4ZWNfY29yZS5jLTEwOS1cbmtlcm5lbC9rZXhlY19jb3JlLmM6MTEwOmludCBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0KHN0cnVjdCBraW1hZ2UgKmltYWdlKVxua2VybmVsL2tleGVjX2NvcmUuYy0xMTEte1xuLS1cbmtlcm5lbC9rZXhlY19maWxlLmM9MzA1PWtpbWFnZV9maWxlX2FsbG9jX2luaXQoc3RydWN0IGtpbWFnZSAqKnJpbWFnZSwgaW50IGtlcm5lbF9mZCxcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTMzMi1cbmtlcm5lbC9rZXhlY19maWxlLmM6MzMzOlx0cmV0ID0gc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChpbWFnZSk7XG5rZXJuZWwva2V4ZWNfZmlsZS5jLTMzNC1cdGlmIChyZXQpXG4tLVxua2VybmVsL2tleGVjX2ludGVybmFsLmg9OT1zdHJ1Y3Qga2ltYWdlICpkb19raW1hZ2VfYWxsb2NfaW5pdCh2b2lkKTtcbmtlcm5lbC9rZXhlY19pbnRlcm5hbC5oOjEwOmludCBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0KHN0cnVjdCBraW1hZ2UgKmltYWdlKTtcbmtlcm5lbC9rZXhlY19pbnRlcm5hbC5oLTExLXZvaWQga2ltYWdlX2ZyZWVfcGFnZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTUxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIGBrZXhlY2AgYW5kIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBga2V4ZWNgIGxvYWQgcHJvY2Vzcy4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgYGtpbWFnZV9hbGxvY19pbml0YCBhbmQgYGtpbWFnZV9maWxlX2FsbG9jX2luaXRgIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cywgc3BlY2lmaWNhbGx5IGNhbGxlZCBmcm9tIGBzeXNfa2V4ZWNfbG9hZGAgYW5kIGBzeXNfa2V4ZWNfZmlsZV9sb2FkYC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YCBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZm9jdXNlZCBhbmFseXNpcyB3aXRoaW4gdGhlIGNvZGUuIFRoZW4gSSBhbHNvIHNob3VsZCBsb29rIGludG8gYGtleGVjX2xvY2F0ZV9tZW1faG9sZWAuCgpGdXJ0aGVybW9yZSwgSSBzaG91bGQgYmUgbG9va2luZyBhdCBgcmFuZ2VfZmlyc3RfaHdwb2lzb25gIGFuZCBgcmFuZ2VfbGFzdF9od3BvaXNvbmAuIFRoZXkmIzM5O3JlIGV4cG9ydGVkIGZ1bmN0aW9ucyByZXNpZGluZyBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIHdoaWNoIGxpa2VseSBtZWFucyB0aGV5JiMzOTtyZSBjb3JlIHRvIHRoZSBtZW1vcnktZmFpbHVyZSBoYW5kbGluZy4KCk5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dC4gVGhpcyBwYXRjaCB0b3VjaGVzIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhhdCBmaWxlJiMzOTtzIGNvbXBpbGF0aW9uIGlzIGdhdGVkIGJ5IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLiBJIHNob3VsZCBjb25maXJtIHRoYXQgb3B0aW9uJiMzOTtzIHN0YXR1cy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhhdCBmbGFnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1vcnktZmFpbHVyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTExMT1vYmotJChDT05GSUdfRE1BUE9PTF9URVNUKSAmIzQzOz0gZG1hcG9vbF90ZXN0Lm9cbm1tL01ha2VmaWxlOjExMjpvYmotJChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpICYjNDM7PSBtZW1vcnktZmFpbHVyZS5vXG5tbS9NYWtlZmlsZS0xMTMtb2JqLSQoQ09ORklHX0hXUE9JU09OX0lOSkVDVCkgJiM0Mzs9IGh3cG9pc29uLWluamVjdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwODYKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEtlcm5lbCBCdWlsZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgZGVmaW5pdGVseSBhIHByZXJlcXVpc2l0ZSBoZXJlLiBUaGF0JiMzOTtzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLiBBbHNvLCBJJiMzOTttIG5vdGluZyB0aGF0IGJvdGggYGtleGVjX2NvcmUuY2AgYW5kIGBrZXhlY19maWxlLmNgIGFyZSBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19LRVhFQ19DT1JFYCBhbmQgYENPTkZJR19LRVhFQ19GSUxFYCBhcmUgYWN0dWFsbHkgKmVuYWJsZWQqIGluIHRoZSBrZXJuZWwgY29uZmlnLiBKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIGFyZSBhbGwgaW4gbGluZS4gR2l2ZW4gdGhpcywgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgdGhlIGtlcm5lbCYjMzk7cyBgTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcnVsZXMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZXhlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvTWFrZWZpbGU9ODA9b2JqLSQoQ09ORklHX0NSQVNIX1JFU0VSVkUpICYjNDM7PSBjcmFzaF9yZXNlcnZlLm9cbmtlcm5lbC9NYWtlZmlsZTo4MTpvYmotJChDT05GSUdfS0VYRUNfQ09SRSkgJiM0Mzs9IGtleGVjX2NvcmUub1xua2VybmVsL01ha2VmaWxlLTgyLW9iai0kKENPTkZJR19DUkFTSF9EVU1QKSAmIzQzOz0gY3Jhc2hfY29yZS5vXG4tLVxua2VybmVsL01ha2VmaWxlPTg0PW9iai0kKENPTkZJR19DUkFTSF9EVU1QX0tVTklUX1RFU1QpICYjNDM7PSBjcmFzaF9jb3JlX3Rlc3Qub1xua2VybmVsL01ha2VmaWxlOjg1Om9iai0kKENPTkZJR19LRVhFQykgJiM0Mzs9IGtleGVjLm9cbmtlcm5lbC9NYWtlZmlsZTo4NjpvYmotJChDT05GSUdfS0VYRUNfRklMRSkgJiM0Mzs9IGtleGVjX2ZpbGUub1xua2VybmVsL01ha2VmaWxlOjg3Om9iai0kKENPTkZJR19LRVhFQ19FTEYpICYjNDM7PSBrZXhlY19lbGYub1xua2VybmVsL01ha2VmaWxlLTg4LW9iai0kKENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUKSAmIzQzOz0gYmFja3RyYWNldGVzdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NDAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIGtleGVjIGZ1bmN0aW9uYWxpdHksIHRoZSBmdW5kYW1lbnRhbHMg4oCTIGBDT05GSUdfS0VYRUNfQ09SRWAgYW5kIGBDT05GSUdfS0VYRUNfRklMRWAg4oCTIHRob3NlIGFyZSBhIGdpdmVuLiBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCBiZWZvcmUgSSBnbyB0b28gZmFyIGRvd24gdGhpcyByb2FkLCBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLiBJdCYjMzk7cyBwcmV0dHkgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIGtleGVjIGFyY2hpdGVjdHVyZSwgZXNwZWNpYWxseSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIG1lbW9yeSBzaXR1YXRpb25zLiBHb3R0YSBiZSBwcm9hY3RpdmUgYWJvdXQgdGhhdCBwb3RlbnRpYWwgaW1wYWN0LCByaWdodD8gTmVlZCB0byBnZXQgYSBncmFzcCBvZiB0aGF0IGltcGFjdCB0byBwcmV2ZW50IHNvbWUgaGVhZGFjaGUgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9GQUlMVVJFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTc2Mj1jb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuLS1cbm1tL0tjb25maWctNzY0LVxubW0vS2NvbmZpZzo3NjU6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXG5tbS9LY29uZmlnLTc2Ni1cdGRlcGVuZHMgb24gTU1VXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MzMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6CgoqKkRlcGVuZGVuY2llcywgRGVwZW5kZW5jaWVzLCBEZXBlbmRlbmNpZXMhKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIEZpcnN0IHRoaW5ncyBmaXJzdDogYENPTkZJR19LRVhFQ2AgYW5kIGBDT05GSUdfS0VYRUNfRklMRWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBhcmUgcmVsYXRlZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIHdoYXQgdGhleSBkZXBlbmQgb24uIEkga25vdyB0aGUgZ2VuZXJhbCBhcmVhLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnkgc3VidGxlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaW50ZXJhY3Rpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB0byBlbnN1cmUgcHJvcGVyIHNldHRpbmdzIGZvciB0aGUgZmVhdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtFWEVDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcua2V4ZWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcua2V4ZWM9OD1jb25maWcgVk1DT1JFX0lORk9cbi0tXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0xMC1cbmtlcm5lbC9LY29uZmlnLmtleGVjOjExOmNvbmZpZyBLRVhFQ19DT1JFXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0xMi1cdGJvb2xcbmtlcm5lbC9LY29uZmlnLmtleGVjLTEzLVxua2VybmVsL0tjb25maWcua2V4ZWM6MTQ6Y29uZmlnIEtFWEVDX0VMRlxua2VybmVsL0tjb25maWcua2V4ZWMtMTUtXHRib29sXG4tLVxua2VybmVsL0tjb25maWcua2V4ZWM9MTc9Y29uZmlnIEhBVkVfSU1BX0tFWEVDXG4tLVxua2VybmVsL0tjb25maWcua2V4ZWMtMTktXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzoyMDpjb25maWcgS0VYRUNcbmtlcm5lbC9LY29uZmlnLmtleGVjLTIxLVx0Ym9vbCBcJiMzNDtFbmFibGUga2V4ZWMgc3lzdGVtIGNhbGxcJiMzNDtcbi0tXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0zNy1cbmtlcm5lbC9LY29uZmlnLmtleGVjOjM4OmNvbmZpZyBLRVhFQ19GSUxFXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0zOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGtleGVjIGZpbGUgYmFzZWQgc3lzdGVtIGNhbGxcJiMzNDtcbi0tXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy00OC1cbmtlcm5lbC9LY29uZmlnLmtleGVjOjQ5OmNvbmZpZyBLRVhFQ19TSUdcbmtlcm5lbC9LY29uZmlnLmtleGVjLTUwLVx0Ym9vbCBcJiMzNDtWZXJpZnkga2VybmVsIHNpZ25hdHVyZSBkdXJpbmcga2V4ZWNfZmlsZV9sb2FkKCkgc3lzY2FsbFwmIzM0O1xuLS1cbmtlcm5lbC9LY29uZmlnLmtleGVjLTYyLVxua2VybmVsL0tjb25maWcua2V4ZWM6NjM6Y29uZmlnIEtFWEVDX1NJR19GT1JDRVxua2VybmVsL0tjb25maWcua2V4ZWMtNjQtXHRib29sIFwmIzM0O1JlcXVpcmUgYSB2YWxpZCBzaWduYXR1cmUgaW4ga2V4ZWNfZmlsZV9sb2FkKCkgc3lzY2FsbFwmIzM0O1xuLS1cbmtlcm5lbC9LY29uZmlnLmtleGVjLTcwLVxua2VybmVsL0tjb25maWcua2V4ZWM6NzE6Y29uZmlnIEtFWEVDX0lNQUdFX1ZFUklGWV9TSUdcbmtlcm5lbC9LY29uZmlnLmtleGVjLTcyLVx0Ym9vbCBcJiMzNDtFbmFibGUgSW1hZ2Ugc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBzdXBwb3J0IChBUk0pXCYjMzQ7XG4tLVxua2VybmVsL0tjb25maWcua2V4ZWMtNzktXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzo4MDpjb25maWcgS0VYRUNfQlpJTUFHRV9WRVJJRllfU0lHXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy04MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ6SW1hZ2Ugc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxua2VybmVsL0tjb25maWcua2V4ZWMtODgtXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzo4OTpjb25maWcgS0VYRUNfSlVNUFxua2VybmVsL0tjb25maWcua2V4ZWMtOTAtXHRib29sIFwmIzM0O2tleGVjIGp1bXBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUzNQoJCQkJCQkJb3V0cHV0OiAxMzMKCQkJCQkJCXRob3VnaHRzOiA0ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVGhpcyBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYnJva2VuIHRoaXMgcGF0Y2ggZG93bi4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGNoYW5nZSB3aXRoaW4gdGhlIGBrZXhlY2Agc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYWltaW5nIHRvIHByZXZlbnQgbWVtb3J5IGFsbG9jYXRpb24gb24gaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMuIFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBjcmFzaGVzIGFuZCByZXN0YXJ0cy4KCkZpcnN0LCB0aGUgY29yZSBlbGVtZW50cy4gSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgY29uZmlndXJhdGlvbnMgd2UmIzM5O2xsIG5lZWQgdG8gZW5hYmxlOiBgTUVNT1JZX0ZBSUxVUkVgLCBgS0VYRUNgLCBhbmQgYEtFWEVDX0ZJTEVgLiBgTUVNT1JZX0ZBSUxVUkVgIGlzIGNvbnRpbmdlbnQgb24gYE1NVWAgYW5kIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIFRoZSBvdGhlciB0d28gYXJlIGZhaXJseSBzdGFuZGFyZCBmb3Iga2V4ZWMgb24gc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXMuCgpOb3cgZm9yIHRoZSBmb2N1cyBzeW1ib2xzLCB0aGVzZSBhcmUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMuIEkmIzM5O3ZlIHZlcmlmaWVkIG15IGNob2ljZXM6IGBrZXhlY19sb2NhdGVfbWVtX2hvbGVgLCBpdCBzZWVtcywgaXMgdGhlIGNvcnJlY3QgZnVuY3Rpb24gYXMgYGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bmAgYW5kIGBsb2NhdGVfbWVtX2hvbGVfYm90dG9tX3VwYCBhcmUgY2FsbGVkIGFuZCBhcmUgdXNlZCBieSBga2V4ZWNfbG9jYXRlX21lbV9ob2xlYC4gR29vZC4gVGhlbiwgYHJhbmdlX2ZpcnN0X2h3cG9pc29uYCBhbmQgYHJhbmdlX2xhc3RfaHdwb2lzb25gIGFyZSBnb29kIGZvY3VzIHN5bWJvbHMgYXMgdGhleSBhcmUgbm90IHN0YXRpYywgYW5kIGhhdmUgYmVlbiBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9tbS5oYCBhbmQgZGVmaW5lZCBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFNhbWUgY2FzZSBmb3IgYHNhbml0eV9jaGVja19zZWdtZW50X2xpc3RgLCB3aGljaCBpcyBkZWZpbmVkIGluIGBrZXJuZWwva2V4ZWNfY29yZS5jYCBhbmQgZGVjbGFyZWQgaW4gYGtlcm5lbC9rZXhlY19pbnRlcm5hbC5oYC4KCkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIG1vZGlmaWVzIGZ1bmRhbWVudGFsIGtlcm5lbCBsb2dpYy4gVGhlIGBrZXhlY19sb2FkYCBhbmQgYGtleGVjX2ZpbGVfbG9hZGAgc3lzY2FsbHMgYXJlIHJlbGV2YW50LgoKU28gbXkgYXNzZXNzbWVudDoKCiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlCiogICAqKlJlYXNvbmluZzoqKiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBwb2lzb25lZCBwYWdlcyB3aXRoaW4gdGhlIGBrZXhlY2Agc3Vic3lzdGVtLiBJdCB0b3VjaGVzIGNvcmUga2VybmVsIGxvZ2ljIGFjY2Vzc2libGUgdmlhIHN5c2NhbGxzLgoqICAgKipGb2N1c1N5bWJvbHM6KiogYHNhbml0eV9jaGVja19zZWdtZW50X2xpc3RgLCBga2V4ZWNfbG9jYXRlX21lbV9ob2xlYCwgYHJhbmdlX2ZpcnN0X2h3cG9pc29uYCwgYHJhbmdlX2xhc3RfaHdwb2lzb25gCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE1FTU9SWV9GQUlMVVJFYCwgYEtFWEVDYCwgYEtFWEVDX0ZJTEVgCgpJJiMzOTttIHJlYWR5IHRvIHVzZSB0aGUgc2V0LXJlc3VsdHMgdG9vbCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtLRVhFQyYjMzQ7LAogICAgJiMzNDtLRVhFQ19GSUxFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdCYjMzQ7LAogICAgJiMzNDtrZXhlY19sb2NhdGVfbWVtX2hvbGUmIzM0OywKICAgICYjMzQ7cmFuZ2VfZmlyc3RfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7cmFuZ2VfbGFzdF9od3BvaXNvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUga2V4ZWMgc3Vic3lzdGVtIHRvIGF2b2lkIGFsbG9jYXRpbmcgbWVtb3J5IG9uIGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdGhlIGtleGVjX2xvYWQgYW5kIGtleGVjX2ZpbGVfbG9hZCBzeXNjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7S0VYRUMmIzM0OywKICAgICYjMzQ7S0VYRUNfRklMRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nhbml0eV9jaGVja19zZWdtZW50X2xpc3QmIzM0OywKICAgICYjMzQ7a2V4ZWNfbG9jYXRlX21lbV9ob2xlJiMzNDssCiAgICAmIzM0O3JhbmdlX2ZpcnN0X2h3cG9pc29uJiMzNDssCiAgICAmIzM0O3JhbmdlX2xhc3RfaHdwb2lzb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGtleGVjIHN1YnN5c3RlbSB0byBhdm9pZCBhbGxvY2F0aW5nIG1lbW9yeSBvbiBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHRoZSBrZXhlY19sb2FkIGFuZCBrZXhlY19maWxlX2xvYWQgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBjaGVja3MgdG8gYXZvaWQgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGR1cmluZyBrZXhlYyBzZWdtZW50IGFsbG9jYXRpb24gYW5kIHZhbGlkYXRpb24uIEl0IG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIHRvIHNraXAgcG9pc29uZWQgcGFnZXMgYW5kIHJlamVjdHMga2V4ZWMgc2VnbWVudHMgdGhhdCBsYW5kIG9uIHBvaXNvbmVkIG1lbW9yeS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTg2M2Y2YWM1YjViNjE3MDgwMjBiM2JjMzQzMzQyYWQ3YWU1MDZjYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDExOjU3OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDEzOTAyMzY4NDcxZTEuLmZmODNhZTdhN2VmZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTUyNTIsNiAmIzQzOzUyNTIsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBtZW1vcnlfZmFpbHVyZV9hdHRyX2dyb3VwOwogZXh0ZXJuIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyk7CiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pOwogdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpOwomIzQzO3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOwomIzQzO3BoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpCiB7CkBAIC01MjY0LDYgJiM0Mzs1MjY2LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKQogc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSkKIHsKIH0KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LAomIzQzOwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBQSFlTX0FERFJfTUFYOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsCiYjNDM7CQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gUEhZU19BRERSX01BWDsKJiM0Mzt9CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKQpkaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjX2NvcmUuYyBiL2tlcm5lbC9rZXhlY19jb3JlLmMKaW5kZXggZGM3NzBiOWE2ZDA1My4uN2VlOGM5ZjA3OGY2YiAxMDA2NDQKLS0tIGEva2VybmVsL2tleGVjX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwva2V4ZWNfY29yZS5jCkBAIC0yMTIsNiAmIzQzOzIxMiwxNiBAQCBpbnQgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChzdHJ1Y3Qga2ltYWdlICppbWFnZSkKIAl9CiAjZW5kaWYKIAomIzQzOwkvKgomIzQzOwkgKiBSZWplY3QgZGVzdGluYXRpb25zIHRoYXQgbGFuZCBvbiBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnk6IHRoZQomIzQzOwkgKiByZWxvY2F0aW9uIGNvcHkgd291bGQgbWFjaGluZS1jaGVjayBvbiB0aGUgYmFkIGZyYW1lLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3NlZ21lbnRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHJhbmdlX2ZpcnN0X2h3cG9pc29uKGltYWdlLSZndDtzZWdtZW50W2ldLm1lbSwKJiM0MzsJCQkJCSBpbWFnZS0mZ3Q7c2VnbWVudFtpXS5tZW1zeikgIT0gUEhZU19BRERSX01BWCkKJiM0MzsJCQlyZXR1cm4gLUVIV1BPSVNPTjsKJiM0MzsJfQomIzQzOwogCS8qCiAJICogVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBhcmUgc2VhcmNoZWQgZnJvbSBzeXN0ZW0gUkFNIHJhdGhlciB0aGFuCiAJICogYmVpbmcgYWxsb2NhdGVkIGZyb20gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgc28gdGhleSBhcmUgbm90IGd1YXJhbnRlZWQKZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19maWxlLmMgYi9rZXJuZWwva2V4ZWNfZmlsZS5jCmluZGV4IDJiZmJiMmQxNDRlNjkuLjUyN2ZkODA1YTNhNmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZXhlY19maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2tleGVjX2ZpbGUuYwpAQCAtNDc0LDYgJiM0Mzs0NzQsNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIHsKIAlzdHJ1Y3Qga2ltYWdlICppbWFnZSA9IGtidWYtJmd0O2ltYWdlOwogCXVuc2lnbmVkIGxvbmcgdGVtcF9zdGFydCwgdGVtcF9lbmQ7CiYjNDM7CXBoeXNfYWRkcl90IHBvaXNvbjsKIAogCXRlbXBfZW5kID0gbWluKGVuZCwga2J1Zi0mZ3Q7YnVmX21heCk7CiAJdGVtcF9zdGFydCA9IHRlbXBfZW5kIC0ga2J1Zi0mZ3Q7bWVtc3ogJiM0MzsgMTsKQEAgLTQ4Myw3ICYjNDM7NDg0LDkgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCS8qIGFsaWduIGRvd24gc3RhcnQgKi8KIAkJdGVtcF9zdGFydCA9IEFMSUdOX0RPV04odGVtcF9zdGFydCwga2J1Zi0mZ3Q7YnVmX2FsaWduKTsKIAotCQlpZiAodGVtcF9zdGFydCAmbHQ7IHN0YXJ0IHx8IHRlbXBfc3RhcnQgJmx0OyBrYnVmLSZndDtidWZfbWluKQomIzQzOwkJLyogQSBjYW5kaWRhdGUgYWJvdmUgdGhlIHJhbmdlIG1lYW5zIHRoZSB3YWxrIHdyYXBwZWQgYXJvdW5kICovCiYjNDM7CQlpZiAodGVtcF9zdGFydCAmbHQ7IHN0YXJ0IHx8IHRlbXBfc3RhcnQgJmx0OyBrYnVmLSZndDtidWZfbWluIHx8CiYjNDM7CQkgICAgdGVtcF9zdGFydCAmZ3Q7IGVuZCkKIAkJCXJldHVybiAwOwogCiAJCXRlbXBfZW5kID0gdGVtcF9zdGFydCAmIzQzOyBrYnVmLSZndDttZW1zeiAtIDE7CkBAIC01MDMsNiAmIzQzOzUwNiwxMyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCWNvbnRpbnVlOwogCQl9CiAKJiM0MzsJCXBvaXNvbiA9IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHRlbXBfc3RhcnQsIGtidWYtJmd0O21lbXN6KTsKJiM0MzsJCWlmIChwb2lzb24gIT0gUEhZU19BRERSX01BWCkgewomIzQzOwkJCS8qIHdlIGhpdCBhIHBvaXNvbmVkIHBhZ2UgKi8KJiM0MzsJCQl0ZW1wX3N0YXJ0ID0gcG9pc29uIC0ga2J1Zi0mZ3Q7bWVtc3o7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCS8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovCiAJCWJyZWFrOwogCX0gd2hpbGUgKDEpOwpAQCAtNTE5LDYgJiM0Mzs1MjksNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiB7CiAJc3RydWN0IGtpbWFnZSAqaW1hZ2UgPSBrYnVmLSZndDtpbWFnZTsKIAl1bnNpZ25lZCBsb25nIHRlbXBfc3RhcnQsIHRlbXBfZW5kOwomIzQzOwlwaHlzX2FkZHJfdCBwb2lzb247CiAKIAl0ZW1wX3N0YXJ0ID0gbWF4KHN0YXJ0LCBrYnVmLSZndDtidWZfbWluKTsKIApAQCAtNTQ1LDYgJiM0Mzs1NTYsMTMgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfYm90dG9tX3VwKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJY29udGludWU7CiAJCX0KIAomIzQzOwkJcG9pc29uID0gcmFuZ2VfbGFzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLSZndDttZW1zeik7CiYjNDM7CQlpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHsKJiM0MzsJCQkvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovCiYjNDM7CQkJdGVtcF9zdGFydCA9IHBvaXNvbiAmIzQzOyBQQUdFX1NJWkU7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCS8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovCiAJCWJyZWFrOwogCX0gd2hpbGUgKDEpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggYThiMDNlMjkyMGJhOC4uYTJjYThkZjUwMWNhZSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC05Niw2ICYjNDM7OTYsNDYgQEAgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfc3ViKHVuc2lnbmVkIGxvbmcgcGZuLCBsb25nIGkpCiAJCW1lbWJsa19ucl9wb2lzb25fc3ViKHBmbiwgaSk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJldHVybiB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgaGFyZHdhcmUtcG9pc29uZWQgb25saW5lIHBhZ2UgaW4gW3N0YXJ0LAomIzQzOyAqIHN0YXJ0ICYjNDM7IHNpemUpLCBvciBQSFlTX0FERFJfTUFYIGlmIHRoZSByYW5nZSBpcyBjbGVhbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgcGh5c19hZGRyX3QgcmFuZ2VfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKJiM0MzsJCQkJICBib29sIGZpcnN0KQomIzQzO3sKJiM0MzsJcGh5c19hZGRyX3QgcG9pc29uID0gUEhZU19BRERSX01BWDsKJiM0MzsJdW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm47CiYjNDM7CiYjNDM7CWlmICghc2l6ZSB8fCAhYXRvbWljX2xvbmdfcmVhZCgmYW1wO251bV9wb2lzb25lZF9wYWdlcykpCiYjNDM7CQlyZXR1cm4gcG9pc29uOwomIzQzOwomIzQzOwllbmRfcGZuID0gUEhZU19QRk4oc3RhcnQgJiM0Mzsgc2l6ZSAtIDEpOwomIzQzOwlmb3IgKHBmbiA9IFBIWVNfUEZOKHN0YXJ0KTsgcGZuICZsdDs9IGVuZF9wZm47IHBmbiYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7CiYjNDM7CiYjNDM7CQlpZiAocGFnZSAmYW1wOyZhbXA7IGlzX3BhZ2VfaHdwb2lzb24ocGFnZSkpIHsKJiM0MzsJCQlpZiAoZmlyc3QpCiYjNDM7CQkJCXJldHVybiBQRk5fUEhZUyhwZm4pOwomIzQzOwomIzQzOwkJCXBvaXNvbiA9IFBGTl9QSFlTKHBmbik7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQljb25kX3Jlc2NoZWQoKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcG9pc29uOwomIzQzO30KJiM0MzsKJiM0MztwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7cGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCBmYWxzZSk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBNRl9BVFRSX1JPIC0gQ3JlYXRlIHN5c2ZzIGVudHJ5IGZvciBlYWNoIG1lbW9yeSBmYWlsdXJlIHN0YXRpc3RpY3MuCiAgKiBAX25hbWU6IG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIHBlciBOVU1BIHN5c2ZzIGRpcmVjdG9yeS4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDExOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NTQKCQkJCQkJCW91dHB1dDogMTI1CgkJCQkJCQl0aG91Z2h0czogMTAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZXcgUmlza3MgSGVyZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyBpcyBmb2N1c2VkIG9uICpwcmV2ZW50aW5nKiB0aGUgdXNlIG9mIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSB3aXRoaW4gdGhlIGtleGVjIHByb2Nlc3MsIG5vdCBpbnRyb2R1Y2luZyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBXZSYjMzk7cmUgbW9kaWZ5aW5nIGhvdyBrZXhlYyBoYW5kbGVzIG1lbW9yeSwgc3BlY2lmaWNhbGx5IHRvICphdm9pZCogYmFkIG1lbW9yeSwgd2hpY2ggaXMgYSBnb29kIHRoaW5nLgoKVGhlIHBhdGNoIHRvdWNoZXMgYG1tLmhgLCBga2V4ZWNfY29yZS5jYCwgYGtleGVjX2ZpbGUuY2AsIGFuZCBgbWVtb3J5LWZhaWx1cmUuY2AuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgbW9kaWZpY2F0aW9ucyBkb24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgS01TQU4tcmVsZXZhbnQgaXNzdWVzLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkZpcnN0LCBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAgbm93IHZhbGlkYXRlcyBrZXhlYyBzZWdtZW50cyBhZ2FpbnN0IHBvaXNvbmVkIG1lbW9yeS4gSXQgdXNlcyBgcmFuZ2VfZmlyc3RfaHdwb2lzb25gIGFuZCByZXR1cm5zIGFuIGVycm9yIGlmIGFueSBwb2lzb25lZCBtZW1vcnkgaXMgZm91bmQuIFRoaXMgaXMgYSAqdmFsaWRhdGlvbiogc3RlcC4gSSBkb24mIzM5O3Qgc2VlIGFueSByaXNrIGhlcmU7IHdlJiMzOTtyZSByZWplY3RpbmcgcHJvYmxlbWF0aWMgc2VnbWVudHMsIG5vdCB1c2luZyB1bmluaXRpYWxpemVkIGRhdGEuCgpOZXh0LCBgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duYCBhbmQgYGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXBgIG5vdyBpbmNsdWRlIGNoZWNrcyBmb3IgcG9pc29uZWQgbWVtb3J5IHVzaW5nIGByYW5nZV9maXJzdF9od3BvaXNvbmAgb3IgYHJhbmdlX2xhc3RfaHdwb2lzb25gLiBUaGV5JiMzOTtyZSAqYWxsb2NhdGluZyogbWVtb3J5IGZvciBrZXhlYyBzZWdtZW50cywgYnV0IG5vdyB0aGV5IGFyZSBhY3RpdmVseSBhdm9pZGluZyBwb2lzb25lZCBtZW1vcnkgcmVnaW9ucy4gVGhlIGZ1bmN0aW9ucyBhZGp1c3QgdGhlaXIgc2VhcmNoIGJhc2VkIG9uIHRoZSBwb2lzb25lZCBzdGF0dXMgb2YgdGhlIGNhbmRpZGF0ZSByZWdpb24uIENydWNpYWxseSwgdGhleSBkbyBub3QgcmVhZCBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGV5IGFyZSBtZXJlbHkgdXNpbmcgYSBmdW5jdGlvbiB0byBhdm9pZCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyByZWdpb25zLgoKRmluYWxseSwgYHJhbmdlX2h3cG9pc29uYCBqdXN0IGl0ZXJhdGVzIHRocm91Z2ggYSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIGFuZCBjYWxscyBgaXNfcGFnZV9od3BvaXNvbmAuIEFnYWluLCBpdCYjMzk7cyBhYm91dCBkZXRlY3RpbmcgYW5kIHJlcG9ydGluZyBwb2lzb25lZCBwYWdlcywgbm90ICpjcmVhdGluZyogdGhlbSBvciBleHBvc2luZyB0aGVtLgoKU28sIGxldCYjMzk7cyBzdW1tYXJpemUgdGhlIGtleSBwb2ludHM6CgoqICAgVGhlIHBhdGNoICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIG5ldyBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IGdldCBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLgoqICAgTm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlczsgdGhlIGNvZGUgc2VlbXMgY2xlYW4gd2l0aCBwcm9wZXIgaW5pdGlhbGl6YXRpb24uCiogICBObyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIGFuZCBsZWZ0IHVuaW5pdGlhbGl6ZWQuCiogICBUaGUgYm91bmRzIGNoZWNrcyBoYXZlIGJlZW4gdXBkYXRlZCB0byAqYXZvaWQqIHVzaW5nIHBvaXNvbmVkIG1lbW9yeS4gVGhpcyBpcyBleGFjdGx5IHdoYXQgd2Ugd2FudC4gSXQgZG9lc24mIzM5O3QgYWxsb3cgYWNjZXNzZXMgdG8gdW5pbml0aWFsaXplZCBieXRlcyBvZiAqZXhpc3RpbmcqIGJ1ZmZlcnMuCgpUaGVyZWZvcmUsIHNpbmNlIHRoZSBwYXRjaCYjMzk7cyBwcmltYXJ5IGZ1bmN0aW9uIGlzIHRvICphdm9pZCogdGhlIHV0aWxpemF0aW9uIG9mIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBkdXJpbmcga2V4ZWMsIGl0IGRvZXMgbm90IGludm9sdmUgZGF0YSB0cmFuc2ZlciB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGNyZWF0ZSBhbnkgcG90ZW50aWFsIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY29kZSBpdHNlbGYsIHRoYXQgSSYjMzk7dmUgcmV2aWV3ZWQsIGFwcGVhcnMgdG8gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYXMgd2VsbC4gSSBkb24mIzM5O3Qgc2VlIGEgcmlzayB0aGF0IGp1c3RpZmllcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHNob3VsZCBiZSBzdWZmaWNpZW50LgoKT2theSwgbGV0IG1lIGRvIG9uZSBsYXN0IHNwb3QgY2hlY2suIEluIGBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd25gIGFuZCBgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cGAsIHRoZSB2YXJpYWJsZSBgcG9pc29uYCBpcyBhbHdheXMgYXNzaWduZWQgYmVmb3JlIGl0JiMzOTtzIHVzZWQuIFNhbWUgd2l0aCBgcmFuZ2VfaHdwb2lzb25gOyBhbGwgdmFyaWFibGVzIGluIHRoYXQgZnVuY3Rpb24gYXJlIGFsc28gaW5pdGlhbGl6ZWQuIEFsbCBjbGVhciB0aGVyZS4KCioqRmluYWwgY29uY2x1c2lvbjogTmVlZHNLTVNBTiA9IGZhbHNlLioqIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBXZSYjMzk7cmUgZ29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTE6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBjaGVja3MgdG8gYXZvaWQgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGR1cmluZyBrZXhlYyBzZWdtZW50IGFsbG9jYXRpb24gYW5kIHZhbGlkYXRpb24uIEl0IG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIHRvIHNraXAgcG9pc29uZWQgcGFnZXMgYW5kIHJlamVjdHMga2V4ZWMgc2VnbWVudHMgdGhhdCBsYW5kIG9uIHBvaXNvbmVkIG1lbW9yeS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgY2hlY2tzIHRvIGF2b2lkIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBkdXJpbmcga2V4ZWMgc2VnbWVudCBhbGxvY2F0aW9uIGFuZCB2YWxpZGF0aW9uLiBJdCBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyB0byBza2lwIHBvaXNvbmVkIHBhZ2VzIGFuZCByZWplY3RzIGtleGVjIHNlZ21lbnRzIHRoYXQgbGFuZCBvbiBwb2lzb25lZCBtZW1vcnkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBsZWF2ZSBhbnkgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgdW5pbml0aWFsaXplZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU3OjA3LjQyOTgxMjc5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMyNzU1MzE2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIktFWEVDXCIsXG4gICAgXCJLRVhFQ19GSUxFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdFwiLFxuICAgIFwia2V4ZWNfbG9jYXRlX21lbV9ob2xlXCIsXG4gICAgXCJyYW5nZV9maXJzdF9od3BvaXNvblwiLFxuICAgIFwicmFuZ2VfbGFzdF9od3BvaXNvblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBjaGVja3MgdG8gYXZvaWQgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGR1cmluZyBrZXhlYyBzZWdtZW50IGFsbG9jYXRpb24gYW5kIHZhbGlkYXRpb24uIEl0IG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIHRvIHNraXAgcG9pc29uZWQgcGFnZXMgYW5kIHJlamVjdHMga2V4ZWMgc2VnbWVudHMgdGhhdCBsYW5kIG9uIHBvaXNvbmVkIG1lbW9yeS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUga2V4ZWMgc3Vic3lzdGVtIHRvIGF2b2lkIGFsbG9jYXRpbmcgbWVtb3J5IG9uIGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdGhlIGtleGVjX2xvYWQgYW5kIGtleGVjX2ZpbGVfbG9hZCBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTc6MDcuNDI5ODE4NjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTIwNjkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE4NjNmNmFjNWI1YjYxNzA4MDIwYjNiYzM0MzM0MmFkN2FlNTA2Y2NcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTE6NTc6MDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuaW5kZXggMTM5MDIzNjg0NzFlMS4uZmY4M2FlN2E3ZWZlNiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5AQCAtNTI1Miw2ICs1MjUyLDggQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVtb3J5X2ZhaWx1cmVfYXR0cl9ncm91cDtcXG4gZXh0ZXJuIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyk7XFxuIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbik7XFxuIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKTtcXG4rcGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XFxuK3BoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbiB7XFxuQEAgLTUyNjQsNiArNTI2NiwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbilcXG4gc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSlcXG4ge1xcbiB9XFxuK1xcbitzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBzaXplKVxcbit7XFxuK1xcdHJldHVybiBQSFlTX0FERFJfTUFYO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4re1xcbitcXHRyZXR1cm4gUEhZU19BRERSX01BWDtcXG4rfVxcbiAjZW5kaWZcXG4gXFxuICNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0hPVFBMVUcpXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19jb3JlLmMgYi9rZXJuZWwva2V4ZWNfY29yZS5jXFxuaW5kZXggZGM3NzBiOWE2ZDA1My4uN2VlOGM5ZjA3OGY2YiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwva2V4ZWNfY29yZS5jXFxuKysrIGIva2VybmVsL2tleGVjX2NvcmUuY1xcbkBAIC0yMTIsNiArMjEyLDE2IEBAIGludCBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0KHN0cnVjdCBraW1hZ2UgKmltYWdlKVxcbiBcXHR9XFxuICNlbmRpZlxcbiBcXG4rXFx0LypcXG4rXFx0ICogUmVqZWN0IGRlc3RpbmF0aW9ucyB0aGF0IGxhbmQgb24gaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5OiB0aGVcXG4rXFx0ICogcmVsb2NhdGlvbiBjb3B5IHdvdWxkIG1hY2hpbmUtY2hlY2sgb24gdGhlIGJhZCBmcmFtZS5cXG4rXFx0ICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9zZWdtZW50czsgaSsrKSB7XFxuK1xcdFxcdGlmIChyYW5nZV9maXJzdF9od3BvaXNvbihpbWFnZS1cXHUwMDNlc2VnbWVudFtpXS5tZW0sXFxuK1xcdFxcdFxcdFxcdFxcdCBpbWFnZS1cXHUwMDNlc2VnbWVudFtpXS5tZW1zeikgIT0gUEhZU19BRERSX01BWClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSFdQT0lTT047XFxuK1xcdH1cXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgYXJlIHNlYXJjaGVkIGZyb20gc3lzdGVtIFJBTSByYXRoZXIgdGhhblxcbiBcXHQgKiBiZWluZyBhbGxvY2F0ZWQgZnJvbSB0aGUgYnVkZHkgYWxsb2NhdG9yLCBzbyB0aGV5IGFyZSBub3QgZ3VhcmFudGVlZFxcbmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWNfZmlsZS5jIGIva2VybmVsL2tleGVjX2ZpbGUuY1xcbmluZGV4IDJiZmJiMmQxNDRlNjkuLjUyN2ZkODA1YTNhNmIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2tleGVjX2ZpbGUuY1xcbisrKyBiL2tlcm5lbC9rZXhlY19maWxlLmNcXG5AQCAtNDc0LDYgKzQ3NCw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiB7XFxuIFxcdHN0cnVjdCBraW1hZ2UgKmltYWdlID0ga2J1Zi1cXHUwMDNlaW1hZ2U7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdGVtcF9zdGFydCwgdGVtcF9lbmQ7XFxuK1xcdHBoeXNfYWRkcl90IHBvaXNvbjtcXG4gXFxuIFxcdHRlbXBfZW5kID0gbWluKGVuZCwga2J1Zi1cXHUwMDNlYnVmX21heCk7XFxuIFxcdHRlbXBfc3RhcnQgPSB0ZW1wX2VuZCAtIGtidWYtXFx1MDAzZW1lbXN6ICsgMTtcXG5AQCAtNDgzLDcgKzQ4NCw5IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHQvKiBhbGlnbiBkb3duIHN0YXJ0ICovXFxuIFxcdFxcdHRlbXBfc3RhcnQgPSBBTElHTl9ET1dOKHRlbXBfc3RhcnQsIGtidWYtXFx1MDAzZWJ1Zl9hbGlnbik7XFxuIFxcbi1cXHRcXHRpZiAodGVtcF9zdGFydCBcXHUwMDNjIHN0YXJ0IHx8IHRlbXBfc3RhcnQgXFx1MDAzYyBrYnVmLVxcdTAwM2VidWZfbWluKVxcbitcXHRcXHQvKiBBIGNhbmRpZGF0ZSBhYm92ZSB0aGUgcmFuZ2UgbWVhbnMgdGhlIHdhbGsgd3JhcHBlZCBhcm91bmQgKi9cXG4rXFx0XFx0aWYgKHRlbXBfc3RhcnQgXFx1MDAzYyBzdGFydCB8fCB0ZW1wX3N0YXJ0IFxcdTAwM2Mga2J1Zi1cXHUwMDNlYnVmX21pbiB8fFxcbitcXHRcXHQgICAgdGVtcF9zdGFydCBcXHUwMDNlIGVuZClcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRcXHR0ZW1wX2VuZCA9IHRlbXBfc3RhcnQgKyBrYnVmLVxcdTAwM2VtZW1zeiAtIDE7XFxuQEAgLTUwMyw2ICs1MDYsMTMgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcbitcXHRcXHRwb2lzb24gPSByYW5nZV9maXJzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLVxcdTAwM2VtZW1zeik7XFxuK1xcdFxcdGlmIChwb2lzb24gIT0gUEhZU19BRERSX01BWCkge1xcbitcXHRcXHRcXHQvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovXFxuK1xcdFxcdFxcdHRlbXBfc3RhcnQgPSBwb2lzb24gLSBrYnVmLVxcdTAwM2VtZW1zejtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdC8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9IHdoaWxlICgxKTtcXG5AQCAtNTE5LDYgKzUyOSw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4ge1xcbiBcXHRzdHJ1Y3Qga2ltYWdlICppbWFnZSA9IGtidWYtXFx1MDAzZWltYWdlO1xcbiBcXHR1bnNpZ25lZCBsb25nIHRlbXBfc3RhcnQsIHRlbXBfZW5kO1xcbitcXHRwaHlzX2FkZHJfdCBwb2lzb247XFxuIFxcbiBcXHR0ZW1wX3N0YXJ0ID0gbWF4KHN0YXJ0LCBrYnVmLVxcdTAwM2VidWZfbWluKTtcXG4gXFxuQEAgLTU0NSw2ICs1NTYsMTMgQEAgc3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfYm90dG9tX3VwKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0cG9pc29uID0gcmFuZ2VfbGFzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLVxcdTAwM2VtZW1zeik7XFxuK1xcdFxcdGlmIChwb2lzb24gIT0gUEhZU19BRERSX01BWCkge1xcbitcXHRcXHRcXHQvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovXFxuK1xcdFxcdFxcdHRlbXBfc3RhcnQgPSBwb2lzb24gKyBQQUdFX1NJWkU7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHQvKiBXZSBmb3VuZCBhIHN1aXRhYmxlIG1lbW9yeSByYW5nZSAqL1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fSB3aGlsZSAoMSk7XFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuaW5kZXggYThiMDNlMjkyMGJhOC4uYTJjYThkZjUwMWNhZSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXFxuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbkBAIC05Niw2ICs5Niw0NiBAQCB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSlcXG4gXFx0XFx0bWVtYmxrX25yX3BvaXNvbl9zdWIocGZuLCBpKTtcXG4gfVxcbiBcXG4rLypcXG4rICogUmV0dXJuIHRoZSBmaXJzdCBvciB0aGUgbGFzdCBoYXJkd2FyZS1wb2lzb25lZCBvbmxpbmUgcGFnZSBpbiBbc3RhcnQsXFxuKyAqIHN0YXJ0ICsgc2l6ZSksIG9yIFBIWVNfQUREUl9NQVggaWYgdGhlIHJhbmdlIGlzIGNsZWFuLlxcbisgKi9cXG4rc3RhdGljIHBoeXNfYWRkcl90IHJhbmdlX2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUsXFxuK1xcdFxcdFxcdFxcdCAgYm9vbCBmaXJzdClcXG4re1xcbitcXHRwaHlzX2FkZHJfdCBwb2lzb24gPSBQSFlTX0FERFJfTUFYO1xcbitcXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbjtcXG4rXFxuK1xcdGlmICghc2l6ZSB8fCAhYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bnVtX3BvaXNvbmVkX3BhZ2VzKSlcXG4rXFx0XFx0cmV0dXJuIHBvaXNvbjtcXG4rXFxuK1xcdGVuZF9wZm4gPSBQSFlTX1BGTihzdGFydCArIHNpemUgLSAxKTtcXG4rXFx0Zm9yIChwZm4gPSBQSFlTX1BGTihzdGFydCk7IHBmbiBcXHUwMDNjPSBlbmRfcGZuOyBwZm4rKykge1xcbitcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19vbmxpbmVfcGFnZShwZm4pO1xcbitcXG4rXFx0XFx0aWYgKHBhZ2UgXFx1MDAyNlxcdTAwMjYgaXNfcGFnZV9od3BvaXNvbihwYWdlKSkge1xcbitcXHRcXHRcXHRpZiAoZmlyc3QpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBQRk5fUEhZUyhwZm4pO1xcbitcXG4rXFx0XFx0XFx0cG9pc29uID0gUEZOX1BIWVMocGZuKTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBwb2lzb247XFxuK31cXG4rXFxuK3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpXFxuK3tcXG4rXFx0cmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCB0cnVlKTtcXG4rfVxcbitcXG4rcGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxcbit7XFxuK1xcdHJldHVybiByYW5nZV9od3BvaXNvbihzdGFydCwgc2l6ZSwgZmFsc2UpO1xcbit9XFxuK1xcbiAvKipcXG4gICogTUZfQVRUUl9STyAtIENyZWF0ZSBzeXNmcyBlbnRyeSBmb3IgZWFjaCBtZW1vcnkgZmFpbHVyZSBzdGF0aXN0aWNzLlxcbiAgKiBAX25hbWU6IG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIHBlciBOVU1BIHN5c2ZzIGRpcmVjdG9yeS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTc6MDcuODk1Nzg3MTY1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDAxNjY5MjgxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIktFWEVDXCIsXG4gICAgXCJLRVhFQ19GSUxFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdFwiLFxuICAgIFwia2V4ZWNfbG9jYXRlX21lbV9ob2xlXCIsXG4gICAgXCJyYW5nZV9maXJzdF9od3BvaXNvblwiLFxuICAgIFwicmFuZ2VfbGFzdF9od3BvaXNvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBrZXhlYyBzdWJzeXN0ZW0gdG8gYXZvaWQgYWxsb2NhdGluZyBtZW1vcnkgb24gaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB0aGUga2V4ZWNfbG9hZCBhbmQga2V4ZWNfZmlsZV9sb2FkIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhODYzZjZhYzViNWI2MTcwODAyMGIzYmMzNDMzNDJhZDdhZTUwNmNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTE6NTc6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDEzOTAyMzY4NDcxZTEuLmZmODNhZTdhN2VmZTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTUyNTIsNiArNTI1Miw4IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXA7XG4gZXh0ZXJuIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyk7XG4gdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSk7XG4rcGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4rcGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuIHtcbkBAIC01MjY0LDYgKzUyNjYsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pXG4gc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSlcbiB7XG4gfVxuK1xuK3N0YXRpYyBpbmxpbmUgcGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsXG4rXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0cmV0dXJuIFBIWVNfQUREUl9NQVg7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgcGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCxcbitcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBzaXplKVxuK3tcbitcdHJldHVybiBQSFlTX0FERFJfTUFYO1xuK31cbiAjZW5kaWZcbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRylcbmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWNfY29yZS5jIGIva2VybmVsL2tleGVjX2NvcmUuY1xuaW5kZXggZGM3NzBiOWE2ZDA1My4uN2VlOGM5ZjA3OGY2YiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9rZXhlY19jb3JlLmNcbisrKyBiL2tlcm5lbC9rZXhlY19jb3JlLmNcbkBAIC0yMTIsNiArMjEyLDE2IEBAIGludCBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0KHN0cnVjdCBraW1hZ2UgKmltYWdlKVxuIFx0fVxuICNlbmRpZlxuIFxuK1x0LypcbitcdCAqIFJlamVjdCBkZXN0aW5hdGlvbnMgdGhhdCBsYW5kIG9uIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeTogdGhlXG4rXHQgKiByZWxvY2F0aW9uIGNvcHkgd291bGQgbWFjaGluZS1jaGVjayBvbiB0aGUgYmFkIGZyYW1lLlxuK1x0ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9zZWdtZW50czsgaSsrKSB7XG4rXHRcdGlmIChyYW5nZV9maXJzdF9od3BvaXNvbihpbWFnZS1cdTAwM2VzZWdtZW50W2ldLm1lbSxcbitcdFx0XHRcdFx0IGltYWdlLVx1MDAzZXNlZ21lbnRbaV0ubWVtc3opICE9IFBIWVNfQUREUl9NQVgpXG4rXHRcdFx0cmV0dXJuIC1FSFdQT0lTT047XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBhcmUgc2VhcmNoZWQgZnJvbSBzeXN0ZW0gUkFNIHJhdGhlciB0aGFuXG4gXHQgKiBiZWluZyBhbGxvY2F0ZWQgZnJvbSB0aGUgYnVkZHkgYWxsb2NhdG9yLCBzbyB0aGV5IGFyZSBub3QgZ3VhcmFudGVlZFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19maWxlLmMgYi9rZXJuZWwva2V4ZWNfZmlsZS5jXG5pbmRleCAyYmZiYjJkMTQ0ZTY5Li41MjdmZDgwNWEzYTZiIDEwMDY0NFxuLS0tIGEva2VybmVsL2tleGVjX2ZpbGUuY1xuKysrIGIva2VybmVsL2tleGVjX2ZpbGUuY1xuQEAgLTQ3NCw2ICs0NzQsNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiB7XG4gXHRzdHJ1Y3Qga2ltYWdlICppbWFnZSA9IGtidWYtXHUwMDNlaW1hZ2U7XG4gXHR1bnNpZ25lZCBsb25nIHRlbXBfc3RhcnQsIHRlbXBfZW5kO1xuK1x0cGh5c19hZGRyX3QgcG9pc29uO1xuIFxuIFx0dGVtcF9lbmQgPSBtaW4oZW5kLCBrYnVmLVx1MDAzZWJ1Zl9tYXgpO1xuIFx0dGVtcF9zdGFydCA9IHRlbXBfZW5kIC0ga2J1Zi1cdTAwM2VtZW1zeiArIDE7XG5AQCAtNDgzLDcgKzQ4NCw5IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHQvKiBhbGlnbiBkb3duIHN0YXJ0ICovXG4gXHRcdHRlbXBfc3RhcnQgPSBBTElHTl9ET1dOKHRlbXBfc3RhcnQsIGtidWYtXHUwMDNlYnVmX2FsaWduKTtcbiBcbi1cdFx0aWYgKHRlbXBfc3RhcnQgXHUwMDNjIHN0YXJ0IHx8IHRlbXBfc3RhcnQgXHUwMDNjIGtidWYtXHUwMDNlYnVmX21pbilcbitcdFx0LyogQSBjYW5kaWRhdGUgYWJvdmUgdGhlIHJhbmdlIG1lYW5zIHRoZSB3YWxrIHdyYXBwZWQgYXJvdW5kICovXG4rXHRcdGlmICh0ZW1wX3N0YXJ0IFx1MDAzYyBzdGFydCB8fCB0ZW1wX3N0YXJ0IFx1MDAzYyBrYnVmLVx1MDAzZWJ1Zl9taW4gfHxcbitcdFx0ICAgIHRlbXBfc3RhcnQgXHUwMDNlIGVuZClcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0dGVtcF9lbmQgPSB0ZW1wX3N0YXJ0ICsga2J1Zi1cdTAwM2VtZW1zeiAtIDE7XG5AQCAtNTAzLDYgKzUwNiwxMyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuK1x0XHRwb2lzb24gPSByYW5nZV9maXJzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLVx1MDAzZW1lbXN6KTtcbitcdFx0aWYgKHBvaXNvbiAhPSBQSFlTX0FERFJfTUFYKSB7XG4rXHRcdFx0Lyogd2UgaGl0IGEgcG9pc29uZWQgcGFnZSAqL1xuK1x0XHRcdHRlbXBfc3RhcnQgPSBwb2lzb24gLSBrYnVmLVx1MDAzZW1lbXN6O1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdC8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovXG4gXHRcdGJyZWFrO1xuIFx0fSB3aGlsZSAoMSk7XG5AQCAtNTE5LDYgKzUyOSw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiB7XG4gXHRzdHJ1Y3Qga2ltYWdlICppbWFnZSA9IGtidWYtXHUwMDNlaW1hZ2U7XG4gXHR1bnNpZ25lZCBsb25nIHRlbXBfc3RhcnQsIHRlbXBfZW5kO1xuK1x0cGh5c19hZGRyX3QgcG9pc29uO1xuIFxuIFx0dGVtcF9zdGFydCA9IG1heChzdGFydCwga2J1Zi1cdTAwM2VidWZfbWluKTtcbiBcbkBAIC01NDUsNiArNTU2LDEzIEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuK1x0XHRwb2lzb24gPSByYW5nZV9sYXN0X2h3cG9pc29uKHRlbXBfc3RhcnQsIGtidWYtXHUwMDNlbWVtc3opO1xuK1x0XHRpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHtcbitcdFx0XHQvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovXG4rXHRcdFx0dGVtcF9zdGFydCA9IHBvaXNvbiArIFBBR0VfU0laRTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuIFx0XHQvKiBXZSBmb3VuZCBhIHN1aXRhYmxlIG1lbW9yeSByYW5nZSAqL1xuIFx0XHRicmVhaztcbiBcdH0gd2hpbGUgKDEpO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCBhOGIwM2UyOTIwYmE4Li5hMmNhOGRmNTAxY2FlIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTk2LDYgKzk2LDQ2IEBAIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKVxuIFx0XHRtZW1ibGtfbnJfcG9pc29uX3N1YihwZm4sIGkpO1xuIH1cbiBcbisvKlxuKyAqIFJldHVybiB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgaGFyZHdhcmUtcG9pc29uZWQgb25saW5lIHBhZ2UgaW4gW3N0YXJ0LFxuKyAqIHN0YXJ0ICsgc2l6ZSksIG9yIFBIWVNfQUREUl9NQVggaWYgdGhlIHJhbmdlIGlzIGNsZWFuLlxuKyAqL1xuK3N0YXRpYyBwaHlzX2FkZHJfdCByYW5nZV9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxuK1x0XHRcdFx0ICBib29sIGZpcnN0KVxuK3tcbitcdHBoeXNfYWRkcl90IHBvaXNvbiA9IFBIWVNfQUREUl9NQVg7XG4rXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbjtcbitcbitcdGlmICghc2l6ZSB8fCAhYXRvbWljX2xvbmdfcmVhZChcdTAwMjZudW1fcG9pc29uZWRfcGFnZXMpKVxuK1x0XHRyZXR1cm4gcG9pc29uO1xuK1xuK1x0ZW5kX3BmbiA9IFBIWVNfUEZOKHN0YXJ0ICsgc2l6ZSAtIDEpO1xuK1x0Zm9yIChwZm4gPSBQSFlTX1BGTihzdGFydCk7IHBmbiBcdTAwM2M9IGVuZF9wZm47IHBmbisrKSB7XG4rXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4rXG4rXHRcdGlmIChwYWdlIFx1MDAyNlx1MDAyNiBpc19wYWdlX2h3cG9pc29uKHBhZ2UpKSB7XG4rXHRcdFx0aWYgKGZpcnN0KVxuK1x0XHRcdFx0cmV0dXJuIFBGTl9QSFlTKHBmbik7XG4rXG4rXHRcdFx0cG9pc29uID0gUEZOX1BIWVMocGZuKTtcbitcdFx0fVxuK1xuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbitcdH1cbitcbitcdHJldHVybiBwb2lzb247XG4rfVxuK1xuK3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0cmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCB0cnVlKTtcbit9XG4rXG4rcGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxuK3tcbitcdHJldHVybiByYW5nZV9od3BvaXNvbihzdGFydCwgc2l6ZSwgZmFsc2UpO1xuK31cbitcbiAvKipcbiAgKiBNRl9BVFRSX1JPIC0gQ3JlYXRlIHN5c2ZzIGVudHJ5IGZvciBlYWNoIG1lbW9yeSBmYWlsdXJlIHN0YXRpc3RpY3MuXG4gICogQF9uYW1lOiBuYW1lIG9mIHRoZSBmaWxlIGluIHRoZSBwZXIgTlVNQSBzeXNmcyBkaXJlY3RvcnkuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1NzowNy44OTU3ODg2MTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODcxMzIxNTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQ2FuZGlkYXRlIEV2YWx1YXRpb246IEtlcm5lbCBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZ2l2ZW4gYSBwYXRjaCBzZXJpZXMgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCB3YXJyYW50IGZ1enppbmcuIExldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCB0aGlzIHBhdGNoIG1vZGlmaWVzIGBpbmNsdWRlL2xpbnV4L21tLmhgLCBga2VybmVsL2tleGVjX2NvcmUuY2AsIGBrZXJuZWwva2V4ZWNfZmlsZS5jYCwgYW5kIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhhdCdzIGEgZGVjZW50IHNwcmVhZCwgaW5kaWNhdGluZyBjaGFuZ2VzIGluIGJvdGgga2V4ZWMgYW5kIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIOKAkyBjcml0aWNhbCBhcmVhcywgZGVmaW5pdGVseS5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgaG93IGtleGVjIGludGVyYWN0cyB3aXRoIGFuZCBoYW5kbGVzIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeS4gVGhlIHBhdGNoIGFkZHMgY2hlY2tzIGluIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YCwgcHJldmVudGluZyBrZXhlYyBzZWdtZW50cyBmcm9tIGJlaW5nIGxvYWRlZCBpbnRvIHBvaXNvbmVkIG1lbW9yeSwgYW5kIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiBrZXhlYyB1c2luZyBgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duYCBhbmQgYGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXBgIHRvIHNraXAgb3ZlciB0aGVzZSBwb2lzb25lZCByZWdpb25zLiBUaGUgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFkZGl0aW9ucyBsb29rIGxpa2UgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBvaXNvbmluZyByYW5nZSBtZWNoYW5pc21zLlxuXG5HaXZlbiB0aGF0IGl0IHRvdWNoZXMgdGhlIGtleGVjIHN1YnN5c3RlbSBhbmQgbWVtb3J5IGZhaWx1cmUsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IFdoYXQgZnVuY3Rpb25zIHNob3VsZCB3ZSB0YXJnZXQ/IEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgYEZvY3VzU3ltYm9sc2AuIExldCdzIHNlZTpcblxuKiAgIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YCBpcyBhIHN0cm9uZyBjYW5kaWRhdGUsIGFzIGl0IGlzIGEgY2VudHJhbCBjaGVjaywgcmVqZWN0aW5nIHBvaXNvbmVkIG1lbW9yeS5cblxuKiAgIGBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd25gIGFuZCBgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cGAgYXJlIGdvb2QsIGJ1dCBJIHJlbWVtYmVyLCBvciBzaG91bGQgcXVpY2tseSBjaGVjaywgdGhlIHByb21wdCBzYXlzIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy5cblxuKiAgIENoZWNraW5nIGBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd25gIGFuZCBgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cGAsIG9oIHllYWgsIHRoZXNlIGFyZSBgc3RhdGljYCBmdW5jdGlvbnMsIHNvIHRoZXkgYXJlIG5vdCBkaXJlY3RseSBleHBvc2VkIGFuZCB1c2VkLiBJIHdpbGwgbG9vayBmb3IgY2FsbHMgdG8gdGhlc2UgZnVuY3Rpb25zIHRvIGlkZW50aWZ5IGVudHJ5cG9pbnRzLlxuXG5TbywgSSB3aWxsIGxvb2sgZm9yIHRoZSBjYWxsIHNpdGVzIHRvIHRob3NlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc1NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU3OjE1Ljc2NzExMjcyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzAxNDAyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2tleGVjX2ZpbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwva2V4ZWNfZmlsZS5jPTM2ND1TWVNDQUxMX0RFRklORTUoa2V4ZWNfZmlsZV9sb2FkLCBpbnQsIGtlcm5lbF9mZCwgaW50LCBpbml0cmRfZmQsXFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTQ3MS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjQ3MjpzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTQ3My1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGtleGVjX2J1ZiAqa2J1ZilcXG4tLVxcbmtlcm5lbC9rZXhlY19maWxlLmM9NTc3PXN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB2b2lkICphcmcpXFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTU5OS1cXHRpZiAoa2J1Zi1cXHUwMDNldG9wX2Rvd24pXFxua2VybmVsL2tleGVjX2ZpbGUuYzo2MDA6XFx0XFx0cmV0dXJuIGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bihzdGFydCwgZW5kLCBrYnVmKTtcXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTYwMS1cXHRyZXR1cm4gbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cChzdGFydCwgZW5kLCBrYnVmKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTc6MTUuODIwMTMyNTE2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2NDAyMzQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqVHJhY2luZyB0aGUgU291cmNlIG9mIGBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2tgKipcblxuT2theSwgYGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFja2AgaGFzIGJlZW4gaW52b2tlZC4gTXkgZmlyc3QgdGhvdWdodCBpczogKldoZXJlKiBkaWQgdGhpcyBjYWxsIG9yaWdpbmF0ZT8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNhbGxpbmcgZnVuY3Rpb24gb3IgZnVuY3Rpb25zLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgY2FsbCBpcyBjcnVjaWFsLiBLbm93aW5nIHRoZSBjYWxsZXIgd2lsbCB0ZWxsIG1lIGEgZ3JlYXQgZGVhbCBhYm91dCB3aHkgaXQgd2FzIGNhbGxlZCBhbmQgd2hhdCdzIGdvaW5nIG9uLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIGRlYnVnZ2luZyB0b29scyBhbmQgc3RyYXRlZ2llcyB0byB0cmFjZSBiYWNrIHRoZSBleGVjdXRpb24gcGF0aC4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBzdGFydCB0aGUgaHVudCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDk0NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU3OjE4Ljc4NDE1ODQ0M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk3ODYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2tleGVjX2ZpbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwva2V4ZWNfZmlsZS5jPTUyNz1zdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9ib3R0b21fdXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTU3Ni1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjU3NzpzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV9jYWxsYmFjayhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdm9pZCAqYXJnKVxcbmtlcm5lbC9rZXhlY19maWxlLmMtNTc4LXtcXG4tLVxcbmtlcm5lbC9rZXhlY19maWxlLmM9NjA1PXN0YXRpYyBpbnQga2V4ZWNfd2Fsa19tZW1ibG9jayhzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLFxcbi0tXFxua2VybmVsL2tleGVjX2ZpbGUuYy02MjAtXFx0ICogSU9SRVNPVVJDRV9TWVNSQU1fRFJJVkVSX01BTkFHRUQgaGFuZGxpbmcgaW5cXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjYyMTpcXHQgKiBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2soKS5cXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTYyMi1cXHQgKi9cXG4tLVxcbmtlcm5lbC9rZXhlY19maWxlLmM9NzMzPWludCBrZXhlY19sb2NhdGVfbWVtX2hvbGUoc3RydWN0IGtleGVjX2J1ZiAqa2J1ZilcXG4tLVxcbmtlcm5lbC9rZXhlY19maWxlLmMtNzQ0LVxcdCAqL1xcbmtlcm5lbC9rZXhlY19maWxlLmM6NzQ1OlxcdHJldCA9IGtob19sb2NhdGVfbWVtX2hvbGUoa2J1ZiwgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrKTtcXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTc0Ni1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTc1Ni1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykpXFxua2VybmVsL2tleGVjX2ZpbGUuYzo3NTc6XFx0XFx0cmV0ID0ga2V4ZWNfd2Fsa19yZXNvdXJjZXMoa2J1ZiwgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrKTtcXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTc1OC1cXHRlbHNlXFxua2VybmVsL2tleGVjX2ZpbGUuYzo3NTk6XFx0XFx0cmV0ID0ga2V4ZWNfd2Fsa19tZW1ibG9jayhrYnVmLCBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2spO1xcbmtlcm5lbC9rZXhlY19maWxlLmMtNzYwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1NzoxOC44MzAxNDQxNzJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDA4MTgyMTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCdzIEJvb3QgUHJvY2VzcyoqXG5cbkFscmlnaHQsIHRoZSBkZWJ1Z2dpbmcgaGFzIGxlZCBtZSB0byBga2V4ZWNfbG9jYXRlX21lbV9ob2xlYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgYmVnaW5zLCB0aGUgZW50cnkgcG9pbnQgZm9yIG1lbW9yeSBob2xlIGRldGVjdGlvbiBpbiB0aGlzIGtleGVjIGltcGxlbWVudGF0aW9uLiBOb3csIGJlZm9yZSBJIGV2ZW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IGFsbG9jYXRpb24sIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZvdW5kYXRpb25hbCBkYXRhIHN0cnVjdHVyZXMgYXJlIGluIG9yZGVyLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgc2VnbWVudCBsaXN0IGlzIGNvaGVyZW50IGJlZm9yZSB0cnVzdGluZyB0aGUgcmVzdCBvZiB0aGUgbG9naWMuIEdhcmJhZ2UgaW4sIGdhcmJhZ2Ugb3V0LCBhcyB0aGV5IHNheSEgSXQncyBsaWtlbHkgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNoZWNraW5nIGZvciBvdmVybGFwcywgaW52YWxpZCBhZGRyZXNzZXMsIG9yIG90aGVyIHN0cnVjdHVyYWwgcHJvYmxlbXMgaW4gdGhlIG1lbW9yeSBtYXAgdXNlZCBieSBrZXhlYy4gQSBiYWQgc2VnbWVudCBsaXN0IHdpbGwgdGhyb3cgYSB3cmVuY2ggaW50byBldmVyeXRoaW5nLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGEgY3Jhc2ggbGF0ZXIuIFNvLCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBpbnRlZ3JpdHkgZmlyc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1ODYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1NzoyMi44MzgzMjkyOTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxMjQyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwva2V4ZWNfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9rZXhlY19jb3JlLmM9MTA2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqa2ltYWdlX2FsbG9jX3BhZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UsXFxuLS1cXG5rZXJuZWwva2V4ZWNfY29yZS5jLTEwOS1cXG5rZXJuZWwva2V4ZWNfY29yZS5jOjExMDppbnQgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChzdHJ1Y3Qga2ltYWdlICppbWFnZSlcXG5rZXJuZWwva2V4ZWNfY29yZS5jLTExMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU3OjIyLjg4MjQ2MDgwNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0Mjk4MDY2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipUcmFjaW5nIHRoZSBDYWxsIFN0YWNrIGZvciBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIGNvbnRleHQgb2YgYHNhbml0eV9jaGVja19zZWdtZW50X2xpc3RgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRldGVybWluZSBpdHMgdXBzdHJlYW0gZGVwZW5kZW5jaWVzLiBJJ20gdGhpbmtpbmcsIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKmNhbGxlZCo/IEtub3dpbmcgdGhhdCB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBpbnNpZ2h0IGludG8gaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCdzIHVzZWQgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSBuZWVkIHRvIHF1aWNrbHkgdHJhY2UgdGhlIGNhbGwgc3RhY2sgdG8gc2VlIHdoYXQgZnVuY3Rpb25zIGludm9rZSBpdC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBpbW1lZGlhdGUgY2FsbGVycywgYW5kIHRoZW4gcG90ZW50aWFsbHkgdGhlaXIgY2FsbGVycywgYW5kIHNvIG9uLCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIHJvbGUuIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gZGVidWdnaW5nIG9yIHVuZGVyc3RhbmRpbmcgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcyB0byB0aGlzIHNlZ21lbnQuIEknbGwgbmVlZCB0byB1c2Ugc29tZSB0b29scyBvciBnb29kIG9sZC1mYXNoaW9uZWQgY29kZSBkaXZpbmcgdG8gcXVpY2tseSBmaW5kIGFsbCBpbnN0YW5jZXMgb2YgYHNhbml0eV9jaGVja19zZWdtZW50X2xpc3RgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTQ5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTc6MjYuMzEyMjcwMjA3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTA5MTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2tleGVjLmM9MjI9c3RhdGljIGludCBraW1hZ2VfYWxsb2NfaW5pdChzdHJ1Y3Qga2ltYWdlICoqcmltYWdlLCB1bnNpZ25lZCBsb25nIGVudHJ5LFxcbi0tXFxua2VybmVsL2tleGVjLmMtNTYtXFxua2VybmVsL2tleGVjLmM6NTc6XFx0cmV0ID0gc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChpbWFnZSk7XFxua2VybmVsL2tleGVjLmMtNTgtXFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9rZXhlY19jb3JlLmM9MTA2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqa2ltYWdlX2FsbG9jX3BhZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UsXFxuLS1cXG5rZXJuZWwva2V4ZWNfY29yZS5jLTEwOS1cXG5rZXJuZWwva2V4ZWNfY29yZS5jOjExMDppbnQgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChzdHJ1Y3Qga2ltYWdlICppbWFnZSlcXG5rZXJuZWwva2V4ZWNfY29yZS5jLTExMS17XFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jPTMwNT1raW1hZ2VfZmlsZV9hbGxvY19pbml0KHN0cnVjdCBraW1hZ2UgKipyaW1hZ2UsIGludCBrZXJuZWxfZmQsXFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTMzMi1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjMzMzpcXHRyZXQgPSBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0KGltYWdlKTtcXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTMzNC1cXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL2tleGVjX2ludGVybmFsLmg9OT1zdHJ1Y3Qga2ltYWdlICpkb19raW1hZ2VfYWxsb2NfaW5pdCh2b2lkKTtcXG5rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaDoxMDppbnQgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdChzdHJ1Y3Qga2ltYWdlICppbWFnZSk7XFxua2VybmVsL2tleGVjX2ludGVybmFsLmgtMTEtdm9pZCBraW1hZ2VfZnJlZV9wYWdlX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU3OjI2LjM2NzM3MzIyNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYwNDY3NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIGBrZXhlY2AgYW5kIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYGtleGVjYCBsb2FkIHByb2Nlc3MuIEZyb20gd2hhdCBJIGNhbiBzZWUsIGBraW1hZ2VfYWxsb2NfaW5pdGAgYW5kIGBraW1hZ2VfZmlsZV9hbGxvY19pbml0YCBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMsIHNwZWNpZmljYWxseSBjYWxsZWQgZnJvbSBgc3lzX2tleGVjX2xvYWRgIGFuZCBgc3lzX2tleGVjX2ZpbGVfbG9hZGAuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhhdCBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZvY3VzZWQgYW5hbHlzaXMgd2l0aGluIHRoZSBjb2RlLiBUaGVuIEkgYWxzbyBzaG91bGQgbG9vayBpbnRvIGBrZXhlY19sb2NhdGVfbWVtX2hvbGVgLlxuXG5GdXJ0aGVybW9yZSwgSSBzaG91bGQgYmUgbG9va2luZyBhdCBgcmFuZ2VfZmlyc3RfaHdwb2lzb25gIGFuZCBgcmFuZ2VfbGFzdF9od3BvaXNvbmAuIFRoZXkncmUgZXhwb3J0ZWQgZnVuY3Rpb25zIHJlc2lkaW5nIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgd2hpY2ggbGlrZWx5IG1lYW5zIHRoZXkncmUgY29yZSB0byB0aGUgbWVtb3J5LWZhaWx1cmUgaGFuZGxpbmcuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dC4gVGhpcyBwYXRjaCB0b3VjaGVzIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhhdCBmaWxlJ3MgY29tcGlsYXRpb24gaXMgZ2F0ZWQgYnkgYENPTkZJR19NRU1PUllfRkFJTFVSRWAuIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBvcHRpb24ncyBzdGF0dXMuIEknbGwgbmVlZCB0byBjaGVjayBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhhdCBmbGFnLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTUxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU3OjMwLjYyNzg0MzcxMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0MzI5NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtb3J5LWZhaWx1cmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTExPW9iai0kKENPTkZJR19ETUFQT09MX1RFU1QpICs9IGRtYXBvb2xfdGVzdC5vXFxubW0vTWFrZWZpbGU6MTEyOm9iai0kKENPTkZJR19NRU1PUllfRkFJTFVSRSkgKz0gbWVtb3J5LWZhaWx1cmUub1xcbm1tL01ha2VmaWxlLTExMy1vYmotJChDT05GSUdfSFdQT0lTT05fSU5KRUNUKSArPSBod3BvaXNvbi1pbmplY3Qub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1NzozMC42NzEyODI5OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQwNDEwNTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgS2VybmVsIEJ1aWxkIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUgaGVyZS4gVGhhdCdzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLiBBbHNvLCBJJ20gbm90aW5nIHRoYXQgYm90aCBga2V4ZWNfY29yZS5jYCBhbmQgYGtleGVjX2ZpbGUuY2AgYXJlIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX0tFWEVDX0NPUkVgIGFuZCBgQ09ORklHX0tFWEVDX0ZJTEVgIGFyZSBhY3R1YWxseSAqZW5hYmxlZCogaW4gdGhlIGtlcm5lbCBjb25maWcuIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gZW5zdXJlIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgYXJlIGFsbCBpbiBsaW5lLiBHaXZlbiB0aGlzLCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCB0aGUga2VybmVsJ3MgYE1ha2VmaWxlYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHJ1bGVzLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1NzozNC4xMTE2OTY4MTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzE1NDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtleGVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvTWFrZWZpbGU9ODA9b2JqLSQoQ09ORklHX0NSQVNIX1JFU0VSVkUpICs9IGNyYXNoX3Jlc2VydmUub1xcbmtlcm5lbC9NYWtlZmlsZTo4MTpvYmotJChDT05GSUdfS0VYRUNfQ09SRSkgKz0ga2V4ZWNfY29yZS5vXFxua2VybmVsL01ha2VmaWxlLTgyLW9iai0kKENPTkZJR19DUkFTSF9EVU1QKSArPSBjcmFzaF9jb3JlLm9cXG4tLVxcbmtlcm5lbC9NYWtlZmlsZT04ND1vYmotJChDT05GSUdfQ1JBU0hfRFVNUF9LVU5JVF9URVNUKSArPSBjcmFzaF9jb3JlX3Rlc3Qub1xcbmtlcm5lbC9NYWtlZmlsZTo4NTpvYmotJChDT05GSUdfS0VYRUMpICs9IGtleGVjLm9cXG5rZXJuZWwvTWFrZWZpbGU6ODY6b2JqLSQoQ09ORklHX0tFWEVDX0ZJTEUpICs9IGtleGVjX2ZpbGUub1xcbmtlcm5lbC9NYWtlZmlsZTo4NzpvYmotJChDT05GSUdfS0VYRUNfRUxGKSArPSBrZXhlY19lbGYub1xcbmtlcm5lbC9NYWtlZmlsZS04OC1vYmotJChDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCkgKz0gYmFja3RyYWNldGVzdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU3OjM0LjE1NjQyMzQxMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTA2MDExMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMga2V4ZWMgZnVuY3Rpb25hbGl0eSwgdGhlIGZ1bmRhbWVudGFscyDigJMgYENPTkZJR19LRVhFQ19DT1JFYCBhbmQgYENPTkZJR19LRVhFQ19GSUxFYCDigJMgdGhvc2UgYXJlIGEgZ2l2ZW4uIE5vIHN1cnByaXNlcyB0aGVyZS4gQnV0IGJlZm9yZSBJIGdvIHRvbyBmYXIgZG93biB0aGlzIHJvYWQsIEknbSB0aGlua2luZywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLiBJdCdzIHByZXR0eSBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIG92ZXJhbGwga2V4ZWMgYXJjaGl0ZWN0dXJlLCBlc3BlY2lhbGx5IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBtZW1vcnkgc2l0dWF0aW9ucy4gR290dGEgYmUgcHJvYWN0aXZlIGFib3V0IHRoYXQgcG90ZW50aWFsIGltcGFjdCwgcmlnaHQ/IE5lZWQgdG8gZ2V0IGEgZ3Jhc3Agb2YgdGhhdCBpbXBhY3QgdG8gcHJldmVudCBzb21lIGhlYWRhY2hlIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NDAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1NzozNy4wNjI0MzY5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQzNDI1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0ZBSUxVUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc2Mj1jb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbi0tXFxubW0vS2NvbmZpZy03NjQtXFxubW0vS2NvbmZpZzo3NjU6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXFxubW0vS2NvbmZpZy03NjYtXFx0ZGVwZW5kcyBvbiBNTVVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTc6MzcuMTA1ODc4NzM5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTgzNjQ2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqRGVwZW5kZW5jaWVzLCBEZXBlbmRlbmNpZXMsIERlcGVuZGVuY2llcyEqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IGBDT05GSUdfS0VYRUNgIGFuZCBgQ09ORklHX0tFWEVDX0ZJTEVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgYXJlIHJlbGF0ZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB3aGF0IHRoZXkgZGVwZW5kIG9uLiBJIGtub3cgdGhlIGdlbmVyYWwgYXJlYSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBhbnkgc3VidGxlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaW50ZXJhY3Rpb25zLiBMZXQncyBzZWUuLi4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gdG8gZW5zdXJlIHByb3BlciBzZXR0aW5ncyBmb3IgdGhlIGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MzMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1NzozOS45NjQyNDk2NTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzUyMjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLRVhFQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvS2NvbmZpZy5rZXhlY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvS2NvbmZpZy5rZXhlYz04PWNvbmZpZyBWTUNPUkVfSU5GT1xcbi0tXFxua2VybmVsL0tjb25maWcua2V4ZWMtMTAtXFxua2VybmVsL0tjb25maWcua2V4ZWM6MTE6Y29uZmlnIEtFWEVDX0NPUkVcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0xMi1cXHRib29sXFxua2VybmVsL0tjb25maWcua2V4ZWMtMTMtXFxua2VybmVsL0tjb25maWcua2V4ZWM6MTQ6Y29uZmlnIEtFWEVDX0VMRlxcbmtlcm5lbC9LY29uZmlnLmtleGVjLTE1LVxcdGJvb2xcXG4tLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjPTE3PWNvbmZpZyBIQVZFX0lNQV9LRVhFQ1xcbi0tXFxua2VybmVsL0tjb25maWcua2V4ZWMtMTktXFxua2VybmVsL0tjb25maWcua2V4ZWM6MjA6Y29uZmlnIEtFWEVDXFxua2VybmVsL0tjb25maWcua2V4ZWMtMjEtXFx0Ym9vbCBcXFwiRW5hYmxlIGtleGVjIHN5c3RlbSBjYWxsXFxcIlxcbi0tXFxua2VybmVsL0tjb25maWcua2V4ZWMtMzctXFxua2VybmVsL0tjb25maWcua2V4ZWM6Mzg6Y29uZmlnIEtFWEVDX0ZJTEVcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy0zOS1cXHRib29sIFxcXCJFbmFibGUga2V4ZWMgZmlsZSBiYXNlZCBzeXN0ZW0gY2FsbFxcXCJcXG4tLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjLTQ4LVxcbmtlcm5lbC9LY29uZmlnLmtleGVjOjQ5OmNvbmZpZyBLRVhFQ19TSUdcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy01MC1cXHRib29sIFxcXCJWZXJpZnkga2VybmVsIHNpZ25hdHVyZSBkdXJpbmcga2V4ZWNfZmlsZV9sb2FkKCkgc3lzY2FsbFxcXCJcXG4tLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjLTYyLVxcbmtlcm5lbC9LY29uZmlnLmtleGVjOjYzOmNvbmZpZyBLRVhFQ19TSUdfRk9SQ0VcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy02NC1cXHRib29sIFxcXCJSZXF1aXJlIGEgdmFsaWQgc2lnbmF0dXJlIGluIGtleGVjX2ZpbGVfbG9hZCgpIHN5c2NhbGxcXFwiXFxuLS1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy03MC1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzo3MTpjb25maWcgS0VYRUNfSU1BR0VfVkVSSUZZX1NJR1xcbmtlcm5lbC9LY29uZmlnLmtleGVjLTcyLVxcdGJvb2wgXFxcIkVuYWJsZSBJbWFnZSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIHN1cHBvcnQgKEFSTSlcXFwiXFxuLS1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy03OS1cXG5rZXJuZWwvS2NvbmZpZy5rZXhlYzo4MDpjb25maWcgS0VYRUNfQlpJTUFHRV9WRVJJRllfU0lHXFxua2VybmVsL0tjb25maWcua2V4ZWMtODEtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ6SW1hZ2Ugc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBzdXBwb3J0XFxcIlxcbi0tXFxua2VybmVsL0tjb25maWcua2V4ZWMtODgtXFxua2VybmVsL0tjb25maWcua2V4ZWM6ODk6Y29uZmlnIEtFWEVDX0pVTVBcXG5rZXJuZWwvS2NvbmZpZy5rZXhlYy05MC1cXHRib29sIFxcXCJrZXhlYyBqdW1wXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1Nzo0MC4wMTE2MDk4MjhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk2NTE2MTA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYnJva2VuIHRoaXMgcGF0Y2ggZG93bi4gV2UncmUgZGVhbGluZyB3aXRoIGEgY2hhbmdlIHdpdGhpbiB0aGUgYGtleGVjYCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBhaW1pbmcgdG8gcHJldmVudCBtZW1vcnkgYWxsb2NhdGlvbiBvbiBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcy4gVGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGNyYXNoZXMgYW5kIHJlc3RhcnRzLlxuXG5GaXJzdCwgdGhlIGNvcmUgZWxlbWVudHMuIEkndmUgaWRlbnRpZmllZCB0aGUgY29uZmlndXJhdGlvbnMgd2UnbGwgbmVlZCB0byBlbmFibGU6IGBNRU1PUllfRkFJTFVSRWAsIGBLRVhFQ2AsIGFuZCBgS0VYRUNfRklMRWAuIGBNRU1PUllfRkFJTFVSRWAgaXMgY29udGluZ2VudCBvbiBgTU1VYCBhbmQgYEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVgLCB3aGljaCBpcyBleHBlY3RlZC4gVGhlIG90aGVyIHR3byBhcmUgZmFpcmx5IHN0YW5kYXJkIGZvciBrZXhlYyBvbiBzdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlcy5cblxuTm93IGZvciB0aGUgZm9jdXMgc3ltYm9scywgdGhlc2UgYXJlIGtleSBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzLiBJJ3ZlIHZlcmlmaWVkIG15IGNob2ljZXM6IGBrZXhlY19sb2NhdGVfbWVtX2hvbGVgLCBpdCBzZWVtcywgaXMgdGhlIGNvcnJlY3QgZnVuY3Rpb24gYXMgYGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bmAgYW5kIGBsb2NhdGVfbWVtX2hvbGVfYm90dG9tX3VwYCBhcmUgY2FsbGVkIGFuZCBhcmUgdXNlZCBieSBga2V4ZWNfbG9jYXRlX21lbV9ob2xlYC4gR29vZC4gVGhlbiwgYHJhbmdlX2ZpcnN0X2h3cG9pc29uYCBhbmQgYHJhbmdlX2xhc3RfaHdwb2lzb25gIGFyZSBnb29kIGZvY3VzIHN5bWJvbHMgYXMgdGhleSBhcmUgbm90IHN0YXRpYywgYW5kIGhhdmUgYmVlbiBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9tbS5oYCBhbmQgZGVmaW5lZCBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFNhbWUgY2FzZSBmb3IgYHNhbml0eV9jaGVja19zZWdtZW50X2xpc3RgLCB3aGljaCBpcyBkZWZpbmVkIGluIGBrZXJuZWwva2V4ZWNfY29yZS5jYCBhbmQgZGVjbGFyZWQgaW4gYGtlcm5lbC9rZXhlY19pbnRlcm5hbC5oYC5cblxuRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggbW9kaWZpZXMgZnVuZGFtZW50YWwga2VybmVsIGxvZ2ljLiBUaGUgYGtleGVjX2xvYWRgIGFuZCBga2V4ZWNfZmlsZV9sb2FkYCBzeXNjYWxscyBhcmUgcmVsZXZhbnQuXG5cblNvIG15IGFzc2Vzc21lbnQ6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlXG4qICAgKipSZWFzb25pbmc6KiogVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gcG9pc29uZWQgcGFnZXMgd2l0aGluIHRoZSBga2V4ZWNgIHN1YnN5c3RlbS4gSXQgdG91Y2hlcyBjb3JlIGtlcm5lbCBsb2dpYyBhY2Nlc3NpYmxlIHZpYSBzeXNjYWxscy5cbiogICAqKkZvY3VzU3ltYm9sczoqKiBgc2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdGAsIGBrZXhlY19sb2NhdGVfbWVtX2hvbGVgLCBgcmFuZ2VfZmlyc3RfaHdwb2lzb25gLCBgcmFuZ2VfbGFzdF9od3BvaXNvbmBcbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE1FTU9SWV9GQUlMVVJFYCwgYEtFWEVDYCwgYEtFWEVDX0ZJTEVgXG5cbkknbSByZWFkeSB0byB1c2UgdGhlIHNldC1yZXN1bHRzIHRvb2wgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTM1LCJPdXRwdXRUb2tlbnMiOjEzMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1Nzo0Ny45NzY3NzM0MjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTkzNzk0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIktFWEVDXCIsXG4gICAgXCJLRVhFQ19GSUxFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2FuaXR5X2NoZWNrX3NlZ21lbnRfbGlzdFwiLFxuICAgIFwia2V4ZWNfbG9jYXRlX21lbV9ob2xlXCIsXG4gICAgXCJyYW5nZV9maXJzdF9od3BvaXNvblwiLFxuICAgIFwicmFuZ2VfbGFzdF9od3BvaXNvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBrZXhlYyBzdWJzeXN0ZW0gdG8gYXZvaWQgYWxsb2NhdGluZyBtZW1vcnkgb24gaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB0aGUga2V4ZWNfbG9hZCBhbmQga2V4ZWNfZmlsZV9sb2FkIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJLRVhFQ1wiLFxuICAgIFwiS0VYRUNfRklMRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNhbml0eV9jaGVja19zZWdtZW50X2xpc3RcIixcbiAgICBcImtleGVjX2xvY2F0ZV9tZW1faG9sZVwiLFxuICAgIFwicmFuZ2VfZmlyc3RfaHdwb2lzb25cIixcbiAgICBcInJhbmdlX2xhc3RfaHdwb2lzb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUga2V4ZWMgc3Vic3lzdGVtIHRvIGF2b2lkIGFsbG9jYXRpbmcgbWVtb3J5IG9uIGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdGhlIGtleGVjX2xvYWQgYW5kIGtleGVjX2ZpbGVfbG9hZCBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTE6NTc6NDguMDYyNzIwMTM1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY0MjYxMjQ2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDExOjU3OjQ4LjA2MzMwMjE4NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjY0MjAyNTI2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBjaGVja3MgdG8gYXZvaWQgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGR1cmluZyBrZXhlYyBzZWdtZW50IGFsbG9jYXRpb24gYW5kIHZhbGlkYXRpb24uIEl0IG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIHRvIHNraXAgcG9pc29uZWQgcGFnZXMgYW5kIHJlamVjdHMga2V4ZWMgc2VnbWVudHMgdGhhdCBsYW5kIG9uIHBvaXNvbmVkIG1lbW9yeS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhODYzZjZhYzViNWI2MTcwODAyMGIzYmMzNDMzNDJhZDdhZTUwNmNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTE6NTc6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDEzOTAyMzY4NDcxZTEuLmZmODNhZTdhN2VmZTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTUyNTIsNiArNTI1Miw4IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXA7XG4gZXh0ZXJuIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyk7XG4gdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSk7XG4rcGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4rcGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuIHtcbkBAIC01MjY0LDYgKzUyNjYsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pXG4gc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSlcbiB7XG4gfVxuK1xuK3N0YXRpYyBpbmxpbmUgcGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsXG4rXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0cmV0dXJuIFBIWVNfQUREUl9NQVg7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgcGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCxcbitcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBzaXplKVxuK3tcbitcdHJldHVybiBQSFlTX0FERFJfTUFYO1xuK31cbiAjZW5kaWZcbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRylcbmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWNfY29yZS5jIGIva2VybmVsL2tleGVjX2NvcmUuY1xuaW5kZXggZGM3NzBiOWE2ZDA1My4uN2VlOGM5ZjA3OGY2YiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9rZXhlY19jb3JlLmNcbisrKyBiL2tlcm5lbC9rZXhlY19jb3JlLmNcbkBAIC0yMTIsNiArMjEyLDE2IEBAIGludCBzYW5pdHlfY2hlY2tfc2VnbWVudF9saXN0KHN0cnVjdCBraW1hZ2UgKmltYWdlKVxuIFx0fVxuICNlbmRpZlxuIFxuK1x0LypcbitcdCAqIFJlamVjdCBkZXN0aW5hdGlvbnMgdGhhdCBsYW5kIG9uIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeTogdGhlXG4rXHQgKiByZWxvY2F0aW9uIGNvcHkgd291bGQgbWFjaGluZS1jaGVjayBvbiB0aGUgYmFkIGZyYW1lLlxuK1x0ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9zZWdtZW50czsgaSsrKSB7XG4rXHRcdGlmIChyYW5nZV9maXJzdF9od3BvaXNvbihpbWFnZS1cdTAwM2VzZWdtZW50W2ldLm1lbSxcbitcdFx0XHRcdFx0IGltYWdlLVx1MDAzZXNlZ21lbnRbaV0ubWVtc3opICE9IFBIWVNfQUREUl9NQVgpXG4rXHRcdFx0cmV0dXJuIC1FSFdQT0lTT047XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBhcmUgc2VhcmNoZWQgZnJvbSBzeXN0ZW0gUkFNIHJhdGhlciB0aGFuXG4gXHQgKiBiZWluZyBhbGxvY2F0ZWQgZnJvbSB0aGUgYnVkZHkgYWxsb2NhdG9yLCBzbyB0aGV5IGFyZSBub3QgZ3VhcmFudGVlZFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlY19maWxlLmMgYi9rZXJuZWwva2V4ZWNfZmlsZS5jXG5pbmRleCAyYmZiYjJkMTQ0ZTY5Li41MjdmZDgwNWEzYTZiIDEwMDY0NFxuLS0tIGEva2VybmVsL2tleGVjX2ZpbGUuY1xuKysrIGIva2VybmVsL2tleGVjX2ZpbGUuY1xuQEAgLTQ3NCw2ICs0NzQsNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiB7XG4gXHRzdHJ1Y3Qga2ltYWdlICppbWFnZSA9IGtidWYtXHUwMDNlaW1hZ2U7XG4gXHR1bnNpZ25lZCBsb25nIHRlbXBfc3RhcnQsIHRlbXBfZW5kO1xuK1x0cGh5c19hZGRyX3QgcG9pc29uO1xuIFxuIFx0dGVtcF9lbmQgPSBtaW4oZW5kLCBrYnVmLVx1MDAzZWJ1Zl9tYXgpO1xuIFx0dGVtcF9zdGFydCA9IHRlbXBfZW5kIC0ga2J1Zi1cdTAwM2VtZW1zeiArIDE7XG5AQCAtNDgzLDcgKzQ4NCw5IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX3RvcF9kb3duKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHQvKiBhbGlnbiBkb3duIHN0YXJ0ICovXG4gXHRcdHRlbXBfc3RhcnQgPSBBTElHTl9ET1dOKHRlbXBfc3RhcnQsIGtidWYtXHUwMDNlYnVmX2FsaWduKTtcbiBcbi1cdFx0aWYgKHRlbXBfc3RhcnQgXHUwMDNjIHN0YXJ0IHx8IHRlbXBfc3RhcnQgXHUwMDNjIGtidWYtXHUwMDNlYnVmX21pbilcbitcdFx0LyogQSBjYW5kaWRhdGUgYWJvdmUgdGhlIHJhbmdlIG1lYW5zIHRoZSB3YWxrIHdyYXBwZWQgYXJvdW5kICovXG4rXHRcdGlmICh0ZW1wX3N0YXJ0IFx1MDAzYyBzdGFydCB8fCB0ZW1wX3N0YXJ0IFx1MDAzYyBrYnVmLVx1MDAzZWJ1Zl9taW4gfHxcbitcdFx0ICAgIHRlbXBfc3RhcnQgXHUwMDNlIGVuZClcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0dGVtcF9lbmQgPSB0ZW1wX3N0YXJ0ICsga2J1Zi1cdTAwM2VtZW1zeiAtIDE7XG5AQCAtNTAzLDYgKzUwNiwxMyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuK1x0XHRwb2lzb24gPSByYW5nZV9maXJzdF9od3BvaXNvbih0ZW1wX3N0YXJ0LCBrYnVmLVx1MDAzZW1lbXN6KTtcbitcdFx0aWYgKHBvaXNvbiAhPSBQSFlTX0FERFJfTUFYKSB7XG4rXHRcdFx0Lyogd2UgaGl0IGEgcG9pc29uZWQgcGFnZSAqL1xuK1x0XHRcdHRlbXBfc3RhcnQgPSBwb2lzb24gLSBrYnVmLVx1MDAzZW1lbXN6O1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdC8qIFdlIGZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHJhbmdlICovXG4gXHRcdGJyZWFrO1xuIFx0fSB3aGlsZSAoMSk7XG5AQCAtNTE5LDYgKzUyOSw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiB7XG4gXHRzdHJ1Y3Qga2ltYWdlICppbWFnZSA9IGtidWYtXHUwMDNlaW1hZ2U7XG4gXHR1bnNpZ25lZCBsb25nIHRlbXBfc3RhcnQsIHRlbXBfZW5kO1xuK1x0cGh5c19hZGRyX3QgcG9pc29uO1xuIFxuIFx0dGVtcF9zdGFydCA9IG1heChzdGFydCwga2J1Zi1cdTAwM2VidWZfbWluKTtcbiBcbkBAIC01NDUsNiArNTU2LDEzIEBAIHN0YXRpYyBpbnQgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuK1x0XHRwb2lzb24gPSByYW5nZV9sYXN0X2h3cG9pc29uKHRlbXBfc3RhcnQsIGtidWYtXHUwMDNlbWVtc3opO1xuK1x0XHRpZiAocG9pc29uICE9IFBIWVNfQUREUl9NQVgpIHtcbitcdFx0XHQvKiB3ZSBoaXQgYSBwb2lzb25lZCBwYWdlICovXG4rXHRcdFx0dGVtcF9zdGFydCA9IHBvaXNvbiArIFBBR0VfU0laRTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuIFx0XHQvKiBXZSBmb3VuZCBhIHN1aXRhYmxlIG1lbW9yeSByYW5nZSAqL1xuIFx0XHRicmVhaztcbiBcdH0gd2hpbGUgKDEpO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCBhOGIwM2UyOTIwYmE4Li5hMmNhOGRmNTAxY2FlIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTk2LDYgKzk2LDQ2IEBAIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKVxuIFx0XHRtZW1ibGtfbnJfcG9pc29uX3N1YihwZm4sIGkpO1xuIH1cbiBcbisvKlxuKyAqIFJldHVybiB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgaGFyZHdhcmUtcG9pc29uZWQgb25saW5lIHBhZ2UgaW4gW3N0YXJ0LFxuKyAqIHN0YXJ0ICsgc2l6ZSksIG9yIFBIWVNfQUREUl9NQVggaWYgdGhlIHJhbmdlIGlzIGNsZWFuLlxuKyAqL1xuK3N0YXRpYyBwaHlzX2FkZHJfdCByYW5nZV9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxuK1x0XHRcdFx0ICBib29sIGZpcnN0KVxuK3tcbitcdHBoeXNfYWRkcl90IHBvaXNvbiA9IFBIWVNfQUREUl9NQVg7XG4rXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbjtcbitcbitcdGlmICghc2l6ZSB8fCAhYXRvbWljX2xvbmdfcmVhZChcdTAwMjZudW1fcG9pc29uZWRfcGFnZXMpKVxuK1x0XHRyZXR1cm4gcG9pc29uO1xuK1xuK1x0ZW5kX3BmbiA9IFBIWVNfUEZOKHN0YXJ0ICsgc2l6ZSAtIDEpO1xuK1x0Zm9yIChwZm4gPSBQSFlTX1BGTihzdGFydCk7IHBmbiBcdTAwM2M9IGVuZF9wZm47IHBmbisrKSB7XG4rXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4rXG4rXHRcdGlmIChwYWdlIFx1MDAyNlx1MDAyNiBpc19wYWdlX2h3cG9pc29uKHBhZ2UpKSB7XG4rXHRcdFx0aWYgKGZpcnN0KVxuK1x0XHRcdFx0cmV0dXJuIFBGTl9QSFlTKHBmbik7XG4rXG4rXHRcdFx0cG9pc29uID0gUEZOX1BIWVMocGZuKTtcbitcdFx0fVxuK1xuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbitcdH1cbitcbitcdHJldHVybiBwb2lzb247XG4rfVxuK1xuK3BoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0cmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCB0cnVlKTtcbit9XG4rXG4rcGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxuK3tcbitcdHJldHVybiByYW5nZV9od3BvaXNvbihzdGFydCwgc2l6ZSwgZmFsc2UpO1xuK31cbitcbiAvKipcbiAgKiBNRl9BVFRSX1JPIC0gQ3JlYXRlIHN5c2ZzIGVudHJ5IGZvciBlYWNoIG1lbW9yeSBmYWlsdXJlIHN0YXRpc3RpY3MuXG4gICogQF9uYW1lOiBuYW1lIG9mIHRoZSBmaWxlIGluIHRoZSBwZXIgTlVNQSBzeXNmcyBkaXJlY3RvcnkuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1Nzo0OC4wNjMzMDM0OTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI2NDE5OTczMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gTmV3IFJpc2tzIEhlcmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGZvY3VzZWQgb24gKnByZXZlbnRpbmcqIHRoZSB1c2Ugb2YgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHdpdGhpbiB0aGUga2V4ZWMgcHJvY2Vzcywgbm90IGludHJvZHVjaW5nIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIFdlJ3JlIG1vZGlmeWluZyBob3cga2V4ZWMgaGFuZGxlcyBtZW1vcnksIHNwZWNpZmljYWxseSB0byAqYXZvaWQqIGJhZCBtZW1vcnksIHdoaWNoIGlzIGEgZ29vZCB0aGluZy5cblxuVGhlIHBhdGNoIHRvdWNoZXMgYG1tLmhgLCBga2V4ZWNfY29yZS5jYCwgYGtleGVjX2ZpbGUuY2AsIGFuZCBgbWVtb3J5LWZhaWx1cmUuY2AuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgbW9kaWZpY2F0aW9ucyBkb24ndCBpbnRyb2R1Y2UgYW55IG5ldyBLTVNBTi1yZWxldmFudCBpc3N1ZXMsIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5GaXJzdCwgYHNhbml0eV9jaGVja19zZWdtZW50X2xpc3RgIG5vdyB2YWxpZGF0ZXMga2V4ZWMgc2VnbWVudHMgYWdhaW5zdCBwb2lzb25lZCBtZW1vcnkuIEl0IHVzZXMgYHJhbmdlX2ZpcnN0X2h3cG9pc29uYCBhbmQgcmV0dXJucyBhbiBlcnJvciBpZiBhbnkgcG9pc29uZWQgbWVtb3J5IGlzIGZvdW5kLiBUaGlzIGlzIGEgKnZhbGlkYXRpb24qIHN0ZXAuIEkgZG9uJ3Qgc2VlIGFueSByaXNrIGhlcmU7IHdlJ3JlIHJlamVjdGluZyBwcm9ibGVtYXRpYyBzZWdtZW50cywgbm90IHVzaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuTmV4dCwgYGxvY2F0ZV9tZW1faG9sZV90b3BfZG93bmAgYW5kIGBsb2NhdGVfbWVtX2hvbGVfYm90dG9tX3VwYCBub3cgaW5jbHVkZSBjaGVja3MgZm9yIHBvaXNvbmVkIG1lbW9yeSB1c2luZyBgcmFuZ2VfZmlyc3RfaHdwb2lzb25gIG9yIGByYW5nZV9sYXN0X2h3cG9pc29uYC4gVGhleSdyZSAqYWxsb2NhdGluZyogbWVtb3J5IGZvciBrZXhlYyBzZWdtZW50cywgYnV0IG5vdyB0aGV5IGFyZSBhY3RpdmVseSBhdm9pZGluZyBwb2lzb25lZCBtZW1vcnkgcmVnaW9ucy4gVGhlIGZ1bmN0aW9ucyBhZGp1c3QgdGhlaXIgc2VhcmNoIGJhc2VkIG9uIHRoZSBwb2lzb25lZCBzdGF0dXMgb2YgdGhlIGNhbmRpZGF0ZSByZWdpb24uIENydWNpYWxseSwgdGhleSBkbyBub3QgcmVhZCBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGV5IGFyZSBtZXJlbHkgdXNpbmcgYSBmdW5jdGlvbiB0byBhdm9pZCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyByZWdpb25zLlxuXG5GaW5hbGx5LCBgcmFuZ2VfaHdwb2lzb25gIGp1c3QgaXRlcmF0ZXMgdGhyb3VnaCBhIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgYW5kIGNhbGxzIGBpc19wYWdlX2h3cG9pc29uYC4gQWdhaW4sIGl0J3MgYWJvdXQgZGV0ZWN0aW5nIGFuZCByZXBvcnRpbmcgcG9pc29uZWQgcGFnZXMsIG5vdCAqY3JlYXRpbmcqIHRoZW0gb3IgZXhwb3NpbmcgdGhlbS5cblxuU28sIGxldCdzIHN1bW1hcml6ZSB0aGUga2V5IHBvaW50czpcblxuKiAgIFRoZSBwYXRjaCAqZG9lc24ndCogaW50cm9kdWNlIG5ldyBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IGdldCBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxuKiAgIE5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM7IHRoZSBjb2RlIHNlZW1zIGNsZWFuIHdpdGggcHJvcGVyIGluaXRpYWxpemF0aW9uLlxuKiAgIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgYW5kIGxlZnQgdW5pbml0aWFsaXplZC5cbiogICBUaGUgYm91bmRzIGNoZWNrcyBoYXZlIGJlZW4gdXBkYXRlZCB0byAqYXZvaWQqIHVzaW5nIHBvaXNvbmVkIG1lbW9yeS4gVGhpcyBpcyBleGFjdGx5IHdoYXQgd2Ugd2FudC4gSXQgZG9lc24ndCBhbGxvdyBhY2Nlc3NlcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mICpleGlzdGluZyogYnVmZmVycy5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgcGF0Y2gncyBwcmltYXJ5IGZ1bmN0aW9uIGlzIHRvICphdm9pZCogdGhlIHV0aWxpemF0aW9uIG9mIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBkdXJpbmcga2V4ZWMsIGl0IGRvZXMgbm90IGludm9sdmUgZGF0YSB0cmFuc2ZlciB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGNyZWF0ZSBhbnkgcG90ZW50aWFsIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY29kZSBpdHNlbGYsIHRoYXQgSSd2ZSByZXZpZXdlZCwgYXBwZWFycyB0byBiZSBwcm9wZXJseSBpbml0aWFsaXplZCBhcyB3ZWxsLiBJIGRvbid0IHNlZSBhIHJpc2sgdGhhdCBqdXN0aWZpZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBzaG91bGQgYmUgc3VmZmljaWVudC5cblxuT2theSwgbGV0IG1lIGRvIG9uZSBsYXN0IHNwb3QgY2hlY2suIEluIGBsb2NhdGVfbWVtX2hvbGVfdG9wX2Rvd25gIGFuZCBgbG9jYXRlX21lbV9ob2xlX2JvdHRvbV91cGAsIHRoZSB2YXJpYWJsZSBgcG9pc29uYCBpcyBhbHdheXMgYXNzaWduZWQgYmVmb3JlIGl0J3MgdXNlZC4gU2FtZSB3aXRoIGByYW5nZV9od3BvaXNvbmA7IGFsbCB2YXJpYWJsZXMgaW4gdGhhdCBmdW5jdGlvbiBhcmUgYWxzbyBpbml0aWFsaXplZC4gQWxsIGNsZWFyIHRoZXJlLlxuXG4qKkZpbmFsIGNvbmNsdXNpb246IE5lZWRzS01TQU4gPSBmYWxzZS4qKiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBXZSdyZSBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzU0LCJPdXRwdXRUb2tlbnMiOjEyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMTo1ODowMC43MDUzMDUzNjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgY2hlY2tzIHRvIGF2b2lkIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBkdXJpbmcga2V4ZWMgc2VnbWVudCBhbGxvY2F0aW9uIGFuZCB2YWxpZGF0aW9uLiBJdCBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyB0byBza2lwIHBvaXNvbmVkIHBhZ2VzIGFuZCByZWplY3RzIGtleGVjIHNlZ21lbnRzIHRoYXQgbGFuZCBvbiBwb2lzb25lZCBtZW1vcnkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBsZWF2ZSBhbnkgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgdW5pbml0aWFsaXplZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBjaGVja3MgdG8gYXZvaWQgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGR1cmluZyBrZXhlYyBzZWdtZW50IGFsbG9jYXRpb24gYW5kIHZhbGlkYXRpb24uIEl0IG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIHRvIHNraXAgcG9pc29uZWQgcGFnZXMgYW5kIHJlamVjdHMga2V4ZWMgc2VnbWVudHMgdGhhdCBsYW5kIG9uIHBvaXNvbmVkIG1lbW9yeS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGxlYXZlIGFueSB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyB1bmluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7cqv[1] Phase: Succeeded StartedAt: 2026-08-12 11:58:12 +0000 UTC FinishedAt: 2026-08-12 11:58:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cqv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 11:58:12 +0000 UTC FinishedAt: 2026-08-12 11:58:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cqv[2] Phase: Succeeded StartedAt: 2026-08-12 11:58:12 +0000 UTC FinishedAt: 2026-08-12 15:43:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 11:58:12 +0000 UTC FinishedAt: 2026-08-12 15:43:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 11:58:12 +0000 UTC FinishedAt: 2026-08-12 11:58:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 11:58:12 +0000 UTC FinishedAt: 2026-08-12 11:58:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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-workflowz7cqv/series-workflowz7cqv-convert-artifact-4024092112/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 11:58:22 +0000 UTC FinishedAt: 2026-08-12 12:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 11:58:22 +0000 UTC FinishedAt: 2026-08-12 12:20:16 +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:*32fdaefa-47aa-4b77-8b81-436576e3c427,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-workflowz7cqv/series-workflowz7cqv-convert-artifact-4024092112/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": "c0f76d1f-eca8-47ae-a116-cb89035c22d2", "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-workflowz7cqv/series-workflowz7cqv-build-action-843953238/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 11:58:22 +0000 UTC FinishedAt: 2026-08-12 12:20:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*32fdaefa-47aa-4b77-8b81-436576e3c427,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-workflowz7cqv/series-workflowz7cqv-convert-artifact-4024092112/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": "c0f76d1f-eca8-47ae-a116-cb89035c22d2", "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-workflowz7cqv/series-workflowz7cqv-build-action-843953238/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:20:16 +0000 UTC FinishedAt: 2026-08-12 12:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:20:16 +0000 UTC FinishedAt: 2026-08-12 12:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:20:16 +0000 UTC FinishedAt: 2026-08-12 12:20:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:20:16 +0000 UTC FinishedAt: 2026-08-12 12:20:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-workflowz7cqv/series-workflowz7cqv-convert-artifact-163395127/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:20:26 +0000 UTC FinishedAt: 2026-08-12 12:22:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:20:26 +0000 UTC FinishedAt: 2026-08-12 12:22:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c0f76d1f-eca8-47ae-a116-cb89035c22d2,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-workflowz7cqv/series-workflowz7cqv-build-action-843953238/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-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:22:32 +0000 UTC FinishedAt: 2026-08-12 12:22:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:22:32 +0000 UTC FinishedAt: 2026-08-12 12:22:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:22:32 +0000 UTC FinishedAt: 2026-08-12 12:39:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:22:32 +0000 UTC FinishedAt: 2026-08-12 12:39:11 +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:*32fdaefa-47aa-4b77-8b81-436576e3c427,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-workflowz7cqv/series-workflowz7cqv-convert-artifact-163395127/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": "8101bce8-039d-4603-bde4-0cdd3f047e41", "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-workflowz7cqv/series-workflowz7cqv-build-action-1932563963/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:22:32 +0000 UTC FinishedAt: 2026-08-12 12:39:01 +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:*32fdaefa-47aa-4b77-8b81-436576e3c427,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-workflowz7cqv/series-workflowz7cqv-convert-artifact-163395127/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": "8101bce8-039d-4603-bde4-0cdd3f047e41", "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-workflowz7cqv/series-workflowz7cqv-build-action-1932563963/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:39:11 +0000 UTC FinishedAt: 2026-08-12 12:39:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:39:11 +0000 UTC FinishedAt: 2026-08-12 12:39:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:39:11 +0000 UTC FinishedAt: 2026-08-12 12:41:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:39:11 +0000 UTC FinishedAt: 2026-08-12 12:41:41 +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:*8101bce8-039d-4603-bde4-0cdd3f047e41,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-workflowz7cqv/series-workflowz7cqv-build-action-1932563963/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-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:41:51 +0000 UTC FinishedAt: 2026-08-12 15:43:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:41:51 +0000 UTC FinishedAt: 2026-08-12 15:43:50 +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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"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:*c0f76d1f-eca8-47ae-a116-cb89035c22d2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8101bce8-039d-4603-bde4-0cdd3f047e41,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-workflowz7cqv/series-workflowz7cqv-build-action-843953238/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-workflowz7cqv/series-workflowz7cqv-build-action-1932563963/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:41:51 +0000 UTC FinishedAt: 2026-08-12 12:42:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:41:51 +0000 UTC FinishedAt: 2026-08-12 12:41:56 +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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"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-workflowz7cqv/series-workflowz7cqv-convert-artifact-3808833904/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:41:51 +0000 UTC FinishedAt: 2026-08-12 12:41:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:41:51 +0000 UTC FinishedAt: 2026-08-12 12:41:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:41:51 +0000 UTC FinishedAt: 2026-08-12 12:41:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:42:01 +0000 UTC FinishedAt: 2026-08-12 15:43:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"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":["sanity_check_segment_list","kexec_locate_mem_hole","range_first_hwpoison","range_last_hwpoison"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","KEXEC","KEXEC_FILE"],"series_id":"968a0663-8b87-4c6a-8b60-2fe5e05dfdf6","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-12 12:42:01 +0000 UTC FinishedAt: 2026-08-12 15:43:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c0f76d1f-eca8-47ae-a116-cb89035c22d2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8101bce8-039d-4603-bde4-0cdd3f047e41,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-workflowz7cqv/series-workflowz7cqv-build-action-843953238/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-workflowz7cqv/series-workflowz7cqv-build-action-1932563963/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-workflowz7cqv/series-workflowz7cqv-convert-artifact-3808833904/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,}