Name: series-workflow4z9jj Phase: Succeeded StartedAt: 2026-09-03 23:32:38 +0000 UTC FinishedAt: 2026-09-04 03:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z9jj[0] Phase: Succeeded StartedAt: 2026-09-03 23:32:38 +0000 UTC FinishedAt: 2026-09-03 23:36:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z9jj[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 23:32:38 +0000 UTC FinishedAt: 2026-09-03 23:36:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "INTEL_TDX_HOST", "KVM_INTEL_TDX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "INTEL_TDX_HOST", "KVM_INTEL_TDX" ], "series_id": "0e53dc15-5a06-49a4-b1a9-2ec706ec3576" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_mmu_create", "kvm_init_mmu", "kvm_init_shadow_npt_mmu", "tdx_load_mmu_pgd", "tdx_td_init" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtJTlRFTF9URFhfSE9TVCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUxfVERYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX21tdV9jcmVhdGUmIzM0OywKICAgICYjMzQ7a3ZtX2luaXRfbW11JiMzNDssCiAgICAmIzM0O2t2bV9pbml0X3NoYWRvd19ucHRfbW11JiMzNDssCiAgICAmIzM0O3RkeF9sb2FkX21tdV9wZ2QmIzM0OywKICAgICYjMzQ7dGR4X3RkX2luaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgaG93IEtWTSBkZXRlcm1pbmVzIHRoZSBURFAgbGV2ZWwgZm9yIFZNcyB3aXRoIG1pcnJvcmVkIHBhZ2UgdGFibGVzIChzdWNoIGFzIFREWCBWTXMpLCBieSB0cmFja2luZyB0aGUgbWlycm9yIHJvb3QgbGV2ZWwgZXhwbGljaXRseSBpbiBgc3RydWN0IGt2bV9hcmNoYCAoYG1pcnJvcl9yb290X2xldmVsYCkgc2V0IGR1cmluZyBURCBpbml0aWFsaXphdGlvbiBpbnN0ZWFkIG9mIHF1ZXJ5aW5nIHRoZSBndWVzdCBDUFVJRC5cblxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZTogYHN0cnVjdCBrdm1fYXJjaGAgaXMgcGFydCBvZiBgc3RydWN0IGt2bWAsIHdoaWNoIGlzIGFsbG9jYXRlZCB3aXRoIGBrdnphbGxvYygpYCBpbiBga3ZtX2FyY2hfYWxsb2Nfdm0oKWAsIGd1YXJhbnRlZWluZyB0aGF0IGBtaXJyb3Jfcm9vdF9sZXZlbGAgaXMgemVyby1pbml0aWFsaXplZC5cbi0gTm8ga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczogVGhlIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgbmV3IGRhdGEgdG8gdXNlciBzcGFjZSB2aWEgY29weV90b191c2VyIG9yIGlvY3RsIG91dHB1dHMuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIG9yIGJ1ZmZlciBhY2Nlc3M6IExvZ2ljIGNoZWNrcyBvcGVyYXRlIG9uIGZ1bGx5IGluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgYW5kIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy5cblxuVGhlcmVmb3JlLCB0aGUgY2hhbmdlcyBwcmVzZW50IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBydW4gaXMgbm90IG5lZWRlZDsgc3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSB4ODYgTU1VIHJvb3QgbGV2ZWwgY2FsY3VsYXRpb24gYW5kIFREUCBjcmVhdGlvbiBsb2dpYyAoX19rdm1fbW11X2NyZWF0ZSwga3ZtX21tdV9nZXRfdGRwX2xldmVsKSBhbmQgdXBkYXRlcyBURFggbWlycm9yZWQgcm9vdCBsZXZlbCBoYW5kbGluZyAodGR4X2xvYWRfbW11X3BnZCwgdGR4X3RkX2luaXQpLiBJdCBhbHNvIGFkZHMgYSBuZXcgV0FSTl9PTl9PTkNFIGFzc2VydGlvbiBmb3IgdW5pbml0aWFsaXplZCBtaXJyb3Jfcm9vdF9sZXZlbC4gVGhlc2UgY29kZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGR1cmluZyBLVk0gVk0gYW5kIHZDUFUgaW5pdGlhbGl6YXRpb24vbGlmZWN5Y2xlIG9wZXJhdGlvbnMgb24geDg2XzY0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzFkMDhhMTA5NTI5YzVmMjQ2YTVmN2FhZWJiZTk5NzFkZWQ1NDE1YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjM6MzQ6MzggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDY4M2JiOGJmNDNhOTQuLmVkZDVhZDJlNWI1MmQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMTQwNiw2ICYjNDM7MTQwNiw3IEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgc3BsaXRfZGVzY19jYWNoZTtcbiBcbiBcdGdmbl90IGdmbl9kaXJlY3RfYml0cztcbiYjNDM7XHRpbnQgbWlycm9yX3Jvb3RfbGV2ZWw7XG4gXG4gXHQvKlxuIFx0ICogU2l6ZSBvZiB0aGUgQ1BVJiMzOTtzIGRpcnR5IGxvZyBidWZmZXIsIGkuZS4gVk1YJiMzOTtzIFBNTCBidWZmZXIuIEEgWmVyb1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5jIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbmluZGV4IGRkYjAyMmNiMjAzYTIuLjM0YzYwOWE2MGVlZmYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbkBAIC00ODMsMjAgJiM0Mzs0ODMsNiBAQCBpbnQgY3B1aWRfcXVlcnlfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4gMzY7XG4gfVxuIFxuLWludCBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi1cdHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICpiZXN0O1xuLVxuLVx0YmVzdCA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KHZjcHUsIDB4ODAwMDAwMDApO1xuLVx0aWYgKCFiZXN0IHx8IGJlc3QtXHUwMDNlZWF4IFx1MDAzYyAweDgwMDAwMDA4KVxuLVx0XHRnb3RvIG5vdF9mb3VuZDtcbi1cdGJlc3QgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDA4KTtcbi1cdGlmIChiZXN0KVxuLVx0XHRyZXR1cm4gKGJlc3QtXHUwMDNlZWF4IFx1MDAzZVx1MDAzZSAxNikgXHUwMDI2IDB4ZmY7XG4tbm90X2ZvdW5kOlxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qXG4gICogVGhpcyBcJiMzNDtyYXdcJiMzNDsgdmVyc2lvbiByZXR1cm5zIHRoZSByZXNlcnZlZCBHUEEgYml0cyB3aXRob3V0IGFueSBhZGp1c3RtZW50cyBmb3JcbiAgKiBlbmNyeXB0aW9uIHRlY2hub2xvZ2llcyB0aGF0IHVzdXJwIGJpdHMuICBUaGUgcmF3IG1hc2sgc2hvdWxkIGJlIHVzZWQgaWYgYW5kXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmggYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaFxuaW5kZXggOGQ4NjNmNDU1ODVkZS4uNDZiZmU4Njk5ZTY3ZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaFxuQEAgLTY4LDcgJiM0Mzs2OCw2IEBAIHZvaWQgX19pbml0IGt2bV9pbml0X3hzdGF0ZV9zaXplcyh2b2lkKTtcbiB1MzIgeHN0YXRlX3JlcXVpcmVkX3NpemUodTY0IHhzdGF0ZV9idiwgYm9vbCBjb21wYWN0ZWQpO1xuIFxuIGludCBjcHVpZF9xdWVyeV9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4taW50IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHU2NCBrdm1fdmNwdV9yZXNlcnZlZF9ncGFfYml0c19yYXcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiBzdGF0aWMgaW5saW5lIGludCBjcHVpZF9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuaW5kZXggMDY0ZWNjMzNiOTI2Ny4uZDQzYjhiNmMzYjE3OSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC01OTUzLDE5ICYjNDM7NTk1MywyMiBAQCB2b2lkIF9fa3ZtX21tdV9yZWZyZXNoX3Bhc3N0aHJvdWdoX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0aW50IG1heHBhO1xuLVxuLVx0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTSlcbi1cdFx0bWF4cGEgPSBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIodmNwdSk7XG4tXHRlbHNlXG4tXHRcdG1heHBhID0gY3B1aWRfbWF4cGh5YWRkcih2Y3B1KTtcbi1cbiBcdC8qIHRkcF9yb290X2xldmVsIGlzIGFyY2hpdGVjdHVyZSBmb3JjZWQgbGV2ZWwsIHVzZSBpdCBpZiBub256ZXJvICovXG4gXHRpZiAodGRwX3Jvb3RfbGV2ZWwpXG4gXHRcdHJldHVybiB0ZHBfcm9vdF9sZXZlbDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSBWTSBoYXMgbWlycm9yIHJvb3RzLCB0aGVuIHRoZSByb290IGxldmVsIGlzIHByZWRlZmluZWQgYXMgdGhlXG4mIzQzO1x0ICogbWlycm9yIHJvb3QgKGFuZCBieSBleHRlbnNpb24gdGhlIG5vcm1hbCByb290KSBuZWVkcyB0byBtYXRjaCB0aGVcbiYjNDM7XHQgKiByb290IGxldmVsIHRoYXQgd2FzIGNvbmZpZ3VyZWQgZm9yIHRoZSBleHRlcm5hbCBwYWdlIHRhYmxlcyB0aGF0IGFyZVxuJiM0MztcdCAqIGJlaW5nIG1pcnJvcmVkIGJ5IEtWTS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoa3ZtX2hhc19taXJyb3JlZF90ZHAodmNwdS1cdTAwM2Vrdm0pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhV0FSTl9PTl9PTkNFKCF2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsKSlcbiYjNDM7XHRcdHJldHVybiB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsO1xuJiM0MztcbiBcdC8qIFVzZSA1LWxldmVsIFREUCBpZiBhbmQgb25seSBpZiBpdCYjMzk7cyB1c2VmdWwvbmVjZXNzYXJ5LiAqL1xuLVx0aWYgKG1heF90ZHBfbGV2ZWwgPT0gNSBcdTAwMjZcdTAwMjYgbWF4cGEgXHUwMDNjPSA0OClcbiYjNDM7XHRpZiAobWF4X3RkcF9sZXZlbCA9PSA1IFx1MDAyNlx1MDAyNiBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpIFx1MDAzYz0gNDgpXG4gXHRcdHJldHVybiA0O1xuIFxuIFx0cmV0dXJuIG1heF90ZHBfbGV2ZWw7XG5AQCAtNjgzNCw3ICYjNDM7NjgzNyw3IEBAIHN0YXRpYyBpbnQgX19rdm1fbW11X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11ICptbXUsIHN0cnVjdCBrXG4gXHQgKiBvdGhlciBleGNlcHRpb24gaXMgZm9yIHNoYWRvd2luZyBMMSYjMzk7cyAzMi1iaXQgb3IgUEFFIE5QVCBvbiA2NC1iaXRcbiBcdCAqIEtWTTsgdGhhdCBob3Jyb3IgaXMgaGFuZGxlZCBvbi1kZW1hbmQgYnkgbW11X2FsbG9jX3NwZWNpYWxfcm9vdHMoKS5cbiBcdCAqL1xuLVx0aWYgKHRkcF9lbmFibGVkIFx1MDAyNlx1MDAyNiBrdm1fbW11X2dldF90ZHBfbGV2ZWwodmNwdSkgXHUwMDNlIFBUMzJFX1JPT1RfTEVWRUwpXG4mIzQzO1x0aWYgKHRkcF9lbmFibGVkIFx1MDAyNlx1MDAyNiBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKCkgXHUwMDNlIFBUMzJFX1JPT1RfTEVWRUwpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfRE1BMzIpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5pbmRleCBiMjcyYzIwNTg2YTc0Li5hMGJjOWY4MThmNDM5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuQEAgLTU2LDkgJiM0Mzs1Niw2IEBAXG4gYm9vbCBlbmFibGVfdGR4IF9fcm9fYWZ0ZXJfaW5pdDtcbiBtb2R1bGVfcGFyYW1fbmFtZWQodGR4LCBlbmFibGVfdGR4LCBib29sLCAwNDQ0KTtcbiBcbi0jZGVmaW5lIFREWF9TSEFSRURfQklUX1BXTF81IGdwYV90b19nZm4oQklUX1VMTCg1MSkpXG4tI2RlZmluZSBURFhfU0hBUkVEX0JJVF9QV0xfNCBncGFfdG9fZ2ZuKEJJVF9VTEwoNDcpKVxuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICp0ZHhfc3lzaW5mbztcbiBcbiB2b2lkIHRkaF92cF9yZF9mYWlsZWQoc3RydWN0IHZjcHVfdGR4ICp0ZHgsIGNoYXIgKnVjbGFzcywgdTMyIGZpZWxkLCB1NjQgZXJyKVxuQEAgLTE2MDksMTAgJiM0MzsxNjA2LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdGR2bWNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHZvaWQgdGR4X2xvYWRfbW11X3BnZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGhwYV90IHJvb3RfaHBhLCBpbnQgcGdkX2xldmVsKVxuIHtcbi1cdHU2NCBzaGFyZWRfYml0ID0gKHBnZF9sZXZlbCA9PSA1KSA/IFREWF9TSEFSRURfQklUX1BXTF81IDpcbi1cdFx0XHQgIFREWF9TSEFSRURfQklUX1BXTF80O1xuLVxuLVx0aWYgKEtWTV9CVUdfT04oc2hhcmVkX2JpdCAhPSBrdm1fZ2ZuX2RpcmVjdF9iaXRzKHZjcHUtXHUwMDNla3ZtKSwgdmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdGlmIChLVk1fQlVHX09OKHBnZF9sZXZlbCAhPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsLCB2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHRkX3ZtY3Nfd3JpdGU2NCh0b190ZHgodmNwdSksIFNIQVJFRF9FUFRfUE9JTlRFUiwgcm9vdF9ocGEpO1xuQEAgLTI3NjAsNiAmIzQzOzI3NTQsMTQgQEAgREVGSU5FX0NMQVNTKHRkeF92bV9zdGF0ZV9ndWFyZCwgdGR4X3ZtX3N0YXRlX2d1YXJkX3QsXG4gXHQgICAgIGlmICghSVNfRVJSKF9UKSkgdGR4X3JlbGVhc2Vfdm1fc3RhdGVfbG9ja3MoX1QpLFxuIFx0ICAgICB0ZHhfYWNxdWlyZV92bV9zdGF0ZV9sb2Nrcyhrdm0pLCBzdHJ1Y3Qga3ZtICprdm0pO1xuIFxuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGR4X3NldF9taXJyb3Jfcm9vdF9sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGludCBsZXZlbClcbiYjNDM7e1xuJiM0MztcdEJVSUxEX0JVR19PTihsZXZlbCAhPSA0IFx1MDAyNlx1MDAyNiBsZXZlbCAhPSA1KTtcbiYjNDM7XG4mIzQzO1x0a3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWwgPSBsZXZlbDtcbiYjNDM7XHRrdm0tXHUwMDNlYXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBncGFfdG9fZ2ZuKEJJVF9VTEwobGV2ZWwgPT0gNCA/IDQ3IDogNTEpKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHRkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXG4ge1xuIFx0c3RydWN0IGt2bV90ZHhfaW5pdF92bSBfX3VzZXIgKnVzZXJfZGF0YSA9IHU2NF90b191c2VyX3B0cihjbWQtXHUwMDNlZGF0YSk7XG5AQCAtMjgyMyw5ICYjNDM7MjgyNSw5IEBAIHN0YXRpYyBpbnQgdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZClcbiBcdGt2bV90ZHgtXHUwMDNleGZhbSA9IHRkX3BhcmFtcy1cdTAwM2V4ZmFtO1xuIFxuIFx0aWYgKHRkX3BhcmFtcy1cdTAwM2Vjb25maWdfZmxhZ3MgXHUwMDI2IFREWF9DT05GSUdfRkxBR1NfTUFYX0dQQVcpXG4tXHRcdGt2bS1cdTAwM2VhcmNoLmdmbl9kaXJlY3RfYml0cyA9IFREWF9TSEFSRURfQklUX1BXTF81O1xuJiM0MztcdFx0dGR4X3NldF9taXJyb3Jfcm9vdF9sZXZlbChrdm0sIDUpO1xuIFx0ZWxzZVxuLVx0XHRrdm0tXHUwMDNlYXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBURFhfU0hBUkVEX0JJVF9QV0xfNDtcbiYjNDM7XHRcdHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA0KTtcbiBcbiBcdGt2bV90ZHgtXHUwMDNlc3RhdGUgPSBURF9TVEFURV9JTklUSUFMSVpFRDtcbiBvdXQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0lOVEVMX1REWF9IT1NUJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTF9URFgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fbW11X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtrdm1faW5pdF9tbXUmIzM0OywKICAgICYjMzQ7a3ZtX2luaXRfc2hhZG93X25wdF9tbXUmIzM0OywKICAgICYjMzQ7dGR4X2xvYWRfbW11X3BnZCYjMzQ7LAogICAgJiMzNDt0ZHhfdGRfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0geDg2IE1NVSByb290IGxldmVsIGNhbGN1bGF0aW9uIGFuZCBURFAgY3JlYXRpb24gbG9naWMgKF9fa3ZtX21tdV9jcmVhdGUsIGt2bV9tbXVfZ2V0X3RkcF9sZXZlbCkgYW5kIHVwZGF0ZXMgVERYIG1pcnJvcmVkIHJvb3QgbGV2ZWwgaGFuZGxpbmcgKHRkeF9sb2FkX21tdV9wZ2QsIHRkeF90ZF9pbml0KS4gSXQgYWxzbyBhZGRzIGEgbmV3IFdBUk5fT05fT05DRSBhc3NlcnRpb24gZm9yIHVuaW5pdGlhbGl6ZWQgbWlycm9yX3Jvb3RfbGV2ZWwuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBkdXJpbmcgS1ZNIFZNIGFuZCB2Q1BVIGluaXRpYWxpemF0aW9uL2xpZmVjeWNsZSBvcGVyYXRpb25zIG9uIHg4Nl82NC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDcxZDA4YTEwOTUyOWM1ZjI0NmE1ZjdhYWViYmU5OTcxZGVkNTQxNWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDIzOjM0OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggNjgzYmI4YmY0M2E5NC4uZWRkNWFkMmU1YjUyZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0xNDA2LDYgJiM0MzsxNDA2LDcgQEAgc3RydWN0IGt2bV9hcmNoIHsKIAlzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgc3BsaXRfZGVzY19jYWNoZTsKIAogCWdmbl90IGdmbl9kaXJlY3RfYml0czsKJiM0MzsJaW50IG1pcnJvcl9yb290X2xldmVsOwogCiAJLyoKIAkgKiBTaXplIG9mIHRoZSBDUFUmIzM5O3MgZGlydHkgbG9nIGJ1ZmZlciwgaS5lLiBWTVgmIzM5O3MgUE1MIGJ1ZmZlci4gQSBaZXJvCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vY3B1aWQuYyBiL2FyY2gveDg2L2t2bS9jcHVpZC5jCmluZGV4IGRkYjAyMmNiMjAzYTIuLjM0YzYwOWE2MGVlZmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9jcHVpZC5jCkBAIC00ODMsMjAgJiM0Mzs0ODMsNiBAQCBpbnQgY3B1aWRfcXVlcnlfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJcmV0dXJuIDM2OwogfQogCi1pbnQgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqYmVzdDsKLQotCWJlc3QgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDAwKTsKLQlpZiAoIWJlc3QgfHwgYmVzdC0mZ3Q7ZWF4ICZsdDsgMHg4MDAwMDAwOCkKLQkJZ290byBub3RfZm91bmQ7Ci0JYmVzdCA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KHZjcHUsIDB4ODAwMDAwMDgpOwotCWlmIChiZXN0KQotCQlyZXR1cm4gKGJlc3QtJmd0O2VheCAmZ3Q7Jmd0OyAxNikgJmFtcDsgMHhmZjsKLW5vdF9mb3VuZDoKLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIFRoaXMgJiMzNDtyYXcmIzM0OyB2ZXJzaW9uIHJldHVybnMgdGhlIHJlc2VydmVkIEdQQSBiaXRzIHdpdGhvdXQgYW55IGFkanVzdG1lbnRzIGZvcgogICogZW5jcnlwdGlvbiB0ZWNobm9sb2dpZXMgdGhhdCB1c3VycCBiaXRzLiAgVGhlIHJhdyBtYXNrIHNob3VsZCBiZSB1c2VkIGlmIGFuZApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmggYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaAppbmRleCA4ZDg2M2Y0NTU4NWRlLi40NmJmZTg2OTllNjdmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vY3B1aWQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaApAQCAtNjgsNyAmIzQzOzY4LDYgQEAgdm9pZCBfX2luaXQga3ZtX2luaXRfeHN0YXRlX3NpemVzKHZvaWQpOwogdTMyIHhzdGF0ZV9yZXF1aXJlZF9zaXplKHU2NCB4c3RhdGVfYnYsIGJvb2wgY29tcGFjdGVkKTsKIAogaW50IGNwdWlkX3F1ZXJ5X21heHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLWludCBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHU2NCBrdm1fdmNwdV9yZXNlcnZlZF9ncGFfYml0c19yYXcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogc3RhdGljIGlubGluZSBpbnQgY3B1aWRfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwppbmRleCAwNjRlY2MzM2I5MjY3Li5kNDNiOGI2YzNiMTc5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKQEAgLTU5NTMsMTkgJiM0Mzs1OTUzLDIyIEBAIHZvaWQgX19rdm1fbW11X3JlZnJlc2hfcGFzc3Rocm91Z2hfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAKIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JaW50IG1heHBhOwotCi0JaWYgKHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKQotCQltYXhwYSA9IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcih2Y3B1KTsKLQllbHNlCi0JCW1heHBhID0gY3B1aWRfbWF4cGh5YWRkcih2Y3B1KTsKLQogCS8qIHRkcF9yb290X2xldmVsIGlzIGFyY2hpdGVjdHVyZSBmb3JjZWQgbGV2ZWwsIHVzZSBpdCBpZiBub256ZXJvICovCiAJaWYgKHRkcF9yb290X2xldmVsKQogCQlyZXR1cm4gdGRwX3Jvb3RfbGV2ZWw7CiAKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIFZNIGhhcyBtaXJyb3Igcm9vdHMsIHRoZW4gdGhlIHJvb3QgbGV2ZWwgaXMgcHJlZGVmaW5lZCBhcyB0aGUKJiM0MzsJICogbWlycm9yIHJvb3QgKGFuZCBieSBleHRlbnNpb24gdGhlIG5vcm1hbCByb290KSBuZWVkcyB0byBtYXRjaCB0aGUKJiM0MzsJICogcm9vdCBsZXZlbCB0aGF0IHdhcyBjb25maWd1cmVkIGZvciB0aGUgZXh0ZXJuYWwgcGFnZSB0YWJsZXMgdGhhdCBhcmUKJiM0MzsJICogYmVpbmcgbWlycm9yZWQgYnkgS1ZNLgomIzQzOwkgKi8KJiM0MzsJaWYgKGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtJmd0O2t2bSkgJmFtcDsmYW1wOwomIzQzOwkgICAgIVdBUk5fT05fT05DRSghdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm1pcnJvcl9yb290X2xldmVsKSkKJiM0MzsJCXJldHVybiB2Y3B1LSZndDtrdm0tJmd0O2FyY2gubWlycm9yX3Jvb3RfbGV2ZWw7CiYjNDM7CiAJLyogVXNlIDUtbGV2ZWwgVERQIGlmIGFuZCBvbmx5IGlmIGl0JiMzOTtzIHVzZWZ1bC9uZWNlc3NhcnkuICovCi0JaWYgKG1heF90ZHBfbGV2ZWwgPT0gNSAmYW1wOyZhbXA7IG1heHBhICZsdDs9IDQ4KQomIzQzOwlpZiAobWF4X3RkcF9sZXZlbCA9PSA1ICZhbXA7JmFtcDsgY3B1aWRfbWF4cGh5YWRkcih2Y3B1KSAmbHQ7PSA0OCkKIAkJcmV0dXJuIDQ7CiAKIAlyZXR1cm4gbWF4X3RkcF9sZXZlbDsKQEAgLTY4MzQsNyAmIzQzOzY4MzcsNyBAQCBzdGF0aWMgaW50IF9fa3ZtX21tdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21tdSAqbW11LCBzdHJ1Y3QgawogCSAqIG90aGVyIGV4Y2VwdGlvbiBpcyBmb3Igc2hhZG93aW5nIEwxJiMzOTtzIDMyLWJpdCBvciBQQUUgTlBUIG9uIDY0LWJpdAogCSAqIEtWTTsgdGhhdCBob3Jyb3IgaXMgaGFuZGxlZCBvbi1kZW1hbmQgYnkgbW11X2FsbG9jX3NwZWNpYWxfcm9vdHMoKS4KIAkgKi8KLQlpZiAodGRwX2VuYWJsZWQgJmFtcDsmYW1wOyBrdm1fbW11X2dldF90ZHBfbGV2ZWwodmNwdSkgJmd0OyBQVDMyRV9ST09UX0xFVkVMKQomIzQzOwlpZiAodGRwX2VuYWJsZWQgJmFtcDsmYW1wOyBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKCkgJmd0OyBQVDMyRV9ST09UX0xFVkVMKQogCQlyZXR1cm4gMDsKIAogCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX0RNQTMyKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCmluZGV4IGIyNzJjMjA1ODZhNzQuLmEwYmM5ZjgxOGY0MzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC90ZHguYwpAQCAtNTYsOSAmIzQzOzU2LDYgQEAKIGJvb2wgZW5hYmxlX3RkeCBfX3JvX2FmdGVyX2luaXQ7CiBtb2R1bGVfcGFyYW1fbmFtZWQodGR4LCBlbmFibGVfdGR4LCBib29sLCAwNDQ0KTsKIAotI2RlZmluZSBURFhfU0hBUkVEX0JJVF9QV0xfNSBncGFfdG9fZ2ZuKEJJVF9VTEwoNTEpKQotI2RlZmluZSBURFhfU0hBUkVEX0JJVF9QV0xfNCBncGFfdG9fZ2ZuKEJJVF9VTEwoNDcpKQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqdGR4X3N5c2luZm87CiAKIHZvaWQgdGRoX3ZwX3JkX2ZhaWxlZChzdHJ1Y3QgdmNwdV90ZHggKnRkeCwgY2hhciAqdWNsYXNzLCB1MzIgZmllbGQsIHU2NCBlcnIpCkBAIC0xNjA5LDEwICYjNDM7MTYwNiw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Rkdm1jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogdm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpCiB7Ci0JdTY0IHNoYXJlZF9iaXQgPSAocGdkX2xldmVsID09IDUpID8gVERYX1NIQVJFRF9CSVRfUFdMXzUgOgotCQkJICBURFhfU0hBUkVEX0JJVF9QV0xfNDsKLQotCWlmIChLVk1fQlVHX09OKHNoYXJlZF9iaXQgIT0ga3ZtX2dmbl9kaXJlY3RfYml0cyh2Y3B1LSZndDtrdm0pLCB2Y3B1LSZndDtrdm0pKQomIzQzOwlpZiAoS1ZNX0JVR19PTihwZ2RfbGV2ZWwgIT0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm1pcnJvcl9yb290X2xldmVsLCB2Y3B1LSZndDtrdm0pKQogCQlyZXR1cm47CiAKIAl0ZF92bWNzX3dyaXRlNjQodG9fdGR4KHZjcHUpLCBTSEFSRURfRVBUX1BPSU5URVIsIHJvb3RfaHBhKTsKQEAgLTI3NjAsNiAmIzQzOzI3NTQsMTQgQEAgREVGSU5FX0NMQVNTKHRkeF92bV9zdGF0ZV9ndWFyZCwgdGR4X3ZtX3N0YXRlX2d1YXJkX3QsCiAJICAgICBpZiAoIUlTX0VSUihfVCkpIHRkeF9yZWxlYXNlX3ZtX3N0YXRlX2xvY2tzKF9UKSwKIAkgICAgIHRkeF9hY3F1aXJlX3ZtX3N0YXRlX2xvY2tzKGt2bSksIHN0cnVjdCBrdm0gKmt2bSk7CiAKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGR4X3NldF9taXJyb3Jfcm9vdF9sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGludCBsZXZlbCkKJiM0Mzt7CiYjNDM7CUJVSUxEX0JVR19PTihsZXZlbCAhPSA0ICZhbXA7JmFtcDsgbGV2ZWwgIT0gNSk7CiYjNDM7CiYjNDM7CWt2bS0mZ3Q7YXJjaC5taXJyb3Jfcm9vdF9sZXZlbCA9IGxldmVsOwomIzQzOwlrdm0tJmd0O2FyY2guZ2ZuX2RpcmVjdF9iaXRzID0gZ3BhX3RvX2dmbihCSVRfVUxMKGxldmVsID09IDQgPyA0NyA6IDUxKSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCB0ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKQogewogCXN0cnVjdCBrdm1fdGR4X2luaXRfdm0gX191c2VyICp1c2VyX2RhdGEgPSB1NjRfdG9fdXNlcl9wdHIoY21kLSZndDtkYXRhKTsKQEAgLTI4MjMsOSAmIzQzOzI4MjUsOSBAQCBzdGF0aWMgaW50IHRkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpCiAJa3ZtX3RkeC0mZ3Q7eGZhbSA9IHRkX3BhcmFtcy0mZ3Q7eGZhbTsKIAogCWlmICh0ZF9wYXJhbXMtJmd0O2NvbmZpZ19mbGFncyAmYW1wOyBURFhfQ09ORklHX0ZMQUdTX01BWF9HUEFXKQotCQlrdm0tJmd0O2FyY2guZ2ZuX2RpcmVjdF9iaXRzID0gVERYX1NIQVJFRF9CSVRfUFdMXzU7CiYjNDM7CQl0ZHhfc2V0X21pcnJvcl9yb290X2xldmVsKGt2bSwgNSk7CiAJZWxzZQotCQlrdm0tJmd0O2FyY2guZ2ZuX2RpcmVjdF9iaXRzID0gVERYX1NIQVJFRF9CSVRfUFdMXzQ7CiYjNDM7CQl0ZHhfc2V0X21pcnJvcl9yb290X2xldmVsKGt2bSwgNCk7CiAKIAlrdm1fdGR4LSZndDtzdGF0ZSA9IFREX1NUQVRFX0lOSVRJQUxJWkVEOwogb3V0Ogo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjM5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIEtlcm5lbCBQYXRjaDogQU1ENjQgJmFtcDsgS1ZNL1REWCBJbXBsaWNhdGlvbnMqKgoKT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gZXZhbHVhdGUgdGhpcyBrZXJuZWwgcGF0Y2ggb24gdGhlIGFtZDY0IGFyY2hpdGVjdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGxldCYjMzk7cyBsb29rIGF0IHRoZSBwYXRjaCBjaGFuZ2VzIHRoZW1zZWx2ZXMuCgoqICAgYGFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhgOiBBIHNpbXBsZSBhZGRpdGlvbiBvZiBgaW50IG1pcnJvcl9yb290X2xldmVsYCB0byB0aGUgYGt2bV9hcmNoYCBzdHJ1Y3QuIE9rYXksIHRoYXQmIzM5O3MgYSBuZXcgc3RhdGUgdmFyaWFibGUuCgoqICAgYGFyY2gveDg2L2t2bS9jcHVpZC5jYCBhbmQgYGNwdWlkLmhgOiBMb29rcyBsaWtlIHRoZXkmIzM5O3JlIHJlbW92aW5nIHRoZSBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyByZWxldmFudC4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIG92ZXJhbGwgcHVycG9zZSBvZiB0aGlzIGNoYW5nZS4KCiogICBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2A6IFRoaXMgaXMgdGhlIGNvcmUgb2YgaXQsIEkgdGhpbmsuCiAgICAqICAgSW4gYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAsIHRoZXkmIzM5O3JlIGludHJvZHVjaW5nIGEgbmV3IGNvbmRpdGlvbmFsIHVzaW5nIGBrdm1faGFzX21pcnJvcmVkX3RkcGAgYW5kIGBtaXJyb3Jfcm9vdF9sZXZlbGAuIFRoaXMgaXMgcmVwbGFjaW5nIHRoZSBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYCBjYWxsLCB3aGljaCBzdHJvbmdseSBpbmRpY2F0ZXMgYSBkaWZmZXJlbnQgYXBwcm9hY2ggdG8gZGV0ZXJtaW5lIHRoZSBtYXhpbXVtIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgKG1heHBhKSBmb3IgVERYLCBvciBmb3Igc29tZSBnZW5lcmFsIEtWTSBNTVUgY2FzZS4KICAgICogICBJbiBgX19rdm1fbW11X2NyZWF0ZWAsIGl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYSBzbGlnaHQgdHdlYWsgdG8gaG93IHRoZSBURFAgbGV2ZWwgaXMgY2hlY2tlZC4gVGhleSYjMzk7cmUgbm93IHVzaW5nIGEgYGdldF9tYXhfdGRwX2xldmVsYCBjYWxsLgoKKiAgIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYDogSGVyZSYjMzk7cyB0aGUgVERYIHNwZWNpZmljIHN0dWZmLgogICAgKiAgIEluIGB0ZHhfbG9hZF9tbXVfcGdkYCwgdGhleSYjMzk7cmUgY2hlY2tpbmcgYWdhaW5zdCBgbWlycm9yX3Jvb3RfbGV2ZWxgLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhleSBzZWVtIHRvIGJlIGFzc2VydGluZyB0aGF0IHRoZSByb290IGxldmVsIHNob3VsZCBiZSBjb25zaXN0ZW50LCB1c2luZyBhIEtWTVxfQlVHXF9PTi4KICAgICogICBgdGR4X3RkX2luaXRgOiBUaGlzIHNldHMgYG1pcnJvcl9yb290X2xldmVsYCB0byBlaXRoZXIgNSBvciA0LCBhbmQgYGdmbl9kaXJlY3RfYml0c2AgYmFzZWQgb24gdGhhdCB2YWx1ZS4gSXQmIzM5O3MgYSBjcml0aWNhbCBzZXR1cCBmdW5jdGlvbi4KCk9rYXksIG5vdyBmb3IgdGhlIHJlYWNoYWJpbGl0eSBhbmFseXNpcy4gVGhlIHRhcmdldCBpcyBhbWQ2NCwgd2hpY2ggaXMgZXhwZWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgdGhpcyBpcyBzcGVjaWZpYyB0byBURFggb3IgZ2VuZXJhbCBLVk0gTU1VLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIG1vZGlmaWVkIGNvZGUgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZS4gSXMgaXQgb25seSBmb3IgVERYIFZNcywgb3IgaXMgaXQgYWxzbyByZWxldmFudCB0byBub3JtYWwgS1ZNIFZNcyB0aGF0IGFyZSBjYWxsaW5nIGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgIG9yIGBfX2t2bV9tbXVfY3JlYXRlYD8gVGhhdCB3b3VsZCBiZSBzaWduaWZpY2FudC4KClRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIHRvIHVzZSBhIHRvb2wgbGlrZSBgZ3JlcHBlcmAgdG8gc2VlIHdoZXJlIGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgLCBgX19rdm1fbW11X2NyZWF0ZWAgYW5kLCBtb3N0IGltcG9ydGFudGx5LCBga3ZtX2hhc19taXJyb3JlZF90ZHBgLCBhcmUgYWN0dWFsbHkgdXNlZCB3aXRoaW4gdGhlIEtWTSBjb2RlLiBUaGF0IHdpbGwgdGVsbCBtZSB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hpY2ggY29kZSBwYXRocyBhcmUgYWZmZWN0ZWQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgaWYgdGhpcyBwYXRjaCBpcyBtb3JlIHRoYW4ganVzdCBURFgtc3BlY2lmaWMuIEkgc3VzcGVjdCBpdCYjMzk7cyBtb3JlIGdlbmVyYWwgYW5kIG1heSBiZSBhIHJlZmFjdG9yaW5nIG9mIHRoZSBLVk0gTU1VIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX21tdV9nZXRfdGRwX2xldmVsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmM9NTkzOT12b2lkIF9fa3ZtX21tdV9yZWZyZXNoX3Bhc3N0aHJvdWdoX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk1My1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTk1NDpzdGF0aWMgaW5saW5lIGludCBrdm1fbW11X2dldF90ZHBfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTU1LXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5ODM9a3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTkzLVx0cm9sZS5hZF9kaXNhYmxlZCA9ICFrdm1fYWRfZW5hYmxlZDtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTk5NDpcdHJvbGUubGV2ZWwgPSBrdm1fbW11X2dldF90ZHBfbGV2ZWwodmNwdSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5OTUtXHRyb2xlLmRpcmVjdCA9IHRydWU7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02MDg4PXZvaWQga3ZtX2luaXRfc2hhZG93X25wdF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyNCxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxMDYtXHRyb290X3JvbGUgPSBjcHVfcm9sZS5iYXNlO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2MTA3Olx0cm9vdF9yb2xlLmxldmVsID0ga3ZtX21tdV9nZXRfdGRwX2xldmVsKHZjcHUpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTA4LVx0aWYgKHJvb3Rfcm9sZS5sZXZlbCA9PSBQVDY0X1JPT1RfNUxFVkVMIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNjkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYF9fa3ZtX21tdV9jcmVhdGVgIGFuZCBpdHMgQ2FsbGVycyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgX19rdm1fbW11X2NyZWF0ZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQuIFdoYXQmIzM5O3MgaXQgZG9pbmc/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGlzIGl0IG1hbmlwdWxhdGluZz8gV2hhdCBhcmUgdGhlIGtleSBpbml0aWFsaXphdGlvbiBzdGVwcyBpdCB1bmRlcnRha2VzPyBBbmQgZXF1YWxseSBpbXBvcnRhbnQsIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBncmFwaC4gV2hvJiMzOTtzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbj8gVW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzPyBXaHkgYXJlIHRoZXkgY2FsbGluZyBpdD8gV2hhdCBhc3N1bXB0aW9ucyBhcmUgYmVpbmcgbWFkZSBieSB0aGUgY2FsbGVycyBhYm91dCB0aGUgYmVoYXZpb3Igb2YgYF9fa3ZtX21tdV9jcmVhdGVgPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgdG8gY29uc2lkZXIsIGdpdmVuIHRoZSBuYXR1cmUgb2YgS1ZNPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aG9zZSBjYWxsZXJzIHRvIGVuc3VyZSB0aGF0IHRoZSBNTVUgY3JlYXRpb24gaXMgaGFuZGxlZCBwcm9wZXJseSB3aXRoaW4gdGhlIGxhcmdlciBLVk0gYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBjYWxsZXJzIHNldHVwIHRoZSBjb250ZXh0LCBlbnN1cmUgcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUsIGFuZCBjb3JyZWN0bHkgdGVhciBkb3duIHRoZSByZXNvdXJjZXMgY3JlYXRlZCBpZiBuZWVkZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19rdm1fbW11X2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY4MDQ9c3RhdGljIHZvaWQgZnJlZV9tbXVfcGFnZXMoc3RydWN0IGt2bV9tbXUgKm1tdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY4MTItXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY4MTM6c3RhdGljIGludCBfX2t2bV9tbXVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXUgKm1tdSwgc3RydWN0IGt2bV9wYWdld2FsayAqdylcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjgxNC17XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02ODY4PWludCBrdm1fbW11X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODg0LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2ODg1Olx0cmV0ID0gX19rdm1fbW11X2NyZWF0ZSh2Y3B1LCBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfbW11LCBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gubmdwYV93YWxrKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjg4Ni1cdGlmIChyZXQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODg4LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2ODg5Olx0cmV0ID0gX19rdm1fbW11X2NyZWF0ZSh2Y3B1LCBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gucm9vdF9tbXUsIFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5ndmFfd2Fsayk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY4OTAtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS1ZNIE1NVSBNZW50YWwgQ2hlY2tsaXN0KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIEtWTSYjMzk7cyBNTVUgc2V0dXAsIGFuZCBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgcGluZ2luZyBteSByYWRhci4gSSBzZWUgdGhhdCBga3ZtX21tdV9jcmVhdGVgIGlzIGNhbGxlZCB3aGVuIGEgbmV3IHZDUFUgcG9wcyB1cCB2aWEgdGhlIGBLVk1fQ1JFQVRFX1ZDUFVgIGlvY3RsLiBSaWdodCwgY2xhc3NpYyBpbml0aWFsaXphdGlvbi4gVGhlbiwgYGt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGVgIGFuZCBga3ZtX2luaXRfc2hhZG93X25wdF9tbXVgIGFyZSBpbnZvbHZlZCBpbiBNTVUgaW5pdGlhbGl6YXRpb24gYW5kIHVwZGF0ZXMsIGFzIGV4cGVjdGVkLiBJJiMzOTttIGtlZXBpbmcgYSBtZW50YWwgbm90ZSBvZiB0aGlzIGVudGlyZSBwcm9jZXNzLgoKSSBuZWVkIHRvIGtlZXAgbXkgZXllIG9uIHRoYXQgYFdBUk5fT05fT05DRSghdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm1pcnJvcl9yb290X2xldmVsKWAgaW4gYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAgLSB0aGF0IGNvdWxkIGJlY29tZSBhIHBvaW50IG9mIGNvbnRlbnRpb24gbGF0ZXIuIEl0JiMzOTtzIGluZGljYXRpbmcgc29tZSBtaXJyb3JpbmcgaXNzdWUgb3Igc3RhdGUgdGhhdCBuZWVkcyB0byBiZSB0cnVlLiBBbmQgSSYjMzk7bSBhbHNvIHNlZWluZyBhIGBLVk1fQlVHX09OYCBpbiBgdGR4X2xvYWRfbW11X3BnZGAsIHdoaWNoLCB5b3Uga25vdywgaXMgbmV2ZXIgZ29vZC4gR290dGEga2VlcCBhbiBleWUgb24gdGhhdC4KCk5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIHRoaXMgYGt2bV9oYXNfbWlycm9yZWRfdGRwYC4gSXQmIzM5O3MgdXNlZCBhIGxvdC4gV2hlcmUgaXMgaXQgZGVmaW5lZD8gSSBuZWVkIHRvIHRyYWNrIGRvd24gaXRzIGltcGxlbWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIG1pcnJvcmluZyBsb2dpYyB0aG9yb3VnaGx5LiBUaGlzIGlzIHRoZSBuZXh0IHRoaW5nIHRvIGludmVzdGlnYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9oYXNfbWlycm9yZWRfdGRwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUuaD0zODA9c3RhdGljIGlubGluZSBncGFfdCBrdm1fdHJhbnNsYXRlX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS5oLTM5MS1cbmFyY2gveDg2L2t2bS9tbXUuaDozOTI6c3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbWlycm9yZWRfdGRwKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9tbXUuaC0zOTMte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjA2PXN0YXRpYyBpbnQgbW11X3RvcHVwX21lbW9yeV9jYWNoZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIG1heWJlX2luZGlyZWN0KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjE0LVx0XHRyZXR1cm4gcjtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjE1Olx0aWYgKGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtXHUwMDNla3ZtKSkge1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTYtXHRcdHIgPSBrdm1fbW11X3RvcHVwX21lbW9yeV9jYWNoZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gubW11X2V4dGVybmFsX3NwdF9jYWNoZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTM5ODY9c3RhdGljIGludCBtbXVfYWxsb2NfZGlyZWN0X3Jvb3RzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5OTQtXHRpZiAodGRwX21tdV9lbmFibGVkKSB7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM5OTU6XHRcdGlmIChrdm1faGFzX21pcnJvcmVkX3RkcCh2Y3B1LVx1MDAzZWt2bSkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5OTYtXHRcdCAgICAhVkFMSURfUEFHRShtbXUtXHUwMDNlbWlycm9yX3Jvb3RfaHBhKSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTQ9c3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NjUtXHQgKi9cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTk2NjpcdGlmIChrdm1faGFzX21pcnJvcmVkX3RkcCh2Y3B1LVx1MDAzZWt2bSkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NjctXHQgICAgIVdBUk5fT05fT05DRSghdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbCkpXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg9MzA9c3RhdGljIGlubGluZSBlbnVtIGt2bV90ZHBfbW11X3Jvb3RfdHlwZXMga3ZtX2dmbl9yYW5nZV9maWx0ZXJfdG9fcm9vdF90eXBlcyhzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtMzQtXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaDozNTpcdGlmICgha3ZtX2hhc19taXJyb3JlZF90ZHAoa3ZtKSlcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTM2LVx0XHRyZXR1cm4gS1ZNX0RJUkVDVF9ST09UUztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mjc4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgYGt2bV9oYXNfbWlycm9yZWRfdGRwYCBpbiBgbW11LmhgKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBga3ZtX2hhc19taXJyb3JlZF90ZHBgIGZ1bmN0aW9uIHdvcmtzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbmF2aWdhdGluZyB0byBgYXJjaC94ODYva3ZtL21tdS5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM5Mi4gSSBuZWVkIHRvIHNlZSB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24uIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggS1ZNJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIFRyYW5zcGFyZW50IFBhZ2UgU2hhcmluZyAoVFBTKSBvciBzb21lIGZvcm0gb2YgbWVtb3J5IGRlZHVwbGljYXRpb24gb3B0aW1pemF0aW9uIGluIHRoZSBUcmFuc2xhdGlvbiBMb29rYXNpZGUgQnVmZmVyIChUTEIpIG1hbmFnZW1lbnQuIEkgc3VzcGVjdCB3ZSYjMzk7bGwgc2VlIHNvbWUgY2hlY2tzIHJlbGF0ZWQgdG8gaGFyZHdhcmUgZmVhdHVyZXMsIG1heWJlIENQVUlEIGZsYWdzIG9yIE1TUnMsIG9yIHBlcmhhcHMgZXZlbiBzb21lIGdsb2JhbCBLVk0gc3RhdGUuIEtub3dpbmcgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgaXMga2V5IGZvciB1bmRlcnN0YW5kaW5nIGNlcnRhaW4gZ3Vlc3QgbWVtb3J5IGJlaGF2aW9ycy4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB0aGUgaG9zdCYjMzk7cyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4NTpcdHtcbiAzODY6XHRcdGlmICghbW11X2lzX25lc3RlZCh2Y3B1KSB8fCB3ID09IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5uZ3BhX3dhbGspXG4gMzg3Olx0XHRcdHJldHVybiBncGE7XG4gMzg4Olx0XHRyZXR1cm4ga3ZtX25lc3RlZF9jYWxsKHRyYW5zbGF0ZV9uZXN0ZWRfZ3BhKSh2Y3B1LCBncGEsIGFjY2VzcyxcbiAzODk6XHRcdFx0XHRcdFx0XHQgICAgIGV4Y2VwdGlvbiwgcHRlX2FjY2Vzcyk7XG4gMzkwOlx0fVxuIDM5MTpcdFxuIDM5MjpcdHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX21pcnJvcmVkX3RkcChjb25zdCBzdHJ1Y3Qga3ZtICprdm0pXG4gMzkzOlx0e1xuIDM5NDpcdFx0cmV0dXJuIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk07XG4gMzk1Olx0fVxuIDM5NjpcdFxuIDM5NzpcdHN0YXRpYyBpbmxpbmUgZ2ZuX3Qga3ZtX2dmbl9kaXJlY3RfYml0cyhjb25zdCBzdHJ1Y3Qga3ZtICprdm0pXG4gMzk4Olx0e1xuIDM5OTpcdFx0cmV0dXJuIGt2bS1cdTAwM2VhcmNoLmdmbl9kaXJlY3RfYml0cztcbiA0MDA6XHR9XG4gNDAxOlx0XG4gNDAyOlx0c3RhdGljIGlubGluZSBib29sIGt2bV9pc19hZGRyX2RpcmVjdChzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSlcbiA0MDM6XHR7XG4gNDA0Olx0XHRncGFfdCBncGFfZGlyZWN0X2JpdHMgPSBnZm5fdG9fZ3BhKGt2bV9nZm5fZGlyZWN0X2JpdHMoa3ZtKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NDAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLY29uZmlnIENvbmZpZ3VyYXRpb24gRXhhbWluYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIEtWTSBhbmQgVERYIHN1cHBvcnQgb24geDg2IGFyY2hpdGVjdHVyZXMuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUsIHdoaWNoIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZm9yIEtWTS1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBBIHNpbXBsZSBncmVwIGZvciAmIzM0O0tWTSYjMzQ7IHdpdGhpbiB0aGF0IGZpbGUgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBvdmVydmlldyBvZiB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjb3JlIEtWTSBlbmFibGVtZW50LCBhbG9uZyB3aXRoIGFueSBURFgtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgaWYgdGhleSBleGlzdC4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gcGFyc2UgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBpbnRlcmxpbmtlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTczOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE4LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMwOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMzpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNzgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBLVk1fSU5URUxfVERYIERlcGVuZGVuY2llcyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmb3IgYEtWTV9JTlRFTF9URFhgIHdpdGhpbiB0aGUgYGFyY2gveDg2L2t2bWAgZGlyZWN0b3J5LiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGRlcGVuZGVuY2llcyBoZXJlLiBVbmRlcnN0YW5kaW5nIHRoZXNlIHJlbGF0aW9uc2hpcHMgaXMgY3J1Y2lhbC4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgd2hhdCBvdGhlciBmZWF0dXJlcyBvciBvcHRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBvciBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggVERYIHN1cHBvcnQuIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgSW50ZWwgQ1BVIG1vZGVscywgbWljcm9hcmNoaXRlY3R1cmVzLCBvciBwYXJ0aWN1bGFyIGhhcmR3YXJlIGV4dGVuc2lvbnMgdGhhdCBhcmUgcHJlcmVxdWlzaXRlcz8gQW55IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGRpc2FibGUgVERYIGlmIHNlbGVjdGVkPyBPciBwZXJoYXBzIG90aGVyIEtWTS1yZWxhdGVkIGZlYXR1cmVzIHRoYXQgVERYIGJ1aWxkcyBvbj8gVGhlIEtjb25maWcgZmlsZSBpcyB0aGUgZGVmaW5pdGl2ZSBzb3VyY2UgZm9yIHRoaXMsIHNvIEkmIzM5O2xsIHNjYW4gaXQgY2FyZWZ1bGx5LCBub3RpbmcgYW55IGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIG9yIGBkZWZhdWx0YCBjbGF1c2VzIHRoYXQgcmVsYXRlIHRvIGBLVk1fSU5URUxfVERYYC4gQW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgaW50ZXJhY3Rpb25zIHdpdGggZXhpc3RpbmcgS1ZNIGNvZGUgSSBzaG91bGQgYmUgYXdhcmUgb2YuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBub3RlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHRcdCAgZ3Vlc3RzIHZpYSBhIGRldmljZSBub2RlLCBlLmcuIC9kZXYvc2d4X3ZlcGMuXG4gMTMxOlx0XG4gMTMyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTMzOlx0XG4gMTM0Olx0Y29uZmlnIEtWTV9JTlRFTF9URFhcbiAxMzU6XHRcdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuIDEzNjpcdFx0ZGVmYXVsdCB5XG4gMTM3Olx0XHRkZXBlbmRzIG9uIElOVEVMX1REWF9IT1NUXG4gMTM4Olx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbiAxMzk6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcbiAxNDA6XHRcdGhlbHBcbiAxNDE6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgbGF1bmNoaW5nIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpXG4gMTQyOlx0XHQgIGNvbmZpZGVudGlhbCBWTXMgb24gSW50ZWwgcHJvY2Vzc29ycy5cbiAxNDM6XHRcbiAxNDQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNDU6XHRcbiAxNDY6XHRjb25maWcgS1ZNX0FNRFxuIDE0NzpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gMTQ4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXG4gMTQ5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTcyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGlnZ2luZyBpbnRvIHRoZSBLVk0geDg2IEJ1aWxkIFByb2Nlc3MqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBLVk0geDg2IGNvbXBvbmVudHMgYXJlIGJ1aWx0LiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiBgY3B1aWQub2AsIGBtbXUub2AsIGFuZCBgdGR4Lm9gIOKAkyB0aG9zZSBhcmUgY3JpdGljYWwgcGllY2VzIG9mIHRoZSBwdXp6bGUgZm9yIHZpcnR1YWxpemF0aW9uIG9uIHg4NiwgZXNwZWNpYWxseSB3aXRoIFREWC4gSSBrbm93IHRoZSBzb3VyY2UgY29kZSBpcyBpbiBgYXJjaC94ODYva3ZtL2AsIGJ1dCBJIHNob3VsZCByZWFsbHkgY29uc3VsdCB0aGUgYE1ha2VmaWxlYCBpbiAqdGhhdCogZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgYnVpbGQgbWFnaWMgaGFwcGVucy4gVGhlIE1ha2VmaWxlIHdpbGwgcmV2ZWFsIHRoZSBjb21waWxlciBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgb3ZlcmFsbCBjb21waWxhdGlvbiBmbG93IHRoYXQgcHJvZHVjZXMgdGhlc2Ugb2JqZWN0IGZpbGVzLiBVbmRlcnN0YW5kaW5nIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzIGlzIGVzc2VudGlhbCB0byBtb2RpZnlpbmcsIGRlYnVnZ2luZywgb3IgZXh0ZW5kaW5nIHRoZXNlIG1vZHVsZXMsIGFuZCB0byBjb25maXJtIHRoYXQgaXQgYnVpbGRzIGFzIGV4cGVjdGVkLiBLbm93aW5nIHRoZSBidWlsZCBwcm9jZXNzIHdpbGwgYWxzbyBnaXZlIG1lIGltcG9ydGFudCBjbHVlcyBhYm91dCBob3cgdGhlc2UgY29tcG9uZW50cyBpbnRlcmFjdCBhbmQgd2hhdCBleHRlcm5hbCBkZXBlbmRlbmNpZXMgdGhleSByZWx5IHVwb24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IE1ha2VmaWxlIGhhcyB0byBzYXkuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGR4Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL01ha2VmaWxlPTIxPWt2bS1pbnRlbC0kKENPTkZJR19LVk1fSFlQRVJWKVx0JiM0Mzs9IHZteC9oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZToyMjprdm0taW50ZWwtJChDT05GSUdfS1ZNX0lOVEVMX1REWClcdCYjNDM7PSB2bXgvdGR4Lm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yMy1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz04NjM9c3RhdGljIGludCB2dF9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NzItI2RlZmluZSB2dF9vcChuYW1lKSB2dF8jI25hbWVcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjg3MzojZGVmaW5lIHZ0X29wX3RkeF9vbmx5KG5hbWUpIHZ0XyMjbmFtZVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODc0LSNlbHNlIC8qIENPTkZJR19LVk1fSU5URUxfVERYICovXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NzUtI2RlZmluZSB2dF9vcChuYW1lKSB2bXhfIyNuYW1lXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4NzY6I2RlZmluZSB2dF9vcF90ZHhfb25seShuYW1lKSBOVUxMXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NzctI2VuZGlmIC8qIENPTkZJR19LVk1fSU5URUxfVERYICovXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODg4PXN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTA0LVx0LnZtX2Rlc3Ryb3kgPSB2dF9vcCh2bV9kZXN0cm95KSxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjkwNTpcdC52bV9wcmVfZGVzdHJveSA9IHZ0X29wX3RkeF9vbmx5KHZtX3ByZV9kZXN0cm95KSxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTkwNi1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy05NDktXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo5NTA6XHQudmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiA9IHZ0X29wX3RkeF9vbmx5KHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pLFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTUxLVx0LnZjcHVfcnVuID0gdnRfb3AodmNwdV9ydW4pLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwMzQtXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDM1Olx0Lm1lbV9lbmNfaW9jdGwgPSB2dF9vcF90ZHhfb25seShtZW1fZW5jX2lvY3RsKSxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwMzY6XHQudmNwdV9tZW1fZW5jX2lvY3RsID0gdnRfb3BfdGR4X29ubHkodmNwdV9tZW1fZW5jX2lvY3RsKSxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwMzc6XHQudmNwdV9tZW1fZW5jX3VubG9ja2VkX2lvY3RsID0gdnRfb3BfdGR4X29ubHkodmNwdV9tZW1fZW5jX3VubG9ja2VkX2lvY3RsKSxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwMzgtXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDM5Olx0LmdtZW1fbWF4X21hcHBpbmdfbGV2ZWwgPSB2dF9vcF90ZHhfb25seShnbWVtX21heF9tYXBwaW5nX2xldmVsKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTA0MC19O1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MjE1PXN0YXRpYyBERUZJTkVfTVVURVgodGR4X2xvY2spO1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yMTYtXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjIxNzpzdGF0aWMgYm9vbCB0ZHhfb3BlcmFuZF9idXN5KHU2NCBlcnIpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTIxOC17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yNzQ9c3RhdGljIGlubGluZSB2b2lkIHRkeF9kaXNhc3NvY2lhdGVfdnAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzA3LVx0X19lcnIgPSB0ZGhfZnVuYyhhcmdzKTtcdFx0XHRcdFx0XHRcdFxcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjMwODpcdGlmICh1bmxpa2VseSh0ZHhfb3BlcmFuZF9idXN5KF9fZXJyKSkpIHtcdFx0XHRcdFxcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMwOS1cdFx0V1JJVEVfT05DRShfX2t2bV90ZHgtXHUwMDNld2FpdF9mb3Jfc2VwdF96YXAsIHRydWUpO1x0XHRcdFxcXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz05ODU9c3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtOTk5LVx0ICovXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjEwMDA6XHRpZiAodW5saWtlbHkodGR4X29wZXJhbmRfYnVzeSh2cF9lbnRlcl9yZXQpKSlcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTAwMS1cdFx0cmV0dXJuIEVYSVRfRkFTVFBBVEhfRVhJVF9IQU5ETEVEO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MTYxNT1zdGF0aWMgaW50IHRkeF9tZW1fcGFnZV9hZGQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNjI5LVx0XHRcdCAgICAgICBcdTAwMjZlbnRyeSwgXHUwMDI2bGV2ZWxfc3RhdGUpO1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNjMwOlx0aWYgKHVubGlrZWx5KHRkeF9vcGVyYW5kX2J1c3koZXJyKSkpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE2MzEtXHRcdHJldHVybiAtRUJVU1k7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0xNjM5PXN0YXRpYyBpbnQgdGR4X21lbV9wYWdlX2F1ZyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE2NDctXHRlcnIgPSB0ZGhfbWVtX3BhZ2VfYXVnKFx1MDAyNmt2bV90ZHgtXHUwMDNldGQsIGdwYSwgbGV2ZWwsIHBmbiwgXHUwMDI2ZW50cnksIFx1MDAyNmxldmVsX3N0YXRlKTtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MTY0ODpcdGlmICh1bmxpa2VseSh0ZHhfb3BlcmFuZF9idXN5KGVycikpKVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNjQ5LVx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MTY3MD1zdGF0aWMgaW50IHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNjgyLVx0XHRcdCAgICAgICBcdTAwMjZlbnRyeSwgXHUwMDI2bGV2ZWxfc3RhdGUpO1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNjgzOlx0aWYgKHVubGlrZWx5KHRkeF9vcGVyYW5kX2J1c3koZXJyKSkpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE2ODQtXHRcdHJldHVybiAtRUJVU1k7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yODc2PXN0YXRpYyBpbnQgdGR4X3RkX2ZpbmFsaXplKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yODgzLVx0Y21kLVx1MDAzZWh3X2Vycm9yID0gdGRoX21yX2ZpbmFsaXplKFx1MDAyNmt2bV90ZHgtXHUwMDNldGQpO1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoyODg0Olx0aWYgKHRkeF9vcGVyYW5kX2J1c3koY21kLVx1MDAzZWh3X2Vycm9yKSlcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjg4NS1cdFx0cmV0dXJuIC1FQlVTWTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNjYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIFREWCBDb25maWd1cmF0aW9uIGluIEtWTSBmb3IgeDg2KioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcyBURFggY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyB3aGVuIEkmIzM5O20gZGVhbGluZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHg4NiB2aXJ0dWFsaXphdGlvbiwgZXNwZWNpYWxseSBLVk0uIE15IGdvYWwgaXMgdG8gcGlucG9pbnQgZXhhY3RseSB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbiwgdGhlIG9uZSBsYWJlbGVkIGBJTlRFTF9URFhfSE9TVGAsIGlzIHRoZSBrZXkgZW5hYmxlciBmb3IgZW5hYmxpbmcgVERYIHN1cHBvcnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgYXNzb2NpYXRlZCB3aXRoIGl0LiBUaGlzIGlzIHRoZSBmaXJzdCBzdG9wLCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTlRFTF9URFhfSE9TVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9MTg0ND1jb25maWcgWDg2X1VTRVJfU0hBRE9XX1NUQUNLXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xODYzLVxuYXJjaC94ODYvS2NvbmZpZzoxODY0OmNvbmZpZyBJTlRFTF9URFhfSE9TVFxuYXJjaC94ODYvS2NvbmZpZy0xODY1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MDYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA1MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogS1ZNIE1NVSBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgd2l0aGluIHRoZSBLVk0gTU1VIGNvZGUuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gdHdvIGtleSBhcmVhczogYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAgYW5kIGBfX2t2bV9tbXVfY3JlYXRlYC4KCkxvb2tpbmcgYXQgYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAsIGl0JiMzOTtzIGNsZWFyIHRoaXMgZnVuY3Rpb24gcGxheXMgYSByb2xlIGluIGhvdyB3ZSBkZXRlcm1pbmUgdGhlIFREUCBNTVUgcm9vdCBsZXZlbCwgZXNwZWNpYWxseSBkdXJpbmcgY2FsY3VsYXRpb25zIGxpa2UgYGt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGVgIGFuZCBga3ZtX2luaXRfc2hhZG93X25wdF9tbXVgLiBUaGVyZSYjMzk7cyBhIGBXQVJOX09OX09OQ0VgIGhlcmUsIGxpbmtlZCB0byBgbWlycm9yX3Jvb3RfbGV2ZWxgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBzb21ldGhpbmcgaW1wb3J0YW50IHJlbGF0ZWQgdG8gdGhlIG1pcnJvcmVkIHJvb3QgZnVuY3Rpb25hbGl0eS4gVGhlIGNoYW5nZXMgdG8gdGhlIGxvZ2ljIGZvciBnZW5lcmFsIFZNcyBhcmUgYWxzbyBzaWduaWZpY2FudC4gVGhlIG9yaWdpbmFsIGxvZ2ljIG1hZGUgZGVjaXNpb25zIGJhc2VkIG9uIHRoZSBWTSB0eXBlIChURFggb3IgZ2VuZXJhbCksIHVzaW5nIGBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHJgIGFuZCBgY3B1aWRfbWF4cGh5YWRkcmAgcmVzcGVjdGl2ZWx5LiBUaGUgbmV3IGNvZGUgbm93IGluY29ycG9yYXRlcyBga3ZtX2hhc19taXJyb3JlZF90ZHBgIGFuZCB1c2VzIGB2Y3B1LSZndDtrdm0tJmd0O2FyY2gubWlycm9yX3Jvb3RfbGV2ZWxgIGRpcmVjdGx5IGlmIHRoZSBtaXJyb3JpbmcgaXMgZW5hYmxlZCwgc3VnZ2VzdGluZyBhIHJlZmFjdG9yaW5nIG9yIG9wdGltaXphdGlvbiByZWxhdGVkIHRvIHRoZSBtaXJyb3JlZCBURFAgZmVhdHVyZS4gVGhlIGNoZWNrIGZvciA1LWxldmVsIFREUCBiYXNlZCBvbiBgY3B1aWRfbWF4cGh5YWRkcih2Y3B1KSAmbHQ7PSA0OGAgcmVtYWlucywgYnV0IGl0JiMzOTtzIG5vdyBzZWNvbmRhcnkuCgpUaGUgc2Vjb25kIGFyZWEgb2YgaW50ZXJlc3QgaXMgaW4gYF9fa3ZtX21tdV9jcmVhdGVgLiBIZXJlLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQ6IGl0IG5vdyBjYWxscyBga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpYCBpbnN0ZWFkIG9mIGBrdm1fbW11X2dldF90ZHBfbGV2ZWwoKWAuIFRoaXMgaXMgY2FsbGVkIHdpdGggKmV2ZXJ5KiBgS1ZNX0NSRUFURV9WQ1BVYCBpb2N0bCwgc28gaXQmIzM5O3MgYSBjcml0aWNhbCBwYXRoLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBhbmQgdXNhZ2Ugb2YgYGt2bV9tbXVfZ2V0X21heF90ZHBfbGV2ZWwoKWAuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoaXMgVERQIGxldmVsIGRldGVybWluYXRpb24uIEl0JiMzOTtzIGxpa2VseSB0aGlzIGNoYW5nZSBpcyBhaW1lZCBhdCBkZWNvdXBsaW5nIG9yIGdlbmVyYWxpemluZyB0aGUgVERQIGxldmVsIGNhbGN1bGF0aW9uLiBUaGlzIHdpbGwgd2FycmFudCBmdXJ0aGVyIGluc3BlY3Rpb24gb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKClgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9jcHVpZC5jPTE0MTg9c3RhdGljIGlubGluZSBpbnQgX19kb19jcHVpZF9mdW5jKHN0cnVjdCBrdm1fY3B1aWRfYXJyYXkgKmFycmF5LCB1MzIgZnVuY3Rpb24pXG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTgxMS1cdFx0XHRnX3BoeXNfYXMgPSBwaHlzX2FzO1xuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTgxMjpcdFx0XHRpZiAoa3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpIFx1MDAzYyA1KVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTgxMy1cdFx0XHRcdGdfcGh5c19hcyA9IG1pbihnX3BoeXNfYXMsIDQ4VSk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS5oPTk5PXN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfaGFzX21iZWMoc3RydWN0IGt2bV9tbXUgKm1tdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTAzLVxuYXJjaC94ODYva3ZtL21tdS5oOjEwNDp1OCBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKHZvaWQpO1xuYXJjaC94ODYva3ZtL21tdS5oLTEwNS1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTQ9c3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NzYtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5Nzc6dTgga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCh2b2lkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTc4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY4MTM9c3RhdGljIGludCBfX2t2bV9tbXVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXUgKm1tdSwgc3RydWN0IGt2bV9wYWdld2FsayAqdylcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY4MzktXHQgKi9cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Njg0MDpcdGlmICh0ZHBfZW5hYmxlZCBcdTAwMjZcdTAwMjYga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpIFx1MDAzZSBQVDMyRV9ST09UX0xFVkVMKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODQxLVx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyODgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0LCB0aGlua2luZyBsaWtlIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gS1ZNIE1NVSBDcmVhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgX19rdm1fbW11X2NyZWF0ZWAgd2l0aGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBNTVUgY3JlYXRpb24gcHJvY2Vzcywgc28gSSYjMzk7bSBob25pbmcgaW4gb24gbGluZXMgNjgxMyB0aHJvdWdoIDY4NjUuIFRoaXMgc2VjdGlvbiBwcm9iYWJseSBsYXlzIG91dCB0aGUgY29yZSBsb2dpYyBmb3IgaW5pdGlhbGl6aW5nIHRoZSBLVk0gTU1VIGRhdGEgc3RydWN0dXJlcyBzcGVjaWZpYyB0byB4ODYuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZToKCiogICAqKkFsbG9jYXRpb246KiogVGhlIGFsbG9jYXRpb24gb2YgdGhlIHJlbGV2YW50IE1NVSBzdHJ1Y3R1cmVzLCBsaWtlbHkgaW52b2x2aW5nIGBrbWFsbG9jYCBvciBzaW1pbGFyIG1lbW9yeSBtYW5hZ2VtZW50LiBXZSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHNwZWNpZmljIGFsaWdubWVudCByZXF1aXJlbWVudHMgdG9vLCBtYXliZSBzb21lIGNhY2hlLWxpbmUgcGFkZGluZy4gSSBzaG91bGQgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgc3RydWN0dXJlcyBhbGxvY2F0ZWQgaW4gdGhpcyBzZWN0aW9uLCBhbmQgd2hldGhlciB0aGV5IGFyZSBpbml0aWFsaXplZC4KKiAgICoqSW5pdGlhbGl6YXRpb246KiogVGhlcmUgd2lsbCBoYXZlIHRvIGJlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwcmltYXJ5IE1NVSBzdGF0ZSwgYW5kIHRoYXQgY291bGQgaW52b2x2ZSBzZXR0aW5nIGluaXRpYWwgdmFsdWVzIGZvciB2YXJpb3VzIGNvbnRyb2wgcmVnaXN0ZXJzIG9yIGludGVybmFsIGZsYWdzLiBUaGlzIHBhcnQgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN0YXJ0aW5nIHBvaW50IG9mIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgdHJhbnNsYXRpb24uCiogICAqKkVycm9yIEhhbmRsaW5nOioqIEl0JiMzOTtzIHVubGlrZWx5IHRoaXMgaXMgY29tcGxldGVseSBlcnJvci1mcmVlLiBJJiMzOTtsbCBuZWVkIHRvIHdhdGNoIGZvciBwb3RlbnRpYWwgZXJyb3IgcmV0dXJucyBhbmQgZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgZXJyb3IgcGF0aHMuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgZGVmZW5zaXZlIHByb2dyYW1taW5nLiBJJiMzOTtsbCBhbHNvIGNoZWNrIGlmIHRoZXJlIGlzIHNwZWNpZmljIGNvZGUgd2hpY2ggaXMgZXhlY3V0ZWQgaWYgYW4gYWxsb2NhdGlvbiBmYWlscy4KKiAgICoqU3RydWN0dXJlIFBvcHVsYXRpb246KiogT2Z0ZW4sIHRoZXNlIE1NVSBjcmVhdGUgZnVuY3Rpb25zIGhhdmUgdG8gc2V0IHNvbWUgbWV0YWRhdGEsIHdoaWNoIGlzIHVzZWQgbGF0ZXIgdG8gcXVpY2tseSBjaGVjayBpZiBhIHNwZWNpZmljIHBhZ2UgdGFibGUgaXMgdmFsaWQgYW5kIGNvbmZpZ3VyZWQuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCB0aGlzIGxvZ2ljIG1pZ2h0IGludm9sdmUgc2V0dGluZyBzb21lIGZsYWdzIG9yIHBvaW50ZXJzIHdpdGhpbiB0aGUgbmV3IE1NVSBzdHJ1Y3R1cmUuCgpNeSBnb2FsIGhlcmUgaXMgdG8gZXN0YWJsaXNoIGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoZSBLVk0gTU1VIGNvbnRleHQgaXMgY3JlYXRlZCwgd2hhdCBpbmZvcm1hdGlvbiBpdCBob2xkcyBpbml0aWFsbHksIGFuZCB3aGF0IHNldHVwIGlzIGRvbmUuIFVuZGVyc3RhbmRpbmcgdGhpcyBmb3VuZGF0aW9uIGlzIGVzc2VudGlhbCBmb3IgZGVidWdnaW5nIGFuZCBtb2RpZnlpbmcgdGhlIE1NVSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjgxMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2ODEzOlx0c3RhdGljIGludCBfX2t2bV9tbXVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXUgKm1tdSwgc3RydWN0IGt2bV9wYWdld2FsayAqdylcbjY4MTQ6XHR7XG42ODE1Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjY4MTY6XHRcdGludCBpO1xuNjgxNzpcdFxuNjgxODpcdFx0bW11LVx1MDAzZXcgPSB3O1xuNjgxOTpcdFx0bW11LVx1MDAzZXJvb3QuaHBhID0gSU5WQUxJRF9QQUdFO1xuNjgyMDpcdFx0bW11LVx1MDAzZXJvb3QucGdkID0gMDtcbjY4MjE6XHRcdG1tdS1cdTAwM2VtaXJyb3Jfcm9vdF9ocGEgPSBJTlZBTElEX1BBR0U7XG42ODIyOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBLVk1fTU1VX05VTV9QUkVWX1JPT1RTOyBpJiM0MzsmIzQzOylcbjY4MjM6XHRcdFx0bW11LVx1MDAzZXByZXZfcm9vdHNbaV0gPSBLVk1fTU1VX1JPT1RfSU5GT19JTlZBTElEO1xuNjgyNDpcdFxuNjgyNTpcdFx0LyogdmNwdS1cdTAwM2VhcmNoLmd1ZXN0X21tdSBpc24mIzM5O3QgdXNlZCB3aGVuICF0ZHBfZW5hYmxlZC4gKi9cbjY4MjY6XHRcdGlmICghdGRwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IG1tdSA9PSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfbW11KVxuNjgyNzpcdFx0XHRyZXR1cm4gMDtcbjY4Mjg6XHRcbjY4Mjk6XHRcdC8qXG42ODMwOlx0XHQgKiBXaGVuIHVzaW5nIFBBRSBwYWdpbmcsIHRoZSBmb3VyIFBEUFRFcyBhcmUgdHJlYXRlZCBhcyAmIzM5O3Jvb3QmIzM5OyBwYWdlcyxcbjY4MzE6XHRcdCAqIHdoaWxlIHRoZSBQRFAgdGFibGUgaXMgYSBwZXItdkNQVSBjb25zdHJ1Y3QgdGhhdCYjMzk7cyBhbGxvY2F0ZWQgYXQgTU1VXG42ODMyOlx0XHQgKiBjcmVhdGlvbi4gIFdoZW4gZW11bGF0aW5nIDMyLWJpdCBtb2RlLCBjcjMgaXMgb25seSAzMiBiaXRzIGV2ZW4gb25cbjY4MzM6XHRcdCAqIHg4Nl82NC4gIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIGFsbG9jYXRlIHRoZSBQRFAgdGFibGUgaW4gdGhlIGZpcnN0XG42ODM0Olx0XHQgKiA0R0Igb2YgbWVtb3J5LCB3aGljaCBoYXBwZW5zIHRvIGZpdCB0aGUgRE1BMzIgem9uZS4gIFREUCBwYWdpbmdcbjY4MzU6XHRcdCAqIGdlbmVyYWxseSBkb2VzbiYjMzk7dCB1c2UgUEFFIHBhZ2luZyBhbmQgY2FuIHNraXAgYWxsb2NhdGluZyB0aGUgUERQXG42ODM2Olx0XHQgKiB0YWJsZS4gIFRoZSBtYWluIGV4Y2VwdGlvbiwgaGFuZGxlZCBoZXJlLCBpcyBTVk0mIzM5O3MgMzItYml0IE5QVC4gIFRoZVxuNjgzNzpcdFx0ICogb3RoZXIgZXhjZXB0aW9uIGlzIGZvciBzaGFkb3dpbmcgTDEmIzM5O3MgMzItYml0IG9yIFBBRSBOUFQgb24gNjQtYml0XG42ODM4Olx0XHQgKiBLVk07IHRoYXQgaG9ycm9yIGlzIGhhbmRsZWQgb24tZGVtYW5kIGJ5IG1tdV9hbGxvY19zcGVjaWFsX3Jvb3RzKCkuXG42ODM5Olx0XHQgKi9cbjY4NDA6XHRcdGlmICh0ZHBfZW5hYmxlZCBcdTAwMjZcdTAwMjYga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpIFx1MDAzZSBQVDMyRV9ST09UX0xFVkVMKVxuNjg0MTpcdFx0XHRyZXR1cm4gMDtcbjY4NDI6XHRcbjY4NDM6XHRcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX0RNQTMyKTtcbjY4NDQ6XHRcdGlmICghcGFnZSlcbjY4NDU6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG42ODQ2Olx0XG42ODQ3Olx0XHRtbXUtXHUwMDNlcGFlX3Jvb3QgPSBwYWdlX2FkZHJlc3MocGFnZSk7XG42ODQ4Olx0XG42ODQ5Olx0XHQvKlxuNjg1MDpcdFx0ICogQ1IzIGlzIG9ubHkgMzIgYml0cyB3aGVuIFBBRSBwYWdpbmcgaXMgdXNlZCwgdGh1cyBpdCYjMzk7cyBpbXBvc3NpYmxlIHRvXG42ODUxOlx0XHQgKiBnZXQgdGhlIENQVSB0byB0cmVhdCB0aGUgUERQVEVzIGFzIGVuY3J5cHRlZC4gIERlY3J5cHQgdGhlIHBhZ2Ugc29cbjY4NTI6XHRcdCAqIHRoYXQgS1ZNJiMzOTtzIHdyaXRlcyBhbmQgdGhlIENQVSYjMzk7cyByZWFkcyBnZXQgYWxvbmcuICBOb3RlLCB0aGlzIGlzXG42ODUzOlx0XHQgKiBvbmx5IG5lY2Vzc2FyeSB3aGVuIHVzaW5nIHNoYWRvdyBwYWdpbmcsIGFzIDY0LWJpdCBOUFQgY2FuIGdldCBhdFxuNjg1NDpcdFx0ICogdGhlIEMtYml0IGV2ZW4gd2hlbiBzaGFkb3dpbmcgMzItYml0IE5QVCwgYW5kIFNNRSBpc24mIzM5O3Qgc3VwcG9ydGVkXG42ODU1Olx0XHQgKiBieSAzMi1iaXQga2VybmVscyAod2hlbiBLVk0gaXRzZWxmIHVzZXMgMzItYml0IE5QVCkuXG42ODU2Olx0XHQgKi9cbjY4NTc6XHRcdGlmICghdGRwX2VuYWJsZWQpXG42ODU4Olx0XHRcdHNldF9tZW1vcnlfZGVjcnlwdGVkKCh1bnNpZ25lZCBsb25nKW1tdS1cdTAwM2VwYWVfcm9vdCwgMSk7XG42ODU5Olx0XHRlbHNlXG42ODYwOlx0XHRcdFdBUk5fT05fT05DRShzaGFkb3dfbWVfdmFsdWUpO1xuNjg2MTpcdFxuNjg2MjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgNDsgJiM0MzsmIzQzO2kpXG42ODYzOlx0XHRcdG1tdS1cdTAwM2VwYWVfcm9vdFtpXSA9IElOVkFMSURfUEFFX1JPT1Q7XG42ODY0Olx0XG42ODY1Olx0XHRyZXR1cm4gMDtcbjY4NjY6XHR9XG42ODY3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODQ5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gTU1VIExvZ2ljIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY29kZSBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBHaXZlbiB0aGUgY29udGV4dCwgaXQgbG9va3MgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQhIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggS1ZNLCB3aGljaCBpcyBhbHJlYWR5IGV4dGVuc2l2ZWx5IGZ1enplZCBieSB0b29scyBsaWtlIFN5emthbGxlciwgbGV2ZXJhZ2luZyBzdGFuZGFyZCBpb2N0bHMgbGlrZSBgS1ZNX0NSRUFURV9WTWAsIGBLVk1fQ1JFQVRFX1ZDUFVgLCBhbmQgYEtWTV9TRVRfQ1BVSUQyYC4gVGhlc2UgaW9jdGxzIGFyZSBrbm93biBlbnRyeXBvaW50cyB0byByZWFjaCBwYXJ0cyBvZiB0aGUgTU1VIGNvZGUuIEl0JiMzOTtzIGdyZWF0IHRoYXQgaXQmIzM5O3MgYWxyZWFkeSB3ZWxsLXRyb2RkZW4gZ3JvdW5kLgoKVGhlIHBhdGNoIGl0c2VsZiBmb2N1c2VzIG9uIEtWTSBNTVUgbG9naWMsIHNwZWNpZmljYWxseSBtb2RpZnlpbmcgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc2V0dGluZyB1cCBUcmFuc2xhdGlvbiBMb29rYXNpZGUgQnVmZmVyIChUTEIpIE1NVSByb290IHBhZ2Ugcm9sZXMgYW5kIGluc3RhbmNlcyBmb3IgdkNQVXMsIHdoaWNoIGFyZSBjcml0aWNhbCBwYXRocy4gVGhlIG1lbnRpb25lZCBmdW5jdGlvbnMgYXJlIGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgLCBgX19rdm1fbW11X2NyZWF0ZWAsIGB0ZHhfbG9hZF9tbXVfcGdkYCwgYW5kIGB0ZHhfdGRfaW5pdGAuIENoYW5nZXMgdG8gYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAgaW5jbHVkZSBhbiBhc3NlcnRpb24gd2l0aCBgV0FSTl9PTl9PTkNFYC4gVGhpcyBpcyBnb29kLCBiZWNhdXNlIHRoZXNlIGFkZGl0aW9ucyBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZyBhcyB0aGV5IGhhdmUgdGhlIHBvdGVudGlhbCB0byByZXZlYWwgYnVncy4KCkdpdmVuIHRoYXQgS1ZNIGlzIGZ1bGx5IGVtdWxhdGVkIGFuZCBydW5uYWJsZSB3aXRoaW4gUUVNVS9zdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIGVzdGFibGlzaGVkIGlvY3RscywgSSYjMzk7bSBjb25jbHVkaW5nIHRoYXQgdGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhlIGZhY3QgdGhhdCBuZXcgYXNzZXJ0aW9ucyBhbmQgbG9naWMgcmVzdHJ1Y3R1cmluZyBhcmUgcHJlc2VudCBvbmx5IHN0cmVuZ3RoZW5zIHRoZSBjYXNlIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgZGVmaW5pdGVseSBXb3J0aEZ1enppbmcuCgpOb3csIGxldCYjMzk7cyByZWZpbmUgdGhlIGZ1enppbmcgYXBwcm9hY2ggYW5kIGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIHByaW1hcnkgY29uZmlncyBvZiBpbnRlcmVzdCBhcmUgYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGFuZCBgS1ZNX0lOVEVMX1REWGAuIEl0JiMzOTtzIHdvcnRoIHJlbWVtYmVyaW5nIHRoYXQgYEtWTV9JTlRFTF9URFhgIGRlcGVuZHMgb24gYElOVEVMX1REWF9IT1NUYC4gSXQmIzM5O3MgYSBrZXkgY29uZmlndXJhdGlvbiB0byBrZWVwIGluIG1pbmQsIGFzIGFyZSB0aGUgb3RoZXIgY29uZmlnIGRlcGVuZGVuY2llcy4gVGhlc2UgY29uZmlndXJhdGlvbnMgZGlyZWN0bHkgaW5mbHVlbmNlIHRoZSBjb2RlIHBhdGhzIHdlJiMzOTtyZSB0YXJnZXRpbmcuIEkgd2lsbCBuZWVkIHRvIGNoZWNrIHRob3NlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElOVEVMX1REWF9IT1NUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz0xODQ0PWNvbmZpZyBYODZfVVNFUl9TSEFET1dfU1RBQ0tcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjMtXG5hcmNoL3g4Ni9LY29uZmlnOjE4NjQ6Y29uZmlnIElOVEVMX1REWF9IT1NUXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA0NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgSU5URUxfVERYX0hPU1QgRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgSU5URUxfVERYX0hPU1RgLiBJIGtub3cgdGhpcyBpcyBhbiB4ODYtc3BlY2lmaWMgZmVhdHVyZSwgc28gdGhlIHBsYWNlIHRvIHN0YXJ0IGlzIGBhcmNoL3g4Ni9LY29uZmlnYC4gU3BlY2lmaWNhbGx5LCBhcm91bmQgbGluZSAxODY0LCB3aGljaCBpcyB0eXBpY2FsbHkgd2hlcmUgdGhlc2UgdHlwZXMgb2Ygb3B0aW9ucyBhcmUgZGVmaW5lZC4gVGhpcyB3aWxsIHJldmVhbCB0aGUgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZm9yIGBJTlRFTF9URFhfSE9TVGAgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzIG9uIHRoaW5ncyBsaWtlIENQVSBmZWF0dXJlcywgc3BlY2lmaWMgaGFyZHdhcmUgc3VwcG9ydCwgYW5kIHBvdGVudGlhbGx5IG90aGVyIHNlY3VyaXR5LXJlbGF0ZWQgc2V0dGluZ3MuIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyBpdHMgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBsYXJnZXIgeDg2IGVjb3N5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODYwOlx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL2FyY2gveDg2L3Noc3RrLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbjE4NjE6XHRcbjE4NjI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjE4NjM6XHRcbjE4NjQ6XHRjb25maWcgSU5URUxfVERYX0hPU1RcbjE4NjU6XHRcdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XCYjMzQ7XG4xODY2Olx0XHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUxcbjE4Njc6XHRcdGRlcGVuZHMgb24gWDg2XzY0XG4xODY4Olx0XHRkZXBlbmRzIG9uIEtWTV9JTlRFTFxuMTg2OTpcdFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXG4xODcwOlx0XHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXG4xODcxOlx0XHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xuMTg3MjpcdFx0ZGVwZW5kcyBvbiBYODZfTUNFXG4xODczOlx0XHRoZWxwXG4xODc0Olx0XHQgIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHByb3RlY3RzIGd1ZXN0IFZNcyBmcm9tIG1hbGljaW91c1xuMTg3NTpcdFx0ICBob3N0IGFuZCBjZXJ0YWluIHBoeXNpY2FsIGF0dGFja3MuICBUaGlzIG9wdGlvbiBlbmFibGVzIG5lY2Vzc2FyeSBURFhcbjE4NzY6XHRcdCAgc3VwcG9ydCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcnVuIGNvbmZpZGVudGlhbCBWTXMuXG4xODc3Olx0XG4xODc4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4xODc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTc3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIFJlY2VudCBDb2RlIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGVzZSBtb2RpZmljYXRpb25zLiBJJiMzOTtsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBGb2N1c1N5bWJvbHNgIOKAkyBpdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIHBpbi1wb2ludGVkIGEgY2x1c3RlciBvZiBjaGFuZ2VzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEtWTSAoS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSkgaW5mcmFzdHJ1Y3R1cmUgZm9yIHg4NiBhcmNoaXRlY3R1cmUuCgpJIHNlZSB0aGF0IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZCBvciBkaXJlY3RseSBjYWxsIHRoZSBtb2RpZmllZCBjb2RlOgoxLiAgYF9fa3ZtX21tdV9jcmVhdGVgIChhIHN0YXRpYyBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIHB1YmxpYyBga3ZtX21tdV9jcmVhdGVgIGZ1bmN0aW9uKS4KICAgIGBrdm1fbW11X2NyZWF0ZWAKMi4gIGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgIChhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBjYWxsZWQgYnkgYGt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGVgIGFuZCBga3ZtX2luaXRfc2hhZG93X25wdF9tbXVgKS4KICAgIGBrdm1fY2FsY190ZHBfbW11X3Jvb3RfcGFnZV9yb2xlYAogICAgYGt2bV9pbml0X3NoYWRvd19ucHRfbW11YAozLiAgYHRkeF9sb2FkX21tdV9wZ2RgIChmb3VuZCBpbiBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2ApLgo0LiAgYHRkeF90ZF9pbml0YCAoYWxzbyBpbiBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2ApLgoKT2theSwgdGhhdCYjMzk7cyB0aGUgY29yZS4gTm93LCBJIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2VhcmNoLiBJIHdhbnQgdG8ga25vdyBpZiB0aGVyZSBhcmUgYW55IGluZGlyZWN0IGRlcGVuZGVuY2llcyBvciBzaWRlLWVmZmVjdHMsIHNvIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IG90aGVyIGFmZmVjdGVkIGZ1bmN0aW9ucy4gVGhlIGNvZGUgY2hhbmdlcyBjb3VsZCBhZmZlY3Qgb3RoZXIgYXJlYXMgb2YgdGhlIHN5c3RlbSB0aGF0IGFyZSBub3QgZGlyZWN0bHkgY2FsbGVkIGJ5IHRoZSBjb3JlIGNvZGUuCgpOb3cgSSYjMzk7bGwgZGlnIGludG8gdGhlIGBhcmNoL3g4Ni9rdm0vY3B1aWQuY2AgZmlsZSBhbmQgYWxzbyBjaGVjayBvdGhlciByZWxldmFudCBmaWxlcy4gSXQgYXBwZWFycyB0aGF0IGBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHJgIHdhcyByZW1vdmVkLiBGdXJ0aGVyIGNvbmZpcm1pbmcgdGhpcywgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZSB3YXMgcmVtb3ZlZCBpbiBgY3B1aWQuaGAuCgpJIHNob3VsZCBwcm9iYWJseSBhbHNvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBrdm1fY2FsY190ZHBfbW11X3Jvb3RfcGFnZV9yb2xlYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGluZGlyZWN0IHNpZGUgZWZmZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5ODI9c3RhdGljIHVuaW9uIGt2bV9tbXVfcGFnZV9yb2xlXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5ODM6a3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5ODQtXHRcdFx0XHR1bmlvbiBrdm1fY3B1X3JvbGUgY3B1X3JvbGUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02MDA2PXN0YXRpYyB2b2lkIGluaXRfa3ZtX3RkcF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjAwOS1cdHN0cnVjdCBrdm1fbW11ICpjb250ZXh0ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnJvb3RfbW11O1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2MDEwOlx0dW5pb24ga3ZtX21tdV9wYWdlX3JvbGUgcm9vdF9yb2xlID0ga3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZSh2Y3B1LCBjcHVfcm9sZSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYwMTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzQ0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIEtWTSBURFAgTU1VIEluaXRpYWxpemF0aW9uIGFuZCBDYWxsZXJzKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBjZW50ZXJlZCBvbiBpbnZlc3RpZ2F0aW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgS1ZNIFRhZ2dlZCBEYXRhIFBvaW50ZXIgKFREUCkgTU1VLCBzcGVjaWZpY2FsbHkgdGhlIGBpbml0X2t2bV90ZHBfbW11YCBmdW5jdGlvbi4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBub3QganVzdCB0aGF0IGZ1bmN0aW9uIGluIGlzb2xhdGlvbiwgYnV0IGFsc28gdGhlIGJyb2FkZXIgY29udGV4dC4gV2hhdCBvdGhlciBjb2RlIHBhdGhzIGNhbGwgaW50byB0aGlzIGZ1bmN0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZW50cnkgcG9pbnRzIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCYjMzk7cyBpbnZva2VkLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBNTVUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgYW5kIGhvdyBURFAgaXMgaW50ZWdyYXRlZC4gSWRlbnRpZnlpbmcgdGhlIGNhbGxlcnMgd2lsbCBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtaWdodCBtYWtlIHRvIGBpbml0X2t2bV90ZHBfbW11YCBvciBob3cgdGhpcyBpbml0aWFsaXphdGlvbiBvY2N1cnMuIFRoaXMgaXMgZXNzZW50aWFsIGZvciBhIHRob3JvdWdoIHJldmlldyBhbmQgYW55IHRyb3VibGVzaG9vdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5pdF9rdm1fdGRwX21tdSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5ODM9a3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MDA1LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2MDA2OnN0YXRpYyB2b2lkIGluaXRfa3ZtX3RkcF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MDA3LVx0XHRcdCAgICAgdW5pb24ga3ZtX2NwdV9yb2xlIGNwdV9yb2xlKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjE3Nj12b2lkIGt2bV9pbml0X21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTg0LVx0XHRpZiAodGRwX2VuYWJsZWQpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYxODU6XHRcdFx0aW5pdF9rdm1fdGRwX21tdSh2Y3B1LCBjcHVfcm9sZSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxODYtXHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyOTgKCQkJCQkJCW91dHB1dDogMjM5CgkJCQkJCQl0aG91Z2h0czogNTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBNTVUgRnV6emluZyBTY29wZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBLVk0gTU1VIGZ1enppbmcsIGFuZCBJIG5lZWQgdG8gZGVmaW5lIHRoZSBhcHByb3ByaWF0ZSBzY29wZSBmb3Igb3VyIGZ1enplci4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGBrdm1faW5pdF9tbXVgIGlzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiBjYWxsZWQgcXVpdGUgZnJlcXVlbnRseSBkdXJpbmcgTU1VIHNldHVwIGFuZCByZXNldCBvcGVyYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHdoZXRoZXIgaXQgd2FzIHRvbyBicm9hZCwgYnV0IGFmdGVyIGZ1cnRoZXIgY29uc2lkZXJhdGlvbiwgaXQmIzM5O3MgYWN0dWFsbHkgcXVpdGUgd2VsbC10YXJnZXRlZCBmb3IgS1ZNIFZDUFUgaW5pdGlhbGl6YXRpb24gYW5kIG1vZGUgc3dpdGNoaW5nLCBwZXJmZWN0bHkgcmVsZXZhbnQgdG8gTU1VIGZ1enppbmcuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGZvY3VzIHN5bWJvbHMuIFdlIGhhdmU6CgoqICAgYGt2bV9tbXVfY3JlYXRlYCAtIHRoaXMgaXMgc3BlY2lmaWMgdG8gS1ZNIFZDUFUgY3JlYXRpb24sIG1ha2VzIHNlbnNlLgoqICAgYGt2bV9pbml0X21tdWAgLSBhcyBtZW50aW9uZWQsIHRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUuCiogICBga3ZtX2luaXRfc2hhZG93X25wdF9tbXVgIC0gdGhpcyBsb29rcyBzcGVjaWZpYyB0byBuZXN0ZWQgTlBUIE1NVSBpbml0aWFsaXphdGlvbi4KKiAgIGB0ZHhfbG9hZF9tbXVfcGdkYCAtIFREWC1zcGVjaWZpYywgZGVhbGluZyB3aXRoIGxvYWRpbmcgdGhlIFBHRCAoUGFnZSBHbG9iYWwgRGlyZWN0b3J5KS4KKiAgIGB0ZHhfdGRfaW5pdGAgLSBUaGlzIGlzIGEgVERYIGluaXRpYWxpemF0aW9uIGNvbW1hbmQgaGFuZGxlci4KCkFsbCB0aGVzZSBmdW5jdGlvbnMgYXBwZWFyIHJlbGV2YW50LgoKTmV4dCwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogV2UgbmVlZCB0byBlbnN1cmUgd2UgY292ZXIgdGhlIHJlbGV2YW50IEtWTSBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSBhcmUgYWltaW5nIGZvcjogYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGBJTlRFTF9URFhfSE9TVGAsIGFuZCBgS1ZNX0lOVEVMX1REWGAuIFRoZXNlIGNvbmZpZ3MgY29sbGVjdGl2ZWx5IGNvdmVyIGEgd2lkZSByYW5nZSBvZiBoYXJkd2FyZSBwbGF0Zm9ybXMuCgpGaW5hbGx5LCBsZXQmIzM5O3MgYXNzZW1ibGUgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycy4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZS4gV2UgYXJlIHNheWluZyB0aGF0IHRoaXMgcGF0Y2ggKmlzKiB3b3J0aCBmdXp6aW5nLCBhbmQgSSBuZWVkIHRvIGV4cGxhaW4gKndoeSouCgpUaGUgcmVhc29uIGlzIGJlY2F1c2UgdGhlIGNoYW5nZXMgaW1wYWN0IEtWTSBNTVUgVERQIGxldmVsIGNhbGN1bGF0aW9uIGxvZ2ljIChga3ZtX21tdV9nZXRfdGRwX2xldmVsYCwgYF9fa3ZtX21tdV9jcmVhdGVgKSwgaW50cm9kdWNlcyBhIG5ldyBgbWlycm9yX3Jvb3RfbGV2ZWxgIGZpZWxkIGluIGBrdm1fYXJjaGAsIGFuZCB3ZSYjMzk7dmUgYWRkZWQgYSBgV0FSTl9PTl9PTkNFYCBhc3NlcnRpb24gcmVsYXRlZCB0byB0aGUgbWlycm9yZWQgVERQIHJvb3QgbGV2ZWwgY29uZmlndXJhdGlvbi4gVGhpcyBsb2dpYyBpcyBhY2Nlc3NlZCB2aWEgY29tbW9uIEtWTSBpb2N0bHMgbGlrZSBgS1ZNX0NSRUFURV9WTWAsIGBLVk1fQ1JFQVRFX1ZDUFVgLCBhbmQgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucyBvbiBhbWQ2NCwgc28gaXQgc2hvdWxkIGJlIGVhc2lseSByZWFjaGFibGUuCgpTbywgYFdvcnRoRnV6emluZ2AgaXMgYHRydWVgLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNvbmZpcm1lZCwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgbG9vayBjb3JyZWN0LiBCZWZvcmUgSSBzdWJtaXQsIEkmIzM5O2xsIGRvIGEgZmluYWwgc2FuaXR5IGNoZWNrIG9uIGFsbCBwYXJhbWV0ZXJzIHRvIGVuc3VyZSBubyB0eXBvcyBvciBsb2dpY2FsIGVycm9ycyBhcmUgcHJlc2VudC4gT2theSwgYWxsIGxvb2tzIGdvb2QgdG8gZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMX1REWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9tbXVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9pbml0X21tdSYjMzQ7LAogICAgJiMzNDtrdm1faW5pdF9zaGFkb3dfbnB0X21tdSYjMzQ7LAogICAgJiMzNDt0ZHhfbG9hZF9tbXVfcGdkJiMzNDssCiAgICAmIzM0O3RkeF90ZF9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSB4ODYgTU1VIHJvb3QgbGV2ZWwgY2FsY3VsYXRpb24gYW5kIFREUCBjcmVhdGlvbiBsb2dpYyAoX19rdm1fbW11X2NyZWF0ZSwga3ZtX21tdV9nZXRfdGRwX2xldmVsKSBhbmQgdXBkYXRlcyBURFggbWlycm9yZWQgcm9vdCBsZXZlbCBoYW5kbGluZyAodGR4X2xvYWRfbW11X3BnZCwgdGR4X3RkX2luaXQpLiBJdCBhbHNvIGFkZHMgYSBuZXcgV0FSTl9PTl9PTkNFIGFzc2VydGlvbiBmb3IgdW5pbml0aWFsaXplZCBtaXJyb3Jfcm9vdF9sZXZlbC4gVGhlc2UgY29kZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGR1cmluZyBLVk0gVk0gYW5kIHZDUFUgaW5pdGlhbGl6YXRpb24vbGlmZWN5Y2xlIG9wZXJhdGlvbnMgb24geDg2XzY0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMX1REWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9tbXVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9pbml0X21tdSYjMzQ7LAogICAgJiMzNDtrdm1faW5pdF9zaGFkb3dfbnB0X21tdSYjMzQ7LAogICAgJiMzNDt0ZHhfbG9hZF9tbXVfcGdkJiMzNDssCiAgICAmIzM0O3RkeF90ZF9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSB4ODYgTU1VIHJvb3QgbGV2ZWwgY2FsY3VsYXRpb24gYW5kIFREUCBjcmVhdGlvbiBsb2dpYyAoX19rdm1fbW11X2NyZWF0ZSwga3ZtX21tdV9nZXRfdGRwX2xldmVsKSBhbmQgdXBkYXRlcyBURFggbWlycm9yZWQgcm9vdCBsZXZlbCBoYW5kbGluZyAodGR4X2xvYWRfbW11X3BnZCwgdGR4X3RkX2luaXQpLiBJdCBhbHNvIGFkZHMgYSBuZXcgV0FSTl9PTl9PTkNFIGFzc2VydGlvbiBmb3IgdW5pbml0aWFsaXplZCBtaXJyb3Jfcm9vdF9sZXZlbC4gVGhlc2UgY29kZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGR1cmluZyBLVk0gVk0gYW5kIHZDUFUgaW5pdGlhbGl6YXRpb24vbGlmZWN5Y2xlIG9wZXJhdGlvbnMgb24geDg2XzY0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyBLVk0gZGV0ZXJtaW5lcyB0aGUgVERQIGxldmVsIGZvciBWTXMgd2l0aCBtaXJyb3JlZCBwYWdlIHRhYmxlcyAoc3VjaCBhcyBURFggVk1zKSwgYnkgdHJhY2tpbmcgdGhlIG1pcnJvciByb290IGxldmVsIGV4cGxpY2l0bHkgaW4gYHN0cnVjdCBrdm1fYXJjaGAgKGBtaXJyb3Jfcm9vdF9sZXZlbGApIHNldCBkdXJpbmcgVEQgaW5pdGlhbGl6YXRpb24gaW5zdGVhZCBvZiBxdWVyeWluZyB0aGUgZ3Vlc3QgQ1BVSUQuXG5cbi0gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6IGBzdHJ1Y3Qga3ZtX2FyY2hgIGlzIHBhcnQgb2YgYHN0cnVjdCBrdm1gLCB3aGljaCBpcyBhbGxvY2F0ZWQgd2l0aCBga3Z6YWxsb2MoKWAgaW4gYGt2bV9hcmNoX2FsbG9jX3ZtKClgLCBndWFyYW50ZWVpbmcgdGhhdCBgbWlycm9yX3Jvb3RfbGV2ZWxgIGlzIHplcm8taW5pdGlhbGl6ZWQuXG4tIE5vIGtlcm5lbC10by11c2VyIGluZm8gbGVha3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IG5ldyBkYXRhIHRvIHVzZXIgc3BhY2UgdmlhIGNvcHlfdG9fdXNlciBvciBpb2N0bCBvdXRwdXRzLlxuLSBObyB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBvciBidWZmZXIgYWNjZXNzOiBMb2dpYyBjaGVja3Mgb3BlcmF0ZSBvbiBmdWxseSBpbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGFuZCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuXG5cblRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgcHJlc2VudCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gcnVuIGlzIG5vdCBuZWVkZWQ7IHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzFkMDhhMTA5NTI5YzVmMjQ2YTVmN2FhZWJiZTk5NzFkZWQ1NDE1YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMjM6MzQ6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCA2ODNiYjhiZjQzYTk0Li5lZGQ1YWQyZTViNTJkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTE0MDYsNiAmIzQzOzE0MDYsNyBAQCBzdHJ1Y3Qga3ZtX2FyY2ggewogCXN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBzcGxpdF9kZXNjX2NhY2hlOwogCiAJZ2ZuX3QgZ2ZuX2RpcmVjdF9iaXRzOwomIzQzOwlpbnQgbWlycm9yX3Jvb3RfbGV2ZWw7CiAKIAkvKgogCSAqIFNpemUgb2YgdGhlIENQVSYjMzk7cyBkaXJ0eSBsb2cgYnVmZmVyLCBpLmUuIFZNWCYjMzk7cyBQTUwgYnVmZmVyLiBBIFplcm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5jIGIvYXJjaC94ODYva3ZtL2NwdWlkLmMKaW5kZXggZGRiMDIyY2IyMDNhMi4uMzRjNjA5YTYwZWVmZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2NwdWlkLmMKQEAgLTQ4MywyMCAmIzQzOzQ4Myw2IEBAIGludCBjcHVpZF9xdWVyeV9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlyZXR1cm4gMzY7CiB9CiAKLWludCBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCXN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICpiZXN0OwotCi0JYmVzdCA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KHZjcHUsIDB4ODAwMDAwMDApOwotCWlmICghYmVzdCB8fCBiZXN0LSZndDtlYXggJmx0OyAweDgwMDAwMDA4KQotCQlnb3RvIG5vdF9mb3VuZDsKLQliZXN0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAwOCk7Ci0JaWYgKGJlc3QpCi0JCXJldHVybiAoYmVzdC0mZ3Q7ZWF4ICZndDsmZ3Q7IDE2KSAmYW1wOyAweGZmOwotbm90X2ZvdW5kOgotCXJldHVybiAwOwotfQotCiAvKgogICogVGhpcyAmIzM0O3JhdyYjMzQ7IHZlcnNpb24gcmV0dXJucyB0aGUgcmVzZXJ2ZWQgR1BBIGJpdHMgd2l0aG91dCBhbnkgYWRqdXN0bWVudHMgZm9yCiAgKiBlbmNyeXB0aW9uIHRlY2hub2xvZ2llcyB0aGF0IHVzdXJwIGJpdHMuICBUaGUgcmF3IG1hc2sgc2hvdWxkIGJlIHVzZWQgaWYgYW5kCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vY3B1aWQuaCBiL2FyY2gveDg2L2t2bS9jcHVpZC5oCmluZGV4IDhkODYzZjQ1NTg1ZGUuLjQ2YmZlODY5OWU2N2YgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9jcHVpZC5oCkBAIC02OCw3ICYjNDM7NjgsNiBAQCB2b2lkIF9faW5pdCBrdm1faW5pdF94c3RhdGVfc2l6ZXModm9pZCk7CiB1MzIgeHN0YXRlX3JlcXVpcmVkX3NpemUodTY0IHhzdGF0ZV9idiwgYm9vbCBjb21wYWN0ZWQpOwogCiBpbnQgY3B1aWRfcXVlcnlfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotaW50IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdTY0IGt2bV92Y3B1X3Jlc2VydmVkX2dwYV9iaXRzX3JhdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiBzdGF0aWMgaW5saW5lIGludCBjcHVpZF9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCmluZGV4IDA2NGVjYzMzYjkyNjcuLmQ0M2I4YjZjM2IxNzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwpAQCAtNTk1MywxOSAmIzQzOzU5NTMsMjIgQEAgdm9pZCBfX2t2bV9tbXVfcmVmcmVzaF9wYXNzdGhyb3VnaF9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAogc3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlpbnQgbWF4cGE7Ci0KLQlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk0pCi0JCW1heHBhID0gY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHZjcHUpOwotCWVsc2UKLQkJbWF4cGEgPSBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpOwotCiAJLyogdGRwX3Jvb3RfbGV2ZWwgaXMgYXJjaGl0ZWN0dXJlIGZvcmNlZCBsZXZlbCwgdXNlIGl0IGlmIG5vbnplcm8gKi8KIAlpZiAodGRwX3Jvb3RfbGV2ZWwpCiAJCXJldHVybiB0ZHBfcm9vdF9sZXZlbDsKIAomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGUgVk0gaGFzIG1pcnJvciByb290cywgdGhlbiB0aGUgcm9vdCBsZXZlbCBpcyBwcmVkZWZpbmVkIGFzIHRoZQomIzQzOwkgKiBtaXJyb3Igcm9vdCAoYW5kIGJ5IGV4dGVuc2lvbiB0aGUgbm9ybWFsIHJvb3QpIG5lZWRzIHRvIG1hdGNoIHRoZQomIzQzOwkgKiByb290IGxldmVsIHRoYXQgd2FzIGNvbmZpZ3VyZWQgZm9yIHRoZSBleHRlcm5hbCBwYWdlIHRhYmxlcyB0aGF0IGFyZQomIzQzOwkgKiBiZWluZyBtaXJyb3JlZCBieSBLVk0uCiYjNDM7CSAqLwomIzQzOwlpZiAoa3ZtX2hhc19taXJyb3JlZF90ZHAodmNwdS0mZ3Q7a3ZtKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhV0FSTl9PTl9PTkNFKCF2Y3B1LSZndDtrdm0tJmd0O2FyY2gubWlycm9yX3Jvb3RfbGV2ZWwpKQomIzQzOwkJcmV0dXJuIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5taXJyb3Jfcm9vdF9sZXZlbDsKJiM0MzsKIAkvKiBVc2UgNS1sZXZlbCBURFAgaWYgYW5kIG9ubHkgaWYgaXQmIzM5O3MgdXNlZnVsL25lY2Vzc2FyeS4gKi8KLQlpZiAobWF4X3RkcF9sZXZlbCA9PSA1ICZhbXA7JmFtcDsgbWF4cGEgJmx0Oz0gNDgpCiYjNDM7CWlmIChtYXhfdGRwX2xldmVsID09IDUgJmFtcDsmYW1wOyBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpICZsdDs9IDQ4KQogCQlyZXR1cm4gNDsKIAogCXJldHVybiBtYXhfdGRwX2xldmVsOwpAQCAtNjgzNCw3ICYjNDM7NjgzNyw3IEBAIHN0YXRpYyBpbnQgX19rdm1fbW11X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11ICptbXUsIHN0cnVjdCBrCiAJICogb3RoZXIgZXhjZXB0aW9uIGlzIGZvciBzaGFkb3dpbmcgTDEmIzM5O3MgMzItYml0IG9yIFBBRSBOUFQgb24gNjQtYml0CiAJICogS1ZNOyB0aGF0IGhvcnJvciBpcyBoYW5kbGVkIG9uLWRlbWFuZCBieSBtbXVfYWxsb2Nfc3BlY2lhbF9yb290cygpLgogCSAqLwotCWlmICh0ZHBfZW5hYmxlZCAmYW1wOyZhbXA7IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbCh2Y3B1KSAmZ3Q7IFBUMzJFX1JPT1RfTEVWRUwpCiYjNDM7CWlmICh0ZHBfZW5hYmxlZCAmYW1wOyZhbXA7IGt2bV9tbXVfZ2V0X21heF90ZHBfbGV2ZWwoKSAmZ3Q7IFBUMzJFX1JPT1RfTEVWRUwpCiAJCXJldHVybiAwOwogCiAJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfRE1BMzIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKaW5kZXggYjI3MmMyMDU4NmE3NC4uYTBiYzlmODE4ZjQzOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCkBAIC01Niw5ICYjNDM7NTYsNiBAQAogYm9vbCBlbmFibGVfdGR4IF9fcm9fYWZ0ZXJfaW5pdDsKIG1vZHVsZV9wYXJhbV9uYW1lZCh0ZHgsIGVuYWJsZV90ZHgsIGJvb2wsIDA0NDQpOwogCi0jZGVmaW5lIFREWF9TSEFSRURfQklUX1BXTF81IGdwYV90b19nZm4oQklUX1VMTCg1MSkpCi0jZGVmaW5lIFREWF9TSEFSRURfQklUX1BXTF80IGdwYV90b19nZm4oQklUX1VMTCg0NykpCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICp0ZHhfc3lzaW5mbzsKIAogdm9pZCB0ZGhfdnBfcmRfZmFpbGVkKHN0cnVjdCB2Y3B1X3RkeCAqdGR4LCBjaGFyICp1Y2xhc3MsIHUzMiBmaWVsZCwgdTY0IGVycikKQEAgLTE2MDksMTAgJiM0MzsxNjA2LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdGR2bWNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiB2b2lkIHRkeF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSwgaW50IHBnZF9sZXZlbCkKIHsKLQl1NjQgc2hhcmVkX2JpdCA9IChwZ2RfbGV2ZWwgPT0gNSkgPyBURFhfU0hBUkVEX0JJVF9QV0xfNSA6Ci0JCQkgIFREWF9TSEFSRURfQklUX1BXTF80OwotCi0JaWYgKEtWTV9CVUdfT04oc2hhcmVkX2JpdCAhPSBrdm1fZ2ZuX2RpcmVjdF9iaXRzKHZjcHUtJmd0O2t2bSksIHZjcHUtJmd0O2t2bSkpCiYjNDM7CWlmIChLVk1fQlVHX09OKHBnZF9sZXZlbCAhPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2gubWlycm9yX3Jvb3RfbGV2ZWwsIHZjcHUtJmd0O2t2bSkpCiAJCXJldHVybjsKIAogCXRkX3ZtY3Nfd3JpdGU2NCh0b190ZHgodmNwdSksIFNIQVJFRF9FUFRfUE9JTlRFUiwgcm9vdF9ocGEpOwpAQCAtMjc2MCw2ICYjNDM7Mjc1NCwxNCBAQCBERUZJTkVfQ0xBU1ModGR4X3ZtX3N0YXRlX2d1YXJkLCB0ZHhfdm1fc3RhdGVfZ3VhcmRfdCwKIAkgICAgIGlmICghSVNfRVJSKF9UKSkgdGR4X3JlbGVhc2Vfdm1fc3RhdGVfbG9ja3MoX1QpLAogCSAgICAgdGR4X2FjcXVpcmVfdm1fc3RhdGVfbG9ja3Moa3ZtKSwgc3RydWN0IGt2bSAqa3ZtKTsKIAomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZHhfc2V0X21pcnJvcl9yb290X2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgaW50IGxldmVsKQomIzQzO3sKJiM0MzsJQlVJTERfQlVHX09OKGxldmVsICE9IDQgJmFtcDsmYW1wOyBsZXZlbCAhPSA1KTsKJiM0MzsKJiM0MzsJa3ZtLSZndDthcmNoLm1pcnJvcl9yb290X2xldmVsID0gbGV2ZWw7CiYjNDM7CWt2bS0mZ3Q7YXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBncGFfdG9fZ2ZuKEJJVF9VTEwobGV2ZWwgPT0gNCA/IDQ3IDogNTEpKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHRkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpCiB7CiAJc3RydWN0IGt2bV90ZHhfaW5pdF92bSBfX3VzZXIgKnVzZXJfZGF0YSA9IHU2NF90b191c2VyX3B0cihjbWQtJmd0O2RhdGEpOwpAQCAtMjgyMyw5ICYjNDM7MjgyNSw5IEBAIHN0YXRpYyBpbnQgdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZCkKIAlrdm1fdGR4LSZndDt4ZmFtID0gdGRfcGFyYW1zLSZndDt4ZmFtOwogCiAJaWYgKHRkX3BhcmFtcy0mZ3Q7Y29uZmlnX2ZsYWdzICZhbXA7IFREWF9DT05GSUdfRkxBR1NfTUFYX0dQQVcpCi0JCWt2bS0mZ3Q7YXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBURFhfU0hBUkVEX0JJVF9QV0xfNTsKJiM0MzsJCXRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA1KTsKIAllbHNlCi0JCWt2bS0mZ3Q7YXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBURFhfU0hBUkVEX0JJVF9QV0xfNDsKJiM0MzsJCXRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA0KTsKIAogCWt2bV90ZHgtJmd0O3N0YXRlID0gVERfU1RBVEVfSU5JVElBTElaRUQ7CiBvdXQ6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDUxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiBvZiBUaGlzIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBuZWNlc3NpdGF0ZXMgYSBLTVNBTiBmdXp6aW5nIHJ1bi4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSByZWxhdGVkIHRvIFREWCAoVHJ1c3RlZCBEb21haW4gRXh0ZW5zaW9uKSBzdXBwb3J0IHdpdGhpbiBLVk0sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBtaXJyb3JlZCBURFAgbGV2ZWxzIGFuZCBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLgoKRmlyc3QsIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgbWlycm9yX3Jvb3RfbGV2ZWxgIHRvIGBzdHJ1Y3Qga3ZtX2FyY2hgIHdpdGhpbiBga3ZtX2hvc3QuaGAuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIGhvdyBgc3RydWN0IGt2bWAgYW5kIGJ5IGV4dGVuc2lvbiwgYGt2bV9hcmNoYCBhcmUgYWxsb2NhdGVkLCBiZWNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGEgS01TQU4gcmVkLWZsYWcuIEZvcnR1bmF0ZWx5LCBJIHNlZSB0aGF0IGBremFsbG9jYCBpcyB1c2VkLiBUaGF0IG1lYW5zIHRoZSBga3ZtX2FyY2hgIHN0cnVjdCBpcyAqemVyb2VkKiBhdCBhbGxvY2F0aW9uLiBUaGF0IGdpdmVzIG1lIHNvbWUgcGVhY2Ugb2YgbWluZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIG90aGVyIGFsbG9jYXRpb25zIHRob3VnaCwgYW5kIEkmIzM5O2xsIGtlZXAgdGhpcyBjaGVjayBpbiB0aGUgYmFjayBvZiBteSBtaW5kIGFzIEkgZGlnIGRlZXBlci4KClRoZSByZW1vdmFsIG9mIHRoZSBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYCBmdW5jdGlvbiBpcyBpbnRlcmVzdGluZy4gSXQgaW1wbGllcyBzb21lIGNoYW5nZXMgaW4gaG93IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgbGltaXRzIGFyZSBkZXRlcm1pbmVkLiBUaGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgcmVwbGFjZWQgaW4gYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAgd2l0aCBhIGNoZWNrIGZvciBga3ZtX2hhc19taXJyb3JlZF90ZHBgIGFuZCB0aGUgdXNlIG9mIHRoZSBuZXcgYG1pcnJvcl9yb290X2xldmVsYCBmaWVsZC4gVGhlIGNvZGUgbm93IGRpcmVjdGx5IHVzZXMgYHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5taXJyb3Jfcm9vdF9sZXZlbGAgaWYgdGhlIG1pcnJvcmVkIFREUCBpcyBlbmFibGVkLiBBbHNvLCB0aGUgcGF0Y2ggY2hhbmdlcyBga3ZtX21tdV9nZXRfdGRwX2xldmVsKHZjcHUpYCB0byBga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgZWZmZWN0IG9mIHRoYXQgY2hhbmdlIGlzLgoKYF9fa3ZtX21tdV9jcmVhdGVgIGFsc28gc2VlbXMgaW1wYWN0ZWQuIFRoaXMgZnVuY3Rpb24gaXMgYSBjb3JlIHBhcnQgb2YgaG93IHRoZSBNTVUgaXMgc2V0IHVwLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpYCB3b3JrcyB0aGUgc2FtZSB3YXksIG9yIGJldHRlciwgaW4gdGhlIGNvbnRleHRzIG9mIHRoZSBjYWxscyBpdCBpcyByZXBsYWNpbmcuCgpUaGUgY2hhbmdlcyBpbiBgdGR4LmNgIGFyZSBzaWduaWZpY2FudC4gSXQgbG9va3MgbGlrZSBgdGR4X3NldF9taXJyb3Jfcm9vdF9sZXZlbGAgaXMgYSBrZXkgYWRkaXRpb24uIEl0JiMzOTtzIHNldHRpbmcgdGhlIGBtaXJyb3Jfcm9vdF9sZXZlbGAgYW5kLCBjcml0aWNhbGx5LCBgZ2ZuX2RpcmVjdF9iaXRzYC4gVGhlIHNldHRpbmcgb2YgYGdmbl9kaXJlY3RfYml0c2AgaW5kaWNhdGVzIGEgY2hhbmdlIGluIGhvdyBndWVzdCBmcmFtZSBudW1iZXJzIGFyZSBoYW5kbGVkIHdpdGggcmVzcGVjdCB0byB0aGUgcm9vdCBsZXZlbC4gVGhlIHVzZSBvZiB0aGUgYEtWTV9CVUdfT05gIG1hY3JvIGFsc28gc3VnZ2VzdHMgdGhhdCB0aGUgYG1pcnJvcl9yb290X2xldmVsYCBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBjb3JyZWN0bHksIHdoaWNoIGlzIGdvb2QuIEJ1dCB0aGUgb2xkIG1ldGhvZCBjb3VsZCBoYXZlIGhhZCBhIGJ1ZyBoZXJlLCB0aGF0IGNvdWxkIG1lYW4gS01TQU4gd291bGQgcmV2ZWFsIGlzc3Vlcy4KClNvLCB0aGUgbmV3IGNvZGUgY2FsbHMgYHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWxgIGRpcmVjdGx5LCB3aGljaCBzZXRzIHRoZSBgbWlycm9yX3Jvb3RfbGV2ZWxgLiBUaGlzICppcyogYW4gaW5pdGlhbGl6YXRpb24gcG9pbnQsIGFuZCBpdCYjMzk7cyBnb29kIHRoYXQgaXQmIzM5O3MgZXhwbGljaXQuCgpUaGUga2V5IGNvbnNpZGVyYXRpb25zIG5vdyBhcmU6CgoxLiAgKipJbml0aWFsaXphdGlvbiBhbmQgQWxsb2NhdGlvbjoqKiBXaGlsZSBga3phbGxvY2AgaXMgdXNlZCwgYXJlIHRoZXJlIGFueSBvdGhlciBhbGxvY2F0aW9ucyBvciBzdHJ1Y3QgY29waWVzIHRoYXQgbWlnaHQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBJIG5lZWQgdG8gZ3JlcCBmb3IgaW5zdGFuY2VzIHdoZXJlIGBzdHJ1Y3Qga3ZtYCAoYW5kIHJlbGF0ZWQgc3RydWN0cykgYXJlIGFsbG9jYXRlZCBvciBjb3BpZWQgYW5kIGVuc3VyZSB0aGF0IHRoaXMgdmFyaWFibGUgaXMgaGFuZGxlZCBjb3JyZWN0bHksIGV2ZW4gaWYgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGBremFsbG9jYC4gVGhlIG1vc3Qgb2J2aW91cyBwbGFjZSB0byBncmVwIHdvdWxkIGJlIGFyb3VuZCB0aGUgdXNlIG9mIGBrdm1fYXJjaF9hbGxvY192bSgpYCBhbmQgYGt2bV9jcmVhdGVfdm1gLgoyLiAgKipDb25jdXJyZW5jeSBhbmQgUmFjZSBDb25kaXRpb25zOioqIFRoaXMgZGVhbHMgd2l0aCBURFgsIHdoaWNoIGlzIHNlY3VyaXR5IHJlbGF0ZWQuIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgYWJvdXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbiBhY2Nlc3NpbmcgdGhlIG5ldyBgbWlycm9yX3Jvb3RfbGV2ZWxgIG9yIHJlbGF0ZWQgZGF0YS4gQXJlIHRoZXJlIGFueSBsb2NrIHByb3RlY3Rpb24gaXNzdWVzLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBNTVUgYW5kIFZDUFUgaW50ZXJhY3Rpb25zPwozLiAgKipDb3JyZWN0bmVzcyBvZiB0aGUgTG9naWM6KiogVGhlIG9sZCBjb2RlIHBvdGVudGlhbGx5IGhhZCBhIGJ1Zywgd2hpY2ggdGhpcyBuZXcgY29kZSB0cmllcyB0byBmaXguIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBuZXcgY29kZSBmdW5jdGlvbnMgZXhhY3RseSBhcyBpbnRlbmRlZC4gQSBmYWlsaW5nIGFzc2VydGlvbiB3b3VsZCBtYWtlIHRoZSBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIG1lbW9yeSBhY2Nlc3MgZXJyb3JzIChldmVuIHRob3VnaCBJIGFtIGN1cnJlbnRseSBvcHRpbWlzdGljIGFib3V0IHRoZSB6ZXJvLWluaXRpYWxpemF0aW9uKSwgdGhlIGludHJvZHVjdGlvbiBvZiBuZXcgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gVERQIGxldmVscywgYW5kIHRoZSBjcml0aWNhbCBuYXR1cmUgb2YgS1ZNL1REWCB3aXRoIHJlc3BlY3QgdG8gc2VjdXJpdHksIEkgdGhpbmsgYSBLTVNBTiBmdXp6aW5nIHJ1biBpcyB3YXJyYW50ZWQgaGVyZS4gSXQmIzM5O3MgdGhlIG9ubHkgd2F5IHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4gSSYjMzk7bGwgc3RhcnQgd2l0aCBmb2N1c3NlZCBmdXp6aW5nIGFyb3VuZCBNTVUgc2V0dXAgYW5kIGd1ZXN0IGFkZHJlc3Mgc3BhY2UgaGFuZGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t6YWxsb2MuKnN0cnVjdCBrdm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vY29hbGVzY2VkX21taW8uYz0xMjI9aW50IGt2bV92bV9pb2N0bF9yZWdpc3Rlcl9jb2FsZXNjZWRfbW1pbyhzdHJ1Y3Qga3ZtICprdm0sXG4tLVxudmlydC9rdm0vY29hbGVzY2VkX21taW8uYy0xMzAtXG52aXJ0L2t2bS9jb2FsZXNjZWRfbW1pby5jOjEzMTpcdGRldiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fZGV2LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xudmlydC9rdm0vY29hbGVzY2VkX21taW8uYy0xMzItXHRpZiAoIWRldilcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTEwOTk9c3RhdGljIHN0cnVjdCBrdm0gKmt2bV9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlLCBjb25zdCBjaGFyICpmZG5hbWUpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0xMTcxLVx0XHRyY3VfYXNzaWduX3BvaW50ZXIoa3ZtLVx1MDAzZWJ1c2VzW2ldLFxudmlydC9rdm0va3ZtX21haW4uYzoxMTcyOlx0XHRcdGt6YWxsb2Nfb2JqKHN0cnVjdCBrdm1faW9fYnVzLCBHRlBfS0VSTkVMX0FDQ09VTlQpKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTE3My1cdFx0aWYgKCFrdm0tXHUwMDNlYnVzZXNbaV0pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz00NDI1PXN0YXRpYyBsb25nIGt2bV92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDUwNC1cdFx0ciA9IC1FTk9NRU07XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQ1MDU6XHRcdGt2bV9yZWdzID0ga3phbGxvY19vYmooc3RydWN0IGt2bV9yZWdzKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDUwNi1cdFx0aWYgKCFrdm1fcmVncylcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ1MzEtXHRjYXNlIEtWTV9HRVRfU1JFR1M6IHtcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDUzMjpcdFx0a3ZtX3NyZWdzID0ga3phbGxvY19vYmooc3RydWN0IGt2bV9zcmVncyk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ1MzMtXHRcdHIgPSAtRU5PTUVNO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDYyMy1cdGNhc2UgS1ZNX0dFVF9GUFU6IHtcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDYyNDpcdFx0ZnB1ID0ga3phbGxvY19vYmooc3RydWN0IGt2bV9mcHUpO1xudmlydC9rdm0va3ZtX21haW4uYy00NjI1LVx0XHRyID0gLUVOT01FTTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc4MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEtWTSBBcmNoaXRlY3R1cmUgb24geDg2KioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIEtWTSB2aXJ0dWFsaXphdGlvbiBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBvbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gTXkgZm9jdXMgaXMgb24gaG93IGBrdm1fYXJjaF9hbGxvY192bWAgb3IgdGhlIGdlbmVyYWwgYGt2bWAgYWxsb2NhdGlvbiBmdW5jdGlvbnMgd29yay4gSSYjMzk7bSBoZWFkaW5nIGRpcmVjdGx5IGludG8gYGFyY2gveDg2L2t2bS94ODYuY2Ag4oCTIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZm9yIHg4Ni1zcGVjaWZpYyBLVk0gZnVuY3Rpb25hbGl0eSBzaG91bGQgcmVzaWRlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgYWJvdXQgaG93IGd1ZXN0IHBoeXNpY2FsIG1lbW9yeSBpcyBtYXBwZWQsIGhvdyB2aXJ0dWFsIG1hY2hpbmUgc3RydWN0dXJlcyBhcmUgc2V0IHVwLCBhbmQgaG93IHJlc291cmNlcyBhcmUgbWFuYWdlZCBmb3IgZWFjaCB2aXJ0dWFsIG1hY2hpbmUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9jZXNzIHNvIEkgY2FuIG9wdGltaXplIHRoaXMgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF9hbGxvY192bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDUzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBLVk0gVk0gQ3JlYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYHZpcnQva3ZtL2t2bV9tYWluLmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSBob25lIGluIG9uIGBrdm1fY3JlYXRlX3ZtYC4gVGhpcyBpcyB0aGUgY29yZSBmdW5jdGlvbiB3aGVyZSBhIEtWTSB2aXJ0dWFsIG1hY2hpbmUgaXMgYnJvdWdodCBpbnRvIGV4aXN0ZW5jZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW5pdGlhbGl6YXRpb24gZmxvdywgZXNwZWNpYWxseSBub3cgd2l0aCB0aGVzZSBuZXcgYXJjaGl0ZWN0dXJhbCBjb25zaWRlcmF0aW9ucy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgc3RlcHMgaW4gaGVyZTogcmVzb3VyY2UgYWxsb2NhdGlvbiwgbWVtb3J5IG1hbmFnZW1lbnQgc2V0dXAsIHZDUFUgY3JlYXRpb24sIGFuZCB0aGUgbGlrZS4gSXQgd2lsbCBiZSBpbnRlcmVzdGluZyB0byBzZWUgaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgdGhlIGxhdGVzdCBzZWN1cml0eSBtaXRpZ2F0aW9ucyBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMuIEkmIzM5O20ga2VlbiB0byBzcG90IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgd2hlcmUgdGhleSBtaWdodCBoYXZlIGltcGxlbWVudGVkIGNsZXZlciB0cmlja3MgdG8gZW5oYW5jZSBWTSBwZXJmb3JtYW5jZSBvciBpc29sYXRpb24uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdOKAmXMgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEwMDpcdHtcbjExMDE6XHRcdHN0cnVjdCBrdm0gKmt2bSA9IGt2bV9hcmNoX2FsbG9jX3ZtKCk7XG4xMTAyOlx0XHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcbjExMDM6XHRcdGludCByLCBpLCBqO1xuMTEwNDpcdFxuMTEwNTpcdFx0aWYgKCFrdm0pXG4xMTA2Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuMTEwNzpcdFxuMTEwODpcdFx0S1ZNX01NVV9MT0NLX0lOSVQoa3ZtKTtcbjExMDk6XHRcdG1tZ3JhYihjdXJyZW50LVx1MDAzZW1tKTtcbjExMTA6XHRcdGt2bS1cdTAwM2VtbSA9IGN1cnJlbnQtXHUwMDNlbW07XG4xMTExOlx0XHRrdm1fZXZlbnRmZF9pbml0KGt2bSk7XG4xMTEyOlx0XHRtdXRleF9pbml0KFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbjExMTM6XHRcdG11dGV4X2luaXQoXHUwMDI2a3ZtLVx1MDAzZWlycV9sb2NrKTtcbjExMTQ6XHRcdG11dGV4X2luaXQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuMTExNTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbjExMTY6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmt2bS1cdTAwM2Vtbl9pbnZhbGlkYXRlX2xvY2spO1xuMTExNzpcdFx0cmN1d2FpdF9pbml0KFx1MDAyNmt2bS1cdTAwM2Vtbl9tZW1zbG90c191cGRhdGVfcmN1d2FpdCk7XG4xMTE4Olx0XHR4YV9pbml0KFx1MDAyNmt2bS1cdTAwM2V2Y3B1X2FycmF5KTtcbjExMTk6XHQjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4xMTIwOlx0XHR4YV9pbml0KFx1MDAyNmt2bS1cdTAwM2VtZW1fYXR0cl9hcnJheSk7XG4xMTIxOlx0I2VuZGlmXG4xMTIyOlx0XG4xMTIzOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZrdm0tXHUwMDNlZ3BjX2xpc3QpO1xuMTEyNDpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2a3ZtLVx1MDAzZWdwY19sb2NrKTtcbjExMjU6XHRcbjExMjY6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmt2bS1cdTAwM2VkZXZpY2VzKTtcbjExMjc6XHRcdGt2bS1cdTAwM2VtYXhfdmNwdXMgPSBLVk1fTUFYX1ZDUFVTO1xuMTEyODpcdFxuMTEyOTpcdFx0QlVJTERfQlVHX09OKEtWTV9NRU1fU0xPVFNfTlVNIFx1MDAzZSBTSFJUX01BWCk7XG4xMTMwOlx0XG4xMTMxOlx0XHQvKlxuMTEzMjpcdFx0ICogRm9yY2Ugc3Vic2VxdWVudCBkZWJ1Z2ZzIGZpbGUgY3JlYXRpb25zIHRvIGZhaWwgaWYgdGhlIFZNIGRpcmVjdG9yeVxuMTEzMzpcdFx0ICogaXMgbm90IGNyZWF0ZWQgKGJ5IGt2bV9jcmVhdGVfdm1fZGVidWdmcygpKS5cbjExMzQ6XHRcdCAqL1xuMTEzNTpcdFx0a3ZtLVx1MDAzZWRlYnVnZnNfZGVudHJ5ID0gRVJSX1BUUigtRU5PRU5UKTtcbjExMzY6XHRcbjExMzc6XHRcdHNucHJpbnRmKGt2bS1cdTAwM2VzdGF0c19pZCwgc2l6ZW9mKGt2bS1cdTAwM2VzdGF0c19pZCksIFwmIzM0O2t2bS0lZFwmIzM0OyxcbjExMzg6XHRcdFx0IHRhc2tfcGlkX25yKGN1cnJlbnQpKTtcbjExMzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk4MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZnVuY3Rpb24gYGt2bV9hcmNoX2FsbG9jX3ZtYDoKCioqRGlzc2VjdGluZyBga3ZtX2FyY2hfYWxsb2Nfdm1gKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBga3ZtX2FyY2hfYWxsb2Nfdm1gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzOiB3aGF0ICpleGFjdGx5KiBpcyBpdCBkb2luZz8gQmFzZWQgb24gdGhlIG5hbWUsIGl0IHNlZW1zIHRvIGJlIGludm9sdmVkIHdpdGggYWxsb2NhdGluZyBhIHZpcnR1YWwgbWFjaGluZSB3aXRoaW4gdGhlIEtWTSAoS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSkgY29udGV4dCwgYW5kIHRoZSAmIzM0O2FyY2gmIzM0OyBwYXJ0IHN1Z2dlc3RzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBoYW5kbGluZy4gVGhhdCBtYWtlcyBzZW5zZS4gQmVmb3JlIEkgY2FuIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBuaXR0eS1ncml0dHkgb2YgaXRzIGltcGxlbWVudGF0aW9uLCBJIG5lZWQgYSBwcmVjaXNlIGRlZmluaXRpb24uIFdoYXQgYXJlIHRoZSBpbnB1dHM/IFdoYXQgZG9lcyBpdCByZXR1cm4sIGFuZCB3aGF0IGlzIHRoZSBicm9hZGVyIGNvbnRleHQgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBvcGVyYXRlcz8gSXMgaXQgY2FsbGVkIGVhcmx5IGluIHRoZSBWTSBjcmVhdGlvbiBwcm9jZXNzLCBvciBsYXRlcj8gSG93IGRvZXMgdGhpcyBmdW5jdGlvbiByZWxhdGUgdG8gdGhlIG92ZXJhbGwgVk0gaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IFVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgc3RydWN0dXJlcyB0aGF0IGl0IG9wZXJhdGVzIG9uIGlzIGtleS4gV2hlcmUgY2FuIEkgZmluZCB0aGUgcHJlY2lzZSBkZXRhaWxzIG9mIHRoaXMgZnVuY3Rpb24mIzM5O3MgcHVycG9zZT8gSSBjYW4gaW1hZ2luZSBpdCBpcyByZXNwb25zaWJsZSBmb3IgdGhpbmdzIGxpa2UgYWxsb2NhdGluZyB0aGUgVk0mIzM5O3MgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBwZXJoYXBzIGluaXRpYWxpemluZyBzb21lIGFyY2hpdGVjdHVyYWwgc3RhdGUsIGFuZCBwb3RlbnRpYWxseSBhc3NvY2lhdGluZyBpdCB3aXRoIGEgc3BlY2lmaWMgQ1BVIG9yIHNldCBvZiBDUFVzLCBidXQgYSBkZWZpbml0aW9uIGlzIG5lZWRlZC4gVGltZSB0byBzZWFyY2ggdGhlIHNvdXJjZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF9hbGxvY192bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MTQ5OD11MzIga3ZtX2dldF9wYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSk7XG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTE1MDAtI2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfVk1fQUxMT0NcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoxNTAxOnN0cnVjdCBrdm0gKmt2bV9hcmNoX2FsbG9jX3ZtKHZvaWQpO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTE1MDItXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmM9NTEwPWxvbmcga3ZtX2FyY2hfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jLTUxNS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jOjUxNjpzdHJ1Y3Qga3ZtICprdm1fYXJjaF9hbGxvY192bSh2b2lkKVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtNTE3LXtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oPTE3OTU9ZXh0ZXJuIHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMga3ZtX25lc3RlZF9vcHMgX19yZWFkX21vc3RseTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTE4MTMtI2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfVk1fQUxMT0NcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MTgxNDpzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm0gKmt2bV9hcmNoX2FsbG9jX3ZtKHZvaWQpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTE4MTUte1xuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xNjk3PXZvaWQga3ZtX2FyY2hfY3JlYXRlX3ZtX2RlYnVnZnMoc3RydWN0IGt2bSAqa3ZtKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTcwMS0gKiBBbGwgYXJjaGl0ZWN0dXJlcyB0aGF0IHdhbnQgdG8gdXNlIHZ6YWxsb2MgY3VycmVudGx5IGFsc29cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxNzAyOiAqIG5lZWQgdGhlaXIgb3duIGt2bV9hcmNoX2FsbG9jX3ZtIGltcGxlbWVudGF0aW9uLlxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE3MDMtICovXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTcwNDpzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm0gKmt2bV9hcmNoX2FsbG9jX3ZtKHZvaWQpXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTcwNS17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0xMDk5PXN0YXRpYyBzdHJ1Y3Qga3ZtICprdm1fY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSwgY29uc3QgY2hhciAqZmRuYW1lKVxudmlydC9rdm0va3ZtX21haW4uYy0xMTAwLXtcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTEwMTpcdHN0cnVjdCBrdm0gKmt2bSA9IGt2bV9hcmNoX2FsbG9jX3ZtKCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExMDItXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk4NwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gS1ZNIEhvc3QgSW50ZXJydXB0IEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBLVk0gaG9zdCBjb2RlLi4uIHNwZWNpZmljYWxseSwgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBpbnRlcnJ1cHQgaW5qZWN0aW9uLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oYCDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIG1hY3JvcyBmb3IgdGhlIHg4NiBLVk0gaG9zdCBhcmNoaXRlY3R1cmUgYXJlIGRlZmluZWQuIE5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBzZWN0aW9uLCBzbyBsZXQgbWUgZmluZCB0aGUgYGt2bV9ob3N0LmhgIGZpbGUgYW5kIGp1bXAgZG93biB0byBsaW5lIDE4MTQuIE15IGluc3RpbmN0cyBzdWdnZXN0IGl0IHdpbGwgYmUgc29tZSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgaW50ZXJydXB0IG1hbmFnZW1lbnQuIEl0IG1pZ2h0IGJlIGEgZGVmaW5pdGlvbiBmb3IgYW4gaW50ZXJydXB0LXJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmUsIGFuIGlubGluZSBmdW5jdGlvbiBkZWFsaW5nIHdpdGggaW50ZXJydXB0IGluamVjdGlvbiwgb3IgcGVyaGFwcyBldmVuIGEgbWFjcm8gcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIGludGVycnVwdCB3aW5kb3cuIEnigJltIGV4cGVjdGluZyB0byBmaW5kIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiBob3cgdGhlIGhvc3QgVk0gaW50ZXJhY3RzIHdpdGggdGhlIHZpcnR1YWxpemVkIGludGVycnVwdHMgYW5kIGhvdyB0aGV5JiMzOTtyZSBkZWxpdmVyZWQgdG8gdGhlIGd1ZXN0cy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODEyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MTI6XHRcbjE4MTM6XHQjZGVmaW5lIF9fS1ZNX0hBVkVfQVJDSF9WTV9BTExPQ1xuMTgxNDpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZClcbjE4MTU6XHR7XG4xODE2Olx0XHRyZXR1cm4ga3Z6YWxsb2Moa3ZtX3g4Nl9vcHMudm1fc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbjE4MTc6XHR9XG4xODE4Olx0XG4xODE5Olx0I2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfVk1fRlJFRVxuMTgyMDpcdHZvaWQga3ZtX2FyY2hfZnJlZV92bShzdHJ1Y3Qga3ZtICprdm0pO1xuMTgyMTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDY2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgbWlycm9yX3Jvb3RfbGV2ZWxgIGluIEtWTSB3aXRoIFREWCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBtaXJyb3Jfcm9vdF9sZXZlbGAgZmllbGQgd2l0aGluIHRoZSBga3ZtX2FyY2hgIHN0cnVjdC4gSSBzZWUgdGhhdCBga3Z6YWxsb2NgIGlzIHRoZSBhbGxvY2F0b3IgZm9yIHRoZSBga3ZtYCBzdHJ1Y3QsIG1lYW5pbmcgaXQmIzM5O3MgemVyby1pbml0aWFsaXplZCB3aGVuIGEgS1ZNIGlzIGNyZWF0ZWQuIFRoaXMgbWVhbnMgYGt2bS0mZ3Q7YXJjaC5taXJyb3Jfcm9vdF9sZXZlbGAgc3RhcnRzIGF0IDAsIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlci4KCkkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGludGVyYWN0aW9uIHdpdGggVERYLCBuYXR1cmFsbHkuIFRoZSBjb2RlIHNob3dzIHRoYXQgZHVyaW5nIFREWCBWTSBpbml0aWFsaXphdGlvbiB2aWEgYHRkeF90ZF9pbml0YCwgdGhlIGB0ZHhfc2V0X21pcnJvcl9yb290X2xldmVsYCBmdW5jdGlvbiBpcyB3aGF0IGFjdHVhbGx5IHNldHMgYGt2bS0mZ3Q7YXJjaC5taXJyb3Jfcm9vdF9sZXZlbGAgdG8gZWl0aGVyIDQgb3IgNSwgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpY3MsIEkgYXNzdW1lLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB3aGVyZSBpdCYjMzk7cyAqdXNlZCouIEkgc2VlIGl0JiMzOTtzIGFjY2Vzc2VkIHdpdGhpbiBga3ZtX21tdV9nZXRfdGRwX2xldmVsKHZjcHUpYC4gSGVyZSwgdGhlcmUmIzM5O3MgYSBjaGVjayB1c2luZyBga3ZtX2hhc19taXJyb3JlZF90ZHAodmNwdS0mZ3Q7a3ZtKWAuIEFzc3VtaW5nIHRoZSBtaXJyb3IgaXMgZW5hYmxlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGBtaXJyb3Jfcm9vdF9sZXZlbGAuIENydWNpYWxseSwgdGhlcmUmIzM5O3MgYSBgV0FSTl9PTl9PTkNFYCBoZXJlLCBlbnN1cmluZyB0aGF0IGBtaXJyb3Jfcm9vdF9sZXZlbGAgaXMgYWN0dWFsbHkgaW5pdGlhbGl6ZWQsIHdoaWNoIHNob3VsZCBiZSBmaW5lIGlmIGNhbGxlZCBhZnRlciBgdGR4X3RkX2luaXRgLgoKTmV4dCwgSSBzZWUgaXQmIzM5O3MgdXNlZCBpbiBgdGR4X2xvYWRfbW11X3BnZGAuIFRoZXJlJiMzOTtzIGEgYEtWTV9CVUdfT05gIGhlcmUuIFRoaXMgaXMgYSBjcml0aWNhbCBjaGVjayEgSXQgYXNzZXJ0cyB0aGF0IHRoZSBwYWdlIGdsb2JhbCBkaXJlY3RvcnkgKFBHRCkgbGV2ZWwgbWF0Y2hlcyBgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm1pcnJvcl9yb290X2xldmVsYC4gVGhpcyBpcyBsaWtlbHkgYSBrZXkgY29uc2lzdGVuY3kgY2hlY2sgdG8gZW5zdXJlIHRoZSBNTVUgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgdW5kZXIgVERYLgoKRmluYWxseSwgaW4gYF9fa3ZtX21tdV9jcmVhdGVgLCBJIG5vdGljZSB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbmFsIHJldHVybiBpZiBURFggaXMgZW5hYmxlZCBhbmQgdGhlIG1heCBURFAgbGV2ZWwgaXMgZ3JlYXRlciB0aGFuIGBQVDMyRV9ST09UX0xFVkVMYC4gVGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQgdG8gdGhlIG1pcnJvciBsZXZlbCBjYWxjdWxhdGlvbnMuCgpPa2F5LCBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGRpcmVjdCB1c2VzLiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlLiBMZXQgbWUgcXVpY2tseSBzY2FuIHRoZSBjb2RlYmFzZSBmb3IgYW55IG90aGVyIHJlZmVyZW5jZXMgdG8gYG1pcnJvcl9yb290X2xldmVsYCwgYXMgd2VsbCBhcyB0aG9zZSBub3ctcmVtb3ZlZCBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYCBhbmQgYGt2bV9oYXNfbWlycm9yZWRfdGRwYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gaW5kaXJlY3QgaW1wYWN0cyBJJiMzOTt2ZSBtaXNzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pcnJvcl9yb290X2xldmVsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MTE2MT1zdHJ1Y3Qga3ZtX2FyY2gge1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMTQwOC1cdGdmbl90IGdmbl9kaXJlY3RfYml0cztcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MTQwOTpcdGludCBtaXJyb3Jfcm9vdF9sZXZlbDtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMTQxMC1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTQ9c3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NjYtXHRpZiAoa3ZtX2hhc19taXJyb3JlZF90ZHAodmNwdS1cdTAwM2Vrdm0pIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTY3Olx0ICAgICFXQVJOX09OX09OQ0UoIXZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWwpKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTY4Olx0XHRyZXR1cm4gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbDtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk2OS1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTE2MDc9dm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE2MDgte1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNjA5Olx0aWYgKEtWTV9CVUdfT04ocGdkX2xldmVsICE9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWwsIHZjcHUtXHUwMDNla3ZtKSlcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTYxMC1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9Mjc1Mz1ERUZJTkVfQ0xBU1ModGR4X3ZtX3N0YXRlX2d1YXJkLCB0ZHhfdm1fc3RhdGVfZ3VhcmRfdCxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI3NTYtXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjI3NTc6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBpbnQgbGV2ZWwpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI3NTgte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjc2MC1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6Mjc2MTpcdGt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsID0gbGV2ZWw7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI3NjItXHRrdm0tXHUwMDNlYXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBncGFfdG9fZ2ZuKEJJVF9VTEwobGV2ZWwgPT0gNCA/IDQ3IDogNTEpKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTI3NjU9c3RhdGljIGludCB0ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjgyNy1cdGlmICh0ZF9wYXJhbXMtXHUwMDNlY29uZmlnX2ZsYWdzIFx1MDAyNiBURFhfQ09ORklHX0ZMQUdTX01BWF9HUEFXKVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoyODI4Olx0XHR0ZHhfc2V0X21pcnJvcl9yb290X2xldmVsKGt2bSwgNSk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI4MjktXHRlbHNlXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjI4MzA6XHRcdHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA0KTtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjgzMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NTAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEtWTSBNTVUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIEtWTSBNTVUgY29uZmlndXJhdGlvbiB0byB0cm91Ymxlc2hvb3QgdGhpcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgY291cGxlIG9mIGtleSBmdW5jdGlvbnM6IGBfX2t2bV9tbXVfY3JlYXRlYCBhbmQgYGt2bV9tbXVfZ2V0X21heF90ZHBfbGV2ZWwoKWAuIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgd2F5IHRoZSBNTVUgaXMgYmVpbmcgc2V0IHVwIGluIHRoaXMgaW5zdGFuY2UsIGFuZCB0aGF0IGxpa2VseSBzdGFydHMgd2l0aCB0aGUgY3JlYXRpb24gcHJvY2Vzcy4gSSBleHBlY3QgYF9fa3ZtX21tdV9jcmVhdGVgIHRvIGJlIHdoZXJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHRoZSBpbml0aWFsIHBhZ2UgdGFibGVzIGFyZSBlc3RhYmxpc2hlZC4gVGhlbiBJIHdhbnQgdG8ga25vdyB3aGF0IHRoZSBtYXhpbXVtIFREUCBsZXZlbCBpcyBiZWNhdXNlIHRoYXQgd2lsbCBlZmZlY3Qgd2hhdCBpcyBnb2luZyBvbiBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwuIEZyb20gdGhlcmUgSSBjYW4gY2hlY2sgb24gcG9zc2libGUgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9jcHVpZC5jPTE0MTg9c3RhdGljIGlubGluZSBpbnQgX19kb19jcHVpZF9mdW5jKHN0cnVjdCBrdm1fY3B1aWRfYXJyYXkgKmFycmF5LCB1MzIgZnVuY3Rpb24pXG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTgxMS1cdFx0XHRnX3BoeXNfYXMgPSBwaHlzX2FzO1xuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTgxMjpcdFx0XHRpZiAoa3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpIFx1MDAzYyA1KVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTgxMy1cdFx0XHRcdGdfcGh5c19hcyA9IG1pbihnX3BoeXNfYXMsIDQ4VSk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS5oPTk5PXN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfaGFzX21iZWMoc3RydWN0IGt2bV9tbXUgKm1tdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTAzLVxuYXJjaC94ODYva3ZtL21tdS5oOjEwNDp1OCBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKHZvaWQpO1xuYXJjaC94ODYva3ZtL21tdS5oLTEwNS1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTQ9c3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NzYtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5Nzc6dTgga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCh2b2lkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTc4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY4MTM9c3RhdGljIGludCBfX2t2bV9tbXVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXUgKm1tdSwgc3RydWN0IGt2bV9wYWdld2FsayAqdylcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY4MzktXHQgKi9cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Njg0MDpcdGlmICh0ZHBfZW5hYmxlZCBcdTAwMjZcdTAwMjYga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpIFx1MDAzZSBQVDMyRV9ST09UX0xFVkVMKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODQxLVx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyOTAKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIEtWTSYjMzk7cyBNZW1vcnkgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyB6b29tIGluIG9uIGEgY291cGxlIG9mIGNydWNpYWwgS1ZNIE1NVSBmdW5jdGlvbnM6IGBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsYCBhbmQgYF9fa3ZtX21tdV9jcmVhdGVgLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGZ1bmN0aW9ucyBpcyBrZXkgdG8gZ3Jhc3BpbmcgaG93IEtWTSBtYW5hZ2VzIGd1ZXN0IHBoeXNpY2FsIG1lbW9yeSBhbmQgdHJhbnNsYXRlcyBpdCB0byBob3N0IHBoeXNpY2FsIG1lbW9yeSwgcGFydGljdWxhcmx5IHRoZSBoYW5kbGluZyBvZiBUcmFuc2xhdGlvbiBMb29rYXNpZGUgQnVmZmVycyAoVExCcykgYW5kIG5lc3RlZCBwYWdpbmcuIGBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsYCBsaWtlbHkgcmV2ZWFscyB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgVHJhbnNsYXRpb24gRGVwdGggUGFnaW5nIGxldmVsLCBoaW50aW5nIGF0IHRoZSBkZXB0aCBvZiB0aGUgcGFnZSB0YWJsZSBoaWVyYXJjaHkgS1ZNIGNhbiBzdXBwb3J0IGFuZCBob3cgbmVzdGVkIHBhZ2luZyBpcyBoYW5kbGVkLCBwb3NzaWJseSBhIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gdGhlIGhhbmRsaW5nIG9mIGd1ZXN0IHBhZ2UgdGFibGVzIGFuZCBob3cgdGhleSBhcmUgdHJhbnNsYXRlZCB0byBob3N0IHBhZ2UgdGFibGVzLiBBbmQgYF9fa3ZtX21tdV9jcmVhdGVgLCB3ZWxsIHRoYXQmIzM5O3MgdGhlIHJlYWwgbWVhdCBhbmQgcG90YXRvZXMgLSB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIE1NVSBzdHJ1Y3R1cmUgZ2V0cyBpbml0aWFsaXplZCBhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcyBmb3IgaGFuZGxpbmcgZ3Vlc3QgbWVtb3J5IGFyZSBzZXQgdXAuIEkmIzM5O20ga2VlbiB0byBkaXNzZWN0IGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QgdG8gc2VlIGhvdyBLVk0gaGFuZGxlcyBtZW1vcnkgdmlydHVhbGl6YXRpb24gaW4gdGhlIG1vc3QgZnVuZGFtZW50YWwgd2F5LCBpbmNsdWRpbmcgdGhpbmdzIGxpa2UgcGFnZSB0YWJsZSB3YWxrcywgc2hhZG93aW5nLCBhbmQgdGhlIGRpcnR5L2FjY2Vzc2VkIGJpdCB0cmFja2luZy4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB0aGUgZGV0YWlscyBvZiB0aGUgTU1VIGNyZWF0aW9uLCB0byBzZWUgd2hpY2ggc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcyBhcmUgdXRpbGl6ZWQgaW4gS1ZNLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1OTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU5NzA6XHRcdC8qIFVzZSA1LWxldmVsIFREUCBpZiBhbmQgb25seSBpZiBpdCYjMzk7cyB1c2VmdWwvbmVjZXNzYXJ5LiAqL1xuNTk3MTpcdFx0aWYgKG1heF90ZHBfbGV2ZWwgPT0gNSBcdTAwMjZcdTAwMjYgY3B1aWRfbWF4cGh5YWRkcih2Y3B1KSBcdTAwM2M9IDQ4KVxuNTk3MjpcdFx0XHRyZXR1cm4gNDtcbjU5NzM6XHRcbjU5NzQ6XHRcdHJldHVybiBtYXhfdGRwX2xldmVsO1xuNTk3NTpcdH1cbjU5NzY6XHRcbjU5Nzc6XHR1OCBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKHZvaWQpXG41OTc4Olx0e1xuNTk3OTpcdFx0cmV0dXJuIHRkcF9yb290X2xldmVsID8gdGRwX3Jvb3RfbGV2ZWwgOiBtYXhfdGRwX2xldmVsO1xuNTk4MDpcdH1cbjU5ODE6XHRcbjU5ODI6XHRzdGF0aWMgdW5pb24ga3ZtX21tdV9wYWdlX3JvbGVcbjU5ODM6XHRrdm1fY2FsY190ZHBfbW11X3Jvb3RfcGFnZV9yb2xlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbjU5ODQ6XHRcdFx0XHRcdHVuaW9uIGt2bV9jcHVfcm9sZSBjcHVfcm9sZSlcbjU5ODU6XHR7XG41OTg2Olx0XHR1bmlvbiBrdm1fbW11X3BhZ2Vfcm9sZSByb2xlID0gezB9O1xuNTk4NzpcdFxuNTk4ODpcdFx0cm9sZS5jcjBfd3AgPSB0cnVlO1xuNTk4OTpcdFx0cm9sZS5jcjRfc21lcCA9IGt2bV94ODZfY2FsbCh0ZHBfaGFzX3NtZXApKHZjcHUtXHUwMDNla3ZtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMjcKCQkJCQkJCW91dHB1dDogMjMzCgkJCQkJCQl0aG91Z2h0czogMzQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgS01TQU4gSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgbG9va2luZyBwcm9taXNpbmcsIGJ1dCB3ZSBuZWVkIHRvIGJlIHRob3JvdWdoLiBGaXJzdCwgbGV0JiMzOTtzIG1ldGhvZGljYWxseSBjaGVjayBlYWNoIEtNU0FOIHJlcXVpcmVtZW50LiBJcyB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGFueSBrZXJuZWwgc3RydWN0dXJlIGRhdGEgdGhhdCBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIHdpdGhvdXQgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQ/IE5vLCBub3RoaW5nIGlzIG1vZGlmaWVkIG9yIGludHJvZHVjZWQuIFRoZSBuZXh0IGlzIHRvIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGJlaW5nIHJlYWQuIFRoZSBvbmx5IG5ldyBhZGRpdGlvbiBpcyBgbWlycm9yX3Jvb3RfbGV2ZWxgIHdpdGhpbiBgc3RydWN0IGt2bV9hcmNoYC4gR2l2ZW4gdGhhdCBgc3RydWN0IGt2bWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrdnphbGxvY2AgaW4gYGt2bV9hcmNoX2FsbG9jX3ZtYCwgYG1pcnJvcl9yb290X2xldmVsYCBpcyBndWFyYW50ZWVkIHRvIGJlIHplcm9lZCBkdXJpbmcgVk0gY3JlYXRpb24uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LgoKTmV4dCwgZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBjb25kaXRpb25hbCBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIGBtaXJyb3Jfcm9vdF9sZXZlbGAgaXMgaW5pdGlhbGl6ZWQgdG8gemVybyB1cG9uIGFsbG9jYXRpb24gYW5kIGlzIGV4cGxpY2l0bHkgc2V0IGxhdGVyIHZpYSBgdGR4X3NldF9taXJyb3Jfcm9vdF9sZXZlbCgpYC4gTm8gd29ycmllcyB0aGVyZS4gSG93IGFib3V0IHBvdGVudGlhbCBtb2RpZmljYXRpb25zIHRvIGJvdW5kcyBvciBsZW5ndGhzIHRoYXQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgbm90IGF0IGFsbC4gVGhpcyBwYXRjaCByZWZhY3RvcnMgaG93IHdlIGRldGVybWluZSB0aGUgVERQIGxldmVsIGZvciBURFggVk1zIHdpdGggbWlycm9yZWQgcGFnZSB0YWJsZXMuIEluc3RlYWQgb2YgcXVlcnlpbmcgQ1BVSUQgdG8gZGV0ZXJtaW5lIHRoZSBndWVzdCYjMzk7cyBtYXggcGh5c2ljYWwgYWRkcmVzcywgaXQgZXhwbGljaXRseSByZWNvcmRzIHRoZSBgbWlycm9yX3Jvb3RfbGV2ZWxgIGNvbmZpZ3VyZWQgZHVyaW5nIFREWCBWTSBpbml0aWFsaXphdGlvbiBpbiBgdGR4X3RkX2luaXRgIGFuZCB1c2VzIHRoYXQuIFNvIGl0IGxvb2tzIGxpa2UgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBhbmQgd2VsbC1kZWZpbmVkLgoKRmluYWxseSwgYXJlIHRoZXJlIGFueSBpbmZvLWxlYWsgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW55d2hlcmU/IE5vLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCB3ZSYjMzk7cmUgaW4gdGhlIGNsZWFyLgoKU28sIGluIGNvbmNsdXNpb24sIGl0IHNlZW1zIHRoYXQgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBidWlsZHMgc2hvdWxkIGJlIGZ1bGx5IHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3VlcyDigJMgYW55IGFzc2VydGlvbnMsIGBXQVJOX09OYHMsIGxvZ2ljIGVycm9ycy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGhlcmUgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgcnVuLgoKTm93LCBhIHF1aWNrIGRvdWJsZS1jaGVjazogYE5lZWRzS01TQU5gIHNob3VsZCBkZWZpbml0ZWx5IGJlIGBmYWxzZWAuCgpPa2F5LCBJJiMzOTttIGNvbmZpZGVudCBpbiBteSBhbmFseXNpcy4gVGltZSB0byB3cml0ZSB1cCBhIGNvbmNpc2UsIGRldGFpbGVkIHJlYXNvbmluZyBmb3Igc2V0dGluZyB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyBLVk0gZGV0ZXJtaW5lcyB0aGUgVERQIGxldmVsIGZvciBWTXMgd2l0aCBtaXJyb3JlZCBwYWdlIHRhYmxlcyAoc3VjaCBhcyBURFggVk1zKSwgYnkgdHJhY2tpbmcgdGhlIG1pcnJvciByb290IGxldmVsIGV4cGxpY2l0bHkgaW4gYHN0cnVjdCBrdm1fYXJjaGAgKGBtaXJyb3Jfcm9vdF9sZXZlbGApIHNldCBkdXJpbmcgVEQgaW5pdGlhbGl6YXRpb24gaW5zdGVhZCBvZiBxdWVyeWluZyB0aGUgZ3Vlc3QgQ1BVSUQuXG5cbi0gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6IGBzdHJ1Y3Qga3ZtX2FyY2hgIGlzIHBhcnQgb2YgYHN0cnVjdCBrdm1gLCB3aGljaCBpcyBhbGxvY2F0ZWQgd2l0aCBga3Z6YWxsb2MoKWAgaW4gYGt2bV9hcmNoX2FsbG9jX3ZtKClgLCBndWFyYW50ZWVpbmcgdGhhdCBgbWlycm9yX3Jvb3RfbGV2ZWxgIGlzIHplcm8taW5pdGlhbGl6ZWQuXG4tIE5vIGtlcm5lbC10by11c2VyIGluZm8gbGVha3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IG5ldyBkYXRhIHRvIHVzZXIgc3BhY2UgdmlhIGNvcHlfdG9fdXNlciBvciBpb2N0bCBvdXRwdXRzLlxuLSBObyB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBvciBidWZmZXIgYWNjZXNzOiBMb2dpYyBjaGVja3Mgb3BlcmF0ZSBvbiBmdWxseSBpbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGFuZCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuXG5cblRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgcHJlc2VudCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gcnVuIGlzIG5vdCBuZWVkZWQ7IHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyBLVk0gZGV0ZXJtaW5lcyB0aGUgVERQIGxldmVsIGZvciBWTXMgd2l0aCBtaXJyb3JlZCBwYWdlIHRhYmxlcyAoc3VjaCBhcyBURFggVk1zKSwgYnkgdHJhY2tpbmcgdGhlIG1pcnJvciByb290IGxldmVsIGV4cGxpY2l0bHkgaW4gYHN0cnVjdCBrdm1fYXJjaGAgKGBtaXJyb3Jfcm9vdF9sZXZlbGApIHNldCBkdXJpbmcgVEQgaW5pdGlhbGl6YXRpb24gaW5zdGVhZCBvZiBxdWVyeWluZyB0aGUgZ3Vlc3QgQ1BVSUQuXG5cbi0gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6IGBzdHJ1Y3Qga3ZtX2FyY2hgIGlzIHBhcnQgb2YgYHN0cnVjdCBrdm1gLCB3aGljaCBpcyBhbGxvY2F0ZWQgd2l0aCBga3Z6YWxsb2MoKWAgaW4gYGt2bV9hcmNoX2FsbG9jX3ZtKClgLCBndWFyYW50ZWVpbmcgdGhhdCBgbWlycm9yX3Jvb3RfbGV2ZWxgIGlzIHplcm8taW5pdGlhbGl6ZWQuXG4tIE5vIGtlcm5lbC10by11c2VyIGluZm8gbGVha3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IG5ldyBkYXRhIHRvIHVzZXIgc3BhY2UgdmlhIGNvcHlfdG9fdXNlciBvciBpb2N0bCBvdXRwdXRzLlxuLSBObyB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBvciBidWZmZXIgYWNjZXNzOiBMb2dpYyBjaGVja3Mgb3BlcmF0ZSBvbiBmdWxseSBpbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGFuZCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuXG5cblRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgcHJlc2VudCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gcnVuIGlzIG5vdCBuZWVkZWQ7IHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNDo0MC4wNTE4MDM0NTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ0ODU5ODUwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIklOVEVMX1REWF9IT1NUXCIsXG4gICAgXCJLVk1fSU5URUxfVERYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX21tdV9jcmVhdGVcIixcbiAgICBcImt2bV9pbml0X21tdVwiLFxuICAgIFwia3ZtX2luaXRfc2hhZG93X25wdF9tbXVcIixcbiAgICBcInRkeF9sb2FkX21tdV9wZ2RcIixcbiAgICBcInRkeF90ZF9pbml0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaG93IEtWTSBkZXRlcm1pbmVzIHRoZSBURFAgbGV2ZWwgZm9yIFZNcyB3aXRoIG1pcnJvcmVkIHBhZ2UgdGFibGVzIChzdWNoIGFzIFREWCBWTXMpLCBieSB0cmFja2luZyB0aGUgbWlycm9yIHJvb3QgbGV2ZWwgZXhwbGljaXRseSBpbiBgc3RydWN0IGt2bV9hcmNoYCAoYG1pcnJvcl9yb290X2xldmVsYCkgc2V0IGR1cmluZyBURCBpbml0aWFsaXphdGlvbiBpbnN0ZWFkIG9mIHF1ZXJ5aW5nIHRoZSBndWVzdCBDUFVJRC5cXG5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlOiBgc3RydWN0IGt2bV9hcmNoYCBpcyBwYXJ0IG9mIGBzdHJ1Y3Qga3ZtYCwgd2hpY2ggaXMgYWxsb2NhdGVkIHdpdGggYGt2emFsbG9jKClgIGluIGBrdm1fYXJjaF9hbGxvY192bSgpYCwgZ3VhcmFudGVlaW5nIHRoYXQgYG1pcnJvcl9yb290X2xldmVsYCBpcyB6ZXJvLWluaXRpYWxpemVkLlxcbi0gTm8ga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczogVGhlIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgbmV3IGRhdGEgdG8gdXNlciBzcGFjZSB2aWEgY29weV90b191c2VyIG9yIGlvY3RsIG91dHB1dHMuXFxuLSBObyB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBvciBidWZmZXIgYWNjZXNzOiBMb2dpYyBjaGVja3Mgb3BlcmF0ZSBvbiBmdWxseSBpbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGFuZCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuXFxuXFxuVGhlcmVmb3JlLCB0aGUgY2hhbmdlcyBwcmVzZW50IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBydW4gaXMgbm90IG5lZWRlZDsgc3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHg4NiBNTVUgcm9vdCBsZXZlbCBjYWxjdWxhdGlvbiBhbmQgVERQIGNyZWF0aW9uIGxvZ2ljIChfX2t2bV9tbXVfY3JlYXRlLCBrdm1fbW11X2dldF90ZHBfbGV2ZWwpIGFuZCB1cGRhdGVzIFREWCBtaXJyb3JlZCByb290IGxldmVsIGhhbmRsaW5nICh0ZHhfbG9hZF9tbXVfcGdkLCB0ZHhfdGRfaW5pdCkuIEl0IGFsc28gYWRkcyBhIG5ldyBXQVJOX09OX09OQ0UgYXNzZXJ0aW9uIGZvciB1bmluaXRpYWxpemVkIG1pcnJvcl9yb290X2xldmVsLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZHVyaW5nIEtWTSBWTSBhbmQgdkNQVSBpbml0aWFsaXphdGlvbi9saWZlY3ljbGUgb3BlcmF0aW9ucyBvbiB4ODZfNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM0OjQwLjA1MTgwODAwNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MTcwMjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzFkMDhhMTA5NTI5YzVmMjQ2YTVmN2FhZWJiZTk5NzFkZWQ1NDE1YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDIzOjM0OjM4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggNjgzYmI4YmY0M2E5NC4uZWRkNWFkMmU1YjUyZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC0xNDA2LDYgKzE0MDYsNyBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xcbiBcXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgc3BsaXRfZGVzY19jYWNoZTtcXG4gXFxuIFxcdGdmbl90IGdmbl9kaXJlY3RfYml0cztcXG4rXFx0aW50IG1pcnJvcl9yb290X2xldmVsO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogU2l6ZSBvZiB0aGUgQ1BVJ3MgZGlydHkgbG9nIGJ1ZmZlciwgaS5lLiBWTVgncyBQTUwgYnVmZmVyLiBBIFplcm9cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmMgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xcbmluZGV4IGRkYjAyMmNiMjAzYTIuLjM0YzYwOWE2MGVlZmYgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xcbkBAIC00ODMsMjAgKzQ4Myw2IEBAIGludCBjcHVpZF9xdWVyeV9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0cmV0dXJuIDM2O1xcbiB9XFxuIFxcbi1pbnQgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4te1xcbi1cXHRzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqYmVzdDtcXG4tXFxuLVxcdGJlc3QgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDAwKTtcXG4tXFx0aWYgKCFiZXN0IHx8IGJlc3QtXFx1MDAzZWVheCBcXHUwMDNjIDB4ODAwMDAwMDgpXFxuLVxcdFxcdGdvdG8gbm90X2ZvdW5kO1xcbi1cXHRiZXN0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAwOCk7XFxuLVxcdGlmIChiZXN0KVxcbi1cXHRcXHRyZXR1cm4gKGJlc3QtXFx1MDAzZWVheCBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiAweGZmO1xcbi1ub3RfZm91bmQ6XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBUaGlzIFxcXCJyYXdcXFwiIHZlcnNpb24gcmV0dXJucyB0aGUgcmVzZXJ2ZWQgR1BBIGJpdHMgd2l0aG91dCBhbnkgYWRqdXN0bWVudHMgZm9yXFxuICAqIGVuY3J5cHRpb24gdGVjaG5vbG9naWVzIHRoYXQgdXN1cnAgYml0cy4gIFRoZSByYXcgbWFzayBzaG91bGQgYmUgdXNlZCBpZiBhbmRcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmggYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaFxcbmluZGV4IDhkODYzZjQ1NTg1ZGUuLjQ2YmZlODY5OWU2N2YgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaFxcbkBAIC02OCw3ICs2OCw2IEBAIHZvaWQgX19pbml0IGt2bV9pbml0X3hzdGF0ZV9zaXplcyh2b2lkKTtcXG4gdTMyIHhzdGF0ZV9yZXF1aXJlZF9zaXplKHU2NCB4c3RhdGVfYnYsIGJvb2wgY29tcGFjdGVkKTtcXG4gXFxuIGludCBjcHVpZF9xdWVyeV9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLWludCBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdTY0IGt2bV92Y3B1X3Jlc2VydmVkX2dwYV9iaXRzX3JhdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgY3B1aWRfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuaW5kZXggMDY0ZWNjMzNiOTI2Ny4uZDQzYjhiNmMzYjE3OSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbkBAIC01OTUzLDE5ICs1OTUzLDIyIEBAIHZvaWQgX19rdm1fbW11X3JlZnJlc2hfcGFzc3Rocm91Z2hfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBrdm1fbW11X2dldF90ZHBfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdGludCBtYXhwYTtcXG4tXFxuLVxcdGlmICh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTSlcXG4tXFx0XFx0bWF4cGEgPSBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIodmNwdSk7XFxuLVxcdGVsc2VcXG4tXFx0XFx0bWF4cGEgPSBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpO1xcbi1cXG4gXFx0LyogdGRwX3Jvb3RfbGV2ZWwgaXMgYXJjaGl0ZWN0dXJlIGZvcmNlZCBsZXZlbCwgdXNlIGl0IGlmIG5vbnplcm8gKi9cXG4gXFx0aWYgKHRkcF9yb290X2xldmVsKVxcbiBcXHRcXHRyZXR1cm4gdGRwX3Jvb3RfbGV2ZWw7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBJZiB0aGUgVk0gaGFzIG1pcnJvciByb290cywgdGhlbiB0aGUgcm9vdCBsZXZlbCBpcyBwcmVkZWZpbmVkIGFzIHRoZVxcbitcXHQgKiBtaXJyb3Igcm9vdCAoYW5kIGJ5IGV4dGVuc2lvbiB0aGUgbm9ybWFsIHJvb3QpIG5lZWRzIHRvIG1hdGNoIHRoZVxcbitcXHQgKiByb290IGxldmVsIHRoYXQgd2FzIGNvbmZpZ3VyZWQgZm9yIHRoZSBleHRlcm5hbCBwYWdlIHRhYmxlcyB0aGF0IGFyZVxcbitcXHQgKiBiZWluZyBtaXJyb3JlZCBieSBLVk0uXFxuK1xcdCAqL1xcbitcXHRpZiAoa3ZtX2hhc19taXJyb3JlZF90ZHAodmNwdS1cXHUwMDNla3ZtKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIVdBUk5fT05fT05DRSghdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsKSlcXG4rXFx0XFx0cmV0dXJuIHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbDtcXG4rXFxuIFxcdC8qIFVzZSA1LWxldmVsIFREUCBpZiBhbmQgb25seSBpZiBpdCdzIHVzZWZ1bC9uZWNlc3NhcnkuICovXFxuLVxcdGlmIChtYXhfdGRwX2xldmVsID09IDUgXFx1MDAyNlxcdTAwMjYgbWF4cGEgXFx1MDAzYz0gNDgpXFxuK1xcdGlmIChtYXhfdGRwX2xldmVsID09IDUgXFx1MDAyNlxcdTAwMjYgY3B1aWRfbWF4cGh5YWRkcih2Y3B1KSBcXHUwMDNjPSA0OClcXG4gXFx0XFx0cmV0dXJuIDQ7XFxuIFxcbiBcXHRyZXR1cm4gbWF4X3RkcF9sZXZlbDtcXG5AQCAtNjgzNCw3ICs2ODM3LDcgQEAgc3RhdGljIGludCBfX2t2bV9tbXVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXUgKm1tdSwgc3RydWN0IGtcXG4gXFx0ICogb3RoZXIgZXhjZXB0aW9uIGlzIGZvciBzaGFkb3dpbmcgTDEncyAzMi1iaXQgb3IgUEFFIE5QVCBvbiA2NC1iaXRcXG4gXFx0ICogS1ZNOyB0aGF0IGhvcnJvciBpcyBoYW5kbGVkIG9uLWRlbWFuZCBieSBtbXVfYWxsb2Nfc3BlY2lhbF9yb290cygpLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHRkcF9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbCh2Y3B1KSBcXHUwMDNlIFBUMzJFX1JPT1RfTEVWRUwpXFxuK1xcdGlmICh0ZHBfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKCkgXFx1MDAzZSBQVDMyRV9ST09UX0xFVkVMKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX0RNQTMyKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG5pbmRleCBiMjcyYzIwNTg2YTc0Li5hMGJjOWY4MThmNDM5IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuQEAgLTU2LDkgKzU2LDYgQEBcXG4gYm9vbCBlbmFibGVfdGR4IF9fcm9fYWZ0ZXJfaW5pdDtcXG4gbW9kdWxlX3BhcmFtX25hbWVkKHRkeCwgZW5hYmxlX3RkeCwgYm9vbCwgMDQ0NCk7XFxuIFxcbi0jZGVmaW5lIFREWF9TSEFSRURfQklUX1BXTF81IGdwYV90b19nZm4oQklUX1VMTCg1MSkpXFxuLSNkZWZpbmUgVERYX1NIQVJFRF9CSVRfUFdMXzQgZ3BhX3RvX2dmbihCSVRfVUxMKDQ3KSlcXG4tXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICp0ZHhfc3lzaW5mbztcXG4gXFxuIHZvaWQgdGRoX3ZwX3JkX2ZhaWxlZChzdHJ1Y3QgdmNwdV90ZHggKnRkeCwgY2hhciAqdWNsYXNzLCB1MzIgZmllbGQsIHU2NCBlcnIpXFxuQEAgLTE2MDksMTAgKzE2MDYsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV90ZHZtY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiB2b2lkIHRkeF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSwgaW50IHBnZF9sZXZlbClcXG4ge1xcbi1cXHR1NjQgc2hhcmVkX2JpdCA9IChwZ2RfbGV2ZWwgPT0gNSkgPyBURFhfU0hBUkVEX0JJVF9QV0xfNSA6XFxuLVxcdFxcdFxcdCAgVERYX1NIQVJFRF9CSVRfUFdMXzQ7XFxuLVxcbi1cXHRpZiAoS1ZNX0JVR19PTihzaGFyZWRfYml0ICE9IGt2bV9nZm5fZGlyZWN0X2JpdHModmNwdS1cXHUwMDNla3ZtKSwgdmNwdS1cXHUwMDNla3ZtKSlcXG4rXFx0aWYgKEtWTV9CVUdfT04ocGdkX2xldmVsICE9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbCwgdmNwdS1cXHUwMDNla3ZtKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0dGRfdm1jc193cml0ZTY0KHRvX3RkeCh2Y3B1KSwgU0hBUkVEX0VQVF9QT0lOVEVSLCByb290X2hwYSk7XFxuQEAgLTI3NjAsNiArMjc1NCwxNCBAQCBERUZJTkVfQ0xBU1ModGR4X3ZtX3N0YXRlX2d1YXJkLCB0ZHhfdm1fc3RhdGVfZ3VhcmRfdCxcXG4gXFx0ICAgICBpZiAoIUlTX0VSUihfVCkpIHRkeF9yZWxlYXNlX3ZtX3N0YXRlX2xvY2tzKF9UKSxcXG4gXFx0ICAgICB0ZHhfYWNxdWlyZV92bV9zdGF0ZV9sb2Nrcyhrdm0pLCBzdHJ1Y3Qga3ZtICprdm0pO1xcbiBcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBpbnQgbGV2ZWwpXFxuK3tcXG4rXFx0QlVJTERfQlVHX09OKGxldmVsICE9IDQgXFx1MDAyNlxcdTAwMjYgbGV2ZWwgIT0gNSk7XFxuK1xcbitcXHRrdm0tXFx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWwgPSBsZXZlbDtcXG4rXFx0a3ZtLVxcdTAwM2VhcmNoLmdmbl9kaXJlY3RfYml0cyA9IGdwYV90b19nZm4oQklUX1VMTChsZXZlbCA9PSA0ID8gNDcgOiA1MSkpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHRkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV90ZHhfaW5pdF92bSBfX3VzZXIgKnVzZXJfZGF0YSA9IHU2NF90b191c2VyX3B0cihjbWQtXFx1MDAzZWRhdGEpO1xcbkBAIC0yODIzLDkgKzI4MjUsOSBAQCBzdGF0aWMgaW50IHRkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXFxuIFxcdGt2bV90ZHgtXFx1MDAzZXhmYW0gPSB0ZF9wYXJhbXMtXFx1MDAzZXhmYW07XFxuIFxcbiBcXHRpZiAodGRfcGFyYW1zLVxcdTAwM2Vjb25maWdfZmxhZ3MgXFx1MDAyNiBURFhfQ09ORklHX0ZMQUdTX01BWF9HUEFXKVxcbi1cXHRcXHRrdm0tXFx1MDAzZWFyY2guZ2ZuX2RpcmVjdF9iaXRzID0gVERYX1NIQVJFRF9CSVRfUFdMXzU7XFxuK1xcdFxcdHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA1KTtcXG4gXFx0ZWxzZVxcbi1cXHRcXHRrdm0tXFx1MDAzZWFyY2guZ2ZuX2RpcmVjdF9iaXRzID0gVERYX1NIQVJFRF9CSVRfUFdMXzQ7XFxuK1xcdFxcdHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA0KTtcXG4gXFxuIFxcdGt2bV90ZHgtXFx1MDAzZXN0YXRlID0gVERfU1RBVEVfSU5JVElBTElaRUQ7XFxuIG91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzQ6NDAuNTQxNzI0MTM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NjI3ODk3NzIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiSU5URUxfVERYX0hPU1RcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fbW11X2NyZWF0ZVwiLFxuICAgIFwia3ZtX2luaXRfbW11XCIsXG4gICAgXCJrdm1faW5pdF9zaGFkb3dfbnB0X21tdVwiLFxuICAgIFwidGR4X2xvYWRfbW11X3BnZFwiLFxuICAgIFwidGR4X3RkX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0geDg2IE1NVSByb290IGxldmVsIGNhbGN1bGF0aW9uIGFuZCBURFAgY3JlYXRpb24gbG9naWMgKF9fa3ZtX21tdV9jcmVhdGUsIGt2bV9tbXVfZ2V0X3RkcF9sZXZlbCkgYW5kIHVwZGF0ZXMgVERYIG1pcnJvcmVkIHJvb3QgbGV2ZWwgaGFuZGxpbmcgKHRkeF9sb2FkX21tdV9wZ2QsIHRkeF90ZF9pbml0KS4gSXQgYWxzbyBhZGRzIGEgbmV3IFdBUk5fT05fT05DRSBhc3NlcnRpb24gZm9yIHVuaW5pdGlhbGl6ZWQgbWlycm9yX3Jvb3RfbGV2ZWwuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBkdXJpbmcgS1ZNIFZNIGFuZCB2Q1BVIGluaXRpYWxpemF0aW9uL2xpZmVjeWNsZSBvcGVyYXRpb25zIG9uIHg4Nl82NC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MWQwOGExMDk1MjljNWYyNDZhNWY3YWFlYmJlOTk3MWRlZDU0MTViXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAyMzozNDozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCA2ODNiYjhiZjQzYTk0Li5lZGQ1YWQyZTViNTJkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTE0MDYsNiArMTQwNiw3IEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgc3BsaXRfZGVzY19jYWNoZTtcbiBcbiBcdGdmbl90IGdmbl9kaXJlY3RfYml0cztcbitcdGludCBtaXJyb3Jfcm9vdF9sZXZlbDtcbiBcbiBcdC8qXG4gXHQgKiBTaXplIG9mIHRoZSBDUFUncyBkaXJ0eSBsb2cgYnVmZmVyLCBpLmUuIFZNWCdzIFBNTCBidWZmZXIuIEEgWmVyb1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5jIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbmluZGV4IGRkYjAyMmNiMjAzYTIuLjM0YzYwOWE2MGVlZmYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuKysrIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbkBAIC00ODMsMjAgKzQ4Myw2IEBAIGludCBjcHVpZF9xdWVyeV9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJldHVybiAzNjtcbiB9XG4gXG4taW50IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0c3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmJlc3Q7XG4tXG4tXHRiZXN0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAwMCk7XG4tXHRpZiAoIWJlc3QgfHwgYmVzdC1cdTAwM2VlYXggXHUwMDNjIDB4ODAwMDAwMDgpXG4tXHRcdGdvdG8gbm90X2ZvdW5kO1xuLVx0YmVzdCA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KHZjcHUsIDB4ODAwMDAwMDgpO1xuLVx0aWYgKGJlc3QpXG4tXHRcdHJldHVybiAoYmVzdC1cdTAwM2VlYXggXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHhmZjtcbi1ub3RfZm91bmQ6XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gLypcbiAgKiBUaGlzIFwicmF3XCIgdmVyc2lvbiByZXR1cm5zIHRoZSByZXNlcnZlZCBHUEEgYml0cyB3aXRob3V0IGFueSBhZGp1c3RtZW50cyBmb3JcbiAgKiBlbmNyeXB0aW9uIHRlY2hub2xvZ2llcyB0aGF0IHVzdXJwIGJpdHMuICBUaGUgcmF3IG1hc2sgc2hvdWxkIGJlIHVzZWQgaWYgYW5kXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmggYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaFxuaW5kZXggOGQ4NjNmNDU1ODVkZS4uNDZiZmU4Njk5ZTY3ZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaFxuQEAgLTY4LDcgKzY4LDYgQEAgdm9pZCBfX2luaXQga3ZtX2luaXRfeHN0YXRlX3NpemVzKHZvaWQpO1xuIHUzMiB4c3RhdGVfcmVxdWlyZWRfc2l6ZSh1NjQgeHN0YXRlX2J2LCBib29sIGNvbXBhY3RlZCk7XG4gXG4gaW50IGNwdWlkX3F1ZXJ5X21heHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbi1pbnQgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdTY0IGt2bV92Y3B1X3Jlc2VydmVkX2dwYV9iaXRzX3JhdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGNwdWlkX21heHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5pbmRleCAwNjRlY2MzM2I5MjY3Li5kNDNiOGI2YzNiMTc5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuQEAgLTU5NTMsMTkgKzU5NTMsMjIgQEAgdm9pZCBfX2t2bV9tbXVfcmVmcmVzaF9wYXNzdGhyb3VnaF9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBzdGF0aWMgaW5saW5lIGludCBrdm1fbW11X2dldF90ZHBfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGludCBtYXhwYTtcbi1cbi1cdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk0pXG4tXHRcdG1heHBhID0gY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHZjcHUpO1xuLVx0ZWxzZVxuLVx0XHRtYXhwYSA9IGNwdWlkX21heHBoeWFkZHIodmNwdSk7XG4tXG4gXHQvKiB0ZHBfcm9vdF9sZXZlbCBpcyBhcmNoaXRlY3R1cmUgZm9yY2VkIGxldmVsLCB1c2UgaXQgaWYgbm9uemVybyAqL1xuIFx0aWYgKHRkcF9yb290X2xldmVsKVxuIFx0XHRyZXR1cm4gdGRwX3Jvb3RfbGV2ZWw7XG4gXG4rXHQvKlxuK1x0ICogSWYgdGhlIFZNIGhhcyBtaXJyb3Igcm9vdHMsIHRoZW4gdGhlIHJvb3QgbGV2ZWwgaXMgcHJlZGVmaW5lZCBhcyB0aGVcbitcdCAqIG1pcnJvciByb290IChhbmQgYnkgZXh0ZW5zaW9uIHRoZSBub3JtYWwgcm9vdCkgbmVlZHMgdG8gbWF0Y2ggdGhlXG4rXHQgKiByb290IGxldmVsIHRoYXQgd2FzIGNvbmZpZ3VyZWQgZm9yIHRoZSBleHRlcm5hbCBwYWdlIHRhYmxlcyB0aGF0IGFyZVxuK1x0ICogYmVpbmcgbWlycm9yZWQgYnkgS1ZNLlxuK1x0ICovXG4rXHRpZiAoa3ZtX2hhc19taXJyb3JlZF90ZHAodmNwdS1cdTAwM2Vrdm0pIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFXQVJOX09OX09OQ0UoIXZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWwpKVxuK1x0XHRyZXR1cm4gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbDtcbitcbiBcdC8qIFVzZSA1LWxldmVsIFREUCBpZiBhbmQgb25seSBpZiBpdCdzIHVzZWZ1bC9uZWNlc3NhcnkuICovXG4tXHRpZiAobWF4X3RkcF9sZXZlbCA9PSA1IFx1MDAyNlx1MDAyNiBtYXhwYSBcdTAwM2M9IDQ4KVxuK1x0aWYgKG1heF90ZHBfbGV2ZWwgPT0gNSBcdTAwMjZcdTAwMjYgY3B1aWRfbWF4cGh5YWRkcih2Y3B1KSBcdTAwM2M9IDQ4KVxuIFx0XHRyZXR1cm4gNDtcbiBcbiBcdHJldHVybiBtYXhfdGRwX2xldmVsO1xuQEAgLTY4MzQsNyArNjgzNyw3IEBAIHN0YXRpYyBpbnQgX19rdm1fbW11X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11ICptbXUsIHN0cnVjdCBrXG4gXHQgKiBvdGhlciBleGNlcHRpb24gaXMgZm9yIHNoYWRvd2luZyBMMSdzIDMyLWJpdCBvciBQQUUgTlBUIG9uIDY0LWJpdFxuIFx0ICogS1ZNOyB0aGF0IGhvcnJvciBpcyBoYW5kbGVkIG9uLWRlbWFuZCBieSBtbXVfYWxsb2Nfc3BlY2lhbF9yb290cygpLlxuIFx0ICovXG4tXHRpZiAodGRwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbCh2Y3B1KSBcdTAwM2UgUFQzMkVfUk9PVF9MRVZFTClcbitcdGlmICh0ZHBfZW5hYmxlZCBcdTAwMjZcdTAwMjYga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpIFx1MDAzZSBQVDMyRV9ST09UX0xFVkVMKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX0RNQTMyKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuaW5kZXggYjI3MmMyMDU4NmE3NC4uYTBiYzlmODE4ZjQzOSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbkBAIC01Niw5ICs1Niw2IEBAXG4gYm9vbCBlbmFibGVfdGR4IF9fcm9fYWZ0ZXJfaW5pdDtcbiBtb2R1bGVfcGFyYW1fbmFtZWQodGR4LCBlbmFibGVfdGR4LCBib29sLCAwNDQ0KTtcbiBcbi0jZGVmaW5lIFREWF9TSEFSRURfQklUX1BXTF81IGdwYV90b19nZm4oQklUX1VMTCg1MSkpXG4tI2RlZmluZSBURFhfU0hBUkVEX0JJVF9QV0xfNCBncGFfdG9fZ2ZuKEJJVF9VTEwoNDcpKVxuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICp0ZHhfc3lzaW5mbztcbiBcbiB2b2lkIHRkaF92cF9yZF9mYWlsZWQoc3RydWN0IHZjcHVfdGR4ICp0ZHgsIGNoYXIgKnVjbGFzcywgdTMyIGZpZWxkLCB1NjQgZXJyKVxuQEAgLTE2MDksMTAgKzE2MDYsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV90ZHZtY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gdm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpXG4ge1xuLVx0dTY0IHNoYXJlZF9iaXQgPSAocGdkX2xldmVsID09IDUpID8gVERYX1NIQVJFRF9CSVRfUFdMXzUgOlxuLVx0XHRcdCAgVERYX1NIQVJFRF9CSVRfUFdMXzQ7XG4tXG4tXHRpZiAoS1ZNX0JVR19PTihzaGFyZWRfYml0ICE9IGt2bV9nZm5fZGlyZWN0X2JpdHModmNwdS1cdTAwM2Vrdm0pLCB2Y3B1LVx1MDAzZWt2bSkpXG4rXHRpZiAoS1ZNX0JVR19PTihwZ2RfbGV2ZWwgIT0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbCwgdmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHR0ZF92bWNzX3dyaXRlNjQodG9fdGR4KHZjcHUpLCBTSEFSRURfRVBUX1BPSU5URVIsIHJvb3RfaHBhKTtcbkBAIC0yNzYwLDYgKzI3NTQsMTQgQEAgREVGSU5FX0NMQVNTKHRkeF92bV9zdGF0ZV9ndWFyZCwgdGR4X3ZtX3N0YXRlX2d1YXJkX3QsXG4gXHQgICAgIGlmICghSVNfRVJSKF9UKSkgdGR4X3JlbGVhc2Vfdm1fc3RhdGVfbG9ja3MoX1QpLFxuIFx0ICAgICB0ZHhfYWNxdWlyZV92bV9zdGF0ZV9sb2Nrcyhrdm0pLCBzdHJ1Y3Qga3ZtICprdm0pO1xuIFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZHhfc2V0X21pcnJvcl9yb290X2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgaW50IGxldmVsKVxuK3tcbitcdEJVSUxEX0JVR19PTihsZXZlbCAhPSA0IFx1MDAyNlx1MDAyNiBsZXZlbCAhPSA1KTtcbitcbitcdGt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsID0gbGV2ZWw7XG4rXHRrdm0tXHUwMDNlYXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBncGFfdG9fZ2ZuKEJJVF9VTEwobGV2ZWwgPT0gNCA/IDQ3IDogNTEpKTtcbit9XG4rXG4gc3RhdGljIGludCB0ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxuIHtcbiBcdHN0cnVjdCBrdm1fdGR4X2luaXRfdm0gX191c2VyICp1c2VyX2RhdGEgPSB1NjRfdG9fdXNlcl9wdHIoY21kLVx1MDAzZWRhdGEpO1xuQEAgLTI4MjMsOSArMjgyNSw5IEBAIHN0YXRpYyBpbnQgdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZClcbiBcdGt2bV90ZHgtXHUwMDNleGZhbSA9IHRkX3BhcmFtcy1cdTAwM2V4ZmFtO1xuIFxuIFx0aWYgKHRkX3BhcmFtcy1cdTAwM2Vjb25maWdfZmxhZ3MgXHUwMDI2IFREWF9DT05GSUdfRkxBR1NfTUFYX0dQQVcpXG4tXHRcdGt2bS1cdTAwM2VhcmNoLmdmbl9kaXJlY3RfYml0cyA9IFREWF9TSEFSRURfQklUX1BXTF81O1xuK1x0XHR0ZHhfc2V0X21pcnJvcl9yb290X2xldmVsKGt2bSwgNSk7XG4gXHRlbHNlXG4tXHRcdGt2bS1cdTAwM2VhcmNoLmdmbl9kaXJlY3RfYml0cyA9IFREWF9TSEFSRURfQklUX1BXTF80O1xuK1x0XHR0ZHhfc2V0X21pcnJvcl9yb290X2xldmVsKGt2bSwgNCk7XG4gXG4gXHRrdm1fdGR4LVx1MDAzZXN0YXRlID0gVERfU1RBVEVfSU5JVElBTElaRUQ7XG4gb3V0OlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzQ6NDAuNTQxNzI2MzY5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM0NTI5Mzg4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgS2VybmVsIFBhdGNoOiBBTUQ2NCBcdTAwMjYgS1ZNL1REWCBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBldmFsdWF0ZSB0aGlzIGtlcm5lbCBwYXRjaCBvbiB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgbGV0J3MgbG9vayBhdCB0aGUgcGF0Y2ggY2hhbmdlcyB0aGVtc2VsdmVzLlxuXG4qICAgYGFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhgOiBBIHNpbXBsZSBhZGRpdGlvbiBvZiBgaW50IG1pcnJvcl9yb290X2xldmVsYCB0byB0aGUgYGt2bV9hcmNoYCBzdHJ1Y3QuIE9rYXksIHRoYXQncyBhIG5ldyBzdGF0ZSB2YXJpYWJsZS5cblxuKiAgIGBhcmNoL3g4Ni9rdm0vY3B1aWQuY2AgYW5kIGBjcHVpZC5oYDogTG9va3MgbGlrZSB0aGV5J3JlIHJlbW92aW5nIHRoZSBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyByZWxldmFudC4gSXQncyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCBwdXJwb3NlIG9mIHRoaXMgY2hhbmdlLlxuXG4qICAgYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgOiBUaGlzIGlzIHRoZSBjb3JlIG9mIGl0LCBJIHRoaW5rLlxuICAgICogICBJbiBga3ZtX21tdV9nZXRfdGRwX2xldmVsYCwgdGhleSdyZSBpbnRyb2R1Y2luZyBhIG5ldyBjb25kaXRpb25hbCB1c2luZyBga3ZtX2hhc19taXJyb3JlZF90ZHBgIGFuZCBgbWlycm9yX3Jvb3RfbGV2ZWxgLiBUaGlzIGlzIHJlcGxhY2luZyB0aGUgYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAgY2FsbCwgd2hpY2ggc3Ryb25nbHkgaW5kaWNhdGVzIGEgZGlmZmVyZW50IGFwcHJvYWNoIHRvIGRldGVybWluZSB0aGUgbWF4aW11bSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIChtYXhwYSkgZm9yIFREWCwgb3IgZm9yIHNvbWUgZ2VuZXJhbCBLVk0gTU1VIGNhc2UuXG4gICAgKiAgIEluIGBfX2t2bV9tbXVfY3JlYXRlYCwgaXQgbG9va3MgbGlrZSB0aGVyZSdzIGEgc2xpZ2h0IHR3ZWFrIHRvIGhvdyB0aGUgVERQIGxldmVsIGlzIGNoZWNrZWQuIFRoZXkncmUgbm93IHVzaW5nIGEgYGdldF9tYXhfdGRwX2xldmVsYCBjYWxsLlxuXG4qICAgYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgOiBIZXJlJ3MgdGhlIFREWCBzcGVjaWZpYyBzdHVmZi5cbiAgICAqICAgSW4gYHRkeF9sb2FkX21tdV9wZ2RgLCB0aGV5J3JlIGNoZWNraW5nIGFnYWluc3QgYG1pcnJvcl9yb290X2xldmVsYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZXkgc2VlbSB0byBiZSBhc3NlcnRpbmcgdGhhdCB0aGUgcm9vdCBsZXZlbCBzaG91bGQgYmUgY29uc2lzdGVudCwgdXNpbmcgYSBLVk1cXF9CVUdcXF9PTi5cbiAgICAqICAgYHRkeF90ZF9pbml0YDogVGhpcyBzZXRzIGBtaXJyb3Jfcm9vdF9sZXZlbGAgdG8gZWl0aGVyIDUgb3IgNCwgYW5kIGBnZm5fZGlyZWN0X2JpdHNgIGJhc2VkIG9uIHRoYXQgdmFsdWUuIEl0J3MgYSBjcml0aWNhbCBzZXR1cCBmdW5jdGlvbi5cblxuT2theSwgbm93IGZvciB0aGUgcmVhY2hhYmlsaXR5IGFuYWx5c2lzLiBUaGUgdGFyZ2V0IGlzIGFtZDY0LCB3aGljaCBpcyBleHBlY3RlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIHNwZWNpZmljIHRvIFREWCBvciBnZW5lcmFsIEtWTSBNTVUuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGUgbW9kaWZpZWQgY29kZSBpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AgaXMgYWN0dWFsbHkgcmVhY2hhYmxlLiBJcyBpdCBvbmx5IGZvciBURFggVk1zLCBvciBpcyBpdCBhbHNvIHJlbGV2YW50IHRvIG5vcm1hbCBLVk0gVk1zIHRoYXQgYXJlIGNhbGxpbmcgYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAgb3IgYF9fa3ZtX21tdV9jcmVhdGVgPyBUaGF0IHdvdWxkIGJlIHNpZ25pZmljYW50LlxuXG5UaGVyZWZvcmUsIG15IG5leHQgc3RlcCBpcyB0byB1c2UgYSB0b29sIGxpa2UgYGdyZXBwZXJgIHRvIHNlZSB3aGVyZSBga3ZtX21tdV9nZXRfdGRwX2xldmVsYCwgYF9fa3ZtX21tdV9jcmVhdGVgIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgYGt2bV9oYXNfbWlycm9yZWRfdGRwYCwgYXJlIGFjdHVhbGx5IHVzZWQgd2l0aGluIHRoZSBLVk0gY29kZS4gVGhhdCB3aWxsIHRlbGwgbWUgdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggY29kZSBwYXRocyBhcmUgYWZmZWN0ZWQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgaWYgdGhpcyBwYXRjaCBpcyBtb3JlIHRoYW4ganVzdCBURFgtc3BlY2lmaWMuIEkgc3VzcGVjdCBpdCdzIG1vcmUgZ2VuZXJhbCBhbmQgbWF5IGJlIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIEtWTSBNTVUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIzOSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM0OjUzLjk5NDY2ODM5M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTExMTcyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fbW11X2dldF90ZHBfbGV2ZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTkzOT12b2lkIF9fa3ZtX21tdV9yZWZyZXNoX3Bhc3N0aHJvdWdoX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTUzLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTk1NDpzdGF0aWMgaW5saW5lIGludCBrdm1fbW11X2dldF90ZHBfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk1NS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5ODM9a3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5OTMtXFx0cm9sZS5hZF9kaXNhYmxlZCA9ICFrdm1fYWRfZW5hYmxlZDtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5OTQ6XFx0cm9sZS5sZXZlbCA9IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5OTUtXFx0cm9sZS5kaXJlY3QgPSB0cnVlO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02MDg4PXZvaWQga3ZtX2luaXRfc2hhZG93X25wdF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyNCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjEwNi1cXHRyb290X3JvbGUgPSBjcHVfcm9sZS5iYXNlO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjEwNzpcXHRyb290X3JvbGUubGV2ZWwgPSBrdm1fbW11X2dldF90ZHBfbGV2ZWwodmNwdSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTA4LVxcdGlmIChyb290X3JvbGUubGV2ZWwgPT0gUFQ2NF9ST09UXzVMRVZFTCBcXHUwMDI2XFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNDo1NC4wNDk3ODUzMTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjY0Njc0MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYF9fa3ZtX21tdV9jcmVhdGVgIGFuZCBpdHMgQ2FsbGVycyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYF9fa3ZtX21tdV9jcmVhdGVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIEtWTSBtZW1vcnkgbWFuYWdlbWVudCBjb250ZXh0LiBXaGF0J3MgaXQgZG9pbmc/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGlzIGl0IG1hbmlwdWxhdGluZz8gV2hhdCBhcmUgdGhlIGtleSBpbml0aWFsaXphdGlvbiBzdGVwcyBpdCB1bmRlcnRha2VzPyBBbmQgZXF1YWxseSBpbXBvcnRhbnQsIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBncmFwaC4gV2hvJ3MgY2FsbGluZyB0aGlzIGZ1bmN0aW9uPyBVbmRlciB3aGF0IGNpcmN1bXN0YW5jZXM/IFdoeSBhcmUgdGhleSBjYWxsaW5nIGl0PyBXaGF0IGFzc3VtcHRpb25zIGFyZSBiZWluZyBtYWRlIGJ5IHRoZSBjYWxsZXJzIGFib3V0IHRoZSBiZWhhdmlvciBvZiBgX19rdm1fbW11X2NyZWF0ZWA/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyB0byBjb25zaWRlciwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBLVk0/IEkgbmVlZCB0byBhbmFseXplIHRob3NlIGNhbGxlcnMgdG8gZW5zdXJlIHRoYXQgdGhlIE1NVSBjcmVhdGlvbiBpcyBoYW5kbGVkIHByb3Blcmx5IHdpdGhpbiB0aGUgbGFyZ2VyIEtWTSBhcmNoaXRlY3R1cmUuIFRoaXMgaXMgY3JpdGljYWwgZm9yIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGNhbGxlcnMgc2V0dXAgdGhlIGNvbnRleHQsIGVuc3VyZSByZXNvdXJjZXMgYXJlIGF2YWlsYWJsZSwgYW5kIGNvcnJlY3RseSB0ZWFyIGRvd24gdGhlIHJlc291cmNlcyBjcmVhdGVkIGlmIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM0OjU3LjcxNDQ2MjgwOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM1MTE4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2t2bV9tbXVfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY4MDQ9c3RhdGljIHZvaWQgZnJlZV9tbXVfcGFnZXMoc3RydWN0IGt2bV9tbXUgKm1tdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjgxMi1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY4MTM6c3RhdGljIGludCBfX2t2bV9tbXVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXUgKm1tdSwgc3RydWN0IGt2bV9wYWdld2FsayAqdylcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY4MTQte1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02ODY4PWludCBrdm1fbW11X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY4ODQtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2ODg1OlxcdHJldCA9IF9fa3ZtX21tdV9jcmVhdGUodmNwdSwgXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guZ3Vlc3RfbW11LCBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5uZ3BhX3dhbGspO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjg4Ni1cXHRpZiAocmV0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODg4LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Njg4OTpcXHRyZXQgPSBfX2t2bV9tbXVfY3JlYXRlKHZjcHUsIFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnJvb3RfbW11LCBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5ndmFfd2Fsayk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODkwLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM0OjU3Ljc2MjgyMDkwNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MDg5ODI0NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgS1ZNIE1NVSBNZW50YWwgQ2hlY2tsaXN0KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBLVk0ncyBNTVUgc2V0dXAsIGFuZCBoZXJlJ3Mgd2hhdCdzIHBpbmdpbmcgbXkgcmFkYXIuIEkgc2VlIHRoYXQgYGt2bV9tbXVfY3JlYXRlYCBpcyBjYWxsZWQgd2hlbiBhIG5ldyB2Q1BVIHBvcHMgdXAgdmlhIHRoZSBgS1ZNX0NSRUFURV9WQ1BVYCBpb2N0bC4gUmlnaHQsIGNsYXNzaWMgaW5pdGlhbGl6YXRpb24uIFRoZW4sIGBrdm1fY2FsY190ZHBfbW11X3Jvb3RfcGFnZV9yb2xlYCBhbmQgYGt2bV9pbml0X3NoYWRvd19ucHRfbW11YCBhcmUgaW52b2x2ZWQgaW4gTU1VIGluaXRpYWxpemF0aW9uIGFuZCB1cGRhdGVzLCBhcyBleHBlY3RlZC4gSSdtIGtlZXBpbmcgYSBtZW50YWwgbm90ZSBvZiB0aGlzIGVudGlyZSBwcm9jZXNzLlxuXG5JIG5lZWQgdG8ga2VlcCBteSBleWUgb24gdGhhdCBgV0FSTl9PTl9PTkNFKCF2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsKWAgaW4gYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAgLSB0aGF0IGNvdWxkIGJlY29tZSBhIHBvaW50IG9mIGNvbnRlbnRpb24gbGF0ZXIuIEl0J3MgaW5kaWNhdGluZyBzb21lIG1pcnJvcmluZyBpc3N1ZSBvciBzdGF0ZSB0aGF0IG5lZWRzIHRvIGJlIHRydWUuIEFuZCBJJ20gYWxzbyBzZWVpbmcgYSBgS1ZNX0JVR19PTmAgaW4gYHRkeF9sb2FkX21tdV9wZ2RgLCB3aGljaCwgeW91IGtub3csIGlzIG5ldmVyIGdvb2QuIEdvdHRhIGtlZXAgYW4gZXllIG9uIHRoYXQuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhpcyBga3ZtX2hhc19taXJyb3JlZF90ZHBgLiBJdCdzIHVzZWQgYSBsb3QuIFdoZXJlIGlzIGl0IGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIGl0cyBpbXBsZW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBtaXJyb3JpbmcgbG9naWMgdGhvcm91Z2hseS4gVGhpcyBpcyB0aGUgbmV4dCB0aGluZyB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk3NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTowMC4zNzE4MDkwMzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEwMTM4NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2hhc19taXJyb3JlZF90ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUuaD0zODA9c3RhdGljIGlubGluZSBncGFfdCBrdm1fdHJhbnNsYXRlX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzkxLVxcbmFyY2gveDg2L2t2bS9tbXUuaDozOTI6c3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbWlycm9yZWRfdGRwKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzkzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjA2PXN0YXRpYyBpbnQgbW11X3RvcHVwX21lbW9yeV9jYWNoZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIG1heWJlX2luZGlyZWN0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTQtXFx0XFx0cmV0dXJuIHI7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2MTU6XFx0aWYgKGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxNi1cXHRcXHRyID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gubW11X2V4dGVybmFsX3NwdF9jYWNoZSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9Mzk4Nj1zdGF0aWMgaW50IG1tdV9hbGxvY19kaXJlY3Rfcm9vdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zOTk0LVxcdGlmICh0ZHBfbW11X2VuYWJsZWQpIHtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM5OTU6XFx0XFx0aWYgKGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtXFx1MDAzZWt2bSkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5OTYtXFx0XFx0ICAgICFWQUxJRF9QQUdFKG1tdS1cXHUwMDNlbWlycm9yX3Jvb3RfaHBhKSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTk1ND1zdGF0aWMgaW5saW5lIGludCBrdm1fbW11X2dldF90ZHBfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTY1LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTk2NjpcXHRpZiAoa3ZtX2hhc19taXJyb3JlZF90ZHAodmNwdS1cXHUwMDNla3ZtKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk2Ny1cXHQgICAgIVdBUk5fT05fT05DRSghdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsKSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oPTMwPXN0YXRpYyBpbmxpbmUgZW51bSBrdm1fdGRwX21tdV9yb290X3R5cGVzIGt2bV9nZm5fcmFuZ2VfZmlsdGVyX3RvX3Jvb3RfdHlwZXMoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtMzQtXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg6MzU6XFx0aWYgKCFrdm1faGFzX21pcnJvcmVkX3RkcChrdm0pKVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTM2LVxcdFxcdHJldHVybiBLVk1fRElSRUNUX1JPT1RTO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTowMC40MjI4Mjc2MzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTUzMTczMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBga3ZtX2hhc19taXJyb3JlZF90ZHBgIGluIGBtbXUuaGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGt2bV9oYXNfbWlycm9yZWRfdGRwYCBmdW5jdGlvbiB3b3Jrcy4gTGV0J3Mgc3RhcnQgYnkgbmF2aWdhdGluZyB0byBgYXJjaC94ODYva3ZtL21tdS5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM5Mi4gSSBuZWVkIHRvIHNlZSB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24uIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggS1ZNJ3MgbWVtb3J5IG1hbmFnZW1lbnQsIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gVHJhbnNwYXJlbnQgUGFnZSBTaGFyaW5nIChUUFMpIG9yIHNvbWUgZm9ybSBvZiBtZW1vcnkgZGVkdXBsaWNhdGlvbiBvcHRpbWl6YXRpb24gaW4gdGhlIFRyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXIgKFRMQikgbWFuYWdlbWVudC4gSSBzdXNwZWN0IHdlJ2xsIHNlZSBzb21lIGNoZWNrcyByZWxhdGVkIHRvIGhhcmR3YXJlIGZlYXR1cmVzLCBtYXliZSBDUFVJRCBmbGFncyBvciBNU1JzLCBvciBwZXJoYXBzIGV2ZW4gc29tZSBnbG9iYWwgS1ZNIHN0YXRlLiBLbm93aW5nIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIGlzIGtleSBmb3IgdW5kZXJzdGFuZGluZyBjZXJ0YWluIGd1ZXN0IG1lbW9yeSBiZWhhdmlvcnMuIEknbSBleHBlY3Rpbmcgc29tZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB0aGUgaG9zdCdzIGhhcmR3YXJlIGNhcGFiaWxpdGllcy4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI3OCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM1OjAyLjU3NjAwNzQ1OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vbW11LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzg1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzg1OlxcdHtcXG4gMzg2OlxcdFxcdGlmICghbW11X2lzX25lc3RlZCh2Y3B1KSB8fCB3ID09IFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLm5ncGFfd2FsaylcXG4gMzg3OlxcdFxcdFxcdHJldHVybiBncGE7XFxuIDM4ODpcXHRcXHRyZXR1cm4ga3ZtX25lc3RlZF9jYWxsKHRyYW5zbGF0ZV9uZXN0ZWRfZ3BhKSh2Y3B1LCBncGEsIGFjY2VzcyxcXG4gMzg5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXhjZXB0aW9uLCBwdGVfYWNjZXNzKTtcXG4gMzkwOlxcdH1cXG4gMzkxOlxcdFxcbiAzOTI6XFx0c3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbWlycm9yZWRfdGRwKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcXG4gMzkzOlxcdHtcXG4gMzk0OlxcdFxcdHJldHVybiBrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcXG4gMzk1OlxcdH1cXG4gMzk2OlxcdFxcbiAzOTc6XFx0c3RhdGljIGlubGluZSBnZm5fdCBrdm1fZ2ZuX2RpcmVjdF9iaXRzKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcXG4gMzk4OlxcdHtcXG4gMzk5OlxcdFxcdHJldHVybiBrdm0tXFx1MDAzZWFyY2guZ2ZuX2RpcmVjdF9iaXRzO1xcbiA0MDA6XFx0fVxcbiA0MDE6XFx0XFxuIDQwMjpcXHRzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2lzX2FkZHJfZGlyZWN0KHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhKVxcbiA0MDM6XFx0e1xcbiA0MDQ6XFx0XFx0Z3BhX3QgZ3BhX2RpcmVjdF9iaXRzID0gZ2ZuX3RvX2dwYShrdm1fZ2ZuX2RpcmVjdF9iaXRzKGt2bSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTowMi41NzYwODYwMTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk5MTk3NzE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLY29uZmlnIENvbmZpZ3VyYXRpb24gRXhhbWluYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBLVk0gYW5kIFREWCBzdXBwb3J0IG9uIHg4NiBhcmNoaXRlY3R1cmVzLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUsIHdoaWNoIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZm9yIEtWTS1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBBIHNpbXBsZSBncmVwIGZvciBcIktWTVwiIHdpdGhpbiB0aGF0IGZpbGUgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBvdmVydmlldyBvZiB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvcmUgS1ZNIGVuYWJsZW1lbnQsIGFsb25nIHdpdGggYW55IFREWC1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyBpZiB0aGV5IGV4aXN0LiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBwYXJzZSB0aGUgcmVsYXRpb25zaGlwcyBhbmQgdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGludGVybGlua2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTQwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTowNC41NjgwNjU5MjFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NzQxMjgzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mzpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NC1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODM6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDg6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDktXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE3OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE4LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMwOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzM6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzQtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTowNC44NTU0ODU5N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTY1NjIyNzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBLVk1fSU5URUxfVERYIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIGBLVk1fSU5URUxfVERYYCB3aXRoaW4gdGhlIGBhcmNoL3g4Ni9rdm1gIGRpcmVjdG9yeS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBkZXBlbmRlbmNpZXMgaGVyZS4gVW5kZXJzdGFuZGluZyB0aGVzZSByZWxhdGlvbnNoaXBzIGlzIGNydWNpYWwuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IHdoYXQgb3RoZXIgZmVhdHVyZXMgb3Igb3B0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIFREWCBzdXBwb3J0LiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIEludGVsIENQVSBtb2RlbHMsIG1pY3JvYXJjaGl0ZWN0dXJlcywgb3IgcGFydGljdWxhciBoYXJkd2FyZSBleHRlbnNpb25zIHRoYXQgYXJlIHByZXJlcXVpc2l0ZXM/IEFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBkaXNhYmxlIFREWCBpZiBzZWxlY3RlZD8gT3IgcGVyaGFwcyBvdGhlciBLVk0tcmVsYXRlZCBmZWF0dXJlcyB0aGF0IFREWCBidWlsZHMgb24/IFRoZSBLY29uZmlnIGZpbGUgaXMgdGhlIGRlZmluaXRpdmUgc291cmNlIGZvciB0aGlzLCBzbyBJJ2xsIHNjYW4gaXQgY2FyZWZ1bGx5LCBub3RpbmcgYW55IGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIG9yIGBkZWZhdWx0YCBjbGF1c2VzIHRoYXQgcmVsYXRlIHRvIGBLVk1fSU5URUxfVERYYC4gQW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgaW50ZXJhY3Rpb25zIHdpdGggZXhpc3RpbmcgS1ZNIGNvZGUgSSBzaG91bGQgYmUgYXdhcmUgb2YuIEknbGwgbWFrZSBzdXJlIHRvIG5vdGUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzc4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzU6MDcuMDIxMTExMzI5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHRcXHQgIGd1ZXN0cyB2aWEgYSBkZXZpY2Ugbm9kZSwgZS5nLiAvZGV2L3NneF92ZXBjLlxcbiAxMzE6XFx0XFxuIDEzMjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDEzMzpcXHRcXG4gMTM0OlxcdGNvbmZpZyBLVk1fSU5URUxfVERYXFxuIDEzNTpcXHRcXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbiAxMzY6XFx0XFx0ZGVmYXVsdCB5XFxuIDEzNzpcXHRcXHRkZXBlbmRzIG9uIElOVEVMX1REWF9IT1NUXFxuIDEzODpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG4gMTM5OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG4gMTQwOlxcdFxcdGhlbHBcXG4gMTQxOlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgbGF1bmNoaW5nIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpXFxuIDE0MjpcXHRcXHQgIGNvbmZpZGVudGlhbCBWTXMgb24gSW50ZWwgcHJvY2Vzc29ycy5cXG4gMTQzOlxcdFxcbiAxNDQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxNDU6XFx0XFxuIDE0NjpcXHRjb25maWcgS1ZNX0FNRFxcbiAxNDc6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4gMTQ4OlxcdFxcdGRlcGVuZHMgb24gS1ZNIFxcdTAwMjZcXHUwMDI2IChDUFVfU1VQX0FNRCB8fCBDUFVfU1VQX0hZR09OKVxcbiAxNDk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTowNy4wMjExOTYyMDlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA4NDYyNjIxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBLVk0geDg2IEJ1aWxkIFByb2Nlc3MqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIEtWTSB4ODYgY29tcG9uZW50cyBhcmUgYnVpbHQuIEknbSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gYGNwdWlkLm9gLCBgbW11Lm9gLCBhbmQgYHRkeC5vYCDigJMgdGhvc2UgYXJlIGNyaXRpY2FsIHBpZWNlcyBvZiB0aGUgcHV6emxlIGZvciB2aXJ0dWFsaXphdGlvbiBvbiB4ODYsIGVzcGVjaWFsbHkgd2l0aCBURFguIEkga25vdyB0aGUgc291cmNlIGNvZGUgaXMgaW4gYGFyY2gveDg2L2t2bS9gLCBidXQgSSBzaG91bGQgcmVhbGx5IGNvbnN1bHQgdGhlIGBNYWtlZmlsZWAgaW4gKnRoYXQqIGRpcmVjdG9yeS4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgYnVpbGQgbWFnaWMgaGFwcGVucy4gVGhlIE1ha2VmaWxlIHdpbGwgcmV2ZWFsIHRoZSBjb21waWxlciBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgb3ZlcmFsbCBjb21waWxhdGlvbiBmbG93IHRoYXQgcHJvZHVjZXMgdGhlc2Ugb2JqZWN0IGZpbGVzLiBVbmRlcnN0YW5kaW5nIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzIGlzIGVzc2VudGlhbCB0byBtb2RpZnlpbmcsIGRlYnVnZ2luZywgb3IgZXh0ZW5kaW5nIHRoZXNlIG1vZHVsZXMsIGFuZCB0byBjb25maXJtIHRoYXQgaXQgYnVpbGRzIGFzIGV4cGVjdGVkLiBLbm93aW5nIHRoZSBidWlsZCBwcm9jZXNzIHdpbGwgYWxzbyBnaXZlIG1lIGltcG9ydGFudCBjbHVlcyBhYm91dCBob3cgdGhlc2UgY29tcG9uZW50cyBpbnRlcmFjdCBhbmQgd2hhdCBleHRlcm5hbCBkZXBlbmRlbmNpZXMgdGhleSByZWx5IHVwb24uIExldCdzIHNlZSB3aGF0IHRoYXQgTWFrZWZpbGUgaGFzIHRvIHNheS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk3MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzU6MDkuMTA1ODI0OTQ1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTI1NjQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHgub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL01ha2VmaWxlPTIxPWt2bS1pbnRlbC0kKENPTkZJR19LVk1fSFlQRVJWKVxcdCs9IHZteC9oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MjI6a3ZtLWludGVsLSQoQ09ORklHX0tWTV9JTlRFTF9URFgpXFx0Kz0gdm14L3RkeC5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTIzLVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODYzPXN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NzItI2RlZmluZSB2dF9vcChuYW1lKSB2dF8jI25hbWVcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4NzM6I2RlZmluZSB2dF9vcF90ZHhfb25seShuYW1lKSB2dF8jI25hbWVcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NzQtI2Vsc2UgLyogQ09ORklHX0tWTV9JTlRFTF9URFggKi9cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NzUtI2RlZmluZSB2dF9vcChuYW1lKSB2bXhfIyNuYW1lXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODc2OiNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgTlVMTFxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg3Ny0jZW5kaWYgLyogQ09ORklHX0tWTV9JTlRFTF9URFggKi9cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg4OD1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTA0LVxcdC52bV9kZXN0cm95ID0gdnRfb3Aodm1fZGVzdHJveSksXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6OTA1OlxcdC52bV9wcmVfZGVzdHJveSA9IHZ0X29wX3RkeF9vbmx5KHZtX3ByZV9kZXN0cm95KSxcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy05MDYtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy05NDktXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6OTUwOlxcdC52Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uID0gdnRfb3BfdGR4X29ubHkodmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiksXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTUxLVxcdC52Y3B1X3J1biA9IHZ0X29wKHZjcHVfcnVuKSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwMzQtXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTAzNTpcXHQubWVtX2VuY19pb2N0bCA9IHZ0X29wX3RkeF9vbmx5KG1lbV9lbmNfaW9jdGwpLFxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwMzY6XFx0LnZjcHVfbWVtX2VuY19pb2N0bCA9IHZ0X29wX3RkeF9vbmx5KHZjcHVfbWVtX2VuY19pb2N0bCksXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTAzNzpcXHQudmNwdV9tZW1fZW5jX3VubG9ja2VkX2lvY3RsID0gdnRfb3BfdGR4X29ubHkodmNwdV9tZW1fZW5jX3VubG9ja2VkX2lvY3RsKSxcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDM4LVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwMzk6XFx0LmdtZW1fbWF4X21hcHBpbmdfbGV2ZWwgPSB2dF9vcF90ZHhfb25seShnbWVtX21heF9tYXBwaW5nX2xldmVsKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNDAtfTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MjE1PXN0YXRpYyBERUZJTkVfTVVURVgodGR4X2xvY2spO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjE2LVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MjE3OnN0YXRpYyBib29sIHRkeF9vcGVyYW5kX2J1c3kodTY0IGVycilcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTIxOC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTI3ND1zdGF0aWMgaW5saW5lIHZvaWQgdGR4X2Rpc2Fzc29jaWF0ZV92cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMwNy1cXHRfX2VyciA9IHRkaF9mdW5jKGFyZ3MpO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjMwODpcXHRpZiAodW5saWtlbHkodGR4X29wZXJhbmRfYnVzeShfX2VycikpKSB7XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzA5LVxcdFxcdFdSSVRFX09OQ0UoX19rdm1fdGR4LVxcdTAwM2V3YWl0X2Zvcl9zZXB0X3phcCwgdHJ1ZSk7XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz05ODU9c3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy05OTktXFx0ICovXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxMDAwOlxcdGlmICh1bmxpa2VseSh0ZHhfb3BlcmFuZF9idXN5KHZwX2VudGVyX3JldCkpKVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTAwMS1cXHRcXHRyZXR1cm4gRVhJVF9GQVNUUEFUSF9FWElUX0hBTkRMRUQ7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTE2MTU9c3RhdGljIGludCB0ZHhfbWVtX3BhZ2VfYWRkKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNjI5LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2ZW50cnksIFxcdTAwMjZsZXZlbF9zdGF0ZSk7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNjMwOlxcdGlmICh1bmxpa2VseSh0ZHhfb3BlcmFuZF9idXN5KGVycikpKVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTYzMS1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0xNjM5PXN0YXRpYyBpbnQgdGR4X21lbV9wYWdlX2F1ZyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTY0Ny1cXHRlcnIgPSB0ZGhfbWVtX3BhZ2VfYXVnKFxcdTAwMjZrdm1fdGR4LVxcdTAwM2V0ZCwgZ3BhLCBsZXZlbCwgcGZuLCBcXHUwMDI2ZW50cnksIFxcdTAwMjZsZXZlbF9zdGF0ZSk7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNjQ4OlxcdGlmICh1bmxpa2VseSh0ZHhfb3BlcmFuZF9idXN5KGVycikpKVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTY0OS1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0xNjcwPXN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX25vbmxlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTY4Mi1cXHRcXHRcXHQgICAgICAgXFx1MDAyNmVudHJ5LCBcXHUwMDI2bGV2ZWxfc3RhdGUpO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MTY4MzpcXHRpZiAodW5saWtlbHkodGR4X29wZXJhbmRfYnVzeShlcnIpKSlcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE2ODQtXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9Mjg3Nj1zdGF0aWMgaW50IHRkeF90ZF9maW5hbGl6ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yODgzLVxcdGNtZC1cXHUwMDNlaHdfZXJyb3IgPSB0ZGhfbXJfZmluYWxpemUoXFx1MDAyNmt2bV90ZHgtXFx1MDAzZXRkKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjI4ODQ6XFx0aWYgKHRkeF9vcGVyYW5kX2J1c3koY21kLVxcdTAwM2Vod19lcnJvcikpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yODg1LVxcdFxcdHJldHVybiAtRUJVU1k7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM1OjA5LjE2MTA4NjMxMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzA0NDUwNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFREWCBDb25maWd1cmF0aW9uIGluIEtWTSBmb3IgeDg2KipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzIFREWCBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgd2hlbiBJJ20gZGVhbGluZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHg4NiB2aXJ0dWFsaXphdGlvbiwgZXNwZWNpYWxseSBLVk0uIE15IGdvYWwgaXMgdG8gcGlucG9pbnQgZXhhY3RseSB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbiwgdGhlIG9uZSBsYWJlbGVkIGBJTlRFTF9URFhfSE9TVGAsIGlzIHRoZSBrZXkgZW5hYmxlciBmb3IgZW5hYmxpbmcgVERYIHN1cHBvcnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgYXNzb2NpYXRlZCB3aXRoIGl0LiBUaGlzIGlzIHRoZSBmaXJzdCBzdG9wLCBsZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNjYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNToxMS40NjU1Mzk5MTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MzUxNDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTlRFTF9URFhfSE9TVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTE4NDQ9Y29uZmlnIFg4Nl9VU0VSX1NIQURPV19TVEFDS1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xODYzLVxcbmFyY2gveDg2L0tjb25maWc6MTg2NDpjb25maWcgSU5URUxfVERYX0hPU1RcXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNToxMS41MzM4OTc5NzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIyNzUwMDc3NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogS1ZNIE1NVSBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIHdpdGhpbiB0aGUgS1ZNIE1NVSBjb2RlLiBJJ20gc2VlaW5nIGNoYW5nZXMgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0d28ga2V5IGFyZWFzOiBga3ZtX21tdV9nZXRfdGRwX2xldmVsYCBhbmQgYF9fa3ZtX21tdV9jcmVhdGVgLlxuXG5Mb29raW5nIGF0IGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgLCBpdCdzIGNsZWFyIHRoaXMgZnVuY3Rpb24gcGxheXMgYSByb2xlIGluIGhvdyB3ZSBkZXRlcm1pbmUgdGhlIFREUCBNTVUgcm9vdCBsZXZlbCwgZXNwZWNpYWxseSBkdXJpbmcgY2FsY3VsYXRpb25zIGxpa2UgYGt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGVgIGFuZCBga3ZtX2luaXRfc2hhZG93X25wdF9tbXVgLiBUaGVyZSdzIGEgYFdBUk5fT05fT05DRWAgaGVyZSwgbGlua2VkIHRvIGBtaXJyb3Jfcm9vdF9sZXZlbGAsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZyBpbXBvcnRhbnQgcmVsYXRlZCB0byB0aGUgbWlycm9yZWQgcm9vdCBmdW5jdGlvbmFsaXR5LiBUaGUgY2hhbmdlcyB0byB0aGUgbG9naWMgZm9yIGdlbmVyYWwgVk1zIGFyZSBhbHNvIHNpZ25pZmljYW50LiBUaGUgb3JpZ2luYWwgbG9naWMgbWFkZSBkZWNpc2lvbnMgYmFzZWQgb24gdGhlIFZNIHR5cGUgKFREWCBvciBnZW5lcmFsKSwgdXNpbmcgYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAgYW5kIGBjcHVpZF9tYXhwaHlhZGRyYCByZXNwZWN0aXZlbHkuIFRoZSBuZXcgY29kZSBub3cgaW5jb3Jwb3JhdGVzIGBrdm1faGFzX21pcnJvcmVkX3RkcGAgYW5kIHVzZXMgYHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWxgIGRpcmVjdGx5IGlmIHRoZSBtaXJyb3JpbmcgaXMgZW5hYmxlZCwgc3VnZ2VzdGluZyBhIHJlZmFjdG9yaW5nIG9yIG9wdGltaXphdGlvbiByZWxhdGVkIHRvIHRoZSBtaXJyb3JlZCBURFAgZmVhdHVyZS4gVGhlIGNoZWNrIGZvciA1LWxldmVsIFREUCBiYXNlZCBvbiBgY3B1aWRfbWF4cGh5YWRkcih2Y3B1KSBcdTAwM2M9IDQ4YCByZW1haW5zLCBidXQgaXQncyBub3cgc2Vjb25kYXJ5LlxuXG5UaGUgc2Vjb25kIGFyZWEgb2YgaW50ZXJlc3QgaXMgaW4gYF9fa3ZtX21tdV9jcmVhdGVgLiBIZXJlLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQ6IGl0IG5vdyBjYWxscyBga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpYCBpbnN0ZWFkIG9mIGBrdm1fbW11X2dldF90ZHBfbGV2ZWwoKWAuIFRoaXMgaXMgY2FsbGVkIHdpdGggKmV2ZXJ5KiBgS1ZNX0NSRUFURV9WQ1BVYCBpb2N0bCwgc28gaXQncyBhIGNyaXRpY2FsIHBhdGguIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpYC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBkZWZpbmVkIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGlzIFREUCBsZXZlbCBkZXRlcm1pbmF0aW9uLiBJdCdzIGxpa2VseSB0aGlzIGNoYW5nZSBpcyBhaW1lZCBhdCBkZWNvdXBsaW5nIG9yIGdlbmVyYWxpemluZyB0aGUgVERQIGxldmVsIGNhbGN1bGF0aW9uLiBUaGlzIHdpbGwgd2FycmFudCBmdXJ0aGVyIGluc3BlY3Rpb24gb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKClgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYwNiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNToyMy44MDg5MDk5MDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNzcwNTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9tbXVfZ2V0X21heF90ZHBfbGV2ZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9jcHVpZC5jPTE0MTg9c3RhdGljIGlubGluZSBpbnQgX19kb19jcHVpZF9mdW5jKHN0cnVjdCBrdm1fY3B1aWRfYXJyYXkgKmFycmF5LCB1MzIgZnVuY3Rpb24pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xODExLVxcdFxcdFxcdGdfcGh5c19hcyA9IHBoeXNfYXM7XFxuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTgxMjpcXHRcXHRcXHRpZiAoa3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpIFxcdTAwM2MgNSlcXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xODEzLVxcdFxcdFxcdFxcdGdfcGh5c19hcyA9IG1pbihnX3BoeXNfYXMsIDQ4VSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11Lmg9OTk9c3RhdGljIGlubGluZSBib29sIG1tdV9oYXNfbWJlYyhzdHJ1Y3Qga3ZtX21tdSAqbW11KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS5oLTEwMy1cXG5hcmNoL3g4Ni9rdm0vbW11Lmg6MTA0OnU4IGt2bV9tbXVfZ2V0X21heF90ZHBfbGV2ZWwodm9pZCk7XFxuYXJjaC94ODYva3ZtL21tdS5oLTEwNS1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTk1ND1zdGF0aWMgaW5saW5lIGludCBrdm1fbW11X2dldF90ZHBfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTc2LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTk3Nzp1OCBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKHZvaWQpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTc4LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjgxMz1zdGF0aWMgaW50IF9fa3ZtX21tdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21tdSAqbW11LCBzdHJ1Y3Qga3ZtX3BhZ2V3YWxrICp3KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODM5LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Njg0MDpcXHRpZiAodGRwX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpIFxcdTAwM2UgUFQzMkVfUk9PVF9MRVZFTClcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY4NDEtXFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM1OjIzLjg2MTY4NjQ0MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjkzODA0MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldCwgdGhpbmtpbmcgbGlrZSBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gS1ZNIE1NVSBDcmVhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gYF9fa3ZtX21tdV9jcmVhdGVgIHdpdGhpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgTU1VIGNyZWF0aW9uIHByb2Nlc3MsIHNvIEknbSBob25pbmcgaW4gb24gbGluZXMgNjgxMyB0aHJvdWdoIDY4NjUuIFRoaXMgc2VjdGlvbiBwcm9iYWJseSBsYXlzIG91dCB0aGUgY29yZSBsb2dpYyBmb3IgaW5pdGlhbGl6aW5nIHRoZSBLVk0gTU1VIGRhdGEgc3RydWN0dXJlcyBzcGVjaWZpYyB0byB4ODYuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlOlxuXG4qICAgKipBbGxvY2F0aW9uOioqIFRoZSBhbGxvY2F0aW9uIG9mIHRoZSByZWxldmFudCBNTVUgc3RydWN0dXJlcywgbGlrZWx5IGludm9sdmluZyBga21hbGxvY2Agb3Igc2ltaWxhciBtZW1vcnkgbWFuYWdlbWVudC4gV2UnbGwgYmUgbG9va2luZyBmb3IgYW55IHNwZWNpZmljIGFsaWdubWVudCByZXF1aXJlbWVudHMgdG9vLCBtYXliZSBzb21lIGNhY2hlLWxpbmUgcGFkZGluZy4gSSBzaG91bGQgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgc3RydWN0dXJlcyBhbGxvY2F0ZWQgaW4gdGhpcyBzZWN0aW9uLCBhbmQgd2hldGhlciB0aGV5IGFyZSBpbml0aWFsaXplZC5cbiogICAqKkluaXRpYWxpemF0aW9uOioqIFRoZXJlIHdpbGwgaGF2ZSB0byBiZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcHJpbWFyeSBNTVUgc3RhdGUsIGFuZCB0aGF0IGNvdWxkIGludm9sdmUgc2V0dGluZyBpbml0aWFsIHZhbHVlcyBmb3IgdmFyaW91cyBjb250cm9sIHJlZ2lzdGVycyBvciBpbnRlcm5hbCBmbGFncy4gVGhpcyBwYXJ0IGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzdGFydGluZyBwb2ludCBvZiB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHRyYW5zbGF0aW9uLlxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSXQncyB1bmxpa2VseSB0aGlzIGlzIGNvbXBsZXRlbHkgZXJyb3ItZnJlZS4gSSdsbCBuZWVkIHRvIHdhdGNoIGZvciBwb3RlbnRpYWwgZXJyb3IgcmV0dXJucyBhbmQgZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgZXJyb3IgcGF0aHMuIEknbSBleHBlY3Rpbmcgc29tZSBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcuIEknbGwgYWxzbyBjaGVjayBpZiB0aGVyZSBpcyBzcGVjaWZpYyBjb2RlIHdoaWNoIGlzIGV4ZWN1dGVkIGlmIGFuIGFsbG9jYXRpb24gZmFpbHMuXG4qICAgKipTdHJ1Y3R1cmUgUG9wdWxhdGlvbjoqKiBPZnRlbiwgdGhlc2UgTU1VIGNyZWF0ZSBmdW5jdGlvbnMgaGF2ZSB0byBzZXQgc29tZSBtZXRhZGF0YSwgd2hpY2ggaXMgdXNlZCBsYXRlciB0byBxdWlja2x5IGNoZWNrIGlmIGEgc3BlY2lmaWMgcGFnZSB0YWJsZSBpcyB2YWxpZCBhbmQgY29uZmlndXJlZC4gSSdtIGd1ZXNzaW5nIHRoYXQgdGhpcyBsb2dpYyBtaWdodCBpbnZvbHZlIHNldHRpbmcgc29tZSBmbGFncyBvciBwb2ludGVycyB3aXRoaW4gdGhlIG5ldyBNTVUgc3RydWN0dXJlLlxuXG5NeSBnb2FsIGhlcmUgaXMgdG8gZXN0YWJsaXNoIGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoZSBLVk0gTU1VIGNvbnRleHQgaXMgY3JlYXRlZCwgd2hhdCBpbmZvcm1hdGlvbiBpdCBob2xkcyBpbml0aWFsbHksIGFuZCB3aGF0IHNldHVwIGlzIGRvbmUuIFVuZGVyc3RhbmRpbmcgdGhpcyBmb3VuZGF0aW9uIGlzIGVzc2VudGlhbCBmb3IgZGVidWdnaW5nIGFuZCBtb2RpZnlpbmcgdGhlIE1NVSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyODgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNToyNy4xNTU0OTM5MThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE4MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjgxMyxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjgxMzpcXHRzdGF0aWMgaW50IF9fa3ZtX21tdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21tdSAqbW11LCBzdHJ1Y3Qga3ZtX3BhZ2V3YWxrICp3KVxcbjY4MTQ6XFx0e1xcbjY4MTU6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuNjgxNjpcXHRcXHRpbnQgaTtcXG42ODE3OlxcdFxcbjY4MTg6XFx0XFx0bW11LVxcdTAwM2V3ID0gdztcXG42ODE5OlxcdFxcdG1tdS1cXHUwMDNlcm9vdC5ocGEgPSBJTlZBTElEX1BBR0U7XFxuNjgyMDpcXHRcXHRtbXUtXFx1MDAzZXJvb3QucGdkID0gMDtcXG42ODIxOlxcdFxcdG1tdS1cXHUwMDNlbWlycm9yX3Jvb3RfaHBhID0gSU5WQUxJRF9QQUdFO1xcbjY4MjI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEtWTV9NTVVfTlVNX1BSRVZfUk9PVFM7IGkrKylcXG42ODIzOlxcdFxcdFxcdG1tdS1cXHUwMDNlcHJldl9yb290c1tpXSA9IEtWTV9NTVVfUk9PVF9JTkZPX0lOVkFMSUQ7XFxuNjgyNDpcXHRcXG42ODI1OlxcdFxcdC8qIHZjcHUtXFx1MDAzZWFyY2guZ3Vlc3RfbW11IGlzbid0IHVzZWQgd2hlbiAhdGRwX2VuYWJsZWQuICovXFxuNjgyNjpcXHRcXHRpZiAoIXRkcF9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IG1tdSA9PSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5ndWVzdF9tbXUpXFxuNjgyNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG42ODI4OlxcdFxcbjY4Mjk6XFx0XFx0LypcXG42ODMwOlxcdFxcdCAqIFdoZW4gdXNpbmcgUEFFIHBhZ2luZywgdGhlIGZvdXIgUERQVEVzIGFyZSB0cmVhdGVkIGFzICdyb290JyBwYWdlcyxcXG42ODMxOlxcdFxcdCAqIHdoaWxlIHRoZSBQRFAgdGFibGUgaXMgYSBwZXItdkNQVSBjb25zdHJ1Y3QgdGhhdCdzIGFsbG9jYXRlZCBhdCBNTVVcXG42ODMyOlxcdFxcdCAqIGNyZWF0aW9uLiAgV2hlbiBlbXVsYXRpbmcgMzItYml0IG1vZGUsIGNyMyBpcyBvbmx5IDMyIGJpdHMgZXZlbiBvblxcbjY4MzM6XFx0XFx0ICogeDg2XzY0LiAgVGhlcmVmb3JlIHdlIG5lZWQgdG8gYWxsb2NhdGUgdGhlIFBEUCB0YWJsZSBpbiB0aGUgZmlyc3RcXG42ODM0OlxcdFxcdCAqIDRHQiBvZiBtZW1vcnksIHdoaWNoIGhhcHBlbnMgdG8gZml0IHRoZSBETUEzMiB6b25lLiAgVERQIHBhZ2luZ1xcbjY4MzU6XFx0XFx0ICogZ2VuZXJhbGx5IGRvZXNuJ3QgdXNlIFBBRSBwYWdpbmcgYW5kIGNhbiBza2lwIGFsbG9jYXRpbmcgdGhlIFBEUFxcbjY4MzY6XFx0XFx0ICogdGFibGUuICBUaGUgbWFpbiBleGNlcHRpb24sIGhhbmRsZWQgaGVyZSwgaXMgU1ZNJ3MgMzItYml0IE5QVC4gIFRoZVxcbjY4Mzc6XFx0XFx0ICogb3RoZXIgZXhjZXB0aW9uIGlzIGZvciBzaGFkb3dpbmcgTDEncyAzMi1iaXQgb3IgUEFFIE5QVCBvbiA2NC1iaXRcXG42ODM4OlxcdFxcdCAqIEtWTTsgdGhhdCBob3Jyb3IgaXMgaGFuZGxlZCBvbi1kZW1hbmQgYnkgbW11X2FsbG9jX3NwZWNpYWxfcm9vdHMoKS5cXG42ODM5OlxcdFxcdCAqL1xcbjY4NDA6XFx0XFx0aWYgKHRkcF9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IGt2bV9tbXVfZ2V0X21heF90ZHBfbGV2ZWwoKSBcXHUwMDNlIFBUMzJFX1JPT1RfTEVWRUwpXFxuNjg0MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG42ODQyOlxcdFxcbjY4NDM6XFx0XFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfRE1BMzIpO1xcbjY4NDQ6XFx0XFx0aWYgKCFwYWdlKVxcbjY4NDU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNjg0NjpcXHRcXG42ODQ3OlxcdFxcdG1tdS1cXHUwMDNlcGFlX3Jvb3QgPSBwYWdlX2FkZHJlc3MocGFnZSk7XFxuNjg0ODpcXHRcXG42ODQ5OlxcdFxcdC8qXFxuNjg1MDpcXHRcXHQgKiBDUjMgaXMgb25seSAzMiBiaXRzIHdoZW4gUEFFIHBhZ2luZyBpcyB1c2VkLCB0aHVzIGl0J3MgaW1wb3NzaWJsZSB0b1xcbjY4NTE6XFx0XFx0ICogZ2V0IHRoZSBDUFUgdG8gdHJlYXQgdGhlIFBEUFRFcyBhcyBlbmNyeXB0ZWQuICBEZWNyeXB0IHRoZSBwYWdlIHNvXFxuNjg1MjpcXHRcXHQgKiB0aGF0IEtWTSdzIHdyaXRlcyBhbmQgdGhlIENQVSdzIHJlYWRzIGdldCBhbG9uZy4gIE5vdGUsIHRoaXMgaXNcXG42ODUzOlxcdFxcdCAqIG9ubHkgbmVjZXNzYXJ5IHdoZW4gdXNpbmcgc2hhZG93IHBhZ2luZywgYXMgNjQtYml0IE5QVCBjYW4gZ2V0IGF0XFxuNjg1NDpcXHRcXHQgKiB0aGUgQy1iaXQgZXZlbiB3aGVuIHNoYWRvd2luZyAzMi1iaXQgTlBULCBhbmQgU01FIGlzbid0IHN1cHBvcnRlZFxcbjY4NTU6XFx0XFx0ICogYnkgMzItYml0IGtlcm5lbHMgKHdoZW4gS1ZNIGl0c2VsZiB1c2VzIDMyLWJpdCBOUFQpLlxcbjY4NTY6XFx0XFx0ICovXFxuNjg1NzpcXHRcXHRpZiAoIXRkcF9lbmFibGVkKVxcbjY4NTg6XFx0XFx0XFx0c2V0X21lbW9yeV9kZWNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpbW11LVxcdTAwM2VwYWVfcm9vdCwgMSk7XFxuNjg1OTpcXHRcXHRlbHNlXFxuNjg2MDpcXHRcXHRcXHRXQVJOX09OX09OQ0Uoc2hhZG93X21lX3ZhbHVlKTtcXG42ODYxOlxcdFxcbjY4NjI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDQ7ICsraSlcXG42ODYzOlxcdFxcdFxcdG1tdS1cXHUwMDNlcGFlX3Jvb3RbaV0gPSBJTlZBTElEX1BBRV9ST09UO1xcbjY4NjQ6XFx0XFxuNjg2NTpcXHRcXHRyZXR1cm4gMDtcXG42ODY2OlxcdH1cXG42ODY3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNToyNy4xNTU4MTU4NDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU3Mjg0MDE5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIE1NVSBMb2dpYyBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjb2RlIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBjb250ZXh0LCBpdCBsb29rcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCEgV2UncmUgZGVhbGluZyB3aXRoIEtWTSwgd2hpY2ggaXMgYWxyZWFkeSBleHRlbnNpdmVseSBmdXp6ZWQgYnkgdG9vbHMgbGlrZSBTeXprYWxsZXIsIGxldmVyYWdpbmcgc3RhbmRhcmQgaW9jdGxzIGxpa2UgYEtWTV9DUkVBVEVfVk1gLCBgS1ZNX0NSRUFURV9WQ1BVYCwgYW5kIGBLVk1fU0VUX0NQVUlEMmAuIFRoZXNlIGlvY3RscyBhcmUga25vd24gZW50cnlwb2ludHMgdG8gcmVhY2ggcGFydHMgb2YgdGhlIE1NVSBjb2RlLiBJdCdzIGdyZWF0IHRoYXQgaXQncyBhbHJlYWR5IHdlbGwtdHJvZGRlbiBncm91bmQuXG5cblRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiBLVk0gTU1VIGxvZ2ljLCBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHNldHRpbmcgdXAgVHJhbnNsYXRpb24gTG9va2FzaWRlIEJ1ZmZlciAoVExCKSBNTVUgcm9vdCBwYWdlIHJvbGVzIGFuZCBpbnN0YW5jZXMgZm9yIHZDUFVzLCB3aGljaCBhcmUgY3JpdGljYWwgcGF0aHMuIFRoZSBtZW50aW9uZWQgZnVuY3Rpb25zIGFyZSBga3ZtX21tdV9nZXRfdGRwX2xldmVsYCwgYF9fa3ZtX21tdV9jcmVhdGVgLCBgdGR4X2xvYWRfbW11X3BnZGAsIGFuZCBgdGR4X3RkX2luaXRgLiBDaGFuZ2VzIHRvIGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgIGluY2x1ZGUgYW4gYXNzZXJ0aW9uIHdpdGggYFdBUk5fT05fT05DRWAuIFRoaXMgaXMgZ29vZCwgYmVjYXVzZSB0aGVzZSBhZGRpdGlvbnMgYXJlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcgYXMgdGhleSBoYXZlIHRoZSBwb3RlbnRpYWwgdG8gcmV2ZWFsIGJ1Z3MuXG5cbkdpdmVuIHRoYXQgS1ZNIGlzIGZ1bGx5IGVtdWxhdGVkIGFuZCBydW5uYWJsZSB3aXRoaW4gUUVNVS9zdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIGVzdGFibGlzaGVkIGlvY3RscywgSSdtIGNvbmNsdWRpbmcgdGhhdCB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBUaGUgZmFjdCB0aGF0IG5ldyBhc3NlcnRpb25zIGFuZCBsb2dpYyByZXN0cnVjdHVyaW5nIGFyZSBwcmVzZW50IG9ubHkgc3RyZW5ndGhlbnMgdGhlIGNhc2UgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IFdvcnRoRnV6emluZy5cblxuTm93LCBsZXQncyByZWZpbmUgdGhlIGZ1enppbmcgYXBwcm9hY2ggYW5kIGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIHByaW1hcnkgY29uZmlncyBvZiBpbnRlcmVzdCBhcmUgYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGFuZCBgS1ZNX0lOVEVMX1REWGAuIEl0J3Mgd29ydGggcmVtZW1iZXJpbmcgdGhhdCBgS1ZNX0lOVEVMX1REWGAgZGVwZW5kcyBvbiBgSU5URUxfVERYX0hPU1RgLiBJdCdzIGEga2V5IGNvbmZpZ3VyYXRpb24gdG8ga2VlcCBpbiBtaW5kLCBhcyBhcmUgdGhlIG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMuIFRoZXNlIGNvbmZpZ3VyYXRpb25zIGRpcmVjdGx5IGluZmx1ZW5jZSB0aGUgY29kZSBwYXRocyB3ZSdyZSB0YXJnZXRpbmcuIEkgd2lsbCBuZWVkIHRvIGNoZWNrIHRob3NlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTozMS43Mjg2NTk5OTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTY4ODMxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5URUxfVERYX0hPU1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0xODQ0PWNvbmZpZyBYODZfVVNFUl9TSEFET1dfU1RBQ0tcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTg2My1cXG5hcmNoL3g4Ni9LY29uZmlnOjE4NjQ6Y29uZmlnIElOVEVMX1REWF9IT1NUXFxuYXJjaC94ODYvS2NvbmZpZy0xODY1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzU6MzEuOTI4MzU3ODA1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1OTc1NzAyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBJTlRFTF9URFhfSE9TVCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgSU5URUxfVERYX0hPU1RgLiBJIGtub3cgdGhpcyBpcyBhbiB4ODYtc3BlY2lmaWMgZmVhdHVyZSwgc28gdGhlIHBsYWNlIHRvIHN0YXJ0IGlzIGBhcmNoL3g4Ni9LY29uZmlnYC4gU3BlY2lmaWNhbGx5LCBhcm91bmQgbGluZSAxODY0LCB3aGljaCBpcyB0eXBpY2FsbHkgd2hlcmUgdGhlc2UgdHlwZXMgb2Ygb3B0aW9ucyBhcmUgZGVmaW5lZC4gVGhpcyB3aWxsIHJldmVhbCB0aGUgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZm9yIGBJTlRFTF9URFhfSE9TVGAgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBkZXBlbmRlbmNpZXMgb24gdGhpbmdzIGxpa2UgQ1BVIGZlYXR1cmVzLCBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgc2VjdXJpdHktcmVsYXRlZCBzZXR0aW5ncy4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGl0cyBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIGxhcmdlciB4ODYgZWNvc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA0NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM1OjM0LjUyNTkzMTgwMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODYwOlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vYXJjaC94ODYvc2hzdGsucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbjE4NjE6XFx0XFxuMTg2MjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMTg2MzpcXHRcXG4xODY0OlxcdGNvbmZpZyBJTlRFTF9URFhfSE9TVFxcbjE4NjU6XFx0XFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XFxcIlxcbjE4NjY6XFx0XFx0ZGVwZW5kcyBvbiBDUFVfU1VQX0lOVEVMXFxuMTg2NzpcXHRcXHRkZXBlbmRzIG9uIFg4Nl82NFxcbjE4Njg6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fSU5URUxcXG4xODY5OlxcdFxcdGRlcGVuZHMgb24gWDg2X1gyQVBJQ1xcbjE4NzA6XFx0XFx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xcbjE4NzE6XFx0XFx0ZGVwZW5kcyBvbiBDT05USUdfQUxMT0NcXG4xODcyOlxcdFxcdGRlcGVuZHMgb24gWDg2X01DRVxcbjE4NzM6XFx0XFx0aGVscFxcbjE4NzQ6XFx0XFx0ICBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBwcm90ZWN0cyBndWVzdCBWTXMgZnJvbSBtYWxpY2lvdXNcXG4xODc1OlxcdFxcdCAgaG9zdCBhbmQgY2VydGFpbiBwaHlzaWNhbCBhdHRhY2tzLiAgVGhpcyBvcHRpb24gZW5hYmxlcyBuZWNlc3NhcnkgVERYXFxuMTg3NjpcXHRcXHQgIHN1cHBvcnQgaW4gdGhlIGhvc3Qga2VybmVsIHRvIHJ1biBjb25maWRlbnRpYWwgVk1zLlxcbjE4Nzc6XFx0XFxuMTg3ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMTg3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzU6MzQuNTI2MTA2NzUyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5ODQwNTE0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgUmVjZW50IENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGVzZSBtb2RpZmljYXRpb25zLiBJJ2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYEZvY3VzU3ltYm9sc2Ag4oCTIGl0IGxvb2tzIGxpa2UgdGhleSd2ZSBwaW4tcG9pbnRlZCBhIGNsdXN0ZXIgb2YgY2hhbmdlcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBLVk0gKEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUpIGluZnJhc3RydWN0dXJlIGZvciB4ODYgYXJjaGl0ZWN0dXJlLlxuXG5JIHNlZSB0aGF0IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZCBvciBkaXJlY3RseSBjYWxsIHRoZSBtb2RpZmllZCBjb2RlOlxuMS4gIGBfX2t2bV9tbXVfY3JlYXRlYCAoYSBzdGF0aWMgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoZSBwdWJsaWMgYGt2bV9tbXVfY3JlYXRlYCBmdW5jdGlvbikuXG4gICAgYGt2bV9tbXVfY3JlYXRlYFxuMi4gIGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgIChhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBjYWxsZWQgYnkgYGt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGVgIGFuZCBga3ZtX2luaXRfc2hhZG93X25wdF9tbXVgKS5cbiAgICBga3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZWBcbiAgICBga3ZtX2luaXRfc2hhZG93X25wdF9tbXVgXG4zLiAgYHRkeF9sb2FkX21tdV9wZ2RgIChmb3VuZCBpbiBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2ApLlxuNC4gIGB0ZHhfdGRfaW5pdGAgKGFsc28gaW4gYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgKS5cblxuT2theSwgdGhhdCdzIHRoZSBjb3JlLiBOb3csIEkgbmVlZCB0byBicm9hZGVuIHRoZSBzZWFyY2guIEkgd2FudCB0byBrbm93IGlmIHRoZXJlIGFyZSBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIG9yIHNpZGUtZWZmZWN0cywgc28gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBvdGhlciBhZmZlY3RlZCBmdW5jdGlvbnMuIFRoZSBjb2RlIGNoYW5nZXMgY291bGQgYWZmZWN0IG90aGVyIGFyZWFzIG9mIHRoZSBzeXN0ZW0gdGhhdCBhcmUgbm90IGRpcmVjdGx5IGNhbGxlZCBieSB0aGUgY29yZSBjb2RlLlxuXG5Ob3cgSSdsbCBkaWcgaW50byB0aGUgYGFyY2gveDg2L2t2bS9jcHVpZC5jYCBmaWxlIGFuZCBhbHNvIGNoZWNrIG90aGVyIHJlbGV2YW50IGZpbGVzLiBJdCBhcHBlYXJzIHRoYXQgYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAgd2FzIHJlbW92ZWQuIEZ1cnRoZXIgY29uZmlybWluZyB0aGlzLCB0aGUgZnVuY3Rpb24gcHJvdG90eXBlIHdhcyByZW1vdmVkIGluIGBjcHVpZC5oYC5cblxuSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgY2FsbGVycyBvZiBga3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZWAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBpbmRpcmVjdCBzaWRlIGVmZmVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTc3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzU6MzguNTEwMTYyMDE1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDY5MjgyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fY2FsY190ZHBfbW11X3Jvb3RfcGFnZV9yb2xlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5ODI9c3RhdGljIHVuaW9uIGt2bV9tbXVfcGFnZV9yb2xlXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTgzOmt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk4NC1cXHRcXHRcXHRcXHR1bmlvbiBrdm1fY3B1X3JvbGUgY3B1X3JvbGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTYwMDY9c3RhdGljIHZvaWQgaW5pdF9rdm1fdGRwX21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYwMDktXFx0c3RydWN0IGt2bV9tbXUgKmNvbnRleHQgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5yb290X21tdTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYwMTA6XFx0dW5pb24ga3ZtX21tdV9wYWdlX3JvbGUgcm9vdF9yb2xlID0ga3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZSh2Y3B1LCBjcHVfcm9sZSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MDExLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTozOC41NjQ4NjEzOTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg1NjIxOTkyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIEtWTSBURFAgTU1VIEluaXRpYWxpemF0aW9uIGFuZCBDYWxsZXJzKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGNlbnRlcmVkIG9uIGludmVzdGlnYXRpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBLVk0gVGFnZ2VkIERhdGEgUG9pbnRlciAoVERQKSBNTVUsIHNwZWNpZmljYWxseSB0aGUgYGluaXRfa3ZtX3RkcF9tbXVgIGZ1bmN0aW9uLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgbm90IGp1c3QgdGhhdCBmdW5jdGlvbiBpbiBpc29sYXRpb24sIGJ1dCBhbHNvIHRoZSBicm9hZGVyIGNvbnRleHQuIFdoYXQgb3RoZXIgY29kZSBwYXRocyBjYWxsIGludG8gdGhpcyBmdW5jdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGVudHJ5IHBvaW50cyBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQncyBpbnZva2VkLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBNTVUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgYW5kIGhvdyBURFAgaXMgaW50ZWdyYXRlZC4gSWRlbnRpZnlpbmcgdGhlIGNhbGxlcnMgd2lsbCBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtaWdodCBtYWtlIHRvIGBpbml0X2t2bV90ZHBfbW11YCBvciBob3cgdGhpcyBpbml0aWFsaXphdGlvbiBvY2N1cnMuIFRoaXMgaXMgZXNzZW50aWFsIGZvciBhIHRob3JvdWdoIHJldmlldyBhbmQgYW55IHRyb3VibGVzaG9vdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3NDQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTo0MC40MjEwODQ5MTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDQyODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluaXRfa3ZtX3RkcF9tbXVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTk4Mz1rdm1fY2FsY190ZHBfbW11X3Jvb3RfcGFnZV9yb2xlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjAwNS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYwMDY6c3RhdGljIHZvaWQgaW5pdF9rdm1fdGRwX21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MDA3LVxcdFxcdFxcdCAgICAgdW5pb24ga3ZtX2NwdV9yb2xlIGNwdV9yb2xlKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02MTc2PXZvaWQga3ZtX2luaXRfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjE4NC1cXHRcXHRpZiAodGRwX2VuYWJsZWQpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2MTg1OlxcdFxcdFxcdGluaXRfa3ZtX3RkcF9tbXUodmNwdSwgY3B1X3JvbGUpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjE4Ni1cXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM1OjQwLjQ3NTEzMjU2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNTYyMDYwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIE1NVSBGdXp6aW5nIFNjb3BlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IEtWTSBNTVUgZnV6emluZywgYW5kIEkgbmVlZCB0byBkZWZpbmUgdGhlIGFwcHJvcHJpYXRlIHNjb3BlIGZvciBvdXIgZnV6emVyLiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYGt2bV9pbml0X21tdWAgaXMgYSBub24tc3RhdGljIGZ1bmN0aW9uIGNhbGxlZCBxdWl0ZSBmcmVxdWVudGx5IGR1cmluZyBNTVUgc2V0dXAgYW5kIHJlc2V0IG9wZXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgd2hldGhlciBpdCB3YXMgdG9vIGJyb2FkLCBidXQgYWZ0ZXIgZnVydGhlciBjb25zaWRlcmF0aW9uLCBpdCdzIGFjdHVhbGx5IHF1aXRlIHdlbGwtdGFyZ2V0ZWQgZm9yIEtWTSBWQ1BVIGluaXRpYWxpemF0aW9uIGFuZCBtb2RlIHN3aXRjaGluZywgcGVyZmVjdGx5IHJlbGV2YW50IHRvIE1NVSBmdXp6aW5nLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCB0aGUgZm9jdXMgc3ltYm9scy4gV2UgaGF2ZTpcblxuKiAgIGBrdm1fbW11X2NyZWF0ZWAgLSB0aGlzIGlzIHNwZWNpZmljIHRvIEtWTSBWQ1BVIGNyZWF0aW9uLCBtYWtlcyBzZW5zZS5cbiogICBga3ZtX2luaXRfbW11YCAtIGFzIG1lbnRpb25lZCwgdGhpcyBpcyBhIHByaW1lIGNhbmRpZGF0ZS5cbiogICBga3ZtX2luaXRfc2hhZG93X25wdF9tbXVgIC0gdGhpcyBsb29rcyBzcGVjaWZpYyB0byBuZXN0ZWQgTlBUIE1NVSBpbml0aWFsaXphdGlvbi5cbiogICBgdGR4X2xvYWRfbW11X3BnZGAgLSBURFgtc3BlY2lmaWMsIGRlYWxpbmcgd2l0aCBsb2FkaW5nIHRoZSBQR0QgKFBhZ2UgR2xvYmFsIERpcmVjdG9yeSkuXG4qICAgYHRkeF90ZF9pbml0YCAtIFRoaXMgaXMgYSBURFggaW5pdGlhbGl6YXRpb24gY29tbWFuZCBoYW5kbGVyLlxuXG5BbGwgdGhlc2UgZnVuY3Rpb25zIGFwcGVhciByZWxldmFudC5cblxuTmV4dCwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogV2UgbmVlZCB0byBlbnN1cmUgd2UgY292ZXIgdGhlIHJlbGV2YW50IEtWTSBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSBhcmUgYWltaW5nIGZvcjogYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGBJTlRFTF9URFhfSE9TVGAsIGFuZCBgS1ZNX0lOVEVMX1REWGAuIFRoZXNlIGNvbmZpZ3MgY29sbGVjdGl2ZWx5IGNvdmVyIGEgd2lkZSByYW5nZSBvZiBoYXJkd2FyZSBwbGF0Zm9ybXMuXG5cbkZpbmFsbHksIGxldCdzIGFzc2VtYmxlIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuIEkgbmVlZCB0byBiZSBwcmVjaXNlIGhlcmUuIFdlIGFyZSBzYXlpbmcgdGhhdCB0aGlzIHBhdGNoICppcyogd29ydGggZnV6emluZywgYW5kIEkgbmVlZCB0byBleHBsYWluICp3aHkqLlxuXG5UaGUgcmVhc29uIGlzIGJlY2F1c2UgdGhlIGNoYW5nZXMgaW1wYWN0IEtWTSBNTVUgVERQIGxldmVsIGNhbGN1bGF0aW9uIGxvZ2ljIChga3ZtX21tdV9nZXRfdGRwX2xldmVsYCwgYF9fa3ZtX21tdV9jcmVhdGVgKSwgaW50cm9kdWNlcyBhIG5ldyBgbWlycm9yX3Jvb3RfbGV2ZWxgIGZpZWxkIGluIGBrdm1fYXJjaGAsIGFuZCB3ZSd2ZSBhZGRlZCBhIGBXQVJOX09OX09OQ0VgIGFzc2VydGlvbiByZWxhdGVkIHRvIHRoZSBtaXJyb3JlZCBURFAgcm9vdCBsZXZlbCBjb25maWd1cmF0aW9uLiBUaGlzIGxvZ2ljIGlzIGFjY2Vzc2VkIHZpYSBjb21tb24gS1ZNIGlvY3RscyBsaWtlIGBLVk1fQ1JFQVRFX1ZNYCwgYEtWTV9DUkVBVEVfVkNQVWAsIGFuZCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBvcGVyYXRpb25zIG9uIGFtZDY0LCBzbyBpdCBzaG91bGQgYmUgZWFzaWx5IHJlYWNoYWJsZS5cblxuU28sIGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYC4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZC4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjb25maXJtZWQsIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxvb2sgY29ycmVjdC4gQmVmb3JlIEkgc3VibWl0LCBJJ2xsIGRvIGEgZmluYWwgc2FuaXR5IGNoZWNrIG9uIGFsbCBwYXJhbWV0ZXJzIHRvIGVuc3VyZSBubyB0eXBvcyBvciBsb2dpY2FsIGVycm9ycyBhcmUgcHJlc2VudC4gT2theSwgYWxsIGxvb2tzIGdvb2QgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjk4LCJPdXRwdXRUb2tlbnMiOjIzOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTo0Ni43MzEzNDE3OTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTM1NTczMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIklOVEVMX1REWF9IT1NUXCIsXG4gICAgXCJLVk1fSU5URUxfVERYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX21tdV9jcmVhdGVcIixcbiAgICBcImt2bV9pbml0X21tdVwiLFxuICAgIFwia3ZtX2luaXRfc2hhZG93X25wdF9tbXVcIixcbiAgICBcInRkeF9sb2FkX21tdV9wZ2RcIixcbiAgICBcInRkeF90ZF9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHg4NiBNTVUgcm9vdCBsZXZlbCBjYWxjdWxhdGlvbiBhbmQgVERQIGNyZWF0aW9uIGxvZ2ljIChfX2t2bV9tbXVfY3JlYXRlLCBrdm1fbW11X2dldF90ZHBfbGV2ZWwpIGFuZCB1cGRhdGVzIFREWCBtaXJyb3JlZCByb290IGxldmVsIGhhbmRsaW5nICh0ZHhfbG9hZF9tbXVfcGdkLCB0ZHhfdGRfaW5pdCkuIEl0IGFsc28gYWRkcyBhIG5ldyBXQVJOX09OX09OQ0UgYXNzZXJ0aW9uIGZvciB1bmluaXRpYWxpemVkIG1pcnJvcl9yb290X2xldmVsLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZHVyaW5nIEtWTSBWTSBhbmQgdkNQVSBpbml0aWFsaXphdGlvbi9saWZlY3ljbGUgb3BlcmF0aW9ucyBvbiB4ODZfNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIklOVEVMX1REWF9IT1NUXCIsXG4gICAgXCJLVk1fSU5URUxfVERYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX21tdV9jcmVhdGVcIixcbiAgICBcImt2bV9pbml0X21tdVwiLFxuICAgIFwia3ZtX2luaXRfc2hhZG93X25wdF9tbXVcIixcbiAgICBcInRkeF9sb2FkX21tdV9wZ2RcIixcbiAgICBcInRkeF90ZF9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHg4NiBNTVUgcm9vdCBsZXZlbCBjYWxjdWxhdGlvbiBhbmQgVERQIGNyZWF0aW9uIGxvZ2ljIChfX2t2bV9tbXVfY3JlYXRlLCBrdm1fbW11X2dldF90ZHBfbGV2ZWwpIGFuZCB1cGRhdGVzIFREWCBtaXJyb3JlZCByb290IGxldmVsIGhhbmRsaW5nICh0ZHhfbG9hZF9tbXVfcGdkLCB0ZHhfdGRfaW5pdCkuIEl0IGFsc28gYWRkcyBhIG5ldyBXQVJOX09OX09OQ0UgYXNzZXJ0aW9uIGZvciB1bmluaXRpYWxpemVkIG1pcnJvcl9yb290X2xldmVsLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZHVyaW5nIEtWTSBWTSBhbmQgdkNQVSBpbml0aWFsaXphdGlvbi9saWZlY3ljbGUgb3BlcmF0aW9ucyBvbiB4ODZfNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM1OjQ2LjgyMDcwNjE3MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc3MTcwNzE5MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTo0Ni44MjEzNzg2NjJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNzcxNjM5NDgzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyBLVk0gZGV0ZXJtaW5lcyB0aGUgVERQIGxldmVsIGZvciBWTXMgd2l0aCBtaXJyb3JlZCBwYWdlIHRhYmxlcyAoc3VjaCBhcyBURFggVk1zKSwgYnkgdHJhY2tpbmcgdGhlIG1pcnJvciByb290IGxldmVsIGV4cGxpY2l0bHkgaW4gYHN0cnVjdCBrdm1fYXJjaGAgKGBtaXJyb3Jfcm9vdF9sZXZlbGApIHNldCBkdXJpbmcgVEQgaW5pdGlhbGl6YXRpb24gaW5zdGVhZCBvZiBxdWVyeWluZyB0aGUgZ3Vlc3QgQ1BVSUQuXFxuXFxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZTogYHN0cnVjdCBrdm1fYXJjaGAgaXMgcGFydCBvZiBgc3RydWN0IGt2bWAsIHdoaWNoIGlzIGFsbG9jYXRlZCB3aXRoIGBrdnphbGxvYygpYCBpbiBga3ZtX2FyY2hfYWxsb2Nfdm0oKWAsIGd1YXJhbnRlZWluZyB0aGF0IGBtaXJyb3Jfcm9vdF9sZXZlbGAgaXMgemVyby1pbml0aWFsaXplZC5cXG4tIE5vIGtlcm5lbC10by11c2VyIGluZm8gbGVha3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IG5ldyBkYXRhIHRvIHVzZXIgc3BhY2UgdmlhIGNvcHlfdG9fdXNlciBvciBpb2N0bCBvdXRwdXRzLlxcbi0gTm8gdW5pbml0aWFsaXplZCBicmFuY2hpbmcgb3IgYnVmZmVyIGFjY2VzczogTG9naWMgY2hlY2tzIG9wZXJhdGUgb24gZnVsbHkgaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhbmQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLlxcblxcblRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgcHJlc2VudCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gcnVuIGlzIG5vdCBuZWVkZWQ7IHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDcxZDA4YTEwOTUyOWM1ZjI0NmE1ZjdhYWViYmU5OTcxZGVkNTQxNWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDIzOjM0OjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDY4M2JiOGJmNDNhOTQuLmVkZDVhZDJlNWI1MmQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMTQwNiw2ICsxNDA2LDcgQEAgc3RydWN0IGt2bV9hcmNoIHtcbiBcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBzcGxpdF9kZXNjX2NhY2hlO1xuIFxuIFx0Z2ZuX3QgZ2ZuX2RpcmVjdF9iaXRzO1xuK1x0aW50IG1pcnJvcl9yb290X2xldmVsO1xuIFxuIFx0LypcbiBcdCAqIFNpemUgb2YgdGhlIENQVSdzIGRpcnR5IGxvZyBidWZmZXIsIGkuZS4gVk1YJ3MgUE1MIGJ1ZmZlci4gQSBaZXJvXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmMgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuaW5kZXggZGRiMDIyY2IyMDNhMi4uMzRjNjA5YTYwZWVmZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuQEAgLTQ4MywyMCArNDgzLDYgQEAgaW50IGNwdWlkX3F1ZXJ5X21heHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIDM2O1xuIH1cbiBcbi1pbnQgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqYmVzdDtcbi1cbi1cdGJlc3QgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDAwKTtcbi1cdGlmICghYmVzdCB8fCBiZXN0LVx1MDAzZWVheCBcdTAwM2MgMHg4MDAwMDAwOClcbi1cdFx0Z290byBub3RfZm91bmQ7XG4tXHRiZXN0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAwOCk7XG4tXHRpZiAoYmVzdClcbi1cdFx0cmV0dXJuIChiZXN0LVx1MDAzZWVheCBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweGZmO1xuLW5vdF9mb3VuZDpcbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIFRoaXMgXCJyYXdcIiB2ZXJzaW9uIHJldHVybnMgdGhlIHJlc2VydmVkIEdQQSBiaXRzIHdpdGhvdXQgYW55IGFkanVzdG1lbnRzIGZvclxuICAqIGVuY3J5cHRpb24gdGVjaG5vbG9naWVzIHRoYXQgdXN1cnAgYml0cy4gIFRoZSByYXcgbWFzayBzaG91bGQgYmUgdXNlZCBpZiBhbmRcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vY3B1aWQuaCBiL2FyY2gveDg2L2t2bS9jcHVpZC5oXG5pbmRleCA4ZDg2M2Y0NTU4NWRlLi40NmJmZTg2OTllNjdmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmhcbisrKyBiL2FyY2gveDg2L2t2bS9jcHVpZC5oXG5AQCAtNjgsNyArNjgsNiBAQCB2b2lkIF9faW5pdCBrdm1faW5pdF94c3RhdGVfc2l6ZXModm9pZCk7XG4gdTMyIHhzdGF0ZV9yZXF1aXJlZF9zaXplKHU2NCB4c3RhdGVfYnYsIGJvb2wgY29tcGFjdGVkKTtcbiBcbiBpbnQgY3B1aWRfcXVlcnlfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLWludCBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB1NjQga3ZtX3ZjcHVfcmVzZXJ2ZWRfZ3BhX2JpdHNfcmF3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gc3RhdGljIGlubGluZSBpbnQgY3B1aWRfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDA2NGVjYzMzYjkyNjcuLmQ0M2I4YjZjM2IxNzkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtNTk1MywxOSArNTk1MywyMiBAQCB2b2lkIF9fa3ZtX21tdV9yZWZyZXNoX3Bhc3N0aHJvdWdoX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0aW50IG1heHBhO1xuLVxuLVx0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTSlcbi1cdFx0bWF4cGEgPSBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIodmNwdSk7XG4tXHRlbHNlXG4tXHRcdG1heHBhID0gY3B1aWRfbWF4cGh5YWRkcih2Y3B1KTtcbi1cbiBcdC8qIHRkcF9yb290X2xldmVsIGlzIGFyY2hpdGVjdHVyZSBmb3JjZWQgbGV2ZWwsIHVzZSBpdCBpZiBub256ZXJvICovXG4gXHRpZiAodGRwX3Jvb3RfbGV2ZWwpXG4gXHRcdHJldHVybiB0ZHBfcm9vdF9sZXZlbDtcbiBcbitcdC8qXG4rXHQgKiBJZiB0aGUgVk0gaGFzIG1pcnJvciByb290cywgdGhlbiB0aGUgcm9vdCBsZXZlbCBpcyBwcmVkZWZpbmVkIGFzIHRoZVxuK1x0ICogbWlycm9yIHJvb3QgKGFuZCBieSBleHRlbnNpb24gdGhlIG5vcm1hbCByb290KSBuZWVkcyB0byBtYXRjaCB0aGVcbitcdCAqIHJvb3QgbGV2ZWwgdGhhdCB3YXMgY29uZmlndXJlZCBmb3IgdGhlIGV4dGVybmFsIHBhZ2UgdGFibGVzIHRoYXQgYXJlXG4rXHQgKiBiZWluZyBtaXJyb3JlZCBieSBLVk0uXG4rXHQgKi9cbitcdGlmIChrdm1faGFzX21pcnJvcmVkX3RkcCh2Y3B1LVx1MDAzZWt2bSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIVdBUk5fT05fT05DRSghdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbCkpXG4rXHRcdHJldHVybiB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsO1xuK1xuIFx0LyogVXNlIDUtbGV2ZWwgVERQIGlmIGFuZCBvbmx5IGlmIGl0J3MgdXNlZnVsL25lY2Vzc2FyeS4gKi9cbi1cdGlmIChtYXhfdGRwX2xldmVsID09IDUgXHUwMDI2XHUwMDI2IG1heHBhIFx1MDAzYz0gNDgpXG4rXHRpZiAobWF4X3RkcF9sZXZlbCA9PSA1IFx1MDAyNlx1MDAyNiBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpIFx1MDAzYz0gNDgpXG4gXHRcdHJldHVybiA0O1xuIFxuIFx0cmV0dXJuIG1heF90ZHBfbGV2ZWw7XG5AQCAtNjgzNCw3ICs2ODM3LDcgQEAgc3RhdGljIGludCBfX2t2bV9tbXVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXUgKm1tdSwgc3RydWN0IGtcbiBcdCAqIG90aGVyIGV4Y2VwdGlvbiBpcyBmb3Igc2hhZG93aW5nIEwxJ3MgMzItYml0IG9yIFBBRSBOUFQgb24gNjQtYml0XG4gXHQgKiBLVk07IHRoYXQgaG9ycm9yIGlzIGhhbmRsZWQgb24tZGVtYW5kIGJ5IG1tdV9hbGxvY19zcGVjaWFsX3Jvb3RzKCkuXG4gXHQgKi9cbi1cdGlmICh0ZHBfZW5hYmxlZCBcdTAwMjZcdTAwMjYga3ZtX21tdV9nZXRfdGRwX2xldmVsKHZjcHUpIFx1MDAzZSBQVDMyRV9ST09UX0xFVkVMKVxuK1x0aWYgKHRkcF9lbmFibGVkIFx1MDAyNlx1MDAyNiBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKCkgXHUwMDNlIFBUMzJFX1JPT1RfTEVWRUwpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfRE1BMzIpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5pbmRleCBiMjcyYzIwNTg2YTc0Li5hMGJjOWY4MThmNDM5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuQEAgLTU2LDkgKzU2LDYgQEBcbiBib29sIGVuYWJsZV90ZHggX19yb19hZnRlcl9pbml0O1xuIG1vZHVsZV9wYXJhbV9uYW1lZCh0ZHgsIGVuYWJsZV90ZHgsIGJvb2wsIDA0NDQpO1xuIFxuLSNkZWZpbmUgVERYX1NIQVJFRF9CSVRfUFdMXzUgZ3BhX3RvX2dmbihCSVRfVUxMKDUxKSlcbi0jZGVmaW5lIFREWF9TSEFSRURfQklUX1BXTF80IGdwYV90b19nZm4oQklUX1VMTCg0NykpXG4tXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnRkeF9zeXNpbmZvO1xuIFxuIHZvaWQgdGRoX3ZwX3JkX2ZhaWxlZChzdHJ1Y3QgdmNwdV90ZHggKnRkeCwgY2hhciAqdWNsYXNzLCB1MzIgZmllbGQsIHU2NCBlcnIpXG5AQCAtMTYwOSwxMCArMTYwNiw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Rkdm1jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiB2b2lkIHRkeF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSwgaW50IHBnZF9sZXZlbClcbiB7XG4tXHR1NjQgc2hhcmVkX2JpdCA9IChwZ2RfbGV2ZWwgPT0gNSkgPyBURFhfU0hBUkVEX0JJVF9QV0xfNSA6XG4tXHRcdFx0ICBURFhfU0hBUkVEX0JJVF9QV0xfNDtcbi1cbi1cdGlmIChLVk1fQlVHX09OKHNoYXJlZF9iaXQgIT0ga3ZtX2dmbl9kaXJlY3RfYml0cyh2Y3B1LVx1MDAzZWt2bSksIHZjcHUtXHUwMDNla3ZtKSlcbitcdGlmIChLVk1fQlVHX09OKHBnZF9sZXZlbCAhPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsLCB2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHRkX3ZtY3Nfd3JpdGU2NCh0b190ZHgodmNwdSksIFNIQVJFRF9FUFRfUE9JTlRFUiwgcm9vdF9ocGEpO1xuQEAgLTI3NjAsNiArMjc1NCwxNCBAQCBERUZJTkVfQ0xBU1ModGR4X3ZtX3N0YXRlX2d1YXJkLCB0ZHhfdm1fc3RhdGVfZ3VhcmRfdCxcbiBcdCAgICAgaWYgKCFJU19FUlIoX1QpKSB0ZHhfcmVsZWFzZV92bV9zdGF0ZV9sb2NrcyhfVCksXG4gXHQgICAgIHRkeF9hY3F1aXJlX3ZtX3N0YXRlX2xvY2tzKGt2bSksIHN0cnVjdCBrdm0gKmt2bSk7XG4gXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBpbnQgbGV2ZWwpXG4re1xuK1x0QlVJTERfQlVHX09OKGxldmVsICE9IDQgXHUwMDI2XHUwMDI2IGxldmVsICE9IDUpO1xuK1xuK1x0a3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWwgPSBsZXZlbDtcbitcdGt2bS1cdTAwM2VhcmNoLmdmbl9kaXJlY3RfYml0cyA9IGdwYV90b19nZm4oQklUX1VMTChsZXZlbCA9PSA0ID8gNDcgOiA1MSkpO1xuK31cbitcbiBzdGF0aWMgaW50IHRkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXG4ge1xuIFx0c3RydWN0IGt2bV90ZHhfaW5pdF92bSBfX3VzZXIgKnVzZXJfZGF0YSA9IHU2NF90b191c2VyX3B0cihjbWQtXHUwMDNlZGF0YSk7XG5AQCAtMjgyMyw5ICsyODI1LDkgQEAgc3RhdGljIGludCB0ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxuIFx0a3ZtX3RkeC1cdTAwM2V4ZmFtID0gdGRfcGFyYW1zLVx1MDAzZXhmYW07XG4gXG4gXHRpZiAodGRfcGFyYW1zLVx1MDAzZWNvbmZpZ19mbGFncyBcdTAwMjYgVERYX0NPTkZJR19GTEFHU19NQVhfR1BBVylcbi1cdFx0a3ZtLVx1MDAzZWFyY2guZ2ZuX2RpcmVjdF9iaXRzID0gVERYX1NIQVJFRF9CSVRfUFdMXzU7XG4rXHRcdHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA1KTtcbiBcdGVsc2Vcbi1cdFx0a3ZtLVx1MDAzZWFyY2guZ2ZuX2RpcmVjdF9iaXRzID0gVERYX1NIQVJFRF9CSVRfUFdMXzQ7XG4rXHRcdHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA0KTtcbiBcbiBcdGt2bV90ZHgtXHUwMDNlc3RhdGUgPSBURF9TVEFURV9JTklUSUFMSVpFRDtcbiBvdXQ6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTo0Ni44MjEzNzk2NzJaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU4MDU5Mjg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gb2YgVGhpcyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIG5lY2Vzc2l0YXRlcyBhIEtNU0FOIGZ1enppbmcgcnVuLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gVERYIChUcnVzdGVkIERvbWFpbiBFeHRlbnNpb24pIHN1cHBvcnQgd2l0aGluIEtWTSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIG1pcnJvcmVkIFREUCBsZXZlbHMgYW5kIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG5cbkZpcnN0LCBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYG1pcnJvcl9yb290X2xldmVsYCB0byBgc3RydWN0IGt2bV9hcmNoYCB3aXRoaW4gYGt2bV9ob3N0LmhgLiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSBpcyBob3cgYHN0cnVjdCBrdm1gIGFuZCBieSBleHRlbnNpb24sIGBrdm1fYXJjaGAgYXJlIGFsbG9jYXRlZCwgYmVjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhIEtNU0FOIHJlZC1mbGFnLiBGb3J0dW5hdGVseSwgSSBzZWUgdGhhdCBga3phbGxvY2AgaXMgdXNlZC4gVGhhdCBtZWFucyB0aGUgYGt2bV9hcmNoYCBzdHJ1Y3QgaXMgKnplcm9lZCogYXQgYWxsb2NhdGlvbi4gVGhhdCBnaXZlcyBtZSBzb21lIHBlYWNlIG9mIG1pbmQuIExldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgb3RoZXIgYWxsb2NhdGlvbnMgdGhvdWdoLCBhbmQgSSdsbCBrZWVwIHRoaXMgY2hlY2sgaW4gdGhlIGJhY2sgb2YgbXkgbWluZCBhcyBJIGRpZyBkZWVwZXIuXG5cblRoZSByZW1vdmFsIG9mIHRoZSBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYCBmdW5jdGlvbiBpcyBpbnRlcmVzdGluZy4gSXQgaW1wbGllcyBzb21lIGNoYW5nZXMgaW4gaG93IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgbGltaXRzIGFyZSBkZXRlcm1pbmVkLiBUaGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgcmVwbGFjZWQgaW4gYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAgd2l0aCBhIGNoZWNrIGZvciBga3ZtX2hhc19taXJyb3JlZF90ZHBgIGFuZCB0aGUgdXNlIG9mIHRoZSBuZXcgYG1pcnJvcl9yb290X2xldmVsYCBmaWVsZC4gVGhlIGNvZGUgbm93IGRpcmVjdGx5IHVzZXMgYHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWxgIGlmIHRoZSBtaXJyb3JlZCBURFAgaXMgZW5hYmxlZC4gQWxzbywgdGhlIHBhdGNoIGNoYW5nZXMgYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbCh2Y3B1KWAgdG8gYGt2bV9tbXVfZ2V0X21heF90ZHBfbGV2ZWwoKWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIGVmZmVjdCBvZiB0aGF0IGNoYW5nZSBpcy5cblxuYF9fa3ZtX21tdV9jcmVhdGVgIGFsc28gc2VlbXMgaW1wYWN0ZWQuIFRoaXMgZnVuY3Rpb24gaXMgYSBjb3JlIHBhcnQgb2YgaG93IHRoZSBNTVUgaXMgc2V0IHVwLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKClgIHdvcmtzIHRoZSBzYW1lIHdheSwgb3IgYmV0dGVyLCBpbiB0aGUgY29udGV4dHMgb2YgdGhlIGNhbGxzIGl0IGlzIHJlcGxhY2luZy5cblxuVGhlIGNoYW5nZXMgaW4gYHRkeC5jYCBhcmUgc2lnbmlmaWNhbnQuIEl0IGxvb2tzIGxpa2UgYHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWxgIGlzIGEga2V5IGFkZGl0aW9uLiBJdCdzIHNldHRpbmcgdGhlIGBtaXJyb3Jfcm9vdF9sZXZlbGAgYW5kLCBjcml0aWNhbGx5LCBgZ2ZuX2RpcmVjdF9iaXRzYC4gVGhlIHNldHRpbmcgb2YgYGdmbl9kaXJlY3RfYml0c2AgaW5kaWNhdGVzIGEgY2hhbmdlIGluIGhvdyBndWVzdCBmcmFtZSBudW1iZXJzIGFyZSBoYW5kbGVkIHdpdGggcmVzcGVjdCB0byB0aGUgcm9vdCBsZXZlbC4gVGhlIHVzZSBvZiB0aGUgYEtWTV9CVUdfT05gIG1hY3JvIGFsc28gc3VnZ2VzdHMgdGhhdCB0aGUgYG1pcnJvcl9yb290X2xldmVsYCBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBjb3JyZWN0bHksIHdoaWNoIGlzIGdvb2QuIEJ1dCB0aGUgb2xkIG1ldGhvZCBjb3VsZCBoYXZlIGhhZCBhIGJ1ZyBoZXJlLCB0aGF0IGNvdWxkIG1lYW4gS01TQU4gd291bGQgcmV2ZWFsIGlzc3Vlcy5cblxuU28sIHRoZSBuZXcgY29kZSBjYWxscyBgdGR4X3NldF9taXJyb3Jfcm9vdF9sZXZlbGAgZGlyZWN0bHksIHdoaWNoIHNldHMgdGhlIGBtaXJyb3Jfcm9vdF9sZXZlbGAuIFRoaXMgKmlzKiBhbiBpbml0aWFsaXphdGlvbiBwb2ludCwgYW5kIGl0J3MgZ29vZCB0aGF0IGl0J3MgZXhwbGljaXQuXG5cblRoZSBrZXkgY29uc2lkZXJhdGlvbnMgbm93IGFyZTpcblxuMS4gICoqSW5pdGlhbGl6YXRpb24gYW5kIEFsbG9jYXRpb246KiogV2hpbGUgYGt6YWxsb2NgIGlzIHVzZWQsIGFyZSB0aGVyZSBhbnkgb3RoZXIgYWxsb2NhdGlvbnMgb3Igc3RydWN0IGNvcGllcyB0aGF0IG1pZ2h0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeT8gSSBuZWVkIHRvIGdyZXAgZm9yIGluc3RhbmNlcyB3aGVyZSBgc3RydWN0IGt2bWAgKGFuZCByZWxhdGVkIHN0cnVjdHMpIGFyZSBhbGxvY2F0ZWQgb3IgY29waWVkIGFuZCBlbnN1cmUgdGhhdCB0aGlzIHZhcmlhYmxlIGlzIGhhbmRsZWQgY29ycmVjdGx5LCBldmVuIGlmIEknbSBjb25maWRlbnQgaW4gdGhlIGBremFsbG9jYC4gVGhlIG1vc3Qgb2J2aW91cyBwbGFjZSB0byBncmVwIHdvdWxkIGJlIGFyb3VuZCB0aGUgdXNlIG9mIGBrdm1fYXJjaF9hbGxvY192bSgpYCBhbmQgYGt2bV9jcmVhdGVfdm1gLlxuMi4gICoqQ29uY3VycmVuY3kgYW5kIFJhY2UgQ29uZGl0aW9uczoqKiBUaGlzIGRlYWxzIHdpdGggVERYLCB3aGljaCBpcyBzZWN1cml0eSByZWxhdGVkLiBJIG5lZWQgdG8gYmUgY29uY2VybmVkIGFib3V0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gYWNjZXNzaW5nIHRoZSBuZXcgYG1pcnJvcl9yb290X2xldmVsYCBvciByZWxhdGVkIGRhdGEuIEFyZSB0aGVyZSBhbnkgbG9jayBwcm90ZWN0aW9uIGlzc3VlcywgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgTU1VIGFuZCBWQ1BVIGludGVyYWN0aW9ucz9cbjMuICAqKkNvcnJlY3RuZXNzIG9mIHRoZSBMb2dpYzoqKiBUaGUgb2xkIGNvZGUgcG90ZW50aWFsbHkgaGFkIGEgYnVnLCB3aGljaCB0aGlzIG5ldyBjb2RlIHRyaWVzIHRvIGZpeC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIG5ldyBjb2RlIGZ1bmN0aW9ucyBleGFjdGx5IGFzIGludGVuZGVkLiBBIGZhaWxpbmcgYXNzZXJ0aW9uIHdvdWxkIG1ha2UgdGhlIEtNU0FOIGZ1enppbmcgdW5uZWNlc3NhcnkuXG5cbkdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBtZW1vcnkgYWNjZXNzIGVycm9ycyAoZXZlbiB0aG91Z2ggSSBhbSBjdXJyZW50bHkgb3B0aW1pc3RpYyBhYm91dCB0aGUgemVyby1pbml0aWFsaXphdGlvbiksIHRoZSBpbnRyb2R1Y3Rpb24gb2YgbmV3IGNvbnRyb2wgZmxvdyByZWxhdGVkIHRvIFREUCBsZXZlbHMsIGFuZCB0aGUgY3JpdGljYWwgbmF0dXJlIG9mIEtWTS9URFggd2l0aCByZXNwZWN0IHRvIHNlY3VyaXR5LCBJIHRoaW5rIGEgS01TQU4gZnV6emluZyBydW4gaXMgd2FycmFudGVkIGhlcmUuIEl0J3MgdGhlIG9ubHkgd2F5IHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4gSSdsbCBzdGFydCB3aXRoIGZvY3Vzc2VkIGZ1enppbmcgYXJvdW5kIE1NVSBzZXR1cCBhbmQgZ3Vlc3QgYWRkcmVzcyBzcGFjZSBoYW5kbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ1MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM1OjUzLjQwMTk3NzgzM1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc5NzY5MTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt6YWxsb2MuKnN0cnVjdCBrdm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2NvYWxlc2NlZF9tbWlvLmM9MTIyPWludCBrdm1fdm1faW9jdGxfcmVnaXN0ZXJfY29hbGVzY2VkX21taW8oc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxudmlydC9rdm0vY29hbGVzY2VkX21taW8uYy0xMzAtXFxudmlydC9rdm0vY29hbGVzY2VkX21taW8uYzoxMzE6XFx0ZGV2ID0ga3phbGxvY19vYmooc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb19kZXYsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxudmlydC9rdm0vY29hbGVzY2VkX21taW8uYy0xMzItXFx0aWYgKCFkZXYpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTEwOTk9c3RhdGljIHN0cnVjdCBrdm0gKmt2bV9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlLCBjb25zdCBjaGFyICpmZG5hbWUpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExNzEtXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGt2bS1cXHUwMDNlYnVzZXNbaV0sXFxudmlydC9rdm0va3ZtX21haW4uYzoxMTcyOlxcdFxcdFxcdGt6YWxsb2Nfb2JqKHN0cnVjdCBrdm1faW9fYnVzLCBHRlBfS0VSTkVMX0FDQ09VTlQpKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExNzMtXFx0XFx0aWYgKCFrdm0tXFx1MDAzZWJ1c2VzW2ldKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz00NDI1PXN0YXRpYyBsb25nIGt2bV92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy00NTA0LVxcdFxcdHIgPSAtRU5PTUVNO1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDUwNTpcXHRcXHRrdm1fcmVncyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBrdm1fcmVncyk7XFxudmlydC9rdm0va3ZtX21haW4uYy00NTA2LVxcdFxcdGlmICgha3ZtX3JlZ3MpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ1MzEtXFx0Y2FzZSBLVk1fR0VUX1NSRUdTOiB7XFxudmlydC9rdm0va3ZtX21haW4uYzo0NTMyOlxcdFxcdGt2bV9zcmVncyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBrdm1fc3JlZ3MpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDUzMy1cXHRcXHRyID0gLUVOT01FTTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDYyMy1cXHRjYXNlIEtWTV9HRVRfRlBVOiB7XFxudmlydC9rdm0va3ZtX21haW4uYzo0NjI0OlxcdFxcdGZwdSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBrdm1fZnB1KTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ2MjUtXFx0XFx0ciA9IC1FTk9NRU07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM1OjUzLjc4MTc1NDY5NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTYzNjUxMjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBLVk0gQXJjaGl0ZWN0dXJlIG9uIHg4NioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIEtWTSB2aXJ0dWFsaXphdGlvbiBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBvbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gTXkgZm9jdXMgaXMgb24gaG93IGBrdm1fYXJjaF9hbGxvY192bWAgb3IgdGhlIGdlbmVyYWwgYGt2bWAgYWxsb2NhdGlvbiBmdW5jdGlvbnMgd29yay4gSSdtIGhlYWRpbmcgZGlyZWN0bHkgaW50byBgYXJjaC94ODYva3ZtL3g4Ni5jYCDigJMgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIGZvciB4ODYtc3BlY2lmaWMgS1ZNIGZ1bmN0aW9uYWxpdHkgc2hvdWxkIHJlc2lkZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgYWJvdXQgaG93IGd1ZXN0IHBoeXNpY2FsIG1lbW9yeSBpcyBtYXBwZWQsIGhvdyB2aXJ0dWFsIG1hY2hpbmUgc3RydWN0dXJlcyBhcmUgc2V0IHVwLCBhbmQgaG93IHJlc291cmNlcyBhcmUgbWFuYWdlZCBmb3IgZWFjaCB2aXJ0dWFsIG1hY2hpbmUuIEknbSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2Nlc3Mgc28gSSBjYW4gb3B0aW1pemUgdGhpcyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzgxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzU6NTUuNzQ1NDEzMzE4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzI0MzQyNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2FyY2hfYWxsb2Nfdm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzU6NTUuNzk4NjczNzc1WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTcxMTA1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gS1ZNIFZNIENyZWF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgaG9uZSBpbiBvbiBga3ZtX2NyZWF0ZV92bWAuIFRoaXMgaXMgdGhlIGNvcmUgZnVuY3Rpb24gd2hlcmUgYSBLVk0gdmlydHVhbCBtYWNoaW5lIGlzIGJyb3VnaHQgaW50byBleGlzdGVuY2UuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGluaXRpYWxpemF0aW9uIGZsb3csIGVzcGVjaWFsbHkgbm93IHdpdGggdGhlc2UgbmV3IGFyY2hpdGVjdHVyYWwgY29uc2lkZXJhdGlvbnMuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgc3RlcHMgaW4gaGVyZTogcmVzb3VyY2UgYWxsb2NhdGlvbiwgbWVtb3J5IG1hbmFnZW1lbnQgc2V0dXAsIHZDUFUgY3JlYXRpb24sIGFuZCB0aGUgbGlrZS4gSXQgd2lsbCBiZSBpbnRlcmVzdGluZyB0byBzZWUgaG93IHRoZXkndmUgaGFuZGxlZCB0aGUgbGF0ZXN0IHNlY3VyaXR5IG1pdGlnYXRpb25zIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucy4gSSdtIGtlZW4gdG8gc3BvdCBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHdoZXJlIHRoZXkgbWlnaHQgaGF2ZSBpbXBsZW1lbnRlZCBjbGV2ZXIgdHJpY2tzIHRvIGVuaGFuY2UgVk0gcGVyZm9ybWFuY2Ugb3IgaXNvbGF0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXTigJlzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDUzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzU6NTguMDE1NzkyMzQ5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNjI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMDA6XFx0e1xcbjExMDE6XFx0XFx0c3RydWN0IGt2bSAqa3ZtID0ga3ZtX2FyY2hfYWxsb2Nfdm0oKTtcXG4xMTAyOlxcdFxcdHN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzO1xcbjExMDM6XFx0XFx0aW50IHIsIGksIGo7XFxuMTEwNDpcXHRcXG4xMTA1OlxcdFxcdGlmICgha3ZtKVxcbjExMDY6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuMTEwNzpcXHRcXG4xMTA4OlxcdFxcdEtWTV9NTVVfTE9DS19JTklUKGt2bSk7XFxuMTEwOTpcXHRcXHRtbWdyYWIoY3VycmVudC1cXHUwMDNlbW0pO1xcbjExMTA6XFx0XFx0a3ZtLVxcdTAwM2VtbSA9IGN1cnJlbnQtXFx1MDAzZW1tO1xcbjExMTE6XFx0XFx0a3ZtX2V2ZW50ZmRfaW5pdChrdm0pO1xcbjExMTI6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4xMTEzOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlaXJxX2xvY2spO1xcbjExMTQ6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4xMTE1OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcXG4xMTE2OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZrdm0tXFx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XFxuMTExNzpcXHRcXHRyY3V3YWl0X2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlbW5fbWVtc2xvdHNfdXBkYXRlX3JjdXdhaXQpO1xcbjExMTg6XFx0XFx0eGFfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2V2Y3B1X2FycmF5KTtcXG4xMTE5OlxcdCNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG4xMTIwOlxcdFxcdHhhX2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlbWVtX2F0dHJfYXJyYXkpO1xcbjExMjE6XFx0I2VuZGlmXFxuMTEyMjpcXHRcXG4xMTIzOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZrdm0tXFx1MDAzZWdwY19saXN0KTtcXG4xMTI0OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZrdm0tXFx1MDAzZWdwY19sb2NrKTtcXG4xMTI1OlxcdFxcbjExMjY6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmt2bS1cXHUwMDNlZGV2aWNlcyk7XFxuMTEyNzpcXHRcXHRrdm0tXFx1MDAzZW1heF92Y3B1cyA9IEtWTV9NQVhfVkNQVVM7XFxuMTEyODpcXHRcXG4xMTI5OlxcdFxcdEJVSUxEX0JVR19PTihLVk1fTUVNX1NMT1RTX05VTSBcXHUwMDNlIFNIUlRfTUFYKTtcXG4xMTMwOlxcdFxcbjExMzE6XFx0XFx0LypcXG4xMTMyOlxcdFxcdCAqIEZvcmNlIHN1YnNlcXVlbnQgZGVidWdmcyBmaWxlIGNyZWF0aW9ucyB0byBmYWlsIGlmIHRoZSBWTSBkaXJlY3RvcnlcXG4xMTMzOlxcdFxcdCAqIGlzIG5vdCBjcmVhdGVkIChieSBrdm1fY3JlYXRlX3ZtX2RlYnVnZnMoKSkuXFxuMTEzNDpcXHRcXHQgKi9cXG4xMTM1OlxcdFxcdGt2bS1cXHUwMDNlZGVidWdmc19kZW50cnkgPSBFUlJfUFRSKC1FTk9FTlQpO1xcbjExMzY6XFx0XFxuMTEzNzpcXHRcXHRzbnByaW50Zihrdm0tXFx1MDAzZXN0YXRzX2lkLCBzaXplb2Yoa3ZtLVxcdTAwM2VzdGF0c19pZCksIFxcXCJrdm0tJWRcXFwiLFxcbjExMzg6XFx0XFx0XFx0IHRhc2tfcGlkX25yKGN1cnJlbnQpKTtcXG4xMTM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTo1OC4wMTYyMDA4OTlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA0Mzg0MDY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZnVuY3Rpb24gYGt2bV9hcmNoX2FsbG9jX3ZtYDpcblxuKipEaXNzZWN0aW5nIGBrdm1fYXJjaF9hbGxvY192bWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBga3ZtX2FyY2hfYWxsb2Nfdm1gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzOiB3aGF0ICpleGFjdGx5KiBpcyBpdCBkb2luZz8gQmFzZWQgb24gdGhlIG5hbWUsIGl0IHNlZW1zIHRvIGJlIGludm9sdmVkIHdpdGggYWxsb2NhdGluZyBhIHZpcnR1YWwgbWFjaGluZSB3aXRoaW4gdGhlIEtWTSAoS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSkgY29udGV4dCwgYW5kIHRoZSBcImFyY2hcIiBwYXJ0IHN1Z2dlc3RzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBoYW5kbGluZy4gVGhhdCBtYWtlcyBzZW5zZS4gQmVmb3JlIEkgY2FuIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBuaXR0eS1ncml0dHkgb2YgaXRzIGltcGxlbWVudGF0aW9uLCBJIG5lZWQgYSBwcmVjaXNlIGRlZmluaXRpb24uIFdoYXQgYXJlIHRoZSBpbnB1dHM/IFdoYXQgZG9lcyBpdCByZXR1cm4sIGFuZCB3aGF0IGlzIHRoZSBicm9hZGVyIGNvbnRleHQgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBvcGVyYXRlcz8gSXMgaXQgY2FsbGVkIGVhcmx5IGluIHRoZSBWTSBjcmVhdGlvbiBwcm9jZXNzLCBvciBsYXRlcj8gSG93IGRvZXMgdGhpcyBmdW5jdGlvbiByZWxhdGUgdG8gdGhlIG92ZXJhbGwgVk0gaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IFVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgc3RydWN0dXJlcyB0aGF0IGl0IG9wZXJhdGVzIG9uIGlzIGtleS4gV2hlcmUgY2FuIEkgZmluZCB0aGUgcHJlY2lzZSBkZXRhaWxzIG9mIHRoaXMgZnVuY3Rpb24ncyBwdXJwb3NlPyBJIGNhbiBpbWFnaW5lIGl0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGluZ3MgbGlrZSBhbGxvY2F0aW5nIHRoZSBWTSdzIGludGVybmFsIGRhdGEgc3RydWN0dXJlcywgcGVyaGFwcyBpbml0aWFsaXppbmcgc29tZSBhcmNoaXRlY3R1cmFsIHN0YXRlLCBhbmQgcG90ZW50aWFsbHkgYXNzb2NpYXRpbmcgaXQgd2l0aCBhIHNwZWNpZmljIENQVSBvciBzZXQgb2YgQ1BVcywgYnV0IGEgZGVmaW5pdGlvbiBpcyBuZWVkZWQuIFRpbWUgdG8gc2VhcmNoIHRoZSBzb3VyY2UuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk4MywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzY6MDAuMDYwMDQ0MDg3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc1MDU3NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX2FsbG9jX3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0xNDk4PXUzMiBrdm1fZ2V0X3BhX2JpdHMoc3RydWN0IGt2bSAqa3ZtKTtcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xNTAwLSNkZWZpbmUgX19LVk1fSEFWRV9BUkNIX1ZNX0FMTE9DXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjE1MDE6c3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZCk7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTE1MDItXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYz01MTA9bG9uZyBrdm1fYXJjaF9kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy01MTUtXFxuYXJjaC9hcm02NC9rdm0vYXJtLmM6NTE2OnN0cnVjdCBrdm0gKmt2bV9hcmNoX2FsbG9jX3ZtKHZvaWQpXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtNTE3LXtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MTc5NT1leHRlcm4gc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyBrdm1fbmVzdGVkX29wcyBfX3JlYWRfbW9zdGx5O1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xODEzLSNkZWZpbmUgX19LVk1fSEFWRV9BUkNIX1ZNX0FMTE9DXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoxODE0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZClcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTE4MTUte1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTE2OTc9dm9pZCBrdm1fYXJjaF9jcmVhdGVfdm1fZGVidWdmcyhzdHJ1Y3Qga3ZtICprdm0pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE3MDEtICogQWxsIGFyY2hpdGVjdHVyZXMgdGhhdCB3YW50IHRvIHVzZSB2emFsbG9jIGN1cnJlbnRseSBhbHNvXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE3MDI6ICogbmVlZCB0aGVpciBvd24ga3ZtX2FyY2hfYWxsb2Nfdm0gaW1wbGVtZW50YXRpb24uXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE3MDMtICovXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE3MDQ6c3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtICprdm1fYXJjaF9hbGxvY192bSh2b2lkKVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNzA1LXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MTA5OT1zdGF0aWMgc3RydWN0IGt2bSAqa3ZtX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUsIGNvbnN0IGNoYXIgKmZkbmFtZSlcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExMDAte1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTEwMTpcXHRzdHJ1Y3Qga3ZtICprdm0gPSBrdm1fYXJjaF9hbGxvY192bSgpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTEwMi1cXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzY6MDEuOTM1MTA5MzE4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMzU1OTY0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gS1ZNIEhvc3QgSW50ZXJydXB0IEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgcHVsbCB1cCB0aGUgS1ZNIGhvc3QgY29kZS4uLiBzcGVjaWZpY2FsbHksIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhleSdyZSBoYW5kbGluZyBpbnRlcnJ1cHQgaW5qZWN0aW9uLiBJJ20gZm9jdXNpbmcgb24gYGFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhgIOKAkyB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBtYWNyb3MgZm9yIHRoZSB4ODYgS1ZNIGhvc3QgYXJjaGl0ZWN0dXJlIGFyZSBkZWZpbmVkLiBOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgc2VjdGlvbiwgc28gbGV0IG1lIGZpbmQgdGhlIGBrdm1faG9zdC5oYCBmaWxlIGFuZCBqdW1wIGRvd24gdG8gbGluZSAxODE0LiBNeSBpbnN0aW5jdHMgc3VnZ2VzdCBpdCB3aWxsIGJlIHNvbWUgY3JpdGljYWwgcGllY2Ugb2YgdGhlIGludGVycnVwdCBtYW5hZ2VtZW50LiBJdCBtaWdodCBiZSBhIGRlZmluaXRpb24gZm9yIGFuIGludGVycnVwdC1yZWxhdGVkIGRhdGEgc3RydWN0dXJlLCBhbiBpbmxpbmUgZnVuY3Rpb24gZGVhbGluZyB3aXRoIGludGVycnVwdCBpbmplY3Rpb24sIG9yIHBlcmhhcHMgZXZlbiBhIG1hY3JvIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBpbnRlcnJ1cHQgd2luZG93LiBJ4oCZbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgaG93IHRoZSBob3N0IFZNIGludGVyYWN0cyB3aXRoIHRoZSB2aXJ0dWFsaXplZCBpbnRlcnJ1cHRzIGFuZCBob3cgdGhleSdyZSBkZWxpdmVyZWQgdG8gdGhlIGd1ZXN0cy4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk4NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM2OjA0LjA3MDcwOTE0OVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxODEyLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODEyOlxcdFxcbjE4MTM6XFx0I2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfVk1fQUxMT0NcXG4xODE0OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZClcXG4xODE1OlxcdHtcXG4xODE2OlxcdFxcdHJldHVybiBrdnphbGxvYyhrdm1feDg2X29wcy52bV9zaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbjE4MTc6XFx0fVxcbjE4MTg6XFx0XFxuMTgxOTpcXHQjZGVmaW5lIF9fS1ZNX0hBVkVfQVJDSF9WTV9GUkVFXFxuMTgyMDpcXHR2b2lkIGt2bV9hcmNoX2ZyZWVfdm0oc3RydWN0IGt2bSAqa3ZtKTtcXG4xODIxOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNjowNC4wNzA4NzU2NTlaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzI4ODgwMDIzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYG1pcnJvcl9yb290X2xldmVsYCBpbiBLVk0gd2l0aCBURFgqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG1pcnJvcl9yb290X2xldmVsYCBmaWVsZCB3aXRoaW4gdGhlIGBrdm1fYXJjaGAgc3RydWN0LiBJIHNlZSB0aGF0IGBrdnphbGxvY2AgaXMgdGhlIGFsbG9jYXRvciBmb3IgdGhlIGBrdm1gIHN0cnVjdCwgbWVhbmluZyBpdCdzIHplcm8taW5pdGlhbGl6ZWQgd2hlbiBhIEtWTSBpcyBjcmVhdGVkLiBUaGlzIG1lYW5zIGBrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbGAgc3RhcnRzIGF0IDAsIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlci5cblxuSSdtIGZvY3VzaW5nIG9uIHRoZSBpbnRlcmFjdGlvbiB3aXRoIFREWCwgbmF0dXJhbGx5LiBUaGUgY29kZSBzaG93cyB0aGF0IGR1cmluZyBURFggVk0gaW5pdGlhbGl6YXRpb24gdmlhIGB0ZHhfdGRfaW5pdGAsIHRoZSBgdGR4X3NldF9taXJyb3Jfcm9vdF9sZXZlbGAgZnVuY3Rpb24gaXMgd2hhdCBhY3R1YWxseSBzZXRzIGBrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbGAgdG8gZWl0aGVyIDQgb3IgNSwgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpY3MsIEkgYXNzdW1lLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgd2hlcmUgaXQncyAqdXNlZCouIEkgc2VlIGl0J3MgYWNjZXNzZWQgd2l0aGluIGBrdm1fbW11X2dldF90ZHBfbGV2ZWwodmNwdSlgLiBIZXJlLCB0aGVyZSdzIGEgY2hlY2sgdXNpbmcgYGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtXHUwMDNla3ZtKWAuIEFzc3VtaW5nIHRoZSBtaXJyb3IgaXMgZW5hYmxlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGBtaXJyb3Jfcm9vdF9sZXZlbGAuIENydWNpYWxseSwgdGhlcmUncyBhIGBXQVJOX09OX09OQ0VgIGhlcmUsIGVuc3VyaW5nIHRoYXQgYG1pcnJvcl9yb290X2xldmVsYCBpcyBhY3R1YWxseSBpbml0aWFsaXplZCwgd2hpY2ggc2hvdWxkIGJlIGZpbmUgaWYgY2FsbGVkIGFmdGVyIGB0ZHhfdGRfaW5pdGAuXG5cbk5leHQsIEkgc2VlIGl0J3MgdXNlZCBpbiBgdGR4X2xvYWRfbW11X3BnZGAuIFRoZXJlJ3MgYSBgS1ZNX0JVR19PTmAgaGVyZS4gVGhpcyBpcyBhIGNyaXRpY2FsIGNoZWNrISBJdCBhc3NlcnRzIHRoYXQgdGhlIHBhZ2UgZ2xvYmFsIGRpcmVjdG9yeSAoUEdEKSBsZXZlbCBtYXRjaGVzIGB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsYC4gVGhpcyBpcyBsaWtlbHkgYSBrZXkgY29uc2lzdGVuY3kgY2hlY2sgdG8gZW5zdXJlIHRoZSBNTVUgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgdW5kZXIgVERYLlxuXG5GaW5hbGx5LCBpbiBgX19rdm1fbW11X2NyZWF0ZWAsIEkgbm90aWNlIHRoZXJlJ3MgYSBjb25kaXRpb25hbCByZXR1cm4gaWYgVERYIGlzIGVuYWJsZWQgYW5kIHRoZSBtYXggVERQIGxldmVsIGlzIGdyZWF0ZXIgdGhhbiBgUFQzMkVfUk9PVF9MRVZFTGAuIFRoaXMgY291bGQgYmUgaW1wb3J0YW50IHRvIHRoZSBtaXJyb3IgbGV2ZWwgY2FsY3VsYXRpb25zLlxuXG5Pa2F5LCBJJ3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUgZGlyZWN0IHVzZXMuIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCBhIGNvbXByZWhlbnNpdmUgcGljdHVyZS4gTGV0IG1lIHF1aWNrbHkgc2NhbiB0aGUgY29kZWJhc2UgZm9yIGFueSBvdGhlciByZWZlcmVuY2VzIHRvIGBtaXJyb3Jfcm9vdF9sZXZlbGAsIGFzIHdlbGwgYXMgdGhvc2Ugbm93LXJlbW92ZWQgYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAgYW5kIGBrdm1faGFzX21pcnJvcmVkX3RkcGAuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIGluZGlyZWN0IGltcGFjdHMgSSd2ZSBtaXNzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NjYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNjoxMS4zNTk2Nzk3NzhaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTY1ODE0MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlycm9yX3Jvb3RfbGV2ZWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0xMTYxPXN0cnVjdCBrdm1fYXJjaCB7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTE0MDgtXFx0Z2ZuX3QgZ2ZuX2RpcmVjdF9iaXRzO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MTQwOTpcXHRpbnQgbWlycm9yX3Jvb3RfbGV2ZWw7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xNDEwLVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01OTU0PXN0YXRpYyBpbmxpbmUgaW50IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NjYtXFx0aWYgKGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtXFx1MDAzZWt2bSkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5Njc6XFx0ICAgICFXQVJOX09OX09OQ0UoIXZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbCkpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTY4OlxcdFxcdHJldHVybiB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWw7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTY5LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0xNjA3PXZvaWQgdGR4X2xvYWRfbW11X3BnZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGhwYV90IHJvb3RfaHBhLCBpbnQgcGdkX2xldmVsKVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTYwOC17XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNjA5OlxcdGlmIChLVk1fQlVHX09OKHBnZF9sZXZlbCAhPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWwsIHZjcHUtXFx1MDAzZWt2bSkpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNjEwLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9Mjc1Mz1ERUZJTkVfQ0xBU1ModGR4X3ZtX3N0YXRlX2d1YXJkLCB0ZHhfdm1fc3RhdGVfZ3VhcmRfdCxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjc1Ni1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjI3NTc6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBpbnQgbGV2ZWwpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yNzU4LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjc2MC1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjI3NjE6XFx0a3ZtLVxcdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsID0gbGV2ZWw7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yNzYyLVxcdGt2bS1cXHUwMDNlYXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBncGFfdG9fZ2ZuKEJJVF9VTEwobGV2ZWwgPT0gNCA/IDQ3IDogNTEpKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9Mjc2NT1zdGF0aWMgaW50IHRkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI4MjctXFx0aWYgKHRkX3BhcmFtcy1cXHUwMDNlY29uZmlnX2ZsYWdzIFxcdTAwMjYgVERYX0NPTkZJR19GTEFHU19NQVhfR1BBVylcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjI4Mjg6XFx0XFx0dGR4X3NldF9taXJyb3Jfcm9vdF9sZXZlbChrdm0sIDUpO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjgyOS1cXHRlbHNlXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoyODMwOlxcdFxcdHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA0KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI4MzEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM2OjEzLjI3NjI2ODU1NloiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDE4MzM1MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSBNTVUgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgS1ZNIE1NVSBjb25maWd1cmF0aW9uIHRvIHRyb3VibGVzaG9vdCB0aGlzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBjb3VwbGUgb2Yga2V5IGZ1bmN0aW9uczogYF9fa3ZtX21tdV9jcmVhdGVgIGFuZCBga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpYC4gSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIHdheSB0aGUgTU1VIGlzIGJlaW5nIHNldCB1cCBpbiB0aGlzIGluc3RhbmNlLCBhbmQgdGhhdCBsaWtlbHkgc3RhcnRzIHdpdGggdGhlIGNyZWF0aW9uIHByb2Nlc3MuIEkgZXhwZWN0IGBfX2t2bV9tbXVfY3JlYXRlYCB0byBiZSB3aGVyZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGluaXRpYWxpemVkIGFuZCB0aGUgaW5pdGlhbCBwYWdlIHRhYmxlcyBhcmUgZXN0YWJsaXNoZWQuIFRoZW4gSSB3YW50IHRvIGtub3cgd2hhdCB0aGUgbWF4aW11bSBURFAgbGV2ZWwgaXMgYmVjYXVzZSB0aGF0IHdpbGwgZWZmZWN0IHdoYXQgaXMgZ29pbmcgb24gYXQgdGhlIGhhcmR3YXJlIGxldmVsLiBGcm9tIHRoZXJlIEkgY2FuIGNoZWNrIG9uIHBvc3NpYmxlIGludGVyYWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NTAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNjoxNS4yOTQ2MDc2NzZaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDE1MjkxOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vY3B1aWQuYz0xNDE4PXN0YXRpYyBpbmxpbmUgaW50IF9fZG9fY3B1aWRfZnVuYyhzdHJ1Y3Qga3ZtX2NwdWlkX2FycmF5ICphcnJheSwgdTMyIGZ1bmN0aW9uKVxcbi0tXFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTgxMS1cXHRcXHRcXHRnX3BoeXNfYXMgPSBwaHlzX2FzO1xcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE4MTI6XFx0XFx0XFx0aWYgKGt2bV9tbXVfZ2V0X21heF90ZHBfbGV2ZWwoKSBcXHUwMDNjIDUpXFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTgxMy1cXHRcXHRcXHRcXHRnX3BoeXNfYXMgPSBtaW4oZ19waHlzX2FzLCA0OFUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS5oPTk5PXN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfaGFzX21iZWMoc3RydWN0IGt2bV9tbXUgKm1tdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUuaC0xMDMtXFxuYXJjaC94ODYva3ZtL21tdS5oOjEwNDp1OCBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKHZvaWQpO1xcbmFyY2gveDg2L2t2bS9tbXUuaC0xMDUtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTQ9c3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk3Ni1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5Nzc6dTgga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCh2b2lkKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk3OC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY4MTM9c3RhdGljIGludCBfX2t2bV9tbXVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXUgKm1tdSwgc3RydWN0IGt2bV9wYWdld2FsayAqdylcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjgzOS1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY4NDA6XFx0aWYgKHRkcF9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IGt2bV9tbXVfZ2V0X21heF90ZHBfbGV2ZWwoKSBcXHUwMDNlIFBUMzJFX1JPT1RfTEVWRUwpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODQxLVxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNjoxNy4wMzYxNDQyMTdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU5MDk2NzkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBLVk0ncyBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGhpbmtpbmcsIGxldCdzIHpvb20gaW4gb24gYSBjb3VwbGUgb2YgY3J1Y2lhbCBLVk0gTU1VIGZ1bmN0aW9uczogYGt2bV9tbXVfZ2V0X21heF90ZHBfbGV2ZWxgIGFuZCBgX19rdm1fbW11X2NyZWF0ZWAuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGtleSB0byBncmFzcGluZyBob3cgS1ZNIG1hbmFnZXMgZ3Vlc3QgcGh5c2ljYWwgbWVtb3J5IGFuZCB0cmFuc2xhdGVzIGl0IHRvIGhvc3QgcGh5c2ljYWwgbWVtb3J5LCBwYXJ0aWN1bGFybHkgdGhlIGhhbmRsaW5nIG9mIFRyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXJzIChUTEJzKSBhbmQgbmVzdGVkIHBhZ2luZy4gYGt2bV9tbXVfZ2V0X21heF90ZHBfbGV2ZWxgIGxpa2VseSByZXZlYWxzIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBUcmFuc2xhdGlvbiBEZXB0aCBQYWdpbmcgbGV2ZWwsIGhpbnRpbmcgYXQgdGhlIGRlcHRoIG9mIHRoZSBwYWdlIHRhYmxlIGhpZXJhcmNoeSBLVk0gY2FuIHN1cHBvcnQgYW5kIGhvdyBuZXN0ZWQgcGFnaW5nIGlzIGhhbmRsZWQsIHBvc3NpYmx5IGEgZnVuY3Rpb24gcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgZ3Vlc3QgcGFnZSB0YWJsZXMgYW5kIGhvdyB0aGV5IGFyZSB0cmFuc2xhdGVkIHRvIGhvc3QgcGFnZSB0YWJsZXMuIEFuZCBgX19rdm1fbW11X2NyZWF0ZWAsIHdlbGwgdGhhdCdzIHRoZSByZWFsIG1lYXQgYW5kIHBvdGF0b2VzIC0gdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBNTVUgc3RydWN0dXJlIGdldHMgaW5pdGlhbGl6ZWQgYW5kIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbXMgZm9yIGhhbmRsaW5nIGd1ZXN0IG1lbW9yeSBhcmUgc2V0IHVwLiBJJ20ga2VlbiB0byBkaXNzZWN0IGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QgdG8gc2VlIGhvdyBLVk0gaGFuZGxlcyBtZW1vcnkgdmlydHVhbGl6YXRpb24gaW4gdGhlIG1vc3QgZnVuZGFtZW50YWwgd2F5LCBpbmNsdWRpbmcgdGhpbmdzIGxpa2UgcGFnZSB0YWJsZSB3YWxrcywgc2hhZG93aW5nLCBhbmQgdGhlIGRpcnR5L2FjY2Vzc2VkIGJpdCB0cmFja2luZy4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHRoZSBkZXRhaWxzIG9mIHRoZSBNTVUgY3JlYXRpb24sIHRvIHNlZSB3aGljaCBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zIGFyZSB1dGlsaXplZCBpbiBLVk0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjkwLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzY6MTkuNjI3MTE0NjM0WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4OTM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU5NzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU5NzA6XFx0XFx0LyogVXNlIDUtbGV2ZWwgVERQIGlmIGFuZCBvbmx5IGlmIGl0J3MgdXNlZnVsL25lY2Vzc2FyeS4gKi9cXG41OTcxOlxcdFxcdGlmIChtYXhfdGRwX2xldmVsID09IDUgXFx1MDAyNlxcdTAwMjYgY3B1aWRfbWF4cGh5YWRkcih2Y3B1KSBcXHUwMDNjPSA0OClcXG41OTcyOlxcdFxcdFxcdHJldHVybiA0O1xcbjU5NzM6XFx0XFxuNTk3NDpcXHRcXHRyZXR1cm4gbWF4X3RkcF9sZXZlbDtcXG41OTc1OlxcdH1cXG41OTc2OlxcdFxcbjU5Nzc6XFx0dTgga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCh2b2lkKVxcbjU5Nzg6XFx0e1xcbjU5Nzk6XFx0XFx0cmV0dXJuIHRkcF9yb290X2xldmVsID8gdGRwX3Jvb3RfbGV2ZWwgOiBtYXhfdGRwX2xldmVsO1xcbjU5ODA6XFx0fVxcbjU5ODE6XFx0XFxuNTk4MjpcXHRzdGF0aWMgdW5pb24ga3ZtX21tdV9wYWdlX3JvbGVcXG41OTgzOlxcdGt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbjU5ODQ6XFx0XFx0XFx0XFx0XFx0dW5pb24ga3ZtX2NwdV9yb2xlIGNwdV9yb2xlKVxcbjU5ODU6XFx0e1xcbjU5ODY6XFx0XFx0dW5pb24ga3ZtX21tdV9wYWdlX3JvbGUgcm9sZSA9IHswfTtcXG41OTg3OlxcdFxcbjU5ODg6XFx0XFx0cm9sZS5jcjBfd3AgPSB0cnVlO1xcbjU5ODk6XFx0XFx0cm9sZS5jcjRfc21lcCA9IGt2bV94ODZfY2FsbCh0ZHBfaGFzX3NtZXApKHZjcHUtXFx1MDAzZWt2bSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM2OjE5LjYyNzQwNzA4NFoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTEwMzQxNDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgS01TQU4gSW1wbGljYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGxvb2tpbmcgcHJvbWlzaW5nLCBidXQgd2UgbmVlZCB0byBiZSB0aG9yb3VnaC4gRmlyc3QsIGxldCdzIG1ldGhvZGljYWxseSBjaGVjayBlYWNoIEtNU0FOIHJlcXVpcmVtZW50LiBJcyB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGFueSBrZXJuZWwgc3RydWN0dXJlIGRhdGEgdGhhdCBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIHdpdGhvdXQgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQ/IE5vLCBub3RoaW5nIGlzIG1vZGlmaWVkIG9yIGludHJvZHVjZWQuIFRoZSBuZXh0IGlzIHRvIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGJlaW5nIHJlYWQuIFRoZSBvbmx5IG5ldyBhZGRpdGlvbiBpcyBgbWlycm9yX3Jvb3RfbGV2ZWxgIHdpdGhpbiBgc3RydWN0IGt2bV9hcmNoYC4gR2l2ZW4gdGhhdCBgc3RydWN0IGt2bWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrdnphbGxvY2AgaW4gYGt2bV9hcmNoX2FsbG9jX3ZtYCwgYG1pcnJvcl9yb290X2xldmVsYCBpcyBndWFyYW50ZWVkIHRvIGJlIHplcm9lZCBkdXJpbmcgVk0gY3JlYXRpb24uIFRoYXQncyBhIGdvb2Qgc3RhcnQuXG5cbk5leHQsIGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLiBgbWlycm9yX3Jvb3RfbGV2ZWxgIGlzIGluaXRpYWxpemVkIHRvIHplcm8gdXBvbiBhbGxvY2F0aW9uIGFuZCBpcyBleHBsaWNpdGx5IHNldCBsYXRlciB2aWEgYHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoKWAuIE5vIHdvcnJpZXMgdGhlcmUuIEhvdyBhYm91dCBwb3RlbnRpYWwgbW9kaWZpY2F0aW9ucyB0byBib3VuZHMgb3IgbGVuZ3RocyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8sIG5vdCBhdCBhbGwuIFRoaXMgcGF0Y2ggcmVmYWN0b3JzIGhvdyB3ZSBkZXRlcm1pbmUgdGhlIFREUCBsZXZlbCBmb3IgVERYIFZNcyB3aXRoIG1pcnJvcmVkIHBhZ2UgdGFibGVzLiBJbnN0ZWFkIG9mIHF1ZXJ5aW5nIENQVUlEIHRvIGRldGVybWluZSB0aGUgZ3Vlc3QncyBtYXggcGh5c2ljYWwgYWRkcmVzcywgaXQgZXhwbGljaXRseSByZWNvcmRzIHRoZSBgbWlycm9yX3Jvb3RfbGV2ZWxgIGNvbmZpZ3VyZWQgZHVyaW5nIFREWCBWTSBpbml0aWFsaXphdGlvbiBpbiBgdGR4X3RkX2luaXRgIGFuZCB1c2VzIHRoYXQuIFNvIGl0IGxvb2tzIGxpa2UgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBhbmQgd2VsbC1kZWZpbmVkLlxuXG5GaW5hbGx5LCBhcmUgdGhlcmUgYW55IGluZm8tbGVhayBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbnl3aGVyZT8gTm8sIGZyb20gd2hhdCBJIGNhbiBzZWUsIHdlJ3JlIGluIHRoZSBjbGVhci5cblxuU28sIGluIGNvbmNsdXNpb24sIGl0IHNlZW1zIHRoYXQgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBidWlsZHMgc2hvdWxkIGJlIGZ1bGx5IHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3VlcyDigJMgYW55IGFzc2VydGlvbnMsIGBXQVJOX09OYHMsIGxvZ2ljIGVycm9ycy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGhlcmUgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgcnVuLlxuXG5Ob3csIGEgcXVpY2sgZG91YmxlLWNoZWNrOiBgTmVlZHNLTVNBTmAgc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC5cblxuT2theSwgSSdtIGNvbmZpZGVudCBpbiBteSBhbmFseXNpcy4gVGltZSB0byB3cml0ZSB1cCBhIGNvbmNpc2UsIGRldGFpbGVkIHJlYXNvbmluZyBmb3Igc2V0dGluZyB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMjcsIk91dHB1dFRva2VucyI6MjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzY6MjQuNTM3NzUyMzU4WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaG93IEtWTSBkZXRlcm1pbmVzIHRoZSBURFAgbGV2ZWwgZm9yIFZNcyB3aXRoIG1pcnJvcmVkIHBhZ2UgdGFibGVzIChzdWNoIGFzIFREWCBWTXMpLCBieSB0cmFja2luZyB0aGUgbWlycm9yIHJvb3QgbGV2ZWwgZXhwbGljaXRseSBpbiBgc3RydWN0IGt2bV9hcmNoYCAoYG1pcnJvcl9yb290X2xldmVsYCkgc2V0IGR1cmluZyBURCBpbml0aWFsaXphdGlvbiBpbnN0ZWFkIG9mIHF1ZXJ5aW5nIHRoZSBndWVzdCBDUFVJRC5cXG5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlOiBgc3RydWN0IGt2bV9hcmNoYCBpcyBwYXJ0IG9mIGBzdHJ1Y3Qga3ZtYCwgd2hpY2ggaXMgYWxsb2NhdGVkIHdpdGggYGt2emFsbG9jKClgIGluIGBrdm1fYXJjaF9hbGxvY192bSgpYCwgZ3VhcmFudGVlaW5nIHRoYXQgYG1pcnJvcl9yb290X2xldmVsYCBpcyB6ZXJvLWluaXRpYWxpemVkLlxcbi0gTm8ga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczogVGhlIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgbmV3IGRhdGEgdG8gdXNlciBzcGFjZSB2aWEgY29weV90b191c2VyIG9yIGlvY3RsIG91dHB1dHMuXFxuLSBObyB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBvciBidWZmZXIgYWNjZXNzOiBMb2dpYyBjaGVja3Mgb3BlcmF0ZSBvbiBmdWxseSBpbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGFuZCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuXFxuXFxuVGhlcmVmb3JlLCB0aGUgY2hhbmdlcyBwcmVzZW50IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBydW4gaXMgbm90IG5lZWRlZDsgc3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyBLVk0gZGV0ZXJtaW5lcyB0aGUgVERQIGxldmVsIGZvciBWTXMgd2l0aCBtaXJyb3JlZCBwYWdlIHRhYmxlcyAoc3VjaCBhcyBURFggVk1zKSwgYnkgdHJhY2tpbmcgdGhlIG1pcnJvciByb290IGxldmVsIGV4cGxpY2l0bHkgaW4gYHN0cnVjdCBrdm1fYXJjaGAgKGBtaXJyb3Jfcm9vdF9sZXZlbGApIHNldCBkdXJpbmcgVEQgaW5pdGlhbGl6YXRpb24gaW5zdGVhZCBvZiBxdWVyeWluZyB0aGUgZ3Vlc3QgQ1BVSUQuXFxuXFxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZTogYHN0cnVjdCBrdm1fYXJjaGAgaXMgcGFydCBvZiBgc3RydWN0IGt2bWAsIHdoaWNoIGlzIGFsbG9jYXRlZCB3aXRoIGBrdnphbGxvYygpYCBpbiBga3ZtX2FyY2hfYWxsb2Nfdm0oKWAsIGd1YXJhbnRlZWluZyB0aGF0IGBtaXJyb3Jfcm9vdF9sZXZlbGAgaXMgemVyby1pbml0aWFsaXplZC5cXG4tIE5vIGtlcm5lbC10by11c2VyIGluZm8gbGVha3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IG5ldyBkYXRhIHRvIHVzZXIgc3BhY2UgdmlhIGNvcHlfdG9fdXNlciBvciBpb2N0bCBvdXRwdXRzLlxcbi0gTm8gdW5pbml0aWFsaXplZCBicmFuY2hpbmcgb3IgYnVmZmVyIGFjY2VzczogTG9naWMgY2hlY2tzIG9wZXJhdGUgb24gZnVsbHkgaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhbmQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLlxcblxcblRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgcHJlc2VudCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gcnVuIGlzIG5vdCBuZWVkZWQ7IHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow4z9jj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 23:32:38 +0000 UTC FinishedAt: 2026-09-03 23:36:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "INTEL_TDX_HOST", "KVM_INTEL_TDX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "INTEL_TDX_HOST", "KVM_INTEL_TDX" ], "series_id": "0e53dc15-5a06-49a4-b1a9-2ec706ec3576" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_mmu_create", "kvm_init_mmu", "kvm_init_shadow_npt_mmu", "tdx_load_mmu_pgd", "tdx_td_init" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtJTlRFTF9URFhfSE9TVCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUxfVERYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX21tdV9jcmVhdGUmIzM0OywKICAgICYjMzQ7a3ZtX2luaXRfbW11JiMzNDssCiAgICAmIzM0O2t2bV9pbml0X3NoYWRvd19ucHRfbW11JiMzNDssCiAgICAmIzM0O3RkeF9sb2FkX21tdV9wZ2QmIzM0OywKICAgICYjMzQ7dGR4X3RkX2luaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgaG93IEtWTSBkZXRlcm1pbmVzIHRoZSBURFAgbGV2ZWwgZm9yIFZNcyB3aXRoIG1pcnJvcmVkIHBhZ2UgdGFibGVzIChzdWNoIGFzIFREWCBWTXMpLCBieSB0cmFja2luZyB0aGUgbWlycm9yIHJvb3QgbGV2ZWwgZXhwbGljaXRseSBpbiBgc3RydWN0IGt2bV9hcmNoYCAoYG1pcnJvcl9yb290X2xldmVsYCkgc2V0IGR1cmluZyBURCBpbml0aWFsaXphdGlvbiBpbnN0ZWFkIG9mIHF1ZXJ5aW5nIHRoZSBndWVzdCBDUFVJRC5cblxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZTogYHN0cnVjdCBrdm1fYXJjaGAgaXMgcGFydCBvZiBgc3RydWN0IGt2bWAsIHdoaWNoIGlzIGFsbG9jYXRlZCB3aXRoIGBrdnphbGxvYygpYCBpbiBga3ZtX2FyY2hfYWxsb2Nfdm0oKWAsIGd1YXJhbnRlZWluZyB0aGF0IGBtaXJyb3Jfcm9vdF9sZXZlbGAgaXMgemVyby1pbml0aWFsaXplZC5cbi0gTm8ga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczogVGhlIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgbmV3IGRhdGEgdG8gdXNlciBzcGFjZSB2aWEgY29weV90b191c2VyIG9yIGlvY3RsIG91dHB1dHMuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIG9yIGJ1ZmZlciBhY2Nlc3M6IExvZ2ljIGNoZWNrcyBvcGVyYXRlIG9uIGZ1bGx5IGluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgYW5kIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy5cblxuVGhlcmVmb3JlLCB0aGUgY2hhbmdlcyBwcmVzZW50IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBydW4gaXMgbm90IG5lZWRlZDsgc3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSB4ODYgTU1VIHJvb3QgbGV2ZWwgY2FsY3VsYXRpb24gYW5kIFREUCBjcmVhdGlvbiBsb2dpYyAoX19rdm1fbW11X2NyZWF0ZSwga3ZtX21tdV9nZXRfdGRwX2xldmVsKSBhbmQgdXBkYXRlcyBURFggbWlycm9yZWQgcm9vdCBsZXZlbCBoYW5kbGluZyAodGR4X2xvYWRfbW11X3BnZCwgdGR4X3RkX2luaXQpLiBJdCBhbHNvIGFkZHMgYSBuZXcgV0FSTl9PTl9PTkNFIGFzc2VydGlvbiBmb3IgdW5pbml0aWFsaXplZCBtaXJyb3Jfcm9vdF9sZXZlbC4gVGhlc2UgY29kZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGR1cmluZyBLVk0gVk0gYW5kIHZDUFUgaW5pdGlhbGl6YXRpb24vbGlmZWN5Y2xlIG9wZXJhdGlvbnMgb24geDg2XzY0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzFkMDhhMTA5NTI5YzVmMjQ2YTVmN2FhZWJiZTk5NzFkZWQ1NDE1YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjM6MzQ6MzggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDY4M2JiOGJmNDNhOTQuLmVkZDVhZDJlNWI1MmQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMTQwNiw2ICYjNDM7MTQwNiw3IEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgc3BsaXRfZGVzY19jYWNoZTtcbiBcbiBcdGdmbl90IGdmbl9kaXJlY3RfYml0cztcbiYjNDM7XHRpbnQgbWlycm9yX3Jvb3RfbGV2ZWw7XG4gXG4gXHQvKlxuIFx0ICogU2l6ZSBvZiB0aGUgQ1BVJiMzOTtzIGRpcnR5IGxvZyBidWZmZXIsIGkuZS4gVk1YJiMzOTtzIFBNTCBidWZmZXIuIEEgWmVyb1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5jIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbmluZGV4IGRkYjAyMmNiMjAzYTIuLjM0YzYwOWE2MGVlZmYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbkBAIC00ODMsMjAgJiM0Mzs0ODMsNiBAQCBpbnQgY3B1aWRfcXVlcnlfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4gMzY7XG4gfVxuIFxuLWludCBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi1cdHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICpiZXN0O1xuLVxuLVx0YmVzdCA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KHZjcHUsIDB4ODAwMDAwMDApO1xuLVx0aWYgKCFiZXN0IHx8IGJlc3QtXHUwMDNlZWF4IFx1MDAzYyAweDgwMDAwMDA4KVxuLVx0XHRnb3RvIG5vdF9mb3VuZDtcbi1cdGJlc3QgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDA4KTtcbi1cdGlmIChiZXN0KVxuLVx0XHRyZXR1cm4gKGJlc3QtXHUwMDNlZWF4IFx1MDAzZVx1MDAzZSAxNikgXHUwMDI2IDB4ZmY7XG4tbm90X2ZvdW5kOlxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qXG4gICogVGhpcyBcJiMzNDtyYXdcJiMzNDsgdmVyc2lvbiByZXR1cm5zIHRoZSByZXNlcnZlZCBHUEEgYml0cyB3aXRob3V0IGFueSBhZGp1c3RtZW50cyBmb3JcbiAgKiBlbmNyeXB0aW9uIHRlY2hub2xvZ2llcyB0aGF0IHVzdXJwIGJpdHMuICBUaGUgcmF3IG1hc2sgc2hvdWxkIGJlIHVzZWQgaWYgYW5kXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmggYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaFxuaW5kZXggOGQ4NjNmNDU1ODVkZS4uNDZiZmU4Njk5ZTY3ZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaFxuQEAgLTY4LDcgJiM0Mzs2OCw2IEBAIHZvaWQgX19pbml0IGt2bV9pbml0X3hzdGF0ZV9zaXplcyh2b2lkKTtcbiB1MzIgeHN0YXRlX3JlcXVpcmVkX3NpemUodTY0IHhzdGF0ZV9idiwgYm9vbCBjb21wYWN0ZWQpO1xuIFxuIGludCBjcHVpZF9xdWVyeV9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4taW50IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHU2NCBrdm1fdmNwdV9yZXNlcnZlZF9ncGFfYml0c19yYXcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiBzdGF0aWMgaW5saW5lIGludCBjcHVpZF9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuaW5kZXggMDY0ZWNjMzNiOTI2Ny4uZDQzYjhiNmMzYjE3OSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC01OTUzLDE5ICYjNDM7NTk1MywyMiBAQCB2b2lkIF9fa3ZtX21tdV9yZWZyZXNoX3Bhc3N0aHJvdWdoX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0aW50IG1heHBhO1xuLVxuLVx0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTSlcbi1cdFx0bWF4cGEgPSBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIodmNwdSk7XG4tXHRlbHNlXG4tXHRcdG1heHBhID0gY3B1aWRfbWF4cGh5YWRkcih2Y3B1KTtcbi1cbiBcdC8qIHRkcF9yb290X2xldmVsIGlzIGFyY2hpdGVjdHVyZSBmb3JjZWQgbGV2ZWwsIHVzZSBpdCBpZiBub256ZXJvICovXG4gXHRpZiAodGRwX3Jvb3RfbGV2ZWwpXG4gXHRcdHJldHVybiB0ZHBfcm9vdF9sZXZlbDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSBWTSBoYXMgbWlycm9yIHJvb3RzLCB0aGVuIHRoZSByb290IGxldmVsIGlzIHByZWRlZmluZWQgYXMgdGhlXG4mIzQzO1x0ICogbWlycm9yIHJvb3QgKGFuZCBieSBleHRlbnNpb24gdGhlIG5vcm1hbCByb290KSBuZWVkcyB0byBtYXRjaCB0aGVcbiYjNDM7XHQgKiByb290IGxldmVsIHRoYXQgd2FzIGNvbmZpZ3VyZWQgZm9yIHRoZSBleHRlcm5hbCBwYWdlIHRhYmxlcyB0aGF0IGFyZVxuJiM0MztcdCAqIGJlaW5nIG1pcnJvcmVkIGJ5IEtWTS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoa3ZtX2hhc19taXJyb3JlZF90ZHAodmNwdS1cdTAwM2Vrdm0pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhV0FSTl9PTl9PTkNFKCF2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsKSlcbiYjNDM7XHRcdHJldHVybiB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsO1xuJiM0MztcbiBcdC8qIFVzZSA1LWxldmVsIFREUCBpZiBhbmQgb25seSBpZiBpdCYjMzk7cyB1c2VmdWwvbmVjZXNzYXJ5LiAqL1xuLVx0aWYgKG1heF90ZHBfbGV2ZWwgPT0gNSBcdTAwMjZcdTAwMjYgbWF4cGEgXHUwMDNjPSA0OClcbiYjNDM7XHRpZiAobWF4X3RkcF9sZXZlbCA9PSA1IFx1MDAyNlx1MDAyNiBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpIFx1MDAzYz0gNDgpXG4gXHRcdHJldHVybiA0O1xuIFxuIFx0cmV0dXJuIG1heF90ZHBfbGV2ZWw7XG5AQCAtNjgzNCw3ICYjNDM7NjgzNyw3IEBAIHN0YXRpYyBpbnQgX19rdm1fbW11X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11ICptbXUsIHN0cnVjdCBrXG4gXHQgKiBvdGhlciBleGNlcHRpb24gaXMgZm9yIHNoYWRvd2luZyBMMSYjMzk7cyAzMi1iaXQgb3IgUEFFIE5QVCBvbiA2NC1iaXRcbiBcdCAqIEtWTTsgdGhhdCBob3Jyb3IgaXMgaGFuZGxlZCBvbi1kZW1hbmQgYnkgbW11X2FsbG9jX3NwZWNpYWxfcm9vdHMoKS5cbiBcdCAqL1xuLVx0aWYgKHRkcF9lbmFibGVkIFx1MDAyNlx1MDAyNiBrdm1fbW11X2dldF90ZHBfbGV2ZWwodmNwdSkgXHUwMDNlIFBUMzJFX1JPT1RfTEVWRUwpXG4mIzQzO1x0aWYgKHRkcF9lbmFibGVkIFx1MDAyNlx1MDAyNiBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKCkgXHUwMDNlIFBUMzJFX1JPT1RfTEVWRUwpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfRE1BMzIpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5pbmRleCBiMjcyYzIwNTg2YTc0Li5hMGJjOWY4MThmNDM5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuQEAgLTU2LDkgJiM0Mzs1Niw2IEBAXG4gYm9vbCBlbmFibGVfdGR4IF9fcm9fYWZ0ZXJfaW5pdDtcbiBtb2R1bGVfcGFyYW1fbmFtZWQodGR4LCBlbmFibGVfdGR4LCBib29sLCAwNDQ0KTtcbiBcbi0jZGVmaW5lIFREWF9TSEFSRURfQklUX1BXTF81IGdwYV90b19nZm4oQklUX1VMTCg1MSkpXG4tI2RlZmluZSBURFhfU0hBUkVEX0JJVF9QV0xfNCBncGFfdG9fZ2ZuKEJJVF9VTEwoNDcpKVxuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICp0ZHhfc3lzaW5mbztcbiBcbiB2b2lkIHRkaF92cF9yZF9mYWlsZWQoc3RydWN0IHZjcHVfdGR4ICp0ZHgsIGNoYXIgKnVjbGFzcywgdTMyIGZpZWxkLCB1NjQgZXJyKVxuQEAgLTE2MDksMTAgJiM0MzsxNjA2LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdGR2bWNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHZvaWQgdGR4X2xvYWRfbW11X3BnZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGhwYV90IHJvb3RfaHBhLCBpbnQgcGdkX2xldmVsKVxuIHtcbi1cdHU2NCBzaGFyZWRfYml0ID0gKHBnZF9sZXZlbCA9PSA1KSA/IFREWF9TSEFSRURfQklUX1BXTF81IDpcbi1cdFx0XHQgIFREWF9TSEFSRURfQklUX1BXTF80O1xuLVxuLVx0aWYgKEtWTV9CVUdfT04oc2hhcmVkX2JpdCAhPSBrdm1fZ2ZuX2RpcmVjdF9iaXRzKHZjcHUtXHUwMDNla3ZtKSwgdmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdGlmIChLVk1fQlVHX09OKHBnZF9sZXZlbCAhPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsLCB2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHRkX3ZtY3Nfd3JpdGU2NCh0b190ZHgodmNwdSksIFNIQVJFRF9FUFRfUE9JTlRFUiwgcm9vdF9ocGEpO1xuQEAgLTI3NjAsNiAmIzQzOzI3NTQsMTQgQEAgREVGSU5FX0NMQVNTKHRkeF92bV9zdGF0ZV9ndWFyZCwgdGR4X3ZtX3N0YXRlX2d1YXJkX3QsXG4gXHQgICAgIGlmICghSVNfRVJSKF9UKSkgdGR4X3JlbGVhc2Vfdm1fc3RhdGVfbG9ja3MoX1QpLFxuIFx0ICAgICB0ZHhfYWNxdWlyZV92bV9zdGF0ZV9sb2Nrcyhrdm0pLCBzdHJ1Y3Qga3ZtICprdm0pO1xuIFxuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGR4X3NldF9taXJyb3Jfcm9vdF9sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGludCBsZXZlbClcbiYjNDM7e1xuJiM0MztcdEJVSUxEX0JVR19PTihsZXZlbCAhPSA0IFx1MDAyNlx1MDAyNiBsZXZlbCAhPSA1KTtcbiYjNDM7XG4mIzQzO1x0a3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWwgPSBsZXZlbDtcbiYjNDM7XHRrdm0tXHUwMDNlYXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBncGFfdG9fZ2ZuKEJJVF9VTEwobGV2ZWwgPT0gNCA/IDQ3IDogNTEpKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHRkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXG4ge1xuIFx0c3RydWN0IGt2bV90ZHhfaW5pdF92bSBfX3VzZXIgKnVzZXJfZGF0YSA9IHU2NF90b191c2VyX3B0cihjbWQtXHUwMDNlZGF0YSk7XG5AQCAtMjgyMyw5ICYjNDM7MjgyNSw5IEBAIHN0YXRpYyBpbnQgdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZClcbiBcdGt2bV90ZHgtXHUwMDNleGZhbSA9IHRkX3BhcmFtcy1cdTAwM2V4ZmFtO1xuIFxuIFx0aWYgKHRkX3BhcmFtcy1cdTAwM2Vjb25maWdfZmxhZ3MgXHUwMDI2IFREWF9DT05GSUdfRkxBR1NfTUFYX0dQQVcpXG4tXHRcdGt2bS1cdTAwM2VhcmNoLmdmbl9kaXJlY3RfYml0cyA9IFREWF9TSEFSRURfQklUX1BXTF81O1xuJiM0MztcdFx0dGR4X3NldF9taXJyb3Jfcm9vdF9sZXZlbChrdm0sIDUpO1xuIFx0ZWxzZVxuLVx0XHRrdm0tXHUwMDNlYXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBURFhfU0hBUkVEX0JJVF9QV0xfNDtcbiYjNDM7XHRcdHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA0KTtcbiBcbiBcdGt2bV90ZHgtXHUwMDNlc3RhdGUgPSBURF9TVEFURV9JTklUSUFMSVpFRDtcbiBvdXQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0lOVEVMX1REWF9IT1NUJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTF9URFgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fbW11X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtrdm1faW5pdF9tbXUmIzM0OywKICAgICYjMzQ7a3ZtX2luaXRfc2hhZG93X25wdF9tbXUmIzM0OywKICAgICYjMzQ7dGR4X2xvYWRfbW11X3BnZCYjMzQ7LAogICAgJiMzNDt0ZHhfdGRfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0geDg2IE1NVSByb290IGxldmVsIGNhbGN1bGF0aW9uIGFuZCBURFAgY3JlYXRpb24gbG9naWMgKF9fa3ZtX21tdV9jcmVhdGUsIGt2bV9tbXVfZ2V0X3RkcF9sZXZlbCkgYW5kIHVwZGF0ZXMgVERYIG1pcnJvcmVkIHJvb3QgbGV2ZWwgaGFuZGxpbmcgKHRkeF9sb2FkX21tdV9wZ2QsIHRkeF90ZF9pbml0KS4gSXQgYWxzbyBhZGRzIGEgbmV3IFdBUk5fT05fT05DRSBhc3NlcnRpb24gZm9yIHVuaW5pdGlhbGl6ZWQgbWlycm9yX3Jvb3RfbGV2ZWwuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBkdXJpbmcgS1ZNIFZNIGFuZCB2Q1BVIGluaXRpYWxpemF0aW9uL2xpZmVjeWNsZSBvcGVyYXRpb25zIG9uIHg4Nl82NC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDcxZDA4YTEwOTUyOWM1ZjI0NmE1ZjdhYWViYmU5OTcxZGVkNTQxNWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDIzOjM0OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggNjgzYmI4YmY0M2E5NC4uZWRkNWFkMmU1YjUyZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0xNDA2LDYgJiM0MzsxNDA2LDcgQEAgc3RydWN0IGt2bV9hcmNoIHsKIAlzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgc3BsaXRfZGVzY19jYWNoZTsKIAogCWdmbl90IGdmbl9kaXJlY3RfYml0czsKJiM0MzsJaW50IG1pcnJvcl9yb290X2xldmVsOwogCiAJLyoKIAkgKiBTaXplIG9mIHRoZSBDUFUmIzM5O3MgZGlydHkgbG9nIGJ1ZmZlciwgaS5lLiBWTVgmIzM5O3MgUE1MIGJ1ZmZlci4gQSBaZXJvCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vY3B1aWQuYyBiL2FyY2gveDg2L2t2bS9jcHVpZC5jCmluZGV4IGRkYjAyMmNiMjAzYTIuLjM0YzYwOWE2MGVlZmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9jcHVpZC5jCkBAIC00ODMsMjAgJiM0Mzs0ODMsNiBAQCBpbnQgY3B1aWRfcXVlcnlfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJcmV0dXJuIDM2OwogfQogCi1pbnQgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqYmVzdDsKLQotCWJlc3QgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDAwKTsKLQlpZiAoIWJlc3QgfHwgYmVzdC0mZ3Q7ZWF4ICZsdDsgMHg4MDAwMDAwOCkKLQkJZ290byBub3RfZm91bmQ7Ci0JYmVzdCA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KHZjcHUsIDB4ODAwMDAwMDgpOwotCWlmIChiZXN0KQotCQlyZXR1cm4gKGJlc3QtJmd0O2VheCAmZ3Q7Jmd0OyAxNikgJmFtcDsgMHhmZjsKLW5vdF9mb3VuZDoKLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIFRoaXMgJiMzNDtyYXcmIzM0OyB2ZXJzaW9uIHJldHVybnMgdGhlIHJlc2VydmVkIEdQQSBiaXRzIHdpdGhvdXQgYW55IGFkanVzdG1lbnRzIGZvcgogICogZW5jcnlwdGlvbiB0ZWNobm9sb2dpZXMgdGhhdCB1c3VycCBiaXRzLiAgVGhlIHJhdyBtYXNrIHNob3VsZCBiZSB1c2VkIGlmIGFuZApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmggYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaAppbmRleCA4ZDg2M2Y0NTU4NWRlLi40NmJmZTg2OTllNjdmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vY3B1aWQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaApAQCAtNjgsNyAmIzQzOzY4LDYgQEAgdm9pZCBfX2luaXQga3ZtX2luaXRfeHN0YXRlX3NpemVzKHZvaWQpOwogdTMyIHhzdGF0ZV9yZXF1aXJlZF9zaXplKHU2NCB4c3RhdGVfYnYsIGJvb2wgY29tcGFjdGVkKTsKIAogaW50IGNwdWlkX3F1ZXJ5X21heHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLWludCBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHU2NCBrdm1fdmNwdV9yZXNlcnZlZF9ncGFfYml0c19yYXcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogc3RhdGljIGlubGluZSBpbnQgY3B1aWRfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwppbmRleCAwNjRlY2MzM2I5MjY3Li5kNDNiOGI2YzNiMTc5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKQEAgLTU5NTMsMTkgJiM0Mzs1OTUzLDIyIEBAIHZvaWQgX19rdm1fbW11X3JlZnJlc2hfcGFzc3Rocm91Z2hfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAKIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JaW50IG1heHBhOwotCi0JaWYgKHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKQotCQltYXhwYSA9IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcih2Y3B1KTsKLQllbHNlCi0JCW1heHBhID0gY3B1aWRfbWF4cGh5YWRkcih2Y3B1KTsKLQogCS8qIHRkcF9yb290X2xldmVsIGlzIGFyY2hpdGVjdHVyZSBmb3JjZWQgbGV2ZWwsIHVzZSBpdCBpZiBub256ZXJvICovCiAJaWYgKHRkcF9yb290X2xldmVsKQogCQlyZXR1cm4gdGRwX3Jvb3RfbGV2ZWw7CiAKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIFZNIGhhcyBtaXJyb3Igcm9vdHMsIHRoZW4gdGhlIHJvb3QgbGV2ZWwgaXMgcHJlZGVmaW5lZCBhcyB0aGUKJiM0MzsJICogbWlycm9yIHJvb3QgKGFuZCBieSBleHRlbnNpb24gdGhlIG5vcm1hbCByb290KSBuZWVkcyB0byBtYXRjaCB0aGUKJiM0MzsJICogcm9vdCBsZXZlbCB0aGF0IHdhcyBjb25maWd1cmVkIGZvciB0aGUgZXh0ZXJuYWwgcGFnZSB0YWJsZXMgdGhhdCBhcmUKJiM0MzsJICogYmVpbmcgbWlycm9yZWQgYnkgS1ZNLgomIzQzOwkgKi8KJiM0MzsJaWYgKGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtJmd0O2t2bSkgJmFtcDsmYW1wOwomIzQzOwkgICAgIVdBUk5fT05fT05DRSghdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm1pcnJvcl9yb290X2xldmVsKSkKJiM0MzsJCXJldHVybiB2Y3B1LSZndDtrdm0tJmd0O2FyY2gubWlycm9yX3Jvb3RfbGV2ZWw7CiYjNDM7CiAJLyogVXNlIDUtbGV2ZWwgVERQIGlmIGFuZCBvbmx5IGlmIGl0JiMzOTtzIHVzZWZ1bC9uZWNlc3NhcnkuICovCi0JaWYgKG1heF90ZHBfbGV2ZWwgPT0gNSAmYW1wOyZhbXA7IG1heHBhICZsdDs9IDQ4KQomIzQzOwlpZiAobWF4X3RkcF9sZXZlbCA9PSA1ICZhbXA7JmFtcDsgY3B1aWRfbWF4cGh5YWRkcih2Y3B1KSAmbHQ7PSA0OCkKIAkJcmV0dXJuIDQ7CiAKIAlyZXR1cm4gbWF4X3RkcF9sZXZlbDsKQEAgLTY4MzQsNyAmIzQzOzY4MzcsNyBAQCBzdGF0aWMgaW50IF9fa3ZtX21tdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21tdSAqbW11LCBzdHJ1Y3QgawogCSAqIG90aGVyIGV4Y2VwdGlvbiBpcyBmb3Igc2hhZG93aW5nIEwxJiMzOTtzIDMyLWJpdCBvciBQQUUgTlBUIG9uIDY0LWJpdAogCSAqIEtWTTsgdGhhdCBob3Jyb3IgaXMgaGFuZGxlZCBvbi1kZW1hbmQgYnkgbW11X2FsbG9jX3NwZWNpYWxfcm9vdHMoKS4KIAkgKi8KLQlpZiAodGRwX2VuYWJsZWQgJmFtcDsmYW1wOyBrdm1fbW11X2dldF90ZHBfbGV2ZWwodmNwdSkgJmd0OyBQVDMyRV9ST09UX0xFVkVMKQomIzQzOwlpZiAodGRwX2VuYWJsZWQgJmFtcDsmYW1wOyBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKCkgJmd0OyBQVDMyRV9ST09UX0xFVkVMKQogCQlyZXR1cm4gMDsKIAogCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX0RNQTMyKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCmluZGV4IGIyNzJjMjA1ODZhNzQuLmEwYmM5ZjgxOGY0MzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC90ZHguYwpAQCAtNTYsOSAmIzQzOzU2LDYgQEAKIGJvb2wgZW5hYmxlX3RkeCBfX3JvX2FmdGVyX2luaXQ7CiBtb2R1bGVfcGFyYW1fbmFtZWQodGR4LCBlbmFibGVfdGR4LCBib29sLCAwNDQ0KTsKIAotI2RlZmluZSBURFhfU0hBUkVEX0JJVF9QV0xfNSBncGFfdG9fZ2ZuKEJJVF9VTEwoNTEpKQotI2RlZmluZSBURFhfU0hBUkVEX0JJVF9QV0xfNCBncGFfdG9fZ2ZuKEJJVF9VTEwoNDcpKQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqdGR4X3N5c2luZm87CiAKIHZvaWQgdGRoX3ZwX3JkX2ZhaWxlZChzdHJ1Y3QgdmNwdV90ZHggKnRkeCwgY2hhciAqdWNsYXNzLCB1MzIgZmllbGQsIHU2NCBlcnIpCkBAIC0xNjA5LDEwICYjNDM7MTYwNiw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Rkdm1jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogdm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpCiB7Ci0JdTY0IHNoYXJlZF9iaXQgPSAocGdkX2xldmVsID09IDUpID8gVERYX1NIQVJFRF9CSVRfUFdMXzUgOgotCQkJICBURFhfU0hBUkVEX0JJVF9QV0xfNDsKLQotCWlmIChLVk1fQlVHX09OKHNoYXJlZF9iaXQgIT0ga3ZtX2dmbl9kaXJlY3RfYml0cyh2Y3B1LSZndDtrdm0pLCB2Y3B1LSZndDtrdm0pKQomIzQzOwlpZiAoS1ZNX0JVR19PTihwZ2RfbGV2ZWwgIT0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm1pcnJvcl9yb290X2xldmVsLCB2Y3B1LSZndDtrdm0pKQogCQlyZXR1cm47CiAKIAl0ZF92bWNzX3dyaXRlNjQodG9fdGR4KHZjcHUpLCBTSEFSRURfRVBUX1BPSU5URVIsIHJvb3RfaHBhKTsKQEAgLTI3NjAsNiAmIzQzOzI3NTQsMTQgQEAgREVGSU5FX0NMQVNTKHRkeF92bV9zdGF0ZV9ndWFyZCwgdGR4X3ZtX3N0YXRlX2d1YXJkX3QsCiAJICAgICBpZiAoIUlTX0VSUihfVCkpIHRkeF9yZWxlYXNlX3ZtX3N0YXRlX2xvY2tzKF9UKSwKIAkgICAgIHRkeF9hY3F1aXJlX3ZtX3N0YXRlX2xvY2tzKGt2bSksIHN0cnVjdCBrdm0gKmt2bSk7CiAKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGR4X3NldF9taXJyb3Jfcm9vdF9sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGludCBsZXZlbCkKJiM0Mzt7CiYjNDM7CUJVSUxEX0JVR19PTihsZXZlbCAhPSA0ICZhbXA7JmFtcDsgbGV2ZWwgIT0gNSk7CiYjNDM7CiYjNDM7CWt2bS0mZ3Q7YXJjaC5taXJyb3Jfcm9vdF9sZXZlbCA9IGxldmVsOwomIzQzOwlrdm0tJmd0O2FyY2guZ2ZuX2RpcmVjdF9iaXRzID0gZ3BhX3RvX2dmbihCSVRfVUxMKGxldmVsID09IDQgPyA0NyA6IDUxKSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCB0ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKQogewogCXN0cnVjdCBrdm1fdGR4X2luaXRfdm0gX191c2VyICp1c2VyX2RhdGEgPSB1NjRfdG9fdXNlcl9wdHIoY21kLSZndDtkYXRhKTsKQEAgLTI4MjMsOSAmIzQzOzI4MjUsOSBAQCBzdGF0aWMgaW50IHRkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpCiAJa3ZtX3RkeC0mZ3Q7eGZhbSA9IHRkX3BhcmFtcy0mZ3Q7eGZhbTsKIAogCWlmICh0ZF9wYXJhbXMtJmd0O2NvbmZpZ19mbGFncyAmYW1wOyBURFhfQ09ORklHX0ZMQUdTX01BWF9HUEFXKQotCQlrdm0tJmd0O2FyY2guZ2ZuX2RpcmVjdF9iaXRzID0gVERYX1NIQVJFRF9CSVRfUFdMXzU7CiYjNDM7CQl0ZHhfc2V0X21pcnJvcl9yb290X2xldmVsKGt2bSwgNSk7CiAJZWxzZQotCQlrdm0tJmd0O2FyY2guZ2ZuX2RpcmVjdF9iaXRzID0gVERYX1NIQVJFRF9CSVRfUFdMXzQ7CiYjNDM7CQl0ZHhfc2V0X21pcnJvcl9yb290X2xldmVsKGt2bSwgNCk7CiAKIAlrdm1fdGR4LSZndDtzdGF0ZSA9IFREX1NUQVRFX0lOSVRJQUxJWkVEOwogb3V0Ogo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjM5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIEtlcm5lbCBQYXRjaDogQU1ENjQgJmFtcDsgS1ZNL1REWCBJbXBsaWNhdGlvbnMqKgoKT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gZXZhbHVhdGUgdGhpcyBrZXJuZWwgcGF0Y2ggb24gdGhlIGFtZDY0IGFyY2hpdGVjdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGxldCYjMzk7cyBsb29rIGF0IHRoZSBwYXRjaCBjaGFuZ2VzIHRoZW1zZWx2ZXMuCgoqICAgYGFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhgOiBBIHNpbXBsZSBhZGRpdGlvbiBvZiBgaW50IG1pcnJvcl9yb290X2xldmVsYCB0byB0aGUgYGt2bV9hcmNoYCBzdHJ1Y3QuIE9rYXksIHRoYXQmIzM5O3MgYSBuZXcgc3RhdGUgdmFyaWFibGUuCgoqICAgYGFyY2gveDg2L2t2bS9jcHVpZC5jYCBhbmQgYGNwdWlkLmhgOiBMb29rcyBsaWtlIHRoZXkmIzM5O3JlIHJlbW92aW5nIHRoZSBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyByZWxldmFudC4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIG92ZXJhbGwgcHVycG9zZSBvZiB0aGlzIGNoYW5nZS4KCiogICBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2A6IFRoaXMgaXMgdGhlIGNvcmUgb2YgaXQsIEkgdGhpbmsuCiAgICAqICAgSW4gYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAsIHRoZXkmIzM5O3JlIGludHJvZHVjaW5nIGEgbmV3IGNvbmRpdGlvbmFsIHVzaW5nIGBrdm1faGFzX21pcnJvcmVkX3RkcGAgYW5kIGBtaXJyb3Jfcm9vdF9sZXZlbGAuIFRoaXMgaXMgcmVwbGFjaW5nIHRoZSBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYCBjYWxsLCB3aGljaCBzdHJvbmdseSBpbmRpY2F0ZXMgYSBkaWZmZXJlbnQgYXBwcm9hY2ggdG8gZGV0ZXJtaW5lIHRoZSBtYXhpbXVtIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgKG1heHBhKSBmb3IgVERYLCBvciBmb3Igc29tZSBnZW5lcmFsIEtWTSBNTVUgY2FzZS4KICAgICogICBJbiBgX19rdm1fbW11X2NyZWF0ZWAsIGl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYSBzbGlnaHQgdHdlYWsgdG8gaG93IHRoZSBURFAgbGV2ZWwgaXMgY2hlY2tlZC4gVGhleSYjMzk7cmUgbm93IHVzaW5nIGEgYGdldF9tYXhfdGRwX2xldmVsYCBjYWxsLgoKKiAgIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYDogSGVyZSYjMzk7cyB0aGUgVERYIHNwZWNpZmljIHN0dWZmLgogICAgKiAgIEluIGB0ZHhfbG9hZF9tbXVfcGdkYCwgdGhleSYjMzk7cmUgY2hlY2tpbmcgYWdhaW5zdCBgbWlycm9yX3Jvb3RfbGV2ZWxgLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhleSBzZWVtIHRvIGJlIGFzc2VydGluZyB0aGF0IHRoZSByb290IGxldmVsIHNob3VsZCBiZSBjb25zaXN0ZW50LCB1c2luZyBhIEtWTVxfQlVHXF9PTi4KICAgICogICBgdGR4X3RkX2luaXRgOiBUaGlzIHNldHMgYG1pcnJvcl9yb290X2xldmVsYCB0byBlaXRoZXIgNSBvciA0LCBhbmQgYGdmbl9kaXJlY3RfYml0c2AgYmFzZWQgb24gdGhhdCB2YWx1ZS4gSXQmIzM5O3MgYSBjcml0aWNhbCBzZXR1cCBmdW5jdGlvbi4KCk9rYXksIG5vdyBmb3IgdGhlIHJlYWNoYWJpbGl0eSBhbmFseXNpcy4gVGhlIHRhcmdldCBpcyBhbWQ2NCwgd2hpY2ggaXMgZXhwZWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgdGhpcyBpcyBzcGVjaWZpYyB0byBURFggb3IgZ2VuZXJhbCBLVk0gTU1VLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIG1vZGlmaWVkIGNvZGUgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZS4gSXMgaXQgb25seSBmb3IgVERYIFZNcywgb3IgaXMgaXQgYWxzbyByZWxldmFudCB0byBub3JtYWwgS1ZNIFZNcyB0aGF0IGFyZSBjYWxsaW5nIGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgIG9yIGBfX2t2bV9tbXVfY3JlYXRlYD8gVGhhdCB3b3VsZCBiZSBzaWduaWZpY2FudC4KClRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIHRvIHVzZSBhIHRvb2wgbGlrZSBgZ3JlcHBlcmAgdG8gc2VlIHdoZXJlIGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgLCBgX19rdm1fbW11X2NyZWF0ZWAgYW5kLCBtb3N0IGltcG9ydGFudGx5LCBga3ZtX2hhc19taXJyb3JlZF90ZHBgLCBhcmUgYWN0dWFsbHkgdXNlZCB3aXRoaW4gdGhlIEtWTSBjb2RlLiBUaGF0IHdpbGwgdGVsbCBtZSB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hpY2ggY29kZSBwYXRocyBhcmUgYWZmZWN0ZWQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgaWYgdGhpcyBwYXRjaCBpcyBtb3JlIHRoYW4ganVzdCBURFgtc3BlY2lmaWMuIEkgc3VzcGVjdCBpdCYjMzk7cyBtb3JlIGdlbmVyYWwgYW5kIG1heSBiZSBhIHJlZmFjdG9yaW5nIG9mIHRoZSBLVk0gTU1VIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX21tdV9nZXRfdGRwX2xldmVsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmM9NTkzOT12b2lkIF9fa3ZtX21tdV9yZWZyZXNoX3Bhc3N0aHJvdWdoX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk1My1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTk1NDpzdGF0aWMgaW5saW5lIGludCBrdm1fbW11X2dldF90ZHBfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTU1LXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5ODM9a3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTkzLVx0cm9sZS5hZF9kaXNhYmxlZCA9ICFrdm1fYWRfZW5hYmxlZDtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTk5NDpcdHJvbGUubGV2ZWwgPSBrdm1fbW11X2dldF90ZHBfbGV2ZWwodmNwdSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5OTUtXHRyb2xlLmRpcmVjdCA9IHRydWU7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02MDg4PXZvaWQga3ZtX2luaXRfc2hhZG93X25wdF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyNCxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxMDYtXHRyb290X3JvbGUgPSBjcHVfcm9sZS5iYXNlO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2MTA3Olx0cm9vdF9yb2xlLmxldmVsID0ga3ZtX21tdV9nZXRfdGRwX2xldmVsKHZjcHUpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTA4LVx0aWYgKHJvb3Rfcm9sZS5sZXZlbCA9PSBQVDY0X1JPT1RfNUxFVkVMIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNjkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYF9fa3ZtX21tdV9jcmVhdGVgIGFuZCBpdHMgQ2FsbGVycyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgX19rdm1fbW11X2NyZWF0ZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQuIFdoYXQmIzM5O3MgaXQgZG9pbmc/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGlzIGl0IG1hbmlwdWxhdGluZz8gV2hhdCBhcmUgdGhlIGtleSBpbml0aWFsaXphdGlvbiBzdGVwcyBpdCB1bmRlcnRha2VzPyBBbmQgZXF1YWxseSBpbXBvcnRhbnQsIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBncmFwaC4gV2hvJiMzOTtzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbj8gVW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzPyBXaHkgYXJlIHRoZXkgY2FsbGluZyBpdD8gV2hhdCBhc3N1bXB0aW9ucyBhcmUgYmVpbmcgbWFkZSBieSB0aGUgY2FsbGVycyBhYm91dCB0aGUgYmVoYXZpb3Igb2YgYF9fa3ZtX21tdV9jcmVhdGVgPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgdG8gY29uc2lkZXIsIGdpdmVuIHRoZSBuYXR1cmUgb2YgS1ZNPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aG9zZSBjYWxsZXJzIHRvIGVuc3VyZSB0aGF0IHRoZSBNTVUgY3JlYXRpb24gaXMgaGFuZGxlZCBwcm9wZXJseSB3aXRoaW4gdGhlIGxhcmdlciBLVk0gYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBjYWxsZXJzIHNldHVwIHRoZSBjb250ZXh0LCBlbnN1cmUgcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUsIGFuZCBjb3JyZWN0bHkgdGVhciBkb3duIHRoZSByZXNvdXJjZXMgY3JlYXRlZCBpZiBuZWVkZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19rdm1fbW11X2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY4MDQ9c3RhdGljIHZvaWQgZnJlZV9tbXVfcGFnZXMoc3RydWN0IGt2bV9tbXUgKm1tdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY4MTItXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY4MTM6c3RhdGljIGludCBfX2t2bV9tbXVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXUgKm1tdSwgc3RydWN0IGt2bV9wYWdld2FsayAqdylcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjgxNC17XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02ODY4PWludCBrdm1fbW11X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODg0LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2ODg1Olx0cmV0ID0gX19rdm1fbW11X2NyZWF0ZSh2Y3B1LCBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfbW11LCBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gubmdwYV93YWxrKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjg4Ni1cdGlmIChyZXQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODg4LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2ODg5Olx0cmV0ID0gX19rdm1fbW11X2NyZWF0ZSh2Y3B1LCBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gucm9vdF9tbXUsIFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5ndmFfd2Fsayk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY4OTAtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS1ZNIE1NVSBNZW50YWwgQ2hlY2tsaXN0KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIEtWTSYjMzk7cyBNTVUgc2V0dXAsIGFuZCBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgcGluZ2luZyBteSByYWRhci4gSSBzZWUgdGhhdCBga3ZtX21tdV9jcmVhdGVgIGlzIGNhbGxlZCB3aGVuIGEgbmV3IHZDUFUgcG9wcyB1cCB2aWEgdGhlIGBLVk1fQ1JFQVRFX1ZDUFVgIGlvY3RsLiBSaWdodCwgY2xhc3NpYyBpbml0aWFsaXphdGlvbi4gVGhlbiwgYGt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGVgIGFuZCBga3ZtX2luaXRfc2hhZG93X25wdF9tbXVgIGFyZSBpbnZvbHZlZCBpbiBNTVUgaW5pdGlhbGl6YXRpb24gYW5kIHVwZGF0ZXMsIGFzIGV4cGVjdGVkLiBJJiMzOTttIGtlZXBpbmcgYSBtZW50YWwgbm90ZSBvZiB0aGlzIGVudGlyZSBwcm9jZXNzLgoKSSBuZWVkIHRvIGtlZXAgbXkgZXllIG9uIHRoYXQgYFdBUk5fT05fT05DRSghdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm1pcnJvcl9yb290X2xldmVsKWAgaW4gYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAgLSB0aGF0IGNvdWxkIGJlY29tZSBhIHBvaW50IG9mIGNvbnRlbnRpb24gbGF0ZXIuIEl0JiMzOTtzIGluZGljYXRpbmcgc29tZSBtaXJyb3JpbmcgaXNzdWUgb3Igc3RhdGUgdGhhdCBuZWVkcyB0byBiZSB0cnVlLiBBbmQgSSYjMzk7bSBhbHNvIHNlZWluZyBhIGBLVk1fQlVHX09OYCBpbiBgdGR4X2xvYWRfbW11X3BnZGAsIHdoaWNoLCB5b3Uga25vdywgaXMgbmV2ZXIgZ29vZC4gR290dGEga2VlcCBhbiBleWUgb24gdGhhdC4KCk5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIHRoaXMgYGt2bV9oYXNfbWlycm9yZWRfdGRwYC4gSXQmIzM5O3MgdXNlZCBhIGxvdC4gV2hlcmUgaXMgaXQgZGVmaW5lZD8gSSBuZWVkIHRvIHRyYWNrIGRvd24gaXRzIGltcGxlbWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIG1pcnJvcmluZyBsb2dpYyB0aG9yb3VnaGx5LiBUaGlzIGlzIHRoZSBuZXh0IHRoaW5nIHRvIGludmVzdGlnYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9oYXNfbWlycm9yZWRfdGRwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUuaD0zODA9c3RhdGljIGlubGluZSBncGFfdCBrdm1fdHJhbnNsYXRlX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS5oLTM5MS1cbmFyY2gveDg2L2t2bS9tbXUuaDozOTI6c3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbWlycm9yZWRfdGRwKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9tbXUuaC0zOTMte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjA2PXN0YXRpYyBpbnQgbW11X3RvcHVwX21lbW9yeV9jYWNoZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIG1heWJlX2luZGlyZWN0KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjE0LVx0XHRyZXR1cm4gcjtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjE1Olx0aWYgKGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtXHUwMDNla3ZtKSkge1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTYtXHRcdHIgPSBrdm1fbW11X3RvcHVwX21lbW9yeV9jYWNoZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gubW11X2V4dGVybmFsX3NwdF9jYWNoZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTM5ODY9c3RhdGljIGludCBtbXVfYWxsb2NfZGlyZWN0X3Jvb3RzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5OTQtXHRpZiAodGRwX21tdV9lbmFibGVkKSB7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM5OTU6XHRcdGlmIChrdm1faGFzX21pcnJvcmVkX3RkcCh2Y3B1LVx1MDAzZWt2bSkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5OTYtXHRcdCAgICAhVkFMSURfUEFHRShtbXUtXHUwMDNlbWlycm9yX3Jvb3RfaHBhKSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTQ9c3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NjUtXHQgKi9cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTk2NjpcdGlmIChrdm1faGFzX21pcnJvcmVkX3RkcCh2Y3B1LVx1MDAzZWt2bSkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NjctXHQgICAgIVdBUk5fT05fT05DRSghdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbCkpXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg9MzA9c3RhdGljIGlubGluZSBlbnVtIGt2bV90ZHBfbW11X3Jvb3RfdHlwZXMga3ZtX2dmbl9yYW5nZV9maWx0ZXJfdG9fcm9vdF90eXBlcyhzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtMzQtXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaDozNTpcdGlmICgha3ZtX2hhc19taXJyb3JlZF90ZHAoa3ZtKSlcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTM2LVx0XHRyZXR1cm4gS1ZNX0RJUkVDVF9ST09UUztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mjc4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgYGt2bV9oYXNfbWlycm9yZWRfdGRwYCBpbiBgbW11LmhgKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBga3ZtX2hhc19taXJyb3JlZF90ZHBgIGZ1bmN0aW9uIHdvcmtzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbmF2aWdhdGluZyB0byBgYXJjaC94ODYva3ZtL21tdS5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM5Mi4gSSBuZWVkIHRvIHNlZSB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24uIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggS1ZNJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIFRyYW5zcGFyZW50IFBhZ2UgU2hhcmluZyAoVFBTKSBvciBzb21lIGZvcm0gb2YgbWVtb3J5IGRlZHVwbGljYXRpb24gb3B0aW1pemF0aW9uIGluIHRoZSBUcmFuc2xhdGlvbiBMb29rYXNpZGUgQnVmZmVyIChUTEIpIG1hbmFnZW1lbnQuIEkgc3VzcGVjdCB3ZSYjMzk7bGwgc2VlIHNvbWUgY2hlY2tzIHJlbGF0ZWQgdG8gaGFyZHdhcmUgZmVhdHVyZXMsIG1heWJlIENQVUlEIGZsYWdzIG9yIE1TUnMsIG9yIHBlcmhhcHMgZXZlbiBzb21lIGdsb2JhbCBLVk0gc3RhdGUuIEtub3dpbmcgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgaXMga2V5IGZvciB1bmRlcnN0YW5kaW5nIGNlcnRhaW4gZ3Vlc3QgbWVtb3J5IGJlaGF2aW9ycy4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB0aGUgaG9zdCYjMzk7cyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4NTpcdHtcbiAzODY6XHRcdGlmICghbW11X2lzX25lc3RlZCh2Y3B1KSB8fCB3ID09IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5uZ3BhX3dhbGspXG4gMzg3Olx0XHRcdHJldHVybiBncGE7XG4gMzg4Olx0XHRyZXR1cm4ga3ZtX25lc3RlZF9jYWxsKHRyYW5zbGF0ZV9uZXN0ZWRfZ3BhKSh2Y3B1LCBncGEsIGFjY2VzcyxcbiAzODk6XHRcdFx0XHRcdFx0XHQgICAgIGV4Y2VwdGlvbiwgcHRlX2FjY2Vzcyk7XG4gMzkwOlx0fVxuIDM5MTpcdFxuIDM5MjpcdHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX21pcnJvcmVkX3RkcChjb25zdCBzdHJ1Y3Qga3ZtICprdm0pXG4gMzkzOlx0e1xuIDM5NDpcdFx0cmV0dXJuIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk07XG4gMzk1Olx0fVxuIDM5NjpcdFxuIDM5NzpcdHN0YXRpYyBpbmxpbmUgZ2ZuX3Qga3ZtX2dmbl9kaXJlY3RfYml0cyhjb25zdCBzdHJ1Y3Qga3ZtICprdm0pXG4gMzk4Olx0e1xuIDM5OTpcdFx0cmV0dXJuIGt2bS1cdTAwM2VhcmNoLmdmbl9kaXJlY3RfYml0cztcbiA0MDA6XHR9XG4gNDAxOlx0XG4gNDAyOlx0c3RhdGljIGlubGluZSBib29sIGt2bV9pc19hZGRyX2RpcmVjdChzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSlcbiA0MDM6XHR7XG4gNDA0Olx0XHRncGFfdCBncGFfZGlyZWN0X2JpdHMgPSBnZm5fdG9fZ3BhKGt2bV9nZm5fZGlyZWN0X2JpdHMoa3ZtKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NDAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLY29uZmlnIENvbmZpZ3VyYXRpb24gRXhhbWluYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIEtWTSBhbmQgVERYIHN1cHBvcnQgb24geDg2IGFyY2hpdGVjdHVyZXMuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUsIHdoaWNoIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZm9yIEtWTS1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBBIHNpbXBsZSBncmVwIGZvciAmIzM0O0tWTSYjMzQ7IHdpdGhpbiB0aGF0IGZpbGUgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBvdmVydmlldyBvZiB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjb3JlIEtWTSBlbmFibGVtZW50LCBhbG9uZyB3aXRoIGFueSBURFgtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgaWYgdGhleSBleGlzdC4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gcGFyc2UgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBpbnRlcmxpbmtlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTczOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE4LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMwOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMzpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNzgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBLVk1fSU5URUxfVERYIERlcGVuZGVuY2llcyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmb3IgYEtWTV9JTlRFTF9URFhgIHdpdGhpbiB0aGUgYGFyY2gveDg2L2t2bWAgZGlyZWN0b3J5LiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGRlcGVuZGVuY2llcyBoZXJlLiBVbmRlcnN0YW5kaW5nIHRoZXNlIHJlbGF0aW9uc2hpcHMgaXMgY3J1Y2lhbC4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgd2hhdCBvdGhlciBmZWF0dXJlcyBvciBvcHRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBvciBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggVERYIHN1cHBvcnQuIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgSW50ZWwgQ1BVIG1vZGVscywgbWljcm9hcmNoaXRlY3R1cmVzLCBvciBwYXJ0aWN1bGFyIGhhcmR3YXJlIGV4dGVuc2lvbnMgdGhhdCBhcmUgcHJlcmVxdWlzaXRlcz8gQW55IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGRpc2FibGUgVERYIGlmIHNlbGVjdGVkPyBPciBwZXJoYXBzIG90aGVyIEtWTS1yZWxhdGVkIGZlYXR1cmVzIHRoYXQgVERYIGJ1aWxkcyBvbj8gVGhlIEtjb25maWcgZmlsZSBpcyB0aGUgZGVmaW5pdGl2ZSBzb3VyY2UgZm9yIHRoaXMsIHNvIEkmIzM5O2xsIHNjYW4gaXQgY2FyZWZ1bGx5LCBub3RpbmcgYW55IGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIG9yIGBkZWZhdWx0YCBjbGF1c2VzIHRoYXQgcmVsYXRlIHRvIGBLVk1fSU5URUxfVERYYC4gQW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgaW50ZXJhY3Rpb25zIHdpdGggZXhpc3RpbmcgS1ZNIGNvZGUgSSBzaG91bGQgYmUgYXdhcmUgb2YuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBub3RlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHRcdCAgZ3Vlc3RzIHZpYSBhIGRldmljZSBub2RlLCBlLmcuIC9kZXYvc2d4X3ZlcGMuXG4gMTMxOlx0XG4gMTMyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTMzOlx0XG4gMTM0Olx0Y29uZmlnIEtWTV9JTlRFTF9URFhcbiAxMzU6XHRcdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuIDEzNjpcdFx0ZGVmYXVsdCB5XG4gMTM3Olx0XHRkZXBlbmRzIG9uIElOVEVMX1REWF9IT1NUXG4gMTM4Olx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbiAxMzk6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcbiAxNDA6XHRcdGhlbHBcbiAxNDE6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgbGF1bmNoaW5nIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpXG4gMTQyOlx0XHQgIGNvbmZpZGVudGlhbCBWTXMgb24gSW50ZWwgcHJvY2Vzc29ycy5cbiAxNDM6XHRcbiAxNDQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNDU6XHRcbiAxNDY6XHRjb25maWcgS1ZNX0FNRFxuIDE0NzpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gMTQ4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXG4gMTQ5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTcyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGlnZ2luZyBpbnRvIHRoZSBLVk0geDg2IEJ1aWxkIFByb2Nlc3MqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBLVk0geDg2IGNvbXBvbmVudHMgYXJlIGJ1aWx0LiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiBgY3B1aWQub2AsIGBtbXUub2AsIGFuZCBgdGR4Lm9gIOKAkyB0aG9zZSBhcmUgY3JpdGljYWwgcGllY2VzIG9mIHRoZSBwdXp6bGUgZm9yIHZpcnR1YWxpemF0aW9uIG9uIHg4NiwgZXNwZWNpYWxseSB3aXRoIFREWC4gSSBrbm93IHRoZSBzb3VyY2UgY29kZSBpcyBpbiBgYXJjaC94ODYva3ZtL2AsIGJ1dCBJIHNob3VsZCByZWFsbHkgY29uc3VsdCB0aGUgYE1ha2VmaWxlYCBpbiAqdGhhdCogZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgYnVpbGQgbWFnaWMgaGFwcGVucy4gVGhlIE1ha2VmaWxlIHdpbGwgcmV2ZWFsIHRoZSBjb21waWxlciBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgb3ZlcmFsbCBjb21waWxhdGlvbiBmbG93IHRoYXQgcHJvZHVjZXMgdGhlc2Ugb2JqZWN0IGZpbGVzLiBVbmRlcnN0YW5kaW5nIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzIGlzIGVzc2VudGlhbCB0byBtb2RpZnlpbmcsIGRlYnVnZ2luZywgb3IgZXh0ZW5kaW5nIHRoZXNlIG1vZHVsZXMsIGFuZCB0byBjb25maXJtIHRoYXQgaXQgYnVpbGRzIGFzIGV4cGVjdGVkLiBLbm93aW5nIHRoZSBidWlsZCBwcm9jZXNzIHdpbGwgYWxzbyBnaXZlIG1lIGltcG9ydGFudCBjbHVlcyBhYm91dCBob3cgdGhlc2UgY29tcG9uZW50cyBpbnRlcmFjdCBhbmQgd2hhdCBleHRlcm5hbCBkZXBlbmRlbmNpZXMgdGhleSByZWx5IHVwb24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IE1ha2VmaWxlIGhhcyB0byBzYXkuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGR4Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL01ha2VmaWxlPTIxPWt2bS1pbnRlbC0kKENPTkZJR19LVk1fSFlQRVJWKVx0JiM0Mzs9IHZteC9oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZToyMjprdm0taW50ZWwtJChDT05GSUdfS1ZNX0lOVEVMX1REWClcdCYjNDM7PSB2bXgvdGR4Lm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yMy1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz04NjM9c3RhdGljIGludCB2dF9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NzItI2RlZmluZSB2dF9vcChuYW1lKSB2dF8jI25hbWVcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjg3MzojZGVmaW5lIHZ0X29wX3RkeF9vbmx5KG5hbWUpIHZ0XyMjbmFtZVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODc0LSNlbHNlIC8qIENPTkZJR19LVk1fSU5URUxfVERYICovXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NzUtI2RlZmluZSB2dF9vcChuYW1lKSB2bXhfIyNuYW1lXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4NzY6I2RlZmluZSB2dF9vcF90ZHhfb25seShuYW1lKSBOVUxMXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NzctI2VuZGlmIC8qIENPTkZJR19LVk1fSU5URUxfVERYICovXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODg4PXN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTA0LVx0LnZtX2Rlc3Ryb3kgPSB2dF9vcCh2bV9kZXN0cm95KSxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjkwNTpcdC52bV9wcmVfZGVzdHJveSA9IHZ0X29wX3RkeF9vbmx5KHZtX3ByZV9kZXN0cm95KSxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTkwNi1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy05NDktXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo5NTA6XHQudmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiA9IHZ0X29wX3RkeF9vbmx5KHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pLFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTUxLVx0LnZjcHVfcnVuID0gdnRfb3AodmNwdV9ydW4pLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwMzQtXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDM1Olx0Lm1lbV9lbmNfaW9jdGwgPSB2dF9vcF90ZHhfb25seShtZW1fZW5jX2lvY3RsKSxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwMzY6XHQudmNwdV9tZW1fZW5jX2lvY3RsID0gdnRfb3BfdGR4X29ubHkodmNwdV9tZW1fZW5jX2lvY3RsKSxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwMzc6XHQudmNwdV9tZW1fZW5jX3VubG9ja2VkX2lvY3RsID0gdnRfb3BfdGR4X29ubHkodmNwdV9tZW1fZW5jX3VubG9ja2VkX2lvY3RsKSxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwMzgtXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDM5Olx0LmdtZW1fbWF4X21hcHBpbmdfbGV2ZWwgPSB2dF9vcF90ZHhfb25seShnbWVtX21heF9tYXBwaW5nX2xldmVsKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTA0MC19O1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MjE1PXN0YXRpYyBERUZJTkVfTVVURVgodGR4X2xvY2spO1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yMTYtXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjIxNzpzdGF0aWMgYm9vbCB0ZHhfb3BlcmFuZF9idXN5KHU2NCBlcnIpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTIxOC17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yNzQ9c3RhdGljIGlubGluZSB2b2lkIHRkeF9kaXNhc3NvY2lhdGVfdnAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzA3LVx0X19lcnIgPSB0ZGhfZnVuYyhhcmdzKTtcdFx0XHRcdFx0XHRcdFxcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjMwODpcdGlmICh1bmxpa2VseSh0ZHhfb3BlcmFuZF9idXN5KF9fZXJyKSkpIHtcdFx0XHRcdFxcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMwOS1cdFx0V1JJVEVfT05DRShfX2t2bV90ZHgtXHUwMDNld2FpdF9mb3Jfc2VwdF96YXAsIHRydWUpO1x0XHRcdFxcXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz05ODU9c3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtOTk5LVx0ICovXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjEwMDA6XHRpZiAodW5saWtlbHkodGR4X29wZXJhbmRfYnVzeSh2cF9lbnRlcl9yZXQpKSlcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTAwMS1cdFx0cmV0dXJuIEVYSVRfRkFTVFBBVEhfRVhJVF9IQU5ETEVEO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MTYxNT1zdGF0aWMgaW50IHRkeF9tZW1fcGFnZV9hZGQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNjI5LVx0XHRcdCAgICAgICBcdTAwMjZlbnRyeSwgXHUwMDI2bGV2ZWxfc3RhdGUpO1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNjMwOlx0aWYgKHVubGlrZWx5KHRkeF9vcGVyYW5kX2J1c3koZXJyKSkpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE2MzEtXHRcdHJldHVybiAtRUJVU1k7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0xNjM5PXN0YXRpYyBpbnQgdGR4X21lbV9wYWdlX2F1ZyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE2NDctXHRlcnIgPSB0ZGhfbWVtX3BhZ2VfYXVnKFx1MDAyNmt2bV90ZHgtXHUwMDNldGQsIGdwYSwgbGV2ZWwsIHBmbiwgXHUwMDI2ZW50cnksIFx1MDAyNmxldmVsX3N0YXRlKTtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MTY0ODpcdGlmICh1bmxpa2VseSh0ZHhfb3BlcmFuZF9idXN5KGVycikpKVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNjQ5LVx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MTY3MD1zdGF0aWMgaW50IHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNjgyLVx0XHRcdCAgICAgICBcdTAwMjZlbnRyeSwgXHUwMDI2bGV2ZWxfc3RhdGUpO1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNjgzOlx0aWYgKHVubGlrZWx5KHRkeF9vcGVyYW5kX2J1c3koZXJyKSkpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE2ODQtXHRcdHJldHVybiAtRUJVU1k7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yODc2PXN0YXRpYyBpbnQgdGR4X3RkX2ZpbmFsaXplKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yODgzLVx0Y21kLVx1MDAzZWh3X2Vycm9yID0gdGRoX21yX2ZpbmFsaXplKFx1MDAyNmt2bV90ZHgtXHUwMDNldGQpO1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoyODg0Olx0aWYgKHRkeF9vcGVyYW5kX2J1c3koY21kLVx1MDAzZWh3X2Vycm9yKSlcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjg4NS1cdFx0cmV0dXJuIC1FQlVTWTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNjYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIFREWCBDb25maWd1cmF0aW9uIGluIEtWTSBmb3IgeDg2KioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcyBURFggY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyB3aGVuIEkmIzM5O20gZGVhbGluZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHg4NiB2aXJ0dWFsaXphdGlvbiwgZXNwZWNpYWxseSBLVk0uIE15IGdvYWwgaXMgdG8gcGlucG9pbnQgZXhhY3RseSB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbiwgdGhlIG9uZSBsYWJlbGVkIGBJTlRFTF9URFhfSE9TVGAsIGlzIHRoZSBrZXkgZW5hYmxlciBmb3IgZW5hYmxpbmcgVERYIHN1cHBvcnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgYXNzb2NpYXRlZCB3aXRoIGl0LiBUaGlzIGlzIHRoZSBmaXJzdCBzdG9wLCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTlRFTF9URFhfSE9TVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9MTg0ND1jb25maWcgWDg2X1VTRVJfU0hBRE9XX1NUQUNLXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xODYzLVxuYXJjaC94ODYvS2NvbmZpZzoxODY0OmNvbmZpZyBJTlRFTF9URFhfSE9TVFxuYXJjaC94ODYvS2NvbmZpZy0xODY1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MDYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA1MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogS1ZNIE1NVSBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgd2l0aGluIHRoZSBLVk0gTU1VIGNvZGUuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gdHdvIGtleSBhcmVhczogYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAgYW5kIGBfX2t2bV9tbXVfY3JlYXRlYC4KCkxvb2tpbmcgYXQgYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAsIGl0JiMzOTtzIGNsZWFyIHRoaXMgZnVuY3Rpb24gcGxheXMgYSByb2xlIGluIGhvdyB3ZSBkZXRlcm1pbmUgdGhlIFREUCBNTVUgcm9vdCBsZXZlbCwgZXNwZWNpYWxseSBkdXJpbmcgY2FsY3VsYXRpb25zIGxpa2UgYGt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGVgIGFuZCBga3ZtX2luaXRfc2hhZG93X25wdF9tbXVgLiBUaGVyZSYjMzk7cyBhIGBXQVJOX09OX09OQ0VgIGhlcmUsIGxpbmtlZCB0byBgbWlycm9yX3Jvb3RfbGV2ZWxgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBzb21ldGhpbmcgaW1wb3J0YW50IHJlbGF0ZWQgdG8gdGhlIG1pcnJvcmVkIHJvb3QgZnVuY3Rpb25hbGl0eS4gVGhlIGNoYW5nZXMgdG8gdGhlIGxvZ2ljIGZvciBnZW5lcmFsIFZNcyBhcmUgYWxzbyBzaWduaWZpY2FudC4gVGhlIG9yaWdpbmFsIGxvZ2ljIG1hZGUgZGVjaXNpb25zIGJhc2VkIG9uIHRoZSBWTSB0eXBlIChURFggb3IgZ2VuZXJhbCksIHVzaW5nIGBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHJgIGFuZCBgY3B1aWRfbWF4cGh5YWRkcmAgcmVzcGVjdGl2ZWx5LiBUaGUgbmV3IGNvZGUgbm93IGluY29ycG9yYXRlcyBga3ZtX2hhc19taXJyb3JlZF90ZHBgIGFuZCB1c2VzIGB2Y3B1LSZndDtrdm0tJmd0O2FyY2gubWlycm9yX3Jvb3RfbGV2ZWxgIGRpcmVjdGx5IGlmIHRoZSBtaXJyb3JpbmcgaXMgZW5hYmxlZCwgc3VnZ2VzdGluZyBhIHJlZmFjdG9yaW5nIG9yIG9wdGltaXphdGlvbiByZWxhdGVkIHRvIHRoZSBtaXJyb3JlZCBURFAgZmVhdHVyZS4gVGhlIGNoZWNrIGZvciA1LWxldmVsIFREUCBiYXNlZCBvbiBgY3B1aWRfbWF4cGh5YWRkcih2Y3B1KSAmbHQ7PSA0OGAgcmVtYWlucywgYnV0IGl0JiMzOTtzIG5vdyBzZWNvbmRhcnkuCgpUaGUgc2Vjb25kIGFyZWEgb2YgaW50ZXJlc3QgaXMgaW4gYF9fa3ZtX21tdV9jcmVhdGVgLiBIZXJlLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQ6IGl0IG5vdyBjYWxscyBga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpYCBpbnN0ZWFkIG9mIGBrdm1fbW11X2dldF90ZHBfbGV2ZWwoKWAuIFRoaXMgaXMgY2FsbGVkIHdpdGggKmV2ZXJ5KiBgS1ZNX0NSRUFURV9WQ1BVYCBpb2N0bCwgc28gaXQmIzM5O3MgYSBjcml0aWNhbCBwYXRoLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBhbmQgdXNhZ2Ugb2YgYGt2bV9tbXVfZ2V0X21heF90ZHBfbGV2ZWwoKWAuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoaXMgVERQIGxldmVsIGRldGVybWluYXRpb24uIEl0JiMzOTtzIGxpa2VseSB0aGlzIGNoYW5nZSBpcyBhaW1lZCBhdCBkZWNvdXBsaW5nIG9yIGdlbmVyYWxpemluZyB0aGUgVERQIGxldmVsIGNhbGN1bGF0aW9uLiBUaGlzIHdpbGwgd2FycmFudCBmdXJ0aGVyIGluc3BlY3Rpb24gb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKClgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9jcHVpZC5jPTE0MTg9c3RhdGljIGlubGluZSBpbnQgX19kb19jcHVpZF9mdW5jKHN0cnVjdCBrdm1fY3B1aWRfYXJyYXkgKmFycmF5LCB1MzIgZnVuY3Rpb24pXG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTgxMS1cdFx0XHRnX3BoeXNfYXMgPSBwaHlzX2FzO1xuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTgxMjpcdFx0XHRpZiAoa3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpIFx1MDAzYyA1KVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTgxMy1cdFx0XHRcdGdfcGh5c19hcyA9IG1pbihnX3BoeXNfYXMsIDQ4VSk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS5oPTk5PXN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfaGFzX21iZWMoc3RydWN0IGt2bV9tbXUgKm1tdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTAzLVxuYXJjaC94ODYva3ZtL21tdS5oOjEwNDp1OCBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKHZvaWQpO1xuYXJjaC94ODYva3ZtL21tdS5oLTEwNS1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTQ9c3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NzYtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5Nzc6dTgga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCh2b2lkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTc4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY4MTM9c3RhdGljIGludCBfX2t2bV9tbXVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXUgKm1tdSwgc3RydWN0IGt2bV9wYWdld2FsayAqdylcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY4MzktXHQgKi9cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Njg0MDpcdGlmICh0ZHBfZW5hYmxlZCBcdTAwMjZcdTAwMjYga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpIFx1MDAzZSBQVDMyRV9ST09UX0xFVkVMKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODQxLVx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyODgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0LCB0aGlua2luZyBsaWtlIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gS1ZNIE1NVSBDcmVhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgX19rdm1fbW11X2NyZWF0ZWAgd2l0aGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBNTVUgY3JlYXRpb24gcHJvY2Vzcywgc28gSSYjMzk7bSBob25pbmcgaW4gb24gbGluZXMgNjgxMyB0aHJvdWdoIDY4NjUuIFRoaXMgc2VjdGlvbiBwcm9iYWJseSBsYXlzIG91dCB0aGUgY29yZSBsb2dpYyBmb3IgaW5pdGlhbGl6aW5nIHRoZSBLVk0gTU1VIGRhdGEgc3RydWN0dXJlcyBzcGVjaWZpYyB0byB4ODYuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZToKCiogICAqKkFsbG9jYXRpb246KiogVGhlIGFsbG9jYXRpb24gb2YgdGhlIHJlbGV2YW50IE1NVSBzdHJ1Y3R1cmVzLCBsaWtlbHkgaW52b2x2aW5nIGBrbWFsbG9jYCBvciBzaW1pbGFyIG1lbW9yeSBtYW5hZ2VtZW50LiBXZSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHNwZWNpZmljIGFsaWdubWVudCByZXF1aXJlbWVudHMgdG9vLCBtYXliZSBzb21lIGNhY2hlLWxpbmUgcGFkZGluZy4gSSBzaG91bGQgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgc3RydWN0dXJlcyBhbGxvY2F0ZWQgaW4gdGhpcyBzZWN0aW9uLCBhbmQgd2hldGhlciB0aGV5IGFyZSBpbml0aWFsaXplZC4KKiAgICoqSW5pdGlhbGl6YXRpb246KiogVGhlcmUgd2lsbCBoYXZlIHRvIGJlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwcmltYXJ5IE1NVSBzdGF0ZSwgYW5kIHRoYXQgY291bGQgaW52b2x2ZSBzZXR0aW5nIGluaXRpYWwgdmFsdWVzIGZvciB2YXJpb3VzIGNvbnRyb2wgcmVnaXN0ZXJzIG9yIGludGVybmFsIGZsYWdzLiBUaGlzIHBhcnQgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN0YXJ0aW5nIHBvaW50IG9mIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgdHJhbnNsYXRpb24uCiogICAqKkVycm9yIEhhbmRsaW5nOioqIEl0JiMzOTtzIHVubGlrZWx5IHRoaXMgaXMgY29tcGxldGVseSBlcnJvci1mcmVlLiBJJiMzOTtsbCBuZWVkIHRvIHdhdGNoIGZvciBwb3RlbnRpYWwgZXJyb3IgcmV0dXJucyBhbmQgZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgZXJyb3IgcGF0aHMuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgZGVmZW5zaXZlIHByb2dyYW1taW5nLiBJJiMzOTtsbCBhbHNvIGNoZWNrIGlmIHRoZXJlIGlzIHNwZWNpZmljIGNvZGUgd2hpY2ggaXMgZXhlY3V0ZWQgaWYgYW4gYWxsb2NhdGlvbiBmYWlscy4KKiAgICoqU3RydWN0dXJlIFBvcHVsYXRpb246KiogT2Z0ZW4sIHRoZXNlIE1NVSBjcmVhdGUgZnVuY3Rpb25zIGhhdmUgdG8gc2V0IHNvbWUgbWV0YWRhdGEsIHdoaWNoIGlzIHVzZWQgbGF0ZXIgdG8gcXVpY2tseSBjaGVjayBpZiBhIHNwZWNpZmljIHBhZ2UgdGFibGUgaXMgdmFsaWQgYW5kIGNvbmZpZ3VyZWQuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCB0aGlzIGxvZ2ljIG1pZ2h0IGludm9sdmUgc2V0dGluZyBzb21lIGZsYWdzIG9yIHBvaW50ZXJzIHdpdGhpbiB0aGUgbmV3IE1NVSBzdHJ1Y3R1cmUuCgpNeSBnb2FsIGhlcmUgaXMgdG8gZXN0YWJsaXNoIGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoZSBLVk0gTU1VIGNvbnRleHQgaXMgY3JlYXRlZCwgd2hhdCBpbmZvcm1hdGlvbiBpdCBob2xkcyBpbml0aWFsbHksIGFuZCB3aGF0IHNldHVwIGlzIGRvbmUuIFVuZGVyc3RhbmRpbmcgdGhpcyBmb3VuZGF0aW9uIGlzIGVzc2VudGlhbCBmb3IgZGVidWdnaW5nIGFuZCBtb2RpZnlpbmcgdGhlIE1NVSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjgxMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2ODEzOlx0c3RhdGljIGludCBfX2t2bV9tbXVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXUgKm1tdSwgc3RydWN0IGt2bV9wYWdld2FsayAqdylcbjY4MTQ6XHR7XG42ODE1Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjY4MTY6XHRcdGludCBpO1xuNjgxNzpcdFxuNjgxODpcdFx0bW11LVx1MDAzZXcgPSB3O1xuNjgxOTpcdFx0bW11LVx1MDAzZXJvb3QuaHBhID0gSU5WQUxJRF9QQUdFO1xuNjgyMDpcdFx0bW11LVx1MDAzZXJvb3QucGdkID0gMDtcbjY4MjE6XHRcdG1tdS1cdTAwM2VtaXJyb3Jfcm9vdF9ocGEgPSBJTlZBTElEX1BBR0U7XG42ODIyOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBLVk1fTU1VX05VTV9QUkVWX1JPT1RTOyBpJiM0MzsmIzQzOylcbjY4MjM6XHRcdFx0bW11LVx1MDAzZXByZXZfcm9vdHNbaV0gPSBLVk1fTU1VX1JPT1RfSU5GT19JTlZBTElEO1xuNjgyNDpcdFxuNjgyNTpcdFx0LyogdmNwdS1cdTAwM2VhcmNoLmd1ZXN0X21tdSBpc24mIzM5O3QgdXNlZCB3aGVuICF0ZHBfZW5hYmxlZC4gKi9cbjY4MjY6XHRcdGlmICghdGRwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IG1tdSA9PSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfbW11KVxuNjgyNzpcdFx0XHRyZXR1cm4gMDtcbjY4Mjg6XHRcbjY4Mjk6XHRcdC8qXG42ODMwOlx0XHQgKiBXaGVuIHVzaW5nIFBBRSBwYWdpbmcsIHRoZSBmb3VyIFBEUFRFcyBhcmUgdHJlYXRlZCBhcyAmIzM5O3Jvb3QmIzM5OyBwYWdlcyxcbjY4MzE6XHRcdCAqIHdoaWxlIHRoZSBQRFAgdGFibGUgaXMgYSBwZXItdkNQVSBjb25zdHJ1Y3QgdGhhdCYjMzk7cyBhbGxvY2F0ZWQgYXQgTU1VXG42ODMyOlx0XHQgKiBjcmVhdGlvbi4gIFdoZW4gZW11bGF0aW5nIDMyLWJpdCBtb2RlLCBjcjMgaXMgb25seSAzMiBiaXRzIGV2ZW4gb25cbjY4MzM6XHRcdCAqIHg4Nl82NC4gIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIGFsbG9jYXRlIHRoZSBQRFAgdGFibGUgaW4gdGhlIGZpcnN0XG42ODM0Olx0XHQgKiA0R0Igb2YgbWVtb3J5LCB3aGljaCBoYXBwZW5zIHRvIGZpdCB0aGUgRE1BMzIgem9uZS4gIFREUCBwYWdpbmdcbjY4MzU6XHRcdCAqIGdlbmVyYWxseSBkb2VzbiYjMzk7dCB1c2UgUEFFIHBhZ2luZyBhbmQgY2FuIHNraXAgYWxsb2NhdGluZyB0aGUgUERQXG42ODM2Olx0XHQgKiB0YWJsZS4gIFRoZSBtYWluIGV4Y2VwdGlvbiwgaGFuZGxlZCBoZXJlLCBpcyBTVk0mIzM5O3MgMzItYml0IE5QVC4gIFRoZVxuNjgzNzpcdFx0ICogb3RoZXIgZXhjZXB0aW9uIGlzIGZvciBzaGFkb3dpbmcgTDEmIzM5O3MgMzItYml0IG9yIFBBRSBOUFQgb24gNjQtYml0XG42ODM4Olx0XHQgKiBLVk07IHRoYXQgaG9ycm9yIGlzIGhhbmRsZWQgb24tZGVtYW5kIGJ5IG1tdV9hbGxvY19zcGVjaWFsX3Jvb3RzKCkuXG42ODM5Olx0XHQgKi9cbjY4NDA6XHRcdGlmICh0ZHBfZW5hYmxlZCBcdTAwMjZcdTAwMjYga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpIFx1MDAzZSBQVDMyRV9ST09UX0xFVkVMKVxuNjg0MTpcdFx0XHRyZXR1cm4gMDtcbjY4NDI6XHRcbjY4NDM6XHRcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX0RNQTMyKTtcbjY4NDQ6XHRcdGlmICghcGFnZSlcbjY4NDU6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG42ODQ2Olx0XG42ODQ3Olx0XHRtbXUtXHUwMDNlcGFlX3Jvb3QgPSBwYWdlX2FkZHJlc3MocGFnZSk7XG42ODQ4Olx0XG42ODQ5Olx0XHQvKlxuNjg1MDpcdFx0ICogQ1IzIGlzIG9ubHkgMzIgYml0cyB3aGVuIFBBRSBwYWdpbmcgaXMgdXNlZCwgdGh1cyBpdCYjMzk7cyBpbXBvc3NpYmxlIHRvXG42ODUxOlx0XHQgKiBnZXQgdGhlIENQVSB0byB0cmVhdCB0aGUgUERQVEVzIGFzIGVuY3J5cHRlZC4gIERlY3J5cHQgdGhlIHBhZ2Ugc29cbjY4NTI6XHRcdCAqIHRoYXQgS1ZNJiMzOTtzIHdyaXRlcyBhbmQgdGhlIENQVSYjMzk7cyByZWFkcyBnZXQgYWxvbmcuICBOb3RlLCB0aGlzIGlzXG42ODUzOlx0XHQgKiBvbmx5IG5lY2Vzc2FyeSB3aGVuIHVzaW5nIHNoYWRvdyBwYWdpbmcsIGFzIDY0LWJpdCBOUFQgY2FuIGdldCBhdFxuNjg1NDpcdFx0ICogdGhlIEMtYml0IGV2ZW4gd2hlbiBzaGFkb3dpbmcgMzItYml0IE5QVCwgYW5kIFNNRSBpc24mIzM5O3Qgc3VwcG9ydGVkXG42ODU1Olx0XHQgKiBieSAzMi1iaXQga2VybmVscyAod2hlbiBLVk0gaXRzZWxmIHVzZXMgMzItYml0IE5QVCkuXG42ODU2Olx0XHQgKi9cbjY4NTc6XHRcdGlmICghdGRwX2VuYWJsZWQpXG42ODU4Olx0XHRcdHNldF9tZW1vcnlfZGVjcnlwdGVkKCh1bnNpZ25lZCBsb25nKW1tdS1cdTAwM2VwYWVfcm9vdCwgMSk7XG42ODU5Olx0XHRlbHNlXG42ODYwOlx0XHRcdFdBUk5fT05fT05DRShzaGFkb3dfbWVfdmFsdWUpO1xuNjg2MTpcdFxuNjg2MjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgNDsgJiM0MzsmIzQzO2kpXG42ODYzOlx0XHRcdG1tdS1cdTAwM2VwYWVfcm9vdFtpXSA9IElOVkFMSURfUEFFX1JPT1Q7XG42ODY0Olx0XG42ODY1Olx0XHRyZXR1cm4gMDtcbjY4NjY6XHR9XG42ODY3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODQ5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gTU1VIExvZ2ljIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY29kZSBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBHaXZlbiB0aGUgY29udGV4dCwgaXQgbG9va3MgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQhIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggS1ZNLCB3aGljaCBpcyBhbHJlYWR5IGV4dGVuc2l2ZWx5IGZ1enplZCBieSB0b29scyBsaWtlIFN5emthbGxlciwgbGV2ZXJhZ2luZyBzdGFuZGFyZCBpb2N0bHMgbGlrZSBgS1ZNX0NSRUFURV9WTWAsIGBLVk1fQ1JFQVRFX1ZDUFVgLCBhbmQgYEtWTV9TRVRfQ1BVSUQyYC4gVGhlc2UgaW9jdGxzIGFyZSBrbm93biBlbnRyeXBvaW50cyB0byByZWFjaCBwYXJ0cyBvZiB0aGUgTU1VIGNvZGUuIEl0JiMzOTtzIGdyZWF0IHRoYXQgaXQmIzM5O3MgYWxyZWFkeSB3ZWxsLXRyb2RkZW4gZ3JvdW5kLgoKVGhlIHBhdGNoIGl0c2VsZiBmb2N1c2VzIG9uIEtWTSBNTVUgbG9naWMsIHNwZWNpZmljYWxseSBtb2RpZnlpbmcgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc2V0dGluZyB1cCBUcmFuc2xhdGlvbiBMb29rYXNpZGUgQnVmZmVyIChUTEIpIE1NVSByb290IHBhZ2Ugcm9sZXMgYW5kIGluc3RhbmNlcyBmb3IgdkNQVXMsIHdoaWNoIGFyZSBjcml0aWNhbCBwYXRocy4gVGhlIG1lbnRpb25lZCBmdW5jdGlvbnMgYXJlIGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgLCBgX19rdm1fbW11X2NyZWF0ZWAsIGB0ZHhfbG9hZF9tbXVfcGdkYCwgYW5kIGB0ZHhfdGRfaW5pdGAuIENoYW5nZXMgdG8gYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAgaW5jbHVkZSBhbiBhc3NlcnRpb24gd2l0aCBgV0FSTl9PTl9PTkNFYC4gVGhpcyBpcyBnb29kLCBiZWNhdXNlIHRoZXNlIGFkZGl0aW9ucyBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZyBhcyB0aGV5IGhhdmUgdGhlIHBvdGVudGlhbCB0byByZXZlYWwgYnVncy4KCkdpdmVuIHRoYXQgS1ZNIGlzIGZ1bGx5IGVtdWxhdGVkIGFuZCBydW5uYWJsZSB3aXRoaW4gUUVNVS9zdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIGVzdGFibGlzaGVkIGlvY3RscywgSSYjMzk7bSBjb25jbHVkaW5nIHRoYXQgdGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhlIGZhY3QgdGhhdCBuZXcgYXNzZXJ0aW9ucyBhbmQgbG9naWMgcmVzdHJ1Y3R1cmluZyBhcmUgcHJlc2VudCBvbmx5IHN0cmVuZ3RoZW5zIHRoZSBjYXNlIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgZGVmaW5pdGVseSBXb3J0aEZ1enppbmcuCgpOb3csIGxldCYjMzk7cyByZWZpbmUgdGhlIGZ1enppbmcgYXBwcm9hY2ggYW5kIGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIHByaW1hcnkgY29uZmlncyBvZiBpbnRlcmVzdCBhcmUgYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGFuZCBgS1ZNX0lOVEVMX1REWGAuIEl0JiMzOTtzIHdvcnRoIHJlbWVtYmVyaW5nIHRoYXQgYEtWTV9JTlRFTF9URFhgIGRlcGVuZHMgb24gYElOVEVMX1REWF9IT1NUYC4gSXQmIzM5O3MgYSBrZXkgY29uZmlndXJhdGlvbiB0byBrZWVwIGluIG1pbmQsIGFzIGFyZSB0aGUgb3RoZXIgY29uZmlnIGRlcGVuZGVuY2llcy4gVGhlc2UgY29uZmlndXJhdGlvbnMgZGlyZWN0bHkgaW5mbHVlbmNlIHRoZSBjb2RlIHBhdGhzIHdlJiMzOTtyZSB0YXJnZXRpbmcuIEkgd2lsbCBuZWVkIHRvIGNoZWNrIHRob3NlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElOVEVMX1REWF9IT1NUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz0xODQ0PWNvbmZpZyBYODZfVVNFUl9TSEFET1dfU1RBQ0tcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjMtXG5hcmNoL3g4Ni9LY29uZmlnOjE4NjQ6Y29uZmlnIElOVEVMX1REWF9IT1NUXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA0NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgSU5URUxfVERYX0hPU1QgRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgSU5URUxfVERYX0hPU1RgLiBJIGtub3cgdGhpcyBpcyBhbiB4ODYtc3BlY2lmaWMgZmVhdHVyZSwgc28gdGhlIHBsYWNlIHRvIHN0YXJ0IGlzIGBhcmNoL3g4Ni9LY29uZmlnYC4gU3BlY2lmaWNhbGx5LCBhcm91bmQgbGluZSAxODY0LCB3aGljaCBpcyB0eXBpY2FsbHkgd2hlcmUgdGhlc2UgdHlwZXMgb2Ygb3B0aW9ucyBhcmUgZGVmaW5lZC4gVGhpcyB3aWxsIHJldmVhbCB0aGUgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZm9yIGBJTlRFTF9URFhfSE9TVGAgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzIG9uIHRoaW5ncyBsaWtlIENQVSBmZWF0dXJlcywgc3BlY2lmaWMgaGFyZHdhcmUgc3VwcG9ydCwgYW5kIHBvdGVudGlhbGx5IG90aGVyIHNlY3VyaXR5LXJlbGF0ZWQgc2V0dGluZ3MuIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyBpdHMgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBsYXJnZXIgeDg2IGVjb3N5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODYwOlx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL2FyY2gveDg2L3Noc3RrLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbjE4NjE6XHRcbjE4NjI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjE4NjM6XHRcbjE4NjQ6XHRjb25maWcgSU5URUxfVERYX0hPU1RcbjE4NjU6XHRcdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XCYjMzQ7XG4xODY2Olx0XHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUxcbjE4Njc6XHRcdGRlcGVuZHMgb24gWDg2XzY0XG4xODY4Olx0XHRkZXBlbmRzIG9uIEtWTV9JTlRFTFxuMTg2OTpcdFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXG4xODcwOlx0XHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXG4xODcxOlx0XHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xuMTg3MjpcdFx0ZGVwZW5kcyBvbiBYODZfTUNFXG4xODczOlx0XHRoZWxwXG4xODc0Olx0XHQgIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHByb3RlY3RzIGd1ZXN0IFZNcyBmcm9tIG1hbGljaW91c1xuMTg3NTpcdFx0ICBob3N0IGFuZCBjZXJ0YWluIHBoeXNpY2FsIGF0dGFja3MuICBUaGlzIG9wdGlvbiBlbmFibGVzIG5lY2Vzc2FyeSBURFhcbjE4NzY6XHRcdCAgc3VwcG9ydCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcnVuIGNvbmZpZGVudGlhbCBWTXMuXG4xODc3Olx0XG4xODc4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4xODc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTc3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIFJlY2VudCBDb2RlIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGVzZSBtb2RpZmljYXRpb25zLiBJJiMzOTtsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBGb2N1c1N5bWJvbHNgIOKAkyBpdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIHBpbi1wb2ludGVkIGEgY2x1c3RlciBvZiBjaGFuZ2VzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEtWTSAoS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSkgaW5mcmFzdHJ1Y3R1cmUgZm9yIHg4NiBhcmNoaXRlY3R1cmUuCgpJIHNlZSB0aGF0IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZCBvciBkaXJlY3RseSBjYWxsIHRoZSBtb2RpZmllZCBjb2RlOgoxLiAgYF9fa3ZtX21tdV9jcmVhdGVgIChhIHN0YXRpYyBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIHB1YmxpYyBga3ZtX21tdV9jcmVhdGVgIGZ1bmN0aW9uKS4KICAgIGBrdm1fbW11X2NyZWF0ZWAKMi4gIGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgIChhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBjYWxsZWQgYnkgYGt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGVgIGFuZCBga3ZtX2luaXRfc2hhZG93X25wdF9tbXVgKS4KICAgIGBrdm1fY2FsY190ZHBfbW11X3Jvb3RfcGFnZV9yb2xlYAogICAgYGt2bV9pbml0X3NoYWRvd19ucHRfbW11YAozLiAgYHRkeF9sb2FkX21tdV9wZ2RgIChmb3VuZCBpbiBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2ApLgo0LiAgYHRkeF90ZF9pbml0YCAoYWxzbyBpbiBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2ApLgoKT2theSwgdGhhdCYjMzk7cyB0aGUgY29yZS4gTm93LCBJIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2VhcmNoLiBJIHdhbnQgdG8ga25vdyBpZiB0aGVyZSBhcmUgYW55IGluZGlyZWN0IGRlcGVuZGVuY2llcyBvciBzaWRlLWVmZmVjdHMsIHNvIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IG90aGVyIGFmZmVjdGVkIGZ1bmN0aW9ucy4gVGhlIGNvZGUgY2hhbmdlcyBjb3VsZCBhZmZlY3Qgb3RoZXIgYXJlYXMgb2YgdGhlIHN5c3RlbSB0aGF0IGFyZSBub3QgZGlyZWN0bHkgY2FsbGVkIGJ5IHRoZSBjb3JlIGNvZGUuCgpOb3cgSSYjMzk7bGwgZGlnIGludG8gdGhlIGBhcmNoL3g4Ni9rdm0vY3B1aWQuY2AgZmlsZSBhbmQgYWxzbyBjaGVjayBvdGhlciByZWxldmFudCBmaWxlcy4gSXQgYXBwZWFycyB0aGF0IGBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHJgIHdhcyByZW1vdmVkLiBGdXJ0aGVyIGNvbmZpcm1pbmcgdGhpcywgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZSB3YXMgcmVtb3ZlZCBpbiBgY3B1aWQuaGAuCgpJIHNob3VsZCBwcm9iYWJseSBhbHNvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBrdm1fY2FsY190ZHBfbW11X3Jvb3RfcGFnZV9yb2xlYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGluZGlyZWN0IHNpZGUgZWZmZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5ODI9c3RhdGljIHVuaW9uIGt2bV9tbXVfcGFnZV9yb2xlXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5ODM6a3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5ODQtXHRcdFx0XHR1bmlvbiBrdm1fY3B1X3JvbGUgY3B1X3JvbGUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02MDA2PXN0YXRpYyB2b2lkIGluaXRfa3ZtX3RkcF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjAwOS1cdHN0cnVjdCBrdm1fbW11ICpjb250ZXh0ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnJvb3RfbW11O1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2MDEwOlx0dW5pb24ga3ZtX21tdV9wYWdlX3JvbGUgcm9vdF9yb2xlID0ga3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZSh2Y3B1LCBjcHVfcm9sZSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYwMTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzQ0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIEtWTSBURFAgTU1VIEluaXRpYWxpemF0aW9uIGFuZCBDYWxsZXJzKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBjZW50ZXJlZCBvbiBpbnZlc3RpZ2F0aW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgS1ZNIFRhZ2dlZCBEYXRhIFBvaW50ZXIgKFREUCkgTU1VLCBzcGVjaWZpY2FsbHkgdGhlIGBpbml0X2t2bV90ZHBfbW11YCBmdW5jdGlvbi4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBub3QganVzdCB0aGF0IGZ1bmN0aW9uIGluIGlzb2xhdGlvbiwgYnV0IGFsc28gdGhlIGJyb2FkZXIgY29udGV4dC4gV2hhdCBvdGhlciBjb2RlIHBhdGhzIGNhbGwgaW50byB0aGlzIGZ1bmN0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZW50cnkgcG9pbnRzIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCYjMzk7cyBpbnZva2VkLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBNTVUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgYW5kIGhvdyBURFAgaXMgaW50ZWdyYXRlZC4gSWRlbnRpZnlpbmcgdGhlIGNhbGxlcnMgd2lsbCBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtaWdodCBtYWtlIHRvIGBpbml0X2t2bV90ZHBfbW11YCBvciBob3cgdGhpcyBpbml0aWFsaXphdGlvbiBvY2N1cnMuIFRoaXMgaXMgZXNzZW50aWFsIGZvciBhIHRob3JvdWdoIHJldmlldyBhbmQgYW55IHRyb3VibGVzaG9vdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5pdF9rdm1fdGRwX21tdSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5ODM9a3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MDA1LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2MDA2OnN0YXRpYyB2b2lkIGluaXRfa3ZtX3RkcF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MDA3LVx0XHRcdCAgICAgdW5pb24ga3ZtX2NwdV9yb2xlIGNwdV9yb2xlKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjE3Nj12b2lkIGt2bV9pbml0X21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTg0LVx0XHRpZiAodGRwX2VuYWJsZWQpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYxODU6XHRcdFx0aW5pdF9rdm1fdGRwX21tdSh2Y3B1LCBjcHVfcm9sZSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxODYtXHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyOTgKCQkJCQkJCW91dHB1dDogMjM5CgkJCQkJCQl0aG91Z2h0czogNTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBNTVUgRnV6emluZyBTY29wZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBLVk0gTU1VIGZ1enppbmcsIGFuZCBJIG5lZWQgdG8gZGVmaW5lIHRoZSBhcHByb3ByaWF0ZSBzY29wZSBmb3Igb3VyIGZ1enplci4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGBrdm1faW5pdF9tbXVgIGlzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiBjYWxsZWQgcXVpdGUgZnJlcXVlbnRseSBkdXJpbmcgTU1VIHNldHVwIGFuZCByZXNldCBvcGVyYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHdoZXRoZXIgaXQgd2FzIHRvbyBicm9hZCwgYnV0IGFmdGVyIGZ1cnRoZXIgY29uc2lkZXJhdGlvbiwgaXQmIzM5O3MgYWN0dWFsbHkgcXVpdGUgd2VsbC10YXJnZXRlZCBmb3IgS1ZNIFZDUFUgaW5pdGlhbGl6YXRpb24gYW5kIG1vZGUgc3dpdGNoaW5nLCBwZXJmZWN0bHkgcmVsZXZhbnQgdG8gTU1VIGZ1enppbmcuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGZvY3VzIHN5bWJvbHMuIFdlIGhhdmU6CgoqICAgYGt2bV9tbXVfY3JlYXRlYCAtIHRoaXMgaXMgc3BlY2lmaWMgdG8gS1ZNIFZDUFUgY3JlYXRpb24sIG1ha2VzIHNlbnNlLgoqICAgYGt2bV9pbml0X21tdWAgLSBhcyBtZW50aW9uZWQsIHRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUuCiogICBga3ZtX2luaXRfc2hhZG93X25wdF9tbXVgIC0gdGhpcyBsb29rcyBzcGVjaWZpYyB0byBuZXN0ZWQgTlBUIE1NVSBpbml0aWFsaXphdGlvbi4KKiAgIGB0ZHhfbG9hZF9tbXVfcGdkYCAtIFREWC1zcGVjaWZpYywgZGVhbGluZyB3aXRoIGxvYWRpbmcgdGhlIFBHRCAoUGFnZSBHbG9iYWwgRGlyZWN0b3J5KS4KKiAgIGB0ZHhfdGRfaW5pdGAgLSBUaGlzIGlzIGEgVERYIGluaXRpYWxpemF0aW9uIGNvbW1hbmQgaGFuZGxlci4KCkFsbCB0aGVzZSBmdW5jdGlvbnMgYXBwZWFyIHJlbGV2YW50LgoKTmV4dCwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogV2UgbmVlZCB0byBlbnN1cmUgd2UgY292ZXIgdGhlIHJlbGV2YW50IEtWTSBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSBhcmUgYWltaW5nIGZvcjogYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGBJTlRFTF9URFhfSE9TVGAsIGFuZCBgS1ZNX0lOVEVMX1REWGAuIFRoZXNlIGNvbmZpZ3MgY29sbGVjdGl2ZWx5IGNvdmVyIGEgd2lkZSByYW5nZSBvZiBoYXJkd2FyZSBwbGF0Zm9ybXMuCgpGaW5hbGx5LCBsZXQmIzM5O3MgYXNzZW1ibGUgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycy4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZS4gV2UgYXJlIHNheWluZyB0aGF0IHRoaXMgcGF0Y2ggKmlzKiB3b3J0aCBmdXp6aW5nLCBhbmQgSSBuZWVkIHRvIGV4cGxhaW4gKndoeSouCgpUaGUgcmVhc29uIGlzIGJlY2F1c2UgdGhlIGNoYW5nZXMgaW1wYWN0IEtWTSBNTVUgVERQIGxldmVsIGNhbGN1bGF0aW9uIGxvZ2ljIChga3ZtX21tdV9nZXRfdGRwX2xldmVsYCwgYF9fa3ZtX21tdV9jcmVhdGVgKSwgaW50cm9kdWNlcyBhIG5ldyBgbWlycm9yX3Jvb3RfbGV2ZWxgIGZpZWxkIGluIGBrdm1fYXJjaGAsIGFuZCB3ZSYjMzk7dmUgYWRkZWQgYSBgV0FSTl9PTl9PTkNFYCBhc3NlcnRpb24gcmVsYXRlZCB0byB0aGUgbWlycm9yZWQgVERQIHJvb3QgbGV2ZWwgY29uZmlndXJhdGlvbi4gVGhpcyBsb2dpYyBpcyBhY2Nlc3NlZCB2aWEgY29tbW9uIEtWTSBpb2N0bHMgbGlrZSBgS1ZNX0NSRUFURV9WTWAsIGBLVk1fQ1JFQVRFX1ZDUFVgLCBhbmQgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucyBvbiBhbWQ2NCwgc28gaXQgc2hvdWxkIGJlIGVhc2lseSByZWFjaGFibGUuCgpTbywgYFdvcnRoRnV6emluZ2AgaXMgYHRydWVgLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNvbmZpcm1lZCwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgbG9vayBjb3JyZWN0LiBCZWZvcmUgSSBzdWJtaXQsIEkmIzM5O2xsIGRvIGEgZmluYWwgc2FuaXR5IGNoZWNrIG9uIGFsbCBwYXJhbWV0ZXJzIHRvIGVuc3VyZSBubyB0eXBvcyBvciBsb2dpY2FsIGVycm9ycyBhcmUgcHJlc2VudC4gT2theSwgYWxsIGxvb2tzIGdvb2QgdG8gZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMX1REWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9tbXVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9pbml0X21tdSYjMzQ7LAogICAgJiMzNDtrdm1faW5pdF9zaGFkb3dfbnB0X21tdSYjMzQ7LAogICAgJiMzNDt0ZHhfbG9hZF9tbXVfcGdkJiMzNDssCiAgICAmIzM0O3RkeF90ZF9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSB4ODYgTU1VIHJvb3QgbGV2ZWwgY2FsY3VsYXRpb24gYW5kIFREUCBjcmVhdGlvbiBsb2dpYyAoX19rdm1fbW11X2NyZWF0ZSwga3ZtX21tdV9nZXRfdGRwX2xldmVsKSBhbmQgdXBkYXRlcyBURFggbWlycm9yZWQgcm9vdCBsZXZlbCBoYW5kbGluZyAodGR4X2xvYWRfbW11X3BnZCwgdGR4X3RkX2luaXQpLiBJdCBhbHNvIGFkZHMgYSBuZXcgV0FSTl9PTl9PTkNFIGFzc2VydGlvbiBmb3IgdW5pbml0aWFsaXplZCBtaXJyb3Jfcm9vdF9sZXZlbC4gVGhlc2UgY29kZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGR1cmluZyBLVk0gVk0gYW5kIHZDUFUgaW5pdGlhbGl6YXRpb24vbGlmZWN5Y2xlIG9wZXJhdGlvbnMgb24geDg2XzY0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMX1REWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9tbXVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9pbml0X21tdSYjMzQ7LAogICAgJiMzNDtrdm1faW5pdF9zaGFkb3dfbnB0X21tdSYjMzQ7LAogICAgJiMzNDt0ZHhfbG9hZF9tbXVfcGdkJiMzNDssCiAgICAmIzM0O3RkeF90ZF9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSB4ODYgTU1VIHJvb3QgbGV2ZWwgY2FsY3VsYXRpb24gYW5kIFREUCBjcmVhdGlvbiBsb2dpYyAoX19rdm1fbW11X2NyZWF0ZSwga3ZtX21tdV9nZXRfdGRwX2xldmVsKSBhbmQgdXBkYXRlcyBURFggbWlycm9yZWQgcm9vdCBsZXZlbCBoYW5kbGluZyAodGR4X2xvYWRfbW11X3BnZCwgdGR4X3RkX2luaXQpLiBJdCBhbHNvIGFkZHMgYSBuZXcgV0FSTl9PTl9PTkNFIGFzc2VydGlvbiBmb3IgdW5pbml0aWFsaXplZCBtaXJyb3Jfcm9vdF9sZXZlbC4gVGhlc2UgY29kZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGR1cmluZyBLVk0gVk0gYW5kIHZDUFUgaW5pdGlhbGl6YXRpb24vbGlmZWN5Y2xlIG9wZXJhdGlvbnMgb24geDg2XzY0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyBLVk0gZGV0ZXJtaW5lcyB0aGUgVERQIGxldmVsIGZvciBWTXMgd2l0aCBtaXJyb3JlZCBwYWdlIHRhYmxlcyAoc3VjaCBhcyBURFggVk1zKSwgYnkgdHJhY2tpbmcgdGhlIG1pcnJvciByb290IGxldmVsIGV4cGxpY2l0bHkgaW4gYHN0cnVjdCBrdm1fYXJjaGAgKGBtaXJyb3Jfcm9vdF9sZXZlbGApIHNldCBkdXJpbmcgVEQgaW5pdGlhbGl6YXRpb24gaW5zdGVhZCBvZiBxdWVyeWluZyB0aGUgZ3Vlc3QgQ1BVSUQuXG5cbi0gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6IGBzdHJ1Y3Qga3ZtX2FyY2hgIGlzIHBhcnQgb2YgYHN0cnVjdCBrdm1gLCB3aGljaCBpcyBhbGxvY2F0ZWQgd2l0aCBga3Z6YWxsb2MoKWAgaW4gYGt2bV9hcmNoX2FsbG9jX3ZtKClgLCBndWFyYW50ZWVpbmcgdGhhdCBgbWlycm9yX3Jvb3RfbGV2ZWxgIGlzIHplcm8taW5pdGlhbGl6ZWQuXG4tIE5vIGtlcm5lbC10by11c2VyIGluZm8gbGVha3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IG5ldyBkYXRhIHRvIHVzZXIgc3BhY2UgdmlhIGNvcHlfdG9fdXNlciBvciBpb2N0bCBvdXRwdXRzLlxuLSBObyB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBvciBidWZmZXIgYWNjZXNzOiBMb2dpYyBjaGVja3Mgb3BlcmF0ZSBvbiBmdWxseSBpbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGFuZCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuXG5cblRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgcHJlc2VudCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gcnVuIGlzIG5vdCBuZWVkZWQ7IHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzFkMDhhMTA5NTI5YzVmMjQ2YTVmN2FhZWJiZTk5NzFkZWQ1NDE1YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMjM6MzQ6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCA2ODNiYjhiZjQzYTk0Li5lZGQ1YWQyZTViNTJkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTE0MDYsNiAmIzQzOzE0MDYsNyBAQCBzdHJ1Y3Qga3ZtX2FyY2ggewogCXN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBzcGxpdF9kZXNjX2NhY2hlOwogCiAJZ2ZuX3QgZ2ZuX2RpcmVjdF9iaXRzOwomIzQzOwlpbnQgbWlycm9yX3Jvb3RfbGV2ZWw7CiAKIAkvKgogCSAqIFNpemUgb2YgdGhlIENQVSYjMzk7cyBkaXJ0eSBsb2cgYnVmZmVyLCBpLmUuIFZNWCYjMzk7cyBQTUwgYnVmZmVyLiBBIFplcm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5jIGIvYXJjaC94ODYva3ZtL2NwdWlkLmMKaW5kZXggZGRiMDIyY2IyMDNhMi4uMzRjNjA5YTYwZWVmZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2NwdWlkLmMKQEAgLTQ4MywyMCAmIzQzOzQ4Myw2IEBAIGludCBjcHVpZF9xdWVyeV9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlyZXR1cm4gMzY7CiB9CiAKLWludCBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCXN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICpiZXN0OwotCi0JYmVzdCA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KHZjcHUsIDB4ODAwMDAwMDApOwotCWlmICghYmVzdCB8fCBiZXN0LSZndDtlYXggJmx0OyAweDgwMDAwMDA4KQotCQlnb3RvIG5vdF9mb3VuZDsKLQliZXN0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAwOCk7Ci0JaWYgKGJlc3QpCi0JCXJldHVybiAoYmVzdC0mZ3Q7ZWF4ICZndDsmZ3Q7IDE2KSAmYW1wOyAweGZmOwotbm90X2ZvdW5kOgotCXJldHVybiAwOwotfQotCiAvKgogICogVGhpcyAmIzM0O3JhdyYjMzQ7IHZlcnNpb24gcmV0dXJucyB0aGUgcmVzZXJ2ZWQgR1BBIGJpdHMgd2l0aG91dCBhbnkgYWRqdXN0bWVudHMgZm9yCiAgKiBlbmNyeXB0aW9uIHRlY2hub2xvZ2llcyB0aGF0IHVzdXJwIGJpdHMuICBUaGUgcmF3IG1hc2sgc2hvdWxkIGJlIHVzZWQgaWYgYW5kCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vY3B1aWQuaCBiL2FyY2gveDg2L2t2bS9jcHVpZC5oCmluZGV4IDhkODYzZjQ1NTg1ZGUuLjQ2YmZlODY5OWU2N2YgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9jcHVpZC5oCkBAIC02OCw3ICYjNDM7NjgsNiBAQCB2b2lkIF9faW5pdCBrdm1faW5pdF94c3RhdGVfc2l6ZXModm9pZCk7CiB1MzIgeHN0YXRlX3JlcXVpcmVkX3NpemUodTY0IHhzdGF0ZV9idiwgYm9vbCBjb21wYWN0ZWQpOwogCiBpbnQgY3B1aWRfcXVlcnlfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotaW50IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdTY0IGt2bV92Y3B1X3Jlc2VydmVkX2dwYV9iaXRzX3JhdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiBzdGF0aWMgaW5saW5lIGludCBjcHVpZF9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCmluZGV4IDA2NGVjYzMzYjkyNjcuLmQ0M2I4YjZjM2IxNzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwpAQCAtNTk1MywxOSAmIzQzOzU5NTMsMjIgQEAgdm9pZCBfX2t2bV9tbXVfcmVmcmVzaF9wYXNzdGhyb3VnaF9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAogc3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlpbnQgbWF4cGE7Ci0KLQlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk0pCi0JCW1heHBhID0gY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHZjcHUpOwotCWVsc2UKLQkJbWF4cGEgPSBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpOwotCiAJLyogdGRwX3Jvb3RfbGV2ZWwgaXMgYXJjaGl0ZWN0dXJlIGZvcmNlZCBsZXZlbCwgdXNlIGl0IGlmIG5vbnplcm8gKi8KIAlpZiAodGRwX3Jvb3RfbGV2ZWwpCiAJCXJldHVybiB0ZHBfcm9vdF9sZXZlbDsKIAomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGUgVk0gaGFzIG1pcnJvciByb290cywgdGhlbiB0aGUgcm9vdCBsZXZlbCBpcyBwcmVkZWZpbmVkIGFzIHRoZQomIzQzOwkgKiBtaXJyb3Igcm9vdCAoYW5kIGJ5IGV4dGVuc2lvbiB0aGUgbm9ybWFsIHJvb3QpIG5lZWRzIHRvIG1hdGNoIHRoZQomIzQzOwkgKiByb290IGxldmVsIHRoYXQgd2FzIGNvbmZpZ3VyZWQgZm9yIHRoZSBleHRlcm5hbCBwYWdlIHRhYmxlcyB0aGF0IGFyZQomIzQzOwkgKiBiZWluZyBtaXJyb3JlZCBieSBLVk0uCiYjNDM7CSAqLwomIzQzOwlpZiAoa3ZtX2hhc19taXJyb3JlZF90ZHAodmNwdS0mZ3Q7a3ZtKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhV0FSTl9PTl9PTkNFKCF2Y3B1LSZndDtrdm0tJmd0O2FyY2gubWlycm9yX3Jvb3RfbGV2ZWwpKQomIzQzOwkJcmV0dXJuIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5taXJyb3Jfcm9vdF9sZXZlbDsKJiM0MzsKIAkvKiBVc2UgNS1sZXZlbCBURFAgaWYgYW5kIG9ubHkgaWYgaXQmIzM5O3MgdXNlZnVsL25lY2Vzc2FyeS4gKi8KLQlpZiAobWF4X3RkcF9sZXZlbCA9PSA1ICZhbXA7JmFtcDsgbWF4cGEgJmx0Oz0gNDgpCiYjNDM7CWlmIChtYXhfdGRwX2xldmVsID09IDUgJmFtcDsmYW1wOyBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpICZsdDs9IDQ4KQogCQlyZXR1cm4gNDsKIAogCXJldHVybiBtYXhfdGRwX2xldmVsOwpAQCAtNjgzNCw3ICYjNDM7NjgzNyw3IEBAIHN0YXRpYyBpbnQgX19rdm1fbW11X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11ICptbXUsIHN0cnVjdCBrCiAJICogb3RoZXIgZXhjZXB0aW9uIGlzIGZvciBzaGFkb3dpbmcgTDEmIzM5O3MgMzItYml0IG9yIFBBRSBOUFQgb24gNjQtYml0CiAJICogS1ZNOyB0aGF0IGhvcnJvciBpcyBoYW5kbGVkIG9uLWRlbWFuZCBieSBtbXVfYWxsb2Nfc3BlY2lhbF9yb290cygpLgogCSAqLwotCWlmICh0ZHBfZW5hYmxlZCAmYW1wOyZhbXA7IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbCh2Y3B1KSAmZ3Q7IFBUMzJFX1JPT1RfTEVWRUwpCiYjNDM7CWlmICh0ZHBfZW5hYmxlZCAmYW1wOyZhbXA7IGt2bV9tbXVfZ2V0X21heF90ZHBfbGV2ZWwoKSAmZ3Q7IFBUMzJFX1JPT1RfTEVWRUwpCiAJCXJldHVybiAwOwogCiAJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfRE1BMzIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKaW5kZXggYjI3MmMyMDU4NmE3NC4uYTBiYzlmODE4ZjQzOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCkBAIC01Niw5ICYjNDM7NTYsNiBAQAogYm9vbCBlbmFibGVfdGR4IF9fcm9fYWZ0ZXJfaW5pdDsKIG1vZHVsZV9wYXJhbV9uYW1lZCh0ZHgsIGVuYWJsZV90ZHgsIGJvb2wsIDA0NDQpOwogCi0jZGVmaW5lIFREWF9TSEFSRURfQklUX1BXTF81IGdwYV90b19nZm4oQklUX1VMTCg1MSkpCi0jZGVmaW5lIFREWF9TSEFSRURfQklUX1BXTF80IGdwYV90b19nZm4oQklUX1VMTCg0NykpCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICp0ZHhfc3lzaW5mbzsKIAogdm9pZCB0ZGhfdnBfcmRfZmFpbGVkKHN0cnVjdCB2Y3B1X3RkeCAqdGR4LCBjaGFyICp1Y2xhc3MsIHUzMiBmaWVsZCwgdTY0IGVycikKQEAgLTE2MDksMTAgJiM0MzsxNjA2LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdGR2bWNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiB2b2lkIHRkeF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSwgaW50IHBnZF9sZXZlbCkKIHsKLQl1NjQgc2hhcmVkX2JpdCA9IChwZ2RfbGV2ZWwgPT0gNSkgPyBURFhfU0hBUkVEX0JJVF9QV0xfNSA6Ci0JCQkgIFREWF9TSEFSRURfQklUX1BXTF80OwotCi0JaWYgKEtWTV9CVUdfT04oc2hhcmVkX2JpdCAhPSBrdm1fZ2ZuX2RpcmVjdF9iaXRzKHZjcHUtJmd0O2t2bSksIHZjcHUtJmd0O2t2bSkpCiYjNDM7CWlmIChLVk1fQlVHX09OKHBnZF9sZXZlbCAhPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2gubWlycm9yX3Jvb3RfbGV2ZWwsIHZjcHUtJmd0O2t2bSkpCiAJCXJldHVybjsKIAogCXRkX3ZtY3Nfd3JpdGU2NCh0b190ZHgodmNwdSksIFNIQVJFRF9FUFRfUE9JTlRFUiwgcm9vdF9ocGEpOwpAQCAtMjc2MCw2ICYjNDM7Mjc1NCwxNCBAQCBERUZJTkVfQ0xBU1ModGR4X3ZtX3N0YXRlX2d1YXJkLCB0ZHhfdm1fc3RhdGVfZ3VhcmRfdCwKIAkgICAgIGlmICghSVNfRVJSKF9UKSkgdGR4X3JlbGVhc2Vfdm1fc3RhdGVfbG9ja3MoX1QpLAogCSAgICAgdGR4X2FjcXVpcmVfdm1fc3RhdGVfbG9ja3Moa3ZtKSwgc3RydWN0IGt2bSAqa3ZtKTsKIAomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZHhfc2V0X21pcnJvcl9yb290X2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgaW50IGxldmVsKQomIzQzO3sKJiM0MzsJQlVJTERfQlVHX09OKGxldmVsICE9IDQgJmFtcDsmYW1wOyBsZXZlbCAhPSA1KTsKJiM0MzsKJiM0MzsJa3ZtLSZndDthcmNoLm1pcnJvcl9yb290X2xldmVsID0gbGV2ZWw7CiYjNDM7CWt2bS0mZ3Q7YXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBncGFfdG9fZ2ZuKEJJVF9VTEwobGV2ZWwgPT0gNCA/IDQ3IDogNTEpKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHRkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpCiB7CiAJc3RydWN0IGt2bV90ZHhfaW5pdF92bSBfX3VzZXIgKnVzZXJfZGF0YSA9IHU2NF90b191c2VyX3B0cihjbWQtJmd0O2RhdGEpOwpAQCAtMjgyMyw5ICYjNDM7MjgyNSw5IEBAIHN0YXRpYyBpbnQgdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZCkKIAlrdm1fdGR4LSZndDt4ZmFtID0gdGRfcGFyYW1zLSZndDt4ZmFtOwogCiAJaWYgKHRkX3BhcmFtcy0mZ3Q7Y29uZmlnX2ZsYWdzICZhbXA7IFREWF9DT05GSUdfRkxBR1NfTUFYX0dQQVcpCi0JCWt2bS0mZ3Q7YXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBURFhfU0hBUkVEX0JJVF9QV0xfNTsKJiM0MzsJCXRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA1KTsKIAllbHNlCi0JCWt2bS0mZ3Q7YXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBURFhfU0hBUkVEX0JJVF9QV0xfNDsKJiM0MzsJCXRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA0KTsKIAogCWt2bV90ZHgtJmd0O3N0YXRlID0gVERfU1RBVEVfSU5JVElBTElaRUQ7CiBvdXQ6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDUxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiBvZiBUaGlzIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBuZWNlc3NpdGF0ZXMgYSBLTVNBTiBmdXp6aW5nIHJ1bi4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSByZWxhdGVkIHRvIFREWCAoVHJ1c3RlZCBEb21haW4gRXh0ZW5zaW9uKSBzdXBwb3J0IHdpdGhpbiBLVk0sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBtaXJyb3JlZCBURFAgbGV2ZWxzIGFuZCBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLgoKRmlyc3QsIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgbWlycm9yX3Jvb3RfbGV2ZWxgIHRvIGBzdHJ1Y3Qga3ZtX2FyY2hgIHdpdGhpbiBga3ZtX2hvc3QuaGAuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIGhvdyBgc3RydWN0IGt2bWAgYW5kIGJ5IGV4dGVuc2lvbiwgYGt2bV9hcmNoYCBhcmUgYWxsb2NhdGVkLCBiZWNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGEgS01TQU4gcmVkLWZsYWcuIEZvcnR1bmF0ZWx5LCBJIHNlZSB0aGF0IGBremFsbG9jYCBpcyB1c2VkLiBUaGF0IG1lYW5zIHRoZSBga3ZtX2FyY2hgIHN0cnVjdCBpcyAqemVyb2VkKiBhdCBhbGxvY2F0aW9uLiBUaGF0IGdpdmVzIG1lIHNvbWUgcGVhY2Ugb2YgbWluZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIG90aGVyIGFsbG9jYXRpb25zIHRob3VnaCwgYW5kIEkmIzM5O2xsIGtlZXAgdGhpcyBjaGVjayBpbiB0aGUgYmFjayBvZiBteSBtaW5kIGFzIEkgZGlnIGRlZXBlci4KClRoZSByZW1vdmFsIG9mIHRoZSBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYCBmdW5jdGlvbiBpcyBpbnRlcmVzdGluZy4gSXQgaW1wbGllcyBzb21lIGNoYW5nZXMgaW4gaG93IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgbGltaXRzIGFyZSBkZXRlcm1pbmVkLiBUaGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgcmVwbGFjZWQgaW4gYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAgd2l0aCBhIGNoZWNrIGZvciBga3ZtX2hhc19taXJyb3JlZF90ZHBgIGFuZCB0aGUgdXNlIG9mIHRoZSBuZXcgYG1pcnJvcl9yb290X2xldmVsYCBmaWVsZC4gVGhlIGNvZGUgbm93IGRpcmVjdGx5IHVzZXMgYHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5taXJyb3Jfcm9vdF9sZXZlbGAgaWYgdGhlIG1pcnJvcmVkIFREUCBpcyBlbmFibGVkLiBBbHNvLCB0aGUgcGF0Y2ggY2hhbmdlcyBga3ZtX21tdV9nZXRfdGRwX2xldmVsKHZjcHUpYCB0byBga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgZWZmZWN0IG9mIHRoYXQgY2hhbmdlIGlzLgoKYF9fa3ZtX21tdV9jcmVhdGVgIGFsc28gc2VlbXMgaW1wYWN0ZWQuIFRoaXMgZnVuY3Rpb24gaXMgYSBjb3JlIHBhcnQgb2YgaG93IHRoZSBNTVUgaXMgc2V0IHVwLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpYCB3b3JrcyB0aGUgc2FtZSB3YXksIG9yIGJldHRlciwgaW4gdGhlIGNvbnRleHRzIG9mIHRoZSBjYWxscyBpdCBpcyByZXBsYWNpbmcuCgpUaGUgY2hhbmdlcyBpbiBgdGR4LmNgIGFyZSBzaWduaWZpY2FudC4gSXQgbG9va3MgbGlrZSBgdGR4X3NldF9taXJyb3Jfcm9vdF9sZXZlbGAgaXMgYSBrZXkgYWRkaXRpb24uIEl0JiMzOTtzIHNldHRpbmcgdGhlIGBtaXJyb3Jfcm9vdF9sZXZlbGAgYW5kLCBjcml0aWNhbGx5LCBgZ2ZuX2RpcmVjdF9iaXRzYC4gVGhlIHNldHRpbmcgb2YgYGdmbl9kaXJlY3RfYml0c2AgaW5kaWNhdGVzIGEgY2hhbmdlIGluIGhvdyBndWVzdCBmcmFtZSBudW1iZXJzIGFyZSBoYW5kbGVkIHdpdGggcmVzcGVjdCB0byB0aGUgcm9vdCBsZXZlbC4gVGhlIHVzZSBvZiB0aGUgYEtWTV9CVUdfT05gIG1hY3JvIGFsc28gc3VnZ2VzdHMgdGhhdCB0aGUgYG1pcnJvcl9yb290X2xldmVsYCBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBjb3JyZWN0bHksIHdoaWNoIGlzIGdvb2QuIEJ1dCB0aGUgb2xkIG1ldGhvZCBjb3VsZCBoYXZlIGhhZCBhIGJ1ZyBoZXJlLCB0aGF0IGNvdWxkIG1lYW4gS01TQU4gd291bGQgcmV2ZWFsIGlzc3Vlcy4KClNvLCB0aGUgbmV3IGNvZGUgY2FsbHMgYHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWxgIGRpcmVjdGx5LCB3aGljaCBzZXRzIHRoZSBgbWlycm9yX3Jvb3RfbGV2ZWxgLiBUaGlzICppcyogYW4gaW5pdGlhbGl6YXRpb24gcG9pbnQsIGFuZCBpdCYjMzk7cyBnb29kIHRoYXQgaXQmIzM5O3MgZXhwbGljaXQuCgpUaGUga2V5IGNvbnNpZGVyYXRpb25zIG5vdyBhcmU6CgoxLiAgKipJbml0aWFsaXphdGlvbiBhbmQgQWxsb2NhdGlvbjoqKiBXaGlsZSBga3phbGxvY2AgaXMgdXNlZCwgYXJlIHRoZXJlIGFueSBvdGhlciBhbGxvY2F0aW9ucyBvciBzdHJ1Y3QgY29waWVzIHRoYXQgbWlnaHQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBJIG5lZWQgdG8gZ3JlcCBmb3IgaW5zdGFuY2VzIHdoZXJlIGBzdHJ1Y3Qga3ZtYCAoYW5kIHJlbGF0ZWQgc3RydWN0cykgYXJlIGFsbG9jYXRlZCBvciBjb3BpZWQgYW5kIGVuc3VyZSB0aGF0IHRoaXMgdmFyaWFibGUgaXMgaGFuZGxlZCBjb3JyZWN0bHksIGV2ZW4gaWYgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGBremFsbG9jYC4gVGhlIG1vc3Qgb2J2aW91cyBwbGFjZSB0byBncmVwIHdvdWxkIGJlIGFyb3VuZCB0aGUgdXNlIG9mIGBrdm1fYXJjaF9hbGxvY192bSgpYCBhbmQgYGt2bV9jcmVhdGVfdm1gLgoyLiAgKipDb25jdXJyZW5jeSBhbmQgUmFjZSBDb25kaXRpb25zOioqIFRoaXMgZGVhbHMgd2l0aCBURFgsIHdoaWNoIGlzIHNlY3VyaXR5IHJlbGF0ZWQuIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgYWJvdXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbiBhY2Nlc3NpbmcgdGhlIG5ldyBgbWlycm9yX3Jvb3RfbGV2ZWxgIG9yIHJlbGF0ZWQgZGF0YS4gQXJlIHRoZXJlIGFueSBsb2NrIHByb3RlY3Rpb24gaXNzdWVzLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBNTVUgYW5kIFZDUFUgaW50ZXJhY3Rpb25zPwozLiAgKipDb3JyZWN0bmVzcyBvZiB0aGUgTG9naWM6KiogVGhlIG9sZCBjb2RlIHBvdGVudGlhbGx5IGhhZCBhIGJ1Zywgd2hpY2ggdGhpcyBuZXcgY29kZSB0cmllcyB0byBmaXguIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBuZXcgY29kZSBmdW5jdGlvbnMgZXhhY3RseSBhcyBpbnRlbmRlZC4gQSBmYWlsaW5nIGFzc2VydGlvbiB3b3VsZCBtYWtlIHRoZSBLTVNBTiBmdXp6aW5nIHVubmVjZXNzYXJ5LgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIG1lbW9yeSBhY2Nlc3MgZXJyb3JzIChldmVuIHRob3VnaCBJIGFtIGN1cnJlbnRseSBvcHRpbWlzdGljIGFib3V0IHRoZSB6ZXJvLWluaXRpYWxpemF0aW9uKSwgdGhlIGludHJvZHVjdGlvbiBvZiBuZXcgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gVERQIGxldmVscywgYW5kIHRoZSBjcml0aWNhbCBuYXR1cmUgb2YgS1ZNL1REWCB3aXRoIHJlc3BlY3QgdG8gc2VjdXJpdHksIEkgdGhpbmsgYSBLTVNBTiBmdXp6aW5nIHJ1biBpcyB3YXJyYW50ZWQgaGVyZS4gSXQmIzM5O3MgdGhlIG9ubHkgd2F5IHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4gSSYjMzk7bGwgc3RhcnQgd2l0aCBmb2N1c3NlZCBmdXp6aW5nIGFyb3VuZCBNTVUgc2V0dXAgYW5kIGd1ZXN0IGFkZHJlc3Mgc3BhY2UgaGFuZGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t6YWxsb2MuKnN0cnVjdCBrdm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vY29hbGVzY2VkX21taW8uYz0xMjI9aW50IGt2bV92bV9pb2N0bF9yZWdpc3Rlcl9jb2FsZXNjZWRfbW1pbyhzdHJ1Y3Qga3ZtICprdm0sXG4tLVxudmlydC9rdm0vY29hbGVzY2VkX21taW8uYy0xMzAtXG52aXJ0L2t2bS9jb2FsZXNjZWRfbW1pby5jOjEzMTpcdGRldiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fZGV2LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xudmlydC9rdm0vY29hbGVzY2VkX21taW8uYy0xMzItXHRpZiAoIWRldilcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTEwOTk9c3RhdGljIHN0cnVjdCBrdm0gKmt2bV9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlLCBjb25zdCBjaGFyICpmZG5hbWUpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0xMTcxLVx0XHRyY3VfYXNzaWduX3BvaW50ZXIoa3ZtLVx1MDAzZWJ1c2VzW2ldLFxudmlydC9rdm0va3ZtX21haW4uYzoxMTcyOlx0XHRcdGt6YWxsb2Nfb2JqKHN0cnVjdCBrdm1faW9fYnVzLCBHRlBfS0VSTkVMX0FDQ09VTlQpKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTE3My1cdFx0aWYgKCFrdm0tXHUwMDNlYnVzZXNbaV0pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz00NDI1PXN0YXRpYyBsb25nIGt2bV92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDUwNC1cdFx0ciA9IC1FTk9NRU07XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQ1MDU6XHRcdGt2bV9yZWdzID0ga3phbGxvY19vYmooc3RydWN0IGt2bV9yZWdzKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDUwNi1cdFx0aWYgKCFrdm1fcmVncylcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ1MzEtXHRjYXNlIEtWTV9HRVRfU1JFR1M6IHtcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDUzMjpcdFx0a3ZtX3NyZWdzID0ga3phbGxvY19vYmooc3RydWN0IGt2bV9zcmVncyk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ1MzMtXHRcdHIgPSAtRU5PTUVNO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDYyMy1cdGNhc2UgS1ZNX0dFVF9GUFU6IHtcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDYyNDpcdFx0ZnB1ID0ga3phbGxvY19vYmooc3RydWN0IGt2bV9mcHUpO1xudmlydC9rdm0va3ZtX21haW4uYy00NjI1LVx0XHRyID0gLUVOT01FTTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc4MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEtWTSBBcmNoaXRlY3R1cmUgb24geDg2KioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIEtWTSB2aXJ0dWFsaXphdGlvbiBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBvbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gTXkgZm9jdXMgaXMgb24gaG93IGBrdm1fYXJjaF9hbGxvY192bWAgb3IgdGhlIGdlbmVyYWwgYGt2bWAgYWxsb2NhdGlvbiBmdW5jdGlvbnMgd29yay4gSSYjMzk7bSBoZWFkaW5nIGRpcmVjdGx5IGludG8gYGFyY2gveDg2L2t2bS94ODYuY2Ag4oCTIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZm9yIHg4Ni1zcGVjaWZpYyBLVk0gZnVuY3Rpb25hbGl0eSBzaG91bGQgcmVzaWRlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgYWJvdXQgaG93IGd1ZXN0IHBoeXNpY2FsIG1lbW9yeSBpcyBtYXBwZWQsIGhvdyB2aXJ0dWFsIG1hY2hpbmUgc3RydWN0dXJlcyBhcmUgc2V0IHVwLCBhbmQgaG93IHJlc291cmNlcyBhcmUgbWFuYWdlZCBmb3IgZWFjaCB2aXJ0dWFsIG1hY2hpbmUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9jZXNzIHNvIEkgY2FuIG9wdGltaXplIHRoaXMgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF9hbGxvY192bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDUzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBLVk0gVk0gQ3JlYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYHZpcnQva3ZtL2t2bV9tYWluLmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSBob25lIGluIG9uIGBrdm1fY3JlYXRlX3ZtYC4gVGhpcyBpcyB0aGUgY29yZSBmdW5jdGlvbiB3aGVyZSBhIEtWTSB2aXJ0dWFsIG1hY2hpbmUgaXMgYnJvdWdodCBpbnRvIGV4aXN0ZW5jZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW5pdGlhbGl6YXRpb24gZmxvdywgZXNwZWNpYWxseSBub3cgd2l0aCB0aGVzZSBuZXcgYXJjaGl0ZWN0dXJhbCBjb25zaWRlcmF0aW9ucy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgc3RlcHMgaW4gaGVyZTogcmVzb3VyY2UgYWxsb2NhdGlvbiwgbWVtb3J5IG1hbmFnZW1lbnQgc2V0dXAsIHZDUFUgY3JlYXRpb24sIGFuZCB0aGUgbGlrZS4gSXQgd2lsbCBiZSBpbnRlcmVzdGluZyB0byBzZWUgaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgdGhlIGxhdGVzdCBzZWN1cml0eSBtaXRpZ2F0aW9ucyBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMuIEkmIzM5O20ga2VlbiB0byBzcG90IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgd2hlcmUgdGhleSBtaWdodCBoYXZlIGltcGxlbWVudGVkIGNsZXZlciB0cmlja3MgdG8gZW5oYW5jZSBWTSBwZXJmb3JtYW5jZSBvciBpc29sYXRpb24uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdOKAmXMgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEwMDpcdHtcbjExMDE6XHRcdHN0cnVjdCBrdm0gKmt2bSA9IGt2bV9hcmNoX2FsbG9jX3ZtKCk7XG4xMTAyOlx0XHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcbjExMDM6XHRcdGludCByLCBpLCBqO1xuMTEwNDpcdFxuMTEwNTpcdFx0aWYgKCFrdm0pXG4xMTA2Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuMTEwNzpcdFxuMTEwODpcdFx0S1ZNX01NVV9MT0NLX0lOSVQoa3ZtKTtcbjExMDk6XHRcdG1tZ3JhYihjdXJyZW50LVx1MDAzZW1tKTtcbjExMTA6XHRcdGt2bS1cdTAwM2VtbSA9IGN1cnJlbnQtXHUwMDNlbW07XG4xMTExOlx0XHRrdm1fZXZlbnRmZF9pbml0KGt2bSk7XG4xMTEyOlx0XHRtdXRleF9pbml0KFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbjExMTM6XHRcdG11dGV4X2luaXQoXHUwMDI2a3ZtLVx1MDAzZWlycV9sb2NrKTtcbjExMTQ6XHRcdG11dGV4X2luaXQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuMTExNTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbjExMTY6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmt2bS1cdTAwM2Vtbl9pbnZhbGlkYXRlX2xvY2spO1xuMTExNzpcdFx0cmN1d2FpdF9pbml0KFx1MDAyNmt2bS1cdTAwM2Vtbl9tZW1zbG90c191cGRhdGVfcmN1d2FpdCk7XG4xMTE4Olx0XHR4YV9pbml0KFx1MDAyNmt2bS1cdTAwM2V2Y3B1X2FycmF5KTtcbjExMTk6XHQjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4xMTIwOlx0XHR4YV9pbml0KFx1MDAyNmt2bS1cdTAwM2VtZW1fYXR0cl9hcnJheSk7XG4xMTIxOlx0I2VuZGlmXG4xMTIyOlx0XG4xMTIzOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZrdm0tXHUwMDNlZ3BjX2xpc3QpO1xuMTEyNDpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2a3ZtLVx1MDAzZWdwY19sb2NrKTtcbjExMjU6XHRcbjExMjY6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmt2bS1cdTAwM2VkZXZpY2VzKTtcbjExMjc6XHRcdGt2bS1cdTAwM2VtYXhfdmNwdXMgPSBLVk1fTUFYX1ZDUFVTO1xuMTEyODpcdFxuMTEyOTpcdFx0QlVJTERfQlVHX09OKEtWTV9NRU1fU0xPVFNfTlVNIFx1MDAzZSBTSFJUX01BWCk7XG4xMTMwOlx0XG4xMTMxOlx0XHQvKlxuMTEzMjpcdFx0ICogRm9yY2Ugc3Vic2VxdWVudCBkZWJ1Z2ZzIGZpbGUgY3JlYXRpb25zIHRvIGZhaWwgaWYgdGhlIFZNIGRpcmVjdG9yeVxuMTEzMzpcdFx0ICogaXMgbm90IGNyZWF0ZWQgKGJ5IGt2bV9jcmVhdGVfdm1fZGVidWdmcygpKS5cbjExMzQ6XHRcdCAqL1xuMTEzNTpcdFx0a3ZtLVx1MDAzZWRlYnVnZnNfZGVudHJ5ID0gRVJSX1BUUigtRU5PRU5UKTtcbjExMzY6XHRcbjExMzc6XHRcdHNucHJpbnRmKGt2bS1cdTAwM2VzdGF0c19pZCwgc2l6ZW9mKGt2bS1cdTAwM2VzdGF0c19pZCksIFwmIzM0O2t2bS0lZFwmIzM0OyxcbjExMzg6XHRcdFx0IHRhc2tfcGlkX25yKGN1cnJlbnQpKTtcbjExMzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk4MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZnVuY3Rpb24gYGt2bV9hcmNoX2FsbG9jX3ZtYDoKCioqRGlzc2VjdGluZyBga3ZtX2FyY2hfYWxsb2Nfdm1gKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBga3ZtX2FyY2hfYWxsb2Nfdm1gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzOiB3aGF0ICpleGFjdGx5KiBpcyBpdCBkb2luZz8gQmFzZWQgb24gdGhlIG5hbWUsIGl0IHNlZW1zIHRvIGJlIGludm9sdmVkIHdpdGggYWxsb2NhdGluZyBhIHZpcnR1YWwgbWFjaGluZSB3aXRoaW4gdGhlIEtWTSAoS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSkgY29udGV4dCwgYW5kIHRoZSAmIzM0O2FyY2gmIzM0OyBwYXJ0IHN1Z2dlc3RzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBoYW5kbGluZy4gVGhhdCBtYWtlcyBzZW5zZS4gQmVmb3JlIEkgY2FuIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBuaXR0eS1ncml0dHkgb2YgaXRzIGltcGxlbWVudGF0aW9uLCBJIG5lZWQgYSBwcmVjaXNlIGRlZmluaXRpb24uIFdoYXQgYXJlIHRoZSBpbnB1dHM/IFdoYXQgZG9lcyBpdCByZXR1cm4sIGFuZCB3aGF0IGlzIHRoZSBicm9hZGVyIGNvbnRleHQgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBvcGVyYXRlcz8gSXMgaXQgY2FsbGVkIGVhcmx5IGluIHRoZSBWTSBjcmVhdGlvbiBwcm9jZXNzLCBvciBsYXRlcj8gSG93IGRvZXMgdGhpcyBmdW5jdGlvbiByZWxhdGUgdG8gdGhlIG92ZXJhbGwgVk0gaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IFVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgc3RydWN0dXJlcyB0aGF0IGl0IG9wZXJhdGVzIG9uIGlzIGtleS4gV2hlcmUgY2FuIEkgZmluZCB0aGUgcHJlY2lzZSBkZXRhaWxzIG9mIHRoaXMgZnVuY3Rpb24mIzM5O3MgcHVycG9zZT8gSSBjYW4gaW1hZ2luZSBpdCBpcyByZXNwb25zaWJsZSBmb3IgdGhpbmdzIGxpa2UgYWxsb2NhdGluZyB0aGUgVk0mIzM5O3MgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBwZXJoYXBzIGluaXRpYWxpemluZyBzb21lIGFyY2hpdGVjdHVyYWwgc3RhdGUsIGFuZCBwb3RlbnRpYWxseSBhc3NvY2lhdGluZyBpdCB3aXRoIGEgc3BlY2lmaWMgQ1BVIG9yIHNldCBvZiBDUFVzLCBidXQgYSBkZWZpbml0aW9uIGlzIG5lZWRlZC4gVGltZSB0byBzZWFyY2ggdGhlIHNvdXJjZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF9hbGxvY192bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MTQ5OD11MzIga3ZtX2dldF9wYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSk7XG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTE1MDAtI2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfVk1fQUxMT0NcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoxNTAxOnN0cnVjdCBrdm0gKmt2bV9hcmNoX2FsbG9jX3ZtKHZvaWQpO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTE1MDItXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmM9NTEwPWxvbmcga3ZtX2FyY2hfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jLTUxNS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jOjUxNjpzdHJ1Y3Qga3ZtICprdm1fYXJjaF9hbGxvY192bSh2b2lkKVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtNTE3LXtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oPTE3OTU9ZXh0ZXJuIHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMga3ZtX25lc3RlZF9vcHMgX19yZWFkX21vc3RseTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTE4MTMtI2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfVk1fQUxMT0NcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MTgxNDpzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm0gKmt2bV9hcmNoX2FsbG9jX3ZtKHZvaWQpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTE4MTUte1xuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xNjk3PXZvaWQga3ZtX2FyY2hfY3JlYXRlX3ZtX2RlYnVnZnMoc3RydWN0IGt2bSAqa3ZtKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTcwMS0gKiBBbGwgYXJjaGl0ZWN0dXJlcyB0aGF0IHdhbnQgdG8gdXNlIHZ6YWxsb2MgY3VycmVudGx5IGFsc29cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxNzAyOiAqIG5lZWQgdGhlaXIgb3duIGt2bV9hcmNoX2FsbG9jX3ZtIGltcGxlbWVudGF0aW9uLlxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE3MDMtICovXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTcwNDpzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm0gKmt2bV9hcmNoX2FsbG9jX3ZtKHZvaWQpXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTcwNS17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0xMDk5PXN0YXRpYyBzdHJ1Y3Qga3ZtICprdm1fY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSwgY29uc3QgY2hhciAqZmRuYW1lKVxudmlydC9rdm0va3ZtX21haW4uYy0xMTAwLXtcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTEwMTpcdHN0cnVjdCBrdm0gKmt2bSA9IGt2bV9hcmNoX2FsbG9jX3ZtKCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExMDItXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk4NwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gS1ZNIEhvc3QgSW50ZXJydXB0IEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBLVk0gaG9zdCBjb2RlLi4uIHNwZWNpZmljYWxseSwgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBpbnRlcnJ1cHQgaW5qZWN0aW9uLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oYCDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIG1hY3JvcyBmb3IgdGhlIHg4NiBLVk0gaG9zdCBhcmNoaXRlY3R1cmUgYXJlIGRlZmluZWQuIE5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBzZWN0aW9uLCBzbyBsZXQgbWUgZmluZCB0aGUgYGt2bV9ob3N0LmhgIGZpbGUgYW5kIGp1bXAgZG93biB0byBsaW5lIDE4MTQuIE15IGluc3RpbmN0cyBzdWdnZXN0IGl0IHdpbGwgYmUgc29tZSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgaW50ZXJydXB0IG1hbmFnZW1lbnQuIEl0IG1pZ2h0IGJlIGEgZGVmaW5pdGlvbiBmb3IgYW4gaW50ZXJydXB0LXJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmUsIGFuIGlubGluZSBmdW5jdGlvbiBkZWFsaW5nIHdpdGggaW50ZXJydXB0IGluamVjdGlvbiwgb3IgcGVyaGFwcyBldmVuIGEgbWFjcm8gcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIGludGVycnVwdCB3aW5kb3cuIEnigJltIGV4cGVjdGluZyB0byBmaW5kIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiBob3cgdGhlIGhvc3QgVk0gaW50ZXJhY3RzIHdpdGggdGhlIHZpcnR1YWxpemVkIGludGVycnVwdHMgYW5kIGhvdyB0aGV5JiMzOTtyZSBkZWxpdmVyZWQgdG8gdGhlIGd1ZXN0cy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODEyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MTI6XHRcbjE4MTM6XHQjZGVmaW5lIF9fS1ZNX0hBVkVfQVJDSF9WTV9BTExPQ1xuMTgxNDpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZClcbjE4MTU6XHR7XG4xODE2Olx0XHRyZXR1cm4ga3Z6YWxsb2Moa3ZtX3g4Nl9vcHMudm1fc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbjE4MTc6XHR9XG4xODE4Olx0XG4xODE5Olx0I2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfVk1fRlJFRVxuMTgyMDpcdHZvaWQga3ZtX2FyY2hfZnJlZV92bShzdHJ1Y3Qga3ZtICprdm0pO1xuMTgyMTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDY2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgbWlycm9yX3Jvb3RfbGV2ZWxgIGluIEtWTSB3aXRoIFREWCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBtaXJyb3Jfcm9vdF9sZXZlbGAgZmllbGQgd2l0aGluIHRoZSBga3ZtX2FyY2hgIHN0cnVjdC4gSSBzZWUgdGhhdCBga3Z6YWxsb2NgIGlzIHRoZSBhbGxvY2F0b3IgZm9yIHRoZSBga3ZtYCBzdHJ1Y3QsIG1lYW5pbmcgaXQmIzM5O3MgemVyby1pbml0aWFsaXplZCB3aGVuIGEgS1ZNIGlzIGNyZWF0ZWQuIFRoaXMgbWVhbnMgYGt2bS0mZ3Q7YXJjaC5taXJyb3Jfcm9vdF9sZXZlbGAgc3RhcnRzIGF0IDAsIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlci4KCkkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGludGVyYWN0aW9uIHdpdGggVERYLCBuYXR1cmFsbHkuIFRoZSBjb2RlIHNob3dzIHRoYXQgZHVyaW5nIFREWCBWTSBpbml0aWFsaXphdGlvbiB2aWEgYHRkeF90ZF9pbml0YCwgdGhlIGB0ZHhfc2V0X21pcnJvcl9yb290X2xldmVsYCBmdW5jdGlvbiBpcyB3aGF0IGFjdHVhbGx5IHNldHMgYGt2bS0mZ3Q7YXJjaC5taXJyb3Jfcm9vdF9sZXZlbGAgdG8gZWl0aGVyIDQgb3IgNSwgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpY3MsIEkgYXNzdW1lLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB3aGVyZSBpdCYjMzk7cyAqdXNlZCouIEkgc2VlIGl0JiMzOTtzIGFjY2Vzc2VkIHdpdGhpbiBga3ZtX21tdV9nZXRfdGRwX2xldmVsKHZjcHUpYC4gSGVyZSwgdGhlcmUmIzM5O3MgYSBjaGVjayB1c2luZyBga3ZtX2hhc19taXJyb3JlZF90ZHAodmNwdS0mZ3Q7a3ZtKWAuIEFzc3VtaW5nIHRoZSBtaXJyb3IgaXMgZW5hYmxlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGBtaXJyb3Jfcm9vdF9sZXZlbGAuIENydWNpYWxseSwgdGhlcmUmIzM5O3MgYSBgV0FSTl9PTl9PTkNFYCBoZXJlLCBlbnN1cmluZyB0aGF0IGBtaXJyb3Jfcm9vdF9sZXZlbGAgaXMgYWN0dWFsbHkgaW5pdGlhbGl6ZWQsIHdoaWNoIHNob3VsZCBiZSBmaW5lIGlmIGNhbGxlZCBhZnRlciBgdGR4X3RkX2luaXRgLgoKTmV4dCwgSSBzZWUgaXQmIzM5O3MgdXNlZCBpbiBgdGR4X2xvYWRfbW11X3BnZGAuIFRoZXJlJiMzOTtzIGEgYEtWTV9CVUdfT05gIGhlcmUuIFRoaXMgaXMgYSBjcml0aWNhbCBjaGVjayEgSXQgYXNzZXJ0cyB0aGF0IHRoZSBwYWdlIGdsb2JhbCBkaXJlY3RvcnkgKFBHRCkgbGV2ZWwgbWF0Y2hlcyBgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm1pcnJvcl9yb290X2xldmVsYC4gVGhpcyBpcyBsaWtlbHkgYSBrZXkgY29uc2lzdGVuY3kgY2hlY2sgdG8gZW5zdXJlIHRoZSBNTVUgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgdW5kZXIgVERYLgoKRmluYWxseSwgaW4gYF9fa3ZtX21tdV9jcmVhdGVgLCBJIG5vdGljZSB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbmFsIHJldHVybiBpZiBURFggaXMgZW5hYmxlZCBhbmQgdGhlIG1heCBURFAgbGV2ZWwgaXMgZ3JlYXRlciB0aGFuIGBQVDMyRV9ST09UX0xFVkVMYC4gVGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQgdG8gdGhlIG1pcnJvciBsZXZlbCBjYWxjdWxhdGlvbnMuCgpPa2F5LCBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGRpcmVjdCB1c2VzLiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlLiBMZXQgbWUgcXVpY2tseSBzY2FuIHRoZSBjb2RlYmFzZSBmb3IgYW55IG90aGVyIHJlZmVyZW5jZXMgdG8gYG1pcnJvcl9yb290X2xldmVsYCwgYXMgd2VsbCBhcyB0aG9zZSBub3ctcmVtb3ZlZCBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYCBhbmQgYGt2bV9oYXNfbWlycm9yZWRfdGRwYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gaW5kaXJlY3QgaW1wYWN0cyBJJiMzOTt2ZSBtaXNzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pcnJvcl9yb290X2xldmVsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MTE2MT1zdHJ1Y3Qga3ZtX2FyY2gge1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMTQwOC1cdGdmbl90IGdmbl9kaXJlY3RfYml0cztcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MTQwOTpcdGludCBtaXJyb3Jfcm9vdF9sZXZlbDtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMTQxMC1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTQ9c3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NjYtXHRpZiAoa3ZtX2hhc19taXJyb3JlZF90ZHAodmNwdS1cdTAwM2Vrdm0pIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTY3Olx0ICAgICFXQVJOX09OX09OQ0UoIXZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWwpKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTY4Olx0XHRyZXR1cm4gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbDtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk2OS1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTE2MDc9dm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE2MDgte1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNjA5Olx0aWYgKEtWTV9CVUdfT04ocGdkX2xldmVsICE9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWwsIHZjcHUtXHUwMDNla3ZtKSlcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTYxMC1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9Mjc1Mz1ERUZJTkVfQ0xBU1ModGR4X3ZtX3N0YXRlX2d1YXJkLCB0ZHhfdm1fc3RhdGVfZ3VhcmRfdCxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI3NTYtXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjI3NTc6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBpbnQgbGV2ZWwpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI3NTgte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjc2MC1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6Mjc2MTpcdGt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsID0gbGV2ZWw7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI3NjItXHRrdm0tXHUwMDNlYXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBncGFfdG9fZ2ZuKEJJVF9VTEwobGV2ZWwgPT0gNCA/IDQ3IDogNTEpKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTI3NjU9c3RhdGljIGludCB0ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjgyNy1cdGlmICh0ZF9wYXJhbXMtXHUwMDNlY29uZmlnX2ZsYWdzIFx1MDAyNiBURFhfQ09ORklHX0ZMQUdTX01BWF9HUEFXKVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoyODI4Olx0XHR0ZHhfc2V0X21pcnJvcl9yb290X2xldmVsKGt2bSwgNSk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI4MjktXHRlbHNlXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjI4MzA6XHRcdHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA0KTtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjgzMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NTAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEtWTSBNTVUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIEtWTSBNTVUgY29uZmlndXJhdGlvbiB0byB0cm91Ymxlc2hvb3QgdGhpcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgY291cGxlIG9mIGtleSBmdW5jdGlvbnM6IGBfX2t2bV9tbXVfY3JlYXRlYCBhbmQgYGt2bV9tbXVfZ2V0X21heF90ZHBfbGV2ZWwoKWAuIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgd2F5IHRoZSBNTVUgaXMgYmVpbmcgc2V0IHVwIGluIHRoaXMgaW5zdGFuY2UsIGFuZCB0aGF0IGxpa2VseSBzdGFydHMgd2l0aCB0aGUgY3JlYXRpb24gcHJvY2Vzcy4gSSBleHBlY3QgYF9fa3ZtX21tdV9jcmVhdGVgIHRvIGJlIHdoZXJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHRoZSBpbml0aWFsIHBhZ2UgdGFibGVzIGFyZSBlc3RhYmxpc2hlZC4gVGhlbiBJIHdhbnQgdG8ga25vdyB3aGF0IHRoZSBtYXhpbXVtIFREUCBsZXZlbCBpcyBiZWNhdXNlIHRoYXQgd2lsbCBlZmZlY3Qgd2hhdCBpcyBnb2luZyBvbiBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwuIEZyb20gdGhlcmUgSSBjYW4gY2hlY2sgb24gcG9zc2libGUgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9jcHVpZC5jPTE0MTg9c3RhdGljIGlubGluZSBpbnQgX19kb19jcHVpZF9mdW5jKHN0cnVjdCBrdm1fY3B1aWRfYXJyYXkgKmFycmF5LCB1MzIgZnVuY3Rpb24pXG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTgxMS1cdFx0XHRnX3BoeXNfYXMgPSBwaHlzX2FzO1xuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTgxMjpcdFx0XHRpZiAoa3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpIFx1MDAzYyA1KVxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTgxMy1cdFx0XHRcdGdfcGh5c19hcyA9IG1pbihnX3BoeXNfYXMsIDQ4VSk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS5oPTk5PXN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfaGFzX21iZWMoc3RydWN0IGt2bV9tbXUgKm1tdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTAzLVxuYXJjaC94ODYva3ZtL21tdS5oOjEwNDp1OCBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKHZvaWQpO1xuYXJjaC94ODYva3ZtL21tdS5oLTEwNS1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTQ9c3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NzYtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5Nzc6dTgga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCh2b2lkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTc4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY4MTM9c3RhdGljIGludCBfX2t2bV9tbXVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXUgKm1tdSwgc3RydWN0IGt2bV9wYWdld2FsayAqdylcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY4MzktXHQgKi9cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Njg0MDpcdGlmICh0ZHBfZW5hYmxlZCBcdTAwMjZcdTAwMjYga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpIFx1MDAzZSBQVDMyRV9ST09UX0xFVkVMKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODQxLVx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyOTAKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIEtWTSYjMzk7cyBNZW1vcnkgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyB6b29tIGluIG9uIGEgY291cGxlIG9mIGNydWNpYWwgS1ZNIE1NVSBmdW5jdGlvbnM6IGBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsYCBhbmQgYF9fa3ZtX21tdV9jcmVhdGVgLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGZ1bmN0aW9ucyBpcyBrZXkgdG8gZ3Jhc3BpbmcgaG93IEtWTSBtYW5hZ2VzIGd1ZXN0IHBoeXNpY2FsIG1lbW9yeSBhbmQgdHJhbnNsYXRlcyBpdCB0byBob3N0IHBoeXNpY2FsIG1lbW9yeSwgcGFydGljdWxhcmx5IHRoZSBoYW5kbGluZyBvZiBUcmFuc2xhdGlvbiBMb29rYXNpZGUgQnVmZmVycyAoVExCcykgYW5kIG5lc3RlZCBwYWdpbmcuIGBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsYCBsaWtlbHkgcmV2ZWFscyB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgVHJhbnNsYXRpb24gRGVwdGggUGFnaW5nIGxldmVsLCBoaW50aW5nIGF0IHRoZSBkZXB0aCBvZiB0aGUgcGFnZSB0YWJsZSBoaWVyYXJjaHkgS1ZNIGNhbiBzdXBwb3J0IGFuZCBob3cgbmVzdGVkIHBhZ2luZyBpcyBoYW5kbGVkLCBwb3NzaWJseSBhIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gdGhlIGhhbmRsaW5nIG9mIGd1ZXN0IHBhZ2UgdGFibGVzIGFuZCBob3cgdGhleSBhcmUgdHJhbnNsYXRlZCB0byBob3N0IHBhZ2UgdGFibGVzLiBBbmQgYF9fa3ZtX21tdV9jcmVhdGVgLCB3ZWxsIHRoYXQmIzM5O3MgdGhlIHJlYWwgbWVhdCBhbmQgcG90YXRvZXMgLSB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIE1NVSBzdHJ1Y3R1cmUgZ2V0cyBpbml0aWFsaXplZCBhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcyBmb3IgaGFuZGxpbmcgZ3Vlc3QgbWVtb3J5IGFyZSBzZXQgdXAuIEkmIzM5O20ga2VlbiB0byBkaXNzZWN0IGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QgdG8gc2VlIGhvdyBLVk0gaGFuZGxlcyBtZW1vcnkgdmlydHVhbGl6YXRpb24gaW4gdGhlIG1vc3QgZnVuZGFtZW50YWwgd2F5LCBpbmNsdWRpbmcgdGhpbmdzIGxpa2UgcGFnZSB0YWJsZSB3YWxrcywgc2hhZG93aW5nLCBhbmQgdGhlIGRpcnR5L2FjY2Vzc2VkIGJpdCB0cmFja2luZy4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB0aGUgZGV0YWlscyBvZiB0aGUgTU1VIGNyZWF0aW9uLCB0byBzZWUgd2hpY2ggc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcyBhcmUgdXRpbGl6ZWQgaW4gS1ZNLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1OTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU5NzA6XHRcdC8qIFVzZSA1LWxldmVsIFREUCBpZiBhbmQgb25seSBpZiBpdCYjMzk7cyB1c2VmdWwvbmVjZXNzYXJ5LiAqL1xuNTk3MTpcdFx0aWYgKG1heF90ZHBfbGV2ZWwgPT0gNSBcdTAwMjZcdTAwMjYgY3B1aWRfbWF4cGh5YWRkcih2Y3B1KSBcdTAwM2M9IDQ4KVxuNTk3MjpcdFx0XHRyZXR1cm4gNDtcbjU5NzM6XHRcbjU5NzQ6XHRcdHJldHVybiBtYXhfdGRwX2xldmVsO1xuNTk3NTpcdH1cbjU5NzY6XHRcbjU5Nzc6XHR1OCBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKHZvaWQpXG41OTc4Olx0e1xuNTk3OTpcdFx0cmV0dXJuIHRkcF9yb290X2xldmVsID8gdGRwX3Jvb3RfbGV2ZWwgOiBtYXhfdGRwX2xldmVsO1xuNTk4MDpcdH1cbjU5ODE6XHRcbjU5ODI6XHRzdGF0aWMgdW5pb24ga3ZtX21tdV9wYWdlX3JvbGVcbjU5ODM6XHRrdm1fY2FsY190ZHBfbW11X3Jvb3RfcGFnZV9yb2xlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbjU5ODQ6XHRcdFx0XHRcdHVuaW9uIGt2bV9jcHVfcm9sZSBjcHVfcm9sZSlcbjU5ODU6XHR7XG41OTg2Olx0XHR1bmlvbiBrdm1fbW11X3BhZ2Vfcm9sZSByb2xlID0gezB9O1xuNTk4NzpcdFxuNTk4ODpcdFx0cm9sZS5jcjBfd3AgPSB0cnVlO1xuNTk4OTpcdFx0cm9sZS5jcjRfc21lcCA9IGt2bV94ODZfY2FsbCh0ZHBfaGFzX3NtZXApKHZjcHUtXHUwMDNla3ZtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMjcKCQkJCQkJCW91dHB1dDogMjMzCgkJCQkJCQl0aG91Z2h0czogMzQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgS01TQU4gSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgbG9va2luZyBwcm9taXNpbmcsIGJ1dCB3ZSBuZWVkIHRvIGJlIHRob3JvdWdoLiBGaXJzdCwgbGV0JiMzOTtzIG1ldGhvZGljYWxseSBjaGVjayBlYWNoIEtNU0FOIHJlcXVpcmVtZW50LiBJcyB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGFueSBrZXJuZWwgc3RydWN0dXJlIGRhdGEgdGhhdCBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIHdpdGhvdXQgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQ/IE5vLCBub3RoaW5nIGlzIG1vZGlmaWVkIG9yIGludHJvZHVjZWQuIFRoZSBuZXh0IGlzIHRvIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGJlaW5nIHJlYWQuIFRoZSBvbmx5IG5ldyBhZGRpdGlvbiBpcyBgbWlycm9yX3Jvb3RfbGV2ZWxgIHdpdGhpbiBgc3RydWN0IGt2bV9hcmNoYC4gR2l2ZW4gdGhhdCBgc3RydWN0IGt2bWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrdnphbGxvY2AgaW4gYGt2bV9hcmNoX2FsbG9jX3ZtYCwgYG1pcnJvcl9yb290X2xldmVsYCBpcyBndWFyYW50ZWVkIHRvIGJlIHplcm9lZCBkdXJpbmcgVk0gY3JlYXRpb24uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LgoKTmV4dCwgZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBjb25kaXRpb25hbCBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIGBtaXJyb3Jfcm9vdF9sZXZlbGAgaXMgaW5pdGlhbGl6ZWQgdG8gemVybyB1cG9uIGFsbG9jYXRpb24gYW5kIGlzIGV4cGxpY2l0bHkgc2V0IGxhdGVyIHZpYSBgdGR4X3NldF9taXJyb3Jfcm9vdF9sZXZlbCgpYC4gTm8gd29ycmllcyB0aGVyZS4gSG93IGFib3V0IHBvdGVudGlhbCBtb2RpZmljYXRpb25zIHRvIGJvdW5kcyBvciBsZW5ndGhzIHRoYXQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgbm90IGF0IGFsbC4gVGhpcyBwYXRjaCByZWZhY3RvcnMgaG93IHdlIGRldGVybWluZSB0aGUgVERQIGxldmVsIGZvciBURFggVk1zIHdpdGggbWlycm9yZWQgcGFnZSB0YWJsZXMuIEluc3RlYWQgb2YgcXVlcnlpbmcgQ1BVSUQgdG8gZGV0ZXJtaW5lIHRoZSBndWVzdCYjMzk7cyBtYXggcGh5c2ljYWwgYWRkcmVzcywgaXQgZXhwbGljaXRseSByZWNvcmRzIHRoZSBgbWlycm9yX3Jvb3RfbGV2ZWxgIGNvbmZpZ3VyZWQgZHVyaW5nIFREWCBWTSBpbml0aWFsaXphdGlvbiBpbiBgdGR4X3RkX2luaXRgIGFuZCB1c2VzIHRoYXQuIFNvIGl0IGxvb2tzIGxpa2UgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBhbmQgd2VsbC1kZWZpbmVkLgoKRmluYWxseSwgYXJlIHRoZXJlIGFueSBpbmZvLWxlYWsgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW55d2hlcmU/IE5vLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCB3ZSYjMzk7cmUgaW4gdGhlIGNsZWFyLgoKU28sIGluIGNvbmNsdXNpb24sIGl0IHNlZW1zIHRoYXQgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBidWlsZHMgc2hvdWxkIGJlIGZ1bGx5IHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3VlcyDigJMgYW55IGFzc2VydGlvbnMsIGBXQVJOX09OYHMsIGxvZ2ljIGVycm9ycy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGhlcmUgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgcnVuLgoKTm93LCBhIHF1aWNrIGRvdWJsZS1jaGVjazogYE5lZWRzS01TQU5gIHNob3VsZCBkZWZpbml0ZWx5IGJlIGBmYWxzZWAuCgpPa2F5LCBJJiMzOTttIGNvbmZpZGVudCBpbiBteSBhbmFseXNpcy4gVGltZSB0byB3cml0ZSB1cCBhIGNvbmNpc2UsIGRldGFpbGVkIHJlYXNvbmluZyBmb3Igc2V0dGluZyB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyBLVk0gZGV0ZXJtaW5lcyB0aGUgVERQIGxldmVsIGZvciBWTXMgd2l0aCBtaXJyb3JlZCBwYWdlIHRhYmxlcyAoc3VjaCBhcyBURFggVk1zKSwgYnkgdHJhY2tpbmcgdGhlIG1pcnJvciByb290IGxldmVsIGV4cGxpY2l0bHkgaW4gYHN0cnVjdCBrdm1fYXJjaGAgKGBtaXJyb3Jfcm9vdF9sZXZlbGApIHNldCBkdXJpbmcgVEQgaW5pdGlhbGl6YXRpb24gaW5zdGVhZCBvZiBxdWVyeWluZyB0aGUgZ3Vlc3QgQ1BVSUQuXG5cbi0gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6IGBzdHJ1Y3Qga3ZtX2FyY2hgIGlzIHBhcnQgb2YgYHN0cnVjdCBrdm1gLCB3aGljaCBpcyBhbGxvY2F0ZWQgd2l0aCBga3Z6YWxsb2MoKWAgaW4gYGt2bV9hcmNoX2FsbG9jX3ZtKClgLCBndWFyYW50ZWVpbmcgdGhhdCBgbWlycm9yX3Jvb3RfbGV2ZWxgIGlzIHplcm8taW5pdGlhbGl6ZWQuXG4tIE5vIGtlcm5lbC10by11c2VyIGluZm8gbGVha3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IG5ldyBkYXRhIHRvIHVzZXIgc3BhY2UgdmlhIGNvcHlfdG9fdXNlciBvciBpb2N0bCBvdXRwdXRzLlxuLSBObyB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBvciBidWZmZXIgYWNjZXNzOiBMb2dpYyBjaGVja3Mgb3BlcmF0ZSBvbiBmdWxseSBpbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGFuZCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuXG5cblRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgcHJlc2VudCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gcnVuIGlzIG5vdCBuZWVkZWQ7IHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyBLVk0gZGV0ZXJtaW5lcyB0aGUgVERQIGxldmVsIGZvciBWTXMgd2l0aCBtaXJyb3JlZCBwYWdlIHRhYmxlcyAoc3VjaCBhcyBURFggVk1zKSwgYnkgdHJhY2tpbmcgdGhlIG1pcnJvciByb290IGxldmVsIGV4cGxpY2l0bHkgaW4gYHN0cnVjdCBrdm1fYXJjaGAgKGBtaXJyb3Jfcm9vdF9sZXZlbGApIHNldCBkdXJpbmcgVEQgaW5pdGlhbGl6YXRpb24gaW5zdGVhZCBvZiBxdWVyeWluZyB0aGUgZ3Vlc3QgQ1BVSUQuXG5cbi0gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6IGBzdHJ1Y3Qga3ZtX2FyY2hgIGlzIHBhcnQgb2YgYHN0cnVjdCBrdm1gLCB3aGljaCBpcyBhbGxvY2F0ZWQgd2l0aCBga3Z6YWxsb2MoKWAgaW4gYGt2bV9hcmNoX2FsbG9jX3ZtKClgLCBndWFyYW50ZWVpbmcgdGhhdCBgbWlycm9yX3Jvb3RfbGV2ZWxgIGlzIHplcm8taW5pdGlhbGl6ZWQuXG4tIE5vIGtlcm5lbC10by11c2VyIGluZm8gbGVha3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IG5ldyBkYXRhIHRvIHVzZXIgc3BhY2UgdmlhIGNvcHlfdG9fdXNlciBvciBpb2N0bCBvdXRwdXRzLlxuLSBObyB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBvciBidWZmZXIgYWNjZXNzOiBMb2dpYyBjaGVja3Mgb3BlcmF0ZSBvbiBmdWxseSBpbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGFuZCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuXG5cblRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgcHJlc2VudCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gcnVuIGlzIG5vdCBuZWVkZWQ7IHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNDo0MC4wNTE4MDM0NTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ0ODU5ODUwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIklOVEVMX1REWF9IT1NUXCIsXG4gICAgXCJLVk1fSU5URUxfVERYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX21tdV9jcmVhdGVcIixcbiAgICBcImt2bV9pbml0X21tdVwiLFxuICAgIFwia3ZtX2luaXRfc2hhZG93X25wdF9tbXVcIixcbiAgICBcInRkeF9sb2FkX21tdV9wZ2RcIixcbiAgICBcInRkeF90ZF9pbml0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaG93IEtWTSBkZXRlcm1pbmVzIHRoZSBURFAgbGV2ZWwgZm9yIFZNcyB3aXRoIG1pcnJvcmVkIHBhZ2UgdGFibGVzIChzdWNoIGFzIFREWCBWTXMpLCBieSB0cmFja2luZyB0aGUgbWlycm9yIHJvb3QgbGV2ZWwgZXhwbGljaXRseSBpbiBgc3RydWN0IGt2bV9hcmNoYCAoYG1pcnJvcl9yb290X2xldmVsYCkgc2V0IGR1cmluZyBURCBpbml0aWFsaXphdGlvbiBpbnN0ZWFkIG9mIHF1ZXJ5aW5nIHRoZSBndWVzdCBDUFVJRC5cXG5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlOiBgc3RydWN0IGt2bV9hcmNoYCBpcyBwYXJ0IG9mIGBzdHJ1Y3Qga3ZtYCwgd2hpY2ggaXMgYWxsb2NhdGVkIHdpdGggYGt2emFsbG9jKClgIGluIGBrdm1fYXJjaF9hbGxvY192bSgpYCwgZ3VhcmFudGVlaW5nIHRoYXQgYG1pcnJvcl9yb290X2xldmVsYCBpcyB6ZXJvLWluaXRpYWxpemVkLlxcbi0gTm8ga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczogVGhlIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgbmV3IGRhdGEgdG8gdXNlciBzcGFjZSB2aWEgY29weV90b191c2VyIG9yIGlvY3RsIG91dHB1dHMuXFxuLSBObyB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBvciBidWZmZXIgYWNjZXNzOiBMb2dpYyBjaGVja3Mgb3BlcmF0ZSBvbiBmdWxseSBpbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGFuZCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuXFxuXFxuVGhlcmVmb3JlLCB0aGUgY2hhbmdlcyBwcmVzZW50IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBydW4gaXMgbm90IG5lZWRlZDsgc3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHg4NiBNTVUgcm9vdCBsZXZlbCBjYWxjdWxhdGlvbiBhbmQgVERQIGNyZWF0aW9uIGxvZ2ljIChfX2t2bV9tbXVfY3JlYXRlLCBrdm1fbW11X2dldF90ZHBfbGV2ZWwpIGFuZCB1cGRhdGVzIFREWCBtaXJyb3JlZCByb290IGxldmVsIGhhbmRsaW5nICh0ZHhfbG9hZF9tbXVfcGdkLCB0ZHhfdGRfaW5pdCkuIEl0IGFsc28gYWRkcyBhIG5ldyBXQVJOX09OX09OQ0UgYXNzZXJ0aW9uIGZvciB1bmluaXRpYWxpemVkIG1pcnJvcl9yb290X2xldmVsLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZHVyaW5nIEtWTSBWTSBhbmQgdkNQVSBpbml0aWFsaXphdGlvbi9saWZlY3ljbGUgb3BlcmF0aW9ucyBvbiB4ODZfNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM0OjQwLjA1MTgwODAwNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MTcwMjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzFkMDhhMTA5NTI5YzVmMjQ2YTVmN2FhZWJiZTk5NzFkZWQ1NDE1YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDIzOjM0OjM4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggNjgzYmI4YmY0M2E5NC4uZWRkNWFkMmU1YjUyZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC0xNDA2LDYgKzE0MDYsNyBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xcbiBcXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgc3BsaXRfZGVzY19jYWNoZTtcXG4gXFxuIFxcdGdmbl90IGdmbl9kaXJlY3RfYml0cztcXG4rXFx0aW50IG1pcnJvcl9yb290X2xldmVsO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogU2l6ZSBvZiB0aGUgQ1BVJ3MgZGlydHkgbG9nIGJ1ZmZlciwgaS5lLiBWTVgncyBQTUwgYnVmZmVyLiBBIFplcm9cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmMgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xcbmluZGV4IGRkYjAyMmNiMjAzYTIuLjM0YzYwOWE2MGVlZmYgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xcbkBAIC00ODMsMjAgKzQ4Myw2IEBAIGludCBjcHVpZF9xdWVyeV9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0cmV0dXJuIDM2O1xcbiB9XFxuIFxcbi1pbnQgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4te1xcbi1cXHRzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqYmVzdDtcXG4tXFxuLVxcdGJlc3QgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDAwKTtcXG4tXFx0aWYgKCFiZXN0IHx8IGJlc3QtXFx1MDAzZWVheCBcXHUwMDNjIDB4ODAwMDAwMDgpXFxuLVxcdFxcdGdvdG8gbm90X2ZvdW5kO1xcbi1cXHRiZXN0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAwOCk7XFxuLVxcdGlmIChiZXN0KVxcbi1cXHRcXHRyZXR1cm4gKGJlc3QtXFx1MDAzZWVheCBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiAweGZmO1xcbi1ub3RfZm91bmQ6XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBUaGlzIFxcXCJyYXdcXFwiIHZlcnNpb24gcmV0dXJucyB0aGUgcmVzZXJ2ZWQgR1BBIGJpdHMgd2l0aG91dCBhbnkgYWRqdXN0bWVudHMgZm9yXFxuICAqIGVuY3J5cHRpb24gdGVjaG5vbG9naWVzIHRoYXQgdXN1cnAgYml0cy4gIFRoZSByYXcgbWFzayBzaG91bGQgYmUgdXNlZCBpZiBhbmRcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmggYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaFxcbmluZGV4IDhkODYzZjQ1NTg1ZGUuLjQ2YmZlODY5OWU2N2YgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaFxcbkBAIC02OCw3ICs2OCw2IEBAIHZvaWQgX19pbml0IGt2bV9pbml0X3hzdGF0ZV9zaXplcyh2b2lkKTtcXG4gdTMyIHhzdGF0ZV9yZXF1aXJlZF9zaXplKHU2NCB4c3RhdGVfYnYsIGJvb2wgY29tcGFjdGVkKTtcXG4gXFxuIGludCBjcHVpZF9xdWVyeV9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLWludCBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdTY0IGt2bV92Y3B1X3Jlc2VydmVkX2dwYV9iaXRzX3JhdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgY3B1aWRfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuaW5kZXggMDY0ZWNjMzNiOTI2Ny4uZDQzYjhiNmMzYjE3OSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbkBAIC01OTUzLDE5ICs1OTUzLDIyIEBAIHZvaWQgX19rdm1fbW11X3JlZnJlc2hfcGFzc3Rocm91Z2hfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBrdm1fbW11X2dldF90ZHBfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdGludCBtYXhwYTtcXG4tXFxuLVxcdGlmICh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTSlcXG4tXFx0XFx0bWF4cGEgPSBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIodmNwdSk7XFxuLVxcdGVsc2VcXG4tXFx0XFx0bWF4cGEgPSBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpO1xcbi1cXG4gXFx0LyogdGRwX3Jvb3RfbGV2ZWwgaXMgYXJjaGl0ZWN0dXJlIGZvcmNlZCBsZXZlbCwgdXNlIGl0IGlmIG5vbnplcm8gKi9cXG4gXFx0aWYgKHRkcF9yb290X2xldmVsKVxcbiBcXHRcXHRyZXR1cm4gdGRwX3Jvb3RfbGV2ZWw7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBJZiB0aGUgVk0gaGFzIG1pcnJvciByb290cywgdGhlbiB0aGUgcm9vdCBsZXZlbCBpcyBwcmVkZWZpbmVkIGFzIHRoZVxcbitcXHQgKiBtaXJyb3Igcm9vdCAoYW5kIGJ5IGV4dGVuc2lvbiB0aGUgbm9ybWFsIHJvb3QpIG5lZWRzIHRvIG1hdGNoIHRoZVxcbitcXHQgKiByb290IGxldmVsIHRoYXQgd2FzIGNvbmZpZ3VyZWQgZm9yIHRoZSBleHRlcm5hbCBwYWdlIHRhYmxlcyB0aGF0IGFyZVxcbitcXHQgKiBiZWluZyBtaXJyb3JlZCBieSBLVk0uXFxuK1xcdCAqL1xcbitcXHRpZiAoa3ZtX2hhc19taXJyb3JlZF90ZHAodmNwdS1cXHUwMDNla3ZtKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIVdBUk5fT05fT05DRSghdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsKSlcXG4rXFx0XFx0cmV0dXJuIHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbDtcXG4rXFxuIFxcdC8qIFVzZSA1LWxldmVsIFREUCBpZiBhbmQgb25seSBpZiBpdCdzIHVzZWZ1bC9uZWNlc3NhcnkuICovXFxuLVxcdGlmIChtYXhfdGRwX2xldmVsID09IDUgXFx1MDAyNlxcdTAwMjYgbWF4cGEgXFx1MDAzYz0gNDgpXFxuK1xcdGlmIChtYXhfdGRwX2xldmVsID09IDUgXFx1MDAyNlxcdTAwMjYgY3B1aWRfbWF4cGh5YWRkcih2Y3B1KSBcXHUwMDNjPSA0OClcXG4gXFx0XFx0cmV0dXJuIDQ7XFxuIFxcbiBcXHRyZXR1cm4gbWF4X3RkcF9sZXZlbDtcXG5AQCAtNjgzNCw3ICs2ODM3LDcgQEAgc3RhdGljIGludCBfX2t2bV9tbXVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXUgKm1tdSwgc3RydWN0IGtcXG4gXFx0ICogb3RoZXIgZXhjZXB0aW9uIGlzIGZvciBzaGFkb3dpbmcgTDEncyAzMi1iaXQgb3IgUEFFIE5QVCBvbiA2NC1iaXRcXG4gXFx0ICogS1ZNOyB0aGF0IGhvcnJvciBpcyBoYW5kbGVkIG9uLWRlbWFuZCBieSBtbXVfYWxsb2Nfc3BlY2lhbF9yb290cygpLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHRkcF9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbCh2Y3B1KSBcXHUwMDNlIFBUMzJFX1JPT1RfTEVWRUwpXFxuK1xcdGlmICh0ZHBfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKCkgXFx1MDAzZSBQVDMyRV9ST09UX0xFVkVMKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX0RNQTMyKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG5pbmRleCBiMjcyYzIwNTg2YTc0Li5hMGJjOWY4MThmNDM5IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuQEAgLTU2LDkgKzU2LDYgQEBcXG4gYm9vbCBlbmFibGVfdGR4IF9fcm9fYWZ0ZXJfaW5pdDtcXG4gbW9kdWxlX3BhcmFtX25hbWVkKHRkeCwgZW5hYmxlX3RkeCwgYm9vbCwgMDQ0NCk7XFxuIFxcbi0jZGVmaW5lIFREWF9TSEFSRURfQklUX1BXTF81IGdwYV90b19nZm4oQklUX1VMTCg1MSkpXFxuLSNkZWZpbmUgVERYX1NIQVJFRF9CSVRfUFdMXzQgZ3BhX3RvX2dmbihCSVRfVUxMKDQ3KSlcXG4tXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICp0ZHhfc3lzaW5mbztcXG4gXFxuIHZvaWQgdGRoX3ZwX3JkX2ZhaWxlZChzdHJ1Y3QgdmNwdV90ZHggKnRkeCwgY2hhciAqdWNsYXNzLCB1MzIgZmllbGQsIHU2NCBlcnIpXFxuQEAgLTE2MDksMTAgKzE2MDYsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV90ZHZtY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiB2b2lkIHRkeF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSwgaW50IHBnZF9sZXZlbClcXG4ge1xcbi1cXHR1NjQgc2hhcmVkX2JpdCA9IChwZ2RfbGV2ZWwgPT0gNSkgPyBURFhfU0hBUkVEX0JJVF9QV0xfNSA6XFxuLVxcdFxcdFxcdCAgVERYX1NIQVJFRF9CSVRfUFdMXzQ7XFxuLVxcbi1cXHRpZiAoS1ZNX0JVR19PTihzaGFyZWRfYml0ICE9IGt2bV9nZm5fZGlyZWN0X2JpdHModmNwdS1cXHUwMDNla3ZtKSwgdmNwdS1cXHUwMDNla3ZtKSlcXG4rXFx0aWYgKEtWTV9CVUdfT04ocGdkX2xldmVsICE9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbCwgdmNwdS1cXHUwMDNla3ZtKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0dGRfdm1jc193cml0ZTY0KHRvX3RkeCh2Y3B1KSwgU0hBUkVEX0VQVF9QT0lOVEVSLCByb290X2hwYSk7XFxuQEAgLTI3NjAsNiArMjc1NCwxNCBAQCBERUZJTkVfQ0xBU1ModGR4X3ZtX3N0YXRlX2d1YXJkLCB0ZHhfdm1fc3RhdGVfZ3VhcmRfdCxcXG4gXFx0ICAgICBpZiAoIUlTX0VSUihfVCkpIHRkeF9yZWxlYXNlX3ZtX3N0YXRlX2xvY2tzKF9UKSxcXG4gXFx0ICAgICB0ZHhfYWNxdWlyZV92bV9zdGF0ZV9sb2Nrcyhrdm0pLCBzdHJ1Y3Qga3ZtICprdm0pO1xcbiBcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBpbnQgbGV2ZWwpXFxuK3tcXG4rXFx0QlVJTERfQlVHX09OKGxldmVsICE9IDQgXFx1MDAyNlxcdTAwMjYgbGV2ZWwgIT0gNSk7XFxuK1xcbitcXHRrdm0tXFx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWwgPSBsZXZlbDtcXG4rXFx0a3ZtLVxcdTAwM2VhcmNoLmdmbl9kaXJlY3RfYml0cyA9IGdwYV90b19nZm4oQklUX1VMTChsZXZlbCA9PSA0ID8gNDcgOiA1MSkpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHRkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV90ZHhfaW5pdF92bSBfX3VzZXIgKnVzZXJfZGF0YSA9IHU2NF90b191c2VyX3B0cihjbWQtXFx1MDAzZWRhdGEpO1xcbkBAIC0yODIzLDkgKzI4MjUsOSBAQCBzdGF0aWMgaW50IHRkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXFxuIFxcdGt2bV90ZHgtXFx1MDAzZXhmYW0gPSB0ZF9wYXJhbXMtXFx1MDAzZXhmYW07XFxuIFxcbiBcXHRpZiAodGRfcGFyYW1zLVxcdTAwM2Vjb25maWdfZmxhZ3MgXFx1MDAyNiBURFhfQ09ORklHX0ZMQUdTX01BWF9HUEFXKVxcbi1cXHRcXHRrdm0tXFx1MDAzZWFyY2guZ2ZuX2RpcmVjdF9iaXRzID0gVERYX1NIQVJFRF9CSVRfUFdMXzU7XFxuK1xcdFxcdHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA1KTtcXG4gXFx0ZWxzZVxcbi1cXHRcXHRrdm0tXFx1MDAzZWFyY2guZ2ZuX2RpcmVjdF9iaXRzID0gVERYX1NIQVJFRF9CSVRfUFdMXzQ7XFxuK1xcdFxcdHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA0KTtcXG4gXFxuIFxcdGt2bV90ZHgtXFx1MDAzZXN0YXRlID0gVERfU1RBVEVfSU5JVElBTElaRUQ7XFxuIG91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzQ6NDAuNTQxNzI0MTM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NjI3ODk3NzIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiSU5URUxfVERYX0hPU1RcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fbW11X2NyZWF0ZVwiLFxuICAgIFwia3ZtX2luaXRfbW11XCIsXG4gICAgXCJrdm1faW5pdF9zaGFkb3dfbnB0X21tdVwiLFxuICAgIFwidGR4X2xvYWRfbW11X3BnZFwiLFxuICAgIFwidGR4X3RkX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0geDg2IE1NVSByb290IGxldmVsIGNhbGN1bGF0aW9uIGFuZCBURFAgY3JlYXRpb24gbG9naWMgKF9fa3ZtX21tdV9jcmVhdGUsIGt2bV9tbXVfZ2V0X3RkcF9sZXZlbCkgYW5kIHVwZGF0ZXMgVERYIG1pcnJvcmVkIHJvb3QgbGV2ZWwgaGFuZGxpbmcgKHRkeF9sb2FkX21tdV9wZ2QsIHRkeF90ZF9pbml0KS4gSXQgYWxzbyBhZGRzIGEgbmV3IFdBUk5fT05fT05DRSBhc3NlcnRpb24gZm9yIHVuaW5pdGlhbGl6ZWQgbWlycm9yX3Jvb3RfbGV2ZWwuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBkdXJpbmcgS1ZNIFZNIGFuZCB2Q1BVIGluaXRpYWxpemF0aW9uL2xpZmVjeWNsZSBvcGVyYXRpb25zIG9uIHg4Nl82NC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MWQwOGExMDk1MjljNWYyNDZhNWY3YWFlYmJlOTk3MWRlZDU0MTViXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAyMzozNDozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCA2ODNiYjhiZjQzYTk0Li5lZGQ1YWQyZTViNTJkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTE0MDYsNiArMTQwNiw3IEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgc3BsaXRfZGVzY19jYWNoZTtcbiBcbiBcdGdmbl90IGdmbl9kaXJlY3RfYml0cztcbitcdGludCBtaXJyb3Jfcm9vdF9sZXZlbDtcbiBcbiBcdC8qXG4gXHQgKiBTaXplIG9mIHRoZSBDUFUncyBkaXJ0eSBsb2cgYnVmZmVyLCBpLmUuIFZNWCdzIFBNTCBidWZmZXIuIEEgWmVyb1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5jIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbmluZGV4IGRkYjAyMmNiMjAzYTIuLjM0YzYwOWE2MGVlZmYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuKysrIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbkBAIC00ODMsMjAgKzQ4Myw2IEBAIGludCBjcHVpZF9xdWVyeV9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJldHVybiAzNjtcbiB9XG4gXG4taW50IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0c3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmJlc3Q7XG4tXG4tXHRiZXN0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAwMCk7XG4tXHRpZiAoIWJlc3QgfHwgYmVzdC1cdTAwM2VlYXggXHUwMDNjIDB4ODAwMDAwMDgpXG4tXHRcdGdvdG8gbm90X2ZvdW5kO1xuLVx0YmVzdCA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KHZjcHUsIDB4ODAwMDAwMDgpO1xuLVx0aWYgKGJlc3QpXG4tXHRcdHJldHVybiAoYmVzdC1cdTAwM2VlYXggXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHhmZjtcbi1ub3RfZm91bmQ6XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gLypcbiAgKiBUaGlzIFwicmF3XCIgdmVyc2lvbiByZXR1cm5zIHRoZSByZXNlcnZlZCBHUEEgYml0cyB3aXRob3V0IGFueSBhZGp1c3RtZW50cyBmb3JcbiAgKiBlbmNyeXB0aW9uIHRlY2hub2xvZ2llcyB0aGF0IHVzdXJwIGJpdHMuICBUaGUgcmF3IG1hc2sgc2hvdWxkIGJlIHVzZWQgaWYgYW5kXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmggYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaFxuaW5kZXggOGQ4NjNmNDU1ODVkZS4uNDZiZmU4Njk5ZTY3ZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaFxuQEAgLTY4LDcgKzY4LDYgQEAgdm9pZCBfX2luaXQga3ZtX2luaXRfeHN0YXRlX3NpemVzKHZvaWQpO1xuIHUzMiB4c3RhdGVfcmVxdWlyZWRfc2l6ZSh1NjQgeHN0YXRlX2J2LCBib29sIGNvbXBhY3RlZCk7XG4gXG4gaW50IGNwdWlkX3F1ZXJ5X21heHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbi1pbnQgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdTY0IGt2bV92Y3B1X3Jlc2VydmVkX2dwYV9iaXRzX3JhdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGNwdWlkX21heHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5pbmRleCAwNjRlY2MzM2I5MjY3Li5kNDNiOGI2YzNiMTc5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuQEAgLTU5NTMsMTkgKzU5NTMsMjIgQEAgdm9pZCBfX2t2bV9tbXVfcmVmcmVzaF9wYXNzdGhyb3VnaF9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBzdGF0aWMgaW5saW5lIGludCBrdm1fbW11X2dldF90ZHBfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGludCBtYXhwYTtcbi1cbi1cdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk0pXG4tXHRcdG1heHBhID0gY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHZjcHUpO1xuLVx0ZWxzZVxuLVx0XHRtYXhwYSA9IGNwdWlkX21heHBoeWFkZHIodmNwdSk7XG4tXG4gXHQvKiB0ZHBfcm9vdF9sZXZlbCBpcyBhcmNoaXRlY3R1cmUgZm9yY2VkIGxldmVsLCB1c2UgaXQgaWYgbm9uemVybyAqL1xuIFx0aWYgKHRkcF9yb290X2xldmVsKVxuIFx0XHRyZXR1cm4gdGRwX3Jvb3RfbGV2ZWw7XG4gXG4rXHQvKlxuK1x0ICogSWYgdGhlIFZNIGhhcyBtaXJyb3Igcm9vdHMsIHRoZW4gdGhlIHJvb3QgbGV2ZWwgaXMgcHJlZGVmaW5lZCBhcyB0aGVcbitcdCAqIG1pcnJvciByb290IChhbmQgYnkgZXh0ZW5zaW9uIHRoZSBub3JtYWwgcm9vdCkgbmVlZHMgdG8gbWF0Y2ggdGhlXG4rXHQgKiByb290IGxldmVsIHRoYXQgd2FzIGNvbmZpZ3VyZWQgZm9yIHRoZSBleHRlcm5hbCBwYWdlIHRhYmxlcyB0aGF0IGFyZVxuK1x0ICogYmVpbmcgbWlycm9yZWQgYnkgS1ZNLlxuK1x0ICovXG4rXHRpZiAoa3ZtX2hhc19taXJyb3JlZF90ZHAodmNwdS1cdTAwM2Vrdm0pIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFXQVJOX09OX09OQ0UoIXZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWwpKVxuK1x0XHRyZXR1cm4gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbDtcbitcbiBcdC8qIFVzZSA1LWxldmVsIFREUCBpZiBhbmQgb25seSBpZiBpdCdzIHVzZWZ1bC9uZWNlc3NhcnkuICovXG4tXHRpZiAobWF4X3RkcF9sZXZlbCA9PSA1IFx1MDAyNlx1MDAyNiBtYXhwYSBcdTAwM2M9IDQ4KVxuK1x0aWYgKG1heF90ZHBfbGV2ZWwgPT0gNSBcdTAwMjZcdTAwMjYgY3B1aWRfbWF4cGh5YWRkcih2Y3B1KSBcdTAwM2M9IDQ4KVxuIFx0XHRyZXR1cm4gNDtcbiBcbiBcdHJldHVybiBtYXhfdGRwX2xldmVsO1xuQEAgLTY4MzQsNyArNjgzNyw3IEBAIHN0YXRpYyBpbnQgX19rdm1fbW11X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11ICptbXUsIHN0cnVjdCBrXG4gXHQgKiBvdGhlciBleGNlcHRpb24gaXMgZm9yIHNoYWRvd2luZyBMMSdzIDMyLWJpdCBvciBQQUUgTlBUIG9uIDY0LWJpdFxuIFx0ICogS1ZNOyB0aGF0IGhvcnJvciBpcyBoYW5kbGVkIG9uLWRlbWFuZCBieSBtbXVfYWxsb2Nfc3BlY2lhbF9yb290cygpLlxuIFx0ICovXG4tXHRpZiAodGRwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbCh2Y3B1KSBcdTAwM2UgUFQzMkVfUk9PVF9MRVZFTClcbitcdGlmICh0ZHBfZW5hYmxlZCBcdTAwMjZcdTAwMjYga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpIFx1MDAzZSBQVDMyRV9ST09UX0xFVkVMKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX0RNQTMyKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuaW5kZXggYjI3MmMyMDU4NmE3NC4uYTBiYzlmODE4ZjQzOSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbkBAIC01Niw5ICs1Niw2IEBAXG4gYm9vbCBlbmFibGVfdGR4IF9fcm9fYWZ0ZXJfaW5pdDtcbiBtb2R1bGVfcGFyYW1fbmFtZWQodGR4LCBlbmFibGVfdGR4LCBib29sLCAwNDQ0KTtcbiBcbi0jZGVmaW5lIFREWF9TSEFSRURfQklUX1BXTF81IGdwYV90b19nZm4oQklUX1VMTCg1MSkpXG4tI2RlZmluZSBURFhfU0hBUkVEX0JJVF9QV0xfNCBncGFfdG9fZ2ZuKEJJVF9VTEwoNDcpKVxuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICp0ZHhfc3lzaW5mbztcbiBcbiB2b2lkIHRkaF92cF9yZF9mYWlsZWQoc3RydWN0IHZjcHVfdGR4ICp0ZHgsIGNoYXIgKnVjbGFzcywgdTMyIGZpZWxkLCB1NjQgZXJyKVxuQEAgLTE2MDksMTAgKzE2MDYsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV90ZHZtY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gdm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpXG4ge1xuLVx0dTY0IHNoYXJlZF9iaXQgPSAocGdkX2xldmVsID09IDUpID8gVERYX1NIQVJFRF9CSVRfUFdMXzUgOlxuLVx0XHRcdCAgVERYX1NIQVJFRF9CSVRfUFdMXzQ7XG4tXG4tXHRpZiAoS1ZNX0JVR19PTihzaGFyZWRfYml0ICE9IGt2bV9nZm5fZGlyZWN0X2JpdHModmNwdS1cdTAwM2Vrdm0pLCB2Y3B1LVx1MDAzZWt2bSkpXG4rXHRpZiAoS1ZNX0JVR19PTihwZ2RfbGV2ZWwgIT0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbCwgdmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHR0ZF92bWNzX3dyaXRlNjQodG9fdGR4KHZjcHUpLCBTSEFSRURfRVBUX1BPSU5URVIsIHJvb3RfaHBhKTtcbkBAIC0yNzYwLDYgKzI3NTQsMTQgQEAgREVGSU5FX0NMQVNTKHRkeF92bV9zdGF0ZV9ndWFyZCwgdGR4X3ZtX3N0YXRlX2d1YXJkX3QsXG4gXHQgICAgIGlmICghSVNfRVJSKF9UKSkgdGR4X3JlbGVhc2Vfdm1fc3RhdGVfbG9ja3MoX1QpLFxuIFx0ICAgICB0ZHhfYWNxdWlyZV92bV9zdGF0ZV9sb2Nrcyhrdm0pLCBzdHJ1Y3Qga3ZtICprdm0pO1xuIFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZHhfc2V0X21pcnJvcl9yb290X2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgaW50IGxldmVsKVxuK3tcbitcdEJVSUxEX0JVR19PTihsZXZlbCAhPSA0IFx1MDAyNlx1MDAyNiBsZXZlbCAhPSA1KTtcbitcbitcdGt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsID0gbGV2ZWw7XG4rXHRrdm0tXHUwMDNlYXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBncGFfdG9fZ2ZuKEJJVF9VTEwobGV2ZWwgPT0gNCA/IDQ3IDogNTEpKTtcbit9XG4rXG4gc3RhdGljIGludCB0ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxuIHtcbiBcdHN0cnVjdCBrdm1fdGR4X2luaXRfdm0gX191c2VyICp1c2VyX2RhdGEgPSB1NjRfdG9fdXNlcl9wdHIoY21kLVx1MDAzZWRhdGEpO1xuQEAgLTI4MjMsOSArMjgyNSw5IEBAIHN0YXRpYyBpbnQgdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZClcbiBcdGt2bV90ZHgtXHUwMDNleGZhbSA9IHRkX3BhcmFtcy1cdTAwM2V4ZmFtO1xuIFxuIFx0aWYgKHRkX3BhcmFtcy1cdTAwM2Vjb25maWdfZmxhZ3MgXHUwMDI2IFREWF9DT05GSUdfRkxBR1NfTUFYX0dQQVcpXG4tXHRcdGt2bS1cdTAwM2VhcmNoLmdmbl9kaXJlY3RfYml0cyA9IFREWF9TSEFSRURfQklUX1BXTF81O1xuK1x0XHR0ZHhfc2V0X21pcnJvcl9yb290X2xldmVsKGt2bSwgNSk7XG4gXHRlbHNlXG4tXHRcdGt2bS1cdTAwM2VhcmNoLmdmbl9kaXJlY3RfYml0cyA9IFREWF9TSEFSRURfQklUX1BXTF80O1xuK1x0XHR0ZHhfc2V0X21pcnJvcl9yb290X2xldmVsKGt2bSwgNCk7XG4gXG4gXHRrdm1fdGR4LVx1MDAzZXN0YXRlID0gVERfU1RBVEVfSU5JVElBTElaRUQ7XG4gb3V0OlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzQ6NDAuNTQxNzI2MzY5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM0NTI5Mzg4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgS2VybmVsIFBhdGNoOiBBTUQ2NCBcdTAwMjYgS1ZNL1REWCBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBldmFsdWF0ZSB0aGlzIGtlcm5lbCBwYXRjaCBvbiB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgbGV0J3MgbG9vayBhdCB0aGUgcGF0Y2ggY2hhbmdlcyB0aGVtc2VsdmVzLlxuXG4qICAgYGFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhgOiBBIHNpbXBsZSBhZGRpdGlvbiBvZiBgaW50IG1pcnJvcl9yb290X2xldmVsYCB0byB0aGUgYGt2bV9hcmNoYCBzdHJ1Y3QuIE9rYXksIHRoYXQncyBhIG5ldyBzdGF0ZSB2YXJpYWJsZS5cblxuKiAgIGBhcmNoL3g4Ni9rdm0vY3B1aWQuY2AgYW5kIGBjcHVpZC5oYDogTG9va3MgbGlrZSB0aGV5J3JlIHJlbW92aW5nIHRoZSBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyByZWxldmFudC4gSXQncyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCBwdXJwb3NlIG9mIHRoaXMgY2hhbmdlLlxuXG4qICAgYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgOiBUaGlzIGlzIHRoZSBjb3JlIG9mIGl0LCBJIHRoaW5rLlxuICAgICogICBJbiBga3ZtX21tdV9nZXRfdGRwX2xldmVsYCwgdGhleSdyZSBpbnRyb2R1Y2luZyBhIG5ldyBjb25kaXRpb25hbCB1c2luZyBga3ZtX2hhc19taXJyb3JlZF90ZHBgIGFuZCBgbWlycm9yX3Jvb3RfbGV2ZWxgLiBUaGlzIGlzIHJlcGxhY2luZyB0aGUgYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAgY2FsbCwgd2hpY2ggc3Ryb25nbHkgaW5kaWNhdGVzIGEgZGlmZmVyZW50IGFwcHJvYWNoIHRvIGRldGVybWluZSB0aGUgbWF4aW11bSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIChtYXhwYSkgZm9yIFREWCwgb3IgZm9yIHNvbWUgZ2VuZXJhbCBLVk0gTU1VIGNhc2UuXG4gICAgKiAgIEluIGBfX2t2bV9tbXVfY3JlYXRlYCwgaXQgbG9va3MgbGlrZSB0aGVyZSdzIGEgc2xpZ2h0IHR3ZWFrIHRvIGhvdyB0aGUgVERQIGxldmVsIGlzIGNoZWNrZWQuIFRoZXkncmUgbm93IHVzaW5nIGEgYGdldF9tYXhfdGRwX2xldmVsYCBjYWxsLlxuXG4qICAgYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgOiBIZXJlJ3MgdGhlIFREWCBzcGVjaWZpYyBzdHVmZi5cbiAgICAqICAgSW4gYHRkeF9sb2FkX21tdV9wZ2RgLCB0aGV5J3JlIGNoZWNraW5nIGFnYWluc3QgYG1pcnJvcl9yb290X2xldmVsYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZXkgc2VlbSB0byBiZSBhc3NlcnRpbmcgdGhhdCB0aGUgcm9vdCBsZXZlbCBzaG91bGQgYmUgY29uc2lzdGVudCwgdXNpbmcgYSBLVk1cXF9CVUdcXF9PTi5cbiAgICAqICAgYHRkeF90ZF9pbml0YDogVGhpcyBzZXRzIGBtaXJyb3Jfcm9vdF9sZXZlbGAgdG8gZWl0aGVyIDUgb3IgNCwgYW5kIGBnZm5fZGlyZWN0X2JpdHNgIGJhc2VkIG9uIHRoYXQgdmFsdWUuIEl0J3MgYSBjcml0aWNhbCBzZXR1cCBmdW5jdGlvbi5cblxuT2theSwgbm93IGZvciB0aGUgcmVhY2hhYmlsaXR5IGFuYWx5c2lzLiBUaGUgdGFyZ2V0IGlzIGFtZDY0LCB3aGljaCBpcyBleHBlY3RlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIHNwZWNpZmljIHRvIFREWCBvciBnZW5lcmFsIEtWTSBNTVUuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGUgbW9kaWZpZWQgY29kZSBpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AgaXMgYWN0dWFsbHkgcmVhY2hhYmxlLiBJcyBpdCBvbmx5IGZvciBURFggVk1zLCBvciBpcyBpdCBhbHNvIHJlbGV2YW50IHRvIG5vcm1hbCBLVk0gVk1zIHRoYXQgYXJlIGNhbGxpbmcgYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAgb3IgYF9fa3ZtX21tdV9jcmVhdGVgPyBUaGF0IHdvdWxkIGJlIHNpZ25pZmljYW50LlxuXG5UaGVyZWZvcmUsIG15IG5leHQgc3RlcCBpcyB0byB1c2UgYSB0b29sIGxpa2UgYGdyZXBwZXJgIHRvIHNlZSB3aGVyZSBga3ZtX21tdV9nZXRfdGRwX2xldmVsYCwgYF9fa3ZtX21tdV9jcmVhdGVgIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgYGt2bV9oYXNfbWlycm9yZWRfdGRwYCwgYXJlIGFjdHVhbGx5IHVzZWQgd2l0aGluIHRoZSBLVk0gY29kZS4gVGhhdCB3aWxsIHRlbGwgbWUgdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggY29kZSBwYXRocyBhcmUgYWZmZWN0ZWQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgaWYgdGhpcyBwYXRjaCBpcyBtb3JlIHRoYW4ganVzdCBURFgtc3BlY2lmaWMuIEkgc3VzcGVjdCBpdCdzIG1vcmUgZ2VuZXJhbCBhbmQgbWF5IGJlIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIEtWTSBNTVUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIzOSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM0OjUzLjk5NDY2ODM5M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTExMTcyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fbW11X2dldF90ZHBfbGV2ZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTkzOT12b2lkIF9fa3ZtX21tdV9yZWZyZXNoX3Bhc3N0aHJvdWdoX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTUzLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTk1NDpzdGF0aWMgaW5saW5lIGludCBrdm1fbW11X2dldF90ZHBfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk1NS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5ODM9a3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5OTMtXFx0cm9sZS5hZF9kaXNhYmxlZCA9ICFrdm1fYWRfZW5hYmxlZDtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5OTQ6XFx0cm9sZS5sZXZlbCA9IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5OTUtXFx0cm9sZS5kaXJlY3QgPSB0cnVlO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02MDg4PXZvaWQga3ZtX2luaXRfc2hhZG93X25wdF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyNCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjEwNi1cXHRyb290X3JvbGUgPSBjcHVfcm9sZS5iYXNlO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjEwNzpcXHRyb290X3JvbGUubGV2ZWwgPSBrdm1fbW11X2dldF90ZHBfbGV2ZWwodmNwdSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTA4LVxcdGlmIChyb290X3JvbGUubGV2ZWwgPT0gUFQ2NF9ST09UXzVMRVZFTCBcXHUwMDI2XFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNDo1NC4wNDk3ODUzMTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjY0Njc0MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYF9fa3ZtX21tdV9jcmVhdGVgIGFuZCBpdHMgQ2FsbGVycyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYF9fa3ZtX21tdV9jcmVhdGVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIEtWTSBtZW1vcnkgbWFuYWdlbWVudCBjb250ZXh0LiBXaGF0J3MgaXQgZG9pbmc/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGlzIGl0IG1hbmlwdWxhdGluZz8gV2hhdCBhcmUgdGhlIGtleSBpbml0aWFsaXphdGlvbiBzdGVwcyBpdCB1bmRlcnRha2VzPyBBbmQgZXF1YWxseSBpbXBvcnRhbnQsIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBncmFwaC4gV2hvJ3MgY2FsbGluZyB0aGlzIGZ1bmN0aW9uPyBVbmRlciB3aGF0IGNpcmN1bXN0YW5jZXM/IFdoeSBhcmUgdGhleSBjYWxsaW5nIGl0PyBXaGF0IGFzc3VtcHRpb25zIGFyZSBiZWluZyBtYWRlIGJ5IHRoZSBjYWxsZXJzIGFib3V0IHRoZSBiZWhhdmlvciBvZiBgX19rdm1fbW11X2NyZWF0ZWA/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyB0byBjb25zaWRlciwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBLVk0/IEkgbmVlZCB0byBhbmFseXplIHRob3NlIGNhbGxlcnMgdG8gZW5zdXJlIHRoYXQgdGhlIE1NVSBjcmVhdGlvbiBpcyBoYW5kbGVkIHByb3Blcmx5IHdpdGhpbiB0aGUgbGFyZ2VyIEtWTSBhcmNoaXRlY3R1cmUuIFRoaXMgaXMgY3JpdGljYWwgZm9yIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGNhbGxlcnMgc2V0dXAgdGhlIGNvbnRleHQsIGVuc3VyZSByZXNvdXJjZXMgYXJlIGF2YWlsYWJsZSwgYW5kIGNvcnJlY3RseSB0ZWFyIGRvd24gdGhlIHJlc291cmNlcyBjcmVhdGVkIGlmIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM0OjU3LjcxNDQ2MjgwOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM1MTE4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2t2bV9tbXVfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY4MDQ9c3RhdGljIHZvaWQgZnJlZV9tbXVfcGFnZXMoc3RydWN0IGt2bV9tbXUgKm1tdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjgxMi1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY4MTM6c3RhdGljIGludCBfX2t2bV9tbXVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXUgKm1tdSwgc3RydWN0IGt2bV9wYWdld2FsayAqdylcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY4MTQte1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02ODY4PWludCBrdm1fbW11X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY4ODQtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2ODg1OlxcdHJldCA9IF9fa3ZtX21tdV9jcmVhdGUodmNwdSwgXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guZ3Vlc3RfbW11LCBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5uZ3BhX3dhbGspO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjg4Ni1cXHRpZiAocmV0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODg4LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Njg4OTpcXHRyZXQgPSBfX2t2bV9tbXVfY3JlYXRlKHZjcHUsIFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnJvb3RfbW11LCBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5ndmFfd2Fsayk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODkwLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM0OjU3Ljc2MjgyMDkwNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MDg5ODI0NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgS1ZNIE1NVSBNZW50YWwgQ2hlY2tsaXN0KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBLVk0ncyBNTVUgc2V0dXAsIGFuZCBoZXJlJ3Mgd2hhdCdzIHBpbmdpbmcgbXkgcmFkYXIuIEkgc2VlIHRoYXQgYGt2bV9tbXVfY3JlYXRlYCBpcyBjYWxsZWQgd2hlbiBhIG5ldyB2Q1BVIHBvcHMgdXAgdmlhIHRoZSBgS1ZNX0NSRUFURV9WQ1BVYCBpb2N0bC4gUmlnaHQsIGNsYXNzaWMgaW5pdGlhbGl6YXRpb24uIFRoZW4sIGBrdm1fY2FsY190ZHBfbW11X3Jvb3RfcGFnZV9yb2xlYCBhbmQgYGt2bV9pbml0X3NoYWRvd19ucHRfbW11YCBhcmUgaW52b2x2ZWQgaW4gTU1VIGluaXRpYWxpemF0aW9uIGFuZCB1cGRhdGVzLCBhcyBleHBlY3RlZC4gSSdtIGtlZXBpbmcgYSBtZW50YWwgbm90ZSBvZiB0aGlzIGVudGlyZSBwcm9jZXNzLlxuXG5JIG5lZWQgdG8ga2VlcCBteSBleWUgb24gdGhhdCBgV0FSTl9PTl9PTkNFKCF2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsKWAgaW4gYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAgLSB0aGF0IGNvdWxkIGJlY29tZSBhIHBvaW50IG9mIGNvbnRlbnRpb24gbGF0ZXIuIEl0J3MgaW5kaWNhdGluZyBzb21lIG1pcnJvcmluZyBpc3N1ZSBvciBzdGF0ZSB0aGF0IG5lZWRzIHRvIGJlIHRydWUuIEFuZCBJJ20gYWxzbyBzZWVpbmcgYSBgS1ZNX0JVR19PTmAgaW4gYHRkeF9sb2FkX21tdV9wZ2RgLCB3aGljaCwgeW91IGtub3csIGlzIG5ldmVyIGdvb2QuIEdvdHRhIGtlZXAgYW4gZXllIG9uIHRoYXQuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhpcyBga3ZtX2hhc19taXJyb3JlZF90ZHBgLiBJdCdzIHVzZWQgYSBsb3QuIFdoZXJlIGlzIGl0IGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIGl0cyBpbXBsZW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBtaXJyb3JpbmcgbG9naWMgdGhvcm91Z2hseS4gVGhpcyBpcyB0aGUgbmV4dCB0aGluZyB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk3NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTowMC4zNzE4MDkwMzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEwMTM4NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2hhc19taXJyb3JlZF90ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUuaD0zODA9c3RhdGljIGlubGluZSBncGFfdCBrdm1fdHJhbnNsYXRlX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzkxLVxcbmFyY2gveDg2L2t2bS9tbXUuaDozOTI6c3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbWlycm9yZWRfdGRwKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzkzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjA2PXN0YXRpYyBpbnQgbW11X3RvcHVwX21lbW9yeV9jYWNoZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIG1heWJlX2luZGlyZWN0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTQtXFx0XFx0cmV0dXJuIHI7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2MTU6XFx0aWYgKGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxNi1cXHRcXHRyID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gubW11X2V4dGVybmFsX3NwdF9jYWNoZSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9Mzk4Nj1zdGF0aWMgaW50IG1tdV9hbGxvY19kaXJlY3Rfcm9vdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zOTk0LVxcdGlmICh0ZHBfbW11X2VuYWJsZWQpIHtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM5OTU6XFx0XFx0aWYgKGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtXFx1MDAzZWt2bSkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5OTYtXFx0XFx0ICAgICFWQUxJRF9QQUdFKG1tdS1cXHUwMDNlbWlycm9yX3Jvb3RfaHBhKSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTk1ND1zdGF0aWMgaW5saW5lIGludCBrdm1fbW11X2dldF90ZHBfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTY1LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTk2NjpcXHRpZiAoa3ZtX2hhc19taXJyb3JlZF90ZHAodmNwdS1cXHUwMDNla3ZtKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk2Ny1cXHQgICAgIVdBUk5fT05fT05DRSghdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsKSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oPTMwPXN0YXRpYyBpbmxpbmUgZW51bSBrdm1fdGRwX21tdV9yb290X3R5cGVzIGt2bV9nZm5fcmFuZ2VfZmlsdGVyX3RvX3Jvb3RfdHlwZXMoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtMzQtXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg6MzU6XFx0aWYgKCFrdm1faGFzX21pcnJvcmVkX3RkcChrdm0pKVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTM2LVxcdFxcdHJldHVybiBLVk1fRElSRUNUX1JPT1RTO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTowMC40MjI4Mjc2MzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTUzMTczMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBga3ZtX2hhc19taXJyb3JlZF90ZHBgIGluIGBtbXUuaGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGt2bV9oYXNfbWlycm9yZWRfdGRwYCBmdW5jdGlvbiB3b3Jrcy4gTGV0J3Mgc3RhcnQgYnkgbmF2aWdhdGluZyB0byBgYXJjaC94ODYva3ZtL21tdS5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM5Mi4gSSBuZWVkIHRvIHNlZSB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24uIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggS1ZNJ3MgbWVtb3J5IG1hbmFnZW1lbnQsIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gVHJhbnNwYXJlbnQgUGFnZSBTaGFyaW5nIChUUFMpIG9yIHNvbWUgZm9ybSBvZiBtZW1vcnkgZGVkdXBsaWNhdGlvbiBvcHRpbWl6YXRpb24gaW4gdGhlIFRyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXIgKFRMQikgbWFuYWdlbWVudC4gSSBzdXNwZWN0IHdlJ2xsIHNlZSBzb21lIGNoZWNrcyByZWxhdGVkIHRvIGhhcmR3YXJlIGZlYXR1cmVzLCBtYXliZSBDUFVJRCBmbGFncyBvciBNU1JzLCBvciBwZXJoYXBzIGV2ZW4gc29tZSBnbG9iYWwgS1ZNIHN0YXRlLiBLbm93aW5nIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIGlzIGtleSBmb3IgdW5kZXJzdGFuZGluZyBjZXJ0YWluIGd1ZXN0IG1lbW9yeSBiZWhhdmlvcnMuIEknbSBleHBlY3Rpbmcgc29tZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB0aGUgaG9zdCdzIGhhcmR3YXJlIGNhcGFiaWxpdGllcy4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI3OCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM1OjAyLjU3NjAwNzQ1OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vbW11LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzg1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzg1OlxcdHtcXG4gMzg2OlxcdFxcdGlmICghbW11X2lzX25lc3RlZCh2Y3B1KSB8fCB3ID09IFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLm5ncGFfd2FsaylcXG4gMzg3OlxcdFxcdFxcdHJldHVybiBncGE7XFxuIDM4ODpcXHRcXHRyZXR1cm4ga3ZtX25lc3RlZF9jYWxsKHRyYW5zbGF0ZV9uZXN0ZWRfZ3BhKSh2Y3B1LCBncGEsIGFjY2VzcyxcXG4gMzg5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXhjZXB0aW9uLCBwdGVfYWNjZXNzKTtcXG4gMzkwOlxcdH1cXG4gMzkxOlxcdFxcbiAzOTI6XFx0c3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbWlycm9yZWRfdGRwKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcXG4gMzkzOlxcdHtcXG4gMzk0OlxcdFxcdHJldHVybiBrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcXG4gMzk1OlxcdH1cXG4gMzk2OlxcdFxcbiAzOTc6XFx0c3RhdGljIGlubGluZSBnZm5fdCBrdm1fZ2ZuX2RpcmVjdF9iaXRzKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcXG4gMzk4OlxcdHtcXG4gMzk5OlxcdFxcdHJldHVybiBrdm0tXFx1MDAzZWFyY2guZ2ZuX2RpcmVjdF9iaXRzO1xcbiA0MDA6XFx0fVxcbiA0MDE6XFx0XFxuIDQwMjpcXHRzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2lzX2FkZHJfZGlyZWN0KHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhKVxcbiA0MDM6XFx0e1xcbiA0MDQ6XFx0XFx0Z3BhX3QgZ3BhX2RpcmVjdF9iaXRzID0gZ2ZuX3RvX2dwYShrdm1fZ2ZuX2RpcmVjdF9iaXRzKGt2bSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTowMi41NzYwODYwMTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk5MTk3NzE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLY29uZmlnIENvbmZpZ3VyYXRpb24gRXhhbWluYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBLVk0gYW5kIFREWCBzdXBwb3J0IG9uIHg4NiBhcmNoaXRlY3R1cmVzLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUsIHdoaWNoIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZm9yIEtWTS1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBBIHNpbXBsZSBncmVwIGZvciBcIktWTVwiIHdpdGhpbiB0aGF0IGZpbGUgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBvdmVydmlldyBvZiB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvcmUgS1ZNIGVuYWJsZW1lbnQsIGFsb25nIHdpdGggYW55IFREWC1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyBpZiB0aGV5IGV4aXN0LiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBwYXJzZSB0aGUgcmVsYXRpb25zaGlwcyBhbmQgdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGludGVybGlua2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTQwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTowNC41NjgwNjU5MjFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NzQxMjgzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mzpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NC1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODM6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDg6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDktXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE3OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE4LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMwOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzM6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzQtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTowNC44NTU0ODU5N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTY1NjIyNzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBLVk1fSU5URUxfVERYIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIGBLVk1fSU5URUxfVERYYCB3aXRoaW4gdGhlIGBhcmNoL3g4Ni9rdm1gIGRpcmVjdG9yeS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBkZXBlbmRlbmNpZXMgaGVyZS4gVW5kZXJzdGFuZGluZyB0aGVzZSByZWxhdGlvbnNoaXBzIGlzIGNydWNpYWwuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IHdoYXQgb3RoZXIgZmVhdHVyZXMgb3Igb3B0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIFREWCBzdXBwb3J0LiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIEludGVsIENQVSBtb2RlbHMsIG1pY3JvYXJjaGl0ZWN0dXJlcywgb3IgcGFydGljdWxhciBoYXJkd2FyZSBleHRlbnNpb25zIHRoYXQgYXJlIHByZXJlcXVpc2l0ZXM/IEFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBkaXNhYmxlIFREWCBpZiBzZWxlY3RlZD8gT3IgcGVyaGFwcyBvdGhlciBLVk0tcmVsYXRlZCBmZWF0dXJlcyB0aGF0IFREWCBidWlsZHMgb24/IFRoZSBLY29uZmlnIGZpbGUgaXMgdGhlIGRlZmluaXRpdmUgc291cmNlIGZvciB0aGlzLCBzbyBJJ2xsIHNjYW4gaXQgY2FyZWZ1bGx5LCBub3RpbmcgYW55IGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIG9yIGBkZWZhdWx0YCBjbGF1c2VzIHRoYXQgcmVsYXRlIHRvIGBLVk1fSU5URUxfVERYYC4gQW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgaW50ZXJhY3Rpb25zIHdpdGggZXhpc3RpbmcgS1ZNIGNvZGUgSSBzaG91bGQgYmUgYXdhcmUgb2YuIEknbGwgbWFrZSBzdXJlIHRvIG5vdGUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzc4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzU6MDcuMDIxMTExMzI5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHRcXHQgIGd1ZXN0cyB2aWEgYSBkZXZpY2Ugbm9kZSwgZS5nLiAvZGV2L3NneF92ZXBjLlxcbiAxMzE6XFx0XFxuIDEzMjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDEzMzpcXHRcXG4gMTM0OlxcdGNvbmZpZyBLVk1fSU5URUxfVERYXFxuIDEzNTpcXHRcXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbiAxMzY6XFx0XFx0ZGVmYXVsdCB5XFxuIDEzNzpcXHRcXHRkZXBlbmRzIG9uIElOVEVMX1REWF9IT1NUXFxuIDEzODpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG4gMTM5OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG4gMTQwOlxcdFxcdGhlbHBcXG4gMTQxOlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgbGF1bmNoaW5nIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpXFxuIDE0MjpcXHRcXHQgIGNvbmZpZGVudGlhbCBWTXMgb24gSW50ZWwgcHJvY2Vzc29ycy5cXG4gMTQzOlxcdFxcbiAxNDQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxNDU6XFx0XFxuIDE0NjpcXHRjb25maWcgS1ZNX0FNRFxcbiAxNDc6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4gMTQ4OlxcdFxcdGRlcGVuZHMgb24gS1ZNIFxcdTAwMjZcXHUwMDI2IChDUFVfU1VQX0FNRCB8fCBDUFVfU1VQX0hZR09OKVxcbiAxNDk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTowNy4wMjExOTYyMDlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA4NDYyNjIxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBLVk0geDg2IEJ1aWxkIFByb2Nlc3MqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIEtWTSB4ODYgY29tcG9uZW50cyBhcmUgYnVpbHQuIEknbSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gYGNwdWlkLm9gLCBgbW11Lm9gLCBhbmQgYHRkeC5vYCDigJMgdGhvc2UgYXJlIGNyaXRpY2FsIHBpZWNlcyBvZiB0aGUgcHV6emxlIGZvciB2aXJ0dWFsaXphdGlvbiBvbiB4ODYsIGVzcGVjaWFsbHkgd2l0aCBURFguIEkga25vdyB0aGUgc291cmNlIGNvZGUgaXMgaW4gYGFyY2gveDg2L2t2bS9gLCBidXQgSSBzaG91bGQgcmVhbGx5IGNvbnN1bHQgdGhlIGBNYWtlZmlsZWAgaW4gKnRoYXQqIGRpcmVjdG9yeS4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgYnVpbGQgbWFnaWMgaGFwcGVucy4gVGhlIE1ha2VmaWxlIHdpbGwgcmV2ZWFsIHRoZSBjb21waWxlciBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgb3ZlcmFsbCBjb21waWxhdGlvbiBmbG93IHRoYXQgcHJvZHVjZXMgdGhlc2Ugb2JqZWN0IGZpbGVzLiBVbmRlcnN0YW5kaW5nIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzIGlzIGVzc2VudGlhbCB0byBtb2RpZnlpbmcsIGRlYnVnZ2luZywgb3IgZXh0ZW5kaW5nIHRoZXNlIG1vZHVsZXMsIGFuZCB0byBjb25maXJtIHRoYXQgaXQgYnVpbGRzIGFzIGV4cGVjdGVkLiBLbm93aW5nIHRoZSBidWlsZCBwcm9jZXNzIHdpbGwgYWxzbyBnaXZlIG1lIGltcG9ydGFudCBjbHVlcyBhYm91dCBob3cgdGhlc2UgY29tcG9uZW50cyBpbnRlcmFjdCBhbmQgd2hhdCBleHRlcm5hbCBkZXBlbmRlbmNpZXMgdGhleSByZWx5IHVwb24uIExldCdzIHNlZSB3aGF0IHRoYXQgTWFrZWZpbGUgaGFzIHRvIHNheS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk3MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzU6MDkuMTA1ODI0OTQ1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTI1NjQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHgub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL01ha2VmaWxlPTIxPWt2bS1pbnRlbC0kKENPTkZJR19LVk1fSFlQRVJWKVxcdCs9IHZteC9oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MjI6a3ZtLWludGVsLSQoQ09ORklHX0tWTV9JTlRFTF9URFgpXFx0Kz0gdm14L3RkeC5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTIzLVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODYzPXN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NzItI2RlZmluZSB2dF9vcChuYW1lKSB2dF8jI25hbWVcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4NzM6I2RlZmluZSB2dF9vcF90ZHhfb25seShuYW1lKSB2dF8jI25hbWVcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NzQtI2Vsc2UgLyogQ09ORklHX0tWTV9JTlRFTF9URFggKi9cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NzUtI2RlZmluZSB2dF9vcChuYW1lKSB2bXhfIyNuYW1lXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODc2OiNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgTlVMTFxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg3Ny0jZW5kaWYgLyogQ09ORklHX0tWTV9JTlRFTF9URFggKi9cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg4OD1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTA0LVxcdC52bV9kZXN0cm95ID0gdnRfb3Aodm1fZGVzdHJveSksXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6OTA1OlxcdC52bV9wcmVfZGVzdHJveSA9IHZ0X29wX3RkeF9vbmx5KHZtX3ByZV9kZXN0cm95KSxcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy05MDYtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy05NDktXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6OTUwOlxcdC52Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uID0gdnRfb3BfdGR4X29ubHkodmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiksXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTUxLVxcdC52Y3B1X3J1biA9IHZ0X29wKHZjcHVfcnVuKSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwMzQtXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTAzNTpcXHQubWVtX2VuY19pb2N0bCA9IHZ0X29wX3RkeF9vbmx5KG1lbV9lbmNfaW9jdGwpLFxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwMzY6XFx0LnZjcHVfbWVtX2VuY19pb2N0bCA9IHZ0X29wX3RkeF9vbmx5KHZjcHVfbWVtX2VuY19pb2N0bCksXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTAzNzpcXHQudmNwdV9tZW1fZW5jX3VubG9ja2VkX2lvY3RsID0gdnRfb3BfdGR4X29ubHkodmNwdV9tZW1fZW5jX3VubG9ja2VkX2lvY3RsKSxcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDM4LVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwMzk6XFx0LmdtZW1fbWF4X21hcHBpbmdfbGV2ZWwgPSB2dF9vcF90ZHhfb25seShnbWVtX21heF9tYXBwaW5nX2xldmVsKVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNDAtfTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MjE1PXN0YXRpYyBERUZJTkVfTVVURVgodGR4X2xvY2spO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjE2LVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MjE3OnN0YXRpYyBib29sIHRkeF9vcGVyYW5kX2J1c3kodTY0IGVycilcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTIxOC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTI3ND1zdGF0aWMgaW5saW5lIHZvaWQgdGR4X2Rpc2Fzc29jaWF0ZV92cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMwNy1cXHRfX2VyciA9IHRkaF9mdW5jKGFyZ3MpO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjMwODpcXHRpZiAodW5saWtlbHkodGR4X29wZXJhbmRfYnVzeShfX2VycikpKSB7XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzA5LVxcdFxcdFdSSVRFX09OQ0UoX19rdm1fdGR4LVxcdTAwM2V3YWl0X2Zvcl9zZXB0X3phcCwgdHJ1ZSk7XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz05ODU9c3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy05OTktXFx0ICovXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxMDAwOlxcdGlmICh1bmxpa2VseSh0ZHhfb3BlcmFuZF9idXN5KHZwX2VudGVyX3JldCkpKVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTAwMS1cXHRcXHRyZXR1cm4gRVhJVF9GQVNUUEFUSF9FWElUX0hBTkRMRUQ7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTE2MTU9c3RhdGljIGludCB0ZHhfbWVtX3BhZ2VfYWRkKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNjI5LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2ZW50cnksIFxcdTAwMjZsZXZlbF9zdGF0ZSk7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNjMwOlxcdGlmICh1bmxpa2VseSh0ZHhfb3BlcmFuZF9idXN5KGVycikpKVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTYzMS1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0xNjM5PXN0YXRpYyBpbnQgdGR4X21lbV9wYWdlX2F1ZyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTY0Ny1cXHRlcnIgPSB0ZGhfbWVtX3BhZ2VfYXVnKFxcdTAwMjZrdm1fdGR4LVxcdTAwM2V0ZCwgZ3BhLCBsZXZlbCwgcGZuLCBcXHUwMDI2ZW50cnksIFxcdTAwMjZsZXZlbF9zdGF0ZSk7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNjQ4OlxcdGlmICh1bmxpa2VseSh0ZHhfb3BlcmFuZF9idXN5KGVycikpKVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTY0OS1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0xNjcwPXN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX25vbmxlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTY4Mi1cXHRcXHRcXHQgICAgICAgXFx1MDAyNmVudHJ5LCBcXHUwMDI2bGV2ZWxfc3RhdGUpO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MTY4MzpcXHRpZiAodW5saWtlbHkodGR4X29wZXJhbmRfYnVzeShlcnIpKSlcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE2ODQtXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9Mjg3Nj1zdGF0aWMgaW50IHRkeF90ZF9maW5hbGl6ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yODgzLVxcdGNtZC1cXHUwMDNlaHdfZXJyb3IgPSB0ZGhfbXJfZmluYWxpemUoXFx1MDAyNmt2bV90ZHgtXFx1MDAzZXRkKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjI4ODQ6XFx0aWYgKHRkeF9vcGVyYW5kX2J1c3koY21kLVxcdTAwM2Vod19lcnJvcikpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yODg1LVxcdFxcdHJldHVybiAtRUJVU1k7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM1OjA5LjE2MTA4NjMxMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzA0NDUwNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFREWCBDb25maWd1cmF0aW9uIGluIEtWTSBmb3IgeDg2KipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzIFREWCBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgd2hlbiBJJ20gZGVhbGluZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHg4NiB2aXJ0dWFsaXphdGlvbiwgZXNwZWNpYWxseSBLVk0uIE15IGdvYWwgaXMgdG8gcGlucG9pbnQgZXhhY3RseSB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbiwgdGhlIG9uZSBsYWJlbGVkIGBJTlRFTF9URFhfSE9TVGAsIGlzIHRoZSBrZXkgZW5hYmxlciBmb3IgZW5hYmxpbmcgVERYIHN1cHBvcnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgYXNzb2NpYXRlZCB3aXRoIGl0LiBUaGlzIGlzIHRoZSBmaXJzdCBzdG9wLCBsZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNjYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNToxMS40NjU1Mzk5MTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MzUxNDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTlRFTF9URFhfSE9TVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTE4NDQ9Y29uZmlnIFg4Nl9VU0VSX1NIQURPV19TVEFDS1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xODYzLVxcbmFyY2gveDg2L0tjb25maWc6MTg2NDpjb25maWcgSU5URUxfVERYX0hPU1RcXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNToxMS41MzM4OTc5NzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIyNzUwMDc3NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogS1ZNIE1NVSBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIHdpdGhpbiB0aGUgS1ZNIE1NVSBjb2RlLiBJJ20gc2VlaW5nIGNoYW5nZXMgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0d28ga2V5IGFyZWFzOiBga3ZtX21tdV9nZXRfdGRwX2xldmVsYCBhbmQgYF9fa3ZtX21tdV9jcmVhdGVgLlxuXG5Mb29raW5nIGF0IGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgLCBpdCdzIGNsZWFyIHRoaXMgZnVuY3Rpb24gcGxheXMgYSByb2xlIGluIGhvdyB3ZSBkZXRlcm1pbmUgdGhlIFREUCBNTVUgcm9vdCBsZXZlbCwgZXNwZWNpYWxseSBkdXJpbmcgY2FsY3VsYXRpb25zIGxpa2UgYGt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGVgIGFuZCBga3ZtX2luaXRfc2hhZG93X25wdF9tbXVgLiBUaGVyZSdzIGEgYFdBUk5fT05fT05DRWAgaGVyZSwgbGlua2VkIHRvIGBtaXJyb3Jfcm9vdF9sZXZlbGAsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZyBpbXBvcnRhbnQgcmVsYXRlZCB0byB0aGUgbWlycm9yZWQgcm9vdCBmdW5jdGlvbmFsaXR5LiBUaGUgY2hhbmdlcyB0byB0aGUgbG9naWMgZm9yIGdlbmVyYWwgVk1zIGFyZSBhbHNvIHNpZ25pZmljYW50LiBUaGUgb3JpZ2luYWwgbG9naWMgbWFkZSBkZWNpc2lvbnMgYmFzZWQgb24gdGhlIFZNIHR5cGUgKFREWCBvciBnZW5lcmFsKSwgdXNpbmcgYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAgYW5kIGBjcHVpZF9tYXhwaHlhZGRyYCByZXNwZWN0aXZlbHkuIFRoZSBuZXcgY29kZSBub3cgaW5jb3Jwb3JhdGVzIGBrdm1faGFzX21pcnJvcmVkX3RkcGAgYW5kIHVzZXMgYHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWxgIGRpcmVjdGx5IGlmIHRoZSBtaXJyb3JpbmcgaXMgZW5hYmxlZCwgc3VnZ2VzdGluZyBhIHJlZmFjdG9yaW5nIG9yIG9wdGltaXphdGlvbiByZWxhdGVkIHRvIHRoZSBtaXJyb3JlZCBURFAgZmVhdHVyZS4gVGhlIGNoZWNrIGZvciA1LWxldmVsIFREUCBiYXNlZCBvbiBgY3B1aWRfbWF4cGh5YWRkcih2Y3B1KSBcdTAwM2M9IDQ4YCByZW1haW5zLCBidXQgaXQncyBub3cgc2Vjb25kYXJ5LlxuXG5UaGUgc2Vjb25kIGFyZWEgb2YgaW50ZXJlc3QgaXMgaW4gYF9fa3ZtX21tdV9jcmVhdGVgLiBIZXJlLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQ6IGl0IG5vdyBjYWxscyBga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpYCBpbnN0ZWFkIG9mIGBrdm1fbW11X2dldF90ZHBfbGV2ZWwoKWAuIFRoaXMgaXMgY2FsbGVkIHdpdGggKmV2ZXJ5KiBgS1ZNX0NSRUFURV9WQ1BVYCBpb2N0bCwgc28gaXQncyBhIGNyaXRpY2FsIHBhdGguIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpYC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBkZWZpbmVkIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGlzIFREUCBsZXZlbCBkZXRlcm1pbmF0aW9uLiBJdCdzIGxpa2VseSB0aGlzIGNoYW5nZSBpcyBhaW1lZCBhdCBkZWNvdXBsaW5nIG9yIGdlbmVyYWxpemluZyB0aGUgVERQIGxldmVsIGNhbGN1bGF0aW9uLiBUaGlzIHdpbGwgd2FycmFudCBmdXJ0aGVyIGluc3BlY3Rpb24gb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKClgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYwNiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNToyMy44MDg5MDk5MDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNzcwNTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9tbXVfZ2V0X21heF90ZHBfbGV2ZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9jcHVpZC5jPTE0MTg9c3RhdGljIGlubGluZSBpbnQgX19kb19jcHVpZF9mdW5jKHN0cnVjdCBrdm1fY3B1aWRfYXJyYXkgKmFycmF5LCB1MzIgZnVuY3Rpb24pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xODExLVxcdFxcdFxcdGdfcGh5c19hcyA9IHBoeXNfYXM7XFxuYXJjaC94ODYva3ZtL2NwdWlkLmM6MTgxMjpcXHRcXHRcXHRpZiAoa3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpIFxcdTAwM2MgNSlcXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy0xODEzLVxcdFxcdFxcdFxcdGdfcGh5c19hcyA9IG1pbihnX3BoeXNfYXMsIDQ4VSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11Lmg9OTk9c3RhdGljIGlubGluZSBib29sIG1tdV9oYXNfbWJlYyhzdHJ1Y3Qga3ZtX21tdSAqbW11KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS5oLTEwMy1cXG5hcmNoL3g4Ni9rdm0vbW11Lmg6MTA0OnU4IGt2bV9tbXVfZ2V0X21heF90ZHBfbGV2ZWwodm9pZCk7XFxuYXJjaC94ODYva3ZtL21tdS5oLTEwNS1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTk1ND1zdGF0aWMgaW5saW5lIGludCBrdm1fbW11X2dldF90ZHBfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTc2LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTk3Nzp1OCBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKHZvaWQpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTc4LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjgxMz1zdGF0aWMgaW50IF9fa3ZtX21tdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21tdSAqbW11LCBzdHJ1Y3Qga3ZtX3BhZ2V3YWxrICp3KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODM5LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Njg0MDpcXHRpZiAodGRwX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpIFxcdTAwM2UgUFQzMkVfUk9PVF9MRVZFTClcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY4NDEtXFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM1OjIzLjg2MTY4NjQ0MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjkzODA0MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldCwgdGhpbmtpbmcgbGlrZSBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gS1ZNIE1NVSBDcmVhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gYF9fa3ZtX21tdV9jcmVhdGVgIHdpdGhpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgTU1VIGNyZWF0aW9uIHByb2Nlc3MsIHNvIEknbSBob25pbmcgaW4gb24gbGluZXMgNjgxMyB0aHJvdWdoIDY4NjUuIFRoaXMgc2VjdGlvbiBwcm9iYWJseSBsYXlzIG91dCB0aGUgY29yZSBsb2dpYyBmb3IgaW5pdGlhbGl6aW5nIHRoZSBLVk0gTU1VIGRhdGEgc3RydWN0dXJlcyBzcGVjaWZpYyB0byB4ODYuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlOlxuXG4qICAgKipBbGxvY2F0aW9uOioqIFRoZSBhbGxvY2F0aW9uIG9mIHRoZSByZWxldmFudCBNTVUgc3RydWN0dXJlcywgbGlrZWx5IGludm9sdmluZyBga21hbGxvY2Agb3Igc2ltaWxhciBtZW1vcnkgbWFuYWdlbWVudC4gV2UnbGwgYmUgbG9va2luZyBmb3IgYW55IHNwZWNpZmljIGFsaWdubWVudCByZXF1aXJlbWVudHMgdG9vLCBtYXliZSBzb21lIGNhY2hlLWxpbmUgcGFkZGluZy4gSSBzaG91bGQgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgc3RydWN0dXJlcyBhbGxvY2F0ZWQgaW4gdGhpcyBzZWN0aW9uLCBhbmQgd2hldGhlciB0aGV5IGFyZSBpbml0aWFsaXplZC5cbiogICAqKkluaXRpYWxpemF0aW9uOioqIFRoZXJlIHdpbGwgaGF2ZSB0byBiZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcHJpbWFyeSBNTVUgc3RhdGUsIGFuZCB0aGF0IGNvdWxkIGludm9sdmUgc2V0dGluZyBpbml0aWFsIHZhbHVlcyBmb3IgdmFyaW91cyBjb250cm9sIHJlZ2lzdGVycyBvciBpbnRlcm5hbCBmbGFncy4gVGhpcyBwYXJ0IGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzdGFydGluZyBwb2ludCBvZiB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHRyYW5zbGF0aW9uLlxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSXQncyB1bmxpa2VseSB0aGlzIGlzIGNvbXBsZXRlbHkgZXJyb3ItZnJlZS4gSSdsbCBuZWVkIHRvIHdhdGNoIGZvciBwb3RlbnRpYWwgZXJyb3IgcmV0dXJucyBhbmQgZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgZXJyb3IgcGF0aHMuIEknbSBleHBlY3Rpbmcgc29tZSBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcuIEknbGwgYWxzbyBjaGVjayBpZiB0aGVyZSBpcyBzcGVjaWZpYyBjb2RlIHdoaWNoIGlzIGV4ZWN1dGVkIGlmIGFuIGFsbG9jYXRpb24gZmFpbHMuXG4qICAgKipTdHJ1Y3R1cmUgUG9wdWxhdGlvbjoqKiBPZnRlbiwgdGhlc2UgTU1VIGNyZWF0ZSBmdW5jdGlvbnMgaGF2ZSB0byBzZXQgc29tZSBtZXRhZGF0YSwgd2hpY2ggaXMgdXNlZCBsYXRlciB0byBxdWlja2x5IGNoZWNrIGlmIGEgc3BlY2lmaWMgcGFnZSB0YWJsZSBpcyB2YWxpZCBhbmQgY29uZmlndXJlZC4gSSdtIGd1ZXNzaW5nIHRoYXQgdGhpcyBsb2dpYyBtaWdodCBpbnZvbHZlIHNldHRpbmcgc29tZSBmbGFncyBvciBwb2ludGVycyB3aXRoaW4gdGhlIG5ldyBNTVUgc3RydWN0dXJlLlxuXG5NeSBnb2FsIGhlcmUgaXMgdG8gZXN0YWJsaXNoIGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoZSBLVk0gTU1VIGNvbnRleHQgaXMgY3JlYXRlZCwgd2hhdCBpbmZvcm1hdGlvbiBpdCBob2xkcyBpbml0aWFsbHksIGFuZCB3aGF0IHNldHVwIGlzIGRvbmUuIFVuZGVyc3RhbmRpbmcgdGhpcyBmb3VuZGF0aW9uIGlzIGVzc2VudGlhbCBmb3IgZGVidWdnaW5nIGFuZCBtb2RpZnlpbmcgdGhlIE1NVSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyODgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNToyNy4xNTU0OTM5MThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE4MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjgxMyxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjgxMzpcXHRzdGF0aWMgaW50IF9fa3ZtX21tdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21tdSAqbW11LCBzdHJ1Y3Qga3ZtX3BhZ2V3YWxrICp3KVxcbjY4MTQ6XFx0e1xcbjY4MTU6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuNjgxNjpcXHRcXHRpbnQgaTtcXG42ODE3OlxcdFxcbjY4MTg6XFx0XFx0bW11LVxcdTAwM2V3ID0gdztcXG42ODE5OlxcdFxcdG1tdS1cXHUwMDNlcm9vdC5ocGEgPSBJTlZBTElEX1BBR0U7XFxuNjgyMDpcXHRcXHRtbXUtXFx1MDAzZXJvb3QucGdkID0gMDtcXG42ODIxOlxcdFxcdG1tdS1cXHUwMDNlbWlycm9yX3Jvb3RfaHBhID0gSU5WQUxJRF9QQUdFO1xcbjY4MjI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEtWTV9NTVVfTlVNX1BSRVZfUk9PVFM7IGkrKylcXG42ODIzOlxcdFxcdFxcdG1tdS1cXHUwMDNlcHJldl9yb290c1tpXSA9IEtWTV9NTVVfUk9PVF9JTkZPX0lOVkFMSUQ7XFxuNjgyNDpcXHRcXG42ODI1OlxcdFxcdC8qIHZjcHUtXFx1MDAzZWFyY2guZ3Vlc3RfbW11IGlzbid0IHVzZWQgd2hlbiAhdGRwX2VuYWJsZWQuICovXFxuNjgyNjpcXHRcXHRpZiAoIXRkcF9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IG1tdSA9PSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5ndWVzdF9tbXUpXFxuNjgyNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG42ODI4OlxcdFxcbjY4Mjk6XFx0XFx0LypcXG42ODMwOlxcdFxcdCAqIFdoZW4gdXNpbmcgUEFFIHBhZ2luZywgdGhlIGZvdXIgUERQVEVzIGFyZSB0cmVhdGVkIGFzICdyb290JyBwYWdlcyxcXG42ODMxOlxcdFxcdCAqIHdoaWxlIHRoZSBQRFAgdGFibGUgaXMgYSBwZXItdkNQVSBjb25zdHJ1Y3QgdGhhdCdzIGFsbG9jYXRlZCBhdCBNTVVcXG42ODMyOlxcdFxcdCAqIGNyZWF0aW9uLiAgV2hlbiBlbXVsYXRpbmcgMzItYml0IG1vZGUsIGNyMyBpcyBvbmx5IDMyIGJpdHMgZXZlbiBvblxcbjY4MzM6XFx0XFx0ICogeDg2XzY0LiAgVGhlcmVmb3JlIHdlIG5lZWQgdG8gYWxsb2NhdGUgdGhlIFBEUCB0YWJsZSBpbiB0aGUgZmlyc3RcXG42ODM0OlxcdFxcdCAqIDRHQiBvZiBtZW1vcnksIHdoaWNoIGhhcHBlbnMgdG8gZml0IHRoZSBETUEzMiB6b25lLiAgVERQIHBhZ2luZ1xcbjY4MzU6XFx0XFx0ICogZ2VuZXJhbGx5IGRvZXNuJ3QgdXNlIFBBRSBwYWdpbmcgYW5kIGNhbiBza2lwIGFsbG9jYXRpbmcgdGhlIFBEUFxcbjY4MzY6XFx0XFx0ICogdGFibGUuICBUaGUgbWFpbiBleGNlcHRpb24sIGhhbmRsZWQgaGVyZSwgaXMgU1ZNJ3MgMzItYml0IE5QVC4gIFRoZVxcbjY4Mzc6XFx0XFx0ICogb3RoZXIgZXhjZXB0aW9uIGlzIGZvciBzaGFkb3dpbmcgTDEncyAzMi1iaXQgb3IgUEFFIE5QVCBvbiA2NC1iaXRcXG42ODM4OlxcdFxcdCAqIEtWTTsgdGhhdCBob3Jyb3IgaXMgaGFuZGxlZCBvbi1kZW1hbmQgYnkgbW11X2FsbG9jX3NwZWNpYWxfcm9vdHMoKS5cXG42ODM5OlxcdFxcdCAqL1xcbjY4NDA6XFx0XFx0aWYgKHRkcF9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IGt2bV9tbXVfZ2V0X21heF90ZHBfbGV2ZWwoKSBcXHUwMDNlIFBUMzJFX1JPT1RfTEVWRUwpXFxuNjg0MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG42ODQyOlxcdFxcbjY4NDM6XFx0XFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfRE1BMzIpO1xcbjY4NDQ6XFx0XFx0aWYgKCFwYWdlKVxcbjY4NDU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNjg0NjpcXHRcXG42ODQ3OlxcdFxcdG1tdS1cXHUwMDNlcGFlX3Jvb3QgPSBwYWdlX2FkZHJlc3MocGFnZSk7XFxuNjg0ODpcXHRcXG42ODQ5OlxcdFxcdC8qXFxuNjg1MDpcXHRcXHQgKiBDUjMgaXMgb25seSAzMiBiaXRzIHdoZW4gUEFFIHBhZ2luZyBpcyB1c2VkLCB0aHVzIGl0J3MgaW1wb3NzaWJsZSB0b1xcbjY4NTE6XFx0XFx0ICogZ2V0IHRoZSBDUFUgdG8gdHJlYXQgdGhlIFBEUFRFcyBhcyBlbmNyeXB0ZWQuICBEZWNyeXB0IHRoZSBwYWdlIHNvXFxuNjg1MjpcXHRcXHQgKiB0aGF0IEtWTSdzIHdyaXRlcyBhbmQgdGhlIENQVSdzIHJlYWRzIGdldCBhbG9uZy4gIE5vdGUsIHRoaXMgaXNcXG42ODUzOlxcdFxcdCAqIG9ubHkgbmVjZXNzYXJ5IHdoZW4gdXNpbmcgc2hhZG93IHBhZ2luZywgYXMgNjQtYml0IE5QVCBjYW4gZ2V0IGF0XFxuNjg1NDpcXHRcXHQgKiB0aGUgQy1iaXQgZXZlbiB3aGVuIHNoYWRvd2luZyAzMi1iaXQgTlBULCBhbmQgU01FIGlzbid0IHN1cHBvcnRlZFxcbjY4NTU6XFx0XFx0ICogYnkgMzItYml0IGtlcm5lbHMgKHdoZW4gS1ZNIGl0c2VsZiB1c2VzIDMyLWJpdCBOUFQpLlxcbjY4NTY6XFx0XFx0ICovXFxuNjg1NzpcXHRcXHRpZiAoIXRkcF9lbmFibGVkKVxcbjY4NTg6XFx0XFx0XFx0c2V0X21lbW9yeV9kZWNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpbW11LVxcdTAwM2VwYWVfcm9vdCwgMSk7XFxuNjg1OTpcXHRcXHRlbHNlXFxuNjg2MDpcXHRcXHRcXHRXQVJOX09OX09OQ0Uoc2hhZG93X21lX3ZhbHVlKTtcXG42ODYxOlxcdFxcbjY4NjI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDQ7ICsraSlcXG42ODYzOlxcdFxcdFxcdG1tdS1cXHUwMDNlcGFlX3Jvb3RbaV0gPSBJTlZBTElEX1BBRV9ST09UO1xcbjY4NjQ6XFx0XFxuNjg2NTpcXHRcXHRyZXR1cm4gMDtcXG42ODY2OlxcdH1cXG42ODY3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNToyNy4xNTU4MTU4NDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU3Mjg0MDE5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIE1NVSBMb2dpYyBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjb2RlIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBjb250ZXh0LCBpdCBsb29rcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCEgV2UncmUgZGVhbGluZyB3aXRoIEtWTSwgd2hpY2ggaXMgYWxyZWFkeSBleHRlbnNpdmVseSBmdXp6ZWQgYnkgdG9vbHMgbGlrZSBTeXprYWxsZXIsIGxldmVyYWdpbmcgc3RhbmRhcmQgaW9jdGxzIGxpa2UgYEtWTV9DUkVBVEVfVk1gLCBgS1ZNX0NSRUFURV9WQ1BVYCwgYW5kIGBLVk1fU0VUX0NQVUlEMmAuIFRoZXNlIGlvY3RscyBhcmUga25vd24gZW50cnlwb2ludHMgdG8gcmVhY2ggcGFydHMgb2YgdGhlIE1NVSBjb2RlLiBJdCdzIGdyZWF0IHRoYXQgaXQncyBhbHJlYWR5IHdlbGwtdHJvZGRlbiBncm91bmQuXG5cblRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiBLVk0gTU1VIGxvZ2ljLCBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHNldHRpbmcgdXAgVHJhbnNsYXRpb24gTG9va2FzaWRlIEJ1ZmZlciAoVExCKSBNTVUgcm9vdCBwYWdlIHJvbGVzIGFuZCBpbnN0YW5jZXMgZm9yIHZDUFVzLCB3aGljaCBhcmUgY3JpdGljYWwgcGF0aHMuIFRoZSBtZW50aW9uZWQgZnVuY3Rpb25zIGFyZSBga3ZtX21tdV9nZXRfdGRwX2xldmVsYCwgYF9fa3ZtX21tdV9jcmVhdGVgLCBgdGR4X2xvYWRfbW11X3BnZGAsIGFuZCBgdGR4X3RkX2luaXRgLiBDaGFuZ2VzIHRvIGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgIGluY2x1ZGUgYW4gYXNzZXJ0aW9uIHdpdGggYFdBUk5fT05fT05DRWAuIFRoaXMgaXMgZ29vZCwgYmVjYXVzZSB0aGVzZSBhZGRpdGlvbnMgYXJlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcgYXMgdGhleSBoYXZlIHRoZSBwb3RlbnRpYWwgdG8gcmV2ZWFsIGJ1Z3MuXG5cbkdpdmVuIHRoYXQgS1ZNIGlzIGZ1bGx5IGVtdWxhdGVkIGFuZCBydW5uYWJsZSB3aXRoaW4gUUVNVS9zdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIGVzdGFibGlzaGVkIGlvY3RscywgSSdtIGNvbmNsdWRpbmcgdGhhdCB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBUaGUgZmFjdCB0aGF0IG5ldyBhc3NlcnRpb25zIGFuZCBsb2dpYyByZXN0cnVjdHVyaW5nIGFyZSBwcmVzZW50IG9ubHkgc3RyZW5ndGhlbnMgdGhlIGNhc2UgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IFdvcnRoRnV6emluZy5cblxuTm93LCBsZXQncyByZWZpbmUgdGhlIGZ1enppbmcgYXBwcm9hY2ggYW5kIGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIHByaW1hcnkgY29uZmlncyBvZiBpbnRlcmVzdCBhcmUgYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGFuZCBgS1ZNX0lOVEVMX1REWGAuIEl0J3Mgd29ydGggcmVtZW1iZXJpbmcgdGhhdCBgS1ZNX0lOVEVMX1REWGAgZGVwZW5kcyBvbiBgSU5URUxfVERYX0hPU1RgLiBJdCdzIGEga2V5IGNvbmZpZ3VyYXRpb24gdG8ga2VlcCBpbiBtaW5kLCBhcyBhcmUgdGhlIG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMuIFRoZXNlIGNvbmZpZ3VyYXRpb25zIGRpcmVjdGx5IGluZmx1ZW5jZSB0aGUgY29kZSBwYXRocyB3ZSdyZSB0YXJnZXRpbmcuIEkgd2lsbCBuZWVkIHRvIGNoZWNrIHRob3NlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTozMS43Mjg2NTk5OTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTY4ODMxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5URUxfVERYX0hPU1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0xODQ0PWNvbmZpZyBYODZfVVNFUl9TSEFET1dfU1RBQ0tcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTg2My1cXG5hcmNoL3g4Ni9LY29uZmlnOjE4NjQ6Y29uZmlnIElOVEVMX1REWF9IT1NUXFxuYXJjaC94ODYvS2NvbmZpZy0xODY1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzU6MzEuOTI4MzU3ODA1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1OTc1NzAyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBJTlRFTF9URFhfSE9TVCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgSU5URUxfVERYX0hPU1RgLiBJIGtub3cgdGhpcyBpcyBhbiB4ODYtc3BlY2lmaWMgZmVhdHVyZSwgc28gdGhlIHBsYWNlIHRvIHN0YXJ0IGlzIGBhcmNoL3g4Ni9LY29uZmlnYC4gU3BlY2lmaWNhbGx5LCBhcm91bmQgbGluZSAxODY0LCB3aGljaCBpcyB0eXBpY2FsbHkgd2hlcmUgdGhlc2UgdHlwZXMgb2Ygb3B0aW9ucyBhcmUgZGVmaW5lZC4gVGhpcyB3aWxsIHJldmVhbCB0aGUgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZm9yIGBJTlRFTF9URFhfSE9TVGAgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBkZXBlbmRlbmNpZXMgb24gdGhpbmdzIGxpa2UgQ1BVIGZlYXR1cmVzLCBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgc2VjdXJpdHktcmVsYXRlZCBzZXR0aW5ncy4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGl0cyBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIGxhcmdlciB4ODYgZWNvc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA0NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM1OjM0LjUyNTkzMTgwMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODYwOlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vYXJjaC94ODYvc2hzdGsucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbjE4NjE6XFx0XFxuMTg2MjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMTg2MzpcXHRcXG4xODY0OlxcdGNvbmZpZyBJTlRFTF9URFhfSE9TVFxcbjE4NjU6XFx0XFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XFxcIlxcbjE4NjY6XFx0XFx0ZGVwZW5kcyBvbiBDUFVfU1VQX0lOVEVMXFxuMTg2NzpcXHRcXHRkZXBlbmRzIG9uIFg4Nl82NFxcbjE4Njg6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fSU5URUxcXG4xODY5OlxcdFxcdGRlcGVuZHMgb24gWDg2X1gyQVBJQ1xcbjE4NzA6XFx0XFx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xcbjE4NzE6XFx0XFx0ZGVwZW5kcyBvbiBDT05USUdfQUxMT0NcXG4xODcyOlxcdFxcdGRlcGVuZHMgb24gWDg2X01DRVxcbjE4NzM6XFx0XFx0aGVscFxcbjE4NzQ6XFx0XFx0ICBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBwcm90ZWN0cyBndWVzdCBWTXMgZnJvbSBtYWxpY2lvdXNcXG4xODc1OlxcdFxcdCAgaG9zdCBhbmQgY2VydGFpbiBwaHlzaWNhbCBhdHRhY2tzLiAgVGhpcyBvcHRpb24gZW5hYmxlcyBuZWNlc3NhcnkgVERYXFxuMTg3NjpcXHRcXHQgIHN1cHBvcnQgaW4gdGhlIGhvc3Qga2VybmVsIHRvIHJ1biBjb25maWRlbnRpYWwgVk1zLlxcbjE4Nzc6XFx0XFxuMTg3ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMTg3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzU6MzQuNTI2MTA2NzUyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5ODQwNTE0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgUmVjZW50IENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGVzZSBtb2RpZmljYXRpb25zLiBJJ2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYEZvY3VzU3ltYm9sc2Ag4oCTIGl0IGxvb2tzIGxpa2UgdGhleSd2ZSBwaW4tcG9pbnRlZCBhIGNsdXN0ZXIgb2YgY2hhbmdlcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBLVk0gKEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUpIGluZnJhc3RydWN0dXJlIGZvciB4ODYgYXJjaGl0ZWN0dXJlLlxuXG5JIHNlZSB0aGF0IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZCBvciBkaXJlY3RseSBjYWxsIHRoZSBtb2RpZmllZCBjb2RlOlxuMS4gIGBfX2t2bV9tbXVfY3JlYXRlYCAoYSBzdGF0aWMgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoZSBwdWJsaWMgYGt2bV9tbXVfY3JlYXRlYCBmdW5jdGlvbikuXG4gICAgYGt2bV9tbXVfY3JlYXRlYFxuMi4gIGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgIChhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBjYWxsZWQgYnkgYGt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGVgIGFuZCBga3ZtX2luaXRfc2hhZG93X25wdF9tbXVgKS5cbiAgICBga3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZWBcbiAgICBga3ZtX2luaXRfc2hhZG93X25wdF9tbXVgXG4zLiAgYHRkeF9sb2FkX21tdV9wZ2RgIChmb3VuZCBpbiBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2ApLlxuNC4gIGB0ZHhfdGRfaW5pdGAgKGFsc28gaW4gYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgKS5cblxuT2theSwgdGhhdCdzIHRoZSBjb3JlLiBOb3csIEkgbmVlZCB0byBicm9hZGVuIHRoZSBzZWFyY2guIEkgd2FudCB0byBrbm93IGlmIHRoZXJlIGFyZSBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIG9yIHNpZGUtZWZmZWN0cywgc28gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBvdGhlciBhZmZlY3RlZCBmdW5jdGlvbnMuIFRoZSBjb2RlIGNoYW5nZXMgY291bGQgYWZmZWN0IG90aGVyIGFyZWFzIG9mIHRoZSBzeXN0ZW0gdGhhdCBhcmUgbm90IGRpcmVjdGx5IGNhbGxlZCBieSB0aGUgY29yZSBjb2RlLlxuXG5Ob3cgSSdsbCBkaWcgaW50byB0aGUgYGFyY2gveDg2L2t2bS9jcHVpZC5jYCBmaWxlIGFuZCBhbHNvIGNoZWNrIG90aGVyIHJlbGV2YW50IGZpbGVzLiBJdCBhcHBlYXJzIHRoYXQgYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAgd2FzIHJlbW92ZWQuIEZ1cnRoZXIgY29uZmlybWluZyB0aGlzLCB0aGUgZnVuY3Rpb24gcHJvdG90eXBlIHdhcyByZW1vdmVkIGluIGBjcHVpZC5oYC5cblxuSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgY2FsbGVycyBvZiBga3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZWAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBpbmRpcmVjdCBzaWRlIGVmZmVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTc3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzU6MzguNTEwMTYyMDE1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDY5MjgyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fY2FsY190ZHBfbW11X3Jvb3RfcGFnZV9yb2xlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5ODI9c3RhdGljIHVuaW9uIGt2bV9tbXVfcGFnZV9yb2xlXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTgzOmt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk4NC1cXHRcXHRcXHRcXHR1bmlvbiBrdm1fY3B1X3JvbGUgY3B1X3JvbGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTYwMDY9c3RhdGljIHZvaWQgaW5pdF9rdm1fdGRwX21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYwMDktXFx0c3RydWN0IGt2bV9tbXUgKmNvbnRleHQgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5yb290X21tdTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYwMTA6XFx0dW5pb24ga3ZtX21tdV9wYWdlX3JvbGUgcm9vdF9yb2xlID0ga3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZSh2Y3B1LCBjcHVfcm9sZSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MDExLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTozOC41NjQ4NjEzOTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg1NjIxOTkyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIEtWTSBURFAgTU1VIEluaXRpYWxpemF0aW9uIGFuZCBDYWxsZXJzKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGNlbnRlcmVkIG9uIGludmVzdGlnYXRpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBLVk0gVGFnZ2VkIERhdGEgUG9pbnRlciAoVERQKSBNTVUsIHNwZWNpZmljYWxseSB0aGUgYGluaXRfa3ZtX3RkcF9tbXVgIGZ1bmN0aW9uLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgbm90IGp1c3QgdGhhdCBmdW5jdGlvbiBpbiBpc29sYXRpb24sIGJ1dCBhbHNvIHRoZSBicm9hZGVyIGNvbnRleHQuIFdoYXQgb3RoZXIgY29kZSBwYXRocyBjYWxsIGludG8gdGhpcyBmdW5jdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGVudHJ5IHBvaW50cyBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQncyBpbnZva2VkLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBNTVUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgYW5kIGhvdyBURFAgaXMgaW50ZWdyYXRlZC4gSWRlbnRpZnlpbmcgdGhlIGNhbGxlcnMgd2lsbCBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtaWdodCBtYWtlIHRvIGBpbml0X2t2bV90ZHBfbW11YCBvciBob3cgdGhpcyBpbml0aWFsaXphdGlvbiBvY2N1cnMuIFRoaXMgaXMgZXNzZW50aWFsIGZvciBhIHRob3JvdWdoIHJldmlldyBhbmQgYW55IHRyb3VibGVzaG9vdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3NDQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTo0MC40MjEwODQ5MTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDQyODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluaXRfa3ZtX3RkcF9tbXVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTk4Mz1rdm1fY2FsY190ZHBfbW11X3Jvb3RfcGFnZV9yb2xlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjAwNS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYwMDY6c3RhdGljIHZvaWQgaW5pdF9rdm1fdGRwX21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MDA3LVxcdFxcdFxcdCAgICAgdW5pb24ga3ZtX2NwdV9yb2xlIGNwdV9yb2xlKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02MTc2PXZvaWQga3ZtX2luaXRfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjE4NC1cXHRcXHRpZiAodGRwX2VuYWJsZWQpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2MTg1OlxcdFxcdFxcdGluaXRfa3ZtX3RkcF9tbXUodmNwdSwgY3B1X3JvbGUpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjE4Ni1cXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM1OjQwLjQ3NTEzMjU2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNTYyMDYwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIE1NVSBGdXp6aW5nIFNjb3BlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IEtWTSBNTVUgZnV6emluZywgYW5kIEkgbmVlZCB0byBkZWZpbmUgdGhlIGFwcHJvcHJpYXRlIHNjb3BlIGZvciBvdXIgZnV6emVyLiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYGt2bV9pbml0X21tdWAgaXMgYSBub24tc3RhdGljIGZ1bmN0aW9uIGNhbGxlZCBxdWl0ZSBmcmVxdWVudGx5IGR1cmluZyBNTVUgc2V0dXAgYW5kIHJlc2V0IG9wZXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgd2hldGhlciBpdCB3YXMgdG9vIGJyb2FkLCBidXQgYWZ0ZXIgZnVydGhlciBjb25zaWRlcmF0aW9uLCBpdCdzIGFjdHVhbGx5IHF1aXRlIHdlbGwtdGFyZ2V0ZWQgZm9yIEtWTSBWQ1BVIGluaXRpYWxpemF0aW9uIGFuZCBtb2RlIHN3aXRjaGluZywgcGVyZmVjdGx5IHJlbGV2YW50IHRvIE1NVSBmdXp6aW5nLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCB0aGUgZm9jdXMgc3ltYm9scy4gV2UgaGF2ZTpcblxuKiAgIGBrdm1fbW11X2NyZWF0ZWAgLSB0aGlzIGlzIHNwZWNpZmljIHRvIEtWTSBWQ1BVIGNyZWF0aW9uLCBtYWtlcyBzZW5zZS5cbiogICBga3ZtX2luaXRfbW11YCAtIGFzIG1lbnRpb25lZCwgdGhpcyBpcyBhIHByaW1lIGNhbmRpZGF0ZS5cbiogICBga3ZtX2luaXRfc2hhZG93X25wdF9tbXVgIC0gdGhpcyBsb29rcyBzcGVjaWZpYyB0byBuZXN0ZWQgTlBUIE1NVSBpbml0aWFsaXphdGlvbi5cbiogICBgdGR4X2xvYWRfbW11X3BnZGAgLSBURFgtc3BlY2lmaWMsIGRlYWxpbmcgd2l0aCBsb2FkaW5nIHRoZSBQR0QgKFBhZ2UgR2xvYmFsIERpcmVjdG9yeSkuXG4qICAgYHRkeF90ZF9pbml0YCAtIFRoaXMgaXMgYSBURFggaW5pdGlhbGl6YXRpb24gY29tbWFuZCBoYW5kbGVyLlxuXG5BbGwgdGhlc2UgZnVuY3Rpb25zIGFwcGVhciByZWxldmFudC5cblxuTmV4dCwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogV2UgbmVlZCB0byBlbnN1cmUgd2UgY292ZXIgdGhlIHJlbGV2YW50IEtWTSBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSBhcmUgYWltaW5nIGZvcjogYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGBJTlRFTF9URFhfSE9TVGAsIGFuZCBgS1ZNX0lOVEVMX1REWGAuIFRoZXNlIGNvbmZpZ3MgY29sbGVjdGl2ZWx5IGNvdmVyIGEgd2lkZSByYW5nZSBvZiBoYXJkd2FyZSBwbGF0Zm9ybXMuXG5cbkZpbmFsbHksIGxldCdzIGFzc2VtYmxlIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuIEkgbmVlZCB0byBiZSBwcmVjaXNlIGhlcmUuIFdlIGFyZSBzYXlpbmcgdGhhdCB0aGlzIHBhdGNoICppcyogd29ydGggZnV6emluZywgYW5kIEkgbmVlZCB0byBleHBsYWluICp3aHkqLlxuXG5UaGUgcmVhc29uIGlzIGJlY2F1c2UgdGhlIGNoYW5nZXMgaW1wYWN0IEtWTSBNTVUgVERQIGxldmVsIGNhbGN1bGF0aW9uIGxvZ2ljIChga3ZtX21tdV9nZXRfdGRwX2xldmVsYCwgYF9fa3ZtX21tdV9jcmVhdGVgKSwgaW50cm9kdWNlcyBhIG5ldyBgbWlycm9yX3Jvb3RfbGV2ZWxgIGZpZWxkIGluIGBrdm1fYXJjaGAsIGFuZCB3ZSd2ZSBhZGRlZCBhIGBXQVJOX09OX09OQ0VgIGFzc2VydGlvbiByZWxhdGVkIHRvIHRoZSBtaXJyb3JlZCBURFAgcm9vdCBsZXZlbCBjb25maWd1cmF0aW9uLiBUaGlzIGxvZ2ljIGlzIGFjY2Vzc2VkIHZpYSBjb21tb24gS1ZNIGlvY3RscyBsaWtlIGBLVk1fQ1JFQVRFX1ZNYCwgYEtWTV9DUkVBVEVfVkNQVWAsIGFuZCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBvcGVyYXRpb25zIG9uIGFtZDY0LCBzbyBpdCBzaG91bGQgYmUgZWFzaWx5IHJlYWNoYWJsZS5cblxuU28sIGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYC4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZC4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjb25maXJtZWQsIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxvb2sgY29ycmVjdC4gQmVmb3JlIEkgc3VibWl0LCBJJ2xsIGRvIGEgZmluYWwgc2FuaXR5IGNoZWNrIG9uIGFsbCBwYXJhbWV0ZXJzIHRvIGVuc3VyZSBubyB0eXBvcyBvciBsb2dpY2FsIGVycm9ycyBhcmUgcHJlc2VudC4gT2theSwgYWxsIGxvb2tzIGdvb2QgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjk4LCJPdXRwdXRUb2tlbnMiOjIzOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTo0Ni43MzEzNDE3OTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTM1NTczMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIklOVEVMX1REWF9IT1NUXCIsXG4gICAgXCJLVk1fSU5URUxfVERYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX21tdV9jcmVhdGVcIixcbiAgICBcImt2bV9pbml0X21tdVwiLFxuICAgIFwia3ZtX2luaXRfc2hhZG93X25wdF9tbXVcIixcbiAgICBcInRkeF9sb2FkX21tdV9wZ2RcIixcbiAgICBcInRkeF90ZF9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHg4NiBNTVUgcm9vdCBsZXZlbCBjYWxjdWxhdGlvbiBhbmQgVERQIGNyZWF0aW9uIGxvZ2ljIChfX2t2bV9tbXVfY3JlYXRlLCBrdm1fbW11X2dldF90ZHBfbGV2ZWwpIGFuZCB1cGRhdGVzIFREWCBtaXJyb3JlZCByb290IGxldmVsIGhhbmRsaW5nICh0ZHhfbG9hZF9tbXVfcGdkLCB0ZHhfdGRfaW5pdCkuIEl0IGFsc28gYWRkcyBhIG5ldyBXQVJOX09OX09OQ0UgYXNzZXJ0aW9uIGZvciB1bmluaXRpYWxpemVkIG1pcnJvcl9yb290X2xldmVsLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZHVyaW5nIEtWTSBWTSBhbmQgdkNQVSBpbml0aWFsaXphdGlvbi9saWZlY3ljbGUgb3BlcmF0aW9ucyBvbiB4ODZfNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIklOVEVMX1REWF9IT1NUXCIsXG4gICAgXCJLVk1fSU5URUxfVERYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX21tdV9jcmVhdGVcIixcbiAgICBcImt2bV9pbml0X21tdVwiLFxuICAgIFwia3ZtX2luaXRfc2hhZG93X25wdF9tbXVcIixcbiAgICBcInRkeF9sb2FkX21tdV9wZ2RcIixcbiAgICBcInRkeF90ZF9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHg4NiBNTVUgcm9vdCBsZXZlbCBjYWxjdWxhdGlvbiBhbmQgVERQIGNyZWF0aW9uIGxvZ2ljIChfX2t2bV9tbXVfY3JlYXRlLCBrdm1fbW11X2dldF90ZHBfbGV2ZWwpIGFuZCB1cGRhdGVzIFREWCBtaXJyb3JlZCByb290IGxldmVsIGhhbmRsaW5nICh0ZHhfbG9hZF9tbXVfcGdkLCB0ZHhfdGRfaW5pdCkuIEl0IGFsc28gYWRkcyBhIG5ldyBXQVJOX09OX09OQ0UgYXNzZXJ0aW9uIGZvciB1bmluaXRpYWxpemVkIG1pcnJvcl9yb290X2xldmVsLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZHVyaW5nIEtWTSBWTSBhbmQgdkNQVSBpbml0aWFsaXphdGlvbi9saWZlY3ljbGUgb3BlcmF0aW9ucyBvbiB4ODZfNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM1OjQ2LjgyMDcwNjE3MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc3MTcwNzE5MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTo0Ni44MjEzNzg2NjJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNzcxNjM5NDgzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyBLVk0gZGV0ZXJtaW5lcyB0aGUgVERQIGxldmVsIGZvciBWTXMgd2l0aCBtaXJyb3JlZCBwYWdlIHRhYmxlcyAoc3VjaCBhcyBURFggVk1zKSwgYnkgdHJhY2tpbmcgdGhlIG1pcnJvciByb290IGxldmVsIGV4cGxpY2l0bHkgaW4gYHN0cnVjdCBrdm1fYXJjaGAgKGBtaXJyb3Jfcm9vdF9sZXZlbGApIHNldCBkdXJpbmcgVEQgaW5pdGlhbGl6YXRpb24gaW5zdGVhZCBvZiBxdWVyeWluZyB0aGUgZ3Vlc3QgQ1BVSUQuXFxuXFxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZTogYHN0cnVjdCBrdm1fYXJjaGAgaXMgcGFydCBvZiBgc3RydWN0IGt2bWAsIHdoaWNoIGlzIGFsbG9jYXRlZCB3aXRoIGBrdnphbGxvYygpYCBpbiBga3ZtX2FyY2hfYWxsb2Nfdm0oKWAsIGd1YXJhbnRlZWluZyB0aGF0IGBtaXJyb3Jfcm9vdF9sZXZlbGAgaXMgemVyby1pbml0aWFsaXplZC5cXG4tIE5vIGtlcm5lbC10by11c2VyIGluZm8gbGVha3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IG5ldyBkYXRhIHRvIHVzZXIgc3BhY2UgdmlhIGNvcHlfdG9fdXNlciBvciBpb2N0bCBvdXRwdXRzLlxcbi0gTm8gdW5pbml0aWFsaXplZCBicmFuY2hpbmcgb3IgYnVmZmVyIGFjY2VzczogTG9naWMgY2hlY2tzIG9wZXJhdGUgb24gZnVsbHkgaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhbmQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLlxcblxcblRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgcHJlc2VudCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gcnVuIGlzIG5vdCBuZWVkZWQ7IHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDcxZDA4YTEwOTUyOWM1ZjI0NmE1ZjdhYWViYmU5OTcxZGVkNTQxNWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDIzOjM0OjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDY4M2JiOGJmNDNhOTQuLmVkZDVhZDJlNWI1MmQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMTQwNiw2ICsxNDA2LDcgQEAgc3RydWN0IGt2bV9hcmNoIHtcbiBcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBzcGxpdF9kZXNjX2NhY2hlO1xuIFxuIFx0Z2ZuX3QgZ2ZuX2RpcmVjdF9iaXRzO1xuK1x0aW50IG1pcnJvcl9yb290X2xldmVsO1xuIFxuIFx0LypcbiBcdCAqIFNpemUgb2YgdGhlIENQVSdzIGRpcnR5IGxvZyBidWZmZXIsIGkuZS4gVk1YJ3MgUE1MIGJ1ZmZlci4gQSBaZXJvXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmMgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuaW5kZXggZGRiMDIyY2IyMDNhMi4uMzRjNjA5YTYwZWVmZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuQEAgLTQ4MywyMCArNDgzLDYgQEAgaW50IGNwdWlkX3F1ZXJ5X21heHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIDM2O1xuIH1cbiBcbi1pbnQgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqYmVzdDtcbi1cbi1cdGJlc3QgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDAwKTtcbi1cdGlmICghYmVzdCB8fCBiZXN0LVx1MDAzZWVheCBcdTAwM2MgMHg4MDAwMDAwOClcbi1cdFx0Z290byBub3RfZm91bmQ7XG4tXHRiZXN0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAwOCk7XG4tXHRpZiAoYmVzdClcbi1cdFx0cmV0dXJuIChiZXN0LVx1MDAzZWVheCBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweGZmO1xuLW5vdF9mb3VuZDpcbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIFRoaXMgXCJyYXdcIiB2ZXJzaW9uIHJldHVybnMgdGhlIHJlc2VydmVkIEdQQSBiaXRzIHdpdGhvdXQgYW55IGFkanVzdG1lbnRzIGZvclxuICAqIGVuY3J5cHRpb24gdGVjaG5vbG9naWVzIHRoYXQgdXN1cnAgYml0cy4gIFRoZSByYXcgbWFzayBzaG91bGQgYmUgdXNlZCBpZiBhbmRcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vY3B1aWQuaCBiL2FyY2gveDg2L2t2bS9jcHVpZC5oXG5pbmRleCA4ZDg2M2Y0NTU4NWRlLi40NmJmZTg2OTllNjdmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmhcbisrKyBiL2FyY2gveDg2L2t2bS9jcHVpZC5oXG5AQCAtNjgsNyArNjgsNiBAQCB2b2lkIF9faW5pdCBrdm1faW5pdF94c3RhdGVfc2l6ZXModm9pZCk7XG4gdTMyIHhzdGF0ZV9yZXF1aXJlZF9zaXplKHU2NCB4c3RhdGVfYnYsIGJvb2wgY29tcGFjdGVkKTtcbiBcbiBpbnQgY3B1aWRfcXVlcnlfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLWludCBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB1NjQga3ZtX3ZjcHVfcmVzZXJ2ZWRfZ3BhX2JpdHNfcmF3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gc3RhdGljIGlubGluZSBpbnQgY3B1aWRfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDA2NGVjYzMzYjkyNjcuLmQ0M2I4YjZjM2IxNzkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtNTk1MywxOSArNTk1MywyMiBAQCB2b2lkIF9fa3ZtX21tdV9yZWZyZXNoX3Bhc3N0aHJvdWdoX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0aW50IG1heHBhO1xuLVxuLVx0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTSlcbi1cdFx0bWF4cGEgPSBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIodmNwdSk7XG4tXHRlbHNlXG4tXHRcdG1heHBhID0gY3B1aWRfbWF4cGh5YWRkcih2Y3B1KTtcbi1cbiBcdC8qIHRkcF9yb290X2xldmVsIGlzIGFyY2hpdGVjdHVyZSBmb3JjZWQgbGV2ZWwsIHVzZSBpdCBpZiBub256ZXJvICovXG4gXHRpZiAodGRwX3Jvb3RfbGV2ZWwpXG4gXHRcdHJldHVybiB0ZHBfcm9vdF9sZXZlbDtcbiBcbitcdC8qXG4rXHQgKiBJZiB0aGUgVk0gaGFzIG1pcnJvciByb290cywgdGhlbiB0aGUgcm9vdCBsZXZlbCBpcyBwcmVkZWZpbmVkIGFzIHRoZVxuK1x0ICogbWlycm9yIHJvb3QgKGFuZCBieSBleHRlbnNpb24gdGhlIG5vcm1hbCByb290KSBuZWVkcyB0byBtYXRjaCB0aGVcbitcdCAqIHJvb3QgbGV2ZWwgdGhhdCB3YXMgY29uZmlndXJlZCBmb3IgdGhlIGV4dGVybmFsIHBhZ2UgdGFibGVzIHRoYXQgYXJlXG4rXHQgKiBiZWluZyBtaXJyb3JlZCBieSBLVk0uXG4rXHQgKi9cbitcdGlmIChrdm1faGFzX21pcnJvcmVkX3RkcCh2Y3B1LVx1MDAzZWt2bSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIVdBUk5fT05fT05DRSghdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbCkpXG4rXHRcdHJldHVybiB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsO1xuK1xuIFx0LyogVXNlIDUtbGV2ZWwgVERQIGlmIGFuZCBvbmx5IGlmIGl0J3MgdXNlZnVsL25lY2Vzc2FyeS4gKi9cbi1cdGlmIChtYXhfdGRwX2xldmVsID09IDUgXHUwMDI2XHUwMDI2IG1heHBhIFx1MDAzYz0gNDgpXG4rXHRpZiAobWF4X3RkcF9sZXZlbCA9PSA1IFx1MDAyNlx1MDAyNiBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpIFx1MDAzYz0gNDgpXG4gXHRcdHJldHVybiA0O1xuIFxuIFx0cmV0dXJuIG1heF90ZHBfbGV2ZWw7XG5AQCAtNjgzNCw3ICs2ODM3LDcgQEAgc3RhdGljIGludCBfX2t2bV9tbXVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXUgKm1tdSwgc3RydWN0IGtcbiBcdCAqIG90aGVyIGV4Y2VwdGlvbiBpcyBmb3Igc2hhZG93aW5nIEwxJ3MgMzItYml0IG9yIFBBRSBOUFQgb24gNjQtYml0XG4gXHQgKiBLVk07IHRoYXQgaG9ycm9yIGlzIGhhbmRsZWQgb24tZGVtYW5kIGJ5IG1tdV9hbGxvY19zcGVjaWFsX3Jvb3RzKCkuXG4gXHQgKi9cbi1cdGlmICh0ZHBfZW5hYmxlZCBcdTAwMjZcdTAwMjYga3ZtX21tdV9nZXRfdGRwX2xldmVsKHZjcHUpIFx1MDAzZSBQVDMyRV9ST09UX0xFVkVMKVxuK1x0aWYgKHRkcF9lbmFibGVkIFx1MDAyNlx1MDAyNiBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKCkgXHUwMDNlIFBUMzJFX1JPT1RfTEVWRUwpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfRE1BMzIpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5pbmRleCBiMjcyYzIwNTg2YTc0Li5hMGJjOWY4MThmNDM5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuQEAgLTU2LDkgKzU2LDYgQEBcbiBib29sIGVuYWJsZV90ZHggX19yb19hZnRlcl9pbml0O1xuIG1vZHVsZV9wYXJhbV9uYW1lZCh0ZHgsIGVuYWJsZV90ZHgsIGJvb2wsIDA0NDQpO1xuIFxuLSNkZWZpbmUgVERYX1NIQVJFRF9CSVRfUFdMXzUgZ3BhX3RvX2dmbihCSVRfVUxMKDUxKSlcbi0jZGVmaW5lIFREWF9TSEFSRURfQklUX1BXTF80IGdwYV90b19nZm4oQklUX1VMTCg0NykpXG4tXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnRkeF9zeXNpbmZvO1xuIFxuIHZvaWQgdGRoX3ZwX3JkX2ZhaWxlZChzdHJ1Y3QgdmNwdV90ZHggKnRkeCwgY2hhciAqdWNsYXNzLCB1MzIgZmllbGQsIHU2NCBlcnIpXG5AQCAtMTYwOSwxMCArMTYwNiw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Rkdm1jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiB2b2lkIHRkeF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSwgaW50IHBnZF9sZXZlbClcbiB7XG4tXHR1NjQgc2hhcmVkX2JpdCA9IChwZ2RfbGV2ZWwgPT0gNSkgPyBURFhfU0hBUkVEX0JJVF9QV0xfNSA6XG4tXHRcdFx0ICBURFhfU0hBUkVEX0JJVF9QV0xfNDtcbi1cbi1cdGlmIChLVk1fQlVHX09OKHNoYXJlZF9iaXQgIT0ga3ZtX2dmbl9kaXJlY3RfYml0cyh2Y3B1LVx1MDAzZWt2bSksIHZjcHUtXHUwMDNla3ZtKSlcbitcdGlmIChLVk1fQlVHX09OKHBnZF9sZXZlbCAhPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsLCB2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHRkX3ZtY3Nfd3JpdGU2NCh0b190ZHgodmNwdSksIFNIQVJFRF9FUFRfUE9JTlRFUiwgcm9vdF9ocGEpO1xuQEAgLTI3NjAsNiArMjc1NCwxNCBAQCBERUZJTkVfQ0xBU1ModGR4X3ZtX3N0YXRlX2d1YXJkLCB0ZHhfdm1fc3RhdGVfZ3VhcmRfdCxcbiBcdCAgICAgaWYgKCFJU19FUlIoX1QpKSB0ZHhfcmVsZWFzZV92bV9zdGF0ZV9sb2NrcyhfVCksXG4gXHQgICAgIHRkeF9hY3F1aXJlX3ZtX3N0YXRlX2xvY2tzKGt2bSksIHN0cnVjdCBrdm0gKmt2bSk7XG4gXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBpbnQgbGV2ZWwpXG4re1xuK1x0QlVJTERfQlVHX09OKGxldmVsICE9IDQgXHUwMDI2XHUwMDI2IGxldmVsICE9IDUpO1xuK1xuK1x0a3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWwgPSBsZXZlbDtcbitcdGt2bS1cdTAwM2VhcmNoLmdmbl9kaXJlY3RfYml0cyA9IGdwYV90b19nZm4oQklUX1VMTChsZXZlbCA9PSA0ID8gNDcgOiA1MSkpO1xuK31cbitcbiBzdGF0aWMgaW50IHRkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXG4ge1xuIFx0c3RydWN0IGt2bV90ZHhfaW5pdF92bSBfX3VzZXIgKnVzZXJfZGF0YSA9IHU2NF90b191c2VyX3B0cihjbWQtXHUwMDNlZGF0YSk7XG5AQCAtMjgyMyw5ICsyODI1LDkgQEAgc3RhdGljIGludCB0ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxuIFx0a3ZtX3RkeC1cdTAwM2V4ZmFtID0gdGRfcGFyYW1zLVx1MDAzZXhmYW07XG4gXG4gXHRpZiAodGRfcGFyYW1zLVx1MDAzZWNvbmZpZ19mbGFncyBcdTAwMjYgVERYX0NPTkZJR19GTEFHU19NQVhfR1BBVylcbi1cdFx0a3ZtLVx1MDAzZWFyY2guZ2ZuX2RpcmVjdF9iaXRzID0gVERYX1NIQVJFRF9CSVRfUFdMXzU7XG4rXHRcdHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA1KTtcbiBcdGVsc2Vcbi1cdFx0a3ZtLVx1MDAzZWFyY2guZ2ZuX2RpcmVjdF9iaXRzID0gVERYX1NIQVJFRF9CSVRfUFdMXzQ7XG4rXHRcdHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA0KTtcbiBcbiBcdGt2bV90ZHgtXHUwMDNlc3RhdGUgPSBURF9TVEFURV9JTklUSUFMSVpFRDtcbiBvdXQ6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTo0Ni44MjEzNzk2NzJaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU4MDU5Mjg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gb2YgVGhpcyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIG5lY2Vzc2l0YXRlcyBhIEtNU0FOIGZ1enppbmcgcnVuLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gVERYIChUcnVzdGVkIERvbWFpbiBFeHRlbnNpb24pIHN1cHBvcnQgd2l0aGluIEtWTSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIG1pcnJvcmVkIFREUCBsZXZlbHMgYW5kIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG5cbkZpcnN0LCBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYG1pcnJvcl9yb290X2xldmVsYCB0byBgc3RydWN0IGt2bV9hcmNoYCB3aXRoaW4gYGt2bV9ob3N0LmhgLiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSBpcyBob3cgYHN0cnVjdCBrdm1gIGFuZCBieSBleHRlbnNpb24sIGBrdm1fYXJjaGAgYXJlIGFsbG9jYXRlZCwgYmVjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhIEtNU0FOIHJlZC1mbGFnLiBGb3J0dW5hdGVseSwgSSBzZWUgdGhhdCBga3phbGxvY2AgaXMgdXNlZC4gVGhhdCBtZWFucyB0aGUgYGt2bV9hcmNoYCBzdHJ1Y3QgaXMgKnplcm9lZCogYXQgYWxsb2NhdGlvbi4gVGhhdCBnaXZlcyBtZSBzb21lIHBlYWNlIG9mIG1pbmQuIExldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgb3RoZXIgYWxsb2NhdGlvbnMgdGhvdWdoLCBhbmQgSSdsbCBrZWVwIHRoaXMgY2hlY2sgaW4gdGhlIGJhY2sgb2YgbXkgbWluZCBhcyBJIGRpZyBkZWVwZXIuXG5cblRoZSByZW1vdmFsIG9mIHRoZSBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYCBmdW5jdGlvbiBpcyBpbnRlcmVzdGluZy4gSXQgaW1wbGllcyBzb21lIGNoYW5nZXMgaW4gaG93IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgbGltaXRzIGFyZSBkZXRlcm1pbmVkLiBUaGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgcmVwbGFjZWQgaW4gYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAgd2l0aCBhIGNoZWNrIGZvciBga3ZtX2hhc19taXJyb3JlZF90ZHBgIGFuZCB0aGUgdXNlIG9mIHRoZSBuZXcgYG1pcnJvcl9yb290X2xldmVsYCBmaWVsZC4gVGhlIGNvZGUgbm93IGRpcmVjdGx5IHVzZXMgYHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWxgIGlmIHRoZSBtaXJyb3JlZCBURFAgaXMgZW5hYmxlZC4gQWxzbywgdGhlIHBhdGNoIGNoYW5nZXMgYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbCh2Y3B1KWAgdG8gYGt2bV9tbXVfZ2V0X21heF90ZHBfbGV2ZWwoKWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIGVmZmVjdCBvZiB0aGF0IGNoYW5nZSBpcy5cblxuYF9fa3ZtX21tdV9jcmVhdGVgIGFsc28gc2VlbXMgaW1wYWN0ZWQuIFRoaXMgZnVuY3Rpb24gaXMgYSBjb3JlIHBhcnQgb2YgaG93IHRoZSBNTVUgaXMgc2V0IHVwLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKClgIHdvcmtzIHRoZSBzYW1lIHdheSwgb3IgYmV0dGVyLCBpbiB0aGUgY29udGV4dHMgb2YgdGhlIGNhbGxzIGl0IGlzIHJlcGxhY2luZy5cblxuVGhlIGNoYW5nZXMgaW4gYHRkeC5jYCBhcmUgc2lnbmlmaWNhbnQuIEl0IGxvb2tzIGxpa2UgYHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWxgIGlzIGEga2V5IGFkZGl0aW9uLiBJdCdzIHNldHRpbmcgdGhlIGBtaXJyb3Jfcm9vdF9sZXZlbGAgYW5kLCBjcml0aWNhbGx5LCBgZ2ZuX2RpcmVjdF9iaXRzYC4gVGhlIHNldHRpbmcgb2YgYGdmbl9kaXJlY3RfYml0c2AgaW5kaWNhdGVzIGEgY2hhbmdlIGluIGhvdyBndWVzdCBmcmFtZSBudW1iZXJzIGFyZSBoYW5kbGVkIHdpdGggcmVzcGVjdCB0byB0aGUgcm9vdCBsZXZlbC4gVGhlIHVzZSBvZiB0aGUgYEtWTV9CVUdfT05gIG1hY3JvIGFsc28gc3VnZ2VzdHMgdGhhdCB0aGUgYG1pcnJvcl9yb290X2xldmVsYCBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBjb3JyZWN0bHksIHdoaWNoIGlzIGdvb2QuIEJ1dCB0aGUgb2xkIG1ldGhvZCBjb3VsZCBoYXZlIGhhZCBhIGJ1ZyBoZXJlLCB0aGF0IGNvdWxkIG1lYW4gS01TQU4gd291bGQgcmV2ZWFsIGlzc3Vlcy5cblxuU28sIHRoZSBuZXcgY29kZSBjYWxscyBgdGR4X3NldF9taXJyb3Jfcm9vdF9sZXZlbGAgZGlyZWN0bHksIHdoaWNoIHNldHMgdGhlIGBtaXJyb3Jfcm9vdF9sZXZlbGAuIFRoaXMgKmlzKiBhbiBpbml0aWFsaXphdGlvbiBwb2ludCwgYW5kIGl0J3MgZ29vZCB0aGF0IGl0J3MgZXhwbGljaXQuXG5cblRoZSBrZXkgY29uc2lkZXJhdGlvbnMgbm93IGFyZTpcblxuMS4gICoqSW5pdGlhbGl6YXRpb24gYW5kIEFsbG9jYXRpb246KiogV2hpbGUgYGt6YWxsb2NgIGlzIHVzZWQsIGFyZSB0aGVyZSBhbnkgb3RoZXIgYWxsb2NhdGlvbnMgb3Igc3RydWN0IGNvcGllcyB0aGF0IG1pZ2h0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeT8gSSBuZWVkIHRvIGdyZXAgZm9yIGluc3RhbmNlcyB3aGVyZSBgc3RydWN0IGt2bWAgKGFuZCByZWxhdGVkIHN0cnVjdHMpIGFyZSBhbGxvY2F0ZWQgb3IgY29waWVkIGFuZCBlbnN1cmUgdGhhdCB0aGlzIHZhcmlhYmxlIGlzIGhhbmRsZWQgY29ycmVjdGx5LCBldmVuIGlmIEknbSBjb25maWRlbnQgaW4gdGhlIGBremFsbG9jYC4gVGhlIG1vc3Qgb2J2aW91cyBwbGFjZSB0byBncmVwIHdvdWxkIGJlIGFyb3VuZCB0aGUgdXNlIG9mIGBrdm1fYXJjaF9hbGxvY192bSgpYCBhbmQgYGt2bV9jcmVhdGVfdm1gLlxuMi4gICoqQ29uY3VycmVuY3kgYW5kIFJhY2UgQ29uZGl0aW9uczoqKiBUaGlzIGRlYWxzIHdpdGggVERYLCB3aGljaCBpcyBzZWN1cml0eSByZWxhdGVkLiBJIG5lZWQgdG8gYmUgY29uY2VybmVkIGFib3V0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gYWNjZXNzaW5nIHRoZSBuZXcgYG1pcnJvcl9yb290X2xldmVsYCBvciByZWxhdGVkIGRhdGEuIEFyZSB0aGVyZSBhbnkgbG9jayBwcm90ZWN0aW9uIGlzc3VlcywgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgTU1VIGFuZCBWQ1BVIGludGVyYWN0aW9ucz9cbjMuICAqKkNvcnJlY3RuZXNzIG9mIHRoZSBMb2dpYzoqKiBUaGUgb2xkIGNvZGUgcG90ZW50aWFsbHkgaGFkIGEgYnVnLCB3aGljaCB0aGlzIG5ldyBjb2RlIHRyaWVzIHRvIGZpeC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIG5ldyBjb2RlIGZ1bmN0aW9ucyBleGFjdGx5IGFzIGludGVuZGVkLiBBIGZhaWxpbmcgYXNzZXJ0aW9uIHdvdWxkIG1ha2UgdGhlIEtNU0FOIGZ1enppbmcgdW5uZWNlc3NhcnkuXG5cbkdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBtZW1vcnkgYWNjZXNzIGVycm9ycyAoZXZlbiB0aG91Z2ggSSBhbSBjdXJyZW50bHkgb3B0aW1pc3RpYyBhYm91dCB0aGUgemVyby1pbml0aWFsaXphdGlvbiksIHRoZSBpbnRyb2R1Y3Rpb24gb2YgbmV3IGNvbnRyb2wgZmxvdyByZWxhdGVkIHRvIFREUCBsZXZlbHMsIGFuZCB0aGUgY3JpdGljYWwgbmF0dXJlIG9mIEtWTS9URFggd2l0aCByZXNwZWN0IHRvIHNlY3VyaXR5LCBJIHRoaW5rIGEgS01TQU4gZnV6emluZyBydW4gaXMgd2FycmFudGVkIGhlcmUuIEl0J3MgdGhlIG9ubHkgd2F5IHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4gSSdsbCBzdGFydCB3aXRoIGZvY3Vzc2VkIGZ1enppbmcgYXJvdW5kIE1NVSBzZXR1cCBhbmQgZ3Vlc3QgYWRkcmVzcyBzcGFjZSBoYW5kbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ1MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM1OjUzLjQwMTk3NzgzM1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc5NzY5MTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt6YWxsb2MuKnN0cnVjdCBrdm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2NvYWxlc2NlZF9tbWlvLmM9MTIyPWludCBrdm1fdm1faW9jdGxfcmVnaXN0ZXJfY29hbGVzY2VkX21taW8oc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxudmlydC9rdm0vY29hbGVzY2VkX21taW8uYy0xMzAtXFxudmlydC9rdm0vY29hbGVzY2VkX21taW8uYzoxMzE6XFx0ZGV2ID0ga3phbGxvY19vYmooc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb19kZXYsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxudmlydC9rdm0vY29hbGVzY2VkX21taW8uYy0xMzItXFx0aWYgKCFkZXYpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTEwOTk9c3RhdGljIHN0cnVjdCBrdm0gKmt2bV9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlLCBjb25zdCBjaGFyICpmZG5hbWUpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExNzEtXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGt2bS1cXHUwMDNlYnVzZXNbaV0sXFxudmlydC9rdm0va3ZtX21haW4uYzoxMTcyOlxcdFxcdFxcdGt6YWxsb2Nfb2JqKHN0cnVjdCBrdm1faW9fYnVzLCBHRlBfS0VSTkVMX0FDQ09VTlQpKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExNzMtXFx0XFx0aWYgKCFrdm0tXFx1MDAzZWJ1c2VzW2ldKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz00NDI1PXN0YXRpYyBsb25nIGt2bV92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy00NTA0LVxcdFxcdHIgPSAtRU5PTUVNO1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDUwNTpcXHRcXHRrdm1fcmVncyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBrdm1fcmVncyk7XFxudmlydC9rdm0va3ZtX21haW4uYy00NTA2LVxcdFxcdGlmICgha3ZtX3JlZ3MpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ1MzEtXFx0Y2FzZSBLVk1fR0VUX1NSRUdTOiB7XFxudmlydC9rdm0va3ZtX21haW4uYzo0NTMyOlxcdFxcdGt2bV9zcmVncyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBrdm1fc3JlZ3MpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDUzMy1cXHRcXHRyID0gLUVOT01FTTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDYyMy1cXHRjYXNlIEtWTV9HRVRfRlBVOiB7XFxudmlydC9rdm0va3ZtX21haW4uYzo0NjI0OlxcdFxcdGZwdSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBrdm1fZnB1KTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ2MjUtXFx0XFx0ciA9IC1FTk9NRU07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM1OjUzLjc4MTc1NDY5NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTYzNjUxMjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBLVk0gQXJjaGl0ZWN0dXJlIG9uIHg4NioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIEtWTSB2aXJ0dWFsaXphdGlvbiBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBvbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gTXkgZm9jdXMgaXMgb24gaG93IGBrdm1fYXJjaF9hbGxvY192bWAgb3IgdGhlIGdlbmVyYWwgYGt2bWAgYWxsb2NhdGlvbiBmdW5jdGlvbnMgd29yay4gSSdtIGhlYWRpbmcgZGlyZWN0bHkgaW50byBgYXJjaC94ODYva3ZtL3g4Ni5jYCDigJMgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIGZvciB4ODYtc3BlY2lmaWMgS1ZNIGZ1bmN0aW9uYWxpdHkgc2hvdWxkIHJlc2lkZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgYWJvdXQgaG93IGd1ZXN0IHBoeXNpY2FsIG1lbW9yeSBpcyBtYXBwZWQsIGhvdyB2aXJ0dWFsIG1hY2hpbmUgc3RydWN0dXJlcyBhcmUgc2V0IHVwLCBhbmQgaG93IHJlc291cmNlcyBhcmUgbWFuYWdlZCBmb3IgZWFjaCB2aXJ0dWFsIG1hY2hpbmUuIEknbSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2Nlc3Mgc28gSSBjYW4gb3B0aW1pemUgdGhpcyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzgxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzU6NTUuNzQ1NDEzMzE4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzI0MzQyNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2FyY2hfYWxsb2Nfdm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzU6NTUuNzk4NjczNzc1WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTcxMTA1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gS1ZNIFZNIENyZWF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgaG9uZSBpbiBvbiBga3ZtX2NyZWF0ZV92bWAuIFRoaXMgaXMgdGhlIGNvcmUgZnVuY3Rpb24gd2hlcmUgYSBLVk0gdmlydHVhbCBtYWNoaW5lIGlzIGJyb3VnaHQgaW50byBleGlzdGVuY2UuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGluaXRpYWxpemF0aW9uIGZsb3csIGVzcGVjaWFsbHkgbm93IHdpdGggdGhlc2UgbmV3IGFyY2hpdGVjdHVyYWwgY29uc2lkZXJhdGlvbnMuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgc3RlcHMgaW4gaGVyZTogcmVzb3VyY2UgYWxsb2NhdGlvbiwgbWVtb3J5IG1hbmFnZW1lbnQgc2V0dXAsIHZDUFUgY3JlYXRpb24sIGFuZCB0aGUgbGlrZS4gSXQgd2lsbCBiZSBpbnRlcmVzdGluZyB0byBzZWUgaG93IHRoZXkndmUgaGFuZGxlZCB0aGUgbGF0ZXN0IHNlY3VyaXR5IG1pdGlnYXRpb25zIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucy4gSSdtIGtlZW4gdG8gc3BvdCBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHdoZXJlIHRoZXkgbWlnaHQgaGF2ZSBpbXBsZW1lbnRlZCBjbGV2ZXIgdHJpY2tzIHRvIGVuaGFuY2UgVk0gcGVyZm9ybWFuY2Ugb3IgaXNvbGF0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXTigJlzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDUzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzU6NTguMDE1NzkyMzQ5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNjI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMDA6XFx0e1xcbjExMDE6XFx0XFx0c3RydWN0IGt2bSAqa3ZtID0ga3ZtX2FyY2hfYWxsb2Nfdm0oKTtcXG4xMTAyOlxcdFxcdHN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzO1xcbjExMDM6XFx0XFx0aW50IHIsIGksIGo7XFxuMTEwNDpcXHRcXG4xMTA1OlxcdFxcdGlmICgha3ZtKVxcbjExMDY6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuMTEwNzpcXHRcXG4xMTA4OlxcdFxcdEtWTV9NTVVfTE9DS19JTklUKGt2bSk7XFxuMTEwOTpcXHRcXHRtbWdyYWIoY3VycmVudC1cXHUwMDNlbW0pO1xcbjExMTA6XFx0XFx0a3ZtLVxcdTAwM2VtbSA9IGN1cnJlbnQtXFx1MDAzZW1tO1xcbjExMTE6XFx0XFx0a3ZtX2V2ZW50ZmRfaW5pdChrdm0pO1xcbjExMTI6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4xMTEzOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlaXJxX2xvY2spO1xcbjExMTQ6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4xMTE1OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcXG4xMTE2OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZrdm0tXFx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XFxuMTExNzpcXHRcXHRyY3V3YWl0X2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlbW5fbWVtc2xvdHNfdXBkYXRlX3JjdXdhaXQpO1xcbjExMTg6XFx0XFx0eGFfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2V2Y3B1X2FycmF5KTtcXG4xMTE5OlxcdCNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG4xMTIwOlxcdFxcdHhhX2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlbWVtX2F0dHJfYXJyYXkpO1xcbjExMjE6XFx0I2VuZGlmXFxuMTEyMjpcXHRcXG4xMTIzOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZrdm0tXFx1MDAzZWdwY19saXN0KTtcXG4xMTI0OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZrdm0tXFx1MDAzZWdwY19sb2NrKTtcXG4xMTI1OlxcdFxcbjExMjY6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmt2bS1cXHUwMDNlZGV2aWNlcyk7XFxuMTEyNzpcXHRcXHRrdm0tXFx1MDAzZW1heF92Y3B1cyA9IEtWTV9NQVhfVkNQVVM7XFxuMTEyODpcXHRcXG4xMTI5OlxcdFxcdEJVSUxEX0JVR19PTihLVk1fTUVNX1NMT1RTX05VTSBcXHUwMDNlIFNIUlRfTUFYKTtcXG4xMTMwOlxcdFxcbjExMzE6XFx0XFx0LypcXG4xMTMyOlxcdFxcdCAqIEZvcmNlIHN1YnNlcXVlbnQgZGVidWdmcyBmaWxlIGNyZWF0aW9ucyB0byBmYWlsIGlmIHRoZSBWTSBkaXJlY3RvcnlcXG4xMTMzOlxcdFxcdCAqIGlzIG5vdCBjcmVhdGVkIChieSBrdm1fY3JlYXRlX3ZtX2RlYnVnZnMoKSkuXFxuMTEzNDpcXHRcXHQgKi9cXG4xMTM1OlxcdFxcdGt2bS1cXHUwMDNlZGVidWdmc19kZW50cnkgPSBFUlJfUFRSKC1FTk9FTlQpO1xcbjExMzY6XFx0XFxuMTEzNzpcXHRcXHRzbnByaW50Zihrdm0tXFx1MDAzZXN0YXRzX2lkLCBzaXplb2Yoa3ZtLVxcdTAwM2VzdGF0c19pZCksIFxcXCJrdm0tJWRcXFwiLFxcbjExMzg6XFx0XFx0XFx0IHRhc2tfcGlkX25yKGN1cnJlbnQpKTtcXG4xMTM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNTo1OC4wMTYyMDA4OTlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA0Mzg0MDY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZnVuY3Rpb24gYGt2bV9hcmNoX2FsbG9jX3ZtYDpcblxuKipEaXNzZWN0aW5nIGBrdm1fYXJjaF9hbGxvY192bWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBga3ZtX2FyY2hfYWxsb2Nfdm1gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzOiB3aGF0ICpleGFjdGx5KiBpcyBpdCBkb2luZz8gQmFzZWQgb24gdGhlIG5hbWUsIGl0IHNlZW1zIHRvIGJlIGludm9sdmVkIHdpdGggYWxsb2NhdGluZyBhIHZpcnR1YWwgbWFjaGluZSB3aXRoaW4gdGhlIEtWTSAoS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSkgY29udGV4dCwgYW5kIHRoZSBcImFyY2hcIiBwYXJ0IHN1Z2dlc3RzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBoYW5kbGluZy4gVGhhdCBtYWtlcyBzZW5zZS4gQmVmb3JlIEkgY2FuIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBuaXR0eS1ncml0dHkgb2YgaXRzIGltcGxlbWVudGF0aW9uLCBJIG5lZWQgYSBwcmVjaXNlIGRlZmluaXRpb24uIFdoYXQgYXJlIHRoZSBpbnB1dHM/IFdoYXQgZG9lcyBpdCByZXR1cm4sIGFuZCB3aGF0IGlzIHRoZSBicm9hZGVyIGNvbnRleHQgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBvcGVyYXRlcz8gSXMgaXQgY2FsbGVkIGVhcmx5IGluIHRoZSBWTSBjcmVhdGlvbiBwcm9jZXNzLCBvciBsYXRlcj8gSG93IGRvZXMgdGhpcyBmdW5jdGlvbiByZWxhdGUgdG8gdGhlIG92ZXJhbGwgVk0gaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IFVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgc3RydWN0dXJlcyB0aGF0IGl0IG9wZXJhdGVzIG9uIGlzIGtleS4gV2hlcmUgY2FuIEkgZmluZCB0aGUgcHJlY2lzZSBkZXRhaWxzIG9mIHRoaXMgZnVuY3Rpb24ncyBwdXJwb3NlPyBJIGNhbiBpbWFnaW5lIGl0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGluZ3MgbGlrZSBhbGxvY2F0aW5nIHRoZSBWTSdzIGludGVybmFsIGRhdGEgc3RydWN0dXJlcywgcGVyaGFwcyBpbml0aWFsaXppbmcgc29tZSBhcmNoaXRlY3R1cmFsIHN0YXRlLCBhbmQgcG90ZW50aWFsbHkgYXNzb2NpYXRpbmcgaXQgd2l0aCBhIHNwZWNpZmljIENQVSBvciBzZXQgb2YgQ1BVcywgYnV0IGEgZGVmaW5pdGlvbiBpcyBuZWVkZWQuIFRpbWUgdG8gc2VhcmNoIHRoZSBzb3VyY2UuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk4MywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzY6MDAuMDYwMDQ0MDg3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc1MDU3NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX2FsbG9jX3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0xNDk4PXUzMiBrdm1fZ2V0X3BhX2JpdHMoc3RydWN0IGt2bSAqa3ZtKTtcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xNTAwLSNkZWZpbmUgX19LVk1fSEFWRV9BUkNIX1ZNX0FMTE9DXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjE1MDE6c3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZCk7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTE1MDItXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYz01MTA9bG9uZyBrdm1fYXJjaF9kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy01MTUtXFxuYXJjaC9hcm02NC9rdm0vYXJtLmM6NTE2OnN0cnVjdCBrdm0gKmt2bV9hcmNoX2FsbG9jX3ZtKHZvaWQpXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtNTE3LXtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MTc5NT1leHRlcm4gc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyBrdm1fbmVzdGVkX29wcyBfX3JlYWRfbW9zdGx5O1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xODEzLSNkZWZpbmUgX19LVk1fSEFWRV9BUkNIX1ZNX0FMTE9DXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoxODE0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZClcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTE4MTUte1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTE2OTc9dm9pZCBrdm1fYXJjaF9jcmVhdGVfdm1fZGVidWdmcyhzdHJ1Y3Qga3ZtICprdm0pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE3MDEtICogQWxsIGFyY2hpdGVjdHVyZXMgdGhhdCB3YW50IHRvIHVzZSB2emFsbG9jIGN1cnJlbnRseSBhbHNvXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE3MDI6ICogbmVlZCB0aGVpciBvd24ga3ZtX2FyY2hfYWxsb2Nfdm0gaW1wbGVtZW50YXRpb24uXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE3MDMtICovXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE3MDQ6c3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtICprdm1fYXJjaF9hbGxvY192bSh2b2lkKVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNzA1LXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MTA5OT1zdGF0aWMgc3RydWN0IGt2bSAqa3ZtX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUsIGNvbnN0IGNoYXIgKmZkbmFtZSlcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExMDAte1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTEwMTpcXHRzdHJ1Y3Qga3ZtICprdm0gPSBrdm1fYXJjaF9hbGxvY192bSgpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTEwMi1cXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzY6MDEuOTM1MTA5MzE4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMzU1OTY0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gS1ZNIEhvc3QgSW50ZXJydXB0IEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgcHVsbCB1cCB0aGUgS1ZNIGhvc3QgY29kZS4uLiBzcGVjaWZpY2FsbHksIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhleSdyZSBoYW5kbGluZyBpbnRlcnJ1cHQgaW5qZWN0aW9uLiBJJ20gZm9jdXNpbmcgb24gYGFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhgIOKAkyB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBtYWNyb3MgZm9yIHRoZSB4ODYgS1ZNIGhvc3QgYXJjaGl0ZWN0dXJlIGFyZSBkZWZpbmVkLiBOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgc2VjdGlvbiwgc28gbGV0IG1lIGZpbmQgdGhlIGBrdm1faG9zdC5oYCBmaWxlIGFuZCBqdW1wIGRvd24gdG8gbGluZSAxODE0LiBNeSBpbnN0aW5jdHMgc3VnZ2VzdCBpdCB3aWxsIGJlIHNvbWUgY3JpdGljYWwgcGllY2Ugb2YgdGhlIGludGVycnVwdCBtYW5hZ2VtZW50LiBJdCBtaWdodCBiZSBhIGRlZmluaXRpb24gZm9yIGFuIGludGVycnVwdC1yZWxhdGVkIGRhdGEgc3RydWN0dXJlLCBhbiBpbmxpbmUgZnVuY3Rpb24gZGVhbGluZyB3aXRoIGludGVycnVwdCBpbmplY3Rpb24sIG9yIHBlcmhhcHMgZXZlbiBhIG1hY3JvIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBpbnRlcnJ1cHQgd2luZG93LiBJ4oCZbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgaG93IHRoZSBob3N0IFZNIGludGVyYWN0cyB3aXRoIHRoZSB2aXJ0dWFsaXplZCBpbnRlcnJ1cHRzIGFuZCBob3cgdGhleSdyZSBkZWxpdmVyZWQgdG8gdGhlIGd1ZXN0cy4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk4NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM2OjA0LjA3MDcwOTE0OVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxODEyLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODEyOlxcdFxcbjE4MTM6XFx0I2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfVk1fQUxMT0NcXG4xODE0OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZClcXG4xODE1OlxcdHtcXG4xODE2OlxcdFxcdHJldHVybiBrdnphbGxvYyhrdm1feDg2X29wcy52bV9zaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbjE4MTc6XFx0fVxcbjE4MTg6XFx0XFxuMTgxOTpcXHQjZGVmaW5lIF9fS1ZNX0hBVkVfQVJDSF9WTV9GUkVFXFxuMTgyMDpcXHR2b2lkIGt2bV9hcmNoX2ZyZWVfdm0oc3RydWN0IGt2bSAqa3ZtKTtcXG4xODIxOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNjowNC4wNzA4NzU2NTlaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzI4ODgwMDIzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYG1pcnJvcl9yb290X2xldmVsYCBpbiBLVk0gd2l0aCBURFgqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG1pcnJvcl9yb290X2xldmVsYCBmaWVsZCB3aXRoaW4gdGhlIGBrdm1fYXJjaGAgc3RydWN0LiBJIHNlZSB0aGF0IGBrdnphbGxvY2AgaXMgdGhlIGFsbG9jYXRvciBmb3IgdGhlIGBrdm1gIHN0cnVjdCwgbWVhbmluZyBpdCdzIHplcm8taW5pdGlhbGl6ZWQgd2hlbiBhIEtWTSBpcyBjcmVhdGVkLiBUaGlzIG1lYW5zIGBrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbGAgc3RhcnRzIGF0IDAsIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlci5cblxuSSdtIGZvY3VzaW5nIG9uIHRoZSBpbnRlcmFjdGlvbiB3aXRoIFREWCwgbmF0dXJhbGx5LiBUaGUgY29kZSBzaG93cyB0aGF0IGR1cmluZyBURFggVk0gaW5pdGlhbGl6YXRpb24gdmlhIGB0ZHhfdGRfaW5pdGAsIHRoZSBgdGR4X3NldF9taXJyb3Jfcm9vdF9sZXZlbGAgZnVuY3Rpb24gaXMgd2hhdCBhY3R1YWxseSBzZXRzIGBrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbGAgdG8gZWl0aGVyIDQgb3IgNSwgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpY3MsIEkgYXNzdW1lLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgd2hlcmUgaXQncyAqdXNlZCouIEkgc2VlIGl0J3MgYWNjZXNzZWQgd2l0aGluIGBrdm1fbW11X2dldF90ZHBfbGV2ZWwodmNwdSlgLiBIZXJlLCB0aGVyZSdzIGEgY2hlY2sgdXNpbmcgYGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtXHUwMDNla3ZtKWAuIEFzc3VtaW5nIHRoZSBtaXJyb3IgaXMgZW5hYmxlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGBtaXJyb3Jfcm9vdF9sZXZlbGAuIENydWNpYWxseSwgdGhlcmUncyBhIGBXQVJOX09OX09OQ0VgIGhlcmUsIGVuc3VyaW5nIHRoYXQgYG1pcnJvcl9yb290X2xldmVsYCBpcyBhY3R1YWxseSBpbml0aWFsaXplZCwgd2hpY2ggc2hvdWxkIGJlIGZpbmUgaWYgY2FsbGVkIGFmdGVyIGB0ZHhfdGRfaW5pdGAuXG5cbk5leHQsIEkgc2VlIGl0J3MgdXNlZCBpbiBgdGR4X2xvYWRfbW11X3BnZGAuIFRoZXJlJ3MgYSBgS1ZNX0JVR19PTmAgaGVyZS4gVGhpcyBpcyBhIGNyaXRpY2FsIGNoZWNrISBJdCBhc3NlcnRzIHRoYXQgdGhlIHBhZ2UgZ2xvYmFsIGRpcmVjdG9yeSAoUEdEKSBsZXZlbCBtYXRjaGVzIGB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsYC4gVGhpcyBpcyBsaWtlbHkgYSBrZXkgY29uc2lzdGVuY3kgY2hlY2sgdG8gZW5zdXJlIHRoZSBNTVUgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgdW5kZXIgVERYLlxuXG5GaW5hbGx5LCBpbiBgX19rdm1fbW11X2NyZWF0ZWAsIEkgbm90aWNlIHRoZXJlJ3MgYSBjb25kaXRpb25hbCByZXR1cm4gaWYgVERYIGlzIGVuYWJsZWQgYW5kIHRoZSBtYXggVERQIGxldmVsIGlzIGdyZWF0ZXIgdGhhbiBgUFQzMkVfUk9PVF9MRVZFTGAuIFRoaXMgY291bGQgYmUgaW1wb3J0YW50IHRvIHRoZSBtaXJyb3IgbGV2ZWwgY2FsY3VsYXRpb25zLlxuXG5Pa2F5LCBJJ3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUgZGlyZWN0IHVzZXMuIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCBhIGNvbXByZWhlbnNpdmUgcGljdHVyZS4gTGV0IG1lIHF1aWNrbHkgc2NhbiB0aGUgY29kZWJhc2UgZm9yIGFueSBvdGhlciByZWZlcmVuY2VzIHRvIGBtaXJyb3Jfcm9vdF9sZXZlbGAsIGFzIHdlbGwgYXMgdGhvc2Ugbm93LXJlbW92ZWQgYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAgYW5kIGBrdm1faGFzX21pcnJvcmVkX3RkcGAuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIGluZGlyZWN0IGltcGFjdHMgSSd2ZSBtaXNzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NjYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNjoxMS4zNTk2Nzk3NzhaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTY1ODE0MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlycm9yX3Jvb3RfbGV2ZWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0xMTYxPXN0cnVjdCBrdm1fYXJjaCB7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTE0MDgtXFx0Z2ZuX3QgZ2ZuX2RpcmVjdF9iaXRzO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MTQwOTpcXHRpbnQgbWlycm9yX3Jvb3RfbGV2ZWw7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xNDEwLVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01OTU0PXN0YXRpYyBpbmxpbmUgaW50IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NjYtXFx0aWYgKGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtXFx1MDAzZWt2bSkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5Njc6XFx0ICAgICFXQVJOX09OX09OQ0UoIXZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbCkpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTY4OlxcdFxcdHJldHVybiB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWw7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTY5LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0xNjA3PXZvaWQgdGR4X2xvYWRfbW11X3BnZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGhwYV90IHJvb3RfaHBhLCBpbnQgcGdkX2xldmVsKVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTYwOC17XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNjA5OlxcdGlmIChLVk1fQlVHX09OKHBnZF9sZXZlbCAhPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWwsIHZjcHUtXFx1MDAzZWt2bSkpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNjEwLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9Mjc1Mz1ERUZJTkVfQ0xBU1ModGR4X3ZtX3N0YXRlX2d1YXJkLCB0ZHhfdm1fc3RhdGVfZ3VhcmRfdCxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjc1Ni1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjI3NTc6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBpbnQgbGV2ZWwpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yNzU4LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjc2MC1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjI3NjE6XFx0a3ZtLVxcdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsID0gbGV2ZWw7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yNzYyLVxcdGt2bS1cXHUwMDNlYXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBncGFfdG9fZ2ZuKEJJVF9VTEwobGV2ZWwgPT0gNCA/IDQ3IDogNTEpKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9Mjc2NT1zdGF0aWMgaW50IHRkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI4MjctXFx0aWYgKHRkX3BhcmFtcy1cXHUwMDNlY29uZmlnX2ZsYWdzIFxcdTAwMjYgVERYX0NPTkZJR19GTEFHU19NQVhfR1BBVylcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjI4Mjg6XFx0XFx0dGR4X3NldF9taXJyb3Jfcm9vdF9sZXZlbChrdm0sIDUpO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjgyOS1cXHRlbHNlXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoyODMwOlxcdFxcdHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA0KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI4MzEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM2OjEzLjI3NjI2ODU1NloiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDE4MzM1MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSBNTVUgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgS1ZNIE1NVSBjb25maWd1cmF0aW9uIHRvIHRyb3VibGVzaG9vdCB0aGlzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBjb3VwbGUgb2Yga2V5IGZ1bmN0aW9uczogYF9fa3ZtX21tdV9jcmVhdGVgIGFuZCBga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCgpYC4gSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIHdheSB0aGUgTU1VIGlzIGJlaW5nIHNldCB1cCBpbiB0aGlzIGluc3RhbmNlLCBhbmQgdGhhdCBsaWtlbHkgc3RhcnRzIHdpdGggdGhlIGNyZWF0aW9uIHByb2Nlc3MuIEkgZXhwZWN0IGBfX2t2bV9tbXVfY3JlYXRlYCB0byBiZSB3aGVyZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGluaXRpYWxpemVkIGFuZCB0aGUgaW5pdGlhbCBwYWdlIHRhYmxlcyBhcmUgZXN0YWJsaXNoZWQuIFRoZW4gSSB3YW50IHRvIGtub3cgd2hhdCB0aGUgbWF4aW11bSBURFAgbGV2ZWwgaXMgYmVjYXVzZSB0aGF0IHdpbGwgZWZmZWN0IHdoYXQgaXMgZ29pbmcgb24gYXQgdGhlIGhhcmR3YXJlIGxldmVsLiBGcm9tIHRoZXJlIEkgY2FuIGNoZWNrIG9uIHBvc3NpYmxlIGludGVyYWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NTAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNjoxNS4yOTQ2MDc2NzZaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDE1MjkxOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vY3B1aWQuYz0xNDE4PXN0YXRpYyBpbmxpbmUgaW50IF9fZG9fY3B1aWRfZnVuYyhzdHJ1Y3Qga3ZtX2NwdWlkX2FycmF5ICphcnJheSwgdTMyIGZ1bmN0aW9uKVxcbi0tXFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTgxMS1cXHRcXHRcXHRnX3BoeXNfYXMgPSBwaHlzX2FzO1xcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjE4MTI6XFx0XFx0XFx0aWYgKGt2bV9tbXVfZ2V0X21heF90ZHBfbGV2ZWwoKSBcXHUwMDNjIDUpXFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMTgxMy1cXHRcXHRcXHRcXHRnX3BoeXNfYXMgPSBtaW4oZ19waHlzX2FzLCA0OFUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS5oPTk5PXN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfaGFzX21iZWMoc3RydWN0IGt2bV9tbXUgKm1tdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUuaC0xMDMtXFxuYXJjaC94ODYva3ZtL21tdS5oOjEwNDp1OCBrdm1fbW11X2dldF9tYXhfdGRwX2xldmVsKHZvaWQpO1xcbmFyY2gveDg2L2t2bS9tbXUuaC0xMDUtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTQ9c3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk3Ni1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5Nzc6dTgga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCh2b2lkKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk3OC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY4MTM9c3RhdGljIGludCBfX2t2bV9tbXVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXUgKm1tdSwgc3RydWN0IGt2bV9wYWdld2FsayAqdylcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjgzOS1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY4NDA6XFx0aWYgKHRkcF9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IGt2bV9tbXVfZ2V0X21heF90ZHBfbGV2ZWwoKSBcXHUwMDNlIFBUMzJFX1JPT1RfTEVWRUwpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODQxLVxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzozNjoxNy4wMzYxNDQyMTdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU5MDk2NzkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBLVk0ncyBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGhpbmtpbmcsIGxldCdzIHpvb20gaW4gb24gYSBjb3VwbGUgb2YgY3J1Y2lhbCBLVk0gTU1VIGZ1bmN0aW9uczogYGt2bV9tbXVfZ2V0X21heF90ZHBfbGV2ZWxgIGFuZCBgX19rdm1fbW11X2NyZWF0ZWAuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGtleSB0byBncmFzcGluZyBob3cgS1ZNIG1hbmFnZXMgZ3Vlc3QgcGh5c2ljYWwgbWVtb3J5IGFuZCB0cmFuc2xhdGVzIGl0IHRvIGhvc3QgcGh5c2ljYWwgbWVtb3J5LCBwYXJ0aWN1bGFybHkgdGhlIGhhbmRsaW5nIG9mIFRyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXJzIChUTEJzKSBhbmQgbmVzdGVkIHBhZ2luZy4gYGt2bV9tbXVfZ2V0X21heF90ZHBfbGV2ZWxgIGxpa2VseSByZXZlYWxzIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBUcmFuc2xhdGlvbiBEZXB0aCBQYWdpbmcgbGV2ZWwsIGhpbnRpbmcgYXQgdGhlIGRlcHRoIG9mIHRoZSBwYWdlIHRhYmxlIGhpZXJhcmNoeSBLVk0gY2FuIHN1cHBvcnQgYW5kIGhvdyBuZXN0ZWQgcGFnaW5nIGlzIGhhbmRsZWQsIHBvc3NpYmx5IGEgZnVuY3Rpb24gcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgZ3Vlc3QgcGFnZSB0YWJsZXMgYW5kIGhvdyB0aGV5IGFyZSB0cmFuc2xhdGVkIHRvIGhvc3QgcGFnZSB0YWJsZXMuIEFuZCBgX19rdm1fbW11X2NyZWF0ZWAsIHdlbGwgdGhhdCdzIHRoZSByZWFsIG1lYXQgYW5kIHBvdGF0b2VzIC0gdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBNTVUgc3RydWN0dXJlIGdldHMgaW5pdGlhbGl6ZWQgYW5kIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbXMgZm9yIGhhbmRsaW5nIGd1ZXN0IG1lbW9yeSBhcmUgc2V0IHVwLiBJJ20ga2VlbiB0byBkaXNzZWN0IGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QgdG8gc2VlIGhvdyBLVk0gaGFuZGxlcyBtZW1vcnkgdmlydHVhbGl6YXRpb24gaW4gdGhlIG1vc3QgZnVuZGFtZW50YWwgd2F5LCBpbmNsdWRpbmcgdGhpbmdzIGxpa2UgcGFnZSB0YWJsZSB3YWxrcywgc2hhZG93aW5nLCBhbmQgdGhlIGRpcnR5L2FjY2Vzc2VkIGJpdCB0cmFja2luZy4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHRoZSBkZXRhaWxzIG9mIHRoZSBNTVUgY3JlYXRpb24sIHRvIHNlZSB3aGljaCBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zIGFyZSB1dGlsaXplZCBpbiBLVk0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjkwLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzY6MTkuNjI3MTE0NjM0WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4OTM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU5NzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU5NzA6XFx0XFx0LyogVXNlIDUtbGV2ZWwgVERQIGlmIGFuZCBvbmx5IGlmIGl0J3MgdXNlZnVsL25lY2Vzc2FyeS4gKi9cXG41OTcxOlxcdFxcdGlmIChtYXhfdGRwX2xldmVsID09IDUgXFx1MDAyNlxcdTAwMjYgY3B1aWRfbWF4cGh5YWRkcih2Y3B1KSBcXHUwMDNjPSA0OClcXG41OTcyOlxcdFxcdFxcdHJldHVybiA0O1xcbjU5NzM6XFx0XFxuNTk3NDpcXHRcXHRyZXR1cm4gbWF4X3RkcF9sZXZlbDtcXG41OTc1OlxcdH1cXG41OTc2OlxcdFxcbjU5Nzc6XFx0dTgga3ZtX21tdV9nZXRfbWF4X3RkcF9sZXZlbCh2b2lkKVxcbjU5Nzg6XFx0e1xcbjU5Nzk6XFx0XFx0cmV0dXJuIHRkcF9yb290X2xldmVsID8gdGRwX3Jvb3RfbGV2ZWwgOiBtYXhfdGRwX2xldmVsO1xcbjU5ODA6XFx0fVxcbjU5ODE6XFx0XFxuNTk4MjpcXHRzdGF0aWMgdW5pb24ga3ZtX21tdV9wYWdlX3JvbGVcXG41OTgzOlxcdGt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbjU5ODQ6XFx0XFx0XFx0XFx0XFx0dW5pb24ga3ZtX2NwdV9yb2xlIGNwdV9yb2xlKVxcbjU5ODU6XFx0e1xcbjU5ODY6XFx0XFx0dW5pb24ga3ZtX21tdV9wYWdlX3JvbGUgcm9sZSA9IHswfTtcXG41OTg3OlxcdFxcbjU5ODg6XFx0XFx0cm9sZS5jcjBfd3AgPSB0cnVlO1xcbjU5ODk6XFx0XFx0cm9sZS5jcjRfc21lcCA9IGt2bV94ODZfY2FsbCh0ZHBfaGFzX3NtZXApKHZjcHUtXFx1MDAzZWt2bSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjM2OjE5LjYyNzQwNzA4NFoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTEwMzQxNDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgS01TQU4gSW1wbGljYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGxvb2tpbmcgcHJvbWlzaW5nLCBidXQgd2UgbmVlZCB0byBiZSB0aG9yb3VnaC4gRmlyc3QsIGxldCdzIG1ldGhvZGljYWxseSBjaGVjayBlYWNoIEtNU0FOIHJlcXVpcmVtZW50LiBJcyB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGFueSBrZXJuZWwgc3RydWN0dXJlIGRhdGEgdGhhdCBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIHdpdGhvdXQgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQ/IE5vLCBub3RoaW5nIGlzIG1vZGlmaWVkIG9yIGludHJvZHVjZWQuIFRoZSBuZXh0IGlzIHRvIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGJlaW5nIHJlYWQuIFRoZSBvbmx5IG5ldyBhZGRpdGlvbiBpcyBgbWlycm9yX3Jvb3RfbGV2ZWxgIHdpdGhpbiBgc3RydWN0IGt2bV9hcmNoYC4gR2l2ZW4gdGhhdCBgc3RydWN0IGt2bWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrdnphbGxvY2AgaW4gYGt2bV9hcmNoX2FsbG9jX3ZtYCwgYG1pcnJvcl9yb290X2xldmVsYCBpcyBndWFyYW50ZWVkIHRvIGJlIHplcm9lZCBkdXJpbmcgVk0gY3JlYXRpb24uIFRoYXQncyBhIGdvb2Qgc3RhcnQuXG5cbk5leHQsIGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLiBgbWlycm9yX3Jvb3RfbGV2ZWxgIGlzIGluaXRpYWxpemVkIHRvIHplcm8gdXBvbiBhbGxvY2F0aW9uIGFuZCBpcyBleHBsaWNpdGx5IHNldCBsYXRlciB2aWEgYHRkeF9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoKWAuIE5vIHdvcnJpZXMgdGhlcmUuIEhvdyBhYm91dCBwb3RlbnRpYWwgbW9kaWZpY2F0aW9ucyB0byBib3VuZHMgb3IgbGVuZ3RocyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8sIG5vdCBhdCBhbGwuIFRoaXMgcGF0Y2ggcmVmYWN0b3JzIGhvdyB3ZSBkZXRlcm1pbmUgdGhlIFREUCBsZXZlbCBmb3IgVERYIFZNcyB3aXRoIG1pcnJvcmVkIHBhZ2UgdGFibGVzLiBJbnN0ZWFkIG9mIHF1ZXJ5aW5nIENQVUlEIHRvIGRldGVybWluZSB0aGUgZ3Vlc3QncyBtYXggcGh5c2ljYWwgYWRkcmVzcywgaXQgZXhwbGljaXRseSByZWNvcmRzIHRoZSBgbWlycm9yX3Jvb3RfbGV2ZWxgIGNvbmZpZ3VyZWQgZHVyaW5nIFREWCBWTSBpbml0aWFsaXphdGlvbiBpbiBgdGR4X3RkX2luaXRgIGFuZCB1c2VzIHRoYXQuIFNvIGl0IGxvb2tzIGxpa2UgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBhbmQgd2VsbC1kZWZpbmVkLlxuXG5GaW5hbGx5LCBhcmUgdGhlcmUgYW55IGluZm8tbGVhayBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbnl3aGVyZT8gTm8sIGZyb20gd2hhdCBJIGNhbiBzZWUsIHdlJ3JlIGluIHRoZSBjbGVhci5cblxuU28sIGluIGNvbmNsdXNpb24sIGl0IHNlZW1zIHRoYXQgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBidWlsZHMgc2hvdWxkIGJlIGZ1bGx5IHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3VlcyDigJMgYW55IGFzc2VydGlvbnMsIGBXQVJOX09OYHMsIGxvZ2ljIGVycm9ycy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGhlcmUgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgcnVuLlxuXG5Ob3csIGEgcXVpY2sgZG91YmxlLWNoZWNrOiBgTmVlZHNLTVNBTmAgc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC5cblxuT2theSwgSSdtIGNvbmZpZGVudCBpbiBteSBhbmFseXNpcy4gVGltZSB0byB3cml0ZSB1cCBhIGNvbmNpc2UsIGRldGFpbGVkIHJlYXNvbmluZyBmb3Igc2V0dGluZyB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMjcsIk91dHB1dFRva2VucyI6MjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6MzY6MjQuNTM3NzUyMzU4WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaG93IEtWTSBkZXRlcm1pbmVzIHRoZSBURFAgbGV2ZWwgZm9yIFZNcyB3aXRoIG1pcnJvcmVkIHBhZ2UgdGFibGVzIChzdWNoIGFzIFREWCBWTXMpLCBieSB0cmFja2luZyB0aGUgbWlycm9yIHJvb3QgbGV2ZWwgZXhwbGljaXRseSBpbiBgc3RydWN0IGt2bV9hcmNoYCAoYG1pcnJvcl9yb290X2xldmVsYCkgc2V0IGR1cmluZyBURCBpbml0aWFsaXphdGlvbiBpbnN0ZWFkIG9mIHF1ZXJ5aW5nIHRoZSBndWVzdCBDUFVJRC5cXG5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlOiBgc3RydWN0IGt2bV9hcmNoYCBpcyBwYXJ0IG9mIGBzdHJ1Y3Qga3ZtYCwgd2hpY2ggaXMgYWxsb2NhdGVkIHdpdGggYGt2emFsbG9jKClgIGluIGBrdm1fYXJjaF9hbGxvY192bSgpYCwgZ3VhcmFudGVlaW5nIHRoYXQgYG1pcnJvcl9yb290X2xldmVsYCBpcyB6ZXJvLWluaXRpYWxpemVkLlxcbi0gTm8ga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczogVGhlIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgbmV3IGRhdGEgdG8gdXNlciBzcGFjZSB2aWEgY29weV90b191c2VyIG9yIGlvY3RsIG91dHB1dHMuXFxuLSBObyB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBvciBidWZmZXIgYWNjZXNzOiBMb2dpYyBjaGVja3Mgb3BlcmF0ZSBvbiBmdWxseSBpbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGFuZCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuXFxuXFxuVGhlcmVmb3JlLCB0aGUgY2hhbmdlcyBwcmVzZW50IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBydW4gaXMgbm90IG5lZWRlZDsgc3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyBLVk0gZGV0ZXJtaW5lcyB0aGUgVERQIGxldmVsIGZvciBWTXMgd2l0aCBtaXJyb3JlZCBwYWdlIHRhYmxlcyAoc3VjaCBhcyBURFggVk1zKSwgYnkgdHJhY2tpbmcgdGhlIG1pcnJvciByb290IGxldmVsIGV4cGxpY2l0bHkgaW4gYHN0cnVjdCBrdm1fYXJjaGAgKGBtaXJyb3Jfcm9vdF9sZXZlbGApIHNldCBkdXJpbmcgVEQgaW5pdGlhbGl6YXRpb24gaW5zdGVhZCBvZiBxdWVyeWluZyB0aGUgZ3Vlc3QgQ1BVSUQuXFxuXFxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZTogYHN0cnVjdCBrdm1fYXJjaGAgaXMgcGFydCBvZiBgc3RydWN0IGt2bWAsIHdoaWNoIGlzIGFsbG9jYXRlZCB3aXRoIGBrdnphbGxvYygpYCBpbiBga3ZtX2FyY2hfYWxsb2Nfdm0oKWAsIGd1YXJhbnRlZWluZyB0aGF0IGBtaXJyb3Jfcm9vdF9sZXZlbGAgaXMgemVyby1pbml0aWFsaXplZC5cXG4tIE5vIGtlcm5lbC10by11c2VyIGluZm8gbGVha3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IG5ldyBkYXRhIHRvIHVzZXIgc3BhY2UgdmlhIGNvcHlfdG9fdXNlciBvciBpb2N0bCBvdXRwdXRzLlxcbi0gTm8gdW5pbml0aWFsaXplZCBicmFuY2hpbmcgb3IgYnVmZmVyIGFjY2VzczogTG9naWMgY2hlY2tzIG9wZXJhdGUgb24gZnVsbHkgaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhbmQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLlxcblxcblRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgcHJlc2VudCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gcnVuIGlzIG5vdCBuZWVkZWQ7IHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow4z9jj[1] Phase: Succeeded StartedAt: 2026-09-03 23:36:35 +0000 UTC FinishedAt: 2026-09-03 23:36:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z9jj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 23:36:35 +0000 UTC FinishedAt: 2026-09-03 23:36:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z9jj[2] Phase: Succeeded StartedAt: 2026-09-03 23:36:35 +0000 UTC FinishedAt: 2026-09-04 03:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 23:36:35 +0000 UTC FinishedAt: 2026-09-04 03:21:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 23:36:35 +0000 UTC FinishedAt: 2026-09-03 23:36:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 23:36:35 +0000 UTC FinishedAt: 2026-09-03 23:36:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow4z9jj/series-workflow4z9jj-convert-artifact-250027335/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 23:36:45 +0000 UTC FinishedAt: 2026-09-03 23:54:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 23:36:45 +0000 UTC FinishedAt: 2026-09-03 23:54:08 +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:*e81f76b7-86c8-4690-882a-5e5014b09b7a,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-workflow4z9jj/series-workflow4z9jj-convert-artifact-250027335/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": "b45daf8c-fdb8-4d73-95bb-7c0fd08e413c", "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-workflow4z9jj/series-workflow4z9jj-build-action-3734119901/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 23:36:45 +0000 UTC FinishedAt: 2026-09-03 23:53:58 +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:*e81f76b7-86c8-4690-882a-5e5014b09b7a,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-workflow4z9jj/series-workflow4z9jj-convert-artifact-250027335/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": "b45daf8c-fdb8-4d73-95bb-7c0fd08e413c", "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-workflow4z9jj/series-workflow4z9jj-build-action-3734119901/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 23:54:08 +0000 UTC FinishedAt: 2026-09-03 23:54:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 23:54:08 +0000 UTC FinishedAt: 2026-09-03 23:54:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 23:54:08 +0000 UTC FinishedAt: 2026-09-03 23:54:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 23:54:08 +0000 UTC FinishedAt: 2026-09-03 23:54:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow4z9jj/series-workflow4z9jj-convert-artifact-2985791862/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 23:54:19 +0000 UTC FinishedAt: 2026-09-03 23:56:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 23:54:19 +0000 UTC FinishedAt: 2026-09-03 23:55:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b45daf8c-fdb8-4d73-95bb-7c0fd08e413c,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-workflow4z9jj/series-workflow4z9jj-build-action-3734119901/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-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 23:56:08 +0000 UTC FinishedAt: 2026-09-03 23:56:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 23:56:08 +0000 UTC FinishedAt: 2026-09-03 23:56:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 23:56:08 +0000 UTC FinishedAt: 2026-09-04 00:18:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 23:56:08 +0000 UTC FinishedAt: 2026-09-04 00:18:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e81f76b7-86c8-4690-882a-5e5014b09b7a,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-workflow4z9jj/series-workflow4z9jj-convert-artifact-2985791862/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": "d52b4b8a-f2e8-4a8f-8b86-06ebcb426ff2", "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-workflow4z9jj/series-workflow4z9jj-build-action-176732282/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 23:56:08 +0000 UTC FinishedAt: 2026-09-04 00:17:51 +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:*e81f76b7-86c8-4690-882a-5e5014b09b7a,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-workflow4z9jj/series-workflow4z9jj-convert-artifact-2985791862/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": "d52b4b8a-f2e8-4a8f-8b86-06ebcb426ff2", "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-workflow4z9jj/series-workflow4z9jj-build-action-176732282/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 00:18:01 +0000 UTC FinishedAt: 2026-09-04 00:18:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 00:18:01 +0000 UTC FinishedAt: 2026-09-04 00:18:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 00:18:01 +0000 UTC FinishedAt: 2026-09-04 00:20:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 00:18:01 +0000 UTC FinishedAt: 2026-09-04 00:20:01 +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:*d52b4b8a-f2e8-4a8f-8b86-06ebcb426ff2,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-workflow4z9jj/series-workflow4z9jj-build-action-176732282/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-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 00:20:11 +0000 UTC FinishedAt: 2026-09-04 03:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 00:20:11 +0000 UTC FinishedAt: 2026-09-04 03:21:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"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:*b45daf8c-fdb8-4d73-95bb-7c0fd08e413c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d52b4b8a-f2e8-4a8f-8b86-06ebcb426ff2,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-workflow4z9jj/series-workflow4z9jj-build-action-3734119901/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-workflow4z9jj/series-workflow4z9jj-build-action-176732282/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 00:20:11 +0000 UTC FinishedAt: 2026-09-04 00:20:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 00:20:11 +0000 UTC FinishedAt: 2026-09-04 00:20:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"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-workflow4z9jj/series-workflow4z9jj-convert-artifact-2367525787/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 00:20:11 +0000 UTC FinishedAt: 2026-09-04 00:20:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 00:20:11 +0000 UTC FinishedAt: 2026-09-04 00:20:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 00:20:11 +0000 UTC FinishedAt: 2026-09-04 00:20:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 00:20:21 +0000 UTC FinishedAt: 2026-09-04 03:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z9jj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_create","kvm_init_mmu","kvm_init_shadow_npt_mmu","tdx_load_mmu_pgd","tdx_td_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"0e53dc15-5a06-49a4-b1a9-2ec706ec3576","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 00:20:21 +0000 UTC FinishedAt: 2026-09-04 03:21:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b45daf8c-fdb8-4d73-95bb-7c0fd08e413c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d52b4b8a-f2e8-4a8f-8b86-06ebcb426ff2,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-workflow4z9jj/series-workflow4z9jj-build-action-3734119901/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-workflow4z9jj/series-workflow4z9jj-build-action-176732282/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-workflow4z9jj/series-workflow4z9jj-convert-artifact-2367525787/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,}