Name: series-workflowmkdqx Phase: Succeeded StartedAt: 2026-08-14 22:59:00 +0000 UTC FinishedAt: 2026-08-15 02:47:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmkdqx[0] Phase: Succeeded StartedAt: 2026-08-14 22:59:00 +0000 UTC FinishedAt: 2026-08-14 23:05:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmkdqx[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 22:59:00 +0000 UTC FinishedAt: 2026-08-14 23:05:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "1b731e5ded480bd1e5546aed35584238661ce72e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "INTEL_TDX_HOST", "KVM_INTEL_TDX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "1b731e5ded480bd1e5546aed35584238661ce72e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "INTEL_TDX_HOST", "KVM_INTEL_TDX" ], "series_id": "a3a96f1b-33a8-4347-b0e9-945ab6b0eba2" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "tdx_vm_ioctl", "tdx_load_mmu_pgd", "kvm_init_mmu" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMX1REWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RkeF92bV9pb2N0bCYjMzQ7LAogICAgJiMzNDt0ZHhfbG9hZF9tbXVfcGdkJiMzNDssCiAgICAmIzM0O2t2bV9pbml0X21tdSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBob3cgdGhlIHJvb3QgcGFnZSB0YWJsZSBsZXZlbCBpcyBkZXRlcm1pbmVkIGZvciBURFggVk1zIGluIEtWTSBieSBpbnRyb2R1Y2luZyBhIG5ldyBmaWVsZCBgbWlycm9yX3Jvb3RfbGV2ZWxgIGluIGBzdHJ1Y3Qga3ZtX2FyY2hgLiBUaGlzIGZpZWxkIGlzIHNldCBkdXJpbmcgVERYIGluaXRpYWxpemF0aW9uLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIGFwcHJvYWNoIG9mIHF1ZXJ5aW5nIENQVUlEIGZvciB0aGUgbWF4aW11bSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzLiBTaW5jZSBgc3RydWN0IGt2bWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrdnphbGxvYygpYCAod2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5KSwgdGhlIG5ldyBgbWlycm9yX3Jvb3RfbGV2ZWxgIGZpZWxkIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGFueSBjb21wbGV4IGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBpbmNvcnJlY3QgcGFnZSB0YWJsZSBsZXZlbHMpIHdvdWxkIHJlc3VsdCBpbiBwYWdlIGZhdWx0cywgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgbG9naWMgdG8gZGV0ZXJtaW5lIHRoZSBURFAgKFR3by1EaW1lbnNpb25hbCBQYWdpbmcpIGxldmVsIGZvciB2aXJ0dWFsIG1hY2hpbmVzLiBJdCBpbnRyb2R1Y2VzIGBtaXJyb3Jfcm9vdF9sZXZlbGAgdG8gZml4IHRoZSByb290IGxldmVsIGZvciBWTXMgd2l0aCBtaXJyb3Igcm9vdHMgKGxpa2UgVERYIFZNcykgYW5kIHJlbW92ZXMgYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgS1ZNIE1NVSBwYWdlIHRhYmxlIHNldHVwIGFuZCBURFggaW5pdGlhbGl6YXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNmRiMTljMjQ5ZTA2MDJlYzUyYmMzY2U1MDg0NzUxM2E0NWVmNTI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMjM6MDI6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDI4Mzg0NzYxOWZmODguLmIyYTc0YzY5Y2M0YTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMTQwNiw2ICYjNDM7MTQwNiw3IEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgc3BsaXRfZGVzY19jYWNoZTtcbiBcbiBcdGdmbl90IGdmbl9kaXJlY3RfYml0cztcbiYjNDM7XHRpbnQgbWlycm9yX3Jvb3RfbGV2ZWw7XG4gXG4gXHQvKlxuIFx0ICogU2l6ZSBvZiB0aGUgQ1BVJiMzOTtzIGRpcnR5IGxvZyBidWZmZXIsIGkuZS4gVk1YJiMzOTtzIFBNTCBidWZmZXIuIEEgWmVyb1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5jIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbmluZGV4IGRkYjAyMmNiMjAzYTIuLjM0YzYwOWE2MGVlZmYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbkBAIC00ODMsMjAgJiM0Mzs0ODMsNiBAQCBpbnQgY3B1aWRfcXVlcnlfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4gMzY7XG4gfVxuIFxuLWludCBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi1cdHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICpiZXN0O1xuLVxuLVx0YmVzdCA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KHZjcHUsIDB4ODAwMDAwMDApO1xuLVx0aWYgKCFiZXN0IHx8IGJlc3QtXHUwMDNlZWF4IFx1MDAzYyAweDgwMDAwMDA4KVxuLVx0XHRnb3RvIG5vdF9mb3VuZDtcbi1cdGJlc3QgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDA4KTtcbi1cdGlmIChiZXN0KVxuLVx0XHRyZXR1cm4gKGJlc3QtXHUwMDNlZWF4IFx1MDAzZVx1MDAzZSAxNikgXHUwMDI2IDB4ZmY7XG4tbm90X2ZvdW5kOlxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qXG4gICogVGhpcyBcJiMzNDtyYXdcJiMzNDsgdmVyc2lvbiByZXR1cm5zIHRoZSByZXNlcnZlZCBHUEEgYml0cyB3aXRob3V0IGFueSBhZGp1c3RtZW50cyBmb3JcbiAgKiBlbmNyeXB0aW9uIHRlY2hub2xvZ2llcyB0aGF0IHVzdXJwIGJpdHMuICBUaGUgcmF3IG1hc2sgc2hvdWxkIGJlIHVzZWQgaWYgYW5kXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmggYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaFxuaW5kZXggOGQ4NjNmNDU1ODVkZS4uNDZiZmU4Njk5ZTY3ZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaFxuQEAgLTY4LDcgJiM0Mzs2OCw2IEBAIHZvaWQgX19pbml0IGt2bV9pbml0X3hzdGF0ZV9zaXplcyh2b2lkKTtcbiB1MzIgeHN0YXRlX3JlcXVpcmVkX3NpemUodTY0IHhzdGF0ZV9idiwgYm9vbCBjb21wYWN0ZWQpO1xuIFxuIGludCBjcHVpZF9xdWVyeV9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4taW50IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHU2NCBrdm1fdmNwdV9yZXNlcnZlZF9ncGFfYml0c19yYXcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiBzdGF0aWMgaW5saW5lIGludCBjcHVpZF9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11LmggYi9hcmNoL3g4Ni9rdm0vbW11LmhcbmluZGV4IDJhZTdmOWVkNGNmODYuLmNjMzdlMjEwNzg3YzggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUuaFxuQEAgLTM4OSw2ICYjNDM7Mzg5LDE1IEBAIHN0YXRpYyBpbmxpbmUgZ3BhX3Qga3ZtX3RyYW5zbGF0ZV9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdFx0XHRcdCAgICAgZXhjZXB0aW9uLCBwdGVfYWNjZXNzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBrdm1fbW11X3NldF9taXJyb3Jfcm9vdF9sZXZlbChzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBpbnQgbGV2ZWwpXG4mIzQzO3tcbiYjNDM7XHRCVUlMRF9CVUdfT04obGV2ZWwgIT0gNCBcdTAwMjZcdTAwMjYgbGV2ZWwgIT0gNSk7XG4mIzQzO1xuJiM0MztcdGt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsID0gbGV2ZWw7XG4mIzQzO1x0a3ZtLVx1MDAzZWFyY2guZ2ZuX2RpcmVjdF9iaXRzID0gZ3BhX3RvX2dmbihCSVRfVUxMKGxldmVsID09IDQgPyA0NyA6IDUxKSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbWlycm9yZWRfdGRwKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuaW5kZXggYzUxOWU4ZThkNjQ2Zi4uYTUxYTg1MmMxYmVjMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC01OTI4LDE5ICYjNDM7NTkyOCwxOSBAQCB2b2lkIF9fa3ZtX21tdV9yZWZyZXNoX3Bhc3N0aHJvdWdoX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0aW50IG1heHBhO1xuLVxuLVx0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTSlcbi1cdFx0bWF4cGEgPSBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIodmNwdSk7XG4tXHRlbHNlXG4tXHRcdG1heHBhID0gY3B1aWRfbWF4cGh5YWRkcih2Y3B1KTtcbi1cbiBcdC8qIHRkcF9yb290X2xldmVsIGlzIGFyY2hpdGVjdHVyZSBmb3JjZWQgbGV2ZWwsIHVzZSBpdCBpZiBub256ZXJvICovXG4gXHRpZiAodGRwX3Jvb3RfbGV2ZWwpXG4gXHRcdHJldHVybiB0ZHBfcm9vdF9sZXZlbDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSBWTSBoYXMgbWlycm9yIHJvb3RzLCB0aGVuIHRoZSByb290IGxldmVsIGlzIGZpeGVkIGFzIHRoZSBnZm5cbiYjNDM7XHQgKiB1c2VkIHRvIHNlbGVjdCBiZXR3ZWVuIHRoZSBub3JtYWwgYW5kIG1pcnJvciByb290IG11c3QgYmUgY292ZXJlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbClcbiYjNDM7XHRcdHJldHVybiB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsO1xuJiM0MztcbiBcdC8qIFVzZSA1LWxldmVsIFREUCBpZiBhbmQgb25seSBpZiBpdCYjMzk7cyB1c2VmdWwvbmVjZXNzYXJ5LiAqL1xuLVx0aWYgKG1heF90ZHBfbGV2ZWwgPT0gNSBcdTAwMjZcdTAwMjYgbWF4cGEgXHUwMDNjPSA0OClcbiYjNDM7XHRpZiAobWF4X3RkcF9sZXZlbCA9PSA1IFx1MDAyNlx1MDAyNiBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpIFx1MDAzYz0gNDgpXG4gXHRcdHJldHVybiA0O1xuIFxuIFx0cmV0dXJuIG1heF90ZHBfbGV2ZWw7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbmluZGV4IGIyNzJjMjA1ODZhNzQuLjZkOGU5YmVmZDllNjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5AQCAtNTYsOSAmIzQzOzU2LDYgQEBcbiBib29sIGVuYWJsZV90ZHggX19yb19hZnRlcl9pbml0O1xuIG1vZHVsZV9wYXJhbV9uYW1lZCh0ZHgsIGVuYWJsZV90ZHgsIGJvb2wsIDA0NDQpO1xuIFxuLSNkZWZpbmUgVERYX1NIQVJFRF9CSVRfUFdMXzUgZ3BhX3RvX2dmbihCSVRfVUxMKDUxKSlcbi0jZGVmaW5lIFREWF9TSEFSRURfQklUX1BXTF80IGdwYV90b19nZm4oQklUX1VMTCg0NykpXG4tXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnRkeF9zeXNpbmZvO1xuIFxuIHZvaWQgdGRoX3ZwX3JkX2ZhaWxlZChzdHJ1Y3QgdmNwdV90ZHggKnRkeCwgY2hhciAqdWNsYXNzLCB1MzIgZmllbGQsIHU2NCBlcnIpXG5AQCAtMTYwOSwxMCAmIzQzOzE2MDYsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV90ZHZtY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gdm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpXG4ge1xuLVx0dTY0IHNoYXJlZF9iaXQgPSAocGdkX2xldmVsID09IDUpID8gVERYX1NIQVJFRF9CSVRfUFdMXzUgOlxuLVx0XHRcdCAgVERYX1NIQVJFRF9CSVRfUFdMXzQ7XG4tXG4tXHRpZiAoS1ZNX0JVR19PTihzaGFyZWRfYml0ICE9IGt2bV9nZm5fZGlyZWN0X2JpdHModmNwdS1cdTAwM2Vrdm0pLCB2Y3B1LVx1MDAzZWt2bSkpXG4mIzQzO1x0aWYgKEtWTV9CVUdfT04ocGdkX2xldmVsICE9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWwsIHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0dGRfdm1jc193cml0ZTY0KHRvX3RkeCh2Y3B1KSwgU0hBUkVEX0VQVF9QT0lOVEVSLCByb290X2hwYSk7XG5AQCAtMjgyMyw5ICYjNDM7MjgxNyw5IEBAIHN0YXRpYyBpbnQgdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZClcbiBcdGt2bV90ZHgtXHUwMDNleGZhbSA9IHRkX3BhcmFtcy1cdTAwM2V4ZmFtO1xuIFxuIFx0aWYgKHRkX3BhcmFtcy1cdTAwM2Vjb25maWdfZmxhZ3MgXHUwMDI2IFREWF9DT05GSUdfRkxBR1NfTUFYX0dQQVcpXG4tXHRcdGt2bS1cdTAwM2VhcmNoLmdmbl9kaXJlY3RfYml0cyA9IFREWF9TSEFSRURfQklUX1BXTF81O1xuJiM0MztcdFx0a3ZtX21tdV9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA1KTtcbiBcdGVsc2Vcbi1cdFx0a3ZtLVx1MDAzZWFyY2guZ2ZuX2RpcmVjdF9iaXRzID0gVERYX1NIQVJFRF9CSVRfUFdMXzQ7XG4mIzQzO1x0XHRrdm1fbW11X3NldF9taXJyb3Jfcm9vdF9sZXZlbChrdm0sIDQpO1xuIFxuIFx0a3ZtX3RkeC1cdTAwM2VzdGF0ZSA9IFREX1NUQVRFX0lOSVRJQUxJWkVEO1xuIG91dDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtJTlRFTF9URFhfSE9TVCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUxfVERYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGR4X3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O3RkeF9sb2FkX21tdV9wZ2QmIzM0OywKICAgICYjMzQ7a3ZtX2luaXRfbW11JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgbG9naWMgdG8gZGV0ZXJtaW5lIHRoZSBURFAgKFR3by1EaW1lbnNpb25hbCBQYWdpbmcpIGxldmVsIGZvciB2aXJ0dWFsIG1hY2hpbmVzLiBJdCBpbnRyb2R1Y2VzIGBtaXJyb3Jfcm9vdF9sZXZlbGAgdG8gZml4IHRoZSByb290IGxldmVsIGZvciBWTXMgd2l0aCBtaXJyb3Igcm9vdHMgKGxpa2UgVERYIFZNcykgYW5kIHJlbW92ZXMgYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgS1ZNIE1NVSBwYWdlIHRhYmxlIHNldHVwIGFuZCBURFggaW5pdGlhbGl6YXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNmRiMTljMjQ5ZTA2MDJlYzUyYmMzY2U1MDg0NzUxM2E0NWVmNTI5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMjM6MDI6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAyODM4NDc2MTlmZjg4Li5iMmE3NGM2OWNjNGE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTE0MDYsNiAmIzQzOzE0MDYsNyBAQCBzdHJ1Y3Qga3ZtX2FyY2ggewogCXN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBzcGxpdF9kZXNjX2NhY2hlOwogCiAJZ2ZuX3QgZ2ZuX2RpcmVjdF9iaXRzOwomIzQzOwlpbnQgbWlycm9yX3Jvb3RfbGV2ZWw7CiAKIAkvKgogCSAqIFNpemUgb2YgdGhlIENQVSYjMzk7cyBkaXJ0eSBsb2cgYnVmZmVyLCBpLmUuIFZNWCYjMzk7cyBQTUwgYnVmZmVyLiBBIFplcm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5jIGIvYXJjaC94ODYva3ZtL2NwdWlkLmMKaW5kZXggZGRiMDIyY2IyMDNhMi4uMzRjNjA5YTYwZWVmZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2NwdWlkLmMKQEAgLTQ4MywyMCAmIzQzOzQ4Myw2IEBAIGludCBjcHVpZF9xdWVyeV9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlyZXR1cm4gMzY7CiB9CiAKLWludCBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCXN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICpiZXN0OwotCi0JYmVzdCA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KHZjcHUsIDB4ODAwMDAwMDApOwotCWlmICghYmVzdCB8fCBiZXN0LSZndDtlYXggJmx0OyAweDgwMDAwMDA4KQotCQlnb3RvIG5vdF9mb3VuZDsKLQliZXN0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAwOCk7Ci0JaWYgKGJlc3QpCi0JCXJldHVybiAoYmVzdC0mZ3Q7ZWF4ICZndDsmZ3Q7IDE2KSAmYW1wOyAweGZmOwotbm90X2ZvdW5kOgotCXJldHVybiAwOwotfQotCiAvKgogICogVGhpcyAmIzM0O3JhdyYjMzQ7IHZlcnNpb24gcmV0dXJucyB0aGUgcmVzZXJ2ZWQgR1BBIGJpdHMgd2l0aG91dCBhbnkgYWRqdXN0bWVudHMgZm9yCiAgKiBlbmNyeXB0aW9uIHRlY2hub2xvZ2llcyB0aGF0IHVzdXJwIGJpdHMuICBUaGUgcmF3IG1hc2sgc2hvdWxkIGJlIHVzZWQgaWYgYW5kCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vY3B1aWQuaCBiL2FyY2gveDg2L2t2bS9jcHVpZC5oCmluZGV4IDhkODYzZjQ1NTg1ZGUuLjQ2YmZlODY5OWU2N2YgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9jcHVpZC5oCkBAIC02OCw3ICYjNDM7NjgsNiBAQCB2b2lkIF9faW5pdCBrdm1faW5pdF94c3RhdGVfc2l6ZXModm9pZCk7CiB1MzIgeHN0YXRlX3JlcXVpcmVkX3NpemUodTY0IHhzdGF0ZV9idiwgYm9vbCBjb21wYWN0ZWQpOwogCiBpbnQgY3B1aWRfcXVlcnlfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotaW50IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdTY0IGt2bV92Y3B1X3Jlc2VydmVkX2dwYV9iaXRzX3JhdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiBzdGF0aWMgaW5saW5lIGludCBjcHVpZF9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUuaCBiL2FyY2gveDg2L2t2bS9tbXUuaAppbmRleCAyYWU3ZjllZDRjZjg2Li5jYzM3ZTIxMDc4N2M4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS5oCkBAIC0zODksNiAmIzQzOzM4OSwxNSBAQCBzdGF0aWMgaW5saW5lIGdwYV90IGt2bV90cmFuc2xhdGVfZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkJCSAgICAgZXhjZXB0aW9uLCBwdGVfYWNjZXNzKTsKIH0KIAomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBrdm1fbW11X3NldF9taXJyb3Jfcm9vdF9sZXZlbChzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7CQkJCQkJCSAgaW50IGxldmVsKQomIzQzO3sKJiM0MzsJQlVJTERfQlVHX09OKGxldmVsICE9IDQgJmFtcDsmYW1wOyBsZXZlbCAhPSA1KTsKJiM0MzsKJiM0MzsJa3ZtLSZndDthcmNoLm1pcnJvcl9yb290X2xldmVsID0gbGV2ZWw7CiYjNDM7CWt2bS0mZ3Q7YXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBncGFfdG9fZ2ZuKEJJVF9VTEwobGV2ZWwgPT0gNCA/IDQ3IDogNTEpKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2hhc19taXJyb3JlZF90ZHAoY29uc3Qgc3RydWN0IGt2bSAqa3ZtKQogewogCXJldHVybiBrdm0tJmd0O2FyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCmluZGV4IGM1MTllOGU4ZDY0NmYuLmE1MWE4NTJjMWJlYzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwpAQCAtNTkyOCwxOSAmIzQzOzU5MjgsMTkgQEAgdm9pZCBfX2t2bV9tbXVfcmVmcmVzaF9wYXNzdGhyb3VnaF9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAogc3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlpbnQgbWF4cGE7Ci0KLQlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk0pCi0JCW1heHBhID0gY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHZjcHUpOwotCWVsc2UKLQkJbWF4cGEgPSBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpOwotCiAJLyogdGRwX3Jvb3RfbGV2ZWwgaXMgYXJjaGl0ZWN0dXJlIGZvcmNlZCBsZXZlbCwgdXNlIGl0IGlmIG5vbnplcm8gKi8KIAlpZiAodGRwX3Jvb3RfbGV2ZWwpCiAJCXJldHVybiB0ZHBfcm9vdF9sZXZlbDsKIAomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGUgVk0gaGFzIG1pcnJvciByb290cywgdGhlbiB0aGUgcm9vdCBsZXZlbCBpcyBmaXhlZCBhcyB0aGUgZ2ZuCiYjNDM7CSAqIHVzZWQgdG8gc2VsZWN0IGJldHdlZW4gdGhlIG5vcm1hbCBhbmQgbWlycm9yIHJvb3QgbXVzdCBiZSBjb3ZlcmVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5taXJyb3Jfcm9vdF9sZXZlbCkKJiM0MzsJCXJldHVybiB2Y3B1LSZndDtrdm0tJmd0O2FyY2gubWlycm9yX3Jvb3RfbGV2ZWw7CiYjNDM7CiAJLyogVXNlIDUtbGV2ZWwgVERQIGlmIGFuZCBvbmx5IGlmIGl0JiMzOTtzIHVzZWZ1bC9uZWNlc3NhcnkuICovCi0JaWYgKG1heF90ZHBfbGV2ZWwgPT0gNSAmYW1wOyZhbXA7IG1heHBhICZsdDs9IDQ4KQomIzQzOwlpZiAobWF4X3RkcF9sZXZlbCA9PSA1ICZhbXA7JmFtcDsgY3B1aWRfbWF4cGh5YWRkcih2Y3B1KSAmbHQ7PSA0OCkKIAkJcmV0dXJuIDQ7CiAKIAlyZXR1cm4gbWF4X3RkcF9sZXZlbDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCmluZGV4IGIyNzJjMjA1ODZhNzQuLjZkOGU5YmVmZDllNjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC90ZHguYwpAQCAtNTYsOSAmIzQzOzU2LDYgQEAKIGJvb2wgZW5hYmxlX3RkeCBfX3JvX2FmdGVyX2luaXQ7CiBtb2R1bGVfcGFyYW1fbmFtZWQodGR4LCBlbmFibGVfdGR4LCBib29sLCAwNDQ0KTsKIAotI2RlZmluZSBURFhfU0hBUkVEX0JJVF9QV0xfNSBncGFfdG9fZ2ZuKEJJVF9VTEwoNTEpKQotI2RlZmluZSBURFhfU0hBUkVEX0JJVF9QV0xfNCBncGFfdG9fZ2ZuKEJJVF9VTEwoNDcpKQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqdGR4X3N5c2luZm87CiAKIHZvaWQgdGRoX3ZwX3JkX2ZhaWxlZChzdHJ1Y3QgdmNwdV90ZHggKnRkeCwgY2hhciAqdWNsYXNzLCB1MzIgZmllbGQsIHU2NCBlcnIpCkBAIC0xNjA5LDEwICYjNDM7MTYwNiw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Rkdm1jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogdm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpCiB7Ci0JdTY0IHNoYXJlZF9iaXQgPSAocGdkX2xldmVsID09IDUpID8gVERYX1NIQVJFRF9CSVRfUFdMXzUgOgotCQkJICBURFhfU0hBUkVEX0JJVF9QV0xfNDsKLQotCWlmIChLVk1fQlVHX09OKHNoYXJlZF9iaXQgIT0ga3ZtX2dmbl9kaXJlY3RfYml0cyh2Y3B1LSZndDtrdm0pLCB2Y3B1LSZndDtrdm0pKQomIzQzOwlpZiAoS1ZNX0JVR19PTihwZ2RfbGV2ZWwgIT0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm1pcnJvcl9yb290X2xldmVsLCB2Y3B1LSZndDtrdm0pKQogCQlyZXR1cm47CiAKIAl0ZF92bWNzX3dyaXRlNjQodG9fdGR4KHZjcHUpLCBTSEFSRURfRVBUX1BPSU5URVIsIHJvb3RfaHBhKTsKQEAgLTI4MjMsOSAmIzQzOzI4MTcsOSBAQCBzdGF0aWMgaW50IHRkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpCiAJa3ZtX3RkeC0mZ3Q7eGZhbSA9IHRkX3BhcmFtcy0mZ3Q7eGZhbTsKIAogCWlmICh0ZF9wYXJhbXMtJmd0O2NvbmZpZ19mbGFncyAmYW1wOyBURFhfQ09ORklHX0ZMQUdTX01BWF9HUEFXKQotCQlrdm0tJmd0O2FyY2guZ2ZuX2RpcmVjdF9iaXRzID0gVERYX1NIQVJFRF9CSVRfUFdMXzU7CiYjNDM7CQlrdm1fbW11X3NldF9taXJyb3Jfcm9vdF9sZXZlbChrdm0sIDUpOwogCWVsc2UKLQkJa3ZtLSZndDthcmNoLmdmbl9kaXJlY3RfYml0cyA9IFREWF9TSEFSRURfQklUX1BXTF80OwomIzQzOwkJa3ZtX21tdV9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA0KTsKIAogCWt2bV90ZHgtJmd0O3N0YXRlID0gVERfU1RBVEVfSU5JVElBTElaRUQ7CiBvdXQ6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNTkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGlzIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgZmV3IGtleSBLVk0gZmlsZXMsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIHg4NiBhcmNoaXRlY3R1cmUgYW5kLCBub3RhYmx5LCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKS4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBga3ZtX2hvc3QuaGAsIGBjcHVpZC5jL2hgLCBgbW11LmgvY2AsIGFuZCBgdGR4LmNgLiBNeSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmc7IGFueSBjaGFuZ2UgdGhhdCB0b3VjaGVzIHRoZSBNTVUgYW5kIFREWCBpbiBLVk0gaXMgd29ydGggYSBjbG9zZXIgbG9vay4KClRoZSBnaXN0IG9mIGl0IHNlZW1zIHRvIGJlIHJlbW92aW5nIGBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHJgIGFuZCBpbnRyb2R1Y2luZyBga3ZtX21tdV9zZXRfbWlycm9yX3Jvb3RfbGV2ZWxgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBob3cgS1ZNIGhhbmRsZXMgdGhlIGd1ZXN0JiMzOTtzIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UsIHBhcnRpY3VsYXJseSB3aXRoIFREWC4gVGhleSYjMzk7cmUgY2hhbmdpbmcgaG93IHRoZSAmIzM0O1REUCBsZXZlbCYjMzQ7IGlzIGRldGVybWluZWQgdmlhIGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgLCBub3cgcmVseWluZyBvbiBgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm1pcnJvcl9yb290X2xldmVsYCBpbnN0ZWFkIG9mIHRoZSBDUFVJRCBxdWVyeS4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlLgoKTm93LCBURFggaXMsIG9mIGNvdXJzZSwgaGFyZHdhcmUtZGVwZW5kZW50LiBCdXQsIEtWTSBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgYC9kZXYva3ZtYCBpb2N0bHMsIGFuZCBhbnkgY29kZSBwYXRoIHJlYWNoYWJsZSB0aHJvdWdoIHRob3NlIGlvY3RscyBpcyBmYWlyIGdhbWUgZm9yIGZ1enppbmcuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyBURFggcmVxdWlyZSBhY3R1YWwgcGh5c2ljYWwgaGFyZHdhcmUsIG9yIGlzIFFFTVUgc2ltdWxhdGluZyBpdCBzdWZmaWNpZW50bHk/IEludGVsJiMzOTtzIFREWCBpcyBhIGJpdCBvZiBhIG1vdmluZyB0YXJnZXQsIHNvIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIFFFTVUgc3RhdHVzLgoKTGV0IG1lIHRoaW5r4oCmIHRoZSBrZXkgaGVyZSBpcyBgbWlycm9yX3Jvb3RfbGV2ZWxgLiBUaGlzIGlzIHRoZSB2YXJpYWJsZSB0aGV5JiMzOTtyZSBzZXR0aW5nIGluIGB0ZHhfdGRfaW5pdGAsIHdoaWNoIGlzIGNhbGxlZCB0aHJvdWdoIHRoZSBgS1ZNX01FTU9SWV9FTkNSWVBUX09QYCBpb2N0bC4gU28sIHRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IOKAkyB0aGUgaW9jdGwsIGFuZCB0aGUgY29kZSBwYXRoIHRocm91Z2ggYHRkeF90ZF9pbml0YCB0aGF0IHVsdGltYXRlbHkgc2V0cyBgbWlycm9yX3Jvb3RfbGV2ZWxgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldyBga3ZtX21tdV9nZXRfdGRwX2xldmVsYCBsZXZlcmFnZXMgdGhpcyBgbWlycm9yX3Jvb3RfbGV2ZWxgLiBNeSBwbGFuIGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGF0IHZhbHVlIGlzIHNldCBhbmQgdGhlbiB1dGlsaXplZC4gVGhpcyBpcyBhbGwgTU1VLXJlbGF0ZWQsIGFuZCBwb3RlbnRpYWxseSBzZWN1cml0eS1jcml0aWNhbCwgc28gaXQmIzM5O3Mgd29ydGggdGhlIGRlZXAgZGl2ZS4gTGV0JiMzOTtzIGRpZyBpbnRvIGB0ZHhfdGRfaW5pdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGR4X3RkX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC90ZHguYz0yMzg3PXN0YXRpYyBpbnQgc2V0dXBfdGRwYXJhbXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yNDMwLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoyNDMxOnN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjQzMi1cdFx0XHQgdTY0ICpzZWFtY2FsbF9lcnIpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yNzUzPURFRklORV9DTEFTUyh0ZHhfdm1fc3RhdGVfZ3VhcmQsIHRkeF92bV9zdGF0ZV9ndWFyZF90LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjc1Ni1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6Mjc1NzpzdGF0aWMgaW50IHRkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI3NTgte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjgwOS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MjgxMDpcdHJldCA9IF9fdGR4X3RkX2luaXQoa3ZtLCB0ZF9wYXJhbXMsIFx1MDAyNmNtZC1cdTAwM2Vod19lcnJvcik7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI4MTEtXHRpZiAocmV0KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MjkwMz1pbnQgdGR4X3ZtX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yOTIwLVx0Y2FzZSBLVk1fVERYX0lOSVRfVk06XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjI5MjE6XHRcdHIgPSB0ZHhfdGRfaW5pdChrdm0sIFx1MDAyNnRkeF9jbWQpO1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yOTIyLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjgxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtWTSBNTVUgQ2hhbmdlIGZvciBQb3RlbnRpYWwgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAuIEkgc2VlIHRoYXQgdGhlIGNoYW5nZXMsIHBhcnRpY3VsYXJseSB0aGUgcmVtb3ZhbCBvZiBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYCBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBjaGVja2luZyBgbWlycm9yX3Jvb3RfbGV2ZWxgLCBpbXBhY3QgZXZlbiBub24tVERYIFZNcyBpZiBgbWlycm9yX3Jvb3RfbGV2ZWxgIGlzIHNldCDigJMgd2hpY2gsIGFzIGZhciBhcyBJIGNhbiB0ZWxsIGZyb20gdGhlIGNvZGUsICpvbmx5KiBoYXBwZW5zIGluIGB0ZHhfdGRfaW5pdGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHBheSBhdHRlbnRpb24gdG8uIEFueSB0aW1lIHdlJiMzOTtyZSB0b3VjaGluZyBjb3JlIEtWTSBNTVUgbG9naWMgbGlrZSB0aGlzLCBpdCYjMzk7cyB3b3J0aCBhIGNsb3NlciBsb29rIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKVGhlIGNvZGUmIzM5O3MgbG9naWMgaXMgc2hpZnRpbmcgaGVyZS4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHVzaW5nIGEgVERYLXNwZWNpZmljIGZ1bmN0aW9uIGBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHJgLCBidXQgbm93IGl0IHNlZW1zIGxpa2UgdGhlIHBhdGNoJiMzOTtzIHJlcGxhY2luZyBpdCB3aXRoIGEgY2FsbCB0byBgY3B1aWRfbWF4cGh5YWRkcmAgdW5sZXNzIGBtaXJyb3Jfcm9vdF9sZXZlbGAgaXMgc2V0LCBpbiB3aGljaCBjYXNlIGl0IHVzZXMgdGhhdCB2YWx1ZSBhcyBhIGZpeGVkIGxldmVsLiBBbmQgaWYgaXQgaXNuJiMzOTt0IHNldCwgdGhlbiB0aGUgY29kZSBjaG9vc2VzIHRoZSBtYXggb2YgNCBvciA1IGxldmVscy4KClRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IElzIHRoaXMgYXJlYSB3b3J0aCBmdXp6aW5nPyBHaXZlbiB0aGUgY2hhbmdlcyB0byB0aGUgTU1VJiMzOTtzIGJlaGF2aW9yLCBJJiMzOTtkIHNheSBhIHJlc291bmRpbmcgeWVzLiBBbnkgY2hhbmdlIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBhbHdheXMgd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueS4gTGV0IG1lIG1ha2UgYSBtZW50YWwgbm90ZSB0byBjb25maXJtIHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGJyZWFrIFREWC4KCk5vdywgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgdGhlIG5lY2Vzc2FyeSBidWlsZCBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7bGwgbmVlZCBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAgdG8gZ2V0IHN0YXJ0ZWQsIG9idmlvdXNseS4gQnV0IGdpdmVuIHRoZSBURFggY29ubmVjdGlvbiwgSSBzaG91bGQgYWxzbyBjaGVjayBpZiBgSU5URUxfVERYX0hPU1RgIGlzIHJlcXVpcmVkIGZvciBmdWxsIGNvdmVyYWdlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgYXJjaC94ODYva3ZtL0tjb25maWdgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9JTlRFTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODc3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBLVk1fSU5URUxfVERYYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIGBLVk1fSU5URUxfVERYYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY3kgY2hhaW4uIEkga25vdyB0aGlzIGlzIGEgY29tcGxleCBhcmVhLCBwb3RlbnRpYWxseSBpbnZvbHZpbmcgQ1BVIGZlYXR1cmVzLCBzcGVjaWZpYyBrZXJuZWwgbW9kdWxlcywgYW5kIHBvdGVudGlhbGx5IGV2ZW4gZmlybXdhcmUgaW50ZXJhY3Rpb25zLgoKTXkgaW5pdGlhbCBsaW5lIG9mIGlucXVpcnkgd2lsbCBiZSB0byBtYXAgb3V0IGFsbCB0aGUgaW1tZWRpYXRlIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB3aGljaCBvdGhlciBLVk0gY29tcG9uZW50cywgSW50ZWwtc3BlY2lmaWMgbW9kdWxlcywgb3IgZXZlbiBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXRpZXMgYXJlIHJlcXVpcmVkIGZvciBgS1ZNX0lOVEVMX1REWGAgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIG5vdCBqdXN0IGRpcmVjdCBkZXBlbmRlbmNpZXMsIGJ1dCBhbHNvIHBvdGVudGlhbCBpbmRpcmVjdCByZWxhdGlvbnNoaXBzIGFuZCBhbnkgY29uZmxpY3RpbmcgbW9kdWxlIGNvbWJpbmF0aW9ucy4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNoYW5nZXMgaW4gdXBzdHJlYW0ga2VybmVscyBvciBkaXN0cmlidXRpb25zIGFuZCBpZiB0aGVyZSBhcmUgYW55IGRvY3VtZW50ZWQgY2F2ZWF0cyBvciByZXN0cmljdGlvbnMuIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbnkgc2VjdXJpdHkgaW1wbGljYXRpb25zIG9mIGFueSBvZiB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgaG93IHRob3NlIG1pZ2h0IGltcGFjdCB0aGUgb3ZlcmFsbCBURFggc29sdXRpb24uIEkmIzM5O2xsIGFsc28gYmUgd2F0Y2hpbmcgZm9yIGFueSByZWNlbnQgcGF0Y2hlcywgYnVnIGZpeGVzLCBvciBlbmhhbmNlbWVudHMgdGhhdCBtaWdodCB0b3VjaCBvbiByZWxhdGVkIGNvZGUgcGF0aHMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlIG9mIHRoZSBURFggbGFuZHNjYXBlIGFuZCBhbnl0aGluZyB0aGF0IG1pZ2h0IGJlIGJyb2tlbiwgb3IgdGhhdCBtaWdodCByZXF1aXJlIHVwZGF0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fSU5URUxfVERYJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyOTUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEtWTSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGEgc3BlY2lmaWMgYXNwZWN0IG9mIHRoZSBLVk0gY29uZmlndXJhdGlvbiBvbiB4ODYsIHByb2JhYmx5IHJlbGF0ZWQgdG8gYSByZWNlbnQgY2hhbmdlIG9yIGEgcGVjdWxpYXIgYmVoYXZpb3IgSSYjMzk7bSB0cm91Ymxlc2hvb3RpbmcuIExldCYjMzk7cyBzdGFydCB3aXRoIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMTM0LiBUaGF0IGZpbGUgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB2YXJpb3VzIEtWTSBmZWF0dXJlcyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciBjb25maWd1cmVkIGZvciB4ODYuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBkZXBlbmRlbmN5IHRoZXJlIHRoYXQmIzM5O3MgcmVsZXZhbnQgdG8gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQuIEhvcGVmdWxseSwgaXTigJlzIG5vdCB0b28gZGVlcGx5IG5lc3RlZCB3aXRoaW4gaW5jbHVkZXMhIFRpbWUgdG8gZ2V0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdFx0ICBndWVzdHMgdmlhIGEgZGV2aWNlIG5vZGUsIGUuZy4gL2Rldi9zZ3hfdmVwYy5cbiAxMzE6XHRcbiAxMzI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxMzM6XHRcbiAxMzQ6XHRjb25maWcgS1ZNX0lOVEVMX1REWFxuIDEzNTpcdFx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4gMTM2Olx0XHRkZWZhdWx0IHlcbiAxMzc6XHRcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcbiAxMzg6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIDEzOTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE0MDpcdFx0aGVscFxuIDE0MTpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcbiAxNDI6XHRcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxuIDE0MzpcdFxuIDE0NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDE0NTpcdFxuIDE0NjpcdGNvbmZpZyBLVk1fQU1EXG4gMTQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbiAxNDg6XHRcdGRlcGVuZHMgb24gS1ZNIFx1MDAyNlx1MDAyNiAoQ1BVX1NVUF9BTUQgfHwgQ1BVX1NVUF9IWUdPTilcbiAxNDk6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgxMwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gVERYIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNldHRpbmcgdXAgdGhpcyBURFggZW52aXJvbm1lbnQuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgY29yZSBjb21wb25lbnRzIGFyZSBpbiBwbGFjZS4gVGhlIG9idmlvdXMgb25lcyBhcmUgYEtWTWAgZm9yIHRoZSB2aXJ0dWFsaXphdGlvbiBsYXllciwgYEtWTV9JTlRFTGAgZm9yIEludGVsLXNwZWNpZmljIHN1cHBvcnQsIGFuZCB0aGUgVERYLXNwZWNpZmljIG1vZHVsZXM6IGBJTlRFTF9URFhfSE9TVGAgYW5kIGBLVk1fSU5URUxfVERYYC4gQnV0IGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgSU5URUxfVERYX0hPU1RgLiBUaGF0IG1vZHVsZSBpcyBrZXksIHNvIGxldCYjMzk7cyBzdGFydCB0aGVyZSBhbmQgc2VlIHdoYXQgaXQgcmVsaWVzIG9uLiBXZSBkb24mIzM5O3Qgd2FudCB0byBnZXQgYWhlYWQgb2Ygb3Vyc2VsdmVzIGFuZCBtaXNzIGEgY3JpdGljYWwgY29tcG9uZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5URUxfVERYX0hPU1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz0xODQ0PWNvbmZpZyBYODZfVVNFUl9TSEFET1dfU1RBQ0tcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjMtXG5hcmNoL3g4Ni9LY29uZmlnOjE4NjQ6Y29uZmlnIElOVEVMX1REWF9IT1NUXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTQ0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgeDg2IEFyY2hpdGVjdHVyZSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhpcyB4ODYgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSB6ZXJvaW5nIGluIG9uIGBhcmNoL3g4Ni9LY29uZmlnYCwgYXJvdW5kIGxpbmUgMTg2NCwgcmlnaHQ/IFRoYXQmIzM5O3MgdHlwaWNhbGx5IHdoZXJlIHRoZXkgc3RhcnQgZGVmaW5pbmcgb3B0aW9ucyBpbiB0ZXJtcyBvZiBDUFUgZmVhdHVyZXMgb3IgY29tcGlsZXIgZmxhZ3MuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGludGVycmVsYXRlIGFuZCB3aGF0IHRoZSByYXRpb25hbGUgaXMuIEl0IGNvdWxkIGJlIGEgc3BlY2lmaWMgZmVhdHVyZSBJJiMzOTttIGludGVyZXN0ZWQgaW4gb3IgYSBkZWJ1Z2dpbmcgb3B0aW9uIHRoYXQmIzM5O3MgcmVsZXZhbnQgdG8gYSBjdXJyZW50IGlzc3VlLiBMZXQmIzM5O3Mgc2VlIGlmIHRoYXQgc2VjdGlvbiBoYXMgYSBwYXJ0aWN1bGFybHkgaW50ZXJlc3Rpbmcgc3ltYm9sLCBvciBhIGRlcGVuZGVuY3kgY2hhaW4gdGhhdCB0cmlnZ2VycyBhIGNlcnRhaW4gYnVpbGQgYmVoYXZpb3IuIEkgd2FudCB0byBxdWlja2x5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY29uZmlndXJhdGlvbnMgb24gdGhlIGdlbmVyYXRlZCBpbWFnZSBvciBydW50aW1lIHBlcmZvcm1hbmNlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIGtlcm5lbCBtYWludGFpbmVycyB0aG91Z2h0IGFib3V0IHRoYXQgc3BlY2lmaWMgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODYwOlx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL2FyY2gveDg2L3Noc3RrLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbjE4NjE6XHRcbjE4NjI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjE4NjM6XHRcbjE4NjQ6XHRjb25maWcgSU5URUxfVERYX0hPU1RcbjE4NjU6XHRcdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XCYjMzQ7XG4xODY2Olx0XHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUxcbjE4Njc6XHRcdGRlcGVuZHMgb24gWDg2XzY0XG4xODY4Olx0XHRkZXBlbmRzIG9uIEtWTV9JTlRFTFxuMTg2OTpcdFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXG4xODcwOlx0XHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXG4xODcxOlx0XHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xuMTg3MjpcdFx0ZGVwZW5kcyBvbiBYODZfTUNFXG4xODczOlx0XHRoZWxwXG4xODc0Olx0XHQgIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHByb3RlY3RzIGd1ZXN0IFZNcyBmcm9tIG1hbGljaW91c1xuMTg3NTpcdFx0ICBob3N0IGFuZCBjZXJ0YWluIHBoeXNpY2FsIGF0dGFja3MuICBUaGlzIG9wdGlvbiBlbmFibGVzIG5lY2Vzc2FyeSBURFhcbjE4NzY6XHRcdCAgc3VwcG9ydCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcnVuIGNvbmZpZGVudGlhbCBWTXMuXG4xODc3Olx0XG4xODc4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4xODc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MDYKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS2VybmVsIENvbmZpZ3VyYXRpb24gTXVzaW5ncyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiBhbmQgdHJ5aW5nIHRvIG1ha2Ugc29tZSBzZW5zZSBvZiB0aGUgZGVwZW5kZW5jaWVzLiBJdCBzZWVtcyBgSU5URUxfVERYX0hPU1RgIGlzIHJlbGlhbnQgb24gYSBmZXcgdGhpbmdzOiBgQ1BVX1NVUF9JTlRFTGAsIGBYODZfNjRgLCBgS1ZNX0lOVEVMYCwgYFg4Nl9YMkFQSUNgLCBgQ09OVElHX0FMTE9DYCwgYW5kIGBYODZfTUNFYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBhbGwgdGhlIG5lY2Vzc2FyeSBwaWVjZXMgZm9yIHJ1bm5pbmcgSW50ZWwgVERYIGluIGEgaG9zdCBlbnZpcm9ubWVudC4KCkdpdmVuIHRoYXQsIEkgdGhpbmsgd2UgKmRlZmluaXRlbHkqIG5lZWQgdG8gaW5jbHVkZSBgS1ZNYCBhcyBhIGJhc2UsIHRoZW4gYEtWTV9JTlRFTGAsIGFuZCBvZiBjb3Vyc2UgYElOVEVMX1REWF9IT1NUYCBpdHNlbGYsIGFuZCBpdCBmb2xsb3dzIGxvZ2ljYWxseSB0byBhbHNvIGJyaW5nIGluIGBLVk1fSU5URUxfVERYYC4gU2VlbXMgbGlrZSBhIHNhZmUgYW5kIGxvZ2ljYWwgYXBwcm9hY2ggdG8gZW5zdXJlIHRoZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBhdCB0aGUgbG93ZXN0IGxldmVsLgoKTm93LCBJJiMzOTttIHRyeWluZyB0byB6ZXJvIGluIG9uIHdoYXQgKmFjdHVhbGx5KiBuZWVkcyBteSBhdHRlbnRpb24uIExldCYjMzk7cyBzZWUuLi4gd2hhdCBhcmUgdGhlIGtleSBzeW1ib2xzLCB0aGUgY29yZSBvZiB0aGUgaXNzdWU/IEFoLCByaWdodCwgYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAuIEkgc2VlbSB0byByZWNhbGwgdGhhdCBvbmUuIEkgdGhpbmsgaXQmIzM5O3Mgc3RhdGljIGlubGluZSBpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AsIGJ1dCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEdvdHRhIGJlIHRob3JvdWdoIHdpdGggdGhlc2UgdGhpbmdzISBObyByb29tIGZvciBhc3N1bXB0aW9ucy4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgdG8gY29uZmlybSBpdCYjMzk7cyBhY3R1YWxseSBzdGF0aWMgaW5saW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbW11X2dldF90ZHBfbGV2ZWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz01OTE0PXZvaWQgX19rdm1fbW11X3JlZnJlc2hfcGFzc3Rocm91Z2hfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTI4LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTI5OnN0YXRpYyBpbmxpbmUgaW50IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5MzAte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTk1NT1rdm1fY2FsY190ZHBfbW11X3Jvb3RfcGFnZV9yb2xlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NjUtXHRyb2xlLmFkX2Rpc2FibGVkID0gIWt2bV9hZF9lbmFibGVkO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTY2Olx0cm9sZS5sZXZlbCA9IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbCh2Y3B1KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk2Ny1cdHJvbGUuZGlyZWN0ID0gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTYwNjA9dm9pZCBrdm1faW5pdF9zaGFkb3dfbnB0X21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjA3OC1cdHJvb3Rfcm9sZSA9IGNwdV9yb2xlLmJhc2U7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYwNzk6XHRyb290X3JvbGUubGV2ZWwgPSBrdm1fbW11X2dldF90ZHBfbGV2ZWwodmNwdSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYwODAtXHRpZiAocm9vdF9yb2xlLmxldmVsID09IFBUNjRfUk9PVF81TEVWRUwgXHUwMDI2XHUwMDI2XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02Nzg1PXN0YXRpYyBpbnQgX19rdm1fbW11X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11ICptbXUsIHN0cnVjdCBrdm1fcGFnZXdhbGsgKncpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODExLVx0ICovXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY4MTI6XHRpZiAodGRwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbCh2Y3B1KSBcdTAwM2UgUFQzMkVfUk9PVF9MRVZFTClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjgxMy1cdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NzMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElubGluZSBGdW5jdGlvbioqCgpPa2F5LCBzbyB0aGlzIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGBzdGF0aWMgaW5saW5lYCwgbWVhbmluZyB0aGUgY29tcGlsZXIgaXMgZ29pbmcgdG8gc2hvdmUgaXRzIGNvZGUgZGlyZWN0bHkgaW50byB3aGVyZXZlciBpdCYjMzk7cyBjYWxsZWQuIE5vIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQsIGp1c3QgaW5saW5lZCBnb29kbmVzcy4gTm93LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgKnVzZWQqLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgYnkgYGt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGVgLCBga3ZtX2luaXRfc2hhZG93X25wdF9tbXVgLCBhbmQgYF9fa3ZtX21tdV9jcmVhdGVgLiBIbW1tLCBpbnRlcmVzdGluZy4gSG9sZCBvbiBhIHNlY29uZOKApiBga3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZWAgcmluZ3MgYSBiZWxsLiBJc24mIzM5O3QgdGhhdCBvbmUgb2YgdGhvc2UgdW5pb24gcm9sZSBmdW5jdGlvbnM/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgaXQmIzM5O3MgYWxzbyBzdGF0aWMsIGJlY2F1c2UgdGhhdCBjYW4gaW1wYWN0IHRoZSBpbmxpbmluZyBzaWduaWZpY2FudGx5LiBHb3R0YSBlbnN1cmUgdGhhdCBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIGhvdyB0aGlzIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBLVk0gY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTQ9c3RhdGljIHVuaW9uIGt2bV9tbXVfcGFnZV9yb2xlXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5NTU6a3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NTYtXHRcdFx0XHR1bmlvbiBrdm1fY3B1X3JvbGUgY3B1X3JvbGUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01OTc4PXN0YXRpYyB2b2lkIGluaXRfa3ZtX3RkcF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk4MS1cdHN0cnVjdCBrdm1fbW11ICpjb250ZXh0ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnJvb3RfbW11O1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTgyOlx0dW5pb24ga3ZtX21tdV9wYWdlX3JvbGUgcm9vdF9yb2xlID0ga3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZSh2Y3B1LCBjcHVfcm9sZSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5ODMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDk5CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDYWxsZXJzIG9mIGBpbml0X2t2bV90ZHBfbW11YCoqCgpPa2F5LCBzbyBgaW5pdF9rdm1fdGRwX21tdWAgaXMgYWxzbyBtYXJrZWQgYXMgYHN0YXRpY2AuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBTdGF0aWMgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGluIGEgS1ZNIGNvbnRleHQsIG9mdGVuIGhpbnQgYXQgZnVuY3Rpb25hbGl0eSB0aWdodGx5IGNvdXBsZWQgd2l0aGluIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGltcGxlbWVudGF0aW9uIGRldGFpbC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdGF0aWMgc3VnZ2VzdHMgaXRzIHNjb3BlIGlzIGRlbGliZXJhdGVseSBsaW1pdGVkLCB3aGljaCBjb3VsZCBtZWFuIGl0JiMzOTtzIGluaXRpYWxpemluZyBzb21ldGhpbmcgdmVyeSBzcGVjaWZpYyBmb3IgVERQIE1NVSBvcGVyYXRpb25zIHdpdGhpbiBLVk0uCgpNeSBuZXh0IG1vdmUgaXMgdG8gdHJhY2UgdGhlIGNhbGxlcnMuIFVuZGVyc3RhbmRpbmcgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIHdpbGwgZ2l2ZSBtZSB2aXRhbCBpbnNpZ2h0cyBpbnRvIGl0cyByb2xlLiBJcyBpdCBvbmx5IGNhbGxlZCBkdXJpbmcgVk0gY3JlYXRpb24sIG9yIGlzIGl0IHRyaWdnZXJlZCBvbiBzcGVjaWZpYyBldmVudHMgd2l0aGluIHRoZSBWTSYjMzk7cyBsaWZlY3ljbGU/IERvZXMgaXQgZ2V0IGNhbGxlZCBmcm9tIHRoZSBjb250ZXh0IG9mIHZDUFUgaW5pdGlhbGl6YXRpb24sIG9yIGlzIGl0IHRpZWQgdG8gdGhlIHBoeXNpY2FsIHBhZ2Ugc2V0dXA/IFRoZSBhbnN3ZXJzIHdpbGwgZGljdGF0ZSBpdHMgaW1wb3J0YW5jZSBhbmQgbGlrZWx5IHBvaW50IHRvIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wYWN0cyBvciBwb3NzaWJsZSBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIHZ1bG5lcmFiaWxpdGllcy4gVGltZSB0byBkaWcgaW50byB0aGUgY2FsbCBncmFwaCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5pdF9rdm1fdGRwX21tdSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTU9a3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTc3LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTc4OnN0YXRpYyB2b2lkIGluaXRfa3ZtX3RkcF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTc5LVx0XHRcdCAgICAgdW5pb24ga3ZtX2NwdV9yb2xlIGNwdV9yb2xlKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjE0OD12b2lkIGt2bV9pbml0X21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTU2LVx0XHRpZiAodGRwX2VuYWJsZWQpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYxNTc6XHRcdFx0aW5pdF9rdm1fdGRwX21tdSh2Y3B1LCBjcHVfcm9sZSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxNTgtXHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwNzQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvZGUgb2JzZXJ2YXRpb25zLCBwaHJhc2VkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqS1ZNIEluaXRpYWxpemF0aW9uIGFuZCBURFggQ29uY2VybnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBga3ZtX2luaXRfbW11YCBhbmQgYGt2bV9pbml0X3NoYWRvd19ucHRfbW11YCBhcmUgYm90aCBkZWNsYXJlZCBhcyBub24tc3RhdGljLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gU3RhbmRhcmQgcHJhY3RpY2Ugd2l0aGluIEtWTSwgbGlrZWx5LiBUaGVuLCB0aGVyZSYjMzk7cyBgdGR4X3RkX2luaXRgLiBBaCwgdGhhdCBvbmUgKmlzKiBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIHVzYWdlIGNvbmNlcm4uIE5vdywgd2hlcmUgaXMgaXQgY2FsbGVkIGZyb20/IExldCBtZSBsb29rLi4uIGl0JiMzOTtzIGNhbGxlZCBieSBgdGR4X3ZtX2lvY3RsYC4gSG1tLCBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIGB0ZHhfdm1faW9jdGxgIG5vdy4gSXMgdGhhdCBhbHNvIHN0YXRpYz8gTm8sIG5vIGl0JiMzOTtzIG5vdC4gQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byBgdGR4X3ZtX2lvY3RsYCB0byB1bmRlcnN0YW5kIHRoYXQgaW50ZXJmYWNlIGEgbGl0dGxlIGJldHRlciBhbmQgaG93IGB0ZHhfdGRfaW5pdGAgaXMgYmVpbmcgdXRpbGl6ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY2FsbCBncmFwaCBiZXR0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkeF92bV9pb2N0bCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L21haW4uYz04Mzk9c3RhdGljIGludCB2dF9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODQzLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODQ0Olx0cmV0dXJuIHRkeF92bV9pb2N0bChrdm0sIGFyZ3ApO1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODQ1LX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTI4ODg9c3RhdGljIGludCB0ZHhfZ2V0X2NtZCh2b2lkIF9fdXNlciAqYXJncCwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yOTAyLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoyOTAzOmludCB0ZHhfdm1faW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjkwNC17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg9MTMzPXZvaWQgdGR4X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oOjEzNDppbnQgdGR4X3ZtX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMTM1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgwNwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGlzc2VjdGluZyB0aGUgS1ZNIEVuY3J5cHRpb24gRW50cnkgUG9pbnQqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBLVk0gZW5jcnlwdGlvbiBzdHVmZiwgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGVudHJ5IHBvaW50LiBSaWdodCwgaXQgbG9va3MgbGlrZSBgdnRfbWVtX2VuY19pb2N0bGAgb3IgcG90ZW50aWFsbHkgYHRkeF92bV9pb2N0bGAgYXJlIHRoZSBjYW5kaWRhdGVzLiBIb2xkIG9uIGEgc2Vjb25kLCB0aGF0IGB2dF9tZW1fZW5jX2lvY3RsYCBmdW5jdGlvbuKApiBpc24mIzM5O3QgdGhhdCBzdGF0aWNhbGx5IGRlZmluZWQgaW4gYGFyY2gveDg2L2t2bS92bXgvbWFpbi5jYD8gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgbGV0IG1lIGRvdWJsZS1jaGVjayBob3cgaXQmIzM5O3MgYWN0dWFsbHkgYXNzaWduZWQgYW5kIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBmcm9tLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Z0X21lbV9lbmNfaW9jdGwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODMxPXN0YXRpYyB2b2lkIHZ0X3NldHVwX21jZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODM4LVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODM5OnN0YXRpYyBpbnQgdnRfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODQwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxOTIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYHZ0X21lbV9lbmNfaW9jdGxgIEFzc2lnbm1lbnQqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhlIGB2dF9tZW1fZW5jX2lvY3RsYCB2YXJpYWJsZSBpcyBiZWluZyBhc3NpZ25lZC4gVGhpcyBsaWtlbHkgaW5kaWNhdGVzIHNvbWUgY3JpdGljYWwgaW50ZXJhY3Rpb24gd2l0aCBtZW1vcnkgZW5jb2RpbmcsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBhc3NpZ25tZW50IHRvIHVuZGVyc3RhbmQ6CgoqICAgKipXaGF0IGlzIGB2dF9tZW1fZW5jX2lvY3RsYD8qKiBJcyBpdCBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiwgYSBkYXRhIHN0cnVjdHVyZSwgb3Igc29tZSBvdGhlciBpZGVudGlmaWVyPyBVbmRlcnN0YW5kaW5nIHRoZSBkYXRhIHR5cGUgaXMgcGFyYW1vdW50LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSBwcmVmZXJyZWQgdG9vbGluZyBmb3IgY29kZSBuYXZpZ2F0aW9uIGFuZCBhbmFseXNpcyB0byBnZXQgbW9yZSBjb250ZXh0IGFyb3VuZCB0aGlzIGlkZW50aWZpZXIuCiogICAqKldoZXJlIGlzIHRoaXMgYXNzaWdubWVudCBvY2N1cnJpbmc/KiogSXMgaXQgd2l0aGluIGEgZHJpdmVyLCB0aGUga2VybmVsIGNvcmUsIGEgdXNlcnNwYWNlIGFwcGxpY2F0aW9uLCBvciBzb21ldGhpbmcgZWxzZT8gVGhlIHNjb3BlIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgdGhlIGltcGFjdCBhbmQgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBDcm9zcy1yZWZlcmVuY2luZyBpdCBpcyBpbXBvcnRhbnQuCiogICAqKldoYXQgYXJlIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBvZiBjb2RlPyoqIEV4YW1pbmluZyB0aGUgY29udGV4dCBhcm91bmQgdGhlIGFzc2lnbm1lbnQgaXMgY3J1Y2lhbC4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBjaGVja3MsIGVycm9yIGhhbmRsaW5nIG1lY2hhbmlzbXMsIG9yIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHZhcmlhYmxlcz8KKiAgICoqV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgdmFsdWUgYmVpbmcgYXNzaWduZWQ/KiogSXMgdGhpcyBhIGRpcmVjdCBhc3NpZ25tZW50IGZyb20gYW4gaW5wdXQsIG9yIGlzIGl0IGRlcml2ZWQgZnJvbSBzb21lIGNhbGN1bGF0aW9uPyBLbm93aW5nIHRoZSBzb3VyY2Ugb2YgdGhlIHZhbHVlIGlzIGltcG9ydGFudCBmb3Igc2VjdXJpdHkgcmV2aWV3LgoqICAgKipEb2VzIHRoaXMgcmVsYXRlIHRvIGFueSBrbm93biB2dWxuZXJhYmlsaXRpZXMgb3IgcGVyZm9ybWFuY2UgaXNzdWVzPyoqIEkgbmVlZCB0byBtZW50YWxseSBjb25uZWN0IHRoaXMgd2l0aCBteSBleGlzdGluZyBrbm93bGVkZ2Ugb2Ygc2ltaWxhciBjb21wb25lbnRzIGFuZCBwcmV2aW91cyBmaW5kaW5ncy4KCkkmIzM5O2xsIHN0YXJ0IGJ5IGRvaW5nIGEgcXVpY2sgc2VhcmNoIGZvciB0aGUgdmFyaWFibGUsIGFuZCBJJiMzOTtsbCBqdW1wIGludG8gbXkgcHJlZmVycmVkIGRlYnVnZ2VyIG9yIHN0YXRpYyBhbmFseXNpcyB0b29sIHRvIGZpbmQgb3V0IHdoZXJlIHRoZSBhc3NpZ25tZW50IGlzIGhhcHBlbmluZy4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwubWVtX2VuY19pb2N0bC4qPS4qdnRfbWVtX2VuY19pb2N0bCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjEyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtWTS9WTVggTWVtb3J5IEVuY3J5cHRpb24gSU9DVEwqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGhlcmUgYW5kIHBpbnBvaW50IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYHZ0X21lbV9lbmNfaW9jdGxgIHdpdGhpbiB0aGUgS1ZNL1ZNWCBhcmNoaXRlY3R1cmUuIEZvcmdldCBhbnkgcHJlbGltaW5hcnkgbWVhbmRlcmluZywgSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGlzIGlzIGdvaW5nIHRvIGJlIGJ1cmllZCB3aXRoaW4gdGhlIGNvcmUgVk1YIGNvZGUsIHNvIEkmIzM5O20gc2tpcHBpbmcgdGhlIHBlcmlwaGVyYWwgZmlsZXMuIEkmIzM5O2xsIHNlYXJjaCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhcmNoL3g4Ni9rdm0vdm14L21haW4uY2AuIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBodWIgZm9yIFZNWCBmdW5jdGlvbmFsaXR5LCBhbmQgdGhlIElPQ1RMIGhhbmRsZXIgZm9yIG1lbW9yeSBlbmNyeXB0aW9uIGhhcyB0byBiZSB0aGVyZS4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiBob3cgdGhpcyBJT0NUTCBpcyBwcm9jZXNzZWQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnRfbWVtX2VuY19pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jPTgzMT1zdGF0aWMgdm9pZCB2dF9zZXR1cF9tY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTgzOC1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjgzOTpzdGF0aWMgaW50IHZ0X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg0MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDE3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB5b3UgZGVzY3JpYmVkOgoKKipTaW5nbGUgTWF0Y2ggVHJvdWJsZXNob290aW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIG9ubHkgZ290IG9uZSBtYXRjaC4gVGhhdCYjMzk7cyBub3QgaWRlYWwsIGJ1dCBpdCYjMzk7cyBlbm91Z2ggdG8gc3RhcnQgd2l0aC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb2RlLiBUaGUgcHJvYmxlbSBsaWtlbHkgbGllcyB3aXRoaW4gdGhlIHg4NiBLVk0gVk1YIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhcmNoL3g4Ni9rdm0vdm14L21haW4uY2AuIE15IGh1bmNoIGlzIHRoYXQgdGhlIHJlbGV2YW50IGNvZGUgd2lsbCBiZSBhcm91bmQgbGluZSA4MzkuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgc291cmNlIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgzMDpcdFxuIDgzMTpcdHN0YXRpYyB2b2lkIHZ0X3NldHVwX21jZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gODMyOlx0e1xuIDgzMzpcdFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG4gODM0Olx0XHRcdHJldHVybjtcbiA4MzU6XHRcbiA4MzY6XHRcdHZteF9zZXR1cF9tY2UodmNwdSk7XG4gODM3Olx0fVxuIDgzODpcdFxuIDgzOTpcdHN0YXRpYyBpbnQgdnRfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxuIDg0MDpcdHtcbiA4NDE6XHRcdGlmICghaXNfdGQoa3ZtKSlcbiA4NDI6XHRcdFx0cmV0dXJuIC1FTk9UVFk7XG4gODQzOlx0XG4gODQ0Olx0XHRyZXR1cm4gdGR4X3ZtX2lvY3RsKGt2bSwgYXJncCk7XG4gODQ1Olx0fVxuIDg0NjpcdFxuIDg0NzpcdHN0YXRpYyBpbnQgdnRfdmNwdV9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCBfX3VzZXIgKmFyZ3ApXG4gODQ4Olx0e1xuIDg0OTpcdFx0aWYgKCFpc190ZF92Y3B1KHZjcHUpKVxuIDg1MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA4NTE6XHRcbiA4NTI6XHRcdHJldHVybiB0ZHhfdmNwdV9pb2N0bCh2Y3B1LCBhcmdwKTtcbiA4NTM6XHR9XG4gODU0Olx0XG4gODU1Olx0c3RhdGljIGludCB2dF92Y3B1X21lbV9lbmNfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkIF9fdXNlciAqYXJncClcbiA4NTY6XHR7XG4gODU3Olx0XHRpZiAoIWlzX3RkX3ZjcHUodmNwdSkpXG4gODU4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDg1OTpcdFxuIDg2MDpcdFx0cmV0dXJuIHRkeF92Y3B1X3VubG9ja2VkX2lvY3RsKHZjcHUsIGFyZ3ApO1xuIDg2MTpcdH1cbiA4NjI6XHRcbiA4NjM6XHRzdGF0aWMgaW50IHZ0X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLFxuIDg2NDpcdFx0XHRcdFx0ICAgICBib29sIGlzX3ByaXZhdGUpXG4gODY1Olx0e1xuIDg2NjpcdFx0aWYgKGlzX3RkKGt2bSkpXG4gODY3Olx0XHRcdHJldHVybiB0ZHhfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChrdm0sIHBmbiwgaXNfcHJpdmF0ZSk7XG4gODY4Olx0XG4gODY5Olx0XHRyZXR1cm4gMDtcbiA4NzA6XHR9XG4gODcxOlx0XG4gODcyOlx0I2RlZmluZSB2dF9vcChuYW1lKSB2dF8jI25hbWVcbiA4NzM6XHQjZGVmaW5lIHZ0X29wX3RkeF9vbmx5KG5hbWUpIHZ0XyMjbmFtZVxuIDg3NDpcdCNlbHNlIC8qIENPTkZJR19LVk1fSU5URUxfVERYICovXG4gODc1Olx0I2RlZmluZSB2dF9vcChuYW1lKSB2bXhfIyNuYW1lXG4gODc2Olx0I2RlZmluZSB2dF9vcF90ZHhfb25seShuYW1lKSBOVUxMXG4gODc3Olx0I2VuZGlmIC8qIENPTkZJR19LVk1fSU5URUxfVERYICovXG4gODc4Olx0XG4gODc5Olx0I2RlZmluZSBWTVhfUkVRVUlSRURfQVBJQ1ZfSU5ISUJJVFNcdFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTg1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNYWNybyBBc3NpZ25tZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0JiMzOTtzIHVzaW5nIG1hY3JvcyB0byBkZWZpbmUgYHZ0X29wKG1lbV9lbmNfaW9jdGwpYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSBhIGNvbnZlbmllbnQgd2F5IG9mIGhhbmRsaW5nIGEgZnVuY3Rpb24gY2FsbCBpbiBhIHdheSB0aGF0IG1heSByZWR1Y2UgY29kZSBkdXBsaWNhdGlvbiwgYnV0IG5vdyBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBUaGUgbWFjcm8gaXRzZWxmIGRvZXNuJiMzOTt0IGdpdmUgbWUgdGhlIGZ1bGwgcGljdHVyZS4gTXkgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIHRyYWNrIGRvd24gd2hhdCBgbWVtX2VuY19pb2N0bGAgKmlzKi4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgZnVuY3Rpb24gb3IgdmFyaWFibGUgaXMgZGVmaW5lZCwgYW5kIGBhcmNoL3g4Ni9rdm0vdm14L21haW4uY2Agc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2VuY19pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jPTgzMT1zdGF0aWMgdm9pZCB2dF9zZXR1cF9tY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTgzOC1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjgzOTpzdGF0aWMgaW50IHZ0X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg0MC17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODQ2LVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODQ3OnN0YXRpYyBpbnQgdnRfdmNwdV9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCBfX3VzZXIgKmFyZ3ApXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NDgte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg4OD1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwMzQtXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDM1Olx0Lm1lbV9lbmNfaW9jdGwgPSB2dF9vcF90ZHhfb25seShtZW1fZW5jX2lvY3RsKSxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwMzY6XHQudmNwdV9tZW1fZW5jX2lvY3RsID0gdnRfb3BfdGR4X29ubHkodmNwdV9tZW1fZW5jX2lvY3RsKSxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwMzctXHQudmNwdV9tZW1fZW5jX3VubG9ja2VkX2lvY3RsID0gdnRfb3BfdGR4X29ubHkodmNwdV9tZW1fZW5jX3VubG9ja2VkX2lvY3RsKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2OTQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFREWCBWTSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGluaXRpYWxpemF0aW9uIHBhdGggZm9yIFREWCBWTXMsIGFuZCBpdCBsb29rcyBsaWtlIGB0ZHhfdm1faW9jdGxgIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQsIGludm9rZWQgdGhyb3VnaCBga3ZtX3g4Nl9vcHMubWVtX2VuY19pb2N0bGAuIFRoaXMgbWFrZXMgc2Vuc2UsIGFzIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIFREWC1zcGVjaWZpYyBzZXR1cCB3b3VsZCBiZWdpbi4gQW5kLCB3aXRoaW4gdGhhdCwgYHRkeF90ZF9pbml0YCBpcyBjYWxsZWQsIHdoaWNoIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGZ1cnRoZXIgcmVpbmZvcmNlcyBgdGR4X3ZtX2lvY3RsYCBhcyB0aGUgcHJpbWFyeSBmb2N1cy4KCkJ1dCBob2xkIG9uLCBJIHNob3VsZCBhbHNvIGxvb2sgYXQgdGhlIHN1cHBvcnRpbmcgZnVuY3Rpb25zLiBJIHNlZSB0aGF0IGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgIGlzIGNhbGxlZCBieSBga3ZtX2luaXRfbW11YCBhbmQgYGt2bV9pbml0X3NoYWRvd19ucHRfbW11YC4gSXQgc2VlbXMgbGlrZSB0aG9zZSB3b3VsZCBiZSBpbXBvcnRhbnQgdG8gdHJhY2ssIHRvbywgc2luY2UgdGhleSYjMzk7cmUgaW52b2x2ZWQgaW4gTU1VIGluaXRpYWxpemF0aW9uLCByaWdodD8gU28gbGV0JiMzOTtzIGFkZCBga3ZtX2luaXRfbW11YCBhbmQgYGt2bV9pbml0X3NoYWRvd19ucHRfbW11YCB0byB0aGUgZm9jdXMgbGlzdC4KCkhtbSwgd2FpdCwgYW0gSSBjb3JyZWN0PyBBcmUgYGt2bV9pbml0X21tdWAgYW5kIGBrdm1faW5pdF9zaGFkb3dfbnB0X21tdWAgaG90IHBhdGhzPyBObywgdGhleSBhcHBlYXIgdG8gYmUgY2FsbGVkIGR1cmluZyBNTVUgaW5pdGlhbGl6YXRpb24sIGxpa2VseSB0cmlnZ2VyZWQgYnkgdkNQVSBjcmVhdGlvbiBvciBhIHJvbGUgY2hhbmdlLiBTdGlsbCwgSSBzaG91bGQgcmV2aWV3IHRoZSBjb2RlIHRvIGVuc3VyZSB0aGF0IG5vdGhpbmcgZ2V0cyBtaXNzZWQgaGVyZS4gTGV0JiMzOTtzIGRpZyBpbnRvIGBrdm1faW5pdF9tbXVgIGFuZCBga3ZtX2luaXRfc2hhZG93X25wdF9tbXVgIGZvciBhIGRlZXBlciB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faW5pdF9tbXUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS5oPTE0MT12b2lkIGt2bV9tbXVfc2V0X2VwdF9tYXNrcyhib29sIGhhc19hZF9iaXRzKTtcbmFyY2gveDg2L2t2bS9tbXUuaC0xNDItXG5hcmNoL3g4Ni9rdm0vbW11Lmg6MTQzOnZvaWQga3ZtX2luaXRfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vbW11LmgtMTQ0LXZvaWQga3ZtX2luaXRfc2hhZG93X25wdF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyNCxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTYxNDY9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9pbml0X3NoYWRvd19lcHRfbW11KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjE0Ny1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjE0ODp2b2lkIGt2bV9pbml0X21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxNDkte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjE2MS19XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYxNjI6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9pbml0X21tdSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxNjMtXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02MTg3PXZvaWQga3ZtX21tdV9yZXNldF9jb250ZXh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxODktXHRrdm1fbW11X3VubG9hZCh2Y3B1KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjE5MDpcdGt2bV9pbml0X21tdSh2Y3B1KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjE5MS19XG4tLVxuYXJjaC94ODYva3ZtL3JlZ3MuYz0yMjA9dm9pZCBrdm1fcG9zdF9zZXRfY3IwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBvbGRfY3IwLCB1bnNpZ25lZCBsb25nIGNyMClcbi0tXG5hcmNoL3g4Ni9rdm0vcmVncy5jLTIzNC1cdFx0aWYgKHRkcF9lbmFibGVkKSB7XG5hcmNoL3g4Ni9rdm0vcmVncy5jOjIzNTpcdFx0XHRrdm1faW5pdF9tbXUodmNwdSk7XG5hcmNoL3g4Ni9rdm0vcmVncy5jLTIzNi1cdFx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz03MTQ9c3RhdGljIGludCBuZXN0ZWRfc3ZtX2xvYWRfY3IzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjMsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy03MjktXHQvKiBSZS1pbml0aWFsaXplIHRoZSBNTVUsIGUuZy4gdG8gcGljayB1cCBDUjQgTU1VIHJvbGUgY2hhbmdlcy4gKi9cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NzMwOlx0a3ZtX2luaXRfbW11KHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy03MzEtXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0xMjI3PXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9sb2FkX2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IzLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMTI0OS1cdC8qIFJlLWluaXRpYWxpemUgdGhlIE1NVSwgZS5nLiB0byBwaWNrIHVwIENSNCBNTVUgcm9sZSBjaGFuZ2VzLiAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoxMjUwOlx0a3ZtX2luaXRfbW11KHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0xMjUxLVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz05MzQwPWludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTk0MTUtXHRrdm1fdmNwdV9yZXNldCh2Y3B1LCBmYWxzZSk7XG5hcmNoL3g4Ni9rdm0veDg2LmM6OTQxNjpcdGt2bV9pbml0X21tdSh2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy05NDE3LVx0dmNwdV9wdXQodmNwdSk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz04Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfb3BzIGt2bV9tbXVfbm90aWZpZXJfb3BzID0ge1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtODg3LVxudmlydC9rdm0va3ZtX21haW4uYzo4ODg6c3RhdGljIGludCBrdm1faW5pdF9tbXVfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtKVxudmlydC9rdm0va3ZtX21haW4uYy04ODkte1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MTA5OT1zdGF0aWMgc3RydWN0IGt2bSAqa3ZtX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUsIGNvbnN0IGNoYXIgKmZkbmFtZSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExODgtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjExODk6XHRyID0ga3ZtX2luaXRfbW11X25vdGlmaWVyKGt2bSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExOTAtXHRpZiAocilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2MDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBURFggSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gYGt2bV9pbml0X21tdWAgaXMgdHJpZ2dlcmVkIGR1cmluZyB2Q1BVIGNyZWF0aW9uIGFuZCB3aGVuZXZlciBDUjAvQ1IzIHJlZ2lzdGVycyBhcmUgbW9kaWZpZWQuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIGZyZXF1ZW5jeSwgbm90aGluZyBleGNlcHRpb25hbGx5IGhpZ2gsIGJ1dCBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBrZWVwIGFuIGV5ZSBvbiBmb3IgcGVyZm9ybWFuY2UuIEhvbGQgb24sIGB0ZHhfdm1faW9jdGxgIGlzIGFjdHVhbGx5IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBURFggaW5pdGlhbGl6YXRpb24sIHdoaWNoIGlzIG1vcmUgY3JpdGljYWwuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4KCk5vdywgdGhpcyBwYXRjaCByZW1vdmVzIGBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHJgIGFuZCBpbnN0ZWFkIHV0aWxpemVzIGBjcHVpZF9tYXhwaHlhZGRyYCBmb3IgVERYIFZNcywgYnV0IG9ubHkgaWYgdGhlIGBtaXJyb3Jfcm9vdF9sZXZlbGAgaXNuJiMzOTt0IGNvbmZpZ3VyZWQuIFRoYXQmIzM5O3MgYW4gaW50ZXJlc3RpbmcgYXJjaGl0ZWN0dXJhbCBkZWNpc2lvbi4gSG1tLCBsZXQgbWUgdGhpbmsuLi4gSSByZWNhbGwgc2VlaW5nIGBjcHVpZF9tYXhwaHlhZGRyYCBpbnZva2VkIGluIGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgLiBHaXZlbiBpdHMgbmV3IHJvbGUsIEkgc2hvdWxkIHByb2JhYmx5IGRlbHZlIGRlZXBlciBhbmQgZXhhbWluZSBgY3B1aWRfbWF4cGh5YWRkcmAgbW9yZSBjbG9zZWx5LiBJdCYjMzk7cyB0aW1lIHRvIGNoZWNrIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGF0IGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjcHVpZF9tYXhwaHlhZGRyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9jcHVpZC5jPTQ5MT11NjQga3ZtX3ZjcHVfcmVzZXJ2ZWRfZ3BhX2JpdHNfcmF3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTQ5Mi17XG5hcmNoL3g4Ni9rdm0vY3B1aWQuYzo0OTM6XHRyZXR1cm4gcnN2ZF9iaXRzKGNwdWlkX21heHBoeWFkZHIodmNwdSksIDYzKTtcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTQ5NC19XG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmg9NzE9dTY0IGt2bV92Y3B1X3Jlc2VydmVkX2dwYV9iaXRzX3JhdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL2NwdWlkLmgtNzItXG5hcmNoL3g4Ni9rdm0vY3B1aWQuaDo3MzpzdGF0aWMgaW5saW5lIGludCBjcHVpZF9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9jcHVpZC5oLTc0LXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5Mjk9c3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NDItXHQvKiBVc2UgNS1sZXZlbCBURFAgaWYgYW5kIG9ubHkgaWYgaXQmIzM5O3MgdXNlZnVsL25lY2Vzc2FyeS4gKi9cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTk0MzpcdGlmIChtYXhfdGRwX2xldmVsID09IDUgXHUwMDI2XHUwMDI2IGNwdWlkX21heHBoeWFkZHIodmNwdSkgXHUwMDNjPSA0OClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk0NC1cdFx0cmV0dXJuIDQ7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguaD02ODg9c3RhdGljIGlubGluZSBib29sIHZteF9uZWVkX3BmX2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguaC02OTMtXHRyZXR1cm4gYWxsb3dfc21hbGxlcl9tYXhwaHlhZGRyIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3ZteC92bXguaDo2OTQ6XHQgICAgICAgY3B1aWRfbWF4cGh5YWRkcih2Y3B1KSBcdTAwM2Mga3ZtX2hvc3QubWF4cGh5YWRkcjtcbmFyY2gveDg2L2t2bS92bXgvdm14LmgtNjk1LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmg9MTE3Mj12b2lkIHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmgtMTE3NC1cdFx0XHQgICAgIHUzMiB2YWx1ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmg6MTE3NTp2b2lkIHZjcHVfc2V0X2NwdWlkX21heHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCBtYXhwaHlhZGRyKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaC0xMTc2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzc0MgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNL1REWCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBLVk0vVERYIHBlcnNwZWN0aXZlLiBJIHNlZSB0aGUgY2hhbmdlcyB0b3VjaCBga3ZtX21tdV9nZXRfdGRwX2xldmVsYCBhbmQgYHRkeF90ZF9pbml0YC4gYHRkeF90ZF9pbml0YCBpcyBzdGF0aWMsIHdoaWNoIHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24uICBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyAqd2hlcmUqIHRoYXQgc3RhdGljIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tLCBhbmQgaXQmIzM5O3MgYHRkeF92bV9pb2N0bGAuIGB0ZHhfdm1faW9jdGxgIGlzIG5vbi1zdGF0aWMsIHNvIHRoYXQgaW1tZWRpYXRlbHkgcHV0cyBpdCBvbiBteSByYWRhci4gSXQmIzM5O3MgYSBrZXkgZW50cnkgcG9pbnQgZm9yIFREWCBWTSBvcGVyYXRpb25zLiBJJiMzOTtsbCBmbGFnIHRoYXQgYXMgYSBmb2N1cyBwb2ludCBmb3IgYW5hbHlzaXMuCgpJIGFsc28gbmVlZCB0byBzZWUgd2hlcmUgaXQmIzM5O3MgY2FsbGVkLiBBbmQgYGt2bV9pbml0X21tdWAgaXMgYW5vdGhlciBnb29kIHN5bWJvbC4KCkxldCBtZSB2ZXJpZnkgdGhhdCBgdGR4X3ZtX2lvY3RsYCBpc24mIzM5O3Qgc3RhdGljLiBZZXAsIG5vbi1zdGF0aWMgY29uZmlybXMgaXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUuICBBbnl0aGluZyBlbHNlPyAgQWgsIGBrdm1fbW11X3NldF9taXJyb3Jfcm9vdF9sZXZlbGAgaXMgc3RhdGljIGlubGluZSwgc28gcHJvYmFibHkgbm90IGEgbWFqb3IgcGxheWVyIGhlcmUuCgpUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgdGR4X2xvYWRfbW11X3BnZGAuIE5vdyBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGNvZGUgY2hhbmdlczoKYGBgYwogdm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpCiB7Ci0JdTY0IHNoYXJlZF9iaXQgPSAocGdkX2xldmVsID09IDUpID8gVERYX1NIQVJFRF9CSVRfUFdMXzUgOgotCQkJICBURFhfU0hBUkVEX0JJVF9QV0xfNDsKLQotCWlmIChLVk1fQlVHX09OKHNoYXJlZF9iaXQgIT0ga3ZtX2dmbl9kaXJlY3RfYml0cyh2Y3B1LSZndDtrdm0pLCB2Y3B1LSZndDtrdm0pKQomIzQzOwlpZiAoS1ZNX0JVR19PTihwZ2RfbGV2ZWwgIT0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm1pcnJvcl9yb290X2xldmVsLCB2Y3B1LSZndDtrdm0pKQogCQlyZXR1cm47CmBgYApPa2F5LCB0aGUga2V5IGNoYW5nZSBpbiBgdGR4X2xvYWRfbW11X3BnZGAgaXMgdGhpczogdGhlIG9sZCBgc2hhcmVkX2JpdGAgY2hlY2sgYmFzZWQgb24gYHBnZF9sZXZlbGAgaXMgcmVwbGFjZWQgYnkgYSBjaGVjayBhZ2FpbnN0IGB2Y3B1LSZndDtrdm0tJmd0O2FyY2gubWlycm9yX3Jvb3RfbGV2ZWxgLiAgVGhpcyBzdWdnZXN0cyB0aGUgYG1pcnJvcl9yb290X2xldmVsYCBpcyBub3cgdGhlIGF1dGhvcml0YXRpdmUgc291cmNlIG9mIHRydXRoLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHNpbXBsaWZ5aW5nIHRoZSBsb2dpYyBhbmQgY29uc29saWRhdGluZyBzb21lIGxldmVsIHNldHRpbmdzLiBJIHdpbGwgbmVlZCB0byBsb29rIGludG8gaG93IGFuZCB3aGVyZSB0aGlzIG5ldyBgbWlycm9yX3Jvb3RfbGV2ZWxgIGlzIHNldCBhbmQgdXNlZCBub3cuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgdGR4X2xvYWRfbW11X3BnZGAgaXMgbm9uLXN0YXRpYyBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHhfbG9hZF9tbXVfcGdkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jPTYxMz1zdGF0aWMgdm9pZCB2dF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MTYtXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NjE3Olx0XHR0ZHhfbG9hZF9tbXVfcGdkKHZjcHUsIHJvb3RfaHBhLCBwZ2RfbGV2ZWwpO1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjE4LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0xNTg2PXN0YXRpYyBpbnQgaGFuZGxlX3Rkdm1jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE2MDYtXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjE2MDc6dm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE2MDgte1xuLS1cbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oPTE2MD12b2lkIHRkeF9mbHVzaF90bGJfYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDoxNjE6dm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCByb290X2xldmVsKTtcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oLTE2Mi1pbnQgdGR4X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBib29sIGlzX3ByaXZhdGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIxNAoJCQkJCQkJb3V0cHV0OiAxODkKCQkJCQkJCXRob3VnaHRzOiA2NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgVGhpcyBLVk0gTU1VIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcuIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgS1ZNIE1NVSBwYXRjaCBhbmQgaGF2ZSBpZGVudGlmaWVkIHNvbWUga2V5IGFyZWFzLgoKRmlyc3QsIEkgbm90aWNlZCB0aGF0IGB0ZHhfbG9hZF9tbXVfcGdkYCBpcyBub24tc3RhdGljLCBhbmQgaW1wb3J0YW50bHksIGl0JiMzOTtzIGNhbGxlZCBieSBgdnRfbG9hZF9tbXVfcGdkYCwgd2hpY2ggaXMgYXNzaWduZWQgdG8gYGt2bV94ODZfb3BzLmxvYWRfbW11X3BnZGAuIFRoaXMgbWFrZXMgYHRkeF9sb2FkX21tdV9wZ2RgIGEgZ29vZCBwb3RlbnRpYWwgZm9jdXMgc3ltYm9sLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIFRoaXMgd2FycmFudHMgYSBkZWVwZXIgbG9vay4KCkkmIzM5O3ZlIGdvdCB0aHJlZSBjb3JlIGZvY3VzIHN5bWJvbHM6IGB0ZHhfdm1faW9jdGxgLCBgdGR4X2xvYWRfbW11X3BnZGAsIGFuZCBga3ZtX2luaXRfbW11YC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzIGFuZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgTU1VIG1vZGlmaWNhdGlvbnMuCgpGb3IgY29uZmlndXJhdGlvbnMsIEkmIzM5O2xsIG5lZWQgYEtWTWAsIGBLVk1fSU5URUxgLCBgSU5URUxfVERYX0hPU1RgLCBhbmQgYEtWTV9JTlRFTF9URFhgLiBgS1ZNX0lOVEVMX1REWGAgZGVwZW5kcyBvbiBgSU5URUxfVERYX0hPU1RgLCBzbyBJJiMzOTtsbCBpbmNsdWRlIGJvdGggdG8gYmUgc2FmZS4gSXQgbG9va3MgbGlrZSBgS1ZNX0lOVEVMX1REWGAgaXMgdGhlIGNvcnJlY3QgbmFtZS4gSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhvc2UgY29uZmlndXJhdGlvbnMgdG8gY29uZmlybS4KCkkmIzM5O3ZlIGFsc28gY29uZmlybWVkIHRoZSBuYW1lcyBvZiB0aGUgZnVuY3Rpb25zOyBgdGR4X3ZtX2lvY3RsYCBpcyB0aGUgY29ycmVjdCBuYW1lLCBhcyBpcyBgdGR4X2xvYWRfbW11X3BnZGAgYW5kIGBrdm1faW5pdF9tbXVgLgoKSSBicmllZmx5IGNvbnNpZGVyZWQgYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAsIGJ1dCBpdCYjMzk7cyBzdGF0aWMgaW5saW5lLCBzbyBpdCYjMzk7cyBub3QgYSBzdWl0YWJsZSBzeW1ib2wgdG8gdGFyZ2V0IGRpcmVjdGx5LiBIb3dldmVyLCB0aGUgY2hhbmdlcyB3aXRoaW4gdGhhdCBpbmxpbmUgZnVuY3Rpb24gYXJlIGluZGlyZWN0bHkgY292ZXJlZCBieSB0aGUgZnV6emluZyBvZiBga3ZtX2luaXRfbW11YCwgd2hpY2ggaGFuZGxlcyBNTVUgaW5pdGlhbGl6YXRpb24sIGluY2x1ZGluZyB0aGUgVERQIGxldmVsIGRldGVybWluYXRpb24sIGZvciBib3RoIFREWCBhbmQgbm9uLVREWCBWTXMuCgpKdXN0IHRvIHJlY2FwIG15IHJlYXNvbmluZzogVGhpcyBwYXRjaCBtZXNzZXMgd2l0aCBjb3JlIEtWTSBNTVUgbG9naWMuIEl0JiMzOTtzIGFib3V0IGRldGVybWluaW5nIHRoZSBURFAgbGV2ZWwgZm9yIFZNcywgaW50cm9kdWNlcyBgbWlycm9yX3Jvb3RfbGV2ZWxgLCBhbmQgcmVtb3ZlcyBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYC4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhZmZlY3QgdGhlIGZ1bmRhbWVudGFsIHBhZ2UgdGFibGUgc2V0dXAgd2l0aGluIEtWTSwgZXNwZWNpYWxseSBmb3IgVERYIFZNcywgYW5kIHRoZSBpbml0aWFsIE1NVSBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyBhbGwgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzLiBUaGlzIG1ha2VzIGl0IHJpcGUgZm9yIGZ1enppbmcuCgpTbywgdG8gc3VtbWFyaXplLCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGVzZSBzZXR0aW5nczoKCiogICBgV29ydGhGdXp6aW5nOiB0cnVlYAoqICAgYEZvY3VzU3ltYm9sczogdGR4X3ZtX2lvY3RsYCwgYHRkeF9sb2FkX21tdV9wZ2RgLCBga3ZtX2luaXRfbW11YAoqICAgYEVuYWJsZUNvbmZpZ3M6IEtWTWAsIGBLVk1fSU5URUxgLCBgSU5URUxfVERYX0hPU1RgLCBgS1ZNX0lOVEVMX1REWGAKCkkgdGhpbmsgdGhpcyBjb3ZlcnMgdGhlIGNyaXRpY2FsIGFyZWFzLiBUaW1lIHRvIG1vdmUgb24gYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtJTlRFTF9URFhfSE9TVCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUxfVERYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGR4X3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O3RkeF9sb2FkX21tdV9wZ2QmIzM0OywKICAgICYjMzQ7a3ZtX2luaXRfbW11JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgbG9naWMgdG8gZGV0ZXJtaW5lIHRoZSBURFAgKFR3by1EaW1lbnNpb25hbCBQYWdpbmcpIGxldmVsIGZvciB2aXJ0dWFsIG1hY2hpbmVzLiBJdCBpbnRyb2R1Y2VzIGBtaXJyb3Jfcm9vdF9sZXZlbGAgdG8gZml4IHRoZSByb290IGxldmVsIGZvciBWTXMgd2l0aCBtaXJyb3Igcm9vdHMgKGxpa2UgVERYIFZNcykgYW5kIHJlbW92ZXMgYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgS1ZNIE1NVSBwYWdlIHRhYmxlIHNldHVwIGFuZCBURFggaW5pdGlhbGl6YXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMX1REWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RkeF92bV9pb2N0bCYjMzQ7LAogICAgJiMzNDt0ZHhfbG9hZF9tbXVfcGdkJiMzNDssCiAgICAmIzM0O2t2bV9pbml0X21tdSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0gTU1VIGxvZ2ljIHRvIGRldGVybWluZSB0aGUgVERQIChUd28tRGltZW5zaW9uYWwgUGFnaW5nKSBsZXZlbCBmb3IgdmlydHVhbCBtYWNoaW5lcy4gSXQgaW50cm9kdWNlcyBgbWlycm9yX3Jvb3RfbGV2ZWxgIHRvIGZpeCB0aGUgcm9vdCBsZXZlbCBmb3IgVk1zIHdpdGggbWlycm9yIHJvb3RzIChsaWtlIFREWCBWTXMpIGFuZCByZW1vdmVzIGBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHJgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIEtWTSBNTVUgcGFnZSB0YWJsZSBzZXR1cCBhbmQgVERYIGluaXRpYWxpemF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBjYW4gYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBob3cgdGhlIHJvb3QgcGFnZSB0YWJsZSBsZXZlbCBpcyBkZXRlcm1pbmVkIGZvciBURFggVk1zIGluIEtWTSBieSBpbnRyb2R1Y2luZyBhIG5ldyBmaWVsZCBgbWlycm9yX3Jvb3RfbGV2ZWxgIGluIGBzdHJ1Y3Qga3ZtX2FyY2hgLiBUaGlzIGZpZWxkIGlzIHNldCBkdXJpbmcgVERYIGluaXRpYWxpemF0aW9uLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIGFwcHJvYWNoIG9mIHF1ZXJ5aW5nIENQVUlEIGZvciB0aGUgbWF4aW11bSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzLiBTaW5jZSBgc3RydWN0IGt2bWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrdnphbGxvYygpYCAod2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5KSwgdGhlIG5ldyBgbWlycm9yX3Jvb3RfbGV2ZWxgIGZpZWxkIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGFueSBjb21wbGV4IGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBpbmNvcnJlY3QgcGFnZSB0YWJsZSBsZXZlbHMpIHdvdWxkIHJlc3VsdCBpbiBwYWdlIGZhdWx0cywgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA2ZGIxOWMyNDllMDYwMmVjNTJiYzNjZTUwODQ3NTEzYTQ1ZWY1MjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAyMzowMjo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDI4Mzg0NzYxOWZmODguLmIyYTc0YzY5Y2M0YTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMTQwNiw2ICYjNDM7MTQwNiw3IEBAIHN0cnVjdCBrdm1fYXJjaCB7CiAJc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlIHNwbGl0X2Rlc2NfY2FjaGU7CiAKIAlnZm5fdCBnZm5fZGlyZWN0X2JpdHM7CiYjNDM7CWludCBtaXJyb3Jfcm9vdF9sZXZlbDsKIAogCS8qCiAJICogU2l6ZSBvZiB0aGUgQ1BVJiMzOTtzIGRpcnR5IGxvZyBidWZmZXIsIGkuZS4gVk1YJiMzOTtzIFBNTCBidWZmZXIuIEEgWmVybwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmMgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuYwppbmRleCBkZGIwMjJjYjIwM2EyLi4zNGM2MDlhNjBlZWZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vY3B1aWQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuYwpAQCAtNDgzLDIwICYjNDM7NDgzLDYgQEAgaW50IGNwdWlkX3F1ZXJ5X21heHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXJldHVybiAzNjsKIH0KIAotaW50IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0Jc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmJlc3Q7Ci0KLQliZXN0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAwMCk7Ci0JaWYgKCFiZXN0IHx8IGJlc3QtJmd0O2VheCAmbHQ7IDB4ODAwMDAwMDgpCi0JCWdvdG8gbm90X2ZvdW5kOwotCWJlc3QgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDA4KTsKLQlpZiAoYmVzdCkKLQkJcmV0dXJuIChiZXN0LSZndDtlYXggJmd0OyZndDsgMTYpICZhbXA7IDB4ZmY7Ci1ub3RfZm91bmQ6Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBUaGlzICYjMzQ7cmF3JiMzNDsgdmVyc2lvbiByZXR1cm5zIHRoZSByZXNlcnZlZCBHUEEgYml0cyB3aXRob3V0IGFueSBhZGp1c3RtZW50cyBmb3IKICAqIGVuY3J5cHRpb24gdGVjaG5vbG9naWVzIHRoYXQgdXN1cnAgYml0cy4gIFRoZSByYXcgbWFzayBzaG91bGQgYmUgdXNlZCBpZiBhbmQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5oIGIvYXJjaC94ODYva3ZtL2NwdWlkLmgKaW5kZXggOGQ4NjNmNDU1ODVkZS4uNDZiZmU4Njk5ZTY3ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2NwdWlkLmgKQEAgLTY4LDcgJiM0Mzs2OCw2IEBAIHZvaWQgX19pbml0IGt2bV9pbml0X3hzdGF0ZV9zaXplcyh2b2lkKTsKIHUzMiB4c3RhdGVfcmVxdWlyZWRfc2l6ZSh1NjQgeHN0YXRlX2J2LCBib29sIGNvbXBhY3RlZCk7CiAKIGludCBjcHVpZF9xdWVyeV9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci1pbnQgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB1NjQga3ZtX3ZjcHVfcmVzZXJ2ZWRfZ3BhX2JpdHNfcmF3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNwdWlkX21heHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS5oIGIvYXJjaC94ODYva3ZtL21tdS5oCmluZGV4IDJhZTdmOWVkNGNmODYuLmNjMzdlMjEwNzg3YzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11LmgKQEAgLTM4OSw2ICYjNDM7Mzg5LDE1IEBAIHN0YXRpYyBpbmxpbmUgZ3BhX3Qga3ZtX3RyYW5zbGF0ZV9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCQkJICAgICBleGNlcHRpb24sIHB0ZV9hY2Nlc3MpOwogfQogCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGt2bV9tbXVfc2V0X21pcnJvcl9yb290X2xldmVsKHN0cnVjdCBrdm0gKmt2bSwKJiM0MzsJCQkJCQkJICBpbnQgbGV2ZWwpCiYjNDM7ewomIzQzOwlCVUlMRF9CVUdfT04obGV2ZWwgIT0gNCAmYW1wOyZhbXA7IGxldmVsICE9IDUpOwomIzQzOwomIzQzOwlrdm0tJmd0O2FyY2gubWlycm9yX3Jvb3RfbGV2ZWwgPSBsZXZlbDsKJiM0MzsJa3ZtLSZndDthcmNoLmdmbl9kaXJlY3RfYml0cyA9IGdwYV90b19nZm4oQklUX1VMTChsZXZlbCA9PSA0ID8gNDcgOiA1MSkpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX21pcnJvcmVkX3RkcChjb25zdCBzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJcmV0dXJuIGt2bS0mZ3Q7YXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKaW5kZXggYzUxOWU4ZThkNjQ2Zi4uYTUxYTg1MmMxYmVjMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCkBAIC01OTI4LDE5ICYjNDM7NTkyOCwxOSBAQCB2b2lkIF9fa3ZtX21tdV9yZWZyZXNoX3Bhc3N0aHJvdWdoX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCiBzdGF0aWMgaW5saW5lIGludCBrdm1fbW11X2dldF90ZHBfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCWludCBtYXhwYTsKLQotCWlmICh2Y3B1LSZndDtrdm0tJmd0O2FyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTSkKLQkJbWF4cGEgPSBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIodmNwdSk7Ci0JZWxzZQotCQltYXhwYSA9IGNwdWlkX21heHBoeWFkZHIodmNwdSk7Ci0KIAkvKiB0ZHBfcm9vdF9sZXZlbCBpcyBhcmNoaXRlY3R1cmUgZm9yY2VkIGxldmVsLCB1c2UgaXQgaWYgbm9uemVybyAqLwogCWlmICh0ZHBfcm9vdF9sZXZlbCkKIAkJcmV0dXJuIHRkcF9yb290X2xldmVsOwogCiYjNDM7CS8qCiYjNDM7CSAqIElmIHRoZSBWTSBoYXMgbWlycm9yIHJvb3RzLCB0aGVuIHRoZSByb290IGxldmVsIGlzIGZpeGVkIGFzIHRoZSBnZm4KJiM0MzsJICogdXNlZCB0byBzZWxlY3QgYmV0d2VlbiB0aGUgbm9ybWFsIGFuZCBtaXJyb3Igcm9vdCBtdXN0IGJlIGNvdmVyZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm1pcnJvcl9yb290X2xldmVsKQomIzQzOwkJcmV0dXJuIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5taXJyb3Jfcm9vdF9sZXZlbDsKJiM0MzsKIAkvKiBVc2UgNS1sZXZlbCBURFAgaWYgYW5kIG9ubHkgaWYgaXQmIzM5O3MgdXNlZnVsL25lY2Vzc2FyeS4gKi8KLQlpZiAobWF4X3RkcF9sZXZlbCA9PSA1ICZhbXA7JmFtcDsgbWF4cGEgJmx0Oz0gNDgpCiYjNDM7CWlmIChtYXhfdGRwX2xldmVsID09IDUgJmFtcDsmYW1wOyBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpICZsdDs9IDQ4KQogCQlyZXR1cm4gNDsKIAogCXJldHVybiBtYXhfdGRwX2xldmVsOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKaW5kZXggYjI3MmMyMDU4NmE3NC4uNmQ4ZTliZWZkOWU2NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCkBAIC01Niw5ICYjNDM7NTYsNiBAQAogYm9vbCBlbmFibGVfdGR4IF9fcm9fYWZ0ZXJfaW5pdDsKIG1vZHVsZV9wYXJhbV9uYW1lZCh0ZHgsIGVuYWJsZV90ZHgsIGJvb2wsIDA0NDQpOwogCi0jZGVmaW5lIFREWF9TSEFSRURfQklUX1BXTF81IGdwYV90b19nZm4oQklUX1VMTCg1MSkpCi0jZGVmaW5lIFREWF9TSEFSRURfQklUX1BXTF80IGdwYV90b19nZm4oQklUX1VMTCg0NykpCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICp0ZHhfc3lzaW5mbzsKIAogdm9pZCB0ZGhfdnBfcmRfZmFpbGVkKHN0cnVjdCB2Y3B1X3RkeCAqdGR4LCBjaGFyICp1Y2xhc3MsIHUzMiBmaWVsZCwgdTY0IGVycikKQEAgLTE2MDksMTAgJiM0MzsxNjA2LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdGR2bWNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiB2b2lkIHRkeF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSwgaW50IHBnZF9sZXZlbCkKIHsKLQl1NjQgc2hhcmVkX2JpdCA9IChwZ2RfbGV2ZWwgPT0gNSkgPyBURFhfU0hBUkVEX0JJVF9QV0xfNSA6Ci0JCQkgIFREWF9TSEFSRURfQklUX1BXTF80OwotCi0JaWYgKEtWTV9CVUdfT04oc2hhcmVkX2JpdCAhPSBrdm1fZ2ZuX2RpcmVjdF9iaXRzKHZjcHUtJmd0O2t2bSksIHZjcHUtJmd0O2t2bSkpCiYjNDM7CWlmIChLVk1fQlVHX09OKHBnZF9sZXZlbCAhPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2gubWlycm9yX3Jvb3RfbGV2ZWwsIHZjcHUtJmd0O2t2bSkpCiAJCXJldHVybjsKIAogCXRkX3ZtY3Nfd3JpdGU2NCh0b190ZHgodmNwdSksIFNIQVJFRF9FUFRfUE9JTlRFUiwgcm9vdF9ocGEpOwpAQCAtMjgyMyw5ICYjNDM7MjgxNyw5IEBAIHN0YXRpYyBpbnQgdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZCkKIAlrdm1fdGR4LSZndDt4ZmFtID0gdGRfcGFyYW1zLSZndDt4ZmFtOwogCiAJaWYgKHRkX3BhcmFtcy0mZ3Q7Y29uZmlnX2ZsYWdzICZhbXA7IFREWF9DT05GSUdfRkxBR1NfTUFYX0dQQVcpCi0JCWt2bS0mZ3Q7YXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBURFhfU0hBUkVEX0JJVF9QV0xfNTsKJiM0MzsJCWt2bV9tbXVfc2V0X21pcnJvcl9yb290X2xldmVsKGt2bSwgNSk7CiAJZWxzZQotCQlrdm0tJmd0O2FyY2guZ2ZuX2RpcmVjdF9iaXRzID0gVERYX1NIQVJFRF9CSVRfUFdMXzQ7CiYjNDM7CQlrdm1fbW11X3NldF9taXJyb3Jfcm9vdF9sZXZlbChrdm0sIDQpOwogCiAJa3ZtX3RkeC0mZ3Q7c3RhdGUgPSBURF9TVEFURV9JTklUSUFMSVpFRDsKIG91dDoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBURFggS1ZNIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBkaWdnaW5nIGludG8gdGhlIEtWTSBjb2RlIGZvciBURFgg4oCTIFRydXN0IERvbWFpbiBFeHRlbnNpb25zLiBNeSBpbml0aWFsIHJlYWQgc2F5cyBpdCYjMzk7cyBmb2N1c2VkIG9uIGhvdyBtaXJyb3JlZCBUd28tRGltZW5zaW9uYWwgUGFnaW5nIChURFApIGlzIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBgbWlycm9yX3Jvb3RfbGV2ZWxgIGlzIGJlaW5nIGludHJvZHVjZWQgd2l0aGluIHRoZSBgc3RydWN0IGt2bV9hcmNoYCB0byBjb250cm9sIHRoZSByb290IGxldmVsIGZvciB0aGlzIG1pcnJvcmluZy4gSW50ZXJlc3RpbmcuIFRoZSBwYXRjaCYjMzk7cyByZXBsYWNpbmcgb2YgYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAgd2l0aCBgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm1pcnJvcl9yb290X2xldmVsYCBpbiBga3ZtX21tdV9nZXRfdGRwX2xldmVsYCBpcyBhIHByZXR0eSBkaXJlY3QgY29uc2VxdWVuY2Ugb2YgdGhpcy4gSXQmIzM5O3MgZWZmZWN0aXZlbHkgcmVtb3ZpbmcgYSBDUFVJRCBxdWVyeSBpbiBmYXZvciBvZiBhIHZhbHVlIHN0b3JlZCBpbiB0aGUgS1ZNIHN0cnVjdHVyZS4gUmVwbGFjaW5nIHRob3NlIGhhcmRjb2RlZCBgVERYX1NIQVJFRF9CSVRgIGNvbnN0YW50cyB3aXRoIGEgYGt2bV9tbXVfc2V0X21pcnJvcl9yb290X2xldmVsYCBjYWxsIGFsc28gc2ltcGxpZmllcyB0aGluZ3MuCgpNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byBiZSBzdXJlIHdlJiMzOTtyZSBub3QgaW50cm9kdWNpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS4gVGhlIGNydWNpYWwgcG9pbnQgaXMgYG1pcnJvcl9yb290X2xldmVsYCBpcyBhZGRlZCB0byBgc3RydWN0IGt2bV9hcmNoYC4gSWYgYHN0cnVjdCBrdm1fYXJjaGAgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBrdm1gLCB3aGljaCBpdCBpcywgdGhlbiB3aGVyZSBpcyB0aGUgYHN0cnVjdCBrdm1gIGFsbG9jYXRlZD8gSXMgaXQgaW5pdGlhbGl6ZWQgY29ycmVjdGx5PyBBaCwgeWVzLCBgc3RydWN0IGt2bWAgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvY2Agb3IgYHZtYWxsb2NgIHdpdGggemVyb2luZyBkdXJpbmcgYGt2bV9jcmVhdGVfdm1gLiBJIGhhdmUgdG8gdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBga3ZtX2NyZWF0ZV92bWAgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t6YWxsb2MuKnNpemVvZi4qa3ZtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc5OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBLVk0gSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gdGhlIHRyb3VibGVzaG9vdGluZyBoYXMgbGVkIHVzIHRvIHN1c3BlY3QgYW4gaXNzdWUgZHVyaW5nIHRoZSBpbml0aWFsIHNldHVwIG9mIHRoZSBLVk0gaW5mcmFzdHJ1Y3R1cmUuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgS1ZNIGFsbG9jYXRpb24gYW5kIFZNIGNyZWF0aW9uIHJvdXRpbmVzLiBJIG5lZWQgdG8gemVybyBpbiBvbiBlaXRoZXIgYGt2bV9hbGxvY2Agb3IgYGt2bV9jcmVhdGVfdm1gLiBUaGVzZSBhcmUgdGhlIGNyaXRpY2FsIHBvaW50cyB3aGVyZSB0aGUgZm91bmRhdGlvbiBmb3IgYSBuZXcgdmlydHVhbCBtYWNoaW5lIGlzIGxhaWQsIGFuZCB3aGVyZSB0aGluZ3MgY291bGQgYmUgZ29pbmcgc2lkZXdheXMuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNvZGUgcGF0aHMsIGVycm9yIGNoZWNraW5nLCBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbiB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zLiBJIGV4cGVjdCB0byBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIG9yIHBlcmhhcHMgaW5jb3JyZWN0IGFzc3VtcHRpb25zIGFib3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB0aGF0IGFyZSBtYW5pZmVzdGluZyB0aGVtc2VsdmVzIGF0IHRoaXMgc3RhZ2UuIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgaHlwZXJ2aXNvcuKAmXMgaW50ZXJuYWwgc3RydWN0dXJlcyBhbmQgd2l0aCB0aGUgZ3Vlc3QgbWVtb3J5IGFuZCBkZXZpY2UgYXNzaWdubWVudC4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBLVk0gaW5pdGlhbGl6YXRpb24gc28gYW55IHByb2JsZW0gaGVyZSBjYW4gYmUgY3JpdGljYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2MuKnNpemVvZi4qa3ZtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA3NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBga3ZtX2FyY2hfYWxsb2Nfdm1gKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIGBrdm1fYXJjaF9hbGxvY192bWAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYXJjaGl0ZWN0dXJhbCBhbGxvY2F0aW9uIHByb2Nlc3Mgd2l0aGluIEtWTS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHBsYXRmb3JtLXNwZWNpZmljIG1lbW9yeSBhbGxvY2F0aW9uIGlzIGhhbmRsZWQgYXQgdGhlIFZNIGxldmVsLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaWYgdGhlcmUgYXJlIGFueSByZWNlbnQgY2hhbmdlcyBvciBpZiB0aGVyZSBhcmUgYW55IHBvaW50cyB0aGF0IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpbiBtb3JlIGRldGFpbCwgcGVyaGFwcyBmb3IgZGVidWdnaW5nIG9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zLiBJcyB0aGVyZSBhbnl0aGluZyBzcGVjaWZpYyB0aGlzIGZ1bmN0aW9uIGRvZXMgcmVnYXJkaW5nIGFkZHJlc3NpbmcgbW9kZXMsIHBhZ2UgdGFibGUgc2V0dXAsIG9yIG1heWJlIHRoZSBhbGxvY2F0aW9uIG9mIGNvbnRyb2wgc3RydWN0dXJlcyBzcGVjaWZpYyB0byB0aGUgY2hvc2VuIGFyY2hpdGVjdHVyZT8gSSBrbm93IHRoYXQgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgdGhlIGluaXRpYWwgc2V0dXAsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfYWxsb2Nfdm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMxNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gS1ZNIFZNIENyZWF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgaG9uZSBpbiBvbiBga3ZtX2NyZWF0ZV92bWAuIFRoaXMgaXMgdGhlIGNvcmUgZnVuY3Rpb24gd2hlcmUgYSBLVk0gdmlydHVhbCBtYWNoaW5lIGlzIGJyb3VnaHQgaW50byBleGlzdGVuY2UuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGluaXRpYWxpemF0aW9uIGZsb3csIGVzcGVjaWFsbHkgbm93IHdpdGggdGhlc2UgbmV3IGFyY2hpdGVjdHVyYWwgY29uc2lkZXJhdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIHN0ZXBzIGluIGhlcmU6IHJlc291cmNlIGFsbG9jYXRpb24sIG1lbW9yeSBtYW5hZ2VtZW50IHNldHVwLCB2Q1BVIGNyZWF0aW9uLCBhbmQgdGhlIGxpa2UuIEl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGV5JiMzOTt2ZSBoYW5kbGVkIHRoZSBsYXRlc3Qgc2VjdXJpdHkgbWl0aWdhdGlvbnMgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLiBJJiMzOTttIGtlZW4gdG8gc3BvdCBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHdoZXJlIHRoZXkgbWlnaHQgaGF2ZSBpbXBsZW1lbnRlZCBjbGV2ZXIgdHJpY2tzIHRvIGVuaGFuY2UgVk0gcGVyZm9ybWFuY2Ugb3IgaXNvbGF0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXTigJlzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fY3JlYXRlX3ZtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9OTgwPXN0YXRpYyB2b2lkIGt2bV9kZXN0cm95X3ZtX2RlYnVnZnMoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtOTk3LVxudmlydC9rdm0va3ZtX21haW4uYzo5OTg6c3RhdGljIGludCBrdm1fY3JlYXRlX3ZtX2RlYnVnZnMoc3RydWN0IGt2bSAqa3ZtLCBjb25zdCBjaGFyICpmZG5hbWUpXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTk5OS17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0xMDk3PXN0YXRpYyB2b2lkIGt2bV9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uKHZvaWQpO1xudmlydC9rdm0va3ZtX21haW4uYy0xMDk4LVxudmlydC9rdm0va3ZtX21haW4uYzoxMDk5OnN0YXRpYyBzdHJ1Y3Qga3ZtICprdm1fY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSwgY29uc3QgY2hhciAqZmRuYW1lKVxudmlydC9rdm0va3ZtX21haW4uYy0xMTAwLXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExMzItXHQgKiBGb3JjZSBzdWJzZXF1ZW50IGRlYnVnZnMgZmlsZSBjcmVhdGlvbnMgdG8gZmFpbCBpZiB0aGUgVk0gZGlyZWN0b3J5XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjExMzM6XHQgKiBpcyBub3QgY3JlYXRlZCAoYnkga3ZtX2NyZWF0ZV92bV9kZWJ1Z2ZzKCkpLlxudmlydC9rdm0va3ZtX21haW4uYy0xMTM0LVx0ICovXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0xMTk2LVxudmlydC9rdm0va3ZtX21haW4uYzoxMTk3Olx0ciA9IGt2bV9jcmVhdGVfdm1fZGVidWdmcyhrdm0sIGZkbmFtZSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExOTgtXHRpZiAocilcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTU0OTk9c3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01NTExLVxudmlydC9rdm0va3ZtX21haW4uYzo1NTEyOlx0a3ZtID0ga3ZtX2NyZWF0ZV92bSh0eXBlLCBmZG5hbWUpO1xudmlydC9rdm0va3ZtX21haW4uYy01NTEzLVx0aWYgKElTX0VSUihrdm0pKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMDAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBga3ZtYCBpcyBhbGxvY2F0ZWQgaW4gYGt2bV9jcmVhdGVfdm1gLCBhcyBJJiMzOTt2ZSBiZWVuIG11bGxpbmcgaXQgb3ZlcjoKCioqRGlnZ2luZyBpbnRvIGt2bV9jcmVhdGVfdm0gYW5kIGt2bSBBbGxvY2F0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyB0cmFjZSB0aGlzLiBXaGVuIGBrdm1fY3JlYXRlX3ZtYCBnZXRzIGNhbGxlZCwgdGhlIG1haW4gZ29hbCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIEtWTSBpbnN0YW5jZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBga3ZtYCBzdHJ1Y3R1cmUgaXRzZWxmLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgb3VyIHZpcnR1YWwgbWFjaGluZSBjb250ZXh0IHdpdGhpbiB0aGUga2VybmVsLiBJIGV4cGVjdCBpdCB0byBpbnZvbHZlIHNvbWUgbWVtb3J5IGFsbG9jYXRpb24sIHByb2JhYmx5IHVzaW5nIGBrbWFsbG9jYCBvciBzaW1pbGFyLCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uIGFuZCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoZSBrZXJuZWwgbmVlZHMgdG8gc3RvcmUgc3BlY2lmaWMgdm0gaW5mb3JtYXRpb24sIHN1Y2ggYXMgVk0gSURzLCBzdGF0ZSwgYW5kIG90aGVyIFZNLXJlbGF0ZWQgc2V0dGluZ3MsIHNvIGEgc3RydWN0dXJlIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgaGVyZSwgZXZlbiBpZiBpdCBtaWdodCBiZSBhbiBvdmVyc2ltcGxpZmljYXRpb24uIEkmIzM5O2QgbmVlZCB0byBjb25zaWRlciBpZiB0aGVyZSBpcyBtb3JlIGhhcHBlbmluZyB0aGFuIGp1c3QgbWVtb3J5IGJlaW5nIGFsbG9jYXRlZCBoZXJlLiBQZXJoYXBzIHNvbWUgc2V0dXAgb2YgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBtYXliZSBpbml0aWFsaXphdGlvbiBvZiBzb21lIG11dGV4ZXMgb3IgbG9ja3MgdG8gcHJldmVudCBjb25jdXJyZW50IGFjY2VzcyBpc3N1ZXMsIG9yIGV2ZW4gc29tZSBjYWxscyB0byBob29rIGludG8gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQuIFRoZXJlJiMzOTtzIHByb2JhYmx5IGFuIGVycm9yIGhhbmRsaW5nIGNvbXBvbmVudCBpbnZvbHZlZCBhcyB3ZWxsLCB3aGVyZSBpZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gZmFpbHMsIHRoZSBmdW5jdGlvbiBuZWVkcyB0byBwcm9wZXJseSB1bndpbmQgYW5kIHJldHVybiBhbiBlcnJvciBjb2RlLiBJJiMzOTttIGtlZW4gdG8gY29uZmlybSBteSBzdXNwaWNpb24gYWJvdXQgdGhlIHVuZGVybHlpbmcgbWVtb3J5IGFsbG9jYXRpb24gZGV0YWlscy4gQWxzbywgaG93IGRvZXMgdGhpcyBwcm9jZXNzIGludGVyYWN0IHdpdGggdGhlIEtWTSBkcml2ZXImIzM5O3Mgb3ZlcmFsbCByZXNvdXJjZSBtYW5hZ2VtZW50PyBEb2VzIGl0IGFjY291bnQgZm9yIHBvdGVudGlhbCByZXNvdXJjZSBleGhhdXN0aW9uIGR1cmluZyB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzPyBVbHRpbWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nIG9mIHRoZSBsaWZlY3ljbGU6IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCB1c2UsIGFuZCBkZWFsbG9jYXRpb24gb2YgdGhpcyBzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwOTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA5OTpcdHN0YXRpYyBzdHJ1Y3Qga3ZtICprdm1fY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSwgY29uc3QgY2hhciAqZmRuYW1lKVxuMTEwMDpcdHtcbjExMDE6XHRcdHN0cnVjdCBrdm0gKmt2bSA9IGt2bV9hcmNoX2FsbG9jX3ZtKCk7XG4xMTAyOlx0XHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcbjExMDM6XHRcdGludCByLCBpLCBqO1xuMTEwNDpcdFxuMTEwNTpcdFx0aWYgKCFrdm0pXG4xMTA2Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuMTEwNzpcdFxuMTEwODpcdFx0S1ZNX01NVV9MT0NLX0lOSVQoa3ZtKTtcbjExMDk6XHRcdG1tZ3JhYihjdXJyZW50LVx1MDAzZW1tKTtcbjExMTA6XHRcdGt2bS1cdTAwM2VtbSA9IGN1cnJlbnQtXHUwMDNlbW07XG4xMTExOlx0XHRrdm1fZXZlbnRmZF9pbml0KGt2bSk7XG4xMTEyOlx0XHRtdXRleF9pbml0KFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbjExMTM6XHRcdG11dGV4X2luaXQoXHUwMDI2a3ZtLVx1MDAzZWlycV9sb2NrKTtcbjExMTQ6XHRcdG11dGV4X2luaXQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuMTExNTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbjExMTY6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmt2bS1cdTAwM2Vtbl9pbnZhbGlkYXRlX2xvY2spO1xuMTExNzpcdFx0cmN1d2FpdF9pbml0KFx1MDAyNmt2bS1cdTAwM2Vtbl9tZW1zbG90c191cGRhdGVfcmN1d2FpdCk7XG4xMTE4Olx0XHR4YV9pbml0KFx1MDAyNmt2bS1cdTAwM2V2Y3B1X2FycmF5KTtcbjExMTk6XHQjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4xMTIwOlx0XHR4YV9pbml0KFx1MDAyNmt2bS1cdTAwM2VtZW1fYXR0cl9hcnJheSk7XG4xMTIxOlx0I2VuZGlmXG4xMTIyOlx0XG4xMTIzOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZrdm0tXHUwMDNlZ3BjX2xpc3QpO1xuMTEyNDpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2a3ZtLVx1MDAzZWdwY19sb2NrKTtcbjExMjU6XHRcbjExMjY6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmt2bS1cdTAwM2VkZXZpY2VzKTtcbjExMjc6XHRcdGt2bS1cdTAwM2VtYXhfdmNwdXMgPSBLVk1fTUFYX1ZDUFVTO1xuMTEyODpcdFxuMTEyOTpcdFx0QlVJTERfQlVHX09OKEtWTV9NRU1fU0xPVFNfTlVNIFx1MDAzZSBTSFJUX01BWCk7XG4xMTMwOlx0XG4xMTMxOlx0XHQvKlxuMTEzMjpcdFx0ICogRm9yY2Ugc3Vic2VxdWVudCBkZWJ1Z2ZzIGZpbGUgY3JlYXRpb25zIHRvIGZhaWwgaWYgdGhlIFZNIGRpcmVjdG9yeVxuMTEzMzpcdFx0ICogaXMgbm90IGNyZWF0ZWQgKGJ5IGt2bV9jcmVhdGVfdm1fZGVidWdmcygpKS5cbjExMzQ6XHRcdCAqL1xuMTEzNTpcdFx0a3ZtLVx1MDAzZWRlYnVnZnNfZGVudHJ5ID0gRVJSX1BUUigtRU5PRU5UKTtcbjExMzY6XHRcbjExMzc6XHRcdHNucHJpbnRmKGt2bS1cdTAwM2VzdGF0c19pZCwgc2l6ZW9mKGt2bS1cdTAwM2VzdGF0c19pZCksIFwmIzM0O2t2bS0lZFwmIzM0OyxcbjExMzg6XHRcdFx0IHRhc2tfcGlkX25yKGN1cnJlbnQpKTtcbjExMzk6XHRcbjExNDA6XHRcdHIgPSAtRU5PTUVNO1xuMTE0MTpcdFx0aWYgKGluaXRfc3JjdV9zdHJ1Y3QoXHUwMDI2a3ZtLVx1MDAzZXNyY3UpKVxuMTE0MjpcdFx0XHRnb3RvIG91dF9lcnJfbm9fc3JjdTtcbjExNDM6XHRcdGlmIChpbml0X3NyY3Vfc3RydWN0KFx1MDAyNmt2bS1cdTAwM2VpcnFfc3JjdSkpXG4xMTQ0Olx0XHRcdGdvdG8gb3V0X2Vycl9ub19pcnFfc3JjdTtcbjExNDU6XHRcbjExNDY6XHRcdHIgPSBrdm1faW5pdF9pcnFfcm91dGluZyhrdm0pO1xuMTE0NzpcdFx0aWYgKHIpXG4xMTQ4Olx0XHRcdGdvdG8gb3V0X2Vycl9ub19pcnFfcm91dGluZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM1MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSHVudGluZyBEb3duIGBrdm1fYXJjaF9hbGxvY192bWAgaW4gdGhlIHg4NiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBrdm1fYXJjaF9hbGxvY192bWAgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIHByb2JhYmx5IGdvaW5nIHRvIHN0YXJ0IGJ5IHRoaW5raW5nIGFib3V0IHRoZSBLVk0ga2VybmVsIG1vZHVsZSBzdHJ1Y3R1cmUgZmlyc3QuIEkga25vdyB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgVk0gYWxsb2NhdGlvbiBsb2dpYyBsaXZlcywgc28gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVsZXZhbnQgc291cmNlIGZpbGVzIHdpdGhpbiB0aGUgS1ZNIGRpcmVjdG9yeSBzdHJ1Y3R1cmUsIG1heWJlIHNvbWV0aGluZyBpbiBgYXJjaC94ODYva3ZtYCBzcGVjaWZpY2FsbHkuCgpGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHdoYXQgdGhpcyBmdW5jdGlvbiAqZG9lcyouIGBhbGxvY2AgaW1wbGllcyBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIGB2bWAgaGludHMgYXQgYSB2aXJ0dWFsIG1hY2hpbmUgY29udGV4dC4gU28sIEkgZXhwZWN0IGl0JiMzOTtzIGhhbmRsaW5nIHRoZSBhbGxvY2F0aW9uIG9mIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIHRoZSBndWVzdCB2aXJ0dWFsIG1hY2hpbmUgc3RhdGUg4oCTIHRoaW5ncyBsaWtlIFZNQ1Mgc3RydWN0dXJlcywgc2hhZG93IHBhZ2UgdGFibGVzLCBhbmQgb3RoZXIgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHN0YXRlLiBJdCYjMzk7bGwgcHJvYmFibHkgYmUgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyBhIGxvdCBvZiB4ODYtc3BlY2lmaWMgVk0gZGF0YS4KCkkmIzM5O2xsIHByb2JhYmx5IHVzZSBgZ3JlcGAgb3IgYGNzY29wZWAgdG8gc2VhcmNoIHRocm91Z2ggdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSBmb3IgdGhlIGZ1bmN0aW9uIG5hbWUgZGlyZWN0bHksIHRob3VnaCBpdCYjMzk7cyBwb3NzaWJsZSB0aGlzIGlzbiYjMzk7dCB0aGUgZmluYWwgZnVuY3Rpb24gbmFtZS4gSXQgY291bGQgYWxzbyBiZSBjYWxsZWQgYXMgcGFydCBvZiBhIG1hY3JvIG9yIGFub3RoZXIgYWJzdHJhY3Rpb24gbGF5ZXIgc28gSSBtaWdodCBuZWVkIHRvIGxvb2sgZm9yIHJlbGF0ZWQgY29uY2VwdHMuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRvIG5hdmlnYXRlIHRoZSBuZXN0ZWQgZnVuY3Rpb24gY2FsbHMuCgpJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGUgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgdW5pdHMgKE1NVXMpLCBwYWdpbmcgc3RydWN0dXJlcyAoRVBULCBldGMuKSwgYW5kIGFueSBDUFVJRC1yZWxhdGVkIGNoZWNrcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGZvciBmZWF0dXJlIGRldGVjdGlvbiBvciB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0LiBVbmRlcnN0YW5kaW5nIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIHBoeXNpY2FsIG1lbW9yeSBsYXlvdXQsIGFuZCB0aGUgZ3Vlc3QmIzM5O3MgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHdpbGwgYmUga2V5LiBUaGlzIGlzIGEgcHJldHR5IGNyaXRpY2FsIHBhcnQgb2YgdGhlIHdob2xlIHZpcnR1YWxpemF0aW9uIHNldHVwLCBzbyBpdCYjMzk7cyBsaWtlbHkgdG8gYmUgZmFpcmx5IGNvbXBsZXguIEkgd2lsbCBmb2N1cyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIHVzZWQsIGFuZCBhbnkgeDg2LXNwZWNpZmljIG9wdGltaXphdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9hcmNoX2FsbG9jX3ZtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MTc5NT1leHRlcm4gc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyBrdm1fbmVzdGVkX29wcyBfX3JlYWRfbW9zdGx5O1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMTgxMy0jZGVmaW5lIF9fS1ZNX0hBVkVfQVJDSF9WTV9BTExPQ1xuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoxODE0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZClcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMTgxNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5ODcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipQZWVyaW5nIGludG8gdGhlIHg4NiBLVk0gQXJjaGl0ZWN0dXJlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBNeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIG9mIGhvdyBLVk0gYWxsb2NhdGVzIHZpcnR1YWwgbWFjaGluZXMgaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGRyYXduIHRvIHRoZSBmdW5jdGlvbiBga3ZtX2FyY2hfYWxsb2Nfdm1gLCBhbmQgSSYjMzk7bSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBkZWZpbml0aW9uIGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oYC4gVGhpcyBpcyB0aGUgbG93LWxldmVsLCBjcml0aWNhbCBzdHVmZi4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHJlc291cmNlcyBhcmUgc2V0IHVwIGZvciBhIG5ldyBWTS4gV2hhdCBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZD8gV2hhdCBtZW1vcnkgaXMgcmVzZXJ2ZWQ/IFdoYXQgY3JpdGljYWwgaGFyZHdhcmUgY29tcG9uZW50cyBhcmUgYmVpbmcgY29uZmlndXJlZCwgZnJvbSB0aGUgQ1BVIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCB1bml0cz8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGlzIHdoZXJlIHRoZSBmdW5kYW1lbnRhbCBncm91bmR3b3JrIGZvciBndWVzdCBleGVjdXRpb24gb24geDg2IGlzIGxhaWQgb3V0LiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIEkgY2FuIHVuZGVyc3RhbmQgaG93IEtWTSBlbnN1cmVzIGlzb2xhdGlvbiBhbmQgc2VjdXJlIHJlc291cmNlIHNoYXJpbmcgZm9yIHRoZSBWTXMgdGhhdCBzaXQgYXRvcCB0aGUgaGFyZHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgxNDpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZClcbjE4MTU6XHR7XG4xODE2Olx0XHRyZXR1cm4ga3Z6YWxsb2Moa3ZtX3g4Nl9vcHMudm1fc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbjE4MTc6XHR9XG4xODE4Olx0XG4xODE5Olx0I2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfVk1fRlJFRVxuMTgyMDpcdHZvaWQga3ZtX2FyY2hfZnJlZV92bShzdHJ1Y3Qga3ZtICprdm0pO1xuMTgyMTpcdFxuMTgyMjpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19IWVBFUlYpXG4xODIzOlx0I2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfRkxVU0hfUkVNT1RFX1RMQlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ1OQoJCQkJCQkJb3V0cHV0OiAyMjMKCQkJCQkJCXRob3VnaHRzOiA4NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogVERYIFJvb3QgTGV2ZWwgUmVmYWN0b3IqKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gVGhpcyBwYXRjaCBsb29rcyBsaWtlIGl0JiMzOTtzIHJlZmluaW5nIGhvdyBLVk0gZmlndXJlcyBvdXQgdGhlIHJvb3QgcGFnZSB0YWJsZSBsZXZlbCBmb3IgVERYIFZNcy4gSXQmIzM5O3MgdXNpbmcgYGt2emFsbG9jYCB0byBpbml0aWFsaXplIG1lbW9yeSwgc28gdGhlIGBtaXJyb3Jfcm9vdF9sZXZlbGAgZmllbGQgaXMgZ3VhcmFudGVlZCB0byBzdGFydCBhdCB6ZXJvLiBOb3csIGBrdm1fbW11X3NldF9taXJyb3Jfcm9vdF9sZXZlbGAgaXMgc2V0dGluZyBgbWlycm9yX3Jvb3RfbGV2ZWxgIGFuZCBgZ2ZuX2RpcmVjdF9iaXRzYCBiYXNlZCBvbiB0aGlzIGBsZXZlbGAgdmFyaWFibGUsIHdoaWNoIGlzIGNvbWluZyBmcm9tIGB0ZHhfdGRfaW5pdGAuIEkgc2VlIGl0JiMzOTtzIHJlcGxhY2luZyB0aGF0IGBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHJgIGZ1bmN0aW9uIHdpdGggdGhlIGBtaXJyb3Jfcm9vdF9sZXZlbGAgdmFsdWUgd2l0aGluIGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgIGFuZCBgdGR4X2xvYWRfbW11X3BnZGAuCgpTbywgYW0gSSBzZWVpbmcgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaz8gTGV0IG1lIGJyZWFrIGl0IGRvd246IHRoaXMgaXMgcmVmYWN0b3JpbmcgdGhlIHJvb3QgbGV2ZWwgZGV0ZXJtaW5hdGlvbiAqaW50ZXJuYWxseSouIEl0JiMzOTtzIG5vdCBleHBvc2luZyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgYSBiaWcgd2luLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzZWVtIGxpa2UgdGhleSYjMzk7ZCBtYW5pZmVzdCBhcyBsb2dpYyBlcnJvcnMg4oCTIGluY29ycmVjdCBwYWdlIHRhYmxlIGxldmVscywgZm9yIGluc3RhbmNlLiBBbmQgdGhvc2Ugd291bGQgdHJpZ2dlciBwYWdlIGZhdWx0cywgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggS0FTQU4gYW5kIHN0YW5kYXJkIHRlc3RpbmcgYXJlIGRlc2lnbmVkIHRvIGNhdGNoLgoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgdGhhdCBgbWlycm9yX3Jvb3RfbGV2ZWxgIGlzbiYjMzk7dCB1c2VkIHVuaW5pdGlhbGl6ZWQuIFRoZSBgc3RydWN0IGt2bWAgaXMgemVyby1hbGxvY2F0ZWQsIHNvIGl0JiMzOTtzIGluaXRpYWxpemVkIHRvIHplcm8uIEFuZCB0aGUgbG9naWMgaW4gYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAgZ3JhY2VmdWxseSBoYW5kbGVzIHplcm8gdmFsdWVzIGJ5IGZhbGxpbmcgdGhyb3VnaCB0byB0aGUgbmV4dCBjaGVjaywgc28gdGhhdCYjMzk7cyBjb21wbGV0ZWx5IHNhZmUuCgpOb3csIHRoZSBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYCByZW1vdmFsOiBpdCB3YXMgdXNlZCB0byBnZXQgdGhlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3Mgc2l6ZSBmcm9tIENQVUlELCBub3cgcmVwbGFjZWQgYnkgYG1pcnJvcl9yb290X2xldmVsYC4KCkFscmlnaHQsIEkgZG9uJiMzOTt0IHNlZSBhbnkgcmVhc29uIHRvIHJ1biBLTVNBTiBmb3IgdGhpcy4gVGhlIHBhdGNoICppc24mIzM5O3QqIGRvaW5nIGFueSBvZiB0aGUgdGhpbmdzIHRoYXQgdHJpZ2dlciBLTVNBTjogbm8gbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBubyBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcnMsIG5vIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCwgYW5kIG5vIG5ldyBib3VuZHMgY2hlY2tzIHdoaWNoIG1pZ2h0IGFsbG93IGFuIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkhlcmUmIzM5O3MgbXkgcmF0aW9uYWxlOiB0aGUgcGF0Y2ggaXMgYWxsIGFib3V0IHJlZmluaW5nIGhvdyBURFggcm9vdCBwYWdlIHRhYmxlIGxldmVscyBhcmUgZGV0ZXJtaW5lZCB3aXRoaW4gS1ZNLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGBtaXJyb3Jfcm9vdF9sZXZlbGAgZmllbGQgd2l0aGluIGBzdHJ1Y3Qga3ZtX2FyY2hgLCBhbmQgdGhpcyBmaWVsZCBpcyBzZXQgZHVyaW5nIFREWCBpbml0aWFsaXphdGlvbiwgcmVwbGFjaW5nIENQVUlELWJhc2VkIGNoZWNrcy4gVGhlIGBrdnphbGxvY2AgZW5zdXJlcyB0aGUgYG1pcnJvcl9yb290X2xldmVsYCBpcyBpbml0aWFsaXplZC4gTm90aGluZyBuZXcgaXMgc2VudCB0byB1c2Vyc3BhY2UuIEFueSBpbnRyb2R1Y2VkIGJ1Z3Mgd2lsbCBsaWtlbHkgYmUgbG9naWMgYnVncywgYW5kIHRob3NlIHNob3VsZCBiZSBjYXVnaHQgYnkgdGhlIHVzdWFsIHN1c3BlY3RzIGxpa2UgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgYXJlIHByZXNlbnQuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyB0aGUgcm9vdCBwYWdlIHRhYmxlIGxldmVsIGlzIGRldGVybWluZWQgZm9yIFREWCBWTXMgaW4gS1ZNIGJ5IGludHJvZHVjaW5nIGEgbmV3IGZpZWxkIGBtaXJyb3Jfcm9vdF9sZXZlbGAgaW4gYHN0cnVjdCBrdm1fYXJjaGAuIFRoaXMgZmllbGQgaXMgc2V0IGR1cmluZyBURFggaW5pdGlhbGl6YXRpb24sIHJlcGxhY2luZyB0aGUgcHJldmlvdXMgYXBwcm9hY2ggb2YgcXVlcnlpbmcgQ1BVSUQgZm9yIHRoZSBtYXhpbXVtIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MuIFNpbmNlIGBzdHJ1Y3Qga3ZtYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt2emFsbG9jKClgICh3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBtZW1vcnkpLCB0aGUgbmV3IGBtaXJyb3Jfcm9vdF9sZXZlbGAgZmllbGQgaXMgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgYW55IGNvbXBsZXggYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGluY29ycmVjdCBwYWdlIHRhYmxlIGxldmVscykgd291bGQgcmVzdWx0IGluIHBhZ2UgZmF1bHRzLCBjcmFzaGVzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBob3cgdGhlIHJvb3QgcGFnZSB0YWJsZSBsZXZlbCBpcyBkZXRlcm1pbmVkIGZvciBURFggVk1zIGluIEtWTSBieSBpbnRyb2R1Y2luZyBhIG5ldyBmaWVsZCBgbWlycm9yX3Jvb3RfbGV2ZWxgIGluIGBzdHJ1Y3Qga3ZtX2FyY2hgLiBUaGlzIGZpZWxkIGlzIHNldCBkdXJpbmcgVERYIGluaXRpYWxpemF0aW9uLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIGFwcHJvYWNoIG9mIHF1ZXJ5aW5nIENQVUlEIGZvciB0aGUgbWF4aW11bSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzLiBTaW5jZSBgc3RydWN0IGt2bWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrdnphbGxvYygpYCAod2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5KSwgdGhlIG5ldyBgbWlycm9yX3Jvb3RfbGV2ZWxgIGZpZWxkIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGFueSBjb21wbGV4IGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBpbmNvcnJlY3QgcGFnZSB0YWJsZSBsZXZlbHMpIHdvdWxkIHJlc3VsdCBpbiBwYWdlIGZhdWx0cywgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjAyOjU2LjE4MTE4NTIyMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mjc1NDc0ODc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiSU5URUxfVERYX0hPU1RcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0ZHhfdm1faW9jdGxcIixcbiAgICBcInRkeF9sb2FkX21tdV9wZ2RcIixcbiAgICBcImt2bV9pbml0X21tdVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyB0aGUgcm9vdCBwYWdlIHRhYmxlIGxldmVsIGlzIGRldGVybWluZWQgZm9yIFREWCBWTXMgaW4gS1ZNIGJ5IGludHJvZHVjaW5nIGEgbmV3IGZpZWxkIGBtaXJyb3Jfcm9vdF9sZXZlbGAgaW4gYHN0cnVjdCBrdm1fYXJjaGAuIFRoaXMgZmllbGQgaXMgc2V0IGR1cmluZyBURFggaW5pdGlhbGl6YXRpb24sIHJlcGxhY2luZyB0aGUgcHJldmlvdXMgYXBwcm9hY2ggb2YgcXVlcnlpbmcgQ1BVSUQgZm9yIHRoZSBtYXhpbXVtIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MuIFNpbmNlIGBzdHJ1Y3Qga3ZtYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt2emFsbG9jKClgICh3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBtZW1vcnkpLCB0aGUgbmV3IGBtaXJyb3Jfcm9vdF9sZXZlbGAgZmllbGQgaXMgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgYW55IGNvbXBsZXggYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGluY29ycmVjdCBwYWdlIHRhYmxlIGxldmVscykgd291bGQgcmVzdWx0IGluIHBhZ2UgZmF1bHRzLCBjcmFzaGVzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gTU1VIGxvZ2ljIHRvIGRldGVybWluZSB0aGUgVERQIChUd28tRGltZW5zaW9uYWwgUGFnaW5nKSBsZXZlbCBmb3IgdmlydHVhbCBtYWNoaW5lcy4gSXQgaW50cm9kdWNlcyBgbWlycm9yX3Jvb3RfbGV2ZWxgIHRvIGZpeCB0aGUgcm9vdCBsZXZlbCBmb3IgVk1zIHdpdGggbWlycm9yIHJvb3RzIChsaWtlIFREWCBWTXMpIGFuZCByZW1vdmVzIGBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHJgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIEtWTSBNTVUgcGFnZSB0YWJsZSBzZXR1cCBhbmQgVERYIGluaXRpYWxpemF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowMjo1Ni4xODExOTU4MTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Njk3NTYxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwNmRiMTljMjQ5ZTA2MDJlYzUyYmMzY2U1MDg0NzUxM2E0NWVmNTI5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDE0IDIzOjAyOjU0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggMjgzODQ3NjE5ZmY4OC4uYjJhNzRjNjljYzRhNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC0xNDA2LDYgKzE0MDYsNyBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xcbiBcXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgc3BsaXRfZGVzY19jYWNoZTtcXG4gXFxuIFxcdGdmbl90IGdmbl9kaXJlY3RfYml0cztcXG4rXFx0aW50IG1pcnJvcl9yb290X2xldmVsO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogU2l6ZSBvZiB0aGUgQ1BVJ3MgZGlydHkgbG9nIGJ1ZmZlciwgaS5lLiBWTVgncyBQTUwgYnVmZmVyLiBBIFplcm9cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmMgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xcbmluZGV4IGRkYjAyMmNiMjAzYTIuLjM0YzYwOWE2MGVlZmYgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xcbkBAIC00ODMsMjAgKzQ4Myw2IEBAIGludCBjcHVpZF9xdWVyeV9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0cmV0dXJuIDM2O1xcbiB9XFxuIFxcbi1pbnQgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4te1xcbi1cXHRzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqYmVzdDtcXG4tXFxuLVxcdGJlc3QgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDAwKTtcXG4tXFx0aWYgKCFiZXN0IHx8IGJlc3QtXFx1MDAzZWVheCBcXHUwMDNjIDB4ODAwMDAwMDgpXFxuLVxcdFxcdGdvdG8gbm90X2ZvdW5kO1xcbi1cXHRiZXN0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAwOCk7XFxuLVxcdGlmIChiZXN0KVxcbi1cXHRcXHRyZXR1cm4gKGJlc3QtXFx1MDAzZWVheCBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiAweGZmO1xcbi1ub3RfZm91bmQ6XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBUaGlzIFxcXCJyYXdcXFwiIHZlcnNpb24gcmV0dXJucyB0aGUgcmVzZXJ2ZWQgR1BBIGJpdHMgd2l0aG91dCBhbnkgYWRqdXN0bWVudHMgZm9yXFxuICAqIGVuY3J5cHRpb24gdGVjaG5vbG9naWVzIHRoYXQgdXN1cnAgYml0cy4gIFRoZSByYXcgbWFzayBzaG91bGQgYmUgdXNlZCBpZiBhbmRcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmggYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaFxcbmluZGV4IDhkODYzZjQ1NTg1ZGUuLjQ2YmZlODY5OWU2N2YgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaFxcbkBAIC02OCw3ICs2OCw2IEBAIHZvaWQgX19pbml0IGt2bV9pbml0X3hzdGF0ZV9zaXplcyh2b2lkKTtcXG4gdTMyIHhzdGF0ZV9yZXF1aXJlZF9zaXplKHU2NCB4c3RhdGVfYnYsIGJvb2wgY29tcGFjdGVkKTtcXG4gXFxuIGludCBjcHVpZF9xdWVyeV9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLWludCBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdTY0IGt2bV92Y3B1X3Jlc2VydmVkX2dwYV9iaXRzX3JhdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgY3B1aWRfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUuaCBiL2FyY2gveDg2L2t2bS9tbXUuaFxcbmluZGV4IDJhZTdmOWVkNGNmODYuLmNjMzdlMjEwNzg3YzggMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS5oXFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS5oXFxuQEAgLTM4OSw2ICszODksMTUgQEAgc3RhdGljIGlubGluZSBncGFfdCBrdm1fdHJhbnNsYXRlX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXhjZXB0aW9uLCBwdGVfYWNjZXNzKTtcXG4gfVxcbiBcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGt2bV9tbXVfc2V0X21pcnJvcl9yb290X2xldmVsKHN0cnVjdCBrdm0gKmt2bSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBpbnQgbGV2ZWwpXFxuK3tcXG4rXFx0QlVJTERfQlVHX09OKGxldmVsICE9IDQgXFx1MDAyNlxcdTAwMjYgbGV2ZWwgIT0gNSk7XFxuK1xcbitcXHRrdm0tXFx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWwgPSBsZXZlbDtcXG4rXFx0a3ZtLVxcdTAwM2VhcmNoLmdmbl9kaXJlY3RfYml0cyA9IGdwYV90b19nZm4oQklUX1VMTChsZXZlbCA9PSA0ID8gNDcgOiA1MSkpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2hhc19taXJyb3JlZF90ZHAoY29uc3Qgc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuIFxcdHJldHVybiBrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG5pbmRleCBjNTE5ZThlOGQ2NDZmLi5hNTFhODUyYzFiZWMwIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuQEAgLTU5MjgsMTkgKzU5MjgsMTkgQEAgdm9pZCBfX2t2bV9tbXVfcmVmcmVzaF9wYXNzdGhyb3VnaF9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0aW50IG1heHBhO1xcbi1cXG4tXFx0aWYgKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKVxcbi1cXHRcXHRtYXhwYSA9IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcih2Y3B1KTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRtYXhwYSA9IGNwdWlkX21heHBoeWFkZHIodmNwdSk7XFxuLVxcbiBcXHQvKiB0ZHBfcm9vdF9sZXZlbCBpcyBhcmNoaXRlY3R1cmUgZm9yY2VkIGxldmVsLCB1c2UgaXQgaWYgbm9uemVybyAqL1xcbiBcXHRpZiAodGRwX3Jvb3RfbGV2ZWwpXFxuIFxcdFxcdHJldHVybiB0ZHBfcm9vdF9sZXZlbDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIElmIHRoZSBWTSBoYXMgbWlycm9yIHJvb3RzLCB0aGVuIHRoZSByb290IGxldmVsIGlzIGZpeGVkIGFzIHRoZSBnZm5cXG4rXFx0ICogdXNlZCB0byBzZWxlY3QgYmV0d2VlbiB0aGUgbm9ybWFsIGFuZCBtaXJyb3Igcm9vdCBtdXN0IGJlIGNvdmVyZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAodmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsKVxcbitcXHRcXHRyZXR1cm4gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsO1xcbitcXG4gXFx0LyogVXNlIDUtbGV2ZWwgVERQIGlmIGFuZCBvbmx5IGlmIGl0J3MgdXNlZnVsL25lY2Vzc2FyeS4gKi9cXG4tXFx0aWYgKG1heF90ZHBfbGV2ZWwgPT0gNSBcXHUwMDI2XFx1MDAyNiBtYXhwYSBcXHUwMDNjPSA0OClcXG4rXFx0aWYgKG1heF90ZHBfbGV2ZWwgPT0gNSBcXHUwMDI2XFx1MDAyNiBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpIFxcdTAwM2M9IDQ4KVxcbiBcXHRcXHRyZXR1cm4gNDtcXG4gXFxuIFxcdHJldHVybiBtYXhfdGRwX2xldmVsO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xcbmluZGV4IGIyNzJjMjA1ODZhNzQuLjZkOGU5YmVmZDllNjUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG5AQCAtNTYsOSArNTYsNiBAQFxcbiBib29sIGVuYWJsZV90ZHggX19yb19hZnRlcl9pbml0O1xcbiBtb2R1bGVfcGFyYW1fbmFtZWQodGR4LCBlbmFibGVfdGR4LCBib29sLCAwNDQ0KTtcXG4gXFxuLSNkZWZpbmUgVERYX1NIQVJFRF9CSVRfUFdMXzUgZ3BhX3RvX2dmbihCSVRfVUxMKDUxKSlcXG4tI2RlZmluZSBURFhfU0hBUkVEX0JJVF9QV0xfNCBncGFfdG9fZ2ZuKEJJVF9VTEwoNDcpKVxcbi1cXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnRkeF9zeXNpbmZvO1xcbiBcXG4gdm9pZCB0ZGhfdnBfcmRfZmFpbGVkKHN0cnVjdCB2Y3B1X3RkeCAqdGR4LCBjaGFyICp1Y2xhc3MsIHUzMiBmaWVsZCwgdTY0IGVycilcXG5AQCAtMTYwOSwxMCArMTYwNiw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Rkdm1jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIHZvaWQgdGR4X2xvYWRfbW11X3BnZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGhwYV90IHJvb3RfaHBhLCBpbnQgcGdkX2xldmVsKVxcbiB7XFxuLVxcdHU2NCBzaGFyZWRfYml0ID0gKHBnZF9sZXZlbCA9PSA1KSA/IFREWF9TSEFSRURfQklUX1BXTF81IDpcXG4tXFx0XFx0XFx0ICBURFhfU0hBUkVEX0JJVF9QV0xfNDtcXG4tXFxuLVxcdGlmIChLVk1fQlVHX09OKHNoYXJlZF9iaXQgIT0ga3ZtX2dmbl9kaXJlY3RfYml0cyh2Y3B1LVxcdTAwM2Vrdm0pLCB2Y3B1LVxcdTAwM2Vrdm0pKVxcbitcXHRpZiAoS1ZNX0JVR19PTihwZ2RfbGV2ZWwgIT0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsLCB2Y3B1LVxcdTAwM2Vrdm0pKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHR0ZF92bWNzX3dyaXRlNjQodG9fdGR4KHZjcHUpLCBTSEFSRURfRVBUX1BPSU5URVIsIHJvb3RfaHBhKTtcXG5AQCAtMjgyMyw5ICsyODE3LDkgQEAgc3RhdGljIGludCB0ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxcbiBcXHRrdm1fdGR4LVxcdTAwM2V4ZmFtID0gdGRfcGFyYW1zLVxcdTAwM2V4ZmFtO1xcbiBcXG4gXFx0aWYgKHRkX3BhcmFtcy1cXHUwMDNlY29uZmlnX2ZsYWdzIFxcdTAwMjYgVERYX0NPTkZJR19GTEFHU19NQVhfR1BBVylcXG4tXFx0XFx0a3ZtLVxcdTAwM2VhcmNoLmdmbl9kaXJlY3RfYml0cyA9IFREWF9TSEFSRURfQklUX1BXTF81O1xcbitcXHRcXHRrdm1fbW11X3NldF9taXJyb3Jfcm9vdF9sZXZlbChrdm0sIDUpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdGt2bS1cXHUwMDNlYXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBURFhfU0hBUkVEX0JJVF9QV0xfNDtcXG4rXFx0XFx0a3ZtX21tdV9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA0KTtcXG4gXFxuIFxcdGt2bV90ZHgtXFx1MDAzZXN0YXRlID0gVERfU1RBVEVfSU5JVElBTElaRUQ7XFxuIG91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDI6NTcuNzUyMDUzMDY5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTEwMTM0NTI0MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJJTlRFTF9URFhfSE9TVFwiLFxuICAgIFwiS1ZNX0lOVEVMX1REWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRkeF92bV9pb2N0bFwiLFxuICAgIFwidGR4X2xvYWRfbW11X3BnZFwiLFxuICAgIFwia3ZtX2luaXRfbW11XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBsb2dpYyB0byBkZXRlcm1pbmUgdGhlIFREUCAoVHdvLURpbWVuc2lvbmFsIFBhZ2luZykgbGV2ZWwgZm9yIHZpcnR1YWwgbWFjaGluZXMuIEl0IGludHJvZHVjZXMgYG1pcnJvcl9yb290X2xldmVsYCB0byBmaXggdGhlIHJvb3QgbGV2ZWwgZm9yIFZNcyB3aXRoIG1pcnJvciByb290cyAobGlrZSBURFggVk1zKSBhbmQgcmVtb3ZlcyBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBLVk0gTU1VIHBhZ2UgdGFibGUgc2V0dXAgYW5kIFREWCBpbml0aWFsaXphdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgY2FuIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDZkYjE5YzI0OWUwNjAyZWM1MmJjM2NlNTA4NDc1MTNhNDVlZjUyOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDIzOjAyOjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDI4Mzg0NzYxOWZmODguLmIyYTc0YzY5Y2M0YTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMTQwNiw2ICsxNDA2LDcgQEAgc3RydWN0IGt2bV9hcmNoIHtcbiBcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBzcGxpdF9kZXNjX2NhY2hlO1xuIFxuIFx0Z2ZuX3QgZ2ZuX2RpcmVjdF9iaXRzO1xuK1x0aW50IG1pcnJvcl9yb290X2xldmVsO1xuIFxuIFx0LypcbiBcdCAqIFNpemUgb2YgdGhlIENQVSdzIGRpcnR5IGxvZyBidWZmZXIsIGkuZS4gVk1YJ3MgUE1MIGJ1ZmZlci4gQSBaZXJvXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmMgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuaW5kZXggZGRiMDIyY2IyMDNhMi4uMzRjNjA5YTYwZWVmZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuQEAgLTQ4MywyMCArNDgzLDYgQEAgaW50IGNwdWlkX3F1ZXJ5X21heHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIDM2O1xuIH1cbiBcbi1pbnQgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqYmVzdDtcbi1cbi1cdGJlc3QgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDAwKTtcbi1cdGlmICghYmVzdCB8fCBiZXN0LVx1MDAzZWVheCBcdTAwM2MgMHg4MDAwMDAwOClcbi1cdFx0Z290byBub3RfZm91bmQ7XG4tXHRiZXN0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAwOCk7XG4tXHRpZiAoYmVzdClcbi1cdFx0cmV0dXJuIChiZXN0LVx1MDAzZWVheCBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweGZmO1xuLW5vdF9mb3VuZDpcbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIFRoaXMgXCJyYXdcIiB2ZXJzaW9uIHJldHVybnMgdGhlIHJlc2VydmVkIEdQQSBiaXRzIHdpdGhvdXQgYW55IGFkanVzdG1lbnRzIGZvclxuICAqIGVuY3J5cHRpb24gdGVjaG5vbG9naWVzIHRoYXQgdXN1cnAgYml0cy4gIFRoZSByYXcgbWFzayBzaG91bGQgYmUgdXNlZCBpZiBhbmRcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vY3B1aWQuaCBiL2FyY2gveDg2L2t2bS9jcHVpZC5oXG5pbmRleCA4ZDg2M2Y0NTU4NWRlLi40NmJmZTg2OTllNjdmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmhcbisrKyBiL2FyY2gveDg2L2t2bS9jcHVpZC5oXG5AQCAtNjgsNyArNjgsNiBAQCB2b2lkIF9faW5pdCBrdm1faW5pdF94c3RhdGVfc2l6ZXModm9pZCk7XG4gdTMyIHhzdGF0ZV9yZXF1aXJlZF9zaXplKHU2NCB4c3RhdGVfYnYsIGJvb2wgY29tcGFjdGVkKTtcbiBcbiBpbnQgY3B1aWRfcXVlcnlfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLWludCBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB1NjQga3ZtX3ZjcHVfcmVzZXJ2ZWRfZ3BhX2JpdHNfcmF3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gc3RhdGljIGlubGluZSBpbnQgY3B1aWRfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS5oIGIvYXJjaC94ODYva3ZtL21tdS5oXG5pbmRleCAyYWU3ZjllZDRjZjg2Li5jYzM3ZTIxMDc4N2M4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11LmhcbkBAIC0zODksNiArMzg5LDE1IEBAIHN0YXRpYyBpbmxpbmUgZ3BhX3Qga3ZtX3RyYW5zbGF0ZV9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdFx0XHRcdCAgICAgZXhjZXB0aW9uLCBwdGVfYWNjZXNzKTtcbiB9XG4gXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGt2bV9tbXVfc2V0X21pcnJvcl9yb290X2xldmVsKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHRcdFx0XHRcdCAgaW50IGxldmVsKVxuK3tcbitcdEJVSUxEX0JVR19PTihsZXZlbCAhPSA0IFx1MDAyNlx1MDAyNiBsZXZlbCAhPSA1KTtcbitcbitcdGt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsID0gbGV2ZWw7XG4rXHRrdm0tXHUwMDNlYXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBncGFfdG9fZ2ZuKEJJVF9VTEwobGV2ZWwgPT0gNCA/IDQ3IDogNTEpKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbWlycm9yZWRfdGRwKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuaW5kZXggYzUxOWU4ZThkNjQ2Zi4uYTUxYTg1MmMxYmVjMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC01OTI4LDE5ICs1OTI4LDE5IEBAIHZvaWQgX19rdm1fbW11X3JlZnJlc2hfcGFzc3Rocm91Z2hfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXG4gc3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRpbnQgbWF4cGE7XG4tXG4tXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKVxuLVx0XHRtYXhwYSA9IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcih2Y3B1KTtcbi1cdGVsc2Vcbi1cdFx0bWF4cGEgPSBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpO1xuLVxuIFx0LyogdGRwX3Jvb3RfbGV2ZWwgaXMgYXJjaGl0ZWN0dXJlIGZvcmNlZCBsZXZlbCwgdXNlIGl0IGlmIG5vbnplcm8gKi9cbiBcdGlmICh0ZHBfcm9vdF9sZXZlbClcbiBcdFx0cmV0dXJuIHRkcF9yb290X2xldmVsO1xuIFxuK1x0LypcbitcdCAqIElmIHRoZSBWTSBoYXMgbWlycm9yIHJvb3RzLCB0aGVuIHRoZSByb290IGxldmVsIGlzIGZpeGVkIGFzIHRoZSBnZm5cbitcdCAqIHVzZWQgdG8gc2VsZWN0IGJldHdlZW4gdGhlIG5vcm1hbCBhbmQgbWlycm9yIHJvb3QgbXVzdCBiZSBjb3ZlcmVkLlxuK1x0ICovXG4rXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbClcbitcdFx0cmV0dXJuIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWw7XG4rXG4gXHQvKiBVc2UgNS1sZXZlbCBURFAgaWYgYW5kIG9ubHkgaWYgaXQncyB1c2VmdWwvbmVjZXNzYXJ5LiAqL1xuLVx0aWYgKG1heF90ZHBfbGV2ZWwgPT0gNSBcdTAwMjZcdTAwMjYgbWF4cGEgXHUwMDNjPSA0OClcbitcdGlmIChtYXhfdGRwX2xldmVsID09IDUgXHUwMDI2XHUwMDI2IGNwdWlkX21heHBoeWFkZHIodmNwdSkgXHUwMDNjPSA0OClcbiBcdFx0cmV0dXJuIDQ7XG4gXG4gXHRyZXR1cm4gbWF4X3RkcF9sZXZlbDtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuaW5kZXggYjI3MmMyMDU4NmE3NC4uNmQ4ZTliZWZkOWU2NSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbkBAIC01Niw5ICs1Niw2IEBAXG4gYm9vbCBlbmFibGVfdGR4IF9fcm9fYWZ0ZXJfaW5pdDtcbiBtb2R1bGVfcGFyYW1fbmFtZWQodGR4LCBlbmFibGVfdGR4LCBib29sLCAwNDQ0KTtcbiBcbi0jZGVmaW5lIFREWF9TSEFSRURfQklUX1BXTF81IGdwYV90b19nZm4oQklUX1VMTCg1MSkpXG4tI2RlZmluZSBURFhfU0hBUkVEX0JJVF9QV0xfNCBncGFfdG9fZ2ZuKEJJVF9VTEwoNDcpKVxuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICp0ZHhfc3lzaW5mbztcbiBcbiB2b2lkIHRkaF92cF9yZF9mYWlsZWQoc3RydWN0IHZjcHVfdGR4ICp0ZHgsIGNoYXIgKnVjbGFzcywgdTMyIGZpZWxkLCB1NjQgZXJyKVxuQEAgLTE2MDksMTAgKzE2MDYsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV90ZHZtY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gdm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpXG4ge1xuLVx0dTY0IHNoYXJlZF9iaXQgPSAocGdkX2xldmVsID09IDUpID8gVERYX1NIQVJFRF9CSVRfUFdMXzUgOlxuLVx0XHRcdCAgVERYX1NIQVJFRF9CSVRfUFdMXzQ7XG4tXG4tXHRpZiAoS1ZNX0JVR19PTihzaGFyZWRfYml0ICE9IGt2bV9nZm5fZGlyZWN0X2JpdHModmNwdS1cdTAwM2Vrdm0pLCB2Y3B1LVx1MDAzZWt2bSkpXG4rXHRpZiAoS1ZNX0JVR19PTihwZ2RfbGV2ZWwgIT0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbCwgdmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHR0ZF92bWNzX3dyaXRlNjQodG9fdGR4KHZjcHUpLCBTSEFSRURfRVBUX1BPSU5URVIsIHJvb3RfaHBhKTtcbkBAIC0yODIzLDkgKzI4MTcsOSBAQCBzdGF0aWMgaW50IHRkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXG4gXHRrdm1fdGR4LVx1MDAzZXhmYW0gPSB0ZF9wYXJhbXMtXHUwMDNleGZhbTtcbiBcbiBcdGlmICh0ZF9wYXJhbXMtXHUwMDNlY29uZmlnX2ZsYWdzIFx1MDAyNiBURFhfQ09ORklHX0ZMQUdTX01BWF9HUEFXKVxuLVx0XHRrdm0tXHUwMDNlYXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBURFhfU0hBUkVEX0JJVF9QV0xfNTtcbitcdFx0a3ZtX21tdV9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA1KTtcbiBcdGVsc2Vcbi1cdFx0a3ZtLVx1MDAzZWFyY2guZ2ZuX2RpcmVjdF9iaXRzID0gVERYX1NIQVJFRF9CSVRfUFdMXzQ7XG4rXHRcdGt2bV9tbXVfc2V0X21pcnJvcl9yb290X2xldmVsKGt2bSwgNCk7XG4gXG4gXHRrdm1fdGR4LVx1MDAzZXN0YXRlID0gVERfU1RBVEVfSU5JVElBTElaRUQ7XG4gb3V0OlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDI6NTcuNzUyMDU1MjY5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcxMTUzODcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoaXMgS1ZNIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBhIGZldyBrZXkgS1ZNIGZpbGVzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGFuZCwgbm90YWJseSwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykuIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYGt2bV9ob3N0LmhgLCBgY3B1aWQuYy9oYCwgYG1tdS5oL2NgLCBhbmQgYHRkeC5jYC4gTXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nOyBhbnkgY2hhbmdlIHRoYXQgdG91Y2hlcyB0aGUgTU1VIGFuZCBURFggaW4gS1ZNIGlzIHdvcnRoIGEgY2xvc2VyIGxvb2suXG5cblRoZSBnaXN0IG9mIGl0IHNlZW1zIHRvIGJlIHJlbW92aW5nIGBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHJgIGFuZCBpbnRyb2R1Y2luZyBga3ZtX21tdV9zZXRfbWlycm9yX3Jvb3RfbGV2ZWxgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBob3cgS1ZNIGhhbmRsZXMgdGhlIGd1ZXN0J3MgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSwgcGFydGljdWxhcmx5IHdpdGggVERYLiBUaGV5J3JlIGNoYW5naW5nIGhvdyB0aGUgXCJURFAgbGV2ZWxcIiBpcyBkZXRlcm1pbmVkIHZpYSBga3ZtX21tdV9nZXRfdGRwX2xldmVsYCwgbm93IHJlbHlpbmcgb24gYHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWxgIGluc3RlYWQgb2YgdGhlIENQVUlEIHF1ZXJ5LiBUaGF0J3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZS5cblxuTm93LCBURFggaXMsIG9mIGNvdXJzZSwgaGFyZHdhcmUtZGVwZW5kZW50LiBCdXQsIEtWTSBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgYC9kZXYva3ZtYCBpb2N0bHMsIGFuZCBhbnkgY29kZSBwYXRoIHJlYWNoYWJsZSB0aHJvdWdoIHRob3NlIGlvY3RscyBpcyBmYWlyIGdhbWUgZm9yIGZ1enppbmcuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyBURFggcmVxdWlyZSBhY3R1YWwgcGh5c2ljYWwgaGFyZHdhcmUsIG9yIGlzIFFFTVUgc2ltdWxhdGluZyBpdCBzdWZmaWNpZW50bHk/IEludGVsJ3MgVERYIGlzIGEgYml0IG9mIGEgbW92aW5nIHRhcmdldCwgc28gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBRRU1VIHN0YXR1cy5cblxuTGV0IG1lIHRoaW5r4oCmIHRoZSBrZXkgaGVyZSBpcyBgbWlycm9yX3Jvb3RfbGV2ZWxgLiBUaGlzIGlzIHRoZSB2YXJpYWJsZSB0aGV5J3JlIHNldHRpbmcgaW4gYHRkeF90ZF9pbml0YCwgd2hpY2ggaXMgY2FsbGVkIHRocm91Z2ggdGhlIGBLVk1fTUVNT1JZX0VOQ1JZUFRfT1BgIGlvY3RsLiBTbywgdGhhdCdzIHRoZSBlbnRyeSBwb2ludCDigJMgdGhlIGlvY3RsLCBhbmQgdGhlIGNvZGUgcGF0aCB0aHJvdWdoIGB0ZHhfdGRfaW5pdGAgdGhhdCB1bHRpbWF0ZWx5IHNldHMgYG1pcnJvcl9yb290X2xldmVsYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXcgYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAgbGV2ZXJhZ2VzIHRoaXMgYG1pcnJvcl9yb290X2xldmVsYC4gTXkgcGxhbiBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhhdCB2YWx1ZSBpcyBzZXQgYW5kIHRoZW4gdXRpbGl6ZWQuIFRoaXMgaXMgYWxsIE1NVS1yZWxhdGVkLCBhbmQgcG90ZW50aWFsbHkgc2VjdXJpdHktY3JpdGljYWwsIHNvIGl0J3Mgd29ydGggdGhlIGRlZXAgZGl2ZS4gTGV0J3MgZGlnIGludG8gYHRkeF90ZF9pbml0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE1OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjAzOjA0LjQ2MzU5Nzk4M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg1Nzc4OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRkeF90ZF9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvdGR4LmM9MjM4Nz1zdGF0aWMgaW50IHNldHVwX3RkcGFyYW1zKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yNDMwLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MjQzMTpzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yNDMyLVxcdFxcdFxcdCB1NjQgKnNlYW1jYWxsX2VycilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9Mjc1Mz1ERUZJTkVfQ0xBU1ModGR4X3ZtX3N0YXRlX2d1YXJkLCB0ZHhfdm1fc3RhdGVfZ3VhcmRfdCxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjc1Ni1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjI3NTc6c3RhdGljIGludCB0ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjc1OC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI4MDktXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoyODEwOlxcdHJldCA9IF9fdGR4X3RkX2luaXQoa3ZtLCB0ZF9wYXJhbXMsIFxcdTAwMjZjbWQtXFx1MDAzZWh3X2Vycm9yKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI4MTEtXFx0aWYgKHJldClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MjkwMz1pbnQgdGR4X3ZtX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI5MjAtXFx0Y2FzZSBLVk1fVERYX0lOSVRfVk06XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoyOTIxOlxcdFxcdHIgPSB0ZHhfdGRfaW5pdChrdm0sIFxcdTAwMjZ0ZHhfY21kKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI5MjItXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjAzOjA2Ljk0OTM5MzYyM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNjkxNzc3NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS1ZNIE1NVSBDaGFuZ2UgZm9yIFBvdGVudGlhbCBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAuIEkgc2VlIHRoYXQgdGhlIGNoYW5nZXMsIHBhcnRpY3VsYXJseSB0aGUgcmVtb3ZhbCBvZiBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYCBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBjaGVja2luZyBgbWlycm9yX3Jvb3RfbGV2ZWxgLCBpbXBhY3QgZXZlbiBub24tVERYIFZNcyBpZiBgbWlycm9yX3Jvb3RfbGV2ZWxgIGlzIHNldCDigJMgd2hpY2gsIGFzIGZhciBhcyBJIGNhbiB0ZWxsIGZyb20gdGhlIGNvZGUsICpvbmx5KiBoYXBwZW5zIGluIGB0ZHhfdGRfaW5pdGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHBheSBhdHRlbnRpb24gdG8uIEFueSB0aW1lIHdlJ3JlIHRvdWNoaW5nIGNvcmUgS1ZNIE1NVSBsb2dpYyBsaWtlIHRoaXMsIGl0J3Mgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuVGhlIGNvZGUncyBsb2dpYyBpcyBzaGlmdGluZyBoZXJlLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgYSBURFgtc3BlY2lmaWMgZnVuY3Rpb24gYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAsIGJ1dCBub3cgaXQgc2VlbXMgbGlrZSB0aGUgcGF0Y2gncyByZXBsYWNpbmcgaXQgd2l0aCBhIGNhbGwgdG8gYGNwdWlkX21heHBoeWFkZHJgIHVubGVzcyBgbWlycm9yX3Jvb3RfbGV2ZWxgIGlzIHNldCwgaW4gd2hpY2ggY2FzZSBpdCB1c2VzIHRoYXQgdmFsdWUgYXMgYSBmaXhlZCBsZXZlbC4gQW5kIGlmIGl0IGlzbid0IHNldCwgdGhlbiB0aGUgY29kZSBjaG9vc2VzIHRoZSBtYXggb2YgNCBvciA1IGxldmVscy5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogSXMgdGhpcyBhcmVhIHdvcnRoIGZ1enppbmc/IEdpdmVuIHRoZSBjaGFuZ2VzIHRvIHRoZSBNTVUncyBiZWhhdmlvciwgSSdkIHNheSBhIHJlc291bmRpbmcgeWVzLiBBbnkgY2hhbmdlIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBhbHdheXMgd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueS4gTGV0IG1lIG1ha2UgYSBtZW50YWwgbm90ZSB0byBjb25maXJtIHRoaXMgY2hhbmdlIGRvZXNuJ3QgYnJlYWsgVERYLlxuXG5Ob3csIGxldCdzIGZpZ3VyZSBvdXQgdGhlIG5lY2Vzc2FyeSBidWlsZCBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSdsbCBuZWVkIGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCB0byBnZXQgc3RhcnRlZCwgb2J2aW91c2x5LiBCdXQgZ2l2ZW4gdGhlIFREWCBjb25uZWN0aW9uLCBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIGBJTlRFTF9URFhfSE9TVGAgaXMgcmVxdWlyZWQgZm9yIGZ1bGwgY292ZXJhZ2UuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjgxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjAzOjEzLjMxODU3NDQ2OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjY5MzU2NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fSU5URUxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9ODM9Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowMzoxNS41ODc5Mzc3ODlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDYwMDU0MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYEtWTV9JTlRFTF9URFhgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIGBLVk1fSU5URUxfVERYYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY3kgY2hhaW4uIEkga25vdyB0aGlzIGlzIGEgY29tcGxleCBhcmVhLCBwb3RlbnRpYWxseSBpbnZvbHZpbmcgQ1BVIGZlYXR1cmVzLCBzcGVjaWZpYyBrZXJuZWwgbW9kdWxlcywgYW5kIHBvdGVudGlhbGx5IGV2ZW4gZmlybXdhcmUgaW50ZXJhY3Rpb25zLlxuXG5NeSBpbml0aWFsIGxpbmUgb2YgaW5xdWlyeSB3aWxsIGJlIHRvIG1hcCBvdXQgYWxsIHRoZSBpbW1lZGlhdGUgZGVwZW5kZW5jaWVzLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggb3RoZXIgS1ZNIGNvbXBvbmVudHMsIEludGVsLXNwZWNpZmljIG1vZHVsZXMsIG9yIGV2ZW4gY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0aWVzIGFyZSByZXF1aXJlZCBmb3IgYEtWTV9JTlRFTF9URFhgIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIG5vdCBqdXN0IGRpcmVjdCBkZXBlbmRlbmNpZXMsIGJ1dCBhbHNvIHBvdGVudGlhbCBpbmRpcmVjdCByZWxhdGlvbnNoaXBzIGFuZCBhbnkgY29uZmxpY3RpbmcgbW9kdWxlIGNvbWJpbmF0aW9ucy5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBjaGFuZ2VzIGluIHVwc3RyZWFtIGtlcm5lbHMgb3IgZGlzdHJpYnV0aW9ucyBhbmQgaWYgdGhlcmUgYXJlIGFueSBkb2N1bWVudGVkIGNhdmVhdHMgb3IgcmVzdHJpY3Rpb25zLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYW55IHNlY3VyaXR5IGltcGxpY2F0aW9ucyBvZiBhbnkgb2YgdGhlIGRlcGVuZGVuY2llcywgYW5kIGhvdyB0aG9zZSBtaWdodCBpbXBhY3QgdGhlIG92ZXJhbGwgVERYIHNvbHV0aW9uLiBJJ2xsIGFsc28gYmUgd2F0Y2hpbmcgZm9yIGFueSByZWNlbnQgcGF0Y2hlcywgYnVnIGZpeGVzLCBvciBlbmhhbmNlbWVudHMgdGhhdCBtaWdodCB0b3VjaCBvbiByZWxhdGVkIGNvZGUgcGF0aHMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlIG9mIHRoZSBURFggbGFuZHNjYXBlIGFuZCBhbnl0aGluZyB0aGF0IG1pZ2h0IGJlIGJyb2tlbiwgb3IgdGhhdCBtaWdodCByZXF1aXJlIHVwZGF0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODc3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDM6MTguNjQ3OTk1MDIzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODgwMjE5NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9JTlRFTF9URFhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowMzoyMC43MzYwMjYxNzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQxNDgwODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEtWTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIEtWTSBjb25maWd1cmF0aW9uIG9uIHg4NiwgcHJvYmFibHkgcmVsYXRlZCB0byBhIHJlY2VudCBjaGFuZ2Ugb3IgYSBwZWN1bGlhciBiZWhhdmlvciBJJ20gdHJvdWJsZXNob290aW5nLiBMZXQncyBzdGFydCB3aXRoIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMTM0LiBUaGF0IGZpbGUgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB2YXJpb3VzIEtWTSBmZWF0dXJlcyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciBjb25maWd1cmVkIGZvciB4ODYuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIGRlcGVuZGVuY3kgdGhlcmUgdGhhdCdzIHJlbGV2YW50IHRvIHdoYXQgSSdtIGxvb2tpbmcgYXQuIEhvcGVmdWxseSwgaXTigJlzIG5vdCB0b28gZGVlcGx5IG5lc3RlZCB3aXRoaW4gaW5jbHVkZXMhIFRpbWUgdG8gZ2V0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyOTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowMzoyMy43Nzc1MDkxOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0XFx0ICBndWVzdHMgdmlhIGEgZGV2aWNlIG5vZGUsIGUuZy4gL2Rldi9zZ3hfdmVwYy5cXG4gMTMxOlxcdFxcbiAxMzI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxMzM6XFx0XFxuIDEzNDpcXHRjb25maWcgS1ZNX0lOVEVMX1REWFxcbiAxMzU6XFx0XFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4gMTM2OlxcdFxcdGRlZmF1bHQgeVxcbiAxMzc6XFx0XFx0ZGVwZW5kcyBvbiBJTlRFTF9URFhfSE9TVFxcbiAxMzg6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuIDEzOTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXFxuIDE0MDpcXHRcXHRoZWxwXFxuIDE0MTpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGxhdW5jaGluZyBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKVxcbiAxNDI6XFx0XFx0ICBjb25maWRlbnRpYWwgVk1zIG9uIEludGVsIHByb2Nlc3NvcnMuXFxuIDE0MzpcXHRcXG4gMTQ0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTQ1OlxcdFxcbiAxNDY6XFx0Y29uZmlnIEtWTV9BTURcXG4gMTQ3OlxcdFxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuIDE0ODpcXHRcXHRkZXBlbmRzIG9uIEtWTSBcXHUwMDI2XFx1MDAyNiAoQ1BVX1NVUF9BTUQgfHwgQ1BVX1NVUF9IWUdPTilcXG4gMTQ5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDM6MjMuNzc3NTk5NjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwMDM4NTM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFREWCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgc2V0dGluZyB1cCB0aGlzIFREWCBlbnZpcm9ubWVudC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBjb3JlIGNvbXBvbmVudHMgYXJlIGluIHBsYWNlLiBUaGUgb2J2aW91cyBvbmVzIGFyZSBgS1ZNYCBmb3IgdGhlIHZpcnR1YWxpemF0aW9uIGxheWVyLCBgS1ZNX0lOVEVMYCBmb3IgSW50ZWwtc3BlY2lmaWMgc3VwcG9ydCwgYW5kIHRoZSBURFgtc3BlY2lmaWMgbW9kdWxlczogYElOVEVMX1REWF9IT1NUYCBhbmQgYEtWTV9JTlRFTF9URFhgLiBCdXQgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBJTlRFTF9URFhfSE9TVGAuIFRoYXQgbW9kdWxlIGlzIGtleSwgc28gbGV0J3Mgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IGl0IHJlbGllcyBvbi4gV2UgZG9uJ3Qgd2FudCB0byBnZXQgYWhlYWQgb2Ygb3Vyc2VsdmVzIGFuZCBtaXNzIGEgY3JpdGljYWwgY29tcG9uZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODEzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowMzoyNi44Nzc5ODcwODRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTc5MjkzMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElOVEVMX1REWF9IT1NUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9MTg0ND1jb25maWcgWDg2X1VTRVJfU0hBRE9XX1NUQUNLXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjMtXFxuYXJjaC94ODYvS2NvbmZpZzoxODY0OmNvbmZpZyBJTlRFTF9URFhfSE9TVFxcbmFyY2gveDg2L0tjb25maWctMTg2NS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjAzOjI4Ljg3NTkyMzA1OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTgwNTA3OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB4ODYgQXJjaGl0ZWN0dXJlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhpcyB4ODYgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSB6ZXJvaW5nIGluIG9uIGBhcmNoL3g4Ni9LY29uZmlnYCwgYXJvdW5kIGxpbmUgMTg2NCwgcmlnaHQ/IFRoYXQncyB0eXBpY2FsbHkgd2hlcmUgdGhleSBzdGFydCBkZWZpbmluZyBvcHRpb25zIGluIHRlcm1zIG9mIENQVSBmZWF0dXJlcyBvciBjb21waWxlciBmbGFncy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgY29uZmlndXJhdGlvbnMgaW50ZXJyZWxhdGUgYW5kIHdoYXQgdGhlIHJhdGlvbmFsZSBpcy4gSXQgY291bGQgYmUgYSBzcGVjaWZpYyBmZWF0dXJlIEknbSBpbnRlcmVzdGVkIGluIG9yIGEgZGVidWdnaW5nIG9wdGlvbiB0aGF0J3MgcmVsZXZhbnQgdG8gYSBjdXJyZW50IGlzc3VlLiBMZXQncyBzZWUgaWYgdGhhdCBzZWN0aW9uIGhhcyBhIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBzeW1ib2wsIG9yIGEgZGVwZW5kZW5jeSBjaGFpbiB0aGF0IHRyaWdnZXJzIGEgY2VydGFpbiBidWlsZCBiZWhhdmlvci4gSSB3YW50IHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjb25maWd1cmF0aW9ucyBvbiB0aGUgZ2VuZXJhdGVkIGltYWdlIG9yIHJ1bnRpbWUgcGVyZm9ybWFuY2UuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCB0aGUga2VybmVsIG1haW50YWluZXJzIHRob3VnaHQgYWJvdXQgdGhhdCBzcGVjaWZpYyBzZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTQ0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDM6MzEuODU2NDMzNzAzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MDg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NjA6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni9zaHN0ay5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuMTg2MTpcXHRcXG4xODYyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xODYzOlxcdFxcbjE4NjQ6XFx0Y29uZmlnIElOVEVMX1REWF9IT1NUXFxuMTg2NTpcXHRcXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcXFwiXFxuMTg2NjpcXHRcXHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUxcXG4xODY3OlxcdFxcdGRlcGVuZHMgb24gWDg2XzY0XFxuMTg2ODpcXHRcXHRkZXBlbmRzIG9uIEtWTV9JTlRFTFxcbjE4Njk6XFx0XFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXFxuMTg3MDpcXHRcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXFxuMTg3MTpcXHRcXHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xcbjE4NzI6XFx0XFx0ZGVwZW5kcyBvbiBYODZfTUNFXFxuMTg3MzpcXHRcXHRoZWxwXFxuMTg3NDpcXHRcXHQgIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHByb3RlY3RzIGd1ZXN0IFZNcyBmcm9tIG1hbGljaW91c1xcbjE4NzU6XFx0XFx0ICBob3N0IGFuZCBjZXJ0YWluIHBoeXNpY2FsIGF0dGFja3MuICBUaGlzIG9wdGlvbiBlbmFibGVzIG5lY2Vzc2FyeSBURFhcXG4xODc2OlxcdFxcdCAgc3VwcG9ydCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcnVuIGNvbmZpZGVudGlhbCBWTXMuXFxuMTg3NzpcXHRcXG4xODc4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xODc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowMzozMS44NTY3ODY3OTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzMDEyODY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLZXJuZWwgQ29uZmlndXJhdGlvbiBNdXNpbmdzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiBhbmQgdHJ5aW5nIHRvIG1ha2Ugc29tZSBzZW5zZSBvZiB0aGUgZGVwZW5kZW5jaWVzLiBJdCBzZWVtcyBgSU5URUxfVERYX0hPU1RgIGlzIHJlbGlhbnQgb24gYSBmZXcgdGhpbmdzOiBgQ1BVX1NVUF9JTlRFTGAsIGBYODZfNjRgLCBgS1ZNX0lOVEVMYCwgYFg4Nl9YMkFQSUNgLCBgQ09OVElHX0FMTE9DYCwgYW5kIGBYODZfTUNFYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBhbGwgdGhlIG5lY2Vzc2FyeSBwaWVjZXMgZm9yIHJ1bm5pbmcgSW50ZWwgVERYIGluIGEgaG9zdCBlbnZpcm9ubWVudC5cblxuR2l2ZW4gdGhhdCwgSSB0aGluayB3ZSAqZGVmaW5pdGVseSogbmVlZCB0byBpbmNsdWRlIGBLVk1gIGFzIGEgYmFzZSwgdGhlbiBgS1ZNX0lOVEVMYCwgYW5kIG9mIGNvdXJzZSBgSU5URUxfVERYX0hPU1RgIGl0c2VsZiwgYW5kIGl0IGZvbGxvd3MgbG9naWNhbGx5IHRvIGFsc28gYnJpbmcgaW4gYEtWTV9JTlRFTF9URFhgLiBTZWVtcyBsaWtlIGEgc2FmZSBhbmQgbG9naWNhbCBhcHByb2FjaCB0byBlbnN1cmUgdGhlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGF0IHRoZSBsb3dlc3QgbGV2ZWwuXG5cbk5vdywgSSdtIHRyeWluZyB0byB6ZXJvIGluIG9uIHdoYXQgKmFjdHVhbGx5KiBuZWVkcyBteSBhdHRlbnRpb24uIExldCdzIHNlZS4uLiB3aGF0IGFyZSB0aGUga2V5IHN5bWJvbHMsIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZT8gQWgsIHJpZ2h0LCBga3ZtX21tdV9nZXRfdGRwX2xldmVsYC4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IG9uZS4gSSB0aGluayBpdCdzIHN0YXRpYyBpbmxpbmUgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBidXQgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBHb3R0YSBiZSB0aG9yb3VnaCB3aXRoIHRoZXNlIHRoaW5ncyEgTm8gcm9vbSBmb3IgYXNzdW1wdGlvbnMuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgdG8gY29uZmlybSBpdCdzIGFjdHVhbGx5IHN0YXRpYyBpbmxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MDYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowMzozNS43ODY5MTc3MDlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTkwODEwNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX21tdV9nZXRfdGRwX2xldmVsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTkxND12b2lkIF9fa3ZtX21tdV9yZWZyZXNoX3Bhc3N0aHJvdWdoX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTI4LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTkyOTpzdGF0aWMgaW5saW5lIGludCBrdm1fbW11X2dldF90ZHBfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTkzMC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTU9a3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NjUtXFx0cm9sZS5hZF9kaXNhYmxlZCA9ICFrdm1fYWRfZW5hYmxlZDtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5NjY6XFx0cm9sZS5sZXZlbCA9IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NjctXFx0cm9sZS5kaXJlY3QgPSB0cnVlO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02MDYwPXZvaWQga3ZtX2luaXRfc2hhZG93X25wdF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyNCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjA3OC1cXHRyb290X3JvbGUgPSBjcHVfcm9sZS5iYXNlO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjA3OTpcXHRyb290X3JvbGUubGV2ZWwgPSBrdm1fbW11X2dldF90ZHBfbGV2ZWwodmNwdSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MDgwLVxcdGlmIChyb290X3JvbGUubGV2ZWwgPT0gUFQ2NF9ST09UXzVMRVZFTCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02Nzg1PXN0YXRpYyBpbnQgX19rdm1fbW11X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11ICptbXUsIHN0cnVjdCBrdm1fcGFnZXdhbGsgKncpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY4MTEtXFx0ICovXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2ODEyOlxcdGlmICh0ZHBfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiBrdm1fbW11X2dldF90ZHBfbGV2ZWwodmNwdSkgXFx1MDAzZSBQVDMyRV9ST09UX0xFVkVMKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjgxMy1cXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDM6MzcuOTQ2MDA0MTQxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODQ2MjI3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbmxpbmUgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGBzdGF0aWMgaW5saW5lYCwgbWVhbmluZyB0aGUgY29tcGlsZXIgaXMgZ29pbmcgdG8gc2hvdmUgaXRzIGNvZGUgZGlyZWN0bHkgaW50byB3aGVyZXZlciBpdCdzIGNhbGxlZC4gTm8gZnVuY3Rpb24gY2FsbCBvdmVyaGVhZCwganVzdCBpbmxpbmVkIGdvb2RuZXNzLiBOb3csIGxldCdzIHNlZSB3aGVyZSB0aGlzIHRoaW5nIGlzIGFjdHVhbGx5ICp1c2VkKi4gSSBzZWUgaXQncyBjYWxsZWQgYnkgYGt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGVgLCBga3ZtX2luaXRfc2hhZG93X25wdF9tbXVgLCBhbmQgYF9fa3ZtX21tdV9jcmVhdGVgLiBIbW1tLCBpbnRlcmVzdGluZy4gSG9sZCBvbiBhIHNlY29uZOKApiBga3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZWAgcmluZ3MgYSBiZWxsLiBJc24ndCB0aGF0IG9uZSBvZiB0aG9zZSB1bmlvbiByb2xlIGZ1bmN0aW9ucz8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiBpdCdzIGFsc28gc3RhdGljLCBiZWNhdXNlIHRoYXQgY2FuIGltcGFjdCB0aGUgaW5saW5pbmcgc2lnbmlmaWNhbnRseS4gR290dGEgZW5zdXJlIHRoYXQgSSBmdWxseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBob3cgdGhpcyBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgS1ZNIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NzMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowMzo0MS4xMzA2MzA1NDVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDI5MTIxOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTQ9c3RhdGljIHVuaW9uIGt2bV9tbXVfcGFnZV9yb2xlXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTU1Omt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk1Ni1cXHRcXHRcXHRcXHR1bmlvbiBrdm1fY3B1X3JvbGUgY3B1X3JvbGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5Nzg9c3RhdGljIHZvaWQgaW5pdF9rdm1fdGRwX21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5ODEtXFx0c3RydWN0IGt2bV9tbXUgKmNvbnRleHQgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5yb290X21tdTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5ODI6XFx0dW5pb24ga3ZtX21tdV9wYWdlX3JvbGUgcm9vdF9yb2xlID0ga3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZSh2Y3B1LCBjcHVfcm9sZSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTgzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowMzo0My4zMzM1NDg5NDdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1MTY5MzE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsZXJzIG9mIGBpbml0X2t2bV90ZHBfbW11YCoqXG5cbk9rYXksIHNvIGBpbml0X2t2bV90ZHBfbW11YCBpcyBhbHNvIG1hcmtlZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFN0YXRpYyBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgaW4gYSBLVk0gY29udGV4dCwgb2Z0ZW4gaGludCBhdCBmdW5jdGlvbmFsaXR5IHRpZ2h0bHkgY291cGxlZCB3aXRoaW4gYSBzcGVjaWZpYyBtb2R1bGUgb3IgaW1wbGVtZW50YXRpb24gZGV0YWlsLiBUaGUgZmFjdCB0aGF0IGl0J3Mgc3RhdGljIHN1Z2dlc3RzIGl0cyBzY29wZSBpcyBkZWxpYmVyYXRlbHkgbGltaXRlZCwgd2hpY2ggY291bGQgbWVhbiBpdCdzIGluaXRpYWxpemluZyBzb21ldGhpbmcgdmVyeSBzcGVjaWZpYyBmb3IgVERQIE1NVSBvcGVyYXRpb25zIHdpdGhpbiBLVk0uXG5cbk15IG5leHQgbW92ZSBpcyB0byB0cmFjZSB0aGUgY2FsbGVycy4gVW5kZXJzdGFuZGluZyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgd2lsbCBnaXZlIG1lIHZpdGFsIGluc2lnaHRzIGludG8gaXRzIHJvbGUuIElzIGl0IG9ubHkgY2FsbGVkIGR1cmluZyBWTSBjcmVhdGlvbiwgb3IgaXMgaXQgdHJpZ2dlcmVkIG9uIHNwZWNpZmljIGV2ZW50cyB3aXRoaW4gdGhlIFZNJ3MgbGlmZWN5Y2xlPyBEb2VzIGl0IGdldCBjYWxsZWQgZnJvbSB0aGUgY29udGV4dCBvZiB2Q1BVIGluaXRpYWxpemF0aW9uLCBvciBpcyBpdCB0aWVkIHRvIHRoZSBwaHlzaWNhbCBwYWdlIHNldHVwPyBUaGUgYW5zd2VycyB3aWxsIGRpY3RhdGUgaXRzIGltcG9ydGFuY2UgYW5kIGxpa2VseSBwb2ludCB0byBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGFjdHMgb3IgcG9zc2libGUgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgZ3JhcGghXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDk5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDM6NDYuNzg1MjQ0OTk4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI4NzUwNTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluaXRfa3ZtX3RkcF9tbXVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz01OTU1PWt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTc3LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTk3ODpzdGF0aWMgdm9pZCBpbml0X2t2bV90ZHBfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NzktXFx0XFx0XFx0ICAgICB1bmlvbiBrdm1fY3B1X3JvbGUgY3B1X3JvbGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTYxNDg9dm9pZCBrdm1faW5pdF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTU2LVxcdFxcdGlmICh0ZHBfZW5hYmxlZClcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYxNTc6XFx0XFx0XFx0aW5pdF9rdm1fdGRwX21tdSh2Y3B1LCBjcHVfcm9sZSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTU4LVxcdFxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDM6NDkuMDE0MDA0Mzc5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDEzNzE0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvZGUgb2JzZXJ2YXRpb25zLCBwaHJhc2VkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczpcblxuKipLVk0gSW5pdGlhbGl6YXRpb24gYW5kIFREWCBDb25jZXJucyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiBga3ZtX2luaXRfbW11YCBhbmQgYGt2bV9pbml0X3NoYWRvd19ucHRfbW11YCBhcmUgYm90aCBkZWNsYXJlZCBhcyBub24tc3RhdGljLiBUaGF0J3MgZ29vZCB0byBrbm93LiBTdGFuZGFyZCBwcmFjdGljZSB3aXRoaW4gS1ZNLCBsaWtlbHkuIFRoZW4sIHRoZXJlJ3MgYHRkeF90ZF9pbml0YC4gQWgsIHRoYXQgb25lICppcyogc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCB1c2FnZSBjb25jZXJuLiBOb3csIHdoZXJlIGlzIGl0IGNhbGxlZCBmcm9tPyBMZXQgbWUgbG9vay4uLiBpdCdzIGNhbGxlZCBieSBgdGR4X3ZtX2lvY3RsYC4gSG1tLCBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIGB0ZHhfdm1faW9jdGxgIG5vdy4gSXMgdGhhdCBhbHNvIHN0YXRpYz8gTm8sIG5vIGl0J3Mgbm90LiBBbHJpZ2h0LCBJJ20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGludG8gYHRkeF92bV9pb2N0bGAgdG8gdW5kZXJzdGFuZCB0aGF0IGludGVyZmFjZSBhIGxpdHRsZSBiZXR0ZXIgYW5kIGhvdyBgdGR4X3RkX2luaXRgIGlzIGJlaW5nIHV0aWxpemVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNhbGwgZ3JhcGggYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA3NCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjAzOjUyLjc1NTM4MDYyN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ2ODYxNzUzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHhfdm1faW9jdGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODM5PXN0YXRpYyBpbnQgdnRfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODQzLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjg0NDpcXHRyZXR1cm4gdGR4X3ZtX2lvY3RsKGt2bSwgYXJncCk7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODQ1LX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9Mjg4OD1zdGF0aWMgaW50IHRkeF9nZXRfY21kKHZvaWQgX191c2VyICphcmdwLCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjkwMi1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjI5MDM6aW50IHRkeF92bV9pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjkwNC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaD0xMzM9dm9pZCB0ZHhfdm1fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oOjEzNDppbnQgdGR4X3ZtX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oLTEzNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDM6NTYuMjI0MDA0MDU5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTk0ODI5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyB0aGUgS1ZNIEVuY3J5cHRpb24gRW50cnkgUG9pbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgS1ZNIGVuY3J5cHRpb24gc3R1ZmYsIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBlbnRyeSBwb2ludC4gUmlnaHQsIGl0IGxvb2tzIGxpa2UgYHZ0X21lbV9lbmNfaW9jdGxgIG9yIHBvdGVudGlhbGx5IGB0ZHhfdm1faW9jdGxgIGFyZSB0aGUgY2FuZGlkYXRlcy4gSG9sZCBvbiBhIHNlY29uZCwgdGhhdCBgdnRfbWVtX2VuY19pb2N0bGAgZnVuY3Rpb27igKYgaXNuJ3QgdGhhdCBzdGF0aWNhbGx5IGRlZmluZWQgaW4gYGFyY2gveDg2L2t2bS92bXgvbWFpbi5jYD8gVGhhdCdzIGludGVyZXN0aW5nLCBsZXQgbWUgZG91YmxlLWNoZWNrIGhvdyBpdCdzIGFjdHVhbGx5IGFzc2lnbmVkIGFuZCB3aGVyZSBpdCdzIGNhbGxlZCBmcm9tLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MDcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowMzo1OS40ODM0OTAxMTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDA0MDM5MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidnRfbWVtX2VuY19pb2N0bFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L21haW4uYz04MzE9c3RhdGljIHZvaWQgdnRfc2V0dXBfbWNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTgzOC1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4Mzk6c3RhdGljIGludCB2dF9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODQwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDQ6MDEuNzIzOTAwMDkyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzQ3NjE4MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgdnRfbWVtX2VuY19pb2N0bGAgQXNzaWdubWVudCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHdoZXJlIHRoZSBgdnRfbWVtX2VuY19pb2N0bGAgdmFyaWFibGUgaXMgYmVpbmcgYXNzaWduZWQuIFRoaXMgbGlrZWx5IGluZGljYXRlcyBzb21lIGNyaXRpY2FsIGludGVyYWN0aW9uIHdpdGggbWVtb3J5IGVuY29kaW5nLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgYXNzaWdubWVudCB0byB1bmRlcnN0YW5kOlxuXG4qICAgKipXaGF0IGlzIGB2dF9tZW1fZW5jX2lvY3RsYD8qKiBJcyBpdCBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiwgYSBkYXRhIHN0cnVjdHVyZSwgb3Igc29tZSBvdGhlciBpZGVudGlmaWVyPyBVbmRlcnN0YW5kaW5nIHRoZSBkYXRhIHR5cGUgaXMgcGFyYW1vdW50LiBJJ2xsIG5lZWQgdG8gdXNlIG15IHByZWZlcnJlZCB0b29saW5nIGZvciBjb2RlIG5hdmlnYXRpb24gYW5kIGFuYWx5c2lzIHRvIGdldCBtb3JlIGNvbnRleHQgYXJvdW5kIHRoaXMgaWRlbnRpZmllci5cbiogICAqKldoZXJlIGlzIHRoaXMgYXNzaWdubWVudCBvY2N1cnJpbmc/KiogSXMgaXQgd2l0aGluIGEgZHJpdmVyLCB0aGUga2VybmVsIGNvcmUsIGEgdXNlcnNwYWNlIGFwcGxpY2F0aW9uLCBvciBzb21ldGhpbmcgZWxzZT8gVGhlIHNjb3BlIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgdGhlIGltcGFjdCBhbmQgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBDcm9zcy1yZWZlcmVuY2luZyBpdCBpcyBpbXBvcnRhbnQuXG4qICAgKipXaGF0IGFyZSB0aGUgc3Vycm91bmRpbmcgbGluZXMgb2YgY29kZT8qKiBFeGFtaW5pbmcgdGhlIGNvbnRleHQgYXJvdW5kIHRoZSBhc3NpZ25tZW50IGlzIGNydWNpYWwuIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgY2hlY2tzLCBlcnJvciBoYW5kbGluZyBtZWNoYW5pc21zLCBvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciB2YXJpYWJsZXM/XG4qICAgKipXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSB2YWx1ZSBiZWluZyBhc3NpZ25lZD8qKiBJcyB0aGlzIGEgZGlyZWN0IGFzc2lnbm1lbnQgZnJvbSBhbiBpbnB1dCwgb3IgaXMgaXQgZGVyaXZlZCBmcm9tIHNvbWUgY2FsY3VsYXRpb24/IEtub3dpbmcgdGhlIHNvdXJjZSBvZiB0aGUgdmFsdWUgaXMgaW1wb3J0YW50IGZvciBzZWN1cml0eSByZXZpZXcuXG4qICAgKipEb2VzIHRoaXMgcmVsYXRlIHRvIGFueSBrbm93biB2dWxuZXJhYmlsaXRpZXMgb3IgcGVyZm9ybWFuY2UgaXNzdWVzPyoqIEkgbmVlZCB0byBtZW50YWxseSBjb25uZWN0IHRoaXMgd2l0aCBteSBleGlzdGluZyBrbm93bGVkZ2Ugb2Ygc2ltaWxhciBjb21wb25lbnRzIGFuZCBwcmV2aW91cyBmaW5kaW5ncy5cblxuSSdsbCBzdGFydCBieSBkb2luZyBhIHF1aWNrIHNlYXJjaCBmb3IgdGhlIHZhcmlhYmxlLCBhbmQgSSdsbCBqdW1wIGludG8gbXkgcHJlZmVycmVkIGRlYnVnZ2VyIG9yIHN0YXRpYyBhbmFseXNpcyB0b29sIHRvIGZpbmQgb3V0IHdoZXJlIHRoZSBhc3NpZ25tZW50IGlzIGhhcHBlbmluZy4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTkyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDQ6MDUuNTU4NjY1NzlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjk4NTE0NzEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwubWVtX2VuY19pb2N0bC4qPS4qdnRfbWVtX2VuY19pb2N0bFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDQ6MDcuODg4NTMxMDUxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTYxOTA3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0vVk1YIE1lbW9yeSBFbmNyeXB0aW9uIElPQ1RMKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGhlcmUgYW5kIHBpbnBvaW50IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYHZ0X21lbV9lbmNfaW9jdGxgIHdpdGhpbiB0aGUgS1ZNL1ZNWCBhcmNoaXRlY3R1cmUuIEZvcmdldCBhbnkgcHJlbGltaW5hcnkgbWVhbmRlcmluZywgSSdtIGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoaXMgaXMgZ29pbmcgdG8gYmUgYnVyaWVkIHdpdGhpbiB0aGUgY29yZSBWTVggY29kZSwgc28gSSdtIHNraXBwaW5nIHRoZSBwZXJpcGhlcmFsIGZpbGVzLiBJJ2xsIHNlYXJjaCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhcmNoL3g4Ni9rdm0vdm14L21haW4uY2AuIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBodWIgZm9yIFZNWCBmdW5jdGlvbmFsaXR5LCBhbmQgdGhlIElPQ1RMIGhhbmRsZXIgZm9yIG1lbW9yeSBlbmNyeXB0aW9uIGhhcyB0byBiZSB0aGVyZS4gVGhpcyBpcyB3aGVyZSBJJ2xsIGZpbmQgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mIGhvdyB0aGlzIElPQ1RMIGlzIHByb2Nlc3NlZC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjEyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDQ6MTEuMTg0NzI1MjEzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Mjk3NTE4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2dF9tZW1fZW5jX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTgzMT1zdGF0aWMgdm9pZCB2dF9zZXR1cF9tY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODM4LVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjgzOTpzdGF0aWMgaW50IHZ0X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NDAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowNDoxMS4yNzc3MDU1NTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5MTE2NjEzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgeW91IGRlc2NyaWJlZDpcblxuKipTaW5nbGUgTWF0Y2ggVHJvdWJsZXNob290aW5nKipcblxuT2theSwgc28gSSd2ZSBvbmx5IGdvdCBvbmUgbWF0Y2guIFRoYXQncyBub3QgaWRlYWwsIGJ1dCBpdCdzIGVub3VnaCB0byBzdGFydCB3aXRoLiBMZXQncyBkaWcgaW50byB0aGUgY29kZS4gVGhlIHByb2JsZW0gbGlrZWx5IGxpZXMgd2l0aGluIHRoZSB4ODYgS1ZNIFZNWCBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC94ODYva3ZtL3ZteC9tYWluLmNgLiBNeSBodW5jaCBpcyB0aGF0IHRoZSByZWxldmFudCBjb2RlIHdpbGwgYmUgYXJvdW5kIGxpbmUgODM5LiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIHNvdXJjZSBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDE3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDQ6MTQuMTY4ODc0NTg4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vdm14L21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MzA6XFx0XFxuIDgzMTpcXHRzdGF0aWMgdm9pZCB2dF9zZXR1cF9tY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiA4MzI6XFx0e1xcbiA4MzM6XFx0XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuIDgzNDpcXHRcXHRcXHRyZXR1cm47XFxuIDgzNTpcXHRcXG4gODM2OlxcdFxcdHZteF9zZXR1cF9tY2UodmNwdSk7XFxuIDgzNzpcXHR9XFxuIDgzODpcXHRcXG4gODM5OlxcdHN0YXRpYyBpbnQgdnRfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxcbiA4NDA6XFx0e1xcbiA4NDE6XFx0XFx0aWYgKCFpc190ZChrdm0pKVxcbiA4NDI6XFx0XFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuIDg0MzpcXHRcXG4gODQ0OlxcdFxcdHJldHVybiB0ZHhfdm1faW9jdGwoa3ZtLCBhcmdwKTtcXG4gODQ1OlxcdH1cXG4gODQ2OlxcdFxcbiA4NDc6XFx0c3RhdGljIGludCB2dF92Y3B1X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkIF9fdXNlciAqYXJncClcXG4gODQ4OlxcdHtcXG4gODQ5OlxcdFxcdGlmICghaXNfdGRfdmNwdSh2Y3B1KSlcXG4gODUwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4NTE6XFx0XFxuIDg1MjpcXHRcXHRyZXR1cm4gdGR4X3ZjcHVfaW9jdGwodmNwdSwgYXJncCk7XFxuIDg1MzpcXHR9XFxuIDg1NDpcXHRcXG4gODU1OlxcdHN0YXRpYyBpbnQgdnRfdmNwdV9tZW1fZW5jX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCBfX3VzZXIgKmFyZ3ApXFxuIDg1NjpcXHR7XFxuIDg1NzpcXHRcXHRpZiAoIWlzX3RkX3ZjcHUodmNwdSkpXFxuIDg1ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODU5OlxcdFxcbiA4NjA6XFx0XFx0cmV0dXJuIHRkeF92Y3B1X3VubG9ja2VkX2lvY3RsKHZjcHUsIGFyZ3ApO1xcbiA4NjE6XFx0fVxcbiA4NjI6XFx0XFxuIDg2MzpcXHRzdGF0aWMgaW50IHZ0X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLFxcbiA4NjQ6XFx0XFx0XFx0XFx0XFx0ICAgICBib29sIGlzX3ByaXZhdGUpXFxuIDg2NTpcXHR7XFxuIDg2NjpcXHRcXHRpZiAoaXNfdGQoa3ZtKSlcXG4gODY3OlxcdFxcdFxcdHJldHVybiB0ZHhfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChrdm0sIHBmbiwgaXNfcHJpdmF0ZSk7XFxuIDg2ODpcXHRcXG4gODY5OlxcdFxcdHJldHVybiAwO1xcbiA4NzA6XFx0fVxcbiA4NzE6XFx0XFxuIDg3MjpcXHQjZGVmaW5lIHZ0X29wKG5hbWUpIHZ0XyMjbmFtZVxcbiA4NzM6XFx0I2RlZmluZSB2dF9vcF90ZHhfb25seShuYW1lKSB2dF8jI25hbWVcXG4gODc0OlxcdCNlbHNlIC8qIENPTkZJR19LVk1fSU5URUxfVERYICovXFxuIDg3NTpcXHQjZGVmaW5lIHZ0X29wKG5hbWUpIHZteF8jI25hbWVcXG4gODc2OlxcdCNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgTlVMTFxcbiA4Nzc6XFx0I2VuZGlmIC8qIENPTkZJR19LVk1fSU5URUxfVERYICovXFxuIDg3ODpcXHRcXG4gODc5OlxcdCNkZWZpbmUgVk1YX1JFUVVJUkVEX0FQSUNWX0lOSElCSVRTXFx0XFx0XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowNDoxNC4xNjkwMTE0NjhaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyOTAzNzI1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1hY3JvIEFzc2lnbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0J3MgdXNpbmcgbWFjcm9zIHRvIGRlZmluZSBgdnRfb3AobWVtX2VuY19pb2N0bClgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGEgY29udmVuaWVudCB3YXkgb2YgaGFuZGxpbmcgYSBmdW5jdGlvbiBjYWxsIGluIGEgd2F5IHRoYXQgbWF5IHJlZHVjZSBjb2RlIGR1cGxpY2F0aW9uLCBidXQgbm93IEkgbmVlZCB0byBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gVGhlIG1hY3JvIGl0c2VsZiBkb2Vzbid0IGdpdmUgbWUgdGhlIGZ1bGwgcGljdHVyZS4gTXkgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIHRyYWNrIGRvd24gd2hhdCBgbWVtX2VuY19pb2N0bGAgKmlzKi4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBmdW5jdGlvbiBvciB2YXJpYWJsZSBpcyBkZWZpbmVkLCBhbmQgYGFyY2gveDg2L2t2bS92bXgvbWFpbi5jYCBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5ODUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA0OjE3Ljc5ODA1MTg0OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg5MTY1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2VuY19pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L21haW4uYz04MzE9c3RhdGljIHZvaWQgdnRfc2V0dXBfbWNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTgzOC1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4Mzk6c3RhdGljIGludCB2dF9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODQwLXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg0Ni1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4NDc6c3RhdGljIGludCB2dF92Y3B1X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkIF9fdXNlciAqYXJncClcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NDgte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODg4PXN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDM0LVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwMzU6XFx0Lm1lbV9lbmNfaW9jdGwgPSB2dF9vcF90ZHhfb25seShtZW1fZW5jX2lvY3RsKSxcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDM2OlxcdC52Y3B1X21lbV9lbmNfaW9jdGwgPSB2dF9vcF90ZHhfb25seSh2Y3B1X21lbV9lbmNfaW9jdGwpLFxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwMzctXFx0LnZjcHVfbWVtX2VuY191bmxvY2tlZF9pb2N0bCA9IHZ0X29wX3RkeF9vbmx5KHZjcHVfbWVtX2VuY191bmxvY2tlZF9pb2N0bCksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA0OjE3Ljg3Njk3NDE1N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjkxMzcyMTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBURFggVk0gSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aCBmb3IgVERYIFZNcywgYW5kIGl0IGxvb2tzIGxpa2UgYHRkeF92bV9pb2N0bGAgaXMgdGhlIGtleSBlbnRyeSBwb2ludCwgaW52b2tlZCB0aHJvdWdoIGBrdm1feDg2X29wcy5tZW1fZW5jX2lvY3RsYC4gVGhpcyBtYWtlcyBzZW5zZSwgYXMgdGhhdCdzIHdoZXJlIHRoZSBURFgtc3BlY2lmaWMgc2V0dXAgd291bGQgYmVnaW4uIEFuZCwgd2l0aGluIHRoYXQsIGB0ZHhfdGRfaW5pdGAgaXMgY2FsbGVkLCB3aGljaCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBmdXJ0aGVyIHJlaW5mb3JjZXMgYHRkeF92bV9pb2N0bGAgYXMgdGhlIHByaW1hcnkgZm9jdXMuXG5cbkJ1dCBob2xkIG9uLCBJIHNob3VsZCBhbHNvIGxvb2sgYXQgdGhlIHN1cHBvcnRpbmcgZnVuY3Rpb25zLiBJIHNlZSB0aGF0IGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgIGlzIGNhbGxlZCBieSBga3ZtX2luaXRfbW11YCBhbmQgYGt2bV9pbml0X3NoYWRvd19ucHRfbW11YC4gSXQgc2VlbXMgbGlrZSB0aG9zZSB3b3VsZCBiZSBpbXBvcnRhbnQgdG8gdHJhY2ssIHRvbywgc2luY2UgdGhleSdyZSBpbnZvbHZlZCBpbiBNTVUgaW5pdGlhbGl6YXRpb24sIHJpZ2h0PyBTbyBsZXQncyBhZGQgYGt2bV9pbml0X21tdWAgYW5kIGBrdm1faW5pdF9zaGFkb3dfbnB0X21tdWAgdG8gdGhlIGZvY3VzIGxpc3QuXG5cbkhtbSwgd2FpdCwgYW0gSSBjb3JyZWN0PyBBcmUgYGt2bV9pbml0X21tdWAgYW5kIGBrdm1faW5pdF9zaGFkb3dfbnB0X21tdWAgaG90IHBhdGhzPyBObywgdGhleSBhcHBlYXIgdG8gYmUgY2FsbGVkIGR1cmluZyBNTVUgaW5pdGlhbGl6YXRpb24sIGxpa2VseSB0cmlnZ2VyZWQgYnkgdkNQVSBjcmVhdGlvbiBvciBhIHJvbGUgY2hhbmdlLiBTdGlsbCwgSSBzaG91bGQgcmV2aWV3IHRoZSBjb2RlIHRvIGVuc3VyZSB0aGF0IG5vdGhpbmcgZ2V0cyBtaXNzZWQgaGVyZS4gTGV0J3MgZGlnIGludG8gYGt2bV9pbml0X21tdWAgYW5kIGBrdm1faW5pdF9zaGFkb3dfbnB0X21tdWAgZm9yIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Njk0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA0OjIyLjU2ODM1MDMzOFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzNzE2OTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1faW5pdF9tbXVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS5oPTE0MT12b2lkIGt2bV9tbXVfc2V0X2VwdF9tYXNrcyhib29sIGhhc19hZF9iaXRzKTtcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTQyLVxcbmFyY2gveDg2L2t2bS9tbXUuaDoxNDM6dm9pZCBrdm1faW5pdF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTQ0LXZvaWQga3ZtX2luaXRfc2hhZG93X25wdF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyNCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjE0Nj1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2luaXRfc2hhZG93X2VwdF9tbXUpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjE0Ny1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYxNDg6dm9pZCBrdm1faW5pdF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjE0OS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxNjEtfVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjE2MjpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2luaXRfbW11KTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxNjMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTYxODc9dm9pZCBrdm1fbW11X3Jlc2V0X2NvbnRleHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTg5LVxcdGt2bV9tbXVfdW5sb2FkKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjE5MDpcXHRrdm1faW5pdF9tbXUodmNwdSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTkxLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9yZWdzLmM9MjIwPXZvaWQga3ZtX3Bvc3Rfc2V0X2NyMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgb2xkX2NyMCwgdW5zaWduZWQgbG9uZyBjcjApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcmVncy5jLTIzNC1cXHRcXHRpZiAodGRwX2VuYWJsZWQpIHtcXG5hcmNoL3g4Ni9rdm0vcmVncy5jOjIzNTpcXHRcXHRcXHRrdm1faW5pdF9tbXUodmNwdSk7XFxuYXJjaC94ODYva3ZtL3JlZ3MuYy0yMzYtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz03MTQ9c3RhdGljIGludCBuZXN0ZWRfc3ZtX2xvYWRfY3IzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjMsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTcyOS1cXHQvKiBSZS1pbml0aWFsaXplIHRoZSBNTVUsIGUuZy4gdG8gcGljayB1cCBDUjQgTU1VIHJvbGUgY2hhbmdlcy4gKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjczMDpcXHRrdm1faW5pdF9tbXUodmNwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy03MzEtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTEyMjc9c3RhdGljIGludCBuZXN0ZWRfdm14X2xvYWRfY3IzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjMsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTEyNDktXFx0LyogUmUtaW5pdGlhbGl6ZSB0aGUgTU1VLCBlLmcuIHRvIHBpY2sgdXAgQ1I0IE1NVSByb2xlIGNoYW5nZXMuICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoxMjUwOlxcdGt2bV9pbml0X21tdSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTEyNTEtXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9OTM0MD1pbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk0MTUtXFx0a3ZtX3ZjcHVfcmVzZXQodmNwdSwgZmFsc2UpO1xcbmFyY2gveDg2L2t2bS94ODYuYzo5NDE2OlxcdGt2bV9pbml0X21tdSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTQxNy1cXHR2Y3B1X3B1dCh2Y3B1KTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9ODc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX29wcyBrdm1fbW11X25vdGlmaWVyX29wcyA9IHtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtODg3LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6ODg4OnN0YXRpYyBpbnQga3ZtX2luaXRfbW11X25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSlcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTg4OS17XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTEwOTk9c3RhdGljIHN0cnVjdCBrdm0gKmt2bV9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlLCBjb25zdCBjaGFyICpmZG5hbWUpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExODgtXFxudmlydC9rdm0va3ZtX21haW4uYzoxMTg5OlxcdHIgPSBrdm1faW5pdF9tbXVfbm90aWZpZXIoa3ZtKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExOTAtXFx0aWYgKHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA0OjI0LjkwNTUzMDA0OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODgwNTY2NjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gVERYIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gYGt2bV9pbml0X21tdWAgaXMgdHJpZ2dlcmVkIGR1cmluZyB2Q1BVIGNyZWF0aW9uIGFuZCB3aGVuZXZlciBDUjAvQ1IzIHJlZ2lzdGVycyBhcmUgbW9kaWZpZWQuIFRoYXQncyBhIHJlYXNvbmFibGUgZnJlcXVlbmN5LCBub3RoaW5nIGV4Y2VwdGlvbmFsbHkgaGlnaCwgYnV0IGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdG8ga2VlcCBhbiBleWUgb24gZm9yIHBlcmZvcm1hbmNlLiBIb2xkIG9uLCBgdGR4X3ZtX2lvY3RsYCBpcyBhY3R1YWxseSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgVERYIGluaXRpYWxpemF0aW9uLCB3aGljaCBpcyBtb3JlIGNyaXRpY2FsLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuXG5cbk5vdywgdGhpcyBwYXRjaCByZW1vdmVzIGBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHJgIGFuZCBpbnN0ZWFkIHV0aWxpemVzIGBjcHVpZF9tYXhwaHlhZGRyYCBmb3IgVERYIFZNcywgYnV0IG9ubHkgaWYgdGhlIGBtaXJyb3Jfcm9vdF9sZXZlbGAgaXNuJ3QgY29uZmlndXJlZC4gVGhhdCdzIGFuIGludGVyZXN0aW5nIGFyY2hpdGVjdHVyYWwgZGVjaXNpb24uIEhtbSwgbGV0IG1lIHRoaW5rLi4uIEkgcmVjYWxsIHNlZWluZyBgY3B1aWRfbWF4cGh5YWRkcmAgaW52b2tlZCBpbiBga3ZtX21tdV9nZXRfdGRwX2xldmVsYC4gR2l2ZW4gaXRzIG5ldyByb2xlLCBJIHNob3VsZCBwcm9iYWJseSBkZWx2ZSBkZWVwZXIgYW5kIGV4YW1pbmUgYGNwdWlkX21heHBoeWFkZHJgIG1vcmUgY2xvc2VseS4gSXQncyB0aW1lIHRvIGNoZWNrIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjA4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA0OjI4Ljc4NjA5OTA2NloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzOTg2OTI1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjcHVpZF9tYXhwaHlhZGRyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9jcHVpZC5jPTQ5MT11NjQga3ZtX3ZjcHVfcmVzZXJ2ZWRfZ3BhX2JpdHNfcmF3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy00OTIte1xcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjQ5MzpcXHRyZXR1cm4gcnN2ZF9iaXRzKGNwdWlkX21heHBoeWFkZHIodmNwdSksIDYzKTtcXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy00OTQtfVxcbi0tXFxuYXJjaC94ODYva3ZtL2NwdWlkLmg9NzE9dTY0IGt2bV92Y3B1X3Jlc2VydmVkX2dwYV9iaXRzX3JhdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS9jcHVpZC5oLTcyLVxcbmFyY2gveDg2L2t2bS9jcHVpZC5oOjczOnN0YXRpYyBpbmxpbmUgaW50IGNwdWlkX21heHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9jcHVpZC5oLTc0LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTkyOT1zdGF0aWMgaW5saW5lIGludCBrdm1fbW11X2dldF90ZHBfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTQyLVxcdC8qIFVzZSA1LWxldmVsIFREUCBpZiBhbmQgb25seSBpZiBpdCdzIHVzZWZ1bC9uZWNlc3NhcnkuICovXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTQzOlxcdGlmIChtYXhfdGRwX2xldmVsID09IDUgXFx1MDAyNlxcdTAwMjYgY3B1aWRfbWF4cGh5YWRkcih2Y3B1KSBcXHUwMDNjPSA0OClcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NDQtXFx0XFx0cmV0dXJuIDQ7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oPTY4OD1zdGF0aWMgaW5saW5lIGJvb2wgdm14X25lZWRfcGZfaW50ZXJjZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmgtNjkzLVxcdHJldHVybiBhbGxvd19zbWFsbGVyX21heHBoeWFkZHIgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oOjY5NDpcXHQgICAgICAgY3B1aWRfbWF4cGh5YWRkcih2Y3B1KSBcXHUwMDNjIGt2bV9ob3N0Lm1heHBoeWFkZHI7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguaC02OTUtfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oPTExNzI9dm9pZCB2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmgtMTE3NC1cXHRcXHRcXHQgICAgIHUzMiB2YWx1ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oOjExNzU6dm9pZCB2Y3B1X3NldF9jcHVpZF9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggbWF4cGh5YWRkcik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oLTExNzYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA0OjMxLjAyNTk3NjM1N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjA4NDYxNDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0vVERYIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBLVk0vVERYIHBlcnNwZWN0aXZlLiBJIHNlZSB0aGUgY2hhbmdlcyB0b3VjaCBga3ZtX21tdV9nZXRfdGRwX2xldmVsYCBhbmQgYHRkeF90ZF9pbml0YC4gYHRkeF90ZF9pbml0YCBpcyBzdGF0aWMsIHdoaWNoIHRlbGxzIG1lIGl0J3MgbGlrZWx5IGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbi4gIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzICp3aGVyZSogdGhhdCBzdGF0aWMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20sIGFuZCBpdCdzIGB0ZHhfdm1faW9jdGxgLiBgdGR4X3ZtX2lvY3RsYCBpcyBub24tc3RhdGljLCBzbyB0aGF0IGltbWVkaWF0ZWx5IHB1dHMgaXQgb24gbXkgcmFkYXIuIEl0J3MgYSBrZXkgZW50cnkgcG9pbnQgZm9yIFREWCBWTSBvcGVyYXRpb25zLiBJJ2xsIGZsYWcgdGhhdCBhcyBhIGZvY3VzIHBvaW50IGZvciBhbmFseXNpcy5cblxuSSBhbHNvIG5lZWQgdG8gc2VlIHdoZXJlIGl0J3MgY2FsbGVkLiBBbmQgYGt2bV9pbml0X21tdWAgaXMgYW5vdGhlciBnb29kIHN5bWJvbC5cblxuTGV0IG1lIHZlcmlmeSB0aGF0IGB0ZHhfdm1faW9jdGxgIGlzbid0IHN0YXRpYy4gWWVwLCBub24tc3RhdGljIGNvbmZpcm1zIGl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUuICBBbnl0aGluZyBlbHNlPyAgQWgsIGBrdm1fbW11X3NldF9taXJyb3Jfcm9vdF9sZXZlbGAgaXMgc3RhdGljIGlubGluZSwgc28gcHJvYmFibHkgbm90IGEgbWFqb3IgcGxheWVyIGhlcmUuXG5cblRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGB0ZHhfbG9hZF9tbXVfcGdkYC4gTm93IEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBjb2RlIGNoYW5nZXM6XG5gYGBjXG4gdm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpXG4ge1xuLVx0dTY0IHNoYXJlZF9iaXQgPSAocGdkX2xldmVsID09IDUpID8gVERYX1NIQVJFRF9CSVRfUFdMXzUgOlxuLVx0XHRcdCAgVERYX1NIQVJFRF9CSVRfUFdMXzQ7XG4tXG4tXHRpZiAoS1ZNX0JVR19PTihzaGFyZWRfYml0ICE9IGt2bV9nZm5fZGlyZWN0X2JpdHModmNwdS1cdTAwM2Vrdm0pLCB2Y3B1LVx1MDAzZWt2bSkpXG4rXHRpZiAoS1ZNX0JVR19PTihwZ2RfbGV2ZWwgIT0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbCwgdmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRyZXR1cm47XG5gYGBcbk9rYXksIHRoZSBrZXkgY2hhbmdlIGluIGB0ZHhfbG9hZF9tbXVfcGdkYCBpcyB0aGlzOiB0aGUgb2xkIGBzaGFyZWRfYml0YCBjaGVjayBiYXNlZCBvbiBgcGdkX2xldmVsYCBpcyByZXBsYWNlZCBieSBhIGNoZWNrIGFnYWluc3QgYHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWxgLiAgVGhpcyBzdWdnZXN0cyB0aGUgYG1pcnJvcl9yb290X2xldmVsYCBpcyBub3cgdGhlIGF1dGhvcml0YXRpdmUgc291cmNlIG9mIHRydXRoLiBJdCBsb29rcyBsaWtlIGl0J3Mgc2ltcGxpZnlpbmcgdGhlIGxvZ2ljIGFuZCBjb25zb2xpZGF0aW5nIHNvbWUgbGV2ZWwgc2V0dGluZ3MuIEkgd2lsbCBuZWVkIHRvIGxvb2sgaW50byBob3cgYW5kIHdoZXJlIHRoaXMgbmV3IGBtaXJyb3Jfcm9vdF9sZXZlbGAgaXMgc2V0IGFuZCB1c2VkIG5vdy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYHRkeF9sb2FkX21tdV9wZ2RgIGlzIG5vbi1zdGF0aWMgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3NDIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDQ6MzcuMjM0NDQwOTFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDQ1ODM4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGR4X2xvYWRfbW11X3BnZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L21haW4uYz02MTM9c3RhdGljIHZvaWQgdnRfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MTYtXFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo2MTc6XFx0XFx0dGR4X2xvYWRfbW11X3BnZCh2Y3B1LCByb290X2hwYSwgcGdkX2xldmVsKTtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MTgtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0xNTg2PXN0YXRpYyBpbnQgaGFuZGxlX3Rkdm1jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTYwNi1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjE2MDc6dm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNjA4LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oPTE2MD12b2lkIHRkeF9mbHVzaF90bGJfYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg6MTYxOnZvaWQgdGR4X2xvYWRfbW11X3BnZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGhwYV90IHJvb3RfaHBhLCBpbnQgcm9vdF9sZXZlbCk7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMTYyLWludCB0ZHhfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA0OjM5LjQzOTA2MjMyWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzMDQ5MTY3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgVGhpcyBLVk0gTU1VIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZvciBmdXp6aW5nLiBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgS1ZNIE1NVSBwYXRjaCBhbmQgaGF2ZSBpZGVudGlmaWVkIHNvbWUga2V5IGFyZWFzLlxuXG5GaXJzdCwgSSBub3RpY2VkIHRoYXQgYHRkeF9sb2FkX21tdV9wZ2RgIGlzIG5vbi1zdGF0aWMsIGFuZCBpbXBvcnRhbnRseSwgaXQncyBjYWxsZWQgYnkgYHZ0X2xvYWRfbW11X3BnZGAsIHdoaWNoIGlzIGFzc2lnbmVkIHRvIGBrdm1feDg2X29wcy5sb2FkX21tdV9wZ2RgLiBUaGlzIG1ha2VzIGB0ZHhfbG9hZF9tbXVfcGdkYCBhIGdvb2QgcG90ZW50aWFsIGZvY3VzIHN5bWJvbC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIFRoaXMgd2FycmFudHMgYSBkZWVwZXIgbG9vay5cblxuSSd2ZSBnb3QgdGhyZWUgY29yZSBmb2N1cyBzeW1ib2xzOiBgdGR4X3ZtX2lvY3RsYCwgYHRkeF9sb2FkX21tdV9wZ2RgLCBhbmQgYGt2bV9pbml0X21tdWAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBhbmQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIE1NVSBtb2RpZmljYXRpb25zLlxuXG5Gb3IgY29uZmlndXJhdGlvbnMsIEknbGwgbmVlZCBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBJTlRFTF9URFhfSE9TVGAsIGFuZCBgS1ZNX0lOVEVMX1REWGAuIGBLVk1fSU5URUxfVERYYCBkZXBlbmRzIG9uIGBJTlRFTF9URFhfSE9TVGAsIHNvIEknbGwgaW5jbHVkZSBib3RoIHRvIGJlIHNhZmUuIEl0IGxvb2tzIGxpa2UgYEtWTV9JTlRFTF9URFhgIGlzIHRoZSBjb3JyZWN0IG5hbWUuIEkndmUgZG91YmxlLWNoZWNrZWQgdGhvc2UgY29uZmlndXJhdGlvbnMgdG8gY29uZmlybS5cblxuSSd2ZSBhbHNvIGNvbmZpcm1lZCB0aGUgbmFtZXMgb2YgdGhlIGZ1bmN0aW9uczsgYHRkeF92bV9pb2N0bGAgaXMgdGhlIGNvcnJlY3QgbmFtZSwgYXMgaXMgYHRkeF9sb2FkX21tdV9wZ2RgIGFuZCBga3ZtX2luaXRfbW11YC5cblxuSSBicmllZmx5IGNvbnNpZGVyZWQgYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAsIGJ1dCBpdCdzIHN0YXRpYyBpbmxpbmUsIHNvIGl0J3Mgbm90IGEgc3VpdGFibGUgc3ltYm9sIHRvIHRhcmdldCBkaXJlY3RseS4gSG93ZXZlciwgdGhlIGNoYW5nZXMgd2l0aGluIHRoYXQgaW5saW5lIGZ1bmN0aW9uIGFyZSBpbmRpcmVjdGx5IGNvdmVyZWQgYnkgdGhlIGZ1enppbmcgb2YgYGt2bV9pbml0X21tdWAsIHdoaWNoIGhhbmRsZXMgTU1VIGluaXRpYWxpemF0aW9uLCBpbmNsdWRpbmcgdGhlIFREUCBsZXZlbCBkZXRlcm1pbmF0aW9uLCBmb3IgYm90aCBURFggYW5kIG5vbi1URFggVk1zLlxuXG5KdXN0IHRvIHJlY2FwIG15IHJlYXNvbmluZzogVGhpcyBwYXRjaCBtZXNzZXMgd2l0aCBjb3JlIEtWTSBNTVUgbG9naWMuIEl0J3MgYWJvdXQgZGV0ZXJtaW5pbmcgdGhlIFREUCBsZXZlbCBmb3IgVk1zLCBpbnRyb2R1Y2VzIGBtaXJyb3Jfcm9vdF9sZXZlbGAsIGFuZCByZW1vdmVzIGBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHJgLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCB0aGUgZnVuZGFtZW50YWwgcGFnZSB0YWJsZSBzZXR1cCB3aXRoaW4gS1ZNLCBlc3BlY2lhbGx5IGZvciBURFggVk1zLCBhbmQgdGhlIGluaXRpYWwgTU1VIGNvbmZpZ3VyYXRpb24uIEl0J3MgYWxsIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3Rscy4gVGhpcyBtYWtlcyBpdCByaXBlIGZvciBmdXp6aW5nLlxuXG5TbywgdG8gc3VtbWFyaXplLCBJJ20gY29uZmlkZW50IGluIHRoZXNlIHNldHRpbmdzOlxuXG4qICAgYFdvcnRoRnV6emluZzogdHJ1ZWBcbiogICBgRm9jdXNTeW1ib2xzOiB0ZHhfdm1faW9jdGxgLCBgdGR4X2xvYWRfbW11X3BnZGAsIGBrdm1faW5pdF9tbXVgXG4qICAgYEVuYWJsZUNvbmZpZ3M6IEtWTWAsIGBLVk1fSU5URUxgLCBgSU5URUxfVERYX0hPU1RgLCBgS1ZNX0lOVEVMX1REWGBcblxuSSB0aGluayB0aGlzIGNvdmVycyB0aGUgY3JpdGljYWwgYXJlYXMuIFRpbWUgdG8gbW92ZSBvbiBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjE0LCJPdXRwdXRUb2tlbnMiOjE4OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowNDo0Ny43NDM5ODIwNjRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI1OTA1MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJJTlRFTF9URFhfSE9TVFwiLFxuICAgIFwiS1ZNX0lOVEVMX1REWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRkeF92bV9pb2N0bFwiLFxuICAgIFwidGR4X2xvYWRfbW11X3BnZFwiLFxuICAgIFwia3ZtX2luaXRfbW11XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBsb2dpYyB0byBkZXRlcm1pbmUgdGhlIFREUCAoVHdvLURpbWVuc2lvbmFsIFBhZ2luZykgbGV2ZWwgZm9yIHZpcnR1YWwgbWFjaGluZXMuIEl0IGludHJvZHVjZXMgYG1pcnJvcl9yb290X2xldmVsYCB0byBmaXggdGhlIHJvb3QgbGV2ZWwgZm9yIFZNcyB3aXRoIG1pcnJvciByb290cyAobGlrZSBURFggVk1zKSBhbmQgcmVtb3ZlcyBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBLVk0gTU1VIHBhZ2UgdGFibGUgc2V0dXAgYW5kIFREWCBpbml0aWFsaXphdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgY2FuIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiSU5URUxfVERYX0hPU1RcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0ZHhfdm1faW9jdGxcIixcbiAgICBcInRkeF9sb2FkX21tdV9wZ2RcIixcbiAgICBcImt2bV9pbml0X21tdVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgbG9naWMgdG8gZGV0ZXJtaW5lIHRoZSBURFAgKFR3by1EaW1lbnNpb25hbCBQYWdpbmcpIGxldmVsIGZvciB2aXJ0dWFsIG1hY2hpbmVzLiBJdCBpbnRyb2R1Y2VzIGBtaXJyb3Jfcm9vdF9sZXZlbGAgdG8gZml4IHRoZSByb290IGxldmVsIGZvciBWTXMgd2l0aCBtaXJyb3Igcm9vdHMgKGxpa2UgVERYIFZNcykgYW5kIHJlbW92ZXMgYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgS1ZNIE1NVSBwYWdlIHRhYmxlIHNldHVwIGFuZCBURFggaW5pdGlhbGl6YXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGNhbiBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA0OjQ3Ljg4NjU4MTI0M1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEwNDkzNDE2OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowNDo0Ny44ODcxODA3NDNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDEwNDg3MzY0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBob3cgdGhlIHJvb3QgcGFnZSB0YWJsZSBsZXZlbCBpcyBkZXRlcm1pbmVkIGZvciBURFggVk1zIGluIEtWTSBieSBpbnRyb2R1Y2luZyBhIG5ldyBmaWVsZCBgbWlycm9yX3Jvb3RfbGV2ZWxgIGluIGBzdHJ1Y3Qga3ZtX2FyY2hgLiBUaGlzIGZpZWxkIGlzIHNldCBkdXJpbmcgVERYIGluaXRpYWxpemF0aW9uLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIGFwcHJvYWNoIG9mIHF1ZXJ5aW5nIENQVUlEIGZvciB0aGUgbWF4aW11bSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzLiBTaW5jZSBgc3RydWN0IGt2bWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrdnphbGxvYygpYCAod2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5KSwgdGhlIG5ldyBgbWlycm9yX3Jvb3RfbGV2ZWxgIGZpZWxkIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGFueSBjb21wbGV4IGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBpbmNvcnJlY3QgcGFnZSB0YWJsZSBsZXZlbHMpIHdvdWxkIHJlc3VsdCBpbiBwYWdlIGZhdWx0cywgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDZkYjE5YzI0OWUwNjAyZWM1MmJjM2NlNTA4NDc1MTNhNDVlZjUyOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDIzOjAyOjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDI4Mzg0NzYxOWZmODguLmIyYTc0YzY5Y2M0YTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMTQwNiw2ICsxNDA2LDcgQEAgc3RydWN0IGt2bV9hcmNoIHtcbiBcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBzcGxpdF9kZXNjX2NhY2hlO1xuIFxuIFx0Z2ZuX3QgZ2ZuX2RpcmVjdF9iaXRzO1xuK1x0aW50IG1pcnJvcl9yb290X2xldmVsO1xuIFxuIFx0LypcbiBcdCAqIFNpemUgb2YgdGhlIENQVSdzIGRpcnR5IGxvZyBidWZmZXIsIGkuZS4gVk1YJ3MgUE1MIGJ1ZmZlci4gQSBaZXJvXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmMgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuaW5kZXggZGRiMDIyY2IyMDNhMi4uMzRjNjA5YTYwZWVmZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuQEAgLTQ4MywyMCArNDgzLDYgQEAgaW50IGNwdWlkX3F1ZXJ5X21heHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIDM2O1xuIH1cbiBcbi1pbnQgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqYmVzdDtcbi1cbi1cdGJlc3QgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDAwKTtcbi1cdGlmICghYmVzdCB8fCBiZXN0LVx1MDAzZWVheCBcdTAwM2MgMHg4MDAwMDAwOClcbi1cdFx0Z290byBub3RfZm91bmQ7XG4tXHRiZXN0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAwOCk7XG4tXHRpZiAoYmVzdClcbi1cdFx0cmV0dXJuIChiZXN0LVx1MDAzZWVheCBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweGZmO1xuLW5vdF9mb3VuZDpcbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIFRoaXMgXCJyYXdcIiB2ZXJzaW9uIHJldHVybnMgdGhlIHJlc2VydmVkIEdQQSBiaXRzIHdpdGhvdXQgYW55IGFkanVzdG1lbnRzIGZvclxuICAqIGVuY3J5cHRpb24gdGVjaG5vbG9naWVzIHRoYXQgdXN1cnAgYml0cy4gIFRoZSByYXcgbWFzayBzaG91bGQgYmUgdXNlZCBpZiBhbmRcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vY3B1aWQuaCBiL2FyY2gveDg2L2t2bS9jcHVpZC5oXG5pbmRleCA4ZDg2M2Y0NTU4NWRlLi40NmJmZTg2OTllNjdmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmhcbisrKyBiL2FyY2gveDg2L2t2bS9jcHVpZC5oXG5AQCAtNjgsNyArNjgsNiBAQCB2b2lkIF9faW5pdCBrdm1faW5pdF94c3RhdGVfc2l6ZXModm9pZCk7XG4gdTMyIHhzdGF0ZV9yZXF1aXJlZF9zaXplKHU2NCB4c3RhdGVfYnYsIGJvb2wgY29tcGFjdGVkKTtcbiBcbiBpbnQgY3B1aWRfcXVlcnlfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLWludCBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB1NjQga3ZtX3ZjcHVfcmVzZXJ2ZWRfZ3BhX2JpdHNfcmF3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gc3RhdGljIGlubGluZSBpbnQgY3B1aWRfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS5oIGIvYXJjaC94ODYva3ZtL21tdS5oXG5pbmRleCAyYWU3ZjllZDRjZjg2Li5jYzM3ZTIxMDc4N2M4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11LmhcbkBAIC0zODksNiArMzg5LDE1IEBAIHN0YXRpYyBpbmxpbmUgZ3BhX3Qga3ZtX3RyYW5zbGF0ZV9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdFx0XHRcdCAgICAgZXhjZXB0aW9uLCBwdGVfYWNjZXNzKTtcbiB9XG4gXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGt2bV9tbXVfc2V0X21pcnJvcl9yb290X2xldmVsKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHRcdFx0XHRcdCAgaW50IGxldmVsKVxuK3tcbitcdEJVSUxEX0JVR19PTihsZXZlbCAhPSA0IFx1MDAyNlx1MDAyNiBsZXZlbCAhPSA1KTtcbitcbitcdGt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsID0gbGV2ZWw7XG4rXHRrdm0tXHUwMDNlYXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBncGFfdG9fZ2ZuKEJJVF9VTEwobGV2ZWwgPT0gNCA/IDQ3IDogNTEpKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbWlycm9yZWRfdGRwKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuaW5kZXggYzUxOWU4ZThkNjQ2Zi4uYTUxYTg1MmMxYmVjMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC01OTI4LDE5ICs1OTI4LDE5IEBAIHZvaWQgX19rdm1fbW11X3JlZnJlc2hfcGFzc3Rocm91Z2hfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXG4gc3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRpbnQgbWF4cGE7XG4tXG4tXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKVxuLVx0XHRtYXhwYSA9IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcih2Y3B1KTtcbi1cdGVsc2Vcbi1cdFx0bWF4cGEgPSBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpO1xuLVxuIFx0LyogdGRwX3Jvb3RfbGV2ZWwgaXMgYXJjaGl0ZWN0dXJlIGZvcmNlZCBsZXZlbCwgdXNlIGl0IGlmIG5vbnplcm8gKi9cbiBcdGlmICh0ZHBfcm9vdF9sZXZlbClcbiBcdFx0cmV0dXJuIHRkcF9yb290X2xldmVsO1xuIFxuK1x0LypcbitcdCAqIElmIHRoZSBWTSBoYXMgbWlycm9yIHJvb3RzLCB0aGVuIHRoZSByb290IGxldmVsIGlzIGZpeGVkIGFzIHRoZSBnZm5cbitcdCAqIHVzZWQgdG8gc2VsZWN0IGJldHdlZW4gdGhlIG5vcm1hbCBhbmQgbWlycm9yIHJvb3QgbXVzdCBiZSBjb3ZlcmVkLlxuK1x0ICovXG4rXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbClcbitcdFx0cmV0dXJuIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWw7XG4rXG4gXHQvKiBVc2UgNS1sZXZlbCBURFAgaWYgYW5kIG9ubHkgaWYgaXQncyB1c2VmdWwvbmVjZXNzYXJ5LiAqL1xuLVx0aWYgKG1heF90ZHBfbGV2ZWwgPT0gNSBcdTAwMjZcdTAwMjYgbWF4cGEgXHUwMDNjPSA0OClcbitcdGlmIChtYXhfdGRwX2xldmVsID09IDUgXHUwMDI2XHUwMDI2IGNwdWlkX21heHBoeWFkZHIodmNwdSkgXHUwMDNjPSA0OClcbiBcdFx0cmV0dXJuIDQ7XG4gXG4gXHRyZXR1cm4gbWF4X3RkcF9sZXZlbDtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuaW5kZXggYjI3MmMyMDU4NmE3NC4uNmQ4ZTliZWZkOWU2NSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbkBAIC01Niw5ICs1Niw2IEBAXG4gYm9vbCBlbmFibGVfdGR4IF9fcm9fYWZ0ZXJfaW5pdDtcbiBtb2R1bGVfcGFyYW1fbmFtZWQodGR4LCBlbmFibGVfdGR4LCBib29sLCAwNDQ0KTtcbiBcbi0jZGVmaW5lIFREWF9TSEFSRURfQklUX1BXTF81IGdwYV90b19nZm4oQklUX1VMTCg1MSkpXG4tI2RlZmluZSBURFhfU0hBUkVEX0JJVF9QV0xfNCBncGFfdG9fZ2ZuKEJJVF9VTEwoNDcpKVxuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICp0ZHhfc3lzaW5mbztcbiBcbiB2b2lkIHRkaF92cF9yZF9mYWlsZWQoc3RydWN0IHZjcHVfdGR4ICp0ZHgsIGNoYXIgKnVjbGFzcywgdTMyIGZpZWxkLCB1NjQgZXJyKVxuQEAgLTE2MDksMTAgKzE2MDYsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV90ZHZtY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gdm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpXG4ge1xuLVx0dTY0IHNoYXJlZF9iaXQgPSAocGdkX2xldmVsID09IDUpID8gVERYX1NIQVJFRF9CSVRfUFdMXzUgOlxuLVx0XHRcdCAgVERYX1NIQVJFRF9CSVRfUFdMXzQ7XG4tXG4tXHRpZiAoS1ZNX0JVR19PTihzaGFyZWRfYml0ICE9IGt2bV9nZm5fZGlyZWN0X2JpdHModmNwdS1cdTAwM2Vrdm0pLCB2Y3B1LVx1MDAzZWt2bSkpXG4rXHRpZiAoS1ZNX0JVR19PTihwZ2RfbGV2ZWwgIT0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbCwgdmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHR0ZF92bWNzX3dyaXRlNjQodG9fdGR4KHZjcHUpLCBTSEFSRURfRVBUX1BPSU5URVIsIHJvb3RfaHBhKTtcbkBAIC0yODIzLDkgKzI4MTcsOSBAQCBzdGF0aWMgaW50IHRkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXG4gXHRrdm1fdGR4LVx1MDAzZXhmYW0gPSB0ZF9wYXJhbXMtXHUwMDNleGZhbTtcbiBcbiBcdGlmICh0ZF9wYXJhbXMtXHUwMDNlY29uZmlnX2ZsYWdzIFx1MDAyNiBURFhfQ09ORklHX0ZMQUdTX01BWF9HUEFXKVxuLVx0XHRrdm0tXHUwMDNlYXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBURFhfU0hBUkVEX0JJVF9QV0xfNTtcbitcdFx0a3ZtX21tdV9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA1KTtcbiBcdGVsc2Vcbi1cdFx0a3ZtLVx1MDAzZWFyY2guZ2ZuX2RpcmVjdF9iaXRzID0gVERYX1NIQVJFRF9CSVRfUFdMXzQ7XG4rXHRcdGt2bV9tbXVfc2V0X21pcnJvcl9yb290X2xldmVsKGt2bSwgNCk7XG4gXG4gXHRrdm1fdGR4LVx1MDAzZXN0YXRlID0gVERfU1RBVEVfSU5JVElBTElaRUQ7XG4gb3V0OlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDQ6NDcuODg3MTgxNjQzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3OTAxNTIwNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBURFggS1ZNIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGRpZ2dpbmcgaW50byB0aGUgS1ZNIGNvZGUgZm9yIFREWCDigJMgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMuIE15IGluaXRpYWwgcmVhZCBzYXlzIGl0J3MgZm9jdXNlZCBvbiBob3cgbWlycm9yZWQgVHdvLURpbWVuc2lvbmFsIFBhZ2luZyAoVERQKSBpcyBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYG1pcnJvcl9yb290X2xldmVsYCBpcyBiZWluZyBpbnRyb2R1Y2VkIHdpdGhpbiB0aGUgYHN0cnVjdCBrdm1fYXJjaGAgdG8gY29udHJvbCB0aGUgcm9vdCBsZXZlbCBmb3IgdGhpcyBtaXJyb3JpbmcuIEludGVyZXN0aW5nLiBUaGUgcGF0Y2gncyByZXBsYWNpbmcgb2YgYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAgd2l0aCBgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbGAgaW4gYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAgaXMgYSBwcmV0dHkgZGlyZWN0IGNvbnNlcXVlbmNlIG9mIHRoaXMuIEl0J3MgZWZmZWN0aXZlbHkgcmVtb3ZpbmcgYSBDUFVJRCBxdWVyeSBpbiBmYXZvciBvZiBhIHZhbHVlIHN0b3JlZCBpbiB0aGUgS1ZNIHN0cnVjdHVyZS4gUmVwbGFjaW5nIHRob3NlIGhhcmRjb2RlZCBgVERYX1NIQVJFRF9CSVRgIGNvbnN0YW50cyB3aXRoIGEgYGt2bV9tbXVfc2V0X21pcnJvcl9yb290X2xldmVsYCBjYWxsIGFsc28gc2ltcGxpZmllcyB0aGluZ3MuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIG1lbW9yeSBpbml0aWFsaXphdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgd2UncmUgbm90IGludHJvZHVjaW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuIFRoZSBjcnVjaWFsIHBvaW50IGlzIGBtaXJyb3Jfcm9vdF9sZXZlbGAgaXMgYWRkZWQgdG8gYHN0cnVjdCBrdm1fYXJjaGAuIElmIGBzdHJ1Y3Qga3ZtX2FyY2hgIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qga3ZtYCwgd2hpY2ggaXQgaXMsIHRoZW4gd2hlcmUgaXMgdGhlIGBzdHJ1Y3Qga3ZtYCBhbGxvY2F0ZWQ/IElzIGl0IGluaXRpYWxpemVkIGNvcnJlY3RseT8gQWgsIHllcywgYHN0cnVjdCBrdm1gIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2NgIG9yIGB2bWFsbG9jYCB3aXRoIHplcm9pbmcgZHVyaW5nIGBrdm1fY3JlYXRlX3ZtYC4gSSBoYXZlIHRvIHZlcmlmeSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGt2bV9jcmVhdGVfdm1gIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE1NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA0OjUyLjY3NzMzNjUzOVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0NDcwMzM4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJremFsbG9jLipzaXplb2YuKmt2bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA0OjUyLjg5MTgxMzkxN1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTM3ODUzODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgS1ZNIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gdGhlIHRyb3VibGVzaG9vdGluZyBoYXMgbGVkIHVzIHRvIHN1c3BlY3QgYW4gaXNzdWUgZHVyaW5nIHRoZSBpbml0aWFsIHNldHVwIG9mIHRoZSBLVk0gaW5mcmFzdHJ1Y3R1cmUuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgS1ZNIGFsbG9jYXRpb24gYW5kIFZNIGNyZWF0aW9uIHJvdXRpbmVzLiBJIG5lZWQgdG8gemVybyBpbiBvbiBlaXRoZXIgYGt2bV9hbGxvY2Agb3IgYGt2bV9jcmVhdGVfdm1gLiBUaGVzZSBhcmUgdGhlIGNyaXRpY2FsIHBvaW50cyB3aGVyZSB0aGUgZm91bmRhdGlvbiBmb3IgYSBuZXcgdmlydHVhbCBtYWNoaW5lIGlzIGxhaWQsIGFuZCB3aGVyZSB0aGluZ3MgY291bGQgYmUgZ29pbmcgc2lkZXdheXMuIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgY29kZSBwYXRocywgZXJyb3IgY2hlY2tpbmcsIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uIHdpdGhpbiB0aG9zZSBmdW5jdGlvbnMuIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG1lbW9yeSBsZWFrcywgb3IgcGVyaGFwcyBpbmNvcnJlY3QgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIHRoYXQgYXJlIG1hbmlmZXN0aW5nIHRoZW1zZWx2ZXMgYXQgdGhpcyBzdGFnZS4gSSdsbCBmb2N1cyBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGh5cGVydmlzb3LigJlzIGludGVybmFsIHN0cnVjdHVyZXMgYW5kIHdpdGggdGhlIGd1ZXN0IG1lbW9yeSBhbmQgZGV2aWNlIGFzc2lnbm1lbnQuIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBLVk0gaW5pdGlhbGl6YXRpb24gc28gYW55IHByb2JsZW0gaGVyZSBjYW4gYmUgY3JpdGljYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3OTgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowNDo1Ni40Mjk2NzA4ODVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODAwMzMwNDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jLipzaXplb2YuKmt2bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA0OjU3LjcwOTcxMjY1NFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjgzNTEyMjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYGt2bV9hcmNoX2FsbG9jX3ZtYCoqXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgdXAgYGt2bV9hcmNoX2FsbG9jX3ZtYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBhcmNoaXRlY3R1cmFsIGFsbG9jYXRpb24gcHJvY2VzcyB3aXRoaW4gS1ZNLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgbWVtb3J5IGFsbG9jYXRpb24gaXMgaGFuZGxlZCBhdCB0aGUgVk0gbGV2ZWwuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCBpZiB0aGVyZSBhcmUgYW55IHJlY2VudCBjaGFuZ2VzIG9yIGlmIHRoZXJlIGFyZSBhbnkgcG9pbnRzIHRoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGluIG1vcmUgZGV0YWlsLCBwZXJoYXBzIGZvciBkZWJ1Z2dpbmcgb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbnMuIElzIHRoZXJlIGFueXRoaW5nIHNwZWNpZmljIHRoaXMgZnVuY3Rpb24gZG9lcyByZWdhcmRpbmcgYWRkcmVzc2luZyBtb2RlcywgcGFnZSB0YWJsZSBzZXR1cCwgb3IgbWF5YmUgdGhlIGFsbG9jYXRpb24gb2YgY29udHJvbCBzdHJ1Y3R1cmVzIHNwZWNpZmljIHRvIHRoZSBjaG9zZW4gYXJjaGl0ZWN0dXJlPyBJIGtub3cgdGhhdCBpdCdzIGNydWNpYWwgZm9yIHRoZSBpbml0aWFsIHNldHVwLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDc0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDU6MDAuOTkzMjI3MDk0WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzE0ODcwOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2FyY2hfYWxsb2Nfdm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDU6MDEuMDgwMzgyMjQzWiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODgwODg1MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gS1ZNIFZNIENyZWF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgaG9uZSBpbiBvbiBga3ZtX2NyZWF0ZV92bWAuIFRoaXMgaXMgdGhlIGNvcmUgZnVuY3Rpb24gd2hlcmUgYSBLVk0gdmlydHVhbCBtYWNoaW5lIGlzIGJyb3VnaHQgaW50byBleGlzdGVuY2UuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGluaXRpYWxpemF0aW9uIGZsb3csIGVzcGVjaWFsbHkgbm93IHdpdGggdGhlc2UgbmV3IGFyY2hpdGVjdHVyYWwgY29uc2lkZXJhdGlvbnMuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgc3RlcHMgaW4gaGVyZTogcmVzb3VyY2UgYWxsb2NhdGlvbiwgbWVtb3J5IG1hbmFnZW1lbnQgc2V0dXAsIHZDUFUgY3JlYXRpb24sIGFuZCB0aGUgbGlrZS4gSXQgd2lsbCBiZSBpbnRlcmVzdGluZyB0byBzZWUgaG93IHRoZXkndmUgaGFuZGxlZCB0aGUgbGF0ZXN0IHNlY3VyaXR5IG1pdGlnYXRpb25zIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucy4gSSdtIGtlZW4gdG8gc3BvdCBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHdoZXJlIHRoZXkgbWlnaHQgaGF2ZSBpbXBsZW1lbnRlZCBjbGV2ZXIgdHJpY2tzIHRvIGVuaGFuY2UgVk0gcGVyZm9ybWFuY2Ugb3IgaXNvbGF0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXTigJlzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzE3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDU6MDQuMjY4NDczODQ0WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjU0NjAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fY3JlYXRlX3ZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jPTk4MD1zdGF0aWMgdm9pZCBrdm1fZGVzdHJveV92bV9kZWJ1Z2ZzKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtOTk3LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6OTk4OnN0YXRpYyBpbnQga3ZtX2NyZWF0ZV92bV9kZWJ1Z2ZzKHN0cnVjdCBrdm0gKmt2bSwgY29uc3QgY2hhciAqZmRuYW1lKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtOTk5LXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MTA5Nz1zdGF0aWMgdm9pZCBrdm1fZGlzYWJsZV92aXJ0dWFsaXphdGlvbih2b2lkKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTEwOTgtXFxudmlydC9rdm0va3ZtX21haW4uYzoxMDk5OnN0YXRpYyBzdHJ1Y3Qga3ZtICprdm1fY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSwgY29uc3QgY2hhciAqZmRuYW1lKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTEwMC17XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExMzItXFx0ICogRm9yY2Ugc3Vic2VxdWVudCBkZWJ1Z2ZzIGZpbGUgY3JlYXRpb25zIHRvIGZhaWwgaWYgdGhlIFZNIGRpcmVjdG9yeVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTEzMzpcXHQgKiBpcyBub3QgY3JlYXRlZCAoYnkga3ZtX2NyZWF0ZV92bV9kZWJ1Z2ZzKCkpLlxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTEzNC1cXHQgKi9cXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTE5Ni1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjExOTc6XFx0ciA9IGt2bV9jcmVhdGVfdm1fZGVidWdmcyhrdm0sIGZkbmFtZSk7XFxudmlydC9rdm0va3ZtX21haW4uYy0xMTk4LVxcdGlmIChyKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz01NDk5PXN0YXRpYyBpbnQga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy01NTExLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTUxMjpcXHRrdm0gPSBrdm1fY3JlYXRlX3ZtKHR5cGUsIGZkbmFtZSk7XFxudmlydC9rdm0va3ZtX21haW4uYy01NTEzLVxcdGlmIChJU19FUlIoa3ZtKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowNTowNC4zMjEwMjkzMTRaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYyNjkxMzQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGBrdm1gIGlzIGFsbG9jYXRlZCBpbiBga3ZtX2NyZWF0ZV92bWAsIGFzIEkndmUgYmVlbiBtdWxsaW5nIGl0IG92ZXI6XG5cbioqRGlnZ2luZyBpbnRvIGt2bV9jcmVhdGVfdm0gYW5kIGt2bSBBbGxvY2F0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgdHJhY2UgdGhpcy4gV2hlbiBga3ZtX2NyZWF0ZV92bWAgZ2V0cyBjYWxsZWQsIHRoZSBtYWluIGdvYWwgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBLVk0gaW5zdGFuY2UuIFNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBga3ZtYCBzdHJ1Y3R1cmUgaXRzZWxmLiBJdCdzIHRoZSBjZW50cmFsIGRhdGEgc3RydWN0dXJlIHJlcHJlc2VudGluZyBvdXIgdmlydHVhbCBtYWNoaW5lIGNvbnRleHQgd2l0aGluIHRoZSBrZXJuZWwuIEkgZXhwZWN0IGl0IHRvIGludm9sdmUgc29tZSBtZW1vcnkgYWxsb2NhdGlvbiwgcHJvYmFibHkgdXNpbmcgYGttYWxsb2NgIG9yIHNpbWlsYXIsIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIHZlcnNpb24gYW5kIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBJJ20gYXNzdW1pbmcgdGhhdCB0aGUga2VybmVsIG5lZWRzIHRvIHN0b3JlIHNwZWNpZmljIHZtIGluZm9ybWF0aW9uLCBzdWNoIGFzIFZNIElEcywgc3RhdGUsIGFuZCBvdGhlciBWTS1yZWxhdGVkIHNldHRpbmdzLCBzbyBhIHN0cnVjdHVyZSBtYWtlcyBwZXJmZWN0IHNlbnNlIGhlcmUsIGV2ZW4gaWYgaXQgbWlnaHQgYmUgYW4gb3ZlcnNpbXBsaWZpY2F0aW9uLiBJJ2QgbmVlZCB0byBjb25zaWRlciBpZiB0aGVyZSBpcyBtb3JlIGhhcHBlbmluZyB0aGFuIGp1c3QgbWVtb3J5IGJlaW5nIGFsbG9jYXRlZCBoZXJlLiBQZXJoYXBzIHNvbWUgc2V0dXAgb2YgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBtYXliZSBpbml0aWFsaXphdGlvbiBvZiBzb21lIG11dGV4ZXMgb3IgbG9ja3MgdG8gcHJldmVudCBjb25jdXJyZW50IGFjY2VzcyBpc3N1ZXMsIG9yIGV2ZW4gc29tZSBjYWxscyB0byBob29rIGludG8gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQuIFRoZXJlJ3MgcHJvYmFibHkgYW4gZXJyb3IgaGFuZGxpbmcgY29tcG9uZW50IGludm9sdmVkIGFzIHdlbGwsIHdoZXJlIGlmIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBmYWlscywgdGhlIGZ1bmN0aW9uIG5lZWRzIHRvIHByb3Blcmx5IHVud2luZCBhbmQgcmV0dXJuIGFuIGVycm9yIGNvZGUuIEknbSBrZWVuIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9uIGFib3V0IHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBhbGxvY2F0aW9uIGRldGFpbHMuIEFsc28sIGhvdyBkb2VzIHRoaXMgcHJvY2VzcyBpbnRlcmFjdCB3aXRoIHRoZSBLVk0gZHJpdmVyJ3Mgb3ZlcmFsbCByZXNvdXJjZSBtYW5hZ2VtZW50PyBEb2VzIGl0IGFjY291bnQgZm9yIHBvdGVudGlhbCByZXNvdXJjZSBleGhhdXN0aW9uIGR1cmluZyB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzPyBVbHRpbWF0ZWx5LCBJJ20gdGhpbmtpbmcgb2YgdGhlIGxpZmVjeWNsZTogYWxsb2NhdGlvbiwgaW5pdGlhbGl6YXRpb24sIHVzZSwgYW5kIGRlYWxsb2NhdGlvbiBvZiB0aGlzIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEwMCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA1OjA4Ljk0Nzk0NjE3MVoiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDk5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDk5OlxcdHN0YXRpYyBzdHJ1Y3Qga3ZtICprdm1fY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSwgY29uc3QgY2hhciAqZmRuYW1lKVxcbjExMDA6XFx0e1xcbjExMDE6XFx0XFx0c3RydWN0IGt2bSAqa3ZtID0ga3ZtX2FyY2hfYWxsb2Nfdm0oKTtcXG4xMTAyOlxcdFxcdHN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzO1xcbjExMDM6XFx0XFx0aW50IHIsIGksIGo7XFxuMTEwNDpcXHRcXG4xMTA1OlxcdFxcdGlmICgha3ZtKVxcbjExMDY6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuMTEwNzpcXHRcXG4xMTA4OlxcdFxcdEtWTV9NTVVfTE9DS19JTklUKGt2bSk7XFxuMTEwOTpcXHRcXHRtbWdyYWIoY3VycmVudC1cXHUwMDNlbW0pO1xcbjExMTA6XFx0XFx0a3ZtLVxcdTAwM2VtbSA9IGN1cnJlbnQtXFx1MDAzZW1tO1xcbjExMTE6XFx0XFx0a3ZtX2V2ZW50ZmRfaW5pdChrdm0pO1xcbjExMTI6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4xMTEzOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlaXJxX2xvY2spO1xcbjExMTQ6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4xMTE1OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcXG4xMTE2OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZrdm0tXFx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XFxuMTExNzpcXHRcXHRyY3V3YWl0X2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlbW5fbWVtc2xvdHNfdXBkYXRlX3JjdXdhaXQpO1xcbjExMTg6XFx0XFx0eGFfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2V2Y3B1X2FycmF5KTtcXG4xMTE5OlxcdCNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG4xMTIwOlxcdFxcdHhhX2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlbWVtX2F0dHJfYXJyYXkpO1xcbjExMjE6XFx0I2VuZGlmXFxuMTEyMjpcXHRcXG4xMTIzOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZrdm0tXFx1MDAzZWdwY19saXN0KTtcXG4xMTI0OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZrdm0tXFx1MDAzZWdwY19sb2NrKTtcXG4xMTI1OlxcdFxcbjExMjY6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmt2bS1cXHUwMDNlZGV2aWNlcyk7XFxuMTEyNzpcXHRcXHRrdm0tXFx1MDAzZW1heF92Y3B1cyA9IEtWTV9NQVhfVkNQVVM7XFxuMTEyODpcXHRcXG4xMTI5OlxcdFxcdEJVSUxEX0JVR19PTihLVk1fTUVNX1NMT1RTX05VTSBcXHUwMDNlIFNIUlRfTUFYKTtcXG4xMTMwOlxcdFxcbjExMzE6XFx0XFx0LypcXG4xMTMyOlxcdFxcdCAqIEZvcmNlIHN1YnNlcXVlbnQgZGVidWdmcyBmaWxlIGNyZWF0aW9ucyB0byBmYWlsIGlmIHRoZSBWTSBkaXJlY3RvcnlcXG4xMTMzOlxcdFxcdCAqIGlzIG5vdCBjcmVhdGVkIChieSBrdm1fY3JlYXRlX3ZtX2RlYnVnZnMoKSkuXFxuMTEzNDpcXHRcXHQgKi9cXG4xMTM1OlxcdFxcdGt2bS1cXHUwMDNlZGVidWdmc19kZW50cnkgPSBFUlJfUFRSKC1FTk9FTlQpO1xcbjExMzY6XFx0XFxuMTEzNzpcXHRcXHRzbnByaW50Zihrdm0tXFx1MDAzZXN0YXRzX2lkLCBzaXplb2Yoa3ZtLVxcdTAwM2VzdGF0c19pZCksIFxcXCJrdm0tJWRcXFwiLFxcbjExMzg6XFx0XFx0XFx0IHRhc2tfcGlkX25yKGN1cnJlbnQpKTtcXG4xMTM5OlxcdFxcbjExNDA6XFx0XFx0ciA9IC1FTk9NRU07XFxuMTE0MTpcXHRcXHRpZiAoaW5pdF9zcmN1X3N0cnVjdChcXHUwMDI2a3ZtLVxcdTAwM2VzcmN1KSlcXG4xMTQyOlxcdFxcdFxcdGdvdG8gb3V0X2Vycl9ub19zcmN1O1xcbjExNDM6XFx0XFx0aWYgKGluaXRfc3JjdV9zdHJ1Y3QoXFx1MDAyNmt2bS1cXHUwMDNlaXJxX3NyY3UpKVxcbjExNDQ6XFx0XFx0XFx0Z290byBvdXRfZXJyX25vX2lycV9zcmN1O1xcbjExNDU6XFx0XFxuMTE0NjpcXHRcXHRyID0ga3ZtX2luaXRfaXJxX3JvdXRpbmcoa3ZtKTtcXG4xMTQ3OlxcdFxcdGlmIChyKVxcbjExNDg6XFx0XFx0XFx0Z290byBvdXRfZXJyX25vX2lycV9yb3V0aW5nO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowNTowOC45NDgzOTk1NzFaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzMjQyMjY5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipIdW50aW5nIERvd24gYGt2bV9hcmNoX2FsbG9jX3ZtYCBpbiB0aGUgeDg2IExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBga3ZtX2FyY2hfYWxsb2Nfdm1gIHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gSSdtIHByb2JhYmx5IGdvaW5nIHRvIHN0YXJ0IGJ5IHRoaW5raW5nIGFib3V0IHRoZSBLVk0ga2VybmVsIG1vZHVsZSBzdHJ1Y3R1cmUgZmlyc3QuIEkga25vdyB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBWTSBhbGxvY2F0aW9uIGxvZ2ljIGxpdmVzLCBzbyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHJlbGV2YW50IHNvdXJjZSBmaWxlcyB3aXRoaW4gdGhlIEtWTSBkaXJlY3Rvcnkgc3RydWN0dXJlLCBtYXliZSBzb21ldGhpbmcgaW4gYGFyY2gveDg2L2t2bWAgc3BlY2lmaWNhbGx5LlxuXG5Gcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgd2hhdCB0aGlzIGZ1bmN0aW9uICpkb2VzKi4gYGFsbG9jYCBpbXBsaWVzIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgYHZtYCBoaW50cyBhdCBhIHZpcnR1YWwgbWFjaGluZSBjb250ZXh0LiBTbywgSSBleHBlY3QgaXQncyBoYW5kbGluZyB0aGUgYWxsb2NhdGlvbiBvZiBkYXRhIHN0cnVjdHVyZXMgcmVsYXRlZCB0byB0aGUgZ3Vlc3QgdmlydHVhbCBtYWNoaW5lIHN0YXRlIOKAkyB0aGluZ3MgbGlrZSBWTUNTIHN0cnVjdHVyZXMsIHNoYWRvdyBwYWdlIHRhYmxlcywgYW5kIG90aGVyIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzdGF0ZS4gSXQnbGwgcHJvYmFibHkgYmUgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyBhIGxvdCBvZiB4ODYtc3BlY2lmaWMgVk0gZGF0YS5cblxuSSdsbCBwcm9iYWJseSB1c2UgYGdyZXBgIG9yIGBjc2NvcGVgIHRvIHNlYXJjaCB0aHJvdWdoIHRoZSBrZXJuZWwgc291cmNlIHRyZWUgZm9yIHRoZSBmdW5jdGlvbiBuYW1lIGRpcmVjdGx5LCB0aG91Z2ggaXQncyBwb3NzaWJsZSB0aGlzIGlzbid0IHRoZSBmaW5hbCBmdW5jdGlvbiBuYW1lLiBJdCBjb3VsZCBhbHNvIGJlIGNhbGxlZCBhcyBwYXJ0IG9mIGEgbWFjcm8gb3IgYW5vdGhlciBhYnN0cmFjdGlvbiBsYXllciBzbyBJIG1pZ2h0IG5lZWQgdG8gbG9vayBmb3IgcmVsYXRlZCBjb25jZXB0cy4gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0byBuYXZpZ2F0ZSB0aGUgbmVzdGVkIGZ1bmN0aW9uIGNhbGxzLlxuXG5JJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IHRoZSBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCB1bml0cyAoTU1VcyksIHBhZ2luZyBzdHJ1Y3R1cmVzIChFUFQsIGV0Yy4pLCBhbmQgYW55IENQVUlELXJlbGF0ZWQgY2hlY2tzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIGZlYXR1cmUgZGV0ZWN0aW9uIG9yIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQuIFVuZGVyc3RhbmRpbmcgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgcGh5c2ljYWwgbWVtb3J5IGxheW91dCwgYW5kIHRoZSBndWVzdCdzIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB3aWxsIGJlIGtleS4gVGhpcyBpcyBhIHByZXR0eSBjcml0aWNhbCBwYXJ0IG9mIHRoZSB3aG9sZSB2aXJ0dWFsaXphdGlvbiBzZXR1cCwgc28gaXQncyBsaWtlbHkgdG8gYmUgZmFpcmx5IGNvbXBsZXguIEkgd2lsbCBmb2N1cyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIHVzZWQsIGFuZCBhbnkgeDg2LXNwZWNpZmljIG9wdGltaXphdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA1OjEzLjQ4MDgyNDQyWiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjM2MDA5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2FyY2hfYWxsb2Nfdm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MTc5NT1leHRlcm4gc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyBrdm1fbmVzdGVkX29wcyBfX3JlYWRfbW9zdGx5O1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xODEzLSNkZWZpbmUgX19LVk1fSEFWRV9BUkNIX1ZNX0FMTE9DXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoxODE0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZClcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTE4MTUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowNToxMy42MDQ0MzIyNDlaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4MjQxOTc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqUGVlcmluZyBpbnRvIHRoZSB4ODYgS1ZNIEFyY2hpdGVjdHVyZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgcmlnaHQgaW4uIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgb2YgaG93IEtWTSBhbGxvY2F0ZXMgdmlydHVhbCBtYWNoaW5lcyBpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gSSdtIHNwZWNpZmljYWxseSBkcmF3biB0byB0aGUgZnVuY3Rpb24gYGt2bV9hcmNoX2FsbG9jX3ZtYCwgYW5kIEknbSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBkZWZpbml0aW9uIGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oYC4gVGhpcyBpcyB0aGUgbG93LWxldmVsLCBjcml0aWNhbCBzdHVmZi4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHJlc291cmNlcyBhcmUgc2V0IHVwIGZvciBhIG5ldyBWTS4gV2hhdCBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZD8gV2hhdCBtZW1vcnkgaXMgcmVzZXJ2ZWQ/IFdoYXQgY3JpdGljYWwgaGFyZHdhcmUgY29tcG9uZW50cyBhcmUgYmVpbmcgY29uZmlndXJlZCwgZnJvbSB0aGUgQ1BVIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCB1bml0cz8gSSdtIGFudGljaXBhdGluZyB0aGF0IHRoaXMgaXMgd2hlcmUgdGhlIGZ1bmRhbWVudGFsIGdyb3VuZHdvcmsgZm9yIGd1ZXN0IGV4ZWN1dGlvbiBvbiB4ODYgaXMgbGFpZCBvdXQuIEknbSBrZWVuIHRvIHNlZSBpZiBJIGNhbiB1bmRlcnN0YW5kIGhvdyBLVk0gZW5zdXJlcyBpc29sYXRpb24gYW5kIHNlY3VyZSByZXNvdXJjZSBzaGFyaW5nIGZvciB0aGUgVk1zIHRoYXQgc2l0IGF0b3AgdGhlIGhhcmR3YXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTg3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDU6MTYuNjg2ODU0NzZaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTgxNCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTgxNDpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm0gKmt2bV9hcmNoX2FsbG9jX3ZtKHZvaWQpXFxuMTgxNTpcXHR7XFxuMTgxNjpcXHRcXHRyZXR1cm4ga3Z6YWxsb2Moa3ZtX3g4Nl9vcHMudm1fc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4xODE3OlxcdH1cXG4xODE4OlxcdFxcbjE4MTk6XFx0I2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfVk1fRlJFRVxcbjE4MjA6XFx0dm9pZCBrdm1fYXJjaF9mcmVlX3ZtKHN0cnVjdCBrdm0gKmt2bSk7XFxuMTgyMTpcXHRcXG4xODIyOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19IWVBFUlYpXFxuMTgyMzpcXHQjZGVmaW5lIF9fS1ZNX0hBVkVfQVJDSF9GTFVTSF9SRU1PVEVfVExCU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowNToxNi42ODcwNDA2NFoiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjI0ODg0NjUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBURFggUm9vdCBMZXZlbCBSZWZhY3RvcioqXG5cbk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIFRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCdzIHJlZmluaW5nIGhvdyBLVk0gZmlndXJlcyBvdXQgdGhlIHJvb3QgcGFnZSB0YWJsZSBsZXZlbCBmb3IgVERYIFZNcy4gSXQncyB1c2luZyBga3Z6YWxsb2NgIHRvIGluaXRpYWxpemUgbWVtb3J5LCBzbyB0aGUgYG1pcnJvcl9yb290X2xldmVsYCBmaWVsZCBpcyBndWFyYW50ZWVkIHRvIHN0YXJ0IGF0IHplcm8uIE5vdywgYGt2bV9tbXVfc2V0X21pcnJvcl9yb290X2xldmVsYCBpcyBzZXR0aW5nIGBtaXJyb3Jfcm9vdF9sZXZlbGAgYW5kIGBnZm5fZGlyZWN0X2JpdHNgIGJhc2VkIG9uIHRoaXMgYGxldmVsYCB2YXJpYWJsZSwgd2hpY2ggaXMgY29taW5nIGZyb20gYHRkeF90ZF9pbml0YC4gSSBzZWUgaXQncyByZXBsYWNpbmcgdGhhdCBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYCBmdW5jdGlvbiB3aXRoIHRoZSBgbWlycm9yX3Jvb3RfbGV2ZWxgIHZhbHVlIHdpdGhpbiBga3ZtX21tdV9nZXRfdGRwX2xldmVsYCBhbmQgYHRkeF9sb2FkX21tdV9wZ2RgLlxuXG5TbywgYW0gSSBzZWVpbmcgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaz8gTGV0IG1lIGJyZWFrIGl0IGRvd246IHRoaXMgaXMgcmVmYWN0b3JpbmcgdGhlIHJvb3QgbGV2ZWwgZGV0ZXJtaW5hdGlvbiAqaW50ZXJuYWxseSouIEl0J3Mgbm90IGV4cG9zaW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyBhIGJpZyB3aW4uIEFueSBwb3RlbnRpYWwgaXNzdWVzIHNlZW0gbGlrZSB0aGV5J2QgbWFuaWZlc3QgYXMgbG9naWMgZXJyb3JzIOKAkyBpbmNvcnJlY3QgcGFnZSB0YWJsZSBsZXZlbHMsIGZvciBpbnN0YW5jZS4gQW5kIHRob3NlIHdvdWxkIHRyaWdnZXIgcGFnZSBmYXVsdHMsIGNyYXNoZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIGFyZSBkZXNpZ25lZCB0byBjYXRjaC5cblxuSSdtIGRvdWJsZS1jaGVja2luZyB0aGF0IGBtaXJyb3Jfcm9vdF9sZXZlbGAgaXNuJ3QgdXNlZCB1bmluaXRpYWxpemVkLiBUaGUgYHN0cnVjdCBrdm1gIGlzIHplcm8tYWxsb2NhdGVkLCBzbyBpdCdzIGluaXRpYWxpemVkIHRvIHplcm8uIEFuZCB0aGUgbG9naWMgaW4gYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAgZ3JhY2VmdWxseSBoYW5kbGVzIHplcm8gdmFsdWVzIGJ5IGZhbGxpbmcgdGhyb3VnaCB0byB0aGUgbmV4dCBjaGVjaywgc28gdGhhdCdzIGNvbXBsZXRlbHkgc2FmZS5cblxuTm93LCB0aGUgYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAgcmVtb3ZhbDogaXQgd2FzIHVzZWQgdG8gZ2V0IHRoZSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIHNpemUgZnJvbSBDUFVJRCwgbm93IHJlcGxhY2VkIGJ5IGBtaXJyb3Jfcm9vdF9sZXZlbGAuXG5cbkFscmlnaHQsIEkgZG9uJ3Qgc2VlIGFueSByZWFzb24gdG8gcnVuIEtNU0FOIGZvciB0aGlzLiBUaGUgcGF0Y2ggKmlzbid0KiBkb2luZyBhbnkgb2YgdGhlIHRoaW5ncyB0aGF0IHRyaWdnZXIgS01TQU46IG5vIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgbm8gY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJzLCBubyBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQsIGFuZCBubyBuZXcgYm91bmRzIGNoZWNrcyB3aGljaCBtaWdodCBhbGxvdyBhbiBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkhlcmUncyBteSByYXRpb25hbGU6IHRoZSBwYXRjaCBpcyBhbGwgYWJvdXQgcmVmaW5pbmcgaG93IFREWCByb290IHBhZ2UgdGFibGUgbGV2ZWxzIGFyZSBkZXRlcm1pbmVkIHdpdGhpbiBLVk0uIEl0IGludHJvZHVjZXMgYSBuZXcgYG1pcnJvcl9yb290X2xldmVsYCBmaWVsZCB3aXRoaW4gYHN0cnVjdCBrdm1fYXJjaGAsIGFuZCB0aGlzIGZpZWxkIGlzIHNldCBkdXJpbmcgVERYIGluaXRpYWxpemF0aW9uLCByZXBsYWNpbmcgQ1BVSUQtYmFzZWQgY2hlY2tzLiBUaGUgYGt2emFsbG9jYCBlbnN1cmVzIHRoZSBgbWlycm9yX3Jvb3RfbGV2ZWxgIGlzIGluaXRpYWxpemVkLiBOb3RoaW5nIG5ldyBpcyBzZW50IHRvIHVzZXJzcGFjZS4gQW55IGludHJvZHVjZWQgYnVncyB3aWxsIGxpa2VseSBiZSBsb2dpYyBidWdzLCBhbmQgdGhvc2Ugc2hvdWxkIGJlIGNhdWdodCBieSB0aGUgdXN1YWwgc3VzcGVjdHMgbGlrZSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBhcmUgcHJlc2VudC4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDU5LCJPdXRwdXRUb2tlbnMiOjIyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA1OjI4LjkzNTg5MDYzOVoiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyB0aGUgcm9vdCBwYWdlIHRhYmxlIGxldmVsIGlzIGRldGVybWluZWQgZm9yIFREWCBWTXMgaW4gS1ZNIGJ5IGludHJvZHVjaW5nIGEgbmV3IGZpZWxkIGBtaXJyb3Jfcm9vdF9sZXZlbGAgaW4gYHN0cnVjdCBrdm1fYXJjaGAuIFRoaXMgZmllbGQgaXMgc2V0IGR1cmluZyBURFggaW5pdGlhbGl6YXRpb24sIHJlcGxhY2luZyB0aGUgcHJldmlvdXMgYXBwcm9hY2ggb2YgcXVlcnlpbmcgQ1BVSUQgZm9yIHRoZSBtYXhpbXVtIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MuIFNpbmNlIGBzdHJ1Y3Qga3ZtYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt2emFsbG9jKClgICh3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBtZW1vcnkpLCB0aGUgbmV3IGBtaXJyb3Jfcm9vdF9sZXZlbGAgZmllbGQgaXMgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgYW55IGNvbXBsZXggYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGluY29ycmVjdCBwYWdlIHRhYmxlIGxldmVscykgd291bGQgcmVzdWx0IGluIHBhZ2UgZmF1bHRzLCBjcmFzaGVzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaG93IHRoZSByb290IHBhZ2UgdGFibGUgbGV2ZWwgaXMgZGV0ZXJtaW5lZCBmb3IgVERYIFZNcyBpbiBLVk0gYnkgaW50cm9kdWNpbmcgYSBuZXcgZmllbGQgYG1pcnJvcl9yb290X2xldmVsYCBpbiBgc3RydWN0IGt2bV9hcmNoYC4gVGhpcyBmaWVsZCBpcyBzZXQgZHVyaW5nIFREWCBpbml0aWFsaXphdGlvbiwgcmVwbGFjaW5nIHRoZSBwcmV2aW91cyBhcHByb2FjaCBvZiBxdWVyeWluZyBDUFVJRCBmb3IgdGhlIG1heGltdW0gZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcy4gU2luY2UgYHN0cnVjdCBrdm1gIGlzIGFsbG9jYXRlZCB1c2luZyBga3Z6YWxsb2MoKWAgKHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSksIHRoZSBuZXcgYG1pcnJvcl9yb290X2xldmVsYCBmaWVsZCBpcyBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkIHRvIHplcm8uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBhbnkgY29tcGxleCBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoZS5nLiwgaW5jb3JyZWN0IHBhZ2UgdGFibGUgbGV2ZWxzKSB3b3VsZCByZXN1bHQgaW4gcGFnZSBmYXVsdHMsIGNyYXNoZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowmkdqx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 22:59:00 +0000 UTC FinishedAt: 2026-08-14 23:05:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "1b731e5ded480bd1e5546aed35584238661ce72e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "INTEL_TDX_HOST", "KVM_INTEL_TDX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "1b731e5ded480bd1e5546aed35584238661ce72e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "INTEL_TDX_HOST", "KVM_INTEL_TDX" ], "series_id": "a3a96f1b-33a8-4347-b0e9-945ab6b0eba2" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "tdx_vm_ioctl", "tdx_load_mmu_pgd", "kvm_init_mmu" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMX1REWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RkeF92bV9pb2N0bCYjMzQ7LAogICAgJiMzNDt0ZHhfbG9hZF9tbXVfcGdkJiMzNDssCiAgICAmIzM0O2t2bV9pbml0X21tdSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBob3cgdGhlIHJvb3QgcGFnZSB0YWJsZSBsZXZlbCBpcyBkZXRlcm1pbmVkIGZvciBURFggVk1zIGluIEtWTSBieSBpbnRyb2R1Y2luZyBhIG5ldyBmaWVsZCBgbWlycm9yX3Jvb3RfbGV2ZWxgIGluIGBzdHJ1Y3Qga3ZtX2FyY2hgLiBUaGlzIGZpZWxkIGlzIHNldCBkdXJpbmcgVERYIGluaXRpYWxpemF0aW9uLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIGFwcHJvYWNoIG9mIHF1ZXJ5aW5nIENQVUlEIGZvciB0aGUgbWF4aW11bSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzLiBTaW5jZSBgc3RydWN0IGt2bWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrdnphbGxvYygpYCAod2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5KSwgdGhlIG5ldyBgbWlycm9yX3Jvb3RfbGV2ZWxgIGZpZWxkIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGFueSBjb21wbGV4IGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBpbmNvcnJlY3QgcGFnZSB0YWJsZSBsZXZlbHMpIHdvdWxkIHJlc3VsdCBpbiBwYWdlIGZhdWx0cywgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgbG9naWMgdG8gZGV0ZXJtaW5lIHRoZSBURFAgKFR3by1EaW1lbnNpb25hbCBQYWdpbmcpIGxldmVsIGZvciB2aXJ0dWFsIG1hY2hpbmVzLiBJdCBpbnRyb2R1Y2VzIGBtaXJyb3Jfcm9vdF9sZXZlbGAgdG8gZml4IHRoZSByb290IGxldmVsIGZvciBWTXMgd2l0aCBtaXJyb3Igcm9vdHMgKGxpa2UgVERYIFZNcykgYW5kIHJlbW92ZXMgYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgS1ZNIE1NVSBwYWdlIHRhYmxlIHNldHVwIGFuZCBURFggaW5pdGlhbGl6YXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNmRiMTljMjQ5ZTA2MDJlYzUyYmMzY2U1MDg0NzUxM2E0NWVmNTI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMjM6MDI6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDI4Mzg0NzYxOWZmODguLmIyYTc0YzY5Y2M0YTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMTQwNiw2ICYjNDM7MTQwNiw3IEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgc3BsaXRfZGVzY19jYWNoZTtcbiBcbiBcdGdmbl90IGdmbl9kaXJlY3RfYml0cztcbiYjNDM7XHRpbnQgbWlycm9yX3Jvb3RfbGV2ZWw7XG4gXG4gXHQvKlxuIFx0ICogU2l6ZSBvZiB0aGUgQ1BVJiMzOTtzIGRpcnR5IGxvZyBidWZmZXIsIGkuZS4gVk1YJiMzOTtzIFBNTCBidWZmZXIuIEEgWmVyb1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5jIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbmluZGV4IGRkYjAyMmNiMjAzYTIuLjM0YzYwOWE2MGVlZmYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbkBAIC00ODMsMjAgJiM0Mzs0ODMsNiBAQCBpbnQgY3B1aWRfcXVlcnlfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4gMzY7XG4gfVxuIFxuLWludCBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi1cdHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICpiZXN0O1xuLVxuLVx0YmVzdCA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KHZjcHUsIDB4ODAwMDAwMDApO1xuLVx0aWYgKCFiZXN0IHx8IGJlc3QtXHUwMDNlZWF4IFx1MDAzYyAweDgwMDAwMDA4KVxuLVx0XHRnb3RvIG5vdF9mb3VuZDtcbi1cdGJlc3QgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDA4KTtcbi1cdGlmIChiZXN0KVxuLVx0XHRyZXR1cm4gKGJlc3QtXHUwMDNlZWF4IFx1MDAzZVx1MDAzZSAxNikgXHUwMDI2IDB4ZmY7XG4tbm90X2ZvdW5kOlxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qXG4gICogVGhpcyBcJiMzNDtyYXdcJiMzNDsgdmVyc2lvbiByZXR1cm5zIHRoZSByZXNlcnZlZCBHUEEgYml0cyB3aXRob3V0IGFueSBhZGp1c3RtZW50cyBmb3JcbiAgKiBlbmNyeXB0aW9uIHRlY2hub2xvZ2llcyB0aGF0IHVzdXJwIGJpdHMuICBUaGUgcmF3IG1hc2sgc2hvdWxkIGJlIHVzZWQgaWYgYW5kXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmggYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaFxuaW5kZXggOGQ4NjNmNDU1ODVkZS4uNDZiZmU4Njk5ZTY3ZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaFxuQEAgLTY4LDcgJiM0Mzs2OCw2IEBAIHZvaWQgX19pbml0IGt2bV9pbml0X3hzdGF0ZV9zaXplcyh2b2lkKTtcbiB1MzIgeHN0YXRlX3JlcXVpcmVkX3NpemUodTY0IHhzdGF0ZV9idiwgYm9vbCBjb21wYWN0ZWQpO1xuIFxuIGludCBjcHVpZF9xdWVyeV9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4taW50IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHU2NCBrdm1fdmNwdV9yZXNlcnZlZF9ncGFfYml0c19yYXcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiBzdGF0aWMgaW5saW5lIGludCBjcHVpZF9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11LmggYi9hcmNoL3g4Ni9rdm0vbW11LmhcbmluZGV4IDJhZTdmOWVkNGNmODYuLmNjMzdlMjEwNzg3YzggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUuaFxuQEAgLTM4OSw2ICYjNDM7Mzg5LDE1IEBAIHN0YXRpYyBpbmxpbmUgZ3BhX3Qga3ZtX3RyYW5zbGF0ZV9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdFx0XHRcdCAgICAgZXhjZXB0aW9uLCBwdGVfYWNjZXNzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBrdm1fbW11X3NldF9taXJyb3Jfcm9vdF9sZXZlbChzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBpbnQgbGV2ZWwpXG4mIzQzO3tcbiYjNDM7XHRCVUlMRF9CVUdfT04obGV2ZWwgIT0gNCBcdTAwMjZcdTAwMjYgbGV2ZWwgIT0gNSk7XG4mIzQzO1xuJiM0MztcdGt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsID0gbGV2ZWw7XG4mIzQzO1x0a3ZtLVx1MDAzZWFyY2guZ2ZuX2RpcmVjdF9iaXRzID0gZ3BhX3RvX2dmbihCSVRfVUxMKGxldmVsID09IDQgPyA0NyA6IDUxKSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbWlycm9yZWRfdGRwKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuaW5kZXggYzUxOWU4ZThkNjQ2Zi4uYTUxYTg1MmMxYmVjMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC01OTI4LDE5ICYjNDM7NTkyOCwxOSBAQCB2b2lkIF9fa3ZtX21tdV9yZWZyZXNoX3Bhc3N0aHJvdWdoX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0aW50IG1heHBhO1xuLVxuLVx0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTSlcbi1cdFx0bWF4cGEgPSBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIodmNwdSk7XG4tXHRlbHNlXG4tXHRcdG1heHBhID0gY3B1aWRfbWF4cGh5YWRkcih2Y3B1KTtcbi1cbiBcdC8qIHRkcF9yb290X2xldmVsIGlzIGFyY2hpdGVjdHVyZSBmb3JjZWQgbGV2ZWwsIHVzZSBpdCBpZiBub256ZXJvICovXG4gXHRpZiAodGRwX3Jvb3RfbGV2ZWwpXG4gXHRcdHJldHVybiB0ZHBfcm9vdF9sZXZlbDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSBWTSBoYXMgbWlycm9yIHJvb3RzLCB0aGVuIHRoZSByb290IGxldmVsIGlzIGZpeGVkIGFzIHRoZSBnZm5cbiYjNDM7XHQgKiB1c2VkIHRvIHNlbGVjdCBiZXR3ZWVuIHRoZSBub3JtYWwgYW5kIG1pcnJvciByb290IG11c3QgYmUgY292ZXJlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbClcbiYjNDM7XHRcdHJldHVybiB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsO1xuJiM0MztcbiBcdC8qIFVzZSA1LWxldmVsIFREUCBpZiBhbmQgb25seSBpZiBpdCYjMzk7cyB1c2VmdWwvbmVjZXNzYXJ5LiAqL1xuLVx0aWYgKG1heF90ZHBfbGV2ZWwgPT0gNSBcdTAwMjZcdTAwMjYgbWF4cGEgXHUwMDNjPSA0OClcbiYjNDM7XHRpZiAobWF4X3RkcF9sZXZlbCA9PSA1IFx1MDAyNlx1MDAyNiBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpIFx1MDAzYz0gNDgpXG4gXHRcdHJldHVybiA0O1xuIFxuIFx0cmV0dXJuIG1heF90ZHBfbGV2ZWw7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbmluZGV4IGIyNzJjMjA1ODZhNzQuLjZkOGU5YmVmZDllNjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5AQCAtNTYsOSAmIzQzOzU2LDYgQEBcbiBib29sIGVuYWJsZV90ZHggX19yb19hZnRlcl9pbml0O1xuIG1vZHVsZV9wYXJhbV9uYW1lZCh0ZHgsIGVuYWJsZV90ZHgsIGJvb2wsIDA0NDQpO1xuIFxuLSNkZWZpbmUgVERYX1NIQVJFRF9CSVRfUFdMXzUgZ3BhX3RvX2dmbihCSVRfVUxMKDUxKSlcbi0jZGVmaW5lIFREWF9TSEFSRURfQklUX1BXTF80IGdwYV90b19nZm4oQklUX1VMTCg0NykpXG4tXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnRkeF9zeXNpbmZvO1xuIFxuIHZvaWQgdGRoX3ZwX3JkX2ZhaWxlZChzdHJ1Y3QgdmNwdV90ZHggKnRkeCwgY2hhciAqdWNsYXNzLCB1MzIgZmllbGQsIHU2NCBlcnIpXG5AQCAtMTYwOSwxMCAmIzQzOzE2MDYsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV90ZHZtY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gdm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpXG4ge1xuLVx0dTY0IHNoYXJlZF9iaXQgPSAocGdkX2xldmVsID09IDUpID8gVERYX1NIQVJFRF9CSVRfUFdMXzUgOlxuLVx0XHRcdCAgVERYX1NIQVJFRF9CSVRfUFdMXzQ7XG4tXG4tXHRpZiAoS1ZNX0JVR19PTihzaGFyZWRfYml0ICE9IGt2bV9nZm5fZGlyZWN0X2JpdHModmNwdS1cdTAwM2Vrdm0pLCB2Y3B1LVx1MDAzZWt2bSkpXG4mIzQzO1x0aWYgKEtWTV9CVUdfT04ocGdkX2xldmVsICE9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWwsIHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0dGRfdm1jc193cml0ZTY0KHRvX3RkeCh2Y3B1KSwgU0hBUkVEX0VQVF9QT0lOVEVSLCByb290X2hwYSk7XG5AQCAtMjgyMyw5ICYjNDM7MjgxNyw5IEBAIHN0YXRpYyBpbnQgdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZClcbiBcdGt2bV90ZHgtXHUwMDNleGZhbSA9IHRkX3BhcmFtcy1cdTAwM2V4ZmFtO1xuIFxuIFx0aWYgKHRkX3BhcmFtcy1cdTAwM2Vjb25maWdfZmxhZ3MgXHUwMDI2IFREWF9DT05GSUdfRkxBR1NfTUFYX0dQQVcpXG4tXHRcdGt2bS1cdTAwM2VhcmNoLmdmbl9kaXJlY3RfYml0cyA9IFREWF9TSEFSRURfQklUX1BXTF81O1xuJiM0MztcdFx0a3ZtX21tdV9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA1KTtcbiBcdGVsc2Vcbi1cdFx0a3ZtLVx1MDAzZWFyY2guZ2ZuX2RpcmVjdF9iaXRzID0gVERYX1NIQVJFRF9CSVRfUFdMXzQ7XG4mIzQzO1x0XHRrdm1fbW11X3NldF9taXJyb3Jfcm9vdF9sZXZlbChrdm0sIDQpO1xuIFxuIFx0a3ZtX3RkeC1cdTAwM2VzdGF0ZSA9IFREX1NUQVRFX0lOSVRJQUxJWkVEO1xuIG91dDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtJTlRFTF9URFhfSE9TVCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUxfVERYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGR4X3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O3RkeF9sb2FkX21tdV9wZ2QmIzM0OywKICAgICYjMzQ7a3ZtX2luaXRfbW11JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgbG9naWMgdG8gZGV0ZXJtaW5lIHRoZSBURFAgKFR3by1EaW1lbnNpb25hbCBQYWdpbmcpIGxldmVsIGZvciB2aXJ0dWFsIG1hY2hpbmVzLiBJdCBpbnRyb2R1Y2VzIGBtaXJyb3Jfcm9vdF9sZXZlbGAgdG8gZml4IHRoZSByb290IGxldmVsIGZvciBWTXMgd2l0aCBtaXJyb3Igcm9vdHMgKGxpa2UgVERYIFZNcykgYW5kIHJlbW92ZXMgYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgS1ZNIE1NVSBwYWdlIHRhYmxlIHNldHVwIGFuZCBURFggaW5pdGlhbGl6YXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNmRiMTljMjQ5ZTA2MDJlYzUyYmMzY2U1MDg0NzUxM2E0NWVmNTI5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMjM6MDI6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAyODM4NDc2MTlmZjg4Li5iMmE3NGM2OWNjNGE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTE0MDYsNiAmIzQzOzE0MDYsNyBAQCBzdHJ1Y3Qga3ZtX2FyY2ggewogCXN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBzcGxpdF9kZXNjX2NhY2hlOwogCiAJZ2ZuX3QgZ2ZuX2RpcmVjdF9iaXRzOwomIzQzOwlpbnQgbWlycm9yX3Jvb3RfbGV2ZWw7CiAKIAkvKgogCSAqIFNpemUgb2YgdGhlIENQVSYjMzk7cyBkaXJ0eSBsb2cgYnVmZmVyLCBpLmUuIFZNWCYjMzk7cyBQTUwgYnVmZmVyLiBBIFplcm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5jIGIvYXJjaC94ODYva3ZtL2NwdWlkLmMKaW5kZXggZGRiMDIyY2IyMDNhMi4uMzRjNjA5YTYwZWVmZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2NwdWlkLmMKQEAgLTQ4MywyMCAmIzQzOzQ4Myw2IEBAIGludCBjcHVpZF9xdWVyeV9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlyZXR1cm4gMzY7CiB9CiAKLWludCBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCXN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICpiZXN0OwotCi0JYmVzdCA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KHZjcHUsIDB4ODAwMDAwMDApOwotCWlmICghYmVzdCB8fCBiZXN0LSZndDtlYXggJmx0OyAweDgwMDAwMDA4KQotCQlnb3RvIG5vdF9mb3VuZDsKLQliZXN0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAwOCk7Ci0JaWYgKGJlc3QpCi0JCXJldHVybiAoYmVzdC0mZ3Q7ZWF4ICZndDsmZ3Q7IDE2KSAmYW1wOyAweGZmOwotbm90X2ZvdW5kOgotCXJldHVybiAwOwotfQotCiAvKgogICogVGhpcyAmIzM0O3JhdyYjMzQ7IHZlcnNpb24gcmV0dXJucyB0aGUgcmVzZXJ2ZWQgR1BBIGJpdHMgd2l0aG91dCBhbnkgYWRqdXN0bWVudHMgZm9yCiAgKiBlbmNyeXB0aW9uIHRlY2hub2xvZ2llcyB0aGF0IHVzdXJwIGJpdHMuICBUaGUgcmF3IG1hc2sgc2hvdWxkIGJlIHVzZWQgaWYgYW5kCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vY3B1aWQuaCBiL2FyY2gveDg2L2t2bS9jcHVpZC5oCmluZGV4IDhkODYzZjQ1NTg1ZGUuLjQ2YmZlODY5OWU2N2YgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9jcHVpZC5oCkBAIC02OCw3ICYjNDM7NjgsNiBAQCB2b2lkIF9faW5pdCBrdm1faW5pdF94c3RhdGVfc2l6ZXModm9pZCk7CiB1MzIgeHN0YXRlX3JlcXVpcmVkX3NpemUodTY0IHhzdGF0ZV9idiwgYm9vbCBjb21wYWN0ZWQpOwogCiBpbnQgY3B1aWRfcXVlcnlfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotaW50IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdTY0IGt2bV92Y3B1X3Jlc2VydmVkX2dwYV9iaXRzX3JhdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiBzdGF0aWMgaW5saW5lIGludCBjcHVpZF9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUuaCBiL2FyY2gveDg2L2t2bS9tbXUuaAppbmRleCAyYWU3ZjllZDRjZjg2Li5jYzM3ZTIxMDc4N2M4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS5oCkBAIC0zODksNiAmIzQzOzM4OSwxNSBAQCBzdGF0aWMgaW5saW5lIGdwYV90IGt2bV90cmFuc2xhdGVfZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkJCSAgICAgZXhjZXB0aW9uLCBwdGVfYWNjZXNzKTsKIH0KIAomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBrdm1fbW11X3NldF9taXJyb3Jfcm9vdF9sZXZlbChzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7CQkJCQkJCSAgaW50IGxldmVsKQomIzQzO3sKJiM0MzsJQlVJTERfQlVHX09OKGxldmVsICE9IDQgJmFtcDsmYW1wOyBsZXZlbCAhPSA1KTsKJiM0MzsKJiM0MzsJa3ZtLSZndDthcmNoLm1pcnJvcl9yb290X2xldmVsID0gbGV2ZWw7CiYjNDM7CWt2bS0mZ3Q7YXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBncGFfdG9fZ2ZuKEJJVF9VTEwobGV2ZWwgPT0gNCA/IDQ3IDogNTEpKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2hhc19taXJyb3JlZF90ZHAoY29uc3Qgc3RydWN0IGt2bSAqa3ZtKQogewogCXJldHVybiBrdm0tJmd0O2FyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCmluZGV4IGM1MTllOGU4ZDY0NmYuLmE1MWE4NTJjMWJlYzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwpAQCAtNTkyOCwxOSAmIzQzOzU5MjgsMTkgQEAgdm9pZCBfX2t2bV9tbXVfcmVmcmVzaF9wYXNzdGhyb3VnaF9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAogc3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlpbnQgbWF4cGE7Ci0KLQlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk0pCi0JCW1heHBhID0gY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHZjcHUpOwotCWVsc2UKLQkJbWF4cGEgPSBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpOwotCiAJLyogdGRwX3Jvb3RfbGV2ZWwgaXMgYXJjaGl0ZWN0dXJlIGZvcmNlZCBsZXZlbCwgdXNlIGl0IGlmIG5vbnplcm8gKi8KIAlpZiAodGRwX3Jvb3RfbGV2ZWwpCiAJCXJldHVybiB0ZHBfcm9vdF9sZXZlbDsKIAomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGUgVk0gaGFzIG1pcnJvciByb290cywgdGhlbiB0aGUgcm9vdCBsZXZlbCBpcyBmaXhlZCBhcyB0aGUgZ2ZuCiYjNDM7CSAqIHVzZWQgdG8gc2VsZWN0IGJldHdlZW4gdGhlIG5vcm1hbCBhbmQgbWlycm9yIHJvb3QgbXVzdCBiZSBjb3ZlcmVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5taXJyb3Jfcm9vdF9sZXZlbCkKJiM0MzsJCXJldHVybiB2Y3B1LSZndDtrdm0tJmd0O2FyY2gubWlycm9yX3Jvb3RfbGV2ZWw7CiYjNDM7CiAJLyogVXNlIDUtbGV2ZWwgVERQIGlmIGFuZCBvbmx5IGlmIGl0JiMzOTtzIHVzZWZ1bC9uZWNlc3NhcnkuICovCi0JaWYgKG1heF90ZHBfbGV2ZWwgPT0gNSAmYW1wOyZhbXA7IG1heHBhICZsdDs9IDQ4KQomIzQzOwlpZiAobWF4X3RkcF9sZXZlbCA9PSA1ICZhbXA7JmFtcDsgY3B1aWRfbWF4cGh5YWRkcih2Y3B1KSAmbHQ7PSA0OCkKIAkJcmV0dXJuIDQ7CiAKIAlyZXR1cm4gbWF4X3RkcF9sZXZlbDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCmluZGV4IGIyNzJjMjA1ODZhNzQuLjZkOGU5YmVmZDllNjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC90ZHguYwpAQCAtNTYsOSAmIzQzOzU2LDYgQEAKIGJvb2wgZW5hYmxlX3RkeCBfX3JvX2FmdGVyX2luaXQ7CiBtb2R1bGVfcGFyYW1fbmFtZWQodGR4LCBlbmFibGVfdGR4LCBib29sLCAwNDQ0KTsKIAotI2RlZmluZSBURFhfU0hBUkVEX0JJVF9QV0xfNSBncGFfdG9fZ2ZuKEJJVF9VTEwoNTEpKQotI2RlZmluZSBURFhfU0hBUkVEX0JJVF9QV0xfNCBncGFfdG9fZ2ZuKEJJVF9VTEwoNDcpKQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqdGR4X3N5c2luZm87CiAKIHZvaWQgdGRoX3ZwX3JkX2ZhaWxlZChzdHJ1Y3QgdmNwdV90ZHggKnRkeCwgY2hhciAqdWNsYXNzLCB1MzIgZmllbGQsIHU2NCBlcnIpCkBAIC0xNjA5LDEwICYjNDM7MTYwNiw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Rkdm1jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogdm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpCiB7Ci0JdTY0IHNoYXJlZF9iaXQgPSAocGdkX2xldmVsID09IDUpID8gVERYX1NIQVJFRF9CSVRfUFdMXzUgOgotCQkJICBURFhfU0hBUkVEX0JJVF9QV0xfNDsKLQotCWlmIChLVk1fQlVHX09OKHNoYXJlZF9iaXQgIT0ga3ZtX2dmbl9kaXJlY3RfYml0cyh2Y3B1LSZndDtrdm0pLCB2Y3B1LSZndDtrdm0pKQomIzQzOwlpZiAoS1ZNX0JVR19PTihwZ2RfbGV2ZWwgIT0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm1pcnJvcl9yb290X2xldmVsLCB2Y3B1LSZndDtrdm0pKQogCQlyZXR1cm47CiAKIAl0ZF92bWNzX3dyaXRlNjQodG9fdGR4KHZjcHUpLCBTSEFSRURfRVBUX1BPSU5URVIsIHJvb3RfaHBhKTsKQEAgLTI4MjMsOSAmIzQzOzI4MTcsOSBAQCBzdGF0aWMgaW50IHRkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpCiAJa3ZtX3RkeC0mZ3Q7eGZhbSA9IHRkX3BhcmFtcy0mZ3Q7eGZhbTsKIAogCWlmICh0ZF9wYXJhbXMtJmd0O2NvbmZpZ19mbGFncyAmYW1wOyBURFhfQ09ORklHX0ZMQUdTX01BWF9HUEFXKQotCQlrdm0tJmd0O2FyY2guZ2ZuX2RpcmVjdF9iaXRzID0gVERYX1NIQVJFRF9CSVRfUFdMXzU7CiYjNDM7CQlrdm1fbW11X3NldF9taXJyb3Jfcm9vdF9sZXZlbChrdm0sIDUpOwogCWVsc2UKLQkJa3ZtLSZndDthcmNoLmdmbl9kaXJlY3RfYml0cyA9IFREWF9TSEFSRURfQklUX1BXTF80OwomIzQzOwkJa3ZtX21tdV9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA0KTsKIAogCWt2bV90ZHgtJmd0O3N0YXRlID0gVERfU1RBVEVfSU5JVElBTElaRUQ7CiBvdXQ6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNTkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGlzIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgZmV3IGtleSBLVk0gZmlsZXMsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIHg4NiBhcmNoaXRlY3R1cmUgYW5kLCBub3RhYmx5LCBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKS4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBga3ZtX2hvc3QuaGAsIGBjcHVpZC5jL2hgLCBgbW11LmgvY2AsIGFuZCBgdGR4LmNgLiBNeSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmc7IGFueSBjaGFuZ2UgdGhhdCB0b3VjaGVzIHRoZSBNTVUgYW5kIFREWCBpbiBLVk0gaXMgd29ydGggYSBjbG9zZXIgbG9vay4KClRoZSBnaXN0IG9mIGl0IHNlZW1zIHRvIGJlIHJlbW92aW5nIGBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHJgIGFuZCBpbnRyb2R1Y2luZyBga3ZtX21tdV9zZXRfbWlycm9yX3Jvb3RfbGV2ZWxgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBob3cgS1ZNIGhhbmRsZXMgdGhlIGd1ZXN0JiMzOTtzIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UsIHBhcnRpY3VsYXJseSB3aXRoIFREWC4gVGhleSYjMzk7cmUgY2hhbmdpbmcgaG93IHRoZSAmIzM0O1REUCBsZXZlbCYjMzQ7IGlzIGRldGVybWluZWQgdmlhIGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgLCBub3cgcmVseWluZyBvbiBgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm1pcnJvcl9yb290X2xldmVsYCBpbnN0ZWFkIG9mIHRoZSBDUFVJRCBxdWVyeS4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlLgoKTm93LCBURFggaXMsIG9mIGNvdXJzZSwgaGFyZHdhcmUtZGVwZW5kZW50LiBCdXQsIEtWTSBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgYC9kZXYva3ZtYCBpb2N0bHMsIGFuZCBhbnkgY29kZSBwYXRoIHJlYWNoYWJsZSB0aHJvdWdoIHRob3NlIGlvY3RscyBpcyBmYWlyIGdhbWUgZm9yIGZ1enppbmcuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyBURFggcmVxdWlyZSBhY3R1YWwgcGh5c2ljYWwgaGFyZHdhcmUsIG9yIGlzIFFFTVUgc2ltdWxhdGluZyBpdCBzdWZmaWNpZW50bHk/IEludGVsJiMzOTtzIFREWCBpcyBhIGJpdCBvZiBhIG1vdmluZyB0YXJnZXQsIHNvIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIFFFTVUgc3RhdHVzLgoKTGV0IG1lIHRoaW5r4oCmIHRoZSBrZXkgaGVyZSBpcyBgbWlycm9yX3Jvb3RfbGV2ZWxgLiBUaGlzIGlzIHRoZSB2YXJpYWJsZSB0aGV5JiMzOTtyZSBzZXR0aW5nIGluIGB0ZHhfdGRfaW5pdGAsIHdoaWNoIGlzIGNhbGxlZCB0aHJvdWdoIHRoZSBgS1ZNX01FTU9SWV9FTkNSWVBUX09QYCBpb2N0bC4gU28sIHRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IOKAkyB0aGUgaW9jdGwsIGFuZCB0aGUgY29kZSBwYXRoIHRocm91Z2ggYHRkeF90ZF9pbml0YCB0aGF0IHVsdGltYXRlbHkgc2V0cyBgbWlycm9yX3Jvb3RfbGV2ZWxgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldyBga3ZtX21tdV9nZXRfdGRwX2xldmVsYCBsZXZlcmFnZXMgdGhpcyBgbWlycm9yX3Jvb3RfbGV2ZWxgLiBNeSBwbGFuIGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGF0IHZhbHVlIGlzIHNldCBhbmQgdGhlbiB1dGlsaXplZC4gVGhpcyBpcyBhbGwgTU1VLXJlbGF0ZWQsIGFuZCBwb3RlbnRpYWxseSBzZWN1cml0eS1jcml0aWNhbCwgc28gaXQmIzM5O3Mgd29ydGggdGhlIGRlZXAgZGl2ZS4gTGV0JiMzOTtzIGRpZyBpbnRvIGB0ZHhfdGRfaW5pdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGR4X3RkX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC90ZHguYz0yMzg3PXN0YXRpYyBpbnQgc2V0dXBfdGRwYXJhbXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yNDMwLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoyNDMxOnN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjQzMi1cdFx0XHQgdTY0ICpzZWFtY2FsbF9lcnIpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yNzUzPURFRklORV9DTEFTUyh0ZHhfdm1fc3RhdGVfZ3VhcmQsIHRkeF92bV9zdGF0ZV9ndWFyZF90LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjc1Ni1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6Mjc1NzpzdGF0aWMgaW50IHRkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI3NTgte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjgwOS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MjgxMDpcdHJldCA9IF9fdGR4X3RkX2luaXQoa3ZtLCB0ZF9wYXJhbXMsIFx1MDAyNmNtZC1cdTAwM2Vod19lcnJvcik7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI4MTEtXHRpZiAocmV0KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MjkwMz1pbnQgdGR4X3ZtX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yOTIwLVx0Y2FzZSBLVk1fVERYX0lOSVRfVk06XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjI5MjE6XHRcdHIgPSB0ZHhfdGRfaW5pdChrdm0sIFx1MDAyNnRkeF9jbWQpO1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yOTIyLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjgxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtWTSBNTVUgQ2hhbmdlIGZvciBQb3RlbnRpYWwgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAuIEkgc2VlIHRoYXQgdGhlIGNoYW5nZXMsIHBhcnRpY3VsYXJseSB0aGUgcmVtb3ZhbCBvZiBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYCBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBjaGVja2luZyBgbWlycm9yX3Jvb3RfbGV2ZWxgLCBpbXBhY3QgZXZlbiBub24tVERYIFZNcyBpZiBgbWlycm9yX3Jvb3RfbGV2ZWxgIGlzIHNldCDigJMgd2hpY2gsIGFzIGZhciBhcyBJIGNhbiB0ZWxsIGZyb20gdGhlIGNvZGUsICpvbmx5KiBoYXBwZW5zIGluIGB0ZHhfdGRfaW5pdGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHBheSBhdHRlbnRpb24gdG8uIEFueSB0aW1lIHdlJiMzOTtyZSB0b3VjaGluZyBjb3JlIEtWTSBNTVUgbG9naWMgbGlrZSB0aGlzLCBpdCYjMzk7cyB3b3J0aCBhIGNsb3NlciBsb29rIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKVGhlIGNvZGUmIzM5O3MgbG9naWMgaXMgc2hpZnRpbmcgaGVyZS4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHVzaW5nIGEgVERYLXNwZWNpZmljIGZ1bmN0aW9uIGBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHJgLCBidXQgbm93IGl0IHNlZW1zIGxpa2UgdGhlIHBhdGNoJiMzOTtzIHJlcGxhY2luZyBpdCB3aXRoIGEgY2FsbCB0byBgY3B1aWRfbWF4cGh5YWRkcmAgdW5sZXNzIGBtaXJyb3Jfcm9vdF9sZXZlbGAgaXMgc2V0LCBpbiB3aGljaCBjYXNlIGl0IHVzZXMgdGhhdCB2YWx1ZSBhcyBhIGZpeGVkIGxldmVsLiBBbmQgaWYgaXQgaXNuJiMzOTt0IHNldCwgdGhlbiB0aGUgY29kZSBjaG9vc2VzIHRoZSBtYXggb2YgNCBvciA1IGxldmVscy4KClRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IElzIHRoaXMgYXJlYSB3b3J0aCBmdXp6aW5nPyBHaXZlbiB0aGUgY2hhbmdlcyB0byB0aGUgTU1VJiMzOTtzIGJlaGF2aW9yLCBJJiMzOTtkIHNheSBhIHJlc291bmRpbmcgeWVzLiBBbnkgY2hhbmdlIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBhbHdheXMgd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueS4gTGV0IG1lIG1ha2UgYSBtZW50YWwgbm90ZSB0byBjb25maXJtIHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGJyZWFrIFREWC4KCk5vdywgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgdGhlIG5lY2Vzc2FyeSBidWlsZCBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7bGwgbmVlZCBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAgdG8gZ2V0IHN0YXJ0ZWQsIG9idmlvdXNseS4gQnV0IGdpdmVuIHRoZSBURFggY29ubmVjdGlvbiwgSSBzaG91bGQgYWxzbyBjaGVjayBpZiBgSU5URUxfVERYX0hPU1RgIGlzIHJlcXVpcmVkIGZvciBmdWxsIGNvdmVyYWdlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgYXJjaC94ODYva3ZtL0tjb25maWdgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9JTlRFTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODc3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBLVk1fSU5URUxfVERYYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIGBLVk1fSU5URUxfVERYYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY3kgY2hhaW4uIEkga25vdyB0aGlzIGlzIGEgY29tcGxleCBhcmVhLCBwb3RlbnRpYWxseSBpbnZvbHZpbmcgQ1BVIGZlYXR1cmVzLCBzcGVjaWZpYyBrZXJuZWwgbW9kdWxlcywgYW5kIHBvdGVudGlhbGx5IGV2ZW4gZmlybXdhcmUgaW50ZXJhY3Rpb25zLgoKTXkgaW5pdGlhbCBsaW5lIG9mIGlucXVpcnkgd2lsbCBiZSB0byBtYXAgb3V0IGFsbCB0aGUgaW1tZWRpYXRlIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB3aGljaCBvdGhlciBLVk0gY29tcG9uZW50cywgSW50ZWwtc3BlY2lmaWMgbW9kdWxlcywgb3IgZXZlbiBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXRpZXMgYXJlIHJlcXVpcmVkIGZvciBgS1ZNX0lOVEVMX1REWGAgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIG5vdCBqdXN0IGRpcmVjdCBkZXBlbmRlbmNpZXMsIGJ1dCBhbHNvIHBvdGVudGlhbCBpbmRpcmVjdCByZWxhdGlvbnNoaXBzIGFuZCBhbnkgY29uZmxpY3RpbmcgbW9kdWxlIGNvbWJpbmF0aW9ucy4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNoYW5nZXMgaW4gdXBzdHJlYW0ga2VybmVscyBvciBkaXN0cmlidXRpb25zIGFuZCBpZiB0aGVyZSBhcmUgYW55IGRvY3VtZW50ZWQgY2F2ZWF0cyBvciByZXN0cmljdGlvbnMuIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbnkgc2VjdXJpdHkgaW1wbGljYXRpb25zIG9mIGFueSBvZiB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgaG93IHRob3NlIG1pZ2h0IGltcGFjdCB0aGUgb3ZlcmFsbCBURFggc29sdXRpb24uIEkmIzM5O2xsIGFsc28gYmUgd2F0Y2hpbmcgZm9yIGFueSByZWNlbnQgcGF0Y2hlcywgYnVnIGZpeGVzLCBvciBlbmhhbmNlbWVudHMgdGhhdCBtaWdodCB0b3VjaCBvbiByZWxhdGVkIGNvZGUgcGF0aHMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlIG9mIHRoZSBURFggbGFuZHNjYXBlIGFuZCBhbnl0aGluZyB0aGF0IG1pZ2h0IGJlIGJyb2tlbiwgb3IgdGhhdCBtaWdodCByZXF1aXJlIHVwZGF0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fSU5URUxfVERYJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyOTUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEtWTSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGEgc3BlY2lmaWMgYXNwZWN0IG9mIHRoZSBLVk0gY29uZmlndXJhdGlvbiBvbiB4ODYsIHByb2JhYmx5IHJlbGF0ZWQgdG8gYSByZWNlbnQgY2hhbmdlIG9yIGEgcGVjdWxpYXIgYmVoYXZpb3IgSSYjMzk7bSB0cm91Ymxlc2hvb3RpbmcuIExldCYjMzk7cyBzdGFydCB3aXRoIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMTM0LiBUaGF0IGZpbGUgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB2YXJpb3VzIEtWTSBmZWF0dXJlcyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciBjb25maWd1cmVkIGZvciB4ODYuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBkZXBlbmRlbmN5IHRoZXJlIHRoYXQmIzM5O3MgcmVsZXZhbnQgdG8gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQuIEhvcGVmdWxseSwgaXTigJlzIG5vdCB0b28gZGVlcGx5IG5lc3RlZCB3aXRoaW4gaW5jbHVkZXMhIFRpbWUgdG8gZ2V0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdFx0ICBndWVzdHMgdmlhIGEgZGV2aWNlIG5vZGUsIGUuZy4gL2Rldi9zZ3hfdmVwYy5cbiAxMzE6XHRcbiAxMzI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxMzM6XHRcbiAxMzQ6XHRjb25maWcgS1ZNX0lOVEVMX1REWFxuIDEzNTpcdFx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4gMTM2Olx0XHRkZWZhdWx0IHlcbiAxMzc6XHRcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcbiAxMzg6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIDEzOTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE0MDpcdFx0aGVscFxuIDE0MTpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcbiAxNDI6XHRcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxuIDE0MzpcdFxuIDE0NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDE0NTpcdFxuIDE0NjpcdGNvbmZpZyBLVk1fQU1EXG4gMTQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbiAxNDg6XHRcdGRlcGVuZHMgb24gS1ZNIFx1MDAyNlx1MDAyNiAoQ1BVX1NVUF9BTUQgfHwgQ1BVX1NVUF9IWUdPTilcbiAxNDk6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgxMwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gVERYIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNldHRpbmcgdXAgdGhpcyBURFggZW52aXJvbm1lbnQuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgY29yZSBjb21wb25lbnRzIGFyZSBpbiBwbGFjZS4gVGhlIG9idmlvdXMgb25lcyBhcmUgYEtWTWAgZm9yIHRoZSB2aXJ0dWFsaXphdGlvbiBsYXllciwgYEtWTV9JTlRFTGAgZm9yIEludGVsLXNwZWNpZmljIHN1cHBvcnQsIGFuZCB0aGUgVERYLXNwZWNpZmljIG1vZHVsZXM6IGBJTlRFTF9URFhfSE9TVGAgYW5kIGBLVk1fSU5URUxfVERYYC4gQnV0IGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgSU5URUxfVERYX0hPU1RgLiBUaGF0IG1vZHVsZSBpcyBrZXksIHNvIGxldCYjMzk7cyBzdGFydCB0aGVyZSBhbmQgc2VlIHdoYXQgaXQgcmVsaWVzIG9uLiBXZSBkb24mIzM5O3Qgd2FudCB0byBnZXQgYWhlYWQgb2Ygb3Vyc2VsdmVzIGFuZCBtaXNzIGEgY3JpdGljYWwgY29tcG9uZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5URUxfVERYX0hPU1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz0xODQ0PWNvbmZpZyBYODZfVVNFUl9TSEFET1dfU1RBQ0tcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjMtXG5hcmNoL3g4Ni9LY29uZmlnOjE4NjQ6Y29uZmlnIElOVEVMX1REWF9IT1NUXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTQ0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgeDg2IEFyY2hpdGVjdHVyZSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhpcyB4ODYgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSB6ZXJvaW5nIGluIG9uIGBhcmNoL3g4Ni9LY29uZmlnYCwgYXJvdW5kIGxpbmUgMTg2NCwgcmlnaHQ/IFRoYXQmIzM5O3MgdHlwaWNhbGx5IHdoZXJlIHRoZXkgc3RhcnQgZGVmaW5pbmcgb3B0aW9ucyBpbiB0ZXJtcyBvZiBDUFUgZmVhdHVyZXMgb3IgY29tcGlsZXIgZmxhZ3MuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGludGVycmVsYXRlIGFuZCB3aGF0IHRoZSByYXRpb25hbGUgaXMuIEl0IGNvdWxkIGJlIGEgc3BlY2lmaWMgZmVhdHVyZSBJJiMzOTttIGludGVyZXN0ZWQgaW4gb3IgYSBkZWJ1Z2dpbmcgb3B0aW9uIHRoYXQmIzM5O3MgcmVsZXZhbnQgdG8gYSBjdXJyZW50IGlzc3VlLiBMZXQmIzM5O3Mgc2VlIGlmIHRoYXQgc2VjdGlvbiBoYXMgYSBwYXJ0aWN1bGFybHkgaW50ZXJlc3Rpbmcgc3ltYm9sLCBvciBhIGRlcGVuZGVuY3kgY2hhaW4gdGhhdCB0cmlnZ2VycyBhIGNlcnRhaW4gYnVpbGQgYmVoYXZpb3IuIEkgd2FudCB0byBxdWlja2x5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY29uZmlndXJhdGlvbnMgb24gdGhlIGdlbmVyYXRlZCBpbWFnZSBvciBydW50aW1lIHBlcmZvcm1hbmNlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIGtlcm5lbCBtYWludGFpbmVycyB0aG91Z2h0IGFib3V0IHRoYXQgc3BlY2lmaWMgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODYwOlx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL2FyY2gveDg2L3Noc3RrLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbjE4NjE6XHRcbjE4NjI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjE4NjM6XHRcbjE4NjQ6XHRjb25maWcgSU5URUxfVERYX0hPU1RcbjE4NjU6XHRcdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XCYjMzQ7XG4xODY2Olx0XHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUxcbjE4Njc6XHRcdGRlcGVuZHMgb24gWDg2XzY0XG4xODY4Olx0XHRkZXBlbmRzIG9uIEtWTV9JTlRFTFxuMTg2OTpcdFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXG4xODcwOlx0XHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXG4xODcxOlx0XHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xuMTg3MjpcdFx0ZGVwZW5kcyBvbiBYODZfTUNFXG4xODczOlx0XHRoZWxwXG4xODc0Olx0XHQgIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHByb3RlY3RzIGd1ZXN0IFZNcyBmcm9tIG1hbGljaW91c1xuMTg3NTpcdFx0ICBob3N0IGFuZCBjZXJ0YWluIHBoeXNpY2FsIGF0dGFja3MuICBUaGlzIG9wdGlvbiBlbmFibGVzIG5lY2Vzc2FyeSBURFhcbjE4NzY6XHRcdCAgc3VwcG9ydCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcnVuIGNvbmZpZGVudGlhbCBWTXMuXG4xODc3Olx0XG4xODc4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4xODc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MDYKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS2VybmVsIENvbmZpZ3VyYXRpb24gTXVzaW5ncyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiBhbmQgdHJ5aW5nIHRvIG1ha2Ugc29tZSBzZW5zZSBvZiB0aGUgZGVwZW5kZW5jaWVzLiBJdCBzZWVtcyBgSU5URUxfVERYX0hPU1RgIGlzIHJlbGlhbnQgb24gYSBmZXcgdGhpbmdzOiBgQ1BVX1NVUF9JTlRFTGAsIGBYODZfNjRgLCBgS1ZNX0lOVEVMYCwgYFg4Nl9YMkFQSUNgLCBgQ09OVElHX0FMTE9DYCwgYW5kIGBYODZfTUNFYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBhbGwgdGhlIG5lY2Vzc2FyeSBwaWVjZXMgZm9yIHJ1bm5pbmcgSW50ZWwgVERYIGluIGEgaG9zdCBlbnZpcm9ubWVudC4KCkdpdmVuIHRoYXQsIEkgdGhpbmsgd2UgKmRlZmluaXRlbHkqIG5lZWQgdG8gaW5jbHVkZSBgS1ZNYCBhcyBhIGJhc2UsIHRoZW4gYEtWTV9JTlRFTGAsIGFuZCBvZiBjb3Vyc2UgYElOVEVMX1REWF9IT1NUYCBpdHNlbGYsIGFuZCBpdCBmb2xsb3dzIGxvZ2ljYWxseSB0byBhbHNvIGJyaW5nIGluIGBLVk1fSU5URUxfVERYYC4gU2VlbXMgbGlrZSBhIHNhZmUgYW5kIGxvZ2ljYWwgYXBwcm9hY2ggdG8gZW5zdXJlIHRoZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBhdCB0aGUgbG93ZXN0IGxldmVsLgoKTm93LCBJJiMzOTttIHRyeWluZyB0byB6ZXJvIGluIG9uIHdoYXQgKmFjdHVhbGx5KiBuZWVkcyBteSBhdHRlbnRpb24uIExldCYjMzk7cyBzZWUuLi4gd2hhdCBhcmUgdGhlIGtleSBzeW1ib2xzLCB0aGUgY29yZSBvZiB0aGUgaXNzdWU/IEFoLCByaWdodCwgYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAuIEkgc2VlbSB0byByZWNhbGwgdGhhdCBvbmUuIEkgdGhpbmsgaXQmIzM5O3Mgc3RhdGljIGlubGluZSBpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AsIGJ1dCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEdvdHRhIGJlIHRob3JvdWdoIHdpdGggdGhlc2UgdGhpbmdzISBObyByb29tIGZvciBhc3N1bXB0aW9ucy4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgdG8gY29uZmlybSBpdCYjMzk7cyBhY3R1YWxseSBzdGF0aWMgaW5saW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbW11X2dldF90ZHBfbGV2ZWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz01OTE0PXZvaWQgX19rdm1fbW11X3JlZnJlc2hfcGFzc3Rocm91Z2hfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTI4LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTI5OnN0YXRpYyBpbmxpbmUgaW50IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5MzAte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTk1NT1rdm1fY2FsY190ZHBfbW11X3Jvb3RfcGFnZV9yb2xlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NjUtXHRyb2xlLmFkX2Rpc2FibGVkID0gIWt2bV9hZF9lbmFibGVkO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTY2Olx0cm9sZS5sZXZlbCA9IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbCh2Y3B1KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk2Ny1cdHJvbGUuZGlyZWN0ID0gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTYwNjA9dm9pZCBrdm1faW5pdF9zaGFkb3dfbnB0X21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjA3OC1cdHJvb3Rfcm9sZSA9IGNwdV9yb2xlLmJhc2U7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYwNzk6XHRyb290X3JvbGUubGV2ZWwgPSBrdm1fbW11X2dldF90ZHBfbGV2ZWwodmNwdSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYwODAtXHRpZiAocm9vdF9yb2xlLmxldmVsID09IFBUNjRfUk9PVF81TEVWRUwgXHUwMDI2XHUwMDI2XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02Nzg1PXN0YXRpYyBpbnQgX19rdm1fbW11X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11ICptbXUsIHN0cnVjdCBrdm1fcGFnZXdhbGsgKncpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODExLVx0ICovXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY4MTI6XHRpZiAodGRwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbCh2Y3B1KSBcdTAwM2UgUFQzMkVfUk9PVF9MRVZFTClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjgxMy1cdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NzMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElubGluZSBGdW5jdGlvbioqCgpPa2F5LCBzbyB0aGlzIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGBzdGF0aWMgaW5saW5lYCwgbWVhbmluZyB0aGUgY29tcGlsZXIgaXMgZ29pbmcgdG8gc2hvdmUgaXRzIGNvZGUgZGlyZWN0bHkgaW50byB3aGVyZXZlciBpdCYjMzk7cyBjYWxsZWQuIE5vIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQsIGp1c3QgaW5saW5lZCBnb29kbmVzcy4gTm93LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgKnVzZWQqLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgYnkgYGt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGVgLCBga3ZtX2luaXRfc2hhZG93X25wdF9tbXVgLCBhbmQgYF9fa3ZtX21tdV9jcmVhdGVgLiBIbW1tLCBpbnRlcmVzdGluZy4gSG9sZCBvbiBhIHNlY29uZOKApiBga3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZWAgcmluZ3MgYSBiZWxsLiBJc24mIzM5O3QgdGhhdCBvbmUgb2YgdGhvc2UgdW5pb24gcm9sZSBmdW5jdGlvbnM/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgaXQmIzM5O3MgYWxzbyBzdGF0aWMsIGJlY2F1c2UgdGhhdCBjYW4gaW1wYWN0IHRoZSBpbmxpbmluZyBzaWduaWZpY2FudGx5LiBHb3R0YSBlbnN1cmUgdGhhdCBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIGhvdyB0aGlzIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBLVk0gY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTQ9c3RhdGljIHVuaW9uIGt2bV9tbXVfcGFnZV9yb2xlXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5NTU6a3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NTYtXHRcdFx0XHR1bmlvbiBrdm1fY3B1X3JvbGUgY3B1X3JvbGUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01OTc4PXN0YXRpYyB2b2lkIGluaXRfa3ZtX3RkcF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk4MS1cdHN0cnVjdCBrdm1fbW11ICpjb250ZXh0ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnJvb3RfbW11O1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTgyOlx0dW5pb24ga3ZtX21tdV9wYWdlX3JvbGUgcm9vdF9yb2xlID0ga3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZSh2Y3B1LCBjcHVfcm9sZSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5ODMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDk5CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDYWxsZXJzIG9mIGBpbml0X2t2bV90ZHBfbW11YCoqCgpPa2F5LCBzbyBgaW5pdF9rdm1fdGRwX21tdWAgaXMgYWxzbyBtYXJrZWQgYXMgYHN0YXRpY2AuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBTdGF0aWMgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGluIGEgS1ZNIGNvbnRleHQsIG9mdGVuIGhpbnQgYXQgZnVuY3Rpb25hbGl0eSB0aWdodGx5IGNvdXBsZWQgd2l0aGluIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGltcGxlbWVudGF0aW9uIGRldGFpbC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdGF0aWMgc3VnZ2VzdHMgaXRzIHNjb3BlIGlzIGRlbGliZXJhdGVseSBsaW1pdGVkLCB3aGljaCBjb3VsZCBtZWFuIGl0JiMzOTtzIGluaXRpYWxpemluZyBzb21ldGhpbmcgdmVyeSBzcGVjaWZpYyBmb3IgVERQIE1NVSBvcGVyYXRpb25zIHdpdGhpbiBLVk0uCgpNeSBuZXh0IG1vdmUgaXMgdG8gdHJhY2UgdGhlIGNhbGxlcnMuIFVuZGVyc3RhbmRpbmcgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIHdpbGwgZ2l2ZSBtZSB2aXRhbCBpbnNpZ2h0cyBpbnRvIGl0cyByb2xlLiBJcyBpdCBvbmx5IGNhbGxlZCBkdXJpbmcgVk0gY3JlYXRpb24sIG9yIGlzIGl0IHRyaWdnZXJlZCBvbiBzcGVjaWZpYyBldmVudHMgd2l0aGluIHRoZSBWTSYjMzk7cyBsaWZlY3ljbGU/IERvZXMgaXQgZ2V0IGNhbGxlZCBmcm9tIHRoZSBjb250ZXh0IG9mIHZDUFUgaW5pdGlhbGl6YXRpb24sIG9yIGlzIGl0IHRpZWQgdG8gdGhlIHBoeXNpY2FsIHBhZ2Ugc2V0dXA/IFRoZSBhbnN3ZXJzIHdpbGwgZGljdGF0ZSBpdHMgaW1wb3J0YW5jZSBhbmQgbGlrZWx5IHBvaW50IHRvIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wYWN0cyBvciBwb3NzaWJsZSBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIHZ1bG5lcmFiaWxpdGllcy4gVGltZSB0byBkaWcgaW50byB0aGUgY2FsbCBncmFwaCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5pdF9rdm1fdGRwX21tdSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTU9a3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTc3LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTc4OnN0YXRpYyB2b2lkIGluaXRfa3ZtX3RkcF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTc5LVx0XHRcdCAgICAgdW5pb24ga3ZtX2NwdV9yb2xlIGNwdV9yb2xlKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjE0OD12b2lkIGt2bV9pbml0X21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTU2LVx0XHRpZiAodGRwX2VuYWJsZWQpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYxNTc6XHRcdFx0aW5pdF9rdm1fdGRwX21tdSh2Y3B1LCBjcHVfcm9sZSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxNTgtXHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwNzQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvZGUgb2JzZXJ2YXRpb25zLCBwaHJhc2VkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqS1ZNIEluaXRpYWxpemF0aW9uIGFuZCBURFggQ29uY2VybnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBga3ZtX2luaXRfbW11YCBhbmQgYGt2bV9pbml0X3NoYWRvd19ucHRfbW11YCBhcmUgYm90aCBkZWNsYXJlZCBhcyBub24tc3RhdGljLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gU3RhbmRhcmQgcHJhY3RpY2Ugd2l0aGluIEtWTSwgbGlrZWx5LiBUaGVuLCB0aGVyZSYjMzk7cyBgdGR4X3RkX2luaXRgLiBBaCwgdGhhdCBvbmUgKmlzKiBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIHVzYWdlIGNvbmNlcm4uIE5vdywgd2hlcmUgaXMgaXQgY2FsbGVkIGZyb20/IExldCBtZSBsb29rLi4uIGl0JiMzOTtzIGNhbGxlZCBieSBgdGR4X3ZtX2lvY3RsYC4gSG1tLCBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIGB0ZHhfdm1faW9jdGxgIG5vdy4gSXMgdGhhdCBhbHNvIHN0YXRpYz8gTm8sIG5vIGl0JiMzOTtzIG5vdC4gQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byBgdGR4X3ZtX2lvY3RsYCB0byB1bmRlcnN0YW5kIHRoYXQgaW50ZXJmYWNlIGEgbGl0dGxlIGJldHRlciBhbmQgaG93IGB0ZHhfdGRfaW5pdGAgaXMgYmVpbmcgdXRpbGl6ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY2FsbCBncmFwaCBiZXR0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkeF92bV9pb2N0bCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L21haW4uYz04Mzk9c3RhdGljIGludCB2dF9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODQzLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODQ0Olx0cmV0dXJuIHRkeF92bV9pb2N0bChrdm0sIGFyZ3ApO1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODQ1LX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTI4ODg9c3RhdGljIGludCB0ZHhfZ2V0X2NtZCh2b2lkIF9fdXNlciAqYXJncCwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yOTAyLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoyOTAzOmludCB0ZHhfdm1faW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjkwNC17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg9MTMzPXZvaWQgdGR4X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oOjEzNDppbnQgdGR4X3ZtX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMTM1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgwNwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGlzc2VjdGluZyB0aGUgS1ZNIEVuY3J5cHRpb24gRW50cnkgUG9pbnQqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBLVk0gZW5jcnlwdGlvbiBzdHVmZiwgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGVudHJ5IHBvaW50LiBSaWdodCwgaXQgbG9va3MgbGlrZSBgdnRfbWVtX2VuY19pb2N0bGAgb3IgcG90ZW50aWFsbHkgYHRkeF92bV9pb2N0bGAgYXJlIHRoZSBjYW5kaWRhdGVzLiBIb2xkIG9uIGEgc2Vjb25kLCB0aGF0IGB2dF9tZW1fZW5jX2lvY3RsYCBmdW5jdGlvbuKApiBpc24mIzM5O3QgdGhhdCBzdGF0aWNhbGx5IGRlZmluZWQgaW4gYGFyY2gveDg2L2t2bS92bXgvbWFpbi5jYD8gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgbGV0IG1lIGRvdWJsZS1jaGVjayBob3cgaXQmIzM5O3MgYWN0dWFsbHkgYXNzaWduZWQgYW5kIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBmcm9tLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Z0X21lbV9lbmNfaW9jdGwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODMxPXN0YXRpYyB2b2lkIHZ0X3NldHVwX21jZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODM4LVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODM5OnN0YXRpYyBpbnQgdnRfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODQwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxOTIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYHZ0X21lbV9lbmNfaW9jdGxgIEFzc2lnbm1lbnQqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhlIGB2dF9tZW1fZW5jX2lvY3RsYCB2YXJpYWJsZSBpcyBiZWluZyBhc3NpZ25lZC4gVGhpcyBsaWtlbHkgaW5kaWNhdGVzIHNvbWUgY3JpdGljYWwgaW50ZXJhY3Rpb24gd2l0aCBtZW1vcnkgZW5jb2RpbmcsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBhc3NpZ25tZW50IHRvIHVuZGVyc3RhbmQ6CgoqICAgKipXaGF0IGlzIGB2dF9tZW1fZW5jX2lvY3RsYD8qKiBJcyBpdCBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiwgYSBkYXRhIHN0cnVjdHVyZSwgb3Igc29tZSBvdGhlciBpZGVudGlmaWVyPyBVbmRlcnN0YW5kaW5nIHRoZSBkYXRhIHR5cGUgaXMgcGFyYW1vdW50LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSBwcmVmZXJyZWQgdG9vbGluZyBmb3IgY29kZSBuYXZpZ2F0aW9uIGFuZCBhbmFseXNpcyB0byBnZXQgbW9yZSBjb250ZXh0IGFyb3VuZCB0aGlzIGlkZW50aWZpZXIuCiogICAqKldoZXJlIGlzIHRoaXMgYXNzaWdubWVudCBvY2N1cnJpbmc/KiogSXMgaXQgd2l0aGluIGEgZHJpdmVyLCB0aGUga2VybmVsIGNvcmUsIGEgdXNlcnNwYWNlIGFwcGxpY2F0aW9uLCBvciBzb21ldGhpbmcgZWxzZT8gVGhlIHNjb3BlIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgdGhlIGltcGFjdCBhbmQgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBDcm9zcy1yZWZlcmVuY2luZyBpdCBpcyBpbXBvcnRhbnQuCiogICAqKldoYXQgYXJlIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBvZiBjb2RlPyoqIEV4YW1pbmluZyB0aGUgY29udGV4dCBhcm91bmQgdGhlIGFzc2lnbm1lbnQgaXMgY3J1Y2lhbC4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBjaGVja3MsIGVycm9yIGhhbmRsaW5nIG1lY2hhbmlzbXMsIG9yIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHZhcmlhYmxlcz8KKiAgICoqV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgdmFsdWUgYmVpbmcgYXNzaWduZWQ/KiogSXMgdGhpcyBhIGRpcmVjdCBhc3NpZ25tZW50IGZyb20gYW4gaW5wdXQsIG9yIGlzIGl0IGRlcml2ZWQgZnJvbSBzb21lIGNhbGN1bGF0aW9uPyBLbm93aW5nIHRoZSBzb3VyY2Ugb2YgdGhlIHZhbHVlIGlzIGltcG9ydGFudCBmb3Igc2VjdXJpdHkgcmV2aWV3LgoqICAgKipEb2VzIHRoaXMgcmVsYXRlIHRvIGFueSBrbm93biB2dWxuZXJhYmlsaXRpZXMgb3IgcGVyZm9ybWFuY2UgaXNzdWVzPyoqIEkgbmVlZCB0byBtZW50YWxseSBjb25uZWN0IHRoaXMgd2l0aCBteSBleGlzdGluZyBrbm93bGVkZ2Ugb2Ygc2ltaWxhciBjb21wb25lbnRzIGFuZCBwcmV2aW91cyBmaW5kaW5ncy4KCkkmIzM5O2xsIHN0YXJ0IGJ5IGRvaW5nIGEgcXVpY2sgc2VhcmNoIGZvciB0aGUgdmFyaWFibGUsIGFuZCBJJiMzOTtsbCBqdW1wIGludG8gbXkgcHJlZmVycmVkIGRlYnVnZ2VyIG9yIHN0YXRpYyBhbmFseXNpcyB0b29sIHRvIGZpbmQgb3V0IHdoZXJlIHRoZSBhc3NpZ25tZW50IGlzIGhhcHBlbmluZy4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwubWVtX2VuY19pb2N0bC4qPS4qdnRfbWVtX2VuY19pb2N0bCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjEyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtWTS9WTVggTWVtb3J5IEVuY3J5cHRpb24gSU9DVEwqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGhlcmUgYW5kIHBpbnBvaW50IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYHZ0X21lbV9lbmNfaW9jdGxgIHdpdGhpbiB0aGUgS1ZNL1ZNWCBhcmNoaXRlY3R1cmUuIEZvcmdldCBhbnkgcHJlbGltaW5hcnkgbWVhbmRlcmluZywgSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGlzIGlzIGdvaW5nIHRvIGJlIGJ1cmllZCB3aXRoaW4gdGhlIGNvcmUgVk1YIGNvZGUsIHNvIEkmIzM5O20gc2tpcHBpbmcgdGhlIHBlcmlwaGVyYWwgZmlsZXMuIEkmIzM5O2xsIHNlYXJjaCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhcmNoL3g4Ni9rdm0vdm14L21haW4uY2AuIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBodWIgZm9yIFZNWCBmdW5jdGlvbmFsaXR5LCBhbmQgdGhlIElPQ1RMIGhhbmRsZXIgZm9yIG1lbW9yeSBlbmNyeXB0aW9uIGhhcyB0byBiZSB0aGVyZS4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiBob3cgdGhpcyBJT0NUTCBpcyBwcm9jZXNzZWQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnRfbWVtX2VuY19pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jPTgzMT1zdGF0aWMgdm9pZCB2dF9zZXR1cF9tY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTgzOC1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjgzOTpzdGF0aWMgaW50IHZ0X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg0MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDE3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB5b3UgZGVzY3JpYmVkOgoKKipTaW5nbGUgTWF0Y2ggVHJvdWJsZXNob290aW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIG9ubHkgZ290IG9uZSBtYXRjaC4gVGhhdCYjMzk7cyBub3QgaWRlYWwsIGJ1dCBpdCYjMzk7cyBlbm91Z2ggdG8gc3RhcnQgd2l0aC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb2RlLiBUaGUgcHJvYmxlbSBsaWtlbHkgbGllcyB3aXRoaW4gdGhlIHg4NiBLVk0gVk1YIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhcmNoL3g4Ni9rdm0vdm14L21haW4uY2AuIE15IGh1bmNoIGlzIHRoYXQgdGhlIHJlbGV2YW50IGNvZGUgd2lsbCBiZSBhcm91bmQgbGluZSA4MzkuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgc291cmNlIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgzMDpcdFxuIDgzMTpcdHN0YXRpYyB2b2lkIHZ0X3NldHVwX21jZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gODMyOlx0e1xuIDgzMzpcdFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG4gODM0Olx0XHRcdHJldHVybjtcbiA4MzU6XHRcbiA4MzY6XHRcdHZteF9zZXR1cF9tY2UodmNwdSk7XG4gODM3Olx0fVxuIDgzODpcdFxuIDgzOTpcdHN0YXRpYyBpbnQgdnRfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxuIDg0MDpcdHtcbiA4NDE6XHRcdGlmICghaXNfdGQoa3ZtKSlcbiA4NDI6XHRcdFx0cmV0dXJuIC1FTk9UVFk7XG4gODQzOlx0XG4gODQ0Olx0XHRyZXR1cm4gdGR4X3ZtX2lvY3RsKGt2bSwgYXJncCk7XG4gODQ1Olx0fVxuIDg0NjpcdFxuIDg0NzpcdHN0YXRpYyBpbnQgdnRfdmNwdV9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCBfX3VzZXIgKmFyZ3ApXG4gODQ4Olx0e1xuIDg0OTpcdFx0aWYgKCFpc190ZF92Y3B1KHZjcHUpKVxuIDg1MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA4NTE6XHRcbiA4NTI6XHRcdHJldHVybiB0ZHhfdmNwdV9pb2N0bCh2Y3B1LCBhcmdwKTtcbiA4NTM6XHR9XG4gODU0Olx0XG4gODU1Olx0c3RhdGljIGludCB2dF92Y3B1X21lbV9lbmNfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkIF9fdXNlciAqYXJncClcbiA4NTY6XHR7XG4gODU3Olx0XHRpZiAoIWlzX3RkX3ZjcHUodmNwdSkpXG4gODU4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDg1OTpcdFxuIDg2MDpcdFx0cmV0dXJuIHRkeF92Y3B1X3VubG9ja2VkX2lvY3RsKHZjcHUsIGFyZ3ApO1xuIDg2MTpcdH1cbiA4NjI6XHRcbiA4NjM6XHRzdGF0aWMgaW50IHZ0X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLFxuIDg2NDpcdFx0XHRcdFx0ICAgICBib29sIGlzX3ByaXZhdGUpXG4gODY1Olx0e1xuIDg2NjpcdFx0aWYgKGlzX3RkKGt2bSkpXG4gODY3Olx0XHRcdHJldHVybiB0ZHhfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChrdm0sIHBmbiwgaXNfcHJpdmF0ZSk7XG4gODY4Olx0XG4gODY5Olx0XHRyZXR1cm4gMDtcbiA4NzA6XHR9XG4gODcxOlx0XG4gODcyOlx0I2RlZmluZSB2dF9vcChuYW1lKSB2dF8jI25hbWVcbiA4NzM6XHQjZGVmaW5lIHZ0X29wX3RkeF9vbmx5KG5hbWUpIHZ0XyMjbmFtZVxuIDg3NDpcdCNlbHNlIC8qIENPTkZJR19LVk1fSU5URUxfVERYICovXG4gODc1Olx0I2RlZmluZSB2dF9vcChuYW1lKSB2bXhfIyNuYW1lXG4gODc2Olx0I2RlZmluZSB2dF9vcF90ZHhfb25seShuYW1lKSBOVUxMXG4gODc3Olx0I2VuZGlmIC8qIENPTkZJR19LVk1fSU5URUxfVERYICovXG4gODc4Olx0XG4gODc5Olx0I2RlZmluZSBWTVhfUkVRVUlSRURfQVBJQ1ZfSU5ISUJJVFNcdFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTg1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNYWNybyBBc3NpZ25tZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0JiMzOTtzIHVzaW5nIG1hY3JvcyB0byBkZWZpbmUgYHZ0X29wKG1lbV9lbmNfaW9jdGwpYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSBhIGNvbnZlbmllbnQgd2F5IG9mIGhhbmRsaW5nIGEgZnVuY3Rpb24gY2FsbCBpbiBhIHdheSB0aGF0IG1heSByZWR1Y2UgY29kZSBkdXBsaWNhdGlvbiwgYnV0IG5vdyBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBUaGUgbWFjcm8gaXRzZWxmIGRvZXNuJiMzOTt0IGdpdmUgbWUgdGhlIGZ1bGwgcGljdHVyZS4gTXkgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIHRyYWNrIGRvd24gd2hhdCBgbWVtX2VuY19pb2N0bGAgKmlzKi4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgZnVuY3Rpb24gb3IgdmFyaWFibGUgaXMgZGVmaW5lZCwgYW5kIGBhcmNoL3g4Ni9rdm0vdm14L21haW4uY2Agc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2VuY19pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jPTgzMT1zdGF0aWMgdm9pZCB2dF9zZXR1cF9tY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTgzOC1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjgzOTpzdGF0aWMgaW50IHZ0X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg0MC17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODQ2LVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODQ3OnN0YXRpYyBpbnQgdnRfdmNwdV9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCBfX3VzZXIgKmFyZ3ApXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NDgte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg4OD1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwMzQtXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDM1Olx0Lm1lbV9lbmNfaW9jdGwgPSB2dF9vcF90ZHhfb25seShtZW1fZW5jX2lvY3RsKSxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwMzY6XHQudmNwdV9tZW1fZW5jX2lvY3RsID0gdnRfb3BfdGR4X29ubHkodmNwdV9tZW1fZW5jX2lvY3RsKSxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwMzctXHQudmNwdV9tZW1fZW5jX3VubG9ja2VkX2lvY3RsID0gdnRfb3BfdGR4X29ubHkodmNwdV9tZW1fZW5jX3VubG9ja2VkX2lvY3RsKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2OTQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFREWCBWTSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGluaXRpYWxpemF0aW9uIHBhdGggZm9yIFREWCBWTXMsIGFuZCBpdCBsb29rcyBsaWtlIGB0ZHhfdm1faW9jdGxgIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQsIGludm9rZWQgdGhyb3VnaCBga3ZtX3g4Nl9vcHMubWVtX2VuY19pb2N0bGAuIFRoaXMgbWFrZXMgc2Vuc2UsIGFzIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIFREWC1zcGVjaWZpYyBzZXR1cCB3b3VsZCBiZWdpbi4gQW5kLCB3aXRoaW4gdGhhdCwgYHRkeF90ZF9pbml0YCBpcyBjYWxsZWQsIHdoaWNoIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGZ1cnRoZXIgcmVpbmZvcmNlcyBgdGR4X3ZtX2lvY3RsYCBhcyB0aGUgcHJpbWFyeSBmb2N1cy4KCkJ1dCBob2xkIG9uLCBJIHNob3VsZCBhbHNvIGxvb2sgYXQgdGhlIHN1cHBvcnRpbmcgZnVuY3Rpb25zLiBJIHNlZSB0aGF0IGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgIGlzIGNhbGxlZCBieSBga3ZtX2luaXRfbW11YCBhbmQgYGt2bV9pbml0X3NoYWRvd19ucHRfbW11YC4gSXQgc2VlbXMgbGlrZSB0aG9zZSB3b3VsZCBiZSBpbXBvcnRhbnQgdG8gdHJhY2ssIHRvbywgc2luY2UgdGhleSYjMzk7cmUgaW52b2x2ZWQgaW4gTU1VIGluaXRpYWxpemF0aW9uLCByaWdodD8gU28gbGV0JiMzOTtzIGFkZCBga3ZtX2luaXRfbW11YCBhbmQgYGt2bV9pbml0X3NoYWRvd19ucHRfbW11YCB0byB0aGUgZm9jdXMgbGlzdC4KCkhtbSwgd2FpdCwgYW0gSSBjb3JyZWN0PyBBcmUgYGt2bV9pbml0X21tdWAgYW5kIGBrdm1faW5pdF9zaGFkb3dfbnB0X21tdWAgaG90IHBhdGhzPyBObywgdGhleSBhcHBlYXIgdG8gYmUgY2FsbGVkIGR1cmluZyBNTVUgaW5pdGlhbGl6YXRpb24sIGxpa2VseSB0cmlnZ2VyZWQgYnkgdkNQVSBjcmVhdGlvbiBvciBhIHJvbGUgY2hhbmdlLiBTdGlsbCwgSSBzaG91bGQgcmV2aWV3IHRoZSBjb2RlIHRvIGVuc3VyZSB0aGF0IG5vdGhpbmcgZ2V0cyBtaXNzZWQgaGVyZS4gTGV0JiMzOTtzIGRpZyBpbnRvIGBrdm1faW5pdF9tbXVgIGFuZCBga3ZtX2luaXRfc2hhZG93X25wdF9tbXVgIGZvciBhIGRlZXBlciB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faW5pdF9tbXUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS5oPTE0MT12b2lkIGt2bV9tbXVfc2V0X2VwdF9tYXNrcyhib29sIGhhc19hZF9iaXRzKTtcbmFyY2gveDg2L2t2bS9tbXUuaC0xNDItXG5hcmNoL3g4Ni9rdm0vbW11Lmg6MTQzOnZvaWQga3ZtX2luaXRfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vbW11LmgtMTQ0LXZvaWQga3ZtX2luaXRfc2hhZG93X25wdF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyNCxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTYxNDY9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9pbml0X3NoYWRvd19lcHRfbW11KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjE0Ny1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjE0ODp2b2lkIGt2bV9pbml0X21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxNDkte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjE2MS19XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYxNjI6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9pbml0X21tdSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxNjMtXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02MTg3PXZvaWQga3ZtX21tdV9yZXNldF9jb250ZXh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxODktXHRrdm1fbW11X3VubG9hZCh2Y3B1KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjE5MDpcdGt2bV9pbml0X21tdSh2Y3B1KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjE5MS19XG4tLVxuYXJjaC94ODYva3ZtL3JlZ3MuYz0yMjA9dm9pZCBrdm1fcG9zdF9zZXRfY3IwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBvbGRfY3IwLCB1bnNpZ25lZCBsb25nIGNyMClcbi0tXG5hcmNoL3g4Ni9rdm0vcmVncy5jLTIzNC1cdFx0aWYgKHRkcF9lbmFibGVkKSB7XG5hcmNoL3g4Ni9rdm0vcmVncy5jOjIzNTpcdFx0XHRrdm1faW5pdF9tbXUodmNwdSk7XG5hcmNoL3g4Ni9rdm0vcmVncy5jLTIzNi1cdFx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz03MTQ9c3RhdGljIGludCBuZXN0ZWRfc3ZtX2xvYWRfY3IzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjMsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy03MjktXHQvKiBSZS1pbml0aWFsaXplIHRoZSBNTVUsIGUuZy4gdG8gcGljayB1cCBDUjQgTU1VIHJvbGUgY2hhbmdlcy4gKi9cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6NzMwOlx0a3ZtX2luaXRfbW11KHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy03MzEtXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0xMjI3PXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9sb2FkX2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IzLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMTI0OS1cdC8qIFJlLWluaXRpYWxpemUgdGhlIE1NVSwgZS5nLiB0byBwaWNrIHVwIENSNCBNTVUgcm9sZSBjaGFuZ2VzLiAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoxMjUwOlx0a3ZtX2luaXRfbW11KHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0xMjUxLVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz05MzQwPWludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTk0MTUtXHRrdm1fdmNwdV9yZXNldCh2Y3B1LCBmYWxzZSk7XG5hcmNoL3g4Ni9rdm0veDg2LmM6OTQxNjpcdGt2bV9pbml0X21tdSh2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy05NDE3LVx0dmNwdV9wdXQodmNwdSk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz04Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfb3BzIGt2bV9tbXVfbm90aWZpZXJfb3BzID0ge1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtODg3LVxudmlydC9rdm0va3ZtX21haW4uYzo4ODg6c3RhdGljIGludCBrdm1faW5pdF9tbXVfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtKVxudmlydC9rdm0va3ZtX21haW4uYy04ODkte1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MTA5OT1zdGF0aWMgc3RydWN0IGt2bSAqa3ZtX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUsIGNvbnN0IGNoYXIgKmZkbmFtZSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExODgtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjExODk6XHRyID0ga3ZtX2luaXRfbW11X25vdGlmaWVyKGt2bSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExOTAtXHRpZiAocilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2MDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBURFggSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gYGt2bV9pbml0X21tdWAgaXMgdHJpZ2dlcmVkIGR1cmluZyB2Q1BVIGNyZWF0aW9uIGFuZCB3aGVuZXZlciBDUjAvQ1IzIHJlZ2lzdGVycyBhcmUgbW9kaWZpZWQuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIGZyZXF1ZW5jeSwgbm90aGluZyBleGNlcHRpb25hbGx5IGhpZ2gsIGJ1dCBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBrZWVwIGFuIGV5ZSBvbiBmb3IgcGVyZm9ybWFuY2UuIEhvbGQgb24sIGB0ZHhfdm1faW9jdGxgIGlzIGFjdHVhbGx5IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBURFggaW5pdGlhbGl6YXRpb24sIHdoaWNoIGlzIG1vcmUgY3JpdGljYWwuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4KCk5vdywgdGhpcyBwYXRjaCByZW1vdmVzIGBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHJgIGFuZCBpbnN0ZWFkIHV0aWxpemVzIGBjcHVpZF9tYXhwaHlhZGRyYCBmb3IgVERYIFZNcywgYnV0IG9ubHkgaWYgdGhlIGBtaXJyb3Jfcm9vdF9sZXZlbGAgaXNuJiMzOTt0IGNvbmZpZ3VyZWQuIFRoYXQmIzM5O3MgYW4gaW50ZXJlc3RpbmcgYXJjaGl0ZWN0dXJhbCBkZWNpc2lvbi4gSG1tLCBsZXQgbWUgdGhpbmsuLi4gSSByZWNhbGwgc2VlaW5nIGBjcHVpZF9tYXhwaHlhZGRyYCBpbnZva2VkIGluIGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgLiBHaXZlbiBpdHMgbmV3IHJvbGUsIEkgc2hvdWxkIHByb2JhYmx5IGRlbHZlIGRlZXBlciBhbmQgZXhhbWluZSBgY3B1aWRfbWF4cGh5YWRkcmAgbW9yZSBjbG9zZWx5LiBJdCYjMzk7cyB0aW1lIHRvIGNoZWNrIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGF0IGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjcHVpZF9tYXhwaHlhZGRyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9jcHVpZC5jPTQ5MT11NjQga3ZtX3ZjcHVfcmVzZXJ2ZWRfZ3BhX2JpdHNfcmF3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTQ5Mi17XG5hcmNoL3g4Ni9rdm0vY3B1aWQuYzo0OTM6XHRyZXR1cm4gcnN2ZF9iaXRzKGNwdWlkX21heHBoeWFkZHIodmNwdSksIDYzKTtcbmFyY2gveDg2L2t2bS9jcHVpZC5jLTQ5NC19XG4tLVxuYXJjaC94ODYva3ZtL2NwdWlkLmg9NzE9dTY0IGt2bV92Y3B1X3Jlc2VydmVkX2dwYV9iaXRzX3JhdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL2NwdWlkLmgtNzItXG5hcmNoL3g4Ni9rdm0vY3B1aWQuaDo3MzpzdGF0aWMgaW5saW5lIGludCBjcHVpZF9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9jcHVpZC5oLTc0LXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5Mjk9c3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NDItXHQvKiBVc2UgNS1sZXZlbCBURFAgaWYgYW5kIG9ubHkgaWYgaXQmIzM5O3MgdXNlZnVsL25lY2Vzc2FyeS4gKi9cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTk0MzpcdGlmIChtYXhfdGRwX2xldmVsID09IDUgXHUwMDI2XHUwMDI2IGNwdWlkX21heHBoeWFkZHIodmNwdSkgXHUwMDNjPSA0OClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk0NC1cdFx0cmV0dXJuIDQ7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguaD02ODg9c3RhdGljIGlubGluZSBib29sIHZteF9uZWVkX3BmX2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguaC02OTMtXHRyZXR1cm4gYWxsb3dfc21hbGxlcl9tYXhwaHlhZGRyIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3ZteC92bXguaDo2OTQ6XHQgICAgICAgY3B1aWRfbWF4cGh5YWRkcih2Y3B1KSBcdTAwM2Mga3ZtX2hvc3QubWF4cGh5YWRkcjtcbmFyY2gveDg2L2t2bS92bXgvdm14LmgtNjk1LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmg9MTE3Mj12b2lkIHZjcHVfc2V0X2NwdWlkX3Byb3BlcnR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmgtMTE3NC1cdFx0XHQgICAgIHUzMiB2YWx1ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmg6MTE3NTp2b2lkIHZjcHVfc2V0X2NwdWlkX21heHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCBtYXhwaHlhZGRyKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaC0xMTc2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzc0MgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNL1REWCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBLVk0vVERYIHBlcnNwZWN0aXZlLiBJIHNlZSB0aGUgY2hhbmdlcyB0b3VjaCBga3ZtX21tdV9nZXRfdGRwX2xldmVsYCBhbmQgYHRkeF90ZF9pbml0YC4gYHRkeF90ZF9pbml0YCBpcyBzdGF0aWMsIHdoaWNoIHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24uICBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyAqd2hlcmUqIHRoYXQgc3RhdGljIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tLCBhbmQgaXQmIzM5O3MgYHRkeF92bV9pb2N0bGAuIGB0ZHhfdm1faW9jdGxgIGlzIG5vbi1zdGF0aWMsIHNvIHRoYXQgaW1tZWRpYXRlbHkgcHV0cyBpdCBvbiBteSByYWRhci4gSXQmIzM5O3MgYSBrZXkgZW50cnkgcG9pbnQgZm9yIFREWCBWTSBvcGVyYXRpb25zLiBJJiMzOTtsbCBmbGFnIHRoYXQgYXMgYSBmb2N1cyBwb2ludCBmb3IgYW5hbHlzaXMuCgpJIGFsc28gbmVlZCB0byBzZWUgd2hlcmUgaXQmIzM5O3MgY2FsbGVkLiBBbmQgYGt2bV9pbml0X21tdWAgaXMgYW5vdGhlciBnb29kIHN5bWJvbC4KCkxldCBtZSB2ZXJpZnkgdGhhdCBgdGR4X3ZtX2lvY3RsYCBpc24mIzM5O3Qgc3RhdGljLiBZZXAsIG5vbi1zdGF0aWMgY29uZmlybXMgaXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUuICBBbnl0aGluZyBlbHNlPyAgQWgsIGBrdm1fbW11X3NldF9taXJyb3Jfcm9vdF9sZXZlbGAgaXMgc3RhdGljIGlubGluZSwgc28gcHJvYmFibHkgbm90IGEgbWFqb3IgcGxheWVyIGhlcmUuCgpUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgdGR4X2xvYWRfbW11X3BnZGAuIE5vdyBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGNvZGUgY2hhbmdlczoKYGBgYwogdm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpCiB7Ci0JdTY0IHNoYXJlZF9iaXQgPSAocGdkX2xldmVsID09IDUpID8gVERYX1NIQVJFRF9CSVRfUFdMXzUgOgotCQkJICBURFhfU0hBUkVEX0JJVF9QV0xfNDsKLQotCWlmIChLVk1fQlVHX09OKHNoYXJlZF9iaXQgIT0ga3ZtX2dmbl9kaXJlY3RfYml0cyh2Y3B1LSZndDtrdm0pLCB2Y3B1LSZndDtrdm0pKQomIzQzOwlpZiAoS1ZNX0JVR19PTihwZ2RfbGV2ZWwgIT0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm1pcnJvcl9yb290X2xldmVsLCB2Y3B1LSZndDtrdm0pKQogCQlyZXR1cm47CmBgYApPa2F5LCB0aGUga2V5IGNoYW5nZSBpbiBgdGR4X2xvYWRfbW11X3BnZGAgaXMgdGhpczogdGhlIG9sZCBgc2hhcmVkX2JpdGAgY2hlY2sgYmFzZWQgb24gYHBnZF9sZXZlbGAgaXMgcmVwbGFjZWQgYnkgYSBjaGVjayBhZ2FpbnN0IGB2Y3B1LSZndDtrdm0tJmd0O2FyY2gubWlycm9yX3Jvb3RfbGV2ZWxgLiAgVGhpcyBzdWdnZXN0cyB0aGUgYG1pcnJvcl9yb290X2xldmVsYCBpcyBub3cgdGhlIGF1dGhvcml0YXRpdmUgc291cmNlIG9mIHRydXRoLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHNpbXBsaWZ5aW5nIHRoZSBsb2dpYyBhbmQgY29uc29saWRhdGluZyBzb21lIGxldmVsIHNldHRpbmdzLiBJIHdpbGwgbmVlZCB0byBsb29rIGludG8gaG93IGFuZCB3aGVyZSB0aGlzIG5ldyBgbWlycm9yX3Jvb3RfbGV2ZWxgIGlzIHNldCBhbmQgdXNlZCBub3cuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgdGR4X2xvYWRfbW11X3BnZGAgaXMgbm9uLXN0YXRpYyBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHhfbG9hZF9tbXVfcGdkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jPTYxMz1zdGF0aWMgdm9pZCB2dF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MTYtXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6NjE3Olx0XHR0ZHhfbG9hZF9tbXVfcGdkKHZjcHUsIHJvb3RfaHBhLCBwZ2RfbGV2ZWwpO1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtNjE4LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0xNTg2PXN0YXRpYyBpbnQgaGFuZGxlX3Rkdm1jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE2MDYtXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjE2MDc6dm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE2MDgte1xuLS1cbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oPTE2MD12b2lkIHRkeF9mbHVzaF90bGJfYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDoxNjE6dm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCByb290X2xldmVsKTtcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oLTE2Mi1pbnQgdGR4X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBib29sIGlzX3ByaXZhdGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIxNAoJCQkJCQkJb3V0cHV0OiAxODkKCQkJCQkJCXRob3VnaHRzOiA2NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgVGhpcyBLVk0gTU1VIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcuIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgS1ZNIE1NVSBwYXRjaCBhbmQgaGF2ZSBpZGVudGlmaWVkIHNvbWUga2V5IGFyZWFzLgoKRmlyc3QsIEkgbm90aWNlZCB0aGF0IGB0ZHhfbG9hZF9tbXVfcGdkYCBpcyBub24tc3RhdGljLCBhbmQgaW1wb3J0YW50bHksIGl0JiMzOTtzIGNhbGxlZCBieSBgdnRfbG9hZF9tbXVfcGdkYCwgd2hpY2ggaXMgYXNzaWduZWQgdG8gYGt2bV94ODZfb3BzLmxvYWRfbW11X3BnZGAuIFRoaXMgbWFrZXMgYHRkeF9sb2FkX21tdV9wZ2RgIGEgZ29vZCBwb3RlbnRpYWwgZm9jdXMgc3ltYm9sLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIFRoaXMgd2FycmFudHMgYSBkZWVwZXIgbG9vay4KCkkmIzM5O3ZlIGdvdCB0aHJlZSBjb3JlIGZvY3VzIHN5bWJvbHM6IGB0ZHhfdm1faW9jdGxgLCBgdGR4X2xvYWRfbW11X3BnZGAsIGFuZCBga3ZtX2luaXRfbW11YC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzIGFuZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgTU1VIG1vZGlmaWNhdGlvbnMuCgpGb3IgY29uZmlndXJhdGlvbnMsIEkmIzM5O2xsIG5lZWQgYEtWTWAsIGBLVk1fSU5URUxgLCBgSU5URUxfVERYX0hPU1RgLCBhbmQgYEtWTV9JTlRFTF9URFhgLiBgS1ZNX0lOVEVMX1REWGAgZGVwZW5kcyBvbiBgSU5URUxfVERYX0hPU1RgLCBzbyBJJiMzOTtsbCBpbmNsdWRlIGJvdGggdG8gYmUgc2FmZS4gSXQgbG9va3MgbGlrZSBgS1ZNX0lOVEVMX1REWGAgaXMgdGhlIGNvcnJlY3QgbmFtZS4gSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhvc2UgY29uZmlndXJhdGlvbnMgdG8gY29uZmlybS4KCkkmIzM5O3ZlIGFsc28gY29uZmlybWVkIHRoZSBuYW1lcyBvZiB0aGUgZnVuY3Rpb25zOyBgdGR4X3ZtX2lvY3RsYCBpcyB0aGUgY29ycmVjdCBuYW1lLCBhcyBpcyBgdGR4X2xvYWRfbW11X3BnZGAgYW5kIGBrdm1faW5pdF9tbXVgLgoKSSBicmllZmx5IGNvbnNpZGVyZWQgYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAsIGJ1dCBpdCYjMzk7cyBzdGF0aWMgaW5saW5lLCBzbyBpdCYjMzk7cyBub3QgYSBzdWl0YWJsZSBzeW1ib2wgdG8gdGFyZ2V0IGRpcmVjdGx5LiBIb3dldmVyLCB0aGUgY2hhbmdlcyB3aXRoaW4gdGhhdCBpbmxpbmUgZnVuY3Rpb24gYXJlIGluZGlyZWN0bHkgY292ZXJlZCBieSB0aGUgZnV6emluZyBvZiBga3ZtX2luaXRfbW11YCwgd2hpY2ggaGFuZGxlcyBNTVUgaW5pdGlhbGl6YXRpb24sIGluY2x1ZGluZyB0aGUgVERQIGxldmVsIGRldGVybWluYXRpb24sIGZvciBib3RoIFREWCBhbmQgbm9uLVREWCBWTXMuCgpKdXN0IHRvIHJlY2FwIG15IHJlYXNvbmluZzogVGhpcyBwYXRjaCBtZXNzZXMgd2l0aCBjb3JlIEtWTSBNTVUgbG9naWMuIEl0JiMzOTtzIGFib3V0IGRldGVybWluaW5nIHRoZSBURFAgbGV2ZWwgZm9yIFZNcywgaW50cm9kdWNlcyBgbWlycm9yX3Jvb3RfbGV2ZWxgLCBhbmQgcmVtb3ZlcyBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYC4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhZmZlY3QgdGhlIGZ1bmRhbWVudGFsIHBhZ2UgdGFibGUgc2V0dXAgd2l0aGluIEtWTSwgZXNwZWNpYWxseSBmb3IgVERYIFZNcywgYW5kIHRoZSBpbml0aWFsIE1NVSBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyBhbGwgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzLiBUaGlzIG1ha2VzIGl0IHJpcGUgZm9yIGZ1enppbmcuCgpTbywgdG8gc3VtbWFyaXplLCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGVzZSBzZXR0aW5nczoKCiogICBgV29ydGhGdXp6aW5nOiB0cnVlYAoqICAgYEZvY3VzU3ltYm9sczogdGR4X3ZtX2lvY3RsYCwgYHRkeF9sb2FkX21tdV9wZ2RgLCBga3ZtX2luaXRfbW11YAoqICAgYEVuYWJsZUNvbmZpZ3M6IEtWTWAsIGBLVk1fSU5URUxgLCBgSU5URUxfVERYX0hPU1RgLCBgS1ZNX0lOVEVMX1REWGAKCkkgdGhpbmsgdGhpcyBjb3ZlcnMgdGhlIGNyaXRpY2FsIGFyZWFzLiBUaW1lIHRvIG1vdmUgb24gYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtJTlRFTF9URFhfSE9TVCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUxfVERYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGR4X3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O3RkeF9sb2FkX21tdV9wZ2QmIzM0OywKICAgICYjMzQ7a3ZtX2luaXRfbW11JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgbG9naWMgdG8gZGV0ZXJtaW5lIHRoZSBURFAgKFR3by1EaW1lbnNpb25hbCBQYWdpbmcpIGxldmVsIGZvciB2aXJ0dWFsIG1hY2hpbmVzLiBJdCBpbnRyb2R1Y2VzIGBtaXJyb3Jfcm9vdF9sZXZlbGAgdG8gZml4IHRoZSByb290IGxldmVsIGZvciBWTXMgd2l0aCBtaXJyb3Igcm9vdHMgKGxpa2UgVERYIFZNcykgYW5kIHJlbW92ZXMgYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgS1ZNIE1NVSBwYWdlIHRhYmxlIHNldHVwIGFuZCBURFggaW5pdGlhbGl6YXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMX1REWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RkeF92bV9pb2N0bCYjMzQ7LAogICAgJiMzNDt0ZHhfbG9hZF9tbXVfcGdkJiMzNDssCiAgICAmIzM0O2t2bV9pbml0X21tdSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0gTU1VIGxvZ2ljIHRvIGRldGVybWluZSB0aGUgVERQIChUd28tRGltZW5zaW9uYWwgUGFnaW5nKSBsZXZlbCBmb3IgdmlydHVhbCBtYWNoaW5lcy4gSXQgaW50cm9kdWNlcyBgbWlycm9yX3Jvb3RfbGV2ZWxgIHRvIGZpeCB0aGUgcm9vdCBsZXZlbCBmb3IgVk1zIHdpdGggbWlycm9yIHJvb3RzIChsaWtlIFREWCBWTXMpIGFuZCByZW1vdmVzIGBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHJgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIEtWTSBNTVUgcGFnZSB0YWJsZSBzZXR1cCBhbmQgVERYIGluaXRpYWxpemF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBjYW4gYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBob3cgdGhlIHJvb3QgcGFnZSB0YWJsZSBsZXZlbCBpcyBkZXRlcm1pbmVkIGZvciBURFggVk1zIGluIEtWTSBieSBpbnRyb2R1Y2luZyBhIG5ldyBmaWVsZCBgbWlycm9yX3Jvb3RfbGV2ZWxgIGluIGBzdHJ1Y3Qga3ZtX2FyY2hgLiBUaGlzIGZpZWxkIGlzIHNldCBkdXJpbmcgVERYIGluaXRpYWxpemF0aW9uLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIGFwcHJvYWNoIG9mIHF1ZXJ5aW5nIENQVUlEIGZvciB0aGUgbWF4aW11bSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzLiBTaW5jZSBgc3RydWN0IGt2bWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrdnphbGxvYygpYCAod2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5KSwgdGhlIG5ldyBgbWlycm9yX3Jvb3RfbGV2ZWxgIGZpZWxkIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGFueSBjb21wbGV4IGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBpbmNvcnJlY3QgcGFnZSB0YWJsZSBsZXZlbHMpIHdvdWxkIHJlc3VsdCBpbiBwYWdlIGZhdWx0cywgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA2ZGIxOWMyNDllMDYwMmVjNTJiYzNjZTUwODQ3NTEzYTQ1ZWY1MjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAyMzowMjo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDI4Mzg0NzYxOWZmODguLmIyYTc0YzY5Y2M0YTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMTQwNiw2ICYjNDM7MTQwNiw3IEBAIHN0cnVjdCBrdm1fYXJjaCB7CiAJc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlIHNwbGl0X2Rlc2NfY2FjaGU7CiAKIAlnZm5fdCBnZm5fZGlyZWN0X2JpdHM7CiYjNDM7CWludCBtaXJyb3Jfcm9vdF9sZXZlbDsKIAogCS8qCiAJICogU2l6ZSBvZiB0aGUgQ1BVJiMzOTtzIGRpcnR5IGxvZyBidWZmZXIsIGkuZS4gVk1YJiMzOTtzIFBNTCBidWZmZXIuIEEgWmVybwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmMgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuYwppbmRleCBkZGIwMjJjYjIwM2EyLi4zNGM2MDlhNjBlZWZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vY3B1aWQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuYwpAQCAtNDgzLDIwICYjNDM7NDgzLDYgQEAgaW50IGNwdWlkX3F1ZXJ5X21heHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXJldHVybiAzNjsKIH0KIAotaW50IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0Jc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmJlc3Q7Ci0KLQliZXN0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAwMCk7Ci0JaWYgKCFiZXN0IHx8IGJlc3QtJmd0O2VheCAmbHQ7IDB4ODAwMDAwMDgpCi0JCWdvdG8gbm90X2ZvdW5kOwotCWJlc3QgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDA4KTsKLQlpZiAoYmVzdCkKLQkJcmV0dXJuIChiZXN0LSZndDtlYXggJmd0OyZndDsgMTYpICZhbXA7IDB4ZmY7Ci1ub3RfZm91bmQ6Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBUaGlzICYjMzQ7cmF3JiMzNDsgdmVyc2lvbiByZXR1cm5zIHRoZSByZXNlcnZlZCBHUEEgYml0cyB3aXRob3V0IGFueSBhZGp1c3RtZW50cyBmb3IKICAqIGVuY3J5cHRpb24gdGVjaG5vbG9naWVzIHRoYXQgdXN1cnAgYml0cy4gIFRoZSByYXcgbWFzayBzaG91bGQgYmUgdXNlZCBpZiBhbmQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5oIGIvYXJjaC94ODYva3ZtL2NwdWlkLmgKaW5kZXggOGQ4NjNmNDU1ODVkZS4uNDZiZmU4Njk5ZTY3ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2NwdWlkLmgKQEAgLTY4LDcgJiM0Mzs2OCw2IEBAIHZvaWQgX19pbml0IGt2bV9pbml0X3hzdGF0ZV9zaXplcyh2b2lkKTsKIHUzMiB4c3RhdGVfcmVxdWlyZWRfc2l6ZSh1NjQgeHN0YXRlX2J2LCBib29sIGNvbXBhY3RlZCk7CiAKIGludCBjcHVpZF9xdWVyeV9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci1pbnQgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB1NjQga3ZtX3ZjcHVfcmVzZXJ2ZWRfZ3BhX2JpdHNfcmF3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNwdWlkX21heHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS5oIGIvYXJjaC94ODYva3ZtL21tdS5oCmluZGV4IDJhZTdmOWVkNGNmODYuLmNjMzdlMjEwNzg3YzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11LmgKQEAgLTM4OSw2ICYjNDM7Mzg5LDE1IEBAIHN0YXRpYyBpbmxpbmUgZ3BhX3Qga3ZtX3RyYW5zbGF0ZV9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCQkJICAgICBleGNlcHRpb24sIHB0ZV9hY2Nlc3MpOwogfQogCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGt2bV9tbXVfc2V0X21pcnJvcl9yb290X2xldmVsKHN0cnVjdCBrdm0gKmt2bSwKJiM0MzsJCQkJCQkJICBpbnQgbGV2ZWwpCiYjNDM7ewomIzQzOwlCVUlMRF9CVUdfT04obGV2ZWwgIT0gNCAmYW1wOyZhbXA7IGxldmVsICE9IDUpOwomIzQzOwomIzQzOwlrdm0tJmd0O2FyY2gubWlycm9yX3Jvb3RfbGV2ZWwgPSBsZXZlbDsKJiM0MzsJa3ZtLSZndDthcmNoLmdmbl9kaXJlY3RfYml0cyA9IGdwYV90b19nZm4oQklUX1VMTChsZXZlbCA9PSA0ID8gNDcgOiA1MSkpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX21pcnJvcmVkX3RkcChjb25zdCBzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJcmV0dXJuIGt2bS0mZ3Q7YXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKaW5kZXggYzUxOWU4ZThkNjQ2Zi4uYTUxYTg1MmMxYmVjMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCkBAIC01OTI4LDE5ICYjNDM7NTkyOCwxOSBAQCB2b2lkIF9fa3ZtX21tdV9yZWZyZXNoX3Bhc3N0aHJvdWdoX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCiBzdGF0aWMgaW5saW5lIGludCBrdm1fbW11X2dldF90ZHBfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCWludCBtYXhwYTsKLQotCWlmICh2Y3B1LSZndDtrdm0tJmd0O2FyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTSkKLQkJbWF4cGEgPSBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIodmNwdSk7Ci0JZWxzZQotCQltYXhwYSA9IGNwdWlkX21heHBoeWFkZHIodmNwdSk7Ci0KIAkvKiB0ZHBfcm9vdF9sZXZlbCBpcyBhcmNoaXRlY3R1cmUgZm9yY2VkIGxldmVsLCB1c2UgaXQgaWYgbm9uemVybyAqLwogCWlmICh0ZHBfcm9vdF9sZXZlbCkKIAkJcmV0dXJuIHRkcF9yb290X2xldmVsOwogCiYjNDM7CS8qCiYjNDM7CSAqIElmIHRoZSBWTSBoYXMgbWlycm9yIHJvb3RzLCB0aGVuIHRoZSByb290IGxldmVsIGlzIGZpeGVkIGFzIHRoZSBnZm4KJiM0MzsJICogdXNlZCB0byBzZWxlY3QgYmV0d2VlbiB0aGUgbm9ybWFsIGFuZCBtaXJyb3Igcm9vdCBtdXN0IGJlIGNvdmVyZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm1pcnJvcl9yb290X2xldmVsKQomIzQzOwkJcmV0dXJuIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5taXJyb3Jfcm9vdF9sZXZlbDsKJiM0MzsKIAkvKiBVc2UgNS1sZXZlbCBURFAgaWYgYW5kIG9ubHkgaWYgaXQmIzM5O3MgdXNlZnVsL25lY2Vzc2FyeS4gKi8KLQlpZiAobWF4X3RkcF9sZXZlbCA9PSA1ICZhbXA7JmFtcDsgbWF4cGEgJmx0Oz0gNDgpCiYjNDM7CWlmIChtYXhfdGRwX2xldmVsID09IDUgJmFtcDsmYW1wOyBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpICZsdDs9IDQ4KQogCQlyZXR1cm4gNDsKIAogCXJldHVybiBtYXhfdGRwX2xldmVsOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKaW5kZXggYjI3MmMyMDU4NmE3NC4uNmQ4ZTliZWZkOWU2NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCkBAIC01Niw5ICYjNDM7NTYsNiBAQAogYm9vbCBlbmFibGVfdGR4IF9fcm9fYWZ0ZXJfaW5pdDsKIG1vZHVsZV9wYXJhbV9uYW1lZCh0ZHgsIGVuYWJsZV90ZHgsIGJvb2wsIDA0NDQpOwogCi0jZGVmaW5lIFREWF9TSEFSRURfQklUX1BXTF81IGdwYV90b19nZm4oQklUX1VMTCg1MSkpCi0jZGVmaW5lIFREWF9TSEFSRURfQklUX1BXTF80IGdwYV90b19nZm4oQklUX1VMTCg0NykpCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICp0ZHhfc3lzaW5mbzsKIAogdm9pZCB0ZGhfdnBfcmRfZmFpbGVkKHN0cnVjdCB2Y3B1X3RkeCAqdGR4LCBjaGFyICp1Y2xhc3MsIHUzMiBmaWVsZCwgdTY0IGVycikKQEAgLTE2MDksMTAgJiM0MzsxNjA2LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdGR2bWNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiB2b2lkIHRkeF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSwgaW50IHBnZF9sZXZlbCkKIHsKLQl1NjQgc2hhcmVkX2JpdCA9IChwZ2RfbGV2ZWwgPT0gNSkgPyBURFhfU0hBUkVEX0JJVF9QV0xfNSA6Ci0JCQkgIFREWF9TSEFSRURfQklUX1BXTF80OwotCi0JaWYgKEtWTV9CVUdfT04oc2hhcmVkX2JpdCAhPSBrdm1fZ2ZuX2RpcmVjdF9iaXRzKHZjcHUtJmd0O2t2bSksIHZjcHUtJmd0O2t2bSkpCiYjNDM7CWlmIChLVk1fQlVHX09OKHBnZF9sZXZlbCAhPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2gubWlycm9yX3Jvb3RfbGV2ZWwsIHZjcHUtJmd0O2t2bSkpCiAJCXJldHVybjsKIAogCXRkX3ZtY3Nfd3JpdGU2NCh0b190ZHgodmNwdSksIFNIQVJFRF9FUFRfUE9JTlRFUiwgcm9vdF9ocGEpOwpAQCAtMjgyMyw5ICYjNDM7MjgxNyw5IEBAIHN0YXRpYyBpbnQgdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZCkKIAlrdm1fdGR4LSZndDt4ZmFtID0gdGRfcGFyYW1zLSZndDt4ZmFtOwogCiAJaWYgKHRkX3BhcmFtcy0mZ3Q7Y29uZmlnX2ZsYWdzICZhbXA7IFREWF9DT05GSUdfRkxBR1NfTUFYX0dQQVcpCi0JCWt2bS0mZ3Q7YXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBURFhfU0hBUkVEX0JJVF9QV0xfNTsKJiM0MzsJCWt2bV9tbXVfc2V0X21pcnJvcl9yb290X2xldmVsKGt2bSwgNSk7CiAJZWxzZQotCQlrdm0tJmd0O2FyY2guZ2ZuX2RpcmVjdF9iaXRzID0gVERYX1NIQVJFRF9CSVRfUFdMXzQ7CiYjNDM7CQlrdm1fbW11X3NldF9taXJyb3Jfcm9vdF9sZXZlbChrdm0sIDQpOwogCiAJa3ZtX3RkeC0mZ3Q7c3RhdGUgPSBURF9TVEFURV9JTklUSUFMSVpFRDsKIG91dDoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBURFggS1ZNIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBkaWdnaW5nIGludG8gdGhlIEtWTSBjb2RlIGZvciBURFgg4oCTIFRydXN0IERvbWFpbiBFeHRlbnNpb25zLiBNeSBpbml0aWFsIHJlYWQgc2F5cyBpdCYjMzk7cyBmb2N1c2VkIG9uIGhvdyBtaXJyb3JlZCBUd28tRGltZW5zaW9uYWwgUGFnaW5nIChURFApIGlzIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBgbWlycm9yX3Jvb3RfbGV2ZWxgIGlzIGJlaW5nIGludHJvZHVjZWQgd2l0aGluIHRoZSBgc3RydWN0IGt2bV9hcmNoYCB0byBjb250cm9sIHRoZSByb290IGxldmVsIGZvciB0aGlzIG1pcnJvcmluZy4gSW50ZXJlc3RpbmcuIFRoZSBwYXRjaCYjMzk7cyByZXBsYWNpbmcgb2YgYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAgd2l0aCBgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm1pcnJvcl9yb290X2xldmVsYCBpbiBga3ZtX21tdV9nZXRfdGRwX2xldmVsYCBpcyBhIHByZXR0eSBkaXJlY3QgY29uc2VxdWVuY2Ugb2YgdGhpcy4gSXQmIzM5O3MgZWZmZWN0aXZlbHkgcmVtb3ZpbmcgYSBDUFVJRCBxdWVyeSBpbiBmYXZvciBvZiBhIHZhbHVlIHN0b3JlZCBpbiB0aGUgS1ZNIHN0cnVjdHVyZS4gUmVwbGFjaW5nIHRob3NlIGhhcmRjb2RlZCBgVERYX1NIQVJFRF9CSVRgIGNvbnN0YW50cyB3aXRoIGEgYGt2bV9tbXVfc2V0X21pcnJvcl9yb290X2xldmVsYCBjYWxsIGFsc28gc2ltcGxpZmllcyB0aGluZ3MuCgpNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byBiZSBzdXJlIHdlJiMzOTtyZSBub3QgaW50cm9kdWNpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS4gVGhlIGNydWNpYWwgcG9pbnQgaXMgYG1pcnJvcl9yb290X2xldmVsYCBpcyBhZGRlZCB0byBgc3RydWN0IGt2bV9hcmNoYC4gSWYgYHN0cnVjdCBrdm1fYXJjaGAgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBrdm1gLCB3aGljaCBpdCBpcywgdGhlbiB3aGVyZSBpcyB0aGUgYHN0cnVjdCBrdm1gIGFsbG9jYXRlZD8gSXMgaXQgaW5pdGlhbGl6ZWQgY29ycmVjdGx5PyBBaCwgeWVzLCBgc3RydWN0IGt2bWAgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvY2Agb3IgYHZtYWxsb2NgIHdpdGggemVyb2luZyBkdXJpbmcgYGt2bV9jcmVhdGVfdm1gLiBJIGhhdmUgdG8gdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBga3ZtX2NyZWF0ZV92bWAgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t6YWxsb2MuKnNpemVvZi4qa3ZtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc5OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBLVk0gSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gdGhlIHRyb3VibGVzaG9vdGluZyBoYXMgbGVkIHVzIHRvIHN1c3BlY3QgYW4gaXNzdWUgZHVyaW5nIHRoZSBpbml0aWFsIHNldHVwIG9mIHRoZSBLVk0gaW5mcmFzdHJ1Y3R1cmUuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgS1ZNIGFsbG9jYXRpb24gYW5kIFZNIGNyZWF0aW9uIHJvdXRpbmVzLiBJIG5lZWQgdG8gemVybyBpbiBvbiBlaXRoZXIgYGt2bV9hbGxvY2Agb3IgYGt2bV9jcmVhdGVfdm1gLiBUaGVzZSBhcmUgdGhlIGNyaXRpY2FsIHBvaW50cyB3aGVyZSB0aGUgZm91bmRhdGlvbiBmb3IgYSBuZXcgdmlydHVhbCBtYWNoaW5lIGlzIGxhaWQsIGFuZCB3aGVyZSB0aGluZ3MgY291bGQgYmUgZ29pbmcgc2lkZXdheXMuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNvZGUgcGF0aHMsIGVycm9yIGNoZWNraW5nLCBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbiB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zLiBJIGV4cGVjdCB0byBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIG9yIHBlcmhhcHMgaW5jb3JyZWN0IGFzc3VtcHRpb25zIGFib3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB0aGF0IGFyZSBtYW5pZmVzdGluZyB0aGVtc2VsdmVzIGF0IHRoaXMgc3RhZ2UuIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgaHlwZXJ2aXNvcuKAmXMgaW50ZXJuYWwgc3RydWN0dXJlcyBhbmQgd2l0aCB0aGUgZ3Vlc3QgbWVtb3J5IGFuZCBkZXZpY2UgYXNzaWdubWVudC4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBLVk0gaW5pdGlhbGl6YXRpb24gc28gYW55IHByb2JsZW0gaGVyZSBjYW4gYmUgY3JpdGljYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2MuKnNpemVvZi4qa3ZtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA3NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBga3ZtX2FyY2hfYWxsb2Nfdm1gKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIGBrdm1fYXJjaF9hbGxvY192bWAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYXJjaGl0ZWN0dXJhbCBhbGxvY2F0aW9uIHByb2Nlc3Mgd2l0aGluIEtWTS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHBsYXRmb3JtLXNwZWNpZmljIG1lbW9yeSBhbGxvY2F0aW9uIGlzIGhhbmRsZWQgYXQgdGhlIFZNIGxldmVsLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaWYgdGhlcmUgYXJlIGFueSByZWNlbnQgY2hhbmdlcyBvciBpZiB0aGVyZSBhcmUgYW55IHBvaW50cyB0aGF0IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpbiBtb3JlIGRldGFpbCwgcGVyaGFwcyBmb3IgZGVidWdnaW5nIG9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zLiBJcyB0aGVyZSBhbnl0aGluZyBzcGVjaWZpYyB0aGlzIGZ1bmN0aW9uIGRvZXMgcmVnYXJkaW5nIGFkZHJlc3NpbmcgbW9kZXMsIHBhZ2UgdGFibGUgc2V0dXAsIG9yIG1heWJlIHRoZSBhbGxvY2F0aW9uIG9mIGNvbnRyb2wgc3RydWN0dXJlcyBzcGVjaWZpYyB0byB0aGUgY2hvc2VuIGFyY2hpdGVjdHVyZT8gSSBrbm93IHRoYXQgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgdGhlIGluaXRpYWwgc2V0dXAsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfYWxsb2Nfdm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMxNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gS1ZNIFZNIENyZWF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgaG9uZSBpbiBvbiBga3ZtX2NyZWF0ZV92bWAuIFRoaXMgaXMgdGhlIGNvcmUgZnVuY3Rpb24gd2hlcmUgYSBLVk0gdmlydHVhbCBtYWNoaW5lIGlzIGJyb3VnaHQgaW50byBleGlzdGVuY2UuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGluaXRpYWxpemF0aW9uIGZsb3csIGVzcGVjaWFsbHkgbm93IHdpdGggdGhlc2UgbmV3IGFyY2hpdGVjdHVyYWwgY29uc2lkZXJhdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIHN0ZXBzIGluIGhlcmU6IHJlc291cmNlIGFsbG9jYXRpb24sIG1lbW9yeSBtYW5hZ2VtZW50IHNldHVwLCB2Q1BVIGNyZWF0aW9uLCBhbmQgdGhlIGxpa2UuIEl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGV5JiMzOTt2ZSBoYW5kbGVkIHRoZSBsYXRlc3Qgc2VjdXJpdHkgbWl0aWdhdGlvbnMgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLiBJJiMzOTttIGtlZW4gdG8gc3BvdCBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHdoZXJlIHRoZXkgbWlnaHQgaGF2ZSBpbXBsZW1lbnRlZCBjbGV2ZXIgdHJpY2tzIHRvIGVuaGFuY2UgVk0gcGVyZm9ybWFuY2Ugb3IgaXNvbGF0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXTigJlzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fY3JlYXRlX3ZtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9OTgwPXN0YXRpYyB2b2lkIGt2bV9kZXN0cm95X3ZtX2RlYnVnZnMoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtOTk3LVxudmlydC9rdm0va3ZtX21haW4uYzo5OTg6c3RhdGljIGludCBrdm1fY3JlYXRlX3ZtX2RlYnVnZnMoc3RydWN0IGt2bSAqa3ZtLCBjb25zdCBjaGFyICpmZG5hbWUpXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTk5OS17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0xMDk3PXN0YXRpYyB2b2lkIGt2bV9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uKHZvaWQpO1xudmlydC9rdm0va3ZtX21haW4uYy0xMDk4LVxudmlydC9rdm0va3ZtX21haW4uYzoxMDk5OnN0YXRpYyBzdHJ1Y3Qga3ZtICprdm1fY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSwgY29uc3QgY2hhciAqZmRuYW1lKVxudmlydC9rdm0va3ZtX21haW4uYy0xMTAwLXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExMzItXHQgKiBGb3JjZSBzdWJzZXF1ZW50IGRlYnVnZnMgZmlsZSBjcmVhdGlvbnMgdG8gZmFpbCBpZiB0aGUgVk0gZGlyZWN0b3J5XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjExMzM6XHQgKiBpcyBub3QgY3JlYXRlZCAoYnkga3ZtX2NyZWF0ZV92bV9kZWJ1Z2ZzKCkpLlxudmlydC9rdm0va3ZtX21haW4uYy0xMTM0LVx0ICovXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0xMTk2LVxudmlydC9rdm0va3ZtX21haW4uYzoxMTk3Olx0ciA9IGt2bV9jcmVhdGVfdm1fZGVidWdmcyhrdm0sIGZkbmFtZSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExOTgtXHRpZiAocilcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTU0OTk9c3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01NTExLVxudmlydC9rdm0va3ZtX21haW4uYzo1NTEyOlx0a3ZtID0ga3ZtX2NyZWF0ZV92bSh0eXBlLCBmZG5hbWUpO1xudmlydC9rdm0va3ZtX21haW4uYy01NTEzLVx0aWYgKElTX0VSUihrdm0pKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMDAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBga3ZtYCBpcyBhbGxvY2F0ZWQgaW4gYGt2bV9jcmVhdGVfdm1gLCBhcyBJJiMzOTt2ZSBiZWVuIG11bGxpbmcgaXQgb3ZlcjoKCioqRGlnZ2luZyBpbnRvIGt2bV9jcmVhdGVfdm0gYW5kIGt2bSBBbGxvY2F0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyB0cmFjZSB0aGlzLiBXaGVuIGBrdm1fY3JlYXRlX3ZtYCBnZXRzIGNhbGxlZCwgdGhlIG1haW4gZ29hbCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIEtWTSBpbnN0YW5jZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBga3ZtYCBzdHJ1Y3R1cmUgaXRzZWxmLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgb3VyIHZpcnR1YWwgbWFjaGluZSBjb250ZXh0IHdpdGhpbiB0aGUga2VybmVsLiBJIGV4cGVjdCBpdCB0byBpbnZvbHZlIHNvbWUgbWVtb3J5IGFsbG9jYXRpb24sIHByb2JhYmx5IHVzaW5nIGBrbWFsbG9jYCBvciBzaW1pbGFyLCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uIGFuZCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoZSBrZXJuZWwgbmVlZHMgdG8gc3RvcmUgc3BlY2lmaWMgdm0gaW5mb3JtYXRpb24sIHN1Y2ggYXMgVk0gSURzLCBzdGF0ZSwgYW5kIG90aGVyIFZNLXJlbGF0ZWQgc2V0dGluZ3MsIHNvIGEgc3RydWN0dXJlIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgaGVyZSwgZXZlbiBpZiBpdCBtaWdodCBiZSBhbiBvdmVyc2ltcGxpZmljYXRpb24uIEkmIzM5O2QgbmVlZCB0byBjb25zaWRlciBpZiB0aGVyZSBpcyBtb3JlIGhhcHBlbmluZyB0aGFuIGp1c3QgbWVtb3J5IGJlaW5nIGFsbG9jYXRlZCBoZXJlLiBQZXJoYXBzIHNvbWUgc2V0dXAgb2YgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBtYXliZSBpbml0aWFsaXphdGlvbiBvZiBzb21lIG11dGV4ZXMgb3IgbG9ja3MgdG8gcHJldmVudCBjb25jdXJyZW50IGFjY2VzcyBpc3N1ZXMsIG9yIGV2ZW4gc29tZSBjYWxscyB0byBob29rIGludG8gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQuIFRoZXJlJiMzOTtzIHByb2JhYmx5IGFuIGVycm9yIGhhbmRsaW5nIGNvbXBvbmVudCBpbnZvbHZlZCBhcyB3ZWxsLCB3aGVyZSBpZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gZmFpbHMsIHRoZSBmdW5jdGlvbiBuZWVkcyB0byBwcm9wZXJseSB1bndpbmQgYW5kIHJldHVybiBhbiBlcnJvciBjb2RlLiBJJiMzOTttIGtlZW4gdG8gY29uZmlybSBteSBzdXNwaWNpb24gYWJvdXQgdGhlIHVuZGVybHlpbmcgbWVtb3J5IGFsbG9jYXRpb24gZGV0YWlscy4gQWxzbywgaG93IGRvZXMgdGhpcyBwcm9jZXNzIGludGVyYWN0IHdpdGggdGhlIEtWTSBkcml2ZXImIzM5O3Mgb3ZlcmFsbCByZXNvdXJjZSBtYW5hZ2VtZW50PyBEb2VzIGl0IGFjY291bnQgZm9yIHBvdGVudGlhbCByZXNvdXJjZSBleGhhdXN0aW9uIGR1cmluZyB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzPyBVbHRpbWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nIG9mIHRoZSBsaWZlY3ljbGU6IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCB1c2UsIGFuZCBkZWFsbG9jYXRpb24gb2YgdGhpcyBzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwOTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA5OTpcdHN0YXRpYyBzdHJ1Y3Qga3ZtICprdm1fY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSwgY29uc3QgY2hhciAqZmRuYW1lKVxuMTEwMDpcdHtcbjExMDE6XHRcdHN0cnVjdCBrdm0gKmt2bSA9IGt2bV9hcmNoX2FsbG9jX3ZtKCk7XG4xMTAyOlx0XHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcbjExMDM6XHRcdGludCByLCBpLCBqO1xuMTEwNDpcdFxuMTEwNTpcdFx0aWYgKCFrdm0pXG4xMTA2Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuMTEwNzpcdFxuMTEwODpcdFx0S1ZNX01NVV9MT0NLX0lOSVQoa3ZtKTtcbjExMDk6XHRcdG1tZ3JhYihjdXJyZW50LVx1MDAzZW1tKTtcbjExMTA6XHRcdGt2bS1cdTAwM2VtbSA9IGN1cnJlbnQtXHUwMDNlbW07XG4xMTExOlx0XHRrdm1fZXZlbnRmZF9pbml0KGt2bSk7XG4xMTEyOlx0XHRtdXRleF9pbml0KFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbjExMTM6XHRcdG11dGV4X2luaXQoXHUwMDI2a3ZtLVx1MDAzZWlycV9sb2NrKTtcbjExMTQ6XHRcdG11dGV4X2luaXQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuMTExNTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbjExMTY6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmt2bS1cdTAwM2Vtbl9pbnZhbGlkYXRlX2xvY2spO1xuMTExNzpcdFx0cmN1d2FpdF9pbml0KFx1MDAyNmt2bS1cdTAwM2Vtbl9tZW1zbG90c191cGRhdGVfcmN1d2FpdCk7XG4xMTE4Olx0XHR4YV9pbml0KFx1MDAyNmt2bS1cdTAwM2V2Y3B1X2FycmF5KTtcbjExMTk6XHQjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4xMTIwOlx0XHR4YV9pbml0KFx1MDAyNmt2bS1cdTAwM2VtZW1fYXR0cl9hcnJheSk7XG4xMTIxOlx0I2VuZGlmXG4xMTIyOlx0XG4xMTIzOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZrdm0tXHUwMDNlZ3BjX2xpc3QpO1xuMTEyNDpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2a3ZtLVx1MDAzZWdwY19sb2NrKTtcbjExMjU6XHRcbjExMjY6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmt2bS1cdTAwM2VkZXZpY2VzKTtcbjExMjc6XHRcdGt2bS1cdTAwM2VtYXhfdmNwdXMgPSBLVk1fTUFYX1ZDUFVTO1xuMTEyODpcdFxuMTEyOTpcdFx0QlVJTERfQlVHX09OKEtWTV9NRU1fU0xPVFNfTlVNIFx1MDAzZSBTSFJUX01BWCk7XG4xMTMwOlx0XG4xMTMxOlx0XHQvKlxuMTEzMjpcdFx0ICogRm9yY2Ugc3Vic2VxdWVudCBkZWJ1Z2ZzIGZpbGUgY3JlYXRpb25zIHRvIGZhaWwgaWYgdGhlIFZNIGRpcmVjdG9yeVxuMTEzMzpcdFx0ICogaXMgbm90IGNyZWF0ZWQgKGJ5IGt2bV9jcmVhdGVfdm1fZGVidWdmcygpKS5cbjExMzQ6XHRcdCAqL1xuMTEzNTpcdFx0a3ZtLVx1MDAzZWRlYnVnZnNfZGVudHJ5ID0gRVJSX1BUUigtRU5PRU5UKTtcbjExMzY6XHRcbjExMzc6XHRcdHNucHJpbnRmKGt2bS1cdTAwM2VzdGF0c19pZCwgc2l6ZW9mKGt2bS1cdTAwM2VzdGF0c19pZCksIFwmIzM0O2t2bS0lZFwmIzM0OyxcbjExMzg6XHRcdFx0IHRhc2tfcGlkX25yKGN1cnJlbnQpKTtcbjExMzk6XHRcbjExNDA6XHRcdHIgPSAtRU5PTUVNO1xuMTE0MTpcdFx0aWYgKGluaXRfc3JjdV9zdHJ1Y3QoXHUwMDI2a3ZtLVx1MDAzZXNyY3UpKVxuMTE0MjpcdFx0XHRnb3RvIG91dF9lcnJfbm9fc3JjdTtcbjExNDM6XHRcdGlmIChpbml0X3NyY3Vfc3RydWN0KFx1MDAyNmt2bS1cdTAwM2VpcnFfc3JjdSkpXG4xMTQ0Olx0XHRcdGdvdG8gb3V0X2Vycl9ub19pcnFfc3JjdTtcbjExNDU6XHRcbjExNDY6XHRcdHIgPSBrdm1faW5pdF9pcnFfcm91dGluZyhrdm0pO1xuMTE0NzpcdFx0aWYgKHIpXG4xMTQ4Olx0XHRcdGdvdG8gb3V0X2Vycl9ub19pcnFfcm91dGluZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM1MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSHVudGluZyBEb3duIGBrdm1fYXJjaF9hbGxvY192bWAgaW4gdGhlIHg4NiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBrdm1fYXJjaF9hbGxvY192bWAgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIHByb2JhYmx5IGdvaW5nIHRvIHN0YXJ0IGJ5IHRoaW5raW5nIGFib3V0IHRoZSBLVk0ga2VybmVsIG1vZHVsZSBzdHJ1Y3R1cmUgZmlyc3QuIEkga25vdyB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgVk0gYWxsb2NhdGlvbiBsb2dpYyBsaXZlcywgc28gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVsZXZhbnQgc291cmNlIGZpbGVzIHdpdGhpbiB0aGUgS1ZNIGRpcmVjdG9yeSBzdHJ1Y3R1cmUsIG1heWJlIHNvbWV0aGluZyBpbiBgYXJjaC94ODYva3ZtYCBzcGVjaWZpY2FsbHkuCgpGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHdoYXQgdGhpcyBmdW5jdGlvbiAqZG9lcyouIGBhbGxvY2AgaW1wbGllcyBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIGB2bWAgaGludHMgYXQgYSB2aXJ0dWFsIG1hY2hpbmUgY29udGV4dC4gU28sIEkgZXhwZWN0IGl0JiMzOTtzIGhhbmRsaW5nIHRoZSBhbGxvY2F0aW9uIG9mIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIHRoZSBndWVzdCB2aXJ0dWFsIG1hY2hpbmUgc3RhdGUg4oCTIHRoaW5ncyBsaWtlIFZNQ1Mgc3RydWN0dXJlcywgc2hhZG93IHBhZ2UgdGFibGVzLCBhbmQgb3RoZXIgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHN0YXRlLiBJdCYjMzk7bGwgcHJvYmFibHkgYmUgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyBhIGxvdCBvZiB4ODYtc3BlY2lmaWMgVk0gZGF0YS4KCkkmIzM5O2xsIHByb2JhYmx5IHVzZSBgZ3JlcGAgb3IgYGNzY29wZWAgdG8gc2VhcmNoIHRocm91Z2ggdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSBmb3IgdGhlIGZ1bmN0aW9uIG5hbWUgZGlyZWN0bHksIHRob3VnaCBpdCYjMzk7cyBwb3NzaWJsZSB0aGlzIGlzbiYjMzk7dCB0aGUgZmluYWwgZnVuY3Rpb24gbmFtZS4gSXQgY291bGQgYWxzbyBiZSBjYWxsZWQgYXMgcGFydCBvZiBhIG1hY3JvIG9yIGFub3RoZXIgYWJzdHJhY3Rpb24gbGF5ZXIgc28gSSBtaWdodCBuZWVkIHRvIGxvb2sgZm9yIHJlbGF0ZWQgY29uY2VwdHMuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRvIG5hdmlnYXRlIHRoZSBuZXN0ZWQgZnVuY3Rpb24gY2FsbHMuCgpJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGUgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgdW5pdHMgKE1NVXMpLCBwYWdpbmcgc3RydWN0dXJlcyAoRVBULCBldGMuKSwgYW5kIGFueSBDUFVJRC1yZWxhdGVkIGNoZWNrcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGZvciBmZWF0dXJlIGRldGVjdGlvbiBvciB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0LiBVbmRlcnN0YW5kaW5nIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIHBoeXNpY2FsIG1lbW9yeSBsYXlvdXQsIGFuZCB0aGUgZ3Vlc3QmIzM5O3MgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHdpbGwgYmUga2V5LiBUaGlzIGlzIGEgcHJldHR5IGNyaXRpY2FsIHBhcnQgb2YgdGhlIHdob2xlIHZpcnR1YWxpemF0aW9uIHNldHVwLCBzbyBpdCYjMzk7cyBsaWtlbHkgdG8gYmUgZmFpcmx5IGNvbXBsZXguIEkgd2lsbCBmb2N1cyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIHVzZWQsIGFuZCBhbnkgeDg2LXNwZWNpZmljIG9wdGltaXphdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9hcmNoX2FsbG9jX3ZtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MTc5NT1leHRlcm4gc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyBrdm1fbmVzdGVkX29wcyBfX3JlYWRfbW9zdGx5O1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMTgxMy0jZGVmaW5lIF9fS1ZNX0hBVkVfQVJDSF9WTV9BTExPQ1xuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoxODE0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZClcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMTgxNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5ODcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipQZWVyaW5nIGludG8gdGhlIHg4NiBLVk0gQXJjaGl0ZWN0dXJlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBNeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIG9mIGhvdyBLVk0gYWxsb2NhdGVzIHZpcnR1YWwgbWFjaGluZXMgaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGRyYXduIHRvIHRoZSBmdW5jdGlvbiBga3ZtX2FyY2hfYWxsb2Nfdm1gLCBhbmQgSSYjMzk7bSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBkZWZpbml0aW9uIGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oYC4gVGhpcyBpcyB0aGUgbG93LWxldmVsLCBjcml0aWNhbCBzdHVmZi4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHJlc291cmNlcyBhcmUgc2V0IHVwIGZvciBhIG5ldyBWTS4gV2hhdCBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZD8gV2hhdCBtZW1vcnkgaXMgcmVzZXJ2ZWQ/IFdoYXQgY3JpdGljYWwgaGFyZHdhcmUgY29tcG9uZW50cyBhcmUgYmVpbmcgY29uZmlndXJlZCwgZnJvbSB0aGUgQ1BVIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCB1bml0cz8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGlzIHdoZXJlIHRoZSBmdW5kYW1lbnRhbCBncm91bmR3b3JrIGZvciBndWVzdCBleGVjdXRpb24gb24geDg2IGlzIGxhaWQgb3V0LiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIEkgY2FuIHVuZGVyc3RhbmQgaG93IEtWTSBlbnN1cmVzIGlzb2xhdGlvbiBhbmQgc2VjdXJlIHJlc291cmNlIHNoYXJpbmcgZm9yIHRoZSBWTXMgdGhhdCBzaXQgYXRvcCB0aGUgaGFyZHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgxNDpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZClcbjE4MTU6XHR7XG4xODE2Olx0XHRyZXR1cm4ga3Z6YWxsb2Moa3ZtX3g4Nl9vcHMudm1fc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbjE4MTc6XHR9XG4xODE4Olx0XG4xODE5Olx0I2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfVk1fRlJFRVxuMTgyMDpcdHZvaWQga3ZtX2FyY2hfZnJlZV92bShzdHJ1Y3Qga3ZtICprdm0pO1xuMTgyMTpcdFxuMTgyMjpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19IWVBFUlYpXG4xODIzOlx0I2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfRkxVU0hfUkVNT1RFX1RMQlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ1OQoJCQkJCQkJb3V0cHV0OiAyMjMKCQkJCQkJCXRob3VnaHRzOiA4NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogVERYIFJvb3QgTGV2ZWwgUmVmYWN0b3IqKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gVGhpcyBwYXRjaCBsb29rcyBsaWtlIGl0JiMzOTtzIHJlZmluaW5nIGhvdyBLVk0gZmlndXJlcyBvdXQgdGhlIHJvb3QgcGFnZSB0YWJsZSBsZXZlbCBmb3IgVERYIFZNcy4gSXQmIzM5O3MgdXNpbmcgYGt2emFsbG9jYCB0byBpbml0aWFsaXplIG1lbW9yeSwgc28gdGhlIGBtaXJyb3Jfcm9vdF9sZXZlbGAgZmllbGQgaXMgZ3VhcmFudGVlZCB0byBzdGFydCBhdCB6ZXJvLiBOb3csIGBrdm1fbW11X3NldF9taXJyb3Jfcm9vdF9sZXZlbGAgaXMgc2V0dGluZyBgbWlycm9yX3Jvb3RfbGV2ZWxgIGFuZCBgZ2ZuX2RpcmVjdF9iaXRzYCBiYXNlZCBvbiB0aGlzIGBsZXZlbGAgdmFyaWFibGUsIHdoaWNoIGlzIGNvbWluZyBmcm9tIGB0ZHhfdGRfaW5pdGAuIEkgc2VlIGl0JiMzOTtzIHJlcGxhY2luZyB0aGF0IGBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHJgIGZ1bmN0aW9uIHdpdGggdGhlIGBtaXJyb3Jfcm9vdF9sZXZlbGAgdmFsdWUgd2l0aGluIGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgIGFuZCBgdGR4X2xvYWRfbW11X3BnZGAuCgpTbywgYW0gSSBzZWVpbmcgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaz8gTGV0IG1lIGJyZWFrIGl0IGRvd246IHRoaXMgaXMgcmVmYWN0b3JpbmcgdGhlIHJvb3QgbGV2ZWwgZGV0ZXJtaW5hdGlvbiAqaW50ZXJuYWxseSouIEl0JiMzOTtzIG5vdCBleHBvc2luZyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgYSBiaWcgd2luLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzZWVtIGxpa2UgdGhleSYjMzk7ZCBtYW5pZmVzdCBhcyBsb2dpYyBlcnJvcnMg4oCTIGluY29ycmVjdCBwYWdlIHRhYmxlIGxldmVscywgZm9yIGluc3RhbmNlLiBBbmQgdGhvc2Ugd291bGQgdHJpZ2dlciBwYWdlIGZhdWx0cywgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggS0FTQU4gYW5kIHN0YW5kYXJkIHRlc3RpbmcgYXJlIGRlc2lnbmVkIHRvIGNhdGNoLgoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgdGhhdCBgbWlycm9yX3Jvb3RfbGV2ZWxgIGlzbiYjMzk7dCB1c2VkIHVuaW5pdGlhbGl6ZWQuIFRoZSBgc3RydWN0IGt2bWAgaXMgemVyby1hbGxvY2F0ZWQsIHNvIGl0JiMzOTtzIGluaXRpYWxpemVkIHRvIHplcm8uIEFuZCB0aGUgbG9naWMgaW4gYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAgZ3JhY2VmdWxseSBoYW5kbGVzIHplcm8gdmFsdWVzIGJ5IGZhbGxpbmcgdGhyb3VnaCB0byB0aGUgbmV4dCBjaGVjaywgc28gdGhhdCYjMzk7cyBjb21wbGV0ZWx5IHNhZmUuCgpOb3csIHRoZSBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYCByZW1vdmFsOiBpdCB3YXMgdXNlZCB0byBnZXQgdGhlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3Mgc2l6ZSBmcm9tIENQVUlELCBub3cgcmVwbGFjZWQgYnkgYG1pcnJvcl9yb290X2xldmVsYC4KCkFscmlnaHQsIEkgZG9uJiMzOTt0IHNlZSBhbnkgcmVhc29uIHRvIHJ1biBLTVNBTiBmb3IgdGhpcy4gVGhlIHBhdGNoICppc24mIzM5O3QqIGRvaW5nIGFueSBvZiB0aGUgdGhpbmdzIHRoYXQgdHJpZ2dlciBLTVNBTjogbm8gbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBubyBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcnMsIG5vIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCwgYW5kIG5vIG5ldyBib3VuZHMgY2hlY2tzIHdoaWNoIG1pZ2h0IGFsbG93IGFuIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkhlcmUmIzM5O3MgbXkgcmF0aW9uYWxlOiB0aGUgcGF0Y2ggaXMgYWxsIGFib3V0IHJlZmluaW5nIGhvdyBURFggcm9vdCBwYWdlIHRhYmxlIGxldmVscyBhcmUgZGV0ZXJtaW5lZCB3aXRoaW4gS1ZNLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGBtaXJyb3Jfcm9vdF9sZXZlbGAgZmllbGQgd2l0aGluIGBzdHJ1Y3Qga3ZtX2FyY2hgLCBhbmQgdGhpcyBmaWVsZCBpcyBzZXQgZHVyaW5nIFREWCBpbml0aWFsaXphdGlvbiwgcmVwbGFjaW5nIENQVUlELWJhc2VkIGNoZWNrcy4gVGhlIGBrdnphbGxvY2AgZW5zdXJlcyB0aGUgYG1pcnJvcl9yb290X2xldmVsYCBpcyBpbml0aWFsaXplZC4gTm90aGluZyBuZXcgaXMgc2VudCB0byB1c2Vyc3BhY2UuIEFueSBpbnRyb2R1Y2VkIGJ1Z3Mgd2lsbCBsaWtlbHkgYmUgbG9naWMgYnVncywgYW5kIHRob3NlIHNob3VsZCBiZSBjYXVnaHQgYnkgdGhlIHVzdWFsIHN1c3BlY3RzIGxpa2UgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgYXJlIHByZXNlbnQuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyB0aGUgcm9vdCBwYWdlIHRhYmxlIGxldmVsIGlzIGRldGVybWluZWQgZm9yIFREWCBWTXMgaW4gS1ZNIGJ5IGludHJvZHVjaW5nIGEgbmV3IGZpZWxkIGBtaXJyb3Jfcm9vdF9sZXZlbGAgaW4gYHN0cnVjdCBrdm1fYXJjaGAuIFRoaXMgZmllbGQgaXMgc2V0IGR1cmluZyBURFggaW5pdGlhbGl6YXRpb24sIHJlcGxhY2luZyB0aGUgcHJldmlvdXMgYXBwcm9hY2ggb2YgcXVlcnlpbmcgQ1BVSUQgZm9yIHRoZSBtYXhpbXVtIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MuIFNpbmNlIGBzdHJ1Y3Qga3ZtYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt2emFsbG9jKClgICh3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBtZW1vcnkpLCB0aGUgbmV3IGBtaXJyb3Jfcm9vdF9sZXZlbGAgZmllbGQgaXMgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgYW55IGNvbXBsZXggYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGluY29ycmVjdCBwYWdlIHRhYmxlIGxldmVscykgd291bGQgcmVzdWx0IGluIHBhZ2UgZmF1bHRzLCBjcmFzaGVzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBob3cgdGhlIHJvb3QgcGFnZSB0YWJsZSBsZXZlbCBpcyBkZXRlcm1pbmVkIGZvciBURFggVk1zIGluIEtWTSBieSBpbnRyb2R1Y2luZyBhIG5ldyBmaWVsZCBgbWlycm9yX3Jvb3RfbGV2ZWxgIGluIGBzdHJ1Y3Qga3ZtX2FyY2hgLiBUaGlzIGZpZWxkIGlzIHNldCBkdXJpbmcgVERYIGluaXRpYWxpemF0aW9uLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIGFwcHJvYWNoIG9mIHF1ZXJ5aW5nIENQVUlEIGZvciB0aGUgbWF4aW11bSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzLiBTaW5jZSBgc3RydWN0IGt2bWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrdnphbGxvYygpYCAod2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5KSwgdGhlIG5ldyBgbWlycm9yX3Jvb3RfbGV2ZWxgIGZpZWxkIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGFueSBjb21wbGV4IGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBpbmNvcnJlY3QgcGFnZSB0YWJsZSBsZXZlbHMpIHdvdWxkIHJlc3VsdCBpbiBwYWdlIGZhdWx0cywgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjAyOjU2LjE4MTE4NTIyMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mjc1NDc0ODc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiSU5URUxfVERYX0hPU1RcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0ZHhfdm1faW9jdGxcIixcbiAgICBcInRkeF9sb2FkX21tdV9wZ2RcIixcbiAgICBcImt2bV9pbml0X21tdVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyB0aGUgcm9vdCBwYWdlIHRhYmxlIGxldmVsIGlzIGRldGVybWluZWQgZm9yIFREWCBWTXMgaW4gS1ZNIGJ5IGludHJvZHVjaW5nIGEgbmV3IGZpZWxkIGBtaXJyb3Jfcm9vdF9sZXZlbGAgaW4gYHN0cnVjdCBrdm1fYXJjaGAuIFRoaXMgZmllbGQgaXMgc2V0IGR1cmluZyBURFggaW5pdGlhbGl6YXRpb24sIHJlcGxhY2luZyB0aGUgcHJldmlvdXMgYXBwcm9hY2ggb2YgcXVlcnlpbmcgQ1BVSUQgZm9yIHRoZSBtYXhpbXVtIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MuIFNpbmNlIGBzdHJ1Y3Qga3ZtYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt2emFsbG9jKClgICh3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBtZW1vcnkpLCB0aGUgbmV3IGBtaXJyb3Jfcm9vdF9sZXZlbGAgZmllbGQgaXMgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgYW55IGNvbXBsZXggYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGluY29ycmVjdCBwYWdlIHRhYmxlIGxldmVscykgd291bGQgcmVzdWx0IGluIHBhZ2UgZmF1bHRzLCBjcmFzaGVzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gTU1VIGxvZ2ljIHRvIGRldGVybWluZSB0aGUgVERQIChUd28tRGltZW5zaW9uYWwgUGFnaW5nKSBsZXZlbCBmb3IgdmlydHVhbCBtYWNoaW5lcy4gSXQgaW50cm9kdWNlcyBgbWlycm9yX3Jvb3RfbGV2ZWxgIHRvIGZpeCB0aGUgcm9vdCBsZXZlbCBmb3IgVk1zIHdpdGggbWlycm9yIHJvb3RzIChsaWtlIFREWCBWTXMpIGFuZCByZW1vdmVzIGBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHJgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIEtWTSBNTVUgcGFnZSB0YWJsZSBzZXR1cCBhbmQgVERYIGluaXRpYWxpemF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowMjo1Ni4xODExOTU4MTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Njk3NTYxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwNmRiMTljMjQ5ZTA2MDJlYzUyYmMzY2U1MDg0NzUxM2E0NWVmNTI5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDE0IDIzOjAyOjU0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggMjgzODQ3NjE5ZmY4OC4uYjJhNzRjNjljYzRhNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC0xNDA2LDYgKzE0MDYsNyBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xcbiBcXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgc3BsaXRfZGVzY19jYWNoZTtcXG4gXFxuIFxcdGdmbl90IGdmbl9kaXJlY3RfYml0cztcXG4rXFx0aW50IG1pcnJvcl9yb290X2xldmVsO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogU2l6ZSBvZiB0aGUgQ1BVJ3MgZGlydHkgbG9nIGJ1ZmZlciwgaS5lLiBWTVgncyBQTUwgYnVmZmVyLiBBIFplcm9cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmMgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xcbmluZGV4IGRkYjAyMmNiMjAzYTIuLjM0YzYwOWE2MGVlZmYgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xcbkBAIC00ODMsMjAgKzQ4Myw2IEBAIGludCBjcHVpZF9xdWVyeV9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0cmV0dXJuIDM2O1xcbiB9XFxuIFxcbi1pbnQgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4te1xcbi1cXHRzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqYmVzdDtcXG4tXFxuLVxcdGJlc3QgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDAwKTtcXG4tXFx0aWYgKCFiZXN0IHx8IGJlc3QtXFx1MDAzZWVheCBcXHUwMDNjIDB4ODAwMDAwMDgpXFxuLVxcdFxcdGdvdG8gbm90X2ZvdW5kO1xcbi1cXHRiZXN0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAwOCk7XFxuLVxcdGlmIChiZXN0KVxcbi1cXHRcXHRyZXR1cm4gKGJlc3QtXFx1MDAzZWVheCBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiAweGZmO1xcbi1ub3RfZm91bmQ6XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBUaGlzIFxcXCJyYXdcXFwiIHZlcnNpb24gcmV0dXJucyB0aGUgcmVzZXJ2ZWQgR1BBIGJpdHMgd2l0aG91dCBhbnkgYWRqdXN0bWVudHMgZm9yXFxuICAqIGVuY3J5cHRpb24gdGVjaG5vbG9naWVzIHRoYXQgdXN1cnAgYml0cy4gIFRoZSByYXcgbWFzayBzaG91bGQgYmUgdXNlZCBpZiBhbmRcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmggYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaFxcbmluZGV4IDhkODYzZjQ1NTg1ZGUuLjQ2YmZlODY5OWU2N2YgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaFxcbkBAIC02OCw3ICs2OCw2IEBAIHZvaWQgX19pbml0IGt2bV9pbml0X3hzdGF0ZV9zaXplcyh2b2lkKTtcXG4gdTMyIHhzdGF0ZV9yZXF1aXJlZF9zaXplKHU2NCB4c3RhdGVfYnYsIGJvb2wgY29tcGFjdGVkKTtcXG4gXFxuIGludCBjcHVpZF9xdWVyeV9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLWludCBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdTY0IGt2bV92Y3B1X3Jlc2VydmVkX2dwYV9iaXRzX3JhdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgY3B1aWRfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUuaCBiL2FyY2gveDg2L2t2bS9tbXUuaFxcbmluZGV4IDJhZTdmOWVkNGNmODYuLmNjMzdlMjEwNzg3YzggMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS5oXFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS5oXFxuQEAgLTM4OSw2ICszODksMTUgQEAgc3RhdGljIGlubGluZSBncGFfdCBrdm1fdHJhbnNsYXRlX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXhjZXB0aW9uLCBwdGVfYWNjZXNzKTtcXG4gfVxcbiBcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGt2bV9tbXVfc2V0X21pcnJvcl9yb290X2xldmVsKHN0cnVjdCBrdm0gKmt2bSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBpbnQgbGV2ZWwpXFxuK3tcXG4rXFx0QlVJTERfQlVHX09OKGxldmVsICE9IDQgXFx1MDAyNlxcdTAwMjYgbGV2ZWwgIT0gNSk7XFxuK1xcbitcXHRrdm0tXFx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWwgPSBsZXZlbDtcXG4rXFx0a3ZtLVxcdTAwM2VhcmNoLmdmbl9kaXJlY3RfYml0cyA9IGdwYV90b19nZm4oQklUX1VMTChsZXZlbCA9PSA0ID8gNDcgOiA1MSkpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2hhc19taXJyb3JlZF90ZHAoY29uc3Qgc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuIFxcdHJldHVybiBrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG5pbmRleCBjNTE5ZThlOGQ2NDZmLi5hNTFhODUyYzFiZWMwIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuQEAgLTU5MjgsMTkgKzU5MjgsMTkgQEAgdm9pZCBfX2t2bV9tbXVfcmVmcmVzaF9wYXNzdGhyb3VnaF9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0aW50IG1heHBhO1xcbi1cXG4tXFx0aWYgKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKVxcbi1cXHRcXHRtYXhwYSA9IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcih2Y3B1KTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRtYXhwYSA9IGNwdWlkX21heHBoeWFkZHIodmNwdSk7XFxuLVxcbiBcXHQvKiB0ZHBfcm9vdF9sZXZlbCBpcyBhcmNoaXRlY3R1cmUgZm9yY2VkIGxldmVsLCB1c2UgaXQgaWYgbm9uemVybyAqL1xcbiBcXHRpZiAodGRwX3Jvb3RfbGV2ZWwpXFxuIFxcdFxcdHJldHVybiB0ZHBfcm9vdF9sZXZlbDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIElmIHRoZSBWTSBoYXMgbWlycm9yIHJvb3RzLCB0aGVuIHRoZSByb290IGxldmVsIGlzIGZpeGVkIGFzIHRoZSBnZm5cXG4rXFx0ICogdXNlZCB0byBzZWxlY3QgYmV0d2VlbiB0aGUgbm9ybWFsIGFuZCBtaXJyb3Igcm9vdCBtdXN0IGJlIGNvdmVyZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAodmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsKVxcbitcXHRcXHRyZXR1cm4gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsO1xcbitcXG4gXFx0LyogVXNlIDUtbGV2ZWwgVERQIGlmIGFuZCBvbmx5IGlmIGl0J3MgdXNlZnVsL25lY2Vzc2FyeS4gKi9cXG4tXFx0aWYgKG1heF90ZHBfbGV2ZWwgPT0gNSBcXHUwMDI2XFx1MDAyNiBtYXhwYSBcXHUwMDNjPSA0OClcXG4rXFx0aWYgKG1heF90ZHBfbGV2ZWwgPT0gNSBcXHUwMDI2XFx1MDAyNiBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpIFxcdTAwM2M9IDQ4KVxcbiBcXHRcXHRyZXR1cm4gNDtcXG4gXFxuIFxcdHJldHVybiBtYXhfdGRwX2xldmVsO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xcbmluZGV4IGIyNzJjMjA1ODZhNzQuLjZkOGU5YmVmZDllNjUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG5AQCAtNTYsOSArNTYsNiBAQFxcbiBib29sIGVuYWJsZV90ZHggX19yb19hZnRlcl9pbml0O1xcbiBtb2R1bGVfcGFyYW1fbmFtZWQodGR4LCBlbmFibGVfdGR4LCBib29sLCAwNDQ0KTtcXG4gXFxuLSNkZWZpbmUgVERYX1NIQVJFRF9CSVRfUFdMXzUgZ3BhX3RvX2dmbihCSVRfVUxMKDUxKSlcXG4tI2RlZmluZSBURFhfU0hBUkVEX0JJVF9QV0xfNCBncGFfdG9fZ2ZuKEJJVF9VTEwoNDcpKVxcbi1cXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnRkeF9zeXNpbmZvO1xcbiBcXG4gdm9pZCB0ZGhfdnBfcmRfZmFpbGVkKHN0cnVjdCB2Y3B1X3RkeCAqdGR4LCBjaGFyICp1Y2xhc3MsIHUzMiBmaWVsZCwgdTY0IGVycilcXG5AQCAtMTYwOSwxMCArMTYwNiw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Rkdm1jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIHZvaWQgdGR4X2xvYWRfbW11X3BnZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGhwYV90IHJvb3RfaHBhLCBpbnQgcGdkX2xldmVsKVxcbiB7XFxuLVxcdHU2NCBzaGFyZWRfYml0ID0gKHBnZF9sZXZlbCA9PSA1KSA/IFREWF9TSEFSRURfQklUX1BXTF81IDpcXG4tXFx0XFx0XFx0ICBURFhfU0hBUkVEX0JJVF9QV0xfNDtcXG4tXFxuLVxcdGlmIChLVk1fQlVHX09OKHNoYXJlZF9iaXQgIT0ga3ZtX2dmbl9kaXJlY3RfYml0cyh2Y3B1LVxcdTAwM2Vrdm0pLCB2Y3B1LVxcdTAwM2Vrdm0pKVxcbitcXHRpZiAoS1ZNX0JVR19PTihwZ2RfbGV2ZWwgIT0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsLCB2Y3B1LVxcdTAwM2Vrdm0pKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHR0ZF92bWNzX3dyaXRlNjQodG9fdGR4KHZjcHUpLCBTSEFSRURfRVBUX1BPSU5URVIsIHJvb3RfaHBhKTtcXG5AQCAtMjgyMyw5ICsyODE3LDkgQEAgc3RhdGljIGludCB0ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxcbiBcXHRrdm1fdGR4LVxcdTAwM2V4ZmFtID0gdGRfcGFyYW1zLVxcdTAwM2V4ZmFtO1xcbiBcXG4gXFx0aWYgKHRkX3BhcmFtcy1cXHUwMDNlY29uZmlnX2ZsYWdzIFxcdTAwMjYgVERYX0NPTkZJR19GTEFHU19NQVhfR1BBVylcXG4tXFx0XFx0a3ZtLVxcdTAwM2VhcmNoLmdmbl9kaXJlY3RfYml0cyA9IFREWF9TSEFSRURfQklUX1BXTF81O1xcbitcXHRcXHRrdm1fbW11X3NldF9taXJyb3Jfcm9vdF9sZXZlbChrdm0sIDUpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdGt2bS1cXHUwMDNlYXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBURFhfU0hBUkVEX0JJVF9QV0xfNDtcXG4rXFx0XFx0a3ZtX21tdV9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA0KTtcXG4gXFxuIFxcdGt2bV90ZHgtXFx1MDAzZXN0YXRlID0gVERfU1RBVEVfSU5JVElBTElaRUQ7XFxuIG91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDI6NTcuNzUyMDUzMDY5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTEwMTM0NTI0MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJJTlRFTF9URFhfSE9TVFwiLFxuICAgIFwiS1ZNX0lOVEVMX1REWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRkeF92bV9pb2N0bFwiLFxuICAgIFwidGR4X2xvYWRfbW11X3BnZFwiLFxuICAgIFwia3ZtX2luaXRfbW11XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBsb2dpYyB0byBkZXRlcm1pbmUgdGhlIFREUCAoVHdvLURpbWVuc2lvbmFsIFBhZ2luZykgbGV2ZWwgZm9yIHZpcnR1YWwgbWFjaGluZXMuIEl0IGludHJvZHVjZXMgYG1pcnJvcl9yb290X2xldmVsYCB0byBmaXggdGhlIHJvb3QgbGV2ZWwgZm9yIFZNcyB3aXRoIG1pcnJvciByb290cyAobGlrZSBURFggVk1zKSBhbmQgcmVtb3ZlcyBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBLVk0gTU1VIHBhZ2UgdGFibGUgc2V0dXAgYW5kIFREWCBpbml0aWFsaXphdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgY2FuIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDZkYjE5YzI0OWUwNjAyZWM1MmJjM2NlNTA4NDc1MTNhNDVlZjUyOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDIzOjAyOjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDI4Mzg0NzYxOWZmODguLmIyYTc0YzY5Y2M0YTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMTQwNiw2ICsxNDA2LDcgQEAgc3RydWN0IGt2bV9hcmNoIHtcbiBcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBzcGxpdF9kZXNjX2NhY2hlO1xuIFxuIFx0Z2ZuX3QgZ2ZuX2RpcmVjdF9iaXRzO1xuK1x0aW50IG1pcnJvcl9yb290X2xldmVsO1xuIFxuIFx0LypcbiBcdCAqIFNpemUgb2YgdGhlIENQVSdzIGRpcnR5IGxvZyBidWZmZXIsIGkuZS4gVk1YJ3MgUE1MIGJ1ZmZlci4gQSBaZXJvXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmMgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuaW5kZXggZGRiMDIyY2IyMDNhMi4uMzRjNjA5YTYwZWVmZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuQEAgLTQ4MywyMCArNDgzLDYgQEAgaW50IGNwdWlkX3F1ZXJ5X21heHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIDM2O1xuIH1cbiBcbi1pbnQgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqYmVzdDtcbi1cbi1cdGJlc3QgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDAwKTtcbi1cdGlmICghYmVzdCB8fCBiZXN0LVx1MDAzZWVheCBcdTAwM2MgMHg4MDAwMDAwOClcbi1cdFx0Z290byBub3RfZm91bmQ7XG4tXHRiZXN0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAwOCk7XG4tXHRpZiAoYmVzdClcbi1cdFx0cmV0dXJuIChiZXN0LVx1MDAzZWVheCBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweGZmO1xuLW5vdF9mb3VuZDpcbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIFRoaXMgXCJyYXdcIiB2ZXJzaW9uIHJldHVybnMgdGhlIHJlc2VydmVkIEdQQSBiaXRzIHdpdGhvdXQgYW55IGFkanVzdG1lbnRzIGZvclxuICAqIGVuY3J5cHRpb24gdGVjaG5vbG9naWVzIHRoYXQgdXN1cnAgYml0cy4gIFRoZSByYXcgbWFzayBzaG91bGQgYmUgdXNlZCBpZiBhbmRcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vY3B1aWQuaCBiL2FyY2gveDg2L2t2bS9jcHVpZC5oXG5pbmRleCA4ZDg2M2Y0NTU4NWRlLi40NmJmZTg2OTllNjdmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmhcbisrKyBiL2FyY2gveDg2L2t2bS9jcHVpZC5oXG5AQCAtNjgsNyArNjgsNiBAQCB2b2lkIF9faW5pdCBrdm1faW5pdF94c3RhdGVfc2l6ZXModm9pZCk7XG4gdTMyIHhzdGF0ZV9yZXF1aXJlZF9zaXplKHU2NCB4c3RhdGVfYnYsIGJvb2wgY29tcGFjdGVkKTtcbiBcbiBpbnQgY3B1aWRfcXVlcnlfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLWludCBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB1NjQga3ZtX3ZjcHVfcmVzZXJ2ZWRfZ3BhX2JpdHNfcmF3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gc3RhdGljIGlubGluZSBpbnQgY3B1aWRfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS5oIGIvYXJjaC94ODYva3ZtL21tdS5oXG5pbmRleCAyYWU3ZjllZDRjZjg2Li5jYzM3ZTIxMDc4N2M4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11LmhcbkBAIC0zODksNiArMzg5LDE1IEBAIHN0YXRpYyBpbmxpbmUgZ3BhX3Qga3ZtX3RyYW5zbGF0ZV9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdFx0XHRcdCAgICAgZXhjZXB0aW9uLCBwdGVfYWNjZXNzKTtcbiB9XG4gXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGt2bV9tbXVfc2V0X21pcnJvcl9yb290X2xldmVsKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHRcdFx0XHRcdCAgaW50IGxldmVsKVxuK3tcbitcdEJVSUxEX0JVR19PTihsZXZlbCAhPSA0IFx1MDAyNlx1MDAyNiBsZXZlbCAhPSA1KTtcbitcbitcdGt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsID0gbGV2ZWw7XG4rXHRrdm0tXHUwMDNlYXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBncGFfdG9fZ2ZuKEJJVF9VTEwobGV2ZWwgPT0gNCA/IDQ3IDogNTEpKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbWlycm9yZWRfdGRwKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuaW5kZXggYzUxOWU4ZThkNjQ2Zi4uYTUxYTg1MmMxYmVjMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC01OTI4LDE5ICs1OTI4LDE5IEBAIHZvaWQgX19rdm1fbW11X3JlZnJlc2hfcGFzc3Rocm91Z2hfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXG4gc3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRpbnQgbWF4cGE7XG4tXG4tXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKVxuLVx0XHRtYXhwYSA9IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcih2Y3B1KTtcbi1cdGVsc2Vcbi1cdFx0bWF4cGEgPSBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpO1xuLVxuIFx0LyogdGRwX3Jvb3RfbGV2ZWwgaXMgYXJjaGl0ZWN0dXJlIGZvcmNlZCBsZXZlbCwgdXNlIGl0IGlmIG5vbnplcm8gKi9cbiBcdGlmICh0ZHBfcm9vdF9sZXZlbClcbiBcdFx0cmV0dXJuIHRkcF9yb290X2xldmVsO1xuIFxuK1x0LypcbitcdCAqIElmIHRoZSBWTSBoYXMgbWlycm9yIHJvb3RzLCB0aGVuIHRoZSByb290IGxldmVsIGlzIGZpeGVkIGFzIHRoZSBnZm5cbitcdCAqIHVzZWQgdG8gc2VsZWN0IGJldHdlZW4gdGhlIG5vcm1hbCBhbmQgbWlycm9yIHJvb3QgbXVzdCBiZSBjb3ZlcmVkLlxuK1x0ICovXG4rXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbClcbitcdFx0cmV0dXJuIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWw7XG4rXG4gXHQvKiBVc2UgNS1sZXZlbCBURFAgaWYgYW5kIG9ubHkgaWYgaXQncyB1c2VmdWwvbmVjZXNzYXJ5LiAqL1xuLVx0aWYgKG1heF90ZHBfbGV2ZWwgPT0gNSBcdTAwMjZcdTAwMjYgbWF4cGEgXHUwMDNjPSA0OClcbitcdGlmIChtYXhfdGRwX2xldmVsID09IDUgXHUwMDI2XHUwMDI2IGNwdWlkX21heHBoeWFkZHIodmNwdSkgXHUwMDNjPSA0OClcbiBcdFx0cmV0dXJuIDQ7XG4gXG4gXHRyZXR1cm4gbWF4X3RkcF9sZXZlbDtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuaW5kZXggYjI3MmMyMDU4NmE3NC4uNmQ4ZTliZWZkOWU2NSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbkBAIC01Niw5ICs1Niw2IEBAXG4gYm9vbCBlbmFibGVfdGR4IF9fcm9fYWZ0ZXJfaW5pdDtcbiBtb2R1bGVfcGFyYW1fbmFtZWQodGR4LCBlbmFibGVfdGR4LCBib29sLCAwNDQ0KTtcbiBcbi0jZGVmaW5lIFREWF9TSEFSRURfQklUX1BXTF81IGdwYV90b19nZm4oQklUX1VMTCg1MSkpXG4tI2RlZmluZSBURFhfU0hBUkVEX0JJVF9QV0xfNCBncGFfdG9fZ2ZuKEJJVF9VTEwoNDcpKVxuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICp0ZHhfc3lzaW5mbztcbiBcbiB2b2lkIHRkaF92cF9yZF9mYWlsZWQoc3RydWN0IHZjcHVfdGR4ICp0ZHgsIGNoYXIgKnVjbGFzcywgdTMyIGZpZWxkLCB1NjQgZXJyKVxuQEAgLTE2MDksMTAgKzE2MDYsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV90ZHZtY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gdm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpXG4ge1xuLVx0dTY0IHNoYXJlZF9iaXQgPSAocGdkX2xldmVsID09IDUpID8gVERYX1NIQVJFRF9CSVRfUFdMXzUgOlxuLVx0XHRcdCAgVERYX1NIQVJFRF9CSVRfUFdMXzQ7XG4tXG4tXHRpZiAoS1ZNX0JVR19PTihzaGFyZWRfYml0ICE9IGt2bV9nZm5fZGlyZWN0X2JpdHModmNwdS1cdTAwM2Vrdm0pLCB2Y3B1LVx1MDAzZWt2bSkpXG4rXHRpZiAoS1ZNX0JVR19PTihwZ2RfbGV2ZWwgIT0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbCwgdmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHR0ZF92bWNzX3dyaXRlNjQodG9fdGR4KHZjcHUpLCBTSEFSRURfRVBUX1BPSU5URVIsIHJvb3RfaHBhKTtcbkBAIC0yODIzLDkgKzI4MTcsOSBAQCBzdGF0aWMgaW50IHRkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXG4gXHRrdm1fdGR4LVx1MDAzZXhmYW0gPSB0ZF9wYXJhbXMtXHUwMDNleGZhbTtcbiBcbiBcdGlmICh0ZF9wYXJhbXMtXHUwMDNlY29uZmlnX2ZsYWdzIFx1MDAyNiBURFhfQ09ORklHX0ZMQUdTX01BWF9HUEFXKVxuLVx0XHRrdm0tXHUwMDNlYXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBURFhfU0hBUkVEX0JJVF9QV0xfNTtcbitcdFx0a3ZtX21tdV9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA1KTtcbiBcdGVsc2Vcbi1cdFx0a3ZtLVx1MDAzZWFyY2guZ2ZuX2RpcmVjdF9iaXRzID0gVERYX1NIQVJFRF9CSVRfUFdMXzQ7XG4rXHRcdGt2bV9tbXVfc2V0X21pcnJvcl9yb290X2xldmVsKGt2bSwgNCk7XG4gXG4gXHRrdm1fdGR4LVx1MDAzZXN0YXRlID0gVERfU1RBVEVfSU5JVElBTElaRUQ7XG4gb3V0OlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDI6NTcuNzUyMDU1MjY5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcxMTUzODcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoaXMgS1ZNIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBhIGZldyBrZXkgS1ZNIGZpbGVzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGFuZCwgbm90YWJseSwgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykuIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYGt2bV9ob3N0LmhgLCBgY3B1aWQuYy9oYCwgYG1tdS5oL2NgLCBhbmQgYHRkeC5jYC4gTXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nOyBhbnkgY2hhbmdlIHRoYXQgdG91Y2hlcyB0aGUgTU1VIGFuZCBURFggaW4gS1ZNIGlzIHdvcnRoIGEgY2xvc2VyIGxvb2suXG5cblRoZSBnaXN0IG9mIGl0IHNlZW1zIHRvIGJlIHJlbW92aW5nIGBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHJgIGFuZCBpbnRyb2R1Y2luZyBga3ZtX21tdV9zZXRfbWlycm9yX3Jvb3RfbGV2ZWxgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBob3cgS1ZNIGhhbmRsZXMgdGhlIGd1ZXN0J3MgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSwgcGFydGljdWxhcmx5IHdpdGggVERYLiBUaGV5J3JlIGNoYW5naW5nIGhvdyB0aGUgXCJURFAgbGV2ZWxcIiBpcyBkZXRlcm1pbmVkIHZpYSBga3ZtX21tdV9nZXRfdGRwX2xldmVsYCwgbm93IHJlbHlpbmcgb24gYHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWxgIGluc3RlYWQgb2YgdGhlIENQVUlEIHF1ZXJ5LiBUaGF0J3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZS5cblxuTm93LCBURFggaXMsIG9mIGNvdXJzZSwgaGFyZHdhcmUtZGVwZW5kZW50LiBCdXQsIEtWTSBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgYC9kZXYva3ZtYCBpb2N0bHMsIGFuZCBhbnkgY29kZSBwYXRoIHJlYWNoYWJsZSB0aHJvdWdoIHRob3NlIGlvY3RscyBpcyBmYWlyIGdhbWUgZm9yIGZ1enppbmcuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyBURFggcmVxdWlyZSBhY3R1YWwgcGh5c2ljYWwgaGFyZHdhcmUsIG9yIGlzIFFFTVUgc2ltdWxhdGluZyBpdCBzdWZmaWNpZW50bHk/IEludGVsJ3MgVERYIGlzIGEgYml0IG9mIGEgbW92aW5nIHRhcmdldCwgc28gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBRRU1VIHN0YXR1cy5cblxuTGV0IG1lIHRoaW5r4oCmIHRoZSBrZXkgaGVyZSBpcyBgbWlycm9yX3Jvb3RfbGV2ZWxgLiBUaGlzIGlzIHRoZSB2YXJpYWJsZSB0aGV5J3JlIHNldHRpbmcgaW4gYHRkeF90ZF9pbml0YCwgd2hpY2ggaXMgY2FsbGVkIHRocm91Z2ggdGhlIGBLVk1fTUVNT1JZX0VOQ1JZUFRfT1BgIGlvY3RsLiBTbywgdGhhdCdzIHRoZSBlbnRyeSBwb2ludCDigJMgdGhlIGlvY3RsLCBhbmQgdGhlIGNvZGUgcGF0aCB0aHJvdWdoIGB0ZHhfdGRfaW5pdGAgdGhhdCB1bHRpbWF0ZWx5IHNldHMgYG1pcnJvcl9yb290X2xldmVsYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXcgYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAgbGV2ZXJhZ2VzIHRoaXMgYG1pcnJvcl9yb290X2xldmVsYC4gTXkgcGxhbiBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhhdCB2YWx1ZSBpcyBzZXQgYW5kIHRoZW4gdXRpbGl6ZWQuIFRoaXMgaXMgYWxsIE1NVS1yZWxhdGVkLCBhbmQgcG90ZW50aWFsbHkgc2VjdXJpdHktY3JpdGljYWwsIHNvIGl0J3Mgd29ydGggdGhlIGRlZXAgZGl2ZS4gTGV0J3MgZGlnIGludG8gYHRkeF90ZF9pbml0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE1OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjAzOjA0LjQ2MzU5Nzk4M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg1Nzc4OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRkeF90ZF9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvdGR4LmM9MjM4Nz1zdGF0aWMgaW50IHNldHVwX3RkcGFyYW1zKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yNDMwLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MjQzMTpzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yNDMyLVxcdFxcdFxcdCB1NjQgKnNlYW1jYWxsX2VycilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9Mjc1Mz1ERUZJTkVfQ0xBU1ModGR4X3ZtX3N0YXRlX2d1YXJkLCB0ZHhfdm1fc3RhdGVfZ3VhcmRfdCxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjc1Ni1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjI3NTc6c3RhdGljIGludCB0ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjc1OC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI4MDktXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoyODEwOlxcdHJldCA9IF9fdGR4X3RkX2luaXQoa3ZtLCB0ZF9wYXJhbXMsIFxcdTAwMjZjbWQtXFx1MDAzZWh3X2Vycm9yKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI4MTEtXFx0aWYgKHJldClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MjkwMz1pbnQgdGR4X3ZtX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI5MjAtXFx0Y2FzZSBLVk1fVERYX0lOSVRfVk06XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoyOTIxOlxcdFxcdHIgPSB0ZHhfdGRfaW5pdChrdm0sIFxcdTAwMjZ0ZHhfY21kKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTI5MjItXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjAzOjA2Ljk0OTM5MzYyM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNjkxNzc3NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS1ZNIE1NVSBDaGFuZ2UgZm9yIFBvdGVudGlhbCBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAuIEkgc2VlIHRoYXQgdGhlIGNoYW5nZXMsIHBhcnRpY3VsYXJseSB0aGUgcmVtb3ZhbCBvZiBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYCBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBjaGVja2luZyBgbWlycm9yX3Jvb3RfbGV2ZWxgLCBpbXBhY3QgZXZlbiBub24tVERYIFZNcyBpZiBgbWlycm9yX3Jvb3RfbGV2ZWxgIGlzIHNldCDigJMgd2hpY2gsIGFzIGZhciBhcyBJIGNhbiB0ZWxsIGZyb20gdGhlIGNvZGUsICpvbmx5KiBoYXBwZW5zIGluIGB0ZHhfdGRfaW5pdGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHBheSBhdHRlbnRpb24gdG8uIEFueSB0aW1lIHdlJ3JlIHRvdWNoaW5nIGNvcmUgS1ZNIE1NVSBsb2dpYyBsaWtlIHRoaXMsIGl0J3Mgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuVGhlIGNvZGUncyBsb2dpYyBpcyBzaGlmdGluZyBoZXJlLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgYSBURFgtc3BlY2lmaWMgZnVuY3Rpb24gYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAsIGJ1dCBub3cgaXQgc2VlbXMgbGlrZSB0aGUgcGF0Y2gncyByZXBsYWNpbmcgaXQgd2l0aCBhIGNhbGwgdG8gYGNwdWlkX21heHBoeWFkZHJgIHVubGVzcyBgbWlycm9yX3Jvb3RfbGV2ZWxgIGlzIHNldCwgaW4gd2hpY2ggY2FzZSBpdCB1c2VzIHRoYXQgdmFsdWUgYXMgYSBmaXhlZCBsZXZlbC4gQW5kIGlmIGl0IGlzbid0IHNldCwgdGhlbiB0aGUgY29kZSBjaG9vc2VzIHRoZSBtYXggb2YgNCBvciA1IGxldmVscy5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogSXMgdGhpcyBhcmVhIHdvcnRoIGZ1enppbmc/IEdpdmVuIHRoZSBjaGFuZ2VzIHRvIHRoZSBNTVUncyBiZWhhdmlvciwgSSdkIHNheSBhIHJlc291bmRpbmcgeWVzLiBBbnkgY2hhbmdlIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBhbHdheXMgd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueS4gTGV0IG1lIG1ha2UgYSBtZW50YWwgbm90ZSB0byBjb25maXJtIHRoaXMgY2hhbmdlIGRvZXNuJ3QgYnJlYWsgVERYLlxuXG5Ob3csIGxldCdzIGZpZ3VyZSBvdXQgdGhlIG5lY2Vzc2FyeSBidWlsZCBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSdsbCBuZWVkIGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCB0byBnZXQgc3RhcnRlZCwgb2J2aW91c2x5LiBCdXQgZ2l2ZW4gdGhlIFREWCBjb25uZWN0aW9uLCBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIGBJTlRFTF9URFhfSE9TVGAgaXMgcmVxdWlyZWQgZm9yIGZ1bGwgY292ZXJhZ2UuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjgxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjAzOjEzLjMxODU3NDQ2OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjY5MzU2NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fSU5URUxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9ODM9Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowMzoxNS41ODc5Mzc3ODlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDYwMDU0MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYEtWTV9JTlRFTF9URFhgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIGBLVk1fSU5URUxfVERYYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY3kgY2hhaW4uIEkga25vdyB0aGlzIGlzIGEgY29tcGxleCBhcmVhLCBwb3RlbnRpYWxseSBpbnZvbHZpbmcgQ1BVIGZlYXR1cmVzLCBzcGVjaWZpYyBrZXJuZWwgbW9kdWxlcywgYW5kIHBvdGVudGlhbGx5IGV2ZW4gZmlybXdhcmUgaW50ZXJhY3Rpb25zLlxuXG5NeSBpbml0aWFsIGxpbmUgb2YgaW5xdWlyeSB3aWxsIGJlIHRvIG1hcCBvdXQgYWxsIHRoZSBpbW1lZGlhdGUgZGVwZW5kZW5jaWVzLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggb3RoZXIgS1ZNIGNvbXBvbmVudHMsIEludGVsLXNwZWNpZmljIG1vZHVsZXMsIG9yIGV2ZW4gY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0aWVzIGFyZSByZXF1aXJlZCBmb3IgYEtWTV9JTlRFTF9URFhgIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIG5vdCBqdXN0IGRpcmVjdCBkZXBlbmRlbmNpZXMsIGJ1dCBhbHNvIHBvdGVudGlhbCBpbmRpcmVjdCByZWxhdGlvbnNoaXBzIGFuZCBhbnkgY29uZmxpY3RpbmcgbW9kdWxlIGNvbWJpbmF0aW9ucy5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBjaGFuZ2VzIGluIHVwc3RyZWFtIGtlcm5lbHMgb3IgZGlzdHJpYnV0aW9ucyBhbmQgaWYgdGhlcmUgYXJlIGFueSBkb2N1bWVudGVkIGNhdmVhdHMgb3IgcmVzdHJpY3Rpb25zLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYW55IHNlY3VyaXR5IGltcGxpY2F0aW9ucyBvZiBhbnkgb2YgdGhlIGRlcGVuZGVuY2llcywgYW5kIGhvdyB0aG9zZSBtaWdodCBpbXBhY3QgdGhlIG92ZXJhbGwgVERYIHNvbHV0aW9uLiBJJ2xsIGFsc28gYmUgd2F0Y2hpbmcgZm9yIGFueSByZWNlbnQgcGF0Y2hlcywgYnVnIGZpeGVzLCBvciBlbmhhbmNlbWVudHMgdGhhdCBtaWdodCB0b3VjaCBvbiByZWxhdGVkIGNvZGUgcGF0aHMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlIG9mIHRoZSBURFggbGFuZHNjYXBlIGFuZCBhbnl0aGluZyB0aGF0IG1pZ2h0IGJlIGJyb2tlbiwgb3IgdGhhdCBtaWdodCByZXF1aXJlIHVwZGF0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODc3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDM6MTguNjQ3OTk1MDIzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODgwMjE5NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9JTlRFTF9URFhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowMzoyMC43MzYwMjYxNzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQxNDgwODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEtWTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIEtWTSBjb25maWd1cmF0aW9uIG9uIHg4NiwgcHJvYmFibHkgcmVsYXRlZCB0byBhIHJlY2VudCBjaGFuZ2Ugb3IgYSBwZWN1bGlhciBiZWhhdmlvciBJJ20gdHJvdWJsZXNob290aW5nLiBMZXQncyBzdGFydCB3aXRoIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMTM0LiBUaGF0IGZpbGUgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB2YXJpb3VzIEtWTSBmZWF0dXJlcyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciBjb25maWd1cmVkIGZvciB4ODYuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIGRlcGVuZGVuY3kgdGhlcmUgdGhhdCdzIHJlbGV2YW50IHRvIHdoYXQgSSdtIGxvb2tpbmcgYXQuIEhvcGVmdWxseSwgaXTigJlzIG5vdCB0b28gZGVlcGx5IG5lc3RlZCB3aXRoaW4gaW5jbHVkZXMhIFRpbWUgdG8gZ2V0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyOTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowMzoyMy43Nzc1MDkxOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0XFx0ICBndWVzdHMgdmlhIGEgZGV2aWNlIG5vZGUsIGUuZy4gL2Rldi9zZ3hfdmVwYy5cXG4gMTMxOlxcdFxcbiAxMzI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxMzM6XFx0XFxuIDEzNDpcXHRjb25maWcgS1ZNX0lOVEVMX1REWFxcbiAxMzU6XFx0XFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4gMTM2OlxcdFxcdGRlZmF1bHQgeVxcbiAxMzc6XFx0XFx0ZGVwZW5kcyBvbiBJTlRFTF9URFhfSE9TVFxcbiAxMzg6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuIDEzOTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXFxuIDE0MDpcXHRcXHRoZWxwXFxuIDE0MTpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGxhdW5jaGluZyBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKVxcbiAxNDI6XFx0XFx0ICBjb25maWRlbnRpYWwgVk1zIG9uIEludGVsIHByb2Nlc3NvcnMuXFxuIDE0MzpcXHRcXG4gMTQ0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTQ1OlxcdFxcbiAxNDY6XFx0Y29uZmlnIEtWTV9BTURcXG4gMTQ3OlxcdFxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuIDE0ODpcXHRcXHRkZXBlbmRzIG9uIEtWTSBcXHUwMDI2XFx1MDAyNiAoQ1BVX1NVUF9BTUQgfHwgQ1BVX1NVUF9IWUdPTilcXG4gMTQ5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDM6MjMuNzc3NTk5NjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwMDM4NTM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFREWCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgc2V0dGluZyB1cCB0aGlzIFREWCBlbnZpcm9ubWVudC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBjb3JlIGNvbXBvbmVudHMgYXJlIGluIHBsYWNlLiBUaGUgb2J2aW91cyBvbmVzIGFyZSBgS1ZNYCBmb3IgdGhlIHZpcnR1YWxpemF0aW9uIGxheWVyLCBgS1ZNX0lOVEVMYCBmb3IgSW50ZWwtc3BlY2lmaWMgc3VwcG9ydCwgYW5kIHRoZSBURFgtc3BlY2lmaWMgbW9kdWxlczogYElOVEVMX1REWF9IT1NUYCBhbmQgYEtWTV9JTlRFTF9URFhgLiBCdXQgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBJTlRFTF9URFhfSE9TVGAuIFRoYXQgbW9kdWxlIGlzIGtleSwgc28gbGV0J3Mgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IGl0IHJlbGllcyBvbi4gV2UgZG9uJ3Qgd2FudCB0byBnZXQgYWhlYWQgb2Ygb3Vyc2VsdmVzIGFuZCBtaXNzIGEgY3JpdGljYWwgY29tcG9uZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODEzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowMzoyNi44Nzc5ODcwODRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTc5MjkzMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElOVEVMX1REWF9IT1NUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9MTg0ND1jb25maWcgWDg2X1VTRVJfU0hBRE9XX1NUQUNLXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjMtXFxuYXJjaC94ODYvS2NvbmZpZzoxODY0OmNvbmZpZyBJTlRFTF9URFhfSE9TVFxcbmFyY2gveDg2L0tjb25maWctMTg2NS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjAzOjI4Ljg3NTkyMzA1OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTgwNTA3OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB4ODYgQXJjaGl0ZWN0dXJlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhpcyB4ODYgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSB6ZXJvaW5nIGluIG9uIGBhcmNoL3g4Ni9LY29uZmlnYCwgYXJvdW5kIGxpbmUgMTg2NCwgcmlnaHQ/IFRoYXQncyB0eXBpY2FsbHkgd2hlcmUgdGhleSBzdGFydCBkZWZpbmluZyBvcHRpb25zIGluIHRlcm1zIG9mIENQVSBmZWF0dXJlcyBvciBjb21waWxlciBmbGFncy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgY29uZmlndXJhdGlvbnMgaW50ZXJyZWxhdGUgYW5kIHdoYXQgdGhlIHJhdGlvbmFsZSBpcy4gSXQgY291bGQgYmUgYSBzcGVjaWZpYyBmZWF0dXJlIEknbSBpbnRlcmVzdGVkIGluIG9yIGEgZGVidWdnaW5nIG9wdGlvbiB0aGF0J3MgcmVsZXZhbnQgdG8gYSBjdXJyZW50IGlzc3VlLiBMZXQncyBzZWUgaWYgdGhhdCBzZWN0aW9uIGhhcyBhIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBzeW1ib2wsIG9yIGEgZGVwZW5kZW5jeSBjaGFpbiB0aGF0IHRyaWdnZXJzIGEgY2VydGFpbiBidWlsZCBiZWhhdmlvci4gSSB3YW50IHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjb25maWd1cmF0aW9ucyBvbiB0aGUgZ2VuZXJhdGVkIGltYWdlIG9yIHJ1bnRpbWUgcGVyZm9ybWFuY2UuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCB0aGUga2VybmVsIG1haW50YWluZXJzIHRob3VnaHQgYWJvdXQgdGhhdCBzcGVjaWZpYyBzZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTQ0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDM6MzEuODU2NDMzNzAzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MDg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NjA6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni9zaHN0ay5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuMTg2MTpcXHRcXG4xODYyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xODYzOlxcdFxcbjE4NjQ6XFx0Y29uZmlnIElOVEVMX1REWF9IT1NUXFxuMTg2NTpcXHRcXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcXFwiXFxuMTg2NjpcXHRcXHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUxcXG4xODY3OlxcdFxcdGRlcGVuZHMgb24gWDg2XzY0XFxuMTg2ODpcXHRcXHRkZXBlbmRzIG9uIEtWTV9JTlRFTFxcbjE4Njk6XFx0XFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXFxuMTg3MDpcXHRcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXFxuMTg3MTpcXHRcXHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xcbjE4NzI6XFx0XFx0ZGVwZW5kcyBvbiBYODZfTUNFXFxuMTg3MzpcXHRcXHRoZWxwXFxuMTg3NDpcXHRcXHQgIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHByb3RlY3RzIGd1ZXN0IFZNcyBmcm9tIG1hbGljaW91c1xcbjE4NzU6XFx0XFx0ICBob3N0IGFuZCBjZXJ0YWluIHBoeXNpY2FsIGF0dGFja3MuICBUaGlzIG9wdGlvbiBlbmFibGVzIG5lY2Vzc2FyeSBURFhcXG4xODc2OlxcdFxcdCAgc3VwcG9ydCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcnVuIGNvbmZpZGVudGlhbCBWTXMuXFxuMTg3NzpcXHRcXG4xODc4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xODc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowMzozMS44NTY3ODY3OTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzMDEyODY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLZXJuZWwgQ29uZmlndXJhdGlvbiBNdXNpbmdzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiBhbmQgdHJ5aW5nIHRvIG1ha2Ugc29tZSBzZW5zZSBvZiB0aGUgZGVwZW5kZW5jaWVzLiBJdCBzZWVtcyBgSU5URUxfVERYX0hPU1RgIGlzIHJlbGlhbnQgb24gYSBmZXcgdGhpbmdzOiBgQ1BVX1NVUF9JTlRFTGAsIGBYODZfNjRgLCBgS1ZNX0lOVEVMYCwgYFg4Nl9YMkFQSUNgLCBgQ09OVElHX0FMTE9DYCwgYW5kIGBYODZfTUNFYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBhbGwgdGhlIG5lY2Vzc2FyeSBwaWVjZXMgZm9yIHJ1bm5pbmcgSW50ZWwgVERYIGluIGEgaG9zdCBlbnZpcm9ubWVudC5cblxuR2l2ZW4gdGhhdCwgSSB0aGluayB3ZSAqZGVmaW5pdGVseSogbmVlZCB0byBpbmNsdWRlIGBLVk1gIGFzIGEgYmFzZSwgdGhlbiBgS1ZNX0lOVEVMYCwgYW5kIG9mIGNvdXJzZSBgSU5URUxfVERYX0hPU1RgIGl0c2VsZiwgYW5kIGl0IGZvbGxvd3MgbG9naWNhbGx5IHRvIGFsc28gYnJpbmcgaW4gYEtWTV9JTlRFTF9URFhgLiBTZWVtcyBsaWtlIGEgc2FmZSBhbmQgbG9naWNhbCBhcHByb2FjaCB0byBlbnN1cmUgdGhlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGF0IHRoZSBsb3dlc3QgbGV2ZWwuXG5cbk5vdywgSSdtIHRyeWluZyB0byB6ZXJvIGluIG9uIHdoYXQgKmFjdHVhbGx5KiBuZWVkcyBteSBhdHRlbnRpb24uIExldCdzIHNlZS4uLiB3aGF0IGFyZSB0aGUga2V5IHN5bWJvbHMsIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZT8gQWgsIHJpZ2h0LCBga3ZtX21tdV9nZXRfdGRwX2xldmVsYC4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IG9uZS4gSSB0aGluayBpdCdzIHN0YXRpYyBpbmxpbmUgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBidXQgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBHb3R0YSBiZSB0aG9yb3VnaCB3aXRoIHRoZXNlIHRoaW5ncyEgTm8gcm9vbSBmb3IgYXNzdW1wdGlvbnMuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgdG8gY29uZmlybSBpdCdzIGFjdHVhbGx5IHN0YXRpYyBpbmxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MDYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowMzozNS43ODY5MTc3MDlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTkwODEwNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX21tdV9nZXRfdGRwX2xldmVsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTkxND12b2lkIF9fa3ZtX21tdV9yZWZyZXNoX3Bhc3N0aHJvdWdoX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTI4LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTkyOTpzdGF0aWMgaW5saW5lIGludCBrdm1fbW11X2dldF90ZHBfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTkzMC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTU9a3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NjUtXFx0cm9sZS5hZF9kaXNhYmxlZCA9ICFrdm1fYWRfZW5hYmxlZDtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5NjY6XFx0cm9sZS5sZXZlbCA9IGt2bV9tbXVfZ2V0X3RkcF9sZXZlbCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NjctXFx0cm9sZS5kaXJlY3QgPSB0cnVlO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02MDYwPXZvaWQga3ZtX2luaXRfc2hhZG93X25wdF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyNCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjA3OC1cXHRyb290X3JvbGUgPSBjcHVfcm9sZS5iYXNlO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjA3OTpcXHRyb290X3JvbGUubGV2ZWwgPSBrdm1fbW11X2dldF90ZHBfbGV2ZWwodmNwdSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MDgwLVxcdGlmIChyb290X3JvbGUubGV2ZWwgPT0gUFQ2NF9ST09UXzVMRVZFTCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02Nzg1PXN0YXRpYyBpbnQgX19rdm1fbW11X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11ICptbXUsIHN0cnVjdCBrdm1fcGFnZXdhbGsgKncpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY4MTEtXFx0ICovXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2ODEyOlxcdGlmICh0ZHBfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiBrdm1fbW11X2dldF90ZHBfbGV2ZWwodmNwdSkgXFx1MDAzZSBQVDMyRV9ST09UX0xFVkVMKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjgxMy1cXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDM6MzcuOTQ2MDA0MTQxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODQ2MjI3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbmxpbmUgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGBzdGF0aWMgaW5saW5lYCwgbWVhbmluZyB0aGUgY29tcGlsZXIgaXMgZ29pbmcgdG8gc2hvdmUgaXRzIGNvZGUgZGlyZWN0bHkgaW50byB3aGVyZXZlciBpdCdzIGNhbGxlZC4gTm8gZnVuY3Rpb24gY2FsbCBvdmVyaGVhZCwganVzdCBpbmxpbmVkIGdvb2RuZXNzLiBOb3csIGxldCdzIHNlZSB3aGVyZSB0aGlzIHRoaW5nIGlzIGFjdHVhbGx5ICp1c2VkKi4gSSBzZWUgaXQncyBjYWxsZWQgYnkgYGt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGVgLCBga3ZtX2luaXRfc2hhZG93X25wdF9tbXVgLCBhbmQgYF9fa3ZtX21tdV9jcmVhdGVgLiBIbW1tLCBpbnRlcmVzdGluZy4gSG9sZCBvbiBhIHNlY29uZOKApiBga3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZWAgcmluZ3MgYSBiZWxsLiBJc24ndCB0aGF0IG9uZSBvZiB0aG9zZSB1bmlvbiByb2xlIGZ1bmN0aW9ucz8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiBpdCdzIGFsc28gc3RhdGljLCBiZWNhdXNlIHRoYXQgY2FuIGltcGFjdCB0aGUgaW5saW5pbmcgc2lnbmlmaWNhbnRseS4gR290dGEgZW5zdXJlIHRoYXQgSSBmdWxseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBob3cgdGhpcyBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgS1ZNIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NzMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowMzo0MS4xMzA2MzA1NDVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDI5MTIxOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTQ9c3RhdGljIHVuaW9uIGt2bV9tbXVfcGFnZV9yb2xlXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTU1Omt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk1Ni1cXHRcXHRcXHRcXHR1bmlvbiBrdm1fY3B1X3JvbGUgY3B1X3JvbGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5Nzg9c3RhdGljIHZvaWQgaW5pdF9rdm1fdGRwX21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5ODEtXFx0c3RydWN0IGt2bV9tbXUgKmNvbnRleHQgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5yb290X21tdTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5ODI6XFx0dW5pb24ga3ZtX21tdV9wYWdlX3JvbGUgcm9vdF9yb2xlID0ga3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZSh2Y3B1LCBjcHVfcm9sZSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTgzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowMzo0My4zMzM1NDg5NDdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1MTY5MzE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsZXJzIG9mIGBpbml0X2t2bV90ZHBfbW11YCoqXG5cbk9rYXksIHNvIGBpbml0X2t2bV90ZHBfbW11YCBpcyBhbHNvIG1hcmtlZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFN0YXRpYyBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgaW4gYSBLVk0gY29udGV4dCwgb2Z0ZW4gaGludCBhdCBmdW5jdGlvbmFsaXR5IHRpZ2h0bHkgY291cGxlZCB3aXRoaW4gYSBzcGVjaWZpYyBtb2R1bGUgb3IgaW1wbGVtZW50YXRpb24gZGV0YWlsLiBUaGUgZmFjdCB0aGF0IGl0J3Mgc3RhdGljIHN1Z2dlc3RzIGl0cyBzY29wZSBpcyBkZWxpYmVyYXRlbHkgbGltaXRlZCwgd2hpY2ggY291bGQgbWVhbiBpdCdzIGluaXRpYWxpemluZyBzb21ldGhpbmcgdmVyeSBzcGVjaWZpYyBmb3IgVERQIE1NVSBvcGVyYXRpb25zIHdpdGhpbiBLVk0uXG5cbk15IG5leHQgbW92ZSBpcyB0byB0cmFjZSB0aGUgY2FsbGVycy4gVW5kZXJzdGFuZGluZyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgd2lsbCBnaXZlIG1lIHZpdGFsIGluc2lnaHRzIGludG8gaXRzIHJvbGUuIElzIGl0IG9ubHkgY2FsbGVkIGR1cmluZyBWTSBjcmVhdGlvbiwgb3IgaXMgaXQgdHJpZ2dlcmVkIG9uIHNwZWNpZmljIGV2ZW50cyB3aXRoaW4gdGhlIFZNJ3MgbGlmZWN5Y2xlPyBEb2VzIGl0IGdldCBjYWxsZWQgZnJvbSB0aGUgY29udGV4dCBvZiB2Q1BVIGluaXRpYWxpemF0aW9uLCBvciBpcyBpdCB0aWVkIHRvIHRoZSBwaHlzaWNhbCBwYWdlIHNldHVwPyBUaGUgYW5zd2VycyB3aWxsIGRpY3RhdGUgaXRzIGltcG9ydGFuY2UgYW5kIGxpa2VseSBwb2ludCB0byBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGFjdHMgb3IgcG9zc2libGUgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgZ3JhcGghXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDk5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDM6NDYuNzg1MjQ0OTk4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI4NzUwNTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluaXRfa3ZtX3RkcF9tbXVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz01OTU1PWt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTc3LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTk3ODpzdGF0aWMgdm9pZCBpbml0X2t2bV90ZHBfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NzktXFx0XFx0XFx0ICAgICB1bmlvbiBrdm1fY3B1X3JvbGUgY3B1X3JvbGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTYxNDg9dm9pZCBrdm1faW5pdF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTU2LVxcdFxcdGlmICh0ZHBfZW5hYmxlZClcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYxNTc6XFx0XFx0XFx0aW5pdF9rdm1fdGRwX21tdSh2Y3B1LCBjcHVfcm9sZSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTU4LVxcdFxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDM6NDkuMDE0MDA0Mzc5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDEzNzE0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvZGUgb2JzZXJ2YXRpb25zLCBwaHJhc2VkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczpcblxuKipLVk0gSW5pdGlhbGl6YXRpb24gYW5kIFREWCBDb25jZXJucyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiBga3ZtX2luaXRfbW11YCBhbmQgYGt2bV9pbml0X3NoYWRvd19ucHRfbW11YCBhcmUgYm90aCBkZWNsYXJlZCBhcyBub24tc3RhdGljLiBUaGF0J3MgZ29vZCB0byBrbm93LiBTdGFuZGFyZCBwcmFjdGljZSB3aXRoaW4gS1ZNLCBsaWtlbHkuIFRoZW4sIHRoZXJlJ3MgYHRkeF90ZF9pbml0YC4gQWgsIHRoYXQgb25lICppcyogc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCB1c2FnZSBjb25jZXJuLiBOb3csIHdoZXJlIGlzIGl0IGNhbGxlZCBmcm9tPyBMZXQgbWUgbG9vay4uLiBpdCdzIGNhbGxlZCBieSBgdGR4X3ZtX2lvY3RsYC4gSG1tLCBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIGB0ZHhfdm1faW9jdGxgIG5vdy4gSXMgdGhhdCBhbHNvIHN0YXRpYz8gTm8sIG5vIGl0J3Mgbm90LiBBbHJpZ2h0LCBJJ20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGludG8gYHRkeF92bV9pb2N0bGAgdG8gdW5kZXJzdGFuZCB0aGF0IGludGVyZmFjZSBhIGxpdHRsZSBiZXR0ZXIgYW5kIGhvdyBgdGR4X3RkX2luaXRgIGlzIGJlaW5nIHV0aWxpemVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNhbGwgZ3JhcGggYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA3NCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjAzOjUyLjc1NTM4MDYyN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ2ODYxNzUzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHhfdm1faW9jdGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODM5PXN0YXRpYyBpbnQgdnRfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODQzLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjg0NDpcXHRyZXR1cm4gdGR4X3ZtX2lvY3RsKGt2bSwgYXJncCk7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODQ1LX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9Mjg4OD1zdGF0aWMgaW50IHRkeF9nZXRfY21kKHZvaWQgX191c2VyICphcmdwLCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjkwMi1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjI5MDM6aW50IHRkeF92bV9pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjkwNC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaD0xMzM9dm9pZCB0ZHhfdm1fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oOjEzNDppbnQgdGR4X3ZtX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oLTEzNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDM6NTYuMjI0MDA0MDU5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTk0ODI5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyB0aGUgS1ZNIEVuY3J5cHRpb24gRW50cnkgUG9pbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgS1ZNIGVuY3J5cHRpb24gc3R1ZmYsIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBlbnRyeSBwb2ludC4gUmlnaHQsIGl0IGxvb2tzIGxpa2UgYHZ0X21lbV9lbmNfaW9jdGxgIG9yIHBvdGVudGlhbGx5IGB0ZHhfdm1faW9jdGxgIGFyZSB0aGUgY2FuZGlkYXRlcy4gSG9sZCBvbiBhIHNlY29uZCwgdGhhdCBgdnRfbWVtX2VuY19pb2N0bGAgZnVuY3Rpb27igKYgaXNuJ3QgdGhhdCBzdGF0aWNhbGx5IGRlZmluZWQgaW4gYGFyY2gveDg2L2t2bS92bXgvbWFpbi5jYD8gVGhhdCdzIGludGVyZXN0aW5nLCBsZXQgbWUgZG91YmxlLWNoZWNrIGhvdyBpdCdzIGFjdHVhbGx5IGFzc2lnbmVkIGFuZCB3aGVyZSBpdCdzIGNhbGxlZCBmcm9tLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MDcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowMzo1OS40ODM0OTAxMTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDA0MDM5MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidnRfbWVtX2VuY19pb2N0bFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L21haW4uYz04MzE9c3RhdGljIHZvaWQgdnRfc2V0dXBfbWNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTgzOC1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4Mzk6c3RhdGljIGludCB2dF9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODQwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDQ6MDEuNzIzOTAwMDkyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzQ3NjE4MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgdnRfbWVtX2VuY19pb2N0bGAgQXNzaWdubWVudCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHdoZXJlIHRoZSBgdnRfbWVtX2VuY19pb2N0bGAgdmFyaWFibGUgaXMgYmVpbmcgYXNzaWduZWQuIFRoaXMgbGlrZWx5IGluZGljYXRlcyBzb21lIGNyaXRpY2FsIGludGVyYWN0aW9uIHdpdGggbWVtb3J5IGVuY29kaW5nLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgYXNzaWdubWVudCB0byB1bmRlcnN0YW5kOlxuXG4qICAgKipXaGF0IGlzIGB2dF9tZW1fZW5jX2lvY3RsYD8qKiBJcyBpdCBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiwgYSBkYXRhIHN0cnVjdHVyZSwgb3Igc29tZSBvdGhlciBpZGVudGlmaWVyPyBVbmRlcnN0YW5kaW5nIHRoZSBkYXRhIHR5cGUgaXMgcGFyYW1vdW50LiBJJ2xsIG5lZWQgdG8gdXNlIG15IHByZWZlcnJlZCB0b29saW5nIGZvciBjb2RlIG5hdmlnYXRpb24gYW5kIGFuYWx5c2lzIHRvIGdldCBtb3JlIGNvbnRleHQgYXJvdW5kIHRoaXMgaWRlbnRpZmllci5cbiogICAqKldoZXJlIGlzIHRoaXMgYXNzaWdubWVudCBvY2N1cnJpbmc/KiogSXMgaXQgd2l0aGluIGEgZHJpdmVyLCB0aGUga2VybmVsIGNvcmUsIGEgdXNlcnNwYWNlIGFwcGxpY2F0aW9uLCBvciBzb21ldGhpbmcgZWxzZT8gVGhlIHNjb3BlIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgdGhlIGltcGFjdCBhbmQgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBDcm9zcy1yZWZlcmVuY2luZyBpdCBpcyBpbXBvcnRhbnQuXG4qICAgKipXaGF0IGFyZSB0aGUgc3Vycm91bmRpbmcgbGluZXMgb2YgY29kZT8qKiBFeGFtaW5pbmcgdGhlIGNvbnRleHQgYXJvdW5kIHRoZSBhc3NpZ25tZW50IGlzIGNydWNpYWwuIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgY2hlY2tzLCBlcnJvciBoYW5kbGluZyBtZWNoYW5pc21zLCBvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciB2YXJpYWJsZXM/XG4qICAgKipXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSB2YWx1ZSBiZWluZyBhc3NpZ25lZD8qKiBJcyB0aGlzIGEgZGlyZWN0IGFzc2lnbm1lbnQgZnJvbSBhbiBpbnB1dCwgb3IgaXMgaXQgZGVyaXZlZCBmcm9tIHNvbWUgY2FsY3VsYXRpb24/IEtub3dpbmcgdGhlIHNvdXJjZSBvZiB0aGUgdmFsdWUgaXMgaW1wb3J0YW50IGZvciBzZWN1cml0eSByZXZpZXcuXG4qICAgKipEb2VzIHRoaXMgcmVsYXRlIHRvIGFueSBrbm93biB2dWxuZXJhYmlsaXRpZXMgb3IgcGVyZm9ybWFuY2UgaXNzdWVzPyoqIEkgbmVlZCB0byBtZW50YWxseSBjb25uZWN0IHRoaXMgd2l0aCBteSBleGlzdGluZyBrbm93bGVkZ2Ugb2Ygc2ltaWxhciBjb21wb25lbnRzIGFuZCBwcmV2aW91cyBmaW5kaW5ncy5cblxuSSdsbCBzdGFydCBieSBkb2luZyBhIHF1aWNrIHNlYXJjaCBmb3IgdGhlIHZhcmlhYmxlLCBhbmQgSSdsbCBqdW1wIGludG8gbXkgcHJlZmVycmVkIGRlYnVnZ2VyIG9yIHN0YXRpYyBhbmFseXNpcyB0b29sIHRvIGZpbmQgb3V0IHdoZXJlIHRoZSBhc3NpZ25tZW50IGlzIGhhcHBlbmluZy4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTkyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDQ6MDUuNTU4NjY1NzlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjk4NTE0NzEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwubWVtX2VuY19pb2N0bC4qPS4qdnRfbWVtX2VuY19pb2N0bFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDQ6MDcuODg4NTMxMDUxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTYxOTA3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0vVk1YIE1lbW9yeSBFbmNyeXB0aW9uIElPQ1RMKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGhlcmUgYW5kIHBpbnBvaW50IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYHZ0X21lbV9lbmNfaW9jdGxgIHdpdGhpbiB0aGUgS1ZNL1ZNWCBhcmNoaXRlY3R1cmUuIEZvcmdldCBhbnkgcHJlbGltaW5hcnkgbWVhbmRlcmluZywgSSdtIGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoaXMgaXMgZ29pbmcgdG8gYmUgYnVyaWVkIHdpdGhpbiB0aGUgY29yZSBWTVggY29kZSwgc28gSSdtIHNraXBwaW5nIHRoZSBwZXJpcGhlcmFsIGZpbGVzLiBJJ2xsIHNlYXJjaCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhcmNoL3g4Ni9rdm0vdm14L21haW4uY2AuIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBodWIgZm9yIFZNWCBmdW5jdGlvbmFsaXR5LCBhbmQgdGhlIElPQ1RMIGhhbmRsZXIgZm9yIG1lbW9yeSBlbmNyeXB0aW9uIGhhcyB0byBiZSB0aGVyZS4gVGhpcyBpcyB3aGVyZSBJJ2xsIGZpbmQgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mIGhvdyB0aGlzIElPQ1RMIGlzIHByb2Nlc3NlZC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjEyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDQ6MTEuMTg0NzI1MjEzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Mjk3NTE4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2dF9tZW1fZW5jX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTgzMT1zdGF0aWMgdm9pZCB2dF9zZXR1cF9tY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODM4LVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjgzOTpzdGF0aWMgaW50IHZ0X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NDAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowNDoxMS4yNzc3MDU1NTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5MTE2NjEzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgeW91IGRlc2NyaWJlZDpcblxuKipTaW5nbGUgTWF0Y2ggVHJvdWJsZXNob290aW5nKipcblxuT2theSwgc28gSSd2ZSBvbmx5IGdvdCBvbmUgbWF0Y2guIFRoYXQncyBub3QgaWRlYWwsIGJ1dCBpdCdzIGVub3VnaCB0byBzdGFydCB3aXRoLiBMZXQncyBkaWcgaW50byB0aGUgY29kZS4gVGhlIHByb2JsZW0gbGlrZWx5IGxpZXMgd2l0aGluIHRoZSB4ODYgS1ZNIFZNWCBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC94ODYva3ZtL3ZteC9tYWluLmNgLiBNeSBodW5jaCBpcyB0aGF0IHRoZSByZWxldmFudCBjb2RlIHdpbGwgYmUgYXJvdW5kIGxpbmUgODM5LiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIHNvdXJjZSBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDE3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDQ6MTQuMTY4ODc0NTg4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vdm14L21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MzA6XFx0XFxuIDgzMTpcXHRzdGF0aWMgdm9pZCB2dF9zZXR1cF9tY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiA4MzI6XFx0e1xcbiA4MzM6XFx0XFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuIDgzNDpcXHRcXHRcXHRyZXR1cm47XFxuIDgzNTpcXHRcXG4gODM2OlxcdFxcdHZteF9zZXR1cF9tY2UodmNwdSk7XFxuIDgzNzpcXHR9XFxuIDgzODpcXHRcXG4gODM5OlxcdHN0YXRpYyBpbnQgdnRfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxcbiA4NDA6XFx0e1xcbiA4NDE6XFx0XFx0aWYgKCFpc190ZChrdm0pKVxcbiA4NDI6XFx0XFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuIDg0MzpcXHRcXG4gODQ0OlxcdFxcdHJldHVybiB0ZHhfdm1faW9jdGwoa3ZtLCBhcmdwKTtcXG4gODQ1OlxcdH1cXG4gODQ2OlxcdFxcbiA4NDc6XFx0c3RhdGljIGludCB2dF92Y3B1X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkIF9fdXNlciAqYXJncClcXG4gODQ4OlxcdHtcXG4gODQ5OlxcdFxcdGlmICghaXNfdGRfdmNwdSh2Y3B1KSlcXG4gODUwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4NTE6XFx0XFxuIDg1MjpcXHRcXHRyZXR1cm4gdGR4X3ZjcHVfaW9jdGwodmNwdSwgYXJncCk7XFxuIDg1MzpcXHR9XFxuIDg1NDpcXHRcXG4gODU1OlxcdHN0YXRpYyBpbnQgdnRfdmNwdV9tZW1fZW5jX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCBfX3VzZXIgKmFyZ3ApXFxuIDg1NjpcXHR7XFxuIDg1NzpcXHRcXHRpZiAoIWlzX3RkX3ZjcHUodmNwdSkpXFxuIDg1ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODU5OlxcdFxcbiA4NjA6XFx0XFx0cmV0dXJuIHRkeF92Y3B1X3VubG9ja2VkX2lvY3RsKHZjcHUsIGFyZ3ApO1xcbiA4NjE6XFx0fVxcbiA4NjI6XFx0XFxuIDg2MzpcXHRzdGF0aWMgaW50IHZ0X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLFxcbiA4NjQ6XFx0XFx0XFx0XFx0XFx0ICAgICBib29sIGlzX3ByaXZhdGUpXFxuIDg2NTpcXHR7XFxuIDg2NjpcXHRcXHRpZiAoaXNfdGQoa3ZtKSlcXG4gODY3OlxcdFxcdFxcdHJldHVybiB0ZHhfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChrdm0sIHBmbiwgaXNfcHJpdmF0ZSk7XFxuIDg2ODpcXHRcXG4gODY5OlxcdFxcdHJldHVybiAwO1xcbiA4NzA6XFx0fVxcbiA4NzE6XFx0XFxuIDg3MjpcXHQjZGVmaW5lIHZ0X29wKG5hbWUpIHZ0XyMjbmFtZVxcbiA4NzM6XFx0I2RlZmluZSB2dF9vcF90ZHhfb25seShuYW1lKSB2dF8jI25hbWVcXG4gODc0OlxcdCNlbHNlIC8qIENPTkZJR19LVk1fSU5URUxfVERYICovXFxuIDg3NTpcXHQjZGVmaW5lIHZ0X29wKG5hbWUpIHZteF8jI25hbWVcXG4gODc2OlxcdCNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgTlVMTFxcbiA4Nzc6XFx0I2VuZGlmIC8qIENPTkZJR19LVk1fSU5URUxfVERYICovXFxuIDg3ODpcXHRcXG4gODc5OlxcdCNkZWZpbmUgVk1YX1JFUVVJUkVEX0FQSUNWX0lOSElCSVRTXFx0XFx0XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowNDoxNC4xNjkwMTE0NjhaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyOTAzNzI1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1hY3JvIEFzc2lnbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0J3MgdXNpbmcgbWFjcm9zIHRvIGRlZmluZSBgdnRfb3AobWVtX2VuY19pb2N0bClgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGEgY29udmVuaWVudCB3YXkgb2YgaGFuZGxpbmcgYSBmdW5jdGlvbiBjYWxsIGluIGEgd2F5IHRoYXQgbWF5IHJlZHVjZSBjb2RlIGR1cGxpY2F0aW9uLCBidXQgbm93IEkgbmVlZCB0byBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gVGhlIG1hY3JvIGl0c2VsZiBkb2Vzbid0IGdpdmUgbWUgdGhlIGZ1bGwgcGljdHVyZS4gTXkgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIHRyYWNrIGRvd24gd2hhdCBgbWVtX2VuY19pb2N0bGAgKmlzKi4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBmdW5jdGlvbiBvciB2YXJpYWJsZSBpcyBkZWZpbmVkLCBhbmQgYGFyY2gveDg2L2t2bS92bXgvbWFpbi5jYCBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5ODUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA0OjE3Ljc5ODA1MTg0OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg5MTY1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2VuY19pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L21haW4uYz04MzE9c3RhdGljIHZvaWQgdnRfc2V0dXBfbWNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTgzOC1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4Mzk6c3RhdGljIGludCB2dF9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODQwLXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg0Ni1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4NDc6c3RhdGljIGludCB2dF92Y3B1X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkIF9fdXNlciAqYXJncClcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NDgte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODg4PXN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDM0LVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwMzU6XFx0Lm1lbV9lbmNfaW9jdGwgPSB2dF9vcF90ZHhfb25seShtZW1fZW5jX2lvY3RsKSxcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDM2OlxcdC52Y3B1X21lbV9lbmNfaW9jdGwgPSB2dF9vcF90ZHhfb25seSh2Y3B1X21lbV9lbmNfaW9jdGwpLFxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwMzctXFx0LnZjcHVfbWVtX2VuY191bmxvY2tlZF9pb2N0bCA9IHZ0X29wX3RkeF9vbmx5KHZjcHVfbWVtX2VuY191bmxvY2tlZF9pb2N0bCksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA0OjE3Ljg3Njk3NDE1N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjkxMzcyMTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBURFggVk0gSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aCBmb3IgVERYIFZNcywgYW5kIGl0IGxvb2tzIGxpa2UgYHRkeF92bV9pb2N0bGAgaXMgdGhlIGtleSBlbnRyeSBwb2ludCwgaW52b2tlZCB0aHJvdWdoIGBrdm1feDg2X29wcy5tZW1fZW5jX2lvY3RsYC4gVGhpcyBtYWtlcyBzZW5zZSwgYXMgdGhhdCdzIHdoZXJlIHRoZSBURFgtc3BlY2lmaWMgc2V0dXAgd291bGQgYmVnaW4uIEFuZCwgd2l0aGluIHRoYXQsIGB0ZHhfdGRfaW5pdGAgaXMgY2FsbGVkLCB3aGljaCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBmdXJ0aGVyIHJlaW5mb3JjZXMgYHRkeF92bV9pb2N0bGAgYXMgdGhlIHByaW1hcnkgZm9jdXMuXG5cbkJ1dCBob2xkIG9uLCBJIHNob3VsZCBhbHNvIGxvb2sgYXQgdGhlIHN1cHBvcnRpbmcgZnVuY3Rpb25zLiBJIHNlZSB0aGF0IGBrdm1fbW11X2dldF90ZHBfbGV2ZWxgIGlzIGNhbGxlZCBieSBga3ZtX2luaXRfbW11YCBhbmQgYGt2bV9pbml0X3NoYWRvd19ucHRfbW11YC4gSXQgc2VlbXMgbGlrZSB0aG9zZSB3b3VsZCBiZSBpbXBvcnRhbnQgdG8gdHJhY2ssIHRvbywgc2luY2UgdGhleSdyZSBpbnZvbHZlZCBpbiBNTVUgaW5pdGlhbGl6YXRpb24sIHJpZ2h0PyBTbyBsZXQncyBhZGQgYGt2bV9pbml0X21tdWAgYW5kIGBrdm1faW5pdF9zaGFkb3dfbnB0X21tdWAgdG8gdGhlIGZvY3VzIGxpc3QuXG5cbkhtbSwgd2FpdCwgYW0gSSBjb3JyZWN0PyBBcmUgYGt2bV9pbml0X21tdWAgYW5kIGBrdm1faW5pdF9zaGFkb3dfbnB0X21tdWAgaG90IHBhdGhzPyBObywgdGhleSBhcHBlYXIgdG8gYmUgY2FsbGVkIGR1cmluZyBNTVUgaW5pdGlhbGl6YXRpb24sIGxpa2VseSB0cmlnZ2VyZWQgYnkgdkNQVSBjcmVhdGlvbiBvciBhIHJvbGUgY2hhbmdlLiBTdGlsbCwgSSBzaG91bGQgcmV2aWV3IHRoZSBjb2RlIHRvIGVuc3VyZSB0aGF0IG5vdGhpbmcgZ2V0cyBtaXNzZWQgaGVyZS4gTGV0J3MgZGlnIGludG8gYGt2bV9pbml0X21tdWAgYW5kIGBrdm1faW5pdF9zaGFkb3dfbnB0X21tdWAgZm9yIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Njk0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA0OjIyLjU2ODM1MDMzOFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzNzE2OTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1faW5pdF9tbXVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS5oPTE0MT12b2lkIGt2bV9tbXVfc2V0X2VwdF9tYXNrcyhib29sIGhhc19hZF9iaXRzKTtcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTQyLVxcbmFyY2gveDg2L2t2bS9tbXUuaDoxNDM6dm9pZCBrdm1faW5pdF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTQ0LXZvaWQga3ZtX2luaXRfc2hhZG93X25wdF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyNCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjE0Nj1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2luaXRfc2hhZG93X2VwdF9tbXUpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjE0Ny1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYxNDg6dm9pZCBrdm1faW5pdF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjE0OS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxNjEtfVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjE2MjpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2luaXRfbW11KTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxNjMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTYxODc9dm9pZCBrdm1fbW11X3Jlc2V0X2NvbnRleHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTg5LVxcdGt2bV9tbXVfdW5sb2FkKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjE5MDpcXHRrdm1faW5pdF9tbXUodmNwdSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTkxLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9yZWdzLmM9MjIwPXZvaWQga3ZtX3Bvc3Rfc2V0X2NyMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgb2xkX2NyMCwgdW5zaWduZWQgbG9uZyBjcjApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcmVncy5jLTIzNC1cXHRcXHRpZiAodGRwX2VuYWJsZWQpIHtcXG5hcmNoL3g4Ni9rdm0vcmVncy5jOjIzNTpcXHRcXHRcXHRrdm1faW5pdF9tbXUodmNwdSk7XFxuYXJjaC94ODYva3ZtL3JlZ3MuYy0yMzYtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz03MTQ9c3RhdGljIGludCBuZXN0ZWRfc3ZtX2xvYWRfY3IzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjMsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTcyOS1cXHQvKiBSZS1pbml0aWFsaXplIHRoZSBNTVUsIGUuZy4gdG8gcGljayB1cCBDUjQgTU1VIHJvbGUgY2hhbmdlcy4gKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjczMDpcXHRrdm1faW5pdF9tbXUodmNwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy03MzEtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTEyMjc9c3RhdGljIGludCBuZXN0ZWRfdm14X2xvYWRfY3IzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjMsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTEyNDktXFx0LyogUmUtaW5pdGlhbGl6ZSB0aGUgTU1VLCBlLmcuIHRvIHBpY2sgdXAgQ1I0IE1NVSByb2xlIGNoYW5nZXMuICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoxMjUwOlxcdGt2bV9pbml0X21tdSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTEyNTEtXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9OTM0MD1pbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk0MTUtXFx0a3ZtX3ZjcHVfcmVzZXQodmNwdSwgZmFsc2UpO1xcbmFyY2gveDg2L2t2bS94ODYuYzo5NDE2OlxcdGt2bV9pbml0X21tdSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTQxNy1cXHR2Y3B1X3B1dCh2Y3B1KTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9ODc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX29wcyBrdm1fbW11X25vdGlmaWVyX29wcyA9IHtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtODg3LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6ODg4OnN0YXRpYyBpbnQga3ZtX2luaXRfbW11X25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSlcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTg4OS17XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTEwOTk9c3RhdGljIHN0cnVjdCBrdm0gKmt2bV9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlLCBjb25zdCBjaGFyICpmZG5hbWUpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExODgtXFxudmlydC9rdm0va3ZtX21haW4uYzoxMTg5OlxcdHIgPSBrdm1faW5pdF9tbXVfbm90aWZpZXIoa3ZtKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExOTAtXFx0aWYgKHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA0OjI0LjkwNTUzMDA0OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODgwNTY2NjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gVERYIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gYGt2bV9pbml0X21tdWAgaXMgdHJpZ2dlcmVkIGR1cmluZyB2Q1BVIGNyZWF0aW9uIGFuZCB3aGVuZXZlciBDUjAvQ1IzIHJlZ2lzdGVycyBhcmUgbW9kaWZpZWQuIFRoYXQncyBhIHJlYXNvbmFibGUgZnJlcXVlbmN5LCBub3RoaW5nIGV4Y2VwdGlvbmFsbHkgaGlnaCwgYnV0IGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdG8ga2VlcCBhbiBleWUgb24gZm9yIHBlcmZvcm1hbmNlLiBIb2xkIG9uLCBgdGR4X3ZtX2lvY3RsYCBpcyBhY3R1YWxseSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgVERYIGluaXRpYWxpemF0aW9uLCB3aGljaCBpcyBtb3JlIGNyaXRpY2FsLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuXG5cbk5vdywgdGhpcyBwYXRjaCByZW1vdmVzIGBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHJgIGFuZCBpbnN0ZWFkIHV0aWxpemVzIGBjcHVpZF9tYXhwaHlhZGRyYCBmb3IgVERYIFZNcywgYnV0IG9ubHkgaWYgdGhlIGBtaXJyb3Jfcm9vdF9sZXZlbGAgaXNuJ3QgY29uZmlndXJlZC4gVGhhdCdzIGFuIGludGVyZXN0aW5nIGFyY2hpdGVjdHVyYWwgZGVjaXNpb24uIEhtbSwgbGV0IG1lIHRoaW5rLi4uIEkgcmVjYWxsIHNlZWluZyBgY3B1aWRfbWF4cGh5YWRkcmAgaW52b2tlZCBpbiBga3ZtX21tdV9nZXRfdGRwX2xldmVsYC4gR2l2ZW4gaXRzIG5ldyByb2xlLCBJIHNob3VsZCBwcm9iYWJseSBkZWx2ZSBkZWVwZXIgYW5kIGV4YW1pbmUgYGNwdWlkX21heHBoeWFkZHJgIG1vcmUgY2xvc2VseS4gSXQncyB0aW1lIHRvIGNoZWNrIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjA4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA0OjI4Ljc4NjA5OTA2NloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzOTg2OTI1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjcHVpZF9tYXhwaHlhZGRyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9jcHVpZC5jPTQ5MT11NjQga3ZtX3ZjcHVfcmVzZXJ2ZWRfZ3BhX2JpdHNfcmF3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy00OTIte1xcbmFyY2gveDg2L2t2bS9jcHVpZC5jOjQ5MzpcXHRyZXR1cm4gcnN2ZF9iaXRzKGNwdWlkX21heHBoeWFkZHIodmNwdSksIDYzKTtcXG5hcmNoL3g4Ni9rdm0vY3B1aWQuYy00OTQtfVxcbi0tXFxuYXJjaC94ODYva3ZtL2NwdWlkLmg9NzE9dTY0IGt2bV92Y3B1X3Jlc2VydmVkX2dwYV9iaXRzX3JhdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS9jcHVpZC5oLTcyLVxcbmFyY2gveDg2L2t2bS9jcHVpZC5oOjczOnN0YXRpYyBpbmxpbmUgaW50IGNwdWlkX21heHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9jcHVpZC5oLTc0LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTkyOT1zdGF0aWMgaW5saW5lIGludCBrdm1fbW11X2dldF90ZHBfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTQyLVxcdC8qIFVzZSA1LWxldmVsIFREUCBpZiBhbmQgb25seSBpZiBpdCdzIHVzZWZ1bC9uZWNlc3NhcnkuICovXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTQzOlxcdGlmIChtYXhfdGRwX2xldmVsID09IDUgXFx1MDAyNlxcdTAwMjYgY3B1aWRfbWF4cGh5YWRkcih2Y3B1KSBcXHUwMDNjPSA0OClcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NDQtXFx0XFx0cmV0dXJuIDQ7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oPTY4OD1zdGF0aWMgaW5saW5lIGJvb2wgdm14X25lZWRfcGZfaW50ZXJjZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmgtNjkzLVxcdHJldHVybiBhbGxvd19zbWFsbGVyX21heHBoeWFkZHIgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oOjY5NDpcXHQgICAgICAgY3B1aWRfbWF4cGh5YWRkcih2Y3B1KSBcXHUwMDNjIGt2bV9ob3N0Lm1heHBoeWFkZHI7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguaC02OTUtfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oPTExNzI9dm9pZCB2Y3B1X3NldF9jcHVpZF9wcm9wZXJ0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmgtMTE3NC1cXHRcXHRcXHQgICAgIHUzMiB2YWx1ZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oOjExNzU6dm9pZCB2Y3B1X3NldF9jcHVpZF9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggbWF4cGh5YWRkcik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oLTExNzYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA0OjMxLjAyNTk3NjM1N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjA4NDYxNDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0vVERYIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBLVk0vVERYIHBlcnNwZWN0aXZlLiBJIHNlZSB0aGUgY2hhbmdlcyB0b3VjaCBga3ZtX21tdV9nZXRfdGRwX2xldmVsYCBhbmQgYHRkeF90ZF9pbml0YC4gYHRkeF90ZF9pbml0YCBpcyBzdGF0aWMsIHdoaWNoIHRlbGxzIG1lIGl0J3MgbGlrZWx5IGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbi4gIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzICp3aGVyZSogdGhhdCBzdGF0aWMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20sIGFuZCBpdCdzIGB0ZHhfdm1faW9jdGxgLiBgdGR4X3ZtX2lvY3RsYCBpcyBub24tc3RhdGljLCBzbyB0aGF0IGltbWVkaWF0ZWx5IHB1dHMgaXQgb24gbXkgcmFkYXIuIEl0J3MgYSBrZXkgZW50cnkgcG9pbnQgZm9yIFREWCBWTSBvcGVyYXRpb25zLiBJJ2xsIGZsYWcgdGhhdCBhcyBhIGZvY3VzIHBvaW50IGZvciBhbmFseXNpcy5cblxuSSBhbHNvIG5lZWQgdG8gc2VlIHdoZXJlIGl0J3MgY2FsbGVkLiBBbmQgYGt2bV9pbml0X21tdWAgaXMgYW5vdGhlciBnb29kIHN5bWJvbC5cblxuTGV0IG1lIHZlcmlmeSB0aGF0IGB0ZHhfdm1faW9jdGxgIGlzbid0IHN0YXRpYy4gWWVwLCBub24tc3RhdGljIGNvbmZpcm1zIGl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUuICBBbnl0aGluZyBlbHNlPyAgQWgsIGBrdm1fbW11X3NldF9taXJyb3Jfcm9vdF9sZXZlbGAgaXMgc3RhdGljIGlubGluZSwgc28gcHJvYmFibHkgbm90IGEgbWFqb3IgcGxheWVyIGhlcmUuXG5cblRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGB0ZHhfbG9hZF9tbXVfcGdkYC4gTm93IEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBjb2RlIGNoYW5nZXM6XG5gYGBjXG4gdm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpXG4ge1xuLVx0dTY0IHNoYXJlZF9iaXQgPSAocGdkX2xldmVsID09IDUpID8gVERYX1NIQVJFRF9CSVRfUFdMXzUgOlxuLVx0XHRcdCAgVERYX1NIQVJFRF9CSVRfUFdMXzQ7XG4tXG4tXHRpZiAoS1ZNX0JVR19PTihzaGFyZWRfYml0ICE9IGt2bV9nZm5fZGlyZWN0X2JpdHModmNwdS1cdTAwM2Vrdm0pLCB2Y3B1LVx1MDAzZWt2bSkpXG4rXHRpZiAoS1ZNX0JVR19PTihwZ2RfbGV2ZWwgIT0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbCwgdmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRyZXR1cm47XG5gYGBcbk9rYXksIHRoZSBrZXkgY2hhbmdlIGluIGB0ZHhfbG9hZF9tbXVfcGdkYCBpcyB0aGlzOiB0aGUgb2xkIGBzaGFyZWRfYml0YCBjaGVjayBiYXNlZCBvbiBgcGdkX2xldmVsYCBpcyByZXBsYWNlZCBieSBhIGNoZWNrIGFnYWluc3QgYHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWxgLiAgVGhpcyBzdWdnZXN0cyB0aGUgYG1pcnJvcl9yb290X2xldmVsYCBpcyBub3cgdGhlIGF1dGhvcml0YXRpdmUgc291cmNlIG9mIHRydXRoLiBJdCBsb29rcyBsaWtlIGl0J3Mgc2ltcGxpZnlpbmcgdGhlIGxvZ2ljIGFuZCBjb25zb2xpZGF0aW5nIHNvbWUgbGV2ZWwgc2V0dGluZ3MuIEkgd2lsbCBuZWVkIHRvIGxvb2sgaW50byBob3cgYW5kIHdoZXJlIHRoaXMgbmV3IGBtaXJyb3Jfcm9vdF9sZXZlbGAgaXMgc2V0IGFuZCB1c2VkIG5vdy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYHRkeF9sb2FkX21tdV9wZ2RgIGlzIG5vbi1zdGF0aWMgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3NDIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDQ6MzcuMjM0NDQwOTFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDQ1ODM4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGR4X2xvYWRfbW11X3BnZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L21haW4uYz02MTM9c3RhdGljIHZvaWQgdnRfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MTYtXFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo2MTc6XFx0XFx0dGR4X2xvYWRfbW11X3BnZCh2Y3B1LCByb290X2hwYSwgcGdkX2xldmVsKTtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy02MTgtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0xNTg2PXN0YXRpYyBpbnQgaGFuZGxlX3Rkdm1jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTYwNi1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjE2MDc6dm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNjA4LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oPTE2MD12b2lkIHRkeF9mbHVzaF90bGJfYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg6MTYxOnZvaWQgdGR4X2xvYWRfbW11X3BnZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGhwYV90IHJvb3RfaHBhLCBpbnQgcm9vdF9sZXZlbCk7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMTYyLWludCB0ZHhfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA0OjM5LjQzOTA2MjMyWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzMDQ5MTY3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgVGhpcyBLVk0gTU1VIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZvciBmdXp6aW5nLiBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgS1ZNIE1NVSBwYXRjaCBhbmQgaGF2ZSBpZGVudGlmaWVkIHNvbWUga2V5IGFyZWFzLlxuXG5GaXJzdCwgSSBub3RpY2VkIHRoYXQgYHRkeF9sb2FkX21tdV9wZ2RgIGlzIG5vbi1zdGF0aWMsIGFuZCBpbXBvcnRhbnRseSwgaXQncyBjYWxsZWQgYnkgYHZ0X2xvYWRfbW11X3BnZGAsIHdoaWNoIGlzIGFzc2lnbmVkIHRvIGBrdm1feDg2X29wcy5sb2FkX21tdV9wZ2RgLiBUaGlzIG1ha2VzIGB0ZHhfbG9hZF9tbXVfcGdkYCBhIGdvb2QgcG90ZW50aWFsIGZvY3VzIHN5bWJvbC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIFRoaXMgd2FycmFudHMgYSBkZWVwZXIgbG9vay5cblxuSSd2ZSBnb3QgdGhyZWUgY29yZSBmb2N1cyBzeW1ib2xzOiBgdGR4X3ZtX2lvY3RsYCwgYHRkeF9sb2FkX21tdV9wZ2RgLCBhbmQgYGt2bV9pbml0X21tdWAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBhbmQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIE1NVSBtb2RpZmljYXRpb25zLlxuXG5Gb3IgY29uZmlndXJhdGlvbnMsIEknbGwgbmVlZCBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBJTlRFTF9URFhfSE9TVGAsIGFuZCBgS1ZNX0lOVEVMX1REWGAuIGBLVk1fSU5URUxfVERYYCBkZXBlbmRzIG9uIGBJTlRFTF9URFhfSE9TVGAsIHNvIEknbGwgaW5jbHVkZSBib3RoIHRvIGJlIHNhZmUuIEl0IGxvb2tzIGxpa2UgYEtWTV9JTlRFTF9URFhgIGlzIHRoZSBjb3JyZWN0IG5hbWUuIEkndmUgZG91YmxlLWNoZWNrZWQgdGhvc2UgY29uZmlndXJhdGlvbnMgdG8gY29uZmlybS5cblxuSSd2ZSBhbHNvIGNvbmZpcm1lZCB0aGUgbmFtZXMgb2YgdGhlIGZ1bmN0aW9uczsgYHRkeF92bV9pb2N0bGAgaXMgdGhlIGNvcnJlY3QgbmFtZSwgYXMgaXMgYHRkeF9sb2FkX21tdV9wZ2RgIGFuZCBga3ZtX2luaXRfbW11YC5cblxuSSBicmllZmx5IGNvbnNpZGVyZWQgYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAsIGJ1dCBpdCdzIHN0YXRpYyBpbmxpbmUsIHNvIGl0J3Mgbm90IGEgc3VpdGFibGUgc3ltYm9sIHRvIHRhcmdldCBkaXJlY3RseS4gSG93ZXZlciwgdGhlIGNoYW5nZXMgd2l0aGluIHRoYXQgaW5saW5lIGZ1bmN0aW9uIGFyZSBpbmRpcmVjdGx5IGNvdmVyZWQgYnkgdGhlIGZ1enppbmcgb2YgYGt2bV9pbml0X21tdWAsIHdoaWNoIGhhbmRsZXMgTU1VIGluaXRpYWxpemF0aW9uLCBpbmNsdWRpbmcgdGhlIFREUCBsZXZlbCBkZXRlcm1pbmF0aW9uLCBmb3IgYm90aCBURFggYW5kIG5vbi1URFggVk1zLlxuXG5KdXN0IHRvIHJlY2FwIG15IHJlYXNvbmluZzogVGhpcyBwYXRjaCBtZXNzZXMgd2l0aCBjb3JlIEtWTSBNTVUgbG9naWMuIEl0J3MgYWJvdXQgZGV0ZXJtaW5pbmcgdGhlIFREUCBsZXZlbCBmb3IgVk1zLCBpbnRyb2R1Y2VzIGBtaXJyb3Jfcm9vdF9sZXZlbGAsIGFuZCByZW1vdmVzIGBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHJgLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCB0aGUgZnVuZGFtZW50YWwgcGFnZSB0YWJsZSBzZXR1cCB3aXRoaW4gS1ZNLCBlc3BlY2lhbGx5IGZvciBURFggVk1zLCBhbmQgdGhlIGluaXRpYWwgTU1VIGNvbmZpZ3VyYXRpb24uIEl0J3MgYWxsIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3Rscy4gVGhpcyBtYWtlcyBpdCByaXBlIGZvciBmdXp6aW5nLlxuXG5TbywgdG8gc3VtbWFyaXplLCBJJ20gY29uZmlkZW50IGluIHRoZXNlIHNldHRpbmdzOlxuXG4qICAgYFdvcnRoRnV6emluZzogdHJ1ZWBcbiogICBgRm9jdXNTeW1ib2xzOiB0ZHhfdm1faW9jdGxgLCBgdGR4X2xvYWRfbW11X3BnZGAsIGBrdm1faW5pdF9tbXVgXG4qICAgYEVuYWJsZUNvbmZpZ3M6IEtWTWAsIGBLVk1fSU5URUxgLCBgSU5URUxfVERYX0hPU1RgLCBgS1ZNX0lOVEVMX1REWGBcblxuSSB0aGluayB0aGlzIGNvdmVycyB0aGUgY3JpdGljYWwgYXJlYXMuIFRpbWUgdG8gbW92ZSBvbiBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjE0LCJPdXRwdXRUb2tlbnMiOjE4OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowNDo0Ny43NDM5ODIwNjRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI1OTA1MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJJTlRFTF9URFhfSE9TVFwiLFxuICAgIFwiS1ZNX0lOVEVMX1REWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRkeF92bV9pb2N0bFwiLFxuICAgIFwidGR4X2xvYWRfbW11X3BnZFwiLFxuICAgIFwia3ZtX2luaXRfbW11XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBsb2dpYyB0byBkZXRlcm1pbmUgdGhlIFREUCAoVHdvLURpbWVuc2lvbmFsIFBhZ2luZykgbGV2ZWwgZm9yIHZpcnR1YWwgbWFjaGluZXMuIEl0IGludHJvZHVjZXMgYG1pcnJvcl9yb290X2xldmVsYCB0byBmaXggdGhlIHJvb3QgbGV2ZWwgZm9yIFZNcyB3aXRoIG1pcnJvciByb290cyAobGlrZSBURFggVk1zKSBhbmQgcmVtb3ZlcyBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBLVk0gTU1VIHBhZ2UgdGFibGUgc2V0dXAgYW5kIFREWCBpbml0aWFsaXphdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgY2FuIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiSU5URUxfVERYX0hPU1RcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0ZHhfdm1faW9jdGxcIixcbiAgICBcInRkeF9sb2FkX21tdV9wZ2RcIixcbiAgICBcImt2bV9pbml0X21tdVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgbG9naWMgdG8gZGV0ZXJtaW5lIHRoZSBURFAgKFR3by1EaW1lbnNpb25hbCBQYWdpbmcpIGxldmVsIGZvciB2aXJ0dWFsIG1hY2hpbmVzLiBJdCBpbnRyb2R1Y2VzIGBtaXJyb3Jfcm9vdF9sZXZlbGAgdG8gZml4IHRoZSByb290IGxldmVsIGZvciBWTXMgd2l0aCBtaXJyb3Igcm9vdHMgKGxpa2UgVERYIFZNcykgYW5kIHJlbW92ZXMgYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgS1ZNIE1NVSBwYWdlIHRhYmxlIHNldHVwIGFuZCBURFggaW5pdGlhbGl6YXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGNhbiBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA0OjQ3Ljg4NjU4MTI0M1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEwNDkzNDE2OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowNDo0Ny44ODcxODA3NDNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDEwNDg3MzY0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBob3cgdGhlIHJvb3QgcGFnZSB0YWJsZSBsZXZlbCBpcyBkZXRlcm1pbmVkIGZvciBURFggVk1zIGluIEtWTSBieSBpbnRyb2R1Y2luZyBhIG5ldyBmaWVsZCBgbWlycm9yX3Jvb3RfbGV2ZWxgIGluIGBzdHJ1Y3Qga3ZtX2FyY2hgLiBUaGlzIGZpZWxkIGlzIHNldCBkdXJpbmcgVERYIGluaXRpYWxpemF0aW9uLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIGFwcHJvYWNoIG9mIHF1ZXJ5aW5nIENQVUlEIGZvciB0aGUgbWF4aW11bSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzLiBTaW5jZSBgc3RydWN0IGt2bWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrdnphbGxvYygpYCAod2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5KSwgdGhlIG5ldyBgbWlycm9yX3Jvb3RfbGV2ZWxgIGZpZWxkIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGFueSBjb21wbGV4IGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBpbmNvcnJlY3QgcGFnZSB0YWJsZSBsZXZlbHMpIHdvdWxkIHJlc3VsdCBpbiBwYWdlIGZhdWx0cywgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDZkYjE5YzI0OWUwNjAyZWM1MmJjM2NlNTA4NDc1MTNhNDVlZjUyOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDIzOjAyOjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDI4Mzg0NzYxOWZmODguLmIyYTc0YzY5Y2M0YTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMTQwNiw2ICsxNDA2LDcgQEAgc3RydWN0IGt2bV9hcmNoIHtcbiBcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBzcGxpdF9kZXNjX2NhY2hlO1xuIFxuIFx0Z2ZuX3QgZ2ZuX2RpcmVjdF9iaXRzO1xuK1x0aW50IG1pcnJvcl9yb290X2xldmVsO1xuIFxuIFx0LypcbiBcdCAqIFNpemUgb2YgdGhlIENQVSdzIGRpcnR5IGxvZyBidWZmZXIsIGkuZS4gVk1YJ3MgUE1MIGJ1ZmZlci4gQSBaZXJvXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmMgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuaW5kZXggZGRiMDIyY2IyMDNhMi4uMzRjNjA5YTYwZWVmZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9jcHVpZC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuQEAgLTQ4MywyMCArNDgzLDYgQEAgaW50IGNwdWlkX3F1ZXJ5X21heHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIDM2O1xuIH1cbiBcbi1pbnQgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqYmVzdDtcbi1cbi1cdGJlc3QgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDAwKTtcbi1cdGlmICghYmVzdCB8fCBiZXN0LVx1MDAzZWVheCBcdTAwM2MgMHg4MDAwMDAwOClcbi1cdFx0Z290byBub3RfZm91bmQ7XG4tXHRiZXN0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAwOCk7XG4tXHRpZiAoYmVzdClcbi1cdFx0cmV0dXJuIChiZXN0LVx1MDAzZWVheCBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweGZmO1xuLW5vdF9mb3VuZDpcbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIFRoaXMgXCJyYXdcIiB2ZXJzaW9uIHJldHVybnMgdGhlIHJlc2VydmVkIEdQQSBiaXRzIHdpdGhvdXQgYW55IGFkanVzdG1lbnRzIGZvclxuICAqIGVuY3J5cHRpb24gdGVjaG5vbG9naWVzIHRoYXQgdXN1cnAgYml0cy4gIFRoZSByYXcgbWFzayBzaG91bGQgYmUgdXNlZCBpZiBhbmRcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vY3B1aWQuaCBiL2FyY2gveDg2L2t2bS9jcHVpZC5oXG5pbmRleCA4ZDg2M2Y0NTU4NWRlLi40NmJmZTg2OTllNjdmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmhcbisrKyBiL2FyY2gveDg2L2t2bS9jcHVpZC5oXG5AQCAtNjgsNyArNjgsNiBAQCB2b2lkIF9faW5pdCBrdm1faW5pdF94c3RhdGVfc2l6ZXModm9pZCk7XG4gdTMyIHhzdGF0ZV9yZXF1aXJlZF9zaXplKHU2NCB4c3RhdGVfYnYsIGJvb2wgY29tcGFjdGVkKTtcbiBcbiBpbnQgY3B1aWRfcXVlcnlfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLWludCBjcHVpZF9xdWVyeV9tYXhndWVzdHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB1NjQga3ZtX3ZjcHVfcmVzZXJ2ZWRfZ3BhX2JpdHNfcmF3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gc3RhdGljIGlubGluZSBpbnQgY3B1aWRfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS5oIGIvYXJjaC94ODYva3ZtL21tdS5oXG5pbmRleCAyYWU3ZjllZDRjZjg2Li5jYzM3ZTIxMDc4N2M4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11LmhcbkBAIC0zODksNiArMzg5LDE1IEBAIHN0YXRpYyBpbmxpbmUgZ3BhX3Qga3ZtX3RyYW5zbGF0ZV9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdFx0XHRcdCAgICAgZXhjZXB0aW9uLCBwdGVfYWNjZXNzKTtcbiB9XG4gXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGt2bV9tbXVfc2V0X21pcnJvcl9yb290X2xldmVsKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHRcdFx0XHRcdCAgaW50IGxldmVsKVxuK3tcbitcdEJVSUxEX0JVR19PTihsZXZlbCAhPSA0IFx1MDAyNlx1MDAyNiBsZXZlbCAhPSA1KTtcbitcbitcdGt2bS1cdTAwM2VhcmNoLm1pcnJvcl9yb290X2xldmVsID0gbGV2ZWw7XG4rXHRrdm0tXHUwMDNlYXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBncGFfdG9fZ2ZuKEJJVF9VTEwobGV2ZWwgPT0gNCA/IDQ3IDogNTEpKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbWlycm9yZWRfdGRwKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuaW5kZXggYzUxOWU4ZThkNjQ2Zi4uYTUxYTg1MmMxYmVjMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC01OTI4LDE5ICs1OTI4LDE5IEBAIHZvaWQgX19rdm1fbW11X3JlZnJlc2hfcGFzc3Rocm91Z2hfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXG4gc3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRpbnQgbWF4cGE7XG4tXG4tXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKVxuLVx0XHRtYXhwYSA9IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcih2Y3B1KTtcbi1cdGVsc2Vcbi1cdFx0bWF4cGEgPSBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpO1xuLVxuIFx0LyogdGRwX3Jvb3RfbGV2ZWwgaXMgYXJjaGl0ZWN0dXJlIGZvcmNlZCBsZXZlbCwgdXNlIGl0IGlmIG5vbnplcm8gKi9cbiBcdGlmICh0ZHBfcm9vdF9sZXZlbClcbiBcdFx0cmV0dXJuIHRkcF9yb290X2xldmVsO1xuIFxuK1x0LypcbitcdCAqIElmIHRoZSBWTSBoYXMgbWlycm9yIHJvb3RzLCB0aGVuIHRoZSByb290IGxldmVsIGlzIGZpeGVkIGFzIHRoZSBnZm5cbitcdCAqIHVzZWQgdG8gc2VsZWN0IGJldHdlZW4gdGhlIG5vcm1hbCBhbmQgbWlycm9yIHJvb3QgbXVzdCBiZSBjb3ZlcmVkLlxuK1x0ICovXG4rXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbClcbitcdFx0cmV0dXJuIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubWlycm9yX3Jvb3RfbGV2ZWw7XG4rXG4gXHQvKiBVc2UgNS1sZXZlbCBURFAgaWYgYW5kIG9ubHkgaWYgaXQncyB1c2VmdWwvbmVjZXNzYXJ5LiAqL1xuLVx0aWYgKG1heF90ZHBfbGV2ZWwgPT0gNSBcdTAwMjZcdTAwMjYgbWF4cGEgXHUwMDNjPSA0OClcbitcdGlmIChtYXhfdGRwX2xldmVsID09IDUgXHUwMDI2XHUwMDI2IGNwdWlkX21heHBoeWFkZHIodmNwdSkgXHUwMDNjPSA0OClcbiBcdFx0cmV0dXJuIDQ7XG4gXG4gXHRyZXR1cm4gbWF4X3RkcF9sZXZlbDtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuaW5kZXggYjI3MmMyMDU4NmE3NC4uNmQ4ZTliZWZkOWU2NSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbkBAIC01Niw5ICs1Niw2IEBAXG4gYm9vbCBlbmFibGVfdGR4IF9fcm9fYWZ0ZXJfaW5pdDtcbiBtb2R1bGVfcGFyYW1fbmFtZWQodGR4LCBlbmFibGVfdGR4LCBib29sLCAwNDQ0KTtcbiBcbi0jZGVmaW5lIFREWF9TSEFSRURfQklUX1BXTF81IGdwYV90b19nZm4oQklUX1VMTCg1MSkpXG4tI2RlZmluZSBURFhfU0hBUkVEX0JJVF9QV0xfNCBncGFfdG9fZ2ZuKEJJVF9VTEwoNDcpKVxuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICp0ZHhfc3lzaW5mbztcbiBcbiB2b2lkIHRkaF92cF9yZF9mYWlsZWQoc3RydWN0IHZjcHVfdGR4ICp0ZHgsIGNoYXIgKnVjbGFzcywgdTMyIGZpZWxkLCB1NjQgZXJyKVxuQEAgLTE2MDksMTAgKzE2MDYsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV90ZHZtY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gdm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpXG4ge1xuLVx0dTY0IHNoYXJlZF9iaXQgPSAocGdkX2xldmVsID09IDUpID8gVERYX1NIQVJFRF9CSVRfUFdMXzUgOlxuLVx0XHRcdCAgVERYX1NIQVJFRF9CSVRfUFdMXzQ7XG4tXG4tXHRpZiAoS1ZNX0JVR19PTihzaGFyZWRfYml0ICE9IGt2bV9nZm5fZGlyZWN0X2JpdHModmNwdS1cdTAwM2Vrdm0pLCB2Y3B1LVx1MDAzZWt2bSkpXG4rXHRpZiAoS1ZNX0JVR19PTihwZ2RfbGV2ZWwgIT0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbCwgdmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHR0ZF92bWNzX3dyaXRlNjQodG9fdGR4KHZjcHUpLCBTSEFSRURfRVBUX1BPSU5URVIsIHJvb3RfaHBhKTtcbkBAIC0yODIzLDkgKzI4MTcsOSBAQCBzdGF0aWMgaW50IHRkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXG4gXHRrdm1fdGR4LVx1MDAzZXhmYW0gPSB0ZF9wYXJhbXMtXHUwMDNleGZhbTtcbiBcbiBcdGlmICh0ZF9wYXJhbXMtXHUwMDNlY29uZmlnX2ZsYWdzIFx1MDAyNiBURFhfQ09ORklHX0ZMQUdTX01BWF9HUEFXKVxuLVx0XHRrdm0tXHUwMDNlYXJjaC5nZm5fZGlyZWN0X2JpdHMgPSBURFhfU0hBUkVEX0JJVF9QV0xfNTtcbitcdFx0a3ZtX21tdV9zZXRfbWlycm9yX3Jvb3RfbGV2ZWwoa3ZtLCA1KTtcbiBcdGVsc2Vcbi1cdFx0a3ZtLVx1MDAzZWFyY2guZ2ZuX2RpcmVjdF9iaXRzID0gVERYX1NIQVJFRF9CSVRfUFdMXzQ7XG4rXHRcdGt2bV9tbXVfc2V0X21pcnJvcl9yb290X2xldmVsKGt2bSwgNCk7XG4gXG4gXHRrdm1fdGR4LVx1MDAzZXN0YXRlID0gVERfU1RBVEVfSU5JVElBTElaRUQ7XG4gb3V0OlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDQ6NDcuODg3MTgxNjQzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3OTAxNTIwNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBURFggS1ZNIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGRpZ2dpbmcgaW50byB0aGUgS1ZNIGNvZGUgZm9yIFREWCDigJMgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMuIE15IGluaXRpYWwgcmVhZCBzYXlzIGl0J3MgZm9jdXNlZCBvbiBob3cgbWlycm9yZWQgVHdvLURpbWVuc2lvbmFsIFBhZ2luZyAoVERQKSBpcyBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYG1pcnJvcl9yb290X2xldmVsYCBpcyBiZWluZyBpbnRyb2R1Y2VkIHdpdGhpbiB0aGUgYHN0cnVjdCBrdm1fYXJjaGAgdG8gY29udHJvbCB0aGUgcm9vdCBsZXZlbCBmb3IgdGhpcyBtaXJyb3JpbmcuIEludGVyZXN0aW5nLiBUaGUgcGF0Y2gncyByZXBsYWNpbmcgb2YgYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAgd2l0aCBgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5taXJyb3Jfcm9vdF9sZXZlbGAgaW4gYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAgaXMgYSBwcmV0dHkgZGlyZWN0IGNvbnNlcXVlbmNlIG9mIHRoaXMuIEl0J3MgZWZmZWN0aXZlbHkgcmVtb3ZpbmcgYSBDUFVJRCBxdWVyeSBpbiBmYXZvciBvZiBhIHZhbHVlIHN0b3JlZCBpbiB0aGUgS1ZNIHN0cnVjdHVyZS4gUmVwbGFjaW5nIHRob3NlIGhhcmRjb2RlZCBgVERYX1NIQVJFRF9CSVRgIGNvbnN0YW50cyB3aXRoIGEgYGt2bV9tbXVfc2V0X21pcnJvcl9yb290X2xldmVsYCBjYWxsIGFsc28gc2ltcGxpZmllcyB0aGluZ3MuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIG1lbW9yeSBpbml0aWFsaXphdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgd2UncmUgbm90IGludHJvZHVjaW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuIFRoZSBjcnVjaWFsIHBvaW50IGlzIGBtaXJyb3Jfcm9vdF9sZXZlbGAgaXMgYWRkZWQgdG8gYHN0cnVjdCBrdm1fYXJjaGAuIElmIGBzdHJ1Y3Qga3ZtX2FyY2hgIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qga3ZtYCwgd2hpY2ggaXQgaXMsIHRoZW4gd2hlcmUgaXMgdGhlIGBzdHJ1Y3Qga3ZtYCBhbGxvY2F0ZWQ/IElzIGl0IGluaXRpYWxpemVkIGNvcnJlY3RseT8gQWgsIHllcywgYHN0cnVjdCBrdm1gIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2NgIG9yIGB2bWFsbG9jYCB3aXRoIHplcm9pbmcgZHVyaW5nIGBrdm1fY3JlYXRlX3ZtYC4gSSBoYXZlIHRvIHZlcmlmeSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGt2bV9jcmVhdGVfdm1gIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE1NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA0OjUyLjY3NzMzNjUzOVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0NDcwMzM4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJremFsbG9jLipzaXplb2YuKmt2bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA0OjUyLjg5MTgxMzkxN1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTM3ODUzODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgS1ZNIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gdGhlIHRyb3VibGVzaG9vdGluZyBoYXMgbGVkIHVzIHRvIHN1c3BlY3QgYW4gaXNzdWUgZHVyaW5nIHRoZSBpbml0aWFsIHNldHVwIG9mIHRoZSBLVk0gaW5mcmFzdHJ1Y3R1cmUuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgS1ZNIGFsbG9jYXRpb24gYW5kIFZNIGNyZWF0aW9uIHJvdXRpbmVzLiBJIG5lZWQgdG8gemVybyBpbiBvbiBlaXRoZXIgYGt2bV9hbGxvY2Agb3IgYGt2bV9jcmVhdGVfdm1gLiBUaGVzZSBhcmUgdGhlIGNyaXRpY2FsIHBvaW50cyB3aGVyZSB0aGUgZm91bmRhdGlvbiBmb3IgYSBuZXcgdmlydHVhbCBtYWNoaW5lIGlzIGxhaWQsIGFuZCB3aGVyZSB0aGluZ3MgY291bGQgYmUgZ29pbmcgc2lkZXdheXMuIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgY29kZSBwYXRocywgZXJyb3IgY2hlY2tpbmcsIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uIHdpdGhpbiB0aG9zZSBmdW5jdGlvbnMuIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG1lbW9yeSBsZWFrcywgb3IgcGVyaGFwcyBpbmNvcnJlY3QgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIHRoYXQgYXJlIG1hbmlmZXN0aW5nIHRoZW1zZWx2ZXMgYXQgdGhpcyBzdGFnZS4gSSdsbCBmb2N1cyBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGh5cGVydmlzb3LigJlzIGludGVybmFsIHN0cnVjdHVyZXMgYW5kIHdpdGggdGhlIGd1ZXN0IG1lbW9yeSBhbmQgZGV2aWNlIGFzc2lnbm1lbnQuIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBLVk0gaW5pdGlhbGl6YXRpb24gc28gYW55IHByb2JsZW0gaGVyZSBjYW4gYmUgY3JpdGljYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3OTgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowNDo1Ni40Mjk2NzA4ODVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODAwMzMwNDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jLipzaXplb2YuKmt2bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA0OjU3LjcwOTcxMjY1NFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjgzNTEyMjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYGt2bV9hcmNoX2FsbG9jX3ZtYCoqXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgdXAgYGt2bV9hcmNoX2FsbG9jX3ZtYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBhcmNoaXRlY3R1cmFsIGFsbG9jYXRpb24gcHJvY2VzcyB3aXRoaW4gS1ZNLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgbWVtb3J5IGFsbG9jYXRpb24gaXMgaGFuZGxlZCBhdCB0aGUgVk0gbGV2ZWwuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCBpZiB0aGVyZSBhcmUgYW55IHJlY2VudCBjaGFuZ2VzIG9yIGlmIHRoZXJlIGFyZSBhbnkgcG9pbnRzIHRoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGluIG1vcmUgZGV0YWlsLCBwZXJoYXBzIGZvciBkZWJ1Z2dpbmcgb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbnMuIElzIHRoZXJlIGFueXRoaW5nIHNwZWNpZmljIHRoaXMgZnVuY3Rpb24gZG9lcyByZWdhcmRpbmcgYWRkcmVzc2luZyBtb2RlcywgcGFnZSB0YWJsZSBzZXR1cCwgb3IgbWF5YmUgdGhlIGFsbG9jYXRpb24gb2YgY29udHJvbCBzdHJ1Y3R1cmVzIHNwZWNpZmljIHRvIHRoZSBjaG9zZW4gYXJjaGl0ZWN0dXJlPyBJIGtub3cgdGhhdCBpdCdzIGNydWNpYWwgZm9yIHRoZSBpbml0aWFsIHNldHVwLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDc0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDU6MDAuOTkzMjI3MDk0WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzE0ODcwOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2FyY2hfYWxsb2Nfdm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDU6MDEuMDgwMzgyMjQzWiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODgwODg1MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gS1ZNIFZNIENyZWF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgaG9uZSBpbiBvbiBga3ZtX2NyZWF0ZV92bWAuIFRoaXMgaXMgdGhlIGNvcmUgZnVuY3Rpb24gd2hlcmUgYSBLVk0gdmlydHVhbCBtYWNoaW5lIGlzIGJyb3VnaHQgaW50byBleGlzdGVuY2UuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGluaXRpYWxpemF0aW9uIGZsb3csIGVzcGVjaWFsbHkgbm93IHdpdGggdGhlc2UgbmV3IGFyY2hpdGVjdHVyYWwgY29uc2lkZXJhdGlvbnMuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgc3RlcHMgaW4gaGVyZTogcmVzb3VyY2UgYWxsb2NhdGlvbiwgbWVtb3J5IG1hbmFnZW1lbnQgc2V0dXAsIHZDUFUgY3JlYXRpb24sIGFuZCB0aGUgbGlrZS4gSXQgd2lsbCBiZSBpbnRlcmVzdGluZyB0byBzZWUgaG93IHRoZXkndmUgaGFuZGxlZCB0aGUgbGF0ZXN0IHNlY3VyaXR5IG1pdGlnYXRpb25zIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucy4gSSdtIGtlZW4gdG8gc3BvdCBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHdoZXJlIHRoZXkgbWlnaHQgaGF2ZSBpbXBsZW1lbnRlZCBjbGV2ZXIgdHJpY2tzIHRvIGVuaGFuY2UgVk0gcGVyZm9ybWFuY2Ugb3IgaXNvbGF0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXTigJlzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzE3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDU6MDQuMjY4NDczODQ0WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjU0NjAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fY3JlYXRlX3ZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jPTk4MD1zdGF0aWMgdm9pZCBrdm1fZGVzdHJveV92bV9kZWJ1Z2ZzKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtOTk3LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6OTk4OnN0YXRpYyBpbnQga3ZtX2NyZWF0ZV92bV9kZWJ1Z2ZzKHN0cnVjdCBrdm0gKmt2bSwgY29uc3QgY2hhciAqZmRuYW1lKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtOTk5LXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MTA5Nz1zdGF0aWMgdm9pZCBrdm1fZGlzYWJsZV92aXJ0dWFsaXphdGlvbih2b2lkKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTEwOTgtXFxudmlydC9rdm0va3ZtX21haW4uYzoxMDk5OnN0YXRpYyBzdHJ1Y3Qga3ZtICprdm1fY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSwgY29uc3QgY2hhciAqZmRuYW1lKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTEwMC17XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExMzItXFx0ICogRm9yY2Ugc3Vic2VxdWVudCBkZWJ1Z2ZzIGZpbGUgY3JlYXRpb25zIHRvIGZhaWwgaWYgdGhlIFZNIGRpcmVjdG9yeVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTEzMzpcXHQgKiBpcyBub3QgY3JlYXRlZCAoYnkga3ZtX2NyZWF0ZV92bV9kZWJ1Z2ZzKCkpLlxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTEzNC1cXHQgKi9cXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTE5Ni1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjExOTc6XFx0ciA9IGt2bV9jcmVhdGVfdm1fZGVidWdmcyhrdm0sIGZkbmFtZSk7XFxudmlydC9rdm0va3ZtX21haW4uYy0xMTk4LVxcdGlmIChyKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz01NDk5PXN0YXRpYyBpbnQga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy01NTExLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTUxMjpcXHRrdm0gPSBrdm1fY3JlYXRlX3ZtKHR5cGUsIGZkbmFtZSk7XFxudmlydC9rdm0va3ZtX21haW4uYy01NTEzLVxcdGlmIChJU19FUlIoa3ZtKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowNTowNC4zMjEwMjkzMTRaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYyNjkxMzQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGBrdm1gIGlzIGFsbG9jYXRlZCBpbiBga3ZtX2NyZWF0ZV92bWAsIGFzIEkndmUgYmVlbiBtdWxsaW5nIGl0IG92ZXI6XG5cbioqRGlnZ2luZyBpbnRvIGt2bV9jcmVhdGVfdm0gYW5kIGt2bSBBbGxvY2F0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgdHJhY2UgdGhpcy4gV2hlbiBga3ZtX2NyZWF0ZV92bWAgZ2V0cyBjYWxsZWQsIHRoZSBtYWluIGdvYWwgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBLVk0gaW5zdGFuY2UuIFNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBga3ZtYCBzdHJ1Y3R1cmUgaXRzZWxmLiBJdCdzIHRoZSBjZW50cmFsIGRhdGEgc3RydWN0dXJlIHJlcHJlc2VudGluZyBvdXIgdmlydHVhbCBtYWNoaW5lIGNvbnRleHQgd2l0aGluIHRoZSBrZXJuZWwuIEkgZXhwZWN0IGl0IHRvIGludm9sdmUgc29tZSBtZW1vcnkgYWxsb2NhdGlvbiwgcHJvYmFibHkgdXNpbmcgYGttYWxsb2NgIG9yIHNpbWlsYXIsIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIHZlcnNpb24gYW5kIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBJJ20gYXNzdW1pbmcgdGhhdCB0aGUga2VybmVsIG5lZWRzIHRvIHN0b3JlIHNwZWNpZmljIHZtIGluZm9ybWF0aW9uLCBzdWNoIGFzIFZNIElEcywgc3RhdGUsIGFuZCBvdGhlciBWTS1yZWxhdGVkIHNldHRpbmdzLCBzbyBhIHN0cnVjdHVyZSBtYWtlcyBwZXJmZWN0IHNlbnNlIGhlcmUsIGV2ZW4gaWYgaXQgbWlnaHQgYmUgYW4gb3ZlcnNpbXBsaWZpY2F0aW9uLiBJJ2QgbmVlZCB0byBjb25zaWRlciBpZiB0aGVyZSBpcyBtb3JlIGhhcHBlbmluZyB0aGFuIGp1c3QgbWVtb3J5IGJlaW5nIGFsbG9jYXRlZCBoZXJlLiBQZXJoYXBzIHNvbWUgc2V0dXAgb2YgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBtYXliZSBpbml0aWFsaXphdGlvbiBvZiBzb21lIG11dGV4ZXMgb3IgbG9ja3MgdG8gcHJldmVudCBjb25jdXJyZW50IGFjY2VzcyBpc3N1ZXMsIG9yIGV2ZW4gc29tZSBjYWxscyB0byBob29rIGludG8gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQuIFRoZXJlJ3MgcHJvYmFibHkgYW4gZXJyb3IgaGFuZGxpbmcgY29tcG9uZW50IGludm9sdmVkIGFzIHdlbGwsIHdoZXJlIGlmIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBmYWlscywgdGhlIGZ1bmN0aW9uIG5lZWRzIHRvIHByb3Blcmx5IHVud2luZCBhbmQgcmV0dXJuIGFuIGVycm9yIGNvZGUuIEknbSBrZWVuIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9uIGFib3V0IHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBhbGxvY2F0aW9uIGRldGFpbHMuIEFsc28sIGhvdyBkb2VzIHRoaXMgcHJvY2VzcyBpbnRlcmFjdCB3aXRoIHRoZSBLVk0gZHJpdmVyJ3Mgb3ZlcmFsbCByZXNvdXJjZSBtYW5hZ2VtZW50PyBEb2VzIGl0IGFjY291bnQgZm9yIHBvdGVudGlhbCByZXNvdXJjZSBleGhhdXN0aW9uIGR1cmluZyB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzPyBVbHRpbWF0ZWx5LCBJJ20gdGhpbmtpbmcgb2YgdGhlIGxpZmVjeWNsZTogYWxsb2NhdGlvbiwgaW5pdGlhbGl6YXRpb24sIHVzZSwgYW5kIGRlYWxsb2NhdGlvbiBvZiB0aGlzIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEwMCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA1OjA4Ljk0Nzk0NjE3MVoiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDk5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDk5OlxcdHN0YXRpYyBzdHJ1Y3Qga3ZtICprdm1fY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSwgY29uc3QgY2hhciAqZmRuYW1lKVxcbjExMDA6XFx0e1xcbjExMDE6XFx0XFx0c3RydWN0IGt2bSAqa3ZtID0ga3ZtX2FyY2hfYWxsb2Nfdm0oKTtcXG4xMTAyOlxcdFxcdHN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzO1xcbjExMDM6XFx0XFx0aW50IHIsIGksIGo7XFxuMTEwNDpcXHRcXG4xMTA1OlxcdFxcdGlmICgha3ZtKVxcbjExMDY6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuMTEwNzpcXHRcXG4xMTA4OlxcdFxcdEtWTV9NTVVfTE9DS19JTklUKGt2bSk7XFxuMTEwOTpcXHRcXHRtbWdyYWIoY3VycmVudC1cXHUwMDNlbW0pO1xcbjExMTA6XFx0XFx0a3ZtLVxcdTAwM2VtbSA9IGN1cnJlbnQtXFx1MDAzZW1tO1xcbjExMTE6XFx0XFx0a3ZtX2V2ZW50ZmRfaW5pdChrdm0pO1xcbjExMTI6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4xMTEzOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlaXJxX2xvY2spO1xcbjExMTQ6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4xMTE1OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcXG4xMTE2OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZrdm0tXFx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XFxuMTExNzpcXHRcXHRyY3V3YWl0X2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlbW5fbWVtc2xvdHNfdXBkYXRlX3JjdXdhaXQpO1xcbjExMTg6XFx0XFx0eGFfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2V2Y3B1X2FycmF5KTtcXG4xMTE5OlxcdCNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG4xMTIwOlxcdFxcdHhhX2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlbWVtX2F0dHJfYXJyYXkpO1xcbjExMjE6XFx0I2VuZGlmXFxuMTEyMjpcXHRcXG4xMTIzOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZrdm0tXFx1MDAzZWdwY19saXN0KTtcXG4xMTI0OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZrdm0tXFx1MDAzZWdwY19sb2NrKTtcXG4xMTI1OlxcdFxcbjExMjY6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmt2bS1cXHUwMDNlZGV2aWNlcyk7XFxuMTEyNzpcXHRcXHRrdm0tXFx1MDAzZW1heF92Y3B1cyA9IEtWTV9NQVhfVkNQVVM7XFxuMTEyODpcXHRcXG4xMTI5OlxcdFxcdEJVSUxEX0JVR19PTihLVk1fTUVNX1NMT1RTX05VTSBcXHUwMDNlIFNIUlRfTUFYKTtcXG4xMTMwOlxcdFxcbjExMzE6XFx0XFx0LypcXG4xMTMyOlxcdFxcdCAqIEZvcmNlIHN1YnNlcXVlbnQgZGVidWdmcyBmaWxlIGNyZWF0aW9ucyB0byBmYWlsIGlmIHRoZSBWTSBkaXJlY3RvcnlcXG4xMTMzOlxcdFxcdCAqIGlzIG5vdCBjcmVhdGVkIChieSBrdm1fY3JlYXRlX3ZtX2RlYnVnZnMoKSkuXFxuMTEzNDpcXHRcXHQgKi9cXG4xMTM1OlxcdFxcdGt2bS1cXHUwMDNlZGVidWdmc19kZW50cnkgPSBFUlJfUFRSKC1FTk9FTlQpO1xcbjExMzY6XFx0XFxuMTEzNzpcXHRcXHRzbnByaW50Zihrdm0tXFx1MDAzZXN0YXRzX2lkLCBzaXplb2Yoa3ZtLVxcdTAwM2VzdGF0c19pZCksIFxcXCJrdm0tJWRcXFwiLFxcbjExMzg6XFx0XFx0XFx0IHRhc2tfcGlkX25yKGN1cnJlbnQpKTtcXG4xMTM5OlxcdFxcbjExNDA6XFx0XFx0ciA9IC1FTk9NRU07XFxuMTE0MTpcXHRcXHRpZiAoaW5pdF9zcmN1X3N0cnVjdChcXHUwMDI2a3ZtLVxcdTAwM2VzcmN1KSlcXG4xMTQyOlxcdFxcdFxcdGdvdG8gb3V0X2Vycl9ub19zcmN1O1xcbjExNDM6XFx0XFx0aWYgKGluaXRfc3JjdV9zdHJ1Y3QoXFx1MDAyNmt2bS1cXHUwMDNlaXJxX3NyY3UpKVxcbjExNDQ6XFx0XFx0XFx0Z290byBvdXRfZXJyX25vX2lycV9zcmN1O1xcbjExNDU6XFx0XFxuMTE0NjpcXHRcXHRyID0ga3ZtX2luaXRfaXJxX3JvdXRpbmcoa3ZtKTtcXG4xMTQ3OlxcdFxcdGlmIChyKVxcbjExNDg6XFx0XFx0XFx0Z290byBvdXRfZXJyX25vX2lycV9yb3V0aW5nO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowNTowOC45NDgzOTk1NzFaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzMjQyMjY5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipIdW50aW5nIERvd24gYGt2bV9hcmNoX2FsbG9jX3ZtYCBpbiB0aGUgeDg2IExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBga3ZtX2FyY2hfYWxsb2Nfdm1gIHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gSSdtIHByb2JhYmx5IGdvaW5nIHRvIHN0YXJ0IGJ5IHRoaW5raW5nIGFib3V0IHRoZSBLVk0ga2VybmVsIG1vZHVsZSBzdHJ1Y3R1cmUgZmlyc3QuIEkga25vdyB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBWTSBhbGxvY2F0aW9uIGxvZ2ljIGxpdmVzLCBzbyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHJlbGV2YW50IHNvdXJjZSBmaWxlcyB3aXRoaW4gdGhlIEtWTSBkaXJlY3Rvcnkgc3RydWN0dXJlLCBtYXliZSBzb21ldGhpbmcgaW4gYGFyY2gveDg2L2t2bWAgc3BlY2lmaWNhbGx5LlxuXG5Gcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgd2hhdCB0aGlzIGZ1bmN0aW9uICpkb2VzKi4gYGFsbG9jYCBpbXBsaWVzIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgYHZtYCBoaW50cyBhdCBhIHZpcnR1YWwgbWFjaGluZSBjb250ZXh0LiBTbywgSSBleHBlY3QgaXQncyBoYW5kbGluZyB0aGUgYWxsb2NhdGlvbiBvZiBkYXRhIHN0cnVjdHVyZXMgcmVsYXRlZCB0byB0aGUgZ3Vlc3QgdmlydHVhbCBtYWNoaW5lIHN0YXRlIOKAkyB0aGluZ3MgbGlrZSBWTUNTIHN0cnVjdHVyZXMsIHNoYWRvdyBwYWdlIHRhYmxlcywgYW5kIG90aGVyIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzdGF0ZS4gSXQnbGwgcHJvYmFibHkgYmUgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyBhIGxvdCBvZiB4ODYtc3BlY2lmaWMgVk0gZGF0YS5cblxuSSdsbCBwcm9iYWJseSB1c2UgYGdyZXBgIG9yIGBjc2NvcGVgIHRvIHNlYXJjaCB0aHJvdWdoIHRoZSBrZXJuZWwgc291cmNlIHRyZWUgZm9yIHRoZSBmdW5jdGlvbiBuYW1lIGRpcmVjdGx5LCB0aG91Z2ggaXQncyBwb3NzaWJsZSB0aGlzIGlzbid0IHRoZSBmaW5hbCBmdW5jdGlvbiBuYW1lLiBJdCBjb3VsZCBhbHNvIGJlIGNhbGxlZCBhcyBwYXJ0IG9mIGEgbWFjcm8gb3IgYW5vdGhlciBhYnN0cmFjdGlvbiBsYXllciBzbyBJIG1pZ2h0IG5lZWQgdG8gbG9vayBmb3IgcmVsYXRlZCBjb25jZXB0cy4gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0byBuYXZpZ2F0ZSB0aGUgbmVzdGVkIGZ1bmN0aW9uIGNhbGxzLlxuXG5JJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IHRoZSBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCB1bml0cyAoTU1VcyksIHBhZ2luZyBzdHJ1Y3R1cmVzIChFUFQsIGV0Yy4pLCBhbmQgYW55IENQVUlELXJlbGF0ZWQgY2hlY2tzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIGZlYXR1cmUgZGV0ZWN0aW9uIG9yIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQuIFVuZGVyc3RhbmRpbmcgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgcGh5c2ljYWwgbWVtb3J5IGxheW91dCwgYW5kIHRoZSBndWVzdCdzIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB3aWxsIGJlIGtleS4gVGhpcyBpcyBhIHByZXR0eSBjcml0aWNhbCBwYXJ0IG9mIHRoZSB3aG9sZSB2aXJ0dWFsaXphdGlvbiBzZXR1cCwgc28gaXQncyBsaWtlbHkgdG8gYmUgZmFpcmx5IGNvbXBsZXguIEkgd2lsbCBmb2N1cyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIHVzZWQsIGFuZCBhbnkgeDg2LXNwZWNpZmljIG9wdGltaXphdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA1OjEzLjQ4MDgyNDQyWiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjM2MDA5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2FyY2hfYWxsb2Nfdm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MTc5NT1leHRlcm4gc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyBrdm1fbmVzdGVkX29wcyBfX3JlYWRfbW9zdGx5O1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xODEzLSNkZWZpbmUgX19LVk1fSEFWRV9BUkNIX1ZNX0FMTE9DXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoxODE0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZClcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTE4MTUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowNToxMy42MDQ0MzIyNDlaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4MjQxOTc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqUGVlcmluZyBpbnRvIHRoZSB4ODYgS1ZNIEFyY2hpdGVjdHVyZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgcmlnaHQgaW4uIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgb2YgaG93IEtWTSBhbGxvY2F0ZXMgdmlydHVhbCBtYWNoaW5lcyBpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gSSdtIHNwZWNpZmljYWxseSBkcmF3biB0byB0aGUgZnVuY3Rpb24gYGt2bV9hcmNoX2FsbG9jX3ZtYCwgYW5kIEknbSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBkZWZpbml0aW9uIGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oYC4gVGhpcyBpcyB0aGUgbG93LWxldmVsLCBjcml0aWNhbCBzdHVmZi4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHJlc291cmNlcyBhcmUgc2V0IHVwIGZvciBhIG5ldyBWTS4gV2hhdCBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZD8gV2hhdCBtZW1vcnkgaXMgcmVzZXJ2ZWQ/IFdoYXQgY3JpdGljYWwgaGFyZHdhcmUgY29tcG9uZW50cyBhcmUgYmVpbmcgY29uZmlndXJlZCwgZnJvbSB0aGUgQ1BVIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCB1bml0cz8gSSdtIGFudGljaXBhdGluZyB0aGF0IHRoaXMgaXMgd2hlcmUgdGhlIGZ1bmRhbWVudGFsIGdyb3VuZHdvcmsgZm9yIGd1ZXN0IGV4ZWN1dGlvbiBvbiB4ODYgaXMgbGFpZCBvdXQuIEknbSBrZWVuIHRvIHNlZSBpZiBJIGNhbiB1bmRlcnN0YW5kIGhvdyBLVk0gZW5zdXJlcyBpc29sYXRpb24gYW5kIHNlY3VyZSByZXNvdXJjZSBzaGFyaW5nIGZvciB0aGUgVk1zIHRoYXQgc2l0IGF0b3AgdGhlIGhhcmR3YXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTg3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjM6MDU6MTYuNjg2ODU0NzZaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTgxNCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTgxNDpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm0gKmt2bV9hcmNoX2FsbG9jX3ZtKHZvaWQpXFxuMTgxNTpcXHR7XFxuMTgxNjpcXHRcXHRyZXR1cm4ga3Z6YWxsb2Moa3ZtX3g4Nl9vcHMudm1fc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4xODE3OlxcdH1cXG4xODE4OlxcdFxcbjE4MTk6XFx0I2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfVk1fRlJFRVxcbjE4MjA6XFx0dm9pZCBrdm1fYXJjaF9mcmVlX3ZtKHN0cnVjdCBrdm0gKmt2bSk7XFxuMTgyMTpcXHRcXG4xODIyOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19IWVBFUlYpXFxuMTgyMzpcXHQjZGVmaW5lIF9fS1ZNX0hBVkVfQVJDSF9GTFVTSF9SRU1PVEVfVExCU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMzowNToxNi42ODcwNDA2NFoiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjI0ODg0NjUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBURFggUm9vdCBMZXZlbCBSZWZhY3RvcioqXG5cbk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIFRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCdzIHJlZmluaW5nIGhvdyBLVk0gZmlndXJlcyBvdXQgdGhlIHJvb3QgcGFnZSB0YWJsZSBsZXZlbCBmb3IgVERYIFZNcy4gSXQncyB1c2luZyBga3Z6YWxsb2NgIHRvIGluaXRpYWxpemUgbWVtb3J5LCBzbyB0aGUgYG1pcnJvcl9yb290X2xldmVsYCBmaWVsZCBpcyBndWFyYW50ZWVkIHRvIHN0YXJ0IGF0IHplcm8uIE5vdywgYGt2bV9tbXVfc2V0X21pcnJvcl9yb290X2xldmVsYCBpcyBzZXR0aW5nIGBtaXJyb3Jfcm9vdF9sZXZlbGAgYW5kIGBnZm5fZGlyZWN0X2JpdHNgIGJhc2VkIG9uIHRoaXMgYGxldmVsYCB2YXJpYWJsZSwgd2hpY2ggaXMgY29taW5nIGZyb20gYHRkeF90ZF9pbml0YC4gSSBzZWUgaXQncyByZXBsYWNpbmcgdGhhdCBgY3B1aWRfcXVlcnlfbWF4Z3Vlc3RwaHlhZGRyYCBmdW5jdGlvbiB3aXRoIHRoZSBgbWlycm9yX3Jvb3RfbGV2ZWxgIHZhbHVlIHdpdGhpbiBga3ZtX21tdV9nZXRfdGRwX2xldmVsYCBhbmQgYHRkeF9sb2FkX21tdV9wZ2RgLlxuXG5TbywgYW0gSSBzZWVpbmcgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaz8gTGV0IG1lIGJyZWFrIGl0IGRvd246IHRoaXMgaXMgcmVmYWN0b3JpbmcgdGhlIHJvb3QgbGV2ZWwgZGV0ZXJtaW5hdGlvbiAqaW50ZXJuYWxseSouIEl0J3Mgbm90IGV4cG9zaW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyBhIGJpZyB3aW4uIEFueSBwb3RlbnRpYWwgaXNzdWVzIHNlZW0gbGlrZSB0aGV5J2QgbWFuaWZlc3QgYXMgbG9naWMgZXJyb3JzIOKAkyBpbmNvcnJlY3QgcGFnZSB0YWJsZSBsZXZlbHMsIGZvciBpbnN0YW5jZS4gQW5kIHRob3NlIHdvdWxkIHRyaWdnZXIgcGFnZSBmYXVsdHMsIGNyYXNoZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIGFyZSBkZXNpZ25lZCB0byBjYXRjaC5cblxuSSdtIGRvdWJsZS1jaGVja2luZyB0aGF0IGBtaXJyb3Jfcm9vdF9sZXZlbGAgaXNuJ3QgdXNlZCB1bmluaXRpYWxpemVkLiBUaGUgYHN0cnVjdCBrdm1gIGlzIHplcm8tYWxsb2NhdGVkLCBzbyBpdCdzIGluaXRpYWxpemVkIHRvIHplcm8uIEFuZCB0aGUgbG9naWMgaW4gYGt2bV9tbXVfZ2V0X3RkcF9sZXZlbGAgZ3JhY2VmdWxseSBoYW5kbGVzIHplcm8gdmFsdWVzIGJ5IGZhbGxpbmcgdGhyb3VnaCB0byB0aGUgbmV4dCBjaGVjaywgc28gdGhhdCdzIGNvbXBsZXRlbHkgc2FmZS5cblxuTm93LCB0aGUgYGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcmAgcmVtb3ZhbDogaXQgd2FzIHVzZWQgdG8gZ2V0IHRoZSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIHNpemUgZnJvbSBDUFVJRCwgbm93IHJlcGxhY2VkIGJ5IGBtaXJyb3Jfcm9vdF9sZXZlbGAuXG5cbkFscmlnaHQsIEkgZG9uJ3Qgc2VlIGFueSByZWFzb24gdG8gcnVuIEtNU0FOIGZvciB0aGlzLiBUaGUgcGF0Y2ggKmlzbid0KiBkb2luZyBhbnkgb2YgdGhlIHRoaW5ncyB0aGF0IHRyaWdnZXIgS01TQU46IG5vIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgbm8gY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJzLCBubyBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQsIGFuZCBubyBuZXcgYm91bmRzIGNoZWNrcyB3aGljaCBtaWdodCBhbGxvdyBhbiBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkhlcmUncyBteSByYXRpb25hbGU6IHRoZSBwYXRjaCBpcyBhbGwgYWJvdXQgcmVmaW5pbmcgaG93IFREWCByb290IHBhZ2UgdGFibGUgbGV2ZWxzIGFyZSBkZXRlcm1pbmVkIHdpdGhpbiBLVk0uIEl0IGludHJvZHVjZXMgYSBuZXcgYG1pcnJvcl9yb290X2xldmVsYCBmaWVsZCB3aXRoaW4gYHN0cnVjdCBrdm1fYXJjaGAsIGFuZCB0aGlzIGZpZWxkIGlzIHNldCBkdXJpbmcgVERYIGluaXRpYWxpemF0aW9uLCByZXBsYWNpbmcgQ1BVSUQtYmFzZWQgY2hlY2tzLiBUaGUgYGt2emFsbG9jYCBlbnN1cmVzIHRoZSBgbWlycm9yX3Jvb3RfbGV2ZWxgIGlzIGluaXRpYWxpemVkLiBOb3RoaW5nIG5ldyBpcyBzZW50IHRvIHVzZXJzcGFjZS4gQW55IGludHJvZHVjZWQgYnVncyB3aWxsIGxpa2VseSBiZSBsb2dpYyBidWdzLCBhbmQgdGhvc2Ugc2hvdWxkIGJlIGNhdWdodCBieSB0aGUgdXN1YWwgc3VzcGVjdHMgbGlrZSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBhcmUgcHJlc2VudC4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDU5LCJPdXRwdXRUb2tlbnMiOjIyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIzOjA1OjI4LjkzNTg5MDYzOVoiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyB0aGUgcm9vdCBwYWdlIHRhYmxlIGxldmVsIGlzIGRldGVybWluZWQgZm9yIFREWCBWTXMgaW4gS1ZNIGJ5IGludHJvZHVjaW5nIGEgbmV3IGZpZWxkIGBtaXJyb3Jfcm9vdF9sZXZlbGAgaW4gYHN0cnVjdCBrdm1fYXJjaGAuIFRoaXMgZmllbGQgaXMgc2V0IGR1cmluZyBURFggaW5pdGlhbGl6YXRpb24sIHJlcGxhY2luZyB0aGUgcHJldmlvdXMgYXBwcm9hY2ggb2YgcXVlcnlpbmcgQ1BVSUQgZm9yIHRoZSBtYXhpbXVtIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MuIFNpbmNlIGBzdHJ1Y3Qga3ZtYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt2emFsbG9jKClgICh3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBtZW1vcnkpLCB0aGUgbmV3IGBtaXJyb3Jfcm9vdF9sZXZlbGAgZmllbGQgaXMgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgYW55IGNvbXBsZXggYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGluY29ycmVjdCBwYWdlIHRhYmxlIGxldmVscykgd291bGQgcmVzdWx0IGluIHBhZ2UgZmF1bHRzLCBjcmFzaGVzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaG93IHRoZSByb290IHBhZ2UgdGFibGUgbGV2ZWwgaXMgZGV0ZXJtaW5lZCBmb3IgVERYIFZNcyBpbiBLVk0gYnkgaW50cm9kdWNpbmcgYSBuZXcgZmllbGQgYG1pcnJvcl9yb290X2xldmVsYCBpbiBgc3RydWN0IGt2bV9hcmNoYC4gVGhpcyBmaWVsZCBpcyBzZXQgZHVyaW5nIFREWCBpbml0aWFsaXphdGlvbiwgcmVwbGFjaW5nIHRoZSBwcmV2aW91cyBhcHByb2FjaCBvZiBxdWVyeWluZyBDUFVJRCBmb3IgdGhlIG1heGltdW0gZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcy4gU2luY2UgYHN0cnVjdCBrdm1gIGlzIGFsbG9jYXRlZCB1c2luZyBga3Z6YWxsb2MoKWAgKHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSksIHRoZSBuZXcgYG1pcnJvcl9yb290X2xldmVsYCBmaWVsZCBpcyBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkIHRvIHplcm8uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBhbnkgY29tcGxleCBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoZS5nLiwgaW5jb3JyZWN0IHBhZ2UgdGFibGUgbGV2ZWxzKSB3b3VsZCByZXN1bHQgaW4gcGFnZSBmYXVsdHMsIGNyYXNoZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowmkdqx[1] Phase: Succeeded StartedAt: 2026-08-14 23:05:40 +0000 UTC FinishedAt: 2026-08-14 23:05:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmkdqx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 23:05:40 +0000 UTC FinishedAt: 2026-08-14 23:05:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmkdqx[2] Phase: Succeeded StartedAt: 2026-08-14 23:05:40 +0000 UTC FinishedAt: 2026-08-15 02:47:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-14 23:05:40 +0000 UTC FinishedAt: 2026-08-15 02:47:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-14 23:05:40 +0000 UTC FinishedAt: 2026-08-14 23:05:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-14 23:05:40 +0000 UTC FinishedAt: 2026-08-14 23:05:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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-workflowmkdqx/series-workflowmkdqx-convert-artifact-3293984885/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-14 23:05:51 +0000 UTC FinishedAt: 2026-08-14 23:24:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-14 23:05:51 +0000 UTC FinishedAt: 2026-08-14 23:24: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:*c5e4f687-fa22-45a8-83dd-ba8f22f9e66b,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-workflowmkdqx/series-workflowmkdqx-convert-artifact-3293984885/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": "0ac702e6-c0cf-4fab-887b-963fe779710c", "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-workflowmkdqx/series-workflowmkdqx-build-action-142185051/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-14 23:05:51 +0000 UTC FinishedAt: 2026-08-14 23:24:48 +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:*c5e4f687-fa22-45a8-83dd-ba8f22f9e66b,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-workflowmkdqx/series-workflowmkdqx-convert-artifact-3293984885/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": "0ac702e6-c0cf-4fab-887b-963fe779710c", "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-workflowmkdqx/series-workflowmkdqx-build-action-142185051/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-14 23:24:58 +0000 UTC FinishedAt: 2026-08-14 23:24:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-14 23:24:58 +0000 UTC FinishedAt: 2026-08-14 23:24:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-14 23:24:58 +0000 UTC FinishedAt: 2026-08-14 23:25:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-14 23:24:58 +0000 UTC FinishedAt: 2026-08-14 23:25:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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-workflowmkdqx/series-workflowmkdqx-convert-artifact-2344191696/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-14 23:25:08 +0000 UTC FinishedAt: 2026-08-14 23:27:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-14 23:25:08 +0000 UTC FinishedAt: 2026-08-14 23:26:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0ac702e6-c0cf-4fab-887b-963fe779710c,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-workflowmkdqx/series-workflowmkdqx-build-action-142185051/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-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-14 23:27:03 +0000 UTC FinishedAt: 2026-08-14 23:27:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-14 23:27:03 +0000 UTC FinishedAt: 2026-08-14 23:27:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-14 23:27:03 +0000 UTC FinishedAt: 2026-08-14 23:44:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-14 23:27:03 +0000 UTC FinishedAt: 2026-08-14 23:44:14 +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:*c5e4f687-fa22-45a8-83dd-ba8f22f9e66b,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-workflowmkdqx/series-workflowmkdqx-convert-artifact-2344191696/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": "cab41a04-3bb5-4310-af45-9bf2b4ebda65", "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-workflowmkdqx/series-workflowmkdqx-build-action-3546170444/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-14 23:27:03 +0000 UTC FinishedAt: 2026-08-14 23:44:04 +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:*c5e4f687-fa22-45a8-83dd-ba8f22f9e66b,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-workflowmkdqx/series-workflowmkdqx-convert-artifact-2344191696/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": "cab41a04-3bb5-4310-af45-9bf2b4ebda65", "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-workflowmkdqx/series-workflowmkdqx-build-action-3546170444/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-14 23:44:14 +0000 UTC FinishedAt: 2026-08-14 23:44:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-14 23:44:14 +0000 UTC FinishedAt: 2026-08-14 23:44:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-14 23:44:14 +0000 UTC FinishedAt: 2026-08-14 23:46:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-14 23:44:14 +0000 UTC FinishedAt: 2026-08-14 23:46:04 +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:*cab41a04-3bb5-4310-af45-9bf2b4ebda65,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-workflowmkdqx/series-workflowmkdqx-build-action-3546170444/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-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-14 23:46:14 +0000 UTC FinishedAt: 2026-08-15 02:47:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-14 23:46:14 +0000 UTC FinishedAt: 2026-08-15 02:47:33 +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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"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:*0ac702e6-c0cf-4fab-887b-963fe779710c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cab41a04-3bb5-4310-af45-9bf2b4ebda65,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-workflowmkdqx/series-workflowmkdqx-build-action-142185051/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-workflowmkdqx/series-workflowmkdqx-build-action-3546170444/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-14 23:46:14 +0000 UTC FinishedAt: 2026-08-14 23:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-14 23:46:14 +0000 UTC FinishedAt: 2026-08-14 23:46:19 +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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"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-workflowmkdqx/series-workflowmkdqx-convert-artifact-3455985609/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-14 23:46:14 +0000 UTC FinishedAt: 2026-08-14 23:46:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-14 23:46:14 +0000 UTC FinishedAt: 2026-08-14 23:46:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-14 23:46:14 +0000 UTC FinishedAt: 2026-08-14 23:46:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-14 23:46:24 +0000 UTC FinishedAt: 2026-08-15 02:47:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmkdqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["tdx_vm_ioctl","tdx_load_mmu_pgd","kvm_init_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"a3a96f1b-33a8-4347-b0e9-945ab6b0eba2","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-14 23:46:24 +0000 UTC FinishedAt: 2026-08-15 02:47:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0ac702e6-c0cf-4fab-887b-963fe779710c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cab41a04-3bb5-4310-af45-9bf2b4ebda65,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-workflowmkdqx/series-workflowmkdqx-build-action-142185051/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-workflowmkdqx/series-workflowmkdqx-build-action-3546170444/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-workflowmkdqx/series-workflowmkdqx-convert-artifact-3455985609/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,}