Name: series-workflowhmgd6 Phase: Succeeded StartedAt: 2026-08-14 08:06:44 +0000 UTC FinishedAt: 2026-08-14 11:56:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmgd6[0] Phase: Succeeded StartedAt: 2026-08-14 08:06:44 +0000 UTC FinishedAt: 2026-08-14 08:10:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmgd6[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 08:06:44 +0000 UTC FinishedAt: 2026-08-14 08:10:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c21bb4193868a8de71fc4693fa741e195fdf5d86", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c21bb4193868a8de71fc4693fa741e195fdf5d86", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_tdp_mmu_zap_leafs", "kvm_tdp_mmu_unmap_gfn_range", "tdp_iter_restart", "tdp_iter_next", "tdp_iter_skip_child" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV90ZHBfbW11X3phcF9sZWFmcyYjMzQ7LAogICAgJiMzNDtrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2UmIzM0OywKICAgICYjMzQ7dGRwX2l0ZXJfcmVzdGFydCYjMzQ7LAogICAgJiMzNDt0ZHBfaXRlcl9uZXh0JiMzNDssCiAgICAmIzM0O3RkcF9pdGVyX3NraXBfY2hpbGQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0mIzM5O3MgVERQIE1NVSB0byBza2lwIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgZHVyaW5nIHphcHBpbmcuIEl0IGludHJvZHVjZXMgdHdvIG5ldyBib29sZWFuIGZpZWxkczogYHRkcF9tbXVfZW1wdHlfbGVhZl9wdGAgaW4gYHN0cnVjdCBrdm1fbW11X3BhZ2VgIGFuZCBgc2tpcF9jaGlsZGAgaW4gYHN0cnVjdCB0ZHBfaXRlcmAuIEJvdGggZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgdXBvbiBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gKGB0ZHBfbW11X2luaXRfc3BgIGFuZCBgdGRwX2l0ZXJfcmVzdGFydGAgcmVzcGVjdGl2ZWx5KS4gVGhlc2Ugc3RydWN0dXJlcyBhcmUgaW50ZXJuYWwgdG8gS1ZNIGFuZCBhcmUgbm90IGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBURFAgTU1VIHRvIHNraXAgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyB3aGVuIHphcHBpbmcsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHBhZ2UgdGFibGUgbWFuYWdlbWVudCBsb2dpYy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIHJ1bm5pbmcgS1ZNIGd1ZXN0cyBhbmQgcGVyZm9ybWluZyBtZW1vcnkgdW5tYXBwaW5nIG9yIHphcHBpbmcgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM3NjY4ODIzYzg2MWZiNGU2NjFlNDAzZTE3NWQ1ZmYwMzg2MjI2YWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwODowODozMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oIGIvYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaFxuaW5kZXggNzNjZGNiY2NjODllOC4uNTMwNWFhM2U2ODhiNyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmhcbkBAIC05NSw2ICYjNDM7OTUsOCBAQCBzdHJ1Y3Qga3ZtX21tdV9wYWdlIHtcbiBcdH07XG4gXG4gXHRib29sIGhhc19tYXBwZWRfaG9zdF9tbWlvO1xuJiM0MztcdC8qIFREUCBNTVUgb25seTogbm8gcHJlc2VudCBsZWFmIFNQVEVzIGV4aXN0IGluIHRoaXMgbGVhZiBwYWdlIHRhYmxlLiAqL1xuJiM0MztcdGJvb2wgdGRwX21tdV9lbXB0eV9sZWFmX3B0O1xuIFxuIFx0dW5pb24ge1xuIFx0XHQvKiBUaGVzZSB0d28gbWVtYmVycyBhcmVuJiMzOTt0IHVzZWQgZm9yIFREUCBNTVUgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmNcbmluZGV4IDllMTdiZmE4MDkwMTEuLjFkODdkYjE0YTZhZTggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1xuQEAgLTIzLDYgJiM0MzsyMyw3IEBAIHN0YXRpYyB2b2lkIHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuIHZvaWQgdGRwX2l0ZXJfcmVzdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4ge1xuIFx0aXRlci1cdTAwM2V5aWVsZGVkID0gZmFsc2U7XG4mIzQzO1x0aXRlci1cdTAwM2Vza2lwX2NoaWxkID0gZmFsc2U7XG4gXHRpdGVyLVx1MDAzZXlpZWxkZWRfZ2ZuID0gaXRlci1cdTAwM2VuZXh0X2xhc3RfbGV2ZWxfZ2ZuO1xuIFx0aXRlci1cdTAwM2VsZXZlbCA9IGl0ZXItXHUwMDNlcm9vdF9sZXZlbDtcbiBcbkBAIC0xNjcsOSAmIzQzOzE2OCwxMSBAQCB2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZiAodHJ5X3N0ZXBfZG93bihpdGVyKSlcbiYjNDM7XHRpZiAoIWl0ZXItXHUwMDNlc2tpcF9jaGlsZCBcdTAwMjZcdTAwMjYgdHJ5X3N0ZXBfZG93bihpdGVyKSlcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGl0ZXItXHUwMDNlc2tpcF9jaGlsZCA9IGZhbHNlO1xuJiM0MztcbiBcdGRvIHtcbiBcdFx0aWYgKHRyeV9zdGVwX3NpZGUoaXRlcikpXG4gXHRcdFx0cmV0dXJuO1xuQEAgLTE3NywzICYjNDM7MTgwLDggQEAgdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbiBcdGl0ZXItXHUwMDNldmFsaWQgPSBmYWxzZTtcbiB9XG4gXG4mIzQzO3ZvaWQgdGRwX2l0ZXJfc2tpcF9jaGlsZChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4mIzQzO3tcbiYjNDM7XHRXQVJOX09OX09OQ0UoaXRlci1cdTAwM2V5aWVsZGVkKTtcbiYjNDM7XHRpdGVyLVx1MDAzZXNraXBfY2hpbGQgPSB0cnVlO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oXG5pbmRleCAzNjRjNWRhNmM0OTkxLi40N2FjOGJkNDM3OTQzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmhcbkBAIC0xMTQsNiAmIzQzOzExNCwxMSBAQCBzdHJ1Y3QgdGRwX2l0ZXIge1xuIFx0ICogbGV2ZWwgaW5zdGVhZCBvZiBhZHZhbmNpbmcgdG8gdGhlIG5leHQgZW50cnkuXG4gXHQgKi9cbiBcdGJvb2wgeWllbGRlZDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRydWUgaWYgdGRwX2l0ZXJfbmV4dCgpIHNob3VsZCBza2lwIHRoZSBjaGlsZCBwYWdlIHRhYmxlIHJlZmVyZW5jZWQgYnlcbiYjNDM7XHQgKiB0aGUgY3VycmVudCBTUFRFLCBpbnN0ZWFkIG9mIGRlc2NlbmRpbmcgaW50byBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRib29sIHNraXBfY2hpbGQ7XG4gfTtcbiBcbiAvKlxuQEAgLTEzOSw1ICYjNDM7MTQ0LDYgQEAgdm9pZCB0ZHBfaXRlcl9zdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG4gXHRcdCAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cyk7XG4gdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcik7XG4gdm9pZCB0ZHBfaXRlcl9yZXN0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcik7XG4mIzQzO3ZvaWQgdGRwX2l0ZXJfc2tpcF9jaGlsZChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpO1xuIFxuICNlbmRpZiAvKiBfX0tWTV9YODZfTU1VX1REUF9JVEVSX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXG5pbmRleCBjMWNiYWU2NWQyMzlmLi44NGUxOGJkNmU3Nzc5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXG5AQCAtMjM4LDYgJiM0MzsyMzgsNyBAQCBzdGF0aWMgdm9pZCB0ZHBfbW11X2luaXRfc3Aoc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsIHRkcF9wdGVwX3Qgc3B0ZXAsXG4gXHRzcC1cdTAwM2VnZm4gPSBnZm47XG4gXHRzcC1cdTAwM2VwdGVwID0gc3B0ZXA7XG4gXHRzcC1cdTAwM2V0ZHBfbW11X3BhZ2UgPSB0cnVlO1xuJiM0MztcdHNwLVx1MDAzZXRkcF9tbXVfZW1wdHlfbGVhZl9wdCA9IGZhbHNlO1xuIFxuIFx0dHJhY2Vfa3ZtX21tdV9nZXRfcGFnZShzcCwgdHJ1ZSk7XG4gfVxuQEAgLTUyNyw2ICYjNDM7NTI4LDEwIEBAIHN0YXRpYyBpbnQgX19oYW5kbGVfY2hhbmdlZF9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsXG4gXHRpZiAoaXNfbGVhZilcbiBcdFx0Y2hlY2tfc3B0ZV93cml0YWJsZV9pbnZhcmlhbnRzKG5ld19zcHRlKTtcbiBcbiYjNDM7XHRpZiAoaXNfbGVhZiBcdTAwMjZcdTAwMjYgIXdhc19sZWFmIFx1MDAyNlx1MDAyNiBzcC1cdTAwM2V0ZHBfbW11X3BhZ2UgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNwLVx1MDAzZXJvbGUubGV2ZWwgPT0gUEdfTEVWRUxfNEspXG4mIzQzO1x0XHRXUklURV9PTkNFKHNwLVx1MDAzZXRkcF9tbXVfZW1wdHlfbGVhZl9wdCwgZmFsc2UpO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBUaGUgb25seSB0aW1lcyBhIFNQVEUgc2hvdWxkIGJlIGNoYW5nZWQgZnJvbSBhIG5vbi1wcmVzZW50IHRvXG4gXHQgKiBub24tcHJlc2VudCBzdGF0ZSBpcyB3aGVuIGFuIE1NSU8gZW50cnkgaXMgaW5zdGFsbGVkL21vZGlmaWVkL1xuQEAgLTkyMyw2ICYjNDM7OTI4LDM5IEBAIGJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIHRkcF9tbXVfcmFuZ2VfY292ZXJzX2xlYWZfcHQoc3RydWN0IHRkcF9pdGVyICppdGVyLFxuJiM0MztcdFx0XHRcdFx0IGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDtcbiYjNDM7XG4mIzQzO1x0c3AgPSBzcHRlcF90b19zcChyY3VfZGVyZWZlcmVuY2UoaXRlci1cdTAwM2VzcHRlcCkpO1xuJiM0MztcdHJldHVybiBzcC1cdTAwM2VnZm4gXHUwMDNlPSBzdGFydCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgc3AtXHUwMDNlZ2ZuICYjNDM7IEtWTV9QQUdFU19QRVJfSFBBR0UoUEdfTEVWRUxfMk0pIFx1MDAzYz0gZW5kO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB0ZHBfbW11X2Nhbl9za2lwX2xlYWZfcHQoc3RydWN0IHRkcF9pdGVyICppdGVyLFxuJiM0MztcdFx0XHRcdCAgICAgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKmNoaWxkX3NwO1xuJiM0MztcbiYjNDM7XHRpZiAoaXRlci1cdTAwM2VsZXZlbCAhPSBQR19MRVZFTF8yTSB8fFxuJiM0MztcdCAgICAhaXNfc2hhZG93X3ByZXNlbnRfcHRlKGl0ZXItXHUwMDNlb2xkX3NwdGUpIHx8XG4mIzQzO1x0ICAgIGlzX2xhc3Rfc3B0ZShpdGVyLVx1MDAzZW9sZF9zcHRlLCBpdGVyLVx1MDAzZWxldmVsKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGl0ZXItXHUwMDNlZ2ZuIFx1MDAzYyBzdGFydCB8fFxuJiM0MztcdCAgICBpdGVyLVx1MDAzZWdmbiAmIzQzOyBLVk1fUEFHRVNfUEVSX0hQQUdFKFBHX0xFVkVMXzJNKSBcdTAwM2UgZW5kKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNraXAgcmV0YWluZWQgZW1wdHkgNEsgbGVhZiBwYWdlIHRhYmxlcyB3aXRob3V0IHVubGlua2luZyB0aGVtLCBzb1xuJiM0MztcdCAqIGZ1dHVyZSBmYXVsdHMgY2FuIHJldXNlIHRoZSBwYWdpbmcgc3RydWN0dXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGNoaWxkX3NwID0gc3B0ZV90b19jaGlsZF9zcChpdGVyLVx1MDAzZW9sZF9zcHRlKTtcbiYjNDM7XHRyZXR1cm4gY2hpbGRfc3AtXHUwMDNlcm9sZS5sZXZlbCA9PSBQR19MRVZFTF80SyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgUkVBRF9PTkNFKGNoaWxkX3NwLVx1MDAzZXRkcF9tbXVfZW1wdHlfbGVhZl9wdCk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBJZiBjYW5feWllbGQgaXMgdHJ1ZSwgd2lsbCByZWxlYXNlIHRoZSBNTVUgbG9jayBhbmQgcmVzY2hlZHVsZSBpZiB0aGVcbiAgKiBzY2hlZHVsZXIgbmVlZHMgdGhlIENQVSBvciB0aGVyZSBpcyBjb250ZW50aW9uIG9uIHRoZSBNTVUgbG9jay4gSWYgdGhpc1xuQEAgLTkzNCw4ICYjNDM7OTcyLDEwIEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcbiBcdFx0XHQgICAgICBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGNhbl95aWVsZCwgYm9vbCBmbHVzaClcbiB7XG4gXHRzdHJ1Y3QgdGRwX2l0ZXIgaXRlcjtcbiYjNDM7XHRib29sIG1heV9za2lwX2xlYWZfcHRzO1xuIFxuIFx0ZW5kID0gbWluKGVuZCwgdGRwX21tdV9tYXhfZ2ZuX2V4Y2x1c2l2ZSgpKTtcbiYjNDM7XHRtYXlfc2tpcF9sZWFmX3B0cyA9IGVuZCAtIHN0YXJ0IFx1MDAzZT0gS1ZNX1BBR0VTX1BFUl9IUEFHRShQR19MRVZFTF8yTSk7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXG5AQCAtOTQ4LDE4ICYjNDM7OTg4LDM0IEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoIWlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSB8fFxuLVx0XHQgICAgIWlzX2xhc3Rfc3B0ZShpdGVyLm9sZF9zcHRlLCBpdGVyLmxldmVsKSlcbiYjNDM7XHRcdGlmIChtYXlfc2tpcF9sZWFmX3B0cyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICB0ZHBfbW11X2Nhbl9za2lwX2xlYWZfcHQoXHUwMDI2aXRlciwgc3RhcnQsIGVuZCkpIHtcbiYjNDM7XHRcdFx0dGRwX2l0ZXJfc2tpcF9jaGlsZChcdTAwMjZpdGVyKTtcbiBcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiBcbi1cdFx0dGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgXHUwMDI2aXRlciwgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUpO1xuJiM0MztcdFx0aWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpIHtcbiYjNDM7XHRcdFx0dGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgXHUwMDI2aXRlcixcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFNIQURPV19OT05QUkVTRU5UX1ZBTFVFKTtcbiBcbi1cdFx0Lypcbi1cdFx0ICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2VzbiYjMzk7dCByZXF1aXJlIGEgVExCIGZsdXNoLFxuLVx0XHQgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuXG4tXHRcdCAqL1xuLVx0XHRpZiAoIXJvb3QtXHUwMDNlcm9sZS5pbnZhbGlkKVxuLVx0XHRcdGZsdXNoID0gdHJ1ZTtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2VzbiYjMzk7dCByZXF1aXJlIGEgVExCIGZsdXNoLFxuJiM0MztcdFx0XHQgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoIXJvb3QtXHUwMDNlcm9sZS5pbnZhbGlkKVxuJiM0MztcdFx0XHRcdGZsdXNoID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobWF5X3NraXBfbGVhZl9wdHMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgaXRlci5sZXZlbCA9PSBQR19MRVZFTF80SyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBzcHRlX2luZGV4KHJjdV9kZXJlZmVyZW5jZShpdGVyLnNwdGVwKSkgPT0gU1BURV9FTlRfUEVSX1BBR0UgLSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHRkcF9tbXVfcmFuZ2VfY292ZXJzX2xlYWZfcHQoXHUwMDI2aXRlciwgc3RhcnQsIGVuZCkpIHtcbiYjNDM7XHRcdFx0c3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7XG4mIzQzO1xuJiM0MztcdFx0XHRzcCA9IHNwdGVwX3RvX3NwKHJjdV9kZXJlZmVyZW5jZShpdGVyLnNwdGVwKSk7XG4mIzQzO1x0XHRcdFdSSVRFX09OQ0Uoc3AtXHUwMDNldGRwX21tdV9lbXB0eV9sZWFmX3B0LCB0cnVlKTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdGRwX21tdV96YXBfbGVhZnMmIzM0OywKICAgICYjMzQ7a3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlJiMzNDssCiAgICAmIzM0O3RkcF9pdGVyX3Jlc3RhcnQmIzM0OywKICAgICYjMzQ7dGRwX2l0ZXJfbmV4dCYjMzQ7LAogICAgJiMzNDt0ZHBfaXRlcl9za2lwX2NoaWxkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBLVk0gVERQIE1NVSB0byBza2lwIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgd2hlbiB6YXBwaW5nLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgbG9naWMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgd2hlbiBydW5uaW5nIEtWTSBndWVzdHMgYW5kIHBlcmZvcm1pbmcgbWVtb3J5IHVubWFwcGluZyBvciB6YXBwaW5nIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNzY2ODgyM2M4NjFmYjRlNjYxZTQwM2UxNzVkNWZmMDM4NjIyNmFkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMDg6MDg6MzIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oIGIvYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaAppbmRleCA3M2NkY2JjY2M4OWU4Li41MzA1YWEzZTY4OGI3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmgKQEAgLTk1LDYgJiM0Mzs5NSw4IEBAIHN0cnVjdCBrdm1fbW11X3BhZ2UgewogCX07CiAKIAlib29sIGhhc19tYXBwZWRfaG9zdF9tbWlvOwomIzQzOwkvKiBURFAgTU1VIG9ubHk6IG5vIHByZXNlbnQgbGVhZiBTUFRFcyBleGlzdCBpbiB0aGlzIGxlYWYgcGFnZSB0YWJsZS4gKi8KJiM0MzsJYm9vbCB0ZHBfbW11X2VtcHR5X2xlYWZfcHQ7CiAKIAl1bmlvbiB7CiAJCS8qIFRoZXNlIHR3byBtZW1iZXJzIGFyZW4mIzM5O3QgdXNlZCBmb3IgVERQIE1NVSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jCmluZGV4IDllMTdiZmE4MDkwMTEuLjFkODdkYjE0YTZhZTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMKQEAgLTIzLDYgJiM0MzsyMyw3IEBAIHN0YXRpYyB2b2lkIHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoc3RydWN0IHRkcF9pdGVyICppdGVyKQogdm9pZCB0ZHBfaXRlcl9yZXN0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcikKIHsKIAlpdGVyLSZndDt5aWVsZGVkID0gZmFsc2U7CiYjNDM7CWl0ZXItJmd0O3NraXBfY2hpbGQgPSBmYWxzZTsKIAlpdGVyLSZndDt5aWVsZGVkX2dmbiA9IGl0ZXItJmd0O25leHRfbGFzdF9sZXZlbF9nZm47CiAJaXRlci0mZ3Q7bGV2ZWwgPSBpdGVyLSZndDtyb290X2xldmVsOwogCkBAIC0xNjcsOSAmIzQzOzE2OCwxMSBAQCB2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKQogCQlyZXR1cm47CiAJfQogCi0JaWYgKHRyeV9zdGVwX2Rvd24oaXRlcikpCiYjNDM7CWlmICghaXRlci0mZ3Q7c2tpcF9jaGlsZCAmYW1wOyZhbXA7IHRyeV9zdGVwX2Rvd24oaXRlcikpCiAJCXJldHVybjsKIAomIzQzOwlpdGVyLSZndDtza2lwX2NoaWxkID0gZmFsc2U7CiYjNDM7CiAJZG8gewogCQlpZiAodHJ5X3N0ZXBfc2lkZShpdGVyKSkKIAkJCXJldHVybjsKQEAgLTE3NywzICYjNDM7MTgwLDggQEAgdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcikKIAlpdGVyLSZndDt2YWxpZCA9IGZhbHNlOwogfQogCiYjNDM7dm9pZCB0ZHBfaXRlcl9za2lwX2NoaWxkKHN0cnVjdCB0ZHBfaXRlciAqaXRlcikKJiM0Mzt7CiYjNDM7CVdBUk5fT05fT05DRShpdGVyLSZndDt5aWVsZGVkKTsKJiM0MzsJaXRlci0mZ3Q7c2tpcF9jaGlsZCA9IHRydWU7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oCmluZGV4IDM2NGM1ZGE2YzQ5OTEuLjQ3YWM4YmQ0Mzc5NDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgKQEAgLTExNCw2ICYjNDM7MTE0LDExIEBAIHN0cnVjdCB0ZHBfaXRlciB7CiAJICogbGV2ZWwgaW5zdGVhZCBvZiBhZHZhbmNpbmcgdG8gdGhlIG5leHQgZW50cnkuCiAJICovCiAJYm9vbCB5aWVsZGVkOwomIzQzOwkvKgomIzQzOwkgKiBUcnVlIGlmIHRkcF9pdGVyX25leHQoKSBzaG91bGQgc2tpcCB0aGUgY2hpbGQgcGFnZSB0YWJsZSByZWZlcmVuY2VkIGJ5CiYjNDM7CSAqIHRoZSBjdXJyZW50IFNQVEUsIGluc3RlYWQgb2YgZGVzY2VuZGluZyBpbnRvIGl0LgomIzQzOwkgKi8KJiM0MzsJYm9vbCBza2lwX2NoaWxkOwogfTsKIAogLyoKQEAgLTEzOSw1ICYjNDM7MTQ0LDYgQEAgdm9pZCB0ZHBfaXRlcl9zdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsCiAJCSAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cyk7CiB2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKTsKIHZvaWQgdGRwX2l0ZXJfcmVzdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpOwomIzQzO3ZvaWQgdGRwX2l0ZXJfc2tpcF9jaGlsZChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpOwogCiAjZW5kaWYgLyogX19LVk1fWDg2X01NVV9URFBfSVRFUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jCmluZGV4IGMxY2JhZTY1ZDIzOWYuLjg0ZTE4YmQ2ZTc3NzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jCkBAIC0yMzgsNiAmIzQzOzIzOCw3IEBAIHN0YXRpYyB2b2lkIHRkcF9tbXVfaW5pdF9zcChzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwgdGRwX3B0ZXBfdCBzcHRlcCwKIAlzcC0mZ3Q7Z2ZuID0gZ2ZuOwogCXNwLSZndDtwdGVwID0gc3B0ZXA7CiAJc3AtJmd0O3RkcF9tbXVfcGFnZSA9IHRydWU7CiYjNDM7CXNwLSZndDt0ZHBfbW11X2VtcHR5X2xlYWZfcHQgPSBmYWxzZTsKIAogCXRyYWNlX2t2bV9tbXVfZ2V0X3BhZ2Uoc3AsIHRydWUpOwogfQpAQCAtNTI3LDYgJiM0Mzs1MjgsMTAgQEAgc3RhdGljIGludCBfX2hhbmRsZV9jaGFuZ2VkX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwKIAlpZiAoaXNfbGVhZikKIAkJY2hlY2tfc3B0ZV93cml0YWJsZV9pbnZhcmlhbnRzKG5ld19zcHRlKTsKIAomIzQzOwlpZiAoaXNfbGVhZiAmYW1wOyZhbXA7ICF3YXNfbGVhZiAmYW1wOyZhbXA7IHNwLSZndDt0ZHBfbW11X3BhZ2UgJmFtcDsmYW1wOwomIzQzOwkgICAgc3AtJmd0O3JvbGUubGV2ZWwgPT0gUEdfTEVWRUxfNEspCiYjNDM7CQlXUklURV9PTkNFKHNwLSZndDt0ZHBfbW11X2VtcHR5X2xlYWZfcHQsIGZhbHNlKTsKJiM0MzsKIAkvKgogCSAqIFRoZSBvbmx5IHRpbWVzIGEgU1BURSBzaG91bGQgYmUgY2hhbmdlZCBmcm9tIGEgbm9uLXByZXNlbnQgdG8KIAkgKiBub24tcHJlc2VudCBzdGF0ZSBpcyB3aGVuIGFuIE1NSU8gZW50cnkgaXMgaW5zdGFsbGVkL21vZGlmaWVkLwpAQCAtOTIzLDYgJiM0Mzs5MjgsMzkgQEAgYm9vbCBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBib29sIHRkcF9tbXVfcmFuZ2VfY292ZXJzX2xlYWZfcHQoc3RydWN0IHRkcF9pdGVyICppdGVyLAomIzQzOwkJCQkJIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKJiM0MzsKJiM0MzsJc3AgPSBzcHRlcF90b19zcChyY3VfZGVyZWZlcmVuY2UoaXRlci0mZ3Q7c3B0ZXApKTsKJiM0MzsJcmV0dXJuIHNwLSZndDtnZm4gJmd0Oz0gc3RhcnQgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgc3AtJmd0O2dmbiAmIzQzOyBLVk1fUEFHRVNfUEVSX0hQQUdFKFBHX0xFVkVMXzJNKSAmbHQ7PSBlbmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHRkcF9tbXVfY2FuX3NraXBfbGVhZl9wdChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsCiYjNDM7CQkJCSAgICAgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fbW11X3BhZ2UgKmNoaWxkX3NwOwomIzQzOwomIzQzOwlpZiAoaXRlci0mZ3Q7bGV2ZWwgIT0gUEdfTEVWRUxfMk0gfHwKJiM0MzsJICAgICFpc19zaGFkb3dfcHJlc2VudF9wdGUoaXRlci0mZ3Q7b2xkX3NwdGUpIHx8CiYjNDM7CSAgICBpc19sYXN0X3NwdGUoaXRlci0mZ3Q7b2xkX3NwdGUsIGl0ZXItJmd0O2xldmVsKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKGl0ZXItJmd0O2dmbiAmbHQ7IHN0YXJ0IHx8CiYjNDM7CSAgICBpdGVyLSZndDtnZm4gJiM0MzsgS1ZNX1BBR0VTX1BFUl9IUEFHRShQR19MRVZFTF8yTSkgJmd0OyBlbmQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNraXAgcmV0YWluZWQgZW1wdHkgNEsgbGVhZiBwYWdlIHRhYmxlcyB3aXRob3V0IHVubGlua2luZyB0aGVtLCBzbwomIzQzOwkgKiBmdXR1cmUgZmF1bHRzIGNhbiByZXVzZSB0aGUgcGFnaW5nIHN0cnVjdHVyZS4KJiM0MzsJICovCiYjNDM7CWNoaWxkX3NwID0gc3B0ZV90b19jaGlsZF9zcChpdGVyLSZndDtvbGRfc3B0ZSk7CiYjNDM7CXJldHVybiBjaGlsZF9zcC0mZ3Q7cm9sZS5sZXZlbCA9PSBQR19MRVZFTF80SyAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBSRUFEX09OQ0UoY2hpbGRfc3AtJmd0O3RkcF9tbXVfZW1wdHlfbGVhZl9wdCk7CiYjNDM7fQomIzQzOwogLyoKICAqIElmIGNhbl95aWVsZCBpcyB0cnVlLCB3aWxsIHJlbGVhc2UgdGhlIE1NVSBsb2NrIGFuZCByZXNjaGVkdWxlIGlmIHRoZQogICogc2NoZWR1bGVyIG5lZWRzIHRoZSBDUFUgb3IgdGhlcmUgaXMgY29udGVudGlvbiBvbiB0aGUgTU1VIGxvY2suIElmIHRoaXMKQEAgLTkzNCw4ICYjNDM7OTcyLDEwIEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCwKIAkJCSAgICAgIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgY2FuX3lpZWxkLCBib29sIGZsdXNoKQogewogCXN0cnVjdCB0ZHBfaXRlciBpdGVyOwomIzQzOwlib29sIG1heV9za2lwX2xlYWZfcHRzOwogCiAJZW5kID0gbWluKGVuZCwgdGRwX21tdV9tYXhfZ2ZuX2V4Y2x1c2l2ZSgpKTsKJiM0MzsJbWF5X3NraXBfbGVhZl9wdHMgPSBlbmQgLSBzdGFydCAmZ3Q7PSBLVk1fUEFHRVNfUEVSX0hQQUdFKFBHX0xFVkVMXzJNKTsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKIApAQCAtOTQ4LDE4ICYjNDM7OTg4LDM0IEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCwKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKCFpc19zaGFkb3dfcHJlc2VudF9wdGUoaXRlci5vbGRfc3B0ZSkgfHwKLQkJICAgICFpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpCiYjNDM7CQlpZiAobWF5X3NraXBfbGVhZl9wdHMgJmFtcDsmYW1wOwomIzQzOwkJICAgIHRkcF9tbXVfY2FuX3NraXBfbGVhZl9wdCgmYW1wO2l0ZXIsIHN0YXJ0LCBlbmQpKSB7CiYjNDM7CQkJdGRwX2l0ZXJfc2tpcF9jaGlsZCgmYW1wO2l0ZXIpOwogCQkJY29udGludWU7CiYjNDM7CQl9CiAKLQkJdGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgJmFtcDtpdGVyLCBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSk7CiYjNDM7CQlpZiAoaXNfc2hhZG93X3ByZXNlbnRfcHRlKGl0ZXIub2xkX3NwdGUpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpIHsKJiM0MzsJCQl0ZHBfbW11X2l0ZXJfc2V0X3NwdGUoa3ZtLCAmYW1wO2l0ZXIsCiYjNDM7CQkJCQkgICAgICBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSk7CiAKLQkJLyoKLQkJICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2VzbiYjMzk7dCByZXF1aXJlIGEgVExCIGZsdXNoLAotCQkgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuCi0JCSAqLwotCQlpZiAoIXJvb3QtJmd0O3JvbGUuaW52YWxpZCkKLQkJCWZsdXNoID0gdHJ1ZTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFphcHBpbmdzIFNQVEVzIGluIGludmFsaWQgcm9vdHMgZG9lc24mIzM5O3QgcmVxdWlyZSBhIFRMQiBmbHVzaCwKJiM0MzsJCQkgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKCFyb290LSZndDtyb2xlLmludmFsaWQpCiYjNDM7CQkJCWZsdXNoID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChtYXlfc2tpcF9sZWFmX3B0cyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgaXRlci5sZXZlbCA9PSBQR19MRVZFTF80SyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgc3B0ZV9pbmRleChyY3VfZGVyZWZlcmVuY2UoaXRlci5zcHRlcCkpID09IFNQVEVfRU5UX1BFUl9QQUdFIC0gMSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdGRwX21tdV9yYW5nZV9jb3ZlcnNfbGVhZl9wdCgmYW1wO2l0ZXIsIHN0YXJ0LCBlbmQpKSB7CiYjNDM7CQkJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7CiYjNDM7CiYjNDM7CQkJc3AgPSBzcHRlcF90b19zcChyY3VfZGVyZWZlcmVuY2UoaXRlci5zcHRlcCkpOwomIzQzOwkJCVdSSVRFX09OQ0Uoc3AtJmd0O3RkcF9tbXVfZW1wdHlfbGVhZl9wdCwgdHJ1ZSk7CiYjNDM7CQl9CiAJfQogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MTkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS1ZNIHg4NiBNTVUgUGF0Y2ggQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBuZWVkIGZ1enppbmcgYXR0ZW50aW9uLiBUaGUgc2NvcGUgaXMgcHJldHR5IGNsZWFyOiBpdCYjMzk7cyB0b3VjaGluZyBLVk0geDg2IE1NVSBjb2RlLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHRoZSBURFAgTU1VLiBUaGUgbW9kaWZpZWQgZmlsZXMg4oCTIGBtbXVfaW50ZXJuYWwuaGAsIGB0ZHBfaXRlci5jYCwgYHRkcF9pdGVyLmhgLCBhbmQgYHRkcF9tbXUuY2Ag4oCTIGNvbmZpcm0gdGhhdC4KCkl0JiMzOTtzIGludHJvZHVjaW5nIGNoYW5nZXMgdG8gdGhlIGBzdHJ1Y3Qga3ZtX21tdV9wYWdlYCwgYWRkaW5nIGB0ZHBfbW11X2VtcHR5X2xlYWZfcHRgLCBhbmQgbW9kaWZ5aW5nIGBzdHJ1Y3QgdGRwX2l0ZXJgIHdpdGggdGhlIGFkZGl0aW9uIG9mIGBza2lwX2NoaWxkYCBhbmQgYHRkcF9pdGVyX3NraXBfY2hpbGQoKWAuIEl0JiMzOTtzIGFsc28gbW9kaWZ5aW5nIGB0ZHBfbW11X3phcF9sZWFmcygpYCB0byBza2lwIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGFsdGVyYXRpb24sIG5vIGRvdWJ0LiBDb25zaWRlcmluZyB0aGlzIGRpcmVjdGx5IGltcGFjdHMgY29yZSBLVk0gVERQIE1NVSBsb2dpYywgYW5kIEtWTSBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyBpbiBzeXprYWxsZXIsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBvdXIgdGltZS4gV29ydGhGdXp6aW5nID0gVHJ1ZS4KCk5vdywgdGhlIHJlYWwgd29yayBiZWdpbnM6IHBpbnBvaW50aW5nIHRoZSByaWdodCB0YXJnZXRzIGZvciBmdXp6aW5nLiBXZSBuZWVkIHRvIGlkZW50aWZ5IEZvY3VzU3ltYm9scywgd2hpY2ggYXJlIHRoZSBub24taG90LXBhdGgga2VybmVsIGZ1bmN0aW9ucyB0byBmb2N1cyBmdXp6aW5nIG9uLCBhbmQgZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IEVuYWJsZUNvbmZpZ3MuCgpMZXQmIzM5O3MgZGlnIGludG8gYHRkcF9tbXUuY2AgYW5kIGB0ZHBfaXRlci5jYC4gRnJvbSBhIHF1aWNrIHNraW0sIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gYWRkZWQvbW9kaWZpZWQgYXJlOiBgdGRwX2l0ZXJfcmVzdGFydGAsIGB0ZHBfaXRlcl9uZXh0YCwgYHRkcF9pdGVyX3NraXBfY2hpbGRgLCBgdGRwX21tdV9pbml0X3NwYCwgYF9faGFuZGxlX2NoYW5nZWRfc3B0ZWAsIGBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlYCAoY29udGV4dCksIGB0ZHBfbW11X3JhbmdlX2NvdmVyc19sZWFmX3B0YCBhbmQgYHRkcF9tbXVfY2FuX3NraXBfbGVhZl9wdGAsIHdoaWNoIGFyZSBib3RoIG5ldyBmdW5jdGlvbnMuIEFuZCBsYXN0bHksIGB0ZHBfbW11X3phcF9sZWFmc2AsIHdoaWNoIGlzIGFsc28gYmVpbmcgbW9kaWZpZWQuCgpIbW0sIGB0ZHBfbW11X3phcF9sZWFmc2AgaXMgc3RhdGljLiBUaGF0IG1lYW5zIHdlIG5lZWQgdG8gdHJhY2Ugd2hlcmUgaXQgKmlzKiBjYWxsZWQuIFRoaXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkcF9tbXVfemFwX2xlYWZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz03MDQwPXZvaWQga3ZtX3phcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm5fc3RhcnQsIGdmbl90IGdmbl9lbmQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MDU1LVx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzA1NjpcdFx0Zmx1c2ggPSBrdm1fdGRwX21tdV96YXBfbGVhZnMoa3ZtLCBnZm5fc3RhcnQsIGdmbl9lbmQsIGZsdXNoKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzA1Ny1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz05NDE9c3RhdGljIGJvb2wgdGRwX21tdV9jYW5fc2tpcF9sZWFmX3B0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcixcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy05NzAtICovXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo5NzE6c3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtOTcyLVx0XHRcdCAgICAgIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgY2FuX3lpZWxkLCBib29sIGZsdXNoKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMzQtICovXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxMDM1OmJvb2wga3ZtX3RkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBmbHVzaClcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMzYte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwNDAtXHRmb3JfZWFjaF92YWxpZF90ZHBfbW11X3Jvb3RfeWllbGRfc2FmZShrdm0sIHJvb3QsIC0xKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTA0MTpcdFx0Zmx1c2ggPSB0ZHBfbW11X3phcF9sZWFmcyhrdm0sIHJvb3QsIHN0YXJ0LCBlbmQsIHRydWUsIGZsdXNoKTtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwNDItXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM9MTM2Mj1ib29sIGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMzcwLVx0X19mb3JfZWFjaF90ZHBfbW11X3Jvb3RfeWllbGRfc2FmZShrdm0sIHJvb3QsIHJhbmdlLVx1MDAzZXNsb3QtXHUwMDNlYXNfaWQsIHR5cGVzKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTM3MTpcdFx0Zmx1c2ggPSB0ZHBfbW11X3phcF9sZWFmcyhrdm0sIHJvb3QsIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMzcyLVx0XHRcdFx0XHQgIHJhbmdlLVx1MDAzZW1heV9ibG9jaywgZmx1c2gpO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oPTU3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tbXVfcGFnZSAqdGRwX21tdV9nZXRfcm9vdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtNjUtXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaDo2Njpib29sIGt2bV90ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgZmx1c2gpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtNjctYm9vbCBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTMzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSYjMzk7cyBUcmFuc2xhdGlvbiBMb29rYXNpZGUgQnVmZmVyIChUTEIpIEludmFsaWRhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBLVk0gaGFuZGxlcyBUTEIgaW52YWxpZGF0aW9ucywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIFRyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXIgKFREUCkgTU1VLiBNeSBpbW1lZGlhdGUgaW50ZXJlc3QgaXMgaW4gdW5kZXJzdGFuZGluZyB0aGUgZmxvdyBvZiBpbnZhbGlkYXRpb25zIHdoZW4gYSBHdWVzdCBQaHlzaWNhbCBGcmFtZSBOdW1iZXIgKEdGTikgaXMgbW9kaWZpZWQgb3IgdW5tYXBwZWQuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgZnVuY3Rpb24gaGVyZSBpcyBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCwgd2hpY2ggaXMgaW50cmlndWluZy4gSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGt2bV96YXBfZ2ZuX3JhbmdlYCwgd2hpY2ggcHJvdmlkZXMgdGhlIGJyb2FkZXIgY29udGV4dC4gSW50ZXJlc3RpbmcsIGBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VgIGFsc28gY2FsbHMgYHRkcF9tbXVfemFwX2xlYWZzYC4gU28gdGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgY2xvc2VseSBsaW5rZWQsIGFuZCB0aGV5IHByb2JhYmx5IGhhbmRsZSB0aGUgY3JpdGljYWwgbG9naWMgZm9yIHJlbW92aW5nIHN0YWxlIGVudHJpZXMgZnJvbSB0aGUgVExCLiBHaXZlbiB0aGlzLCBJIHNob3VsZCBmb2N1cyBteSBhdHRlbnRpb24gbm93IG9uIHRob3JvdWdobHkgZGlzc2VjdGluZyBib3RoIGBrdm1fdGRwX21tdV96YXBfbGVhZnNgIGFuZCBga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYHphcF9sZWFmc2Agd29ya3Mgd2l0aGluIHRoZSBjb250ZXh0IG9mIGJvdGggY2FsbHMuIFRoaXMgYW5hbHlzaXMgd2lsbCBnZXQgbWUgdG8gdGhlIGhlYXJ0IG9mIHRoZSBpbnZhbGlkYXRpb24gc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3RkcF9tbXVfemFwX2xlYWZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTcwNDA9dm9pZCBrdm1femFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbl9zdGFydCwgZ2ZuX3QgZ2ZuX2VuZClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwNTUtXHRpZiAodGRwX21tdV9lbmFibGVkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MDU2Olx0XHRmbHVzaCA9IGt2bV90ZHBfbW11X3phcF9sZWFmcyhrdm0sIGdmbl9zdGFydCwgZ2ZuX2VuZCwgZmx1c2gpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MDU3LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jPTk3MT1zdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzNC0gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjEwMzU6Ym9vbCBrdm1fdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGZsdXNoKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzNi17XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg9NTc9c3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21tdV9wYWdlICp0ZHBfbW11X2dldF9yb290KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC02NS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oOjY2OmJvb2wga3ZtX3RkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBmbHVzaCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC02Ny1ib29sIGt2bV90ZHBfbW11X3phcF9wb3NzaWJsZV9ueF9odWdlX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NzgKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlYCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byBga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlYC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgdW5tYXBwaW5nIGd1ZXN0IHBoeXNpY2FsIGZyYW1lIG51bWJlcnMgKEdGTnMpIGZyb20gdGhlIGhvc3QmIzM5O3MgVHJhbnNsYXRpb24gTG9va2FzaWRlIEJ1ZmZlcnMgKFRMQnMpIHdoZW4gdXNpbmcgVGFnZ2VkIERhdGEgUGFnZSAoVERQKSBNTVUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBiZWhhdmlvciwgZXNwZWNpYWxseSByZWdhcmRpbmcgdGhlIGZvbGxvd2luZzogaG93IGVmZmljaWVudGx5IGl0IGhhbmRsZXMgbGFyZ2UgdW5tYXAgcmVnaW9ucywgaXRzIGxvY2tpbmcgc3RyYXRlZ3kgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgTU1VIG9wZXJhdGlvbnMsIHdoZXRoZXIgaXQgaW50ZXJhY3RzIGNvcnJlY3RseSB3aXRoIHNoYWRvdyBwYWdlIHRhYmxlcywgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBwYWdlIGZhdWx0cyBkdXJpbmcgdGhlIHVubWFwcGluZyBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNvZGUgcGF0aCB0byBlbnN1cmUgd2UmIzM5O3JlIGF2b2lkaW5nIGFueSB1bm5lY2Vzc2FyeSBUTEIgZmx1c2hlcyBhbmQgdGhhdCB3ZSYjMzk7cmUgbWluaW1pemluZyB0aGUgcGVyZm9ybWFuY2UgaW1wYWN0IG9uIHJ1bm5pbmcgVk1zLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIHBheSBhdHRlbnRpb24gdG8gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoIG90aGVyIE1NVSBvcGVyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0IGNvcnJlY3RseSBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgc3RhdGVzIG9mIHRoZSBHRk5zIGJlaW5nIHVubWFwcGVkLiBJIGFsc28gd2FudCB0byBjaGVjayBmb3IgYW55IG1lbW9yeSBsZWFrcyBhbmQgZW5zdXJlIHRoZXJlIGFyZSBubyBpc3N1ZXMgd2l0aCB0aGUgaGFuZGxpbmcgb2YgdmlydHVhbCBtZW1vcnkgcmVzb3VyY2VzLiBHaXZlbiB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgZnVuY3Rpb24gZm9yIHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcyBpbiBhIFREUCBlbnZpcm9ubWVudCwgdW5kZXJzdGFuZGluZyBpdHMgaW50ZXJuYWxzIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MgaXMgcGFyYW1vdW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz0xNjYzPWJvb2wga3ZtX3VubWFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE2ODMtXHRpZiAodGRwX21tdV9lbmFibGVkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxNjg0Olx0XHRmbHVzaCA9IGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZShrdm0sIHJhbmdlLCBmbHVzaCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE2ODUtXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM9MTI3Mj1pbnQga3ZtX3RkcF9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMzYxLS8qIFVzZWQgYnkgbW11IG5vdGlmaWVyIHZpYSBrdm1fdW5tYXBfZ2ZuX3JhbmdlKCkgKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjEzNjI6Ym9vbCBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UsXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMzYzLVx0XHRcdFx0IGJvb2wgZmx1c2gpXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg9NzQ9aW50IGt2bV90ZHBfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtNzUtXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaDo3Njpib29sIGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTc3LVx0XHRcdFx0IGJvb2wgZmx1c2gpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBLVk0gR0ZOIFVubWFwcGluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBrbm93IGBrdm1femFwX2dmbl9yYW5nZWAgYW5kIGBrdm1fdW5tYXBfZ2ZuX3JhbmdlYCBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIGhhbmRsaW5nIEd1ZXN0IEZyYW1lIE51bWJlciAoR0ZOKSB1bm1hcHBpbmcgd2l0aGluIEtWTS4gVGhhdCBtYWtlcyBzZW5zZSwgdGhleSBzb3VuZCBsaWtlIHRoZSBsb2dpY2FsIGZ1bmN0aW9ucyB0byBvcmNoZXN0cmF0ZSB0aGUgcHJvY2Vzcy4gTm93IHRoZSBjcnVjaWFsIHBhcnQgaXMgdW5kZXJzdGFuZGluZyB0aGUgKmNvbnRleHQqIG9mIHRob3NlIGNhbGxzLiBXaGVyZSBhcmUgdGhleSBiZWluZyBpbnZva2VkIGZyb20/IEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBnZXQgYSByZWFsIGhhbmRsZSBvbiB0aGUgZGlmZmVyZW50IHVubWFwcGluZyBzY2VuYXJpb3MuIExldCYjMzk7cyBzdGFydCBieSBmaW5kaW5nIGFsbCB0aGUgcGxhY2VzIGBrdm1femFwX2dmbl9yYW5nZWAgaXMgYWN0dWFsbHkgKmNhbGxlZCogZnJvbS4gVGhhdCYjMzk7bGwgaWxsdW1pbmF0ZSB0aGUgdHJpZ2dlcnMgZm9yIEdGTiB1bm1hcHBpbmcgYW5kIHRoZSBhc3NvY2lhdGVkIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1femFwX2dmbl9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz03MDA2PXN0YXRpYyBib29sIGt2bV9ybWFwX3phcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm5fc3RhcnQsIGdmbl90IGdmbl9lbmQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MDM5LSAqL1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MDQwOnZvaWQga3ZtX3phcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm5fc3RhcnQsIGdmbl90IGdmbl9lbmQpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwNDEte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzA2NC19XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjcwNjU6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV96YXBfZ2ZuX3JhbmdlKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzA2Ni1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ5MzE9dm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MDE2LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MDE3Olx0a3ZtX3phcF9nZm5fcmFuZ2Uoa3ZtLCBnZm4sIGdmbiAmIzQzOyBQVFJTX1BFUl9QTUQpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MDE4LW91dDpcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA5NTQ9dm9pZCBfX2t2bV9zZXRfb3JfY2xlYXJfYXBpY3ZfaW5oaWJpdChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwOTkwLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwOTkxOlx0XHRcdGt2bV96YXBfZ2ZuX3JhbmdlKGt2bSwgZ2ZuLCBnZm4mIzQzOzEpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTEwOTkyLVx0XHRcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UsIGlkeCk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTE0MDg0PXN0YXRpYyB2b2lkIGt2bV9ub25jb2hlcmVudF9kbWFfYXNzaWdubWVudF9zdGFydF9vcl9zdG9wKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTQwOTUtXHRpZiAoa3ZtX2NoZWNrX2hhc19xdWlyayhrdm0sIEtWTV9YODZfUVVJUktfSUdOT1JFX0dVRVNUX1BBVCkpXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTQwOTY6XHRcdGt2bV96YXBfZ2ZuX3JhbmdlKGt2bSwgZ3BhX3RvX2dmbigwKSwgZ3BhX3RvX2dmbih+MFVMTCkpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTE0MDk3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM5NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byBLVk0mIzM5O3MgTU1VIFVubWFwcGluZyBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IEtWTSBoYW5kbGVzIHVubWFwcGluZyBndWVzdCBwaHlzaWNhbCBmcmFtZSBudW1iZXJzLCBzcGVjaWZpY2FsbHkgd2hlbiB0cmlnZ2VyZWQgYnkgTU1VIG5vdGlmaWVycy4gVGhlIGVudHJ5IHBvaW50IGlzIGBrdm1fdW5tYXBfZ2ZuX3JhbmdlYCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IHdpdGhpbiB0aGUgY29udGV4dCBvZiBUcmFuc2xhdGlvbiBMb29rYXNpZGUgQnVmZmVyIChUTEIpIGludmFsaWRhdGlvbi4KCk15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgdGhlIGNvZGUgZGV0ZXJtaW5lcyB3aGVuIGEgcGFnZSB0YWJsZSBlbnRyeSAoUFRFKSBvciBhIGxlYWYgcGFnZSB0YWJsZSBjYW4gYmUgc2tpcHBlZCBkdXJpbmcgdGhlIHVubWFwcGluZyBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBUcmFuc2xhdGlvbiBMb29rYXNpZGUgQnVmZmVyIChUTEIpIG9wZXJhdGlvbnMuIFRoZSBuZXcgYHRkcF9tbXVfY2FuX3NraXBfbGVhZl9wdGAgYW5kIGB0ZHBfbW11X3JhbmdlX2NvdmVyc19sZWFmX3B0YCBmdW5jdGlvbnMgc2VlbSBrZXkgaGVyZSwgYW5kIEkgc3VzcGVjdCB0aGV5JiMzOTtyZSBpbmZsdWVuY2luZyB0aGUgYmVoYXZpb3Igb2YgYHRkcF9tbXVfemFwX2xlYWZzYC4gVGhlIHBhdGNoIG1lbnRpb25zIG1vZGlmaWNhdGlvbnMgdG8gYHRkcF9tbXVfemFwX2xlYWZzYCwgc28gSSBzaG91bGQgYW5hbHl6ZSB0aGF0LgoKU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBpZGVudGlmeSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGluIHRoZSBjb250ZXh0IG9mIHVubWFwcGluZy4gVGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIGV4YW1pbmUgY2xvc2VseSBhcmUgYGt2bV90ZHBfbW11X3phcF9sZWFmc2AsIGBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VgLCBga3ZtX3phcF9nZm5fcmFuZ2VgLCBhbmQgb2YgY291cnNlIGBrdm1fdW5tYXBfZ2ZuX3JhbmdlYCBpdHNlbGYuCgpJJiMzOTtsbCBzdGFydCBieSBleGFtaW5pbmcgYGt2bV90ZHBfbW11X3phcF9sZWFmc2AgYW5kIGBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VgIGluIGBhcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY2AsIGFzIHRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb25zIGZvciB0aGlzIHNwZWNpZmljIHBhdGguCgpPZiBjb3Vyc2UsIHRoZSBLVk0gY29uZmlndXJhdGlvbiBpcyBlc3NlbnRpYWwgaGVyZSwgc28gSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyB0byBlbnN1cmUgYENPTkZJR19LVk1gIGlzIGVuYWJsZWQgYW5kIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzE1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBDb25maWd1cmF0aW9uIGFuZCBDb25kaXRpb25hbCBDb21waWxhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBLVk1gIGFuZCBgS1ZNX1g4NmAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBlbHNlIHJlbGV2YW50IHRvIHRoZSBLVk0gc2V0dXAuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4KClRoZW4gSSBzZWUgdGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSB0b3VjaGluZyBgYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNgLiBUaGlzIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJcyB0aGlzIGNvZGUgb25seSBpbmNsdWRlZCB1bmRlciBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzPyBLbm93aW5nIGlmIGB0ZHBfbW11LmNgIGlzIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkgaXMgYWJzb2x1dGVseSBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYnVpbGQgc3lzdGVtIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgdGhlIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gaXRzIGluY2x1c2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGRwX21tdSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vTWFrZWZpbGU9OD1rdm0teVx0XHRcdCYjNDM7PSB4ODYubyBlbXVsYXRlLm8gaXJxLm8gbGFwaWMubyBjcHVpZC5vIHBtdS5vIG10cnIubyBcXFxuLS1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xMC1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZToxMTprdm0tJChDT05GSUdfWDg2XzY0KSAmIzQzOz0gbW11L3RkcF9pdGVyLm8gbW11L3RkcF9tbXUub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlLTEyLWt2bS0kKENPTkZJR19LVk1fSU9BUElDKSAmIzQzOz0gaTgyNTkubyBpODI1NC5vIGlvYXBpYy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzQ1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IGBDT05GSUdfWDg2XzY0YCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBUaGUgY29yZSBjb25maWdzIEkmIzM5O20gZGVhbGluZyB3aXRoIGFyZSBgS1ZNYCBhbmQsIG9mIGNvdXJzZSwgYFg4Nl82NGAuIE5vIHN1cnByaXNlcyB0aGVyZS4KCk15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aG9zZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHRoZSBUcmFuc3BhcmVudCBQYWdlIFNoYXJpbmcgKFRQUykgcHJvY2VzcyB3aXRoaW4gS1ZNOiBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCwgYGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZWAsIGB0ZHBfaXRlcl9yZXN0YXJ0YCwgYHRkcF9pdGVyX25leHRgLCBhbmQgYHRkcF9pdGVyX3NraXBfY2hpbGRgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBkcml2aW5nIHRoZSBUUFMgbG9naWMgdGhhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9yb3VnaGx5LgoKSG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSB0byBjaGVjayBpZiBgdGRwX2l0ZXJfcmVzdGFydGAsIGB0ZHBfaXRlcl9uZXh0YCwgYW5kIGB0ZHBfaXRlcl9za2lwX2NoaWxkYCBhcmUgZXhwb3J0ZWQgc3ltYm9scy4gQXJlIHRoZXkgaW50ZW5kZWQgZm9yIGV4dGVybmFsIHVzZSwgb3IgYXJlIHRoZXkgaW50ZXJuYWwgdG8gdGhlIFRQUyBpbXBsZW1lbnRhdGlvbj8gVGhhdOKAmXMgaW1wb3J0YW50IGZvciBkZXRlcm1pbmluZyBob3cgbW9kdWxhciB0aGlzIFRQUyBpbXBsZW1lbnRhdGlvbiBpcyBhbmQgZm9yIHJlYXNvbmluZyBhYm91dCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGVzZSBzeW1ib2xzIGFyZSB2aXNpYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHBfaXRlcl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTExLSAqL1xuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jOjEyOnN0YXRpYyB2b2lkIHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTEzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMjItICovXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM6MjM6dm9pZCB0ZHBfaXRlcl9yZXN0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0yNC17XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTMwLVx0aXRlci1cdTAwM2VnZm4gPSBnZm5fcm91bmRfZm9yX2xldmVsKGl0ZXItXHUwMDNlbmV4dF9sYXN0X2xldmVsX2dmbiwgaXRlci1cdTAwM2VsZXZlbCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM6MzE6XHR0ZHBfaXRlcl9yZWZyZXNoX3NwdGVwKGl0ZXIpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTMyLVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0zOS0gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYzo0MDp2b2lkIHRkcF9pdGVyX3N0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlciwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy00MS1cdFx0ICAgIGludCBtaW5fbGV2ZWwsIGdmbl90IG5leHRfbGFzdF9sZXZlbF9nZm4sIGdmbl90IGdmbl9iaXRzKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy01Ni1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYzo1NzpcdHRkcF9pdGVyX3Jlc3RhcnQoaXRlcik7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtNTgtfVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYz04MT1zdGF0aWMgYm9vbCB0cnlfc3RlcF9kb3duKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMTAwLVx0aXRlci1cdTAwM2VnZm4gPSBnZm5fcm91bmRfZm9yX2xldmVsKGl0ZXItXHUwMDNlbmV4dF9sYXN0X2xldmVsX2dmbiwgaXRlci1cdTAwM2VsZXZlbCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM6MTAxOlx0dGRwX2l0ZXJfcmVmcmVzaF9zcHRlcChpdGVyKTtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xMDItXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jPTEzNj1zdGF0aWMgYm9vbCB0cnlfc3RlcF91cChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTE0Mi1cdGl0ZXItXHUwMDNlZ2ZuID0gZ2ZuX3JvdW5kX2Zvcl9sZXZlbChpdGVyLVx1MDAzZWdmbiwgaXRlci1cdTAwM2VsZXZlbCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM6MTQzOlx0dGRwX2l0ZXJfcmVmcmVzaF9zcHRlcChpdGVyKTtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xNDQtXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTE2My0gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYzoxNjQ6dm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xNjUte1xuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTE2Ni1cdGlmIChpdGVyLVx1MDAzZXlpZWxkZWQpIHtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYzoxNjc6XHRcdHRkcF9pdGVyX3Jlc3RhcnQoaXRlcik7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMTY4LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTE4Mi1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYzoxODM6dm9pZCB0ZHBfaXRlcl9za2lwX2NoaWxkKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xODQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI0NAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgVHJhaW4gb2YgVGhvdWdodCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGVzZSB0aGluZ3Mg4oCTIHdoYXRldmVyICYjMzQ7dGhleSYjMzQ7IGFyZSBpbiB0aGlzIGNvbnRleHQg4oCTIHRoZXkgYXJlbiYjMzk7dCBqdXN0IG9uZSB1bmNoYW5naW5nIHRoaW5nLiBUaGV5JiMzOTtyZSBkeW5hbWljLCBhbmQgdGhhdCBtZWFucyB0aGV5IHNob3VsZCBoYXZlIGRpc3RpbmN0IHN5bWJvbGljIHJlcHJlc2VudGF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc29tZSBhZGRpdGlvbnMgdG8gdGhlIHN5bWJvbGljIHNldC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gaW5jb3Jwb3JhdGUgYGt2bV90ZHBfbW11X3phcF9sZWFmc2AsIGBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VgLCBgdGRwX2l0ZXJfcmVzdGFydGAsIGB0ZHBfaXRlcl9uZXh0YCwgYW5kIGB0ZHBfaXRlcl9za2lwX2NoaWxkYCBpbnRvIHRoZSBwaWN0dXJlLgoKSG9sZCBvbiwgYmVmb3JlIEkgbW92ZSBvbiwgSSBzaG91bGQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhhdCBmaXJzdCBvbmUuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpZiBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCBpcywgaW4gZmFjdCwgc3RhdGljLiBUaGlzIGlzIGNydWNpYWwgZm9yIGNvbnNpc3RlbmN5LiBHb3R0YSBnZXQgdGhhdCBiaXQgcmlnaHQgZmlyc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV90ZHBfbW11X3phcF9sZWFmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jPTk3MT1zdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzNC0gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjEwMzU6Ym9vbCBrdm1fdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGZsdXNoKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzYwCgkJCQkJCQlvdXRwdXQ6IDE0MwoJCQkJCQkJdGhvdWdodHM6IDMzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIFREUCBNTVUgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIGBrdm1fdGRwX21tdV96YXBfbGVhZnNgIGlzbiYjMzk7dCBhIHN0YXRpYyBjb21wb25lbnQsIGdvdCBpdC4gTm93LCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgYEtWTWAgYW5kIGBYODZfNjRgLiBIbW0sIGBYODZfNjRgIGlzIGFuIGFyY2hpdGVjdHVyZSBjb25maWcgdGhvdWdoLCBub3QgYSBmZWF0dXJlLiBCdXQgdGhlIHByb21wdCBzYWlkIHRvIGluY2x1ZGUgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncywgYW5kIGBYODZfNjRgIGlzIHByZXR0eSBzdGFuZGFyZCBmb3IgNjQtYml0IHg4Niwgc28gaXQgZG9lc24mIzM5O3QgcmVhbGx5IG1hdHRlciBpZiBJIGluY2x1ZGUgaXQgb3Igbm90LiBJJiMzOTtsbCBqdXN0IGtlZXAgaXQgc2ltcGxlIGFuZCBzdGljayB3aXRoIGBLVk1gIGZvciBub3cuCgpSaWdodCwgcmV2aWV3aW5nIHRoZSBjaGFuZ2U6IHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgS1ZNJiMzOTtzIFREUCBNTVUsIHNwZWNpZmljYWxseSB0byBvcHRpbWl6ZSB0aGUgemFwcGluZyBwcm9jZXNzIGJ5IHNraXBwaW5nIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBvcHRpbWl6YXRpb24gd2l0aGluIHRoZSBwYWdlIHRhYmxlIG1hbmFnZW1lbnQsIG1ha2luZyBpdCBhbiBpbnRlcmVzdGluZyB0YXJnZXQgZm9yIGZ1enppbmcuIEl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQg4oCTIEtWTSBiZWluZyB0aGUga2V5IOKAkyB3aGljaCBtZWFucyBgV29ydGhGdXp6aW5nYCBpcyBhYnNvbHV0ZWx5IHRydWUgaGVyZS4KClNvLCBmb3IgZnV6emluZyBmb2N1cywgdGhlIGltcG9ydGFudCBzeW1ib2xzIGFyZTogYGt2bV90ZHBfbW11X3phcF9sZWFmc2AsIGBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VgLCBgdGRwX2l0ZXJfcmVzdGFydGAsIGB0ZHBfaXRlcl9uZXh0YCwgYW5kIGB0ZHBfaXRlcl9za2lwX2NoaWxkYC4KCkFuZCB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbiBpcyBkZWZpbml0ZWx5IGp1c3QgYEtWTWAuCgpUaGUgcmVhc29uaW5nIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZSBwYXRjaCBtb2RpZmllcyBLVk0mIzM5O3MgVERQIE1NVSB0byBza2lwIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMsIG9wdGltaXppbmcgaG93IHdlIGhhbmRsZSBwYWdlIHRhYmxlcy4gVGhpcyBjb2RlIGlzIGFjdGl2ZSBkdXJpbmcgS1ZNIGd1ZXN0IG1lbW9yeSB1bm1hcHBpbmcgb3IgemFwcGluZywgbWFraW5nIGl0IGEgY3JpdGljYWwgYXJlYSB0byBhbmFseXplLgoKQWxyaWdodCwgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV90ZHBfbW11X3phcF9sZWFmcyYjMzQ7LAogICAgJiMzNDtrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2UmIzM0OywKICAgICYjMzQ7dGRwX2l0ZXJfcmVzdGFydCYjMzQ7LAogICAgJiMzNDt0ZHBfaXRlcl9uZXh0JiMzNDssCiAgICAmIzM0O3RkcF9pdGVyX3NraXBfY2hpbGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBURFAgTU1VIHRvIHNraXAgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyB3aGVuIHphcHBpbmcsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHBhZ2UgdGFibGUgbWFuYWdlbWVudCBsb2dpYy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIHJ1bm5pbmcgS1ZNIGd1ZXN0cyBhbmQgcGVyZm9ybWluZyBtZW1vcnkgdW5tYXBwaW5nIG9yIHphcHBpbmcgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3RkcF9tbXVfemFwX2xlYWZzJiMzNDssCiAgICAmIzM0O2t2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZSYjMzQ7LAogICAgJiMzNDt0ZHBfaXRlcl9yZXN0YXJ0JiMzNDssCiAgICAmIzM0O3RkcF9pdGVyX25leHQmIzM0OywKICAgICYjMzQ7dGRwX2l0ZXJfc2tpcF9jaGlsZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIFREUCBNTVUgdG8gc2tpcCBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzIHdoZW4gemFwcGluZywgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgcGFnZSB0YWJsZSBtYW5hZ2VtZW50IGxvZ2ljLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHdoZW4gcnVubmluZyBLVk0gZ3Vlc3RzIGFuZCBwZXJmb3JtaW5nIG1lbW9yeSB1bm1hcHBpbmcgb3IgemFwcGluZyBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSYjMzk7cyBURFAgTU1VIHRvIHNraXAgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyBkdXJpbmcgemFwcGluZy4gSXQgaW50cm9kdWNlcyB0d28gbmV3IGJvb2xlYW4gZmllbGRzOiBgdGRwX21tdV9lbXB0eV9sZWFmX3B0YCBpbiBgc3RydWN0IGt2bV9tbXVfcGFnZWAgYW5kIGBza2lwX2NoaWxkYCBpbiBgc3RydWN0IHRkcF9pdGVyYC4gQm90aCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCB1cG9uIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiAoYHRkcF9tbXVfaW5pdF9zcGAgYW5kIGB0ZHBfaXRlcl9yZXN0YXJ0YCByZXNwZWN0aXZlbHkpLiBUaGVzZSBzdHJ1Y3R1cmVzIGFyZSBpbnRlcm5hbCB0byBLVk0gYW5kIGFyZSBub3QgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNzY2ODgyM2M4NjFmYjRlNjYxZTQwM2UxNzVkNWZmMDM4NjIyNmFkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMDg6MDg6MzIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oIGIvYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaAppbmRleCA3M2NkY2JjY2M4OWU4Li41MzA1YWEzZTY4OGI3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmgKQEAgLTk1LDYgJiM0Mzs5NSw4IEBAIHN0cnVjdCBrdm1fbW11X3BhZ2UgewogCX07CiAKIAlib29sIGhhc19tYXBwZWRfaG9zdF9tbWlvOwomIzQzOwkvKiBURFAgTU1VIG9ubHk6IG5vIHByZXNlbnQgbGVhZiBTUFRFcyBleGlzdCBpbiB0aGlzIGxlYWYgcGFnZSB0YWJsZS4gKi8KJiM0MzsJYm9vbCB0ZHBfbW11X2VtcHR5X2xlYWZfcHQ7CiAKIAl1bmlvbiB7CiAJCS8qIFRoZXNlIHR3byBtZW1iZXJzIGFyZW4mIzM5O3QgdXNlZCBmb3IgVERQIE1NVSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jCmluZGV4IDllMTdiZmE4MDkwMTEuLjFkODdkYjE0YTZhZTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMKQEAgLTIzLDYgJiM0MzsyMyw3IEBAIHN0YXRpYyB2b2lkIHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoc3RydWN0IHRkcF9pdGVyICppdGVyKQogdm9pZCB0ZHBfaXRlcl9yZXN0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcikKIHsKIAlpdGVyLSZndDt5aWVsZGVkID0gZmFsc2U7CiYjNDM7CWl0ZXItJmd0O3NraXBfY2hpbGQgPSBmYWxzZTsKIAlpdGVyLSZndDt5aWVsZGVkX2dmbiA9IGl0ZXItJmd0O25leHRfbGFzdF9sZXZlbF9nZm47CiAJaXRlci0mZ3Q7bGV2ZWwgPSBpdGVyLSZndDtyb290X2xldmVsOwogCkBAIC0xNjcsOSAmIzQzOzE2OCwxMSBAQCB2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKQogCQlyZXR1cm47CiAJfQogCi0JaWYgKHRyeV9zdGVwX2Rvd24oaXRlcikpCiYjNDM7CWlmICghaXRlci0mZ3Q7c2tpcF9jaGlsZCAmYW1wOyZhbXA7IHRyeV9zdGVwX2Rvd24oaXRlcikpCiAJCXJldHVybjsKIAomIzQzOwlpdGVyLSZndDtza2lwX2NoaWxkID0gZmFsc2U7CiYjNDM7CiAJZG8gewogCQlpZiAodHJ5X3N0ZXBfc2lkZShpdGVyKSkKIAkJCXJldHVybjsKQEAgLTE3NywzICYjNDM7MTgwLDggQEAgdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcikKIAlpdGVyLSZndDt2YWxpZCA9IGZhbHNlOwogfQogCiYjNDM7dm9pZCB0ZHBfaXRlcl9za2lwX2NoaWxkKHN0cnVjdCB0ZHBfaXRlciAqaXRlcikKJiM0Mzt7CiYjNDM7CVdBUk5fT05fT05DRShpdGVyLSZndDt5aWVsZGVkKTsKJiM0MzsJaXRlci0mZ3Q7c2tpcF9jaGlsZCA9IHRydWU7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oCmluZGV4IDM2NGM1ZGE2YzQ5OTEuLjQ3YWM4YmQ0Mzc5NDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgKQEAgLTExNCw2ICYjNDM7MTE0LDExIEBAIHN0cnVjdCB0ZHBfaXRlciB7CiAJICogbGV2ZWwgaW5zdGVhZCBvZiBhZHZhbmNpbmcgdG8gdGhlIG5leHQgZW50cnkuCiAJICovCiAJYm9vbCB5aWVsZGVkOwomIzQzOwkvKgomIzQzOwkgKiBUcnVlIGlmIHRkcF9pdGVyX25leHQoKSBzaG91bGQgc2tpcCB0aGUgY2hpbGQgcGFnZSB0YWJsZSByZWZlcmVuY2VkIGJ5CiYjNDM7CSAqIHRoZSBjdXJyZW50IFNQVEUsIGluc3RlYWQgb2YgZGVzY2VuZGluZyBpbnRvIGl0LgomIzQzOwkgKi8KJiM0MzsJYm9vbCBza2lwX2NoaWxkOwogfTsKIAogLyoKQEAgLTEzOSw1ICYjNDM7MTQ0LDYgQEAgdm9pZCB0ZHBfaXRlcl9zdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsCiAJCSAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cyk7CiB2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKTsKIHZvaWQgdGRwX2l0ZXJfcmVzdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpOwomIzQzO3ZvaWQgdGRwX2l0ZXJfc2tpcF9jaGlsZChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpOwogCiAjZW5kaWYgLyogX19LVk1fWDg2X01NVV9URFBfSVRFUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jCmluZGV4IGMxY2JhZTY1ZDIzOWYuLjg0ZTE4YmQ2ZTc3NzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jCkBAIC0yMzgsNiAmIzQzOzIzOCw3IEBAIHN0YXRpYyB2b2lkIHRkcF9tbXVfaW5pdF9zcChzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwgdGRwX3B0ZXBfdCBzcHRlcCwKIAlzcC0mZ3Q7Z2ZuID0gZ2ZuOwogCXNwLSZndDtwdGVwID0gc3B0ZXA7CiAJc3AtJmd0O3RkcF9tbXVfcGFnZSA9IHRydWU7CiYjNDM7CXNwLSZndDt0ZHBfbW11X2VtcHR5X2xlYWZfcHQgPSBmYWxzZTsKIAogCXRyYWNlX2t2bV9tbXVfZ2V0X3BhZ2Uoc3AsIHRydWUpOwogfQpAQCAtNTI3LDYgJiM0Mzs1MjgsMTAgQEAgc3RhdGljIGludCBfX2hhbmRsZV9jaGFuZ2VkX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwKIAlpZiAoaXNfbGVhZikKIAkJY2hlY2tfc3B0ZV93cml0YWJsZV9pbnZhcmlhbnRzKG5ld19zcHRlKTsKIAomIzQzOwlpZiAoaXNfbGVhZiAmYW1wOyZhbXA7ICF3YXNfbGVhZiAmYW1wOyZhbXA7IHNwLSZndDt0ZHBfbW11X3BhZ2UgJmFtcDsmYW1wOwomIzQzOwkgICAgc3AtJmd0O3JvbGUubGV2ZWwgPT0gUEdfTEVWRUxfNEspCiYjNDM7CQlXUklURV9PTkNFKHNwLSZndDt0ZHBfbW11X2VtcHR5X2xlYWZfcHQsIGZhbHNlKTsKJiM0MzsKIAkvKgogCSAqIFRoZSBvbmx5IHRpbWVzIGEgU1BURSBzaG91bGQgYmUgY2hhbmdlZCBmcm9tIGEgbm9uLXByZXNlbnQgdG8KIAkgKiBub24tcHJlc2VudCBzdGF0ZSBpcyB3aGVuIGFuIE1NSU8gZW50cnkgaXMgaW5zdGFsbGVkL21vZGlmaWVkLwpAQCAtOTIzLDYgJiM0Mzs5MjgsMzkgQEAgYm9vbCBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBib29sIHRkcF9tbXVfcmFuZ2VfY292ZXJzX2xlYWZfcHQoc3RydWN0IHRkcF9pdGVyICppdGVyLAomIzQzOwkJCQkJIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKJiM0MzsKJiM0MzsJc3AgPSBzcHRlcF90b19zcChyY3VfZGVyZWZlcmVuY2UoaXRlci0mZ3Q7c3B0ZXApKTsKJiM0MzsJcmV0dXJuIHNwLSZndDtnZm4gJmd0Oz0gc3RhcnQgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgc3AtJmd0O2dmbiAmIzQzOyBLVk1fUEFHRVNfUEVSX0hQQUdFKFBHX0xFVkVMXzJNKSAmbHQ7PSBlbmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHRkcF9tbXVfY2FuX3NraXBfbGVhZl9wdChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsCiYjNDM7CQkJCSAgICAgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fbW11X3BhZ2UgKmNoaWxkX3NwOwomIzQzOwomIzQzOwlpZiAoaXRlci0mZ3Q7bGV2ZWwgIT0gUEdfTEVWRUxfMk0gfHwKJiM0MzsJICAgICFpc19zaGFkb3dfcHJlc2VudF9wdGUoaXRlci0mZ3Q7b2xkX3NwdGUpIHx8CiYjNDM7CSAgICBpc19sYXN0X3NwdGUoaXRlci0mZ3Q7b2xkX3NwdGUsIGl0ZXItJmd0O2xldmVsKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKGl0ZXItJmd0O2dmbiAmbHQ7IHN0YXJ0IHx8CiYjNDM7CSAgICBpdGVyLSZndDtnZm4gJiM0MzsgS1ZNX1BBR0VTX1BFUl9IUEFHRShQR19MRVZFTF8yTSkgJmd0OyBlbmQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNraXAgcmV0YWluZWQgZW1wdHkgNEsgbGVhZiBwYWdlIHRhYmxlcyB3aXRob3V0IHVubGlua2luZyB0aGVtLCBzbwomIzQzOwkgKiBmdXR1cmUgZmF1bHRzIGNhbiByZXVzZSB0aGUgcGFnaW5nIHN0cnVjdHVyZS4KJiM0MzsJICovCiYjNDM7CWNoaWxkX3NwID0gc3B0ZV90b19jaGlsZF9zcChpdGVyLSZndDtvbGRfc3B0ZSk7CiYjNDM7CXJldHVybiBjaGlsZF9zcC0mZ3Q7cm9sZS5sZXZlbCA9PSBQR19MRVZFTF80SyAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBSRUFEX09OQ0UoY2hpbGRfc3AtJmd0O3RkcF9tbXVfZW1wdHlfbGVhZl9wdCk7CiYjNDM7fQomIzQzOwogLyoKICAqIElmIGNhbl95aWVsZCBpcyB0cnVlLCB3aWxsIHJlbGVhc2UgdGhlIE1NVSBsb2NrIGFuZCByZXNjaGVkdWxlIGlmIHRoZQogICogc2NoZWR1bGVyIG5lZWRzIHRoZSBDUFUgb3IgdGhlcmUgaXMgY29udGVudGlvbiBvbiB0aGUgTU1VIGxvY2suIElmIHRoaXMKQEAgLTkzNCw4ICYjNDM7OTcyLDEwIEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCwKIAkJCSAgICAgIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgY2FuX3lpZWxkLCBib29sIGZsdXNoKQogewogCXN0cnVjdCB0ZHBfaXRlciBpdGVyOwomIzQzOwlib29sIG1heV9za2lwX2xlYWZfcHRzOwogCiAJZW5kID0gbWluKGVuZCwgdGRwX21tdV9tYXhfZ2ZuX2V4Y2x1c2l2ZSgpKTsKJiM0MzsJbWF5X3NraXBfbGVhZl9wdHMgPSBlbmQgLSBzdGFydCAmZ3Q7PSBLVk1fUEFHRVNfUEVSX0hQQUdFKFBHX0xFVkVMXzJNKTsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKIApAQCAtOTQ4LDE4ICYjNDM7OTg4LDM0IEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCwKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKCFpc19zaGFkb3dfcHJlc2VudF9wdGUoaXRlci5vbGRfc3B0ZSkgfHwKLQkJICAgICFpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpCiYjNDM7CQlpZiAobWF5X3NraXBfbGVhZl9wdHMgJmFtcDsmYW1wOwomIzQzOwkJICAgIHRkcF9tbXVfY2FuX3NraXBfbGVhZl9wdCgmYW1wO2l0ZXIsIHN0YXJ0LCBlbmQpKSB7CiYjNDM7CQkJdGRwX2l0ZXJfc2tpcF9jaGlsZCgmYW1wO2l0ZXIpOwogCQkJY29udGludWU7CiYjNDM7CQl9CiAKLQkJdGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgJmFtcDtpdGVyLCBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSk7CiYjNDM7CQlpZiAoaXNfc2hhZG93X3ByZXNlbnRfcHRlKGl0ZXIub2xkX3NwdGUpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpIHsKJiM0MzsJCQl0ZHBfbW11X2l0ZXJfc2V0X3NwdGUoa3ZtLCAmYW1wO2l0ZXIsCiYjNDM7CQkJCQkgICAgICBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSk7CiAKLQkJLyoKLQkJICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2VzbiYjMzk7dCByZXF1aXJlIGEgVExCIGZsdXNoLAotCQkgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuCi0JCSAqLwotCQlpZiAoIXJvb3QtJmd0O3JvbGUuaW52YWxpZCkKLQkJCWZsdXNoID0gdHJ1ZTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFphcHBpbmdzIFNQVEVzIGluIGludmFsaWQgcm9vdHMgZG9lc24mIzM5O3QgcmVxdWlyZSBhIFRMQiBmbHVzaCwKJiM0MzsJCQkgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKCFyb290LSZndDtyb2xlLmludmFsaWQpCiYjNDM7CQkJCWZsdXNoID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChtYXlfc2tpcF9sZWFmX3B0cyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgaXRlci5sZXZlbCA9PSBQR19MRVZFTF80SyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgc3B0ZV9pbmRleChyY3VfZGVyZWZlcmVuY2UoaXRlci5zcHRlcCkpID09IFNQVEVfRU5UX1BFUl9QQUdFIC0gMSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdGRwX21tdV9yYW5nZV9jb3ZlcnNfbGVhZl9wdCgmYW1wO2l0ZXIsIHN0YXJ0LCBlbmQpKSB7CiYjNDM7CQkJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7CiYjNDM7CiYjNDM7CQkJc3AgPSBzcHRlcF90b19zcChyY3VfZGVyZWZlcmVuY2UoaXRlci5zcHRlcCkpOwomIzQzOwkJCVdSSVRFX09OQ0Uoc3AtJmd0O3RkcF9tbXVfZW1wdHlfbGVhZl9wdCwgdHJ1ZSk7CiYjNDM7CQl9CiAJfQogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTE2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIFREUCBNTVUgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgdGhlIEtWTSYjMzk7cyBUd28tRGltZW5zaW9uYWwgUGFnaW5nIE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQgKFREUCBNTVUpIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgZm9yIHg4Ni4gVGhlIGNvcmUgaWRlYSBpcyB0byBza2lwIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgZHVyaW5nIHRoZSAmIzM0O3phcHBpbmcmIzM0OyBwcm9jZXNzLCB3aGljaCBpcyBhIGNvbW1vbiBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gd2hlbiByZW1vdmluZyBtYXBwaW5ncy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGFkZGluZyBhIG5ldyBib29sZWFuIGZpZWxkLCBgdGRwX21tdV9lbXB0eV9sZWFmX3B0YCwgdG8gdGhlIGBzdHJ1Y3Qga3ZtX21tdV9wYWdlYC4KCk15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFNpbmNlIGBzdHJ1Y3Qga3ZtX21tdV9wYWdlYCBpcyBhbGxvY2F0ZWQgdmlhIGEgYGttZW1fY2FjaGVgLCBpdCBzaG91bGQgYmUgc2FmZSBpbiBtb3N0IGNhc2VzLCBidXQgdGhlIGFkZGVkIGB0ZHBfbW11X2VtcHR5X2xlYWZfcHRgIG5lZWRzIGNhcmVmdWwgc2NydXRpbnkuIENydWNpYWxseSwgaXMgdGhpcyBgc3RydWN0IGt2bV9tbXVfcGFnZWAgZXZlciBleHBvc2VkIHRvIHVzZXJzcGFjZT8gTm8sIGdvb2QsIGl0JiMzOTtzIGludGVybmFsIHRvIEtWTSYjMzk7cyBzaGFkb3cgcGFnaW5nL1REUCBpbXBsZW1lbnRhdGlvbi4gVGhhdCBzaWduaWZpY2FudGx5IHJlZHVjZXMgdGhlIGF0dGFjayBzdXJmYWNlLgoKTm93LCB0aGUgcGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIGEgYHNraXBfY2hpbGRgIGZsYWcgdG8gYHN0cnVjdCB0ZHBfaXRlcmAuIFRoaXMgaXRlcmF0b3IgaXMgdXNlZCB3aXRoaW4gZnVuY3Rpb25zIGxpa2UgYHRkcF9tbXVfemFwX2xlYWZzYC4gSG1tLCBgc3RydWN0IHRkcF9pdGVyIGl0ZXI7YCBpcyBkZWNsYXJlZCBhcyBhIGxvY2FsIHZhcmlhYmxlLiBPa2F5LCBhbmQgaXQmIzM5O3MgaW5pdGlhbGl6ZWQgYnkgYHRkcF9pdGVyX3N0YXJ0KClgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IHRoYXQgaW5pdGlhbGl6YXRpb24gY29ycmVjdGx5IHNldHMgYHNraXBfY2hpbGRgLCBhcyB0aGF0JiMzOTtzIHRoZSBuZXcgY29uZGl0aW9uYWwgbG9naWMuIEkgbmVlZCB0byBkaWcgaW50byBgdGRwX2l0ZXJfc3RhcnQoKWAgYW5kIHZlcmlmeSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhhdCBuZXcgZmllbGQgd2l0aGluIHRoZSBpdGVyYXRvci4gR290dGEgbWFrZSBzdXJlIGl0JiMzOTtzIGFsbCBoYW5kbGVkIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGRwX2l0ZXJfc3RhcnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jPTIzPXZvaWQgdGRwX2l0ZXJfcmVzdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTM5LSAqL1xuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jOjQwOnZvaWQgdGRwX2l0ZXJfc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTQxLVx0XHQgICAgaW50IG1pbl9sZXZlbCwgZ2ZuX3QgbmV4dF9sYXN0X2xldmVsX2dmbiwgZ2ZuX3QgZ2ZuX2JpdHMpXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oPTc2PXN0cnVjdCB0ZHBfaXRlciB7XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTEyOC0jZGVmaW5lIGZvcl9lYWNoX3RkcF9wdGVfbWluX2xldmVsKGl0ZXIsIGt2bSwgcm9vdCwgbWluX2xldmVsLCBzdGFydCwgZW5kKVx0XHQgIFxcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6MTI5Olx0Zm9yICh0ZHBfaXRlcl9zdGFydChcdTAwMjZpdGVyLCByb290LCBtaW5fbGV2ZWwsIHN0YXJ0LCBrdm1fZ2ZuX3Jvb3RfYml0cyhrdm0sIHJvb3QpKTsgXFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0xMzAtXHQgICAgIGl0ZXIudmFsaWQgXHUwMDI2XHUwMDI2IGl0ZXIuZ2ZuIFx1MDAzYyBlbmQ7XHRcdFx0XHRcdFx0ICBcXFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0xMzMtI2RlZmluZSBmb3JfZWFjaF90ZHBfcHRlX21pbl9sZXZlbF9hbGwoaXRlciwgcm9vdCwgbWluX2xldmVsKVx0XHRcXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oOjEzNDpcdGZvciAodGRwX2l0ZXJfc3RhcnQoXHUwMDI2aXRlciwgcm9vdCwgbWluX2xldmVsLCAwLCAwKTtcdFx0XFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0xMzUtXHRcdGl0ZXIudmFsaWQgXHUwMDI2XHUwMDI2IGl0ZXIuZ2ZuIFx1MDAzYyB0ZHBfbW11X21heF9nZm5fZXhjbHVzaXZlKCk7XHRcXFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaD0xNDE9dGRwX3B0ZXBfdCBzcHRlX3RvX2NoaWxkX3B0KHU2NCBwdGUsIGludCBsZXZlbCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtMTQyLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oOjE0Mzp2b2lkIHRkcF9pdGVyX3N0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlciwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0xNDQtXHRcdCAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4OTkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBJbXBsZW1lbnRhdGlvbiBvZiBgdGRwX2l0ZXJfc3RhcnRgKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIGNyYWNrIG9wZW4gdGhpcyBjb2RlIGFuZCBzZWUgd2hhdCBgdGRwX2l0ZXJfc3RhcnRgIGlzICpyZWFsbHkqIGRvaW5nLiYjMzQ7IE5vIGhhbmQtd2F2aW5nLCBubyBhYnN0cmFjdCBjb25jZXB0cyDigJMgSSB3YW50IHRvIHNlZSB0aGUgbml0dHktZ3JpdHR5LiBXaGF0JiMzOTtzIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgaXMgaXQgdG91Y2hpbmc/IElzIGl0IGFsbG9jYXRpbmcgbWVtb3J5PyBTZXR0aW5nIHVwIHNvbWUgc29ydCBvZiBpbnRlcm5hbCBzdGF0ZT8gV2hhdCBlZGdlIGNhc2VzIGRvZXMgaXQgaGFuZGxlIChvciAqbm90KiBoYW5kbGUsIG1vcmUgaW1wb3J0YW50bHkpPyBXaGVyZSBhcmUgdGhlIHBvdGVudGlhbCBnb3RjaGFzPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHVuZGVyc3RhbmRpbmcgdGhpcyBpcyBhYnNvbHV0ZWx5IGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyB3aG9sZSBpdGVyYXRpdmUgcHJvY2VzcyBpcyBzdXBwb3NlZCB0byB3b3JrLiBUaGlzIGlzIHRoZSBzdGFydGluZyBndW4sIGFuZCBrbm93aW5nIGV4YWN0bHkgaG93IGl0JiMzOTtzIGZpcmVkIGlzIGVzc2VudGlhbC4gTGV0JiMzOTtzIHNlZSBob3cgaXQgZ2V0cyB0aGlzIGl0ZXJhdG9yIG9mZiB0aGUgZ3JvdW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHRkcF9pdGVyX3N0YXJ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYz0yMz12b2lkIHRkcF9pdGVyX3Jlc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0zOS0gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYzo0MDp2b2lkIHRkcF9pdGVyX3N0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlciwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy00MS1cdFx0ICAgIGludCBtaW5fbGV2ZWwsIGdmbl90IG5leHRfbGFzdF9sZXZlbF9nZm4sIGdmbl90IGdmbl9iaXRzKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaD0xNDE9dGRwX3B0ZXBfdCBzcHRlX3RvX2NoaWxkX3B0KHU2NCBwdGUsIGludCBsZXZlbCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtMTQyLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oOjE0Mzp2b2lkIHRkcF9pdGVyX3N0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlciwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0xNDQtXHRcdCAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0ODkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGB0ZHBfaXRlci5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBLVk0gTU1VIGltcGxlbWVudGF0aW9uIGZvciB4ODYsIHNwZWNpZmljYWxseSB0aGUgYHRkcF9pdGVyLmNgIGZpbGUuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIG9mIHRoZSBrZXkgY29uY2VwdHMgYXQgcGxheSBoZXJlIOKAkyBuZXN0ZWQgcGFnaW5nLCB0cmFuc2xhdGlvbiBsb29rYXNpZGUgYnVmZmVyIChUTEIpIG1hbmFnZW1lbnQsIGFuZCB0aGUgY29tcGxleGl0aWVzIG9mIHRyYXZlcnNpbmcgdGhlIHBhZ2UgdGFibGVzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIE15IGZvY3VzIHdpbGwgYmUgYXJvdW5kIGxpbmUgNDAsIGFzIHRoYXQmIzM5O3MgdHlwaWNhbGx5IHdoZXJlIGludGVyZXN0aW5nIGluaXRpYWxpemF0aW9uIG9yIGVudHJ5IHBvaW50cyByZXNpZGUgaW4gbWFueSBrZXJuZWwgbW9kdWxlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIG1vZHVsZSBoYW5kbGVzIHRoZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIGluIGEgS1ZNIGNvbnRleHQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGUgTU1VIGl0ZXJhdG9yIHdvcmtzIGF0IHRoZSBsZWFmIGxldmVsLiBNeSBhaW0gaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XHRpdGVyLVx1MDAzZWdmbiA9IGdmbl9yb3VuZF9mb3JfbGV2ZWwoaXRlci1cdTAwM2VuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBpdGVyLVx1MDAzZWxldmVsKTtcbiAgMzE6XHRcdHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoaXRlcik7XG4gIDMyOlx0XG4gIDMzOlx0XHRpdGVyLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbiAgMzQ6XHR9XG4gIDM1Olx0XG4gIDM2Olx0LypcbiAgMzc6XHQgKiBTZXRzIGEgVERQIGl0ZXJhdG9yIHRvIHdhbGsgYSBwcmUtb3JkZXIgdHJhdmVyc2FsIG9mIHRoZSBwYWdpbmcgc3RydWN0dXJlXG4gIDM4Olx0ICogcm9vdGVkIGF0IHJvb3RfcHQsIHN0YXJ0aW5nIHdpdGggdGhlIHdhbGsgdG8gdHJhbnNsYXRlIG5leHRfbGFzdF9sZXZlbF9nZm4uXG4gIDM5Olx0ICovXG4gIDQwOlx0dm9pZCB0ZHBfaXRlcl9zdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG4gIDQxOlx0XHRcdCAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cylcbiAgNDI6XHR7XG4gIDQzOlx0XHRpZiAoV0FSTl9PTl9PTkNFKCFyb290IHx8IChyb290LVx1MDAzZXJvbGUubGV2ZWwgXHUwMDNjIDEpIHx8XG4gIDQ0Olx0XHRcdFx0IChyb290LVx1MDAzZXJvbGUubGV2ZWwgXHUwMDNlIFBUNjRfUk9PVF9NQVhfTEVWRUwpIHx8XG4gIDQ1Olx0XHRcdFx0IChnZm5fYml0cyBcdTAwMjZcdTAwMjYgbmV4dF9sYXN0X2xldmVsX2dmbiBcdTAwM2U9IGdmbl9iaXRzKSkpIHtcbiAgNDY6XHRcdFx0aXRlci1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuICA0NzpcdFx0XHRyZXR1cm47XG4gIDQ4Olx0XHR9XG4gIDQ5Olx0XG4gIDUwOlx0XHRpdGVyLVx1MDAzZW5leHRfbGFzdF9sZXZlbF9nZm4gPSBuZXh0X2xhc3RfbGV2ZWxfZ2ZuO1xuICA1MTpcdFx0aXRlci1cdTAwM2VnZm5fYml0cyA9IGdmbl9iaXRzO1xuICA1MjpcdFx0aXRlci1cdTAwM2Vyb290X2xldmVsID0gcm9vdC1cdTAwM2Vyb2xlLmxldmVsO1xuICA1MzpcdFx0aXRlci1cdTAwM2VtaW5fbGV2ZWwgPSBtaW5fbGV2ZWw7XG4gIDU0Olx0XHRpdGVyLVx1MDAzZXB0X3BhdGhbaXRlci1cdTAwM2Vyb290X2xldmVsIC0gMV0gPSAodGRwX3B0ZXBfdClyb290LVx1MDAzZXNwdDtcbiAgNTU6XHRcdGl0ZXItXHUwMDNlYXNfaWQgPSBrdm1fbW11X3BhZ2VfYXNfaWQocm9vdCk7XG4gIDU2Olx0XG4gIDU3Olx0XHR0ZHBfaXRlcl9yZXN0YXJ0KGl0ZXIpO1xuICA1ODpcdH1cbiAgNTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI4NAoJCQkJCQkJb3V0cHV0OiAyMTMKCQkJCQkJCXRob3VnaHRzOiA5NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyBpbiBLVk0gTU1VIE9wdGltaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHNraXBfY2hpbGRgIGluIHRoZSBgdGRwX2l0ZXJgIHN0cnVjdCBhbmQgYHRkcF9tbXVfZW1wdHlfbGVhZl9wdGAgaW4gYGt2bV9tbXVfcGFnZWAsIHRvIG9wdGltaXplIHRoZSBLVk0gTU1VIGJ5IHNraXBwaW5nIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMuIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLgoKVGhlIGB0ZHBfaXRlcl9zdGFydGAgZnVuY3Rpb24gY2FsbHMgYHRkcF9pdGVyX3Jlc3RhcnRgLCBhbmQgd2l0aGluIGB0ZHBfaXRlcl9yZXN0YXJ0YCwgYGl0ZXItJmd0O3NraXBfY2hpbGRgIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGBmYWxzZWAuIFRoYXQgbG9va3MgZ29vZC4gTW92aW5nIG9uLCB3aGVuIGluaXRpYWxpemluZyBhIG5ldyBga3ZtX21tdV9wYWdlYCB2aWEgYHRkcF9tbXVfaW5pdF9zcGAsICBgc3AtJmd0O3RkcF9tbXVfZW1wdHlfbGVhZl9wdGAgaXMgYWxzbyBzZXQgdG8gYGZhbHNlYC4gU28sIGJvdGggbmV3IGZpZWxkcyBhcmUgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCgpTaW5jZSBib3RoIHN0cnVjdHMgYXJlIGludGVybmFsIHRvIEtWTSBhbmQgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBzYWZlIGluIHRlcm1zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiAgQ29udHJvbCBmbG93IHJlbGllcyBvbiBpbml0aWFsaXplZCB2YXJpYWJsZXMsIHNvIHRoYXQmIzM5O3MgYSBwbHVzLiBUaGUgZGVzaWduIGlzIHB1cmVseSBhbiBvcHRpbWl6YXRpb24gZm9yIEtWTSYjMzk7cyBNTVUsIHNraXBwaW5nIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMsIHRoYXQgY291bGQgaGF2ZSB0aGUgcG90ZW50aWFsIG9mIHJlc3VsdGluZyBpbiBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gQnV0IHRob3NlIGlzc3VlcyB3aWxsIGJlIGNhdWdodCBieSBLQVNBTi4KCkxldCBtZSBkb3VibGUtY2hlY2suIExvb2tpbmcgYXQgYHRkcF9tbXVfcmFuZ2VfY292ZXJzX2xlYWZfcHRgLCBgc3B0ZXBfdG9fc3BgIHJlbGlhYmx5IGFjY2Vzc2VzIHRoZSBga3ZtX21tdV9wYWdlYCBmcm9tIHRoZSBTUFRFIHBvaW50ZXIsIGVuc3VyaW5nIHRoYXQgYWxsIGFjY2Vzc2VkIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQuIFRoZSBzYW1lIHBhdHRlcm4gaXMgdXNlZCBpbiBgdGRwX21tdV9jYW5fc2tpcF9sZWFmX3B0YC4gVGhhdCBjaGVja3Mgb3V0IHRvby4KCkFuZCwgZmluYWxseSwgYG1heV9za2lwX2xlYWZfcHRzYCBpcyBpbml0aWFsaXplZC4gRXZlcnl0aGluZyBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLgoKU28sIGluIGNvbmNsdXNpb24sIEkgZG9uJiMzOTt0IHNlZSBhbnkgaW1tZWRpYXRlIHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEtBU0FOIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBzdWJ0bGUgaXNzdWVzIGluIHRoZSBsb2dpYyBvZiB0aGlzIG9wdGltaXphdGlvbi4gTm8gbmVlZCB0byBicmluZyBpbiBLTVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJiMzOTtzIFREUCBNTVUgdG8gc2tpcCBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzIGR1cmluZyB6YXBwaW5nLiBJdCBpbnRyb2R1Y2VzIHR3byBuZXcgYm9vbGVhbiBmaWVsZHM6IGB0ZHBfbW11X2VtcHR5X2xlYWZfcHRgIGluIGBzdHJ1Y3Qga3ZtX21tdV9wYWdlYCBhbmQgYHNraXBfY2hpbGRgIGluIGBzdHJ1Y3QgdGRwX2l0ZXJgLiBCb3RoIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIHVwb24gc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIChgdGRwX21tdV9pbml0X3NwYCBhbmQgYHRkcF9pdGVyX3Jlc3RhcnRgIHJlc3BlY3RpdmVseSkuIFRoZXNlIHN0cnVjdHVyZXMgYXJlIGludGVybmFsIHRvIEtWTSBhbmQgYXJlIG5vdCBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHVzZWQgaW4gY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0mIzM5O3MgVERQIE1NVSB0byBza2lwIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgZHVyaW5nIHphcHBpbmcuIEl0IGludHJvZHVjZXMgdHdvIG5ldyBib29sZWFuIGZpZWxkczogYHRkcF9tbXVfZW1wdHlfbGVhZl9wdGAgaW4gYHN0cnVjdCBrdm1fbW11X3BhZ2VgIGFuZCBgc2tpcF9jaGlsZGAgaW4gYHN0cnVjdCB0ZHBfaXRlcmAuIEJvdGggZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgdXBvbiBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gKGB0ZHBfbW11X2luaXRfc3BgIGFuZCBgdGRwX2l0ZXJfcmVzdGFydGAgcmVzcGVjdGl2ZWx5KS4gVGhlc2Ugc3RydWN0dXJlcyBhcmUgaW50ZXJuYWwgdG8gS1ZNIGFuZCBhcmUgbm90IGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDg6MzMuMTU0MDc0MjcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY1NTIwODk2OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3RkcF9tbXVfemFwX2xlYWZzXCIsXG4gICAgXCJrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VcIixcbiAgICBcInRkcF9pdGVyX3Jlc3RhcnRcIixcbiAgICBcInRkcF9pdGVyX25leHRcIixcbiAgICBcInRkcF9pdGVyX3NraXBfY2hpbGRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSdzIFREUCBNTVUgdG8gc2tpcCBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzIGR1cmluZyB6YXBwaW5nLiBJdCBpbnRyb2R1Y2VzIHR3byBuZXcgYm9vbGVhbiBmaWVsZHM6IGB0ZHBfbW11X2VtcHR5X2xlYWZfcHRgIGluIGBzdHJ1Y3Qga3ZtX21tdV9wYWdlYCBhbmQgYHNraXBfY2hpbGRgIGluIGBzdHJ1Y3QgdGRwX2l0ZXJgLiBCb3RoIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIHVwb24gc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIChgdGRwX21tdV9pbml0X3NwYCBhbmQgYHRkcF9pdGVyX3Jlc3RhcnRgIHJlc3BlY3RpdmVseSkuIFRoZXNlIHN0cnVjdHVyZXMgYXJlIGludGVybmFsIHRvIEtWTSBhbmQgYXJlIG5vdCBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHVzZWQgaW4gY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBURFAgTU1VIHRvIHNraXAgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyB3aGVuIHphcHBpbmcsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHBhZ2UgdGFibGUgbWFuYWdlbWVudCBsb2dpYy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIHJ1bm5pbmcgS1ZNIGd1ZXN0cyBhbmQgcGVyZm9ybWluZyBtZW1vcnkgdW5tYXBwaW5nIG9yIHphcHBpbmcgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDg6MzMuMTU0MDc5OTAyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDQ4MTgxNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNzY2ODgyM2M4NjFmYjRlNjYxZTQwM2UxNzVkNWZmMDM4NjIyNmFkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDE0IDA4OjA4OjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmggYi9hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oXFxuaW5kZXggNzNjZGNiY2NjODllOC4uNTMwNWFhM2U2ODhiNyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oXFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaFxcbkBAIC05NSw2ICs5NSw4IEBAIHN0cnVjdCBrdm1fbW11X3BhZ2Uge1xcbiBcXHR9O1xcbiBcXG4gXFx0Ym9vbCBoYXNfbWFwcGVkX2hvc3RfbW1pbztcXG4rXFx0LyogVERQIE1NVSBvbmx5OiBubyBwcmVzZW50IGxlYWYgU1BURXMgZXhpc3QgaW4gdGhpcyBsZWFmIHBhZ2UgdGFibGUuICovXFxuK1xcdGJvb2wgdGRwX21tdV9lbXB0eV9sZWFmX3B0O1xcbiBcXG4gXFx0dW5pb24ge1xcbiBcXHRcXHQvKiBUaGVzZSB0d28gbWVtYmVycyBhcmVuJ3QgdXNlZCBmb3IgVERQIE1NVSAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmNcXG5pbmRleCA5ZTE3YmZhODA5MDExLi4xZDg3ZGIxNGE2YWU4IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1xcbkBAIC0yMyw2ICsyMyw3IEBAIHN0YXRpYyB2b2lkIHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoc3RydWN0IHRkcF9pdGVyICppdGVyKVxcbiB2b2lkIHRkcF9pdGVyX3Jlc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxcbiB7XFxuIFxcdGl0ZXItXFx1MDAzZXlpZWxkZWQgPSBmYWxzZTtcXG4rXFx0aXRlci1cXHUwMDNlc2tpcF9jaGlsZCA9IGZhbHNlO1xcbiBcXHRpdGVyLVxcdTAwM2V5aWVsZGVkX2dmbiA9IGl0ZXItXFx1MDAzZW5leHRfbGFzdF9sZXZlbF9nZm47XFxuIFxcdGl0ZXItXFx1MDAzZWxldmVsID0gaXRlci1cXHUwMDNlcm9vdF9sZXZlbDtcXG4gXFxuQEAgLTE2Nyw5ICsxNjgsMTEgQEAgdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAodHJ5X3N0ZXBfZG93bihpdGVyKSlcXG4rXFx0aWYgKCFpdGVyLVxcdTAwM2Vza2lwX2NoaWxkIFxcdTAwMjZcXHUwMDI2IHRyeV9zdGVwX2Rvd24oaXRlcikpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdGl0ZXItXFx1MDAzZXNraXBfY2hpbGQgPSBmYWxzZTtcXG4rXFxuIFxcdGRvIHtcXG4gXFx0XFx0aWYgKHRyeV9zdGVwX3NpZGUoaXRlcikpXFxuIFxcdFxcdFxcdHJldHVybjtcXG5AQCAtMTc3LDMgKzE4MCw4IEBAIHZvaWQgdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXFxuIFxcdGl0ZXItXFx1MDAzZXZhbGlkID0gZmFsc2U7XFxuIH1cXG4gXFxuK3ZvaWQgdGRwX2l0ZXJfc2tpcF9jaGlsZChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXFxuK3tcXG4rXFx0V0FSTl9PTl9PTkNFKGl0ZXItXFx1MDAzZXlpZWxkZWQpO1xcbitcXHRpdGVyLVxcdTAwM2Vza2lwX2NoaWxkID0gdHJ1ZTtcXG4rfVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmggYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmhcXG5pbmRleCAzNjRjNWRhNmM0OTkxLi40N2FjOGJkNDM3OTQzIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaFxcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaFxcbkBAIC0xMTQsNiArMTE0LDExIEBAIHN0cnVjdCB0ZHBfaXRlciB7XFxuIFxcdCAqIGxldmVsIGluc3RlYWQgb2YgYWR2YW5jaW5nIHRvIHRoZSBuZXh0IGVudHJ5LlxcbiBcXHQgKi9cXG4gXFx0Ym9vbCB5aWVsZGVkO1xcbitcXHQvKlxcbitcXHQgKiBUcnVlIGlmIHRkcF9pdGVyX25leHQoKSBzaG91bGQgc2tpcCB0aGUgY2hpbGQgcGFnZSB0YWJsZSByZWZlcmVuY2VkIGJ5XFxuK1xcdCAqIHRoZSBjdXJyZW50IFNQVEUsIGluc3RlYWQgb2YgZGVzY2VuZGluZyBpbnRvIGl0LlxcbitcXHQgKi9cXG4rXFx0Ym9vbCBza2lwX2NoaWxkO1xcbiB9O1xcbiBcXG4gLypcXG5AQCAtMTM5LDUgKzE0NCw2IEBAIHZvaWQgdGRwX2l0ZXJfc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxcbiBcXHRcXHQgICAgaW50IG1pbl9sZXZlbCwgZ2ZuX3QgbmV4dF9sYXN0X2xldmVsX2dmbiwgZ2ZuX3QgZ2ZuX2JpdHMpO1xcbiB2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKTtcXG4gdm9pZCB0ZHBfaXRlcl9yZXN0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcik7XFxuK3ZvaWQgdGRwX2l0ZXJfc2tpcF9jaGlsZChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpO1xcbiBcXG4gI2VuZGlmIC8qIF9fS1ZNX1g4Nl9NTVVfVERQX0lURVJfSCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXFxuaW5kZXggYzFjYmFlNjVkMjM5Zi4uODRlMThiZDZlNzc3OSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXFxuQEAgLTIzOCw2ICsyMzgsNyBAQCBzdGF0aWMgdm9pZCB0ZHBfbW11X2luaXRfc3Aoc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsIHRkcF9wdGVwX3Qgc3B0ZXAsXFxuIFxcdHNwLVxcdTAwM2VnZm4gPSBnZm47XFxuIFxcdHNwLVxcdTAwM2VwdGVwID0gc3B0ZXA7XFxuIFxcdHNwLVxcdTAwM2V0ZHBfbW11X3BhZ2UgPSB0cnVlO1xcbitcXHRzcC1cXHUwMDNldGRwX21tdV9lbXB0eV9sZWFmX3B0ID0gZmFsc2U7XFxuIFxcbiBcXHR0cmFjZV9rdm1fbW11X2dldF9wYWdlKHNwLCB0cnVlKTtcXG4gfVxcbkBAIC01MjcsNiArNTI4LDEwIEBAIHN0YXRpYyBpbnQgX19oYW5kbGVfY2hhbmdlZF9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsXFxuIFxcdGlmIChpc19sZWFmKVxcbiBcXHRcXHRjaGVja19zcHRlX3dyaXRhYmxlX2ludmFyaWFudHMobmV3X3NwdGUpO1xcbiBcXG4rXFx0aWYgKGlzX2xlYWYgXFx1MDAyNlxcdTAwMjYgIXdhc19sZWFmIFxcdTAwMjZcXHUwMDI2IHNwLVxcdTAwM2V0ZHBfbW11X3BhZ2UgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHNwLVxcdTAwM2Vyb2xlLmxldmVsID09IFBHX0xFVkVMXzRLKVxcbitcXHRcXHRXUklURV9PTkNFKHNwLVxcdTAwM2V0ZHBfbW11X2VtcHR5X2xlYWZfcHQsIGZhbHNlKTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBvbmx5IHRpbWVzIGEgU1BURSBzaG91bGQgYmUgY2hhbmdlZCBmcm9tIGEgbm9uLXByZXNlbnQgdG9cXG4gXFx0ICogbm9uLXByZXNlbnQgc3RhdGUgaXMgd2hlbiBhbiBNTUlPIGVudHJ5IGlzIGluc3RhbGxlZC9tb2RpZmllZC9cXG5AQCAtOTIzLDYgKzkyOCwzOSBAQCBib29sIGt2bV90ZHBfbW11X3phcF9wb3NzaWJsZV9ueF9odWdlX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgdGRwX21tdV9yYW5nZV9jb3ZlcnNfbGVhZl9wdChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwO1xcbitcXG4rXFx0c3AgPSBzcHRlcF90b19zcChyY3VfZGVyZWZlcmVuY2UoaXRlci1cXHUwMDNlc3B0ZXApKTtcXG4rXFx0cmV0dXJuIHNwLVxcdTAwM2VnZm4gXFx1MDAzZT0gc3RhcnQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHNwLVxcdTAwM2VnZm4gKyBLVk1fUEFHRVNfUEVSX0hQQUdFKFBHX0xFVkVMXzJNKSBcXHUwMDNjPSBlbmQ7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHRkcF9tbXVfY2FuX3NraXBfbGVhZl9wdChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsXFxuK1xcdFxcdFxcdFxcdCAgICAgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZClcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX21tdV9wYWdlICpjaGlsZF9zcDtcXG4rXFxuK1xcdGlmIChpdGVyLVxcdTAwM2VsZXZlbCAhPSBQR19MRVZFTF8yTSB8fFxcbitcXHQgICAgIWlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLVxcdTAwM2VvbGRfc3B0ZSkgfHxcXG4rXFx0ICAgIGlzX2xhc3Rfc3B0ZShpdGVyLVxcdTAwM2VvbGRfc3B0ZSwgaXRlci1cXHUwMDNlbGV2ZWwpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoaXRlci1cXHUwMDNlZ2ZuIFxcdTAwM2Mgc3RhcnQgfHxcXG4rXFx0ICAgIGl0ZXItXFx1MDAzZWdmbiArIEtWTV9QQUdFU19QRVJfSFBBR0UoUEdfTEVWRUxfMk0pIFxcdTAwM2UgZW5kKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTa2lwIHJldGFpbmVkIGVtcHR5IDRLIGxlYWYgcGFnZSB0YWJsZXMgd2l0aG91dCB1bmxpbmtpbmcgdGhlbSwgc29cXG4rXFx0ICogZnV0dXJlIGZhdWx0cyBjYW4gcmV1c2UgdGhlIHBhZ2luZyBzdHJ1Y3R1cmUuXFxuK1xcdCAqL1xcbitcXHRjaGlsZF9zcCA9IHNwdGVfdG9fY2hpbGRfc3AoaXRlci1cXHUwMDNlb2xkX3NwdGUpO1xcbitcXHRyZXR1cm4gY2hpbGRfc3AtXFx1MDAzZXJvbGUubGV2ZWwgPT0gUEdfTEVWRUxfNEsgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIFJFQURfT05DRShjaGlsZF9zcC1cXHUwMDNldGRwX21tdV9lbXB0eV9sZWFmX3B0KTtcXG4rfVxcbitcXG4gLypcXG4gICogSWYgY2FuX3lpZWxkIGlzIHRydWUsIHdpbGwgcmVsZWFzZSB0aGUgTU1VIGxvY2sgYW5kIHJlc2NoZWR1bGUgaWYgdGhlXFxuICAqIHNjaGVkdWxlciBuZWVkcyB0aGUgQ1BVIG9yIHRoZXJlIGlzIGNvbnRlbnRpb24gb24gdGhlIE1NVSBsb2NrLiBJZiB0aGlzXFxuQEAgLTkzNCw4ICs5NzIsMTAgQEAgc3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxcbiBcXHRcXHRcXHQgICAgICBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGNhbl95aWVsZCwgYm9vbCBmbHVzaClcXG4ge1xcbiBcXHRzdHJ1Y3QgdGRwX2l0ZXIgaXRlcjtcXG4rXFx0Ym9vbCBtYXlfc2tpcF9sZWFmX3B0cztcXG4gXFxuIFxcdGVuZCA9IG1pbihlbmQsIHRkcF9tbXVfbWF4X2dmbl9leGNsdXNpdmUoKSk7XFxuK1xcdG1heV9za2lwX2xlYWZfcHRzID0gZW5kIC0gc3RhcnQgXFx1MDAzZT0gS1ZNX1BBR0VTX1BFUl9IUEFHRShQR19MRVZFTF8yTSk7XFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4gXFxuQEAgLTk0OCwxOCArOTg4LDM0IEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGlmICghaXNfc2hhZG93X3ByZXNlbnRfcHRlKGl0ZXIub2xkX3NwdGUpIHx8XFxuLVxcdFxcdCAgICAhaXNfbGFzdF9zcHRlKGl0ZXIub2xkX3NwdGUsIGl0ZXIubGV2ZWwpKVxcbitcXHRcXHRpZiAobWF5X3NraXBfbGVhZl9wdHMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHRkcF9tbXVfY2FuX3NraXBfbGVhZl9wdChcXHUwMDI2aXRlciwgc3RhcnQsIGVuZCkpIHtcXG4rXFx0XFx0XFx0dGRwX2l0ZXJfc2tpcF9jaGlsZChcXHUwMDI2aXRlcik7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuIFxcbi1cXHRcXHR0ZHBfbW11X2l0ZXJfc2V0X3NwdGUoa3ZtLCBcXHUwMDI2aXRlciwgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUpO1xcbitcXHRcXHRpZiAoaXNfc2hhZG93X3ByZXNlbnRfcHRlKGl0ZXIub2xkX3NwdGUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpIHtcXG4rXFx0XFx0XFx0dGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgXFx1MDAyNml0ZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFNIQURPV19OT05QUkVTRU5UX1ZBTFVFKTtcXG4gXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFphcHBpbmdzIFNQVEVzIGluIGludmFsaWQgcm9vdHMgZG9lc24ndCByZXF1aXJlIGEgVExCIGZsdXNoLFxcbi1cXHRcXHQgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoIXJvb3QtXFx1MDAzZXJvbGUuaW52YWxpZClcXG4tXFx0XFx0XFx0Zmx1c2ggPSB0cnVlO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBaYXBwaW5ncyBTUFRFcyBpbiBpbnZhbGlkIHJvb3RzIGRvZXNuJ3QgcmVxdWlyZSBhIFRMQiBmbHVzaCxcXG4rXFx0XFx0XFx0ICogc2VlIGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cygpIGZvciBkZXRhaWxzLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKCFyb290LVxcdTAwM2Vyb2xlLmludmFsaWQpXFxuK1xcdFxcdFxcdFxcdGZsdXNoID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKG1heV9za2lwX2xlYWZfcHRzIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBpdGVyLmxldmVsID09IFBHX0xFVkVMXzRLIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBzcHRlX2luZGV4KHJjdV9kZXJlZmVyZW5jZShpdGVyLnNwdGVwKSkgPT0gU1BURV9FTlRfUEVSX1BBR0UgLSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICB0ZHBfbW11X3JhbmdlX2NvdmVyc19sZWFmX3B0KFxcdTAwMjZpdGVyLCBzdGFydCwgZW5kKSkge1xcbitcXHRcXHRcXHRzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDtcXG4rXFxuK1xcdFxcdFxcdHNwID0gc3B0ZXBfdG9fc3AocmN1X2RlcmVmZXJlbmNlKGl0ZXIuc3B0ZXApKTtcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShzcC1cXHUwMDNldGRwX21tdV9lbXB0eV9sZWFmX3B0LCB0cnVlKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDg6MzMuNTU5NjQ1OTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0Njg2ODU5NTA4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdGRwX21tdV96YXBfbGVhZnNcIixcbiAgICBcImt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZVwiLFxuICAgIFwidGRwX2l0ZXJfcmVzdGFydFwiLFxuICAgIFwidGRwX2l0ZXJfbmV4dFwiLFxuICAgIFwidGRwX2l0ZXJfc2tpcF9jaGlsZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBLVk0gVERQIE1NVSB0byBza2lwIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgd2hlbiB6YXBwaW5nLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgbG9naWMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgd2hlbiBydW5uaW5nIEtWTSBndWVzdHMgYW5kIHBlcmZvcm1pbmcgbWVtb3J5IHVubWFwcGluZyBvciB6YXBwaW5nIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM3NjY4ODIzYzg2MWZiNGU2NjFlNDAzZTE3NWQ1ZmYwMzg2MjI2YWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwODowODozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmggYi9hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oXG5pbmRleCA3M2NkY2JjY2M4OWU4Li41MzA1YWEzZTY4OGI3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaFxuQEAgLTk1LDYgKzk1LDggQEAgc3RydWN0IGt2bV9tbXVfcGFnZSB7XG4gXHR9O1xuIFxuIFx0Ym9vbCBoYXNfbWFwcGVkX2hvc3RfbW1pbztcbitcdC8qIFREUCBNTVUgb25seTogbm8gcHJlc2VudCBsZWFmIFNQVEVzIGV4aXN0IGluIHRoaXMgbGVhZiBwYWdlIHRhYmxlLiAqL1xuK1x0Ym9vbCB0ZHBfbW11X2VtcHR5X2xlYWZfcHQ7XG4gXG4gXHR1bmlvbiB7XG4gXHRcdC8qIFRoZXNlIHR3byBtZW1iZXJzIGFyZW4ndCB1c2VkIGZvciBURFAgTU1VICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jXG5pbmRleCA5ZTE3YmZhODA5MDExLi4xZDg3ZGIxNGE2YWU4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmNcbkBAIC0yMyw2ICsyMyw3IEBAIHN0YXRpYyB2b2lkIHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuIHZvaWQgdGRwX2l0ZXJfcmVzdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4ge1xuIFx0aXRlci1cdTAwM2V5aWVsZGVkID0gZmFsc2U7XG4rXHRpdGVyLVx1MDAzZXNraXBfY2hpbGQgPSBmYWxzZTtcbiBcdGl0ZXItXHUwMDNleWllbGRlZF9nZm4gPSBpdGVyLVx1MDAzZW5leHRfbGFzdF9sZXZlbF9nZm47XG4gXHRpdGVyLVx1MDAzZWxldmVsID0gaXRlci1cdTAwM2Vyb290X2xldmVsO1xuIFxuQEAgLTE2Nyw5ICsxNjgsMTEgQEAgdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0aWYgKHRyeV9zdGVwX2Rvd24oaXRlcikpXG4rXHRpZiAoIWl0ZXItXHUwMDNlc2tpcF9jaGlsZCBcdTAwMjZcdTAwMjYgdHJ5X3N0ZXBfZG93bihpdGVyKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aXRlci1cdTAwM2Vza2lwX2NoaWxkID0gZmFsc2U7XG4rXG4gXHRkbyB7XG4gXHRcdGlmICh0cnlfc3RlcF9zaWRlKGl0ZXIpKVxuIFx0XHRcdHJldHVybjtcbkBAIC0xNzcsMyArMTgwLDggQEAgdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbiBcdGl0ZXItXHUwMDNldmFsaWQgPSBmYWxzZTtcbiB9XG4gXG4rdm9pZCB0ZHBfaXRlcl9za2lwX2NoaWxkKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbit7XG4rXHRXQVJOX09OX09OQ0UoaXRlci1cdTAwM2V5aWVsZGVkKTtcbitcdGl0ZXItXHUwMDNlc2tpcF9jaGlsZCA9IHRydWU7XG4rfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaCBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaFxuaW5kZXggMzY0YzVkYTZjNDk5MS4uNDdhYzhiZDQzNzk0MyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oXG5AQCAtMTE0LDYgKzExNCwxMSBAQCBzdHJ1Y3QgdGRwX2l0ZXIge1xuIFx0ICogbGV2ZWwgaW5zdGVhZCBvZiBhZHZhbmNpbmcgdG8gdGhlIG5leHQgZW50cnkuXG4gXHQgKi9cbiBcdGJvb2wgeWllbGRlZDtcbitcdC8qXG4rXHQgKiBUcnVlIGlmIHRkcF9pdGVyX25leHQoKSBzaG91bGQgc2tpcCB0aGUgY2hpbGQgcGFnZSB0YWJsZSByZWZlcmVuY2VkIGJ5XG4rXHQgKiB0aGUgY3VycmVudCBTUFRFLCBpbnN0ZWFkIG9mIGRlc2NlbmRpbmcgaW50byBpdC5cbitcdCAqL1xuK1x0Ym9vbCBza2lwX2NoaWxkO1xuIH07XG4gXG4gLypcbkBAIC0xMzksNSArMTQ0LDYgQEAgdm9pZCB0ZHBfaXRlcl9zdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG4gXHRcdCAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cyk7XG4gdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcik7XG4gdm9pZCB0ZHBfaXRlcl9yZXN0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcik7XG4rdm9pZCB0ZHBfaXRlcl9za2lwX2NoaWxkKHN0cnVjdCB0ZHBfaXRlciAqaXRlcik7XG4gXG4gI2VuZGlmIC8qIF9fS1ZNX1g4Nl9NTVVfVERQX0lURVJfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcbmluZGV4IGMxY2JhZTY1ZDIzOWYuLjg0ZTE4YmQ2ZTc3NzkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY1xuKysrIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcbkBAIC0yMzgsNiArMjM4LDcgQEAgc3RhdGljIHZvaWQgdGRwX21tdV9pbml0X3NwKHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLCB0ZHBfcHRlcF90IHNwdGVwLFxuIFx0c3AtXHUwMDNlZ2ZuID0gZ2ZuO1xuIFx0c3AtXHUwMDNlcHRlcCA9IHNwdGVwO1xuIFx0c3AtXHUwMDNldGRwX21tdV9wYWdlID0gdHJ1ZTtcbitcdHNwLVx1MDAzZXRkcF9tbXVfZW1wdHlfbGVhZl9wdCA9IGZhbHNlO1xuIFxuIFx0dHJhY2Vfa3ZtX21tdV9nZXRfcGFnZShzcCwgdHJ1ZSk7XG4gfVxuQEAgLTUyNyw2ICs1MjgsMTAgQEAgc3RhdGljIGludCBfX2hhbmRsZV9jaGFuZ2VkX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCxcbiBcdGlmIChpc19sZWFmKVxuIFx0XHRjaGVja19zcHRlX3dyaXRhYmxlX2ludmFyaWFudHMobmV3X3NwdGUpO1xuIFxuK1x0aWYgKGlzX2xlYWYgXHUwMDI2XHUwMDI2ICF3YXNfbGVhZiBcdTAwMjZcdTAwMjYgc3AtXHUwMDNldGRwX21tdV9wYWdlIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNwLVx1MDAzZXJvbGUubGV2ZWwgPT0gUEdfTEVWRUxfNEspXG4rXHRcdFdSSVRFX09OQ0Uoc3AtXHUwMDNldGRwX21tdV9lbXB0eV9sZWFmX3B0LCBmYWxzZSk7XG4rXG4gXHQvKlxuIFx0ICogVGhlIG9ubHkgdGltZXMgYSBTUFRFIHNob3VsZCBiZSBjaGFuZ2VkIGZyb20gYSBub24tcHJlc2VudCB0b1xuIFx0ICogbm9uLXByZXNlbnQgc3RhdGUgaXMgd2hlbiBhbiBNTUlPIGVudHJ5IGlzIGluc3RhbGxlZC9tb2RpZmllZC9cbkBAIC05MjMsNiArOTI4LDM5IEBAIGJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgdGRwX21tdV9yYW5nZV9jb3ZlcnNfbGVhZl9wdChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsXG4rXHRcdFx0XHRcdCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kKVxuK3tcbitcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwO1xuK1xuK1x0c3AgPSBzcHRlcF90b19zcChyY3VfZGVyZWZlcmVuY2UoaXRlci1cdTAwM2VzcHRlcCkpO1xuK1x0cmV0dXJuIHNwLVx1MDAzZWdmbiBcdTAwM2U9IHN0YXJ0IFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHNwLVx1MDAzZWdmbiArIEtWTV9QQUdFU19QRVJfSFBBR0UoUEdfTEVWRUxfMk0pIFx1MDAzYz0gZW5kO1xuK31cbitcbitzdGF0aWMgYm9vbCB0ZHBfbW11X2Nhbl9za2lwX2xlYWZfcHQoc3RydWN0IHRkcF9pdGVyICppdGVyLFxuK1x0XHRcdFx0ICAgICBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kKVxuK3tcbitcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKmNoaWxkX3NwO1xuK1xuK1x0aWYgKGl0ZXItXHUwMDNlbGV2ZWwgIT0gUEdfTEVWRUxfMk0gfHxcbitcdCAgICAhaXNfc2hhZG93X3ByZXNlbnRfcHRlKGl0ZXItXHUwMDNlb2xkX3NwdGUpIHx8XG4rXHQgICAgaXNfbGFzdF9zcHRlKGl0ZXItXHUwMDNlb2xkX3NwdGUsIGl0ZXItXHUwMDNlbGV2ZWwpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoaXRlci1cdTAwM2VnZm4gXHUwMDNjIHN0YXJ0IHx8XG4rXHQgICAgaXRlci1cdTAwM2VnZm4gKyBLVk1fUEFHRVNfUEVSX0hQQUdFKFBHX0xFVkVMXzJNKSBcdTAwM2UgZW5kKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKlxuK1x0ICogU2tpcCByZXRhaW5lZCBlbXB0eSA0SyBsZWFmIHBhZ2UgdGFibGVzIHdpdGhvdXQgdW5saW5raW5nIHRoZW0sIHNvXG4rXHQgKiBmdXR1cmUgZmF1bHRzIGNhbiByZXVzZSB0aGUgcGFnaW5nIHN0cnVjdHVyZS5cbitcdCAqL1xuK1x0Y2hpbGRfc3AgPSBzcHRlX3RvX2NoaWxkX3NwKGl0ZXItXHUwMDNlb2xkX3NwdGUpO1xuK1x0cmV0dXJuIGNoaWxkX3NwLVx1MDAzZXJvbGUubGV2ZWwgPT0gUEdfTEVWRUxfNEsgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgUkVBRF9PTkNFKGNoaWxkX3NwLVx1MDAzZXRkcF9tbXVfZW1wdHlfbGVhZl9wdCk7XG4rfVxuK1xuIC8qXG4gICogSWYgY2FuX3lpZWxkIGlzIHRydWUsIHdpbGwgcmVsZWFzZSB0aGUgTU1VIGxvY2sgYW5kIHJlc2NoZWR1bGUgaWYgdGhlXG4gICogc2NoZWR1bGVyIG5lZWRzIHRoZSBDUFUgb3IgdGhlcmUgaXMgY29udGVudGlvbiBvbiB0aGUgTU1VIGxvY2suIElmIHRoaXNcbkBAIC05MzQsOCArOTcyLDEwIEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcbiBcdFx0XHQgICAgICBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGNhbl95aWVsZCwgYm9vbCBmbHVzaClcbiB7XG4gXHRzdHJ1Y3QgdGRwX2l0ZXIgaXRlcjtcbitcdGJvb2wgbWF5X3NraXBfbGVhZl9wdHM7XG4gXG4gXHRlbmQgPSBtaW4oZW5kLCB0ZHBfbW11X21heF9nZm5fZXhjbHVzaXZlKCkpO1xuK1x0bWF5X3NraXBfbGVhZl9wdHMgPSBlbmQgLSBzdGFydCBcdTAwM2U9IEtWTV9QQUdFU19QRVJfSFBBR0UoUEdfTEVWRUxfMk0pO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuIFxuQEAgLTk0OCwxOCArOTg4LDM0IEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoIWlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSB8fFxuLVx0XHQgICAgIWlzX2xhc3Rfc3B0ZShpdGVyLm9sZF9zcHRlLCBpdGVyLmxldmVsKSlcbitcdFx0aWYgKG1heV9za2lwX2xlYWZfcHRzIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgdGRwX21tdV9jYW5fc2tpcF9sZWFmX3B0KFx1MDAyNml0ZXIsIHN0YXJ0LCBlbmQpKSB7XG4rXHRcdFx0dGRwX2l0ZXJfc2tpcF9jaGlsZChcdTAwMjZpdGVyKTtcbiBcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuIFxuLVx0XHR0ZHBfbW11X2l0ZXJfc2V0X3NwdGUoa3ZtLCBcdTAwMjZpdGVyLCBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSk7XG4rXHRcdGlmIChpc19zaGFkb3dfcHJlc2VudF9wdGUoaXRlci5vbGRfc3B0ZSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpIHtcbitcdFx0XHR0ZHBfbW11X2l0ZXJfc2V0X3NwdGUoa3ZtLCBcdTAwMjZpdGVyLFxuK1x0XHRcdFx0XHQgICAgICBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSk7XG4gXG4tXHRcdC8qXG4tXHRcdCAqIFphcHBpbmdzIFNQVEVzIGluIGludmFsaWQgcm9vdHMgZG9lc24ndCByZXF1aXJlIGEgVExCIGZsdXNoLFxuLVx0XHQgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuXG4tXHRcdCAqL1xuLVx0XHRpZiAoIXJvb3QtXHUwMDNlcm9sZS5pbnZhbGlkKVxuLVx0XHRcdGZsdXNoID0gdHJ1ZTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFphcHBpbmdzIFNQVEVzIGluIGludmFsaWQgcm9vdHMgZG9lc24ndCByZXF1aXJlIGEgVExCIGZsdXNoLFxuK1x0XHRcdCAqIHNlZSBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoKSBmb3IgZGV0YWlscy5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoIXJvb3QtXHUwMDNlcm9sZS5pbnZhbGlkKVxuK1x0XHRcdFx0Zmx1c2ggPSB0cnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtYXlfc2tpcF9sZWFmX3B0cyBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGl0ZXIubGV2ZWwgPT0gUEdfTEVWRUxfNEsgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBzcHRlX2luZGV4KHJjdV9kZXJlZmVyZW5jZShpdGVyLnNwdGVwKSkgPT0gU1BURV9FTlRfUEVSX1BBR0UgLSAxIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgdGRwX21tdV9yYW5nZV9jb3ZlcnNfbGVhZl9wdChcdTAwMjZpdGVyLCBzdGFydCwgZW5kKSkge1xuK1x0XHRcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwO1xuK1xuK1x0XHRcdHNwID0gc3B0ZXBfdG9fc3AocmN1X2RlcmVmZXJlbmNlKGl0ZXIuc3B0ZXApKTtcbitcdFx0XHRXUklURV9PTkNFKHNwLVx1MDAzZXRkcF9tbXVfZW1wdHlfbGVhZl9wdCwgdHJ1ZSk7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDg6MzMuNTU5NjQ3ODVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDg3MjY2MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSB4ODYgTU1VIFBhdGNoIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IG5lZWQgZnV6emluZyBhdHRlbnRpb24uIFRoZSBzY29wZSBpcyBwcmV0dHkgY2xlYXI6IGl0J3MgdG91Y2hpbmcgS1ZNIHg4NiBNTVUgY29kZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCB0aGUgVERQIE1NVS4gVGhlIG1vZGlmaWVkIGZpbGVzIOKAkyBgbW11X2ludGVybmFsLmhgLCBgdGRwX2l0ZXIuY2AsIGB0ZHBfaXRlci5oYCwgYW5kIGB0ZHBfbW11LmNgIOKAkyBjb25maXJtIHRoYXQuXG5cbkl0J3MgaW50cm9kdWNpbmcgY2hhbmdlcyB0byB0aGUgYHN0cnVjdCBrdm1fbW11X3BhZ2VgLCBhZGRpbmcgYHRkcF9tbXVfZW1wdHlfbGVhZl9wdGAsIGFuZCBtb2RpZnlpbmcgYHN0cnVjdCB0ZHBfaXRlcmAgd2l0aCB0aGUgYWRkaXRpb24gb2YgYHNraXBfY2hpbGRgIGFuZCBgdGRwX2l0ZXJfc2tpcF9jaGlsZCgpYC4gSXQncyBhbHNvIG1vZGlmeWluZyBgdGRwX21tdV96YXBfbGVhZnMoKWAgdG8gc2tpcCBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uLCBubyBkb3VidC4gQ29uc2lkZXJpbmcgdGhpcyBkaXJlY3RseSBpbXBhY3RzIGNvcmUgS1ZNIFREUCBNTVUgbG9naWMsIGFuZCBLVk0gaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgaW4gc3l6a2FsbGVyLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggb3VyIHRpbWUuIFdvcnRoRnV6emluZyA9IFRydWUuXG5cbk5vdywgdGhlIHJlYWwgd29yayBiZWdpbnM6IHBpbnBvaW50aW5nIHRoZSByaWdodCB0YXJnZXRzIGZvciBmdXp6aW5nLiBXZSBuZWVkIHRvIGlkZW50aWZ5IEZvY3VzU3ltYm9scywgd2hpY2ggYXJlIHRoZSBub24taG90LXBhdGgga2VybmVsIGZ1bmN0aW9ucyB0byBmb2N1cyBmdXp6aW5nIG9uLCBhbmQgZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IEVuYWJsZUNvbmZpZ3MuXG5cbkxldCdzIGRpZyBpbnRvIGB0ZHBfbW11LmNgIGFuZCBgdGRwX2l0ZXIuY2AuIEZyb20gYSBxdWljayBza2ltLCB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGFkZGVkL21vZGlmaWVkIGFyZTogYHRkcF9pdGVyX3Jlc3RhcnRgLCBgdGRwX2l0ZXJfbmV4dGAsIGB0ZHBfaXRlcl9za2lwX2NoaWxkYCwgYHRkcF9tbXVfaW5pdF9zcGAsIGBfX2hhbmRsZV9jaGFuZ2VkX3NwdGVgLCBga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZWAgKGNvbnRleHQpLCBgdGRwX21tdV9yYW5nZV9jb3ZlcnNfbGVhZl9wdGAgYW5kIGB0ZHBfbW11X2Nhbl9za2lwX2xlYWZfcHRgLCB3aGljaCBhcmUgYm90aCBuZXcgZnVuY3Rpb25zLiBBbmQgbGFzdGx5LCBgdGRwX21tdV96YXBfbGVhZnNgLCB3aGljaCBpcyBhbHNvIGJlaW5nIG1vZGlmaWVkLlxuXG5IbW0sIGB0ZHBfbW11X3phcF9sZWFmc2AgaXMgc3RhdGljLiBUaGF0IG1lYW5zIHdlIG5lZWQgdG8gdHJhY2Ugd2hlcmUgaXQgKmlzKiBjYWxsZWQuIFRoaXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTE5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDg6NDIuMDQ2OTE3NDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzMTc4MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGRwX21tdV96YXBfbGVhZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL21tdS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz03MDQwPXZvaWQga3ZtX3phcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm5fc3RhcnQsIGdmbl90IGdmbl9lbmQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwNTUtXFx0aWYgKHRkcF9tbXVfZW5hYmxlZClcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjcwNTY6XFx0XFx0Zmx1c2ggPSBrdm1fdGRwX21tdV96YXBfbGVhZnMoa3ZtLCBnZm5fc3RhcnQsIGdmbl9lbmQsIGZsdXNoKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwNTctXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz05NDE9c3RhdGljIGJvb2wgdGRwX21tdV9jYW5fc2tpcF9sZWFmX3B0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcixcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTk3MC0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo5NzE6c3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTk3Mi1cXHRcXHRcXHQgICAgICBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGNhbl95aWVsZCwgYm9vbCBmbHVzaClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMzQtICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTAzNTpib29sIGt2bV90ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgZmx1c2gpXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzNi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMDQwLVxcdGZvcl9lYWNoX3ZhbGlkX3RkcF9tbXVfcm9vdF95aWVsZF9zYWZlKGt2bSwgcm9vdCwgLTEpXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTA0MTpcXHRcXHRmbHVzaCA9IHRkcF9tbXVfemFwX2xlYWZzKGt2bSwgcm9vdCwgc3RhcnQsIGVuZCwgdHJ1ZSwgZmx1c2gpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwNDItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz0xMzYyPWJvb2wga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTM3MC1cXHRfX2Zvcl9lYWNoX3RkcF9tbXVfcm9vdF95aWVsZF9zYWZlKGt2bSwgcm9vdCwgcmFuZ2UtXFx1MDAzZXNsb3QtXFx1MDAzZWFzX2lkLCB0eXBlcylcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxMzcxOlxcdFxcdGZsdXNoID0gdGRwX21tdV96YXBfbGVhZnMoa3ZtLCByb290LCByYW5nZS1cXHUwMDNlc3RhcnQsIHJhbmdlLVxcdTAwM2VlbmQsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTM3Mi1cXHRcXHRcXHRcXHRcXHQgIHJhbmdlLVxcdTAwM2VtYXlfYmxvY2ssIGZsdXNoKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oPTU3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tbXVfcGFnZSAqdGRwX21tdV9nZXRfcm9vdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC02NS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaDo2Njpib29sIGt2bV90ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgZmx1c2gpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTY3LWJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjA4OjQyLjA5MjI0MjE3NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTQ1NTYwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSdzIFRyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXIgKFRMQikgSW52YWxpZGF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBLVk0gaGFuZGxlcyBUTEIgaW52YWxpZGF0aW9ucywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIFRyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXIgKFREUCkgTU1VLiBNeSBpbW1lZGlhdGUgaW50ZXJlc3QgaXMgaW4gdW5kZXJzdGFuZGluZyB0aGUgZmxvdyBvZiBpbnZhbGlkYXRpb25zIHdoZW4gYSBHdWVzdCBQaHlzaWNhbCBGcmFtZSBOdW1iZXIgKEdGTikgaXMgbW9kaWZpZWQgb3IgdW5tYXBwZWQuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgZnVuY3Rpb24gaGVyZSBpcyBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCwgd2hpY2ggaXMgaW50cmlndWluZy4gSSBzZWUgaXQncyBjYWxsZWQgZnJvbSBga3ZtX3phcF9nZm5fcmFuZ2VgLCB3aGljaCBwcm92aWRlcyB0aGUgYnJvYWRlciBjb250ZXh0LiBJbnRlcmVzdGluZywgYGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZWAgYWxzbyBjYWxscyBgdGRwX21tdV96YXBfbGVhZnNgLiBTbyB0aGVzZSB0d28gZnVuY3Rpb25zIGFyZSBjbG9zZWx5IGxpbmtlZCwgYW5kIHRoZXkgcHJvYmFibHkgaGFuZGxlIHRoZSBjcml0aWNhbCBsb2dpYyBmb3IgcmVtb3Zpbmcgc3RhbGUgZW50cmllcyBmcm9tIHRoZSBUTEIuIEdpdmVuIHRoaXMsIEkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbiBub3cgb24gdGhvcm91Z2hseSBkaXNzZWN0aW5nIGJvdGggYGt2bV90ZHBfbW11X3phcF9sZWFmc2AgYW5kIGBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgemFwX2xlYWZzYCB3b3JrcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYm90aCBjYWxscy4gVGhpcyBhbmFseXNpcyB3aWxsIGdldCBtZSB0byB0aGUgaGVhcnQgb2YgdGhlIGludmFsaWRhdGlvbiBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUzMywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjA4OjQ2LjA4NjgwMDk4NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU5NTI2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdGRwX21tdV96YXBfbGVhZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTcwNDA9dm9pZCBrdm1femFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbl9zdGFydCwgZ2ZuX3QgZ2ZuX2VuZClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzA1NS1cXHRpZiAodGRwX21tdV9lbmFibGVkKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzA1NjpcXHRcXHRmbHVzaCA9IGt2bV90ZHBfbW11X3phcF9sZWFmcyhrdm0sIGdmbl9zdGFydCwgZ2ZuX2VuZCwgZmx1c2gpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzA1Ny1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jPTk3MT1zdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMDM0LSAqL1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjEwMzU6Ym9vbCBrdm1fdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGZsdXNoKVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMzYte1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg9NTc9c3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21tdV9wYWdlICp0ZHBfbW11X2dldF9yb290KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTY1LVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oOjY2OmJvb2wga3ZtX3RkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBmbHVzaCk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtNjctYm9vbCBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDg6NDYuMTMyNDAwNjcxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5MDk4NzU0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlYC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgdW5tYXBwaW5nIGd1ZXN0IHBoeXNpY2FsIGZyYW1lIG51bWJlcnMgKEdGTnMpIGZyb20gdGhlIGhvc3QncyBUcmFuc2xhdGlvbiBMb29rYXNpZGUgQnVmZmVycyAoVExCcykgd2hlbiB1c2luZyBUYWdnZWQgRGF0YSBQYWdlIChURFApIE1NVS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4YWN0IGJlaGF2aW9yLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyB0aGUgZm9sbG93aW5nOiBob3cgZWZmaWNpZW50bHkgaXQgaGFuZGxlcyBsYXJnZSB1bm1hcCByZWdpb25zLCBpdHMgbG9ja2luZyBzdHJhdGVneSB0byBlbnN1cmUgY29uc2lzdGVuY3kgd2l0aCBvdGhlciBNTVUgb3BlcmF0aW9ucywgd2hldGhlciBpdCBpbnRlcmFjdHMgY29ycmVjdGx5IHdpdGggc2hhZG93IHBhZ2UgdGFibGVzLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIHBhZ2UgZmF1bHRzIGR1cmluZyB0aGUgdW5tYXBwaW5nIHByb2Nlc3MuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBjb2RlIHBhdGggdG8gZW5zdXJlIHdlJ3JlIGF2b2lkaW5nIGFueSB1bm5lY2Vzc2FyeSBUTEIgZmx1c2hlcyBhbmQgdGhhdCB3ZSdyZSBtaW5pbWl6aW5nIHRoZSBwZXJmb3JtYW5jZSBpbXBhY3Qgb24gcnVubmluZyBWTXMuIFNwZWNpZmljYWxseSwgSSdsbCBwYXkgYXR0ZW50aW9uIHRvIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2l0aCBvdGhlciBNTVUgb3BlcmF0aW9ucy4gSSdsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0IGNvcnJlY3RseSBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgc3RhdGVzIG9mIHRoZSBHRk5zIGJlaW5nIHVubWFwcGVkLiBJIGFsc28gd2FudCB0byBjaGVjayBmb3IgYW55IG1lbW9yeSBsZWFrcyBhbmQgZW5zdXJlIHRoZXJlIGFyZSBubyBpc3N1ZXMgd2l0aCB0aGUgaGFuZGxpbmcgb2YgdmlydHVhbCBtZW1vcnkgcmVzb3VyY2VzLiBHaXZlbiB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgZnVuY3Rpb24gZm9yIHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcyBpbiBhIFREUCBlbnZpcm9ubWVudCwgdW5kZXJzdGFuZGluZyBpdHMgaW50ZXJuYWxzIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MgaXMgcGFyYW1vdW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDc4LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDg6NDkuNDIzMzkwMjA2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Njc1NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTY2Mz1ib29sIGt2bV91bm1hcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE2ODMtXFx0aWYgKHRkcF9tbXVfZW5hYmxlZClcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE2ODQ6XFx0XFx0Zmx1c2ggPSBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2Uoa3ZtLCByYW5nZSwgZmx1c2gpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTY4NS1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jPTEyNzI9aW50IGt2bV90ZHBfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMzYxLS8qIFVzZWQgYnkgbW11IG5vdGlmaWVyIHZpYSBrdm1fdW5tYXBfZ2ZuX3JhbmdlKCkgKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxMzYyOmJvb2wga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlLFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEzNjMtXFx0XFx0XFx0XFx0IGJvb2wgZmx1c2gpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaD03ND1pbnQga3ZtX3RkcF9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdCk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtNzUtXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg6NzY6Ym9vbCBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtNzctXFx0XFx0XFx0XFx0IGJvb2wgZmx1c2gpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODowODo0OS40NzEwNjk4MTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDU0NTAxNDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSBHRk4gVW5tYXBwaW5nKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBrbm93IGBrdm1femFwX2dmbl9yYW5nZWAgYW5kIGBrdm1fdW5tYXBfZ2ZuX3JhbmdlYCBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIGhhbmRsaW5nIEd1ZXN0IEZyYW1lIE51bWJlciAoR0ZOKSB1bm1hcHBpbmcgd2l0aGluIEtWTS4gVGhhdCBtYWtlcyBzZW5zZSwgdGhleSBzb3VuZCBsaWtlIHRoZSBsb2dpY2FsIGZ1bmN0aW9ucyB0byBvcmNoZXN0cmF0ZSB0aGUgcHJvY2Vzcy4gTm93IHRoZSBjcnVjaWFsIHBhcnQgaXMgdW5kZXJzdGFuZGluZyB0aGUgKmNvbnRleHQqIG9mIHRob3NlIGNhbGxzLiBXaGVyZSBhcmUgdGhleSBiZWluZyBpbnZva2VkIGZyb20/IEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBnZXQgYSByZWFsIGhhbmRsZSBvbiB0aGUgZGlmZmVyZW50IHVubWFwcGluZyBzY2VuYXJpb3MuIExldCdzIHN0YXJ0IGJ5IGZpbmRpbmcgYWxsIHRoZSBwbGFjZXMgYGt2bV96YXBfZ2ZuX3JhbmdlYCBpcyBhY3R1YWxseSAqY2FsbGVkKiBmcm9tLiBUaGF0J2xsIGlsbHVtaW5hdGUgdGhlIHRyaWdnZXJzIGZvciBHRk4gdW5tYXBwaW5nIGFuZCB0aGUgYXNzb2NpYXRlZCBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM1NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjA4OjUzLjkyNTU3Mzc4NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3ODk0MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3phcF9nZm5fcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTcwMDY9c3RhdGljIGJvb2wga3ZtX3JtYXBfemFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbl9zdGFydCwgZ2ZuX3QgZ2ZuX2VuZClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzAzOS0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjcwNDA6dm9pZCBrdm1femFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbl9zdGFydCwgZ2ZuX3QgZ2ZuX2VuZClcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwNDEte1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MDY0LX1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjcwNjU6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV96YXBfZ2ZuX3JhbmdlKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwNjYtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ5MzE9dm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUwMTYtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MDE3OlxcdGt2bV96YXBfZ2ZuX3JhbmdlKGt2bSwgZ2ZuLCBnZm4gKyBQVFJTX1BFUl9QTUQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTAxOC1vdXQ6XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA5NTQ9dm9pZCBfX2t2bV9zZXRfb3JfY2xlYXJfYXBpY3ZfaW5oaWJpdChzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA5OTAtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwOTkxOlxcdFxcdFxcdGt2bV96YXBfZ2ZuX3JhbmdlKGt2bSwgZ2ZuLCBnZm4rMSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwOTkyLVxcdFxcdFxcdHNyY3VfcmVhZF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSwgaWR4KTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xNDA4ND1zdGF0aWMgdm9pZCBrdm1fbm9uY29oZXJlbnRfZG1hX2Fzc2lnbm1lbnRfc3RhcnRfb3Jfc3RvcChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTQwOTUtXFx0aWYgKGt2bV9jaGVja19oYXNfcXVpcmsoa3ZtLCBLVk1fWDg2X1FVSVJLX0lHTk9SRV9HVUVTVF9QQVQpKVxcbmFyY2gveDg2L2t2bS94ODYuYzoxNDA5NjpcXHRcXHRrdm1femFwX2dmbl9yYW5nZShrdm0sIGdwYV90b19nZm4oMCksIGdwYV90b19nZm4ofjBVTEwpKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTQwOTctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODowODo1My45NzEzNjc1NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzk3MjI4MTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIEtWTSdzIE1NVSBVbm1hcHBpbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgS1ZNIGhhbmRsZXMgdW5tYXBwaW5nIGd1ZXN0IHBoeXNpY2FsIGZyYW1lIG51bWJlcnMsIHNwZWNpZmljYWxseSB3aGVuIHRyaWdnZXJlZCBieSBNTVUgbm90aWZpZXJzLiBUaGUgZW50cnkgcG9pbnQgaXMgYGt2bV91bm1hcF9nZm5fcmFuZ2VgLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgd2l0aGluIHRoZSBjb250ZXh0IG9mIFRyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXIgKFRMQikgaW52YWxpZGF0aW9uLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IHRoZSBjb2RlIGRldGVybWluZXMgd2hlbiBhIHBhZ2UgdGFibGUgZW50cnkgKFBURSkgb3IgYSBsZWFmIHBhZ2UgdGFibGUgY2FuIGJlIHNraXBwZWQgZHVyaW5nIHRoZSB1bm1hcHBpbmcgcHJvY2VzcywgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gVHJhbnNsYXRpb24gTG9va2FzaWRlIEJ1ZmZlciAoVExCKSBvcGVyYXRpb25zLiBUaGUgbmV3IGB0ZHBfbW11X2Nhbl9za2lwX2xlYWZfcHRgIGFuZCBgdGRwX21tdV9yYW5nZV9jb3ZlcnNfbGVhZl9wdGAgZnVuY3Rpb25zIHNlZW0ga2V5IGhlcmUsIGFuZCBJIHN1c3BlY3QgdGhleSdyZSBpbmZsdWVuY2luZyB0aGUgYmVoYXZpb3Igb2YgYHRkcF9tbXVfemFwX2xlYWZzYC4gVGhlIHBhdGNoIG1lbnRpb25zIG1vZGlmaWNhdGlvbnMgdG8gYHRkcF9tbXVfemFwX2xlYWZzYCwgc28gSSBzaG91bGQgYW5hbHl6ZSB0aGF0LlxuXG5TcGVjaWZpY2FsbHksIEkgd2FudCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgdW5tYXBwaW5nLiBUaGUgbW9zdCByZWxldmFudCBmdW5jdGlvbnMgdG8gZXhhbWluZSBjbG9zZWx5IGFyZSBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCwgYGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZWAsIGBrdm1femFwX2dmbl9yYW5nZWAsIGFuZCBvZiBjb3Vyc2UgYGt2bV91bm1hcF9nZm5fcmFuZ2VgIGl0c2VsZi5cblxuSSdsbCBzdGFydCBieSBleGFtaW5pbmcgYGt2bV90ZHBfbW11X3phcF9sZWFmc2AgYW5kIGBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VgIGluIGBhcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY2AsIGFzIHRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb25zIGZvciB0aGlzIHNwZWNpZmljIHBhdGguXG5cbk9mIGNvdXJzZSwgdGhlIEtWTSBjb25maWd1cmF0aW9uIGlzIGVzc2VudGlhbCBoZXJlLCBzbyBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgdG8gZW5zdXJlIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIHNldC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM5NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODowODo1OS43Njg1OTc4MDJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzczMjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMwLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMyOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDg6NTkuODE5Mzc2NzI3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTI4MzY0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBDb25maWd1cmF0aW9uIGFuZCBDb25kaXRpb25hbCBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgS1ZNYCBhbmQgYEtWTV9YODZgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBlbHNlIHJlbGV2YW50IHRvIHRoZSBLVk0gc2V0dXAuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuVGhlbiBJIHNlZSB0aGUgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGBhcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY2AuIFRoaXMgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIElzIHRoaXMgY29kZSBvbmx5IGluY2x1ZGVkIHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXM/IEtub3dpbmcgaWYgYHRkcF9tbXUuY2AgaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseSBpcyBhYnNvbHV0ZWx5IGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGJ1aWxkIHN5c3RlbSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHRoYXQgZ292ZXJuIGl0cyBpbmNsdXNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzE1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDk6MDMuNzcyMjE2MjkyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDc4NTg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHBfbW11XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vTWFrZWZpbGU9OD1rdm0teVxcdFxcdFxcdCs9IHg4Ni5vIGVtdWxhdGUubyBpcnEubyBsYXBpYy5vIGNwdWlkLm8gcG11Lm8gbXRyci5vIFxcXFxcXG4tLVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xMC1cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MTE6a3ZtLSQoQ09ORklHX1g4Nl82NCkgKz0gbW11L3RkcF9pdGVyLm8gbW11L3RkcF9tbXUub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xMi1rdm0tJChDT05GSUdfS1ZNX0lPQVBJQykgKz0gaTgyNTkubyBpODI1NC5vIGlvYXBpYy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjA5OjAzLjgyMzAwNTY3N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzQzMDU5ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQncyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IGBDT05GSUdfWDg2XzY0YCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQuIFRoYXQncyB0aGUgYmFzZWxpbmUuIFRoZSBjb3JlIGNvbmZpZ3MgSSdtIGRlYWxpbmcgd2l0aCBhcmUgYEtWTWAgYW5kLCBvZiBjb3Vyc2UsIGBYODZfNjRgLiBObyBzdXJwcmlzZXMgdGhlcmUuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aG9zZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHRoZSBUcmFuc3BhcmVudCBQYWdlIFNoYXJpbmcgKFRQUykgcHJvY2VzcyB3aXRoaW4gS1ZNOiBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCwgYGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZWAsIGB0ZHBfaXRlcl9yZXN0YXJ0YCwgYHRkcF9pdGVyX25leHRgLCBhbmQgYHRkcF9pdGVyX3NraXBfY2hpbGRgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBkcml2aW5nIHRoZSBUUFMgbG9naWMgdGhhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9yb3VnaGx5LlxuXG5Ib2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gbWFrZSBhIG1lbnRhbCBub3RlIHRvIGNoZWNrIGlmIGB0ZHBfaXRlcl9yZXN0YXJ0YCwgYHRkcF9pdGVyX25leHRgLCBhbmQgYHRkcF9pdGVyX3NraXBfY2hpbGRgIGFyZSBleHBvcnRlZCBzeW1ib2xzLiBBcmUgdGhleSBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlLCBvciBhcmUgdGhleSBpbnRlcm5hbCB0byB0aGUgVFBTIGltcGxlbWVudGF0aW9uPyBUaGF04oCZcyBpbXBvcnRhbnQgZm9yIGRldGVybWluaW5nIGhvdyBtb2R1bGFyIHRoaXMgVFBTIGltcGxlbWVudGF0aW9uIGlzIGFuZCBmb3IgcmVhc29uaW5nIGFib3V0IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZXNlIHN5bWJvbHMgYXJlIHZpc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzQ1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjA5OjA5LjE2NjA2NzUyNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2NTA1OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGRwX2l0ZXJfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMTEtICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jOjEyOnN0YXRpYyB2b2lkIHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoc3RydWN0IHRkcF9pdGVyICppdGVyKVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xMy17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMjItICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jOjIzOnZvaWQgdGRwX2l0ZXJfcmVzdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTI0LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0zMC1cXHRpdGVyLVxcdTAwM2VnZm4gPSBnZm5fcm91bmRfZm9yX2xldmVsKGl0ZXItXFx1MDAzZW5leHRfbGFzdF9sZXZlbF9nZm4sIGl0ZXItXFx1MDAzZWxldmVsKTtcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM6MzE6XFx0dGRwX2l0ZXJfcmVmcmVzaF9zcHRlcChpdGVyKTtcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMzItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMzktICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jOjQwOnZvaWQgdGRwX2l0ZXJfc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy00MS1cXHRcXHQgICAgaW50IG1pbl9sZXZlbCwgZ2ZuX3QgbmV4dF9sYXN0X2xldmVsX2dmbiwgZ2ZuX3QgZ2ZuX2JpdHMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtNTYtXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jOjU3OlxcdHRkcF9pdGVyX3Jlc3RhcnQoaXRlcik7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTU4LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYz04MT1zdGF0aWMgYm9vbCB0cnlfc3RlcF9kb3duKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xMDAtXFx0aXRlci1cXHUwMDNlZ2ZuID0gZ2ZuX3JvdW5kX2Zvcl9sZXZlbChpdGVyLVxcdTAwM2VuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBpdGVyLVxcdTAwM2VsZXZlbCk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jOjEwMTpcXHR0ZHBfaXRlcl9yZWZyZXNoX3NwdGVwKGl0ZXIpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xMDItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM9MTM2PXN0YXRpYyBib29sIHRyeV9zdGVwX3VwKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xNDItXFx0aXRlci1cXHUwMDNlZ2ZuID0gZ2ZuX3JvdW5kX2Zvcl9sZXZlbChpdGVyLVxcdTAwM2VnZm4sIGl0ZXItXFx1MDAzZWxldmVsKTtcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM6MTQzOlxcdHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoaXRlcik7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTE0NC1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xNjMtICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jOjE2NDp2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xNjUte1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xNjYtXFx0aWYgKGl0ZXItXFx1MDAzZXlpZWxkZWQpIHtcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM6MTY3OlxcdFxcdHRkcF9pdGVyX3Jlc3RhcnQoaXRlcik7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTE2OC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMTgyLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYzoxODM6dm9pZCB0ZHBfaXRlcl9za2lwX2NoaWxkKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMTg0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDk6MDkuMjEyNzI0NDcxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTQ4MjYwNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBUcmFpbiBvZiBUaG91Z2h0KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGVzZSB0aGluZ3Mg4oCTIHdoYXRldmVyIFwidGhleVwiIGFyZSBpbiB0aGlzIGNvbnRleHQg4oCTIHRoZXkgYXJlbid0IGp1c3Qgb25lIHVuY2hhbmdpbmcgdGhpbmcuIFRoZXkncmUgZHluYW1pYywgYW5kIHRoYXQgbWVhbnMgdGhleSBzaG91bGQgaGF2ZSBkaXN0aW5jdCBzeW1ib2xpYyByZXByZXNlbnRhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHNvbWUgYWRkaXRpb25zIHRvIHRoZSBzeW1ib2xpYyBzZXQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGluY29ycG9yYXRlIGBrdm1fdGRwX21tdV96YXBfbGVhZnNgLCBga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlYCwgYHRkcF9pdGVyX3Jlc3RhcnRgLCBgdGRwX2l0ZXJfbmV4dGAsIGFuZCBgdGRwX2l0ZXJfc2tpcF9jaGlsZGAgaW50byB0aGUgcGljdHVyZS5cblxuSG9sZCBvbiwgYmVmb3JlIEkgbW92ZSBvbiwgSSBzaG91bGQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhhdCBmaXJzdCBvbmUuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpZiBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCBpcywgaW4gZmFjdCwgc3RhdGljLiBUaGlzIGlzIGNydWNpYWwgZm9yIGNvbnNpc3RlbmN5LiBHb3R0YSBnZXQgdGhhdCBiaXQgcmlnaHQgZmlyc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjQ0LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDk6MTMuMTA3NTUzNTczWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ1MDg3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdGRwX21tdV96YXBfbGVhZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM9OTcxPXN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMzQtICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTAzNTpib29sIGt2bV90ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgZmx1c2gpXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjA5OjEzLjE1MzAxMTYwOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTkwMTUzMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gVERQIE1NVSBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCBpc24ndCBhIHN0YXRpYyBjb21wb25lbnQsIGdvdCBpdC4gTm93LCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgYEtWTWAgYW5kIGBYODZfNjRgLiBIbW0sIGBYODZfNjRgIGlzIGFuIGFyY2hpdGVjdHVyZSBjb25maWcgdGhvdWdoLCBub3QgYSBmZWF0dXJlLiBCdXQgdGhlIHByb21wdCBzYWlkIHRvIGluY2x1ZGUgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncywgYW5kIGBYODZfNjRgIGlzIHByZXR0eSBzdGFuZGFyZCBmb3IgNjQtYml0IHg4Niwgc28gaXQgZG9lc24ndCByZWFsbHkgbWF0dGVyIGlmIEkgaW5jbHVkZSBpdCBvciBub3QuIEknbGwganVzdCBrZWVwIGl0IHNpbXBsZSBhbmQgc3RpY2sgd2l0aCBgS1ZNYCBmb3Igbm93LlxuXG5SaWdodCwgcmV2aWV3aW5nIHRoZSBjaGFuZ2U6IHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgS1ZNJ3MgVERQIE1NVSwgc3BlY2lmaWNhbGx5IHRvIG9wdGltaXplIHRoZSB6YXBwaW5nIHByb2Nlc3MgYnkgc2tpcHBpbmcgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcy4gSXQncyBhIGZ1bmN0aW9uYWwgb3B0aW1pemF0aW9uIHdpdGhpbiB0aGUgcGFnZSB0YWJsZSBtYW5hZ2VtZW50LCBtYWtpbmcgaXQgYW4gaW50ZXJlc3RpbmcgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQg4oCTIEtWTSBiZWluZyB0aGUga2V5IOKAkyB3aGljaCBtZWFucyBgV29ydGhGdXp6aW5nYCBpcyBhYnNvbHV0ZWx5IHRydWUgaGVyZS5cblxuU28sIGZvciBmdXp6aW5nIGZvY3VzLCB0aGUgaW1wb3J0YW50IHN5bWJvbHMgYXJlOiBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCwgYGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZWAsIGB0ZHBfaXRlcl9yZXN0YXJ0YCwgYHRkcF9pdGVyX25leHRgLCBhbmQgYHRkcF9pdGVyX3NraXBfY2hpbGRgLlxuXG5BbmQgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb24gaXMgZGVmaW5pdGVseSBqdXN0IGBLVk1gLlxuXG5UaGUgcmVhc29uaW5nIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyBURFAgTU1VIHRvIHNraXAgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcywgb3B0aW1pemluZyBob3cgd2UgaGFuZGxlIHBhZ2UgdGFibGVzLiBUaGlzIGNvZGUgaXMgYWN0aXZlIGR1cmluZyBLVk0gZ3Vlc3QgbWVtb3J5IHVubWFwcGluZyBvciB6YXBwaW5nLCBtYWtpbmcgaXQgYSBjcml0aWNhbCBhcmVhIHRvIGFuYWx5emUuXG5cbkFscmlnaHQsIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NjAsIk91dHB1dFRva2VucyI6MTQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjA5OjIwLjM0MzE2ODcyNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MDY5MzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdGRwX21tdV96YXBfbGVhZnNcIixcbiAgICBcImt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZVwiLFxuICAgIFwidGRwX2l0ZXJfcmVzdGFydFwiLFxuICAgIFwidGRwX2l0ZXJfbmV4dFwiLFxuICAgIFwidGRwX2l0ZXJfc2tpcF9jaGlsZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBLVk0gVERQIE1NVSB0byBza2lwIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgd2hlbiB6YXBwaW5nLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgbG9naWMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgd2hlbiBydW5uaW5nIEtWTSBndWVzdHMgYW5kIHBlcmZvcm1pbmcgbWVtb3J5IHVubWFwcGluZyBvciB6YXBwaW5nIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3RkcF9tbXVfemFwX2xlYWZzXCIsXG4gICAgXCJrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VcIixcbiAgICBcInRkcF9pdGVyX3Jlc3RhcnRcIixcbiAgICBcInRkcF9pdGVyX25leHRcIixcbiAgICBcInRkcF9pdGVyX3NraXBfY2hpbGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIFREUCBNTVUgdG8gc2tpcCBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzIHdoZW4gemFwcGluZywgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgcGFnZSB0YWJsZSBtYW5hZ2VtZW50IGxvZ2ljLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHdoZW4gcnVubmluZyBLVk0gZ3Vlc3RzIGFuZCBwZXJmb3JtaW5nIG1lbW9yeSB1bm1hcHBpbmcgb3IgemFwcGluZyBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODowOToyMC40MjgyNDU0OTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5Mjc3OTA5MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDk6MjAuNDI4ODQ0OTU2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI5Mjc3MzA1ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyBURFAgTU1VIHRvIHNraXAgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyBkdXJpbmcgemFwcGluZy4gSXQgaW50cm9kdWNlcyB0d28gbmV3IGJvb2xlYW4gZmllbGRzOiBgdGRwX21tdV9lbXB0eV9sZWFmX3B0YCBpbiBgc3RydWN0IGt2bV9tbXVfcGFnZWAgYW5kIGBza2lwX2NoaWxkYCBpbiBgc3RydWN0IHRkcF9pdGVyYC4gQm90aCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCB1cG9uIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiAoYHRkcF9tbXVfaW5pdF9zcGAgYW5kIGB0ZHBfaXRlcl9yZXN0YXJ0YCByZXNwZWN0aXZlbHkpLiBUaGVzZSBzdHJ1Y3R1cmVzIGFyZSBpbnRlcm5hbCB0byBLVk0gYW5kIGFyZSBub3QgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM3NjY4ODIzYzg2MWZiNGU2NjFlNDAzZTE3NWQ1ZmYwMzg2MjI2YWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwODowODozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmggYi9hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oXG5pbmRleCA3M2NkY2JjY2M4OWU4Li41MzA1YWEzZTY4OGI3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaFxuQEAgLTk1LDYgKzk1LDggQEAgc3RydWN0IGt2bV9tbXVfcGFnZSB7XG4gXHR9O1xuIFxuIFx0Ym9vbCBoYXNfbWFwcGVkX2hvc3RfbW1pbztcbitcdC8qIFREUCBNTVUgb25seTogbm8gcHJlc2VudCBsZWFmIFNQVEVzIGV4aXN0IGluIHRoaXMgbGVhZiBwYWdlIHRhYmxlLiAqL1xuK1x0Ym9vbCB0ZHBfbW11X2VtcHR5X2xlYWZfcHQ7XG4gXG4gXHR1bmlvbiB7XG4gXHRcdC8qIFRoZXNlIHR3byBtZW1iZXJzIGFyZW4ndCB1c2VkIGZvciBURFAgTU1VICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jXG5pbmRleCA5ZTE3YmZhODA5MDExLi4xZDg3ZGIxNGE2YWU4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmNcbkBAIC0yMyw2ICsyMyw3IEBAIHN0YXRpYyB2b2lkIHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuIHZvaWQgdGRwX2l0ZXJfcmVzdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4ge1xuIFx0aXRlci1cdTAwM2V5aWVsZGVkID0gZmFsc2U7XG4rXHRpdGVyLVx1MDAzZXNraXBfY2hpbGQgPSBmYWxzZTtcbiBcdGl0ZXItXHUwMDNleWllbGRlZF9nZm4gPSBpdGVyLVx1MDAzZW5leHRfbGFzdF9sZXZlbF9nZm47XG4gXHRpdGVyLVx1MDAzZWxldmVsID0gaXRlci1cdTAwM2Vyb290X2xldmVsO1xuIFxuQEAgLTE2Nyw5ICsxNjgsMTEgQEAgdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0aWYgKHRyeV9zdGVwX2Rvd24oaXRlcikpXG4rXHRpZiAoIWl0ZXItXHUwMDNlc2tpcF9jaGlsZCBcdTAwMjZcdTAwMjYgdHJ5X3N0ZXBfZG93bihpdGVyKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aXRlci1cdTAwM2Vza2lwX2NoaWxkID0gZmFsc2U7XG4rXG4gXHRkbyB7XG4gXHRcdGlmICh0cnlfc3RlcF9zaWRlKGl0ZXIpKVxuIFx0XHRcdHJldHVybjtcbkBAIC0xNzcsMyArMTgwLDggQEAgdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbiBcdGl0ZXItXHUwMDNldmFsaWQgPSBmYWxzZTtcbiB9XG4gXG4rdm9pZCB0ZHBfaXRlcl9za2lwX2NoaWxkKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbit7XG4rXHRXQVJOX09OX09OQ0UoaXRlci1cdTAwM2V5aWVsZGVkKTtcbitcdGl0ZXItXHUwMDNlc2tpcF9jaGlsZCA9IHRydWU7XG4rfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaCBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaFxuaW5kZXggMzY0YzVkYTZjNDk5MS4uNDdhYzhiZDQzNzk0MyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oXG5AQCAtMTE0LDYgKzExNCwxMSBAQCBzdHJ1Y3QgdGRwX2l0ZXIge1xuIFx0ICogbGV2ZWwgaW5zdGVhZCBvZiBhZHZhbmNpbmcgdG8gdGhlIG5leHQgZW50cnkuXG4gXHQgKi9cbiBcdGJvb2wgeWllbGRlZDtcbitcdC8qXG4rXHQgKiBUcnVlIGlmIHRkcF9pdGVyX25leHQoKSBzaG91bGQgc2tpcCB0aGUgY2hpbGQgcGFnZSB0YWJsZSByZWZlcmVuY2VkIGJ5XG4rXHQgKiB0aGUgY3VycmVudCBTUFRFLCBpbnN0ZWFkIG9mIGRlc2NlbmRpbmcgaW50byBpdC5cbitcdCAqL1xuK1x0Ym9vbCBza2lwX2NoaWxkO1xuIH07XG4gXG4gLypcbkBAIC0xMzksNSArMTQ0LDYgQEAgdm9pZCB0ZHBfaXRlcl9zdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG4gXHRcdCAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cyk7XG4gdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcik7XG4gdm9pZCB0ZHBfaXRlcl9yZXN0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcik7XG4rdm9pZCB0ZHBfaXRlcl9za2lwX2NoaWxkKHN0cnVjdCB0ZHBfaXRlciAqaXRlcik7XG4gXG4gI2VuZGlmIC8qIF9fS1ZNX1g4Nl9NTVVfVERQX0lURVJfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcbmluZGV4IGMxY2JhZTY1ZDIzOWYuLjg0ZTE4YmQ2ZTc3NzkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY1xuKysrIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcbkBAIC0yMzgsNiArMjM4LDcgQEAgc3RhdGljIHZvaWQgdGRwX21tdV9pbml0X3NwKHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLCB0ZHBfcHRlcF90IHNwdGVwLFxuIFx0c3AtXHUwMDNlZ2ZuID0gZ2ZuO1xuIFx0c3AtXHUwMDNlcHRlcCA9IHNwdGVwO1xuIFx0c3AtXHUwMDNldGRwX21tdV9wYWdlID0gdHJ1ZTtcbitcdHNwLVx1MDAzZXRkcF9tbXVfZW1wdHlfbGVhZl9wdCA9IGZhbHNlO1xuIFxuIFx0dHJhY2Vfa3ZtX21tdV9nZXRfcGFnZShzcCwgdHJ1ZSk7XG4gfVxuQEAgLTUyNyw2ICs1MjgsMTAgQEAgc3RhdGljIGludCBfX2hhbmRsZV9jaGFuZ2VkX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCxcbiBcdGlmIChpc19sZWFmKVxuIFx0XHRjaGVja19zcHRlX3dyaXRhYmxlX2ludmFyaWFudHMobmV3X3NwdGUpO1xuIFxuK1x0aWYgKGlzX2xlYWYgXHUwMDI2XHUwMDI2ICF3YXNfbGVhZiBcdTAwMjZcdTAwMjYgc3AtXHUwMDNldGRwX21tdV9wYWdlIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNwLVx1MDAzZXJvbGUubGV2ZWwgPT0gUEdfTEVWRUxfNEspXG4rXHRcdFdSSVRFX09OQ0Uoc3AtXHUwMDNldGRwX21tdV9lbXB0eV9sZWFmX3B0LCBmYWxzZSk7XG4rXG4gXHQvKlxuIFx0ICogVGhlIG9ubHkgdGltZXMgYSBTUFRFIHNob3VsZCBiZSBjaGFuZ2VkIGZyb20gYSBub24tcHJlc2VudCB0b1xuIFx0ICogbm9uLXByZXNlbnQgc3RhdGUgaXMgd2hlbiBhbiBNTUlPIGVudHJ5IGlzIGluc3RhbGxlZC9tb2RpZmllZC9cbkBAIC05MjMsNiArOTI4LDM5IEBAIGJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgdGRwX21tdV9yYW5nZV9jb3ZlcnNfbGVhZl9wdChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsXG4rXHRcdFx0XHRcdCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kKVxuK3tcbitcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwO1xuK1xuK1x0c3AgPSBzcHRlcF90b19zcChyY3VfZGVyZWZlcmVuY2UoaXRlci1cdTAwM2VzcHRlcCkpO1xuK1x0cmV0dXJuIHNwLVx1MDAzZWdmbiBcdTAwM2U9IHN0YXJ0IFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHNwLVx1MDAzZWdmbiArIEtWTV9QQUdFU19QRVJfSFBBR0UoUEdfTEVWRUxfMk0pIFx1MDAzYz0gZW5kO1xuK31cbitcbitzdGF0aWMgYm9vbCB0ZHBfbW11X2Nhbl9za2lwX2xlYWZfcHQoc3RydWN0IHRkcF9pdGVyICppdGVyLFxuK1x0XHRcdFx0ICAgICBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kKVxuK3tcbitcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKmNoaWxkX3NwO1xuK1xuK1x0aWYgKGl0ZXItXHUwMDNlbGV2ZWwgIT0gUEdfTEVWRUxfMk0gfHxcbitcdCAgICAhaXNfc2hhZG93X3ByZXNlbnRfcHRlKGl0ZXItXHUwMDNlb2xkX3NwdGUpIHx8XG4rXHQgICAgaXNfbGFzdF9zcHRlKGl0ZXItXHUwMDNlb2xkX3NwdGUsIGl0ZXItXHUwMDNlbGV2ZWwpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoaXRlci1cdTAwM2VnZm4gXHUwMDNjIHN0YXJ0IHx8XG4rXHQgICAgaXRlci1cdTAwM2VnZm4gKyBLVk1fUEFHRVNfUEVSX0hQQUdFKFBHX0xFVkVMXzJNKSBcdTAwM2UgZW5kKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKlxuK1x0ICogU2tpcCByZXRhaW5lZCBlbXB0eSA0SyBsZWFmIHBhZ2UgdGFibGVzIHdpdGhvdXQgdW5saW5raW5nIHRoZW0sIHNvXG4rXHQgKiBmdXR1cmUgZmF1bHRzIGNhbiByZXVzZSB0aGUgcGFnaW5nIHN0cnVjdHVyZS5cbitcdCAqL1xuK1x0Y2hpbGRfc3AgPSBzcHRlX3RvX2NoaWxkX3NwKGl0ZXItXHUwMDNlb2xkX3NwdGUpO1xuK1x0cmV0dXJuIGNoaWxkX3NwLVx1MDAzZXJvbGUubGV2ZWwgPT0gUEdfTEVWRUxfNEsgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgUkVBRF9PTkNFKGNoaWxkX3NwLVx1MDAzZXRkcF9tbXVfZW1wdHlfbGVhZl9wdCk7XG4rfVxuK1xuIC8qXG4gICogSWYgY2FuX3lpZWxkIGlzIHRydWUsIHdpbGwgcmVsZWFzZSB0aGUgTU1VIGxvY2sgYW5kIHJlc2NoZWR1bGUgaWYgdGhlXG4gICogc2NoZWR1bGVyIG5lZWRzIHRoZSBDUFUgb3IgdGhlcmUgaXMgY29udGVudGlvbiBvbiB0aGUgTU1VIGxvY2suIElmIHRoaXNcbkBAIC05MzQsOCArOTcyLDEwIEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcbiBcdFx0XHQgICAgICBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGNhbl95aWVsZCwgYm9vbCBmbHVzaClcbiB7XG4gXHRzdHJ1Y3QgdGRwX2l0ZXIgaXRlcjtcbitcdGJvb2wgbWF5X3NraXBfbGVhZl9wdHM7XG4gXG4gXHRlbmQgPSBtaW4oZW5kLCB0ZHBfbW11X21heF9nZm5fZXhjbHVzaXZlKCkpO1xuK1x0bWF5X3NraXBfbGVhZl9wdHMgPSBlbmQgLSBzdGFydCBcdTAwM2U9IEtWTV9QQUdFU19QRVJfSFBBR0UoUEdfTEVWRUxfMk0pO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuIFxuQEAgLTk0OCwxOCArOTg4LDM0IEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoIWlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSB8fFxuLVx0XHQgICAgIWlzX2xhc3Rfc3B0ZShpdGVyLm9sZF9zcHRlLCBpdGVyLmxldmVsKSlcbitcdFx0aWYgKG1heV9za2lwX2xlYWZfcHRzIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgdGRwX21tdV9jYW5fc2tpcF9sZWFmX3B0KFx1MDAyNml0ZXIsIHN0YXJ0LCBlbmQpKSB7XG4rXHRcdFx0dGRwX2l0ZXJfc2tpcF9jaGlsZChcdTAwMjZpdGVyKTtcbiBcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuIFxuLVx0XHR0ZHBfbW11X2l0ZXJfc2V0X3NwdGUoa3ZtLCBcdTAwMjZpdGVyLCBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSk7XG4rXHRcdGlmIChpc19zaGFkb3dfcHJlc2VudF9wdGUoaXRlci5vbGRfc3B0ZSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpIHtcbitcdFx0XHR0ZHBfbW11X2l0ZXJfc2V0X3NwdGUoa3ZtLCBcdTAwMjZpdGVyLFxuK1x0XHRcdFx0XHQgICAgICBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSk7XG4gXG4tXHRcdC8qXG4tXHRcdCAqIFphcHBpbmdzIFNQVEVzIGluIGludmFsaWQgcm9vdHMgZG9lc24ndCByZXF1aXJlIGEgVExCIGZsdXNoLFxuLVx0XHQgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuXG4tXHRcdCAqL1xuLVx0XHRpZiAoIXJvb3QtXHUwMDNlcm9sZS5pbnZhbGlkKVxuLVx0XHRcdGZsdXNoID0gdHJ1ZTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFphcHBpbmdzIFNQVEVzIGluIGludmFsaWQgcm9vdHMgZG9lc24ndCByZXF1aXJlIGEgVExCIGZsdXNoLFxuK1x0XHRcdCAqIHNlZSBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoKSBmb3IgZGV0YWlscy5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoIXJvb3QtXHUwMDNlcm9sZS5pbnZhbGlkKVxuK1x0XHRcdFx0Zmx1c2ggPSB0cnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtYXlfc2tpcF9sZWFmX3B0cyBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGl0ZXIubGV2ZWwgPT0gUEdfTEVWRUxfNEsgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBzcHRlX2luZGV4KHJjdV9kZXJlZmVyZW5jZShpdGVyLnNwdGVwKSkgPT0gU1BURV9FTlRfUEVSX1BBR0UgLSAxIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgdGRwX21tdV9yYW5nZV9jb3ZlcnNfbGVhZl9wdChcdTAwMjZpdGVyLCBzdGFydCwgZW5kKSkge1xuK1x0XHRcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwO1xuK1xuK1x0XHRcdHNwID0gc3B0ZXBfdG9fc3AocmN1X2RlcmVmZXJlbmNlKGl0ZXIuc3B0ZXApKTtcbitcdFx0XHRXUklURV9PTkNFKHNwLVx1MDAzZXRkcF9tbXVfZW1wdHlfbGVhZl9wdCwgdHJ1ZSk7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDk6MjAuNDI4ODQ1ODM2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MTc5MzI4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gVERQIE1NVSBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIHRoZSBLVk0ncyBUd28tRGltZW5zaW9uYWwgUGFnaW5nIE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQgKFREUCBNTVUpIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgZm9yIHg4Ni4gVGhlIGNvcmUgaWRlYSBpcyB0byBza2lwIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgZHVyaW5nIHRoZSBcInphcHBpbmdcIiBwcm9jZXNzLCB3aGljaCBpcyBhIGNvbW1vbiBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gd2hlbiByZW1vdmluZyBtYXBwaW5ncy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGFkZGluZyBhIG5ldyBib29sZWFuIGZpZWxkLCBgdGRwX21tdV9lbXB0eV9sZWFmX3B0YCwgdG8gdGhlIGBzdHJ1Y3Qga3ZtX21tdV9wYWdlYC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU2luY2UgYHN0cnVjdCBrdm1fbW11X3BhZ2VgIGlzIGFsbG9jYXRlZCB2aWEgYSBga21lbV9jYWNoZWAsIGl0IHNob3VsZCBiZSBzYWZlIGluIG1vc3QgY2FzZXMsIGJ1dCB0aGUgYWRkZWQgYHRkcF9tbXVfZW1wdHlfbGVhZl9wdGAgbmVlZHMgY2FyZWZ1bCBzY3J1dGlueS4gQ3J1Y2lhbGx5LCBpcyB0aGlzIGBzdHJ1Y3Qga3ZtX21tdV9wYWdlYCBldmVyIGV4cG9zZWQgdG8gdXNlcnNwYWNlPyBObywgZ29vZCwgaXQncyBpbnRlcm5hbCB0byBLVk0ncyBzaGFkb3cgcGFnaW5nL1REUCBpbXBsZW1lbnRhdGlvbi4gVGhhdCBzaWduaWZpY2FudGx5IHJlZHVjZXMgdGhlIGF0dGFjayBzdXJmYWNlLlxuXG5Ob3csIHRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgYSBgc2tpcF9jaGlsZGAgZmxhZyB0byBgc3RydWN0IHRkcF9pdGVyYC4gVGhpcyBpdGVyYXRvciBpcyB1c2VkIHdpdGhpbiBmdW5jdGlvbnMgbGlrZSBgdGRwX21tdV96YXBfbGVhZnNgLiBIbW0sIGBzdHJ1Y3QgdGRwX2l0ZXIgaXRlcjtgIGlzIGRlY2xhcmVkIGFzIGEgbG9jYWwgdmFyaWFibGUuIE9rYXksIGFuZCBpdCdzIGluaXRpYWxpemVkIGJ5IGB0ZHBfaXRlcl9zdGFydCgpYC4gTGV0J3MgY29uZmlybSB0aGF0IHRoYXQgaW5pdGlhbGl6YXRpb24gY29ycmVjdGx5IHNldHMgYHNraXBfY2hpbGRgLCBhcyB0aGF0J3MgdGhlIG5ldyBjb25kaXRpb25hbCBsb2dpYy4gSSBuZWVkIHRvIGRpZyBpbnRvIGB0ZHBfaXRlcl9zdGFydCgpYCBhbmQgdmVyaWZ5IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGF0IG5ldyBmaWVsZCB3aXRoaW4gdGhlIGl0ZXJhdG9yLiBHb3R0YSBtYWtlIHN1cmUgaXQncyBhbGwgaGFuZGxlZCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MTYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODowOToyNy4xNDY3ODI5ODFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjYwNDgyMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGRwX2l0ZXJfc3RhcnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jPTIzPXZvaWQgdGRwX2l0ZXJfcmVzdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMzktICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jOjQwOnZvaWQgdGRwX2l0ZXJfc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy00MS1cXHRcXHQgICAgaW50IG1pbl9sZXZlbCwgZ2ZuX3QgbmV4dF9sYXN0X2xldmVsX2dmbiwgZ2ZuX3QgZ2ZuX2JpdHMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg9NzY9c3RydWN0IHRkcF9pdGVyIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0xMjgtI2RlZmluZSBmb3JfZWFjaF90ZHBfcHRlX21pbl9sZXZlbChpdGVyLCBrdm0sIHJvb3QsIG1pbl9sZXZlbCwgc3RhcnQsIGVuZClcXHRcXHQgIFxcXFxcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6MTI5OlxcdGZvciAodGRwX2l0ZXJfc3RhcnQoXFx1MDAyNml0ZXIsIHJvb3QsIG1pbl9sZXZlbCwgc3RhcnQsIGt2bV9nZm5fcm9vdF9iaXRzKGt2bSwgcm9vdCkpOyBcXFxcXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTEzMC1cXHQgICAgIGl0ZXIudmFsaWQgXFx1MDAyNlxcdTAwMjYgaXRlci5nZm4gXFx1MDAzYyBlbmQ7XFx0XFx0XFx0XFx0XFx0XFx0ICBcXFxcXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtMTMzLSNkZWZpbmUgZm9yX2VhY2hfdGRwX3B0ZV9taW5fbGV2ZWxfYWxsKGl0ZXIsIHJvb3QsIG1pbl9sZXZlbClcXHRcXHRcXFxcXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oOjEzNDpcXHRmb3IgKHRkcF9pdGVyX3N0YXJ0KFxcdTAwMjZpdGVyLCByb290LCBtaW5fbGV2ZWwsIDAsIDApO1xcdFxcdFxcXFxcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtMTM1LVxcdFxcdGl0ZXIudmFsaWQgXFx1MDAyNlxcdTAwMjYgaXRlci5nZm4gXFx1MDAzYyB0ZHBfbW11X21heF9nZm5fZXhjbHVzaXZlKCk7XFx0XFxcXFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oPTE0MT10ZHBfcHRlcF90IHNwdGVfdG9fY2hpbGRfcHQodTY0IHB0ZSwgaW50IGxldmVsKTtcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtMTQyLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaDoxNDM6dm9pZCB0ZHBfaXRlcl9zdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTE0NC1cXHRcXHQgICAgaW50IG1pbl9sZXZlbCwgZ2ZuX3QgbmV4dF9sYXN0X2xldmVsX2dmbiwgZ2ZuX3QgZ2ZuX2JpdHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODowOToyOC44NzI4MzgzM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzczMjcyMDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgSW1wbGVtZW50YXRpb24gb2YgYHRkcF9pdGVyX3N0YXJ0YCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRoaW5raW5nLCBcIkxldCdzIGNyYWNrIG9wZW4gdGhpcyBjb2RlIGFuZCBzZWUgd2hhdCBgdGRwX2l0ZXJfc3RhcnRgIGlzICpyZWFsbHkqIGRvaW5nLlwiIE5vIGhhbmQtd2F2aW5nLCBubyBhYnN0cmFjdCBjb25jZXB0cyDigJMgSSB3YW50IHRvIHNlZSB0aGUgbml0dHktZ3JpdHR5LiBXaGF0J3MgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBpcyBpdCB0b3VjaGluZz8gSXMgaXQgYWxsb2NhdGluZyBtZW1vcnk/IFNldHRpbmcgdXAgc29tZSBzb3J0IG9mIGludGVybmFsIHN0YXRlPyBXaGF0IGVkZ2UgY2FzZXMgZG9lcyBpdCBoYW5kbGUgKG9yICpub3QqIGhhbmRsZSwgbW9yZSBpbXBvcnRhbnRseSk/IFdoZXJlIGFyZSB0aGUgcG90ZW50aWFsIGdvdGNoYXM/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCB1bmRlcnN0YW5kaW5nIHRoaXMgaXMgYWJzb2x1dGVseSBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgd2hvbGUgaXRlcmF0aXZlIHByb2Nlc3MgaXMgc3VwcG9zZWQgdG8gd29yay4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgZ3VuLCBhbmQga25vd2luZyBleGFjdGx5IGhvdyBpdCdzIGZpcmVkIGlzIGVzc2VudGlhbC4gTGV0J3Mgc2VlIGhvdyBpdCBnZXRzIHRoaXMgaXRlcmF0b3Igb2ZmIHRoZSBncm91bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4OTksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODowOTozNC4yNDYxMTQzMzdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Njg3ODA5NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCB0ZHBfaXRlcl9zdGFydFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM9MjM9dm9pZCB0ZHBfaXRlcl9yZXN0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0zOS0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM6NDA6dm9pZCB0ZHBfaXRlcl9zdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTQxLVxcdFxcdCAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cylcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaD0xNDE9dGRwX3B0ZXBfdCBzcHRlX3RvX2NoaWxkX3B0KHU2NCBwdGUsIGludCBsZXZlbCk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTE0Mi1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6MTQzOnZvaWQgdGRwX2l0ZXJfc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0xNDQtXFx0XFx0ICAgIGludCBtaW5fbGV2ZWwsIGdmbl90IG5leHRfbGFzdF9sZXZlbF9nZm4sIGdmbl90IGdmbl9iaXRzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDk6MzUuOTE0OTA0MDEyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDU1OTM2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHRkcF9pdGVyLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIEtWTSBNTVUgaW1wbGVtZW50YXRpb24gZm9yIHg4Niwgc3BlY2lmaWNhbGx5IHRoZSBgdGRwX2l0ZXIuY2AgZmlsZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBvZiB0aGUga2V5IGNvbmNlcHRzIGF0IHBsYXkgaGVyZSDigJMgbmVzdGVkIHBhZ2luZywgdHJhbnNsYXRpb24gbG9va2FzaWRlIGJ1ZmZlciAoVExCKSBtYW5hZ2VtZW50LCBhbmQgdGhlIGNvbXBsZXhpdGllcyBvZiB0cmF2ZXJzaW5nIHRoZSBwYWdlIHRhYmxlcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBNeSBmb2N1cyB3aWxsIGJlIGFyb3VuZCBsaW5lIDQwLCBhcyB0aGF0J3MgdHlwaWNhbGx5IHdoZXJlIGludGVyZXN0aW5nIGluaXRpYWxpemF0aW9uIG9yIGVudHJ5IHBvaW50cyByZXNpZGUgaW4gbWFueSBrZXJuZWwgbW9kdWxlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIG1vZHVsZSBoYW5kbGVzIHRoZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIGluIGEgS1ZNIGNvbnRleHQuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSBNTVUgaXRlcmF0b3Igd29ya3MgYXQgdGhlIGxlYWYgbGV2ZWwuIE15IGFpbSBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDg5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDk6MzkuNjYwNTAyMzg5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRcXHRpdGVyLVxcdTAwM2VnZm4gPSBnZm5fcm91bmRfZm9yX2xldmVsKGl0ZXItXFx1MDAzZW5leHRfbGFzdF9sZXZlbF9nZm4sIGl0ZXItXFx1MDAzZWxldmVsKTtcXG4gIDMxOlxcdFxcdHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoaXRlcik7XFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdGl0ZXItXFx1MDAzZXZhbGlkID0gdHJ1ZTtcXG4gIDM0OlxcdH1cXG4gIDM1OlxcdFxcbiAgMzY6XFx0LypcXG4gIDM3OlxcdCAqIFNldHMgYSBURFAgaXRlcmF0b3IgdG8gd2FsayBhIHByZS1vcmRlciB0cmF2ZXJzYWwgb2YgdGhlIHBhZ2luZyBzdHJ1Y3R1cmVcXG4gIDM4OlxcdCAqIHJvb3RlZCBhdCByb290X3B0LCBzdGFydGluZyB3aXRoIHRoZSB3YWxrIHRvIHRyYW5zbGF0ZSBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLlxcbiAgMzk6XFx0ICovXFxuICA0MDpcXHR2b2lkIHRkcF9pdGVyX3N0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlciwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcXG4gIDQxOlxcdFxcdFxcdCAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cylcXG4gIDQyOlxcdHtcXG4gIDQzOlxcdFxcdGlmIChXQVJOX09OX09OQ0UoIXJvb3QgfHwgKHJvb3QtXFx1MDAzZXJvbGUubGV2ZWwgXFx1MDAzYyAxKSB8fFxcbiAgNDQ6XFx0XFx0XFx0XFx0IChyb290LVxcdTAwM2Vyb2xlLmxldmVsIFxcdTAwM2UgUFQ2NF9ST09UX01BWF9MRVZFTCkgfHxcXG4gIDQ1OlxcdFxcdFxcdFxcdCAoZ2ZuX2JpdHMgXFx1MDAyNlxcdTAwMjYgbmV4dF9sYXN0X2xldmVsX2dmbiBcXHUwMDNlPSBnZm5fYml0cykpKSB7XFxuICA0NjpcXHRcXHRcXHRpdGVyLVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbiAgNDc6XFx0XFx0XFx0cmV0dXJuO1xcbiAgNDg6XFx0XFx0fVxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHRpdGVyLVxcdTAwM2VuZXh0X2xhc3RfbGV2ZWxfZ2ZuID0gbmV4dF9sYXN0X2xldmVsX2dmbjtcXG4gIDUxOlxcdFxcdGl0ZXItXFx1MDAzZWdmbl9iaXRzID0gZ2ZuX2JpdHM7XFxuICA1MjpcXHRcXHRpdGVyLVxcdTAwM2Vyb290X2xldmVsID0gcm9vdC1cXHUwMDNlcm9sZS5sZXZlbDtcXG4gIDUzOlxcdFxcdGl0ZXItXFx1MDAzZW1pbl9sZXZlbCA9IG1pbl9sZXZlbDtcXG4gIDU0OlxcdFxcdGl0ZXItXFx1MDAzZXB0X3BhdGhbaXRlci1cXHUwMDNlcm9vdF9sZXZlbCAtIDFdID0gKHRkcF9wdGVwX3Qpcm9vdC1cXHUwMDNlc3B0O1xcbiAgNTU6XFx0XFx0aXRlci1cXHUwMDNlYXNfaWQgPSBrdm1fbW11X3BhZ2VfYXNfaWQocm9vdCk7XFxuICA1NjpcXHRcXG4gIDU3OlxcdFxcdHRkcF9pdGVyX3Jlc3RhcnQoaXRlcik7XFxuICA1ODpcXHR9XFxuICA1OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDk6MzkuNjYwNTc0MDE5WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDQ1NTU1MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MgaW4gS1ZNIE1NVSBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEknbSBmb2N1c2luZyBvbiB0aGUgaW50cm9kdWN0aW9uIG9mIGBza2lwX2NoaWxkYCBpbiB0aGUgYHRkcF9pdGVyYCBzdHJ1Y3QgYW5kIGB0ZHBfbW11X2VtcHR5X2xlYWZfcHRgIGluIGBrdm1fbW11X3BhZ2VgLCB0byBvcHRpbWl6ZSB0aGUgS1ZNIE1NVSBieSBza2lwcGluZyBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy5cblxuVGhlIGB0ZHBfaXRlcl9zdGFydGAgZnVuY3Rpb24gY2FsbHMgYHRkcF9pdGVyX3Jlc3RhcnRgLCBhbmQgd2l0aGluIGB0ZHBfaXRlcl9yZXN0YXJ0YCwgYGl0ZXItXHUwMDNlc2tpcF9jaGlsZGAgaXMgZXhwbGljaXRseSBzZXQgdG8gYGZhbHNlYC4gVGhhdCBsb29rcyBnb29kLiBNb3Zpbmcgb24sIHdoZW4gaW5pdGlhbGl6aW5nIGEgbmV3IGBrdm1fbW11X3BhZ2VgIHZpYSBgdGRwX21tdV9pbml0X3NwYCwgIGBzcC1cdTAwM2V0ZHBfbW11X2VtcHR5X2xlYWZfcHRgIGlzIGFsc28gc2V0IHRvIGBmYWxzZWAuIFNvLCBib3RoIG5ldyBmaWVsZHMgYXJlIGJlaW5nIHByb3Blcmx5IGluaXRpYWxpemVkLlxuXG5TaW5jZSBib3RoIHN0cnVjdHMgYXJlIGludGVybmFsIHRvIEtWTSBhbmQgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBJJ20gY29uZmlkZW50IHRoYXQgdGhlIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGVybXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuICBDb250cm9sIGZsb3cgcmVsaWVzIG9uIGluaXRpYWxpemVkIHZhcmlhYmxlcywgc28gdGhhdCdzIGEgcGx1cy4gVGhlIGRlc2lnbiBpcyBwdXJlbHkgYW4gb3B0aW1pemF0aW9uIGZvciBLVk0ncyBNTVUsIHNraXBwaW5nIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMsIHRoYXQgY291bGQgaGF2ZSB0aGUgcG90ZW50aWFsIG9mIHJlc3VsdGluZyBpbiBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gQnV0IHRob3NlIGlzc3VlcyB3aWxsIGJlIGNhdWdodCBieSBLQVNBTi5cblxuTGV0IG1lIGRvdWJsZS1jaGVjay4gTG9va2luZyBhdCBgdGRwX21tdV9yYW5nZV9jb3ZlcnNfbGVhZl9wdGAsIGBzcHRlcF90b19zcGAgcmVsaWFibHkgYWNjZXNzZXMgdGhlIGBrdm1fbW11X3BhZ2VgIGZyb20gdGhlIFNQVEUgcG9pbnRlciwgZW5zdXJpbmcgdGhhdCBhbGwgYWNjZXNzZWQgZmllbGRzIGFyZSBpbml0aWFsaXplZC4gVGhlIHNhbWUgcGF0dGVybiBpcyB1c2VkIGluIGB0ZHBfbW11X2Nhbl9za2lwX2xlYWZfcHRgLiBUaGF0IGNoZWNrcyBvdXQgdG9vLlxuXG5BbmQsIGZpbmFsbHksIGBtYXlfc2tpcF9sZWFmX3B0c2AgaXMgaW5pdGlhbGl6ZWQuIEV2ZXJ5dGhpbmcgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZC5cblxuU28sIGluIGNvbmNsdXNpb24sIEkgZG9uJ3Qgc2VlIGFueSBpbW1lZGlhdGUgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHN1YnRsZSBpc3N1ZXMgaW4gdGhlIGxvZ2ljIG9mIHRoaXMgb3B0aW1pemF0aW9uLiBObyBuZWVkIHRvIGJyaW5nIGluIEtNU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjg0LCJPdXRwdXRUb2tlbnMiOjIxMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjA5OjQ5LjcwNjEzMTcyNloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJ3MgVERQIE1NVSB0byBza2lwIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgZHVyaW5nIHphcHBpbmcuIEl0IGludHJvZHVjZXMgdHdvIG5ldyBib29sZWFuIGZpZWxkczogYHRkcF9tbXVfZW1wdHlfbGVhZl9wdGAgaW4gYHN0cnVjdCBrdm1fbW11X3BhZ2VgIGFuZCBgc2tpcF9jaGlsZGAgaW4gYHN0cnVjdCB0ZHBfaXRlcmAuIEJvdGggZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgdXBvbiBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gKGB0ZHBfbW11X2luaXRfc3BgIGFuZCBgdGRwX2l0ZXJfcmVzdGFydGAgcmVzcGVjdGl2ZWx5KS4gVGhlc2Ugc3RydWN0dXJlcyBhcmUgaW50ZXJuYWwgdG8gS1ZNIGFuZCBhcmUgbm90IGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyBURFAgTU1VIHRvIHNraXAgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyBkdXJpbmcgemFwcGluZy4gSXQgaW50cm9kdWNlcyB0d28gbmV3IGJvb2xlYW4gZmllbGRzOiBgdGRwX21tdV9lbXB0eV9sZWFmX3B0YCBpbiBgc3RydWN0IGt2bV9tbXVfcGFnZWAgYW5kIGBza2lwX2NoaWxkYCBpbiBgc3RydWN0IHRkcF9pdGVyYC4gQm90aCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCB1cG9uIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiAoYHRkcF9tbXVfaW5pdF9zcGAgYW5kIGB0ZHBfaXRlcl9yZXN0YXJ0YCByZXNwZWN0aXZlbHkpLiBUaGVzZSBzdHJ1Y3R1cmVzIGFyZSBpbnRlcm5hbCB0byBLVk0gYW5kIGFyZSBub3QgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowhmgd6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 08:06:44 +0000 UTC FinishedAt: 2026-08-14 08:09:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c21bb4193868a8de71fc4693fa741e195fdf5d86", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c21bb4193868a8de71fc4693fa741e195fdf5d86", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_tdp_mmu_zap_leafs", "kvm_tdp_mmu_unmap_gfn_range", "tdp_iter_restart", "tdp_iter_next", "tdp_iter_skip_child" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV90ZHBfbW11X3phcF9sZWFmcyYjMzQ7LAogICAgJiMzNDtrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2UmIzM0OywKICAgICYjMzQ7dGRwX2l0ZXJfcmVzdGFydCYjMzQ7LAogICAgJiMzNDt0ZHBfaXRlcl9uZXh0JiMzNDssCiAgICAmIzM0O3RkcF9pdGVyX3NraXBfY2hpbGQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0mIzM5O3MgVERQIE1NVSB0byBza2lwIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgZHVyaW5nIHphcHBpbmcuIEl0IGludHJvZHVjZXMgdHdvIG5ldyBib29sZWFuIGZpZWxkczogYHRkcF9tbXVfZW1wdHlfbGVhZl9wdGAgaW4gYHN0cnVjdCBrdm1fbW11X3BhZ2VgIGFuZCBgc2tpcF9jaGlsZGAgaW4gYHN0cnVjdCB0ZHBfaXRlcmAuIEJvdGggZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgdXBvbiBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gKGB0ZHBfbW11X2luaXRfc3BgIGFuZCBgdGRwX2l0ZXJfcmVzdGFydGAgcmVzcGVjdGl2ZWx5KS4gVGhlc2Ugc3RydWN0dXJlcyBhcmUgaW50ZXJuYWwgdG8gS1ZNIGFuZCBhcmUgbm90IGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBURFAgTU1VIHRvIHNraXAgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyB3aGVuIHphcHBpbmcsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHBhZ2UgdGFibGUgbWFuYWdlbWVudCBsb2dpYy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIHJ1bm5pbmcgS1ZNIGd1ZXN0cyBhbmQgcGVyZm9ybWluZyBtZW1vcnkgdW5tYXBwaW5nIG9yIHphcHBpbmcgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM3NjY4ODIzYzg2MWZiNGU2NjFlNDAzZTE3NWQ1ZmYwMzg2MjI2YWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwODowODozMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oIGIvYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaFxuaW5kZXggNzNjZGNiY2NjODllOC4uNTMwNWFhM2U2ODhiNyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmhcbkBAIC05NSw2ICYjNDM7OTUsOCBAQCBzdHJ1Y3Qga3ZtX21tdV9wYWdlIHtcbiBcdH07XG4gXG4gXHRib29sIGhhc19tYXBwZWRfaG9zdF9tbWlvO1xuJiM0MztcdC8qIFREUCBNTVUgb25seTogbm8gcHJlc2VudCBsZWFmIFNQVEVzIGV4aXN0IGluIHRoaXMgbGVhZiBwYWdlIHRhYmxlLiAqL1xuJiM0MztcdGJvb2wgdGRwX21tdV9lbXB0eV9sZWFmX3B0O1xuIFxuIFx0dW5pb24ge1xuIFx0XHQvKiBUaGVzZSB0d28gbWVtYmVycyBhcmVuJiMzOTt0IHVzZWQgZm9yIFREUCBNTVUgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmNcbmluZGV4IDllMTdiZmE4MDkwMTEuLjFkODdkYjE0YTZhZTggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1xuQEAgLTIzLDYgJiM0MzsyMyw3IEBAIHN0YXRpYyB2b2lkIHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuIHZvaWQgdGRwX2l0ZXJfcmVzdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4ge1xuIFx0aXRlci1cdTAwM2V5aWVsZGVkID0gZmFsc2U7XG4mIzQzO1x0aXRlci1cdTAwM2Vza2lwX2NoaWxkID0gZmFsc2U7XG4gXHRpdGVyLVx1MDAzZXlpZWxkZWRfZ2ZuID0gaXRlci1cdTAwM2VuZXh0X2xhc3RfbGV2ZWxfZ2ZuO1xuIFx0aXRlci1cdTAwM2VsZXZlbCA9IGl0ZXItXHUwMDNlcm9vdF9sZXZlbDtcbiBcbkBAIC0xNjcsOSAmIzQzOzE2OCwxMSBAQCB2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZiAodHJ5X3N0ZXBfZG93bihpdGVyKSlcbiYjNDM7XHRpZiAoIWl0ZXItXHUwMDNlc2tpcF9jaGlsZCBcdTAwMjZcdTAwMjYgdHJ5X3N0ZXBfZG93bihpdGVyKSlcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGl0ZXItXHUwMDNlc2tpcF9jaGlsZCA9IGZhbHNlO1xuJiM0MztcbiBcdGRvIHtcbiBcdFx0aWYgKHRyeV9zdGVwX3NpZGUoaXRlcikpXG4gXHRcdFx0cmV0dXJuO1xuQEAgLTE3NywzICYjNDM7MTgwLDggQEAgdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbiBcdGl0ZXItXHUwMDNldmFsaWQgPSBmYWxzZTtcbiB9XG4gXG4mIzQzO3ZvaWQgdGRwX2l0ZXJfc2tpcF9jaGlsZChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4mIzQzO3tcbiYjNDM7XHRXQVJOX09OX09OQ0UoaXRlci1cdTAwM2V5aWVsZGVkKTtcbiYjNDM7XHRpdGVyLVx1MDAzZXNraXBfY2hpbGQgPSB0cnVlO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oXG5pbmRleCAzNjRjNWRhNmM0OTkxLi40N2FjOGJkNDM3OTQzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmhcbkBAIC0xMTQsNiAmIzQzOzExNCwxMSBAQCBzdHJ1Y3QgdGRwX2l0ZXIge1xuIFx0ICogbGV2ZWwgaW5zdGVhZCBvZiBhZHZhbmNpbmcgdG8gdGhlIG5leHQgZW50cnkuXG4gXHQgKi9cbiBcdGJvb2wgeWllbGRlZDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRydWUgaWYgdGRwX2l0ZXJfbmV4dCgpIHNob3VsZCBza2lwIHRoZSBjaGlsZCBwYWdlIHRhYmxlIHJlZmVyZW5jZWQgYnlcbiYjNDM7XHQgKiB0aGUgY3VycmVudCBTUFRFLCBpbnN0ZWFkIG9mIGRlc2NlbmRpbmcgaW50byBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRib29sIHNraXBfY2hpbGQ7XG4gfTtcbiBcbiAvKlxuQEAgLTEzOSw1ICYjNDM7MTQ0LDYgQEAgdm9pZCB0ZHBfaXRlcl9zdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG4gXHRcdCAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cyk7XG4gdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcik7XG4gdm9pZCB0ZHBfaXRlcl9yZXN0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcik7XG4mIzQzO3ZvaWQgdGRwX2l0ZXJfc2tpcF9jaGlsZChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpO1xuIFxuICNlbmRpZiAvKiBfX0tWTV9YODZfTU1VX1REUF9JVEVSX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXG5pbmRleCBjMWNiYWU2NWQyMzlmLi44NGUxOGJkNmU3Nzc5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXG5AQCAtMjM4LDYgJiM0MzsyMzgsNyBAQCBzdGF0aWMgdm9pZCB0ZHBfbW11X2luaXRfc3Aoc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsIHRkcF9wdGVwX3Qgc3B0ZXAsXG4gXHRzcC1cdTAwM2VnZm4gPSBnZm47XG4gXHRzcC1cdTAwM2VwdGVwID0gc3B0ZXA7XG4gXHRzcC1cdTAwM2V0ZHBfbW11X3BhZ2UgPSB0cnVlO1xuJiM0MztcdHNwLVx1MDAzZXRkcF9tbXVfZW1wdHlfbGVhZl9wdCA9IGZhbHNlO1xuIFxuIFx0dHJhY2Vfa3ZtX21tdV9nZXRfcGFnZShzcCwgdHJ1ZSk7XG4gfVxuQEAgLTUyNyw2ICYjNDM7NTI4LDEwIEBAIHN0YXRpYyBpbnQgX19oYW5kbGVfY2hhbmdlZF9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsXG4gXHRpZiAoaXNfbGVhZilcbiBcdFx0Y2hlY2tfc3B0ZV93cml0YWJsZV9pbnZhcmlhbnRzKG5ld19zcHRlKTtcbiBcbiYjNDM7XHRpZiAoaXNfbGVhZiBcdTAwMjZcdTAwMjYgIXdhc19sZWFmIFx1MDAyNlx1MDAyNiBzcC1cdTAwM2V0ZHBfbW11X3BhZ2UgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNwLVx1MDAzZXJvbGUubGV2ZWwgPT0gUEdfTEVWRUxfNEspXG4mIzQzO1x0XHRXUklURV9PTkNFKHNwLVx1MDAzZXRkcF9tbXVfZW1wdHlfbGVhZl9wdCwgZmFsc2UpO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBUaGUgb25seSB0aW1lcyBhIFNQVEUgc2hvdWxkIGJlIGNoYW5nZWQgZnJvbSBhIG5vbi1wcmVzZW50IHRvXG4gXHQgKiBub24tcHJlc2VudCBzdGF0ZSBpcyB3aGVuIGFuIE1NSU8gZW50cnkgaXMgaW5zdGFsbGVkL21vZGlmaWVkL1xuQEAgLTkyMyw2ICYjNDM7OTI4LDM5IEBAIGJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIHRkcF9tbXVfcmFuZ2VfY292ZXJzX2xlYWZfcHQoc3RydWN0IHRkcF9pdGVyICppdGVyLFxuJiM0MztcdFx0XHRcdFx0IGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDtcbiYjNDM7XG4mIzQzO1x0c3AgPSBzcHRlcF90b19zcChyY3VfZGVyZWZlcmVuY2UoaXRlci1cdTAwM2VzcHRlcCkpO1xuJiM0MztcdHJldHVybiBzcC1cdTAwM2VnZm4gXHUwMDNlPSBzdGFydCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgc3AtXHUwMDNlZ2ZuICYjNDM7IEtWTV9QQUdFU19QRVJfSFBBR0UoUEdfTEVWRUxfMk0pIFx1MDAzYz0gZW5kO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB0ZHBfbW11X2Nhbl9za2lwX2xlYWZfcHQoc3RydWN0IHRkcF9pdGVyICppdGVyLFxuJiM0MztcdFx0XHRcdCAgICAgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKmNoaWxkX3NwO1xuJiM0MztcbiYjNDM7XHRpZiAoaXRlci1cdTAwM2VsZXZlbCAhPSBQR19MRVZFTF8yTSB8fFxuJiM0MztcdCAgICAhaXNfc2hhZG93X3ByZXNlbnRfcHRlKGl0ZXItXHUwMDNlb2xkX3NwdGUpIHx8XG4mIzQzO1x0ICAgIGlzX2xhc3Rfc3B0ZShpdGVyLVx1MDAzZW9sZF9zcHRlLCBpdGVyLVx1MDAzZWxldmVsKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGl0ZXItXHUwMDNlZ2ZuIFx1MDAzYyBzdGFydCB8fFxuJiM0MztcdCAgICBpdGVyLVx1MDAzZWdmbiAmIzQzOyBLVk1fUEFHRVNfUEVSX0hQQUdFKFBHX0xFVkVMXzJNKSBcdTAwM2UgZW5kKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNraXAgcmV0YWluZWQgZW1wdHkgNEsgbGVhZiBwYWdlIHRhYmxlcyB3aXRob3V0IHVubGlua2luZyB0aGVtLCBzb1xuJiM0MztcdCAqIGZ1dHVyZSBmYXVsdHMgY2FuIHJldXNlIHRoZSBwYWdpbmcgc3RydWN0dXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGNoaWxkX3NwID0gc3B0ZV90b19jaGlsZF9zcChpdGVyLVx1MDAzZW9sZF9zcHRlKTtcbiYjNDM7XHRyZXR1cm4gY2hpbGRfc3AtXHUwMDNlcm9sZS5sZXZlbCA9PSBQR19MRVZFTF80SyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgUkVBRF9PTkNFKGNoaWxkX3NwLVx1MDAzZXRkcF9tbXVfZW1wdHlfbGVhZl9wdCk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBJZiBjYW5feWllbGQgaXMgdHJ1ZSwgd2lsbCByZWxlYXNlIHRoZSBNTVUgbG9jayBhbmQgcmVzY2hlZHVsZSBpZiB0aGVcbiAgKiBzY2hlZHVsZXIgbmVlZHMgdGhlIENQVSBvciB0aGVyZSBpcyBjb250ZW50aW9uIG9uIHRoZSBNTVUgbG9jay4gSWYgdGhpc1xuQEAgLTkzNCw4ICYjNDM7OTcyLDEwIEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcbiBcdFx0XHQgICAgICBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGNhbl95aWVsZCwgYm9vbCBmbHVzaClcbiB7XG4gXHRzdHJ1Y3QgdGRwX2l0ZXIgaXRlcjtcbiYjNDM7XHRib29sIG1heV9za2lwX2xlYWZfcHRzO1xuIFxuIFx0ZW5kID0gbWluKGVuZCwgdGRwX21tdV9tYXhfZ2ZuX2V4Y2x1c2l2ZSgpKTtcbiYjNDM7XHRtYXlfc2tpcF9sZWFmX3B0cyA9IGVuZCAtIHN0YXJ0IFx1MDAzZT0gS1ZNX1BBR0VTX1BFUl9IUEFHRShQR19MRVZFTF8yTSk7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXG5AQCAtOTQ4LDE4ICYjNDM7OTg4LDM0IEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoIWlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSB8fFxuLVx0XHQgICAgIWlzX2xhc3Rfc3B0ZShpdGVyLm9sZF9zcHRlLCBpdGVyLmxldmVsKSlcbiYjNDM7XHRcdGlmIChtYXlfc2tpcF9sZWFmX3B0cyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICB0ZHBfbW11X2Nhbl9za2lwX2xlYWZfcHQoXHUwMDI2aXRlciwgc3RhcnQsIGVuZCkpIHtcbiYjNDM7XHRcdFx0dGRwX2l0ZXJfc2tpcF9jaGlsZChcdTAwMjZpdGVyKTtcbiBcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiBcbi1cdFx0dGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgXHUwMDI2aXRlciwgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUpO1xuJiM0MztcdFx0aWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpIHtcbiYjNDM7XHRcdFx0dGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgXHUwMDI2aXRlcixcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFNIQURPV19OT05QUkVTRU5UX1ZBTFVFKTtcbiBcbi1cdFx0Lypcbi1cdFx0ICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2VzbiYjMzk7dCByZXF1aXJlIGEgVExCIGZsdXNoLFxuLVx0XHQgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuXG4tXHRcdCAqL1xuLVx0XHRpZiAoIXJvb3QtXHUwMDNlcm9sZS5pbnZhbGlkKVxuLVx0XHRcdGZsdXNoID0gdHJ1ZTtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2VzbiYjMzk7dCByZXF1aXJlIGEgVExCIGZsdXNoLFxuJiM0MztcdFx0XHQgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoIXJvb3QtXHUwMDNlcm9sZS5pbnZhbGlkKVxuJiM0MztcdFx0XHRcdGZsdXNoID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobWF5X3NraXBfbGVhZl9wdHMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgaXRlci5sZXZlbCA9PSBQR19MRVZFTF80SyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBzcHRlX2luZGV4KHJjdV9kZXJlZmVyZW5jZShpdGVyLnNwdGVwKSkgPT0gU1BURV9FTlRfUEVSX1BBR0UgLSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHRkcF9tbXVfcmFuZ2VfY292ZXJzX2xlYWZfcHQoXHUwMDI2aXRlciwgc3RhcnQsIGVuZCkpIHtcbiYjNDM7XHRcdFx0c3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7XG4mIzQzO1xuJiM0MztcdFx0XHRzcCA9IHNwdGVwX3RvX3NwKHJjdV9kZXJlZmVyZW5jZShpdGVyLnNwdGVwKSk7XG4mIzQzO1x0XHRcdFdSSVRFX09OQ0Uoc3AtXHUwMDNldGRwX21tdV9lbXB0eV9sZWFmX3B0LCB0cnVlKTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdGRwX21tdV96YXBfbGVhZnMmIzM0OywKICAgICYjMzQ7a3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlJiMzNDssCiAgICAmIzM0O3RkcF9pdGVyX3Jlc3RhcnQmIzM0OywKICAgICYjMzQ7dGRwX2l0ZXJfbmV4dCYjMzQ7LAogICAgJiMzNDt0ZHBfaXRlcl9za2lwX2NoaWxkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBLVk0gVERQIE1NVSB0byBza2lwIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgd2hlbiB6YXBwaW5nLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgbG9naWMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgd2hlbiBydW5uaW5nIEtWTSBndWVzdHMgYW5kIHBlcmZvcm1pbmcgbWVtb3J5IHVubWFwcGluZyBvciB6YXBwaW5nIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNzY2ODgyM2M4NjFmYjRlNjYxZTQwM2UxNzVkNWZmMDM4NjIyNmFkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMDg6MDg6MzIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oIGIvYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaAppbmRleCA3M2NkY2JjY2M4OWU4Li41MzA1YWEzZTY4OGI3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmgKQEAgLTk1LDYgJiM0Mzs5NSw4IEBAIHN0cnVjdCBrdm1fbW11X3BhZ2UgewogCX07CiAKIAlib29sIGhhc19tYXBwZWRfaG9zdF9tbWlvOwomIzQzOwkvKiBURFAgTU1VIG9ubHk6IG5vIHByZXNlbnQgbGVhZiBTUFRFcyBleGlzdCBpbiB0aGlzIGxlYWYgcGFnZSB0YWJsZS4gKi8KJiM0MzsJYm9vbCB0ZHBfbW11X2VtcHR5X2xlYWZfcHQ7CiAKIAl1bmlvbiB7CiAJCS8qIFRoZXNlIHR3byBtZW1iZXJzIGFyZW4mIzM5O3QgdXNlZCBmb3IgVERQIE1NVSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jCmluZGV4IDllMTdiZmE4MDkwMTEuLjFkODdkYjE0YTZhZTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMKQEAgLTIzLDYgJiM0MzsyMyw3IEBAIHN0YXRpYyB2b2lkIHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoc3RydWN0IHRkcF9pdGVyICppdGVyKQogdm9pZCB0ZHBfaXRlcl9yZXN0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcikKIHsKIAlpdGVyLSZndDt5aWVsZGVkID0gZmFsc2U7CiYjNDM7CWl0ZXItJmd0O3NraXBfY2hpbGQgPSBmYWxzZTsKIAlpdGVyLSZndDt5aWVsZGVkX2dmbiA9IGl0ZXItJmd0O25leHRfbGFzdF9sZXZlbF9nZm47CiAJaXRlci0mZ3Q7bGV2ZWwgPSBpdGVyLSZndDtyb290X2xldmVsOwogCkBAIC0xNjcsOSAmIzQzOzE2OCwxMSBAQCB2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKQogCQlyZXR1cm47CiAJfQogCi0JaWYgKHRyeV9zdGVwX2Rvd24oaXRlcikpCiYjNDM7CWlmICghaXRlci0mZ3Q7c2tpcF9jaGlsZCAmYW1wOyZhbXA7IHRyeV9zdGVwX2Rvd24oaXRlcikpCiAJCXJldHVybjsKIAomIzQzOwlpdGVyLSZndDtza2lwX2NoaWxkID0gZmFsc2U7CiYjNDM7CiAJZG8gewogCQlpZiAodHJ5X3N0ZXBfc2lkZShpdGVyKSkKIAkJCXJldHVybjsKQEAgLTE3NywzICYjNDM7MTgwLDggQEAgdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcikKIAlpdGVyLSZndDt2YWxpZCA9IGZhbHNlOwogfQogCiYjNDM7dm9pZCB0ZHBfaXRlcl9za2lwX2NoaWxkKHN0cnVjdCB0ZHBfaXRlciAqaXRlcikKJiM0Mzt7CiYjNDM7CVdBUk5fT05fT05DRShpdGVyLSZndDt5aWVsZGVkKTsKJiM0MzsJaXRlci0mZ3Q7c2tpcF9jaGlsZCA9IHRydWU7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oCmluZGV4IDM2NGM1ZGE2YzQ5OTEuLjQ3YWM4YmQ0Mzc5NDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgKQEAgLTExNCw2ICYjNDM7MTE0LDExIEBAIHN0cnVjdCB0ZHBfaXRlciB7CiAJICogbGV2ZWwgaW5zdGVhZCBvZiBhZHZhbmNpbmcgdG8gdGhlIG5leHQgZW50cnkuCiAJICovCiAJYm9vbCB5aWVsZGVkOwomIzQzOwkvKgomIzQzOwkgKiBUcnVlIGlmIHRkcF9pdGVyX25leHQoKSBzaG91bGQgc2tpcCB0aGUgY2hpbGQgcGFnZSB0YWJsZSByZWZlcmVuY2VkIGJ5CiYjNDM7CSAqIHRoZSBjdXJyZW50IFNQVEUsIGluc3RlYWQgb2YgZGVzY2VuZGluZyBpbnRvIGl0LgomIzQzOwkgKi8KJiM0MzsJYm9vbCBza2lwX2NoaWxkOwogfTsKIAogLyoKQEAgLTEzOSw1ICYjNDM7MTQ0LDYgQEAgdm9pZCB0ZHBfaXRlcl9zdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsCiAJCSAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cyk7CiB2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKTsKIHZvaWQgdGRwX2l0ZXJfcmVzdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpOwomIzQzO3ZvaWQgdGRwX2l0ZXJfc2tpcF9jaGlsZChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpOwogCiAjZW5kaWYgLyogX19LVk1fWDg2X01NVV9URFBfSVRFUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jCmluZGV4IGMxY2JhZTY1ZDIzOWYuLjg0ZTE4YmQ2ZTc3NzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jCkBAIC0yMzgsNiAmIzQzOzIzOCw3IEBAIHN0YXRpYyB2b2lkIHRkcF9tbXVfaW5pdF9zcChzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwgdGRwX3B0ZXBfdCBzcHRlcCwKIAlzcC0mZ3Q7Z2ZuID0gZ2ZuOwogCXNwLSZndDtwdGVwID0gc3B0ZXA7CiAJc3AtJmd0O3RkcF9tbXVfcGFnZSA9IHRydWU7CiYjNDM7CXNwLSZndDt0ZHBfbW11X2VtcHR5X2xlYWZfcHQgPSBmYWxzZTsKIAogCXRyYWNlX2t2bV9tbXVfZ2V0X3BhZ2Uoc3AsIHRydWUpOwogfQpAQCAtNTI3LDYgJiM0Mzs1MjgsMTAgQEAgc3RhdGljIGludCBfX2hhbmRsZV9jaGFuZ2VkX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwKIAlpZiAoaXNfbGVhZikKIAkJY2hlY2tfc3B0ZV93cml0YWJsZV9pbnZhcmlhbnRzKG5ld19zcHRlKTsKIAomIzQzOwlpZiAoaXNfbGVhZiAmYW1wOyZhbXA7ICF3YXNfbGVhZiAmYW1wOyZhbXA7IHNwLSZndDt0ZHBfbW11X3BhZ2UgJmFtcDsmYW1wOwomIzQzOwkgICAgc3AtJmd0O3JvbGUubGV2ZWwgPT0gUEdfTEVWRUxfNEspCiYjNDM7CQlXUklURV9PTkNFKHNwLSZndDt0ZHBfbW11X2VtcHR5X2xlYWZfcHQsIGZhbHNlKTsKJiM0MzsKIAkvKgogCSAqIFRoZSBvbmx5IHRpbWVzIGEgU1BURSBzaG91bGQgYmUgY2hhbmdlZCBmcm9tIGEgbm9uLXByZXNlbnQgdG8KIAkgKiBub24tcHJlc2VudCBzdGF0ZSBpcyB3aGVuIGFuIE1NSU8gZW50cnkgaXMgaW5zdGFsbGVkL21vZGlmaWVkLwpAQCAtOTIzLDYgJiM0Mzs5MjgsMzkgQEAgYm9vbCBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBib29sIHRkcF9tbXVfcmFuZ2VfY292ZXJzX2xlYWZfcHQoc3RydWN0IHRkcF9pdGVyICppdGVyLAomIzQzOwkJCQkJIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKJiM0MzsKJiM0MzsJc3AgPSBzcHRlcF90b19zcChyY3VfZGVyZWZlcmVuY2UoaXRlci0mZ3Q7c3B0ZXApKTsKJiM0MzsJcmV0dXJuIHNwLSZndDtnZm4gJmd0Oz0gc3RhcnQgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgc3AtJmd0O2dmbiAmIzQzOyBLVk1fUEFHRVNfUEVSX0hQQUdFKFBHX0xFVkVMXzJNKSAmbHQ7PSBlbmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHRkcF9tbXVfY2FuX3NraXBfbGVhZl9wdChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsCiYjNDM7CQkJCSAgICAgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fbW11X3BhZ2UgKmNoaWxkX3NwOwomIzQzOwomIzQzOwlpZiAoaXRlci0mZ3Q7bGV2ZWwgIT0gUEdfTEVWRUxfMk0gfHwKJiM0MzsJICAgICFpc19zaGFkb3dfcHJlc2VudF9wdGUoaXRlci0mZ3Q7b2xkX3NwdGUpIHx8CiYjNDM7CSAgICBpc19sYXN0X3NwdGUoaXRlci0mZ3Q7b2xkX3NwdGUsIGl0ZXItJmd0O2xldmVsKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKGl0ZXItJmd0O2dmbiAmbHQ7IHN0YXJ0IHx8CiYjNDM7CSAgICBpdGVyLSZndDtnZm4gJiM0MzsgS1ZNX1BBR0VTX1BFUl9IUEFHRShQR19MRVZFTF8yTSkgJmd0OyBlbmQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNraXAgcmV0YWluZWQgZW1wdHkgNEsgbGVhZiBwYWdlIHRhYmxlcyB3aXRob3V0IHVubGlua2luZyB0aGVtLCBzbwomIzQzOwkgKiBmdXR1cmUgZmF1bHRzIGNhbiByZXVzZSB0aGUgcGFnaW5nIHN0cnVjdHVyZS4KJiM0MzsJICovCiYjNDM7CWNoaWxkX3NwID0gc3B0ZV90b19jaGlsZF9zcChpdGVyLSZndDtvbGRfc3B0ZSk7CiYjNDM7CXJldHVybiBjaGlsZF9zcC0mZ3Q7cm9sZS5sZXZlbCA9PSBQR19MRVZFTF80SyAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBSRUFEX09OQ0UoY2hpbGRfc3AtJmd0O3RkcF9tbXVfZW1wdHlfbGVhZl9wdCk7CiYjNDM7fQomIzQzOwogLyoKICAqIElmIGNhbl95aWVsZCBpcyB0cnVlLCB3aWxsIHJlbGVhc2UgdGhlIE1NVSBsb2NrIGFuZCByZXNjaGVkdWxlIGlmIHRoZQogICogc2NoZWR1bGVyIG5lZWRzIHRoZSBDUFUgb3IgdGhlcmUgaXMgY29udGVudGlvbiBvbiB0aGUgTU1VIGxvY2suIElmIHRoaXMKQEAgLTkzNCw4ICYjNDM7OTcyLDEwIEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCwKIAkJCSAgICAgIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgY2FuX3lpZWxkLCBib29sIGZsdXNoKQogewogCXN0cnVjdCB0ZHBfaXRlciBpdGVyOwomIzQzOwlib29sIG1heV9za2lwX2xlYWZfcHRzOwogCiAJZW5kID0gbWluKGVuZCwgdGRwX21tdV9tYXhfZ2ZuX2V4Y2x1c2l2ZSgpKTsKJiM0MzsJbWF5X3NraXBfbGVhZl9wdHMgPSBlbmQgLSBzdGFydCAmZ3Q7PSBLVk1fUEFHRVNfUEVSX0hQQUdFKFBHX0xFVkVMXzJNKTsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKIApAQCAtOTQ4LDE4ICYjNDM7OTg4LDM0IEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCwKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKCFpc19zaGFkb3dfcHJlc2VudF9wdGUoaXRlci5vbGRfc3B0ZSkgfHwKLQkJICAgICFpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpCiYjNDM7CQlpZiAobWF5X3NraXBfbGVhZl9wdHMgJmFtcDsmYW1wOwomIzQzOwkJICAgIHRkcF9tbXVfY2FuX3NraXBfbGVhZl9wdCgmYW1wO2l0ZXIsIHN0YXJ0LCBlbmQpKSB7CiYjNDM7CQkJdGRwX2l0ZXJfc2tpcF9jaGlsZCgmYW1wO2l0ZXIpOwogCQkJY29udGludWU7CiYjNDM7CQl9CiAKLQkJdGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgJmFtcDtpdGVyLCBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSk7CiYjNDM7CQlpZiAoaXNfc2hhZG93X3ByZXNlbnRfcHRlKGl0ZXIub2xkX3NwdGUpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpIHsKJiM0MzsJCQl0ZHBfbW11X2l0ZXJfc2V0X3NwdGUoa3ZtLCAmYW1wO2l0ZXIsCiYjNDM7CQkJCQkgICAgICBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSk7CiAKLQkJLyoKLQkJICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2VzbiYjMzk7dCByZXF1aXJlIGEgVExCIGZsdXNoLAotCQkgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuCi0JCSAqLwotCQlpZiAoIXJvb3QtJmd0O3JvbGUuaW52YWxpZCkKLQkJCWZsdXNoID0gdHJ1ZTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFphcHBpbmdzIFNQVEVzIGluIGludmFsaWQgcm9vdHMgZG9lc24mIzM5O3QgcmVxdWlyZSBhIFRMQiBmbHVzaCwKJiM0MzsJCQkgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKCFyb290LSZndDtyb2xlLmludmFsaWQpCiYjNDM7CQkJCWZsdXNoID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChtYXlfc2tpcF9sZWFmX3B0cyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgaXRlci5sZXZlbCA9PSBQR19MRVZFTF80SyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgc3B0ZV9pbmRleChyY3VfZGVyZWZlcmVuY2UoaXRlci5zcHRlcCkpID09IFNQVEVfRU5UX1BFUl9QQUdFIC0gMSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdGRwX21tdV9yYW5nZV9jb3ZlcnNfbGVhZl9wdCgmYW1wO2l0ZXIsIHN0YXJ0LCBlbmQpKSB7CiYjNDM7CQkJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7CiYjNDM7CiYjNDM7CQkJc3AgPSBzcHRlcF90b19zcChyY3VfZGVyZWZlcmVuY2UoaXRlci5zcHRlcCkpOwomIzQzOwkJCVdSSVRFX09OQ0Uoc3AtJmd0O3RkcF9tbXVfZW1wdHlfbGVhZl9wdCwgdHJ1ZSk7CiYjNDM7CQl9CiAJfQogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MTkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS1ZNIHg4NiBNTVUgUGF0Y2ggQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBuZWVkIGZ1enppbmcgYXR0ZW50aW9uLiBUaGUgc2NvcGUgaXMgcHJldHR5IGNsZWFyOiBpdCYjMzk7cyB0b3VjaGluZyBLVk0geDg2IE1NVSBjb2RlLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHRoZSBURFAgTU1VLiBUaGUgbW9kaWZpZWQgZmlsZXMg4oCTIGBtbXVfaW50ZXJuYWwuaGAsIGB0ZHBfaXRlci5jYCwgYHRkcF9pdGVyLmhgLCBhbmQgYHRkcF9tbXUuY2Ag4oCTIGNvbmZpcm0gdGhhdC4KCkl0JiMzOTtzIGludHJvZHVjaW5nIGNoYW5nZXMgdG8gdGhlIGBzdHJ1Y3Qga3ZtX21tdV9wYWdlYCwgYWRkaW5nIGB0ZHBfbW11X2VtcHR5X2xlYWZfcHRgLCBhbmQgbW9kaWZ5aW5nIGBzdHJ1Y3QgdGRwX2l0ZXJgIHdpdGggdGhlIGFkZGl0aW9uIG9mIGBza2lwX2NoaWxkYCBhbmQgYHRkcF9pdGVyX3NraXBfY2hpbGQoKWAuIEl0JiMzOTtzIGFsc28gbW9kaWZ5aW5nIGB0ZHBfbW11X3phcF9sZWFmcygpYCB0byBza2lwIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGFsdGVyYXRpb24sIG5vIGRvdWJ0LiBDb25zaWRlcmluZyB0aGlzIGRpcmVjdGx5IGltcGFjdHMgY29yZSBLVk0gVERQIE1NVSBsb2dpYywgYW5kIEtWTSBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyBpbiBzeXprYWxsZXIsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBvdXIgdGltZS4gV29ydGhGdXp6aW5nID0gVHJ1ZS4KCk5vdywgdGhlIHJlYWwgd29yayBiZWdpbnM6IHBpbnBvaW50aW5nIHRoZSByaWdodCB0YXJnZXRzIGZvciBmdXp6aW5nLiBXZSBuZWVkIHRvIGlkZW50aWZ5IEZvY3VzU3ltYm9scywgd2hpY2ggYXJlIHRoZSBub24taG90LXBhdGgga2VybmVsIGZ1bmN0aW9ucyB0byBmb2N1cyBmdXp6aW5nIG9uLCBhbmQgZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IEVuYWJsZUNvbmZpZ3MuCgpMZXQmIzM5O3MgZGlnIGludG8gYHRkcF9tbXUuY2AgYW5kIGB0ZHBfaXRlci5jYC4gRnJvbSBhIHF1aWNrIHNraW0sIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gYWRkZWQvbW9kaWZpZWQgYXJlOiBgdGRwX2l0ZXJfcmVzdGFydGAsIGB0ZHBfaXRlcl9uZXh0YCwgYHRkcF9pdGVyX3NraXBfY2hpbGRgLCBgdGRwX21tdV9pbml0X3NwYCwgYF9faGFuZGxlX2NoYW5nZWRfc3B0ZWAsIGBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlYCAoY29udGV4dCksIGB0ZHBfbW11X3JhbmdlX2NvdmVyc19sZWFmX3B0YCBhbmQgYHRkcF9tbXVfY2FuX3NraXBfbGVhZl9wdGAsIHdoaWNoIGFyZSBib3RoIG5ldyBmdW5jdGlvbnMuIEFuZCBsYXN0bHksIGB0ZHBfbW11X3phcF9sZWFmc2AsIHdoaWNoIGlzIGFsc28gYmVpbmcgbW9kaWZpZWQuCgpIbW0sIGB0ZHBfbW11X3phcF9sZWFmc2AgaXMgc3RhdGljLiBUaGF0IG1lYW5zIHdlIG5lZWQgdG8gdHJhY2Ugd2hlcmUgaXQgKmlzKiBjYWxsZWQuIFRoaXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkcF9tbXVfemFwX2xlYWZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz03MDQwPXZvaWQga3ZtX3phcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm5fc3RhcnQsIGdmbl90IGdmbl9lbmQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MDU1LVx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzA1NjpcdFx0Zmx1c2ggPSBrdm1fdGRwX21tdV96YXBfbGVhZnMoa3ZtLCBnZm5fc3RhcnQsIGdmbl9lbmQsIGZsdXNoKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzA1Ny1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz05NDE9c3RhdGljIGJvb2wgdGRwX21tdV9jYW5fc2tpcF9sZWFmX3B0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcixcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy05NzAtICovXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo5NzE6c3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtOTcyLVx0XHRcdCAgICAgIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgY2FuX3lpZWxkLCBib29sIGZsdXNoKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMzQtICovXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxMDM1OmJvb2wga3ZtX3RkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBmbHVzaClcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMzYte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwNDAtXHRmb3JfZWFjaF92YWxpZF90ZHBfbW11X3Jvb3RfeWllbGRfc2FmZShrdm0sIHJvb3QsIC0xKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTA0MTpcdFx0Zmx1c2ggPSB0ZHBfbW11X3phcF9sZWFmcyhrdm0sIHJvb3QsIHN0YXJ0LCBlbmQsIHRydWUsIGZsdXNoKTtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwNDItXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM9MTM2Mj1ib29sIGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMzcwLVx0X19mb3JfZWFjaF90ZHBfbW11X3Jvb3RfeWllbGRfc2FmZShrdm0sIHJvb3QsIHJhbmdlLVx1MDAzZXNsb3QtXHUwMDNlYXNfaWQsIHR5cGVzKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTM3MTpcdFx0Zmx1c2ggPSB0ZHBfbW11X3phcF9sZWFmcyhrdm0sIHJvb3QsIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMzcyLVx0XHRcdFx0XHQgIHJhbmdlLVx1MDAzZW1heV9ibG9jaywgZmx1c2gpO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oPTU3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tbXVfcGFnZSAqdGRwX21tdV9nZXRfcm9vdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtNjUtXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaDo2Njpib29sIGt2bV90ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgZmx1c2gpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtNjctYm9vbCBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTMzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSYjMzk7cyBUcmFuc2xhdGlvbiBMb29rYXNpZGUgQnVmZmVyIChUTEIpIEludmFsaWRhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBLVk0gaGFuZGxlcyBUTEIgaW52YWxpZGF0aW9ucywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIFRyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXIgKFREUCkgTU1VLiBNeSBpbW1lZGlhdGUgaW50ZXJlc3QgaXMgaW4gdW5kZXJzdGFuZGluZyB0aGUgZmxvdyBvZiBpbnZhbGlkYXRpb25zIHdoZW4gYSBHdWVzdCBQaHlzaWNhbCBGcmFtZSBOdW1iZXIgKEdGTikgaXMgbW9kaWZpZWQgb3IgdW5tYXBwZWQuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgZnVuY3Rpb24gaGVyZSBpcyBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCwgd2hpY2ggaXMgaW50cmlndWluZy4gSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGt2bV96YXBfZ2ZuX3JhbmdlYCwgd2hpY2ggcHJvdmlkZXMgdGhlIGJyb2FkZXIgY29udGV4dC4gSW50ZXJlc3RpbmcsIGBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VgIGFsc28gY2FsbHMgYHRkcF9tbXVfemFwX2xlYWZzYC4gU28gdGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgY2xvc2VseSBsaW5rZWQsIGFuZCB0aGV5IHByb2JhYmx5IGhhbmRsZSB0aGUgY3JpdGljYWwgbG9naWMgZm9yIHJlbW92aW5nIHN0YWxlIGVudHJpZXMgZnJvbSB0aGUgVExCLiBHaXZlbiB0aGlzLCBJIHNob3VsZCBmb2N1cyBteSBhdHRlbnRpb24gbm93IG9uIHRob3JvdWdobHkgZGlzc2VjdGluZyBib3RoIGBrdm1fdGRwX21tdV96YXBfbGVhZnNgIGFuZCBga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYHphcF9sZWFmc2Agd29ya3Mgd2l0aGluIHRoZSBjb250ZXh0IG9mIGJvdGggY2FsbHMuIFRoaXMgYW5hbHlzaXMgd2lsbCBnZXQgbWUgdG8gdGhlIGhlYXJ0IG9mIHRoZSBpbnZhbGlkYXRpb24gc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3RkcF9tbXVfemFwX2xlYWZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTcwNDA9dm9pZCBrdm1femFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbl9zdGFydCwgZ2ZuX3QgZ2ZuX2VuZClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwNTUtXHRpZiAodGRwX21tdV9lbmFibGVkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MDU2Olx0XHRmbHVzaCA9IGt2bV90ZHBfbW11X3phcF9sZWFmcyhrdm0sIGdmbl9zdGFydCwgZ2ZuX2VuZCwgZmx1c2gpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MDU3LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jPTk3MT1zdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzNC0gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjEwMzU6Ym9vbCBrdm1fdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGZsdXNoKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzNi17XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg9NTc9c3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21tdV9wYWdlICp0ZHBfbW11X2dldF9yb290KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC02NS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oOjY2OmJvb2wga3ZtX3RkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBmbHVzaCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC02Ny1ib29sIGt2bV90ZHBfbW11X3phcF9wb3NzaWJsZV9ueF9odWdlX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NzgKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlYCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byBga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlYC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgdW5tYXBwaW5nIGd1ZXN0IHBoeXNpY2FsIGZyYW1lIG51bWJlcnMgKEdGTnMpIGZyb20gdGhlIGhvc3QmIzM5O3MgVHJhbnNsYXRpb24gTG9va2FzaWRlIEJ1ZmZlcnMgKFRMQnMpIHdoZW4gdXNpbmcgVGFnZ2VkIERhdGEgUGFnZSAoVERQKSBNTVUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBiZWhhdmlvciwgZXNwZWNpYWxseSByZWdhcmRpbmcgdGhlIGZvbGxvd2luZzogaG93IGVmZmljaWVudGx5IGl0IGhhbmRsZXMgbGFyZ2UgdW5tYXAgcmVnaW9ucywgaXRzIGxvY2tpbmcgc3RyYXRlZ3kgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgTU1VIG9wZXJhdGlvbnMsIHdoZXRoZXIgaXQgaW50ZXJhY3RzIGNvcnJlY3RseSB3aXRoIHNoYWRvdyBwYWdlIHRhYmxlcywgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBwYWdlIGZhdWx0cyBkdXJpbmcgdGhlIHVubWFwcGluZyBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNvZGUgcGF0aCB0byBlbnN1cmUgd2UmIzM5O3JlIGF2b2lkaW5nIGFueSB1bm5lY2Vzc2FyeSBUTEIgZmx1c2hlcyBhbmQgdGhhdCB3ZSYjMzk7cmUgbWluaW1pemluZyB0aGUgcGVyZm9ybWFuY2UgaW1wYWN0IG9uIHJ1bm5pbmcgVk1zLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIHBheSBhdHRlbnRpb24gdG8gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoIG90aGVyIE1NVSBvcGVyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0IGNvcnJlY3RseSBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgc3RhdGVzIG9mIHRoZSBHRk5zIGJlaW5nIHVubWFwcGVkLiBJIGFsc28gd2FudCB0byBjaGVjayBmb3IgYW55IG1lbW9yeSBsZWFrcyBhbmQgZW5zdXJlIHRoZXJlIGFyZSBubyBpc3N1ZXMgd2l0aCB0aGUgaGFuZGxpbmcgb2YgdmlydHVhbCBtZW1vcnkgcmVzb3VyY2VzLiBHaXZlbiB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgZnVuY3Rpb24gZm9yIHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcyBpbiBhIFREUCBlbnZpcm9ubWVudCwgdW5kZXJzdGFuZGluZyBpdHMgaW50ZXJuYWxzIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MgaXMgcGFyYW1vdW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz0xNjYzPWJvb2wga3ZtX3VubWFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE2ODMtXHRpZiAodGRwX21tdV9lbmFibGVkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxNjg0Olx0XHRmbHVzaCA9IGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZShrdm0sIHJhbmdlLCBmbHVzaCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE2ODUtXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM9MTI3Mj1pbnQga3ZtX3RkcF9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMzYxLS8qIFVzZWQgYnkgbW11IG5vdGlmaWVyIHZpYSBrdm1fdW5tYXBfZ2ZuX3JhbmdlKCkgKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjEzNjI6Ym9vbCBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UsXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMzYzLVx0XHRcdFx0IGJvb2wgZmx1c2gpXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg9NzQ9aW50IGt2bV90ZHBfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtNzUtXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaDo3Njpib29sIGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTc3LVx0XHRcdFx0IGJvb2wgZmx1c2gpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBLVk0gR0ZOIFVubWFwcGluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBrbm93IGBrdm1femFwX2dmbl9yYW5nZWAgYW5kIGBrdm1fdW5tYXBfZ2ZuX3JhbmdlYCBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIGhhbmRsaW5nIEd1ZXN0IEZyYW1lIE51bWJlciAoR0ZOKSB1bm1hcHBpbmcgd2l0aGluIEtWTS4gVGhhdCBtYWtlcyBzZW5zZSwgdGhleSBzb3VuZCBsaWtlIHRoZSBsb2dpY2FsIGZ1bmN0aW9ucyB0byBvcmNoZXN0cmF0ZSB0aGUgcHJvY2Vzcy4gTm93IHRoZSBjcnVjaWFsIHBhcnQgaXMgdW5kZXJzdGFuZGluZyB0aGUgKmNvbnRleHQqIG9mIHRob3NlIGNhbGxzLiBXaGVyZSBhcmUgdGhleSBiZWluZyBpbnZva2VkIGZyb20/IEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBnZXQgYSByZWFsIGhhbmRsZSBvbiB0aGUgZGlmZmVyZW50IHVubWFwcGluZyBzY2VuYXJpb3MuIExldCYjMzk7cyBzdGFydCBieSBmaW5kaW5nIGFsbCB0aGUgcGxhY2VzIGBrdm1femFwX2dmbl9yYW5nZWAgaXMgYWN0dWFsbHkgKmNhbGxlZCogZnJvbS4gVGhhdCYjMzk7bGwgaWxsdW1pbmF0ZSB0aGUgdHJpZ2dlcnMgZm9yIEdGTiB1bm1hcHBpbmcgYW5kIHRoZSBhc3NvY2lhdGVkIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1femFwX2dmbl9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz03MDA2PXN0YXRpYyBib29sIGt2bV9ybWFwX3phcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm5fc3RhcnQsIGdmbl90IGdmbl9lbmQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MDM5LSAqL1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MDQwOnZvaWQga3ZtX3phcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm5fc3RhcnQsIGdmbl90IGdmbl9lbmQpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwNDEte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzA2NC19XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjcwNjU6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV96YXBfZ2ZuX3JhbmdlKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzA2Ni1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ5MzE9dm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MDE2LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MDE3Olx0a3ZtX3phcF9nZm5fcmFuZ2Uoa3ZtLCBnZm4sIGdmbiAmIzQzOyBQVFJTX1BFUl9QTUQpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MDE4LW91dDpcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA5NTQ9dm9pZCBfX2t2bV9zZXRfb3JfY2xlYXJfYXBpY3ZfaW5oaWJpdChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwOTkwLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwOTkxOlx0XHRcdGt2bV96YXBfZ2ZuX3JhbmdlKGt2bSwgZ2ZuLCBnZm4mIzQzOzEpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTEwOTkyLVx0XHRcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UsIGlkeCk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTE0MDg0PXN0YXRpYyB2b2lkIGt2bV9ub25jb2hlcmVudF9kbWFfYXNzaWdubWVudF9zdGFydF9vcl9zdG9wKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTQwOTUtXHRpZiAoa3ZtX2NoZWNrX2hhc19xdWlyayhrdm0sIEtWTV9YODZfUVVJUktfSUdOT1JFX0dVRVNUX1BBVCkpXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTQwOTY6XHRcdGt2bV96YXBfZ2ZuX3JhbmdlKGt2bSwgZ3BhX3RvX2dmbigwKSwgZ3BhX3RvX2dmbih+MFVMTCkpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTE0MDk3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM5NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byBLVk0mIzM5O3MgTU1VIFVubWFwcGluZyBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IEtWTSBoYW5kbGVzIHVubWFwcGluZyBndWVzdCBwaHlzaWNhbCBmcmFtZSBudW1iZXJzLCBzcGVjaWZpY2FsbHkgd2hlbiB0cmlnZ2VyZWQgYnkgTU1VIG5vdGlmaWVycy4gVGhlIGVudHJ5IHBvaW50IGlzIGBrdm1fdW5tYXBfZ2ZuX3JhbmdlYCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IHdpdGhpbiB0aGUgY29udGV4dCBvZiBUcmFuc2xhdGlvbiBMb29rYXNpZGUgQnVmZmVyIChUTEIpIGludmFsaWRhdGlvbi4KCk15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgdGhlIGNvZGUgZGV0ZXJtaW5lcyB3aGVuIGEgcGFnZSB0YWJsZSBlbnRyeSAoUFRFKSBvciBhIGxlYWYgcGFnZSB0YWJsZSBjYW4gYmUgc2tpcHBlZCBkdXJpbmcgdGhlIHVubWFwcGluZyBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBUcmFuc2xhdGlvbiBMb29rYXNpZGUgQnVmZmVyIChUTEIpIG9wZXJhdGlvbnMuIFRoZSBuZXcgYHRkcF9tbXVfY2FuX3NraXBfbGVhZl9wdGAgYW5kIGB0ZHBfbW11X3JhbmdlX2NvdmVyc19sZWFmX3B0YCBmdW5jdGlvbnMgc2VlbSBrZXkgaGVyZSwgYW5kIEkgc3VzcGVjdCB0aGV5JiMzOTtyZSBpbmZsdWVuY2luZyB0aGUgYmVoYXZpb3Igb2YgYHRkcF9tbXVfemFwX2xlYWZzYC4gVGhlIHBhdGNoIG1lbnRpb25zIG1vZGlmaWNhdGlvbnMgdG8gYHRkcF9tbXVfemFwX2xlYWZzYCwgc28gSSBzaG91bGQgYW5hbHl6ZSB0aGF0LgoKU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBpZGVudGlmeSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGluIHRoZSBjb250ZXh0IG9mIHVubWFwcGluZy4gVGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIGV4YW1pbmUgY2xvc2VseSBhcmUgYGt2bV90ZHBfbW11X3phcF9sZWFmc2AsIGBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VgLCBga3ZtX3phcF9nZm5fcmFuZ2VgLCBhbmQgb2YgY291cnNlIGBrdm1fdW5tYXBfZ2ZuX3JhbmdlYCBpdHNlbGYuCgpJJiMzOTtsbCBzdGFydCBieSBleGFtaW5pbmcgYGt2bV90ZHBfbW11X3phcF9sZWFmc2AgYW5kIGBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VgIGluIGBhcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY2AsIGFzIHRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb25zIGZvciB0aGlzIHNwZWNpZmljIHBhdGguCgpPZiBjb3Vyc2UsIHRoZSBLVk0gY29uZmlndXJhdGlvbiBpcyBlc3NlbnRpYWwgaGVyZSwgc28gSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyB0byBlbnN1cmUgYENPTkZJR19LVk1gIGlzIGVuYWJsZWQgYW5kIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzE1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBDb25maWd1cmF0aW9uIGFuZCBDb25kaXRpb25hbCBDb21waWxhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBLVk1gIGFuZCBgS1ZNX1g4NmAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBlbHNlIHJlbGV2YW50IHRvIHRoZSBLVk0gc2V0dXAuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4KClRoZW4gSSBzZWUgdGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSB0b3VjaGluZyBgYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNgLiBUaGlzIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJcyB0aGlzIGNvZGUgb25seSBpbmNsdWRlZCB1bmRlciBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzPyBLbm93aW5nIGlmIGB0ZHBfbW11LmNgIGlzIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkgaXMgYWJzb2x1dGVseSBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYnVpbGQgc3lzdGVtIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgdGhlIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gaXRzIGluY2x1c2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGRwX21tdSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vTWFrZWZpbGU9OD1rdm0teVx0XHRcdCYjNDM7PSB4ODYubyBlbXVsYXRlLm8gaXJxLm8gbGFwaWMubyBjcHVpZC5vIHBtdS5vIG10cnIubyBcXFxuLS1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xMC1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZToxMTprdm0tJChDT05GSUdfWDg2XzY0KSAmIzQzOz0gbW11L3RkcF9pdGVyLm8gbW11L3RkcF9tbXUub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlLTEyLWt2bS0kKENPTkZJR19LVk1fSU9BUElDKSAmIzQzOz0gaTgyNTkubyBpODI1NC5vIGlvYXBpYy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzQ1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IGBDT05GSUdfWDg2XzY0YCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBUaGUgY29yZSBjb25maWdzIEkmIzM5O20gZGVhbGluZyB3aXRoIGFyZSBgS1ZNYCBhbmQsIG9mIGNvdXJzZSwgYFg4Nl82NGAuIE5vIHN1cnByaXNlcyB0aGVyZS4KCk15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aG9zZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHRoZSBUcmFuc3BhcmVudCBQYWdlIFNoYXJpbmcgKFRQUykgcHJvY2VzcyB3aXRoaW4gS1ZNOiBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCwgYGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZWAsIGB0ZHBfaXRlcl9yZXN0YXJ0YCwgYHRkcF9pdGVyX25leHRgLCBhbmQgYHRkcF9pdGVyX3NraXBfY2hpbGRgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBkcml2aW5nIHRoZSBUUFMgbG9naWMgdGhhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9yb3VnaGx5LgoKSG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSB0byBjaGVjayBpZiBgdGRwX2l0ZXJfcmVzdGFydGAsIGB0ZHBfaXRlcl9uZXh0YCwgYW5kIGB0ZHBfaXRlcl9za2lwX2NoaWxkYCBhcmUgZXhwb3J0ZWQgc3ltYm9scy4gQXJlIHRoZXkgaW50ZW5kZWQgZm9yIGV4dGVybmFsIHVzZSwgb3IgYXJlIHRoZXkgaW50ZXJuYWwgdG8gdGhlIFRQUyBpbXBsZW1lbnRhdGlvbj8gVGhhdOKAmXMgaW1wb3J0YW50IGZvciBkZXRlcm1pbmluZyBob3cgbW9kdWxhciB0aGlzIFRQUyBpbXBsZW1lbnRhdGlvbiBpcyBhbmQgZm9yIHJlYXNvbmluZyBhYm91dCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGVzZSBzeW1ib2xzIGFyZSB2aXNpYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHBfaXRlcl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTExLSAqL1xuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jOjEyOnN0YXRpYyB2b2lkIHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTEzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMjItICovXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM6MjM6dm9pZCB0ZHBfaXRlcl9yZXN0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0yNC17XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTMwLVx0aXRlci1cdTAwM2VnZm4gPSBnZm5fcm91bmRfZm9yX2xldmVsKGl0ZXItXHUwMDNlbmV4dF9sYXN0X2xldmVsX2dmbiwgaXRlci1cdTAwM2VsZXZlbCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM6MzE6XHR0ZHBfaXRlcl9yZWZyZXNoX3NwdGVwKGl0ZXIpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTMyLVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0zOS0gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYzo0MDp2b2lkIHRkcF9pdGVyX3N0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlciwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy00MS1cdFx0ICAgIGludCBtaW5fbGV2ZWwsIGdmbl90IG5leHRfbGFzdF9sZXZlbF9nZm4sIGdmbl90IGdmbl9iaXRzKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy01Ni1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYzo1NzpcdHRkcF9pdGVyX3Jlc3RhcnQoaXRlcik7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtNTgtfVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYz04MT1zdGF0aWMgYm9vbCB0cnlfc3RlcF9kb3duKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMTAwLVx0aXRlci1cdTAwM2VnZm4gPSBnZm5fcm91bmRfZm9yX2xldmVsKGl0ZXItXHUwMDNlbmV4dF9sYXN0X2xldmVsX2dmbiwgaXRlci1cdTAwM2VsZXZlbCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM6MTAxOlx0dGRwX2l0ZXJfcmVmcmVzaF9zcHRlcChpdGVyKTtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xMDItXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jPTEzNj1zdGF0aWMgYm9vbCB0cnlfc3RlcF91cChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTE0Mi1cdGl0ZXItXHUwMDNlZ2ZuID0gZ2ZuX3JvdW5kX2Zvcl9sZXZlbChpdGVyLVx1MDAzZWdmbiwgaXRlci1cdTAwM2VsZXZlbCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM6MTQzOlx0dGRwX2l0ZXJfcmVmcmVzaF9zcHRlcChpdGVyKTtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xNDQtXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTE2My0gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYzoxNjQ6dm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xNjUte1xuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTE2Ni1cdGlmIChpdGVyLVx1MDAzZXlpZWxkZWQpIHtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYzoxNjc6XHRcdHRkcF9pdGVyX3Jlc3RhcnQoaXRlcik7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMTY4LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTE4Mi1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYzoxODM6dm9pZCB0ZHBfaXRlcl9za2lwX2NoaWxkKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xODQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI0NAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgVHJhaW4gb2YgVGhvdWdodCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGVzZSB0aGluZ3Mg4oCTIHdoYXRldmVyICYjMzQ7dGhleSYjMzQ7IGFyZSBpbiB0aGlzIGNvbnRleHQg4oCTIHRoZXkgYXJlbiYjMzk7dCBqdXN0IG9uZSB1bmNoYW5naW5nIHRoaW5nLiBUaGV5JiMzOTtyZSBkeW5hbWljLCBhbmQgdGhhdCBtZWFucyB0aGV5IHNob3VsZCBoYXZlIGRpc3RpbmN0IHN5bWJvbGljIHJlcHJlc2VudGF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc29tZSBhZGRpdGlvbnMgdG8gdGhlIHN5bWJvbGljIHNldC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gaW5jb3Jwb3JhdGUgYGt2bV90ZHBfbW11X3phcF9sZWFmc2AsIGBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VgLCBgdGRwX2l0ZXJfcmVzdGFydGAsIGB0ZHBfaXRlcl9uZXh0YCwgYW5kIGB0ZHBfaXRlcl9za2lwX2NoaWxkYCBpbnRvIHRoZSBwaWN0dXJlLgoKSG9sZCBvbiwgYmVmb3JlIEkgbW92ZSBvbiwgSSBzaG91bGQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhhdCBmaXJzdCBvbmUuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpZiBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCBpcywgaW4gZmFjdCwgc3RhdGljLiBUaGlzIGlzIGNydWNpYWwgZm9yIGNvbnNpc3RlbmN5LiBHb3R0YSBnZXQgdGhhdCBiaXQgcmlnaHQgZmlyc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV90ZHBfbW11X3phcF9sZWFmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jPTk3MT1zdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzNC0gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjEwMzU6Ym9vbCBrdm1fdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGZsdXNoKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzYwCgkJCQkJCQlvdXRwdXQ6IDE0MwoJCQkJCQkJdGhvdWdodHM6IDMzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIFREUCBNTVUgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIGBrdm1fdGRwX21tdV96YXBfbGVhZnNgIGlzbiYjMzk7dCBhIHN0YXRpYyBjb21wb25lbnQsIGdvdCBpdC4gTm93LCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgYEtWTWAgYW5kIGBYODZfNjRgLiBIbW0sIGBYODZfNjRgIGlzIGFuIGFyY2hpdGVjdHVyZSBjb25maWcgdGhvdWdoLCBub3QgYSBmZWF0dXJlLiBCdXQgdGhlIHByb21wdCBzYWlkIHRvIGluY2x1ZGUgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncywgYW5kIGBYODZfNjRgIGlzIHByZXR0eSBzdGFuZGFyZCBmb3IgNjQtYml0IHg4Niwgc28gaXQgZG9lc24mIzM5O3QgcmVhbGx5IG1hdHRlciBpZiBJIGluY2x1ZGUgaXQgb3Igbm90LiBJJiMzOTtsbCBqdXN0IGtlZXAgaXQgc2ltcGxlIGFuZCBzdGljayB3aXRoIGBLVk1gIGZvciBub3cuCgpSaWdodCwgcmV2aWV3aW5nIHRoZSBjaGFuZ2U6IHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgS1ZNJiMzOTtzIFREUCBNTVUsIHNwZWNpZmljYWxseSB0byBvcHRpbWl6ZSB0aGUgemFwcGluZyBwcm9jZXNzIGJ5IHNraXBwaW5nIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBvcHRpbWl6YXRpb24gd2l0aGluIHRoZSBwYWdlIHRhYmxlIG1hbmFnZW1lbnQsIG1ha2luZyBpdCBhbiBpbnRlcmVzdGluZyB0YXJnZXQgZm9yIGZ1enppbmcuIEl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQg4oCTIEtWTSBiZWluZyB0aGUga2V5IOKAkyB3aGljaCBtZWFucyBgV29ydGhGdXp6aW5nYCBpcyBhYnNvbHV0ZWx5IHRydWUgaGVyZS4KClNvLCBmb3IgZnV6emluZyBmb2N1cywgdGhlIGltcG9ydGFudCBzeW1ib2xzIGFyZTogYGt2bV90ZHBfbW11X3phcF9sZWFmc2AsIGBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VgLCBgdGRwX2l0ZXJfcmVzdGFydGAsIGB0ZHBfaXRlcl9uZXh0YCwgYW5kIGB0ZHBfaXRlcl9za2lwX2NoaWxkYC4KCkFuZCB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbiBpcyBkZWZpbml0ZWx5IGp1c3QgYEtWTWAuCgpUaGUgcmVhc29uaW5nIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZSBwYXRjaCBtb2RpZmllcyBLVk0mIzM5O3MgVERQIE1NVSB0byBza2lwIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMsIG9wdGltaXppbmcgaG93IHdlIGhhbmRsZSBwYWdlIHRhYmxlcy4gVGhpcyBjb2RlIGlzIGFjdGl2ZSBkdXJpbmcgS1ZNIGd1ZXN0IG1lbW9yeSB1bm1hcHBpbmcgb3IgemFwcGluZywgbWFraW5nIGl0IGEgY3JpdGljYWwgYXJlYSB0byBhbmFseXplLgoKQWxyaWdodCwgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV90ZHBfbW11X3phcF9sZWFmcyYjMzQ7LAogICAgJiMzNDtrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2UmIzM0OywKICAgICYjMzQ7dGRwX2l0ZXJfcmVzdGFydCYjMzQ7LAogICAgJiMzNDt0ZHBfaXRlcl9uZXh0JiMzNDssCiAgICAmIzM0O3RkcF9pdGVyX3NraXBfY2hpbGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBURFAgTU1VIHRvIHNraXAgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyB3aGVuIHphcHBpbmcsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHBhZ2UgdGFibGUgbWFuYWdlbWVudCBsb2dpYy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIHJ1bm5pbmcgS1ZNIGd1ZXN0cyBhbmQgcGVyZm9ybWluZyBtZW1vcnkgdW5tYXBwaW5nIG9yIHphcHBpbmcgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3RkcF9tbXVfemFwX2xlYWZzJiMzNDssCiAgICAmIzM0O2t2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZSYjMzQ7LAogICAgJiMzNDt0ZHBfaXRlcl9yZXN0YXJ0JiMzNDssCiAgICAmIzM0O3RkcF9pdGVyX25leHQmIzM0OywKICAgICYjMzQ7dGRwX2l0ZXJfc2tpcF9jaGlsZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIFREUCBNTVUgdG8gc2tpcCBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzIHdoZW4gemFwcGluZywgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgcGFnZSB0YWJsZSBtYW5hZ2VtZW50IGxvZ2ljLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHdoZW4gcnVubmluZyBLVk0gZ3Vlc3RzIGFuZCBwZXJmb3JtaW5nIG1lbW9yeSB1bm1hcHBpbmcgb3IgemFwcGluZyBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSYjMzk7cyBURFAgTU1VIHRvIHNraXAgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyBkdXJpbmcgemFwcGluZy4gSXQgaW50cm9kdWNlcyB0d28gbmV3IGJvb2xlYW4gZmllbGRzOiBgdGRwX21tdV9lbXB0eV9sZWFmX3B0YCBpbiBgc3RydWN0IGt2bV9tbXVfcGFnZWAgYW5kIGBza2lwX2NoaWxkYCBpbiBgc3RydWN0IHRkcF9pdGVyYC4gQm90aCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCB1cG9uIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiAoYHRkcF9tbXVfaW5pdF9zcGAgYW5kIGB0ZHBfaXRlcl9yZXN0YXJ0YCByZXNwZWN0aXZlbHkpLiBUaGVzZSBzdHJ1Y3R1cmVzIGFyZSBpbnRlcm5hbCB0byBLVk0gYW5kIGFyZSBub3QgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNzY2ODgyM2M4NjFmYjRlNjYxZTQwM2UxNzVkNWZmMDM4NjIyNmFkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMDg6MDg6MzIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oIGIvYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaAppbmRleCA3M2NkY2JjY2M4OWU4Li41MzA1YWEzZTY4OGI3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmgKQEAgLTk1LDYgJiM0Mzs5NSw4IEBAIHN0cnVjdCBrdm1fbW11X3BhZ2UgewogCX07CiAKIAlib29sIGhhc19tYXBwZWRfaG9zdF9tbWlvOwomIzQzOwkvKiBURFAgTU1VIG9ubHk6IG5vIHByZXNlbnQgbGVhZiBTUFRFcyBleGlzdCBpbiB0aGlzIGxlYWYgcGFnZSB0YWJsZS4gKi8KJiM0MzsJYm9vbCB0ZHBfbW11X2VtcHR5X2xlYWZfcHQ7CiAKIAl1bmlvbiB7CiAJCS8qIFRoZXNlIHR3byBtZW1iZXJzIGFyZW4mIzM5O3QgdXNlZCBmb3IgVERQIE1NVSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jCmluZGV4IDllMTdiZmE4MDkwMTEuLjFkODdkYjE0YTZhZTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMKQEAgLTIzLDYgJiM0MzsyMyw3IEBAIHN0YXRpYyB2b2lkIHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoc3RydWN0IHRkcF9pdGVyICppdGVyKQogdm9pZCB0ZHBfaXRlcl9yZXN0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcikKIHsKIAlpdGVyLSZndDt5aWVsZGVkID0gZmFsc2U7CiYjNDM7CWl0ZXItJmd0O3NraXBfY2hpbGQgPSBmYWxzZTsKIAlpdGVyLSZndDt5aWVsZGVkX2dmbiA9IGl0ZXItJmd0O25leHRfbGFzdF9sZXZlbF9nZm47CiAJaXRlci0mZ3Q7bGV2ZWwgPSBpdGVyLSZndDtyb290X2xldmVsOwogCkBAIC0xNjcsOSAmIzQzOzE2OCwxMSBAQCB2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKQogCQlyZXR1cm47CiAJfQogCi0JaWYgKHRyeV9zdGVwX2Rvd24oaXRlcikpCiYjNDM7CWlmICghaXRlci0mZ3Q7c2tpcF9jaGlsZCAmYW1wOyZhbXA7IHRyeV9zdGVwX2Rvd24oaXRlcikpCiAJCXJldHVybjsKIAomIzQzOwlpdGVyLSZndDtza2lwX2NoaWxkID0gZmFsc2U7CiYjNDM7CiAJZG8gewogCQlpZiAodHJ5X3N0ZXBfc2lkZShpdGVyKSkKIAkJCXJldHVybjsKQEAgLTE3NywzICYjNDM7MTgwLDggQEAgdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcikKIAlpdGVyLSZndDt2YWxpZCA9IGZhbHNlOwogfQogCiYjNDM7dm9pZCB0ZHBfaXRlcl9za2lwX2NoaWxkKHN0cnVjdCB0ZHBfaXRlciAqaXRlcikKJiM0Mzt7CiYjNDM7CVdBUk5fT05fT05DRShpdGVyLSZndDt5aWVsZGVkKTsKJiM0MzsJaXRlci0mZ3Q7c2tpcF9jaGlsZCA9IHRydWU7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oCmluZGV4IDM2NGM1ZGE2YzQ5OTEuLjQ3YWM4YmQ0Mzc5NDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgKQEAgLTExNCw2ICYjNDM7MTE0LDExIEBAIHN0cnVjdCB0ZHBfaXRlciB7CiAJICogbGV2ZWwgaW5zdGVhZCBvZiBhZHZhbmNpbmcgdG8gdGhlIG5leHQgZW50cnkuCiAJICovCiAJYm9vbCB5aWVsZGVkOwomIzQzOwkvKgomIzQzOwkgKiBUcnVlIGlmIHRkcF9pdGVyX25leHQoKSBzaG91bGQgc2tpcCB0aGUgY2hpbGQgcGFnZSB0YWJsZSByZWZlcmVuY2VkIGJ5CiYjNDM7CSAqIHRoZSBjdXJyZW50IFNQVEUsIGluc3RlYWQgb2YgZGVzY2VuZGluZyBpbnRvIGl0LgomIzQzOwkgKi8KJiM0MzsJYm9vbCBza2lwX2NoaWxkOwogfTsKIAogLyoKQEAgLTEzOSw1ICYjNDM7MTQ0LDYgQEAgdm9pZCB0ZHBfaXRlcl9zdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsCiAJCSAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cyk7CiB2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKTsKIHZvaWQgdGRwX2l0ZXJfcmVzdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpOwomIzQzO3ZvaWQgdGRwX2l0ZXJfc2tpcF9jaGlsZChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpOwogCiAjZW5kaWYgLyogX19LVk1fWDg2X01NVV9URFBfSVRFUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jCmluZGV4IGMxY2JhZTY1ZDIzOWYuLjg0ZTE4YmQ2ZTc3NzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jCkBAIC0yMzgsNiAmIzQzOzIzOCw3IEBAIHN0YXRpYyB2b2lkIHRkcF9tbXVfaW5pdF9zcChzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwgdGRwX3B0ZXBfdCBzcHRlcCwKIAlzcC0mZ3Q7Z2ZuID0gZ2ZuOwogCXNwLSZndDtwdGVwID0gc3B0ZXA7CiAJc3AtJmd0O3RkcF9tbXVfcGFnZSA9IHRydWU7CiYjNDM7CXNwLSZndDt0ZHBfbW11X2VtcHR5X2xlYWZfcHQgPSBmYWxzZTsKIAogCXRyYWNlX2t2bV9tbXVfZ2V0X3BhZ2Uoc3AsIHRydWUpOwogfQpAQCAtNTI3LDYgJiM0Mzs1MjgsMTAgQEAgc3RhdGljIGludCBfX2hhbmRsZV9jaGFuZ2VkX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwKIAlpZiAoaXNfbGVhZikKIAkJY2hlY2tfc3B0ZV93cml0YWJsZV9pbnZhcmlhbnRzKG5ld19zcHRlKTsKIAomIzQzOwlpZiAoaXNfbGVhZiAmYW1wOyZhbXA7ICF3YXNfbGVhZiAmYW1wOyZhbXA7IHNwLSZndDt0ZHBfbW11X3BhZ2UgJmFtcDsmYW1wOwomIzQzOwkgICAgc3AtJmd0O3JvbGUubGV2ZWwgPT0gUEdfTEVWRUxfNEspCiYjNDM7CQlXUklURV9PTkNFKHNwLSZndDt0ZHBfbW11X2VtcHR5X2xlYWZfcHQsIGZhbHNlKTsKJiM0MzsKIAkvKgogCSAqIFRoZSBvbmx5IHRpbWVzIGEgU1BURSBzaG91bGQgYmUgY2hhbmdlZCBmcm9tIGEgbm9uLXByZXNlbnQgdG8KIAkgKiBub24tcHJlc2VudCBzdGF0ZSBpcyB3aGVuIGFuIE1NSU8gZW50cnkgaXMgaW5zdGFsbGVkL21vZGlmaWVkLwpAQCAtOTIzLDYgJiM0Mzs5MjgsMzkgQEAgYm9vbCBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBib29sIHRkcF9tbXVfcmFuZ2VfY292ZXJzX2xlYWZfcHQoc3RydWN0IHRkcF9pdGVyICppdGVyLAomIzQzOwkJCQkJIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKJiM0MzsKJiM0MzsJc3AgPSBzcHRlcF90b19zcChyY3VfZGVyZWZlcmVuY2UoaXRlci0mZ3Q7c3B0ZXApKTsKJiM0MzsJcmV0dXJuIHNwLSZndDtnZm4gJmd0Oz0gc3RhcnQgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgc3AtJmd0O2dmbiAmIzQzOyBLVk1fUEFHRVNfUEVSX0hQQUdFKFBHX0xFVkVMXzJNKSAmbHQ7PSBlbmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHRkcF9tbXVfY2FuX3NraXBfbGVhZl9wdChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsCiYjNDM7CQkJCSAgICAgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fbW11X3BhZ2UgKmNoaWxkX3NwOwomIzQzOwomIzQzOwlpZiAoaXRlci0mZ3Q7bGV2ZWwgIT0gUEdfTEVWRUxfMk0gfHwKJiM0MzsJICAgICFpc19zaGFkb3dfcHJlc2VudF9wdGUoaXRlci0mZ3Q7b2xkX3NwdGUpIHx8CiYjNDM7CSAgICBpc19sYXN0X3NwdGUoaXRlci0mZ3Q7b2xkX3NwdGUsIGl0ZXItJmd0O2xldmVsKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKGl0ZXItJmd0O2dmbiAmbHQ7IHN0YXJ0IHx8CiYjNDM7CSAgICBpdGVyLSZndDtnZm4gJiM0MzsgS1ZNX1BBR0VTX1BFUl9IUEFHRShQR19MRVZFTF8yTSkgJmd0OyBlbmQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNraXAgcmV0YWluZWQgZW1wdHkgNEsgbGVhZiBwYWdlIHRhYmxlcyB3aXRob3V0IHVubGlua2luZyB0aGVtLCBzbwomIzQzOwkgKiBmdXR1cmUgZmF1bHRzIGNhbiByZXVzZSB0aGUgcGFnaW5nIHN0cnVjdHVyZS4KJiM0MzsJICovCiYjNDM7CWNoaWxkX3NwID0gc3B0ZV90b19jaGlsZF9zcChpdGVyLSZndDtvbGRfc3B0ZSk7CiYjNDM7CXJldHVybiBjaGlsZF9zcC0mZ3Q7cm9sZS5sZXZlbCA9PSBQR19MRVZFTF80SyAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBSRUFEX09OQ0UoY2hpbGRfc3AtJmd0O3RkcF9tbXVfZW1wdHlfbGVhZl9wdCk7CiYjNDM7fQomIzQzOwogLyoKICAqIElmIGNhbl95aWVsZCBpcyB0cnVlLCB3aWxsIHJlbGVhc2UgdGhlIE1NVSBsb2NrIGFuZCByZXNjaGVkdWxlIGlmIHRoZQogICogc2NoZWR1bGVyIG5lZWRzIHRoZSBDUFUgb3IgdGhlcmUgaXMgY29udGVudGlvbiBvbiB0aGUgTU1VIGxvY2suIElmIHRoaXMKQEAgLTkzNCw4ICYjNDM7OTcyLDEwIEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCwKIAkJCSAgICAgIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgY2FuX3lpZWxkLCBib29sIGZsdXNoKQogewogCXN0cnVjdCB0ZHBfaXRlciBpdGVyOwomIzQzOwlib29sIG1heV9za2lwX2xlYWZfcHRzOwogCiAJZW5kID0gbWluKGVuZCwgdGRwX21tdV9tYXhfZ2ZuX2V4Y2x1c2l2ZSgpKTsKJiM0MzsJbWF5X3NraXBfbGVhZl9wdHMgPSBlbmQgLSBzdGFydCAmZ3Q7PSBLVk1fUEFHRVNfUEVSX0hQQUdFKFBHX0xFVkVMXzJNKTsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKIApAQCAtOTQ4LDE4ICYjNDM7OTg4LDM0IEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCwKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKCFpc19zaGFkb3dfcHJlc2VudF9wdGUoaXRlci5vbGRfc3B0ZSkgfHwKLQkJICAgICFpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpCiYjNDM7CQlpZiAobWF5X3NraXBfbGVhZl9wdHMgJmFtcDsmYW1wOwomIzQzOwkJICAgIHRkcF9tbXVfY2FuX3NraXBfbGVhZl9wdCgmYW1wO2l0ZXIsIHN0YXJ0LCBlbmQpKSB7CiYjNDM7CQkJdGRwX2l0ZXJfc2tpcF9jaGlsZCgmYW1wO2l0ZXIpOwogCQkJY29udGludWU7CiYjNDM7CQl9CiAKLQkJdGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgJmFtcDtpdGVyLCBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSk7CiYjNDM7CQlpZiAoaXNfc2hhZG93X3ByZXNlbnRfcHRlKGl0ZXIub2xkX3NwdGUpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpIHsKJiM0MzsJCQl0ZHBfbW11X2l0ZXJfc2V0X3NwdGUoa3ZtLCAmYW1wO2l0ZXIsCiYjNDM7CQkJCQkgICAgICBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSk7CiAKLQkJLyoKLQkJICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2VzbiYjMzk7dCByZXF1aXJlIGEgVExCIGZsdXNoLAotCQkgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuCi0JCSAqLwotCQlpZiAoIXJvb3QtJmd0O3JvbGUuaW52YWxpZCkKLQkJCWZsdXNoID0gdHJ1ZTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFphcHBpbmdzIFNQVEVzIGluIGludmFsaWQgcm9vdHMgZG9lc24mIzM5O3QgcmVxdWlyZSBhIFRMQiBmbHVzaCwKJiM0MzsJCQkgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKCFyb290LSZndDtyb2xlLmludmFsaWQpCiYjNDM7CQkJCWZsdXNoID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChtYXlfc2tpcF9sZWFmX3B0cyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgaXRlci5sZXZlbCA9PSBQR19MRVZFTF80SyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgc3B0ZV9pbmRleChyY3VfZGVyZWZlcmVuY2UoaXRlci5zcHRlcCkpID09IFNQVEVfRU5UX1BFUl9QQUdFIC0gMSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdGRwX21tdV9yYW5nZV9jb3ZlcnNfbGVhZl9wdCgmYW1wO2l0ZXIsIHN0YXJ0LCBlbmQpKSB7CiYjNDM7CQkJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7CiYjNDM7CiYjNDM7CQkJc3AgPSBzcHRlcF90b19zcChyY3VfZGVyZWZlcmVuY2UoaXRlci5zcHRlcCkpOwomIzQzOwkJCVdSSVRFX09OQ0Uoc3AtJmd0O3RkcF9tbXVfZW1wdHlfbGVhZl9wdCwgdHJ1ZSk7CiYjNDM7CQl9CiAJfQogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTE2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIFREUCBNTVUgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgdGhlIEtWTSYjMzk7cyBUd28tRGltZW5zaW9uYWwgUGFnaW5nIE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQgKFREUCBNTVUpIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgZm9yIHg4Ni4gVGhlIGNvcmUgaWRlYSBpcyB0byBza2lwIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgZHVyaW5nIHRoZSAmIzM0O3phcHBpbmcmIzM0OyBwcm9jZXNzLCB3aGljaCBpcyBhIGNvbW1vbiBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gd2hlbiByZW1vdmluZyBtYXBwaW5ncy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGFkZGluZyBhIG5ldyBib29sZWFuIGZpZWxkLCBgdGRwX21tdV9lbXB0eV9sZWFmX3B0YCwgdG8gdGhlIGBzdHJ1Y3Qga3ZtX21tdV9wYWdlYC4KCk15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFNpbmNlIGBzdHJ1Y3Qga3ZtX21tdV9wYWdlYCBpcyBhbGxvY2F0ZWQgdmlhIGEgYGttZW1fY2FjaGVgLCBpdCBzaG91bGQgYmUgc2FmZSBpbiBtb3N0IGNhc2VzLCBidXQgdGhlIGFkZGVkIGB0ZHBfbW11X2VtcHR5X2xlYWZfcHRgIG5lZWRzIGNhcmVmdWwgc2NydXRpbnkuIENydWNpYWxseSwgaXMgdGhpcyBgc3RydWN0IGt2bV9tbXVfcGFnZWAgZXZlciBleHBvc2VkIHRvIHVzZXJzcGFjZT8gTm8sIGdvb2QsIGl0JiMzOTtzIGludGVybmFsIHRvIEtWTSYjMzk7cyBzaGFkb3cgcGFnaW5nL1REUCBpbXBsZW1lbnRhdGlvbi4gVGhhdCBzaWduaWZpY2FudGx5IHJlZHVjZXMgdGhlIGF0dGFjayBzdXJmYWNlLgoKTm93LCB0aGUgcGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIGEgYHNraXBfY2hpbGRgIGZsYWcgdG8gYHN0cnVjdCB0ZHBfaXRlcmAuIFRoaXMgaXRlcmF0b3IgaXMgdXNlZCB3aXRoaW4gZnVuY3Rpb25zIGxpa2UgYHRkcF9tbXVfemFwX2xlYWZzYC4gSG1tLCBgc3RydWN0IHRkcF9pdGVyIGl0ZXI7YCBpcyBkZWNsYXJlZCBhcyBhIGxvY2FsIHZhcmlhYmxlLiBPa2F5LCBhbmQgaXQmIzM5O3MgaW5pdGlhbGl6ZWQgYnkgYHRkcF9pdGVyX3N0YXJ0KClgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IHRoYXQgaW5pdGlhbGl6YXRpb24gY29ycmVjdGx5IHNldHMgYHNraXBfY2hpbGRgLCBhcyB0aGF0JiMzOTtzIHRoZSBuZXcgY29uZGl0aW9uYWwgbG9naWMuIEkgbmVlZCB0byBkaWcgaW50byBgdGRwX2l0ZXJfc3RhcnQoKWAgYW5kIHZlcmlmeSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhhdCBuZXcgZmllbGQgd2l0aGluIHRoZSBpdGVyYXRvci4gR290dGEgbWFrZSBzdXJlIGl0JiMzOTtzIGFsbCBoYW5kbGVkIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGRwX2l0ZXJfc3RhcnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jPTIzPXZvaWQgdGRwX2l0ZXJfcmVzdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTM5LSAqL1xuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jOjQwOnZvaWQgdGRwX2l0ZXJfc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTQxLVx0XHQgICAgaW50IG1pbl9sZXZlbCwgZ2ZuX3QgbmV4dF9sYXN0X2xldmVsX2dmbiwgZ2ZuX3QgZ2ZuX2JpdHMpXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oPTc2PXN0cnVjdCB0ZHBfaXRlciB7XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTEyOC0jZGVmaW5lIGZvcl9lYWNoX3RkcF9wdGVfbWluX2xldmVsKGl0ZXIsIGt2bSwgcm9vdCwgbWluX2xldmVsLCBzdGFydCwgZW5kKVx0XHQgIFxcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6MTI5Olx0Zm9yICh0ZHBfaXRlcl9zdGFydChcdTAwMjZpdGVyLCByb290LCBtaW5fbGV2ZWwsIHN0YXJ0LCBrdm1fZ2ZuX3Jvb3RfYml0cyhrdm0sIHJvb3QpKTsgXFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0xMzAtXHQgICAgIGl0ZXIudmFsaWQgXHUwMDI2XHUwMDI2IGl0ZXIuZ2ZuIFx1MDAzYyBlbmQ7XHRcdFx0XHRcdFx0ICBcXFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0xMzMtI2RlZmluZSBmb3JfZWFjaF90ZHBfcHRlX21pbl9sZXZlbF9hbGwoaXRlciwgcm9vdCwgbWluX2xldmVsKVx0XHRcXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oOjEzNDpcdGZvciAodGRwX2l0ZXJfc3RhcnQoXHUwMDI2aXRlciwgcm9vdCwgbWluX2xldmVsLCAwLCAwKTtcdFx0XFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0xMzUtXHRcdGl0ZXIudmFsaWQgXHUwMDI2XHUwMDI2IGl0ZXIuZ2ZuIFx1MDAzYyB0ZHBfbW11X21heF9nZm5fZXhjbHVzaXZlKCk7XHRcXFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaD0xNDE9dGRwX3B0ZXBfdCBzcHRlX3RvX2NoaWxkX3B0KHU2NCBwdGUsIGludCBsZXZlbCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtMTQyLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oOjE0Mzp2b2lkIHRkcF9pdGVyX3N0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlciwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0xNDQtXHRcdCAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4OTkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBJbXBsZW1lbnRhdGlvbiBvZiBgdGRwX2l0ZXJfc3RhcnRgKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIGNyYWNrIG9wZW4gdGhpcyBjb2RlIGFuZCBzZWUgd2hhdCBgdGRwX2l0ZXJfc3RhcnRgIGlzICpyZWFsbHkqIGRvaW5nLiYjMzQ7IE5vIGhhbmQtd2F2aW5nLCBubyBhYnN0cmFjdCBjb25jZXB0cyDigJMgSSB3YW50IHRvIHNlZSB0aGUgbml0dHktZ3JpdHR5LiBXaGF0JiMzOTtzIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgaXMgaXQgdG91Y2hpbmc/IElzIGl0IGFsbG9jYXRpbmcgbWVtb3J5PyBTZXR0aW5nIHVwIHNvbWUgc29ydCBvZiBpbnRlcm5hbCBzdGF0ZT8gV2hhdCBlZGdlIGNhc2VzIGRvZXMgaXQgaGFuZGxlIChvciAqbm90KiBoYW5kbGUsIG1vcmUgaW1wb3J0YW50bHkpPyBXaGVyZSBhcmUgdGhlIHBvdGVudGlhbCBnb3RjaGFzPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHVuZGVyc3RhbmRpbmcgdGhpcyBpcyBhYnNvbHV0ZWx5IGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyB3aG9sZSBpdGVyYXRpdmUgcHJvY2VzcyBpcyBzdXBwb3NlZCB0byB3b3JrLiBUaGlzIGlzIHRoZSBzdGFydGluZyBndW4sIGFuZCBrbm93aW5nIGV4YWN0bHkgaG93IGl0JiMzOTtzIGZpcmVkIGlzIGVzc2VudGlhbC4gTGV0JiMzOTtzIHNlZSBob3cgaXQgZ2V0cyB0aGlzIGl0ZXJhdG9yIG9mZiB0aGUgZ3JvdW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHRkcF9pdGVyX3N0YXJ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYz0yMz12b2lkIHRkcF9pdGVyX3Jlc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0zOS0gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYzo0MDp2b2lkIHRkcF9pdGVyX3N0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlciwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy00MS1cdFx0ICAgIGludCBtaW5fbGV2ZWwsIGdmbl90IG5leHRfbGFzdF9sZXZlbF9nZm4sIGdmbl90IGdmbl9iaXRzKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaD0xNDE9dGRwX3B0ZXBfdCBzcHRlX3RvX2NoaWxkX3B0KHU2NCBwdGUsIGludCBsZXZlbCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtMTQyLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oOjE0Mzp2b2lkIHRkcF9pdGVyX3N0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlciwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0xNDQtXHRcdCAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0ODkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGB0ZHBfaXRlci5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBLVk0gTU1VIGltcGxlbWVudGF0aW9uIGZvciB4ODYsIHNwZWNpZmljYWxseSB0aGUgYHRkcF9pdGVyLmNgIGZpbGUuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIG9mIHRoZSBrZXkgY29uY2VwdHMgYXQgcGxheSBoZXJlIOKAkyBuZXN0ZWQgcGFnaW5nLCB0cmFuc2xhdGlvbiBsb29rYXNpZGUgYnVmZmVyIChUTEIpIG1hbmFnZW1lbnQsIGFuZCB0aGUgY29tcGxleGl0aWVzIG9mIHRyYXZlcnNpbmcgdGhlIHBhZ2UgdGFibGVzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIE15IGZvY3VzIHdpbGwgYmUgYXJvdW5kIGxpbmUgNDAsIGFzIHRoYXQmIzM5O3MgdHlwaWNhbGx5IHdoZXJlIGludGVyZXN0aW5nIGluaXRpYWxpemF0aW9uIG9yIGVudHJ5IHBvaW50cyByZXNpZGUgaW4gbWFueSBrZXJuZWwgbW9kdWxlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIG1vZHVsZSBoYW5kbGVzIHRoZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIGluIGEgS1ZNIGNvbnRleHQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGUgTU1VIGl0ZXJhdG9yIHdvcmtzIGF0IHRoZSBsZWFmIGxldmVsLiBNeSBhaW0gaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XHRpdGVyLVx1MDAzZWdmbiA9IGdmbl9yb3VuZF9mb3JfbGV2ZWwoaXRlci1cdTAwM2VuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBpdGVyLVx1MDAzZWxldmVsKTtcbiAgMzE6XHRcdHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoaXRlcik7XG4gIDMyOlx0XG4gIDMzOlx0XHRpdGVyLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbiAgMzQ6XHR9XG4gIDM1Olx0XG4gIDM2Olx0LypcbiAgMzc6XHQgKiBTZXRzIGEgVERQIGl0ZXJhdG9yIHRvIHdhbGsgYSBwcmUtb3JkZXIgdHJhdmVyc2FsIG9mIHRoZSBwYWdpbmcgc3RydWN0dXJlXG4gIDM4Olx0ICogcm9vdGVkIGF0IHJvb3RfcHQsIHN0YXJ0aW5nIHdpdGggdGhlIHdhbGsgdG8gdHJhbnNsYXRlIG5leHRfbGFzdF9sZXZlbF9nZm4uXG4gIDM5Olx0ICovXG4gIDQwOlx0dm9pZCB0ZHBfaXRlcl9zdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG4gIDQxOlx0XHRcdCAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cylcbiAgNDI6XHR7XG4gIDQzOlx0XHRpZiAoV0FSTl9PTl9PTkNFKCFyb290IHx8IChyb290LVx1MDAzZXJvbGUubGV2ZWwgXHUwMDNjIDEpIHx8XG4gIDQ0Olx0XHRcdFx0IChyb290LVx1MDAzZXJvbGUubGV2ZWwgXHUwMDNlIFBUNjRfUk9PVF9NQVhfTEVWRUwpIHx8XG4gIDQ1Olx0XHRcdFx0IChnZm5fYml0cyBcdTAwMjZcdTAwMjYgbmV4dF9sYXN0X2xldmVsX2dmbiBcdTAwM2U9IGdmbl9iaXRzKSkpIHtcbiAgNDY6XHRcdFx0aXRlci1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuICA0NzpcdFx0XHRyZXR1cm47XG4gIDQ4Olx0XHR9XG4gIDQ5Olx0XG4gIDUwOlx0XHRpdGVyLVx1MDAzZW5leHRfbGFzdF9sZXZlbF9nZm4gPSBuZXh0X2xhc3RfbGV2ZWxfZ2ZuO1xuICA1MTpcdFx0aXRlci1cdTAwM2VnZm5fYml0cyA9IGdmbl9iaXRzO1xuICA1MjpcdFx0aXRlci1cdTAwM2Vyb290X2xldmVsID0gcm9vdC1cdTAwM2Vyb2xlLmxldmVsO1xuICA1MzpcdFx0aXRlci1cdTAwM2VtaW5fbGV2ZWwgPSBtaW5fbGV2ZWw7XG4gIDU0Olx0XHRpdGVyLVx1MDAzZXB0X3BhdGhbaXRlci1cdTAwM2Vyb290X2xldmVsIC0gMV0gPSAodGRwX3B0ZXBfdClyb290LVx1MDAzZXNwdDtcbiAgNTU6XHRcdGl0ZXItXHUwMDNlYXNfaWQgPSBrdm1fbW11X3BhZ2VfYXNfaWQocm9vdCk7XG4gIDU2Olx0XG4gIDU3Olx0XHR0ZHBfaXRlcl9yZXN0YXJ0KGl0ZXIpO1xuICA1ODpcdH1cbiAgNTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI4NAoJCQkJCQkJb3V0cHV0OiAyMTMKCQkJCQkJCXRob3VnaHRzOiA5NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyBpbiBLVk0gTU1VIE9wdGltaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHNraXBfY2hpbGRgIGluIHRoZSBgdGRwX2l0ZXJgIHN0cnVjdCBhbmQgYHRkcF9tbXVfZW1wdHlfbGVhZl9wdGAgaW4gYGt2bV9tbXVfcGFnZWAsIHRvIG9wdGltaXplIHRoZSBLVk0gTU1VIGJ5IHNraXBwaW5nIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMuIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLgoKVGhlIGB0ZHBfaXRlcl9zdGFydGAgZnVuY3Rpb24gY2FsbHMgYHRkcF9pdGVyX3Jlc3RhcnRgLCBhbmQgd2l0aGluIGB0ZHBfaXRlcl9yZXN0YXJ0YCwgYGl0ZXItJmd0O3NraXBfY2hpbGRgIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGBmYWxzZWAuIFRoYXQgbG9va3MgZ29vZC4gTW92aW5nIG9uLCB3aGVuIGluaXRpYWxpemluZyBhIG5ldyBga3ZtX21tdV9wYWdlYCB2aWEgYHRkcF9tbXVfaW5pdF9zcGAsICBgc3AtJmd0O3RkcF9tbXVfZW1wdHlfbGVhZl9wdGAgaXMgYWxzbyBzZXQgdG8gYGZhbHNlYC4gU28sIGJvdGggbmV3IGZpZWxkcyBhcmUgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCgpTaW5jZSBib3RoIHN0cnVjdHMgYXJlIGludGVybmFsIHRvIEtWTSBhbmQgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBzYWZlIGluIHRlcm1zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiAgQ29udHJvbCBmbG93IHJlbGllcyBvbiBpbml0aWFsaXplZCB2YXJpYWJsZXMsIHNvIHRoYXQmIzM5O3MgYSBwbHVzLiBUaGUgZGVzaWduIGlzIHB1cmVseSBhbiBvcHRpbWl6YXRpb24gZm9yIEtWTSYjMzk7cyBNTVUsIHNraXBwaW5nIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMsIHRoYXQgY291bGQgaGF2ZSB0aGUgcG90ZW50aWFsIG9mIHJlc3VsdGluZyBpbiBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gQnV0IHRob3NlIGlzc3VlcyB3aWxsIGJlIGNhdWdodCBieSBLQVNBTi4KCkxldCBtZSBkb3VibGUtY2hlY2suIExvb2tpbmcgYXQgYHRkcF9tbXVfcmFuZ2VfY292ZXJzX2xlYWZfcHRgLCBgc3B0ZXBfdG9fc3BgIHJlbGlhYmx5IGFjY2Vzc2VzIHRoZSBga3ZtX21tdV9wYWdlYCBmcm9tIHRoZSBTUFRFIHBvaW50ZXIsIGVuc3VyaW5nIHRoYXQgYWxsIGFjY2Vzc2VkIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQuIFRoZSBzYW1lIHBhdHRlcm4gaXMgdXNlZCBpbiBgdGRwX21tdV9jYW5fc2tpcF9sZWFmX3B0YC4gVGhhdCBjaGVja3Mgb3V0IHRvby4KCkFuZCwgZmluYWxseSwgYG1heV9za2lwX2xlYWZfcHRzYCBpcyBpbml0aWFsaXplZC4gRXZlcnl0aGluZyBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLgoKU28sIGluIGNvbmNsdXNpb24sIEkgZG9uJiMzOTt0IHNlZSBhbnkgaW1tZWRpYXRlIHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEtBU0FOIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBzdWJ0bGUgaXNzdWVzIGluIHRoZSBsb2dpYyBvZiB0aGlzIG9wdGltaXphdGlvbi4gTm8gbmVlZCB0byBicmluZyBpbiBLTVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJiMzOTtzIFREUCBNTVUgdG8gc2tpcCBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzIGR1cmluZyB6YXBwaW5nLiBJdCBpbnRyb2R1Y2VzIHR3byBuZXcgYm9vbGVhbiBmaWVsZHM6IGB0ZHBfbW11X2VtcHR5X2xlYWZfcHRgIGluIGBzdHJ1Y3Qga3ZtX21tdV9wYWdlYCBhbmQgYHNraXBfY2hpbGRgIGluIGBzdHJ1Y3QgdGRwX2l0ZXJgLiBCb3RoIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIHVwb24gc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIChgdGRwX21tdV9pbml0X3NwYCBhbmQgYHRkcF9pdGVyX3Jlc3RhcnRgIHJlc3BlY3RpdmVseSkuIFRoZXNlIHN0cnVjdHVyZXMgYXJlIGludGVybmFsIHRvIEtWTSBhbmQgYXJlIG5vdCBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHVzZWQgaW4gY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0mIzM5O3MgVERQIE1NVSB0byBza2lwIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgZHVyaW5nIHphcHBpbmcuIEl0IGludHJvZHVjZXMgdHdvIG5ldyBib29sZWFuIGZpZWxkczogYHRkcF9tbXVfZW1wdHlfbGVhZl9wdGAgaW4gYHN0cnVjdCBrdm1fbW11X3BhZ2VgIGFuZCBgc2tpcF9jaGlsZGAgaW4gYHN0cnVjdCB0ZHBfaXRlcmAuIEJvdGggZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgdXBvbiBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gKGB0ZHBfbW11X2luaXRfc3BgIGFuZCBgdGRwX2l0ZXJfcmVzdGFydGAgcmVzcGVjdGl2ZWx5KS4gVGhlc2Ugc3RydWN0dXJlcyBhcmUgaW50ZXJuYWwgdG8gS1ZNIGFuZCBhcmUgbm90IGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDg6MzMuMTU0MDc0MjcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY1NTIwODk2OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3RkcF9tbXVfemFwX2xlYWZzXCIsXG4gICAgXCJrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VcIixcbiAgICBcInRkcF9pdGVyX3Jlc3RhcnRcIixcbiAgICBcInRkcF9pdGVyX25leHRcIixcbiAgICBcInRkcF9pdGVyX3NraXBfY2hpbGRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSdzIFREUCBNTVUgdG8gc2tpcCBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzIGR1cmluZyB6YXBwaW5nLiBJdCBpbnRyb2R1Y2VzIHR3byBuZXcgYm9vbGVhbiBmaWVsZHM6IGB0ZHBfbW11X2VtcHR5X2xlYWZfcHRgIGluIGBzdHJ1Y3Qga3ZtX21tdV9wYWdlYCBhbmQgYHNraXBfY2hpbGRgIGluIGBzdHJ1Y3QgdGRwX2l0ZXJgLiBCb3RoIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIHVwb24gc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIChgdGRwX21tdV9pbml0X3NwYCBhbmQgYHRkcF9pdGVyX3Jlc3RhcnRgIHJlc3BlY3RpdmVseSkuIFRoZXNlIHN0cnVjdHVyZXMgYXJlIGludGVybmFsIHRvIEtWTSBhbmQgYXJlIG5vdCBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHVzZWQgaW4gY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBURFAgTU1VIHRvIHNraXAgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyB3aGVuIHphcHBpbmcsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHBhZ2UgdGFibGUgbWFuYWdlbWVudCBsb2dpYy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIHJ1bm5pbmcgS1ZNIGd1ZXN0cyBhbmQgcGVyZm9ybWluZyBtZW1vcnkgdW5tYXBwaW5nIG9yIHphcHBpbmcgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDg6MzMuMTU0MDc5OTAyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDQ4MTgxNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNzY2ODgyM2M4NjFmYjRlNjYxZTQwM2UxNzVkNWZmMDM4NjIyNmFkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDE0IDA4OjA4OjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmggYi9hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oXFxuaW5kZXggNzNjZGNiY2NjODllOC4uNTMwNWFhM2U2ODhiNyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oXFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaFxcbkBAIC05NSw2ICs5NSw4IEBAIHN0cnVjdCBrdm1fbW11X3BhZ2Uge1xcbiBcXHR9O1xcbiBcXG4gXFx0Ym9vbCBoYXNfbWFwcGVkX2hvc3RfbW1pbztcXG4rXFx0LyogVERQIE1NVSBvbmx5OiBubyBwcmVzZW50IGxlYWYgU1BURXMgZXhpc3QgaW4gdGhpcyBsZWFmIHBhZ2UgdGFibGUuICovXFxuK1xcdGJvb2wgdGRwX21tdV9lbXB0eV9sZWFmX3B0O1xcbiBcXG4gXFx0dW5pb24ge1xcbiBcXHRcXHQvKiBUaGVzZSB0d28gbWVtYmVycyBhcmVuJ3QgdXNlZCBmb3IgVERQIE1NVSAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmNcXG5pbmRleCA5ZTE3YmZhODA5MDExLi4xZDg3ZGIxNGE2YWU4IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1xcbkBAIC0yMyw2ICsyMyw3IEBAIHN0YXRpYyB2b2lkIHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoc3RydWN0IHRkcF9pdGVyICppdGVyKVxcbiB2b2lkIHRkcF9pdGVyX3Jlc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxcbiB7XFxuIFxcdGl0ZXItXFx1MDAzZXlpZWxkZWQgPSBmYWxzZTtcXG4rXFx0aXRlci1cXHUwMDNlc2tpcF9jaGlsZCA9IGZhbHNlO1xcbiBcXHRpdGVyLVxcdTAwM2V5aWVsZGVkX2dmbiA9IGl0ZXItXFx1MDAzZW5leHRfbGFzdF9sZXZlbF9nZm47XFxuIFxcdGl0ZXItXFx1MDAzZWxldmVsID0gaXRlci1cXHUwMDNlcm9vdF9sZXZlbDtcXG4gXFxuQEAgLTE2Nyw5ICsxNjgsMTEgQEAgdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAodHJ5X3N0ZXBfZG93bihpdGVyKSlcXG4rXFx0aWYgKCFpdGVyLVxcdTAwM2Vza2lwX2NoaWxkIFxcdTAwMjZcXHUwMDI2IHRyeV9zdGVwX2Rvd24oaXRlcikpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdGl0ZXItXFx1MDAzZXNraXBfY2hpbGQgPSBmYWxzZTtcXG4rXFxuIFxcdGRvIHtcXG4gXFx0XFx0aWYgKHRyeV9zdGVwX3NpZGUoaXRlcikpXFxuIFxcdFxcdFxcdHJldHVybjtcXG5AQCAtMTc3LDMgKzE4MCw4IEBAIHZvaWQgdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXFxuIFxcdGl0ZXItXFx1MDAzZXZhbGlkID0gZmFsc2U7XFxuIH1cXG4gXFxuK3ZvaWQgdGRwX2l0ZXJfc2tpcF9jaGlsZChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXFxuK3tcXG4rXFx0V0FSTl9PTl9PTkNFKGl0ZXItXFx1MDAzZXlpZWxkZWQpO1xcbitcXHRpdGVyLVxcdTAwM2Vza2lwX2NoaWxkID0gdHJ1ZTtcXG4rfVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmggYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmhcXG5pbmRleCAzNjRjNWRhNmM0OTkxLi40N2FjOGJkNDM3OTQzIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaFxcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaFxcbkBAIC0xMTQsNiArMTE0LDExIEBAIHN0cnVjdCB0ZHBfaXRlciB7XFxuIFxcdCAqIGxldmVsIGluc3RlYWQgb2YgYWR2YW5jaW5nIHRvIHRoZSBuZXh0IGVudHJ5LlxcbiBcXHQgKi9cXG4gXFx0Ym9vbCB5aWVsZGVkO1xcbitcXHQvKlxcbitcXHQgKiBUcnVlIGlmIHRkcF9pdGVyX25leHQoKSBzaG91bGQgc2tpcCB0aGUgY2hpbGQgcGFnZSB0YWJsZSByZWZlcmVuY2VkIGJ5XFxuK1xcdCAqIHRoZSBjdXJyZW50IFNQVEUsIGluc3RlYWQgb2YgZGVzY2VuZGluZyBpbnRvIGl0LlxcbitcXHQgKi9cXG4rXFx0Ym9vbCBza2lwX2NoaWxkO1xcbiB9O1xcbiBcXG4gLypcXG5AQCAtMTM5LDUgKzE0NCw2IEBAIHZvaWQgdGRwX2l0ZXJfc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxcbiBcXHRcXHQgICAgaW50IG1pbl9sZXZlbCwgZ2ZuX3QgbmV4dF9sYXN0X2xldmVsX2dmbiwgZ2ZuX3QgZ2ZuX2JpdHMpO1xcbiB2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKTtcXG4gdm9pZCB0ZHBfaXRlcl9yZXN0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcik7XFxuK3ZvaWQgdGRwX2l0ZXJfc2tpcF9jaGlsZChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpO1xcbiBcXG4gI2VuZGlmIC8qIF9fS1ZNX1g4Nl9NTVVfVERQX0lURVJfSCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXFxuaW5kZXggYzFjYmFlNjVkMjM5Zi4uODRlMThiZDZlNzc3OSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXFxuQEAgLTIzOCw2ICsyMzgsNyBAQCBzdGF0aWMgdm9pZCB0ZHBfbW11X2luaXRfc3Aoc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsIHRkcF9wdGVwX3Qgc3B0ZXAsXFxuIFxcdHNwLVxcdTAwM2VnZm4gPSBnZm47XFxuIFxcdHNwLVxcdTAwM2VwdGVwID0gc3B0ZXA7XFxuIFxcdHNwLVxcdTAwM2V0ZHBfbW11X3BhZ2UgPSB0cnVlO1xcbitcXHRzcC1cXHUwMDNldGRwX21tdV9lbXB0eV9sZWFmX3B0ID0gZmFsc2U7XFxuIFxcbiBcXHR0cmFjZV9rdm1fbW11X2dldF9wYWdlKHNwLCB0cnVlKTtcXG4gfVxcbkBAIC01MjcsNiArNTI4LDEwIEBAIHN0YXRpYyBpbnQgX19oYW5kbGVfY2hhbmdlZF9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsXFxuIFxcdGlmIChpc19sZWFmKVxcbiBcXHRcXHRjaGVja19zcHRlX3dyaXRhYmxlX2ludmFyaWFudHMobmV3X3NwdGUpO1xcbiBcXG4rXFx0aWYgKGlzX2xlYWYgXFx1MDAyNlxcdTAwMjYgIXdhc19sZWFmIFxcdTAwMjZcXHUwMDI2IHNwLVxcdTAwM2V0ZHBfbW11X3BhZ2UgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHNwLVxcdTAwM2Vyb2xlLmxldmVsID09IFBHX0xFVkVMXzRLKVxcbitcXHRcXHRXUklURV9PTkNFKHNwLVxcdTAwM2V0ZHBfbW11X2VtcHR5X2xlYWZfcHQsIGZhbHNlKTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBvbmx5IHRpbWVzIGEgU1BURSBzaG91bGQgYmUgY2hhbmdlZCBmcm9tIGEgbm9uLXByZXNlbnQgdG9cXG4gXFx0ICogbm9uLXByZXNlbnQgc3RhdGUgaXMgd2hlbiBhbiBNTUlPIGVudHJ5IGlzIGluc3RhbGxlZC9tb2RpZmllZC9cXG5AQCAtOTIzLDYgKzkyOCwzOSBAQCBib29sIGt2bV90ZHBfbW11X3phcF9wb3NzaWJsZV9ueF9odWdlX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgdGRwX21tdV9yYW5nZV9jb3ZlcnNfbGVhZl9wdChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwO1xcbitcXG4rXFx0c3AgPSBzcHRlcF90b19zcChyY3VfZGVyZWZlcmVuY2UoaXRlci1cXHUwMDNlc3B0ZXApKTtcXG4rXFx0cmV0dXJuIHNwLVxcdTAwM2VnZm4gXFx1MDAzZT0gc3RhcnQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHNwLVxcdTAwM2VnZm4gKyBLVk1fUEFHRVNfUEVSX0hQQUdFKFBHX0xFVkVMXzJNKSBcXHUwMDNjPSBlbmQ7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHRkcF9tbXVfY2FuX3NraXBfbGVhZl9wdChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsXFxuK1xcdFxcdFxcdFxcdCAgICAgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZClcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX21tdV9wYWdlICpjaGlsZF9zcDtcXG4rXFxuK1xcdGlmIChpdGVyLVxcdTAwM2VsZXZlbCAhPSBQR19MRVZFTF8yTSB8fFxcbitcXHQgICAgIWlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLVxcdTAwM2VvbGRfc3B0ZSkgfHxcXG4rXFx0ICAgIGlzX2xhc3Rfc3B0ZShpdGVyLVxcdTAwM2VvbGRfc3B0ZSwgaXRlci1cXHUwMDNlbGV2ZWwpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoaXRlci1cXHUwMDNlZ2ZuIFxcdTAwM2Mgc3RhcnQgfHxcXG4rXFx0ICAgIGl0ZXItXFx1MDAzZWdmbiArIEtWTV9QQUdFU19QRVJfSFBBR0UoUEdfTEVWRUxfMk0pIFxcdTAwM2UgZW5kKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTa2lwIHJldGFpbmVkIGVtcHR5IDRLIGxlYWYgcGFnZSB0YWJsZXMgd2l0aG91dCB1bmxpbmtpbmcgdGhlbSwgc29cXG4rXFx0ICogZnV0dXJlIGZhdWx0cyBjYW4gcmV1c2UgdGhlIHBhZ2luZyBzdHJ1Y3R1cmUuXFxuK1xcdCAqL1xcbitcXHRjaGlsZF9zcCA9IHNwdGVfdG9fY2hpbGRfc3AoaXRlci1cXHUwMDNlb2xkX3NwdGUpO1xcbitcXHRyZXR1cm4gY2hpbGRfc3AtXFx1MDAzZXJvbGUubGV2ZWwgPT0gUEdfTEVWRUxfNEsgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIFJFQURfT05DRShjaGlsZF9zcC1cXHUwMDNldGRwX21tdV9lbXB0eV9sZWFmX3B0KTtcXG4rfVxcbitcXG4gLypcXG4gICogSWYgY2FuX3lpZWxkIGlzIHRydWUsIHdpbGwgcmVsZWFzZSB0aGUgTU1VIGxvY2sgYW5kIHJlc2NoZWR1bGUgaWYgdGhlXFxuICAqIHNjaGVkdWxlciBuZWVkcyB0aGUgQ1BVIG9yIHRoZXJlIGlzIGNvbnRlbnRpb24gb24gdGhlIE1NVSBsb2NrLiBJZiB0aGlzXFxuQEAgLTkzNCw4ICs5NzIsMTAgQEAgc3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxcbiBcXHRcXHRcXHQgICAgICBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGNhbl95aWVsZCwgYm9vbCBmbHVzaClcXG4ge1xcbiBcXHRzdHJ1Y3QgdGRwX2l0ZXIgaXRlcjtcXG4rXFx0Ym9vbCBtYXlfc2tpcF9sZWFmX3B0cztcXG4gXFxuIFxcdGVuZCA9IG1pbihlbmQsIHRkcF9tbXVfbWF4X2dmbl9leGNsdXNpdmUoKSk7XFxuK1xcdG1heV9za2lwX2xlYWZfcHRzID0gZW5kIC0gc3RhcnQgXFx1MDAzZT0gS1ZNX1BBR0VTX1BFUl9IUEFHRShQR19MRVZFTF8yTSk7XFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4gXFxuQEAgLTk0OCwxOCArOTg4LDM0IEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGlmICghaXNfc2hhZG93X3ByZXNlbnRfcHRlKGl0ZXIub2xkX3NwdGUpIHx8XFxuLVxcdFxcdCAgICAhaXNfbGFzdF9zcHRlKGl0ZXIub2xkX3NwdGUsIGl0ZXIubGV2ZWwpKVxcbitcXHRcXHRpZiAobWF5X3NraXBfbGVhZl9wdHMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHRkcF9tbXVfY2FuX3NraXBfbGVhZl9wdChcXHUwMDI2aXRlciwgc3RhcnQsIGVuZCkpIHtcXG4rXFx0XFx0XFx0dGRwX2l0ZXJfc2tpcF9jaGlsZChcXHUwMDI2aXRlcik7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuIFxcbi1cXHRcXHR0ZHBfbW11X2l0ZXJfc2V0X3NwdGUoa3ZtLCBcXHUwMDI2aXRlciwgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUpO1xcbitcXHRcXHRpZiAoaXNfc2hhZG93X3ByZXNlbnRfcHRlKGl0ZXIub2xkX3NwdGUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpIHtcXG4rXFx0XFx0XFx0dGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgXFx1MDAyNml0ZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFNIQURPV19OT05QUkVTRU5UX1ZBTFVFKTtcXG4gXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFphcHBpbmdzIFNQVEVzIGluIGludmFsaWQgcm9vdHMgZG9lc24ndCByZXF1aXJlIGEgVExCIGZsdXNoLFxcbi1cXHRcXHQgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoIXJvb3QtXFx1MDAzZXJvbGUuaW52YWxpZClcXG4tXFx0XFx0XFx0Zmx1c2ggPSB0cnVlO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBaYXBwaW5ncyBTUFRFcyBpbiBpbnZhbGlkIHJvb3RzIGRvZXNuJ3QgcmVxdWlyZSBhIFRMQiBmbHVzaCxcXG4rXFx0XFx0XFx0ICogc2VlIGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cygpIGZvciBkZXRhaWxzLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKCFyb290LVxcdTAwM2Vyb2xlLmludmFsaWQpXFxuK1xcdFxcdFxcdFxcdGZsdXNoID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKG1heV9za2lwX2xlYWZfcHRzIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBpdGVyLmxldmVsID09IFBHX0xFVkVMXzRLIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBzcHRlX2luZGV4KHJjdV9kZXJlZmVyZW5jZShpdGVyLnNwdGVwKSkgPT0gU1BURV9FTlRfUEVSX1BBR0UgLSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICB0ZHBfbW11X3JhbmdlX2NvdmVyc19sZWFmX3B0KFxcdTAwMjZpdGVyLCBzdGFydCwgZW5kKSkge1xcbitcXHRcXHRcXHRzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDtcXG4rXFxuK1xcdFxcdFxcdHNwID0gc3B0ZXBfdG9fc3AocmN1X2RlcmVmZXJlbmNlKGl0ZXIuc3B0ZXApKTtcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShzcC1cXHUwMDNldGRwX21tdV9lbXB0eV9sZWFmX3B0LCB0cnVlKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDg6MzMuNTU5NjQ1OTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0Njg2ODU5NTA4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdGRwX21tdV96YXBfbGVhZnNcIixcbiAgICBcImt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZVwiLFxuICAgIFwidGRwX2l0ZXJfcmVzdGFydFwiLFxuICAgIFwidGRwX2l0ZXJfbmV4dFwiLFxuICAgIFwidGRwX2l0ZXJfc2tpcF9jaGlsZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBLVk0gVERQIE1NVSB0byBza2lwIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgd2hlbiB6YXBwaW5nLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgbG9naWMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgd2hlbiBydW5uaW5nIEtWTSBndWVzdHMgYW5kIHBlcmZvcm1pbmcgbWVtb3J5IHVubWFwcGluZyBvciB6YXBwaW5nIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM3NjY4ODIzYzg2MWZiNGU2NjFlNDAzZTE3NWQ1ZmYwMzg2MjI2YWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwODowODozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmggYi9hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oXG5pbmRleCA3M2NkY2JjY2M4OWU4Li41MzA1YWEzZTY4OGI3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaFxuQEAgLTk1LDYgKzk1LDggQEAgc3RydWN0IGt2bV9tbXVfcGFnZSB7XG4gXHR9O1xuIFxuIFx0Ym9vbCBoYXNfbWFwcGVkX2hvc3RfbW1pbztcbitcdC8qIFREUCBNTVUgb25seTogbm8gcHJlc2VudCBsZWFmIFNQVEVzIGV4aXN0IGluIHRoaXMgbGVhZiBwYWdlIHRhYmxlLiAqL1xuK1x0Ym9vbCB0ZHBfbW11X2VtcHR5X2xlYWZfcHQ7XG4gXG4gXHR1bmlvbiB7XG4gXHRcdC8qIFRoZXNlIHR3byBtZW1iZXJzIGFyZW4ndCB1c2VkIGZvciBURFAgTU1VICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jXG5pbmRleCA5ZTE3YmZhODA5MDExLi4xZDg3ZGIxNGE2YWU4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmNcbkBAIC0yMyw2ICsyMyw3IEBAIHN0YXRpYyB2b2lkIHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuIHZvaWQgdGRwX2l0ZXJfcmVzdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4ge1xuIFx0aXRlci1cdTAwM2V5aWVsZGVkID0gZmFsc2U7XG4rXHRpdGVyLVx1MDAzZXNraXBfY2hpbGQgPSBmYWxzZTtcbiBcdGl0ZXItXHUwMDNleWllbGRlZF9nZm4gPSBpdGVyLVx1MDAzZW5leHRfbGFzdF9sZXZlbF9nZm47XG4gXHRpdGVyLVx1MDAzZWxldmVsID0gaXRlci1cdTAwM2Vyb290X2xldmVsO1xuIFxuQEAgLTE2Nyw5ICsxNjgsMTEgQEAgdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0aWYgKHRyeV9zdGVwX2Rvd24oaXRlcikpXG4rXHRpZiAoIWl0ZXItXHUwMDNlc2tpcF9jaGlsZCBcdTAwMjZcdTAwMjYgdHJ5X3N0ZXBfZG93bihpdGVyKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aXRlci1cdTAwM2Vza2lwX2NoaWxkID0gZmFsc2U7XG4rXG4gXHRkbyB7XG4gXHRcdGlmICh0cnlfc3RlcF9zaWRlKGl0ZXIpKVxuIFx0XHRcdHJldHVybjtcbkBAIC0xNzcsMyArMTgwLDggQEAgdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbiBcdGl0ZXItXHUwMDNldmFsaWQgPSBmYWxzZTtcbiB9XG4gXG4rdm9pZCB0ZHBfaXRlcl9za2lwX2NoaWxkKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbit7XG4rXHRXQVJOX09OX09OQ0UoaXRlci1cdTAwM2V5aWVsZGVkKTtcbitcdGl0ZXItXHUwMDNlc2tpcF9jaGlsZCA9IHRydWU7XG4rfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaCBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaFxuaW5kZXggMzY0YzVkYTZjNDk5MS4uNDdhYzhiZDQzNzk0MyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oXG5AQCAtMTE0LDYgKzExNCwxMSBAQCBzdHJ1Y3QgdGRwX2l0ZXIge1xuIFx0ICogbGV2ZWwgaW5zdGVhZCBvZiBhZHZhbmNpbmcgdG8gdGhlIG5leHQgZW50cnkuXG4gXHQgKi9cbiBcdGJvb2wgeWllbGRlZDtcbitcdC8qXG4rXHQgKiBUcnVlIGlmIHRkcF9pdGVyX25leHQoKSBzaG91bGQgc2tpcCB0aGUgY2hpbGQgcGFnZSB0YWJsZSByZWZlcmVuY2VkIGJ5XG4rXHQgKiB0aGUgY3VycmVudCBTUFRFLCBpbnN0ZWFkIG9mIGRlc2NlbmRpbmcgaW50byBpdC5cbitcdCAqL1xuK1x0Ym9vbCBza2lwX2NoaWxkO1xuIH07XG4gXG4gLypcbkBAIC0xMzksNSArMTQ0LDYgQEAgdm9pZCB0ZHBfaXRlcl9zdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG4gXHRcdCAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cyk7XG4gdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcik7XG4gdm9pZCB0ZHBfaXRlcl9yZXN0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcik7XG4rdm9pZCB0ZHBfaXRlcl9za2lwX2NoaWxkKHN0cnVjdCB0ZHBfaXRlciAqaXRlcik7XG4gXG4gI2VuZGlmIC8qIF9fS1ZNX1g4Nl9NTVVfVERQX0lURVJfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcbmluZGV4IGMxY2JhZTY1ZDIzOWYuLjg0ZTE4YmQ2ZTc3NzkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY1xuKysrIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcbkBAIC0yMzgsNiArMjM4LDcgQEAgc3RhdGljIHZvaWQgdGRwX21tdV9pbml0X3NwKHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLCB0ZHBfcHRlcF90IHNwdGVwLFxuIFx0c3AtXHUwMDNlZ2ZuID0gZ2ZuO1xuIFx0c3AtXHUwMDNlcHRlcCA9IHNwdGVwO1xuIFx0c3AtXHUwMDNldGRwX21tdV9wYWdlID0gdHJ1ZTtcbitcdHNwLVx1MDAzZXRkcF9tbXVfZW1wdHlfbGVhZl9wdCA9IGZhbHNlO1xuIFxuIFx0dHJhY2Vfa3ZtX21tdV9nZXRfcGFnZShzcCwgdHJ1ZSk7XG4gfVxuQEAgLTUyNyw2ICs1MjgsMTAgQEAgc3RhdGljIGludCBfX2hhbmRsZV9jaGFuZ2VkX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCxcbiBcdGlmIChpc19sZWFmKVxuIFx0XHRjaGVja19zcHRlX3dyaXRhYmxlX2ludmFyaWFudHMobmV3X3NwdGUpO1xuIFxuK1x0aWYgKGlzX2xlYWYgXHUwMDI2XHUwMDI2ICF3YXNfbGVhZiBcdTAwMjZcdTAwMjYgc3AtXHUwMDNldGRwX21tdV9wYWdlIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNwLVx1MDAzZXJvbGUubGV2ZWwgPT0gUEdfTEVWRUxfNEspXG4rXHRcdFdSSVRFX09OQ0Uoc3AtXHUwMDNldGRwX21tdV9lbXB0eV9sZWFmX3B0LCBmYWxzZSk7XG4rXG4gXHQvKlxuIFx0ICogVGhlIG9ubHkgdGltZXMgYSBTUFRFIHNob3VsZCBiZSBjaGFuZ2VkIGZyb20gYSBub24tcHJlc2VudCB0b1xuIFx0ICogbm9uLXByZXNlbnQgc3RhdGUgaXMgd2hlbiBhbiBNTUlPIGVudHJ5IGlzIGluc3RhbGxlZC9tb2RpZmllZC9cbkBAIC05MjMsNiArOTI4LDM5IEBAIGJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgdGRwX21tdV9yYW5nZV9jb3ZlcnNfbGVhZl9wdChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsXG4rXHRcdFx0XHRcdCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kKVxuK3tcbitcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwO1xuK1xuK1x0c3AgPSBzcHRlcF90b19zcChyY3VfZGVyZWZlcmVuY2UoaXRlci1cdTAwM2VzcHRlcCkpO1xuK1x0cmV0dXJuIHNwLVx1MDAzZWdmbiBcdTAwM2U9IHN0YXJ0IFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHNwLVx1MDAzZWdmbiArIEtWTV9QQUdFU19QRVJfSFBBR0UoUEdfTEVWRUxfMk0pIFx1MDAzYz0gZW5kO1xuK31cbitcbitzdGF0aWMgYm9vbCB0ZHBfbW11X2Nhbl9za2lwX2xlYWZfcHQoc3RydWN0IHRkcF9pdGVyICppdGVyLFxuK1x0XHRcdFx0ICAgICBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kKVxuK3tcbitcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKmNoaWxkX3NwO1xuK1xuK1x0aWYgKGl0ZXItXHUwMDNlbGV2ZWwgIT0gUEdfTEVWRUxfMk0gfHxcbitcdCAgICAhaXNfc2hhZG93X3ByZXNlbnRfcHRlKGl0ZXItXHUwMDNlb2xkX3NwdGUpIHx8XG4rXHQgICAgaXNfbGFzdF9zcHRlKGl0ZXItXHUwMDNlb2xkX3NwdGUsIGl0ZXItXHUwMDNlbGV2ZWwpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoaXRlci1cdTAwM2VnZm4gXHUwMDNjIHN0YXJ0IHx8XG4rXHQgICAgaXRlci1cdTAwM2VnZm4gKyBLVk1fUEFHRVNfUEVSX0hQQUdFKFBHX0xFVkVMXzJNKSBcdTAwM2UgZW5kKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKlxuK1x0ICogU2tpcCByZXRhaW5lZCBlbXB0eSA0SyBsZWFmIHBhZ2UgdGFibGVzIHdpdGhvdXQgdW5saW5raW5nIHRoZW0sIHNvXG4rXHQgKiBmdXR1cmUgZmF1bHRzIGNhbiByZXVzZSB0aGUgcGFnaW5nIHN0cnVjdHVyZS5cbitcdCAqL1xuK1x0Y2hpbGRfc3AgPSBzcHRlX3RvX2NoaWxkX3NwKGl0ZXItXHUwMDNlb2xkX3NwdGUpO1xuK1x0cmV0dXJuIGNoaWxkX3NwLVx1MDAzZXJvbGUubGV2ZWwgPT0gUEdfTEVWRUxfNEsgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgUkVBRF9PTkNFKGNoaWxkX3NwLVx1MDAzZXRkcF9tbXVfZW1wdHlfbGVhZl9wdCk7XG4rfVxuK1xuIC8qXG4gICogSWYgY2FuX3lpZWxkIGlzIHRydWUsIHdpbGwgcmVsZWFzZSB0aGUgTU1VIGxvY2sgYW5kIHJlc2NoZWR1bGUgaWYgdGhlXG4gICogc2NoZWR1bGVyIG5lZWRzIHRoZSBDUFUgb3IgdGhlcmUgaXMgY29udGVudGlvbiBvbiB0aGUgTU1VIGxvY2suIElmIHRoaXNcbkBAIC05MzQsOCArOTcyLDEwIEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcbiBcdFx0XHQgICAgICBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGNhbl95aWVsZCwgYm9vbCBmbHVzaClcbiB7XG4gXHRzdHJ1Y3QgdGRwX2l0ZXIgaXRlcjtcbitcdGJvb2wgbWF5X3NraXBfbGVhZl9wdHM7XG4gXG4gXHRlbmQgPSBtaW4oZW5kLCB0ZHBfbW11X21heF9nZm5fZXhjbHVzaXZlKCkpO1xuK1x0bWF5X3NraXBfbGVhZl9wdHMgPSBlbmQgLSBzdGFydCBcdTAwM2U9IEtWTV9QQUdFU19QRVJfSFBBR0UoUEdfTEVWRUxfMk0pO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuIFxuQEAgLTk0OCwxOCArOTg4LDM0IEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoIWlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSB8fFxuLVx0XHQgICAgIWlzX2xhc3Rfc3B0ZShpdGVyLm9sZF9zcHRlLCBpdGVyLmxldmVsKSlcbitcdFx0aWYgKG1heV9za2lwX2xlYWZfcHRzIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgdGRwX21tdV9jYW5fc2tpcF9sZWFmX3B0KFx1MDAyNml0ZXIsIHN0YXJ0LCBlbmQpKSB7XG4rXHRcdFx0dGRwX2l0ZXJfc2tpcF9jaGlsZChcdTAwMjZpdGVyKTtcbiBcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuIFxuLVx0XHR0ZHBfbW11X2l0ZXJfc2V0X3NwdGUoa3ZtLCBcdTAwMjZpdGVyLCBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSk7XG4rXHRcdGlmIChpc19zaGFkb3dfcHJlc2VudF9wdGUoaXRlci5vbGRfc3B0ZSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpIHtcbitcdFx0XHR0ZHBfbW11X2l0ZXJfc2V0X3NwdGUoa3ZtLCBcdTAwMjZpdGVyLFxuK1x0XHRcdFx0XHQgICAgICBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSk7XG4gXG4tXHRcdC8qXG4tXHRcdCAqIFphcHBpbmdzIFNQVEVzIGluIGludmFsaWQgcm9vdHMgZG9lc24ndCByZXF1aXJlIGEgVExCIGZsdXNoLFxuLVx0XHQgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuXG4tXHRcdCAqL1xuLVx0XHRpZiAoIXJvb3QtXHUwMDNlcm9sZS5pbnZhbGlkKVxuLVx0XHRcdGZsdXNoID0gdHJ1ZTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFphcHBpbmdzIFNQVEVzIGluIGludmFsaWQgcm9vdHMgZG9lc24ndCByZXF1aXJlIGEgVExCIGZsdXNoLFxuK1x0XHRcdCAqIHNlZSBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoKSBmb3IgZGV0YWlscy5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoIXJvb3QtXHUwMDNlcm9sZS5pbnZhbGlkKVxuK1x0XHRcdFx0Zmx1c2ggPSB0cnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtYXlfc2tpcF9sZWFmX3B0cyBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGl0ZXIubGV2ZWwgPT0gUEdfTEVWRUxfNEsgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBzcHRlX2luZGV4KHJjdV9kZXJlZmVyZW5jZShpdGVyLnNwdGVwKSkgPT0gU1BURV9FTlRfUEVSX1BBR0UgLSAxIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgdGRwX21tdV9yYW5nZV9jb3ZlcnNfbGVhZl9wdChcdTAwMjZpdGVyLCBzdGFydCwgZW5kKSkge1xuK1x0XHRcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwO1xuK1xuK1x0XHRcdHNwID0gc3B0ZXBfdG9fc3AocmN1X2RlcmVmZXJlbmNlKGl0ZXIuc3B0ZXApKTtcbitcdFx0XHRXUklURV9PTkNFKHNwLVx1MDAzZXRkcF9tbXVfZW1wdHlfbGVhZl9wdCwgdHJ1ZSk7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDg6MzMuNTU5NjQ3ODVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDg3MjY2MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSB4ODYgTU1VIFBhdGNoIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IG5lZWQgZnV6emluZyBhdHRlbnRpb24uIFRoZSBzY29wZSBpcyBwcmV0dHkgY2xlYXI6IGl0J3MgdG91Y2hpbmcgS1ZNIHg4NiBNTVUgY29kZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCB0aGUgVERQIE1NVS4gVGhlIG1vZGlmaWVkIGZpbGVzIOKAkyBgbW11X2ludGVybmFsLmhgLCBgdGRwX2l0ZXIuY2AsIGB0ZHBfaXRlci5oYCwgYW5kIGB0ZHBfbW11LmNgIOKAkyBjb25maXJtIHRoYXQuXG5cbkl0J3MgaW50cm9kdWNpbmcgY2hhbmdlcyB0byB0aGUgYHN0cnVjdCBrdm1fbW11X3BhZ2VgLCBhZGRpbmcgYHRkcF9tbXVfZW1wdHlfbGVhZl9wdGAsIGFuZCBtb2RpZnlpbmcgYHN0cnVjdCB0ZHBfaXRlcmAgd2l0aCB0aGUgYWRkaXRpb24gb2YgYHNraXBfY2hpbGRgIGFuZCBgdGRwX2l0ZXJfc2tpcF9jaGlsZCgpYC4gSXQncyBhbHNvIG1vZGlmeWluZyBgdGRwX21tdV96YXBfbGVhZnMoKWAgdG8gc2tpcCBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uLCBubyBkb3VidC4gQ29uc2lkZXJpbmcgdGhpcyBkaXJlY3RseSBpbXBhY3RzIGNvcmUgS1ZNIFREUCBNTVUgbG9naWMsIGFuZCBLVk0gaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgaW4gc3l6a2FsbGVyLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggb3VyIHRpbWUuIFdvcnRoRnV6emluZyA9IFRydWUuXG5cbk5vdywgdGhlIHJlYWwgd29yayBiZWdpbnM6IHBpbnBvaW50aW5nIHRoZSByaWdodCB0YXJnZXRzIGZvciBmdXp6aW5nLiBXZSBuZWVkIHRvIGlkZW50aWZ5IEZvY3VzU3ltYm9scywgd2hpY2ggYXJlIHRoZSBub24taG90LXBhdGgga2VybmVsIGZ1bmN0aW9ucyB0byBmb2N1cyBmdXp6aW5nIG9uLCBhbmQgZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IEVuYWJsZUNvbmZpZ3MuXG5cbkxldCdzIGRpZyBpbnRvIGB0ZHBfbW11LmNgIGFuZCBgdGRwX2l0ZXIuY2AuIEZyb20gYSBxdWljayBza2ltLCB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGFkZGVkL21vZGlmaWVkIGFyZTogYHRkcF9pdGVyX3Jlc3RhcnRgLCBgdGRwX2l0ZXJfbmV4dGAsIGB0ZHBfaXRlcl9za2lwX2NoaWxkYCwgYHRkcF9tbXVfaW5pdF9zcGAsIGBfX2hhbmRsZV9jaGFuZ2VkX3NwdGVgLCBga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZWAgKGNvbnRleHQpLCBgdGRwX21tdV9yYW5nZV9jb3ZlcnNfbGVhZl9wdGAgYW5kIGB0ZHBfbW11X2Nhbl9za2lwX2xlYWZfcHRgLCB3aGljaCBhcmUgYm90aCBuZXcgZnVuY3Rpb25zLiBBbmQgbGFzdGx5LCBgdGRwX21tdV96YXBfbGVhZnNgLCB3aGljaCBpcyBhbHNvIGJlaW5nIG1vZGlmaWVkLlxuXG5IbW0sIGB0ZHBfbW11X3phcF9sZWFmc2AgaXMgc3RhdGljLiBUaGF0IG1lYW5zIHdlIG5lZWQgdG8gdHJhY2Ugd2hlcmUgaXQgKmlzKiBjYWxsZWQuIFRoaXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTE5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDg6NDIuMDQ2OTE3NDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzMTc4MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGRwX21tdV96YXBfbGVhZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL21tdS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz03MDQwPXZvaWQga3ZtX3phcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm5fc3RhcnQsIGdmbl90IGdmbl9lbmQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwNTUtXFx0aWYgKHRkcF9tbXVfZW5hYmxlZClcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjcwNTY6XFx0XFx0Zmx1c2ggPSBrdm1fdGRwX21tdV96YXBfbGVhZnMoa3ZtLCBnZm5fc3RhcnQsIGdmbl9lbmQsIGZsdXNoKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwNTctXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz05NDE9c3RhdGljIGJvb2wgdGRwX21tdV9jYW5fc2tpcF9sZWFmX3B0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcixcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTk3MC0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo5NzE6c3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTk3Mi1cXHRcXHRcXHQgICAgICBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGNhbl95aWVsZCwgYm9vbCBmbHVzaClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMzQtICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTAzNTpib29sIGt2bV90ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgZmx1c2gpXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzNi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMDQwLVxcdGZvcl9lYWNoX3ZhbGlkX3RkcF9tbXVfcm9vdF95aWVsZF9zYWZlKGt2bSwgcm9vdCwgLTEpXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTA0MTpcXHRcXHRmbHVzaCA9IHRkcF9tbXVfemFwX2xlYWZzKGt2bSwgcm9vdCwgc3RhcnQsIGVuZCwgdHJ1ZSwgZmx1c2gpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwNDItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz0xMzYyPWJvb2wga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTM3MC1cXHRfX2Zvcl9lYWNoX3RkcF9tbXVfcm9vdF95aWVsZF9zYWZlKGt2bSwgcm9vdCwgcmFuZ2UtXFx1MDAzZXNsb3QtXFx1MDAzZWFzX2lkLCB0eXBlcylcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxMzcxOlxcdFxcdGZsdXNoID0gdGRwX21tdV96YXBfbGVhZnMoa3ZtLCByb290LCByYW5nZS1cXHUwMDNlc3RhcnQsIHJhbmdlLVxcdTAwM2VlbmQsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTM3Mi1cXHRcXHRcXHRcXHRcXHQgIHJhbmdlLVxcdTAwM2VtYXlfYmxvY2ssIGZsdXNoKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oPTU3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tbXVfcGFnZSAqdGRwX21tdV9nZXRfcm9vdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC02NS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaDo2Njpib29sIGt2bV90ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgZmx1c2gpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTY3LWJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjA4OjQyLjA5MjI0MjE3NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTQ1NTYwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSdzIFRyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXIgKFRMQikgSW52YWxpZGF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBLVk0gaGFuZGxlcyBUTEIgaW52YWxpZGF0aW9ucywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIFRyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXIgKFREUCkgTU1VLiBNeSBpbW1lZGlhdGUgaW50ZXJlc3QgaXMgaW4gdW5kZXJzdGFuZGluZyB0aGUgZmxvdyBvZiBpbnZhbGlkYXRpb25zIHdoZW4gYSBHdWVzdCBQaHlzaWNhbCBGcmFtZSBOdW1iZXIgKEdGTikgaXMgbW9kaWZpZWQgb3IgdW5tYXBwZWQuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgZnVuY3Rpb24gaGVyZSBpcyBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCwgd2hpY2ggaXMgaW50cmlndWluZy4gSSBzZWUgaXQncyBjYWxsZWQgZnJvbSBga3ZtX3phcF9nZm5fcmFuZ2VgLCB3aGljaCBwcm92aWRlcyB0aGUgYnJvYWRlciBjb250ZXh0LiBJbnRlcmVzdGluZywgYGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZWAgYWxzbyBjYWxscyBgdGRwX21tdV96YXBfbGVhZnNgLiBTbyB0aGVzZSB0d28gZnVuY3Rpb25zIGFyZSBjbG9zZWx5IGxpbmtlZCwgYW5kIHRoZXkgcHJvYmFibHkgaGFuZGxlIHRoZSBjcml0aWNhbCBsb2dpYyBmb3IgcmVtb3Zpbmcgc3RhbGUgZW50cmllcyBmcm9tIHRoZSBUTEIuIEdpdmVuIHRoaXMsIEkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbiBub3cgb24gdGhvcm91Z2hseSBkaXNzZWN0aW5nIGJvdGggYGt2bV90ZHBfbW11X3phcF9sZWFmc2AgYW5kIGBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgemFwX2xlYWZzYCB3b3JrcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYm90aCBjYWxscy4gVGhpcyBhbmFseXNpcyB3aWxsIGdldCBtZSB0byB0aGUgaGVhcnQgb2YgdGhlIGludmFsaWRhdGlvbiBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUzMywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjA4OjQ2LjA4NjgwMDk4NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU5NTI2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdGRwX21tdV96YXBfbGVhZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTcwNDA9dm9pZCBrdm1femFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbl9zdGFydCwgZ2ZuX3QgZ2ZuX2VuZClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzA1NS1cXHRpZiAodGRwX21tdV9lbmFibGVkKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzA1NjpcXHRcXHRmbHVzaCA9IGt2bV90ZHBfbW11X3phcF9sZWFmcyhrdm0sIGdmbl9zdGFydCwgZ2ZuX2VuZCwgZmx1c2gpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzA1Ny1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jPTk3MT1zdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMDM0LSAqL1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjEwMzU6Ym9vbCBrdm1fdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGZsdXNoKVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMzYte1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg9NTc9c3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21tdV9wYWdlICp0ZHBfbW11X2dldF9yb290KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTY1LVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oOjY2OmJvb2wga3ZtX3RkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBmbHVzaCk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtNjctYm9vbCBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDg6NDYuMTMyNDAwNjcxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5MDk4NzU0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlYC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgdW5tYXBwaW5nIGd1ZXN0IHBoeXNpY2FsIGZyYW1lIG51bWJlcnMgKEdGTnMpIGZyb20gdGhlIGhvc3QncyBUcmFuc2xhdGlvbiBMb29rYXNpZGUgQnVmZmVycyAoVExCcykgd2hlbiB1c2luZyBUYWdnZWQgRGF0YSBQYWdlIChURFApIE1NVS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4YWN0IGJlaGF2aW9yLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyB0aGUgZm9sbG93aW5nOiBob3cgZWZmaWNpZW50bHkgaXQgaGFuZGxlcyBsYXJnZSB1bm1hcCByZWdpb25zLCBpdHMgbG9ja2luZyBzdHJhdGVneSB0byBlbnN1cmUgY29uc2lzdGVuY3kgd2l0aCBvdGhlciBNTVUgb3BlcmF0aW9ucywgd2hldGhlciBpdCBpbnRlcmFjdHMgY29ycmVjdGx5IHdpdGggc2hhZG93IHBhZ2UgdGFibGVzLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIHBhZ2UgZmF1bHRzIGR1cmluZyB0aGUgdW5tYXBwaW5nIHByb2Nlc3MuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBjb2RlIHBhdGggdG8gZW5zdXJlIHdlJ3JlIGF2b2lkaW5nIGFueSB1bm5lY2Vzc2FyeSBUTEIgZmx1c2hlcyBhbmQgdGhhdCB3ZSdyZSBtaW5pbWl6aW5nIHRoZSBwZXJmb3JtYW5jZSBpbXBhY3Qgb24gcnVubmluZyBWTXMuIFNwZWNpZmljYWxseSwgSSdsbCBwYXkgYXR0ZW50aW9uIHRvIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2l0aCBvdGhlciBNTVUgb3BlcmF0aW9ucy4gSSdsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0IGNvcnJlY3RseSBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgc3RhdGVzIG9mIHRoZSBHRk5zIGJlaW5nIHVubWFwcGVkLiBJIGFsc28gd2FudCB0byBjaGVjayBmb3IgYW55IG1lbW9yeSBsZWFrcyBhbmQgZW5zdXJlIHRoZXJlIGFyZSBubyBpc3N1ZXMgd2l0aCB0aGUgaGFuZGxpbmcgb2YgdmlydHVhbCBtZW1vcnkgcmVzb3VyY2VzLiBHaXZlbiB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgZnVuY3Rpb24gZm9yIHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcyBpbiBhIFREUCBlbnZpcm9ubWVudCwgdW5kZXJzdGFuZGluZyBpdHMgaW50ZXJuYWxzIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MgaXMgcGFyYW1vdW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDc4LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDg6NDkuNDIzMzkwMjA2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Njc1NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTY2Mz1ib29sIGt2bV91bm1hcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE2ODMtXFx0aWYgKHRkcF9tbXVfZW5hYmxlZClcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE2ODQ6XFx0XFx0Zmx1c2ggPSBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2Uoa3ZtLCByYW5nZSwgZmx1c2gpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTY4NS1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jPTEyNzI9aW50IGt2bV90ZHBfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMzYxLS8qIFVzZWQgYnkgbW11IG5vdGlmaWVyIHZpYSBrdm1fdW5tYXBfZ2ZuX3JhbmdlKCkgKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxMzYyOmJvb2wga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlLFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEzNjMtXFx0XFx0XFx0XFx0IGJvb2wgZmx1c2gpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaD03ND1pbnQga3ZtX3RkcF9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdCk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtNzUtXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg6NzY6Ym9vbCBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtNzctXFx0XFx0XFx0XFx0IGJvb2wgZmx1c2gpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODowODo0OS40NzEwNjk4MTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDU0NTAxNDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSBHRk4gVW5tYXBwaW5nKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBrbm93IGBrdm1femFwX2dmbl9yYW5nZWAgYW5kIGBrdm1fdW5tYXBfZ2ZuX3JhbmdlYCBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIGhhbmRsaW5nIEd1ZXN0IEZyYW1lIE51bWJlciAoR0ZOKSB1bm1hcHBpbmcgd2l0aGluIEtWTS4gVGhhdCBtYWtlcyBzZW5zZSwgdGhleSBzb3VuZCBsaWtlIHRoZSBsb2dpY2FsIGZ1bmN0aW9ucyB0byBvcmNoZXN0cmF0ZSB0aGUgcHJvY2Vzcy4gTm93IHRoZSBjcnVjaWFsIHBhcnQgaXMgdW5kZXJzdGFuZGluZyB0aGUgKmNvbnRleHQqIG9mIHRob3NlIGNhbGxzLiBXaGVyZSBhcmUgdGhleSBiZWluZyBpbnZva2VkIGZyb20/IEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBnZXQgYSByZWFsIGhhbmRsZSBvbiB0aGUgZGlmZmVyZW50IHVubWFwcGluZyBzY2VuYXJpb3MuIExldCdzIHN0YXJ0IGJ5IGZpbmRpbmcgYWxsIHRoZSBwbGFjZXMgYGt2bV96YXBfZ2ZuX3JhbmdlYCBpcyBhY3R1YWxseSAqY2FsbGVkKiBmcm9tLiBUaGF0J2xsIGlsbHVtaW5hdGUgdGhlIHRyaWdnZXJzIGZvciBHRk4gdW5tYXBwaW5nIGFuZCB0aGUgYXNzb2NpYXRlZCBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM1NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjA4OjUzLjkyNTU3Mzc4NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3ODk0MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3phcF9nZm5fcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTcwMDY9c3RhdGljIGJvb2wga3ZtX3JtYXBfemFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbl9zdGFydCwgZ2ZuX3QgZ2ZuX2VuZClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzAzOS0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjcwNDA6dm9pZCBrdm1femFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbl9zdGFydCwgZ2ZuX3QgZ2ZuX2VuZClcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwNDEte1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MDY0LX1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjcwNjU6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV96YXBfZ2ZuX3JhbmdlKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwNjYtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ5MzE9dm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUwMTYtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MDE3OlxcdGt2bV96YXBfZ2ZuX3JhbmdlKGt2bSwgZ2ZuLCBnZm4gKyBQVFJTX1BFUl9QTUQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTAxOC1vdXQ6XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA5NTQ9dm9pZCBfX2t2bV9zZXRfb3JfY2xlYXJfYXBpY3ZfaW5oaWJpdChzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA5OTAtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwOTkxOlxcdFxcdFxcdGt2bV96YXBfZ2ZuX3JhbmdlKGt2bSwgZ2ZuLCBnZm4rMSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwOTkyLVxcdFxcdFxcdHNyY3VfcmVhZF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSwgaWR4KTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xNDA4ND1zdGF0aWMgdm9pZCBrdm1fbm9uY29oZXJlbnRfZG1hX2Fzc2lnbm1lbnRfc3RhcnRfb3Jfc3RvcChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTQwOTUtXFx0aWYgKGt2bV9jaGVja19oYXNfcXVpcmsoa3ZtLCBLVk1fWDg2X1FVSVJLX0lHTk9SRV9HVUVTVF9QQVQpKVxcbmFyY2gveDg2L2t2bS94ODYuYzoxNDA5NjpcXHRcXHRrdm1femFwX2dmbl9yYW5nZShrdm0sIGdwYV90b19nZm4oMCksIGdwYV90b19nZm4ofjBVTEwpKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTQwOTctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODowODo1My45NzEzNjc1NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzk3MjI4MTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIEtWTSdzIE1NVSBVbm1hcHBpbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgS1ZNIGhhbmRsZXMgdW5tYXBwaW5nIGd1ZXN0IHBoeXNpY2FsIGZyYW1lIG51bWJlcnMsIHNwZWNpZmljYWxseSB3aGVuIHRyaWdnZXJlZCBieSBNTVUgbm90aWZpZXJzLiBUaGUgZW50cnkgcG9pbnQgaXMgYGt2bV91bm1hcF9nZm5fcmFuZ2VgLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgd2l0aGluIHRoZSBjb250ZXh0IG9mIFRyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXIgKFRMQikgaW52YWxpZGF0aW9uLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IHRoZSBjb2RlIGRldGVybWluZXMgd2hlbiBhIHBhZ2UgdGFibGUgZW50cnkgKFBURSkgb3IgYSBsZWFmIHBhZ2UgdGFibGUgY2FuIGJlIHNraXBwZWQgZHVyaW5nIHRoZSB1bm1hcHBpbmcgcHJvY2VzcywgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gVHJhbnNsYXRpb24gTG9va2FzaWRlIEJ1ZmZlciAoVExCKSBvcGVyYXRpb25zLiBUaGUgbmV3IGB0ZHBfbW11X2Nhbl9za2lwX2xlYWZfcHRgIGFuZCBgdGRwX21tdV9yYW5nZV9jb3ZlcnNfbGVhZl9wdGAgZnVuY3Rpb25zIHNlZW0ga2V5IGhlcmUsIGFuZCBJIHN1c3BlY3QgdGhleSdyZSBpbmZsdWVuY2luZyB0aGUgYmVoYXZpb3Igb2YgYHRkcF9tbXVfemFwX2xlYWZzYC4gVGhlIHBhdGNoIG1lbnRpb25zIG1vZGlmaWNhdGlvbnMgdG8gYHRkcF9tbXVfemFwX2xlYWZzYCwgc28gSSBzaG91bGQgYW5hbHl6ZSB0aGF0LlxuXG5TcGVjaWZpY2FsbHksIEkgd2FudCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgdW5tYXBwaW5nLiBUaGUgbW9zdCByZWxldmFudCBmdW5jdGlvbnMgdG8gZXhhbWluZSBjbG9zZWx5IGFyZSBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCwgYGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZWAsIGBrdm1femFwX2dmbl9yYW5nZWAsIGFuZCBvZiBjb3Vyc2UgYGt2bV91bm1hcF9nZm5fcmFuZ2VgIGl0c2VsZi5cblxuSSdsbCBzdGFydCBieSBleGFtaW5pbmcgYGt2bV90ZHBfbW11X3phcF9sZWFmc2AgYW5kIGBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VgIGluIGBhcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY2AsIGFzIHRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb25zIGZvciB0aGlzIHNwZWNpZmljIHBhdGguXG5cbk9mIGNvdXJzZSwgdGhlIEtWTSBjb25maWd1cmF0aW9uIGlzIGVzc2VudGlhbCBoZXJlLCBzbyBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgdG8gZW5zdXJlIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIHNldC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM5NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODowODo1OS43Njg1OTc4MDJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzczMjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMwLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMyOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDg6NTkuODE5Mzc2NzI3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTI4MzY0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBDb25maWd1cmF0aW9uIGFuZCBDb25kaXRpb25hbCBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgS1ZNYCBhbmQgYEtWTV9YODZgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBlbHNlIHJlbGV2YW50IHRvIHRoZSBLVk0gc2V0dXAuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuVGhlbiBJIHNlZSB0aGUgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGBhcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY2AuIFRoaXMgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIElzIHRoaXMgY29kZSBvbmx5IGluY2x1ZGVkIHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXM/IEtub3dpbmcgaWYgYHRkcF9tbXUuY2AgaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseSBpcyBhYnNvbHV0ZWx5IGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGJ1aWxkIHN5c3RlbSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHRoYXQgZ292ZXJuIGl0cyBpbmNsdXNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzE1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDk6MDMuNzcyMjE2MjkyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDc4NTg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHBfbW11XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vTWFrZWZpbGU9OD1rdm0teVxcdFxcdFxcdCs9IHg4Ni5vIGVtdWxhdGUubyBpcnEubyBsYXBpYy5vIGNwdWlkLm8gcG11Lm8gbXRyci5vIFxcXFxcXG4tLVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xMC1cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MTE6a3ZtLSQoQ09ORklHX1g4Nl82NCkgKz0gbW11L3RkcF9pdGVyLm8gbW11L3RkcF9tbXUub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xMi1rdm0tJChDT05GSUdfS1ZNX0lPQVBJQykgKz0gaTgyNTkubyBpODI1NC5vIGlvYXBpYy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjA5OjAzLjgyMzAwNTY3N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzQzMDU5ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQncyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IGBDT05GSUdfWDg2XzY0YCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQuIFRoYXQncyB0aGUgYmFzZWxpbmUuIFRoZSBjb3JlIGNvbmZpZ3MgSSdtIGRlYWxpbmcgd2l0aCBhcmUgYEtWTWAgYW5kLCBvZiBjb3Vyc2UsIGBYODZfNjRgLiBObyBzdXJwcmlzZXMgdGhlcmUuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aG9zZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHRoZSBUcmFuc3BhcmVudCBQYWdlIFNoYXJpbmcgKFRQUykgcHJvY2VzcyB3aXRoaW4gS1ZNOiBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCwgYGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZWAsIGB0ZHBfaXRlcl9yZXN0YXJ0YCwgYHRkcF9pdGVyX25leHRgLCBhbmQgYHRkcF9pdGVyX3NraXBfY2hpbGRgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBkcml2aW5nIHRoZSBUUFMgbG9naWMgdGhhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9yb3VnaGx5LlxuXG5Ib2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gbWFrZSBhIG1lbnRhbCBub3RlIHRvIGNoZWNrIGlmIGB0ZHBfaXRlcl9yZXN0YXJ0YCwgYHRkcF9pdGVyX25leHRgLCBhbmQgYHRkcF9pdGVyX3NraXBfY2hpbGRgIGFyZSBleHBvcnRlZCBzeW1ib2xzLiBBcmUgdGhleSBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlLCBvciBhcmUgdGhleSBpbnRlcm5hbCB0byB0aGUgVFBTIGltcGxlbWVudGF0aW9uPyBUaGF04oCZcyBpbXBvcnRhbnQgZm9yIGRldGVybWluaW5nIGhvdyBtb2R1bGFyIHRoaXMgVFBTIGltcGxlbWVudGF0aW9uIGlzIGFuZCBmb3IgcmVhc29uaW5nIGFib3V0IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZXNlIHN5bWJvbHMgYXJlIHZpc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzQ1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjA5OjA5LjE2NjA2NzUyNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2NTA1OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGRwX2l0ZXJfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMTEtICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jOjEyOnN0YXRpYyB2b2lkIHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoc3RydWN0IHRkcF9pdGVyICppdGVyKVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xMy17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMjItICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jOjIzOnZvaWQgdGRwX2l0ZXJfcmVzdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTI0LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0zMC1cXHRpdGVyLVxcdTAwM2VnZm4gPSBnZm5fcm91bmRfZm9yX2xldmVsKGl0ZXItXFx1MDAzZW5leHRfbGFzdF9sZXZlbF9nZm4sIGl0ZXItXFx1MDAzZWxldmVsKTtcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM6MzE6XFx0dGRwX2l0ZXJfcmVmcmVzaF9zcHRlcChpdGVyKTtcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMzItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMzktICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jOjQwOnZvaWQgdGRwX2l0ZXJfc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy00MS1cXHRcXHQgICAgaW50IG1pbl9sZXZlbCwgZ2ZuX3QgbmV4dF9sYXN0X2xldmVsX2dmbiwgZ2ZuX3QgZ2ZuX2JpdHMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtNTYtXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jOjU3OlxcdHRkcF9pdGVyX3Jlc3RhcnQoaXRlcik7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTU4LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYz04MT1zdGF0aWMgYm9vbCB0cnlfc3RlcF9kb3duKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xMDAtXFx0aXRlci1cXHUwMDNlZ2ZuID0gZ2ZuX3JvdW5kX2Zvcl9sZXZlbChpdGVyLVxcdTAwM2VuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBpdGVyLVxcdTAwM2VsZXZlbCk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jOjEwMTpcXHR0ZHBfaXRlcl9yZWZyZXNoX3NwdGVwKGl0ZXIpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xMDItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM9MTM2PXN0YXRpYyBib29sIHRyeV9zdGVwX3VwKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xNDItXFx0aXRlci1cXHUwMDNlZ2ZuID0gZ2ZuX3JvdW5kX2Zvcl9sZXZlbChpdGVyLVxcdTAwM2VnZm4sIGl0ZXItXFx1MDAzZWxldmVsKTtcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM6MTQzOlxcdHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoaXRlcik7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTE0NC1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xNjMtICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jOjE2NDp2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xNjUte1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xNjYtXFx0aWYgKGl0ZXItXFx1MDAzZXlpZWxkZWQpIHtcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM6MTY3OlxcdFxcdHRkcF9pdGVyX3Jlc3RhcnQoaXRlcik7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTE2OC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMTgyLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYzoxODM6dm9pZCB0ZHBfaXRlcl9za2lwX2NoaWxkKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMTg0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDk6MDkuMjEyNzI0NDcxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTQ4MjYwNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBUcmFpbiBvZiBUaG91Z2h0KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGVzZSB0aGluZ3Mg4oCTIHdoYXRldmVyIFwidGhleVwiIGFyZSBpbiB0aGlzIGNvbnRleHQg4oCTIHRoZXkgYXJlbid0IGp1c3Qgb25lIHVuY2hhbmdpbmcgdGhpbmcuIFRoZXkncmUgZHluYW1pYywgYW5kIHRoYXQgbWVhbnMgdGhleSBzaG91bGQgaGF2ZSBkaXN0aW5jdCBzeW1ib2xpYyByZXByZXNlbnRhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHNvbWUgYWRkaXRpb25zIHRvIHRoZSBzeW1ib2xpYyBzZXQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGluY29ycG9yYXRlIGBrdm1fdGRwX21tdV96YXBfbGVhZnNgLCBga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlYCwgYHRkcF9pdGVyX3Jlc3RhcnRgLCBgdGRwX2l0ZXJfbmV4dGAsIGFuZCBgdGRwX2l0ZXJfc2tpcF9jaGlsZGAgaW50byB0aGUgcGljdHVyZS5cblxuSG9sZCBvbiwgYmVmb3JlIEkgbW92ZSBvbiwgSSBzaG91bGQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhhdCBmaXJzdCBvbmUuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpZiBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCBpcywgaW4gZmFjdCwgc3RhdGljLiBUaGlzIGlzIGNydWNpYWwgZm9yIGNvbnNpc3RlbmN5LiBHb3R0YSBnZXQgdGhhdCBiaXQgcmlnaHQgZmlyc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjQ0LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDk6MTMuMTA3NTUzNTczWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ1MDg3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdGRwX21tdV96YXBfbGVhZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM9OTcxPXN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMzQtICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTAzNTpib29sIGt2bV90ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgZmx1c2gpXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjA5OjEzLjE1MzAxMTYwOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTkwMTUzMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gVERQIE1NVSBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCBpc24ndCBhIHN0YXRpYyBjb21wb25lbnQsIGdvdCBpdC4gTm93LCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgYEtWTWAgYW5kIGBYODZfNjRgLiBIbW0sIGBYODZfNjRgIGlzIGFuIGFyY2hpdGVjdHVyZSBjb25maWcgdGhvdWdoLCBub3QgYSBmZWF0dXJlLiBCdXQgdGhlIHByb21wdCBzYWlkIHRvIGluY2x1ZGUgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncywgYW5kIGBYODZfNjRgIGlzIHByZXR0eSBzdGFuZGFyZCBmb3IgNjQtYml0IHg4Niwgc28gaXQgZG9lc24ndCByZWFsbHkgbWF0dGVyIGlmIEkgaW5jbHVkZSBpdCBvciBub3QuIEknbGwganVzdCBrZWVwIGl0IHNpbXBsZSBhbmQgc3RpY2sgd2l0aCBgS1ZNYCBmb3Igbm93LlxuXG5SaWdodCwgcmV2aWV3aW5nIHRoZSBjaGFuZ2U6IHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgS1ZNJ3MgVERQIE1NVSwgc3BlY2lmaWNhbGx5IHRvIG9wdGltaXplIHRoZSB6YXBwaW5nIHByb2Nlc3MgYnkgc2tpcHBpbmcgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcy4gSXQncyBhIGZ1bmN0aW9uYWwgb3B0aW1pemF0aW9uIHdpdGhpbiB0aGUgcGFnZSB0YWJsZSBtYW5hZ2VtZW50LCBtYWtpbmcgaXQgYW4gaW50ZXJlc3RpbmcgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQg4oCTIEtWTSBiZWluZyB0aGUga2V5IOKAkyB3aGljaCBtZWFucyBgV29ydGhGdXp6aW5nYCBpcyBhYnNvbHV0ZWx5IHRydWUgaGVyZS5cblxuU28sIGZvciBmdXp6aW5nIGZvY3VzLCB0aGUgaW1wb3J0YW50IHN5bWJvbHMgYXJlOiBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCwgYGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZWAsIGB0ZHBfaXRlcl9yZXN0YXJ0YCwgYHRkcF9pdGVyX25leHRgLCBhbmQgYHRkcF9pdGVyX3NraXBfY2hpbGRgLlxuXG5BbmQgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb24gaXMgZGVmaW5pdGVseSBqdXN0IGBLVk1gLlxuXG5UaGUgcmVhc29uaW5nIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyBURFAgTU1VIHRvIHNraXAgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcywgb3B0aW1pemluZyBob3cgd2UgaGFuZGxlIHBhZ2UgdGFibGVzLiBUaGlzIGNvZGUgaXMgYWN0aXZlIGR1cmluZyBLVk0gZ3Vlc3QgbWVtb3J5IHVubWFwcGluZyBvciB6YXBwaW5nLCBtYWtpbmcgaXQgYSBjcml0aWNhbCBhcmVhIHRvIGFuYWx5emUuXG5cbkFscmlnaHQsIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NjAsIk91dHB1dFRva2VucyI6MTQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjA5OjIwLjM0MzE2ODcyNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MDY5MzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdGRwX21tdV96YXBfbGVhZnNcIixcbiAgICBcImt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZVwiLFxuICAgIFwidGRwX2l0ZXJfcmVzdGFydFwiLFxuICAgIFwidGRwX2l0ZXJfbmV4dFwiLFxuICAgIFwidGRwX2l0ZXJfc2tpcF9jaGlsZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBLVk0gVERQIE1NVSB0byBza2lwIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgd2hlbiB6YXBwaW5nLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgbG9naWMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgd2hlbiBydW5uaW5nIEtWTSBndWVzdHMgYW5kIHBlcmZvcm1pbmcgbWVtb3J5IHVubWFwcGluZyBvciB6YXBwaW5nIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3RkcF9tbXVfemFwX2xlYWZzXCIsXG4gICAgXCJrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VcIixcbiAgICBcInRkcF9pdGVyX3Jlc3RhcnRcIixcbiAgICBcInRkcF9pdGVyX25leHRcIixcbiAgICBcInRkcF9pdGVyX3NraXBfY2hpbGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIFREUCBNTVUgdG8gc2tpcCBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzIHdoZW4gemFwcGluZywgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgcGFnZSB0YWJsZSBtYW5hZ2VtZW50IGxvZ2ljLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHdoZW4gcnVubmluZyBLVk0gZ3Vlc3RzIGFuZCBwZXJmb3JtaW5nIG1lbW9yeSB1bm1hcHBpbmcgb3IgemFwcGluZyBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODowOToyMC40MjgyNDU0OTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5Mjc3OTA5MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDk6MjAuNDI4ODQ0OTU2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI5Mjc3MzA1ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyBURFAgTU1VIHRvIHNraXAgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyBkdXJpbmcgemFwcGluZy4gSXQgaW50cm9kdWNlcyB0d28gbmV3IGJvb2xlYW4gZmllbGRzOiBgdGRwX21tdV9lbXB0eV9sZWFmX3B0YCBpbiBgc3RydWN0IGt2bV9tbXVfcGFnZWAgYW5kIGBza2lwX2NoaWxkYCBpbiBgc3RydWN0IHRkcF9pdGVyYC4gQm90aCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCB1cG9uIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiAoYHRkcF9tbXVfaW5pdF9zcGAgYW5kIGB0ZHBfaXRlcl9yZXN0YXJ0YCByZXNwZWN0aXZlbHkpLiBUaGVzZSBzdHJ1Y3R1cmVzIGFyZSBpbnRlcm5hbCB0byBLVk0gYW5kIGFyZSBub3QgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM3NjY4ODIzYzg2MWZiNGU2NjFlNDAzZTE3NWQ1ZmYwMzg2MjI2YWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwODowODozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmggYi9hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oXG5pbmRleCA3M2NkY2JjY2M4OWU4Li41MzA1YWEzZTY4OGI3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaFxuQEAgLTk1LDYgKzk1LDggQEAgc3RydWN0IGt2bV9tbXVfcGFnZSB7XG4gXHR9O1xuIFxuIFx0Ym9vbCBoYXNfbWFwcGVkX2hvc3RfbW1pbztcbitcdC8qIFREUCBNTVUgb25seTogbm8gcHJlc2VudCBsZWFmIFNQVEVzIGV4aXN0IGluIHRoaXMgbGVhZiBwYWdlIHRhYmxlLiAqL1xuK1x0Ym9vbCB0ZHBfbW11X2VtcHR5X2xlYWZfcHQ7XG4gXG4gXHR1bmlvbiB7XG4gXHRcdC8qIFRoZXNlIHR3byBtZW1iZXJzIGFyZW4ndCB1c2VkIGZvciBURFAgTU1VICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jXG5pbmRleCA5ZTE3YmZhODA5MDExLi4xZDg3ZGIxNGE2YWU4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmNcbkBAIC0yMyw2ICsyMyw3IEBAIHN0YXRpYyB2b2lkIHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuIHZvaWQgdGRwX2l0ZXJfcmVzdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4ge1xuIFx0aXRlci1cdTAwM2V5aWVsZGVkID0gZmFsc2U7XG4rXHRpdGVyLVx1MDAzZXNraXBfY2hpbGQgPSBmYWxzZTtcbiBcdGl0ZXItXHUwMDNleWllbGRlZF9nZm4gPSBpdGVyLVx1MDAzZW5leHRfbGFzdF9sZXZlbF9nZm47XG4gXHRpdGVyLVx1MDAzZWxldmVsID0gaXRlci1cdTAwM2Vyb290X2xldmVsO1xuIFxuQEAgLTE2Nyw5ICsxNjgsMTEgQEAgdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0aWYgKHRyeV9zdGVwX2Rvd24oaXRlcikpXG4rXHRpZiAoIWl0ZXItXHUwMDNlc2tpcF9jaGlsZCBcdTAwMjZcdTAwMjYgdHJ5X3N0ZXBfZG93bihpdGVyKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aXRlci1cdTAwM2Vza2lwX2NoaWxkID0gZmFsc2U7XG4rXG4gXHRkbyB7XG4gXHRcdGlmICh0cnlfc3RlcF9zaWRlKGl0ZXIpKVxuIFx0XHRcdHJldHVybjtcbkBAIC0xNzcsMyArMTgwLDggQEAgdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbiBcdGl0ZXItXHUwMDNldmFsaWQgPSBmYWxzZTtcbiB9XG4gXG4rdm9pZCB0ZHBfaXRlcl9za2lwX2NoaWxkKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbit7XG4rXHRXQVJOX09OX09OQ0UoaXRlci1cdTAwM2V5aWVsZGVkKTtcbitcdGl0ZXItXHUwMDNlc2tpcF9jaGlsZCA9IHRydWU7XG4rfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaCBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaFxuaW5kZXggMzY0YzVkYTZjNDk5MS4uNDdhYzhiZDQzNzk0MyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oXG5AQCAtMTE0LDYgKzExNCwxMSBAQCBzdHJ1Y3QgdGRwX2l0ZXIge1xuIFx0ICogbGV2ZWwgaW5zdGVhZCBvZiBhZHZhbmNpbmcgdG8gdGhlIG5leHQgZW50cnkuXG4gXHQgKi9cbiBcdGJvb2wgeWllbGRlZDtcbitcdC8qXG4rXHQgKiBUcnVlIGlmIHRkcF9pdGVyX25leHQoKSBzaG91bGQgc2tpcCB0aGUgY2hpbGQgcGFnZSB0YWJsZSByZWZlcmVuY2VkIGJ5XG4rXHQgKiB0aGUgY3VycmVudCBTUFRFLCBpbnN0ZWFkIG9mIGRlc2NlbmRpbmcgaW50byBpdC5cbitcdCAqL1xuK1x0Ym9vbCBza2lwX2NoaWxkO1xuIH07XG4gXG4gLypcbkBAIC0xMzksNSArMTQ0LDYgQEAgdm9pZCB0ZHBfaXRlcl9zdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG4gXHRcdCAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cyk7XG4gdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcik7XG4gdm9pZCB0ZHBfaXRlcl9yZXN0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcik7XG4rdm9pZCB0ZHBfaXRlcl9za2lwX2NoaWxkKHN0cnVjdCB0ZHBfaXRlciAqaXRlcik7XG4gXG4gI2VuZGlmIC8qIF9fS1ZNX1g4Nl9NTVVfVERQX0lURVJfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcbmluZGV4IGMxY2JhZTY1ZDIzOWYuLjg0ZTE4YmQ2ZTc3NzkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY1xuKysrIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcbkBAIC0yMzgsNiArMjM4LDcgQEAgc3RhdGljIHZvaWQgdGRwX21tdV9pbml0X3NwKHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLCB0ZHBfcHRlcF90IHNwdGVwLFxuIFx0c3AtXHUwMDNlZ2ZuID0gZ2ZuO1xuIFx0c3AtXHUwMDNlcHRlcCA9IHNwdGVwO1xuIFx0c3AtXHUwMDNldGRwX21tdV9wYWdlID0gdHJ1ZTtcbitcdHNwLVx1MDAzZXRkcF9tbXVfZW1wdHlfbGVhZl9wdCA9IGZhbHNlO1xuIFxuIFx0dHJhY2Vfa3ZtX21tdV9nZXRfcGFnZShzcCwgdHJ1ZSk7XG4gfVxuQEAgLTUyNyw2ICs1MjgsMTAgQEAgc3RhdGljIGludCBfX2hhbmRsZV9jaGFuZ2VkX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCxcbiBcdGlmIChpc19sZWFmKVxuIFx0XHRjaGVja19zcHRlX3dyaXRhYmxlX2ludmFyaWFudHMobmV3X3NwdGUpO1xuIFxuK1x0aWYgKGlzX2xlYWYgXHUwMDI2XHUwMDI2ICF3YXNfbGVhZiBcdTAwMjZcdTAwMjYgc3AtXHUwMDNldGRwX21tdV9wYWdlIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNwLVx1MDAzZXJvbGUubGV2ZWwgPT0gUEdfTEVWRUxfNEspXG4rXHRcdFdSSVRFX09OQ0Uoc3AtXHUwMDNldGRwX21tdV9lbXB0eV9sZWFmX3B0LCBmYWxzZSk7XG4rXG4gXHQvKlxuIFx0ICogVGhlIG9ubHkgdGltZXMgYSBTUFRFIHNob3VsZCBiZSBjaGFuZ2VkIGZyb20gYSBub24tcHJlc2VudCB0b1xuIFx0ICogbm9uLXByZXNlbnQgc3RhdGUgaXMgd2hlbiBhbiBNTUlPIGVudHJ5IGlzIGluc3RhbGxlZC9tb2RpZmllZC9cbkBAIC05MjMsNiArOTI4LDM5IEBAIGJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgdGRwX21tdV9yYW5nZV9jb3ZlcnNfbGVhZl9wdChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsXG4rXHRcdFx0XHRcdCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kKVxuK3tcbitcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwO1xuK1xuK1x0c3AgPSBzcHRlcF90b19zcChyY3VfZGVyZWZlcmVuY2UoaXRlci1cdTAwM2VzcHRlcCkpO1xuK1x0cmV0dXJuIHNwLVx1MDAzZWdmbiBcdTAwM2U9IHN0YXJ0IFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHNwLVx1MDAzZWdmbiArIEtWTV9QQUdFU19QRVJfSFBBR0UoUEdfTEVWRUxfMk0pIFx1MDAzYz0gZW5kO1xuK31cbitcbitzdGF0aWMgYm9vbCB0ZHBfbW11X2Nhbl9za2lwX2xlYWZfcHQoc3RydWN0IHRkcF9pdGVyICppdGVyLFxuK1x0XHRcdFx0ICAgICBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kKVxuK3tcbitcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKmNoaWxkX3NwO1xuK1xuK1x0aWYgKGl0ZXItXHUwMDNlbGV2ZWwgIT0gUEdfTEVWRUxfMk0gfHxcbitcdCAgICAhaXNfc2hhZG93X3ByZXNlbnRfcHRlKGl0ZXItXHUwMDNlb2xkX3NwdGUpIHx8XG4rXHQgICAgaXNfbGFzdF9zcHRlKGl0ZXItXHUwMDNlb2xkX3NwdGUsIGl0ZXItXHUwMDNlbGV2ZWwpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoaXRlci1cdTAwM2VnZm4gXHUwMDNjIHN0YXJ0IHx8XG4rXHQgICAgaXRlci1cdTAwM2VnZm4gKyBLVk1fUEFHRVNfUEVSX0hQQUdFKFBHX0xFVkVMXzJNKSBcdTAwM2UgZW5kKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKlxuK1x0ICogU2tpcCByZXRhaW5lZCBlbXB0eSA0SyBsZWFmIHBhZ2UgdGFibGVzIHdpdGhvdXQgdW5saW5raW5nIHRoZW0sIHNvXG4rXHQgKiBmdXR1cmUgZmF1bHRzIGNhbiByZXVzZSB0aGUgcGFnaW5nIHN0cnVjdHVyZS5cbitcdCAqL1xuK1x0Y2hpbGRfc3AgPSBzcHRlX3RvX2NoaWxkX3NwKGl0ZXItXHUwMDNlb2xkX3NwdGUpO1xuK1x0cmV0dXJuIGNoaWxkX3NwLVx1MDAzZXJvbGUubGV2ZWwgPT0gUEdfTEVWRUxfNEsgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgUkVBRF9PTkNFKGNoaWxkX3NwLVx1MDAzZXRkcF9tbXVfZW1wdHlfbGVhZl9wdCk7XG4rfVxuK1xuIC8qXG4gICogSWYgY2FuX3lpZWxkIGlzIHRydWUsIHdpbGwgcmVsZWFzZSB0aGUgTU1VIGxvY2sgYW5kIHJlc2NoZWR1bGUgaWYgdGhlXG4gICogc2NoZWR1bGVyIG5lZWRzIHRoZSBDUFUgb3IgdGhlcmUgaXMgY29udGVudGlvbiBvbiB0aGUgTU1VIGxvY2suIElmIHRoaXNcbkBAIC05MzQsOCArOTcyLDEwIEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcbiBcdFx0XHQgICAgICBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGNhbl95aWVsZCwgYm9vbCBmbHVzaClcbiB7XG4gXHRzdHJ1Y3QgdGRwX2l0ZXIgaXRlcjtcbitcdGJvb2wgbWF5X3NraXBfbGVhZl9wdHM7XG4gXG4gXHRlbmQgPSBtaW4oZW5kLCB0ZHBfbW11X21heF9nZm5fZXhjbHVzaXZlKCkpO1xuK1x0bWF5X3NraXBfbGVhZl9wdHMgPSBlbmQgLSBzdGFydCBcdTAwM2U9IEtWTV9QQUdFU19QRVJfSFBBR0UoUEdfTEVWRUxfMk0pO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuIFxuQEAgLTk0OCwxOCArOTg4LDM0IEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoIWlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSB8fFxuLVx0XHQgICAgIWlzX2xhc3Rfc3B0ZShpdGVyLm9sZF9zcHRlLCBpdGVyLmxldmVsKSlcbitcdFx0aWYgKG1heV9za2lwX2xlYWZfcHRzIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgdGRwX21tdV9jYW5fc2tpcF9sZWFmX3B0KFx1MDAyNml0ZXIsIHN0YXJ0LCBlbmQpKSB7XG4rXHRcdFx0dGRwX2l0ZXJfc2tpcF9jaGlsZChcdTAwMjZpdGVyKTtcbiBcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuIFxuLVx0XHR0ZHBfbW11X2l0ZXJfc2V0X3NwdGUoa3ZtLCBcdTAwMjZpdGVyLCBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSk7XG4rXHRcdGlmIChpc19zaGFkb3dfcHJlc2VudF9wdGUoaXRlci5vbGRfc3B0ZSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpIHtcbitcdFx0XHR0ZHBfbW11X2l0ZXJfc2V0X3NwdGUoa3ZtLCBcdTAwMjZpdGVyLFxuK1x0XHRcdFx0XHQgICAgICBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSk7XG4gXG4tXHRcdC8qXG4tXHRcdCAqIFphcHBpbmdzIFNQVEVzIGluIGludmFsaWQgcm9vdHMgZG9lc24ndCByZXF1aXJlIGEgVExCIGZsdXNoLFxuLVx0XHQgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuXG4tXHRcdCAqL1xuLVx0XHRpZiAoIXJvb3QtXHUwMDNlcm9sZS5pbnZhbGlkKVxuLVx0XHRcdGZsdXNoID0gdHJ1ZTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFphcHBpbmdzIFNQVEVzIGluIGludmFsaWQgcm9vdHMgZG9lc24ndCByZXF1aXJlIGEgVExCIGZsdXNoLFxuK1x0XHRcdCAqIHNlZSBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoKSBmb3IgZGV0YWlscy5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoIXJvb3QtXHUwMDNlcm9sZS5pbnZhbGlkKVxuK1x0XHRcdFx0Zmx1c2ggPSB0cnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtYXlfc2tpcF9sZWFmX3B0cyBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGl0ZXIubGV2ZWwgPT0gUEdfTEVWRUxfNEsgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBzcHRlX2luZGV4KHJjdV9kZXJlZmVyZW5jZShpdGVyLnNwdGVwKSkgPT0gU1BURV9FTlRfUEVSX1BBR0UgLSAxIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgdGRwX21tdV9yYW5nZV9jb3ZlcnNfbGVhZl9wdChcdTAwMjZpdGVyLCBzdGFydCwgZW5kKSkge1xuK1x0XHRcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwO1xuK1xuK1x0XHRcdHNwID0gc3B0ZXBfdG9fc3AocmN1X2RlcmVmZXJlbmNlKGl0ZXIuc3B0ZXApKTtcbitcdFx0XHRXUklURV9PTkNFKHNwLVx1MDAzZXRkcF9tbXVfZW1wdHlfbGVhZl9wdCwgdHJ1ZSk7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDk6MjAuNDI4ODQ1ODM2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MTc5MzI4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gVERQIE1NVSBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIHRoZSBLVk0ncyBUd28tRGltZW5zaW9uYWwgUGFnaW5nIE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQgKFREUCBNTVUpIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgZm9yIHg4Ni4gVGhlIGNvcmUgaWRlYSBpcyB0byBza2lwIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgZHVyaW5nIHRoZSBcInphcHBpbmdcIiBwcm9jZXNzLCB3aGljaCBpcyBhIGNvbW1vbiBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gd2hlbiByZW1vdmluZyBtYXBwaW5ncy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGFkZGluZyBhIG5ldyBib29sZWFuIGZpZWxkLCBgdGRwX21tdV9lbXB0eV9sZWFmX3B0YCwgdG8gdGhlIGBzdHJ1Y3Qga3ZtX21tdV9wYWdlYC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU2luY2UgYHN0cnVjdCBrdm1fbW11X3BhZ2VgIGlzIGFsbG9jYXRlZCB2aWEgYSBga21lbV9jYWNoZWAsIGl0IHNob3VsZCBiZSBzYWZlIGluIG1vc3QgY2FzZXMsIGJ1dCB0aGUgYWRkZWQgYHRkcF9tbXVfZW1wdHlfbGVhZl9wdGAgbmVlZHMgY2FyZWZ1bCBzY3J1dGlueS4gQ3J1Y2lhbGx5LCBpcyB0aGlzIGBzdHJ1Y3Qga3ZtX21tdV9wYWdlYCBldmVyIGV4cG9zZWQgdG8gdXNlcnNwYWNlPyBObywgZ29vZCwgaXQncyBpbnRlcm5hbCB0byBLVk0ncyBzaGFkb3cgcGFnaW5nL1REUCBpbXBsZW1lbnRhdGlvbi4gVGhhdCBzaWduaWZpY2FudGx5IHJlZHVjZXMgdGhlIGF0dGFjayBzdXJmYWNlLlxuXG5Ob3csIHRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgYSBgc2tpcF9jaGlsZGAgZmxhZyB0byBgc3RydWN0IHRkcF9pdGVyYC4gVGhpcyBpdGVyYXRvciBpcyB1c2VkIHdpdGhpbiBmdW5jdGlvbnMgbGlrZSBgdGRwX21tdV96YXBfbGVhZnNgLiBIbW0sIGBzdHJ1Y3QgdGRwX2l0ZXIgaXRlcjtgIGlzIGRlY2xhcmVkIGFzIGEgbG9jYWwgdmFyaWFibGUuIE9rYXksIGFuZCBpdCdzIGluaXRpYWxpemVkIGJ5IGB0ZHBfaXRlcl9zdGFydCgpYC4gTGV0J3MgY29uZmlybSB0aGF0IHRoYXQgaW5pdGlhbGl6YXRpb24gY29ycmVjdGx5IHNldHMgYHNraXBfY2hpbGRgLCBhcyB0aGF0J3MgdGhlIG5ldyBjb25kaXRpb25hbCBsb2dpYy4gSSBuZWVkIHRvIGRpZyBpbnRvIGB0ZHBfaXRlcl9zdGFydCgpYCBhbmQgdmVyaWZ5IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGF0IG5ldyBmaWVsZCB3aXRoaW4gdGhlIGl0ZXJhdG9yLiBHb3R0YSBtYWtlIHN1cmUgaXQncyBhbGwgaGFuZGxlZCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MTYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODowOToyNy4xNDY3ODI5ODFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjYwNDgyMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGRwX2l0ZXJfc3RhcnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jPTIzPXZvaWQgdGRwX2l0ZXJfcmVzdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMzktICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jOjQwOnZvaWQgdGRwX2l0ZXJfc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy00MS1cXHRcXHQgICAgaW50IG1pbl9sZXZlbCwgZ2ZuX3QgbmV4dF9sYXN0X2xldmVsX2dmbiwgZ2ZuX3QgZ2ZuX2JpdHMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg9NzY9c3RydWN0IHRkcF9pdGVyIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0xMjgtI2RlZmluZSBmb3JfZWFjaF90ZHBfcHRlX21pbl9sZXZlbChpdGVyLCBrdm0sIHJvb3QsIG1pbl9sZXZlbCwgc3RhcnQsIGVuZClcXHRcXHQgIFxcXFxcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6MTI5OlxcdGZvciAodGRwX2l0ZXJfc3RhcnQoXFx1MDAyNml0ZXIsIHJvb3QsIG1pbl9sZXZlbCwgc3RhcnQsIGt2bV9nZm5fcm9vdF9iaXRzKGt2bSwgcm9vdCkpOyBcXFxcXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTEzMC1cXHQgICAgIGl0ZXIudmFsaWQgXFx1MDAyNlxcdTAwMjYgaXRlci5nZm4gXFx1MDAzYyBlbmQ7XFx0XFx0XFx0XFx0XFx0XFx0ICBcXFxcXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtMTMzLSNkZWZpbmUgZm9yX2VhY2hfdGRwX3B0ZV9taW5fbGV2ZWxfYWxsKGl0ZXIsIHJvb3QsIG1pbl9sZXZlbClcXHRcXHRcXFxcXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oOjEzNDpcXHRmb3IgKHRkcF9pdGVyX3N0YXJ0KFxcdTAwMjZpdGVyLCByb290LCBtaW5fbGV2ZWwsIDAsIDApO1xcdFxcdFxcXFxcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtMTM1LVxcdFxcdGl0ZXIudmFsaWQgXFx1MDAyNlxcdTAwMjYgaXRlci5nZm4gXFx1MDAzYyB0ZHBfbW11X21heF9nZm5fZXhjbHVzaXZlKCk7XFx0XFxcXFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oPTE0MT10ZHBfcHRlcF90IHNwdGVfdG9fY2hpbGRfcHQodTY0IHB0ZSwgaW50IGxldmVsKTtcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtMTQyLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaDoxNDM6dm9pZCB0ZHBfaXRlcl9zdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTE0NC1cXHRcXHQgICAgaW50IG1pbl9sZXZlbCwgZ2ZuX3QgbmV4dF9sYXN0X2xldmVsX2dmbiwgZ2ZuX3QgZ2ZuX2JpdHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODowOToyOC44NzI4MzgzM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzczMjcyMDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgSW1wbGVtZW50YXRpb24gb2YgYHRkcF9pdGVyX3N0YXJ0YCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRoaW5raW5nLCBcIkxldCdzIGNyYWNrIG9wZW4gdGhpcyBjb2RlIGFuZCBzZWUgd2hhdCBgdGRwX2l0ZXJfc3RhcnRgIGlzICpyZWFsbHkqIGRvaW5nLlwiIE5vIGhhbmQtd2F2aW5nLCBubyBhYnN0cmFjdCBjb25jZXB0cyDigJMgSSB3YW50IHRvIHNlZSB0aGUgbml0dHktZ3JpdHR5LiBXaGF0J3MgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBpcyBpdCB0b3VjaGluZz8gSXMgaXQgYWxsb2NhdGluZyBtZW1vcnk/IFNldHRpbmcgdXAgc29tZSBzb3J0IG9mIGludGVybmFsIHN0YXRlPyBXaGF0IGVkZ2UgY2FzZXMgZG9lcyBpdCBoYW5kbGUgKG9yICpub3QqIGhhbmRsZSwgbW9yZSBpbXBvcnRhbnRseSk/IFdoZXJlIGFyZSB0aGUgcG90ZW50aWFsIGdvdGNoYXM/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCB1bmRlcnN0YW5kaW5nIHRoaXMgaXMgYWJzb2x1dGVseSBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgd2hvbGUgaXRlcmF0aXZlIHByb2Nlc3MgaXMgc3VwcG9zZWQgdG8gd29yay4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgZ3VuLCBhbmQga25vd2luZyBleGFjdGx5IGhvdyBpdCdzIGZpcmVkIGlzIGVzc2VudGlhbC4gTGV0J3Mgc2VlIGhvdyBpdCBnZXRzIHRoaXMgaXRlcmF0b3Igb2ZmIHRoZSBncm91bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4OTksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODowOTozNC4yNDYxMTQzMzdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Njg3ODA5NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCB0ZHBfaXRlcl9zdGFydFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM9MjM9dm9pZCB0ZHBfaXRlcl9yZXN0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0zOS0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM6NDA6dm9pZCB0ZHBfaXRlcl9zdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTQxLVxcdFxcdCAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cylcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaD0xNDE9dGRwX3B0ZXBfdCBzcHRlX3RvX2NoaWxkX3B0KHU2NCBwdGUsIGludCBsZXZlbCk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTE0Mi1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6MTQzOnZvaWQgdGRwX2l0ZXJfc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0xNDQtXFx0XFx0ICAgIGludCBtaW5fbGV2ZWwsIGdmbl90IG5leHRfbGFzdF9sZXZlbF9nZm4sIGdmbl90IGdmbl9iaXRzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDk6MzUuOTE0OTA0MDEyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDU1OTM2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHRkcF9pdGVyLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIEtWTSBNTVUgaW1wbGVtZW50YXRpb24gZm9yIHg4Niwgc3BlY2lmaWNhbGx5IHRoZSBgdGRwX2l0ZXIuY2AgZmlsZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBvZiB0aGUga2V5IGNvbmNlcHRzIGF0IHBsYXkgaGVyZSDigJMgbmVzdGVkIHBhZ2luZywgdHJhbnNsYXRpb24gbG9va2FzaWRlIGJ1ZmZlciAoVExCKSBtYW5hZ2VtZW50LCBhbmQgdGhlIGNvbXBsZXhpdGllcyBvZiB0cmF2ZXJzaW5nIHRoZSBwYWdlIHRhYmxlcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBNeSBmb2N1cyB3aWxsIGJlIGFyb3VuZCBsaW5lIDQwLCBhcyB0aGF0J3MgdHlwaWNhbGx5IHdoZXJlIGludGVyZXN0aW5nIGluaXRpYWxpemF0aW9uIG9yIGVudHJ5IHBvaW50cyByZXNpZGUgaW4gbWFueSBrZXJuZWwgbW9kdWxlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIG1vZHVsZSBoYW5kbGVzIHRoZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIGluIGEgS1ZNIGNvbnRleHQuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSBNTVUgaXRlcmF0b3Igd29ya3MgYXQgdGhlIGxlYWYgbGV2ZWwuIE15IGFpbSBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDg5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDk6MzkuNjYwNTAyMzg5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRcXHRpdGVyLVxcdTAwM2VnZm4gPSBnZm5fcm91bmRfZm9yX2xldmVsKGl0ZXItXFx1MDAzZW5leHRfbGFzdF9sZXZlbF9nZm4sIGl0ZXItXFx1MDAzZWxldmVsKTtcXG4gIDMxOlxcdFxcdHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoaXRlcik7XFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdGl0ZXItXFx1MDAzZXZhbGlkID0gdHJ1ZTtcXG4gIDM0OlxcdH1cXG4gIDM1OlxcdFxcbiAgMzY6XFx0LypcXG4gIDM3OlxcdCAqIFNldHMgYSBURFAgaXRlcmF0b3IgdG8gd2FsayBhIHByZS1vcmRlciB0cmF2ZXJzYWwgb2YgdGhlIHBhZ2luZyBzdHJ1Y3R1cmVcXG4gIDM4OlxcdCAqIHJvb3RlZCBhdCByb290X3B0LCBzdGFydGluZyB3aXRoIHRoZSB3YWxrIHRvIHRyYW5zbGF0ZSBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLlxcbiAgMzk6XFx0ICovXFxuICA0MDpcXHR2b2lkIHRkcF9pdGVyX3N0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlciwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcXG4gIDQxOlxcdFxcdFxcdCAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cylcXG4gIDQyOlxcdHtcXG4gIDQzOlxcdFxcdGlmIChXQVJOX09OX09OQ0UoIXJvb3QgfHwgKHJvb3QtXFx1MDAzZXJvbGUubGV2ZWwgXFx1MDAzYyAxKSB8fFxcbiAgNDQ6XFx0XFx0XFx0XFx0IChyb290LVxcdTAwM2Vyb2xlLmxldmVsIFxcdTAwM2UgUFQ2NF9ST09UX01BWF9MRVZFTCkgfHxcXG4gIDQ1OlxcdFxcdFxcdFxcdCAoZ2ZuX2JpdHMgXFx1MDAyNlxcdTAwMjYgbmV4dF9sYXN0X2xldmVsX2dmbiBcXHUwMDNlPSBnZm5fYml0cykpKSB7XFxuICA0NjpcXHRcXHRcXHRpdGVyLVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbiAgNDc6XFx0XFx0XFx0cmV0dXJuO1xcbiAgNDg6XFx0XFx0fVxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHRpdGVyLVxcdTAwM2VuZXh0X2xhc3RfbGV2ZWxfZ2ZuID0gbmV4dF9sYXN0X2xldmVsX2dmbjtcXG4gIDUxOlxcdFxcdGl0ZXItXFx1MDAzZWdmbl9iaXRzID0gZ2ZuX2JpdHM7XFxuICA1MjpcXHRcXHRpdGVyLVxcdTAwM2Vyb290X2xldmVsID0gcm9vdC1cXHUwMDNlcm9sZS5sZXZlbDtcXG4gIDUzOlxcdFxcdGl0ZXItXFx1MDAzZW1pbl9sZXZlbCA9IG1pbl9sZXZlbDtcXG4gIDU0OlxcdFxcdGl0ZXItXFx1MDAzZXB0X3BhdGhbaXRlci1cXHUwMDNlcm9vdF9sZXZlbCAtIDFdID0gKHRkcF9wdGVwX3Qpcm9vdC1cXHUwMDNlc3B0O1xcbiAgNTU6XFx0XFx0aXRlci1cXHUwMDNlYXNfaWQgPSBrdm1fbW11X3BhZ2VfYXNfaWQocm9vdCk7XFxuICA1NjpcXHRcXG4gIDU3OlxcdFxcdHRkcF9pdGVyX3Jlc3RhcnQoaXRlcik7XFxuICA1ODpcXHR9XFxuICA1OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MDk6MzkuNjYwNTc0MDE5WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDQ1NTU1MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MgaW4gS1ZNIE1NVSBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEknbSBmb2N1c2luZyBvbiB0aGUgaW50cm9kdWN0aW9uIG9mIGBza2lwX2NoaWxkYCBpbiB0aGUgYHRkcF9pdGVyYCBzdHJ1Y3QgYW5kIGB0ZHBfbW11X2VtcHR5X2xlYWZfcHRgIGluIGBrdm1fbW11X3BhZ2VgLCB0byBvcHRpbWl6ZSB0aGUgS1ZNIE1NVSBieSBza2lwcGluZyBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy5cblxuVGhlIGB0ZHBfaXRlcl9zdGFydGAgZnVuY3Rpb24gY2FsbHMgYHRkcF9pdGVyX3Jlc3RhcnRgLCBhbmQgd2l0aGluIGB0ZHBfaXRlcl9yZXN0YXJ0YCwgYGl0ZXItXHUwMDNlc2tpcF9jaGlsZGAgaXMgZXhwbGljaXRseSBzZXQgdG8gYGZhbHNlYC4gVGhhdCBsb29rcyBnb29kLiBNb3Zpbmcgb24sIHdoZW4gaW5pdGlhbGl6aW5nIGEgbmV3IGBrdm1fbW11X3BhZ2VgIHZpYSBgdGRwX21tdV9pbml0X3NwYCwgIGBzcC1cdTAwM2V0ZHBfbW11X2VtcHR5X2xlYWZfcHRgIGlzIGFsc28gc2V0IHRvIGBmYWxzZWAuIFNvLCBib3RoIG5ldyBmaWVsZHMgYXJlIGJlaW5nIHByb3Blcmx5IGluaXRpYWxpemVkLlxuXG5TaW5jZSBib3RoIHN0cnVjdHMgYXJlIGludGVybmFsIHRvIEtWTSBhbmQgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBJJ20gY29uZmlkZW50IHRoYXQgdGhlIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGVybXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuICBDb250cm9sIGZsb3cgcmVsaWVzIG9uIGluaXRpYWxpemVkIHZhcmlhYmxlcywgc28gdGhhdCdzIGEgcGx1cy4gVGhlIGRlc2lnbiBpcyBwdXJlbHkgYW4gb3B0aW1pemF0aW9uIGZvciBLVk0ncyBNTVUsIHNraXBwaW5nIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMsIHRoYXQgY291bGQgaGF2ZSB0aGUgcG90ZW50aWFsIG9mIHJlc3VsdGluZyBpbiBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gQnV0IHRob3NlIGlzc3VlcyB3aWxsIGJlIGNhdWdodCBieSBLQVNBTi5cblxuTGV0IG1lIGRvdWJsZS1jaGVjay4gTG9va2luZyBhdCBgdGRwX21tdV9yYW5nZV9jb3ZlcnNfbGVhZl9wdGAsIGBzcHRlcF90b19zcGAgcmVsaWFibHkgYWNjZXNzZXMgdGhlIGBrdm1fbW11X3BhZ2VgIGZyb20gdGhlIFNQVEUgcG9pbnRlciwgZW5zdXJpbmcgdGhhdCBhbGwgYWNjZXNzZWQgZmllbGRzIGFyZSBpbml0aWFsaXplZC4gVGhlIHNhbWUgcGF0dGVybiBpcyB1c2VkIGluIGB0ZHBfbW11X2Nhbl9za2lwX2xlYWZfcHRgLiBUaGF0IGNoZWNrcyBvdXQgdG9vLlxuXG5BbmQsIGZpbmFsbHksIGBtYXlfc2tpcF9sZWFmX3B0c2AgaXMgaW5pdGlhbGl6ZWQuIEV2ZXJ5dGhpbmcgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZC5cblxuU28sIGluIGNvbmNsdXNpb24sIEkgZG9uJ3Qgc2VlIGFueSBpbW1lZGlhdGUgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHN1YnRsZSBpc3N1ZXMgaW4gdGhlIGxvZ2ljIG9mIHRoaXMgb3B0aW1pemF0aW9uLiBObyBuZWVkIHRvIGJyaW5nIGluIEtNU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjg0LCJPdXRwdXRUb2tlbnMiOjIxMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjA5OjQ5LjcwNjEzMTcyNloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJ3MgVERQIE1NVSB0byBza2lwIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgZHVyaW5nIHphcHBpbmcuIEl0IGludHJvZHVjZXMgdHdvIG5ldyBib29sZWFuIGZpZWxkczogYHRkcF9tbXVfZW1wdHlfbGVhZl9wdGAgaW4gYHN0cnVjdCBrdm1fbW11X3BhZ2VgIGFuZCBgc2tpcF9jaGlsZGAgaW4gYHN0cnVjdCB0ZHBfaXRlcmAuIEJvdGggZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgdXBvbiBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gKGB0ZHBfbW11X2luaXRfc3BgIGFuZCBgdGRwX2l0ZXJfcmVzdGFydGAgcmVzcGVjdGl2ZWx5KS4gVGhlc2Ugc3RydWN0dXJlcyBhcmUgaW50ZXJuYWwgdG8gS1ZNIGFuZCBhcmUgbm90IGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdXNlZCBpbiBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyBURFAgTU1VIHRvIHNraXAgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyBkdXJpbmcgemFwcGluZy4gSXQgaW50cm9kdWNlcyB0d28gbmV3IGJvb2xlYW4gZmllbGRzOiBgdGRwX21tdV9lbXB0eV9sZWFmX3B0YCBpbiBgc3RydWN0IGt2bV9tbXVfcGFnZWAgYW5kIGBza2lwX2NoaWxkYCBpbiBgc3RydWN0IHRkcF9pdGVyYC4gQm90aCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCB1cG9uIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiAoYHRkcF9tbXVfaW5pdF9zcGAgYW5kIGB0ZHBfaXRlcl9yZXN0YXJ0YCByZXNwZWN0aXZlbHkpLiBUaGVzZSBzdHJ1Y3R1cmVzIGFyZSBpbnRlcm5hbCB0byBLVk0gYW5kIGFyZSBub3QgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowhmgd6[1] Phase: Succeeded StartedAt: 2026-08-14 08:10:00 +0000 UTC FinishedAt: 2026-08-14 08:10:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmgd6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 08:10:00 +0000 UTC FinishedAt: 2026-08-14 08:10:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmgd6[2] Phase: Succeeded StartedAt: 2026-08-14 08:10:00 +0000 UTC FinishedAt: 2026-08-14 11:56:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-14 08:10:00 +0000 UTC FinishedAt: 2026-08-14 11:56:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-14 08:10:00 +0000 UTC FinishedAt: 2026-08-14 08:10:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-14 08:10:00 +0000 UTC FinishedAt: 2026-08-14 08:10:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhmgd6/series-workflowhmgd6-convert-artifact-2807781724/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-14 08:10:11 +0000 UTC FinishedAt: 2026-08-14 08:26:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-14 08:10:11 +0000 UTC FinishedAt: 2026-08-14 08:26:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*aa09cdc5-652d-4cf9-aa39-d15720f43df6,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-workflowhmgd6/series-workflowhmgd6-convert-artifact-2807781724/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": "c1a3e42a-e513-451e-a693-ba1ebf01b071", "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-workflowhmgd6/series-workflowhmgd6-build-action-4130180234/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-14 08:10:11 +0000 UTC FinishedAt: 2026-08-14 08:26:29 +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:*aa09cdc5-652d-4cf9-aa39-d15720f43df6,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-workflowhmgd6/series-workflowhmgd6-convert-artifact-2807781724/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": "c1a3e42a-e513-451e-a693-ba1ebf01b071", "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-workflowhmgd6/series-workflowhmgd6-build-action-4130180234/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-14 08:26:39 +0000 UTC FinishedAt: 2026-08-14 08:26:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-14 08:26:39 +0000 UTC FinishedAt: 2026-08-14 08:26:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-14 08:26:39 +0000 UTC FinishedAt: 2026-08-14 08:26:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-14 08:26:39 +0000 UTC FinishedAt: 2026-08-14 08:26:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhmgd6/series-workflowhmgd6-convert-artifact-2285364891/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-14 08:26:49 +0000 UTC FinishedAt: 2026-08-14 08:28:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-14 08:26:49 +0000 UTC FinishedAt: 2026-08-14 08:28:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c1a3e42a-e513-451e-a693-ba1ebf01b071,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-workflowhmgd6/series-workflowhmgd6-build-action-4130180234/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-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-14 08:28:50 +0000 UTC FinishedAt: 2026-08-14 08:28:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-14 08:28:50 +0000 UTC FinishedAt: 2026-08-14 08:28:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-14 08:28:50 +0000 UTC FinishedAt: 2026-08-14 08:51:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-14 08:28:50 +0000 UTC FinishedAt: 2026-08-14 08:51:43 +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:*aa09cdc5-652d-4cf9-aa39-d15720f43df6,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-workflowhmgd6/series-workflowhmgd6-convert-artifact-2285364891/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": "3e3e2fdb-b9ee-48e9-83f9-1b85dcbdf811", "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-workflowhmgd6/series-workflowhmgd6-build-action-3934736959/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-14 08:28:50 +0000 UTC FinishedAt: 2026-08-14 08:51:31 +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:*aa09cdc5-652d-4cf9-aa39-d15720f43df6,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-workflowhmgd6/series-workflowhmgd6-convert-artifact-2285364891/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": "3e3e2fdb-b9ee-48e9-83f9-1b85dcbdf811", "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-workflowhmgd6/series-workflowhmgd6-build-action-3934736959/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-14 08:51:43 +0000 UTC FinishedAt: 2026-08-14 08:51:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-14 08:51:43 +0000 UTC FinishedAt: 2026-08-14 08:51:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-14 08:51:43 +0000 UTC FinishedAt: 2026-08-14 08:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-14 08:51:43 +0000 UTC FinishedAt: 2026-08-14 08:53:36 +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:*3e3e2fdb-b9ee-48e9-83f9-1b85dcbdf811,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-workflowhmgd6/series-workflowhmgd6-build-action-3934736959/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-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-14 08:53:47 +0000 UTC FinishedAt: 2026-08-14 11:56:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-14 08:53:47 +0000 UTC FinishedAt: 2026-08-14 11:56:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"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:*c1a3e42a-e513-451e-a693-ba1ebf01b071,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3e3e2fdb-b9ee-48e9-83f9-1b85dcbdf811,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-workflowhmgd6/series-workflowhmgd6-build-action-4130180234/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-workflowhmgd6/series-workflowhmgd6-build-action-3934736959/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-14 08:53:47 +0000 UTC FinishedAt: 2026-08-14 08:54:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-14 08:53:47 +0000 UTC FinishedAt: 2026-08-14 08:53:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"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-workflowhmgd6/series-workflowhmgd6-convert-artifact-1190658452/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-14 08:53:47 +0000 UTC FinishedAt: 2026-08-14 08:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-14 08:53:47 +0000 UTC FinishedAt: 2026-08-14 08:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-14 08:53:47 +0000 UTC FinishedAt: 2026-08-14 08:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-14 08:54:01 +0000 UTC FinishedAt: 2026-08-14 11:56:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhmgd6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","kvm_tdp_mmu_unmap_gfn_range","tdp_iter_restart","tdp_iter_next","tdp_iter_skip_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a9c2538-8a5d-4e2b-aa6c-c8e5c6f2aa37","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-14 08:54:01 +0000 UTC FinishedAt: 2026-08-14 11:56:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c1a3e42a-e513-451e-a693-ba1ebf01b071,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3e3e2fdb-b9ee-48e9-83f9-1b85dcbdf811,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-workflowhmgd6/series-workflowhmgd6-build-action-4130180234/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-workflowhmgd6/series-workflowhmgd6-build-action-3934736959/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-workflowhmgd6/series-workflowhmgd6-convert-artifact-1190658452/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,}