Name: series-workflowq59hc Phase: Succeeded StartedAt: 2026-07-29 15:20:59 +0000 UTC FinishedAt: 2026-07-29 19:22:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq59hc[0] Phase: Succeeded StartedAt: 2026-07-29 15:20:59 +0000 UTC FinishedAt: 2026-07-29 15:28:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq59hc[0].run-triage Phase: Succeeded StartedAt: 2026-07-29 15:20:59 +0000 UTC FinishedAt: 2026-07-29 15:28:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "BPF_SYSCALL" ], "series_id": "5bdd641f-bb31-4565-b322-9fec62581767" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "cgroup_bpf_prog_attach", "cgroup_bpf_link_attach" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2Nncm91cF9icGZfbGlua19hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGVycm9yIHBhdGggb2YgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIHdoZW4gYXR0YWNoaW5nIGEgQlBGIHByb2dyYW0gb3IgbGluayB0byBhIGNncm91cC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgd2hlbiBhdHRhY2hpbmcgQlBGIHByb2dyYW1zIHRvIGNncm91cHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjQ1ZDJmYmViNjBlMGRmNDlhZjc1ZTNlZGY5Yjk1OTM0MzdhNzc2NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDE1OjI3OjE4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5pbmRleCA0MzU1Y2NiNzhhOWM2Li4xYzA3MGFlN2JmMTcwIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jZ3JvdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZ3JvdXAuY1xuQEAgLTgxMSwxMCAmIzQzOzgxMSwxMyBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbiB7XG4gXHR1MzIgc2F2ZWRfZmxhZ3MgPSAoZmxhZ3MgXHUwMDI2IChCUEZfRl9BTExPV19PVkVSUklERSB8IEJQRl9GX0FMTE9XX01VTFRJKSk7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpvbGRfbGluayA9IE5VTEw7XG4gXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiBcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogbGluay1cdTAwM2VsaW5rLnByb2c7XG4gXHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG4mIzQzO1x0dTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xuIFx0aW50IGVycjtcbkBAIC04NjUsNiAmIzQzOzg2OCw5IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFxuIFx0aWYgKHBsKSB7XG4gXHRcdG9sZF9wcm9nID0gcGwtXHUwMDNlcHJvZztcbiYjNDM7XHRcdG9sZF9saW5rID0gcGwtXHUwMDNlbGluaztcbiYjNDM7XHRcdG9sZF9wbF9mbGFncyA9IHBsLVx1MDAzZWZsYWdzO1xuJiM0MztcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVx1MDAzZXN0b3JhZ2UpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cGwgPSBrbWFsbG9jX29iaigqcGwpO1xuIFx0XHRpZiAoIXBsKSB7XG5AQCAtODg0LDYgJiM0Mzs4OTAsNyBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbiBcdHBsLVx1MDAzZWxpbmsgPSBsaW5rO1xuIFx0cGwtXHUwMDNlZmxhZ3MgPSBmbGFncztcbiBcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLVx1MDAzZXN0b3JhZ2UsIHN0b3JhZ2UpO1xuJiM0MztcdG9sZF9mbGFncyA9IGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXTtcbiBcdGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IHNhdmVkX2ZsYWdzO1xuIFxuIFx0aWYgKHR5cGUgPT0gQlBGX0xTTV9DR1JPVVApIHtcbkBAIC05MTIsMTUgJiM0Mzs5MTksMTggQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRcdGJwZl90cmFtcG9saW5lX3VubGlua19jZ3JvdXBfc2hpbShuZXdfcHJvZyk7XG4gXG4gY2xlYW51cDpcbi1cdGlmIChvbGRfcHJvZykge1xuJiM0MztcdGlmIChvbGRfcHJvZyB8fCBvbGRfbGluaykge1xuIFx0XHRwbC1cdTAwM2Vwcm9nID0gb2xkX3Byb2c7XG4tXHRcdHBsLVx1MDAzZWxpbmsgPSBOVUxMO1xuJiM0MztcdFx0cGwtXHUwMDNlbGluayA9IG9sZF9saW5rO1xuJiM0MztcdFx0cGwtXHUwMDNlZmxhZ3MgPSBvbGRfcGxfZmxhZ3M7XG4mIzQzO1x0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC1cdTAwM2VzdG9yYWdlLCBvbGRfc3RvcmFnZSk7XG4gXHR9XG4gXHRicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2UpO1xuLVx0aWYgKCFvbGRfcHJvZykge1xuJiM0MztcdGlmICghb2xkX3Byb2cgXHUwMDI2XHUwMDI2ICFvbGRfbGluaykge1xuIFx0XHRobGlzdF9kZWwoXHUwMDI2cGwtXHUwMDNlbm9kZSk7XG4gXHRcdGtmcmVlKHBsKTtcbiBcdH1cbiYjNDM7XHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBvbGRfZmxhZ3M7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nncm91cF9icGZfcHJvZ19hdHRhY2gmIzM0OywKICAgICYjMzQ7Y2dyb3VwX2JwZl9saW5rX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgd2hlbiBhdHRhY2hpbmcgYSBCUEYgcHJvZ3JhbSBvciBsaW5rIHRvIGEgY2dyb3VwLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGF0dGFjaGluZyBCUEYgcHJvZ3JhbXMgdG8gY2dyb3Vwcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGFuZCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyNDVkMmZiZWI2MGUwZGY0OWFmNzVlM2VkZjliOTU5MzQzN2E3NzY2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjkgMTU6Mjc6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Nncm91cC5jIGIva2VybmVsL2JwZi9jZ3JvdXAuYwppbmRleCA0MzU1Y2NiNzhhOWM2Li4xYzA3MGFlN2JmMTcwIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY2dyb3VwLmMKQEAgLTgxMSwxMCAmIzQzOzgxMSwxMyBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCwKIHsKIAl1MzIgc2F2ZWRfZmxhZ3MgPSAoZmxhZ3MgJmFtcDsgKEJQRl9GX0FMTE9XX09WRVJSSURFIHwgQlBGX0ZfQUxMT1dfTVVMVEkpKTsKIAlzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nID0gTlVMTDsKJiM0MzsJc3RydWN0IGJwZl9jZ3JvdXBfbGluayAqb2xkX2xpbmsgPSBOVUxMOwogCXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwogCXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTsKJiM0MzsJc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqb2xkX3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwogCXN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiBsaW5rLSZndDtsaW5rLnByb2c7CiAJZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlOwomIzQzOwl1MzIgb2xkX2ZsYWdzLCBvbGRfcGxfZmxhZ3M7CiAJc3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsOwogCXN0cnVjdCBobGlzdF9oZWFkICpwcm9nczsKIAlpbnQgZXJyOwpAQCAtODY1LDYgJiM0Mzs4NjgsOSBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCwKIAogCWlmIChwbCkgewogCQlvbGRfcHJvZyA9IHBsLSZndDtwcm9nOwomIzQzOwkJb2xkX2xpbmsgPSBwbC0mZ3Q7bGluazsKJiM0MzsJCW9sZF9wbF9mbGFncyA9IHBsLSZndDtmbGFnczsKJiM0MzsJCWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKG9sZF9zdG9yYWdlLCBwbC0mZ3Q7c3RvcmFnZSk7CiAJfSBlbHNlIHsKIAkJcGwgPSBrbWFsbG9jX29iaigqcGwpOwogCQlpZiAoIXBsKSB7CkBAIC04ODQsNiAmIzQzOzg5MCw3IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCXBsLSZndDtsaW5rID0gbGluazsKIAlwbC0mZ3Q7ZmxhZ3MgPSBmbGFnczsKIAlicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC0mZ3Q7c3RvcmFnZSwgc3RvcmFnZSk7CiYjNDM7CW9sZF9mbGFncyA9IGNncnAtJmd0O2JwZi5mbGFnc1thdHlwZV07CiAJY2dycC0mZ3Q7YnBmLmZsYWdzW2F0eXBlXSA9IHNhdmVkX2ZsYWdzOwogCiAJaWYgKHR5cGUgPT0gQlBGX0xTTV9DR1JPVVApIHsKQEAgLTkxMiwxNSAmIzQzOzkxOSwxOCBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCwKIAkJYnBmX3RyYW1wb2xpbmVfdW5saW5rX2Nncm91cF9zaGltKG5ld19wcm9nKTsKIAogY2xlYW51cDoKLQlpZiAob2xkX3Byb2cpIHsKJiM0MzsJaWYgKG9sZF9wcm9nIHx8IG9sZF9saW5rKSB7CiAJCXBsLSZndDtwcm9nID0gb2xkX3Byb2c7Ci0JCXBsLSZndDtsaW5rID0gTlVMTDsKJiM0MzsJCXBsLSZndDtsaW5rID0gb2xkX2xpbms7CiYjNDM7CQlwbC0mZ3Q7ZmxhZ3MgPSBvbGRfcGxfZmxhZ3M7CiYjNDM7CQlicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC0mZ3Q7c3RvcmFnZSwgb2xkX3N0b3JhZ2UpOwogCX0KIAlicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2UpOwotCWlmICghb2xkX3Byb2cpIHsKJiM0MzsJaWYgKCFvbGRfcHJvZyAmYW1wOyZhbXA7ICFvbGRfbGluaykgewogCQlobGlzdF9kZWwoJmFtcDtwbC0mZ3Q7bm9kZSk7CiAJCWtmcmVlKHBsKTsKIAl9CiYjNDM7CWNncnAtJmd0O2JwZi5mbGFnc1thdHlwZV0gPSBvbGRfZmxhZ3M7CiAJcmV0dXJuIGVycjsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzA1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUgdGhhdCB0d2Vha3MgYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBJbW1lZGlhdGVseSwgbXkgYXR0ZW50aW9uIGdvZXMgdG8gdGhlIGBfX2Nncm91cF9icGZfYXR0YWNoYCBmdW5jdGlvbiwgYXMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY2hhbmdlcyBhcmUgZm9jdXNlZC4gSXQgc291bmRzIGxpa2UgdGhleSYjMzk7dmUgYWRkcmVzc2VkIGFuIGVycm9yIGNvbmRpdGlvbiB3aXRoaW4gYF9fY2dyb3VwX2JwZl9hdHRhY2hgLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3JlIGNsZWFuaW5nIHVwIGFmdGVyIGEgZmFpbGVkIGBicGZfY2dyb3VwX2xpbmtgIGF0dGFjaG1lbnQgYnkgcmVzdG9yaW5nIHRoZSBwcmV2aW91cyBzdGF0ZTogYG9sZF9saW5rYCwgYG9sZF9wbF9mbGFnc2AsIGBvbGRfc3RvcmFnZWAsIGFuZCBgb2xkX2ZsYWdzYC4gVGhhdCYjMzk7cyBnb29kOyBlcnJvciBoYW5kbGluZyBpcyBjcnVjaWFsIGluIEJQRiwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjZ3JvdXAgYXR0YWNobWVudHMg4oCTIHdlIGRvbiYjMzk7dCB3YW50IGFueSBsaW5nZXJpbmcsIGluY29uc2lzdGVudCBzdGF0ZS4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgaXRzZWxmLiBUaGlzIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGZ1bmN0aW9uOyBpdCYjMzk7cyB0aGUgY29yZSBvZiBob3cgQlBGIHByb2dyYW1zIGdldCBob29rZWQgaW50byBjZ3JvdXBzLiBHaXZlbiB0aGF0LCB0aGlzIHBhdGNoIGlzIGNlcnRhaW5seSBpbXBhY3RmdWwgYW5kIHRoZSBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHRoZSBtYWlubGluZSBrZXJuZWwuIFdlIHdhbnQgdG8gYmUgc3VyZSB0aGlzIGZpeGVzIHRoZSBlcnJvciBwcm9wZXJseS4KCkJlZm9yZSBkaWdnaW5nIGRlZXBlciwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNvbmZpZy4gU3BlY2lmaWNhbGx5LCB0aGUgY29tcGlsYXRpb24gb2YgYGtlcm5lbC9icGYvY2dyb3VwLmNgIHJlbGllcyBvbiBgQ09ORklHX0NHUk9VUF9CUEZgLiBJJiMzOTtsbCB3YW50IHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMgaW5kZWVkIGVuYWJsZWQgaW4gdGhlIHJlbGV2YW50IGJ1aWxkLiBJZiB0aGlzIGlzbiYjMzk7dCBjb25maWd1cmVkLCB0aGUgY2hhbmdlcyBhcmUgaXJyZWxldmFudCB0byB0aGUgdGFyZ2V0IGtlcm5lbCBidWlsZCBhbmQgSSBkb24mIzM5O3QgbmVlZCB0byBwdXJzdWUgdGhpcyBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MzU9ZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzY6b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICYjNDM7PSBjZ3JvdXAub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zNy1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciB0aGlzIGlzIGRlZmluaXRlbHkgYENPTkZJR19DR1JPVVBfQlBGYC4gR290IGl0LgoKKipGb2N1c2luZyBvbiBjZ3JvdXAgQlBGIEF0dGFjaG1lbnRzKioKCk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZC4gQWgsIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBJJiMzOTttIGxvb2tpbmcgYXQgaXMgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sg4oCTIGlzIGl0IGEgc3RhdGljIGZ1bmN0aW9uPyBZZXAsIGBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCwgLi4uKWAgY29uZmlybXMgaXQuIE5leHQgc3RlcDogdW5kZXJzdGFuZCBpdHMgY2FsbCBncmFwaC4gV2hhdCBmdW5jdGlvbnMgYWN0dWFsbHkgaW52b2tlIGBfX2Nncm91cF9icGZfYXR0YWNoYD8gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGVyZSB0byBmdWxseSBncmFzcCB0aGUgY29udHJvbCBmbG93IGFuZCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2Nncm91cF9icGZfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTc3MT1zdGF0aWMgaW50IGluc2VydF9wbF90b19obGlzdChzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGwsIHN0cnVjdCBobGlzdF9oZWFkICpwcm9ncyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc5MS0vKipcbmtlcm5lbC9icGYvY2dyb3VwLmM6NzkyOiAqIF9fY2dyb3VwX2JwZl9hdHRhY2goKSAtIEF0dGFjaCB0aGUgcHJvZ3JhbSBvciB0aGUgbGluayB0byBhIGNncm91cCwgYW5kXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc5My0gKiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGUgdGhlIGNoYW5nZSB0byBkZXNjZW5kYW50c1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtODA1LSAqL1xua2VybmVsL2JwZi9jZ3JvdXAuYzo4MDY6c3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTgwNy1cdFx0XHQgICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3Byb2cgKnJlcGxhY2VfcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTkzNz1zdGF0aWMgaW50IGNncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy05NDUtXHRjZ3JvdXBfbG9jaygpO1xua2VybmVsL2JwZi9jZ3JvdXAuYzo5NDY6XHRyZXQgPSBfX2Nncm91cF9icGZfYXR0YWNoKGNncnAsIHByb2csIHJlcGxhY2VfcHJvZywgbGluaywgdHlwZSwgZmxhZ3MsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0Ny1cdFx0XHRcdCAgaWRfb3JfZmQsIHJldmlzaW9uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTMzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBjZ3JvdXBfYnBmX2F0dGFjaGAgRnVuY3Rpb24qKgoKT2theSwgc28gdGhlIHBvaW50IG9mIGVudHJ5IGlzIGBjZ3JvdXBfYnBmX2F0dGFjaGAuIE1ha2VzIHNlbnNlOyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBCUEYgbWFnaWMgaXMgbGlrZWx5IGhhcHBlbmluZyBmb3IgdGhpcyBjZ3JvdXAgaW50ZXJhY3Rpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgY2dyb3VwX2JwZl9hdHRhY2hgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNpZ25hdHVyZSwgd2hhdCBhcmd1bWVudHMgaXQgdGFrZXMsIGFuZCAqY3J1Y2lhbGx5KiB3aGF0IGl0JiMzOTtzIGRvaW5nIHVuZGVyIHRoZSBob29kLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIHdhbnQgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY2dyb3VwIGhpZXJhcmNoeSwgaG93IGl0IGhhbmRsZXMgdGhlIEJQRiBwcm9ncmFtIGxvYWRpbmcgKGlmIHRoYXQmIzM5O3Mgd2hlcmUgaXQgaGFwcGVucyksIGFueSBzZWN1cml0eSBjaGVja3MsIGFuZCBob3cgaXQgbGlua3MgdGhlIHByb2dyYW0gdG8gdGhlIGNncm91cC4gSXQmIzM5O3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGF0dGFjaGluZyB0aGUgcHJvZ3JhbSwgYnV0IEkgbmVlZCB0aGUgZGV0YWlscy4gSSBleHBlY3QgdGhlcmUgaXMgYSBsb3Qgb2YgbnVhbmNlIGFyb3VuZCByZXNvdXJjZSBsaW1pdHMvYWNjb3VudGluZyB0aGF0IG5lZWRzIHRvIGJlIHNjcnV0aW5pemVkLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nncm91cF9icGZfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTY1PXN0YXRpYyBzdHJ1Y3QgY2dyb3VwX2xzbV9hdHlwZSBjZ3JvdXBfbHNtX2F0eXBlW0NHUk9VUF9MU01fTlVNXTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtNjYtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjY3OnN0YXRpYyBib29sIGNncm91cF9icGZfaG9va19yZXR1cm5zX2Vycm5vKGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSlcbmtlcm5lbC9icGYvY2dyb3VwLmMtNjgte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtNzMtI2Vsc2Vcbmtlcm5lbC9icGYvY2dyb3VwLmM6NzQ6c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9ob29rX3JldHVybnNfZXJybm8oZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy03NS17XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz04ND1icGZfcHJvZ19ydW5fYXJyYXlfY2coY29uc3Qgc3RydWN0IGNncm91cF9icGYgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjg1Olx0XHQgICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTg2LVx0XHQgICAgICBjb25zdCB2b2lkICpjdHgsIGJwZl9wcm9nX3J1bl9mbiBydW5fcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE2Mj11bnNpZ25lZCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9sc21fY3VycmVudChjb25zdCB2b2lkICpjdHgsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xODEtI2lmZGVmIENPTkZJR19CUEZfTFNNXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE4MjpzdGF0aWMgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE4My1icGZfY2dyb3VwX2F0eXBlX2ZpbmQoZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsIHUzMiBhdHRhY2hfYnRmX2lkKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTg5LVx0aWYgKGF0dGFjaF90eXBlICE9IEJQRl9MU01fQ0dST1VQKVxua2VybmVsL2JwZi9jZ3JvdXAuYzoxOTA6XHRcdHJldHVybiB0b19jZ3JvdXBfYnBmX2F0dGFjaF90eXBlKGF0dGFjaF90eXBlKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTkxLVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MjIwPXZvaWQgYnBmX2Nncm91cF9hdHlwZV9wdXQoaW50IGNncm91cF9hdHlwZSlcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTIzMi0jZWxzZVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyMzM6c3RhdGljIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZVxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMzQtYnBmX2Nncm91cF9hdHlwZV9maW5kKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLCB1MzIgYXR0YWNoX2J0Zl9pZClcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTIzNi1cdGlmIChhdHRhY2hfdHlwZSAhPSBCUEZfTFNNX0NHUk9VUClcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjM3Olx0XHRyZXR1cm4gdG9fY2dyb3VwX2JwZl9hdHRhY2hfdHlwZShhdHRhY2hfdHlwZSk7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTIzOC1cdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTQyND1zdGF0aWMgYm9vbCBoaWVyYXJjaHlfYWxsb3dzX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxua2VybmVsL2JwZi9jZ3JvdXAuYzo0MjU6XHRcdFx0XHQgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy00MjYte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9NDUzPXN0YXRpYyBpbnQgY29tcHV0ZV9lZmZlY3RpdmVfcHJvZ3Moc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmM6NDU0Olx0XHRcdFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxua2VybmVsL2JwZi9jZ3JvdXAuYy00NTUtXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKiphcnJheSlcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTUxMT1zdGF0aWMgdm9pZCBhY3RpdmF0ZV9lZmZlY3RpdmVfcHJvZ3Moc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmM6NTEyOlx0XHRcdFx0ICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTUxMy1cdFx0XHRcdCAgICAgc3RydWN0IGJwZl9wcm9nX2FycmF5ICpvbGRfYXJyYXkpXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz01OTE9c3RhdGljIGludCB1cGRhdGVfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjU5MjpcdFx0XHRcdCAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy01OTMte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkxLS8qKlxua2VybmVsL2JwZi9jZ3JvdXAuYzo3OTI6ICogX19jZ3JvdXBfYnBmX2F0dGFjaCgpIC0gQXR0YWNoIHRoZSBwcm9ncmFtIG9yIHRoZSBsaW5rIHRvIGEgY2dyb3VwLCBhbmRcbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkzLSAqICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZSB0aGUgY2hhbmdlIHRvIGRlc2NlbmRhbnRzXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDUtICovXG5rZXJuZWwvYnBmL2Nncm91cC5jOjgwNjpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtODA3LVx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfcHJvZyAqcmVwbGFjZV9wcm9nLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtODE4LVx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstXHUwMDNlbGluay5wcm9nO1xua2VybmVsL2JwZi9jZ3JvdXAuYzo4MTk6XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTgyMC1cdHUzMiBvbGRfZmxhZ3MsIG9sZF9wbF9mbGFncztcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTkzNi1cbmtlcm5lbC9icGYvY2dyb3VwLmM6OTM3OnN0YXRpYyBpbnQgY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTM4LVx0XHRcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3Byb2cgKnJlcGxhY2VfcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0NS1cdGNncm91cF9sb2NrKCk7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjk0NjpcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTQ3LVx0XHRcdFx0ICBpZF9vcl9mZCwgcmV2aXNpb24pO1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9OTUyPXN0YXRpYyBpbnQgZWZmZWN0aXZlX3Byb2dfcG9zKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjk1MzpcdFx0XHQgICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk1NC1cdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqdGFyZ2V0X3BsKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTAwND1zdGF0aWMgdm9pZCByZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMDU6XHRcdFx0XHQgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMDYtXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGwpXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMDQxPXN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNDQte1xua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDQ1Olx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ2LVx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExNDE9c3RhdGljIHZvaWQgcHVyZ2VfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTE0MjpcdFx0XHRcdCAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTQzLXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExODI9c3RhdGljIGludCBfX2Nncm91cF9icGZfZGV0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTExODUte1xua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTg2Olx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTg3LVx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEyNTc9c3RhdGljIGludCBfX2Nncm91cF9icGZfcXVlcnkoc3RydWN0IGNncm91cCAqY2dycCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMjYzLVx0ZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSA9IGF0dHItXHUwMDNlcXVlcnkuYXR0YWNoX3R5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjEyNjQ6XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgZnJvbV9hdHlwZSwgdG9fYXR5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjEyNjU6XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTEyNjYtXHRzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKmVmZmVjdGl2ZTtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEyODMtXHR9IGVsc2Uge1xua2VybmVsL2JwZi9jZ3JvdXAuYzoxMjg0Olx0XHRmcm9tX2F0eXBlID0gdG9fY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSh0eXBlKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTI4NS1cdFx0aWYgKGZyb21fYXR5cGUgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMzczPWludCBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTM5Mi1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTM5MzpcdHJldCA9IGNncm91cF9icGZfYXR0YWNoKGNncnAsIHByb2csIHJlcGxhY2VfcHJvZywgTlVMTCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTM5NC1cdFx0XHRcdGF0dHItXHUwMDNlYXR0YWNoX3R5cGUsIGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTUyNT1pbnQgY2dyb3VwX2JwZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTU1My1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTU1NDpcdGVyciA9IGNncm91cF9icGZfYXR0YWNoKGNncnAsIE5VTEwsIE5VTEwsIGxpbmssXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1NTUtXHRcdFx0XHRsaW5rLVx1MDAzZWxpbmsuYXR0YWNoX3R5cGUsIEJQRl9GX0FMTE9XX01VTFRJIHwgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5mbGFncyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE2MDk9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NrYihzdHJ1Y3Qgc29jayAqc2ssXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE2MTAtXHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNjExOlx0XHRcdFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNjEyLXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE2ODc9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NrKHN0cnVjdCBzb2NrICpzayxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTY4ODpcdFx0XHQgICAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNjg5LXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE3MTU9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfYWRkcihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzE3LVx0XHRcdFx0ICAgICAgaW50ICp1YWRkcmxlbixcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTcxODpcdFx0XHRcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTcxOS1cdFx0XHRcdCAgICAgIHZvaWQgKnRfY3R4LFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc2OT1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc29ja19vcHMoc3RydWN0IHNvY2sgKnNrLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzcwLVx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKnNvY2tfb3BzLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNzcxOlx0XHRcdFx0ICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3NzIte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc4MD1pbnQgX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKHNob3J0IGRldl90eXBlLCB1MzIgbWFqb3IsIHUzMiBtaW5vcixcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc4MTpcdFx0XHRcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzgyLXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE5Mzc9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE5MzktXHRcdFx0XHQgICBjaGFyICoqYnVmLCBzaXplX3QgKnBjb3VudCwgbG9mZl90ICpwcG9zLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxOTQwOlx0XHRcdFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTQxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDI4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgRXhwbG9yYXRpb24gaW50byBCUEYgQXR0YWNobWVudCBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBob3cgQlBGIHByb2dyYW1zIGdldCBhdHRhY2hlZCB0byBjZ3JvdXBzLiBUaGUgY29yZSBvZiB0aGlzLCBmcm9tIHRoZSBzeXN0ZW0gY2FsbCBwZXJzcGVjdGl2ZSwgYXBwZWFycyB0byBiZSBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYC4gVGhlc2UgYXJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gZXhhbWluZSwgYXMgdGhleSYjMzk7cmUgZGlyZWN0bHkgY2FsbGVkIGZyb20gdGhlIGBicGZgIHN5c2NhbGwuIEZvY3VzaW5nIG9uIHRoZXNlIHR3byBzeW1ib2xzIHNlZW1zIGxpa2UgdGhlIHJpZ2h0IGFwcHJvYWNoIHRvIHVuZGVyc3RhbmQgdGhlIGF0dGFjaG1lbnQgcHJvY2Vzcy4KCk5vdywgYmVmb3JlIEkgZGlnIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIGV4cGVjdCBgQ09ORklHX0NHUk9VUF9CUEZgIHRvIGJlIHRoZSBrZXkgc2V0dGluZyB0aGF0IGVuYWJsZXMgYWxsIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQmIzM5O3MgZW5hYmxlZCBhbmQgY2hlY2sgZm9yIGFueSByZWxhdGVkLCBwb3NzaWJseSBtb3JlIGdyYW51bGFyLCBvcHRpb25zLgoKTmV4dCBzdGVwOiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGFuZCB0YWtlIGEgY2xvc2UgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGJvdGggYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGFuZCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvbiB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgaG93IHRoZSBhdHRhY2htZW50IGhhcHBlbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nncm91cF9icGZfcHJvZ19hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz00NjM0PXN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ2NjktXHRpZiAoaXNfY2dyb3VwX3Byb2dfdHlwZShwdHlwZSwgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSwgdHJ1ZSkpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ2NzA6XHRcdHJldCA9IGNncm91cF9icGZfcHJvZ19hdHRhY2goYXR0ciwgcHR5cGUsIHByb2cpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNDY3MS1cdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5ODkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91JiMzOTt2ZSBkZXNjcmliZWQ6CgoqKkRlbHZpbmcgaW50byBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAgZnVuY3Rpb24uIFRoaW5raW5nIGFib3V0IGl0LCB0aGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IGRlc2NyaXB0aXZlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCAqYXR0YWNoaW5nKiBhIEJQRiBwcm9ncmFtIHRvIGEgY2dyb3VwICpsaW5rKiwgeWVhaD8gT2theSwgc28gdGhhdCBsaW5rIHJlcHJlc2VudHMgdGhlIGNvbm5lY3Rpb24sIHRoZSBwb2ludCBvZiBpbnRlcmFjdGlvbiwgYmV0d2VlbiBvdXIgQlBGIHByb2dyYW0gYW5kIHRoZSBjZ3JvdXAgaGllcmFyY2h5LgoKV2hhdCYjMzk7cyByZWFsbHkgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QgaGVyZT8gSSYjMzk7bSBwaWN0dXJpbmcgdGhlIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXM7IHdlJiMzOTt2ZSBnb3QgdGhlIGNncm91cCwgd2hpY2ggb3JnYW5pemVzIHJlc291cmNlcywgYW5kIHRoZSBCUEYgcHJvZ3JhbSwgd2hpY2ggaXMgdGhlIGNvZGUgd2Ugd2FudCB0byBleGVjdXRlLiBUaGUgbGluayBpcyB0aGUgYnJpZGdlLCB0aGUgbWVjaGFuaXNtIGJ5IHdoaWNoIHRoZSBCUEYgcHJvZ3JhbSBrbm93cyAqd2hpY2gqIGNncm91cCBpdCYjMzk7cyBpbmZsdWVuY2luZy4KClRoZSBhdHRhY2htZW50IHByb2Nlc3MgaGFzIHRvIGNvbnNpZGVyIGEgbG90IG9mIHRoaW5ncy4gRXJyb3IgaGFuZGxpbmcgaXMgcGFyYW1vdW50LCBvZiBjb3Vyc2UuIFdlIG5lZWQgdG8gdmFsaWRhdGUgdGhhdCB0aGUgQlBGIHByb2dyYW0gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjZ3JvdXAmIzM5O3MgY29udGV4dCwgbWFraW5nIHN1cmUgdGhlIGF0dGFjaG1lbnQgaXMgYWN0dWFsbHkgKmFsbG93ZWQqIGFuZCB0aGF0IG91ciBCUEYgcHJvZ3JhbSBjYW4gc2FmZWx5IGJlIGF0dGFjaGVkLiBXZSBuZWVkIHRvIGhhbmRsZSBhbnkgcmFjZSBjb25kaXRpb25zLCB0b28uIAoKQW5kLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgb2YgdGhlIGVkZ2UgY2FzZXMuIFdoYXQgaWYgdGhlIGNncm91cCBnZXRzIGRlbGV0ZWQgd2hpbGUgYSBwcm9ncmFtIGlzIGF0dGFjaGVkPyBXaGF0IGFib3V0IHJlc291cmNlIGxpbWl0YXRpb25zIGluIHRoZSBCUEYgVk0gaXRzZWxmPyBUaGUgbG9naWMgaXMgYWxsIGFib3V0IHNldHRpbmcgdXAgdGhpcyBsaW5rIHNhZmVseSwgc2V0dGluZyBpdCB1cCBpbiBhIHdheSB0aGF0IGRvZXNuJiMzOTt0IGRlc3RhYmlsaXplIHRoZSBzeXN0ZW0sIGFuZCBtYWtpbmcgaXQgc28gdGhhdCB0aGVzZSB0d28gcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgYWJsZSB0byB3b3JrIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9NTg0ND1zdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODcxLVx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLT1BUOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg3MjpcdFx0cmV0ID0gY2dyb3VwX2JwZl9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4NzMtXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4OTItXHRcdGVsc2UgaWYgKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX0xTTV9DR1JPVVApXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1ODkzOlx0XHRcdHJldCA9IGNncm91cF9icGZfbGlua19hdHRhY2goYXR0ciwgcHJvZyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk0LVx0XHRlbHNlIGlmIChpc190cmFjaW5nX211bHRpKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjE1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBLZXJuZWwgQlBGIEF0dGFjaG1lbnQgUG9pbnRzKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyBCUEYgcHJvZ3JhbXMgZ2V0IGF0dGFjaGVkIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBjZ3JvdXBzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGVzZSBhdHRhY2htZW50cy4gTXkgaW5pdGlhbCB0aGlua2luZyBpcyB0aGF0IGBicGZfcHJvZ19hdHRhY2hgIGFuZCBgbGlua19jcmVhdGVgIGFyZSB0aGUgKnN5c3RlbSBjYWxsIGhhbmRsZXJzKiDigJMgdGhleSBhcmUgdGhlIGxvd2VzdCBsZXZlbCB0aGF0IHRoZSB1c2Vyc3BhY2UgdG9vbHMgaW50ZXJhY3Qgd2l0aC4KCkhvd2V2ZXIsIEkmIzM5O20gbW9yZSBpbnRlcmVzdGVkIGluIHRoZSBjZ3JvdXAtc3BlY2lmaWMgZnVuY3Rpb25zLiBUaGVyZWZvcmUsIEkgYmVsaWV2ZSB0aGUgbW9yZSByZWxldmFudCBzeW1ib2xzIGhlcmUgYXJlIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBhdCB0aGUgY2dyb3VwIGxldmVsLgoKTm93LCBJJiMzOTttIGN1cmlvdXMgaWYgYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHZpc2liaWxpdHkgYW5kIHNjb3BlIHdpdGhpbiB0aGUga2VybmVsIGNvZGUuIExldCBtZSBjaGVjay4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTEzNjI9c3RhdGljIGludCBjZ3JvdXBfYnBmX3F1ZXJ5KHN0cnVjdCBjZ3JvdXAgKmNncnAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTM3Mi1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTM3MzppbnQgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTM3NC1cdFx0XHQgICBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA2NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRHluYW1pYyBOYXR1cmUgb2YgdGhlIFNpdHVhdGlvbioqCgpBbHJpZ2h0LCB0aGlzIGlzbiYjMzk7dCBhIHN0YXRpYyBzaXR1YXRpb24sIG5vdCBieSBhbnkgc3RyZXRjaCBvZiB0aGUgaW1hZ2luYXRpb24uIFNvbWV0aGluZyYjMzk7cyBkZWZpbml0ZWx5IGluIGZsdXgsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBtZWNoYW5pc21zIGF0IHBsYXkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBjcml0aWNhbCBmdW5jdGlvbiByZWxhdGVkIHRvIEJQRiBhbmQgY2dyb3Vwcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgYGNncm91cF9icGZfbGlua19hdHRhY2hgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgYSBwcmltZSBzcG90IHRvIGluc3BlY3Qgd2hhdOKAmXMgYWN0dWFsbHkgY2hhbmdpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nncm91cF9icGZfbGlua19hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmM9MTUwOT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfY2dyb3VwX2xpbmtfbG9wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1MjQtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE1MjU6aW50IGNncm91cF9icGZfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTUyNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNzAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBDR1JPVVBfQlBGYCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoaXMgaXNuJiMzOTt0IGEgc2ltcGxlLCBmaXhlZCBzaXR1YXRpb24uIE15IG1pbmQgaW1tZWRpYXRlbHkgcmVjb2duaXplcyB0aGF0IHRoaW5ncyBhcmUgZHluYW1pYyBoZXJlLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjcml0aWNhbCBzeW1ib2xzIGluIHRoaXMgaW50ZXJhY3Rpb24uIFRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGNsZWFybHkgYENHUk9VUF9CUEZgLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSBpZiBgQ0dST1VQX0JQRmAgcmVsaWVzIG9uIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgb3ZlcnZpZXcgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENHUk9VUF9CUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEzNDE9Y29uZmlnIENHUk9VUF9QRVJGXG4tLVxuaW5pdC9LY29uZmlnLTEzNTEtXG5pbml0L0tjb25maWc6MTM1Mjpjb25maWcgQ0dST1VQX0JQRlxuaW5pdC9LY29uZmlnLTEzNTMtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Njg2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENHUk9VUF9CUEYgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQ0dST1VQX0JQRmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSBhbGwgdGhlIHRoaW5ncyB0aGlzIHRoaW5nIHRvdWNoZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMg4oCTIGJvdGggdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0uIEkgd2FudCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQga25vd2luZyBpZiBzb21lIG90aGVyIGNvbmZpZyBvcHRpb24gaXMgcmVxdWlyZWQgdG8gZW5hYmxlIGl0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSAqaW1wYWN0Ki4gV2hhdCBtb2R1bGVzIG9yIGZlYXR1cmVzIGNyaXRpY2FsbHkgcmVseSBvbiBgQ0dST1VQX0JQRmA/IEhvdyBkZWVwbHkgaXMgaXQgaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgYXJjaGl0ZWN0dXJlPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY29uZmxpY3RzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiwgcGVyaGFwcyB3aXRoIG90aGVyIGVCUEYtcmVsYXRlZCBmZWF0dXJlcyBvciBleGlzdGluZyBjZ3JvdXAgaW1wbGVtZW50YXRpb25zPyBJIG5lZWQgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIGRlcGVuZGVuY3kgZ3JhcGggaW4gbXkgaGVhZC4gRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIG1lbnRhbGx5IG1hcCBvdXQgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbS4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHRoYXQgbWlnaHQgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvci4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzUwOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEzNTE6XHRcbjEzNTI6XHRjb25maWcgQ0dST1VQX0JQRlxuMTM1MzpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcJiMzNDtcbjEzNTQ6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbjEzNTU6XHRcdHNlbGVjdCBTT0NLX0NHUk9VUF9EQVRBXG4xMzU2Olx0XHRoZWxwXG4xMzU3Olx0XHQgIEFsbG93IGF0dGFjaGluZyBlQlBGIHByb2dyYW1zIHRvIGEgY2dyb3VwIHVzaW5nIHRoZSBicGYoMilcbjEzNTg6XHRcdCAgc3lzY2FsbCBjb21tYW5kIEJQRl9QUk9HX0FUVEFDSC5cbjEzNTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwOTkKCQkJCQkJCW91dHB1dDogMTUyCgkJCQkJCQl0aG91Z2h0czogMjQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgY2hhbmdlIGhpbmdlcyBvbiBgQlBGX1NZU0NBTExgLCB0aGF0JiMzOTtzIHRoZSBrZXkuIEFuZCB0byBiZSBwcmVjaXNlIGFib3V0IGRlcGVuZGVuY2llcywgYENHUk9VUF9CUEZgIGlzIGFub3RoZXIgaW1wb3J0YW50IGNvbmZpZy4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW52b2x2ZWQ7IGJldHRlciBzYWZlIHRoYW4gc29ycnkuCgpSaWdodCwgdGhlIHBhdGNoIG1vZGlmaWVzIGBrZXJuZWwvYnBmL2Nncm91cC5jYC4gQWgsIGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBmaXgsIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIGFuIGVycm9yIHBhdGggd2l0aGluIGBfX2Nncm91cF9icGZfYXR0YWNoYC4gU2luY2UgaXQgZGVhbHMgd2l0aCBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyBpbiB0aGUgQlBGIGF0dGFjaG1lbnQgcHJvY2VzcyB0byBjZ3JvdXBzLCB0aGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gZXhlcmNpc2UgdGhpcyBlcnJvciBwYXRoIGFuZCB2ZXJpZnkgdGhlIGZpeC4KCk15IGZvY3VzIGhhcyB0byBiZSBvbiB0aGVzZSBzeW1ib2xzOiBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gcHJvZ3JhbSBhbmQgbGluayBhdHRhY2htZW50LgoKU28sIGp1c3QgdG8gYmUgY3J5c3RhbCBjbGVhcjogdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgQ0dST1VQX0JQRmAgYW5kIGBCUEZfU1lTQ0FMTGAuCgpUaGUgY29yZSByZWFzb25pbmcgaGVyZSBpcyB0aGF0IHRoaXMgcGF0Y2ggcmVwYWlycyBhIGZsYXcgd2l0aGluIGBfX2Nncm91cF9icGZfYXR0YWNoYCAtIGEgZnVuY3Rpb24gdml0YWwgZm9yIEJQRiBwcm9ncmFtIGFuZCBsaW5rIGF0dGFjaG1lbnQgdG8gY2dyb3Vwcy4gSXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsLiBTbyB3ZSBoYXZlIHRvIHNwZWNpZmljYWxseSBwcm9iZSB0aGlzIHBhdGggYW5kIGZ1enogdGhpcyBhcmVhLiBUaGUgb2JqZWN0aXZlIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IGVycm9ycyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuIFdlIG5lZWQgdG8gcGF5IHNwZWNpYWwgYXR0ZW50aW9uIHRvIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgIHdoZW4gZGV2ZWxvcGluZyBmdXp6aW5nIGNvdmVyYWdlLgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nncm91cF9icGZfcHJvZ19hdHRhY2gmIzM0OywKICAgICYjMzQ7Y2dyb3VwX2JwZl9saW5rX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgd2hlbiBhdHRhY2hpbmcgYSBCUEYgcHJvZ3JhbSBvciBsaW5rIHRvIGEgY2dyb3VwLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGF0dGFjaGluZyBCUEYgcHJvZ3JhbXMgdG8gY2dyb3Vwcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGFuZCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2Nncm91cF9icGZfbGlua19hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGVycm9yIHBhdGggb2YgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIHdoZW4gYXR0YWNoaW5nIGEgQlBGIHByb2dyYW0gb3IgbGluayB0byBhIGNncm91cC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgd2hlbiBhdHRhY2hpbmcgQlBGIHByb2dyYW1zIHRvIGNncm91cHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6Mjc6MTkuNzIxMjYxNjQ0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1NDMxNjU0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoXCIsXG4gICAgXCJjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGVycm9yIHBhdGggb2YgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIHdoZW4gYXR0YWNoaW5nIGEgQlBGIHByb2dyYW0gb3IgbGluayB0byBhIGNncm91cC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgd2hlbiBhdHRhY2hpbmcgQlBGIHByb2dyYW1zIHRvIGNncm91cHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToyNzoxOS43MjEyNzQyNzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDMzMzc1NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyNDVkMmZiZWI2MGUwZGY0OWFmNzVlM2VkZjliOTU5MzQzN2E3NzY2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDI5IDE1OjI3OjE4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXFxuaW5kZXggNDM1NWNjYjc4YTljNi4uMWMwNzBhZTdiZjE3MCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXFxuKysrIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xcbkBAIC04MTEsMTAgKzgxMSwxMyBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4ge1xcbiBcXHR1MzIgc2F2ZWRfZmxhZ3MgPSAoZmxhZ3MgXFx1MDAyNiAoQlBGX0ZfQUxMT1dfT1ZFUlJJREUgfCBCUEZfRl9BTExPV19NVUxUSSkpO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nID0gTlVMTDtcXG4rXFx0c3RydWN0IGJwZl9jZ3JvdXBfbGluayAqb2xkX2xpbmsgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcXG4gXFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbitcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiBsaW5rLVxcdTAwM2VsaW5rLnByb2c7XFxuIFxcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTtcXG4rXFx0dTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGw7XFxuIFxcdHN0cnVjdCBobGlzdF9oZWFkICpwcm9ncztcXG4gXFx0aW50IGVycjtcXG5AQCAtODY1LDYgKzg2OCw5IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbiBcXG4gXFx0aWYgKHBsKSB7XFxuIFxcdFxcdG9sZF9wcm9nID0gcGwtXFx1MDAzZXByb2c7XFxuK1xcdFxcdG9sZF9saW5rID0gcGwtXFx1MDAzZWxpbms7XFxuK1xcdFxcdG9sZF9wbF9mbGFncyA9IHBsLVxcdTAwM2VmbGFncztcXG4rXFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVxcdTAwM2VzdG9yYWdlKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0cGwgPSBrbWFsbG9jX29iaigqcGwpO1xcbiBcXHRcXHRpZiAoIXBsKSB7XFxuQEAgLTg4NCw2ICs4OTAsNyBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4gXFx0cGwtXFx1MDAzZWxpbmsgPSBsaW5rO1xcbiBcXHRwbC1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG4gXFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIHN0b3JhZ2UpO1xcbitcXHRvbGRfZmxhZ3MgPSBjZ3JwLVxcdTAwM2VicGYuZmxhZ3NbYXR5cGVdO1xcbiBcXHRjZ3JwLVxcdTAwM2VicGYuZmxhZ3NbYXR5cGVdID0gc2F2ZWRfZmxhZ3M7XFxuIFxcbiBcXHRpZiAodHlwZSA9PSBCUEZfTFNNX0NHUk9VUCkge1xcbkBAIC05MTIsMTUgKzkxOSwxOCBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4gXFx0XFx0YnBmX3RyYW1wb2xpbmVfdW5saW5rX2Nncm91cF9zaGltKG5ld19wcm9nKTtcXG4gXFxuIGNsZWFudXA6XFxuLVxcdGlmIChvbGRfcHJvZykge1xcbitcXHRpZiAob2xkX3Byb2cgfHwgb2xkX2xpbmspIHtcXG4gXFx0XFx0cGwtXFx1MDAzZXByb2cgPSBvbGRfcHJvZztcXG4tXFx0XFx0cGwtXFx1MDAzZWxpbmsgPSBOVUxMO1xcbitcXHRcXHRwbC1cXHUwMDNlbGluayA9IG9sZF9saW5rO1xcbitcXHRcXHRwbC1cXHUwMDNlZmxhZ3MgPSBvbGRfcGxfZmxhZ3M7XFxuK1xcdFxcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLVxcdTAwM2VzdG9yYWdlLCBvbGRfc3RvcmFnZSk7XFxuIFxcdH1cXG4gXFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTtcXG4tXFx0aWYgKCFvbGRfcHJvZykge1xcbitcXHRpZiAoIW9sZF9wcm9nIFxcdTAwMjZcXHUwMDI2ICFvbGRfbGluaykge1xcbiBcXHRcXHRobGlzdF9kZWwoXFx1MDAyNnBsLVxcdTAwM2Vub2RlKTtcXG4gXFx0XFx0a2ZyZWUocGwpO1xcbiBcXHR9XFxuK1xcdGNncnAtXFx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBvbGRfZmxhZ3M7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI3OjIwLjc2NTQyNTAxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ0NDk4OTkxNzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2dyb3VwX2JwZl9wcm9nX2F0dGFjaFwiLFxuICAgIFwiY2dyb3VwX2JwZl9saW5rX2F0dGFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBlcnJvciBwYXRoIG9mIGBfX2Nncm91cF9icGZfYXR0YWNoYCB3aGVuIGF0dGFjaGluZyBhIEJQRiBwcm9ncmFtIG9yIGxpbmsgdG8gYSBjZ3JvdXAuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyB0byBjZ3JvdXBzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjQ1ZDJmYmViNjBlMGRmNDlhZjc1ZTNlZGY5Yjk1OTM0MzdhNzc2NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDE1OjI3OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbmluZGV4IDQzNTVjY2I3OGE5YzYuLjFjMDcwYWU3YmYxNzAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXG4rKysgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5AQCAtODExLDEwICs4MTEsMTMgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4ge1xuIFx0dTMyIHNhdmVkX2ZsYWdzID0gKGZsYWdzIFx1MDAyNiAoQlBGX0ZfQUxMT1dfT1ZFUlJJREUgfCBCUEZfRl9BTExPV19NVUxUSSkpO1xuIFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEw7XG4rXHRzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpvbGRfbGluayA9IE5VTEw7XG4gXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiBcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbitcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiBsaW5rLVx1MDAzZWxpbmsucHJvZztcbiBcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTtcbitcdHUzMiBvbGRfZmxhZ3MsIG9sZF9wbF9mbGFncztcbiBcdHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDtcbiBcdHN0cnVjdCBobGlzdF9oZWFkICpwcm9ncztcbiBcdGludCBlcnI7XG5AQCAtODY1LDYgKzg2OCw5IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFxuIFx0aWYgKHBsKSB7XG4gXHRcdG9sZF9wcm9nID0gcGwtXHUwMDNlcHJvZztcbitcdFx0b2xkX2xpbmsgPSBwbC1cdTAwM2VsaW5rO1xuK1x0XHRvbGRfcGxfZmxhZ3MgPSBwbC1cdTAwM2VmbGFncztcbitcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVx1MDAzZXN0b3JhZ2UpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cGwgPSBrbWFsbG9jX29iaigqcGwpO1xuIFx0XHRpZiAoIXBsKSB7XG5AQCAtODg0LDYgKzg5MCw3IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFx0cGwtXHUwMDNlbGluayA9IGxpbms7XG4gXHRwbC1cdTAwM2VmbGFncyA9IGZsYWdzO1xuIFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXHUwMDNlc3RvcmFnZSwgc3RvcmFnZSk7XG4rXHRvbGRfZmxhZ3MgPSBjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV07XG4gXHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBzYXZlZF9mbGFncztcbiBcbiBcdGlmICh0eXBlID09IEJQRl9MU01fQ0dST1VQKSB7XG5AQCAtOTEyLDE1ICs5MTksMTggQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRcdGJwZl90cmFtcG9saW5lX3VubGlua19jZ3JvdXBfc2hpbShuZXdfcHJvZyk7XG4gXG4gY2xlYW51cDpcbi1cdGlmIChvbGRfcHJvZykge1xuK1x0aWYgKG9sZF9wcm9nIHx8IG9sZF9saW5rKSB7XG4gXHRcdHBsLVx1MDAzZXByb2cgPSBvbGRfcHJvZztcbi1cdFx0cGwtXHUwMDNlbGluayA9IE5VTEw7XG4rXHRcdHBsLVx1MDAzZWxpbmsgPSBvbGRfbGluaztcbitcdFx0cGwtXHUwMDNlZmxhZ3MgPSBvbGRfcGxfZmxhZ3M7XG4rXHRcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLVx1MDAzZXN0b3JhZ2UsIG9sZF9zdG9yYWdlKTtcbiBcdH1cbiBcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7XG4tXHRpZiAoIW9sZF9wcm9nKSB7XG4rXHRpZiAoIW9sZF9wcm9nIFx1MDAyNlx1MDAyNiAhb2xkX2xpbmspIHtcbiBcdFx0aGxpc3RfZGVsKFx1MDAyNnBsLVx1MDAzZW5vZGUpO1xuIFx0XHRrZnJlZShwbCk7XG4gXHR9XG4rXHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBvbGRfZmxhZ3M7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI3OjIwLjc2NTQyNjkzNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NTA2MDE5NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVjZW50IEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUgdGhhdCB0d2Vha3MgYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBJbW1lZGlhdGVseSwgbXkgYXR0ZW50aW9uIGdvZXMgdG8gdGhlIGBfX2Nncm91cF9icGZfYXR0YWNoYCBmdW5jdGlvbiwgYXMgdGhhdCdzIHdoZXJlIHRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkLiBJdCBzb3VuZHMgbGlrZSB0aGV5J3ZlIGFkZHJlc3NlZCBhbiBlcnJvciBjb25kaXRpb24gd2l0aGluIGBfX2Nncm91cF9icGZfYXR0YWNoYC4gU3BlY2lmaWNhbGx5LCB0aGV5J3JlIGNsZWFuaW5nIHVwIGFmdGVyIGEgZmFpbGVkIGBicGZfY2dyb3VwX2xpbmtgIGF0dGFjaG1lbnQgYnkgcmVzdG9yaW5nIHRoZSBwcmV2aW91cyBzdGF0ZTogYG9sZF9saW5rYCwgYG9sZF9wbF9mbGFnc2AsIGBvbGRfc3RvcmFnZWAsIGFuZCBgb2xkX2ZsYWdzYC4gVGhhdCdzIGdvb2Q7IGVycm9yIGhhbmRsaW5nIGlzIGNydWNpYWwgaW4gQlBGLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGNncm91cCBhdHRhY2htZW50cyDigJMgd2UgZG9uJ3Qgd2FudCBhbnkgbGluZ2VyaW5nLCBpbmNvbnNpc3RlbnQgc3RhdGUuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBfX2Nncm91cF9icGZfYXR0YWNoYCBpdHNlbGYuIFRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgZnVuY3Rpb247IGl0J3MgdGhlIGNvcmUgb2YgaG93IEJQRiBwcm9ncmFtcyBnZXQgaG9va2VkIGludG8gY2dyb3Vwcy4gR2l2ZW4gdGhhdCwgdGhpcyBwYXRjaCBpcyBjZXJ0YWlubHkgaW1wYWN0ZnVsIGFuZCB0aGUgY29kZSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiB0aGUgbWFpbmxpbmUga2VybmVsLiBXZSB3YW50IHRvIGJlIHN1cmUgdGhpcyBmaXhlcyB0aGUgZXJyb3IgcHJvcGVybHkuXG5cbkJlZm9yZSBkaWdnaW5nIGRlZXBlciwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNvbmZpZy4gU3BlY2lmaWNhbGx5LCB0aGUgY29tcGlsYXRpb24gb2YgYGtlcm5lbC9icGYvY2dyb3VwLmNgIHJlbGllcyBvbiBgQ09ORklHX0NHUk9VUF9CUEZgLiBJJ2xsIHdhbnQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBpbmRlZWQgZW5hYmxlZCBpbiB0aGUgcmVsZXZhbnQgYnVpbGQuIElmIHRoaXMgaXNuJ3QgY29uZmlndXJlZCwgdGhlIGNoYW5nZXMgYXJlIGlycmVsZXZhbnQgdG8gdGhlIHRhcmdldCBrZXJuZWwgYnVpbGQgYW5kIEkgZG9uJ3QgbmVlZCB0byBwdXJzdWUgdGhpcyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzA1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6Mjc6MjUuNzE2MDMzNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDM1MDY5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDR1JPVVBfQlBGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0zNT1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzY6b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICs9IGNncm91cC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0zNy1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToyNzoyNS43OTAzODk5MDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjUwMTUzNzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgdGhpcyBpcyBkZWZpbml0ZWx5IGBDT05GSUdfQ0dST1VQX0JQRmAuIEdvdCBpdC5cblxuKipGb2N1c2luZyBvbiBjZ3JvdXAgQlBGIEF0dGFjaG1lbnRzKipcblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBBaCwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIEknbSBsb29raW5nIGF0IGlzIGBfX2Nncm91cF9icGZfYXR0YWNoYC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIOKAkyBpcyBpdCBhIHN0YXRpYyBmdW5jdGlvbj8gWWVwLCBgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsIC4uLilgIGNvbmZpcm1zIGl0LiBOZXh0IHN0ZXA6IHVuZGVyc3RhbmQgaXRzIGNhbGwgZ3JhcGguIFdoYXQgZnVuY3Rpb25zIGFjdHVhbGx5IGludm9rZSBgX19jZ3JvdXBfYnBmX2F0dGFjaGA/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhlcmUgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnRyb2wgZmxvdyBhbmQgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToyNzoyOS40NDA1NDYzOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjM3NDI2ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jZ3JvdXBfYnBmX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy03OTEtLyoqXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo3OTI6ICogX19jZ3JvdXBfYnBmX2F0dGFjaCgpIC0gQXR0YWNoIHRoZSBwcm9ncmFtIG9yIHRoZSBsaW5rIHRvIGEgY2dyb3VwLCBhbmRcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc5My0gKiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGUgdGhlIGNoYW5nZSB0byBkZXNjZW5kYW50c1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDUtICovXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4MDY6c3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTkzNz1zdGF0aWMgaW50IGNncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0NS1cXHRjZ3JvdXBfbG9jaygpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6OTQ2OlxcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0Ny1cXHRcXHRcXHRcXHQgIGlkX29yX2ZkLCByZXZpc2lvbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI3OjI5LjU2NDMxNDI0OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1ODUxMzUyODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgY2dyb3VwX2JwZl9hdHRhY2hgIEZ1bmN0aW9uKipcblxuT2theSwgc28gdGhlIHBvaW50IG9mIGVudHJ5IGlzIGBjZ3JvdXBfYnBmX2F0dGFjaGAuIE1ha2VzIHNlbnNlOyB0aGF0J3Mgd2hlcmUgdGhlIEJQRiBtYWdpYyBpcyBsaWtlbHkgaGFwcGVuaW5nIGZvciB0aGlzIGNncm91cCBpbnRlcmFjdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBjZ3JvdXBfYnBmX2F0dGFjaGAgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2lnbmF0dXJlLCB3aGF0IGFyZ3VtZW50cyBpdCB0YWtlcywgYW5kICpjcnVjaWFsbHkqIHdoYXQgaXQncyBkb2luZyB1bmRlciB0aGUgaG9vZC4gU3BlY2lmaWNhbGx5LCBJJ2xsIHdhbnQgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY2dyb3VwIGhpZXJhcmNoeSwgaG93IGl0IGhhbmRsZXMgdGhlIEJQRiBwcm9ncmFtIGxvYWRpbmcgKGlmIHRoYXQncyB3aGVyZSBpdCBoYXBwZW5zKSwgYW55IHNlY3VyaXR5IGNoZWNrcywgYW5kIGhvdyBpdCBsaW5rcyB0aGUgcHJvZ3JhbSB0byB0aGUgY2dyb3VwLiBJdCdzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBhdHRhY2hpbmcgdGhlIHByb2dyYW0sIGJ1dCBJIG5lZWQgdGhlIGRldGFpbHMuIEkgZXhwZWN0IHRoZXJlIGlzIGEgbG90IG9mIG51YW5jZSBhcm91bmQgcmVzb3VyY2UgbGltaXRzL2FjY291bnRpbmcgdGhhdCBuZWVkcyB0byBiZSBzY3J1dGluaXplZC4gTGV0J3MgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTMzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6Mjc6MzUuMTQ5NDUyOTM0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTg5OTIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXBfYnBmX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9NjU9c3RhdGljIHN0cnVjdCBjZ3JvdXBfbHNtX2F0eXBlIGNncm91cF9sc21fYXR5cGVbQ0dST1VQX0xTTV9OVU1dO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtNjYtXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo2NzpzdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX2hvb2tfcmV0dXJuc19lcnJubyhlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXFxua2VybmVsL2JwZi9jZ3JvdXAuYy02OC17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTczLSNlbHNlXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo3NDpzdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX2hvb2tfcmV0dXJuc19lcnJubyhlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXFxua2VybmVsL2JwZi9jZ3JvdXAuYy03NS17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTg0PWJwZl9wcm9nX3J1bl9hcnJheV9jZyhjb25zdCBzdHJ1Y3QgY2dyb3VwX2JwZiAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjg1OlxcdFxcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTg2LVxcdFxcdCAgICAgIGNvbnN0IHZvaWQgKmN0eCwgYnBmX3Byb2dfcnVuX2ZuIHJ1bl9wcm9nLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNjI9dW5zaWduZWQgaW50IF9fY2dyb3VwX2JwZl9ydW5fbHNtX2N1cnJlbnQoY29uc3Qgdm9pZCAqY3R4LFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xODEtI2lmZGVmIENPTkZJR19CUEZfTFNNXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxODI6c3RhdGljIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTgzLWJwZl9jZ3JvdXBfYXR5cGVfZmluZChlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSwgdTMyIGF0dGFjaF9idGZfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE4OS1cXHRpZiAoYXR0YWNoX3R5cGUgIT0gQlBGX0xTTV9DR1JPVVApXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxOTA6XFx0XFx0cmV0dXJuIHRvX2Nncm91cF9icGZfYXR0YWNoX3R5cGUoYXR0YWNoX3R5cGUpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTkxLVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0yMjA9dm9pZCBicGZfY2dyb3VwX2F0eXBlX3B1dChpbnQgY2dyb3VwX2F0eXBlKVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMzItI2Vsc2VcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjIzMzpzdGF0aWMgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMzQtYnBmX2Nncm91cF9hdHlwZV9maW5kKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLCB1MzIgYXR0YWNoX2J0Zl9pZClcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjM2LVxcdGlmIChhdHRhY2hfdHlwZSAhPSBCUEZfTFNNX0NHUk9VUClcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjIzNzpcXHRcXHRyZXR1cm4gdG9fY2dyb3VwX2JwZl9hdHRhY2hfdHlwZShhdHRhY2hfdHlwZSk7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMzgtXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz00MjQ9c3RhdGljIGJvb2wgaGllcmFyY2h5X2FsbG93c19hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjQyNTpcXHRcXHRcXHRcXHQgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNDI2LXtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9NDUzPXN0YXRpYyBpbnQgY29tcHV0ZV9lZmZlY3RpdmVfcHJvZ3Moc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjQ1NDpcXHRcXHRcXHRcXHQgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy00NTUtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9wcm9nX2FycmF5ICoqYXJyYXkpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTUxMT1zdGF0aWMgdm9pZCBhY3RpdmF0ZV9lZmZlY3RpdmVfcHJvZ3Moc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjUxMjpcXHRcXHRcXHRcXHQgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTUxMy1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfcHJvZ19hcnJheSAqb2xkX2FycmF5KVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz01OTE9c3RhdGljIGludCB1cGRhdGVfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo1OTI6XFx0XFx0XFx0XFx0ICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXFxua2VybmVsL2JwZi9jZ3JvdXAuYy01OTMte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz03NzE9c3RhdGljIGludCBpbnNlcnRfcGxfdG9faGxpc3Qoc3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsLCBzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc5MS0vKipcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjc5MjogKiBfX2Nncm91cF9icGZfYXR0YWNoKCkgLSBBdHRhY2ggdGhlIHByb2dyYW0gb3IgdGhlIGxpbmsgdG8gYSBjZ3JvdXAsIGFuZFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkzLSAqICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZSB0aGUgY2hhbmdlIHRvIGRlc2NlbmRhbnRzXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTgwNS0gKi9cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjgwNjpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTgwNy1cXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3Byb2cgKnJlcGxhY2VfcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtODE4LVxcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiBsaW5rLVxcdTAwM2VsaW5rLnByb2c7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4MTk6XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtODIwLVxcdHUzMiBvbGRfZmxhZ3MsIG9sZF9wbF9mbGFncztcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTM2LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6OTM3OnN0YXRpYyBpbnQgY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTkzOC1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0NS1cXHRjZ3JvdXBfbG9jaygpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6OTQ2OlxcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0Ny1cXHRcXHRcXHRcXHQgIGlkX29yX2ZkLCByZXZpc2lvbik7XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTk1Mj1zdGF0aWMgaW50IGVmZmVjdGl2ZV9wcm9nX3BvcyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6OTUzOlxcdFxcdFxcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk1NC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqdGFyZ2V0X3BsKVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMDA0PXN0YXRpYyB2b2lkIHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMDU6XFx0XFx0XFx0XFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAwNi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGwpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEwNDE9c3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ0LXtcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwNDU6XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA0Ni1cXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMTQxPXN0YXRpYyB2b2lkIHB1cmdlX2VmZmVjdGl2ZV9wcm9ncyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGwsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTQyOlxcdFxcdFxcdFxcdCAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTE0My17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExODI9c3RhdGljIGludCBfX2Nncm91cF9icGZfZGV0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTE4NS17XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTg2OlxcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTExODctXFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTI1Nz1zdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9xdWVyeShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTI2My1cXHRlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlID0gYXR0ci1cXHUwMDNlcXVlcnkuYXR0YWNoX3R5cGU7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMjY0OlxcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBmcm9tX2F0eXBlLCB0b19hdHlwZTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEyNjU6XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTI2Ni1cXHRzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKmVmZmVjdGl2ZTtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTI4My1cXHR9IGVsc2Uge1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTI4NDpcXHRcXHRmcm9tX2F0eXBlID0gdG9fY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSh0eXBlKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEyODUtXFx0XFx0aWYgKGZyb21fYXR5cGUgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMzczPWludCBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMzkyLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTM5MzpcXHRyZXQgPSBjZ3JvdXBfYnBmX2F0dGFjaChjZ3JwLCBwcm9nLCByZXBsYWNlX3Byb2csIE5VTEwsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMzk0LVxcdFxcdFxcdFxcdGF0dHItXFx1MDAzZWF0dGFjaF90eXBlLCBhdHRyLVxcdTAwM2VhdHRhY2hfZmxhZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE1MjU9aW50IGNncm91cF9icGZfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTU1My1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE1NTQ6XFx0ZXJyID0gY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgTlVMTCwgTlVMTCwgbGluayxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1NTUtXFx0XFx0XFx0XFx0bGluay1cXHUwMDNlbGluay5hdHRhY2hfdHlwZSwgQlBGX0ZfQUxMT1dfTVVMVEkgfCBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5mbGFncyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTYwOT1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2tiKHN0cnVjdCBzb2NrICpzayxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE2MTAtXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE2MTE6XFx0XFx0XFx0XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTYxMi17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE2ODc9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NrKHN0cnVjdCBzb2NrICpzayxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE2ODg6XFx0XFx0XFx0ICAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSlcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE2ODkte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNzE1PWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zb2NrX2FkZHIoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzE3LVxcdFxcdFxcdFxcdCAgICAgIGludCAqdWFkZHJsZW4sXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNzE4OlxcdFxcdFxcdFxcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3MTktXFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqdF9jdHgsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE3Njk9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfb3BzKHN0cnVjdCBzb2NrICpzayxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3NzAtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKnNvY2tfb3BzLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc3MTpcXHRcXHRcXHRcXHQgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSlcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3NzIte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNzgwPWludCBfX2Nncm91cF9icGZfY2hlY2tfZGV2X3Blcm1pc3Npb24oc2hvcnQgZGV2X3R5cGUsIHUzMiBtYWpvciwgdTMyIG1pbm9yLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc4MTpcXHRcXHRcXHRcXHQgICAgICBzaG9ydCBhY2Nlc3MsIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSlcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3ODIte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xOTM3PWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zeXNjdGwoc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhlYWQsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE5MzktXFx0XFx0XFx0XFx0ICAgY2hhciAqKmJ1Ziwgc2l6ZV90ICpwY291bnQsIGxvZmZfdCAqcHBvcyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE5NDA6XFx0XFx0XFx0XFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTk0MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI3OjM1LjY4MTM2NTE3M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNjE5Mjc2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBFeHBsb3JhdGlvbiBpbnRvIEJQRiBBdHRhY2htZW50IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBob3cgQlBGIHByb2dyYW1zIGdldCBhdHRhY2hlZCB0byBjZ3JvdXBzLiBUaGUgY29yZSBvZiB0aGlzLCBmcm9tIHRoZSBzeXN0ZW0gY2FsbCBwZXJzcGVjdGl2ZSwgYXBwZWFycyB0byBiZSBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYC4gVGhlc2UgYXJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gZXhhbWluZSwgYXMgdGhleSdyZSBkaXJlY3RseSBjYWxsZWQgZnJvbSB0aGUgYGJwZmAgc3lzY2FsbC4gRm9jdXNpbmcgb24gdGhlc2UgdHdvIHN5bWJvbHMgc2VlbXMgbGlrZSB0aGUgcmlnaHQgYXBwcm9hY2ggdG8gdW5kZXJzdGFuZCB0aGUgYXR0YWNobWVudCBwcm9jZXNzLlxuXG5Ob3csIGJlZm9yZSBJIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSdsbCBxdWlja2x5IHZlcmlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIGV4cGVjdCBgQ09ORklHX0NHUk9VUF9CUEZgIHRvIGJlIHRoZSBrZXkgc2V0dGluZyB0aGF0IGVuYWJsZXMgYWxsIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCdzIGVuYWJsZWQgYW5kIGNoZWNrIGZvciBhbnkgcmVsYXRlZCwgcG9zc2libHkgbW9yZSBncmFudWxhciwgb3B0aW9ucy5cblxuTmV4dCBzdGVwOiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgYW5kIHRha2UgYSBjbG9zZSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYm90aCBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBob3cgdGhlIGF0dGFjaG1lbnQgaGFwcGVucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQyOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToyNzozOS44NDMyOTcwNDVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjU1Njc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTQ2MzQ9c3RhdGljIGludCBicGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjY5LVxcdGlmIChpc19jZ3JvdXBfcHJvZ190eXBlKHB0eXBlLCBwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSwgdHJ1ZSkpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NjcwOlxcdFxcdHJldCA9IGNncm91cF9icGZfcHJvZ19hdHRhY2goYXR0ciwgcHR5cGUsIHByb2cpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ2NzEtXFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI3OjM5Ljk2NTg1OTY4MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjU3NDg3NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSd2ZSBkZXNjcmliZWQ6XG5cbioqRGVsdmluZyBpbnRvIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAgZnVuY3Rpb24uIFRoaW5raW5nIGFib3V0IGl0LCB0aGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IGRlc2NyaXB0aXZlLiBXZSdyZSB0YWxraW5nIGFib3V0ICphdHRhY2hpbmcqIGEgQlBGIHByb2dyYW0gdG8gYSBjZ3JvdXAgKmxpbmsqLCB5ZWFoPyBPa2F5LCBzbyB0aGF0IGxpbmsgcmVwcmVzZW50cyB0aGUgY29ubmVjdGlvbiwgdGhlIHBvaW50IG9mIGludGVyYWN0aW9uLCBiZXR3ZWVuIG91ciBCUEYgcHJvZ3JhbSBhbmQgdGhlIGNncm91cCBoaWVyYXJjaHkuXG5cbldoYXQncyByZWFsbHkgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QgaGVyZT8gSSdtIHBpY3R1cmluZyB0aGUga2VybmVsIGRhdGEgc3RydWN0dXJlczsgd2UndmUgZ290IHRoZSBjZ3JvdXAsIHdoaWNoIG9yZ2FuaXplcyByZXNvdXJjZXMsIGFuZCB0aGUgQlBGIHByb2dyYW0sIHdoaWNoIGlzIHRoZSBjb2RlIHdlIHdhbnQgdG8gZXhlY3V0ZS4gVGhlIGxpbmsgaXMgdGhlIGJyaWRnZSwgdGhlIG1lY2hhbmlzbSBieSB3aGljaCB0aGUgQlBGIHByb2dyYW0ga25vd3MgKndoaWNoKiBjZ3JvdXAgaXQncyBpbmZsdWVuY2luZy5cblxuVGhlIGF0dGFjaG1lbnQgcHJvY2VzcyBoYXMgdG8gY29uc2lkZXIgYSBsb3Qgb2YgdGhpbmdzLiBFcnJvciBoYW5kbGluZyBpcyBwYXJhbW91bnQsIG9mIGNvdXJzZS4gV2UgbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBCUEYgcHJvZ3JhbSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGNncm91cCdzIGNvbnRleHQsIG1ha2luZyBzdXJlIHRoZSBhdHRhY2htZW50IGlzIGFjdHVhbGx5ICphbGxvd2VkKiBhbmQgdGhhdCBvdXIgQlBGIHByb2dyYW0gY2FuIHNhZmVseSBiZSBhdHRhY2hlZC4gV2UgbmVlZCB0byBoYW5kbGUgYW55IHJhY2UgY29uZGl0aW9ucywgdG9vLiBcblxuQW5kLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBvZiB0aGUgZWRnZSBjYXNlcy4gV2hhdCBpZiB0aGUgY2dyb3VwIGdldHMgZGVsZXRlZCB3aGlsZSBhIHByb2dyYW0gaXMgYXR0YWNoZWQ/IFdoYXQgYWJvdXQgcmVzb3VyY2UgbGltaXRhdGlvbnMgaW4gdGhlIEJQRiBWTSBpdHNlbGY/IFRoZSBsb2dpYyBpcyBhbGwgYWJvdXQgc2V0dGluZyB1cCB0aGlzIGxpbmsgc2FmZWx5LCBzZXR0aW5nIGl0IHVwIGluIGEgd2F5IHRoYXQgZG9lc24ndCBkZXN0YWJpbGl6ZSB0aGUgc3lzdGVtLCBhbmQgbWFraW5nIGl0IHNvIHRoYXQgdGhlc2UgdHdvIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIGFibGUgdG8gd29yayB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk4OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI3OjQ0LjIyMzM1MjEyMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM1MDkzNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2dyb3VwX2JwZl9saW5rX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz01ODQ0PXN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg3MS1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tPUFQ6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg3MjpcXHRcXHRyZXQgPSBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoKGF0dHIsIHByb2cpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4NzMtXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODkyLVxcdFxcdGVsc2UgaWYgKHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID09IEJQRl9MU01fQ0dST1VQKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU4OTM6XFx0XFx0XFx0cmV0ID0gY2dyb3VwX2JwZl9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk0LVxcdFxcdGVsc2UgaWYgKGlzX3RyYWNpbmdfbXVsdGkocHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToyNzo0NC4zMTY4NjgyNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDU4MzQzMDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIEtlcm5lbCBCUEYgQXR0YWNobWVudCBQb2ludHMqKlxuXG5SaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIGhvdyBCUEYgcHJvZ3JhbXMgZ2V0IGF0dGFjaGVkIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBjZ3JvdXBzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGVzZSBhdHRhY2htZW50cy4gTXkgaW5pdGlhbCB0aGlua2luZyBpcyB0aGF0IGBicGZfcHJvZ19hdHRhY2hgIGFuZCBgbGlua19jcmVhdGVgIGFyZSB0aGUgKnN5c3RlbSBjYWxsIGhhbmRsZXJzKiDigJMgdGhleSBhcmUgdGhlIGxvd2VzdCBsZXZlbCB0aGF0IHRoZSB1c2Vyc3BhY2UgdG9vbHMgaW50ZXJhY3Qgd2l0aC5cblxuSG93ZXZlciwgSSdtIG1vcmUgaW50ZXJlc3RlZCBpbiB0aGUgY2dyb3VwLXNwZWNpZmljIGZ1bmN0aW9ucy4gVGhlcmVmb3JlLCBJIGJlbGlldmUgdGhlIG1vcmUgcmVsZXZhbnQgc3ltYm9scyBoZXJlIGFyZSBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgYXQgdGhlIGNncm91cCBsZXZlbC5cblxuTm93LCBJJ20gY3VyaW91cyBpZiBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgdmlzaWJpbGl0eSBhbmQgc2NvcGUgd2l0aGluIHRoZSBrZXJuZWwgY29kZS4gTGV0IG1lIGNoZWNrLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToyNzo0Ny43NzUyMTM0ODVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MzU3MDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNncm91cF9icGZfcHJvZ19hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jPTEzNjI9c3RhdGljIGludCBjZ3JvdXBfYnBmX3F1ZXJ5KHN0cnVjdCBjZ3JvdXAgKmNncnAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMzcyLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTM3MzppbnQgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEzNzQtXFx0XFx0XFx0ICAgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI3OjQ3Ljg1MDU3NjM5NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTg4MzExMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIER5bmFtaWMgTmF0dXJlIG9mIHRoZSBTaXR1YXRpb24qKlxuXG5BbHJpZ2h0LCB0aGlzIGlzbid0IGEgc3RhdGljIHNpdHVhdGlvbiwgbm90IGJ5IGFueSBzdHJldGNoIG9mIHRoZSBpbWFnaW5hdGlvbi4gU29tZXRoaW5nJ3MgZGVmaW5pdGVseSBpbiBmbHV4LCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcyBhdCBwbGF5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgY3JpdGljYWwgZnVuY3Rpb24gcmVsYXRlZCB0byBCUEYgYW5kIGNncm91cHMuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgYGNncm91cF9icGZfbGlua19hdHRhY2hgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgYSBwcmltZSBzcG90IHRvIGluc3BlY3Qgd2hhdOKAmXMgYWN0dWFsbHkgY2hhbmdpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNjUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToyNzo1MS4wMzg4OTIyOTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDU2NjAzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuYz0xNTA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9jZ3JvdXBfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTI0LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTUyNTppbnQgY2dyb3VwX2JwZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTUyNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI3OjUxLjEzOTQ2NTA3MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDc3OTA2MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYENHUk9VUF9CUEZgIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIGlzbid0IGEgc2ltcGxlLCBmaXhlZCBzaXR1YXRpb24uIE15IG1pbmQgaW1tZWRpYXRlbHkgcmVjb2duaXplcyB0aGF0IHRoaW5ncyBhcmUgZHluYW1pYyBoZXJlLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjcml0aWNhbCBzeW1ib2xzIGluIHRoaXMgaW50ZXJhY3Rpb24uIFRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGNsZWFybHkgYENHUk9VUF9CUEZgLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSBpZiBgQ0dST1VQX0JQRmAgcmVsaWVzIG9uIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgb3ZlcnZpZXcgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM3MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI3OjU0LjYxNzM4NjU4N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM4Njc5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENHUk9VUF9CUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMzQxPWNvbmZpZyBDR1JPVVBfUEVSRlxcbi0tXFxuaW5pdC9LY29uZmlnLTEzNTEtXFxuaW5pdC9LY29uZmlnOjEzNTI6Y29uZmlnIENHUk9VUF9CUEZcXG5pbml0L0tjb25maWctMTM1My1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI3OjU0LjY5MTI2NTY0NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTAzOTA3OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ0dST1VQX0JQRiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgQ0dST1VQX0JQRmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSBhbGwgdGhlIHRoaW5ncyB0aGlzIHRoaW5nIHRvdWNoZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMg4oCTIGJvdGggdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0uIEkgd2FudCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBrbm93aW5nIGlmIHNvbWUgb3RoZXIgY29uZmlnIG9wdGlvbiBpcyByZXF1aXJlZCB0byBlbmFibGUgaXQsIEknbSB0aGlua2luZyBhYm91dCB0aGUgKmltcGFjdCouIFdoYXQgbW9kdWxlcyBvciBmZWF0dXJlcyBjcml0aWNhbGx5IHJlbHkgb24gYENHUk9VUF9CUEZgPyBIb3cgZGVlcGx5IGlzIGl0IGludGVncmF0ZWQgaW50byB0aGUga2VybmVsJ3MgYXJjaGl0ZWN0dXJlPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY29uZmxpY3RzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiwgcGVyaGFwcyB3aXRoIG90aGVyIGVCUEYtcmVsYXRlZCBmZWF0dXJlcyBvciBleGlzdGluZyBjZ3JvdXAgaW1wbGVtZW50YXRpb25zPyBJIG5lZWQgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIGRlcGVuZGVuY3kgZ3JhcGggaW4gbXkgaGVhZC4gRXNzZW50aWFsbHksIEknbSB0cnlpbmcgdG8gbWVudGFsbHkgbWFwIG91dCBpdHMgcm9sZSBpbiB0aGUgc3lzdGVtLiBJJ20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyB0aGF0IG1pZ2h0IGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njg2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6Mjc6NTguMTk1MTc3NjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIxNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzUwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzUwOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEzNTE6XFx0XFxuMTM1MjpcXHRjb25maWcgQ0dST1VQX0JQRlxcbjEzNTM6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXFxcIlxcbjEzNTQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbjEzNTU6XFx0XFx0c2VsZWN0IFNPQ0tfQ0dST1VQX0RBVEFcXG4xMzU2OlxcdFxcdGhlbHBcXG4xMzU3OlxcdFxcdCAgQWxsb3cgYXR0YWNoaW5nIGVCUEYgcHJvZ3JhbXMgdG8gYSBjZ3JvdXAgdXNpbmcgdGhlIGJwZigyKVxcbjEzNTg6XFx0XFx0ICBzeXNjYWxsIGNvbW1hbmQgQlBGX1BST0dfQVRUQUNILlxcbjEzNTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI3OjU4LjE5NjAwNTQ0OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODg1NjI3NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBjaGFuZ2UgaGluZ2VzIG9uIGBCUEZfU1lTQ0FMTGAsIHRoYXQncyB0aGUga2V5LiBBbmQgdG8gYmUgcHJlY2lzZSBhYm91dCBkZXBlbmRlbmNpZXMsIGBDR1JPVVBfQlBGYCBpcyBhbm90aGVyIGltcG9ydGFudCBjb25maWcuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhlcmUgYXJlbid0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW52b2x2ZWQ7IGJldHRlciBzYWZlIHRoYW4gc29ycnkuXG5cblJpZ2h0LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBBaCwgaXQncyBhIGZ1bmN0aW9uYWwgZml4LCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBhbiBlcnJvciBwYXRoIHdpdGhpbiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAuIFNpbmNlIGl0IGRlYWxzIHdpdGggcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgaW4gdGhlIEJQRiBhdHRhY2htZW50IHByb2Nlc3MgdG8gY2dyb3VwcywgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGV4ZXJjaXNlIHRoaXMgZXJyb3IgcGF0aCBhbmQgdmVyaWZ5IHRoZSBmaXguXG5cbk15IGZvY3VzIGhhcyB0byBiZSBvbiB0aGVzZSBzeW1ib2xzOiBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gcHJvZ3JhbSBhbmQgbGluayBhdHRhY2htZW50LlxuXG5TbywganVzdCB0byBiZSBjcnlzdGFsIGNsZWFyOiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBDR1JPVVBfQlBGYCBhbmQgYEJQRl9TWVNDQUxMYC5cblxuVGhlIGNvcmUgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIHJlcGFpcnMgYSBmbGF3IHdpdGhpbiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgLSBhIGZ1bmN0aW9uIHZpdGFsIGZvciBCUEYgcHJvZ3JhbSBhbmQgbGluayBhdHRhY2htZW50IHRvIGNncm91cHMuIEl0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbC4gU28gd2UgaGF2ZSB0byBzcGVjaWZpY2FsbHkgcHJvYmUgdGhpcyBwYXRoIGFuZCBmdXp6IHRoaXMgYXJlYS4gVGhlIG9iamVjdGl2ZSBpcyB0byBtYWtlIHN1cmUgdGhhdCBlcnJvcnMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LiBXZSBuZWVkIHRvIHBheSBzcGVjaWFsIGF0dGVudGlvbiB0byBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYCB3aGVuIGRldmVsb3BpbmcgZnV6emluZyBjb3ZlcmFnZS5cblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDk5LCJPdXRwdXRUb2tlbnMiOjE1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI4OjA1LjA4MTYzNjZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI3NzU1NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2dyb3VwX2JwZl9wcm9nX2F0dGFjaFwiLFxuICAgIFwiY2dyb3VwX2JwZl9saW5rX2F0dGFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBlcnJvciBwYXRoIG9mIGBfX2Nncm91cF9icGZfYXR0YWNoYCB3aGVuIGF0dGFjaGluZyBhIEJQRiBwcm9ncmFtIG9yIGxpbmsgdG8gYSBjZ3JvdXAuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyB0byBjZ3JvdXBzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNncm91cF9icGZfcHJvZ19hdHRhY2hcIixcbiAgICBcImNncm91cF9icGZfbGlua19hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgd2hlbiBhdHRhY2hpbmcgYSBCUEYgcHJvZ3JhbSBvciBsaW5rIHRvIGEgY2dyb3VwLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGF0dGFjaGluZyBCUEYgcHJvZ3JhbXMgdG8gY2dyb3Vwcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGFuZCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowq59hc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-29 15:20:59 +0000 UTC FinishedAt: 2026-07-29 15:28:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "BPF_SYSCALL" ], "series_id": "5bdd641f-bb31-4565-b322-9fec62581767" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "cgroup_bpf_prog_attach", "cgroup_bpf_link_attach" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2Nncm91cF9icGZfbGlua19hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGVycm9yIHBhdGggb2YgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIHdoZW4gYXR0YWNoaW5nIGEgQlBGIHByb2dyYW0gb3IgbGluayB0byBhIGNncm91cC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgd2hlbiBhdHRhY2hpbmcgQlBGIHByb2dyYW1zIHRvIGNncm91cHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjQ1ZDJmYmViNjBlMGRmNDlhZjc1ZTNlZGY5Yjk1OTM0MzdhNzc2NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDE1OjI3OjE4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5pbmRleCA0MzU1Y2NiNzhhOWM2Li4xYzA3MGFlN2JmMTcwIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jZ3JvdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZ3JvdXAuY1xuQEAgLTgxMSwxMCAmIzQzOzgxMSwxMyBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbiB7XG4gXHR1MzIgc2F2ZWRfZmxhZ3MgPSAoZmxhZ3MgXHUwMDI2IChCUEZfRl9BTExPV19PVkVSUklERSB8IEJQRl9GX0FMTE9XX01VTFRJKSk7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpvbGRfbGluayA9IE5VTEw7XG4gXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiBcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogbGluay1cdTAwM2VsaW5rLnByb2c7XG4gXHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG4mIzQzO1x0dTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzO1xuIFx0c3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsO1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKnByb2dzO1xuIFx0aW50IGVycjtcbkBAIC04NjUsNiAmIzQzOzg2OCw5IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFxuIFx0aWYgKHBsKSB7XG4gXHRcdG9sZF9wcm9nID0gcGwtXHUwMDNlcHJvZztcbiYjNDM7XHRcdG9sZF9saW5rID0gcGwtXHUwMDNlbGluaztcbiYjNDM7XHRcdG9sZF9wbF9mbGFncyA9IHBsLVx1MDAzZWZsYWdzO1xuJiM0MztcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVx1MDAzZXN0b3JhZ2UpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cGwgPSBrbWFsbG9jX29iaigqcGwpO1xuIFx0XHRpZiAoIXBsKSB7XG5AQCAtODg0LDYgJiM0Mzs4OTAsNyBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbiBcdHBsLVx1MDAzZWxpbmsgPSBsaW5rO1xuIFx0cGwtXHUwMDNlZmxhZ3MgPSBmbGFncztcbiBcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLVx1MDAzZXN0b3JhZ2UsIHN0b3JhZ2UpO1xuJiM0MztcdG9sZF9mbGFncyA9IGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXTtcbiBcdGNncnAtXHUwMDNlYnBmLmZsYWdzW2F0eXBlXSA9IHNhdmVkX2ZsYWdzO1xuIFxuIFx0aWYgKHR5cGUgPT0gQlBGX0xTTV9DR1JPVVApIHtcbkBAIC05MTIsMTUgJiM0Mzs5MTksMTggQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRcdGJwZl90cmFtcG9saW5lX3VubGlua19jZ3JvdXBfc2hpbShuZXdfcHJvZyk7XG4gXG4gY2xlYW51cDpcbi1cdGlmIChvbGRfcHJvZykge1xuJiM0MztcdGlmIChvbGRfcHJvZyB8fCBvbGRfbGluaykge1xuIFx0XHRwbC1cdTAwM2Vwcm9nID0gb2xkX3Byb2c7XG4tXHRcdHBsLVx1MDAzZWxpbmsgPSBOVUxMO1xuJiM0MztcdFx0cGwtXHUwMDNlbGluayA9IG9sZF9saW5rO1xuJiM0MztcdFx0cGwtXHUwMDNlZmxhZ3MgPSBvbGRfcGxfZmxhZ3M7XG4mIzQzO1x0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC1cdTAwM2VzdG9yYWdlLCBvbGRfc3RvcmFnZSk7XG4gXHR9XG4gXHRicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2UpO1xuLVx0aWYgKCFvbGRfcHJvZykge1xuJiM0MztcdGlmICghb2xkX3Byb2cgXHUwMDI2XHUwMDI2ICFvbGRfbGluaykge1xuIFx0XHRobGlzdF9kZWwoXHUwMDI2cGwtXHUwMDNlbm9kZSk7XG4gXHRcdGtmcmVlKHBsKTtcbiBcdH1cbiYjNDM7XHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBvbGRfZmxhZ3M7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nncm91cF9icGZfcHJvZ19hdHRhY2gmIzM0OywKICAgICYjMzQ7Y2dyb3VwX2JwZl9saW5rX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgd2hlbiBhdHRhY2hpbmcgYSBCUEYgcHJvZ3JhbSBvciBsaW5rIHRvIGEgY2dyb3VwLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGF0dGFjaGluZyBCUEYgcHJvZ3JhbXMgdG8gY2dyb3Vwcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGFuZCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyNDVkMmZiZWI2MGUwZGY0OWFmNzVlM2VkZjliOTU5MzQzN2E3NzY2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjkgMTU6Mjc6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Nncm91cC5jIGIva2VybmVsL2JwZi9jZ3JvdXAuYwppbmRleCA0MzU1Y2NiNzhhOWM2Li4xYzA3MGFlN2JmMTcwIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY2dyb3VwLmMKQEAgLTgxMSwxMCAmIzQzOzgxMSwxMyBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCwKIHsKIAl1MzIgc2F2ZWRfZmxhZ3MgPSAoZmxhZ3MgJmFtcDsgKEJQRl9GX0FMTE9XX09WRVJSSURFIHwgQlBGX0ZfQUxMT1dfTVVMVEkpKTsKIAlzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nID0gTlVMTDsKJiM0MzsJc3RydWN0IGJwZl9jZ3JvdXBfbGluayAqb2xkX2xpbmsgPSBOVUxMOwogCXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwogCXN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTsKJiM0MzsJc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqb2xkX3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9OwogCXN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiBsaW5rLSZndDtsaW5rLnByb2c7CiAJZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlOwomIzQzOwl1MzIgb2xkX2ZsYWdzLCBvbGRfcGxfZmxhZ3M7CiAJc3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsOwogCXN0cnVjdCBobGlzdF9oZWFkICpwcm9nczsKIAlpbnQgZXJyOwpAQCAtODY1LDYgJiM0Mzs4NjgsOSBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCwKIAogCWlmIChwbCkgewogCQlvbGRfcHJvZyA9IHBsLSZndDtwcm9nOwomIzQzOwkJb2xkX2xpbmsgPSBwbC0mZ3Q7bGluazsKJiM0MzsJCW9sZF9wbF9mbGFncyA9IHBsLSZndDtmbGFnczsKJiM0MzsJCWJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKG9sZF9zdG9yYWdlLCBwbC0mZ3Q7c3RvcmFnZSk7CiAJfSBlbHNlIHsKIAkJcGwgPSBrbWFsbG9jX29iaigqcGwpOwogCQlpZiAoIXBsKSB7CkBAIC04ODQsNiAmIzQzOzg5MCw3IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCXBsLSZndDtsaW5rID0gbGluazsKIAlwbC0mZ3Q7ZmxhZ3MgPSBmbGFnczsKIAlicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC0mZ3Q7c3RvcmFnZSwgc3RvcmFnZSk7CiYjNDM7CW9sZF9mbGFncyA9IGNncnAtJmd0O2JwZi5mbGFnc1thdHlwZV07CiAJY2dycC0mZ3Q7YnBmLmZsYWdzW2F0eXBlXSA9IHNhdmVkX2ZsYWdzOwogCiAJaWYgKHR5cGUgPT0gQlBGX0xTTV9DR1JPVVApIHsKQEAgLTkxMiwxNSAmIzQzOzkxOSwxOCBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCwKIAkJYnBmX3RyYW1wb2xpbmVfdW5saW5rX2Nncm91cF9zaGltKG5ld19wcm9nKTsKIAogY2xlYW51cDoKLQlpZiAob2xkX3Byb2cpIHsKJiM0MzsJaWYgKG9sZF9wcm9nIHx8IG9sZF9saW5rKSB7CiAJCXBsLSZndDtwcm9nID0gb2xkX3Byb2c7Ci0JCXBsLSZndDtsaW5rID0gTlVMTDsKJiM0MzsJCXBsLSZndDtsaW5rID0gb2xkX2xpbms7CiYjNDM7CQlwbC0mZ3Q7ZmxhZ3MgPSBvbGRfcGxfZmxhZ3M7CiYjNDM7CQlicGZfY2dyb3VwX3N0b3JhZ2VzX2Fzc2lnbihwbC0mZ3Q7c3RvcmFnZSwgb2xkX3N0b3JhZ2UpOwogCX0KIAlicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2UpOwotCWlmICghb2xkX3Byb2cpIHsKJiM0MzsJaWYgKCFvbGRfcHJvZyAmYW1wOyZhbXA7ICFvbGRfbGluaykgewogCQlobGlzdF9kZWwoJmFtcDtwbC0mZ3Q7bm9kZSk7CiAJCWtmcmVlKHBsKTsKIAl9CiYjNDM7CWNncnAtJmd0O2JwZi5mbGFnc1thdHlwZV0gPSBvbGRfZmxhZ3M7CiAJcmV0dXJuIGVycjsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzA1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUgdGhhdCB0d2Vha3MgYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBJbW1lZGlhdGVseSwgbXkgYXR0ZW50aW9uIGdvZXMgdG8gdGhlIGBfX2Nncm91cF9icGZfYXR0YWNoYCBmdW5jdGlvbiwgYXMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY2hhbmdlcyBhcmUgZm9jdXNlZC4gSXQgc291bmRzIGxpa2UgdGhleSYjMzk7dmUgYWRkcmVzc2VkIGFuIGVycm9yIGNvbmRpdGlvbiB3aXRoaW4gYF9fY2dyb3VwX2JwZl9hdHRhY2hgLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3JlIGNsZWFuaW5nIHVwIGFmdGVyIGEgZmFpbGVkIGBicGZfY2dyb3VwX2xpbmtgIGF0dGFjaG1lbnQgYnkgcmVzdG9yaW5nIHRoZSBwcmV2aW91cyBzdGF0ZTogYG9sZF9saW5rYCwgYG9sZF9wbF9mbGFnc2AsIGBvbGRfc3RvcmFnZWAsIGFuZCBgb2xkX2ZsYWdzYC4gVGhhdCYjMzk7cyBnb29kOyBlcnJvciBoYW5kbGluZyBpcyBjcnVjaWFsIGluIEJQRiwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjZ3JvdXAgYXR0YWNobWVudHMg4oCTIHdlIGRvbiYjMzk7dCB3YW50IGFueSBsaW5nZXJpbmcsIGluY29uc2lzdGVudCBzdGF0ZS4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgaXRzZWxmLiBUaGlzIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGZ1bmN0aW9uOyBpdCYjMzk7cyB0aGUgY29yZSBvZiBob3cgQlBGIHByb2dyYW1zIGdldCBob29rZWQgaW50byBjZ3JvdXBzLiBHaXZlbiB0aGF0LCB0aGlzIHBhdGNoIGlzIGNlcnRhaW5seSBpbXBhY3RmdWwgYW5kIHRoZSBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHRoZSBtYWlubGluZSBrZXJuZWwuIFdlIHdhbnQgdG8gYmUgc3VyZSB0aGlzIGZpeGVzIHRoZSBlcnJvciBwcm9wZXJseS4KCkJlZm9yZSBkaWdnaW5nIGRlZXBlciwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNvbmZpZy4gU3BlY2lmaWNhbGx5LCB0aGUgY29tcGlsYXRpb24gb2YgYGtlcm5lbC9icGYvY2dyb3VwLmNgIHJlbGllcyBvbiBgQ09ORklHX0NHUk9VUF9CUEZgLiBJJiMzOTtsbCB3YW50IHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMgaW5kZWVkIGVuYWJsZWQgaW4gdGhlIHJlbGV2YW50IGJ1aWxkLiBJZiB0aGlzIGlzbiYjMzk7dCBjb25maWd1cmVkLCB0aGUgY2hhbmdlcyBhcmUgaXJyZWxldmFudCB0byB0aGUgdGFyZ2V0IGtlcm5lbCBidWlsZCBhbmQgSSBkb24mIzM5O3QgbmVlZCB0byBwdXJzdWUgdGhpcyBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MzU9ZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzY6b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICYjNDM7PSBjZ3JvdXAub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zNy1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciB0aGlzIGlzIGRlZmluaXRlbHkgYENPTkZJR19DR1JPVVBfQlBGYC4gR290IGl0LgoKKipGb2N1c2luZyBvbiBjZ3JvdXAgQlBGIEF0dGFjaG1lbnRzKioKCk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZC4gQWgsIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBJJiMzOTttIGxvb2tpbmcgYXQgaXMgYF9fY2dyb3VwX2JwZl9hdHRhY2hgLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sg4oCTIGlzIGl0IGEgc3RhdGljIGZ1bmN0aW9uPyBZZXAsIGBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCwgLi4uKWAgY29uZmlybXMgaXQuIE5leHQgc3RlcDogdW5kZXJzdGFuZCBpdHMgY2FsbCBncmFwaC4gV2hhdCBmdW5jdGlvbnMgYWN0dWFsbHkgaW52b2tlIGBfX2Nncm91cF9icGZfYXR0YWNoYD8gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGVyZSB0byBmdWxseSBncmFzcCB0aGUgY29udHJvbCBmbG93IGFuZCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2Nncm91cF9icGZfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTc3MT1zdGF0aWMgaW50IGluc2VydF9wbF90b19obGlzdChzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGwsIHN0cnVjdCBobGlzdF9oZWFkICpwcm9ncyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc5MS0vKipcbmtlcm5lbC9icGYvY2dyb3VwLmM6NzkyOiAqIF9fY2dyb3VwX2JwZl9hdHRhY2goKSAtIEF0dGFjaCB0aGUgcHJvZ3JhbSBvciB0aGUgbGluayB0byBhIGNncm91cCwgYW5kXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc5My0gKiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGUgdGhlIGNoYW5nZSB0byBkZXNjZW5kYW50c1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtODA1LSAqL1xua2VybmVsL2JwZi9jZ3JvdXAuYzo4MDY6c3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTgwNy1cdFx0XHQgICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3Byb2cgKnJlcGxhY2VfcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTkzNz1zdGF0aWMgaW50IGNncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy05NDUtXHRjZ3JvdXBfbG9jaygpO1xua2VybmVsL2JwZi9jZ3JvdXAuYzo5NDY6XHRyZXQgPSBfX2Nncm91cF9icGZfYXR0YWNoKGNncnAsIHByb2csIHJlcGxhY2VfcHJvZywgbGluaywgdHlwZSwgZmxhZ3MsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0Ny1cdFx0XHRcdCAgaWRfb3JfZmQsIHJldmlzaW9uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTMzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBjZ3JvdXBfYnBmX2F0dGFjaGAgRnVuY3Rpb24qKgoKT2theSwgc28gdGhlIHBvaW50IG9mIGVudHJ5IGlzIGBjZ3JvdXBfYnBmX2F0dGFjaGAuIE1ha2VzIHNlbnNlOyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBCUEYgbWFnaWMgaXMgbGlrZWx5IGhhcHBlbmluZyBmb3IgdGhpcyBjZ3JvdXAgaW50ZXJhY3Rpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgY2dyb3VwX2JwZl9hdHRhY2hgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNpZ25hdHVyZSwgd2hhdCBhcmd1bWVudHMgaXQgdGFrZXMsIGFuZCAqY3J1Y2lhbGx5KiB3aGF0IGl0JiMzOTtzIGRvaW5nIHVuZGVyIHRoZSBob29kLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIHdhbnQgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY2dyb3VwIGhpZXJhcmNoeSwgaG93IGl0IGhhbmRsZXMgdGhlIEJQRiBwcm9ncmFtIGxvYWRpbmcgKGlmIHRoYXQmIzM5O3Mgd2hlcmUgaXQgaGFwcGVucyksIGFueSBzZWN1cml0eSBjaGVja3MsIGFuZCBob3cgaXQgbGlua3MgdGhlIHByb2dyYW0gdG8gdGhlIGNncm91cC4gSXQmIzM5O3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGF0dGFjaGluZyB0aGUgcHJvZ3JhbSwgYnV0IEkgbmVlZCB0aGUgZGV0YWlscy4gSSBleHBlY3QgdGhlcmUgaXMgYSBsb3Qgb2YgbnVhbmNlIGFyb3VuZCByZXNvdXJjZSBsaW1pdHMvYWNjb3VudGluZyB0aGF0IG5lZWRzIHRvIGJlIHNjcnV0aW5pemVkLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nncm91cF9icGZfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTY1PXN0YXRpYyBzdHJ1Y3QgY2dyb3VwX2xzbV9hdHlwZSBjZ3JvdXBfbHNtX2F0eXBlW0NHUk9VUF9MU01fTlVNXTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtNjYtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjY3OnN0YXRpYyBib29sIGNncm91cF9icGZfaG9va19yZXR1cm5zX2Vycm5vKGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSlcbmtlcm5lbC9icGYvY2dyb3VwLmMtNjgte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtNzMtI2Vsc2Vcbmtlcm5lbC9icGYvY2dyb3VwLmM6NzQ6c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9ob29rX3JldHVybnNfZXJybm8oZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy03NS17XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz04ND1icGZfcHJvZ19ydW5fYXJyYXlfY2coY29uc3Qgc3RydWN0IGNncm91cF9icGYgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjg1Olx0XHQgICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTg2LVx0XHQgICAgICBjb25zdCB2b2lkICpjdHgsIGJwZl9wcm9nX3J1bl9mbiBydW5fcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE2Mj11bnNpZ25lZCBpbnQgX19jZ3JvdXBfYnBmX3J1bl9sc21fY3VycmVudChjb25zdCB2b2lkICpjdHgsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xODEtI2lmZGVmIENPTkZJR19CUEZfTFNNXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE4MjpzdGF0aWMgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE4My1icGZfY2dyb3VwX2F0eXBlX2ZpbmQoZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsIHUzMiBhdHRhY2hfYnRmX2lkKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTg5LVx0aWYgKGF0dGFjaF90eXBlICE9IEJQRl9MU01fQ0dST1VQKVxua2VybmVsL2JwZi9jZ3JvdXAuYzoxOTA6XHRcdHJldHVybiB0b19jZ3JvdXBfYnBmX2F0dGFjaF90eXBlKGF0dGFjaF90eXBlKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTkxLVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MjIwPXZvaWQgYnBmX2Nncm91cF9hdHlwZV9wdXQoaW50IGNncm91cF9hdHlwZSlcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTIzMi0jZWxzZVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyMzM6c3RhdGljIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZVxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMzQtYnBmX2Nncm91cF9hdHlwZV9maW5kKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLCB1MzIgYXR0YWNoX2J0Zl9pZClcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTIzNi1cdGlmIChhdHRhY2hfdHlwZSAhPSBCUEZfTFNNX0NHUk9VUClcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjM3Olx0XHRyZXR1cm4gdG9fY2dyb3VwX2JwZl9hdHRhY2hfdHlwZShhdHRhY2hfdHlwZSk7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTIzOC1cdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTQyND1zdGF0aWMgYm9vbCBoaWVyYXJjaHlfYWxsb3dzX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxua2VybmVsL2JwZi9jZ3JvdXAuYzo0MjU6XHRcdFx0XHQgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy00MjYte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9NDUzPXN0YXRpYyBpbnQgY29tcHV0ZV9lZmZlY3RpdmVfcHJvZ3Moc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmM6NDU0Olx0XHRcdFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxua2VybmVsL2JwZi9jZ3JvdXAuYy00NTUtXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKiphcnJheSlcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTUxMT1zdGF0aWMgdm9pZCBhY3RpdmF0ZV9lZmZlY3RpdmVfcHJvZ3Moc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmM6NTEyOlx0XHRcdFx0ICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTUxMy1cdFx0XHRcdCAgICAgc3RydWN0IGJwZl9wcm9nX2FycmF5ICpvbGRfYXJyYXkpXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz01OTE9c3RhdGljIGludCB1cGRhdGVfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjU5MjpcdFx0XHRcdCAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy01OTMte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkxLS8qKlxua2VybmVsL2JwZi9jZ3JvdXAuYzo3OTI6ICogX19jZ3JvdXBfYnBmX2F0dGFjaCgpIC0gQXR0YWNoIHRoZSBwcm9ncmFtIG9yIHRoZSBsaW5rIHRvIGEgY2dyb3VwLCBhbmRcbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkzLSAqICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZSB0aGUgY2hhbmdlIHRvIGRlc2NlbmRhbnRzXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDUtICovXG5rZXJuZWwvYnBmL2Nncm91cC5jOjgwNjpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtODA3LVx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfcHJvZyAqcmVwbGFjZV9wcm9nLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtODE4LVx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyA9IHByb2cgPyA6IGxpbmstXHUwMDNlbGluay5wcm9nO1xua2VybmVsL2JwZi9jZ3JvdXAuYzo4MTk6XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTgyMC1cdHUzMiBvbGRfZmxhZ3MsIG9sZF9wbF9mbGFncztcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTkzNi1cbmtlcm5lbC9icGYvY2dyb3VwLmM6OTM3OnN0YXRpYyBpbnQgY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTM4LVx0XHRcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3Byb2cgKnJlcGxhY2VfcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0NS1cdGNncm91cF9sb2NrKCk7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjk0NjpcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTQ3LVx0XHRcdFx0ICBpZF9vcl9mZCwgcmV2aXNpb24pO1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9OTUyPXN0YXRpYyBpbnQgZWZmZWN0aXZlX3Byb2dfcG9zKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjk1MzpcdFx0XHQgICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk1NC1cdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqdGFyZ2V0X3BsKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTAwND1zdGF0aWMgdm9pZCByZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMDU6XHRcdFx0XHQgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMDYtXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGwpXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMDQxPXN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNDQte1xua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDQ1Olx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ2LVx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExNDE9c3RhdGljIHZvaWQgcHVyZ2VfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTE0MjpcdFx0XHRcdCAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTQzLXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExODI9c3RhdGljIGludCBfX2Nncm91cF9icGZfZGV0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTExODUte1xua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTg2Olx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTg3LVx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEyNTc9c3RhdGljIGludCBfX2Nncm91cF9icGZfcXVlcnkoc3RydWN0IGNncm91cCAqY2dycCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMjYzLVx0ZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSA9IGF0dHItXHUwMDNlcXVlcnkuYXR0YWNoX3R5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjEyNjQ6XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgZnJvbV9hdHlwZSwgdG9fYXR5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjEyNjU6XHRlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTEyNjYtXHRzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKmVmZmVjdGl2ZTtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEyODMtXHR9IGVsc2Uge1xua2VybmVsL2JwZi9jZ3JvdXAuYzoxMjg0Olx0XHRmcm9tX2F0eXBlID0gdG9fY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSh0eXBlKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTI4NS1cdFx0aWYgKGZyb21fYXR5cGUgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMzczPWludCBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTM5Mi1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTM5MzpcdHJldCA9IGNncm91cF9icGZfYXR0YWNoKGNncnAsIHByb2csIHJlcGxhY2VfcHJvZywgTlVMTCxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTM5NC1cdFx0XHRcdGF0dHItXHUwMDNlYXR0YWNoX3R5cGUsIGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTUyNT1pbnQgY2dyb3VwX2JwZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTU1My1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTU1NDpcdGVyciA9IGNncm91cF9icGZfYXR0YWNoKGNncnAsIE5VTEwsIE5VTEwsIGxpbmssXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1NTUtXHRcdFx0XHRsaW5rLVx1MDAzZWxpbmsuYXR0YWNoX3R5cGUsIEJQRl9GX0FMTE9XX01VTFRJIHwgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5mbGFncyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE2MDk9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NrYihzdHJ1Y3Qgc29jayAqc2ssXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE2MTAtXHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNjExOlx0XHRcdFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNjEyLXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE2ODc9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NrKHN0cnVjdCBzb2NrICpzayxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTY4ODpcdFx0XHQgICAgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNjg5LXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE3MTU9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfYWRkcihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzE3LVx0XHRcdFx0ICAgICAgaW50ICp1YWRkcmxlbixcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTcxODpcdFx0XHRcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTcxOS1cdFx0XHRcdCAgICAgIHZvaWQgKnRfY3R4LFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc2OT1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc29ja19vcHMoc3RydWN0IHNvY2sgKnNrLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzcwLVx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKnNvY2tfb3BzLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNzcxOlx0XHRcdFx0ICAgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3NzIte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc4MD1pbnQgX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKHNob3J0IGRldl90eXBlLCB1MzIgbWFqb3IsIHUzMiBtaW5vcixcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc4MTpcdFx0XHRcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzgyLXtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE5Mzc9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE5MzktXHRcdFx0XHQgICBjaGFyICoqYnVmLCBzaXplX3QgKnBjb3VudCwgbG9mZl90ICpwcG9zLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxOTQwOlx0XHRcdFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xOTQxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDI4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgRXhwbG9yYXRpb24gaW50byBCUEYgQXR0YWNobWVudCBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBob3cgQlBGIHByb2dyYW1zIGdldCBhdHRhY2hlZCB0byBjZ3JvdXBzLiBUaGUgY29yZSBvZiB0aGlzLCBmcm9tIHRoZSBzeXN0ZW0gY2FsbCBwZXJzcGVjdGl2ZSwgYXBwZWFycyB0byBiZSBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYC4gVGhlc2UgYXJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gZXhhbWluZSwgYXMgdGhleSYjMzk7cmUgZGlyZWN0bHkgY2FsbGVkIGZyb20gdGhlIGBicGZgIHN5c2NhbGwuIEZvY3VzaW5nIG9uIHRoZXNlIHR3byBzeW1ib2xzIHNlZW1zIGxpa2UgdGhlIHJpZ2h0IGFwcHJvYWNoIHRvIHVuZGVyc3RhbmQgdGhlIGF0dGFjaG1lbnQgcHJvY2Vzcy4KCk5vdywgYmVmb3JlIEkgZGlnIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIGV4cGVjdCBgQ09ORklHX0NHUk9VUF9CUEZgIHRvIGJlIHRoZSBrZXkgc2V0dGluZyB0aGF0IGVuYWJsZXMgYWxsIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQmIzM5O3MgZW5hYmxlZCBhbmQgY2hlY2sgZm9yIGFueSByZWxhdGVkLCBwb3NzaWJseSBtb3JlIGdyYW51bGFyLCBvcHRpb25zLgoKTmV4dCBzdGVwOiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGFuZCB0YWtlIGEgY2xvc2UgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGJvdGggYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGFuZCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvbiB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgaG93IHRoZSBhdHRhY2htZW50IGhhcHBlbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nncm91cF9icGZfcHJvZ19hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz00NjM0PXN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ2NjktXHRpZiAoaXNfY2dyb3VwX3Byb2dfdHlwZShwdHlwZSwgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSwgdHJ1ZSkpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ2NzA6XHRcdHJldCA9IGNncm91cF9icGZfcHJvZ19hdHRhY2goYXR0ciwgcHR5cGUsIHByb2cpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNDY3MS1cdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5ODkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91JiMzOTt2ZSBkZXNjcmliZWQ6CgoqKkRlbHZpbmcgaW50byBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAgZnVuY3Rpb24uIFRoaW5raW5nIGFib3V0IGl0LCB0aGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IGRlc2NyaXB0aXZlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCAqYXR0YWNoaW5nKiBhIEJQRiBwcm9ncmFtIHRvIGEgY2dyb3VwICpsaW5rKiwgeWVhaD8gT2theSwgc28gdGhhdCBsaW5rIHJlcHJlc2VudHMgdGhlIGNvbm5lY3Rpb24sIHRoZSBwb2ludCBvZiBpbnRlcmFjdGlvbiwgYmV0d2VlbiBvdXIgQlBGIHByb2dyYW0gYW5kIHRoZSBjZ3JvdXAgaGllcmFyY2h5LgoKV2hhdCYjMzk7cyByZWFsbHkgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QgaGVyZT8gSSYjMzk7bSBwaWN0dXJpbmcgdGhlIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXM7IHdlJiMzOTt2ZSBnb3QgdGhlIGNncm91cCwgd2hpY2ggb3JnYW5pemVzIHJlc291cmNlcywgYW5kIHRoZSBCUEYgcHJvZ3JhbSwgd2hpY2ggaXMgdGhlIGNvZGUgd2Ugd2FudCB0byBleGVjdXRlLiBUaGUgbGluayBpcyB0aGUgYnJpZGdlLCB0aGUgbWVjaGFuaXNtIGJ5IHdoaWNoIHRoZSBCUEYgcHJvZ3JhbSBrbm93cyAqd2hpY2gqIGNncm91cCBpdCYjMzk7cyBpbmZsdWVuY2luZy4KClRoZSBhdHRhY2htZW50IHByb2Nlc3MgaGFzIHRvIGNvbnNpZGVyIGEgbG90IG9mIHRoaW5ncy4gRXJyb3IgaGFuZGxpbmcgaXMgcGFyYW1vdW50LCBvZiBjb3Vyc2UuIFdlIG5lZWQgdG8gdmFsaWRhdGUgdGhhdCB0aGUgQlBGIHByb2dyYW0gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjZ3JvdXAmIzM5O3MgY29udGV4dCwgbWFraW5nIHN1cmUgdGhlIGF0dGFjaG1lbnQgaXMgYWN0dWFsbHkgKmFsbG93ZWQqIGFuZCB0aGF0IG91ciBCUEYgcHJvZ3JhbSBjYW4gc2FmZWx5IGJlIGF0dGFjaGVkLiBXZSBuZWVkIHRvIGhhbmRsZSBhbnkgcmFjZSBjb25kaXRpb25zLCB0b28uIAoKQW5kLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgb2YgdGhlIGVkZ2UgY2FzZXMuIFdoYXQgaWYgdGhlIGNncm91cCBnZXRzIGRlbGV0ZWQgd2hpbGUgYSBwcm9ncmFtIGlzIGF0dGFjaGVkPyBXaGF0IGFib3V0IHJlc291cmNlIGxpbWl0YXRpb25zIGluIHRoZSBCUEYgVk0gaXRzZWxmPyBUaGUgbG9naWMgaXMgYWxsIGFib3V0IHNldHRpbmcgdXAgdGhpcyBsaW5rIHNhZmVseSwgc2V0dGluZyBpdCB1cCBpbiBhIHdheSB0aGF0IGRvZXNuJiMzOTt0IGRlc3RhYmlsaXplIHRoZSBzeXN0ZW0sIGFuZCBtYWtpbmcgaXQgc28gdGhhdCB0aGVzZSB0d28gcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgYWJsZSB0byB3b3JrIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9NTg0ND1zdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODcxLVx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLT1BUOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg3MjpcdFx0cmV0ID0gY2dyb3VwX2JwZl9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4NzMtXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4OTItXHRcdGVsc2UgaWYgKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX0xTTV9DR1JPVVApXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1ODkzOlx0XHRcdHJldCA9IGNncm91cF9icGZfbGlua19hdHRhY2goYXR0ciwgcHJvZyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk0LVx0XHRlbHNlIGlmIChpc190cmFjaW5nX211bHRpKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjE1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBLZXJuZWwgQlBGIEF0dGFjaG1lbnQgUG9pbnRzKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyBCUEYgcHJvZ3JhbXMgZ2V0IGF0dGFjaGVkIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBjZ3JvdXBzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGVzZSBhdHRhY2htZW50cy4gTXkgaW5pdGlhbCB0aGlua2luZyBpcyB0aGF0IGBicGZfcHJvZ19hdHRhY2hgIGFuZCBgbGlua19jcmVhdGVgIGFyZSB0aGUgKnN5c3RlbSBjYWxsIGhhbmRsZXJzKiDigJMgdGhleSBhcmUgdGhlIGxvd2VzdCBsZXZlbCB0aGF0IHRoZSB1c2Vyc3BhY2UgdG9vbHMgaW50ZXJhY3Qgd2l0aC4KCkhvd2V2ZXIsIEkmIzM5O20gbW9yZSBpbnRlcmVzdGVkIGluIHRoZSBjZ3JvdXAtc3BlY2lmaWMgZnVuY3Rpb25zLiBUaGVyZWZvcmUsIEkgYmVsaWV2ZSB0aGUgbW9yZSByZWxldmFudCBzeW1ib2xzIGhlcmUgYXJlIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBhdCB0aGUgY2dyb3VwIGxldmVsLgoKTm93LCBJJiMzOTttIGN1cmlvdXMgaWYgYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHZpc2liaWxpdHkgYW5kIHNjb3BlIHdpdGhpbiB0aGUga2VybmVsIGNvZGUuIExldCBtZSBjaGVjay4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTEzNjI9c3RhdGljIGludCBjZ3JvdXBfYnBmX3F1ZXJ5KHN0cnVjdCBjZ3JvdXAgKmNncnAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTM3Mi1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTM3MzppbnQgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTM3NC1cdFx0XHQgICBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA2NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRHluYW1pYyBOYXR1cmUgb2YgdGhlIFNpdHVhdGlvbioqCgpBbHJpZ2h0LCB0aGlzIGlzbiYjMzk7dCBhIHN0YXRpYyBzaXR1YXRpb24sIG5vdCBieSBhbnkgc3RyZXRjaCBvZiB0aGUgaW1hZ2luYXRpb24uIFNvbWV0aGluZyYjMzk7cyBkZWZpbml0ZWx5IGluIGZsdXgsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBtZWNoYW5pc21zIGF0IHBsYXkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBjcml0aWNhbCBmdW5jdGlvbiByZWxhdGVkIHRvIEJQRiBhbmQgY2dyb3Vwcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgYGNncm91cF9icGZfbGlua19hdHRhY2hgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgYSBwcmltZSBzcG90IHRvIGluc3BlY3Qgd2hhdOKAmXMgYWN0dWFsbHkgY2hhbmdpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nncm91cF9icGZfbGlua19hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmM9MTUwOT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfY2dyb3VwX2xpbmtfbG9wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1MjQtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE1MjU6aW50IGNncm91cF9icGZfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTUyNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNzAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBDR1JPVVBfQlBGYCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoaXMgaXNuJiMzOTt0IGEgc2ltcGxlLCBmaXhlZCBzaXR1YXRpb24uIE15IG1pbmQgaW1tZWRpYXRlbHkgcmVjb2duaXplcyB0aGF0IHRoaW5ncyBhcmUgZHluYW1pYyBoZXJlLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjcml0aWNhbCBzeW1ib2xzIGluIHRoaXMgaW50ZXJhY3Rpb24uIFRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGNsZWFybHkgYENHUk9VUF9CUEZgLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSBpZiBgQ0dST1VQX0JQRmAgcmVsaWVzIG9uIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgb3ZlcnZpZXcgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENHUk9VUF9CUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEzNDE9Y29uZmlnIENHUk9VUF9QRVJGXG4tLVxuaW5pdC9LY29uZmlnLTEzNTEtXG5pbml0L0tjb25maWc6MTM1Mjpjb25maWcgQ0dST1VQX0JQRlxuaW5pdC9LY29uZmlnLTEzNTMtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Njg2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENHUk9VUF9CUEYgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQ0dST1VQX0JQRmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSBhbGwgdGhlIHRoaW5ncyB0aGlzIHRoaW5nIHRvdWNoZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMg4oCTIGJvdGggdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0uIEkgd2FudCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQga25vd2luZyBpZiBzb21lIG90aGVyIGNvbmZpZyBvcHRpb24gaXMgcmVxdWlyZWQgdG8gZW5hYmxlIGl0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSAqaW1wYWN0Ki4gV2hhdCBtb2R1bGVzIG9yIGZlYXR1cmVzIGNyaXRpY2FsbHkgcmVseSBvbiBgQ0dST1VQX0JQRmA/IEhvdyBkZWVwbHkgaXMgaXQgaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgYXJjaGl0ZWN0dXJlPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY29uZmxpY3RzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiwgcGVyaGFwcyB3aXRoIG90aGVyIGVCUEYtcmVsYXRlZCBmZWF0dXJlcyBvciBleGlzdGluZyBjZ3JvdXAgaW1wbGVtZW50YXRpb25zPyBJIG5lZWQgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIGRlcGVuZGVuY3kgZ3JhcGggaW4gbXkgaGVhZC4gRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIG1lbnRhbGx5IG1hcCBvdXQgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbS4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHRoYXQgbWlnaHQgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvci4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzUwOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEzNTE6XHRcbjEzNTI6XHRjb25maWcgQ0dST1VQX0JQRlxuMTM1MzpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcJiMzNDtcbjEzNTQ6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbjEzNTU6XHRcdHNlbGVjdCBTT0NLX0NHUk9VUF9EQVRBXG4xMzU2Olx0XHRoZWxwXG4xMzU3Olx0XHQgIEFsbG93IGF0dGFjaGluZyBlQlBGIHByb2dyYW1zIHRvIGEgY2dyb3VwIHVzaW5nIHRoZSBicGYoMilcbjEzNTg6XHRcdCAgc3lzY2FsbCBjb21tYW5kIEJQRl9QUk9HX0FUVEFDSC5cbjEzNTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwOTkKCQkJCQkJCW91dHB1dDogMTUyCgkJCQkJCQl0aG91Z2h0czogMjQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgY2hhbmdlIGhpbmdlcyBvbiBgQlBGX1NZU0NBTExgLCB0aGF0JiMzOTtzIHRoZSBrZXkuIEFuZCB0byBiZSBwcmVjaXNlIGFib3V0IGRlcGVuZGVuY2llcywgYENHUk9VUF9CUEZgIGlzIGFub3RoZXIgaW1wb3J0YW50IGNvbmZpZy4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW52b2x2ZWQ7IGJldHRlciBzYWZlIHRoYW4gc29ycnkuCgpSaWdodCwgdGhlIHBhdGNoIG1vZGlmaWVzIGBrZXJuZWwvYnBmL2Nncm91cC5jYC4gQWgsIGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBmaXgsIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIGFuIGVycm9yIHBhdGggd2l0aGluIGBfX2Nncm91cF9icGZfYXR0YWNoYC4gU2luY2UgaXQgZGVhbHMgd2l0aCBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyBpbiB0aGUgQlBGIGF0dGFjaG1lbnQgcHJvY2VzcyB0byBjZ3JvdXBzLCB0aGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gZXhlcmNpc2UgdGhpcyBlcnJvciBwYXRoIGFuZCB2ZXJpZnkgdGhlIGZpeC4KCk15IGZvY3VzIGhhcyB0byBiZSBvbiB0aGVzZSBzeW1ib2xzOiBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gcHJvZ3JhbSBhbmQgbGluayBhdHRhY2htZW50LgoKU28sIGp1c3QgdG8gYmUgY3J5c3RhbCBjbGVhcjogdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgQ0dST1VQX0JQRmAgYW5kIGBCUEZfU1lTQ0FMTGAuCgpUaGUgY29yZSByZWFzb25pbmcgaGVyZSBpcyB0aGF0IHRoaXMgcGF0Y2ggcmVwYWlycyBhIGZsYXcgd2l0aGluIGBfX2Nncm91cF9icGZfYXR0YWNoYCAtIGEgZnVuY3Rpb24gdml0YWwgZm9yIEJQRiBwcm9ncmFtIGFuZCBsaW5rIGF0dGFjaG1lbnQgdG8gY2dyb3Vwcy4gSXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsLiBTbyB3ZSBoYXZlIHRvIHNwZWNpZmljYWxseSBwcm9iZSB0aGlzIHBhdGggYW5kIGZ1enogdGhpcyBhcmVhLiBUaGUgb2JqZWN0aXZlIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IGVycm9ycyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuIFdlIG5lZWQgdG8gcGF5IHNwZWNpYWwgYXR0ZW50aW9uIHRvIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgIHdoZW4gZGV2ZWxvcGluZyBmdXp6aW5nIGNvdmVyYWdlLgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nncm91cF9icGZfcHJvZ19hdHRhY2gmIzM0OywKICAgICYjMzQ7Y2dyb3VwX2JwZl9saW5rX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgd2hlbiBhdHRhY2hpbmcgYSBCUEYgcHJvZ3JhbSBvciBsaW5rIHRvIGEgY2dyb3VwLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGF0dGFjaGluZyBCUEYgcHJvZ3JhbXMgdG8gY2dyb3Vwcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGFuZCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2Nncm91cF9icGZfbGlua19hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGVycm9yIHBhdGggb2YgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIHdoZW4gYXR0YWNoaW5nIGEgQlBGIHByb2dyYW0gb3IgbGluayB0byBhIGNncm91cC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgd2hlbiBhdHRhY2hpbmcgQlBGIHByb2dyYW1zIHRvIGNncm91cHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6Mjc6MTkuNzIxMjYxNjQ0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1NDMxNjU0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoXCIsXG4gICAgXCJjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGVycm9yIHBhdGggb2YgYF9fY2dyb3VwX2JwZl9hdHRhY2hgIHdoZW4gYXR0YWNoaW5nIGEgQlBGIHByb2dyYW0gb3IgbGluayB0byBhIGNncm91cC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgd2hlbiBhdHRhY2hpbmcgQlBGIHByb2dyYW1zIHRvIGNncm91cHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToyNzoxOS43MjEyNzQyNzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDMzMzc1NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyNDVkMmZiZWI2MGUwZGY0OWFmNzVlM2VkZjliOTU5MzQzN2E3NzY2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDI5IDE1OjI3OjE4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXFxuaW5kZXggNDM1NWNjYjc4YTljNi4uMWMwNzBhZTdiZjE3MCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXFxuKysrIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xcbkBAIC04MTEsMTAgKzgxMSwxMyBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4ge1xcbiBcXHR1MzIgc2F2ZWRfZmxhZ3MgPSAoZmxhZ3MgXFx1MDAyNiAoQlBGX0ZfQUxMT1dfT1ZFUlJJREUgfCBCUEZfRl9BTExPV19NVUxUSSkpO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nID0gTlVMTDtcXG4rXFx0c3RydWN0IGJwZl9jZ3JvdXBfbGluayAqb2xkX2xpbmsgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcXG4gXFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbitcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpvbGRfc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiBsaW5rLVxcdTAwM2VsaW5rLnByb2c7XFxuIFxcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTtcXG4rXFx0dTMyIG9sZF9mbGFncywgb2xkX3BsX2ZsYWdzO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGw7XFxuIFxcdHN0cnVjdCBobGlzdF9oZWFkICpwcm9ncztcXG4gXFx0aW50IGVycjtcXG5AQCAtODY1LDYgKzg2OCw5IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbiBcXG4gXFx0aWYgKHBsKSB7XFxuIFxcdFxcdG9sZF9wcm9nID0gcGwtXFx1MDAzZXByb2c7XFxuK1xcdFxcdG9sZF9saW5rID0gcGwtXFx1MDAzZWxpbms7XFxuK1xcdFxcdG9sZF9wbF9mbGFncyA9IHBsLVxcdTAwM2VmbGFncztcXG4rXFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVxcdTAwM2VzdG9yYWdlKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0cGwgPSBrbWFsbG9jX29iaigqcGwpO1xcbiBcXHRcXHRpZiAoIXBsKSB7XFxuQEAgLTg4NCw2ICs4OTAsNyBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4gXFx0cGwtXFx1MDAzZWxpbmsgPSBsaW5rO1xcbiBcXHRwbC1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG4gXFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIHN0b3JhZ2UpO1xcbitcXHRvbGRfZmxhZ3MgPSBjZ3JwLVxcdTAwM2VicGYuZmxhZ3NbYXR5cGVdO1xcbiBcXHRjZ3JwLVxcdTAwM2VicGYuZmxhZ3NbYXR5cGVdID0gc2F2ZWRfZmxhZ3M7XFxuIFxcbiBcXHRpZiAodHlwZSA9PSBCUEZfTFNNX0NHUk9VUCkge1xcbkBAIC05MTIsMTUgKzkxOSwxOCBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG4gXFx0XFx0YnBmX3RyYW1wb2xpbmVfdW5saW5rX2Nncm91cF9zaGltKG5ld19wcm9nKTtcXG4gXFxuIGNsZWFudXA6XFxuLVxcdGlmIChvbGRfcHJvZykge1xcbitcXHRpZiAob2xkX3Byb2cgfHwgb2xkX2xpbmspIHtcXG4gXFx0XFx0cGwtXFx1MDAzZXByb2cgPSBvbGRfcHJvZztcXG4tXFx0XFx0cGwtXFx1MDAzZWxpbmsgPSBOVUxMO1xcbitcXHRcXHRwbC1cXHUwMDNlbGluayA9IG9sZF9saW5rO1xcbitcXHRcXHRwbC1cXHUwMDNlZmxhZ3MgPSBvbGRfcGxfZmxhZ3M7XFxuK1xcdFxcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLVxcdTAwM2VzdG9yYWdlLCBvbGRfc3RvcmFnZSk7XFxuIFxcdH1cXG4gXFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTtcXG4tXFx0aWYgKCFvbGRfcHJvZykge1xcbitcXHRpZiAoIW9sZF9wcm9nIFxcdTAwMjZcXHUwMDI2ICFvbGRfbGluaykge1xcbiBcXHRcXHRobGlzdF9kZWwoXFx1MDAyNnBsLVxcdTAwM2Vub2RlKTtcXG4gXFx0XFx0a2ZyZWUocGwpO1xcbiBcXHR9XFxuK1xcdGNncnAtXFx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBvbGRfZmxhZ3M7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI3OjIwLjc2NTQyNTAxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ0NDk4OTkxNzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2dyb3VwX2JwZl9wcm9nX2F0dGFjaFwiLFxuICAgIFwiY2dyb3VwX2JwZl9saW5rX2F0dGFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBlcnJvciBwYXRoIG9mIGBfX2Nncm91cF9icGZfYXR0YWNoYCB3aGVuIGF0dGFjaGluZyBhIEJQRiBwcm9ncmFtIG9yIGxpbmsgdG8gYSBjZ3JvdXAuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyB0byBjZ3JvdXBzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjQ1ZDJmYmViNjBlMGRmNDlhZjc1ZTNlZGY5Yjk1OTM0MzdhNzc2NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDE1OjI3OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbmluZGV4IDQzNTVjY2I3OGE5YzYuLjFjMDcwYWU3YmYxNzAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXG4rKysgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5AQCAtODExLDEwICs4MTEsMTMgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4ge1xuIFx0dTMyIHNhdmVkX2ZsYWdzID0gKGZsYWdzIFx1MDAyNiAoQlBGX0ZfQUxMT1dfT1ZFUlJJREUgfCBCUEZfRl9BTExPV19NVUxUSSkpO1xuIFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEw7XG4rXHRzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpvbGRfbGluayA9IE5VTEw7XG4gXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiBcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm5ld19zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbitcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKm9sZF9zdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiBsaW5rLVx1MDAzZWxpbmsucHJvZztcbiBcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTtcbitcdHUzMiBvbGRfZmxhZ3MsIG9sZF9wbF9mbGFncztcbiBcdHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbDtcbiBcdHN0cnVjdCBobGlzdF9oZWFkICpwcm9ncztcbiBcdGludCBlcnI7XG5AQCAtODY1LDYgKzg2OCw5IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFxuIFx0aWYgKHBsKSB7XG4gXHRcdG9sZF9wcm9nID0gcGwtXHUwMDNlcHJvZztcbitcdFx0b2xkX2xpbmsgPSBwbC1cdTAwM2VsaW5rO1xuK1x0XHRvbGRfcGxfZmxhZ3MgPSBwbC1cdTAwM2VmbGFncztcbitcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ob2xkX3N0b3JhZ2UsIHBsLVx1MDAzZXN0b3JhZ2UpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cGwgPSBrbWFsbG9jX29iaigqcGwpO1xuIFx0XHRpZiAoIXBsKSB7XG5AQCAtODg0LDYgKzg5MCw3IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFx0cGwtXHUwMDNlbGluayA9IGxpbms7XG4gXHRwbC1cdTAwM2VmbGFncyA9IGZsYWdzO1xuIFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXHUwMDNlc3RvcmFnZSwgc3RvcmFnZSk7XG4rXHRvbGRfZmxhZ3MgPSBjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV07XG4gXHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBzYXZlZF9mbGFncztcbiBcbiBcdGlmICh0eXBlID09IEJQRl9MU01fQ0dST1VQKSB7XG5AQCAtOTEyLDE1ICs5MTksMTggQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHRcdGJwZl90cmFtcG9saW5lX3VubGlua19jZ3JvdXBfc2hpbShuZXdfcHJvZyk7XG4gXG4gY2xlYW51cDpcbi1cdGlmIChvbGRfcHJvZykge1xuK1x0aWYgKG9sZF9wcm9nIHx8IG9sZF9saW5rKSB7XG4gXHRcdHBsLVx1MDAzZXByb2cgPSBvbGRfcHJvZztcbi1cdFx0cGwtXHUwMDNlbGluayA9IE5VTEw7XG4rXHRcdHBsLVx1MDAzZWxpbmsgPSBvbGRfbGluaztcbitcdFx0cGwtXHUwMDNlZmxhZ3MgPSBvbGRfcGxfZmxhZ3M7XG4rXHRcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLVx1MDAzZXN0b3JhZ2UsIG9sZF9zdG9yYWdlKTtcbiBcdH1cbiBcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7XG4tXHRpZiAoIW9sZF9wcm9nKSB7XG4rXHRpZiAoIW9sZF9wcm9nIFx1MDAyNlx1MDAyNiAhb2xkX2xpbmspIHtcbiBcdFx0aGxpc3RfZGVsKFx1MDAyNnBsLVx1MDAzZW5vZGUpO1xuIFx0XHRrZnJlZShwbCk7XG4gXHR9XG4rXHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBvbGRfZmxhZ3M7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI3OjIwLjc2NTQyNjkzNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NTA2MDE5NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVjZW50IEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUgdGhhdCB0d2Vha3MgYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBJbW1lZGlhdGVseSwgbXkgYXR0ZW50aW9uIGdvZXMgdG8gdGhlIGBfX2Nncm91cF9icGZfYXR0YWNoYCBmdW5jdGlvbiwgYXMgdGhhdCdzIHdoZXJlIHRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkLiBJdCBzb3VuZHMgbGlrZSB0aGV5J3ZlIGFkZHJlc3NlZCBhbiBlcnJvciBjb25kaXRpb24gd2l0aGluIGBfX2Nncm91cF9icGZfYXR0YWNoYC4gU3BlY2lmaWNhbGx5LCB0aGV5J3JlIGNsZWFuaW5nIHVwIGFmdGVyIGEgZmFpbGVkIGBicGZfY2dyb3VwX2xpbmtgIGF0dGFjaG1lbnQgYnkgcmVzdG9yaW5nIHRoZSBwcmV2aW91cyBzdGF0ZTogYG9sZF9saW5rYCwgYG9sZF9wbF9mbGFnc2AsIGBvbGRfc3RvcmFnZWAsIGFuZCBgb2xkX2ZsYWdzYC4gVGhhdCdzIGdvb2Q7IGVycm9yIGhhbmRsaW5nIGlzIGNydWNpYWwgaW4gQlBGLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGNncm91cCBhdHRhY2htZW50cyDigJMgd2UgZG9uJ3Qgd2FudCBhbnkgbGluZ2VyaW5nLCBpbmNvbnNpc3RlbnQgc3RhdGUuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBfX2Nncm91cF9icGZfYXR0YWNoYCBpdHNlbGYuIFRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgZnVuY3Rpb247IGl0J3MgdGhlIGNvcmUgb2YgaG93IEJQRiBwcm9ncmFtcyBnZXQgaG9va2VkIGludG8gY2dyb3Vwcy4gR2l2ZW4gdGhhdCwgdGhpcyBwYXRjaCBpcyBjZXJ0YWlubHkgaW1wYWN0ZnVsIGFuZCB0aGUgY29kZSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiB0aGUgbWFpbmxpbmUga2VybmVsLiBXZSB3YW50IHRvIGJlIHN1cmUgdGhpcyBmaXhlcyB0aGUgZXJyb3IgcHJvcGVybHkuXG5cbkJlZm9yZSBkaWdnaW5nIGRlZXBlciwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNvbmZpZy4gU3BlY2lmaWNhbGx5LCB0aGUgY29tcGlsYXRpb24gb2YgYGtlcm5lbC9icGYvY2dyb3VwLmNgIHJlbGllcyBvbiBgQ09ORklHX0NHUk9VUF9CUEZgLiBJJ2xsIHdhbnQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBpbmRlZWQgZW5hYmxlZCBpbiB0aGUgcmVsZXZhbnQgYnVpbGQuIElmIHRoaXMgaXNuJ3QgY29uZmlndXJlZCwgdGhlIGNoYW5nZXMgYXJlIGlycmVsZXZhbnQgdG8gdGhlIHRhcmdldCBrZXJuZWwgYnVpbGQgYW5kIEkgZG9uJ3QgbmVlZCB0byBwdXJzdWUgdGhpcyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzA1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6Mjc6MjUuNzE2MDMzNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDM1MDY5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDR1JPVVBfQlBGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0zNT1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzY6b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICs9IGNncm91cC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0zNy1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToyNzoyNS43OTAzODk5MDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjUwMTUzNzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgdGhpcyBpcyBkZWZpbml0ZWx5IGBDT05GSUdfQ0dST1VQX0JQRmAuIEdvdCBpdC5cblxuKipGb2N1c2luZyBvbiBjZ3JvdXAgQlBGIEF0dGFjaG1lbnRzKipcblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBBaCwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIEknbSBsb29raW5nIGF0IGlzIGBfX2Nncm91cF9icGZfYXR0YWNoYC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIOKAkyBpcyBpdCBhIHN0YXRpYyBmdW5jdGlvbj8gWWVwLCBgc3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsIC4uLilgIGNvbmZpcm1zIGl0LiBOZXh0IHN0ZXA6IHVuZGVyc3RhbmQgaXRzIGNhbGwgZ3JhcGguIFdoYXQgZnVuY3Rpb25zIGFjdHVhbGx5IGludm9rZSBgX19jZ3JvdXBfYnBmX2F0dGFjaGA/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhlcmUgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnRyb2wgZmxvdyBhbmQgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToyNzoyOS40NDA1NDYzOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjM3NDI2ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jZ3JvdXBfYnBmX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9NzcxPXN0YXRpYyBpbnQgaW5zZXJ0X3BsX3RvX2hsaXN0KHN0cnVjdCBicGZfcHJvZ19saXN0ICpwbCwgc3RydWN0IGhsaXN0X2hlYWQgKnByb2dzLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy03OTEtLyoqXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo3OTI6ICogX19jZ3JvdXBfYnBmX2F0dGFjaCgpIC0gQXR0YWNoIHRoZSBwcm9ncmFtIG9yIHRoZSBsaW5rIHRvIGEgY2dyb3VwLCBhbmRcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc5My0gKiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGUgdGhlIGNoYW5nZSB0byBkZXNjZW5kYW50c1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDUtICovXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4MDY6c3RhdGljIGludCBfX2Nncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MDctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTkzNz1zdGF0aWMgaW50IGNncm91cF9icGZfYXR0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0NS1cXHRjZ3JvdXBfbG9jaygpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6OTQ2OlxcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0Ny1cXHRcXHRcXHRcXHQgIGlkX29yX2ZkLCByZXZpc2lvbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI3OjI5LjU2NDMxNDI0OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1ODUxMzUyODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgY2dyb3VwX2JwZl9hdHRhY2hgIEZ1bmN0aW9uKipcblxuT2theSwgc28gdGhlIHBvaW50IG9mIGVudHJ5IGlzIGBjZ3JvdXBfYnBmX2F0dGFjaGAuIE1ha2VzIHNlbnNlOyB0aGF0J3Mgd2hlcmUgdGhlIEJQRiBtYWdpYyBpcyBsaWtlbHkgaGFwcGVuaW5nIGZvciB0aGlzIGNncm91cCBpbnRlcmFjdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBjZ3JvdXBfYnBmX2F0dGFjaGAgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2lnbmF0dXJlLCB3aGF0IGFyZ3VtZW50cyBpdCB0YWtlcywgYW5kICpjcnVjaWFsbHkqIHdoYXQgaXQncyBkb2luZyB1bmRlciB0aGUgaG9vZC4gU3BlY2lmaWNhbGx5LCBJJ2xsIHdhbnQgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY2dyb3VwIGhpZXJhcmNoeSwgaG93IGl0IGhhbmRsZXMgdGhlIEJQRiBwcm9ncmFtIGxvYWRpbmcgKGlmIHRoYXQncyB3aGVyZSBpdCBoYXBwZW5zKSwgYW55IHNlY3VyaXR5IGNoZWNrcywgYW5kIGhvdyBpdCBsaW5rcyB0aGUgcHJvZ3JhbSB0byB0aGUgY2dyb3VwLiBJdCdzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBhdHRhY2hpbmcgdGhlIHByb2dyYW0sIGJ1dCBJIG5lZWQgdGhlIGRldGFpbHMuIEkgZXhwZWN0IHRoZXJlIGlzIGEgbG90IG9mIG51YW5jZSBhcm91bmQgcmVzb3VyY2UgbGltaXRzL2FjY291bnRpbmcgdGhhdCBuZWVkcyB0byBiZSBzY3J1dGluaXplZC4gTGV0J3MgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTMzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6Mjc6MzUuMTQ5NDUyOTM0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTg5OTIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXBfYnBmX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9NjU9c3RhdGljIHN0cnVjdCBjZ3JvdXBfbHNtX2F0eXBlIGNncm91cF9sc21fYXR5cGVbQ0dST1VQX0xTTV9OVU1dO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtNjYtXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo2NzpzdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX2hvb2tfcmV0dXJuc19lcnJubyhlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXFxua2VybmVsL2JwZi9jZ3JvdXAuYy02OC17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTczLSNlbHNlXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo3NDpzdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX2hvb2tfcmV0dXJuc19lcnJubyhlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXFxua2VybmVsL2JwZi9jZ3JvdXAuYy03NS17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTg0PWJwZl9wcm9nX3J1bl9hcnJheV9jZyhjb25zdCBzdHJ1Y3QgY2dyb3VwX2JwZiAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjg1OlxcdFxcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTg2LVxcdFxcdCAgICAgIGNvbnN0IHZvaWQgKmN0eCwgYnBmX3Byb2dfcnVuX2ZuIHJ1bl9wcm9nLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNjI9dW5zaWduZWQgaW50IF9fY2dyb3VwX2JwZl9ydW5fbHNtX2N1cnJlbnQoY29uc3Qgdm9pZCAqY3R4LFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xODEtI2lmZGVmIENPTkZJR19CUEZfTFNNXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxODI6c3RhdGljIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTgzLWJwZl9jZ3JvdXBfYXR5cGVfZmluZChlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSwgdTMyIGF0dGFjaF9idGZfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE4OS1cXHRpZiAoYXR0YWNoX3R5cGUgIT0gQlBGX0xTTV9DR1JPVVApXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxOTA6XFx0XFx0cmV0dXJuIHRvX2Nncm91cF9icGZfYXR0YWNoX3R5cGUoYXR0YWNoX3R5cGUpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTkxLVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0yMjA9dm9pZCBicGZfY2dyb3VwX2F0eXBlX3B1dChpbnQgY2dyb3VwX2F0eXBlKVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMzItI2Vsc2VcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjIzMzpzdGF0aWMgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMzQtYnBmX2Nncm91cF9hdHlwZV9maW5kKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLCB1MzIgYXR0YWNoX2J0Zl9pZClcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjM2LVxcdGlmIChhdHRhY2hfdHlwZSAhPSBCUEZfTFNNX0NHUk9VUClcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjIzNzpcXHRcXHRyZXR1cm4gdG9fY2dyb3VwX2JwZl9hdHRhY2hfdHlwZShhdHRhY2hfdHlwZSk7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yMzgtXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz00MjQ9c3RhdGljIGJvb2wgaGllcmFyY2h5X2FsbG93c19hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjQyNTpcXHRcXHRcXHRcXHQgICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNDI2LXtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9NDUzPXN0YXRpYyBpbnQgY29tcHV0ZV9lZmZlY3RpdmVfcHJvZ3Moc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjQ1NDpcXHRcXHRcXHRcXHQgICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy00NTUtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9wcm9nX2FycmF5ICoqYXJyYXkpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTUxMT1zdGF0aWMgdm9pZCBhY3RpdmF0ZV9lZmZlY3RpdmVfcHJvZ3Moc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjUxMjpcXHRcXHRcXHRcXHQgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTUxMy1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfcHJvZ19hcnJheSAqb2xkX2FycmF5KVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz01OTE9c3RhdGljIGludCB1cGRhdGVfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzo1OTI6XFx0XFx0XFx0XFx0ICBlbnVtIGNncm91cF9icGZfYXR0YWNoX3R5cGUgYXR5cGUpXFxua2VybmVsL2JwZi9jZ3JvdXAuYy01OTMte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz03NzE9c3RhdGljIGludCBpbnNlcnRfcGxfdG9faGxpc3Qoc3RydWN0IGJwZl9wcm9nX2xpc3QgKnBsLCBzdHJ1Y3QgaGxpc3RfaGVhZCAqcHJvZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTc5MS0vKipcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjc5MjogKiBfX2Nncm91cF9icGZfYXR0YWNoKCkgLSBBdHRhY2ggdGhlIHByb2dyYW0gb3IgdGhlIGxpbmsgdG8gYSBjZ3JvdXAsIGFuZFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNzkzLSAqICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZSB0aGUgY2hhbmdlIHRvIGRlc2NlbmRhbnRzXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTgwNS0gKi9cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjgwNjpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTgwNy1cXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3Byb2cgKnJlcGxhY2VfcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtODE4LVxcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiBsaW5rLVxcdTAwM2VsaW5rLnByb2c7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4MTk6XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtODIwLVxcdHUzMiBvbGRfZmxhZ3MsIG9sZF9wbF9mbGFncztcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTM2LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6OTM3OnN0YXRpYyBpbnQgY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTkzOC1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9wcm9nICpyZXBsYWNlX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0NS1cXHRjZ3JvdXBfbG9jaygpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6OTQ2OlxcdHJldCA9IF9fY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgcHJvZywgcmVwbGFjZV9wcm9nLCBsaW5rLCB0eXBlLCBmbGFncyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk0Ny1cXHRcXHRcXHRcXHQgIGlkX29yX2ZkLCByZXZpc2lvbik7XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTk1Mj1zdGF0aWMgaW50IGVmZmVjdGl2ZV9wcm9nX3BvcyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6OTUzOlxcdFxcdFxcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTk1NC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqdGFyZ2V0X3BsKVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMDA0PXN0YXRpYyB2b2lkIHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMDU6XFx0XFx0XFx0XFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAwNi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGwpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEwNDE9c3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ0LXtcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwNDU6XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA0Ni1cXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMTQxPXN0YXRpYyB2b2lkIHB1cmdlX2VmZmVjdGl2ZV9wcm9ncyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgYnBmX3Byb2dfbGlzdCAqcGwsXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTQyOlxcdFxcdFxcdFxcdCAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTE0My17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTExODI9c3RhdGljIGludCBfX2Nncm91cF9icGZfZGV0YWNoKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTE4NS17XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTg2OlxcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTExODctXFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTI1Nz1zdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9xdWVyeShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTI2My1cXHRlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlID0gYXR0ci1cXHUwMDNlcXVlcnkuYXR0YWNoX3R5cGU7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMjY0OlxcdGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBmcm9tX2F0eXBlLCB0b19hdHlwZTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEyNjU6XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTI2Ni1cXHRzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKmVmZmVjdGl2ZTtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTI4My1cXHR9IGVsc2Uge1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTI4NDpcXHRcXHRmcm9tX2F0eXBlID0gdG9fY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSh0eXBlKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEyODUtXFx0XFx0aWYgKGZyb21fYXR5cGUgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMzczPWludCBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMzkyLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTM5MzpcXHRyZXQgPSBjZ3JvdXBfYnBmX2F0dGFjaChjZ3JwLCBwcm9nLCByZXBsYWNlX3Byb2csIE5VTEwsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMzk0LVxcdFxcdFxcdFxcdGF0dHItXFx1MDAzZWF0dGFjaF90eXBlLCBhdHRyLVxcdTAwM2VhdHRhY2hfZmxhZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE1MjU9aW50IGNncm91cF9icGZfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTU1My1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE1NTQ6XFx0ZXJyID0gY2dyb3VwX2JwZl9hdHRhY2goY2dycCwgTlVMTCwgTlVMTCwgbGluayxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1NTUtXFx0XFx0XFx0XFx0bGluay1cXHUwMDNlbGluay5hdHRhY2hfdHlwZSwgQlBGX0ZfQUxMT1dfTVVMVEkgfCBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5mbGFncyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTYwOT1pbnQgX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc2tiKHN0cnVjdCBzb2NrICpzayxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE2MTAtXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE2MTE6XFx0XFx0XFx0XFx0ZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTYxMi17XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE2ODc9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NrKHN0cnVjdCBzb2NrICpzayxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE2ODg6XFx0XFx0XFx0ICAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSlcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE2ODkte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNzE1PWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zb2NrX2FkZHIoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzE3LVxcdFxcdFxcdFxcdCAgICAgIGludCAqdWFkZHJsZW4sXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNzE4OlxcdFxcdFxcdFxcdCAgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3MTktXFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqdF9jdHgsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE3Njk9aW50IF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfb3BzKHN0cnVjdCBzb2NrICpzayxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3NzAtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKnNvY2tfb3BzLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc3MTpcXHRcXHRcXHRcXHQgICAgIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSlcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3NzIte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNzgwPWludCBfX2Nncm91cF9icGZfY2hlY2tfZGV2X3Blcm1pc3Npb24oc2hvcnQgZGV2X3R5cGUsIHUzMiBtYWpvciwgdTMyIG1pbm9yLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc4MTpcXHRcXHRcXHRcXHQgICAgICBzaG9ydCBhY2Nlc3MsIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSlcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3ODIte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xOTM3PWludCBfX2Nncm91cF9icGZfcnVuX2ZpbHRlcl9zeXNjdGwoc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhlYWQsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE5MzktXFx0XFx0XFx0XFx0ICAgY2hhciAqKmJ1Ziwgc2l6ZV90ICpwY291bnQsIGxvZmZfdCAqcHBvcyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE5NDA6XFx0XFx0XFx0XFx0ICAgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTk0MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI3OjM1LjY4MTM2NTE3M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNjE5Mjc2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBFeHBsb3JhdGlvbiBpbnRvIEJQRiBBdHRhY2htZW50IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBob3cgQlBGIHByb2dyYW1zIGdldCBhdHRhY2hlZCB0byBjZ3JvdXBzLiBUaGUgY29yZSBvZiB0aGlzLCBmcm9tIHRoZSBzeXN0ZW0gY2FsbCBwZXJzcGVjdGl2ZSwgYXBwZWFycyB0byBiZSBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYC4gVGhlc2UgYXJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gZXhhbWluZSwgYXMgdGhleSdyZSBkaXJlY3RseSBjYWxsZWQgZnJvbSB0aGUgYGJwZmAgc3lzY2FsbC4gRm9jdXNpbmcgb24gdGhlc2UgdHdvIHN5bWJvbHMgc2VlbXMgbGlrZSB0aGUgcmlnaHQgYXBwcm9hY2ggdG8gdW5kZXJzdGFuZCB0aGUgYXR0YWNobWVudCBwcm9jZXNzLlxuXG5Ob3csIGJlZm9yZSBJIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSdsbCBxdWlja2x5IHZlcmlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIGV4cGVjdCBgQ09ORklHX0NHUk9VUF9CUEZgIHRvIGJlIHRoZSBrZXkgc2V0dGluZyB0aGF0IGVuYWJsZXMgYWxsIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCdzIGVuYWJsZWQgYW5kIGNoZWNrIGZvciBhbnkgcmVsYXRlZCwgcG9zc2libHkgbW9yZSBncmFudWxhciwgb3B0aW9ucy5cblxuTmV4dCBzdGVwOiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgYW5kIHRha2UgYSBjbG9zZSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYm90aCBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBob3cgdGhlIGF0dGFjaG1lbnQgaGFwcGVucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQyOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToyNzozOS44NDMyOTcwNDVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjU1Njc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTQ2MzQ9c3RhdGljIGludCBicGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjY5LVxcdGlmIChpc19jZ3JvdXBfcHJvZ190eXBlKHB0eXBlLCBwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSwgdHJ1ZSkpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NjcwOlxcdFxcdHJldCA9IGNncm91cF9icGZfcHJvZ19hdHRhY2goYXR0ciwgcHR5cGUsIHByb2cpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ2NzEtXFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI3OjM5Ljk2NTg1OTY4MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjU3NDg3NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSd2ZSBkZXNjcmliZWQ6XG5cbioqRGVsdmluZyBpbnRvIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAgZnVuY3Rpb24uIFRoaW5raW5nIGFib3V0IGl0LCB0aGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IGRlc2NyaXB0aXZlLiBXZSdyZSB0YWxraW5nIGFib3V0ICphdHRhY2hpbmcqIGEgQlBGIHByb2dyYW0gdG8gYSBjZ3JvdXAgKmxpbmsqLCB5ZWFoPyBPa2F5LCBzbyB0aGF0IGxpbmsgcmVwcmVzZW50cyB0aGUgY29ubmVjdGlvbiwgdGhlIHBvaW50IG9mIGludGVyYWN0aW9uLCBiZXR3ZWVuIG91ciBCUEYgcHJvZ3JhbSBhbmQgdGhlIGNncm91cCBoaWVyYXJjaHkuXG5cbldoYXQncyByZWFsbHkgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QgaGVyZT8gSSdtIHBpY3R1cmluZyB0aGUga2VybmVsIGRhdGEgc3RydWN0dXJlczsgd2UndmUgZ290IHRoZSBjZ3JvdXAsIHdoaWNoIG9yZ2FuaXplcyByZXNvdXJjZXMsIGFuZCB0aGUgQlBGIHByb2dyYW0sIHdoaWNoIGlzIHRoZSBjb2RlIHdlIHdhbnQgdG8gZXhlY3V0ZS4gVGhlIGxpbmsgaXMgdGhlIGJyaWRnZSwgdGhlIG1lY2hhbmlzbSBieSB3aGljaCB0aGUgQlBGIHByb2dyYW0ga25vd3MgKndoaWNoKiBjZ3JvdXAgaXQncyBpbmZsdWVuY2luZy5cblxuVGhlIGF0dGFjaG1lbnQgcHJvY2VzcyBoYXMgdG8gY29uc2lkZXIgYSBsb3Qgb2YgdGhpbmdzLiBFcnJvciBoYW5kbGluZyBpcyBwYXJhbW91bnQsIG9mIGNvdXJzZS4gV2UgbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBCUEYgcHJvZ3JhbSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGNncm91cCdzIGNvbnRleHQsIG1ha2luZyBzdXJlIHRoZSBhdHRhY2htZW50IGlzIGFjdHVhbGx5ICphbGxvd2VkKiBhbmQgdGhhdCBvdXIgQlBGIHByb2dyYW0gY2FuIHNhZmVseSBiZSBhdHRhY2hlZC4gV2UgbmVlZCB0byBoYW5kbGUgYW55IHJhY2UgY29uZGl0aW9ucywgdG9vLiBcblxuQW5kLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBvZiB0aGUgZWRnZSBjYXNlcy4gV2hhdCBpZiB0aGUgY2dyb3VwIGdldHMgZGVsZXRlZCB3aGlsZSBhIHByb2dyYW0gaXMgYXR0YWNoZWQ/IFdoYXQgYWJvdXQgcmVzb3VyY2UgbGltaXRhdGlvbnMgaW4gdGhlIEJQRiBWTSBpdHNlbGY/IFRoZSBsb2dpYyBpcyBhbGwgYWJvdXQgc2V0dGluZyB1cCB0aGlzIGxpbmsgc2FmZWx5LCBzZXR0aW5nIGl0IHVwIGluIGEgd2F5IHRoYXQgZG9lc24ndCBkZXN0YWJpbGl6ZSB0aGUgc3lzdGVtLCBhbmQgbWFraW5nIGl0IHNvIHRoYXQgdGhlc2UgdHdvIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIGFibGUgdG8gd29yayB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk4OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI3OjQ0LjIyMzM1MjEyMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM1MDkzNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2dyb3VwX2JwZl9saW5rX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz01ODQ0PXN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg3MS1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tPUFQ6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg3MjpcXHRcXHRyZXQgPSBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoKGF0dHIsIHByb2cpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4NzMtXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODkyLVxcdFxcdGVsc2UgaWYgKHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID09IEJQRl9MU01fQ0dST1VQKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU4OTM6XFx0XFx0XFx0cmV0ID0gY2dyb3VwX2JwZl9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk0LVxcdFxcdGVsc2UgaWYgKGlzX3RyYWNpbmdfbXVsdGkocHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToyNzo0NC4zMTY4NjgyNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDU4MzQzMDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIEtlcm5lbCBCUEYgQXR0YWNobWVudCBQb2ludHMqKlxuXG5SaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIGhvdyBCUEYgcHJvZ3JhbXMgZ2V0IGF0dGFjaGVkIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBjZ3JvdXBzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGVzZSBhdHRhY2htZW50cy4gTXkgaW5pdGlhbCB0aGlua2luZyBpcyB0aGF0IGBicGZfcHJvZ19hdHRhY2hgIGFuZCBgbGlua19jcmVhdGVgIGFyZSB0aGUgKnN5c3RlbSBjYWxsIGhhbmRsZXJzKiDigJMgdGhleSBhcmUgdGhlIGxvd2VzdCBsZXZlbCB0aGF0IHRoZSB1c2Vyc3BhY2UgdG9vbHMgaW50ZXJhY3Qgd2l0aC5cblxuSG93ZXZlciwgSSdtIG1vcmUgaW50ZXJlc3RlZCBpbiB0aGUgY2dyb3VwLXNwZWNpZmljIGZ1bmN0aW9ucy4gVGhlcmVmb3JlLCBJIGJlbGlldmUgdGhlIG1vcmUgcmVsZXZhbnQgc3ltYm9scyBoZXJlIGFyZSBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgYXQgdGhlIGNncm91cCBsZXZlbC5cblxuTm93LCBJJ20gY3VyaW91cyBpZiBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgdmlzaWJpbGl0eSBhbmQgc2NvcGUgd2l0aGluIHRoZSBrZXJuZWwgY29kZS4gTGV0IG1lIGNoZWNrLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToyNzo0Ny43NzUyMTM0ODVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MzU3MDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNncm91cF9icGZfcHJvZ19hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jPTEzNjI9c3RhdGljIGludCBjZ3JvdXBfYnBmX3F1ZXJ5KHN0cnVjdCBjZ3JvdXAgKmNncnAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMzcyLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTM3MzppbnQgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEzNzQtXFx0XFx0XFx0ICAgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI3OjQ3Ljg1MDU3NjM5NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTg4MzExMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIER5bmFtaWMgTmF0dXJlIG9mIHRoZSBTaXR1YXRpb24qKlxuXG5BbHJpZ2h0LCB0aGlzIGlzbid0IGEgc3RhdGljIHNpdHVhdGlvbiwgbm90IGJ5IGFueSBzdHJldGNoIG9mIHRoZSBpbWFnaW5hdGlvbi4gU29tZXRoaW5nJ3MgZGVmaW5pdGVseSBpbiBmbHV4LCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcyBhdCBwbGF5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgY3JpdGljYWwgZnVuY3Rpb24gcmVsYXRlZCB0byBCUEYgYW5kIGNncm91cHMuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgYGNncm91cF9icGZfbGlua19hdHRhY2hgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgYSBwcmltZSBzcG90IHRvIGluc3BlY3Qgd2hhdOKAmXMgYWN0dWFsbHkgY2hhbmdpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNjUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToyNzo1MS4wMzg4OTIyOTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDU2NjAzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuYz0xNTA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9jZ3JvdXBfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTI0LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTUyNTppbnQgY2dyb3VwX2JwZl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTUyNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI3OjUxLjEzOTQ2NTA3MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDc3OTA2MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYENHUk9VUF9CUEZgIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIGlzbid0IGEgc2ltcGxlLCBmaXhlZCBzaXR1YXRpb24uIE15IG1pbmQgaW1tZWRpYXRlbHkgcmVjb2duaXplcyB0aGF0IHRoaW5ncyBhcmUgZHluYW1pYyBoZXJlLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGNncm91cF9icGZfbGlua19hdHRhY2hgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjcml0aWNhbCBzeW1ib2xzIGluIHRoaXMgaW50ZXJhY3Rpb24uIFRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGNsZWFybHkgYENHUk9VUF9CUEZgLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSBpZiBgQ0dST1VQX0JQRmAgcmVsaWVzIG9uIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgb3ZlcnZpZXcgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM3MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI3OjU0LjYxNzM4NjU4N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM4Njc5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENHUk9VUF9CUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMzQxPWNvbmZpZyBDR1JPVVBfUEVSRlxcbi0tXFxuaW5pdC9LY29uZmlnLTEzNTEtXFxuaW5pdC9LY29uZmlnOjEzNTI6Y29uZmlnIENHUk9VUF9CUEZcXG5pbml0L0tjb25maWctMTM1My1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI3OjU0LjY5MTI2NTY0NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTAzOTA3OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ0dST1VQX0JQRiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgQ0dST1VQX0JQRmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSBhbGwgdGhlIHRoaW5ncyB0aGlzIHRoaW5nIHRvdWNoZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMg4oCTIGJvdGggdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0uIEkgd2FudCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBrbm93aW5nIGlmIHNvbWUgb3RoZXIgY29uZmlnIG9wdGlvbiBpcyByZXF1aXJlZCB0byBlbmFibGUgaXQsIEknbSB0aGlua2luZyBhYm91dCB0aGUgKmltcGFjdCouIFdoYXQgbW9kdWxlcyBvciBmZWF0dXJlcyBjcml0aWNhbGx5IHJlbHkgb24gYENHUk9VUF9CUEZgPyBIb3cgZGVlcGx5IGlzIGl0IGludGVncmF0ZWQgaW50byB0aGUga2VybmVsJ3MgYXJjaGl0ZWN0dXJlPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY29uZmxpY3RzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiwgcGVyaGFwcyB3aXRoIG90aGVyIGVCUEYtcmVsYXRlZCBmZWF0dXJlcyBvciBleGlzdGluZyBjZ3JvdXAgaW1wbGVtZW50YXRpb25zPyBJIG5lZWQgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIGRlcGVuZGVuY3kgZ3JhcGggaW4gbXkgaGVhZC4gRXNzZW50aWFsbHksIEknbSB0cnlpbmcgdG8gbWVudGFsbHkgbWFwIG91dCBpdHMgcm9sZSBpbiB0aGUgc3lzdGVtLiBJJ20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyB0aGF0IG1pZ2h0IGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njg2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6Mjc6NTguMTk1MTc3NjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIxNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzUwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzUwOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEzNTE6XFx0XFxuMTM1MjpcXHRjb25maWcgQ0dST1VQX0JQRlxcbjEzNTM6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXFxcIlxcbjEzNTQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbjEzNTU6XFx0XFx0c2VsZWN0IFNPQ0tfQ0dST1VQX0RBVEFcXG4xMzU2OlxcdFxcdGhlbHBcXG4xMzU3OlxcdFxcdCAgQWxsb3cgYXR0YWNoaW5nIGVCUEYgcHJvZ3JhbXMgdG8gYSBjZ3JvdXAgdXNpbmcgdGhlIGJwZigyKVxcbjEzNTg6XFx0XFx0ICBzeXNjYWxsIGNvbW1hbmQgQlBGX1BST0dfQVRUQUNILlxcbjEzNTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI3OjU4LjE5NjAwNTQ0OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODg1NjI3NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBjaGFuZ2UgaGluZ2VzIG9uIGBCUEZfU1lTQ0FMTGAsIHRoYXQncyB0aGUga2V5LiBBbmQgdG8gYmUgcHJlY2lzZSBhYm91dCBkZXBlbmRlbmNpZXMsIGBDR1JPVVBfQlBGYCBpcyBhbm90aGVyIGltcG9ydGFudCBjb25maWcuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhlcmUgYXJlbid0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW52b2x2ZWQ7IGJldHRlciBzYWZlIHRoYW4gc29ycnkuXG5cblJpZ2h0LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGtlcm5lbC9icGYvY2dyb3VwLmNgLiBBaCwgaXQncyBhIGZ1bmN0aW9uYWwgZml4LCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBhbiBlcnJvciBwYXRoIHdpdGhpbiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAuIFNpbmNlIGl0IGRlYWxzIHdpdGggcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgaW4gdGhlIEJQRiBhdHRhY2htZW50IHByb2Nlc3MgdG8gY2dyb3VwcywgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGV4ZXJjaXNlIHRoaXMgZXJyb3IgcGF0aCBhbmQgdmVyaWZ5IHRoZSBmaXguXG5cbk15IGZvY3VzIGhhcyB0byBiZSBvbiB0aGVzZSBzeW1ib2xzOiBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gcHJvZ3JhbSBhbmQgbGluayBhdHRhY2htZW50LlxuXG5TbywganVzdCB0byBiZSBjcnlzdGFsIGNsZWFyOiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBDR1JPVVBfQlBGYCBhbmQgYEJQRl9TWVNDQUxMYC5cblxuVGhlIGNvcmUgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIHJlcGFpcnMgYSBmbGF3IHdpdGhpbiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgLSBhIGZ1bmN0aW9uIHZpdGFsIGZvciBCUEYgcHJvZ3JhbSBhbmQgbGluayBhdHRhY2htZW50IHRvIGNncm91cHMuIEl0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbC4gU28gd2UgaGF2ZSB0byBzcGVjaWZpY2FsbHkgcHJvYmUgdGhpcyBwYXRoIGFuZCBmdXp6IHRoaXMgYXJlYS4gVGhlIG9iamVjdGl2ZSBpcyB0byBtYWtlIHN1cmUgdGhhdCBlcnJvcnMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LiBXZSBuZWVkIHRvIHBheSBzcGVjaWFsIGF0dGVudGlvbiB0byBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYCB3aGVuIGRldmVsb3BpbmcgZnV6emluZyBjb3ZlcmFnZS5cblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDk5LCJPdXRwdXRUb2tlbnMiOjE1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjI4OjA1LjA4MTYzNjZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI3NzU1NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2dyb3VwX2JwZl9wcm9nX2F0dGFjaFwiLFxuICAgIFwiY2dyb3VwX2JwZl9saW5rX2F0dGFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBlcnJvciBwYXRoIG9mIGBfX2Nncm91cF9icGZfYXR0YWNoYCB3aGVuIGF0dGFjaGluZyBhIEJQRiBwcm9ncmFtIG9yIGxpbmsgdG8gYSBjZ3JvdXAuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyB0byBjZ3JvdXBzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBgY2dyb3VwX2JwZl9wcm9nX2F0dGFjaGAgYW5kIGBjZ3JvdXBfYnBmX2xpbmtfYXR0YWNoYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNncm91cF9icGZfcHJvZ19hdHRhY2hcIixcbiAgICBcImNncm91cF9icGZfbGlua19hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgX19jZ3JvdXBfYnBmX2F0dGFjaGAgd2hlbiBhdHRhY2hpbmcgYSBCUEYgcHJvZ3JhbSBvciBsaW5rIHRvIGEgY2dyb3VwLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGF0dGFjaGluZyBCUEYgcHJvZ3JhbXMgdG8gY2dyb3Vwcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGFuZCBgY2dyb3VwX2JwZl9saW5rX2F0dGFjaGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowq59hc[1] Phase: Succeeded StartedAt: 2026-07-29 15:28:16 +0000 UTC FinishedAt: 2026-07-29 15:28:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq59hc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-29 15:28:16 +0000 UTC FinishedAt: 2026-07-29 15:28:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq59hc[2] Phase: Succeeded StartedAt: 2026-07-29 15:28:16 +0000 UTC FinishedAt: 2026-07-29 19:22:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-29 15:28:16 +0000 UTC FinishedAt: 2026-07-29 19:22:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-29 15:28:16 +0000 UTC FinishedAt: 2026-07-29 15:28:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-29 15:28:16 +0000 UTC FinishedAt: 2026-07-29 15:28:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowq59hc/series-workflowq59hc-convert-artifact-247632731/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-29 15:28:27 +0000 UTC FinishedAt: 2026-07-29 15:53:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-29 15:28:27 +0000 UTC FinishedAt: 2026-07-29 15:53:24 +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:*7aef011a-86fd-42c5-9a19-cb5c26c74e5e,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-workflowq59hc/series-workflowq59hc-convert-artifact-247632731/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": "93e41c0d-3e78-4699-b4af-c96eb4124a42", "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-workflowq59hc/series-workflowq59hc-build-action-1420447897/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-29 15:28:27 +0000 UTC FinishedAt: 2026-07-29 15:52:39 +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:*7aef011a-86fd-42c5-9a19-cb5c26c74e5e,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-workflowq59hc/series-workflowq59hc-convert-artifact-247632731/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": "93e41c0d-3e78-4699-b4af-c96eb4124a42", "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-workflowq59hc/series-workflowq59hc-build-action-1420447897/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-29 15:53:24 +0000 UTC FinishedAt: 2026-07-29 15:53:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-29 15:53:24 +0000 UTC FinishedAt: 2026-07-29 15:53:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-29 15:53:24 +0000 UTC FinishedAt: 2026-07-29 15:53:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-29 15:53:24 +0000 UTC FinishedAt: 2026-07-29 15:53:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowq59hc/series-workflowq59hc-convert-artifact-2887291314/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-29 15:53:45 +0000 UTC FinishedAt: 2026-07-29 15:55:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-29 15:53:45 +0000 UTC FinishedAt: 2026-07-29 15:55:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*93e41c0d-3e78-4699-b4af-c96eb4124a42,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-workflowq59hc/series-workflowq59hc-build-action-1420447897/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-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-29 15:55:34 +0000 UTC FinishedAt: 2026-07-29 15:55:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-29 15:55:34 +0000 UTC FinishedAt: 2026-07-29 15:55:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-29 15:55:34 +0000 UTC FinishedAt: 2026-07-29 16:18:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-29 15:55:34 +0000 UTC FinishedAt: 2026-07-29 16:18:57 +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:*7aef011a-86fd-42c5-9a19-cb5c26c74e5e,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-workflowq59hc/series-workflowq59hc-convert-artifact-2887291314/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": "0465c0ac-36a3-42d1-9d86-494b3388edde", "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-workflowq59hc/series-workflowq59hc-build-action-3528819526/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-29 15:55:34 +0000 UTC FinishedAt: 2026-07-29 16:18:46 +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:*7aef011a-86fd-42c5-9a19-cb5c26c74e5e,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-workflowq59hc/series-workflowq59hc-convert-artifact-2887291314/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": "0465c0ac-36a3-42d1-9d86-494b3388edde", "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-workflowq59hc/series-workflowq59hc-build-action-3528819526/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-29 16:18:57 +0000 UTC FinishedAt: 2026-07-29 16:18:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-29 16:18:57 +0000 UTC FinishedAt: 2026-07-29 16:18:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-29 16:18:57 +0000 UTC FinishedAt: 2026-07-29 16:20:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-29 16:18:57 +0000 UTC FinishedAt: 2026-07-29 16:20:31 +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:*0465c0ac-36a3-42d1-9d86-494b3388edde,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-workflowq59hc/series-workflowq59hc-build-action-3528819526/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-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-29 16:20:42 +0000 UTC FinishedAt: 2026-07-29 19:22:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-29 16:20:42 +0000 UTC FinishedAt: 2026-07-29 19:22:03 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},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:*93e41c0d-3e78-4699-b4af-c96eb4124a42,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0465c0ac-36a3-42d1-9d86-494b3388edde,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-workflowq59hc/series-workflowq59hc-build-action-1420447897/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-workflowq59hc/series-workflowq59hc-build-action-3528819526/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-29 16:20:42 +0000 UTC FinishedAt: 2026-07-29 16:20:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-29 16:20:42 +0000 UTC FinishedAt: 2026-07-29 16:20:49 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},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-workflowq59hc/series-workflowq59hc-convert-artifact-185960711/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-29 16:20:42 +0000 UTC FinishedAt: 2026-07-29 16:20:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-29 16:20:42 +0000 UTC FinishedAt: 2026-07-29 16:20:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-29 16:20:43 +0000 UTC FinishedAt: 2026-07-29 16:20:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-29 16:20:54 +0000 UTC FinishedAt: 2026-07-29 19:22:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq59hc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_prog_attach","cgroup_bpf_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"5bdd641f-bb31-4565-b322-9fec62581767","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-29 16:20:54 +0000 UTC FinishedAt: 2026-07-29 19:21:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*93e41c0d-3e78-4699-b4af-c96eb4124a42,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0465c0ac-36a3-42d1-9d86-494b3388edde,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-workflowq59hc/series-workflowq59hc-build-action-1420447897/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-workflowq59hc/series-workflowq59hc-build-action-3528819526/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-workflowq59hc/series-workflowq59hc-convert-artifact-185960711/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,}