Name: series-workflow5f7bc Phase: Succeeded StartedAt: 2026-08-06 09:23:11 +0000 UTC FinishedAt: 2026-08-06 10:45:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7bc[0] Phase: Succeeded StartedAt: 2026-08-06 09:23:11 +0000 UTC FinishedAt: 2026-08-06 10:05:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7bc[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 09:23:11 +0000 UTC FinishedAt: 2026-08-06 10:05:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "7d3aae206663c4e006b25a1c7a20a4029e67da76", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "7d3aae206663c4e006b25a1c7a20a4029e67da76", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "5d8dbdd5-d6ba-4de1-9461-68af37a75832" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_handle_vncr_abort", "kvm_walk_nested_s2", "compute_tlb_inval_range", "kvm_vcpu_allocate_vncr_tlb", "kvm_vcpu_put_hw_mmu", "kvm_vcpu_load_hw_mmu" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9oYW5kbGVfdm5jcl9hYm9ydCYjMzQ7LAogICAgJiMzNDtrdm1fd2Fsa19uZXN0ZWRfczImIzM0OywKICAgICYjMzQ7Y29tcHV0ZV90bGJfaW52YWxfcmFuZ2UmIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGImIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfcHV0X2h3X21tdSYjMzQ7LAogICAgJiMzNDtrdm1fdmNwdV9sb2FkX2h3X21tdSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0gQVJNNjQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIFZOQ1IgVExCcywgbmVzdGVkIFMyIHdhbGtzLCBhbmQgVExCIGludmFsaWRhdGlvbiByYW5nZXMuIFRoZXNlIGFyZSBjb3JlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IGV4ZWN1dGlvbiBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMDowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRiMzU2ZjhhNGE4MTIxNTA1YmMxMmRiZWEwNGU5N2Q1NTBiMzU1YTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDEwOjA0OjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYmFlMmM0ZjkyZWY1Yy4uMTA4OTY2YTlkYjEyYiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtNDExLDggJiM0Mzs0MTEsOCBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xuIFx0LyogTWFza3MgZm9yIFZOQ1ItYmFja2VkIGFuZCBnZW5lcmFsIEVMMiBzeXNyZWdzICovXG4gXHRzdHJ1Y3Qga3ZtX3N5c3JlZ19tYXNrc1x0KnN5c3JlZ19tYXNrcztcbiBcbi1cdC8qIENvdW50IHRoZSBudW1iZXIgb2YgVk5DUl9FTDIgY3VycmVudGx5IG1hcHBlZCAqL1xuLVx0YXRvbWljX3Qgdm5jcl9tYXBfY291bnQ7XG4mIzQzO1x0LyogQ291bnQgdGhlIG51bWJlciBvZiBWTkNSX0VMMiBUTEJzICovXG4mIzQzO1x0YXRvbWljX3Qgdm5jcl90bGJfY291bnQ7XG4gXG4gXHQvKlxuIFx0ICogRm9yIGFuIHVudHJ1c3RlZCBob3N0IFZNLCAmIzM5O3Brdm0uaGFuZGxlJiMzOTsgaXMgdXNlZCB0byBsb29rdXBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oXG5pbmRleCAwMTJkNzExMDM0ZDE3Li5jODNiZTZkMGU3OWFjIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oXG5AQCAtMjkxLDYgJiM0MzsyOTEsMTMgQEAgc3RhdGljIGlubGluZSB1NjQgZGVjb2RlX3JhbmdlX3RsYmkodTY0IHZhbCwgdTY0ICpyYW5nZSwgdTE2ICphc2lkKVxuIFxuIFx0YmFzZVx0PSAodmFsIFx1MDAyNiBHRU5NQVNLKDM2LCAwKSkgXHUwMDNjXHUwMDNjIHNoaWZ0O1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogV2Ugb25seSBkZWFsIHdpdGggYXQgbW9zdCA0OGJpdCBWQS9JUEEsIHNvIDQ4IGlzIHdoZXJlIHdlXG4mIzQzO1x0ICogc2lnbi1leHRlbmQgZnJvbS4gU2hvdWxkIHdlIHN1cHBvcnQgRkVBVF9Me1ZQfUEqIGF0IHNvbWUgcG9pbnQsXG4mIzQzO1x0ICogdGhpcyB3aWxsIG5lZWQgdG8gYmUgcmV2aXNpdGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGJhc2VcdD0gKHU2NClzaWduX2V4dGVuZDY0KGJhc2UsIDQ4KTtcbiYjNDM7XG4gXHRpZiAoYXNpZClcbiBcdFx0KmFzaWQgPSBGSUVMRF9HRVQoVExCSVJfQVNJRF9NQVNLLCB2YWwpO1xuIFxuQEAgLTM4OCw2ICYjNDM7Mzk1LDggQEAgc3RydWN0IHMxX3dhbGtfcmVzdWx0IHtcbiBcdGJvb2xcdGZhaWxlZDtcbiB9O1xuIFxuJiM0MzsjZGVmaW5lIFMxX01NVV9ESVNBQkxFRFx0XHQoLTEyNylcbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIGZhaWxfczFfd2FsayhzdHJ1Y3QgczFfd2Fsa19yZXN1bHQgKndyLCB1OCBmc3QsIGJvb2wgczFwdHcpXG4ge1xuIFx0d3ItXHUwMDNlZnN0XHRcdD0gZnN0O1xuQEAgLTM5Niw2ICYjNDM7NDA1LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmYWlsX3MxX3dhbGsoc3RydWN0IHMxX3dhbGtfcmVzdWx0ICp3ciwgdTggZnN0LCBib29sIHMxcHR3KVxuIFx0d3ItXHUwMDNlZmFpbGVkXHQ9IHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgczFfd2Fsa190cmFuc2xhdGVkKHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gd3ItXHUwMDNlbGV2ZWwgIT0gUzFfTU1VX0RJU0FCTEVEO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBfX2t2bV90cmFuc2xhdGVfdmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgczFfd2Fsa19pbmZvICp3aSxcbiBcdFx0ICAgICAgIHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IsIHU2NCB2YSk7XG4gaW50IF9fa3ZtX2ZpbmRfczFfZGVzY19sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YSwgdTY0IGlwYSxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9hdC5jIGIvYXJjaC9hcm02NC9rdm0vYXQuY1xuaW5kZXggNjQwZjJkYzAwYThiYS4uMDkyNjQyNmI4Nzk4OSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2F0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2F0LmNcbkBAIC0xMSw4ICYjNDM7MTEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vbHN1aS5oXHUwMDNlXG4gXG4tI2RlZmluZSBTMV9NTVVfRElTQUJMRURcdFx0KC0xMjcpXG4tXG4gc3RhdGljIGludCBnZXRfaWFfc2l6ZShzdHJ1Y3QgczFfd2Fsa19pbmZvICp3aSlcbiB7XG4gXHRyZXR1cm4gNjQgLSB3aS1cdTAwM2V0eHN6O1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jXG5pbmRleCBiYmU5Y2ViZDNkOWQ1Li5mYTc3NmIxOGEzMmNhIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xuQEAgLTQyNCwxMSAmIzQzOzQyNCwxNSBAQCBzdGF0aWMgYm9vbCBrdm1faHlwX2hhbmRsZV90bGJpX2VsMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKlxuLVx0ICogSWYgd2UgaGF2ZSB0byBjaGVjayBmb3IgYW55IFZOQ1IgbWFwcGluZyBiZWluZyBpbnZhbGlkYXRlZCxcbi1cdCAqIGdvIGJhY2sgdG8gdGhlIHNsb3cgcGF0aCBmb3IgZnVydGhlciBwcm9jZXNzaW5nLlxuJiM0MztcdCAqIElmIHdlIGhhdmUgdG8gY2hlY2sgZm9yIGFueSBWTkNSIFRMQiBiZWluZyBpbnZhbGlkYXRlZCwgZ28gYmFja1xuJiM0MztcdCAqIHRvIHRoZSBzbG93IHBhdGggZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZSBzeW5jaHJvbmlzYXRpb24gYmV0d2VlbSBUTEJJIGFuZCB3YWxrIGlzIHByb3ZpZGVkIGJ5IHRoZVxuJiM0MztcdCAqIHNwZWN1bGF0aXZlIGluY3JlbWVudCBvZiB0aGUgVExCIGNvdW50ZXIgb24gd2FsaywgYW5kIHRoZVxuJiM0MztcdCAqIGludmFsaWRhdGlvbiBjb3VudGVyLiBZZXMsIHRoaXMgaXMgZmlkZGx5LlxuIFx0ICovXG4gXHRpZiAodmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSBcdTAwMjZcdTAwMjYgdmNwdV9lbDJfdGdlX2lzX3NldCh2Y3B1KSBcdTAwMjZcdTAwMjZcbi1cdCAgICBhdG9taWNfcmVhZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZuY3JfbWFwX2NvdW50KSlcbiYjNDM7XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bmNyX3RsYl9jb3VudCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdF9fa3ZtX3NraXBfaW5zdHIodmNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMgYi9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuaW5kZXggZGZiOTZlZGJkYzQzYy4uMjBhZjk0MTk3YThhNyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuQEAgLTI3LDcgJiM0MzsyNyw3IEBAIHN0cnVjdCB2bmNyX3RsYiB7XG4gXHRib29sXHRcdFx0aHBhX3dyaXRhYmxlO1xuIFxuIFx0LyogLTEgd2hlbiBub3QgbWFwcGVkIG9uIGEgQ1BVICovXG4tXHRpbnRcdFx0XHRjcHU7XG4mIzQzO1x0YXRvbWljX3RcdFx0Y3B1O1xuIFxuIFx0LypcbiBcdCAqIHRydWUgaWYgdGhlIFRMQiBpcyB2YWxpZC4gQ2FuIG9ubHkgYmUgY2hhbmdlZCB3aXRoIHRoZVxuQEAgLTQ4LDcgJiM0Mzs0OCw3IEBAIHZvaWQga3ZtX2luaXRfbmVzdGVkKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRrdm0tXHUwMDNlYXJjaC5uZXN0ZWRfbW11cyA9IE5VTEw7XG4gXHRrdm0tXHUwMDNlYXJjaC5uZXN0ZWRfbW11c19zaXplID0gMDtcbi1cdGF0b21pY19zZXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudm5jcl9tYXBfY291bnQsIDApO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudm5jcl90bGJfY291bnQsIDApO1xuIH1cbiBcbiBzdGF0aWMgaW50IGluaXRfbmVzdGVkX3MyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUpXG5AQCAtNTA2LDcgJiM0Mzs1MDYsNyBAQCBpbnQga3ZtX3dhbGtfbmVzdGVkX3MyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgcGh5c19hZGRyX3QgZ2lwYSxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgdHRsX3RvX3NpemUodTggdHRsKVxuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IF9fdHRsX3RvX3NpemUodTggdHRsKVxuIHtcbiBcdGludCBsZXZlbCA9IHR0bCBcdTAwMjYgMztcbiBcdGludCBncmFuID0gKHR0bCBcdTAwM2VcdTAwM2UgMikgXHUwMDI2IDM7XG5AQCAtNTYyLDEwICYjNDM7NTYyLDIyIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHRsX3RvX3NpemUodTggdHRsKVxuIFx0cmV0dXJuIG1heF9zaXplO1xuIH1cbiBcbi1zdGF0aWMgdTggcGdzaGlmdF9sZXZlbF90b190dGwodTE2IHNoaWZ0LCB1OCBsZXZlbClcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCB0dGxfdG9fc2l6ZSh1OCB0dGwpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX190dGxfdG9fc2l6ZSh0dGwpID86IFNaXzFHO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTggcGdzaGlmdF9sZXZlbF90b190dGwodTE2IHNoaWZ0LCBzOCBsZXZlbClcbiB7XG4gXHR1OCB0dGw7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiB3ZSBkb24mIzM5O3QgaGF2ZSBhIHByb3BlciBsZXZlbCwgZmFsbGJhY2sgdG8gdGhlIG1heGltdW1cbiYjNDM7XHQgKiBzaXplLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChsZXZlbCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdHN3aXRjaChzaGlmdCkge1xuIFx0Y2FzZSAxMjpcbiBcdFx0dHRsID0gVExCSV9UVExfVEdfNEs7XG5AQCAtNjc2LDcgJiM0Mzs2ODgsMTEgQEAgdW5zaWduZWQgbG9uZyBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1NjQgdmFsKVxuIFx0XHR0dGwgPSBnZXRfZ3Vlc3RfbWFwcGluZ190dGwobW11LCBhZGRyKTtcbiBcdH1cbiBcbi1cdG1heF9zaXplID0gdHRsX3RvX3NpemUodHRsKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERvbiYjMzk7dCB1c2UgdGhlIGRlZmF1bHQgMUdCIGZhbGxiYWNrLCBhcyB3ZSBjYW4gYWRhcHQgdG8gdGhlXG4mIzQzO1x0ICogbWF4IG1hcHBpbmcgc2l6ZSB3ZSBhbGxvdyBhdCBTMi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtYXhfc2l6ZSA9IF9fdHRsX3RvX3NpemUodHRsKTtcbiBcbiBcdGlmICghbWF4X3NpemUpIHtcbiBcdFx0LyogQ29tcHV0ZSB0aGUgbWF4aW11bSBleHRlbnQgb2YgdGhlIGludmFsaWRhdGlvbiAqL1xuQEAgLTg3OSwxOCAmIzQzOzg5NSw0MSBAQCB2b2lkIGt2bV92Y3B1X2xvYWRfaHdfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdH1cbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFVubWFwcGluZyBhbiBMMSBWTkNSIGNhbiBoYXBwZW4gY29uY3VycmVudGx5IHdpdGhvdXQgdGhlIG1tdSBsb2NrIGJlaW5nXG4mIzQzOyAqIGVmZmVjdGl2ZSAodmNwdV9wdXQoKSB2cyBUTEJJIGhhbmRsaW5nKS4gVGhlIGF0b21pY194Y2hnIGJlbG93IGVuc3VyZXNcbiYjNDM7ICogdGhhdCBvbmx5IG9uZSBDUFUgc2V0cyBpdCB0byAtMSB3aGlsZSBnZXR0aW5nIGEgdmFsaWQgQ1BVIG51bWJlciBiYWNrLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB1bm1hcF9sMV92bmNyKHN0cnVjdCB2bmNyX3RsYiAqdnQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgY3B1ID0gYXRvbWljX3hjaGdfcmVsYXhlZChcdTAwMjZ2dC1cdTAwM2VjcHUsIC0xKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNwdSAhPSAtMSlcbiYjNDM7XHRcdGNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcChjcHUpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNwdTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB0aGlzX2NwdV9yZXNldF92bmNyX2ZpeG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0aWYgKCFob3N0X2RhdGFfdGVzdF9mbGFnKEwxX1ZOQ1JfTUFQUEVEKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0QlVHX09OKHZjcHUtXHUwMDNlYXJjaC52bmNyX3RsYi1cdTAwM2VjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbiBcdEJVR19PTihpc19oeXBfY3R4dCh2Y3B1KSk7XG4gXG4tXHRjbGVhcl9maXhtYXAodm5jcl9maXhtYXAodmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiLVx1MDAzZWNwdSkpO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiLVx1MDAzZWNwdSA9IC0xO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVW5jb25kaXRpb25hbGx5IHVubWFwIHRoZSBsb2NhbCBWTkNSIGlmIHdlIGhhdmUgbG9zdCB0aGUgcmFjZVxuJiM0MztcdCAqIGFnYWluc3QgYSBjb25jdXJyZW50IFRMQkkuIE90aGVyd2lzZSB3ZSBjb3VsZCBlbmQtdXAgcnVubmluZ1xuJiM0MztcdCAqIGFub3RoZXIgdmNwdSB3aXRoIFZOQ1Igc3RpbGwgbWFwcGVkIGlmIHRoZSBUTEJJIHRocmVhZCBpc1xuJiM0MztcdCAqIHByZWVtcHRlZCBiZXR3ZWVuIHRoZSBleGNoYW5nZSBhbmQgdGhlIGNsZWFyX2ZpeG1hcCgpLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogTm90ZSB0aGF0IHdlIGRvIG5vdCBjYXJlIGFib3V0IHRoZSBUTEJJIG51a2luZyB0aGUgZml4bWFwIGJlaGluZFxuJiM0MztcdCAqIHRoZSBiYWNrIG9mIGFuIHJ1bm5pbmcgdmNwdS4gVGhpcyB3aWxsIG9ubHkgZ2VuZXJhdGUgYSBmYXVsdCBhbmRcbiYjNDM7XHQgKiBwb3NzaWJseSBhIHJldHJhbnNsYXRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHVubWFwX2wxX3ZuY3IodmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiKSA9PSAtMSlcbiYjNDM7XHRcdGNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcChzbXBfcHJvY2Vzc29yX2lkKCkpKTtcbiBcdGhvc3RfZGF0YV9jbGVhcl9mbGFnKEwxX1ZOQ1JfTUFQUEVEKTtcbi1cdGF0b21pY19kZWMoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bmNyX21hcF9jb3VudCk7XG4gfVxuIFxuIHZvaWQga3ZtX3ZjcHVfcHV0X2h3X21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtOTc4LDExICYjNDM7MTAxNywyNiBAQCB1MTYgZ2V0X2FzaWRfYnlfcmVnaW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSB0cmFuc19yZWdpbWUgcmVnaW1lKVxuIFx0cmV0dXJuIGFzaWQ7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGludmFsaWRhdGVfdm5jcihzdHJ1Y3Qgdm5jcl90bGIgKnZ0KVxuJiM0MztzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3Ioc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qgdm5jcl90bGIgKnZ0KVxuIHtcbiYjNDM7XHRCVUdfT04oIXZ0LVx1MDAzZXZhbGlkKTtcbiBcdHZ0LVx1MDAzZXZhbGlkID0gZmFsc2U7XG4tXHRpZiAodnQtXHUwMDNlY3B1ICE9IC0xKVxuLVx0XHRjbGVhcl9maXhtYXAodm5jcl9maXhtYXAodnQtXHUwMDNlY3B1KSk7XG4mIzQzO1x0dW5tYXBfbDFfdm5jcih2dCk7XG4mIzQzO1x0YXRvbWljX2RlYyhcdTAwMjZrdm0tXHUwMDNlYXJjaC52bmNyX3RsYl9jb3VudCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHZuY3JfdGxiX2ludGVyc2VjdHMoc3RydWN0IHZuY3JfdGxiICp2dCwgdTY0IGFkZHIsXG4mIzQzO1x0XHRcdFx0dTY0IHNjb3BlX3N0YXJ0LCB1NjQgc2NvcGVfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHU2NCB0bGJfc2l6ZSwgdGxiX3N0YXJ0LCB0bGJfZW5kLCBzY29wZV9lbmQ7XG4mIzQzO1xuJiM0MztcdHRsYl9zaXplID0gdHRsX3RvX3NpemUocGdzaGlmdF9sZXZlbF90b190dGwodnQtXHUwMDNld2kucGdzaGlmdCwgdnQtXHUwMDNld3IubGV2ZWwpKTtcbiYjNDM7XG4mIzQzO1x0dGxiX3N0YXJ0ID0gYWRkciBcdTAwMjYgfih0bGJfc2l6ZSAtIDEpO1xuJiM0MztcdHRsYl9lbmQgPSB0bGJfc3RhcnQgJiM0MzsgdGxiX3NpemUgLSAxO1xuJiM0MztcdHNjb3BlX2VuZCA9IHNjb3BlX3N0YXJ0ICYjNDM7IHNjb3BlX3NpemUgLSAxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gISh0bGJfZW5kIFx1MDAzYyBzY29wZV9zdGFydCB8fCB0bGJfc3RhcnQgXHUwMDNlIHNjb3BlX2VuZCk7XG4gfVxuIFxuIC8qXG5AQCAtMTAwNywxOSAmIzQzOzEwNjEsMTUgQEAgc3RhdGljIHZvaWQga3ZtX2ludmFsaWRhdGVfdm5jcl9pcGEoc3RydWN0IGt2bSAqa3ZtLCB1NjQgc3RhcnQsIHU2NCBlbmQpXG4gXHRpZiAoIWt2bV9oYXNfZmVhdChrdm0sIElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0a3ZtX2Zvcl9lYWNoX3ZuY3JfdGxiKGksIHZjcHUsIHZ0LCBrdm0pIHtcbi1cdFx0dTY0IGlwYV9zdGFydCwgaXBhX2VuZCwgaXBhX3NpemU7XG4tXG4tXHRcdGlwYV9zaXplID0gdHRsX3RvX3NpemUocGdzaGlmdF9sZXZlbF90b190dGwodnQtXHUwMDNld2kucGdzaGlmdCxcbi1cdFx0XHRcdFx0XHRcdCAgICB2dC1cdTAwM2V3ci5sZXZlbCkpO1xuLVx0XHRpcGFfc3RhcnQgPSB2dC1cdTAwM2V3ci5wYSBcdTAwMjYgfihpcGFfc2l6ZSAtIDEpO1xuLVx0XHRpcGFfZW5kID0gaXBhX3N0YXJ0ICYjNDM7IGlwYV9zaXplO1xuLVxuLVx0XHRpZiAoaXBhX2VuZCBcdTAwM2M9IHN0YXJ0IHx8IGlwYV9zdGFydCBcdTAwM2U9IGVuZClcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aW52YWxpZGF0ZV92bmNyKHZ0KTtcbi1cdH1cbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vdGUgdGhhdCBpbnZhbGlkYXRpbmcgdGhlIFZOQ1Igb24gdGhlIGJhY2sgb2YgYW4gTU1VIG5vdGlmaWVyXG4mIzQzO1x0ICogZG9lc24mIzM5O3QgcmVxdWlyZSBtZXNzaW5nIHdpdGggdGhlIGludmFsaWRhdGlvbiBjb3VudGVyIGZvciBhXG4mIzQzO1x0ICogcGFyYWxsZWwgd2Fsay4gVGhlIG5vdGlmaWVyIGl0c2VsZiB3aWxsIGhhdmUgYnVtcGVkIHRoZSBjb3VudGVyLFxuJiM0MztcdCAqIG1ha2luZyBzdXJlIHdlIHJld2Fsay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSlcbiYjNDM7XHRcdGlmICh2bmNyX3RsYl9pbnRlcnNlY3RzKHZ0LCB2dC1cdTAwM2V3ci5wYSwgc3RhcnQsIGVuZCAtIHN0YXJ0KSlcbiYjNDM7XHRcdFx0aW52YWxpZGF0ZV92bmNyKGt2bSwgdnQpO1xuIH1cbiBcbiBzdHJ1Y3QgczFlMl90bGJpX3Njb3BlIHtcbkBAIC0xMDQ0LDI5ICYjNDM7MTA5NCwyOSBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3JfdmEoc3RydWN0IGt2bSAqa3ZtLFxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuIFxuLVx0a3ZtX2Zvcl9lYWNoX3ZuY3JfdGxiKGksIHZjcHUsIHZ0LCBrdm0pIHtcbi1cdFx0dTY0IHZhX3N0YXJ0LCB2YV9lbmQsIHZhX3NpemU7XG4tXG4tXHRcdHZhX3NpemUgPSB0dGxfdG9fc2l6ZShwZ3NoaWZ0X2xldmVsX3RvX3R0bCh2dC1cdTAwM2V3aS5wZ3NoaWZ0LFxuLVx0XHRcdFx0XHRcdFx0ICAgdnQtXHUwMDNld3IubGV2ZWwpKTtcbi1cdFx0dmFfc3RhcnQgPSB2dC1cdTAwM2VndmEgXHUwMDI2IH4odmFfc2l6ZSAtIDEpO1xuLVx0XHR2YV9lbmQgPSB2YV9zdGFydCAmIzQzOyB2YV9zaXplO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2UgbWlnaHQgYmUgcGVyZm9ybWluZyBhIHBhcmFsbGVsIFMxIHdhbGssIHNvIGJ1bXAgdXAgdGhlXG4mIzQzO1x0ICogaW52YWxpZGF0aW9uIGNvdW50ZXIgZXZlbiBpbiB0aGUgYWJzZW5jZSBvZiBhbiBhY3R1YWwgVk5DUiBUTEJcbiYjNDM7XHQgKiBpbnZhbGlkYXRpb24sIGFzIHRoaXMgY291bGQgaW5kaWNhdGUgdGhhdCB0aGUgZ3Vlc3QgaGFzIGdvbmVcbiYjNDM7XHQgKiB0aHJvdWdoIGEgQkJNIHNlcXVlbmNlLlxuJiM0MztcdCAqL1xuJiM0MztcdGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXEmIzQzOyYjNDM7O1xuJiM0MztcdHNtcF93bWIoKTtcbiBcbiYjNDM7XHRrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSkge1xuIFx0XHRzd2l0Y2ggKHNjb3BlLVx1MDAzZXR5cGUpIHtcbiBcdFx0Y2FzZSBUTEJJX0FMTDpcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0Y2FzZSBUTEJJX1ZBOlxuLVx0XHRcdGlmICh2YV9lbmQgXHUwMDNjPSBzY29wZS1cdTAwM2V2YSB8fFxuLVx0XHRcdCAgICB2YV9zdGFydCBcdTAwM2U9IChzY29wZS1cdTAwM2V2YSAmIzQzOyBzY29wZS1cdTAwM2VzaXplKSlcbiYjNDM7XHRcdFx0aWYgKCF2bmNyX3RsYl9pbnRlcnNlY3RzKHZ0LCB2dC1cdTAwM2VndmEsIHNjb3BlLVx1MDAzZXZhLCBzY29wZS1cdTAwM2VzaXplKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdGlmICh2dC1cdTAwM2V3ci5uRyBcdTAwMjZcdTAwMjYgdnQtXHUwMDNld3IuYXNpZCAhPSBzY29wZS1cdTAwM2Vhc2lkKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdGNhc2UgVExCSV9WQUE6XG4tXHRcdFx0aWYgKHZhX2VuZCBcdTAwM2M9IHNjb3BlLVx1MDAzZXZhIHx8XG4tXHRcdFx0ICAgIHZhX3N0YXJ0IFx1MDAzZT0gKHNjb3BlLVx1MDAzZXZhICYjNDM7IHNjb3BlLVx1MDAzZXNpemUpKVxuJiM0MztcdFx0XHRpZiAoIXZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LVx1MDAzZWd2YSwgc2NvcGUtXHUwMDNldmEsIHNjb3BlLVx1MDAzZXNpemUpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtMTA3Niw3ICYjNDM7MTEyNiw3IEBAIHN0YXRpYyB2b2lkIGludmFsaWRhdGVfdm5jcl92YShzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdFx0aW52YWxpZGF0ZV92bmNyKHZ0KTtcbiYjNDM7XHRcdGludmFsaWRhdGVfdm5jcihrdm0sIHZ0KTtcbiBcdH1cbiB9XG4gXG5AQCAtMTEyNiw4ICYjNDM7MTE3Niw2IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfczFfdGxiaV9yYW5nZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnN0LCB1NjQgdmFsLFxuIFx0Y2FzZSBPUF9UTEJJX1ZBTEUxT1NOWFM6XG4gXHRcdHNjb3BlLVx1MDAzZXR5cGUgPSBUTEJJX1ZBO1xuIFx0XHRzY29wZS1cdTAwM2VzaXplID0gdHRsX3RvX3NpemUoRklFTERfR0VUKFRMQklfVFRMX01BU0ssIHZhbCkpO1xuLVx0XHRpZiAoIXNjb3BlLVx1MDAzZXNpemUpXG4tXHRcdFx0c2NvcGUtXHUwMDNlc2l6ZSA9IFNaXzFHO1xuIFx0XHRzY29wZS1cdTAwM2V2YSA9IHRsYmlfdmFfczFfdG9fdmEodmFsKSBcdTAwMjYgfihzY29wZS1cdTAwM2VzaXplIC0gMSk7XG4gXHRcdHNjb3BlLVx1MDAzZWFzaWQgPSBGSUVMRF9HRVQoVExCSVJfQVNJRF9NQVNLLCB2YWwpO1xuIFx0XHRicmVhaztcbkBAIC0xMTU0LDggJiM0MzsxMjAyLDYgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9zMV90bGJpX3JhbmdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGluc3QsIHU2NCB2YWwsXG4gXHRjYXNlIE9QX1RMQklfVkFBTEUxT1NOWFM6XG4gXHRcdHNjb3BlLVx1MDAzZXR5cGUgPSBUTEJJX1ZBQTtcbiBcdFx0c2NvcGUtXHUwMDNlc2l6ZSA9IHR0bF90b19zaXplKEZJRUxEX0dFVChUTEJJX1RUTF9NQVNLLCB2YWwpKTtcbi1cdFx0aWYgKCFzY29wZS1cdTAwM2VzaXplKVxuLVx0XHRcdHNjb3BlLVx1MDAzZXNpemUgPSBTWl8xRztcbiBcdFx0c2NvcGUtXHUwMDNldmEgPSB0bGJpX3ZhX3MxX3RvX3ZhKHZhbCkgXHUwMDI2IH4oc2NvcGUtXHUwMDNlc2l6ZSAtIDEpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgT1BfVExCSV9SVkFFMjpcbkBAIC0xMzE2LDEzICYjNDM7MTM2MiwyMCBAQCB2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGwoc3RydWN0IGt2bSAqa3ZtKVxuICAqICAgaW50ZXJzZWN0cyB3aXRoIHRoZSBUTEJJIHJlcXVlc3QsIGludmFsaWRhdGUgaXQsIGFuZCB1bm1hcCB0aGUgcGFnZVxuICAqICAgZnJvbSB0aGUgZml4bWFwLiBCZWNhdXNlIHdlIG5lZWQgdG8gbG9vayBhdCBhbGwgdGhlIHZjcHUtcHJpdmF0ZSBUTEJzLFxuICAqICAgdGhpcyByZXF1aXJlcyBzb21lIHdpZGUtcmFuZ2luZyBsb2NraW5nIHRvIGVuc3VyZSB0aGF0IG5vdGhpbmcgcmFjZXNcbi0gKiAgIGFnYWluc3QgaXQuIFRoaXMgbWF5IHJlcXVpcmUgc29tZSByZWZjb3VudGluZyB0byBhdm9pZCB0aGUgc2VhcmNoIHdoZW5cbi0gKiAgIG5vIHN1Y2ggVExCIGlzIHByZXNlbnQuXG4mIzQzOyAqICAgYWdhaW5zdCBpdC4gVGhpcyByZXF1aXJlcyBzb21lIHJlZmNvdW50aW5nIHRvIGF2b2lkIHRoZSBzZWFyY2ggd2hlblxuJiM0MzsgKiAgIG5vIHN1Y2ggVExCIGlzIHByZXNlbnQgKHNlZSBiZWxvdykuXG4gICpcbiAgKiAtIE9uIE1NVSBub3RpZmllcnMsIHdlIG11c3QgaW52YWxpZGF0ZSBvdXIgVExCIGluIGEgc2ltaWxhciB3YXksIGJ1dFxuICAqICAgbG9va2luZyBhdCB0aGUgSVBBIGluc3RlYWQuIFRoZSBmdW5ueSBwYXJ0IGlzIHRoYXQgdGhlcmUgbWF5IG5vdCBiZSBhXG4gICogICBzdGFnZS0yIG1hcHBpbmcgZm9yIHRoaXMgcGFnZSBpZiBMMSBoYXNuJiMzOTt0IGFjY2Vzc2VkIGl0IHVzaW5nIExEL1NUXG4gICogICBpbnN0cnVjdGlvbnMuXG4mIzQzOyAqXG4mIzQzOyAqIC0gdm5jcl90bGJfY291bnQgdHJhY2tzIHRoZSBudW1iZXIgb2YgdmFsaWQgVk5DUiBUTEJzIFZNLXdpZGUuIFRoaXMgaXNuJiMzOTt0XG4mIzQzOyAqICAgdGhlIG51bWJlciBvZiAqbWFwcGVkKiBMMSBWTkNSIHBhZ2VzLCB3aGljaCBpcyBsaWtlbHkgYmUgYSBzdWJzZXQgKGFuZFxuJiM0MzsgKiAgIGJ5IGRlZmluaXRpb24sIGEgVExCSSBoYW5kbGVkIGZyb20gTDEgcnVucyB3aXRoIHRoZSBjYW5vbmljYWwgVk5DUlxuJiM0MzsgKiAgIHBhZ2UsIG5vdCB0aGUgTDEmIzM5O3MpLiBUaGUgaW5uZXJtb3N0IHRyYXAgaGFuZGxpbmcgY29kZSBjaGVja3MgdGhpcyB0b1xuJiM0MzsgKiAgIGZpbmQgb3V0IHdoZXRoZXIgdG8gcmV0dXJuIHRvIHRoZSBndWVzdCBBU0FQIChubyBMMSBUTEJzKSBvciB0byB2aXNpdFxuJiM0MzsgKiAgIHRoaXMgcGFydCBvZiB0aGUgd29ybGQgZm9yIHNvbWUgZXh0cmEgaW52YWxpZGF0aW9uIHdvcmsuXG4gICovXG4gXG4gaW50IGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC0xMzc3LDcgJiM0MzsxNDMwLDggQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKVxuIFx0ICovXG4gXHRzY29wZWRfZ3VhcmQod3JpdGVfbG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spIHtcbiBcdFx0dGhpc19jcHVfcmVzZXRfdm5jcl9maXhtYXAodmNwdSk7XG4tXHRcdHZ0LVx1MDAzZXZhbGlkID0gZmFsc2U7XG4mIzQzO1x0XHRpZiAodnQtXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRcdGludmFsaWRhdGVfdm5jcih2Y3B1LVx1MDAzZWt2bSwgdnQpO1xuIFxuIFx0XHR2dC1cdTAwM2V3aSA9IChzdHJ1Y3QgczFfd2Fsa19pbmZvKSB7XG4gXHRcdFx0LnJlZ2ltZVx0PSBUUl9FTDIwLFxuQEAgLTEzOTEsMTUgJiM0MzsxNDQ1LDE1IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcbiBcbiBcdHZhID0gIHJlYWRfdm5jcl9lbDIodmNwdSk7XG4gXG4mIzQzO1x0bW11X3NlcSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcbiYjNDM7XHRzbXBfcm1iKCk7XG4mIzQzO1xuIFx0cmV0ID0gX19rdm1fdHJhbnNsYXRlX3ZhKHZjcHUsIFx1MDAyNnZ0LVx1MDAzZXdpLCBcdTAwMjZ2dC1cdTAwM2V3ciwgdmEpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHdyaXRlX2ZhdWx0ID0ga3ZtX2lzX3dyaXRlX2ZhdWx0KHZjcHUpO1xuIFxuLVx0bW11X3NlcSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcbi1cdHNtcF9ybWIoKTtcbi1cbiBcdGdmbiA9IHZ0LVx1MDAzZXdyLnBhIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFx0bWVtc2xvdCA9IGdmbl90b19tZW1zbG90KHZjcHUtXHUwMDNla3ZtLCBnZm4pO1xuIFx0aWYgKCFtZW1zbG90KSB7XG5AQCAtMTQ0Nyw3ICYjNDM7MTUwMSw3IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcbiBcdFx0dnQtXHUwMDNlaHBhID0gcGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuIFx0XHR2dC1cdTAwM2VocGFfd3JpdGFibGUgPSB3cml0YWJsZTtcbiBcdFx0dnQtXHUwMDNldmFsaWQgPSB0cnVlO1xuLVx0XHR2dC1cdTAwM2VjcHUgPSAtMTtcbiYjNDM7XHRcdGF0b21pY19zZXQoXHUwMDI2dnQtXHUwMDNlY3B1LCAtMSk7XG4gXG4gXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9NQVBfTDFfVk5DUl9FTDIsIHZjcHUpO1xuIFx0XHRrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2UodmNwdS1cdTAwM2Vrdm0sIHBhZ2UsIGZhbHNlLCB2dC1cdTAwM2V3ci5wdyBcdTAwMjZcdTAwMjYgdnQtXHUwMDNlaHBhX3dyaXRhYmxlKTtcbkBAIC0xNTAyLDcgJiM0MzsxNTU2LDIwIEBAIGludCBrdm1faGFuZGxlX3ZuY3JfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNwZWN1bGF0aXZlbHkgaW5jcmVtZW50IHRoZSBUTEIgY291bnQgdG8gbWFrZSBzdXJlIGNvbmN1cnJlbnRcbiYjNDM7XHQgKiBUTEJJcyB3aWxsIHRha2UgdGhlIHNsb3cgcGF0aCwgYW5kIHdpbGwgaW50ZXJhY3Qgd2l0aCB0aGUgcmV0cnlcbiYjNDM7XHQgKiBtZWNoYW5pc20uIERyb3AgaXQgYWdhaW4gb24gZXJyb3IuXG4mIzQzO1x0ICovXG4mIzQzO1x0YXRvbWljX2luYyhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZuY3JfdGxiX2NvdW50KTtcbiYjNDM7XHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xuJiM0MztcbiBcdHJldCA9IGt2bV90cmFuc2xhdGVfdm5jcih2Y3B1LCBcdTAwMjZpc19nbWVtKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiYjNDM7XHRcdGF0b21pY19kZWMoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bmNyX3RsYl9jb3VudCk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHN3aXRjaCAocmV0KSB7XG4gXHRjYXNlIC1FQUdBSU46XG4gXHRcdC8qIExldCYjMzk7cyB0cnkgYWdhaW4uLi4gKi9cbkBAIC0xNTY4LDE0ICYjNDM7MTYzNSwxNiBAQCBzdGF0aWMgdm9pZCBrdm1fbWFwX2wxX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCF2dC1cdTAwM2V2YWxpZClcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdC8qIFdlIGNhY2hlIHRoZSBNTVUgc3RhdGUgaW4gdGhlIFRMQi4gQ2hlY2sgdGhhdCBpdCBtYXRjaGVzLiAqL1xuJiM0MztcdGlmICghISh2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCBTQ1RMUl9FTDIpIFx1MDAyNiBTQ1RMUl9FTHhfTSkgIT0gczFfd2Fsa190cmFuc2xhdGVkKFx1MDAyNnZ0LVx1MDAzZXdyKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRpZiAocmVhZF92bmNyX2VsMih2Y3B1KSAhPSB2dC1cdTAwM2VndmEpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmICh2dC1cdTAwM2V3ci5uRyBcdTAwMjZcdTAwMjYgZ2V0X2FzaWRfYnlfcmVnaW1lKHZjcHUsIFRSX0VMMjApICE9IHZ0LVx1MDAzZXdyLmFzaWQpXG4gXHRcdHJldHVybjtcbiBcbi1cdHZ0LVx1MDAzZWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTtcbi1cbiBcdGlmICh2dC1cdTAwM2VocGFfd3JpdGFibGUgXHUwMDI2XHUwMDI2IHZ0LVx1MDAzZXdyLnB3IFx1MDAyNlx1MDAyNiB2dC1cdTAwM2V3ci5wcilcbiBcdFx0cHJvdCA9IFBBR0VfS0VSTkVMO1xuIFx0ZWxzZSBpZiAodnQtXHUwMDNld3IucHIpXG5AQCAtMTU5MCw5ICYjNDM7MTY1OSw5IEBAIHN0YXRpYyB2b2lkIGt2bV9tYXBfbDFfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgKiBGSVhNRTogV08gZG9lc24mIzM5O3Qgd29yayBhdCBhbGwsIG5lZWQgUE9FIHN1cHBvcnQgaW4gdGhlIGtlcm5lbC5cbiBcdCAqL1xuIFx0aWYgKHBncHJvdF92YWwocHJvdCkgIT0gcGdwcm90X3ZhbChQQUdFX05PTkUpKSB7XG4tXHRcdF9fc2V0X2ZpeG1hcCh2bmNyX2ZpeG1hcCh2dC1cdTAwM2VjcHUpLCB2dC1cdTAwM2VocGEsIHByb3QpO1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZ2dC1cdTAwM2VjcHUsIHNtcF9wcm9jZXNzb3JfaWQoKSk7XG4mIzQzO1x0XHRfX3NldF9maXhtYXAodm5jcl9maXhtYXAoYXRvbWljX3JlYWQoXHUwMDI2dnQtXHUwMDNlY3B1KSksIHZ0LVx1MDAzZWhwYSwgcHJvdCk7XG4gXHRcdGhvc3RfZGF0YV9zZXRfZmxhZyhMMV9WTkNSX01BUFBFRCk7XG4tXHRcdGF0b21pY19pbmMoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bmNyX21hcF9jb3VudCk7XG4gXHR9XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXG5pbmRleCA1ZDVjNTc5ZDQ1NzkwLi43OTdlODg4YmY5Mzk0IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuQEAgLTQwNTcsNiAmIzQzOzQwNTcsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVfcmlwYXMyZTFpcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCxcbiBcdHUzMiBzeXNfZW5jb2RpbmcgPSBzeXNfaW5zbihwLVx1MDAzZU9wMCwgcC1cdTAwM2VPcDEsIHAtXHUwMDNlQ1JuLCBwLVx1MDAzZUNSbSwgcC1cdTAwM2VPcDIpO1xuIFx0dTY0IHZ0dGJyID0gdmNwdV9yZWFkX3N5c19yZWcodmNwdSwgVlRUQlJfRUwyKTtcbiBcdHU2NCBiYXNlLCByYW5nZTtcbiYjNDM7XHRpbnQgcGFfYml0cztcbiBcbiBcdGlmICgha3ZtX3N1cHBvcnRlZF90bGJpX2lwYXMyX29wKHZjcHUsIHN5c19lbmNvZGluZykpXG4gXHRcdHJldHVybiB1bmRlZl9hY2Nlc3ModmNwdSwgcCwgcik7XG5AQCAtNDA2OCw2ICYjNDM7NDA2OSwxNiBAQCBzdGF0aWMgYm9vbCBoYW5kbGVfcmlwYXMyZTFpcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCxcbiBcdCAqL1xuIFx0YmFzZSA9IGRlY29kZV9yYW5nZV90bGJpKHAtXHUwMDNlcmVndmFsLCBcdTAwMjZyYW5nZSwgTlVMTCk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZ25vcmUgVExCSXMgdGhhdCBzdGFydCBvdXQgb2YgUEFfYml0cyByYW5nZSwgYW5kIGNhcCB0aGVcbiYjNDM7XHQgKiBpbnZhbGlkYXRpb24gdG8gdGhlIFtiYXNlOmJpdChQQV9iaXRzKV0gaW50ZXJ2YWwuXG4mIzQzO1x0ICovXG4mIzQzO1x0cGFfYml0cyA9IGt2bV9nZXRfcGFfYml0cyh2Y3B1LVx1MDAzZWt2bSk7XG4mIzQzO1x0aWYgKGZsczY0KGJhc2UpIFx1MDAzZSBwYV9iaXRzKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJhbmdlID0gbWluKHJhbmdlLCBCSVRfVUxMKHBhX2JpdHMpIC0gYmFzZSk7XG4mIzQzO1xuIFx0a3ZtX3MyX21tdV9pdGVyYXRlX2J5X3ZtaWQodmNwdS1cdTAwM2Vrdm0sIGdldF92bWlkKHZ0dGJyKSxcbiBcdFx0XHRcdCAgIFx1MDAyNih1bmlvbiB0bGJpX2luZm8pIHtcbiBcdFx0XHRcdFx0ICAgLnJhbmdlID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1faGFuZGxlX3ZuY3JfYWJvcnQmIzM0OywKICAgICYjMzQ7a3ZtX3dhbGtfbmVzdGVkX3MyJiMzNDssCiAgICAmIzM0O2NvbXB1dGVfdGxiX2ludmFsX3JhbmdlJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X3B1dF9od19tbXUmIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfbG9hZF9od19tbXUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIEFSTTY0IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiBWTkNSIFRMQnMsIG5lc3RlZCBTMiB3YWxrcywgYW5kIFRMQiBpbnZhbGlkYXRpb24gcmFuZ2VzLiBUaGVzZSBhcmUgY29yZSB2aXJ0dWFsaXphdGlvbiBmZWF0dXJlcyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSBndWVzdCBleGVjdXRpb24gYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkYjM1NmY4YTRhODEyMTUwNWJjMTJkYmVhMDRlOTdkNTUwYjM1NWEzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAxMDowNDowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBiYWUyYzRmOTJlZjVjLi4xMDg5NjZhOWRiMTJiIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC00MTEsOCAmIzQzOzQxMSw4IEBAIHN0cnVjdCBrdm1fYXJjaCB7CiAJLyogTWFza3MgZm9yIFZOQ1ItYmFja2VkIGFuZCBnZW5lcmFsIEVMMiBzeXNyZWdzICovCiAJc3RydWN0IGt2bV9zeXNyZWdfbWFza3MJKnN5c3JlZ19tYXNrczsKIAotCS8qIENvdW50IHRoZSBudW1iZXIgb2YgVk5DUl9FTDIgY3VycmVudGx5IG1hcHBlZCAqLwotCWF0b21pY190IHZuY3JfbWFwX2NvdW50OwomIzQzOwkvKiBDb3VudCB0aGUgbnVtYmVyIG9mIFZOQ1JfRUwyIFRMQnMgKi8KJiM0MzsJYXRvbWljX3Qgdm5jcl90bGJfY291bnQ7CiAKIAkvKgogCSAqIEZvciBhbiB1bnRydXN0ZWQgaG9zdCBWTSwgJiMzOTtwa3ZtLmhhbmRsZSYjMzk7IGlzIHVzZWQgdG8gbG9va3VwCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oCmluZGV4IDAxMmQ3MTEwMzRkMTcuLmM4M2JlNmQwZTc5YWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oCkBAIC0yOTEsNiAmIzQzOzI5MSwxMyBAQCBzdGF0aWMgaW5saW5lIHU2NCBkZWNvZGVfcmFuZ2VfdGxiaSh1NjQgdmFsLCB1NjQgKnJhbmdlLCB1MTYgKmFzaWQpCiAKIAliYXNlCT0gKHZhbCAmYW1wOyBHRU5NQVNLKDM2LCAwKSkgJmx0OyZsdDsgc2hpZnQ7CiAKJiM0MzsJLyoKJiM0MzsJICogV2Ugb25seSBkZWFsIHdpdGggYXQgbW9zdCA0OGJpdCBWQS9JUEEsIHNvIDQ4IGlzIHdoZXJlIHdlCiYjNDM7CSAqIHNpZ24tZXh0ZW5kIGZyb20uIFNob3VsZCB3ZSBzdXBwb3J0IEZFQVRfTHtWUH1BKiBhdCBzb21lIHBvaW50LAomIzQzOwkgKiB0aGlzIHdpbGwgbmVlZCB0byBiZSByZXZpc2l0ZWQuCiYjNDM7CSAqLwomIzQzOwliYXNlCT0gKHU2NClzaWduX2V4dGVuZDY0KGJhc2UsIDQ4KTsKJiM0MzsKIAlpZiAoYXNpZCkKIAkJKmFzaWQgPSBGSUVMRF9HRVQoVExCSVJfQVNJRF9NQVNLLCB2YWwpOwogCkBAIC0zODgsNiAmIzQzOzM5NSw4IEBAIHN0cnVjdCBzMV93YWxrX3Jlc3VsdCB7CiAJYm9vbAlmYWlsZWQ7CiB9OwogCiYjNDM7I2RlZmluZSBTMV9NTVVfRElTQUJMRUQJCSgtMTI3KQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIGZhaWxfczFfd2FsayhzdHJ1Y3QgczFfd2Fsa19yZXN1bHQgKndyLCB1OCBmc3QsIGJvb2wgczFwdHcpCiB7CiAJd3ItJmd0O2ZzdAkJPSBmc3Q7CkBAIC0zOTYsNiAmIzQzOzQwNSwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmFpbF9zMV93YWxrKHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IsIHU4IGZzdCwgYm9vbCBzMXB0dykKIAl3ci0mZ3Q7ZmFpbGVkCT0gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzMV93YWxrX3RyYW5zbGF0ZWQoc3RydWN0IHMxX3dhbGtfcmVzdWx0ICp3cikKJiM0Mzt7CiYjNDM7CXJldHVybiB3ci0mZ3Q7bGV2ZWwgIT0gUzFfTU1VX0RJU0FCTEVEOwomIzQzO30KJiM0MzsKIGludCBfX2t2bV90cmFuc2xhdGVfdmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgczFfd2Fsa19pbmZvICp3aSwKIAkJICAgICAgIHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IsIHU2NCB2YSk7CiBpbnQgX19rdm1fZmluZF9zMV9kZXNjX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhLCB1NjQgaXBhLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXQuYyBiL2FyY2gvYXJtNjQva3ZtL2F0LmMKaW5kZXggNjQwZjJkYzAwYThiYS4uMDkyNjQyNmI4Nzk4OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vYXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9hdC5jCkBAIC0xMSw4ICYjNDM7MTEsNiBAQAogI2luY2x1ZGUgJmx0O2FzbS9rdm1fbW11LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2xzdWkuaCZndDsKIAotI2RlZmluZSBTMV9NTVVfRElTQUJMRUQJCSgtMTI3KQotCiBzdGF0aWMgaW50IGdldF9pYV9zaXplKHN0cnVjdCBzMV93YWxrX2luZm8gKndpKQogewogCXJldHVybiA2NCAtIHdpLSZndDt0eHN6OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guYyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMKaW5kZXggYmJlOWNlYmQzZDlkNS4uZmE3NzZiMThhMzJjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jCkBAIC00MjQsMTEgJiM0Mzs0MjQsMTUgQEAgc3RhdGljIGJvb2wga3ZtX2h5cF9oYW5kbGVfdGxiaV9lbDIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmV4aXRfY29kZSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyoKLQkgKiBJZiB3ZSBoYXZlIHRvIGNoZWNrIGZvciBhbnkgVk5DUiBtYXBwaW5nIGJlaW5nIGludmFsaWRhdGVkLAotCSAqIGdvIGJhY2sgdG8gdGhlIHNsb3cgcGF0aCBmb3IgZnVydGhlciBwcm9jZXNzaW5nLgomIzQzOwkgKiBJZiB3ZSBoYXZlIHRvIGNoZWNrIGZvciBhbnkgVk5DUiBUTEIgYmVpbmcgaW52YWxpZGF0ZWQsIGdvIGJhY2sKJiM0MzsJICogdG8gdGhlIHNsb3cgcGF0aCBmb3IgZnVydGhlciBwcm9jZXNzaW5nLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgc3luY2hyb25pc2F0aW9uIGJldHdlZW0gVExCSSBhbmQgd2FsayBpcyBwcm92aWRlZCBieSB0aGUKJiM0MzsJICogc3BlY3VsYXRpdmUgaW5jcmVtZW50IG9mIHRoZSBUTEIgY291bnRlciBvbiB3YWxrLCBhbmQgdGhlCiYjNDM7CSAqIGludmFsaWRhdGlvbiBjb3VudGVyLiBZZXMsIHRoaXMgaXMgZmlkZGx5LgogCSAqLwogCWlmICh2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpICZhbXA7JmFtcDsgdmNwdV9lbDJfdGdlX2lzX3NldCh2Y3B1KSAmYW1wOyZhbXA7Ci0JICAgIGF0b21pY19yZWFkKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnZuY3JfbWFwX2NvdW50KSkKJiM0MzsJICAgIGF0b21pY19yZWFkKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnZuY3JfdGxiX2NvdW50KSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJX19rdm1fc2tpcF9pbnN0cih2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKaW5kZXggZGZiOTZlZGJkYzQzYy4uMjBhZjk0MTk3YThhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKQEAgLTI3LDcgJiM0MzsyNyw3IEBAIHN0cnVjdCB2bmNyX3RsYiB7CiAJYm9vbAkJCWhwYV93cml0YWJsZTsKIAogCS8qIC0xIHdoZW4gbm90IG1hcHBlZCBvbiBhIENQVSAqLwotCWludAkJCWNwdTsKJiM0MzsJYXRvbWljX3QJCWNwdTsKIAogCS8qCiAJICogdHJ1ZSBpZiB0aGUgVExCIGlzIHZhbGlkLiBDYW4gb25seSBiZSBjaGFuZ2VkIHdpdGggdGhlCkBAIC00OCw3ICYjNDM7NDgsNyBAQCB2b2lkIGt2bV9pbml0X25lc3RlZChzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJa3ZtLSZndDthcmNoLm5lc3RlZF9tbXVzID0gTlVMTDsKIAlrdm0tJmd0O2FyY2gubmVzdGVkX21tdXNfc2l6ZSA9IDA7Ci0JYXRvbWljX3NldCgmYW1wO2t2bS0mZ3Q7YXJjaC52bmNyX21hcF9jb3VudCwgMCk7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtrdm0tJmd0O2FyY2gudm5jcl90bGJfY291bnQsIDApOwogfQogCiBzdGF0aWMgaW50IGluaXRfbmVzdGVkX3MyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUpCkBAIC01MDYsNyAmIzQzOzUwNiw3IEBAIGludCBrdm1fd2Fsa19uZXN0ZWRfczIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBwaHlzX2FkZHJfdCBnaXBhLAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgdHRsX3RvX3NpemUodTggdHRsKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgX190dGxfdG9fc2l6ZSh1OCB0dGwpCiB7CiAJaW50IGxldmVsID0gdHRsICZhbXA7IDM7CiAJaW50IGdyYW4gPSAodHRsICZndDsmZ3Q7IDIpICZhbXA7IDM7CkBAIC01NjIsMTAgJiM0Mzs1NjIsMjIgQEAgc3RhdGljIHVuc2lnbmVkIGludCB0dGxfdG9fc2l6ZSh1OCB0dGwpCiAJcmV0dXJuIG1heF9zaXplOwogfQogCi1zdGF0aWMgdTggcGdzaGlmdF9sZXZlbF90b190dGwodTE2IHNoaWZ0LCB1OCBsZXZlbCkKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHR0bF90b19zaXplKHU4IHR0bCkKJiM0Mzt7CiYjNDM7CXJldHVybiBfX3R0bF90b19zaXplKHR0bCkgPzogU1pfMUc7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1OCBwZ3NoaWZ0X2xldmVsX3RvX3R0bCh1MTYgc2hpZnQsIHM4IGxldmVsKQogewogCXU4IHR0bDsKIAomIzQzOwkvKgomIzQzOwkgKiBJZiB3ZSBkb24mIzM5O3QgaGF2ZSBhIHByb3BlciBsZXZlbCwgZmFsbGJhY2sgdG8gdGhlIG1heGltdW0KJiM0MzsJICogc2l6ZS4KJiM0MzsJICovCiYjNDM7CWlmIChsZXZlbCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAlzd2l0Y2goc2hpZnQpIHsKIAljYXNlIDEyOgogCQl0dGwgPSBUTEJJX1RUTF9UR180SzsKQEAgLTY3Niw3ICYjNDM7Njg4LDExIEBAIHVuc2lnbmVkIGxvbmcgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2Uoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgdTY0IHZhbCkKIAkJdHRsID0gZ2V0X2d1ZXN0X21hcHBpbmdfdHRsKG1tdSwgYWRkcik7CiAJfQogCi0JbWF4X3NpemUgPSB0dGxfdG9fc2l6ZSh0dGwpOwomIzQzOwkvKgomIzQzOwkgKiBEb24mIzM5O3QgdXNlIHRoZSBkZWZhdWx0IDFHQiBmYWxsYmFjaywgYXMgd2UgY2FuIGFkYXB0IHRvIHRoZQomIzQzOwkgKiBtYXggbWFwcGluZyBzaXplIHdlIGFsbG93IGF0IFMyLgomIzQzOwkgKi8KJiM0MzsJbWF4X3NpemUgPSBfX3R0bF90b19zaXplKHR0bCk7CiAKIAlpZiAoIW1heF9zaXplKSB7CiAJCS8qIENvbXB1dGUgdGhlIG1heGltdW0gZXh0ZW50IG9mIHRoZSBpbnZhbGlkYXRpb24gKi8KQEAgLTg3OSwxOCAmIzQzOzg5NSw0MSBAQCB2b2lkIGt2bV92Y3B1X2xvYWRfaHdfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAl9CiB9CiAKJiM0MzsvKgomIzQzOyAqIFVubWFwcGluZyBhbiBMMSBWTkNSIGNhbiBoYXBwZW4gY29uY3VycmVudGx5IHdpdGhvdXQgdGhlIG1tdSBsb2NrIGJlaW5nCiYjNDM7ICogZWZmZWN0aXZlICh2Y3B1X3B1dCgpIHZzIFRMQkkgaGFuZGxpbmcpLiBUaGUgYXRvbWljX3hjaGcgYmVsb3cgZW5zdXJlcwomIzQzOyAqIHRoYXQgb25seSBvbmUgQ1BVIHNldHMgaXQgdG8gLTEgd2hpbGUgZ2V0dGluZyBhIHZhbGlkIENQVSBudW1iZXIgYmFjay4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHVubWFwX2wxX3ZuY3Ioc3RydWN0IHZuY3JfdGxiICp2dCkKJiM0Mzt7CiYjNDM7CWludCBjcHUgPSBhdG9taWNfeGNoZ19yZWxheGVkKCZhbXA7dnQtJmd0O2NwdSwgLTEpOwomIzQzOwomIzQzOwlpZiAoY3B1ICE9IC0xKQomIzQzOwkJY2xlYXJfZml4bWFwKHZuY3JfZml4bWFwKGNwdSkpOwomIzQzOwomIzQzOwlyZXR1cm4gY3B1OwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRoaXNfY3B1X3Jlc2V0X3ZuY3JfZml4bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlpZiAoIWhvc3RfZGF0YV90ZXN0X2ZsYWcoTDFfVk5DUl9NQVBQRUQpKQogCQlyZXR1cm47CiAKLQlCVUdfT04odmNwdS0mZ3Q7YXJjaC52bmNyX3RsYi0mZ3Q7Y3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJQlVHX09OKGlzX2h5cF9jdHh0KHZjcHUpKTsKIAotCWNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcCh2Y3B1LSZndDthcmNoLnZuY3JfdGxiLSZndDtjcHUpKTsKLQl2Y3B1LSZndDthcmNoLnZuY3JfdGxiLSZndDtjcHUgPSAtMTsKJiM0MzsJLyoKJiM0MzsJICogVW5jb25kaXRpb25hbGx5IHVubWFwIHRoZSBsb2NhbCBWTkNSIGlmIHdlIGhhdmUgbG9zdCB0aGUgcmFjZQomIzQzOwkgKiBhZ2FpbnN0IGEgY29uY3VycmVudCBUTEJJLiBPdGhlcndpc2Ugd2UgY291bGQgZW5kLXVwIHJ1bm5pbmcKJiM0MzsJICogYW5vdGhlciB2Y3B1IHdpdGggVk5DUiBzdGlsbCBtYXBwZWQgaWYgdGhlIFRMQkkgdGhyZWFkIGlzCiYjNDM7CSAqIHByZWVtcHRlZCBiZXR3ZWVuIHRoZSBleGNoYW5nZSBhbmQgdGhlIGNsZWFyX2ZpeG1hcCgpLgomIzQzOwkgKgomIzQzOwkgKiBOb3RlIHRoYXQgd2UgZG8gbm90IGNhcmUgYWJvdXQgdGhlIFRMQkkgbnVraW5nIHRoZSBmaXhtYXAgYmVoaW5kCiYjNDM7CSAqIHRoZSBiYWNrIG9mIGFuIHJ1bm5pbmcgdmNwdS4gVGhpcyB3aWxsIG9ubHkgZ2VuZXJhdGUgYSBmYXVsdCBhbmQKJiM0MzsJICogcG9zc2libHkgYSByZXRyYW5zbGF0aW9uLgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubWFwX2wxX3ZuY3IodmNwdS0mZ3Q7YXJjaC52bmNyX3RsYikgPT0gLTEpCiYjNDM7CQljbGVhcl9maXhtYXAodm5jcl9maXhtYXAoc21wX3Byb2Nlc3Nvcl9pZCgpKSk7CiAJaG9zdF9kYXRhX2NsZWFyX2ZsYWcoTDFfVk5DUl9NQVBQRUQpOwotCWF0b21pY19kZWMoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O2FyY2gudm5jcl9tYXBfY291bnQpOwogfQogCiB2b2lkIGt2bV92Y3B1X3B1dF9od19tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtOTc4LDExICYjNDM7MTAxNywyNiBAQCB1MTYgZ2V0X2FzaWRfYnlfcmVnaW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSB0cmFuc19yZWdpbWUgcmVnaW1lKQogCXJldHVybiBhc2lkOwogfQogCi1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3Ioc3RydWN0IHZuY3JfdGxiICp2dCkKJiM0MztzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3Ioc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qgdm5jcl90bGIgKnZ0KQogewomIzQzOwlCVUdfT04oIXZ0LSZndDt2YWxpZCk7CiAJdnQtJmd0O3ZhbGlkID0gZmFsc2U7Ci0JaWYgKHZ0LSZndDtjcHUgIT0gLTEpCi0JCWNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcCh2dC0mZ3Q7Y3B1KSk7CiYjNDM7CXVubWFwX2wxX3ZuY3IodnQpOwomIzQzOwlhdG9taWNfZGVjKCZhbXA7a3ZtLSZndDthcmNoLnZuY3JfdGxiX2NvdW50KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgdm5jcl90bGJfaW50ZXJzZWN0cyhzdHJ1Y3Qgdm5jcl90bGIgKnZ0LCB1NjQgYWRkciwKJiM0MzsJCQkJdTY0IHNjb3BlX3N0YXJ0LCB1NjQgc2NvcGVfc2l6ZSkKJiM0Mzt7CiYjNDM7CXU2NCB0bGJfc2l6ZSwgdGxiX3N0YXJ0LCB0bGJfZW5kLCBzY29wZV9lbmQ7CiYjNDM7CiYjNDM7CXRsYl9zaXplID0gdHRsX3RvX3NpemUocGdzaGlmdF9sZXZlbF90b190dGwodnQtJmd0O3dpLnBnc2hpZnQsIHZ0LSZndDt3ci5sZXZlbCkpOwomIzQzOwomIzQzOwl0bGJfc3RhcnQgPSBhZGRyICZhbXA7IH4odGxiX3NpemUgLSAxKTsKJiM0MzsJdGxiX2VuZCA9IHRsYl9zdGFydCAmIzQzOyB0bGJfc2l6ZSAtIDE7CiYjNDM7CXNjb3BlX2VuZCA9IHNjb3BlX3N0YXJ0ICYjNDM7IHNjb3BlX3NpemUgLSAxOwomIzQzOwomIzQzOwlyZXR1cm4gISh0bGJfZW5kICZsdDsgc2NvcGVfc3RhcnQgfHwgdGxiX3N0YXJ0ICZndDsgc2NvcGVfZW5kKTsKIH0KIAogLyoKQEAgLTEwMDcsMTkgJiM0MzsxMDYxLDE1IEBAIHN0YXRpYyB2b2lkIGt2bV9pbnZhbGlkYXRlX3ZuY3JfaXBhKHN0cnVjdCBrdm0gKmt2bSwgdTY0IHN0YXJ0LCB1NjQgZW5kKQogCWlmICgha3ZtX2hhc19mZWF0KGt2bSwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYyX09OTFkpKQogCQlyZXR1cm47CiAKLQlrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSkgewotCQl1NjQgaXBhX3N0YXJ0LCBpcGFfZW5kLCBpcGFfc2l6ZTsKLQotCQlpcGFfc2l6ZSA9IHR0bF90b19zaXplKHBnc2hpZnRfbGV2ZWxfdG9fdHRsKHZ0LSZndDt3aS5wZ3NoaWZ0LAotCQkJCQkJCSAgICB2dC0mZ3Q7d3IubGV2ZWwpKTsKLQkJaXBhX3N0YXJ0ID0gdnQtJmd0O3dyLnBhICZhbXA7IH4oaXBhX3NpemUgLSAxKTsKLQkJaXBhX2VuZCA9IGlwYV9zdGFydCAmIzQzOyBpcGFfc2l6ZTsKLQotCQlpZiAoaXBhX2VuZCAmbHQ7PSBzdGFydCB8fCBpcGFfc3RhcnQgJmd0Oz0gZW5kKQotCQkJY29udGludWU7Ci0KLQkJaW52YWxpZGF0ZV92bmNyKHZ0KTsKLQl9CiYjNDM7CS8qCiYjNDM7CSAqIE5vdGUgdGhhdCBpbnZhbGlkYXRpbmcgdGhlIFZOQ1Igb24gdGhlIGJhY2sgb2YgYW4gTU1VIG5vdGlmaWVyCiYjNDM7CSAqIGRvZXNuJiMzOTt0IHJlcXVpcmUgbWVzc2luZyB3aXRoIHRoZSBpbnZhbGlkYXRpb24gY291bnRlciBmb3IgYQomIzQzOwkgKiBwYXJhbGxlbCB3YWxrLiBUaGUgbm90aWZpZXIgaXRzZWxmIHdpbGwgaGF2ZSBidW1wZWQgdGhlIGNvdW50ZXIsCiYjNDM7CSAqIG1ha2luZyBzdXJlIHdlIHJld2Fsay4KJiM0MzsJICovCiYjNDM7CWt2bV9mb3JfZWFjaF92bmNyX3RsYihpLCB2Y3B1LCB2dCwga3ZtKQomIzQzOwkJaWYgKHZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LSZndDt3ci5wYSwgc3RhcnQsIGVuZCAtIHN0YXJ0KSkKJiM0MzsJCQlpbnZhbGlkYXRlX3ZuY3Ioa3ZtLCB2dCk7CiB9CiAKIHN0cnVjdCBzMWUyX3RsYmlfc2NvcGUgewpAQCAtMTA0NCwyOSAmIzQzOzEwOTQsMjkgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyX3ZhKHN0cnVjdCBrdm0gKmt2bSwKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKIAotCWt2bV9mb3JfZWFjaF92bmNyX3RsYihpLCB2Y3B1LCB2dCwga3ZtKSB7Ci0JCXU2NCB2YV9zdGFydCwgdmFfZW5kLCB2YV9zaXplOwotCi0JCXZhX3NpemUgPSB0dGxfdG9fc2l6ZShwZ3NoaWZ0X2xldmVsX3RvX3R0bCh2dC0mZ3Q7d2kucGdzaGlmdCwKLQkJCQkJCQkgICB2dC0mZ3Q7d3IubGV2ZWwpKTsKLQkJdmFfc3RhcnQgPSB2dC0mZ3Q7Z3ZhICZhbXA7IH4odmFfc2l6ZSAtIDEpOwotCQl2YV9lbmQgPSB2YV9zdGFydCAmIzQzOyB2YV9zaXplOwomIzQzOwkvKgomIzQzOwkgKiBXZSBtaWdodCBiZSBwZXJmb3JtaW5nIGEgcGFyYWxsZWwgUzEgd2Fsaywgc28gYnVtcCB1cCB0aGUKJiM0MzsJICogaW52YWxpZGF0aW9uIGNvdW50ZXIgZXZlbiBpbiB0aGUgYWJzZW5jZSBvZiBhbiBhY3R1YWwgVk5DUiBUTEIKJiM0MzsJICogaW52YWxpZGF0aW9uLCBhcyB0aGlzIGNvdWxkIGluZGljYXRlIHRoYXQgdGhlIGd1ZXN0IGhhcyBnb25lCiYjNDM7CSAqIHRocm91Z2ggYSBCQk0gc2VxdWVuY2UuCiYjNDM7CSAqLwomIzQzOwlrdm0tJmd0O21tdV9pbnZhbGlkYXRlX3NlcSYjNDM7JiM0Mzs7CiYjNDM7CXNtcF93bWIoKTsKIAomIzQzOwlrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSkgewogCQlzd2l0Y2ggKHNjb3BlLSZndDt0eXBlKSB7CiAJCWNhc2UgVExCSV9BTEw6CiAJCQlicmVhazsKIAogCQljYXNlIFRMQklfVkE6Ci0JCQlpZiAodmFfZW5kICZsdDs9IHNjb3BlLSZndDt2YSB8fAotCQkJICAgIHZhX3N0YXJ0ICZndDs9IChzY29wZS0mZ3Q7dmEgJiM0Mzsgc2NvcGUtJmd0O3NpemUpKQomIzQzOwkJCWlmICghdm5jcl90bGJfaW50ZXJzZWN0cyh2dCwgdnQtJmd0O2d2YSwgc2NvcGUtJmd0O3ZhLCBzY29wZS0mZ3Q7c2l6ZSkpCiAJCQkJY29udGludWU7CiAJCQlpZiAodnQtJmd0O3dyLm5HICZhbXA7JmFtcDsgdnQtJmd0O3dyLmFzaWQgIT0gc2NvcGUtJmd0O2FzaWQpCiAJCQkJY29udGludWU7CiAJCQlicmVhazsKIAogCQljYXNlIFRMQklfVkFBOgotCQkJaWYgKHZhX2VuZCAmbHQ7PSBzY29wZS0mZ3Q7dmEgfHwKLQkJCSAgICB2YV9zdGFydCAmZ3Q7PSAoc2NvcGUtJmd0O3ZhICYjNDM7IHNjb3BlLSZndDtzaXplKSkKJiM0MzsJCQlpZiAoIXZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LSZndDtndmEsIHNjb3BlLSZndDt2YSwgc2NvcGUtJmd0O3NpemUpKQogCQkJCWNvbnRpbnVlOwogCQkJYnJlYWs7CiAKQEAgLTEwNzYsNyAmIzQzOzExMjYsNyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3JfdmEoc3RydWN0IGt2bSAqa3ZtLAogCQkJYnJlYWs7CiAJCX0KIAotCQlpbnZhbGlkYXRlX3ZuY3IodnQpOwomIzQzOwkJaW52YWxpZGF0ZV92bmNyKGt2bSwgdnQpOwogCX0KIH0KIApAQCAtMTEyNiw4ICYjNDM7MTE3Niw2IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfczFfdGxiaV9yYW5nZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnN0LCB1NjQgdmFsLAogCWNhc2UgT1BfVExCSV9WQUxFMU9TTlhTOgogCQlzY29wZS0mZ3Q7dHlwZSA9IFRMQklfVkE7CiAJCXNjb3BlLSZndDtzaXplID0gdHRsX3RvX3NpemUoRklFTERfR0VUKFRMQklfVFRMX01BU0ssIHZhbCkpOwotCQlpZiAoIXNjb3BlLSZndDtzaXplKQotCQkJc2NvcGUtJmd0O3NpemUgPSBTWl8xRzsKIAkJc2NvcGUtJmd0O3ZhID0gdGxiaV92YV9zMV90b192YSh2YWwpICZhbXA7IH4oc2NvcGUtJmd0O3NpemUgLSAxKTsKIAkJc2NvcGUtJmd0O2FzaWQgPSBGSUVMRF9HRVQoVExCSVJfQVNJRF9NQVNLLCB2YWwpOwogCQlicmVhazsKQEAgLTExNTQsOCAmIzQzOzEyMDIsNiBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX3MxX3RsYmlfcmFuZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaW5zdCwgdTY0IHZhbCwKIAljYXNlIE9QX1RMQklfVkFBTEUxT1NOWFM6CiAJCXNjb3BlLSZndDt0eXBlID0gVExCSV9WQUE7CiAJCXNjb3BlLSZndDtzaXplID0gdHRsX3RvX3NpemUoRklFTERfR0VUKFRMQklfVFRMX01BU0ssIHZhbCkpOwotCQlpZiAoIXNjb3BlLSZndDtzaXplKQotCQkJc2NvcGUtJmd0O3NpemUgPSBTWl8xRzsKIAkJc2NvcGUtJmd0O3ZhID0gdGxiaV92YV9zMV90b192YSh2YWwpICZhbXA7IH4oc2NvcGUtJmd0O3NpemUgLSAxKTsKIAkJYnJlYWs7CiAJY2FzZSBPUF9UTEJJX1JWQUUyOgpAQCAtMTMxNiwxMyAmIzQzOzEzNjIsMjAgQEAgdm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsKHN0cnVjdCBrdm0gKmt2bSkKICAqICAgaW50ZXJzZWN0cyB3aXRoIHRoZSBUTEJJIHJlcXVlc3QsIGludmFsaWRhdGUgaXQsIGFuZCB1bm1hcCB0aGUgcGFnZQogICogICBmcm9tIHRoZSBmaXhtYXAuIEJlY2F1c2Ugd2UgbmVlZCB0byBsb29rIGF0IGFsbCB0aGUgdmNwdS1wcml2YXRlIFRMQnMsCiAgKiAgIHRoaXMgcmVxdWlyZXMgc29tZSB3aWRlLXJhbmdpbmcgbG9ja2luZyB0byBlbnN1cmUgdGhhdCBub3RoaW5nIHJhY2VzCi0gKiAgIGFnYWluc3QgaXQuIFRoaXMgbWF5IHJlcXVpcmUgc29tZSByZWZjb3VudGluZyB0byBhdm9pZCB0aGUgc2VhcmNoIHdoZW4KLSAqICAgbm8gc3VjaCBUTEIgaXMgcHJlc2VudC4KJiM0MzsgKiAgIGFnYWluc3QgaXQuIFRoaXMgcmVxdWlyZXMgc29tZSByZWZjb3VudGluZyB0byBhdm9pZCB0aGUgc2VhcmNoIHdoZW4KJiM0MzsgKiAgIG5vIHN1Y2ggVExCIGlzIHByZXNlbnQgKHNlZSBiZWxvdykuCiAgKgogICogLSBPbiBNTVUgbm90aWZpZXJzLCB3ZSBtdXN0IGludmFsaWRhdGUgb3VyIFRMQiBpbiBhIHNpbWlsYXIgd2F5LCBidXQKICAqICAgbG9va2luZyBhdCB0aGUgSVBBIGluc3RlYWQuIFRoZSBmdW5ueSBwYXJ0IGlzIHRoYXQgdGhlcmUgbWF5IG5vdCBiZSBhCiAgKiAgIHN0YWdlLTIgbWFwcGluZyBmb3IgdGhpcyBwYWdlIGlmIEwxIGhhc24mIzM5O3QgYWNjZXNzZWQgaXQgdXNpbmcgTEQvU1QKICAqICAgaW5zdHJ1Y3Rpb25zLgomIzQzOyAqCiYjNDM7ICogLSB2bmNyX3RsYl9jb3VudCB0cmFja3MgdGhlIG51bWJlciBvZiB2YWxpZCBWTkNSIFRMQnMgVk0td2lkZS4gVGhpcyBpc24mIzM5O3QKJiM0MzsgKiAgIHRoZSBudW1iZXIgb2YgKm1hcHBlZCogTDEgVk5DUiBwYWdlcywgd2hpY2ggaXMgbGlrZWx5IGJlIGEgc3Vic2V0IChhbmQKJiM0MzsgKiAgIGJ5IGRlZmluaXRpb24sIGEgVExCSSBoYW5kbGVkIGZyb20gTDEgcnVucyB3aXRoIHRoZSBjYW5vbmljYWwgVk5DUgomIzQzOyAqICAgcGFnZSwgbm90IHRoZSBMMSYjMzk7cykuIFRoZSBpbm5lcm1vc3QgdHJhcCBoYW5kbGluZyBjb2RlIGNoZWNrcyB0aGlzIHRvCiYjNDM7ICogICBmaW5kIG91dCB3aGV0aGVyIHRvIHJldHVybiB0byB0aGUgZ3Vlc3QgQVNBUCAobm8gTDEgVExCcykgb3IgdG8gdmlzaXQKJiM0MzsgKiAgIHRoaXMgcGFydCBvZiB0aGUgd29ybGQgZm9yIHNvbWUgZXh0cmEgaW52YWxpZGF0aW9uIHdvcmsuCiAgKi8KIAogaW50IGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTEzNzcsNyAmIzQzOzE0MzAsOCBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pCiAJICovCiAJc2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssICZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDttbXVfbG9jaykgewogCQl0aGlzX2NwdV9yZXNldF92bmNyX2ZpeG1hcCh2Y3B1KTsKLQkJdnQtJmd0O3ZhbGlkID0gZmFsc2U7CiYjNDM7CQlpZiAodnQtJmd0O3ZhbGlkKQomIzQzOwkJCWludmFsaWRhdGVfdm5jcih2Y3B1LSZndDtrdm0sIHZ0KTsKIAogCQl2dC0mZ3Q7d2kgPSAoc3RydWN0IHMxX3dhbGtfaW5mbykgewogCQkJLnJlZ2ltZQk9IFRSX0VMMjAsCkBAIC0xMzkxLDE1ICYjNDM7MTQ0NSwxNSBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pCiAKIAl2YSA9ICByZWFkX3ZuY3JfZWwyKHZjcHUpOwogCiYjNDM7CW1tdV9zZXEgPSB2Y3B1LSZndDtrdm0tJmd0O21tdV9pbnZhbGlkYXRlX3NlcTsKJiM0MzsJc21wX3JtYigpOwomIzQzOwogCXJldCA9IF9fa3ZtX3RyYW5zbGF0ZV92YSh2Y3B1LCAmYW1wO3Z0LSZndDt3aSwgJmFtcDt2dC0mZ3Q7d3IsIHZhKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJd3JpdGVfZmF1bHQgPSBrdm1faXNfd3JpdGVfZmF1bHQodmNwdSk7CiAKLQltbXVfc2VxID0gdmNwdS0mZ3Q7a3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXE7Ci0Jc21wX3JtYigpOwotCiAJZ2ZuID0gdnQtJmd0O3dyLnBhICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiAJbWVtc2xvdCA9IGdmbl90b19tZW1zbG90KHZjcHUtJmd0O2t2bSwgZ2ZuKTsKIAlpZiAoIW1lbXNsb3QpIHsKQEAgLTE0NDcsNyAmIzQzOzE1MDEsNyBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pCiAJCXZ0LSZndDtocGEgPSBwZm4gJmx0OyZsdDsgUEFHRV9TSElGVDsKIAkJdnQtJmd0O2hwYV93cml0YWJsZSA9IHdyaXRhYmxlOwogCQl2dC0mZ3Q7dmFsaWQgPSB0cnVlOwotCQl2dC0mZ3Q7Y3B1ID0gLTE7CiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7dnQtJmd0O2NwdSwgLTEpOwogCiAJCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9NQVBfTDFfVk5DUl9FTDIsIHZjcHUpOwogCQlrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2UodmNwdS0mZ3Q7a3ZtLCBwYWdlLCBmYWxzZSwgdnQtJmd0O3dyLnB3ICZhbXA7JmFtcDsgdnQtJmd0O2hwYV93cml0YWJsZSk7CkBAIC0xNTAyLDcgJiM0MzsxNTU2LDIwIEBAIGludCBrdm1faGFuZGxlX3ZuY3JfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQlyZXR1cm4gLUVJTzsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogU3BlY3VsYXRpdmVseSBpbmNyZW1lbnQgdGhlIFRMQiBjb3VudCB0byBtYWtlIHN1cmUgY29uY3VycmVudAomIzQzOwkgKiBUTEJJcyB3aWxsIHRha2UgdGhlIHNsb3cgcGF0aCwgYW5kIHdpbGwgaW50ZXJhY3Qgd2l0aCB0aGUgcmV0cnkKJiM0MzsJICogbWVjaGFuaXNtLiBEcm9wIGl0IGFnYWluIG9uIGVycm9yLgomIzQzOwkgKi8KJiM0MzsJYXRvbWljX2luYygmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC52bmNyX3RsYl9jb3VudCk7CiYjNDM7CXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiYjNDM7CiAJcmV0ID0ga3ZtX3RyYW5zbGF0ZV92bmNyKHZjcHUsICZhbXA7aXNfZ21lbSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwomIzQzOwkJYXRvbWljX2RlYygmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC52bmNyX3RsYl9jb3VudCk7CiYjNDM7CX0KJiM0MzsKIAlzd2l0Y2ggKHJldCkgewogCWNhc2UgLUVBR0FJTjoKIAkJLyogTGV0JiMzOTtzIHRyeSBhZ2Fpbi4uLiAqLwpAQCAtMTU2OCwxNCAmIzQzOzE2MzUsMTYgQEAgc3RhdGljIHZvaWQga3ZtX21hcF9sMV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoIXZ0LSZndDt2YWxpZCkKIAkJcmV0dXJuOwogCiYjNDM7CS8qIFdlIGNhY2hlIHRoZSBNTVUgc3RhdGUgaW4gdGhlIFRMQi4gQ2hlY2sgdGhhdCBpdCBtYXRjaGVzLiAqLwomIzQzOwlpZiAoISEodmNwdV9yZWFkX3N5c19yZWcodmNwdSwgU0NUTFJfRUwyKSAmYW1wOyBTQ1RMUl9FTHhfTSkgIT0gczFfd2Fsa190cmFuc2xhdGVkKCZhbXA7dnQtJmd0O3dyKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlpZiAocmVhZF92bmNyX2VsMih2Y3B1KSAhPSB2dC0mZ3Q7Z3ZhKQogCQlyZXR1cm47CiAKIAlpZiAodnQtJmd0O3dyLm5HICZhbXA7JmFtcDsgZ2V0X2FzaWRfYnlfcmVnaW1lKHZjcHUsIFRSX0VMMjApICE9IHZ0LSZndDt3ci5hc2lkKQogCQlyZXR1cm47CiAKLQl2dC0mZ3Q7Y3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCiAJaWYgKHZ0LSZndDtocGFfd3JpdGFibGUgJmFtcDsmYW1wOyB2dC0mZ3Q7d3IucHcgJmFtcDsmYW1wOyB2dC0mZ3Q7d3IucHIpCiAJCXByb3QgPSBQQUdFX0tFUk5FTDsKIAllbHNlIGlmICh2dC0mZ3Q7d3IucHIpCkBAIC0xNTkwLDkgJiM0MzsxNjU5LDkgQEAgc3RhdGljIHZvaWQga3ZtX21hcF9sMV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkgKiBGSVhNRTogV08gZG9lc24mIzM5O3Qgd29yayBhdCBhbGwsIG5lZWQgUE9FIHN1cHBvcnQgaW4gdGhlIGtlcm5lbC4KIAkgKi8KIAlpZiAocGdwcm90X3ZhbChwcm90KSAhPSBwZ3Byb3RfdmFsKFBBR0VfTk9ORSkpIHsKLQkJX19zZXRfZml4bWFwKHZuY3JfZml4bWFwKHZ0LSZndDtjcHUpLCB2dC0mZ3Q7aHBhLCBwcm90KTsKJiM0MzsJCWF0b21pY19zZXQoJmFtcDt2dC0mZ3Q7Y3B1LCBzbXBfcHJvY2Vzc29yX2lkKCkpOwomIzQzOwkJX19zZXRfZml4bWFwKHZuY3JfZml4bWFwKGF0b21pY19yZWFkKCZhbXA7dnQtJmd0O2NwdSkpLCB2dC0mZ3Q7aHBhLCBwcm90KTsKIAkJaG9zdF9kYXRhX3NldF9mbGFnKEwxX1ZOQ1JfTUFQUEVEKTsKLQkJYXRvbWljX2luYygmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC52bmNyX21hcF9jb3VudCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYwppbmRleCA1ZDVjNTc5ZDQ1NzkwLi43OTdlODg4YmY5Mzk0IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKQEAgLTQwNTcsNiAmIzQzOzQwNTcsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVfcmlwYXMyZTFpcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKIAl1MzIgc3lzX2VuY29kaW5nID0gc3lzX2luc24ocC0mZ3Q7T3AwLCBwLSZndDtPcDEsIHAtJmd0O0NSbiwgcC0mZ3Q7Q1JtLCBwLSZndDtPcDIpOwogCXU2NCB2dHRiciA9IHZjcHVfcmVhZF9zeXNfcmVnKHZjcHUsIFZUVEJSX0VMMik7CiAJdTY0IGJhc2UsIHJhbmdlOwomIzQzOwlpbnQgcGFfYml0czsKIAogCWlmICgha3ZtX3N1cHBvcnRlZF90bGJpX2lwYXMyX29wKHZjcHUsIHN5c19lbmNvZGluZykpCiAJCXJldHVybiB1bmRlZl9hY2Nlc3ModmNwdSwgcCwgcik7CkBAIC00MDY4LDYgJiM0Mzs0MDY5LDE2IEBAIHN0YXRpYyBib29sIGhhbmRsZV9yaXBhczJlMWlzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLAogCSAqLwogCWJhc2UgPSBkZWNvZGVfcmFuZ2VfdGxiaShwLSZndDtyZWd2YWwsICZhbXA7cmFuZ2UsIE5VTEwpOwogCiYjNDM7CS8qCiYjNDM7CSAqIElnbm9yZSBUTEJJcyB0aGF0IHN0YXJ0IG91dCBvZiBQQV9iaXRzIHJhbmdlLCBhbmQgY2FwIHRoZQomIzQzOwkgKiBpbnZhbGlkYXRpb24gdG8gdGhlIFtiYXNlOmJpdChQQV9iaXRzKV0gaW50ZXJ2YWwuCiYjNDM7CSAqLwomIzQzOwlwYV9iaXRzID0ga3ZtX2dldF9wYV9iaXRzKHZjcHUtJmd0O2t2bSk7CiYjNDM7CWlmIChmbHM2NChiYXNlKSAmZ3Q7IHBhX2JpdHMpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJcmFuZ2UgPSBtaW4ocmFuZ2UsIEJJVF9VTEwocGFfYml0cykgLSBiYXNlKTsKJiM0MzsKIAlrdm1fczJfbW11X2l0ZXJhdGVfYnlfdm1pZCh2Y3B1LSZndDtrdm0sIGdldF92bWlkKHZ0dGJyKSwKIAkJCQkgICAmYW1wOyh1bmlvbiB0bGJpX2luZm8pIHsKIAkJCQkJICAgLnJhbmdlID0gewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Njk0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtWTSBBUk02NCBOZXN0ZWQgVmlydHVhbGl6YXRpb24gUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIG1ha2luZyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBLVk0mIzM5O3MgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGltcGxlbWVudGF0aW9uIG9uIEFSTTY0LiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIHR3ZWFraW5nIFZOQ1IgVExCIGhhbmRsaW5nLiBUaGUgY29kZSYjMzk7cyBzd2l0Y2hlZCBgdm5jcl9tYXBfY291bnRgIHRvIGB2bmNyX3RsYl9jb3VudGAsIGFuZCBJJiMzOTttIHNlZWluZyBtb2RpZmljYXRpb25zIHRvIGEgd2hvbGUgYnVuY2ggb2YgZnVuY3Rpb25zLiBJIG5lZWQgdG8gZ2V0IG15IGhlYWQgYXJvdW5kIHRoaXMuIExldCYjMzk7cyBzZWUuLi4gaXQgdG91Y2hlcyBga3ZtX2h5cF9oYW5kbGVfdGxiaV9lbDJgLCBga3ZtX2luaXRfbmVzdGVkYCwgYWxsIHRoZXNlIHZhcmlvdXMgVExCIGludmFsaWRhdGlvbiBhbmQgbWFwcGluZyByb3V0aW5lcyDigJMgYGt2bV93YWxrX25lc3RlZF9zMmAsIGB0dGxfdG9fc2l6ZWAsIGBwZ3NoaWZ0X2xldmVsX3RvX3R0bGAsIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAsIGB1bm1hcF9sMV92bmNyYCwgYHRoaXNfY3B1X3Jlc2V0X3ZuY3JfZml4bWFwYCwgYGludmFsaWRhdGVfdm5jcmAsIGB2bmNyX3RsYl9pbnRlcnNlY3RzYCwgYGt2bV9pbnZhbGlkYXRlX3ZuY3JfaXBhYCwgYGludmFsaWRhdGVfdm5jcl92YWAsIGBjb21wdXRlX3MxX3RsYmlfcmFuZ2VgLCBga3ZtX3RyYW5zbGF0ZV92bmNyYCwgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAsIGBrdm1fbWFwX2wxX3ZuY3JgLCBhbmQgYWxzbyBgaGFuZGxlX3JpcGFzMmUxaXNgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBkZW1hbmRzIGZ1enppbmcuIEFueSBjaGFuZ2UgbGlrZSB0aGlzIGluIGEgbG93LWxldmVsIGh5cGVydmlzb3IgZnVuY3Rpb24sIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgaXMgYSBwcmltZSB0YXJnZXQuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGFyZWFzIG9mIGludGVyZXN0IGhlcmUgZm9yIGEgZnV6emluZyBjYW1wYWlnbi4KClNvLCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gSSYjMzk7dmUgYWxyZWFkeSBpZGVudGlmaWVkIHNldmVyYWwgZmlsZXMsIGFuZCBmdW5jdGlvbnMgbGlrZSBgZGVjb2RlX3JhbmdlX3RsYmlgLCBga3ZtX2h5cF9oYW5kbGVfdGxiaV9lbDJgLCBga3ZtX2luaXRfbmVzdGVkYCwgYGt2bV93YWxrX25lc3RlZF9zMmAsIGFsbCB0aGVzZSBUTEIgcmVsYXRlZCBmdW5jdGlvbnMuIEkgbmVlZCB0byBzZWUgaG93IHRoZXkmIzM5O3JlIHVzZWQuCgpOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHRoZSBwcmVjb25kaXRpb25zIGZvciByZWFjaGluZyB0aGVzZSBjb2RlIHBhdGhzLiBTdGFuZGFyZCBLVk0gb24gQVJNNjQgcmVxdWlyZXMgYENPTkZJR19LVk1gLiBOZXN0ZWQgdmlydHVhbGl6YXRpb24sIGluIGdlbmVyYWwsIG1pZ2h0IGludm9sdmUgYENPTkZJR19BUk02NGAgYW5kIGBDT05GSUdfS1ZNYCwgYnV0IEkgYmV0IHRoZXJl4oCZcyBhIG1vcmUgc3BlY2lmaWMgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGNvbmZpZyBJIG5lZWQgdG8gc3VzcyBvdXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IHRoZSBleGFjdCBidWlsZCBjb25maWd1cmF0aW9ucyByZXF1aXJlZCB0byBoaXQgdGhlc2UgY2hhbmdlZCBhcmVhcy4gVGhpcyB3aWxsIGJlIGNyaXRpY2FsIGZvciBjcmVhdGluZyBlZmZlY3RpdmUgZnV6emluZyBoYXJuZXNzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0xOS1cbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6MjA6bWVudWNvbmZpZyBLVk1cbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMjEtXHRib29sIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NzEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmVzdGVkIEtWTSBDb25maWd1cmF0aW9uIENoZWNrKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBhbnkgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgc2NlbmFyaW9zLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjb25maXJtIHRoZSBiYXNpY3MuIExldCYjMzk7cyBub3QgYXNzdW1lIGFueXRoaW5nLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgdGhlcmUmIzM5O3MgYW4gZXhpc3RpbmcgY29uZmlndXJhdGlvbiBkZWRpY2F0ZWQgdG8gbWFuYWdpbmcgbmVzdGVkIEtWTSB2aXJ0dWFsaXphdGlvbi4gSSYjMzk7bSB0aGlua2luZywgaXMgdGhlcmUgYSBkZWZpbmVkIG1ldGhvZCBpbiBwbGFjZT8gV2hhdCYjMzk7cyB0aGUgYmVzdCB3YXkgdG8gZGV0ZXJtaW5lIGlmIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGFuZCBwcm9wZXJseSBjb25maWd1cmVkIGZvciB0aGUgY3VycmVudCBlbnZpcm9ubWVudD8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGp1bXBpbmcgaW4gd2l0aG91dCB0aGlzIHByZWxpbWluYXJ5IGNoZWNrIGlzIGFza2luZyBmb3IgdHJvdWJsZS4gSXQmIzM5O2xsIHNhdmUgbWUgc2lnbmlmaWNhbnQgZGVidWdnaW5nIHRpbWUgbGF0ZXIuIEtub3dpbmcgd2hldGhlciBvciBub3QgdGhpcyBjb25maWd1cmF0aW9uIGFscmVhZHkgZXhpc3RzIHdpbGwgaGVhdmlseSBpbmZvcm0gbXkgbmV4dCBzdGVwcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXJlIGFuZCBob3cgdGhpcyBtaWdodCBiZSBkb2N1bWVudGVkIGFuZCB3aGF0IHRvb2xzIEkgc2hvdWxkIHVzZSB0byBjaGVjayBmb3IgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXN0ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDIxNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTmVzdGVkIEtWTSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHRoZXJlJiMzOTtzIG5vIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGluIEtjb25maWcgZm9yIG5lc3RlZCBLVk0uIFRoYXQmIzM5O3MgYSBiaXQgdW51c3VhbCwgYnV0IGl0IHByb2JhYmx5IG1lYW5zIGl0JiMzOTtzIGVpdGhlciBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgcGVyaGFwcyB0cmlnZ2VyZWQgYXQgcnVudGltZSBiYXNlZCBvbiBzeXN0ZW0gY2FwYWJpbGl0aWVzLiBUbyBiZSBzdXJlLCBJIG5lZWQgdG8gZGlnIGRlZXBlci4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBob3BpbmcgdG8gc2VlIGAjaWZkZWZgIG9yIGAjaWZgIHN0YXRlbWVudHMgdGhhdCBjb250cm9sIHdoZXRoZXIgdGhlIG5lc3RlZCBLVk0gZnVuY3Rpb25hbGl0eSBpcyBidWlsdCBpbnRvIHRoZSBrZXJuZWwgb3IgZXhjbHVkZWQuIFRoaXMgd2lsbCBjbGFyaWZ5IGhvdyB0aGlzIGZlYXR1cmUgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIEFSTTY0IGFyY2hpdGVjdHVyZSYjMzk7cyBLVk0gaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlPTE2PWt2bS15ICYjNDM7PSBhcm0ubyBtbXUubyBtbWlvLm8gcHNjaS5vIGh5cGVyY2FsbHMubyBwdnRpbWUubyBcXFxuLS1cbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTE5LVx0IHZnaWMtc3lzLXJlZy12My5vIGZwc2ltZC5vIHBrdm0ubyBcXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU6MjA6XHQgYXJjaF90aW1lci5vIHRybmcubyB2bWlkLm8gZW11bGF0ZS1uZXN0ZWQubyBuZXN0ZWQubyBhdC5vIFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0yMS1cdCB2Z2ljL3ZnaWMubyB2Z2ljL3ZnaWMtaW5pdC5vIFxcXG4tLVxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUtMjUtXHQgdmdpYy92Z2ljLW1taW8tdjMubyB2Z2ljL3ZnaWMta3ZtLWRldmljZS5vIFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZToyNjpcdCB2Z2ljL3ZnaWMtaXRzLm8gdmdpYy92Z2ljLWRlYnVnLm8gdmdpYy92Z2ljLXYzLW5lc3RlZC5vIFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0yNy1cdCB2Z2ljL3ZnaWMtdjUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzM1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0tcmVsYXRlZCBGdW5jdGlvbnMgZm9yIFBvdGVudGlhbCBJbXBhY3QqKgoKT2theSwgc28gdGhpcyBpcyBhYm91dCBLVk0gYW5kIGhvdyBpdCYjMzk7cyBjb21waWxlZC4gSSYjMzk7bSBmb2N1c2luZyBvbiBmaW5kaW5nIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBUaGUga2V5IHRoaW5nIGlzIHRoYXQgS1ZNIGdldHMgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5IHdoZW4gYENPTkZJR19LVk1gIGlzIGVuYWJsZWQsIHNvIHRoYXQmIzM5O3MgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBvcHRpb24gdG8ga2VlcCBpbiBtaW5kLgoKTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gaWRlbnRpZnkgYW5kIHplcm8gaW4gb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGNvbnRleHQuIEkmIzM5O3ZlIGdvdCBhIGxpc3QgZnJvbSB0aGUgcGF0Y2g6IGBrdm1faW5pdF9uZXN0ZWRgLCBga3ZtX3dhbGtfbmVzdGVkX3MyYCwgYGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlYCwgYGt2bV92Y3B1X2xvYWRfaHdfbW11YCwgYGt2bV92Y3B1X3B1dF9od19tbXVgLCBgZ2V0X2FzaWRfYnlfcmVnaW1lYCwgYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGxgLCBga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJgLCBhbmQgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAuCgpOb3csIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgb3IgYXJlIG5vbi1zdGF0aWMuIFRoZSBrZXkgb25lcyB0aGF0IEkgbmVlZCB0byBrZWVwIGluIG1pbmQgYXJlOiBga3ZtX2luaXRfbmVzdGVkYCwgYGt2bV93YWxrX25lc3RlZF9zMmAsIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAsIGBrdm1fdmNwdV9sb2FkX2h3X21tdWAsIGBrdm1fdmNwdV9wdXRfaHdfbW11YCwgYGdldF9hc2lkX2J5X3JlZ2ltZWAsIGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsYCwgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYCwgYW5kIGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgLgoKSSYjMzk7bSBhbHNvIGxvb2tpbmcgYXQgYSBjb3VwbGUgb2Ygb3RoZXIgZnVuY3Rpb25zLCBqdXN0IHRvIGJlIHN1cmU6IGBrdm1faHlwX2hhbmRsZV90bGJpX2VsMmAgKGluIGBhcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jYCkgYW5kIGBoYW5kbGVfcmlwYXMyZTFpc2AgKGluIGBhcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jYCkuIEhvd2V2ZXIsIHRoZXNlIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCBzbyBJIGRvbiYjMzk7dCBuZWVkIHRvIGxvb2sgYXQgdGhlbS4KCkl0IGxvb2tzIGxpa2UgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAsIGBrdm1fd2Fsa19uZXN0ZWRfczJgLCBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgLCBhbmQgYGt2bV9pbml0X25lc3RlZGAgYXJlIG5vbi1zdGF0aWMuCgpOb3cgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBjYWxsZXJzIGZvciBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCBhbmQgYGhhbmRsZV9yaXBhczJlMWlzYCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmN5IGdyYXBoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faGFuZGxlX3ZuY3JfYWJvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vaGFuZGxlX2V4aXQuYz0zNzY9c3RhdGljIGV4aXRfaGFuZGxlX2ZuIGFybV9leGl0X2hhbmRsZXJzW10gPSB7XG4tLVxuYXJjaC9hcm02NC9rdm0vaGFuZGxlX2V4aXQuYy0zOTUtXHRbRVNSX0VMeF9FQ19EQUJUX0xPV11cdD0ga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydCxcbmFyY2gvYXJtNjQva3ZtL2hhbmRsZV9leGl0LmM6Mzk2Olx0W0VTUl9FTHhfRUNfREFCVF9DVVJdXHQ9IGt2bV9oYW5kbGVfdm5jcl9hYm9ydCxcbmFyY2gvYXJtNjQva3ZtL2hhbmRsZV9leGl0LmMtMzk3LVx0W0VTUl9FTHhfRUNfU09GVFNUUF9MT1ddPSBrdm1faGFuZGxlX2d1ZXN0X2RlYnVnLFxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE1MTY9c3RhdGljIHZvaWQgaGFuZGxlX3ZuY3JfcGVybShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTU0MC1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE1NDE6aW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTQyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYSBQb3RlbnRpYWwgS1ZNIEV4aXQgSGFuZGxlcioqCgpBbHJpZ2h0LCAqa3ZtX2hhbmRsZV92bmNyX2Fib3J0Ki4uLiB0aGF0JiMzOTtzIGxvb2tpbmcgcHJvbWlzaW5nIGFzIGFuIGV4aXQgaGFuZGxlciwgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHRoZSBpbnZlc3RpZ2F0aW9uLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgKmhhbmRsZV9yaXBhczJlMWlzKiBoYW5kbGVyIGFzIHdlbGwsIGp1c3QgdG8gYmUgc3VyZSBJJiMzOTttIGNvbnNpZGVyaW5nIGFsbCByZWxldmFudCBhcmVhcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFuZGxlX3JpcGFzMmUxaXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz00MDMwPXN0YXRpYyBib29sIGhhbmRsZV92bWFsbHMxMmUxaXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MDUzLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MDU0OnN0YXRpYyBib29sIGhhbmRsZV9yaXBhczJlMWlzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MDU1LVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIpXG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz00MjEyPXN0YXRpYyBzdHJ1Y3Qgc3lzX3JlZ19kZXNjIHN5c19pbnNuX2Rlc2NzW10gPSB7XG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MzEyLVx0U1lTX0lOU04oVExCSV9JUEFTMkUxSVMsIGhhbmRsZV9pcGFzMmUxaXMpLFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MzEzOlx0U1lTX0lOU04oVExCSV9SSVBBUzJFMUlTLCBoYW5kbGVfcmlwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzMTQtXHRTWVNfSU5TTihUTEJJX0lQQVMyTEUxSVMsIGhhbmRsZV9pcGFzMmUxaXMpLFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MzE1Olx0U1lTX0lOU04oVExCSV9SSVBBUzJMRTFJUywgaGFuZGxlX3JpcGFzMmUxaXMpLFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MzE2LVxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNDMzNC1cdFNZU19JTlNOKFRMQklfSVBBUzJFMSwgaGFuZGxlX2lwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQzMzU6XHRTWVNfSU5TTihUTEJJX1JJUEFTMkUxLCBoYW5kbGVfcmlwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQzMzY6XHRTWVNfSU5TTihUTEJJX1JJUEFTMkUxT1MsIGhhbmRsZV9yaXBhczJlMWlzKSxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNDMzNy1cdFNZU19JTlNOKFRMQklfSVBBUzJMRTFPUywgaGFuZGxlX2lwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzMzgtXHRTWVNfSU5TTihUTEJJX0lQQVMyTEUxLCBoYW5kbGVfaXBhczJlMWlzKSxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NDMzOTpcdFNZU19JTlNOKFRMQklfUklQQVMyTEUxLCBoYW5kbGVfcmlwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQzNDA6XHRTWVNfSU5TTihUTEJJX1JJUEFTMkxFMU9TLCBoYW5kbGVfcmlwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzNDEtXHRTWVNfSU5TTihUTEJJX1JWQUUyT1MsIGhhbmRsZV90bGJpX2VsMiksXG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MzU0LVx0U1lTX0lOU04oVExCSV9JUEFTMkUxSVNOWFMsIGhhbmRsZV9pcGFzMmUxaXMpLFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MzU1Olx0U1lTX0lOU04oVExCSV9SSVBBUzJFMUlTTlhTLCBoYW5kbGVfcmlwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzNTYtXHRTWVNfSU5TTihUTEJJX0lQQVMyTEUxSVNOWFMsIGhhbmRsZV9pcGFzMmUxaXMpLFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MzU3Olx0U1lTX0lOU04oVExCSV9SSVBBUzJMRTFJU05YUywgaGFuZGxlX3JpcGFzMmUxaXMpLFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MzU4LVxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNDM3NC1cdFNZU19JTlNOKFRMQklfSVBBUzJFMU5YUywgaGFuZGxlX2lwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQzNzU6XHRTWVNfSU5TTihUTEJJX1JJUEFTMkUxTlhTLCBoYW5kbGVfcmlwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQzNzY6XHRTWVNfSU5TTihUTEJJX1JJUEFTMkUxT1NOWFMsIGhhbmRsZV9yaXBhczJlMWlzKSxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNDM3Ny1cdFNZU19JTlNOKFRMQklfSVBBUzJMRTFPU05YUywgaGFuZGxlX2lwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzNzgtXHRTWVNfSU5TTihUTEJJX0lQQVMyTEUxTlhTLCBoYW5kbGVfaXBhczJlMWlzKSxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NDM3OTpcdFNZU19JTlNOKFRMQklfUklQQVMyTEUxTlhTLCBoYW5kbGVfcmlwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQzODA6XHRTWVNfSU5TTihUTEJJX1JJUEFTMkxFMU9TTlhTLCBoYW5kbGVfcmlwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzODEtXHRTWVNfSU5TTihUTEJJX1JWQUUyT1NOWFMsIGhhbmRsZV90bGJpX2VsMiksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjAzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkFuYWx5emluZyBJbnN0cnVjdGlvbiBEaXNwYXRjaCoqCgpTbywgYGhhbmRsZV9yaXBhczJlMWlzYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEludGVyZXN0aW5nLi4uIHVzdWFsbHksIHN0YXRpYyBmdW5jdGlvbnMgc3VnZ2VzdCBhIGxvY2FsIHNjb3BlLCBub3Qgc29tZXRoaW5nIHdpZGVseSBhY2Nlc3NpYmxlLiBIb3dldmVyLCBpdCYjMzk7cyBnZXR0aW5nIGNhbGxlZCB0aHJvdWdoIGBzeXNfaW5zbl9kZXNjc2AuIFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgcG9pbnQgLSBpdCYjMzk7cyBiZWluZyBhY2Nlc3NlZCB2aWEgYSBkaXNwYXRjaCB0YWJsZSwgd2hpY2ggbWFrZXMgbWUgcmUtZXZhbHVhdGUgbXkgaW5pdGlhbCB0aG91Z2h0LiBJdCYjMzk7cyBlc3NlbnRpYWxseSBoaWRkZW4gaW50ZXJuYWxseSBidXQgaW52b2tlZCBhcyBhIGRpc3BhdGNoIHJvdXRpbmUuIEdvdCBpdC4gTm93LCB3aGF0IGFib3V0IHRoYXQgYGt2bV93YWxrX25lc3RlZF9zMmAgY2FsbCwgaG93IGRvZXMgaXQgZml0IGluIHdpdGggdGhpcyBkaXNwYXRjaCBzZXR1cCwgYW5kIHdoYXQgcmVsYXRpb25zaGlwIGRvZXMgaXQgaGF2ZSB0byBgaGFuZGxlX3JpcGFzMmUxaXNgPyBJdCBzZWVtcyBsaWtlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHJlbGF0aW9uIHRvIHRoZSBkaXNwYXRjaGluZyBtZWNoYW5pc20gYXMgd2VsbCBhcyBpdHMgY29udGV4dCB3aXRoaW4gdGhlIHdpZGVyIHN5c3RlbSB0byBzZWUgaG93IGFsbCB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fd2Fsa19uZXN0ZWRfczImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vYXQuYz00NjI9c3RhdGljIGludCB3YWxrX3MxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHMxX3dhbGtfaW5mbyAqd2ksXG4tLVxuYXJjaC9hcm02NC9rdm0vYXQuYy00ODMtXHRcdGlmICh3aS1cdTAwM2VzMikge1xuYXJjaC9hcm02NC9rdm0vYXQuYzo0ODQ6XHRcdFx0cmV0ID0ga3ZtX3dhbGtfbmVzdGVkX3MyKHZjcHUsIGlwYSwgXHUwMDI2czJfdHJhbnMpO1xuYXJjaC9hcm02NC9rdm0vYXQuYy00ODUtXHRcdFx0aWYgKHJldCA9PSAtRUFHQUlOKVxuLS1cbmFyY2gvYXJtNjQva3ZtL2F0LmM9MTU5NT1pbnQgX19rdm1fYXRfczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG9wLCB1NjQgdmFkZHIpXG4tLVxuYXJjaC9hcm02NC9rdm0vYXQuYy0xNjQ0LVx0c2NvcGVkX2d1YXJkKHNyY3UsIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNyY3UpXG5hcmNoL2FybTY0L2t2bS9hdC5jOjE2NDU6XHRcdHJldCA9IGt2bV93YWxrX25lc3RlZF9zMih2Y3B1LCBpcGEsIFx1MDAyNm91dCk7XG5hcmNoL2FybTY0L2t2bS9hdC5jLTE2NDYtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTIyNDc9aW50IGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTIzMjItXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyMzIzOlx0XHRyZXQgPSBrdm1fd2Fsa19uZXN0ZWRfczIodmNwdSwgZmF1bHRfaXBhLCBcdTAwMjZuZXN0ZWRfdHJhbnMpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMjMyNC1cdFx0aWYgKHJldCA9PSAtRUFHQUlOKSB7XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9NDc0PXN0YXRpYyB2b2lkIHNldHVwX3MyX3dhbGsoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgczJfd2Fsa19pbmZvICp3aSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy00ODgtXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzo0ODk6aW50IGt2bV93YWxrX25lc3RlZF9zMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBoeXNfYWRkcl90IGdpcGEsXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy00OTAtXHRcdCAgICAgICBzdHJ1Y3Qga3ZtX3MyX3RyYW5zICpyZXN1bHQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDc5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRpZ2dpbmcgaW50byBLVk0gTWVtb3J5IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgYGt2bV93YWxrX25lc3RlZF9zMmAgcG9wcyB1cCBpbiBib3RoIGBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0YCBhbmQgYF9fa3ZtX2F0X3MxMmAuIEhtbSwgYW5kIGl0JiMzOTtzIG5vdCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgaW4gaXRzZWxmIOKAkyBtZWFucyBpdCYjMzk7cyBsaWtlbHkgY2FsbGVkIGZyb20gb3RoZXIgcGxhY2VzIHRvbywgb3IgYXQgbGVhc3QgcG90ZW50aWFsbHkgY2FsbGFibGUuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gVGhpcyBzdWdnZXN0cyBhIGNvcmUgcm9sZSBpbiBtYW5hZ2luZyBuZXN0ZWQgcGFnaW5nLCBsaWtlbHkgcmVsYXRlZCB0byBoYW5kbGluZyBhYm9ydHMgYW5kIGFkZHJlc3Npbmcgc3BlY2lmaWMgUzEyIHNpdHVhdGlvbnMuCgpOb3csIG15IG1pbmQgc2hpZnRz4oCmIHdoYXQgYWJvdXQgYGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlYD8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaG93IGl0IHJlbGF0ZXMgdG8gdGhpcy4gVGhlcmUmIzM5O3MgYSBoaWdoIHByb2JhYmlsaXR5IHRoZXkgd29yayBjbG9zZWx5IHRvZ2V0aGVyLCBhcyBga3ZtX3dhbGtfbmVzdGVkX3MyYCBzZWVtcyB0byBkZWFsIHdpdGggbG9va2luZyBhdCBtZW1vcnkgbWFwcGluZ3MgYW5kIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAgd291bGQgcG90ZW50aWFsbHkgdXNlIHRoYXQga25vd2xlZGdlIHRvIGludmFsaWRhdGUgVExCIGVudHJpZXMuIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZS4gUGVyaGFwcyB0aGV5JiMzOTtyZSBpbnZvbHZlZCBpbiBtYW5hZ2luZyB0aGUgbWVtb3J5IHN0YXRlIHdoZW4gYSBndWVzdCBhYm9ydHMgb3IgaXMgd29ya2luZyBhdCBTMTIuIFRoZXkgbWlnaHQgYm90aCBoYXZlIGEgcm9sZSBpbiBlbnN1cmluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBndWVzdCYjMzk7cyBtZW1vcnkgc3BhY2UgYW5kIHRoZSBob3N0JiMzOTtzIHRyYW5zbGF0aW9uIHRhYmxlcy4gSXQgaXMgcG9zc2libGUgYGt2bV93YWxrX25lc3RlZF9zMmAgaXMgdXNlZCBmb3IgdHJhdmVyc2luZyB0aGUgbmVzdGVkIHBhZ2luZyBzdHJ1Y3R1cmUgdG8gZGV0ZXJtaW5lIHRoZSByYW5nZSB0aGF0IGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAgbmVlZHMgdG8gaW52YWxpZGF0ZS4gSSYjMzk7bGwgaGF2ZSB0byBkZWx2ZSBkZWVwZXIgdG8gY29uZmlybSBteSBoeXBvdGhlc2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21wdXRlX3RsYl9pbnZhbF9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz02MDY9c3RhdGljIHU4IGdldF9ndWVzdF9tYXBwaW5nX3R0bChzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1NjQgYWRkcilcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy02NzYtXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzo2Nzc6dW5zaWduZWQgbG9uZyBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1NjQgdmFsKVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtNjc4LXtcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTQwOTQ9c3RhdGljIHZvaWQgczJfbW11X3VubWFwX2lwYShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LFxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNDEwOS1cdGJhc2VfYWRkciA9IChpbmZvLVx1MDAzZWlwYS5hZGRyIFx1MDAyNiBHRU5NQVNLX1VMTCgzNSwgMCkpIFx1MDAzY1x1MDAzYyAxMjtcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NDExMDpcdG1heF9zaXplID0gY29tcHV0ZV90bGJfaW52YWxfcmFuZ2UobW11LCBpbmZvLVx1MDAzZWlwYS5hZGRyKTtcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNDExMS1cdGJhc2VfYWRkciBcdTAwMjY9IH4obWF4X3NpemUgLSAxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyMzUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyBUTEIgSW52YWxpZGF0aW9ucyBpbiBLVk0qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAgYW5kIEkmIzM5O20gaW1tZWRpYXRlbHkgc3RydWNrIGJ5IHRoZSBmYWN0IHRoYXQgaXQgaXNuJiMzOTt0IHN0YXRpYy4gVGhhdCB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgYmVpbmcgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgbW9kdWxlLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gVGhlIG5vbi1zdGF0aWMgbmF0dXJlIGhpbnRzIGF0IGEgbW9yZSBjb21wbGV4IGludGVyYWN0aW9uLCBtYXliZSBpbnZvbHZpbmcgb3RoZXIgcGFydHMgb2YgdGhlIEtWTSBjb2RlLgoKTXkgbmV4dCBtb3ZlIGlzIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYW5kIHdoeSB0aGlzIGlzIGJlaW5nIHVzZWQuIExldCYjMzk7cyBzZWUuLi4gYSBnb29kIHN0YXJ0aW5nIHBvaW50IGlzIHByb2JhYmx5IGBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYmAuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBmb3IgcG90ZW50aWFsIGludm9jYXRpb25zLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gYWxsb2NhdGluZyB0aGUgVmlydHVhbC10by1QaHlzaWNhbCB0cmFuc2xhdGlvbiBsb29rYXNpZGUgYnVmZmVyLCB3aGljaCByZWxhdGVzIGRpcmVjdGx5IHRvIFRMQiBtYW5hZ2VtZW50LiBUaGUgbG9naWMgd2l0aGluIHNob3VsZCBpbGx1bWluYXRlIGhvdyBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgIGZhY3RvcnMgaW50byB0aGF0IGFsbG9jYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIHRvIGdldCBhIGNsZWFyZXIgdmlldyBvZiB0aGUgaW52YWxpZGF0aW9uIHN0cmF0ZWd5IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2FybS5jPTkyMT1pbnQga3ZtX2FyY2hfdmNwdV9ydW5fcGlkX2NoYW5nZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtOTUxLVx0aWYgKHZjcHVfaGFzX252KHZjcHUpKSB7XG5hcmNoL2FybTY0L2t2bS9hcm0uYzo5NTI6XHRcdHJldCA9IGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiKHZjcHUpO1xuYXJjaC9hcm02NC9rdm0vYXJtLmMtOTUzLVx0XHRpZiAocmV0KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEzMTc9dm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzgwLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTM4MTppbnQga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTM4Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODI5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIEtWTSYjMzk7cyBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJgIGlzbiYjMzk7dCBzdGF0aWMuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBLbm93aW5nIHRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgc29tZXRoaW5nIGFib3V0IGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIHVzYWdlIHdpdGhpbiB0aGUgYnJvYWRlciBLVk0gY29kZWJhc2UuIEl0IG1lYW5zIGl0JiMzOTtzIGxpa2VseSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUgaXQmIzM5O3MgZGVmaW5lZCBpbiwgd2hpY2ggaW1wYWN0cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0cmFjaW5nIGl0cyBwdXJwb3NlIGFuZCBkZXBlbmRlbmNpZXMuIE5vdywgbGV0JiMzOTtzIHNlZSB3aGVyZSBhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKnVzZWQqLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBga3ZtX2luaXRfbmVzdGVkYC4gSSYjMzk7bSBndWVzc2luZyB0aGF0IGZ1bmN0aW9uIG1pZ2h0IGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgYXMgaXQmIzM5O3Mgb2Z0ZW4gYSBjZW50cmFsIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGFuZCBoYXMgYSBnb29kIGNoYW5jZSBvZiBiZWluZyB3aGVyZSBga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJgIGlzIGNhbGxlZCBvciBzb21laG93IHJlbGV2YW50LiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsIGlzIGtleSB0byBncmFzcGluZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ3kgaW4gS1ZNJiMzOTtzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpbXBsZW1lbnRhdGlvbi4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gYnVpbGQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIHJvbGUgaW4gdmlydHVhbGl6aW5nIG5lc3RlZCBwYWdlIHRhYmxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2luaXRfbmVzdGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2FybS5jPTIyMj1pbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbi0tXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0yMzgtXG5hcmNoL2FybTY0L2t2bS9hcm0uYzoyMzk6XHRrdm1faW5pdF9uZXN0ZWQoa3ZtKTtcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTI0MC1cbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz05ODE9aW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAzNi1cdGlmIChrdm1faXNfbmVzdGVkX3MyX21tdShrdm0sIG1tdSkpXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMDM3Olx0XHRrdm1faW5pdF9uZXN0ZWRfczJfbW11KG1tdSk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMDM4LVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTExMjU9dm9pZCBrdm1fZnJlZV9zdGFnZTJfcGdkKHN0cnVjdCBrdm1fczJfbW11ICptbXUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTEzOC1cdGlmIChrdm1faXNfbmVzdGVkX3MyX21tdShrdm0sIG1tdSkpXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMTM5Olx0XHRrdm1faW5pdF9uZXN0ZWRfczJfbW11KG1tdSk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMTQwLVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTIwPXN0cnVjdCB2bmNyX3RsYiB7XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtNDYtXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzo0Nzp2b2lkIGt2bV9pbml0X25lc3RlZChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy00OC17XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9ODA1PXN0YXRpYyBzdHJ1Y3Qga3ZtX3MyX21tdSAqZ2V0X3MyX21tdV9uZXN0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTg2OS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjg3MDp2b2lkIGt2bV9pbml0X25lc3RlZF9zMl9tbXUoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSlcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTg3MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Nzc2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgRm9jdXM6IE5lc3RlZCBLVk0gb24gQXJtNjQqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG5lc3RlZCBLVk0gY29kZSwgYW5kIGhlcmUmIzM5O3MgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHdoZXJlIHRvIGZvY3VzIHRoZSBmdXp6aW5nIGVmZm9ydHMuIEZpcnN0LCBJJiMzOTttIGlkZW50aWZ5aW5nIHRoZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIFZOQ1IgKFZpcnR1YWwgTmVzdGVkIENvbnRyb2wgUmVnaXN0ZXJzKSBhYm9ydCBoYW5kbGluZyBhbmQgUzIgdHJhbnNsYXRpb24uCgpNeSBpbml0aWFsIGxpc3Qgb2YgZnVuY3Rpb25zIG9mIGludGVyZXN0IGluY2x1ZGVzOiBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCwgYGt2bV93YWxrX25lc3RlZF9zMmAsIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAsIGBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYmAsIGFuZCBga3ZtX2luaXRfbmVzdGVkYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBkaXNtaXNzaW5nIGBrdm1faW5pdF9uZXN0ZWRgIGJlY2F1c2UgaXQgYXBwZWFycyB0byBiZSBwdXJlbHkgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gYW5kIHRoZXJlZm9yZSBsZXNzIGxpa2VseSB0byBleHBvc2UgaW50ZXJlc3RpbmcgZnV6emluZyB0YXJnZXRzIGRpcmVjdGx5LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgcmVtYWluaW5nIGNhbmRpZGF0ZXMgbW9yZSBjYXJlZnVsbHk6CgoqICAgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGA6IFRoaXMgbG9va3MgbGlrZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgVk5DUiBhYm9ydHMuIEl0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0LgoqICAgYGt2bV93YWxrX25lc3RlZF9zMmA6IFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBuZXN0ZWQgUzIgcGFnZSB3YWxrLCBhbm90aGVyIGNyaXRpY2FsIGFyZWEuCiogICBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgOiBUaGlzIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBUTEIgaW52YWxpZGF0aW9uIHJhbmdlcywgcG90ZW50aWFsbHkgY29tcGxleCBsb2dpYyB0aGF0IG5lZWRzIGNsb3NlIHNjcnV0aW55LgoqICAgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYDogVGhpcyBvbmUgaXMgaW50ZXJlc3Rpbmc7IGl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgdkNQVSBydW4gUElEIGNoYW5nZXMuCgpOZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSXQgbG9va3MgbGlrZSBgQ09ORklHX0tWTWAgaXMgdGhlIHByaW1hcnkgcmVxdWlyZW1lbnQuIFRoaXMgaXMgZ29vZDsgaXQgc2ltcGxpZmllcyB0aGluZ3MuIFRoZSBwYXRjaCBtb2RpZmllcyBgYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNgIHdoaWNoIGlzIGJ1aWx0IHdpdGggYGt2bS15ICYjNDM7PSBuZXN0ZWQub2AgaW4gdGhlIGBNYWtlZmlsZWAuIFRoYXQgY29uZmlybXMgYENPTkZJR19LVk1gIGlzIGluZGVlZCBzdWZmaWNpZW50LgoKSSYjMzk7bSBub3cgZ29pbmcgdG8gY29uZmlybSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgcmVhY2hhYmxlLiBJdCYjMzk7cyBubyB1c2UgdGFyZ2V0aW5nIGEgZnVuY3Rpb24gdGhhdCBpc24mIzM5O3QgY2FsbGVkLiBJJiMzOTttIHZlcmlmeWluZyB0aGUgY2FsbCBncmFwaDoKCiogICBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBiZWNhdXNlIGl0IGlzIGluIGBhcm1fZXhpdF9oYW5kbGVyc2AgZm9yIGBFU1JfRUx4X0VDX0RBQlRfQ1VSYCwgdGhpcyBpcyBncmVhdC4KKiAgIGBrdm1fd2Fsa19uZXN0ZWRfczJgIGlzIHJlYWNoZWQgdmlhIGBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0YCBhbmQgYF9fa3ZtX2F0X3MxMmAsIHRoYXQgaXMgZ29vZC4KKiAgIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAgaXMgY2FsbGVkIGZyb20gYHMyX21tdV91bm1hcF9pcGFgLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBmcm9tIGBoYW5kbGVfcmlwYXMyZTFpc2AgYW5kIGBoYW5kbGVfaXBhczJlMWlzYCwgdGhpcyBpcyBhbHNvIHNvbGlkLgoqICAgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYCBpcyByZWFjaGVkIHZpYSBga3ZtX2FyY2hfdmNwdV9ydW5fcGlkX2NoYW5nZWAsIGdvb2QgdG8ga25vdy4KCkkmIzM5O20gYWxzbyBzZWVpbmcgb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zIGxpa2UgYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGxgLCBga3ZtX3ZjcHVfbG9hZF9od19tbXVgLCBhbmQgYGt2bV92Y3B1X3B1dF9od19tbXVgLiBIb3dldmVyLCBga3ZtX2FyY2hfZmx1c2hfc2hhZG93X2FsbGAgc2VlbXMgZ2VuZXJpYy4gSSYjMzk7bGwgZXhhbWluZSB0aGUgTU1VIGZ1bmN0aW9ucyBhcyB3ZWxsLCBmb3IgdGhvcm91Z2huZXNzLCBidXQgbXkgY29yZSBmb2N1cyB3aWxsIGJlIHRoZSBpbml0aWFsIGZvdXIgdGhhdCBJIGlkZW50aWZpZWQuIFNvLCBJIHdpbGwgY2hlY2sgYGt2bV92Y3B1X3B1dF9od19tbXVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fdmNwdV9wdXRfaHdfbW11JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2FybS5jPTc0Nj12b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9hcm0uYy03NjAtXHRpZiAodmNwdV9oYXNfbnYodmNwdSkpXG5hcmNoL2FybTY0L2t2bS9hcm0uYzo3NjE6XHRcdGt2bV92Y3B1X3B1dF9od19tbXUodmNwdSk7XG5hcmNoL2FybTY0L2t2bS9hcm0uYy03NjItXHRrdm1fYXJtX3ZtaWRfY2xlYXJfYWN0aXZlKCk7XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9OTEzPXN0YXRpYyB2b2lkIHRoaXNfY3B1X3Jlc2V0X3ZuY3JfZml4bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy05MzQtXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzo5MzU6dm9pZCBrdm1fdmNwdV9wdXRfaHdfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTkzNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4Mzk3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgaXMgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3ZjcHVfcHV0YCwgcmlnaHQ/IFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGUgcGF0Y2ggaXRzZWxmIGlzIGZ1bmN0aW9uYWwgYW5kLCBpbXBvcnRhbnRseSwgaXQmIzM5O3MgbWVzc2luZyB3aXRoIGNvcmUgS1ZNIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYy4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluaywgJiMzNDtXb3J0aEZ1enppbmcgPSB0cnVlJiMzNDsuIEFsd2F5cyBhIGdvb2Qgc2lnbi4KCk5vdywgbGV0JiMzOTtzIHNlZSwgd2hhdCBhcmUgdGhlIGtleSBhcmVhcyBpdCYjMzk7cyB0b3VjaGluZz8gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZTogYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAsIGBrdm1fd2Fsa19uZXN0ZWRfczJgLCBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgLCBga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJgLCBga3ZtX3ZjcHVfcHV0X2h3X21tdWAsIGFuZCBga3ZtX3ZjcHVfbG9hZF9od19tbXVgLiBWTkNSIFRMQnMsIG5lc3RlZCBTMiB3YWxrcywgVExCIGludmFsaWRhdGlvbi4uLiB5ZXAsIHRoaXMgaXMgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSB2aXJ0dWFsaXphdGlvbiBzdGFjaywgcG90ZW50aWFsbHkgYWNjZXNzaWJsZSBkdXJpbmcgZ3Vlc3QgZXhlY3V0aW9uLiBNeSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmc7IHBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcyBhbmQgdnVsbmVyYWJpbGl0aWVzIGluIHRoaXMgYXJlYS4KClRoZSBgQ29uZmlnc2Agc2VjdGlvbiBjb25maXJtcyBpdCYjMzk7cyBLVk0sIHNvIHdlJiMzOTtyZSBvbiB0aGUgcmlnaHQgdHJhY2suIE15IGltbWVkaWF0ZSByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIEtWTSBBUk02NCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgVk5DUiBUTEJzLCBuZXN0ZWQgUzIgd2Fsa3MsIGFuZCBUTEIgaW52YWxpZGF0aW9uIHJhbmdlcywgYWxsIG9mIHdoaWNoIGFyZSAqY3JpdGljYWwqIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIGFuZCBlYXNpbHkgcmVhY2hlZCBmcm9tIGd1ZXN0IGV4ZWN1dGlvbi4KCkkgdGhpbmsgYmVmb3JlIEkgZGl2ZSBhbnkgZGVlcGVyLCBJJiMzOTttIGdvaW5nIHRvIHZlcmlmeSBga3ZtX3ZjcHVfbG9hZF9od19tbXVgLiBJdCYjMzk7cyBhIGdvb2Qgc3ltYm9sIHRvIHN0YXJ0IHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV92Y3B1X2xvYWRfaHdfbW11JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2FybS5jPTY2ND12b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtNjcyLVx0aWYgKHZjcHVfaGFzX252KHZjcHUpKVxuYXJjaC9hcm02NC9rdm0vYXJtLmM6NjczOlx0XHRrdm1fdmNwdV9sb2FkX2h3X21tdSh2Y3B1KTtcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTY3NC1cbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz04NzA9dm9pZCBrdm1faW5pdF9uZXN0ZWRfczJfbW11KHN0cnVjdCBrdm1fczJfbW11ICptbXUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtODc3LVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6ODc4OnZvaWQga3ZtX3ZjcHVfbG9hZF9od19tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtODc5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyNjUKCQkJCQkJCW91dHB1dDogMTY3CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBpZiB0aGV5IGFyZSBteSBvd246CgoqKkxvYWRpbmcgdGhlIFZpcnR1YWwgQ1BVIFN0YXRlKioKClJpZ2h0LCBzbyBJIHNlZSB0aGlzIG9yaWdpbmF0ZXMgd2l0aGluIGBrdm1fYXJjaF92Y3B1X2xvYWRgLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludC4gSSBuZWVkIHRvIHJlcG9ydCBteSBmaW5kaW5ncywgYW5kIEkmIzM5O2xsIGxldmVyYWdlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgZm9yIHRoYXQuIEl0IHNlZW1zIHRoZSBtb3N0IGVmZmljaWVudCBhbmQgc3RhbmRhcmQgd2F5IHRvIGNvbW11bmljYXRlIHRoZSBzdGF0ZSBvZiB0aGUgbG9hZGVkIHZDUFUgaXMgdmlhIHRoaXMgcmVwb3J0aW5nIHRvb2wuIEkmIzM5O2xsIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9oYW5kbGVfdm5jcl9hYm9ydCYjMzQ7LAogICAgJiMzNDtrdm1fd2Fsa19uZXN0ZWRfczImIzM0OywKICAgICYjMzQ7Y29tcHV0ZV90bGJfaW52YWxfcmFuZ2UmIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGImIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfcHV0X2h3X21tdSYjMzQ7LAogICAgJiMzNDtrdm1fdmNwdV9sb2FkX2h3X21tdSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0gQVJNNjQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIFZOQ1IgVExCcywgbmVzdGVkIFMyIHdhbGtzLCBhbmQgVExCIGludmFsaWRhdGlvbiByYW5nZXMuIFRoZXNlIGFyZSBjb3JlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IGV4ZWN1dGlvbiBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2hhbmRsZV92bmNyX2Fib3J0JiMzNDssCiAgICAmIzM0O2t2bV93YWxrX25lc3RlZF9zMiYjMzQ7LAogICAgJiMzNDtjb21wdXRlX3RsYl9pbnZhbF9yYW5nZSYjMzQ7LAogICAgJiMzNDtrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYiYjMzQ7LAogICAgJiMzNDtrdm1fdmNwdV9wdXRfaHdfbW11JiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2xvYWRfaHdfbW11JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBBUk02NCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgaGFuZGxpbmcgb2YgVk5DUiBUTEJzLCBuZXN0ZWQgUzIgd2Fsa3MsIGFuZCBUTEIgaW52YWxpZGF0aW9uIHJhbmdlcy4gVGhlc2UgYXJlIGNvcmUgdmlydHVhbGl6YXRpb24gZmVhdHVyZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgZXhlY3V0aW9uIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6MDQ6MDYuMzc4OTY2OTA2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgxMzU2MDgxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2hhbmRsZV92bmNyX2Fib3J0XCIsXG4gICAgXCJrdm1fd2Fsa19uZXN0ZWRfczJcIixcbiAgICBcImNvbXB1dGVfdGxiX2ludmFsX3JhbmdlXCIsXG4gICAgXCJrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYlwiLFxuICAgIFwia3ZtX3ZjcHVfcHV0X2h3X21tdVwiLFxuICAgIFwia3ZtX3ZjcHVfbG9hZF9od19tbXVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gQVJNNjQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIFZOQ1IgVExCcywgbmVzdGVkIFMyIHdhbGtzLCBhbmQgVExCIGludmFsaWRhdGlvbiByYW5nZXMuIFRoZXNlIGFyZSBjb3JlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IGV4ZWN1dGlvbiBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6MDQ6MDYuMzc4OTc2ODg2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE5MjI4NzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGIzNTZmOGE0YTgxMjE1MDViYzEyZGJlYTA0ZTk3ZDU1MGIzNTVhM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyA2IDEwOjA0OjA0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IGJhZTJjNGY5MmVmNWMuLjEwODk2NmE5ZGIxMmIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTQxMSw4ICs0MTEsOCBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xcbiBcXHQvKiBNYXNrcyBmb3IgVk5DUi1iYWNrZWQgYW5kIGdlbmVyYWwgRUwyIHN5c3JlZ3MgKi9cXG4gXFx0c3RydWN0IGt2bV9zeXNyZWdfbWFza3NcXHQqc3lzcmVnX21hc2tzO1xcbiBcXG4tXFx0LyogQ291bnQgdGhlIG51bWJlciBvZiBWTkNSX0VMMiBjdXJyZW50bHkgbWFwcGVkICovXFxuLVxcdGF0b21pY190IHZuY3JfbWFwX2NvdW50O1xcbitcXHQvKiBDb3VudCB0aGUgbnVtYmVyIG9mIFZOQ1JfRUwyIFRMQnMgKi9cXG4rXFx0YXRvbWljX3Qgdm5jcl90bGJfY291bnQ7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBGb3IgYW4gdW50cnVzdGVkIGhvc3QgVk0sICdwa3ZtLmhhbmRsZScgaXMgdXNlZCB0byBsb29rdXBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaFxcbmluZGV4IDAxMmQ3MTEwMzRkMTcuLmM4M2JlNmQwZTc5YWMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaFxcbkBAIC0yOTEsNiArMjkxLDEzIEBAIHN0YXRpYyBpbmxpbmUgdTY0IGRlY29kZV9yYW5nZV90bGJpKHU2NCB2YWwsIHU2NCAqcmFuZ2UsIHUxNiAqYXNpZClcXG4gXFxuIFxcdGJhc2VcXHQ9ICh2YWwgXFx1MDAyNiBHRU5NQVNLKDM2LCAwKSkgXFx1MDAzY1xcdTAwM2Mgc2hpZnQ7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBXZSBvbmx5IGRlYWwgd2l0aCBhdCBtb3N0IDQ4Yml0IFZBL0lQQSwgc28gNDggaXMgd2hlcmUgd2VcXG4rXFx0ICogc2lnbi1leHRlbmQgZnJvbS4gU2hvdWxkIHdlIHN1cHBvcnQgRkVBVF9Me1ZQfUEqIGF0IHNvbWUgcG9pbnQsXFxuK1xcdCAqIHRoaXMgd2lsbCBuZWVkIHRvIGJlIHJldmlzaXRlZC5cXG4rXFx0ICovXFxuK1xcdGJhc2VcXHQ9ICh1NjQpc2lnbl9leHRlbmQ2NChiYXNlLCA0OCk7XFxuK1xcbiBcXHRpZiAoYXNpZClcXG4gXFx0XFx0KmFzaWQgPSBGSUVMRF9HRVQoVExCSVJfQVNJRF9NQVNLLCB2YWwpO1xcbiBcXG5AQCAtMzg4LDYgKzM5NSw4IEBAIHN0cnVjdCBzMV93YWxrX3Jlc3VsdCB7XFxuIFxcdGJvb2xcXHRmYWlsZWQ7XFxuIH07XFxuIFxcbisjZGVmaW5lIFMxX01NVV9ESVNBQkxFRFxcdFxcdCgtMTI3KVxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIGZhaWxfczFfd2FsayhzdHJ1Y3QgczFfd2Fsa19yZXN1bHQgKndyLCB1OCBmc3QsIGJvb2wgczFwdHcpXFxuIHtcXG4gXFx0d3ItXFx1MDAzZWZzdFxcdFxcdD0gZnN0O1xcbkBAIC0zOTYsNiArNDA1LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmYWlsX3MxX3dhbGsoc3RydWN0IHMxX3dhbGtfcmVzdWx0ICp3ciwgdTggZnN0LCBib29sIHMxcHR3KVxcbiBcXHR3ci1cXHUwMDNlZmFpbGVkXFx0PSB0cnVlO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgczFfd2Fsa190cmFuc2xhdGVkKHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IpXFxuK3tcXG4rXFx0cmV0dXJuIHdyLVxcdTAwM2VsZXZlbCAhPSBTMV9NTVVfRElTQUJMRUQ7XFxuK31cXG4rXFxuIGludCBfX2t2bV90cmFuc2xhdGVfdmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgczFfd2Fsa19pbmZvICp3aSxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IsIHU2NCB2YSk7XFxuIGludCBfX2t2bV9maW5kX3MxX2Rlc2NfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmEsIHU2NCBpcGEsXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2F0LmMgYi9hcmNoL2FybTY0L2t2bS9hdC5jXFxuaW5kZXggNjQwZjJkYzAwYThiYS4uMDkyNjQyNmI4Nzk4OSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9hdC5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vYXQuY1xcbkBAIC0xMSw4ICsxMSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX21tdS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2xzdWkuaFxcdTAwM2VcXG4gXFxuLSNkZWZpbmUgUzFfTU1VX0RJU0FCTEVEXFx0XFx0KC0xMjcpXFxuLVxcbiBzdGF0aWMgaW50IGdldF9pYV9zaXplKHN0cnVjdCBzMV93YWxrX2luZm8gKndpKVxcbiB7XFxuIFxcdHJldHVybiA2NCAtIHdpLVxcdTAwM2V0eHN6O1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xcbmluZGV4IGJiZTljZWJkM2Q5ZDUuLmZhNzc2YjE4YTMyY2EgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcXG5AQCAtNDI0LDExICs0MjQsMTUgQEAgc3RhdGljIGJvb2wga3ZtX2h5cF9oYW5kbGVfdGxiaV9lbDIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmV4aXRfY29kZSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogSWYgd2UgaGF2ZSB0byBjaGVjayBmb3IgYW55IFZOQ1IgbWFwcGluZyBiZWluZyBpbnZhbGlkYXRlZCxcXG4tXFx0ICogZ28gYmFjayB0byB0aGUgc2xvdyBwYXRoIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuXFxuK1xcdCAqIElmIHdlIGhhdmUgdG8gY2hlY2sgZm9yIGFueSBWTkNSIFRMQiBiZWluZyBpbnZhbGlkYXRlZCwgZ28gYmFja1xcbitcXHQgKiB0byB0aGUgc2xvdyBwYXRoIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuXFxuK1xcdCAqXFxuK1xcdCAqIFRoZSBzeW5jaHJvbmlzYXRpb24gYmV0d2VlbSBUTEJJIGFuZCB3YWxrIGlzIHByb3ZpZGVkIGJ5IHRoZVxcbitcXHQgKiBzcGVjdWxhdGl2ZSBpbmNyZW1lbnQgb2YgdGhlIFRMQiBjb3VudGVyIG9uIHdhbGssIGFuZCB0aGVcXG4rXFx0ICogaW52YWxpZGF0aW9uIGNvdW50ZXIuIFllcywgdGhpcyBpcyBmaWRkbHkuXFxuIFxcdCAqL1xcbiBcXHRpZiAodmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSBcXHUwMDI2XFx1MDAyNiB2Y3B1X2VsMl90Z2VfaXNfc2V0KHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBhdG9taWNfcmVhZChcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnZuY3JfbWFwX2NvdW50KSlcXG4rXFx0ICAgIGF0b21pY19yZWFkKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gudm5jcl90bGJfY291bnQpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRfX2t2bV9za2lwX2luc3RyKHZjcHUpO1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXFxuaW5kZXggZGZiOTZlZGJkYzQzYy4uMjBhZjk0MTk3YThhNyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXFxuQEAgLTI3LDcgKzI3LDcgQEAgc3RydWN0IHZuY3JfdGxiIHtcXG4gXFx0Ym9vbFxcdFxcdFxcdGhwYV93cml0YWJsZTtcXG4gXFxuIFxcdC8qIC0xIHdoZW4gbm90IG1hcHBlZCBvbiBhIENQVSAqL1xcbi1cXHRpbnRcXHRcXHRcXHRjcHU7XFxuK1xcdGF0b21pY190XFx0XFx0Y3B1O1xcbiBcXG4gXFx0LypcXG4gXFx0ICogdHJ1ZSBpZiB0aGUgVExCIGlzIHZhbGlkLiBDYW4gb25seSBiZSBjaGFuZ2VkIHdpdGggdGhlXFxuQEAgLTQ4LDcgKzQ4LDcgQEAgdm9pZCBrdm1faW5pdF9uZXN0ZWQoc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuIFxcdGt2bS1cXHUwMDNlYXJjaC5uZXN0ZWRfbW11cyA9IE5VTEw7XFxuIFxcdGt2bS1cXHUwMDNlYXJjaC5uZXN0ZWRfbW11c19zaXplID0gMDtcXG4tXFx0YXRvbWljX3NldChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnZuY3JfbWFwX2NvdW50LCAwKTtcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnZuY3JfdGxiX2NvdW50LCAwKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBpbml0X25lc3RlZF9zMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KVxcbkBAIC01MDYsNyArNTA2LDcgQEAgaW50IGt2bV93YWxrX25lc3RlZF9zMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBoeXNfYWRkcl90IGdpcGEsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgdHRsX3RvX3NpemUodTggdHRsKVxcbitzdGF0aWMgdW5zaWduZWQgaW50IF9fdHRsX3RvX3NpemUodTggdHRsKVxcbiB7XFxuIFxcdGludCBsZXZlbCA9IHR0bCBcXHUwMDI2IDM7XFxuIFxcdGludCBncmFuID0gKHR0bCBcXHUwMDNlXFx1MDAzZSAyKSBcXHUwMDI2IDM7XFxuQEAgLTU2MiwxMCArNTYyLDIyIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHRsX3RvX3NpemUodTggdHRsKVxcbiBcXHRyZXR1cm4gbWF4X3NpemU7XFxuIH1cXG4gXFxuLXN0YXRpYyB1OCBwZ3NoaWZ0X2xldmVsX3RvX3R0bCh1MTYgc2hpZnQsIHU4IGxldmVsKVxcbitzdGF0aWMgdW5zaWduZWQgaW50IHR0bF90b19zaXplKHU4IHR0bClcXG4re1xcbitcXHRyZXR1cm4gX190dGxfdG9fc2l6ZSh0dGwpID86IFNaXzFHO1xcbit9XFxuK1xcbitzdGF0aWMgdTggcGdzaGlmdF9sZXZlbF90b190dGwodTE2IHNoaWZ0LCBzOCBsZXZlbClcXG4ge1xcbiBcXHR1OCB0dGw7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBJZiB3ZSBkb24ndCBoYXZlIGEgcHJvcGVyIGxldmVsLCBmYWxsYmFjayB0byB0aGUgbWF4aW11bVxcbitcXHQgKiBzaXplLlxcbitcXHQgKi9cXG4rXFx0aWYgKGxldmVsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHRzd2l0Y2goc2hpZnQpIHtcXG4gXFx0Y2FzZSAxMjpcXG4gXFx0XFx0dHRsID0gVExCSV9UVExfVEdfNEs7XFxuQEAgLTY3Niw3ICs2ODgsMTEgQEAgdW5zaWduZWQgbG9uZyBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1NjQgdmFsKVxcbiBcXHRcXHR0dGwgPSBnZXRfZ3Vlc3RfbWFwcGluZ190dGwobW11LCBhZGRyKTtcXG4gXFx0fVxcbiBcXG4tXFx0bWF4X3NpemUgPSB0dGxfdG9fc2l6ZSh0dGwpO1xcbitcXHQvKlxcbitcXHQgKiBEb24ndCB1c2UgdGhlIGRlZmF1bHQgMUdCIGZhbGxiYWNrLCBhcyB3ZSBjYW4gYWRhcHQgdG8gdGhlXFxuK1xcdCAqIG1heCBtYXBwaW5nIHNpemUgd2UgYWxsb3cgYXQgUzIuXFxuK1xcdCAqL1xcbitcXHRtYXhfc2l6ZSA9IF9fdHRsX3RvX3NpemUodHRsKTtcXG4gXFxuIFxcdGlmICghbWF4X3NpemUpIHtcXG4gXFx0XFx0LyogQ29tcHV0ZSB0aGUgbWF4aW11bSBleHRlbnQgb2YgdGhlIGludmFsaWRhdGlvbiAqL1xcbkBAIC04NzksMTggKzg5NSw0MSBAQCB2b2lkIGt2bV92Y3B1X2xvYWRfaHdfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0fVxcbiB9XFxuIFxcbisvKlxcbisgKiBVbm1hcHBpbmcgYW4gTDEgVk5DUiBjYW4gaGFwcGVuIGNvbmN1cnJlbnRseSB3aXRob3V0IHRoZSBtbXUgbG9jayBiZWluZ1xcbisgKiBlZmZlY3RpdmUgKHZjcHVfcHV0KCkgdnMgVExCSSBoYW5kbGluZykuIFRoZSBhdG9taWNfeGNoZyBiZWxvdyBlbnN1cmVzXFxuKyAqIHRoYXQgb25seSBvbmUgQ1BVIHNldHMgaXQgdG8gLTEgd2hpbGUgZ2V0dGluZyBhIHZhbGlkIENQVSBudW1iZXIgYmFjay5cXG4rICovXFxuK3N0YXRpYyBpbnQgdW5tYXBfbDFfdm5jcihzdHJ1Y3Qgdm5jcl90bGIgKnZ0KVxcbit7XFxuK1xcdGludCBjcHUgPSBhdG9taWNfeGNoZ19yZWxheGVkKFxcdTAwMjZ2dC1cXHUwMDNlY3B1LCAtMSk7XFxuK1xcbitcXHRpZiAoY3B1ICE9IC0xKVxcbitcXHRcXHRjbGVhcl9maXhtYXAodm5jcl9maXhtYXAoY3B1KSk7XFxuK1xcbitcXHRyZXR1cm4gY3B1O1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB0aGlzX2NwdV9yZXNldF92bmNyX2ZpeG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0aWYgKCFob3N0X2RhdGFfdGVzdF9mbGFnKEwxX1ZOQ1JfTUFQUEVEKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0QlVHX09OKHZjcHUtXFx1MDAzZWFyY2gudm5jcl90bGItXFx1MDAzZWNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpO1xcbiBcXHRCVUdfT04oaXNfaHlwX2N0eHQodmNwdSkpO1xcbiBcXG4tXFx0Y2xlYXJfZml4bWFwKHZuY3JfZml4bWFwKHZjcHUtXFx1MDAzZWFyY2gudm5jcl90bGItXFx1MDAzZWNwdSkpO1xcbi1cXHR2Y3B1LVxcdTAwM2VhcmNoLnZuY3JfdGxiLVxcdTAwM2VjcHUgPSAtMTtcXG4rXFx0LypcXG4rXFx0ICogVW5jb25kaXRpb25hbGx5IHVubWFwIHRoZSBsb2NhbCBWTkNSIGlmIHdlIGhhdmUgbG9zdCB0aGUgcmFjZVxcbitcXHQgKiBhZ2FpbnN0IGEgY29uY3VycmVudCBUTEJJLiBPdGhlcndpc2Ugd2UgY291bGQgZW5kLXVwIHJ1bm5pbmdcXG4rXFx0ICogYW5vdGhlciB2Y3B1IHdpdGggVk5DUiBzdGlsbCBtYXBwZWQgaWYgdGhlIFRMQkkgdGhyZWFkIGlzXFxuK1xcdCAqIHByZWVtcHRlZCBiZXR3ZWVuIHRoZSBleGNoYW5nZSBhbmQgdGhlIGNsZWFyX2ZpeG1hcCgpLlxcbitcXHQgKlxcbitcXHQgKiBOb3RlIHRoYXQgd2UgZG8gbm90IGNhcmUgYWJvdXQgdGhlIFRMQkkgbnVraW5nIHRoZSBmaXhtYXAgYmVoaW5kXFxuK1xcdCAqIHRoZSBiYWNrIG9mIGFuIHJ1bm5pbmcgdmNwdS4gVGhpcyB3aWxsIG9ubHkgZ2VuZXJhdGUgYSBmYXVsdCBhbmRcXG4rXFx0ICogcG9zc2libHkgYSByZXRyYW5zbGF0aW9uLlxcbitcXHQgKi9cXG4rXFx0aWYgKHVubWFwX2wxX3ZuY3IodmNwdS1cXHUwMDNlYXJjaC52bmNyX3RsYikgPT0gLTEpXFxuK1xcdFxcdGNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcChzbXBfcHJvY2Vzc29yX2lkKCkpKTtcXG4gXFx0aG9zdF9kYXRhX2NsZWFyX2ZsYWcoTDFfVk5DUl9NQVBQRUQpO1xcbi1cXHRhdG9taWNfZGVjKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gudm5jcl9tYXBfY291bnQpO1xcbiB9XFxuIFxcbiB2b2lkIGt2bV92Y3B1X3B1dF9od19tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbkBAIC05NzgsMTEgKzEwMTcsMjYgQEAgdTE2IGdldF9hc2lkX2J5X3JlZ2ltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0gdHJhbnNfcmVnaW1lIHJlZ2ltZSlcXG4gXFx0cmV0dXJuIGFzaWQ7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGludmFsaWRhdGVfdm5jcihzdHJ1Y3Qgdm5jcl90bGIgKnZ0KVxcbitzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3Ioc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qgdm5jcl90bGIgKnZ0KVxcbiB7XFxuK1xcdEJVR19PTighdnQtXFx1MDAzZXZhbGlkKTtcXG4gXFx0dnQtXFx1MDAzZXZhbGlkID0gZmFsc2U7XFxuLVxcdGlmICh2dC1cXHUwMDNlY3B1ICE9IC0xKVxcbi1cXHRcXHRjbGVhcl9maXhtYXAodm5jcl9maXhtYXAodnQtXFx1MDAzZWNwdSkpO1xcbitcXHR1bm1hcF9sMV92bmNyKHZ0KTtcXG4rXFx0YXRvbWljX2RlYyhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnZuY3JfdGxiX2NvdW50KTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgdm5jcl90bGJfaW50ZXJzZWN0cyhzdHJ1Y3Qgdm5jcl90bGIgKnZ0LCB1NjQgYWRkcixcXG4rXFx0XFx0XFx0XFx0dTY0IHNjb3BlX3N0YXJ0LCB1NjQgc2NvcGVfc2l6ZSlcXG4re1xcbitcXHR1NjQgdGxiX3NpemUsIHRsYl9zdGFydCwgdGxiX2VuZCwgc2NvcGVfZW5kO1xcbitcXG4rXFx0dGxiX3NpemUgPSB0dGxfdG9fc2l6ZShwZ3NoaWZ0X2xldmVsX3RvX3R0bCh2dC1cXHUwMDNld2kucGdzaGlmdCwgdnQtXFx1MDAzZXdyLmxldmVsKSk7XFxuK1xcbitcXHR0bGJfc3RhcnQgPSBhZGRyIFxcdTAwMjYgfih0bGJfc2l6ZSAtIDEpO1xcbitcXHR0bGJfZW5kID0gdGxiX3N0YXJ0ICsgdGxiX3NpemUgLSAxO1xcbitcXHRzY29wZV9lbmQgPSBzY29wZV9zdGFydCArIHNjb3BlX3NpemUgLSAxO1xcbitcXG4rXFx0cmV0dXJuICEodGxiX2VuZCBcXHUwMDNjIHNjb3BlX3N0YXJ0IHx8IHRsYl9zdGFydCBcXHUwMDNlIHNjb3BlX2VuZCk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTEwMDcsMTkgKzEwNjEsMTUgQEAgc3RhdGljIHZvaWQga3ZtX2ludmFsaWRhdGVfdm5jcl9pcGEoc3RydWN0IGt2bSAqa3ZtLCB1NjQgc3RhcnQsIHU2NCBlbmQpXFxuIFxcdGlmICgha3ZtX2hhc19mZWF0KGt2bSwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYyX09OTFkpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSkge1xcbi1cXHRcXHR1NjQgaXBhX3N0YXJ0LCBpcGFfZW5kLCBpcGFfc2l6ZTtcXG4tXFxuLVxcdFxcdGlwYV9zaXplID0gdHRsX3RvX3NpemUocGdzaGlmdF9sZXZlbF90b190dGwodnQtXFx1MDAzZXdpLnBnc2hpZnQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICB2dC1cXHUwMDNld3IubGV2ZWwpKTtcXG4tXFx0XFx0aXBhX3N0YXJ0ID0gdnQtXFx1MDAzZXdyLnBhIFxcdTAwMjYgfihpcGFfc2l6ZSAtIDEpO1xcbi1cXHRcXHRpcGFfZW5kID0gaXBhX3N0YXJ0ICsgaXBhX3NpemU7XFxuLVxcbi1cXHRcXHRpZiAoaXBhX2VuZCBcXHUwMDNjPSBzdGFydCB8fCBpcGFfc3RhcnQgXFx1MDAzZT0gZW5kKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdGludmFsaWRhdGVfdm5jcih2dCk7XFxuLVxcdH1cXG4rXFx0LypcXG4rXFx0ICogTm90ZSB0aGF0IGludmFsaWRhdGluZyB0aGUgVk5DUiBvbiB0aGUgYmFjayBvZiBhbiBNTVUgbm90aWZpZXJcXG4rXFx0ICogZG9lc24ndCByZXF1aXJlIG1lc3Npbmcgd2l0aCB0aGUgaW52YWxpZGF0aW9uIGNvdW50ZXIgZm9yIGFcXG4rXFx0ICogcGFyYWxsZWwgd2Fsay4gVGhlIG5vdGlmaWVyIGl0c2VsZiB3aWxsIGhhdmUgYnVtcGVkIHRoZSBjb3VudGVyLFxcbitcXHQgKiBtYWtpbmcgc3VyZSB3ZSByZXdhbGsuXFxuK1xcdCAqL1xcbitcXHRrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSlcXG4rXFx0XFx0aWYgKHZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LVxcdTAwM2V3ci5wYSwgc3RhcnQsIGVuZCAtIHN0YXJ0KSlcXG4rXFx0XFx0XFx0aW52YWxpZGF0ZV92bmNyKGt2bSwgdnQpO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgczFlMl90bGJpX3Njb3BlIHtcXG5AQCAtMTA0NCwyOSArMTA5NCwyOSBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3JfdmEoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuIFxcbi1cXHRrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSkge1xcbi1cXHRcXHR1NjQgdmFfc3RhcnQsIHZhX2VuZCwgdmFfc2l6ZTtcXG4tXFxuLVxcdFxcdHZhX3NpemUgPSB0dGxfdG9fc2l6ZShwZ3NoaWZ0X2xldmVsX3RvX3R0bCh2dC1cXHUwMDNld2kucGdzaGlmdCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgdnQtXFx1MDAzZXdyLmxldmVsKSk7XFxuLVxcdFxcdHZhX3N0YXJ0ID0gdnQtXFx1MDAzZWd2YSBcXHUwMDI2IH4odmFfc2l6ZSAtIDEpO1xcbi1cXHRcXHR2YV9lbmQgPSB2YV9zdGFydCArIHZhX3NpemU7XFxuK1xcdC8qXFxuK1xcdCAqIFdlIG1pZ2h0IGJlIHBlcmZvcm1pbmcgYSBwYXJhbGxlbCBTMSB3YWxrLCBzbyBidW1wIHVwIHRoZVxcbitcXHQgKiBpbnZhbGlkYXRpb24gY291bnRlciBldmVuIGluIHRoZSBhYnNlbmNlIG9mIGFuIGFjdHVhbCBWTkNSIFRMQlxcbitcXHQgKiBpbnZhbGlkYXRpb24sIGFzIHRoaXMgY291bGQgaW5kaWNhdGUgdGhhdCB0aGUgZ3Vlc3QgaGFzIGdvbmVcXG4rXFx0ICogdGhyb3VnaCBhIEJCTSBzZXF1ZW5jZS5cXG4rXFx0ICovXFxuK1xcdGt2bS1cXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxKys7XFxuK1xcdHNtcF93bWIoKTtcXG4gXFxuK1xcdGt2bV9mb3JfZWFjaF92bmNyX3RsYihpLCB2Y3B1LCB2dCwga3ZtKSB7XFxuIFxcdFxcdHN3aXRjaCAoc2NvcGUtXFx1MDAzZXR5cGUpIHtcXG4gXFx0XFx0Y2FzZSBUTEJJX0FMTDpcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRcXHRjYXNlIFRMQklfVkE6XFxuLVxcdFxcdFxcdGlmICh2YV9lbmQgXFx1MDAzYz0gc2NvcGUtXFx1MDAzZXZhIHx8XFxuLVxcdFxcdFxcdCAgICB2YV9zdGFydCBcXHUwMDNlPSAoc2NvcGUtXFx1MDAzZXZhICsgc2NvcGUtXFx1MDAzZXNpemUpKVxcbitcXHRcXHRcXHRpZiAoIXZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LVxcdTAwM2VndmEsIHNjb3BlLVxcdTAwM2V2YSwgc2NvcGUtXFx1MDAzZXNpemUpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0aWYgKHZ0LVxcdTAwM2V3ci5uRyBcXHUwMDI2XFx1MDAyNiB2dC1cXHUwMDNld3IuYXNpZCAhPSBzY29wZS1cXHUwMDNlYXNpZClcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0Y2FzZSBUTEJJX1ZBQTpcXG4tXFx0XFx0XFx0aWYgKHZhX2VuZCBcXHUwMDNjPSBzY29wZS1cXHUwMDNldmEgfHxcXG4tXFx0XFx0XFx0ICAgIHZhX3N0YXJ0IFxcdTAwM2U9IChzY29wZS1cXHUwMDNldmEgKyBzY29wZS1cXHUwMDNlc2l6ZSkpXFxuK1xcdFxcdFxcdGlmICghdm5jcl90bGJfaW50ZXJzZWN0cyh2dCwgdnQtXFx1MDAzZWd2YSwgc2NvcGUtXFx1MDAzZXZhLCBzY29wZS1cXHUwMDNlc2l6ZSkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuQEAgLTEwNzYsNyArMTEyNiw3IEBAIHN0YXRpYyB2b2lkIGludmFsaWRhdGVfdm5jcl92YShzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRpbnZhbGlkYXRlX3ZuY3IodnQpO1xcbitcXHRcXHRpbnZhbGlkYXRlX3ZuY3Ioa3ZtLCB2dCk7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMTEyNiw4ICsxMTc2LDYgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9zMV90bGJpX3JhbmdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGluc3QsIHU2NCB2YWwsXFxuIFxcdGNhc2UgT1BfVExCSV9WQUxFMU9TTlhTOlxcbiBcXHRcXHRzY29wZS1cXHUwMDNldHlwZSA9IFRMQklfVkE7XFxuIFxcdFxcdHNjb3BlLVxcdTAwM2VzaXplID0gdHRsX3RvX3NpemUoRklFTERfR0VUKFRMQklfVFRMX01BU0ssIHZhbCkpO1xcbi1cXHRcXHRpZiAoIXNjb3BlLVxcdTAwM2VzaXplKVxcbi1cXHRcXHRcXHRzY29wZS1cXHUwMDNlc2l6ZSA9IFNaXzFHO1xcbiBcXHRcXHRzY29wZS1cXHUwMDNldmEgPSB0bGJpX3ZhX3MxX3RvX3ZhKHZhbCkgXFx1MDAyNiB+KHNjb3BlLVxcdTAwM2VzaXplIC0gMSk7XFxuIFxcdFxcdHNjb3BlLVxcdTAwM2Vhc2lkID0gRklFTERfR0VUKFRMQklSX0FTSURfTUFTSywgdmFsKTtcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTExNTQsOCArMTIwMiw2IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfczFfdGxiaV9yYW5nZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnN0LCB1NjQgdmFsLFxcbiBcXHRjYXNlIE9QX1RMQklfVkFBTEUxT1NOWFM6XFxuIFxcdFxcdHNjb3BlLVxcdTAwM2V0eXBlID0gVExCSV9WQUE7XFxuIFxcdFxcdHNjb3BlLVxcdTAwM2VzaXplID0gdHRsX3RvX3NpemUoRklFTERfR0VUKFRMQklfVFRMX01BU0ssIHZhbCkpO1xcbi1cXHRcXHRpZiAoIXNjb3BlLVxcdTAwM2VzaXplKVxcbi1cXHRcXHRcXHRzY29wZS1cXHUwMDNlc2l6ZSA9IFNaXzFHO1xcbiBcXHRcXHRzY29wZS1cXHUwMDNldmEgPSB0bGJpX3ZhX3MxX3RvX3ZhKHZhbCkgXFx1MDAyNiB+KHNjb3BlLVxcdTAwM2VzaXplIC0gMSk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIE9QX1RMQklfUlZBRTI6XFxuQEAgLTEzMTYsMTMgKzEzNjIsMjAgQEAgdm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsKHN0cnVjdCBrdm0gKmt2bSlcXG4gICogICBpbnRlcnNlY3RzIHdpdGggdGhlIFRMQkkgcmVxdWVzdCwgaW52YWxpZGF0ZSBpdCwgYW5kIHVubWFwIHRoZSBwYWdlXFxuICAqICAgZnJvbSB0aGUgZml4bWFwLiBCZWNhdXNlIHdlIG5lZWQgdG8gbG9vayBhdCBhbGwgdGhlIHZjcHUtcHJpdmF0ZSBUTEJzLFxcbiAgKiAgIHRoaXMgcmVxdWlyZXMgc29tZSB3aWRlLXJhbmdpbmcgbG9ja2luZyB0byBlbnN1cmUgdGhhdCBub3RoaW5nIHJhY2VzXFxuLSAqICAgYWdhaW5zdCBpdC4gVGhpcyBtYXkgcmVxdWlyZSBzb21lIHJlZmNvdW50aW5nIHRvIGF2b2lkIHRoZSBzZWFyY2ggd2hlblxcbi0gKiAgIG5vIHN1Y2ggVExCIGlzIHByZXNlbnQuXFxuKyAqICAgYWdhaW5zdCBpdC4gVGhpcyByZXF1aXJlcyBzb21lIHJlZmNvdW50aW5nIHRvIGF2b2lkIHRoZSBzZWFyY2ggd2hlblxcbisgKiAgIG5vIHN1Y2ggVExCIGlzIHByZXNlbnQgKHNlZSBiZWxvdykuXFxuICAqXFxuICAqIC0gT24gTU1VIG5vdGlmaWVycywgd2UgbXVzdCBpbnZhbGlkYXRlIG91ciBUTEIgaW4gYSBzaW1pbGFyIHdheSwgYnV0XFxuICAqICAgbG9va2luZyBhdCB0aGUgSVBBIGluc3RlYWQuIFRoZSBmdW5ueSBwYXJ0IGlzIHRoYXQgdGhlcmUgbWF5IG5vdCBiZSBhXFxuICAqICAgc3RhZ2UtMiBtYXBwaW5nIGZvciB0aGlzIHBhZ2UgaWYgTDEgaGFzbid0IGFjY2Vzc2VkIGl0IHVzaW5nIExEL1NUXFxuICAqICAgaW5zdHJ1Y3Rpb25zLlxcbisgKlxcbisgKiAtIHZuY3JfdGxiX2NvdW50IHRyYWNrcyB0aGUgbnVtYmVyIG9mIHZhbGlkIFZOQ1IgVExCcyBWTS13aWRlLiBUaGlzIGlzbid0XFxuKyAqICAgdGhlIG51bWJlciBvZiAqbWFwcGVkKiBMMSBWTkNSIHBhZ2VzLCB3aGljaCBpcyBsaWtlbHkgYmUgYSBzdWJzZXQgKGFuZFxcbisgKiAgIGJ5IGRlZmluaXRpb24sIGEgVExCSSBoYW5kbGVkIGZyb20gTDEgcnVucyB3aXRoIHRoZSBjYW5vbmljYWwgVk5DUlxcbisgKiAgIHBhZ2UsIG5vdCB0aGUgTDEncykuIFRoZSBpbm5lcm1vc3QgdHJhcCBoYW5kbGluZyBjb2RlIGNoZWNrcyB0aGlzIHRvXFxuKyAqICAgZmluZCBvdXQgd2hldGhlciB0byByZXR1cm4gdG8gdGhlIGd1ZXN0IEFTQVAgKG5vIEwxIFRMQnMpIG9yIHRvIHZpc2l0XFxuKyAqICAgdGhpcyBwYXJ0IG9mIHRoZSB3b3JsZCBmb3Igc29tZSBleHRyYSBpbnZhbGlkYXRpb24gd29yay5cXG4gICovXFxuIFxcbiBpbnQga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbkBAIC0xMzc3LDcgKzE0MzAsOCBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXFxuIFxcdCAqL1xcbiBcXHRzY29wZWRfZ3VhcmQod3JpdGVfbG9jaywgXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlbW11X2xvY2spIHtcXG4gXFx0XFx0dGhpc19jcHVfcmVzZXRfdm5jcl9maXhtYXAodmNwdSk7XFxuLVxcdFxcdHZ0LVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbitcXHRcXHRpZiAodnQtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRcXHRpbnZhbGlkYXRlX3ZuY3IodmNwdS1cXHUwMDNla3ZtLCB2dCk7XFxuIFxcbiBcXHRcXHR2dC1cXHUwMDNld2kgPSAoc3RydWN0IHMxX3dhbGtfaW5mbykge1xcbiBcXHRcXHRcXHQucmVnaW1lXFx0PSBUUl9FTDIwLFxcbkBAIC0xMzkxLDE1ICsxNDQ1LDE1IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcXG4gXFxuIFxcdHZhID0gIHJlYWRfdm5jcl9lbDIodmNwdSk7XFxuIFxcbitcXHRtbXVfc2VxID0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XFxuK1xcdHNtcF9ybWIoKTtcXG4rXFxuIFxcdHJldCA9IF9fa3ZtX3RyYW5zbGF0ZV92YSh2Y3B1LCBcXHUwMDI2dnQtXFx1MDAzZXdpLCBcXHUwMDI2dnQtXFx1MDAzZXdyLCB2YSk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHR3cml0ZV9mYXVsdCA9IGt2bV9pc193cml0ZV9mYXVsdCh2Y3B1KTtcXG4gXFxuLVxcdG1tdV9zZXEgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcXG4tXFx0c21wX3JtYigpO1xcbi1cXG4gXFx0Z2ZuID0gdnQtXFx1MDAzZXdyLnBhIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIFxcdG1lbXNsb3QgPSBnZm5fdG9fbWVtc2xvdCh2Y3B1LVxcdTAwM2Vrdm0sIGdmbik7XFxuIFxcdGlmICghbWVtc2xvdCkge1xcbkBAIC0xNDQ3LDcgKzE1MDEsNyBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXFxuIFxcdFxcdHZ0LVxcdTAwM2VocGEgPSBwZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVDtcXG4gXFx0XFx0dnQtXFx1MDAzZWhwYV93cml0YWJsZSA9IHdyaXRhYmxlO1xcbiBcXHRcXHR2dC1cXHUwMDNldmFsaWQgPSB0cnVlO1xcbi1cXHRcXHR2dC1cXHUwMDNlY3B1ID0gLTE7XFxuK1xcdFxcdGF0b21pY19zZXQoXFx1MDAyNnZ0LVxcdTAwM2VjcHUsIC0xKTtcXG4gXFxuIFxcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9NQVBfTDFfVk5DUl9FTDIsIHZjcHUpO1xcbiBcXHRcXHRrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2UodmNwdS1cXHUwMDNla3ZtLCBwYWdlLCBmYWxzZSwgdnQtXFx1MDAzZXdyLnB3IFxcdTAwMjZcXHUwMDI2IHZ0LVxcdTAwM2VocGFfd3JpdGFibGUpO1xcbkBAIC0xNTAyLDcgKzE1NTYsMjAgQEAgaW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBTcGVjdWxhdGl2ZWx5IGluY3JlbWVudCB0aGUgVExCIGNvdW50IHRvIG1ha2Ugc3VyZSBjb25jdXJyZW50XFxuK1xcdCAqIFRMQklzIHdpbGwgdGFrZSB0aGUgc2xvdyBwYXRoLCBhbmQgd2lsbCBpbnRlcmFjdCB3aXRoIHRoZSByZXRyeVxcbitcXHQgKiBtZWNoYW5pc20uIERyb3AgaXQgYWdhaW4gb24gZXJyb3IuXFxuK1xcdCAqL1xcbitcXHRhdG9taWNfaW5jKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gudm5jcl90bGJfY291bnQpO1xcbitcXHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xcbitcXG4gXFx0cmV0ID0ga3ZtX3RyYW5zbGF0ZV92bmNyKHZjcHUsIFxcdTAwMjZpc19nbWVtKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcXG4rXFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnZuY3JfdGxiX2NvdW50KTtcXG4rXFx0fVxcbitcXG4gXFx0c3dpdGNoIChyZXQpIHtcXG4gXFx0Y2FzZSAtRUFHQUlOOlxcbiBcXHRcXHQvKiBMZXQncyB0cnkgYWdhaW4uLi4gKi9cXG5AQCAtMTU2OCwxNCArMTYzNSwxNiBAQCBzdGF0aWMgdm9pZCBrdm1fbWFwX2wxX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAoIXZ0LVxcdTAwM2V2YWxpZClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0LyogV2UgY2FjaGUgdGhlIE1NVSBzdGF0ZSBpbiB0aGUgVExCLiBDaGVjayB0aGF0IGl0IG1hdGNoZXMuICovXFxuK1xcdGlmICghISh2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCBTQ1RMUl9FTDIpIFxcdTAwMjYgU0NUTFJfRUx4X00pICE9IHMxX3dhbGtfdHJhbnNsYXRlZChcXHUwMDI2dnQtXFx1MDAzZXdyKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0aWYgKHJlYWRfdm5jcl9lbDIodmNwdSkgIT0gdnQtXFx1MDAzZWd2YSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0aWYgKHZ0LVxcdTAwM2V3ci5uRyBcXHUwMDI2XFx1MDAyNiBnZXRfYXNpZF9ieV9yZWdpbWUodmNwdSwgVFJfRUwyMCkgIT0gdnQtXFx1MDAzZXdyLmFzaWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdHZ0LVxcdTAwM2VjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XFxuLVxcbiBcXHRpZiAodnQtXFx1MDAzZWhwYV93cml0YWJsZSBcXHUwMDI2XFx1MDAyNiB2dC1cXHUwMDNld3IucHcgXFx1MDAyNlxcdTAwMjYgdnQtXFx1MDAzZXdyLnByKVxcbiBcXHRcXHRwcm90ID0gUEFHRV9LRVJORUw7XFxuIFxcdGVsc2UgaWYgKHZ0LVxcdTAwM2V3ci5wcilcXG5AQCAtMTU5MCw5ICsxNjU5LDkgQEAgc3RhdGljIHZvaWQga3ZtX21hcF9sMV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0ICogRklYTUU6IFdPIGRvZXNuJ3Qgd29yayBhdCBhbGwsIG5lZWQgUE9FIHN1cHBvcnQgaW4gdGhlIGtlcm5lbC5cXG4gXFx0ICovXFxuIFxcdGlmIChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoUEFHRV9OT05FKSkge1xcbi1cXHRcXHRfX3NldF9maXhtYXAodm5jcl9maXhtYXAodnQtXFx1MDAzZWNwdSksIHZ0LVxcdTAwM2VocGEsIHByb3QpO1xcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZ2dC1cXHUwMDNlY3B1LCBzbXBfcHJvY2Vzc29yX2lkKCkpO1xcbitcXHRcXHRfX3NldF9maXhtYXAodm5jcl9maXhtYXAoYXRvbWljX3JlYWQoXFx1MDAyNnZ0LVxcdTAwM2VjcHUpKSwgdnQtXFx1MDAzZWhwYSwgcHJvdCk7XFxuIFxcdFxcdGhvc3RfZGF0YV9zZXRfZmxhZyhMMV9WTkNSX01BUFBFRCk7XFxuLVxcdFxcdGF0b21pY19pbmMoXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC52bmNyX21hcF9jb3VudCk7XFxuIFxcdH1cXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcXG5pbmRleCA1ZDVjNTc5ZDQ1NzkwLi43OTdlODg4YmY5Mzk0IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXFxuQEAgLTQwNTcsNiArNDA1Nyw3IEBAIHN0YXRpYyBib29sIGhhbmRsZV9yaXBhczJlMWlzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxcbiBcXHR1MzIgc3lzX2VuY29kaW5nID0gc3lzX2luc24ocC1cXHUwMDNlT3AwLCBwLVxcdTAwM2VPcDEsIHAtXFx1MDAzZUNSbiwgcC1cXHUwMDNlQ1JtLCBwLVxcdTAwM2VPcDIpO1xcbiBcXHR1NjQgdnR0YnIgPSB2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCBWVFRCUl9FTDIpO1xcbiBcXHR1NjQgYmFzZSwgcmFuZ2U7XFxuK1xcdGludCBwYV9iaXRzO1xcbiBcXG4gXFx0aWYgKCFrdm1fc3VwcG9ydGVkX3RsYmlfaXBhczJfb3AodmNwdSwgc3lzX2VuY29kaW5nKSlcXG4gXFx0XFx0cmV0dXJuIHVuZGVmX2FjY2Vzcyh2Y3B1LCBwLCByKTtcXG5AQCAtNDA2OCw2ICs0MDY5LDE2IEBAIHN0YXRpYyBib29sIGhhbmRsZV9yaXBhczJlMWlzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxcbiBcXHQgKi9cXG4gXFx0YmFzZSA9IGRlY29kZV9yYW5nZV90bGJpKHAtXFx1MDAzZXJlZ3ZhbCwgXFx1MDAyNnJhbmdlLCBOVUxMKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIElnbm9yZSBUTEJJcyB0aGF0IHN0YXJ0IG91dCBvZiBQQV9iaXRzIHJhbmdlLCBhbmQgY2FwIHRoZVxcbitcXHQgKiBpbnZhbGlkYXRpb24gdG8gdGhlIFtiYXNlOmJpdChQQV9iaXRzKV0gaW50ZXJ2YWwuXFxuK1xcdCAqL1xcbitcXHRwYV9iaXRzID0ga3ZtX2dldF9wYV9iaXRzKHZjcHUtXFx1MDAzZWt2bSk7XFxuK1xcdGlmIChmbHM2NChiYXNlKSBcXHUwMDNlIHBhX2JpdHMpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0cmFuZ2UgPSBtaW4ocmFuZ2UsIEJJVF9VTEwocGFfYml0cykgLSBiYXNlKTtcXG4rXFxuIFxcdGt2bV9zMl9tbXVfaXRlcmF0ZV9ieV92bWlkKHZjcHUtXFx1MDAzZWt2bSwgZ2V0X3ZtaWQodnR0YnIpLFxcbiBcXHRcXHRcXHRcXHQgICBcXHUwMDI2KHVuaW9uIHRsYmlfaW5mbykge1xcbiBcXHRcXHRcXHRcXHRcXHQgICAucmFuZ2UgPSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjA0OjA3Ljc5ODc2NzgxOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY2NzE1Nzk5MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9oYW5kbGVfdm5jcl9hYm9ydFwiLFxuICAgIFwia3ZtX3dhbGtfbmVzdGVkX3MyXCIsXG4gICAgXCJjb21wdXRlX3RsYl9pbnZhbF9yYW5nZVwiLFxuICAgIFwia3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJcIixcbiAgICBcImt2bV92Y3B1X3B1dF9od19tbXVcIixcbiAgICBcImt2bV92Y3B1X2xvYWRfaHdfbW11XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIEFSTTY0IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiBWTkNSIFRMQnMsIG5lc3RlZCBTMiB3YWxrcywgYW5kIFRMQiBpbnZhbGlkYXRpb24gcmFuZ2VzLiBUaGVzZSBhcmUgY29yZSB2aXJ0dWFsaXphdGlvbiBmZWF0dXJlcyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSBndWVzdCBleGVjdXRpb24gYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRiMzU2ZjhhNGE4MTIxNTA1YmMxMmRiZWEwNGU5N2Q1NTBiMzU1YTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDEwOjA0OjA0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCBiYWUyYzRmOTJlZjVjLi4xMDg5NjZhOWRiMTJiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC00MTEsOCArNDExLDggQEAgc3RydWN0IGt2bV9hcmNoIHtcbiBcdC8qIE1hc2tzIGZvciBWTkNSLWJhY2tlZCBhbmQgZ2VuZXJhbCBFTDIgc3lzcmVncyAqL1xuIFx0c3RydWN0IGt2bV9zeXNyZWdfbWFza3NcdCpzeXNyZWdfbWFza3M7XG4gXG4tXHQvKiBDb3VudCB0aGUgbnVtYmVyIG9mIFZOQ1JfRUwyIGN1cnJlbnRseSBtYXBwZWQgKi9cbi1cdGF0b21pY190IHZuY3JfbWFwX2NvdW50O1xuK1x0LyogQ291bnQgdGhlIG51bWJlciBvZiBWTkNSX0VMMiBUTEJzICovXG4rXHRhdG9taWNfdCB2bmNyX3RsYl9jb3VudDtcbiBcbiBcdC8qXG4gXHQgKiBGb3IgYW4gdW50cnVzdGVkIGhvc3QgVk0sICdwa3ZtLmhhbmRsZScgaXMgdXNlZCB0byBsb29rdXBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oXG5pbmRleCAwMTJkNzExMDM0ZDE3Li5jODNiZTZkMGU3OWFjIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oXG5AQCAtMjkxLDYgKzI5MSwxMyBAQCBzdGF0aWMgaW5saW5lIHU2NCBkZWNvZGVfcmFuZ2VfdGxiaSh1NjQgdmFsLCB1NjQgKnJhbmdlLCB1MTYgKmFzaWQpXG4gXG4gXHRiYXNlXHQ9ICh2YWwgXHUwMDI2IEdFTk1BU0soMzYsIDApKSBcdTAwM2NcdTAwM2Mgc2hpZnQ7XG4gXG4rXHQvKlxuK1x0ICogV2Ugb25seSBkZWFsIHdpdGggYXQgbW9zdCA0OGJpdCBWQS9JUEEsIHNvIDQ4IGlzIHdoZXJlIHdlXG4rXHQgKiBzaWduLWV4dGVuZCBmcm9tLiBTaG91bGQgd2Ugc3VwcG9ydCBGRUFUX0x7VlB9QSogYXQgc29tZSBwb2ludCxcbitcdCAqIHRoaXMgd2lsbCBuZWVkIHRvIGJlIHJldmlzaXRlZC5cbitcdCAqL1xuK1x0YmFzZVx0PSAodTY0KXNpZ25fZXh0ZW5kNjQoYmFzZSwgNDgpO1xuK1xuIFx0aWYgKGFzaWQpXG4gXHRcdCphc2lkID0gRklFTERfR0VUKFRMQklSX0FTSURfTUFTSywgdmFsKTtcbiBcbkBAIC0zODgsNiArMzk1LDggQEAgc3RydWN0IHMxX3dhbGtfcmVzdWx0IHtcbiBcdGJvb2xcdGZhaWxlZDtcbiB9O1xuIFxuKyNkZWZpbmUgUzFfTU1VX0RJU0FCTEVEXHRcdCgtMTI3KVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBmYWlsX3MxX3dhbGsoc3RydWN0IHMxX3dhbGtfcmVzdWx0ICp3ciwgdTggZnN0LCBib29sIHMxcHR3KVxuIHtcbiBcdHdyLVx1MDAzZWZzdFx0XHQ9IGZzdDtcbkBAIC0zOTYsNiArNDA1LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmYWlsX3MxX3dhbGsoc3RydWN0IHMxX3dhbGtfcmVzdWx0ICp3ciwgdTggZnN0LCBib29sIHMxcHR3KVxuIFx0d3ItXHUwMDNlZmFpbGVkXHQ9IHRydWU7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzMV93YWxrX3RyYW5zbGF0ZWQoc3RydWN0IHMxX3dhbGtfcmVzdWx0ICp3cilcbit7XG4rXHRyZXR1cm4gd3ItXHUwMDNlbGV2ZWwgIT0gUzFfTU1VX0RJU0FCTEVEO1xuK31cbitcbiBpbnQgX19rdm1fdHJhbnNsYXRlX3ZhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHMxX3dhbGtfaW5mbyAqd2ksXG4gXHRcdCAgICAgICBzdHJ1Y3QgczFfd2Fsa19yZXN1bHQgKndyLCB1NjQgdmEpO1xuIGludCBfX2t2bV9maW5kX3MxX2Rlc2NfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmEsIHU2NCBpcGEsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXQuYyBiL2FyY2gvYXJtNjQva3ZtL2F0LmNcbmluZGV4IDY0MGYyZGMwMGE4YmEuLjA5MjY0MjZiODc5ODkgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9hdC5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9hdC5jXG5AQCAtMTEsOCArMTEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vbHN1aS5oXHUwMDNlXG4gXG4tI2RlZmluZSBTMV9NTVVfRElTQUJMRURcdFx0KC0xMjcpXG4tXG4gc3RhdGljIGludCBnZXRfaWFfc2l6ZShzdHJ1Y3QgczFfd2Fsa19pbmZvICp3aSlcbiB7XG4gXHRyZXR1cm4gNjQgLSB3aS1cdTAwM2V0eHN6O1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jXG5pbmRleCBiYmU5Y2ViZDNkOWQ1Li5mYTc3NmIxOGEzMmNhIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xuQEAgLTQyNCwxMSArNDI0LDE1IEBAIHN0YXRpYyBib29sIGt2bV9oeXBfaGFuZGxlX3RsYmlfZWwyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpleGl0X2NvZGUpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qXG4tXHQgKiBJZiB3ZSBoYXZlIHRvIGNoZWNrIGZvciBhbnkgVk5DUiBtYXBwaW5nIGJlaW5nIGludmFsaWRhdGVkLFxuLVx0ICogZ28gYmFjayB0byB0aGUgc2xvdyBwYXRoIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuXG4rXHQgKiBJZiB3ZSBoYXZlIHRvIGNoZWNrIGZvciBhbnkgVk5DUiBUTEIgYmVpbmcgaW52YWxpZGF0ZWQsIGdvIGJhY2tcbitcdCAqIHRvIHRoZSBzbG93IHBhdGggZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy5cbitcdCAqXG4rXHQgKiBUaGUgc3luY2hyb25pc2F0aW9uIGJldHdlZW0gVExCSSBhbmQgd2FsayBpcyBwcm92aWRlZCBieSB0aGVcbitcdCAqIHNwZWN1bGF0aXZlIGluY3JlbWVudCBvZiB0aGUgVExCIGNvdW50ZXIgb24gd2FsaywgYW5kIHRoZVxuK1x0ICogaW52YWxpZGF0aW9uIGNvdW50ZXIuIFllcywgdGhpcyBpcyBmaWRkbHkuXG4gXHQgKi9cbiBcdGlmICh2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpIFx1MDAyNlx1MDAyNiB2Y3B1X2VsMl90Z2VfaXNfc2V0KHZjcHUpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGF0b21pY19yZWFkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm5jcl9tYXBfY291bnQpKVxuK1x0ICAgIGF0b21pY19yZWFkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm5jcl90bGJfY291bnQpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRfX2t2bV9za2lwX2luc3RyKHZjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbmluZGV4IGRmYjk2ZWRiZGM0M2MuLjIwYWY5NDE5N2E4YTcgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbkBAIC0yNyw3ICsyNyw3IEBAIHN0cnVjdCB2bmNyX3RsYiB7XG4gXHRib29sXHRcdFx0aHBhX3dyaXRhYmxlO1xuIFxuIFx0LyogLTEgd2hlbiBub3QgbWFwcGVkIG9uIGEgQ1BVICovXG4tXHRpbnRcdFx0XHRjcHU7XG4rXHRhdG9taWNfdFx0XHRjcHU7XG4gXG4gXHQvKlxuIFx0ICogdHJ1ZSBpZiB0aGUgVExCIGlzIHZhbGlkLiBDYW4gb25seSBiZSBjaGFuZ2VkIHdpdGggdGhlXG5AQCAtNDgsNyArNDgsNyBAQCB2b2lkIGt2bV9pbml0X25lc3RlZChzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0a3ZtLVx1MDAzZWFyY2gubmVzdGVkX21tdXMgPSBOVUxMO1xuIFx0a3ZtLVx1MDAzZWFyY2gubmVzdGVkX21tdXNfc2l6ZSA9IDA7XG4tXHRhdG9taWNfc2V0KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZuY3JfbWFwX2NvdW50LCAwKTtcbitcdGF0b21pY19zZXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudm5jcl90bGJfY291bnQsIDApO1xuIH1cbiBcbiBzdGF0aWMgaW50IGluaXRfbmVzdGVkX3MyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUpXG5AQCAtNTA2LDcgKzUwNiw3IEBAIGludCBrdm1fd2Fsa19uZXN0ZWRfczIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBwaHlzX2FkZHJfdCBnaXBhLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGludCB0dGxfdG9fc2l6ZSh1OCB0dGwpXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX3R0bF90b19zaXplKHU4IHR0bClcbiB7XG4gXHRpbnQgbGV2ZWwgPSB0dGwgXHUwMDI2IDM7XG4gXHRpbnQgZ3JhbiA9ICh0dGwgXHUwMDNlXHUwMDNlIDIpIFx1MDAyNiAzO1xuQEAgLTU2MiwxMCArNTYyLDIyIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHRsX3RvX3NpemUodTggdHRsKVxuIFx0cmV0dXJuIG1heF9zaXplO1xuIH1cbiBcbi1zdGF0aWMgdTggcGdzaGlmdF9sZXZlbF90b190dGwodTE2IHNoaWZ0LCB1OCBsZXZlbClcbitzdGF0aWMgdW5zaWduZWQgaW50IHR0bF90b19zaXplKHU4IHR0bClcbit7XG4rXHRyZXR1cm4gX190dGxfdG9fc2l6ZSh0dGwpID86IFNaXzFHO1xuK31cbitcbitzdGF0aWMgdTggcGdzaGlmdF9sZXZlbF90b190dGwodTE2IHNoaWZ0LCBzOCBsZXZlbClcbiB7XG4gXHR1OCB0dGw7XG4gXG4rXHQvKlxuK1x0ICogSWYgd2UgZG9uJ3QgaGF2ZSBhIHByb3BlciBsZXZlbCwgZmFsbGJhY2sgdG8gdGhlIG1heGltdW1cbitcdCAqIHNpemUuXG4rXHQgKi9cbitcdGlmIChsZXZlbCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRzd2l0Y2goc2hpZnQpIHtcbiBcdGNhc2UgMTI6XG4gXHRcdHR0bCA9IFRMQklfVFRMX1RHXzRLO1xuQEAgLTY3Niw3ICs2ODgsMTEgQEAgdW5zaWduZWQgbG9uZyBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1NjQgdmFsKVxuIFx0XHR0dGwgPSBnZXRfZ3Vlc3RfbWFwcGluZ190dGwobW11LCBhZGRyKTtcbiBcdH1cbiBcbi1cdG1heF9zaXplID0gdHRsX3RvX3NpemUodHRsKTtcbitcdC8qXG4rXHQgKiBEb24ndCB1c2UgdGhlIGRlZmF1bHQgMUdCIGZhbGxiYWNrLCBhcyB3ZSBjYW4gYWRhcHQgdG8gdGhlXG4rXHQgKiBtYXggbWFwcGluZyBzaXplIHdlIGFsbG93IGF0IFMyLlxuK1x0ICovXG4rXHRtYXhfc2l6ZSA9IF9fdHRsX3RvX3NpemUodHRsKTtcbiBcbiBcdGlmICghbWF4X3NpemUpIHtcbiBcdFx0LyogQ29tcHV0ZSB0aGUgbWF4aW11bSBleHRlbnQgb2YgdGhlIGludmFsaWRhdGlvbiAqL1xuQEAgLTg3OSwxOCArODk1LDQxIEBAIHZvaWQga3ZtX3ZjcHVfbG9hZF9od19tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0fVxuIH1cbiBcbisvKlxuKyAqIFVubWFwcGluZyBhbiBMMSBWTkNSIGNhbiBoYXBwZW4gY29uY3VycmVudGx5IHdpdGhvdXQgdGhlIG1tdSBsb2NrIGJlaW5nXG4rICogZWZmZWN0aXZlICh2Y3B1X3B1dCgpIHZzIFRMQkkgaGFuZGxpbmcpLiBUaGUgYXRvbWljX3hjaGcgYmVsb3cgZW5zdXJlc1xuKyAqIHRoYXQgb25seSBvbmUgQ1BVIHNldHMgaXQgdG8gLTEgd2hpbGUgZ2V0dGluZyBhIHZhbGlkIENQVSBudW1iZXIgYmFjay5cbisgKi9cbitzdGF0aWMgaW50IHVubWFwX2wxX3ZuY3Ioc3RydWN0IHZuY3JfdGxiICp2dClcbit7XG4rXHRpbnQgY3B1ID0gYXRvbWljX3hjaGdfcmVsYXhlZChcdTAwMjZ2dC1cdTAwM2VjcHUsIC0xKTtcbitcbitcdGlmIChjcHUgIT0gLTEpXG4rXHRcdGNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcChjcHUpKTtcbitcbitcdHJldHVybiBjcHU7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHRoaXNfY3B1X3Jlc2V0X3ZuY3JfZml4bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRpZiAoIWhvc3RfZGF0YV90ZXN0X2ZsYWcoTDFfVk5DUl9NQVBQRUQpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRCVUdfT04odmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiLVx1MDAzZWNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpO1xuIFx0QlVHX09OKGlzX2h5cF9jdHh0KHZjcHUpKTtcbiBcbi1cdGNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcCh2Y3B1LVx1MDAzZWFyY2gudm5jcl90bGItXHUwMDNlY3B1KSk7XG4tXHR2Y3B1LVx1MDAzZWFyY2gudm5jcl90bGItXHUwMDNlY3B1ID0gLTE7XG4rXHQvKlxuK1x0ICogVW5jb25kaXRpb25hbGx5IHVubWFwIHRoZSBsb2NhbCBWTkNSIGlmIHdlIGhhdmUgbG9zdCB0aGUgcmFjZVxuK1x0ICogYWdhaW5zdCBhIGNvbmN1cnJlbnQgVExCSS4gT3RoZXJ3aXNlIHdlIGNvdWxkIGVuZC11cCBydW5uaW5nXG4rXHQgKiBhbm90aGVyIHZjcHUgd2l0aCBWTkNSIHN0aWxsIG1hcHBlZCBpZiB0aGUgVExCSSB0aHJlYWQgaXNcbitcdCAqIHByZWVtcHRlZCBiZXR3ZWVuIHRoZSBleGNoYW5nZSBhbmQgdGhlIGNsZWFyX2ZpeG1hcCgpLlxuK1x0ICpcbitcdCAqIE5vdGUgdGhhdCB3ZSBkbyBub3QgY2FyZSBhYm91dCB0aGUgVExCSSBudWtpbmcgdGhlIGZpeG1hcCBiZWhpbmRcbitcdCAqIHRoZSBiYWNrIG9mIGFuIHJ1bm5pbmcgdmNwdS4gVGhpcyB3aWxsIG9ubHkgZ2VuZXJhdGUgYSBmYXVsdCBhbmRcbitcdCAqIHBvc3NpYmx5IGEgcmV0cmFuc2xhdGlvbi5cbitcdCAqL1xuK1x0aWYgKHVubWFwX2wxX3ZuY3IodmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiKSA9PSAtMSlcbitcdFx0Y2xlYXJfZml4bWFwKHZuY3JfZml4bWFwKHNtcF9wcm9jZXNzb3JfaWQoKSkpO1xuIFx0aG9zdF9kYXRhX2NsZWFyX2ZsYWcoTDFfVk5DUl9NQVBQRUQpO1xuLVx0YXRvbWljX2RlYyhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZuY3JfbWFwX2NvdW50KTtcbiB9XG4gXG4gdm9pZCBrdm1fdmNwdV9wdXRfaHdfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC05NzgsMTEgKzEwMTcsMjYgQEAgdTE2IGdldF9hc2lkX2J5X3JlZ2ltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0gdHJhbnNfcmVnaW1lIHJlZ2ltZSlcbiBcdHJldHVybiBhc2lkO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3Ioc3RydWN0IHZuY3JfdGxiICp2dClcbitzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3Ioc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qgdm5jcl90bGIgKnZ0KVxuIHtcbitcdEJVR19PTighdnQtXHUwMDNldmFsaWQpO1xuIFx0dnQtXHUwMDNldmFsaWQgPSBmYWxzZTtcbi1cdGlmICh2dC1cdTAwM2VjcHUgIT0gLTEpXG4tXHRcdGNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcCh2dC1cdTAwM2VjcHUpKTtcbitcdHVubWFwX2wxX3ZuY3IodnQpO1xuK1x0YXRvbWljX2RlYyhcdTAwMjZrdm0tXHUwMDNlYXJjaC52bmNyX3RsYl9jb3VudCk7XG4rfVxuK1xuK3N0YXRpYyBib29sIHZuY3JfdGxiX2ludGVyc2VjdHMoc3RydWN0IHZuY3JfdGxiICp2dCwgdTY0IGFkZHIsXG4rXHRcdFx0XHR1NjQgc2NvcGVfc3RhcnQsIHU2NCBzY29wZV9zaXplKVxuK3tcbitcdHU2NCB0bGJfc2l6ZSwgdGxiX3N0YXJ0LCB0bGJfZW5kLCBzY29wZV9lbmQ7XG4rXG4rXHR0bGJfc2l6ZSA9IHR0bF90b19zaXplKHBnc2hpZnRfbGV2ZWxfdG9fdHRsKHZ0LVx1MDAzZXdpLnBnc2hpZnQsIHZ0LVx1MDAzZXdyLmxldmVsKSk7XG4rXG4rXHR0bGJfc3RhcnQgPSBhZGRyIFx1MDAyNiB+KHRsYl9zaXplIC0gMSk7XG4rXHR0bGJfZW5kID0gdGxiX3N0YXJ0ICsgdGxiX3NpemUgLSAxO1xuK1x0c2NvcGVfZW5kID0gc2NvcGVfc3RhcnQgKyBzY29wZV9zaXplIC0gMTtcbitcbitcdHJldHVybiAhKHRsYl9lbmQgXHUwMDNjIHNjb3BlX3N0YXJ0IHx8IHRsYl9zdGFydCBcdTAwM2Ugc2NvcGVfZW5kKTtcbiB9XG4gXG4gLypcbkBAIC0xMDA3LDE5ICsxMDYxLDE1IEBAIHN0YXRpYyB2b2lkIGt2bV9pbnZhbGlkYXRlX3ZuY3JfaXBhKHN0cnVjdCBrdm0gKmt2bSwgdTY0IHN0YXJ0LCB1NjQgZW5kKVxuIFx0aWYgKCFrdm1faGFzX2ZlYXQoa3ZtLCBJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjJfT05MWSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGt2bV9mb3JfZWFjaF92bmNyX3RsYihpLCB2Y3B1LCB2dCwga3ZtKSB7XG4tXHRcdHU2NCBpcGFfc3RhcnQsIGlwYV9lbmQsIGlwYV9zaXplO1xuLVxuLVx0XHRpcGFfc2l6ZSA9IHR0bF90b19zaXplKHBnc2hpZnRfbGV2ZWxfdG9fdHRsKHZ0LVx1MDAzZXdpLnBnc2hpZnQsXG4tXHRcdFx0XHRcdFx0XHQgICAgdnQtXHUwMDNld3IubGV2ZWwpKTtcbi1cdFx0aXBhX3N0YXJ0ID0gdnQtXHUwMDNld3IucGEgXHUwMDI2IH4oaXBhX3NpemUgLSAxKTtcbi1cdFx0aXBhX2VuZCA9IGlwYV9zdGFydCArIGlwYV9zaXplO1xuLVxuLVx0XHRpZiAoaXBhX2VuZCBcdTAwM2M9IHN0YXJ0IHx8IGlwYV9zdGFydCBcdTAwM2U9IGVuZClcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aW52YWxpZGF0ZV92bmNyKHZ0KTtcbi1cdH1cbitcdC8qXG4rXHQgKiBOb3RlIHRoYXQgaW52YWxpZGF0aW5nIHRoZSBWTkNSIG9uIHRoZSBiYWNrIG9mIGFuIE1NVSBub3RpZmllclxuK1x0ICogZG9lc24ndCByZXF1aXJlIG1lc3Npbmcgd2l0aCB0aGUgaW52YWxpZGF0aW9uIGNvdW50ZXIgZm9yIGFcbitcdCAqIHBhcmFsbGVsIHdhbGsuIFRoZSBub3RpZmllciBpdHNlbGYgd2lsbCBoYXZlIGJ1bXBlZCB0aGUgY291bnRlcixcbitcdCAqIG1ha2luZyBzdXJlIHdlIHJld2Fsay5cbitcdCAqL1xuK1x0a3ZtX2Zvcl9lYWNoX3ZuY3JfdGxiKGksIHZjcHUsIHZ0LCBrdm0pXG4rXHRcdGlmICh2bmNyX3RsYl9pbnRlcnNlY3RzKHZ0LCB2dC1cdTAwM2V3ci5wYSwgc3RhcnQsIGVuZCAtIHN0YXJ0KSlcbitcdFx0XHRpbnZhbGlkYXRlX3ZuY3Ioa3ZtLCB2dCk7XG4gfVxuIFxuIHN0cnVjdCBzMWUyX3RsYmlfc2NvcGUge1xuQEAgLTEwNDQsMjkgKzEwOTQsMjkgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyX3ZhKHN0cnVjdCBrdm0gKmt2bSxcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiBcbi1cdGt2bV9mb3JfZWFjaF92bmNyX3RsYihpLCB2Y3B1LCB2dCwga3ZtKSB7XG4tXHRcdHU2NCB2YV9zdGFydCwgdmFfZW5kLCB2YV9zaXplO1xuLVxuLVx0XHR2YV9zaXplID0gdHRsX3RvX3NpemUocGdzaGlmdF9sZXZlbF90b190dGwodnQtXHUwMDNld2kucGdzaGlmdCxcbi1cdFx0XHRcdFx0XHRcdCAgIHZ0LVx1MDAzZXdyLmxldmVsKSk7XG4tXHRcdHZhX3N0YXJ0ID0gdnQtXHUwMDNlZ3ZhIFx1MDAyNiB+KHZhX3NpemUgLSAxKTtcbi1cdFx0dmFfZW5kID0gdmFfc3RhcnQgKyB2YV9zaXplO1xuK1x0LypcbitcdCAqIFdlIG1pZ2h0IGJlIHBlcmZvcm1pbmcgYSBwYXJhbGxlbCBTMSB3YWxrLCBzbyBidW1wIHVwIHRoZVxuK1x0ICogaW52YWxpZGF0aW9uIGNvdW50ZXIgZXZlbiBpbiB0aGUgYWJzZW5jZSBvZiBhbiBhY3R1YWwgVk5DUiBUTEJcbitcdCAqIGludmFsaWRhdGlvbiwgYXMgdGhpcyBjb3VsZCBpbmRpY2F0ZSB0aGF0IHRoZSBndWVzdCBoYXMgZ29uZVxuK1x0ICogdGhyb3VnaCBhIEJCTSBzZXF1ZW5jZS5cbitcdCAqL1xuK1x0a3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcSsrO1xuK1x0c21wX3dtYigpO1xuIFxuK1x0a3ZtX2Zvcl9lYWNoX3ZuY3JfdGxiKGksIHZjcHUsIHZ0LCBrdm0pIHtcbiBcdFx0c3dpdGNoIChzY29wZS1cdTAwM2V0eXBlKSB7XG4gXHRcdGNhc2UgVExCSV9BTEw6XG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdGNhc2UgVExCSV9WQTpcbi1cdFx0XHRpZiAodmFfZW5kIFx1MDAzYz0gc2NvcGUtXHUwMDNldmEgfHxcbi1cdFx0XHQgICAgdmFfc3RhcnQgXHUwMDNlPSAoc2NvcGUtXHUwMDNldmEgKyBzY29wZS1cdTAwM2VzaXplKSlcbitcdFx0XHRpZiAoIXZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LVx1MDAzZWd2YSwgc2NvcGUtXHUwMDNldmEsIHNjb3BlLVx1MDAzZXNpemUpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0aWYgKHZ0LVx1MDAzZXdyLm5HIFx1MDAyNlx1MDAyNiB2dC1cdTAwM2V3ci5hc2lkICE9IHNjb3BlLVx1MDAzZWFzaWQpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0Y2FzZSBUTEJJX1ZBQTpcbi1cdFx0XHRpZiAodmFfZW5kIFx1MDAzYz0gc2NvcGUtXHUwMDNldmEgfHxcbi1cdFx0XHQgICAgdmFfc3RhcnQgXHUwMDNlPSAoc2NvcGUtXHUwMDNldmEgKyBzY29wZS1cdTAwM2VzaXplKSlcbitcdFx0XHRpZiAoIXZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LVx1MDAzZWd2YSwgc2NvcGUtXHUwMDNldmEsIHNjb3BlLVx1MDAzZXNpemUpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtMTA3Niw3ICsxMTI2LDcgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyX3ZhKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuLVx0XHRpbnZhbGlkYXRlX3ZuY3IodnQpO1xuK1x0XHRpbnZhbGlkYXRlX3ZuY3Ioa3ZtLCB2dCk7XG4gXHR9XG4gfVxuIFxuQEAgLTExMjYsOCArMTE3Niw2IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfczFfdGxiaV9yYW5nZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnN0LCB1NjQgdmFsLFxuIFx0Y2FzZSBPUF9UTEJJX1ZBTEUxT1NOWFM6XG4gXHRcdHNjb3BlLVx1MDAzZXR5cGUgPSBUTEJJX1ZBO1xuIFx0XHRzY29wZS1cdTAwM2VzaXplID0gdHRsX3RvX3NpemUoRklFTERfR0VUKFRMQklfVFRMX01BU0ssIHZhbCkpO1xuLVx0XHRpZiAoIXNjb3BlLVx1MDAzZXNpemUpXG4tXHRcdFx0c2NvcGUtXHUwMDNlc2l6ZSA9IFNaXzFHO1xuIFx0XHRzY29wZS1cdTAwM2V2YSA9IHRsYmlfdmFfczFfdG9fdmEodmFsKSBcdTAwMjYgfihzY29wZS1cdTAwM2VzaXplIC0gMSk7XG4gXHRcdHNjb3BlLVx1MDAzZWFzaWQgPSBGSUVMRF9HRVQoVExCSVJfQVNJRF9NQVNLLCB2YWwpO1xuIFx0XHRicmVhaztcbkBAIC0xMTU0LDggKzEyMDIsNiBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX3MxX3RsYmlfcmFuZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaW5zdCwgdTY0IHZhbCxcbiBcdGNhc2UgT1BfVExCSV9WQUFMRTFPU05YUzpcbiBcdFx0c2NvcGUtXHUwMDNldHlwZSA9IFRMQklfVkFBO1xuIFx0XHRzY29wZS1cdTAwM2VzaXplID0gdHRsX3RvX3NpemUoRklFTERfR0VUKFRMQklfVFRMX01BU0ssIHZhbCkpO1xuLVx0XHRpZiAoIXNjb3BlLVx1MDAzZXNpemUpXG4tXHRcdFx0c2NvcGUtXHUwMDNlc2l6ZSA9IFNaXzFHO1xuIFx0XHRzY29wZS1cdTAwM2V2YSA9IHRsYmlfdmFfczFfdG9fdmEodmFsKSBcdTAwMjYgfihzY29wZS1cdTAwM2VzaXplIC0gMSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBPUF9UTEJJX1JWQUUyOlxuQEAgLTEzMTYsMTMgKzEzNjIsMjAgQEAgdm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsKHN0cnVjdCBrdm0gKmt2bSlcbiAgKiAgIGludGVyc2VjdHMgd2l0aCB0aGUgVExCSSByZXF1ZXN0LCBpbnZhbGlkYXRlIGl0LCBhbmQgdW5tYXAgdGhlIHBhZ2VcbiAgKiAgIGZyb20gdGhlIGZpeG1hcC4gQmVjYXVzZSB3ZSBuZWVkIHRvIGxvb2sgYXQgYWxsIHRoZSB2Y3B1LXByaXZhdGUgVExCcyxcbiAgKiAgIHRoaXMgcmVxdWlyZXMgc29tZSB3aWRlLXJhbmdpbmcgbG9ja2luZyB0byBlbnN1cmUgdGhhdCBub3RoaW5nIHJhY2VzXG4tICogICBhZ2FpbnN0IGl0LiBUaGlzIG1heSByZXF1aXJlIHNvbWUgcmVmY291bnRpbmcgdG8gYXZvaWQgdGhlIHNlYXJjaCB3aGVuXG4tICogICBubyBzdWNoIFRMQiBpcyBwcmVzZW50LlxuKyAqICAgYWdhaW5zdCBpdC4gVGhpcyByZXF1aXJlcyBzb21lIHJlZmNvdW50aW5nIHRvIGF2b2lkIHRoZSBzZWFyY2ggd2hlblxuKyAqICAgbm8gc3VjaCBUTEIgaXMgcHJlc2VudCAoc2VlIGJlbG93KS5cbiAgKlxuICAqIC0gT24gTU1VIG5vdGlmaWVycywgd2UgbXVzdCBpbnZhbGlkYXRlIG91ciBUTEIgaW4gYSBzaW1pbGFyIHdheSwgYnV0XG4gICogICBsb29raW5nIGF0IHRoZSBJUEEgaW5zdGVhZC4gVGhlIGZ1bm55IHBhcnQgaXMgdGhhdCB0aGVyZSBtYXkgbm90IGJlIGFcbiAgKiAgIHN0YWdlLTIgbWFwcGluZyBmb3IgdGhpcyBwYWdlIGlmIEwxIGhhc24ndCBhY2Nlc3NlZCBpdCB1c2luZyBMRC9TVFxuICAqICAgaW5zdHJ1Y3Rpb25zLlxuKyAqXG4rICogLSB2bmNyX3RsYl9jb3VudCB0cmFja3MgdGhlIG51bWJlciBvZiB2YWxpZCBWTkNSIFRMQnMgVk0td2lkZS4gVGhpcyBpc24ndFxuKyAqICAgdGhlIG51bWJlciBvZiAqbWFwcGVkKiBMMSBWTkNSIHBhZ2VzLCB3aGljaCBpcyBsaWtlbHkgYmUgYSBzdWJzZXQgKGFuZFxuKyAqICAgYnkgZGVmaW5pdGlvbiwgYSBUTEJJIGhhbmRsZWQgZnJvbSBMMSBydW5zIHdpdGggdGhlIGNhbm9uaWNhbCBWTkNSXG4rICogICBwYWdlLCBub3QgdGhlIEwxJ3MpLiBUaGUgaW5uZXJtb3N0IHRyYXAgaGFuZGxpbmcgY29kZSBjaGVja3MgdGhpcyB0b1xuKyAqICAgZmluZCBvdXQgd2hldGhlciB0byByZXR1cm4gdG8gdGhlIGd1ZXN0IEFTQVAgKG5vIEwxIFRMQnMpIG9yIHRvIHZpc2l0XG4rICogICB0aGlzIHBhcnQgb2YgdGhlIHdvcmxkIGZvciBzb21lIGV4dHJhIGludmFsaWRhdGlvbiB3b3JrLlxuICAqL1xuIFxuIGludCBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtMTM3Nyw3ICsxNDMwLDggQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKVxuIFx0ICovXG4gXHRzY29wZWRfZ3VhcmQod3JpdGVfbG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spIHtcbiBcdFx0dGhpc19jcHVfcmVzZXRfdm5jcl9maXhtYXAodmNwdSk7XG4tXHRcdHZ0LVx1MDAzZXZhbGlkID0gZmFsc2U7XG4rXHRcdGlmICh2dC1cdTAwM2V2YWxpZClcbitcdFx0XHRpbnZhbGlkYXRlX3ZuY3IodmNwdS1cdTAwM2Vrdm0sIHZ0KTtcbiBcbiBcdFx0dnQtXHUwMDNld2kgPSAoc3RydWN0IHMxX3dhbGtfaW5mbykge1xuIFx0XHRcdC5yZWdpbWVcdD0gVFJfRUwyMCxcbkBAIC0xMzkxLDE1ICsxNDQ1LDE1IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcbiBcbiBcdHZhID0gIHJlYWRfdm5jcl9lbDIodmNwdSk7XG4gXG4rXHRtbXVfc2VxID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuK1x0c21wX3JtYigpO1xuK1xuIFx0cmV0ID0gX19rdm1fdHJhbnNsYXRlX3ZhKHZjcHUsIFx1MDAyNnZ0LVx1MDAzZXdpLCBcdTAwMjZ2dC1cdTAwM2V3ciwgdmEpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHdyaXRlX2ZhdWx0ID0ga3ZtX2lzX3dyaXRlX2ZhdWx0KHZjcHUpO1xuIFxuLVx0bW11X3NlcSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcbi1cdHNtcF9ybWIoKTtcbi1cbiBcdGdmbiA9IHZ0LVx1MDAzZXdyLnBhIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFx0bWVtc2xvdCA9IGdmbl90b19tZW1zbG90KHZjcHUtXHUwMDNla3ZtLCBnZm4pO1xuIFx0aWYgKCFtZW1zbG90KSB7XG5AQCAtMTQ0Nyw3ICsxNTAxLDcgQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKVxuIFx0XHR2dC1cdTAwM2VocGEgPSBwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gXHRcdHZ0LVx1MDAzZWhwYV93cml0YWJsZSA9IHdyaXRhYmxlO1xuIFx0XHR2dC1cdTAwM2V2YWxpZCA9IHRydWU7XG4tXHRcdHZ0LVx1MDAzZWNwdSA9IC0xO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnZ0LVx1MDAzZWNwdSwgLTEpO1xuIFxuIFx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfTUFQX0wxX1ZOQ1JfRUwyLCB2Y3B1KTtcbiBcdFx0a3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKHZjcHUtXHUwMDNla3ZtLCBwYWdlLCBmYWxzZSwgdnQtXHUwMDNld3IucHcgXHUwMDI2XHUwMDI2IHZ0LVx1MDAzZWhwYV93cml0YWJsZSk7XG5AQCAtMTUwMiw3ICsxNTU2LDIwIEBAIGludCBrdm1faGFuZGxlX3ZuY3JfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBTcGVjdWxhdGl2ZWx5IGluY3JlbWVudCB0aGUgVExCIGNvdW50IHRvIG1ha2Ugc3VyZSBjb25jdXJyZW50XG4rXHQgKiBUTEJJcyB3aWxsIHRha2UgdGhlIHNsb3cgcGF0aCwgYW5kIHdpbGwgaW50ZXJhY3Qgd2l0aCB0aGUgcmV0cnlcbitcdCAqIG1lY2hhbmlzbS4gRHJvcCBpdCBhZ2FpbiBvbiBlcnJvci5cbitcdCAqL1xuK1x0YXRvbWljX2luYyhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZuY3JfdGxiX2NvdW50KTtcbitcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XG4rXG4gXHRyZXQgPSBrdm1fdHJhbnNsYXRlX3ZuY3IodmNwdSwgXHUwMDI2aXNfZ21lbSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuK1x0XHRhdG9taWNfZGVjKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm5jcl90bGJfY291bnQpO1xuK1x0fVxuK1xuIFx0c3dpdGNoIChyZXQpIHtcbiBcdGNhc2UgLUVBR0FJTjpcbiBcdFx0LyogTGV0J3MgdHJ5IGFnYWluLi4uICovXG5AQCAtMTU2OCwxNCArMTYzNSwxNiBAQCBzdGF0aWMgdm9pZCBrdm1fbWFwX2wxX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCF2dC1cdTAwM2V2YWxpZClcbiBcdFx0cmV0dXJuO1xuIFxuK1x0LyogV2UgY2FjaGUgdGhlIE1NVSBzdGF0ZSBpbiB0aGUgVExCLiBDaGVjayB0aGF0IGl0IG1hdGNoZXMuICovXG4rXHRpZiAoISEodmNwdV9yZWFkX3N5c19yZWcodmNwdSwgU0NUTFJfRUwyKSBcdTAwMjYgU0NUTFJfRUx4X00pICE9IHMxX3dhbGtfdHJhbnNsYXRlZChcdTAwMjZ2dC1cdTAwM2V3cikpXG4rXHRcdHJldHVybjtcbitcbiBcdGlmIChyZWFkX3ZuY3JfZWwyKHZjcHUpICE9IHZ0LVx1MDAzZWd2YSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHZ0LVx1MDAzZXdyLm5HIFx1MDAyNlx1MDAyNiBnZXRfYXNpZF9ieV9yZWdpbWUodmNwdSwgVFJfRUwyMCkgIT0gdnQtXHUwMDNld3IuYXNpZClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0dnQtXHUwMDNlY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpO1xuLVxuIFx0aWYgKHZ0LVx1MDAzZWhwYV93cml0YWJsZSBcdTAwMjZcdTAwMjYgdnQtXHUwMDNld3IucHcgXHUwMDI2XHUwMDI2IHZ0LVx1MDAzZXdyLnByKVxuIFx0XHRwcm90ID0gUEFHRV9LRVJORUw7XG4gXHRlbHNlIGlmICh2dC1cdTAwM2V3ci5wcilcbkBAIC0xNTkwLDkgKzE2NTksOSBAQCBzdGF0aWMgdm9pZCBrdm1fbWFwX2wxX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogRklYTUU6IFdPIGRvZXNuJ3Qgd29yayBhdCBhbGwsIG5lZWQgUE9FIHN1cHBvcnQgaW4gdGhlIGtlcm5lbC5cbiBcdCAqL1xuIFx0aWYgKHBncHJvdF92YWwocHJvdCkgIT0gcGdwcm90X3ZhbChQQUdFX05PTkUpKSB7XG4tXHRcdF9fc2V0X2ZpeG1hcCh2bmNyX2ZpeG1hcCh2dC1cdTAwM2VjcHUpLCB2dC1cdTAwM2VocGEsIHByb3QpO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnZ0LVx1MDAzZWNwdSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbitcdFx0X19zZXRfZml4bWFwKHZuY3JfZml4bWFwKGF0b21pY19yZWFkKFx1MDAyNnZ0LVx1MDAzZWNwdSkpLCB2dC1cdTAwM2VocGEsIHByb3QpO1xuIFx0XHRob3N0X2RhdGFfc2V0X2ZsYWcoTDFfVk5DUl9NQVBQRUQpO1xuLVx0XHRhdG9taWNfaW5jKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm5jcl9tYXBfY291bnQpO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuaW5kZXggNWQ1YzU3OWQ0NTc5MC4uNzk3ZTg4OGJmOTM5NCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcbkBAIC00MDU3LDYgKzQwNTcsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVfcmlwYXMyZTFpcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCxcbiBcdHUzMiBzeXNfZW5jb2RpbmcgPSBzeXNfaW5zbihwLVx1MDAzZU9wMCwgcC1cdTAwM2VPcDEsIHAtXHUwMDNlQ1JuLCBwLVx1MDAzZUNSbSwgcC1cdTAwM2VPcDIpO1xuIFx0dTY0IHZ0dGJyID0gdmNwdV9yZWFkX3N5c19yZWcodmNwdSwgVlRUQlJfRUwyKTtcbiBcdHU2NCBiYXNlLCByYW5nZTtcbitcdGludCBwYV9iaXRzO1xuIFxuIFx0aWYgKCFrdm1fc3VwcG9ydGVkX3RsYmlfaXBhczJfb3AodmNwdSwgc3lzX2VuY29kaW5nKSlcbiBcdFx0cmV0dXJuIHVuZGVmX2FjY2Vzcyh2Y3B1LCBwLCByKTtcbkBAIC00MDY4LDYgKzQwNjksMTYgQEAgc3RhdGljIGJvb2wgaGFuZGxlX3JpcGFzMmUxaXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXG4gXHQgKi9cbiBcdGJhc2UgPSBkZWNvZGVfcmFuZ2VfdGxiaShwLVx1MDAzZXJlZ3ZhbCwgXHUwMDI2cmFuZ2UsIE5VTEwpO1xuIFxuK1x0LypcbitcdCAqIElnbm9yZSBUTEJJcyB0aGF0IHN0YXJ0IG91dCBvZiBQQV9iaXRzIHJhbmdlLCBhbmQgY2FwIHRoZVxuK1x0ICogaW52YWxpZGF0aW9uIHRvIHRoZSBbYmFzZTpiaXQoUEFfYml0cyldIGludGVydmFsLlxuK1x0ICovXG4rXHRwYV9iaXRzID0ga3ZtX2dldF9wYV9iaXRzKHZjcHUtXHUwMDNla3ZtKTtcbitcdGlmIChmbHM2NChiYXNlKSBcdTAwM2UgcGFfYml0cylcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRyYW5nZSA9IG1pbihyYW5nZSwgQklUX1VMTChwYV9iaXRzKSAtIGJhc2UpO1xuK1xuIFx0a3ZtX3MyX21tdV9pdGVyYXRlX2J5X3ZtaWQodmNwdS1cdTAwM2Vrdm0sIGdldF92bWlkKHZ0dGJyKSxcbiBcdFx0XHRcdCAgIFx1MDAyNih1bmlvbiB0bGJpX2luZm8pIHtcbiBcdFx0XHRcdFx0ICAgLnJhbmdlID0ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6MDQ6MDcuNzk4NzY4OTA4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU0MzI0MDYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLVk0gQVJNNjQgTmVzdGVkIFZpcnR1YWxpemF0aW9uIFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgc29tZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gS1ZNJ3MgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGltcGxlbWVudGF0aW9uIG9uIEFSTTY0LiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIHR3ZWFraW5nIFZOQ1IgVExCIGhhbmRsaW5nLiBUaGUgY29kZSdzIHN3aXRjaGVkIGB2bmNyX21hcF9jb3VudGAgdG8gYHZuY3JfdGxiX2NvdW50YCwgYW5kIEknbSBzZWVpbmcgbW9kaWZpY2F0aW9ucyB0byBhIHdob2xlIGJ1bmNoIG9mIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGdldCBteSBoZWFkIGFyb3VuZCB0aGlzLiBMZXQncyBzZWUuLi4gaXQgdG91Y2hlcyBga3ZtX2h5cF9oYW5kbGVfdGxiaV9lbDJgLCBga3ZtX2luaXRfbmVzdGVkYCwgYWxsIHRoZXNlIHZhcmlvdXMgVExCIGludmFsaWRhdGlvbiBhbmQgbWFwcGluZyByb3V0aW5lcyDigJMgYGt2bV93YWxrX25lc3RlZF9zMmAsIGB0dGxfdG9fc2l6ZWAsIGBwZ3NoaWZ0X2xldmVsX3RvX3R0bGAsIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAsIGB1bm1hcF9sMV92bmNyYCwgYHRoaXNfY3B1X3Jlc2V0X3ZuY3JfZml4bWFwYCwgYGludmFsaWRhdGVfdm5jcmAsIGB2bmNyX3RsYl9pbnRlcnNlY3RzYCwgYGt2bV9pbnZhbGlkYXRlX3ZuY3JfaXBhYCwgYGludmFsaWRhdGVfdm5jcl92YWAsIGBjb21wdXRlX3MxX3RsYmlfcmFuZ2VgLCBga3ZtX3RyYW5zbGF0ZV92bmNyYCwgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAsIGBrdm1fbWFwX2wxX3ZuY3JgLCBhbmQgYWxzbyBgaGFuZGxlX3JpcGFzMmUxaXNgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGRlbWFuZHMgZnV6emluZy4gQW55IGNoYW5nZSBsaWtlIHRoaXMgaW4gYSBsb3ctbGV2ZWwgaHlwZXJ2aXNvciBmdW5jdGlvbiwgZXNwZWNpYWxseSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBpcyBhIHByaW1lIHRhcmdldC4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgYXJlYXMgb2YgaW50ZXJlc3QgaGVyZSBmb3IgYSBmdXp6aW5nIGNhbXBhaWduLlxuXG5TbywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIEkndmUgYWxyZWFkeSBpZGVudGlmaWVkIHNldmVyYWwgZmlsZXMsIGFuZCBmdW5jdGlvbnMgbGlrZSBgZGVjb2RlX3JhbmdlX3RsYmlgLCBga3ZtX2h5cF9oYW5kbGVfdGxiaV9lbDJgLCBga3ZtX2luaXRfbmVzdGVkYCwgYGt2bV93YWxrX25lc3RlZF9zMmAsIGFsbCB0aGVzZSBUTEIgcmVsYXRlZCBmdW5jdGlvbnMuIEkgbmVlZCB0byBzZWUgaG93IHRoZXkncmUgdXNlZC5cblxuTm93LCBsZXQncyBmaWd1cmUgb3V0IHRoZSBwcmVjb25kaXRpb25zIGZvciByZWFjaGluZyB0aGVzZSBjb2RlIHBhdGhzLiBTdGFuZGFyZCBLVk0gb24gQVJNNjQgcmVxdWlyZXMgYENPTkZJR19LVk1gLiBOZXN0ZWQgdmlydHVhbGl6YXRpb24sIGluIGdlbmVyYWwsIG1pZ2h0IGludm9sdmUgYENPTkZJR19BUk02NGAgYW5kIGBDT05GSUdfS1ZNYCwgYnV0IEkgYmV0IHRoZXJl4oCZcyBhIG1vcmUgc3BlY2lmaWMgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGNvbmZpZyBJIG5lZWQgdG8gc3VzcyBvdXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IHRoZSBleGFjdCBidWlsZCBjb25maWd1cmF0aW9ucyByZXF1aXJlZCB0byBoaXQgdGhlc2UgY2hhbmdlZCBhcmVhcy4gVGhpcyB3aWxsIGJlIGNyaXRpY2FsIGZvciBjcmVhdGluZyBlZmZlY3RpdmUgZnV6emluZyBoYXJuZXNzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2OTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMDowNDoxNi4zNDIwMTM4NTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzEzODMwNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6MjA6bWVudWNvbmZpZyBLVk1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6MDQ6MTYuNDEzNDAxNzA1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEwODkzOTM5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5lc3RlZCBLVk0gQ29uZmlndXJhdGlvbiBDaGVjayoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBhbnkgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgc2NlbmFyaW9zLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjb25maXJtIHRoZSBiYXNpY3MuIExldCdzIG5vdCBhc3N1bWUgYW55dGhpbmcuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gZGVkaWNhdGVkIHRvIG1hbmFnaW5nIG5lc3RlZCBLVk0gdmlydHVhbGl6YXRpb24uIEknbSB0aGlua2luZywgaXMgdGhlcmUgYSBkZWZpbmVkIG1ldGhvZCBpbiBwbGFjZT8gV2hhdCdzIHRoZSBiZXN0IHdheSB0byBkZXRlcm1pbmUgaWYgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYW5kIHByb3Blcmx5IGNvbmZpZ3VyZWQgZm9yIHRoZSBjdXJyZW50IGVudmlyb25tZW50PyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQganVtcGluZyBpbiB3aXRob3V0IHRoaXMgcHJlbGltaW5hcnkgY2hlY2sgaXMgYXNraW5nIGZvciB0cm91YmxlLiBJdCdsbCBzYXZlIG1lIHNpZ25pZmljYW50IGRlYnVnZ2luZyB0aW1lIGxhdGVyLiBLbm93aW5nIHdoZXRoZXIgb3Igbm90IHRoaXMgY29uZmlndXJhdGlvbiBhbHJlYWR5IGV4aXN0cyB3aWxsIGhlYXZpbHkgaW5mb3JtIG15IG5leHQgc3RlcHMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIGFuZCBob3cgdGhpcyBtaWdodCBiZSBkb2N1bWVudGVkIGFuZCB3aGF0IHRvb2xzIEkgc2hvdWxkIHVzZSB0byBjaGVjayBmb3IgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NzEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMDowNDoyMC41MjIzNDI4NjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA4MjEwNzQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lc3RlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMDowNDoyMC42MTMxNzIxOTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTEyMTg5MzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgTmVzdGVkIEtWTSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlcmUncyBubyBleHBsaWNpdCBjb25maWd1cmF0aW9uIG9wdGlvbiBpbiBLY29uZmlnIGZvciBuZXN0ZWQgS1ZNLiBUaGF0J3MgYSBiaXQgdW51c3VhbCwgYnV0IGl0IHByb2JhYmx5IG1lYW5zIGl0J3MgZWl0aGVyIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBwZXJoYXBzIHRyaWdnZXJlZCBhdCBydW50aW1lIGJhc2VkIG9uIHN5c3RlbSBjYXBhYmlsaXRpZXMuIFRvIGJlIHN1cmUsIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzLiBTcGVjaWZpY2FsbHksIEknbSBob3BpbmcgdG8gc2VlIGAjaWZkZWZgIG9yIGAjaWZgIHN0YXRlbWVudHMgdGhhdCBjb250cm9sIHdoZXRoZXIgdGhlIG5lc3RlZCBLVk0gZnVuY3Rpb25hbGl0eSBpcyBidWlsdCBpbnRvIHRoZSBrZXJuZWwgb3IgZXhjbHVkZWQuIFRoaXMgd2lsbCBjbGFyaWZ5IGhvdyB0aGlzIGZlYXR1cmUgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIEFSTTY0IGFyY2hpdGVjdHVyZSdzIEtWTSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMDowNDoyNC43MjUzNjQ1NDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE1MzM5NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL01ha2VmaWxlPTE2PWt2bS15ICs9IGFybS5vIG1tdS5vIG1taW8ubyBwc2NpLm8gaHlwZXJjYWxscy5vIHB2dGltZS5vIFxcXFxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTE5LVxcdCB2Z2ljLXN5cy1yZWctdjMubyBmcHNpbWQubyBwa3ZtLm8gXFxcXFxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlOjIwOlxcdCBhcmNoX3RpbWVyLm8gdHJuZy5vIHZtaWQubyBlbXVsYXRlLW5lc3RlZC5vIG5lc3RlZC5vIGF0Lm8gXFxcXFxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTIxLVxcdCB2Z2ljL3ZnaWMubyB2Z2ljL3ZnaWMtaW5pdC5vIFxcXFxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTI1LVxcdCB2Z2ljL3ZnaWMtbW1pby12My5vIHZnaWMvdmdpYy1rdm0tZGV2aWNlLm8gXFxcXFxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlOjI2OlxcdCB2Z2ljL3ZnaWMtaXRzLm8gdmdpYy92Z2ljLWRlYnVnLm8gdmdpYy92Z2ljLXYzLW5lc3RlZC5vIFxcXFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0yNy1cXHQgdmdpYy92Z2ljLXY1Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6MDQ6MjQuODA2OTA0Mzk2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIwODEwMjUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNLXJlbGF0ZWQgRnVuY3Rpb25zIGZvciBQb3RlbnRpYWwgSW1wYWN0KipcblxuT2theSwgc28gdGhpcyBpcyBhYm91dCBLVk0gYW5kIGhvdyBpdCdzIGNvbXBpbGVkLiBJJ20gZm9jdXNpbmcgb24gZmluZGluZyB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4gVGhlIGtleSB0aGluZyBpcyB0aGF0IEtWTSBnZXRzIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSB3aGVuIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkLCBzbyB0aGF0J3MgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBvcHRpb24gdG8ga2VlcCBpbiBtaW5kLlxuXG5NeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBpZGVudGlmeSBhbmQgemVybyBpbiBvbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoaXMgY29udGV4dC4gSSd2ZSBnb3QgYSBsaXN0IGZyb20gdGhlIHBhdGNoOiBga3ZtX2luaXRfbmVzdGVkYCwgYGt2bV93YWxrX25lc3RlZF9zMmAsIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAsIGBrdm1fdmNwdV9sb2FkX2h3X21tdWAsIGBrdm1fdmNwdV9wdXRfaHdfbW11YCwgYGdldF9hc2lkX2J5X3JlZ2ltZWAsIGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsYCwgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYCwgYW5kIGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgLlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgb3IgYXJlIG5vbi1zdGF0aWMuIFRoZSBrZXkgb25lcyB0aGF0IEkgbmVlZCB0byBrZWVwIGluIG1pbmQgYXJlOiBga3ZtX2luaXRfbmVzdGVkYCwgYGt2bV93YWxrX25lc3RlZF9zMmAsIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAsIGBrdm1fdmNwdV9sb2FkX2h3X21tdWAsIGBrdm1fdmNwdV9wdXRfaHdfbW11YCwgYGdldF9hc2lkX2J5X3JlZ2ltZWAsIGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsYCwgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYCwgYW5kIGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgLlxuXG5JJ20gYWxzbyBsb29raW5nIGF0IGEgY291cGxlIG9mIG90aGVyIGZ1bmN0aW9ucywganVzdCB0byBiZSBzdXJlOiBga3ZtX2h5cF9oYW5kbGVfdGxiaV9lbDJgIChpbiBgYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY2ApIGFuZCBgaGFuZGxlX3JpcGFzMmUxaXNgIChpbiBgYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY2ApLiBIb3dldmVyLCB0aGVzZSBhcmUgc3RhdGljIGZ1bmN0aW9ucywgc28gSSBkb24ndCBuZWVkIHRvIGxvb2sgYXQgdGhlbS5cblxuSXQgbG9va3MgbGlrZSBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCwgYGt2bV93YWxrX25lc3RlZF9zMmAsIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAsIGFuZCBga3ZtX2luaXRfbmVzdGVkYCBhcmUgbm9uLXN0YXRpYy5cblxuTm93IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGUgY2FsbGVycyBmb3IgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAgYW5kIGBoYW5kbGVfcmlwYXMyZTFpc2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jeSBncmFwaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MzUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6MDQ6MzIuMDE1MDA4ODA5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDc0NDI1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1faGFuZGxlX3ZuY3JfYWJvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL2hhbmRsZV9leGl0LmM9Mzc2PXN0YXRpYyBleGl0X2hhbmRsZV9mbiBhcm1fZXhpdF9oYW5kbGVyc1tdID0ge1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vaGFuZGxlX2V4aXQuYy0zOTUtXFx0W0VTUl9FTHhfRUNfREFCVF9MT1ddXFx0PSBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0LFxcbmFyY2gvYXJtNjQva3ZtL2hhbmRsZV9leGl0LmM6Mzk2OlxcdFtFU1JfRUx4X0VDX0RBQlRfQ1VSXVxcdD0ga3ZtX2hhbmRsZV92bmNyX2Fib3J0LFxcbmFyY2gvYXJtNjQva3ZtL2hhbmRsZV9leGl0LmMtMzk3LVxcdFtFU1JfRUx4X0VDX1NPRlRTVFBfTE9XXT0ga3ZtX2hhbmRsZV9ndWVzdF9kZWJ1ZyxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE1MTY9c3RhdGljIHZvaWQgaGFuZGxlX3ZuY3JfcGVybShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTQwLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE1NDE6aW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTU0Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjA0OjMyLjEwOTc2MTQyM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDk5NTE1MTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYSBQb3RlbnRpYWwgS1ZNIEV4aXQgSGFuZGxlcioqXG5cbkFscmlnaHQsICprdm1faGFuZGxlX3ZuY3JfYWJvcnQqLi4uIHRoYXQncyBsb29raW5nIHByb21pc2luZyBhcyBhbiBleGl0IGhhbmRsZXIsIGEgZ29vZCBwbGFjZSB0byBzdGFydCB0aGUgaW52ZXN0aWdhdGlvbi4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlICpoYW5kbGVfcmlwYXMyZTFpcyogaGFuZGxlciBhcyB3ZWxsLCBqdXN0IHRvIGJlIHN1cmUgSSdtIGNvbnNpZGVyaW5nIGFsbCByZWxldmFudCBhcmVhcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMDowNDozNi4yMDkyNzk1NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIzMjk5NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFuZGxlX3JpcGFzMmUxaXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9NDAzMD1zdGF0aWMgYm9vbCBoYW5kbGVfdm1hbGxzMTJlMWlzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MDUzLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NDA1NDpzdGF0aWMgYm9vbCBoYW5kbGVfcmlwYXMyZTFpcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQwNTUtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9NDIxMj1zdGF0aWMgc3RydWN0IHN5c19yZWdfZGVzYyBzeXNfaW5zbl9kZXNjc1tdID0ge1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MzEyLVxcdFNZU19JTlNOKFRMQklfSVBBUzJFMUlTLCBoYW5kbGVfaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQzMTM6XFx0U1lTX0lOU04oVExCSV9SSVBBUzJFMUlTLCBoYW5kbGVfcmlwYXMyZTFpcyksXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MzE0LVxcdFNZU19JTlNOKFRMQklfSVBBUzJMRTFJUywgaGFuZGxlX2lwYXMyZTFpcyksXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MzE1OlxcdFNZU19JTlNOKFRMQklfUklQQVMyTEUxSVMsIGhhbmRsZV9yaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzMTYtXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzMzQtXFx0U1lTX0lOU04oVExCSV9JUEFTMkUxLCBoYW5kbGVfaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQzMzU6XFx0U1lTX0lOU04oVExCSV9SSVBBUzJFMSwgaGFuZGxlX3JpcGFzMmUxaXMpLFxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NDMzNjpcXHRTWVNfSU5TTihUTEJJX1JJUEFTMkUxT1MsIGhhbmRsZV9yaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzMzctXFx0U1lTX0lOU04oVExCSV9JUEFTMkxFMU9TLCBoYW5kbGVfaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzMzgtXFx0U1lTX0lOU04oVExCSV9JUEFTMkxFMSwgaGFuZGxlX2lwYXMyZTFpcyksXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MzM5OlxcdFNZU19JTlNOKFRMQklfUklQQVMyTEUxLCBoYW5kbGVfcmlwYXMyZTFpcyksXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MzQwOlxcdFNZU19JTlNOKFRMQklfUklQQVMyTEUxT1MsIGhhbmRsZV9yaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzNDEtXFx0U1lTX0lOU04oVExCSV9SVkFFMk9TLCBoYW5kbGVfdGxiaV9lbDIpLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MzU0LVxcdFNZU19JTlNOKFRMQklfSVBBUzJFMUlTTlhTLCBoYW5kbGVfaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQzNTU6XFx0U1lTX0lOU04oVExCSV9SSVBBUzJFMUlTTlhTLCBoYW5kbGVfcmlwYXMyZTFpcyksXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MzU2LVxcdFNZU19JTlNOKFRMQklfSVBBUzJMRTFJU05YUywgaGFuZGxlX2lwYXMyZTFpcyksXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MzU3OlxcdFNZU19JTlNOKFRMQklfUklQQVMyTEUxSVNOWFMsIGhhbmRsZV9yaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzNTgtXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzNzQtXFx0U1lTX0lOU04oVExCSV9JUEFTMkUxTlhTLCBoYW5kbGVfaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQzNzU6XFx0U1lTX0lOU04oVExCSV9SSVBBUzJFMU5YUywgaGFuZGxlX3JpcGFzMmUxaXMpLFxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NDM3NjpcXHRTWVNfSU5TTihUTEJJX1JJUEFTMkUxT1NOWFMsIGhhbmRsZV9yaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzNzctXFx0U1lTX0lOU04oVExCSV9JUEFTMkxFMU9TTlhTLCBoYW5kbGVfaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzNzgtXFx0U1lTX0lOU04oVExCSV9JUEFTMkxFMU5YUywgaGFuZGxlX2lwYXMyZTFpcyksXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0Mzc5OlxcdFNZU19JTlNOKFRMQklfUklQQVMyTEUxTlhTLCBoYW5kbGVfcmlwYXMyZTFpcyksXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MzgwOlxcdFNZU19JTlNOKFRMQklfUklQQVMyTEUxT1NOWFMsIGhhbmRsZV9yaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzODEtXFx0U1lTX0lOU04oVExCSV9SVkFFMk9TTlhTLCBoYW5kbGVfdGxiaV9lbDIpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMDowNDozNi4zMDE2MTM3NzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyNzY5NDUxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgSW5zdHJ1Y3Rpb24gRGlzcGF0Y2gqKlxuXG5TbywgYGhhbmRsZV9yaXBhczJlMWlzYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEludGVyZXN0aW5nLi4uIHVzdWFsbHksIHN0YXRpYyBmdW5jdGlvbnMgc3VnZ2VzdCBhIGxvY2FsIHNjb3BlLCBub3Qgc29tZXRoaW5nIHdpZGVseSBhY2Nlc3NpYmxlLiBIb3dldmVyLCBpdCdzIGdldHRpbmcgY2FsbGVkIHRocm91Z2ggYHN5c19pbnNuX2Rlc2NzYC4gVGhhdCdzIHRoZSBjcnVjaWFsIHBvaW50IC0gaXQncyBiZWluZyBhY2Nlc3NlZCB2aWEgYSBkaXNwYXRjaCB0YWJsZSwgd2hpY2ggbWFrZXMgbWUgcmUtZXZhbHVhdGUgbXkgaW5pdGlhbCB0aG91Z2h0LiBJdCdzIGVzc2VudGlhbGx5IGhpZGRlbiBpbnRlcm5hbGx5IGJ1dCBpbnZva2VkIGFzIGEgZGlzcGF0Y2ggcm91dGluZS4gR290IGl0LiBOb3csIHdoYXQgYWJvdXQgdGhhdCBga3ZtX3dhbGtfbmVzdGVkX3MyYCBjYWxsLCBob3cgZG9lcyBpdCBmaXQgaW4gd2l0aCB0aGlzIGRpc3BhdGNoIHNldHVwLCBhbmQgd2hhdCByZWxhdGlvbnNoaXAgZG9lcyBpdCBoYXZlIHRvIGBoYW5kbGVfcmlwYXMyZTFpc2A/IEl0IHNlZW1zIGxpa2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gcmVsYXRpb24gdG8gdGhlIGRpc3BhdGNoaW5nIG1lY2hhbmlzbSBhcyB3ZWxsIGFzIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgd2lkZXIgc3lzdGVtIHRvIHNlZSBob3cgYWxsIHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjAzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6MDQ6NDAuMTI5MzExMzRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMTc2MzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV93YWxrX25lc3RlZF9zMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vYXQuYz00NjI9c3RhdGljIGludCB3YWxrX3MxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHMxX3dhbGtfaW5mbyAqd2ksXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hdC5jLTQ4My1cXHRcXHRpZiAod2ktXFx1MDAzZXMyKSB7XFxuYXJjaC9hcm02NC9rdm0vYXQuYzo0ODQ6XFx0XFx0XFx0cmV0ID0ga3ZtX3dhbGtfbmVzdGVkX3MyKHZjcHUsIGlwYSwgXFx1MDAyNnMyX3RyYW5zKTtcXG5hcmNoL2FybTY0L2t2bS9hdC5jLTQ4NS1cXHRcXHRcXHRpZiAocmV0ID09IC1FQUdBSU4pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hdC5jPTE1OTU9aW50IF9fa3ZtX2F0X3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBvcCwgdTY0IHZhZGRyKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXQuYy0xNjQ0LVxcdHNjb3BlZF9ndWFyZChzcmN1LCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1KVxcbmFyY2gvYXJtNjQva3ZtL2F0LmM6MTY0NTpcXHRcXHRyZXQgPSBrdm1fd2Fsa19uZXN0ZWRfczIodmNwdSwgaXBhLCBcXHUwMDI2b3V0KTtcXG5hcmNoL2FybTY0L2t2bS9hdC5jLTE2NDYtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0yMjQ3PWludCBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTIzMjItXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjMyMzpcXHRcXHRyZXQgPSBrdm1fd2Fsa19uZXN0ZWRfczIodmNwdSwgZmF1bHRfaXBhLCBcXHUwMDI2bmVzdGVkX3RyYW5zKTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yMzI0LVxcdFxcdGlmIChyZXQgPT0gLUVBR0FJTikge1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9NDc0PXN0YXRpYyB2b2lkIHNldHVwX3MyX3dhbGsoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgczJfd2Fsa19pbmZvICp3aSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTQ4OC1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzo0ODk6aW50IGt2bV93YWxrX25lc3RlZF9zMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBoeXNfYWRkcl90IGdpcGEsXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtNDkwLVxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX3MyX3RyYW5zICpyZXN1bHQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjA0OjQwLjE5OTQ5MzMxNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTU2NDcyOTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIEtWTSBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgYGt2bV93YWxrX25lc3RlZF9zMmAgcG9wcyB1cCBpbiBib3RoIGBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0YCBhbmQgYF9fa3ZtX2F0X3MxMmAuIEhtbSwgYW5kIGl0J3Mgbm90IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZyBpbiBpdHNlbGYg4oCTIG1lYW5zIGl0J3MgbGlrZWx5IGNhbGxlZCBmcm9tIG90aGVyIHBsYWNlcyB0b28sIG9yIGF0IGxlYXN0IHBvdGVudGlhbGx5IGNhbGxhYmxlLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gVGhpcyBzdWdnZXN0cyBhIGNvcmUgcm9sZSBpbiBtYW5hZ2luZyBuZXN0ZWQgcGFnaW5nLCBsaWtlbHkgcmVsYXRlZCB0byBoYW5kbGluZyBhYm9ydHMgYW5kIGFkZHJlc3Npbmcgc3BlY2lmaWMgUzEyIHNpdHVhdGlvbnMuXG5cbk5vdywgbXkgbWluZCBzaGlmdHPigKYgd2hhdCBhYm91dCBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgaXQgcmVsYXRlcyB0byB0aGlzLiBUaGVyZSdzIGEgaGlnaCBwcm9iYWJpbGl0eSB0aGV5IHdvcmsgY2xvc2VseSB0b2dldGhlciwgYXMgYGt2bV93YWxrX25lc3RlZF9zMmAgc2VlbXMgdG8gZGVhbCB3aXRoIGxvb2tpbmcgYXQgbWVtb3J5IG1hcHBpbmdzIGFuZCBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgIHdvdWxkIHBvdGVudGlhbGx5IHVzZSB0aGF0IGtub3dsZWRnZSB0byBpbnZhbGlkYXRlIFRMQiBlbnRyaWVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UuIFBlcmhhcHMgdGhleSdyZSBpbnZvbHZlZCBpbiBtYW5hZ2luZyB0aGUgbWVtb3J5IHN0YXRlIHdoZW4gYSBndWVzdCBhYm9ydHMgb3IgaXMgd29ya2luZyBhdCBTMTIuIFRoZXkgbWlnaHQgYm90aCBoYXZlIGEgcm9sZSBpbiBlbnN1cmluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBndWVzdCdzIG1lbW9yeSBzcGFjZSBhbmQgdGhlIGhvc3QncyB0cmFuc2xhdGlvbiB0YWJsZXMuIEl0IGlzIHBvc3NpYmxlIGBrdm1fd2Fsa19uZXN0ZWRfczJgIGlzIHVzZWQgZm9yIHRyYXZlcnNpbmcgdGhlIG5lc3RlZCBwYWdpbmcgc3RydWN0dXJlIHRvIGRldGVybWluZSB0aGUgcmFuZ2UgdGhhdCBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgIG5lZWRzIHRvIGludmFsaWRhdGUuIEknbGwgaGF2ZSB0byBkZWx2ZSBkZWVwZXIgdG8gY29uZmlybSBteSBoeXBvdGhlc2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ3OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjA0OjQ0LjM1NTk2OTM0OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY1NTMyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTYwNj1zdGF0aWMgdTggZ2V0X2d1ZXN0X21hcHBpbmdfdHRsKHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHU2NCBhZGRyKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtNjc2LVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjY3Nzp1bnNpZ25lZCBsb25nIGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHU2NCB2YWwpXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtNjc4LXtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9NDA5ND1zdGF0aWMgdm9pZCBzMl9tbXVfdW5tYXBfaXBhKHN0cnVjdCBrdm1fczJfbW11ICptbXUsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQxMDktXFx0YmFzZV9hZGRyID0gKGluZm8tXFx1MDAzZWlwYS5hZGRyIFxcdTAwMjYgR0VOTUFTS19VTEwoMzUsIDApKSBcXHUwMDNjXFx1MDAzYyAxMjtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQxMTA6XFx0bWF4X3NpemUgPSBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZShtbXUsIGluZm8tXFx1MDAzZWlwYS5hZGRyKTtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQxMTEtXFx0YmFzZV9hZGRyIFxcdTAwMjY9IH4obWF4X3NpemUgLSAxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6MDQ6NDQuNDIyNTI3ODE0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDI3NzQyODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIFRMQiBJbnZhbGlkYXRpb25zIGluIEtWTSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAgYW5kIEknbSBpbW1lZGlhdGVseSBzdHJ1Y2sgYnkgdGhlIGZhY3QgdGhhdCBpdCBpc24ndCBzdGF0aWMuIFRoYXQgdGVsbHMgbWUgaXQncyBsaWtlbHkgYmVpbmcgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgbW9kdWxlLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gVGhlIG5vbi1zdGF0aWMgbmF0dXJlIGhpbnRzIGF0IGEgbW9yZSBjb21wbGV4IGludGVyYWN0aW9uLCBtYXliZSBpbnZvbHZpbmcgb3RoZXIgcGFydHMgb2YgdGhlIEtWTSBjb2RlLlxuXG5NeSBuZXh0IG1vdmUgaXMgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZmlndXJlIG91dCB3aGVyZSBhbmQgd2h5IHRoaXMgaXMgYmVpbmcgdXNlZC4gTGV0J3Mgc2VlLi4uIGEgZ29vZCBzdGFydGluZyBwb2ludCBpcyBwcm9iYWJseSBga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJgLiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBpbnZvY2F0aW9ucy4gSSdtIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gYWxsb2NhdGluZyB0aGUgVmlydHVhbC10by1QaHlzaWNhbCB0cmFuc2xhdGlvbiBsb29rYXNpZGUgYnVmZmVyLCB3aGljaCByZWxhdGVzIGRpcmVjdGx5IHRvIFRMQiBtYW5hZ2VtZW50LiBUaGUgbG9naWMgd2l0aGluIHNob3VsZCBpbGx1bWluYXRlIGhvdyBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgIGZhY3RvcnMgaW50byB0aGF0IGFsbG9jYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIHRvIGdldCBhIGNsZWFyZXIgdmlldyBvZiB0aGUgaW52YWxpZGF0aW9uIHN0cmF0ZWd5IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjM1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6MDQ6NDguNTY1MzA1MTM5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTY0ODA3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vYXJtLmM9OTIxPWludCBrdm1fYXJjaF92Y3B1X3J1bl9waWRfY2hhbmdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTk1MS1cXHRpZiAodmNwdV9oYXNfbnYodmNwdSkpIHtcXG5hcmNoL2FybTY0L2t2bS9hcm0uYzo5NTI6XFx0XFx0cmV0ID0ga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGIodmNwdSk7XFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtOTUzLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMzE3PXZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X2FsbChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzgwLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEzODE6aW50IGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzgyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6MDQ6NDguNjM2OTU5NTc0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzQ2MDg4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBLVk0ncyBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIGBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYmAgaXNuJ3Qgc3RhdGljLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBLbm93aW5nIHRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgc29tZXRoaW5nIGFib3V0IGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIHVzYWdlIHdpdGhpbiB0aGUgYnJvYWRlciBLVk0gY29kZWJhc2UuIEl0IG1lYW5zIGl0J3MgbGlrZWx5IGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIG1vZHVsZSBpdCdzIGRlZmluZWQgaW4sIHdoaWNoIGltcGFjdHMgaG93IEknZCBhcHByb2FjaCB0cmFjaW5nIGl0cyBwdXJwb3NlIGFuZCBkZXBlbmRlbmNpZXMuIE5vdywgbGV0J3Mgc2VlIHdoZXJlIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBrdm1faW5pdF9uZXN0ZWRgLiBJJ20gZ3Vlc3NpbmcgdGhhdCBmdW5jdGlvbiBtaWdodCBiZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGFzIGl0J3Mgb2Z0ZW4gYSBjZW50cmFsIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGFuZCBoYXMgYSBnb29kIGNoYW5jZSBvZiBiZWluZyB3aGVyZSBga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJgIGlzIGNhbGxlZCBvciBzb21laG93IHJlbGV2YW50LiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsIGlzIGtleSB0byBncmFzcGluZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ3kgaW4gS1ZNJ3MgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGltcGxlbWVudGF0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCB0byBidWlsZCBhIGNsZWFyZXIgcGljdHVyZSBvZiBpdHMgcm9sZSBpbiB2aXJ0dWFsaXppbmcgbmVzdGVkIHBhZ2UgdGFibGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgyOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjA0OjUyLjc3MTU3MTY5OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4MjExMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2luaXRfbmVzdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9hcm0uYz0yMjI9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0yMzgtXFxuYXJjaC9hcm02NC9rdm0vYXJtLmM6MjM5OlxcdGt2bV9pbml0X25lc3RlZChrdm0pO1xcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTI0MC1cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTk4MT1pbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEwMzYtXFx0aWYgKGt2bV9pc19uZXN0ZWRfczJfbW11KGt2bSwgbW11KSlcXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMDM3OlxcdFxcdGt2bV9pbml0X25lc3RlZF9zMl9tbXUobW11KTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMDM4LVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9MTEyNT12b2lkIGt2bV9mcmVlX3N0YWdlMl9wZ2Qoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExMzgtXFx0aWYgKGt2bV9pc19uZXN0ZWRfczJfbW11KGt2bSwgbW11KSlcXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMTM5OlxcdFxcdGt2bV9pbml0X25lc3RlZF9zMl9tbXUobW11KTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMTQwLVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MjA9c3RydWN0IHZuY3JfdGxiIHtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTQ2LVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjQ3OnZvaWQga3ZtX2luaXRfbmVzdGVkKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy00OC17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz04MDU9c3RhdGljIHN0cnVjdCBrdm1fczJfbW11ICpnZXRfczJfbW11X25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy04NjktXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6ODcwOnZvaWQga3ZtX2luaXRfbmVzdGVkX3MyX21tdShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTg3MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjA0OjUyLjgyMjM5NjY3NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQyODgyMDY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIEZvY3VzOiBOZXN0ZWQgS1ZNIG9uIEFybTY0KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgbmVzdGVkIEtWTSBjb2RlLCBhbmQgaGVyZSdzIG15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB3aGVyZSB0byBmb2N1cyB0aGUgZnV6emluZyBlZmZvcnRzLiBGaXJzdCwgSSdtIGlkZW50aWZ5aW5nIHRoZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIFZOQ1IgKFZpcnR1YWwgTmVzdGVkIENvbnRyb2wgUmVnaXN0ZXJzKSBhYm9ydCBoYW5kbGluZyBhbmQgUzIgdHJhbnNsYXRpb24uXG5cbk15IGluaXRpYWwgbGlzdCBvZiBmdW5jdGlvbnMgb2YgaW50ZXJlc3QgaW5jbHVkZXM6IGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgLCBga3ZtX3dhbGtfbmVzdGVkX3MyYCwgYGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlYCwgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYCwgYW5kIGBrdm1faW5pdF9uZXN0ZWRgLiBJJ20gaW1tZWRpYXRlbHkgZGlzbWlzc2luZyBga3ZtX2luaXRfbmVzdGVkYCBiZWNhdXNlIGl0IGFwcGVhcnMgdG8gYmUgcHVyZWx5IGFuIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGFuZCB0aGVyZWZvcmUgbGVzcyBsaWtlbHkgdG8gZXhwb3NlIGludGVyZXN0aW5nIGZ1enppbmcgdGFyZ2V0cyBkaXJlY3RseS5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSByZW1haW5pbmcgY2FuZGlkYXRlcyBtb3JlIGNhcmVmdWxseTpcblxuKiAgIGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgOiBUaGlzIGxvb2tzIGxpa2UgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIFZOQ1IgYWJvcnRzLiBJdCdzIGEgcHJpbWUgdGFyZ2V0LlxuKiAgIGBrdm1fd2Fsa19uZXN0ZWRfczJgOiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgbmVzdGVkIFMyIHBhZ2Ugd2FsaywgYW5vdGhlciBjcml0aWNhbCBhcmVhLlxuKiAgIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWA6IFRoaXMgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIFRMQiBpbnZhbGlkYXRpb24gcmFuZ2VzLCBwb3RlbnRpYWxseSBjb21wbGV4IGxvZ2ljIHRoYXQgbmVlZHMgY2xvc2Ugc2NydXRpbnkuXG4qICAgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYDogVGhpcyBvbmUgaXMgaW50ZXJlc3Rpbmc7IGl0J3MgY2FsbGVkIGR1cmluZyB2Q1BVIHJ1biBQSUQgY2hhbmdlcy5cblxuTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19LVk1gIGlzIHRoZSBwcmltYXJ5IHJlcXVpcmVtZW50LiBUaGlzIGlzIGdvb2Q7IGl0IHNpbXBsaWZpZXMgdGhpbmdzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYCB3aGljaCBpcyBidWlsdCB3aXRoIGBrdm0teSArPSBuZXN0ZWQub2AgaW4gdGhlIGBNYWtlZmlsZWAuIFRoYXQgY29uZmlybXMgYENPTkZJR19LVk1gIGlzIGluZGVlZCBzdWZmaWNpZW50LlxuXG5JJ20gbm93IGdvaW5nIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IHJlYWNoYWJsZS4gSXQncyBubyB1c2UgdGFyZ2V0aW5nIGEgZnVuY3Rpb24gdGhhdCBpc24ndCBjYWxsZWQuIEknbSB2ZXJpZnlpbmcgdGhlIGNhbGwgZ3JhcGg6XG5cbiogICBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBiZWNhdXNlIGl0IGlzIGluIGBhcm1fZXhpdF9oYW5kbGVyc2AgZm9yIGBFU1JfRUx4X0VDX0RBQlRfQ1VSYCwgdGhpcyBpcyBncmVhdC5cbiogICBga3ZtX3dhbGtfbmVzdGVkX3MyYCBpcyByZWFjaGVkIHZpYSBga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydGAgYW5kIGBfX2t2bV9hdF9zMTJgLCB0aGF0IGlzIGdvb2QuXG4qICAgYGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlYCBpcyBjYWxsZWQgZnJvbSBgczJfbW11X3VubWFwX2lwYWAsIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGZyb20gYGhhbmRsZV9yaXBhczJlMWlzYCBhbmQgYGhhbmRsZV9pcGFzMmUxaXNgLCB0aGlzIGlzIGFsc28gc29saWQuXG4qICAgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYCBpcyByZWFjaGVkIHZpYSBga3ZtX2FyY2hfdmNwdV9ydW5fcGlkX2NoYW5nZWAsIGdvb2QgdG8ga25vdy5cblxuSSdtIGFsc28gc2VlaW5nIG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9ucyBsaWtlIGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsYCwgYGt2bV92Y3B1X2xvYWRfaHdfbW11YCwgYW5kIGBrdm1fdmNwdV9wdXRfaHdfbW11YC4gSG93ZXZlciwgYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGxgIHNlZW1zIGdlbmVyaWMuIEknbGwgZXhhbWluZSB0aGUgTU1VIGZ1bmN0aW9ucyBhcyB3ZWxsLCBmb3IgdGhvcm91Z2huZXNzLCBidXQgbXkgY29yZSBmb2N1cyB3aWxsIGJlIHRoZSBpbml0aWFsIGZvdXIgdGhhdCBJIGlkZW50aWZpZWQuIFNvLCBJIHdpbGwgY2hlY2sgYGt2bV92Y3B1X3B1dF9od19tbXVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc3NiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMDowNTowMy4yNTEyMjA2NTdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjMwNDQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdmNwdV9wdXRfaHdfbW11XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9hcm0uYz03NDY9dm9pZCBrdm1fYXJjaF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy03NjAtXFx0aWYgKHZjcHVfaGFzX252KHZjcHUpKVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjc2MTpcXHRcXHRrdm1fdmNwdV9wdXRfaHdfbW11KHZjcHUpO1xcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTc2Mi1cXHRrdm1fYXJtX3ZtaWRfY2xlYXJfYWN0aXZlKCk7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz05MTM9c3RhdGljIHZvaWQgdGhpc19jcHVfcmVzZXRfdm5jcl9maXhtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtOTM0LVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjkzNTp2b2lkIGt2bV92Y3B1X3B1dF9od19tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTkzNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjA1OjAzLjUxMzU0MTU4OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTQ3MjAzODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gdGhpcyBpcyBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfdmNwdV9wdXRgLCByaWdodD8gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhlIHBhdGNoIGl0c2VsZiBpcyBmdW5jdGlvbmFsIGFuZCwgaW1wb3J0YW50bHksIGl0J3MgbWVzc2luZyB3aXRoIGNvcmUgS1ZNIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYy4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluaywgXCJXb3J0aEZ1enppbmcgPSB0cnVlXCIuIEFsd2F5cyBhIGdvb2Qgc2lnbi5cblxuTm93LCBsZXQncyBzZWUsIHdoYXQgYXJlIHRoZSBrZXkgYXJlYXMgaXQncyB0b3VjaGluZz8gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZTogYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAsIGBrdm1fd2Fsa19uZXN0ZWRfczJgLCBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgLCBga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJgLCBga3ZtX3ZjcHVfcHV0X2h3X21tdWAsIGFuZCBga3ZtX3ZjcHVfbG9hZF9od19tbXVgLiBWTkNSIFRMQnMsIG5lc3RlZCBTMiB3YWxrcywgVExCIGludmFsaWRhdGlvbi4uLiB5ZXAsIHRoaXMgaXMgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSB2aXJ0dWFsaXphdGlvbiBzdGFjaywgcG90ZW50aWFsbHkgYWNjZXNzaWJsZSBkdXJpbmcgZ3Vlc3QgZXhlY3V0aW9uLiBNeSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmc7IHBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcyBhbmQgdnVsbmVyYWJpbGl0aWVzIGluIHRoaXMgYXJlYS5cblxuVGhlIGBDb25maWdzYCBzZWN0aW9uIGNvbmZpcm1zIGl0J3MgS1ZNLCBzbyB3ZSdyZSBvbiB0aGUgcmlnaHQgdHJhY2suIE15IGltbWVkaWF0ZSByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIEtWTSBBUk02NCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgVk5DUiBUTEJzLCBuZXN0ZWQgUzIgd2Fsa3MsIGFuZCBUTEIgaW52YWxpZGF0aW9uIHJhbmdlcywgYWxsIG9mIHdoaWNoIGFyZSAqY3JpdGljYWwqIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIGFuZCBlYXNpbHkgcmVhY2hlZCBmcm9tIGd1ZXN0IGV4ZWN1dGlvbi5cblxuSSB0aGluayBiZWZvcmUgSSBkaXZlIGFueSBkZWVwZXIsIEknbSBnb2luZyB0byB2ZXJpZnkgYGt2bV92Y3B1X2xvYWRfaHdfbW11YC4gSXQncyBhIGdvb2Qgc3ltYm9sIHRvIHN0YXJ0IHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Mzk3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjA1OjA5LjY2MDc0ODQ4NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY2ODY0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3ZjcHVfbG9hZF9od19tbXVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL2FybS5jPTY2ND12b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy02NzItXFx0aWYgKHZjcHVfaGFzX252KHZjcHUpKVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjY3MzpcXHRcXHRrdm1fdmNwdV9sb2FkX2h3X21tdSh2Y3B1KTtcXG5hcmNoL2FybTY0L2t2bS9hcm0uYy02NzQtXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz04NzA9dm9pZCBrdm1faW5pdF9uZXN0ZWRfczJfbW11KHN0cnVjdCBrdm1fczJfbW11ICptbXUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy04NzctXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6ODc4OnZvaWQga3ZtX3ZjcHVfbG9hZF9od19tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTg3OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjA1OjA5LjcxNzQzODcwMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njc1MjUyNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBpZiB0aGV5IGFyZSBteSBvd246XG5cbioqTG9hZGluZyB0aGUgVmlydHVhbCBDUFUgU3RhdGUqKlxuXG5SaWdodCwgc28gSSBzZWUgdGhpcyBvcmlnaW5hdGVzIHdpdGhpbiBga3ZtX2FyY2hfdmNwdV9sb2FkYC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludC4gSSBuZWVkIHRvIHJlcG9ydCBteSBmaW5kaW5ncywgYW5kIEknbGwgbGV2ZXJhZ2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBmb3IgdGhhdC4gSXQgc2VlbXMgdGhlIG1vc3QgZWZmaWNpZW50IGFuZCBzdGFuZGFyZCB3YXkgdG8gY29tbXVuaWNhdGUgdGhlIHN0YXRlIG9mIHRoZSBsb2FkZWQgdkNQVSBpcyB2aWEgdGhpcyByZXBvcnRpbmcgdG9vbC4gSSdsbCBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjY1LCJPdXRwdXRUb2tlbnMiOjE2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjA1OjE0LjM5MjY5NDEyOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTg3MDAxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2hhbmRsZV92bmNyX2Fib3J0XCIsXG4gICAgXCJrdm1fd2Fsa19uZXN0ZWRfczJcIixcbiAgICBcImNvbXB1dGVfdGxiX2ludmFsX3JhbmdlXCIsXG4gICAgXCJrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYlwiLFxuICAgIFwia3ZtX3ZjcHVfcHV0X2h3X21tdVwiLFxuICAgIFwia3ZtX3ZjcHVfbG9hZF9od19tbXVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gQVJNNjQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIFZOQ1IgVExCcywgbmVzdGVkIFMyIHdhbGtzLCBhbmQgVExCIGludmFsaWRhdGlvbiByYW5nZXMuIFRoZXNlIGFyZSBjb3JlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IGV4ZWN1dGlvbiBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1faGFuZGxlX3ZuY3JfYWJvcnRcIixcbiAgICBcImt2bV93YWxrX25lc3RlZF9zMlwiLFxuICAgIFwiY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VcIixcbiAgICBcImt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiXCIsXG4gICAgXCJrdm1fdmNwdV9wdXRfaHdfbW11XCIsXG4gICAgXCJrdm1fdmNwdV9sb2FkX2h3X21tdVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBBUk02NCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgaGFuZGxpbmcgb2YgVk5DUiBUTEJzLCBuZXN0ZWQgUzIgd2Fsa3MsIGFuZCBUTEIgaW52YWxpZGF0aW9uIHJhbmdlcy4gVGhlc2UgYXJlIGNvcmUgdmlydHVhbGl6YXRpb24gZmVhdHVyZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgZXhlY3V0aW9uIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5f7bc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 09:23:11 +0000 UTC FinishedAt: 2026-08-06 10:05:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "7d3aae206663c4e006b25a1c7a20a4029e67da76", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "7d3aae206663c4e006b25a1c7a20a4029e67da76", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "5d8dbdd5-d6ba-4de1-9461-68af37a75832" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_handle_vncr_abort", "kvm_walk_nested_s2", "compute_tlb_inval_range", "kvm_vcpu_allocate_vncr_tlb", "kvm_vcpu_put_hw_mmu", "kvm_vcpu_load_hw_mmu" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9oYW5kbGVfdm5jcl9hYm9ydCYjMzQ7LAogICAgJiMzNDtrdm1fd2Fsa19uZXN0ZWRfczImIzM0OywKICAgICYjMzQ7Y29tcHV0ZV90bGJfaW52YWxfcmFuZ2UmIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGImIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfcHV0X2h3X21tdSYjMzQ7LAogICAgJiMzNDtrdm1fdmNwdV9sb2FkX2h3X21tdSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0gQVJNNjQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIFZOQ1IgVExCcywgbmVzdGVkIFMyIHdhbGtzLCBhbmQgVExCIGludmFsaWRhdGlvbiByYW5nZXMuIFRoZXNlIGFyZSBjb3JlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IGV4ZWN1dGlvbiBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMDowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRiMzU2ZjhhNGE4MTIxNTA1YmMxMmRiZWEwNGU5N2Q1NTBiMzU1YTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDEwOjA0OjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYmFlMmM0ZjkyZWY1Yy4uMTA4OTY2YTlkYjEyYiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtNDExLDggJiM0Mzs0MTEsOCBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xuIFx0LyogTWFza3MgZm9yIFZOQ1ItYmFja2VkIGFuZCBnZW5lcmFsIEVMMiBzeXNyZWdzICovXG4gXHRzdHJ1Y3Qga3ZtX3N5c3JlZ19tYXNrc1x0KnN5c3JlZ19tYXNrcztcbiBcbi1cdC8qIENvdW50IHRoZSBudW1iZXIgb2YgVk5DUl9FTDIgY3VycmVudGx5IG1hcHBlZCAqL1xuLVx0YXRvbWljX3Qgdm5jcl9tYXBfY291bnQ7XG4mIzQzO1x0LyogQ291bnQgdGhlIG51bWJlciBvZiBWTkNSX0VMMiBUTEJzICovXG4mIzQzO1x0YXRvbWljX3Qgdm5jcl90bGJfY291bnQ7XG4gXG4gXHQvKlxuIFx0ICogRm9yIGFuIHVudHJ1c3RlZCBob3N0IFZNLCAmIzM5O3Brdm0uaGFuZGxlJiMzOTsgaXMgdXNlZCB0byBsb29rdXBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oXG5pbmRleCAwMTJkNzExMDM0ZDE3Li5jODNiZTZkMGU3OWFjIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oXG5AQCAtMjkxLDYgJiM0MzsyOTEsMTMgQEAgc3RhdGljIGlubGluZSB1NjQgZGVjb2RlX3JhbmdlX3RsYmkodTY0IHZhbCwgdTY0ICpyYW5nZSwgdTE2ICphc2lkKVxuIFxuIFx0YmFzZVx0PSAodmFsIFx1MDAyNiBHRU5NQVNLKDM2LCAwKSkgXHUwMDNjXHUwMDNjIHNoaWZ0O1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogV2Ugb25seSBkZWFsIHdpdGggYXQgbW9zdCA0OGJpdCBWQS9JUEEsIHNvIDQ4IGlzIHdoZXJlIHdlXG4mIzQzO1x0ICogc2lnbi1leHRlbmQgZnJvbS4gU2hvdWxkIHdlIHN1cHBvcnQgRkVBVF9Me1ZQfUEqIGF0IHNvbWUgcG9pbnQsXG4mIzQzO1x0ICogdGhpcyB3aWxsIG5lZWQgdG8gYmUgcmV2aXNpdGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGJhc2VcdD0gKHU2NClzaWduX2V4dGVuZDY0KGJhc2UsIDQ4KTtcbiYjNDM7XG4gXHRpZiAoYXNpZClcbiBcdFx0KmFzaWQgPSBGSUVMRF9HRVQoVExCSVJfQVNJRF9NQVNLLCB2YWwpO1xuIFxuQEAgLTM4OCw2ICYjNDM7Mzk1LDggQEAgc3RydWN0IHMxX3dhbGtfcmVzdWx0IHtcbiBcdGJvb2xcdGZhaWxlZDtcbiB9O1xuIFxuJiM0MzsjZGVmaW5lIFMxX01NVV9ESVNBQkxFRFx0XHQoLTEyNylcbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIGZhaWxfczFfd2FsayhzdHJ1Y3QgczFfd2Fsa19yZXN1bHQgKndyLCB1OCBmc3QsIGJvb2wgczFwdHcpXG4ge1xuIFx0d3ItXHUwMDNlZnN0XHRcdD0gZnN0O1xuQEAgLTM5Niw2ICYjNDM7NDA1LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmYWlsX3MxX3dhbGsoc3RydWN0IHMxX3dhbGtfcmVzdWx0ICp3ciwgdTggZnN0LCBib29sIHMxcHR3KVxuIFx0d3ItXHUwMDNlZmFpbGVkXHQ9IHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgczFfd2Fsa190cmFuc2xhdGVkKHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gd3ItXHUwMDNlbGV2ZWwgIT0gUzFfTU1VX0RJU0FCTEVEO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBfX2t2bV90cmFuc2xhdGVfdmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgczFfd2Fsa19pbmZvICp3aSxcbiBcdFx0ICAgICAgIHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IsIHU2NCB2YSk7XG4gaW50IF9fa3ZtX2ZpbmRfczFfZGVzY19sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YSwgdTY0IGlwYSxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9hdC5jIGIvYXJjaC9hcm02NC9rdm0vYXQuY1xuaW5kZXggNjQwZjJkYzAwYThiYS4uMDkyNjQyNmI4Nzk4OSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2F0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2F0LmNcbkBAIC0xMSw4ICYjNDM7MTEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vbHN1aS5oXHUwMDNlXG4gXG4tI2RlZmluZSBTMV9NTVVfRElTQUJMRURcdFx0KC0xMjcpXG4tXG4gc3RhdGljIGludCBnZXRfaWFfc2l6ZShzdHJ1Y3QgczFfd2Fsa19pbmZvICp3aSlcbiB7XG4gXHRyZXR1cm4gNjQgLSB3aS1cdTAwM2V0eHN6O1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jXG5pbmRleCBiYmU5Y2ViZDNkOWQ1Li5mYTc3NmIxOGEzMmNhIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xuQEAgLTQyNCwxMSAmIzQzOzQyNCwxNSBAQCBzdGF0aWMgYm9vbCBrdm1faHlwX2hhbmRsZV90bGJpX2VsMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKlxuLVx0ICogSWYgd2UgaGF2ZSB0byBjaGVjayBmb3IgYW55IFZOQ1IgbWFwcGluZyBiZWluZyBpbnZhbGlkYXRlZCxcbi1cdCAqIGdvIGJhY2sgdG8gdGhlIHNsb3cgcGF0aCBmb3IgZnVydGhlciBwcm9jZXNzaW5nLlxuJiM0MztcdCAqIElmIHdlIGhhdmUgdG8gY2hlY2sgZm9yIGFueSBWTkNSIFRMQiBiZWluZyBpbnZhbGlkYXRlZCwgZ28gYmFja1xuJiM0MztcdCAqIHRvIHRoZSBzbG93IHBhdGggZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZSBzeW5jaHJvbmlzYXRpb24gYmV0d2VlbSBUTEJJIGFuZCB3YWxrIGlzIHByb3ZpZGVkIGJ5IHRoZVxuJiM0MztcdCAqIHNwZWN1bGF0aXZlIGluY3JlbWVudCBvZiB0aGUgVExCIGNvdW50ZXIgb24gd2FsaywgYW5kIHRoZVxuJiM0MztcdCAqIGludmFsaWRhdGlvbiBjb3VudGVyLiBZZXMsIHRoaXMgaXMgZmlkZGx5LlxuIFx0ICovXG4gXHRpZiAodmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSBcdTAwMjZcdTAwMjYgdmNwdV9lbDJfdGdlX2lzX3NldCh2Y3B1KSBcdTAwMjZcdTAwMjZcbi1cdCAgICBhdG9taWNfcmVhZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZuY3JfbWFwX2NvdW50KSlcbiYjNDM7XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bmNyX3RsYl9jb3VudCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdF9fa3ZtX3NraXBfaW5zdHIodmNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMgYi9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuaW5kZXggZGZiOTZlZGJkYzQzYy4uMjBhZjk0MTk3YThhNyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuQEAgLTI3LDcgJiM0MzsyNyw3IEBAIHN0cnVjdCB2bmNyX3RsYiB7XG4gXHRib29sXHRcdFx0aHBhX3dyaXRhYmxlO1xuIFxuIFx0LyogLTEgd2hlbiBub3QgbWFwcGVkIG9uIGEgQ1BVICovXG4tXHRpbnRcdFx0XHRjcHU7XG4mIzQzO1x0YXRvbWljX3RcdFx0Y3B1O1xuIFxuIFx0LypcbiBcdCAqIHRydWUgaWYgdGhlIFRMQiBpcyB2YWxpZC4gQ2FuIG9ubHkgYmUgY2hhbmdlZCB3aXRoIHRoZVxuQEAgLTQ4LDcgJiM0Mzs0OCw3IEBAIHZvaWQga3ZtX2luaXRfbmVzdGVkKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRrdm0tXHUwMDNlYXJjaC5uZXN0ZWRfbW11cyA9IE5VTEw7XG4gXHRrdm0tXHUwMDNlYXJjaC5uZXN0ZWRfbW11c19zaXplID0gMDtcbi1cdGF0b21pY19zZXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudm5jcl9tYXBfY291bnQsIDApO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudm5jcl90bGJfY291bnQsIDApO1xuIH1cbiBcbiBzdGF0aWMgaW50IGluaXRfbmVzdGVkX3MyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUpXG5AQCAtNTA2LDcgJiM0Mzs1MDYsNyBAQCBpbnQga3ZtX3dhbGtfbmVzdGVkX3MyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgcGh5c19hZGRyX3QgZ2lwYSxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgdHRsX3RvX3NpemUodTggdHRsKVxuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IF9fdHRsX3RvX3NpemUodTggdHRsKVxuIHtcbiBcdGludCBsZXZlbCA9IHR0bCBcdTAwMjYgMztcbiBcdGludCBncmFuID0gKHR0bCBcdTAwM2VcdTAwM2UgMikgXHUwMDI2IDM7XG5AQCAtNTYyLDEwICYjNDM7NTYyLDIyIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHRsX3RvX3NpemUodTggdHRsKVxuIFx0cmV0dXJuIG1heF9zaXplO1xuIH1cbiBcbi1zdGF0aWMgdTggcGdzaGlmdF9sZXZlbF90b190dGwodTE2IHNoaWZ0LCB1OCBsZXZlbClcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCB0dGxfdG9fc2l6ZSh1OCB0dGwpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX190dGxfdG9fc2l6ZSh0dGwpID86IFNaXzFHO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTggcGdzaGlmdF9sZXZlbF90b190dGwodTE2IHNoaWZ0LCBzOCBsZXZlbClcbiB7XG4gXHR1OCB0dGw7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiB3ZSBkb24mIzM5O3QgaGF2ZSBhIHByb3BlciBsZXZlbCwgZmFsbGJhY2sgdG8gdGhlIG1heGltdW1cbiYjNDM7XHQgKiBzaXplLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChsZXZlbCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdHN3aXRjaChzaGlmdCkge1xuIFx0Y2FzZSAxMjpcbiBcdFx0dHRsID0gVExCSV9UVExfVEdfNEs7XG5AQCAtNjc2LDcgJiM0Mzs2ODgsMTEgQEAgdW5zaWduZWQgbG9uZyBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1NjQgdmFsKVxuIFx0XHR0dGwgPSBnZXRfZ3Vlc3RfbWFwcGluZ190dGwobW11LCBhZGRyKTtcbiBcdH1cbiBcbi1cdG1heF9zaXplID0gdHRsX3RvX3NpemUodHRsKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERvbiYjMzk7dCB1c2UgdGhlIGRlZmF1bHQgMUdCIGZhbGxiYWNrLCBhcyB3ZSBjYW4gYWRhcHQgdG8gdGhlXG4mIzQzO1x0ICogbWF4IG1hcHBpbmcgc2l6ZSB3ZSBhbGxvdyBhdCBTMi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtYXhfc2l6ZSA9IF9fdHRsX3RvX3NpemUodHRsKTtcbiBcbiBcdGlmICghbWF4X3NpemUpIHtcbiBcdFx0LyogQ29tcHV0ZSB0aGUgbWF4aW11bSBleHRlbnQgb2YgdGhlIGludmFsaWRhdGlvbiAqL1xuQEAgLTg3OSwxOCAmIzQzOzg5NSw0MSBAQCB2b2lkIGt2bV92Y3B1X2xvYWRfaHdfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdH1cbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFVubWFwcGluZyBhbiBMMSBWTkNSIGNhbiBoYXBwZW4gY29uY3VycmVudGx5IHdpdGhvdXQgdGhlIG1tdSBsb2NrIGJlaW5nXG4mIzQzOyAqIGVmZmVjdGl2ZSAodmNwdV9wdXQoKSB2cyBUTEJJIGhhbmRsaW5nKS4gVGhlIGF0b21pY194Y2hnIGJlbG93IGVuc3VyZXNcbiYjNDM7ICogdGhhdCBvbmx5IG9uZSBDUFUgc2V0cyBpdCB0byAtMSB3aGlsZSBnZXR0aW5nIGEgdmFsaWQgQ1BVIG51bWJlciBiYWNrLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB1bm1hcF9sMV92bmNyKHN0cnVjdCB2bmNyX3RsYiAqdnQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgY3B1ID0gYXRvbWljX3hjaGdfcmVsYXhlZChcdTAwMjZ2dC1cdTAwM2VjcHUsIC0xKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNwdSAhPSAtMSlcbiYjNDM7XHRcdGNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcChjcHUpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNwdTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB0aGlzX2NwdV9yZXNldF92bmNyX2ZpeG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0aWYgKCFob3N0X2RhdGFfdGVzdF9mbGFnKEwxX1ZOQ1JfTUFQUEVEKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0QlVHX09OKHZjcHUtXHUwMDNlYXJjaC52bmNyX3RsYi1cdTAwM2VjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbiBcdEJVR19PTihpc19oeXBfY3R4dCh2Y3B1KSk7XG4gXG4tXHRjbGVhcl9maXhtYXAodm5jcl9maXhtYXAodmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiLVx1MDAzZWNwdSkpO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiLVx1MDAzZWNwdSA9IC0xO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVW5jb25kaXRpb25hbGx5IHVubWFwIHRoZSBsb2NhbCBWTkNSIGlmIHdlIGhhdmUgbG9zdCB0aGUgcmFjZVxuJiM0MztcdCAqIGFnYWluc3QgYSBjb25jdXJyZW50IFRMQkkuIE90aGVyd2lzZSB3ZSBjb3VsZCBlbmQtdXAgcnVubmluZ1xuJiM0MztcdCAqIGFub3RoZXIgdmNwdSB3aXRoIFZOQ1Igc3RpbGwgbWFwcGVkIGlmIHRoZSBUTEJJIHRocmVhZCBpc1xuJiM0MztcdCAqIHByZWVtcHRlZCBiZXR3ZWVuIHRoZSBleGNoYW5nZSBhbmQgdGhlIGNsZWFyX2ZpeG1hcCgpLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogTm90ZSB0aGF0IHdlIGRvIG5vdCBjYXJlIGFib3V0IHRoZSBUTEJJIG51a2luZyB0aGUgZml4bWFwIGJlaGluZFxuJiM0MztcdCAqIHRoZSBiYWNrIG9mIGFuIHJ1bm5pbmcgdmNwdS4gVGhpcyB3aWxsIG9ubHkgZ2VuZXJhdGUgYSBmYXVsdCBhbmRcbiYjNDM7XHQgKiBwb3NzaWJseSBhIHJldHJhbnNsYXRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHVubWFwX2wxX3ZuY3IodmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiKSA9PSAtMSlcbiYjNDM7XHRcdGNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcChzbXBfcHJvY2Vzc29yX2lkKCkpKTtcbiBcdGhvc3RfZGF0YV9jbGVhcl9mbGFnKEwxX1ZOQ1JfTUFQUEVEKTtcbi1cdGF0b21pY19kZWMoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bmNyX21hcF9jb3VudCk7XG4gfVxuIFxuIHZvaWQga3ZtX3ZjcHVfcHV0X2h3X21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtOTc4LDExICYjNDM7MTAxNywyNiBAQCB1MTYgZ2V0X2FzaWRfYnlfcmVnaW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSB0cmFuc19yZWdpbWUgcmVnaW1lKVxuIFx0cmV0dXJuIGFzaWQ7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGludmFsaWRhdGVfdm5jcihzdHJ1Y3Qgdm5jcl90bGIgKnZ0KVxuJiM0MztzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3Ioc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qgdm5jcl90bGIgKnZ0KVxuIHtcbiYjNDM7XHRCVUdfT04oIXZ0LVx1MDAzZXZhbGlkKTtcbiBcdHZ0LVx1MDAzZXZhbGlkID0gZmFsc2U7XG4tXHRpZiAodnQtXHUwMDNlY3B1ICE9IC0xKVxuLVx0XHRjbGVhcl9maXhtYXAodm5jcl9maXhtYXAodnQtXHUwMDNlY3B1KSk7XG4mIzQzO1x0dW5tYXBfbDFfdm5jcih2dCk7XG4mIzQzO1x0YXRvbWljX2RlYyhcdTAwMjZrdm0tXHUwMDNlYXJjaC52bmNyX3RsYl9jb3VudCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHZuY3JfdGxiX2ludGVyc2VjdHMoc3RydWN0IHZuY3JfdGxiICp2dCwgdTY0IGFkZHIsXG4mIzQzO1x0XHRcdFx0dTY0IHNjb3BlX3N0YXJ0LCB1NjQgc2NvcGVfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHU2NCB0bGJfc2l6ZSwgdGxiX3N0YXJ0LCB0bGJfZW5kLCBzY29wZV9lbmQ7XG4mIzQzO1xuJiM0MztcdHRsYl9zaXplID0gdHRsX3RvX3NpemUocGdzaGlmdF9sZXZlbF90b190dGwodnQtXHUwMDNld2kucGdzaGlmdCwgdnQtXHUwMDNld3IubGV2ZWwpKTtcbiYjNDM7XG4mIzQzO1x0dGxiX3N0YXJ0ID0gYWRkciBcdTAwMjYgfih0bGJfc2l6ZSAtIDEpO1xuJiM0MztcdHRsYl9lbmQgPSB0bGJfc3RhcnQgJiM0MzsgdGxiX3NpemUgLSAxO1xuJiM0MztcdHNjb3BlX2VuZCA9IHNjb3BlX3N0YXJ0ICYjNDM7IHNjb3BlX3NpemUgLSAxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gISh0bGJfZW5kIFx1MDAzYyBzY29wZV9zdGFydCB8fCB0bGJfc3RhcnQgXHUwMDNlIHNjb3BlX2VuZCk7XG4gfVxuIFxuIC8qXG5AQCAtMTAwNywxOSAmIzQzOzEwNjEsMTUgQEAgc3RhdGljIHZvaWQga3ZtX2ludmFsaWRhdGVfdm5jcl9pcGEoc3RydWN0IGt2bSAqa3ZtLCB1NjQgc3RhcnQsIHU2NCBlbmQpXG4gXHRpZiAoIWt2bV9oYXNfZmVhdChrdm0sIElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0a3ZtX2Zvcl9lYWNoX3ZuY3JfdGxiKGksIHZjcHUsIHZ0LCBrdm0pIHtcbi1cdFx0dTY0IGlwYV9zdGFydCwgaXBhX2VuZCwgaXBhX3NpemU7XG4tXG4tXHRcdGlwYV9zaXplID0gdHRsX3RvX3NpemUocGdzaGlmdF9sZXZlbF90b190dGwodnQtXHUwMDNld2kucGdzaGlmdCxcbi1cdFx0XHRcdFx0XHRcdCAgICB2dC1cdTAwM2V3ci5sZXZlbCkpO1xuLVx0XHRpcGFfc3RhcnQgPSB2dC1cdTAwM2V3ci5wYSBcdTAwMjYgfihpcGFfc2l6ZSAtIDEpO1xuLVx0XHRpcGFfZW5kID0gaXBhX3N0YXJ0ICYjNDM7IGlwYV9zaXplO1xuLVxuLVx0XHRpZiAoaXBhX2VuZCBcdTAwM2M9IHN0YXJ0IHx8IGlwYV9zdGFydCBcdTAwM2U9IGVuZClcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aW52YWxpZGF0ZV92bmNyKHZ0KTtcbi1cdH1cbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vdGUgdGhhdCBpbnZhbGlkYXRpbmcgdGhlIFZOQ1Igb24gdGhlIGJhY2sgb2YgYW4gTU1VIG5vdGlmaWVyXG4mIzQzO1x0ICogZG9lc24mIzM5O3QgcmVxdWlyZSBtZXNzaW5nIHdpdGggdGhlIGludmFsaWRhdGlvbiBjb3VudGVyIGZvciBhXG4mIzQzO1x0ICogcGFyYWxsZWwgd2Fsay4gVGhlIG5vdGlmaWVyIGl0c2VsZiB3aWxsIGhhdmUgYnVtcGVkIHRoZSBjb3VudGVyLFxuJiM0MztcdCAqIG1ha2luZyBzdXJlIHdlIHJld2Fsay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSlcbiYjNDM7XHRcdGlmICh2bmNyX3RsYl9pbnRlcnNlY3RzKHZ0LCB2dC1cdTAwM2V3ci5wYSwgc3RhcnQsIGVuZCAtIHN0YXJ0KSlcbiYjNDM7XHRcdFx0aW52YWxpZGF0ZV92bmNyKGt2bSwgdnQpO1xuIH1cbiBcbiBzdHJ1Y3QgczFlMl90bGJpX3Njb3BlIHtcbkBAIC0xMDQ0LDI5ICYjNDM7MTA5NCwyOSBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3JfdmEoc3RydWN0IGt2bSAqa3ZtLFxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuIFxuLVx0a3ZtX2Zvcl9lYWNoX3ZuY3JfdGxiKGksIHZjcHUsIHZ0LCBrdm0pIHtcbi1cdFx0dTY0IHZhX3N0YXJ0LCB2YV9lbmQsIHZhX3NpemU7XG4tXG4tXHRcdHZhX3NpemUgPSB0dGxfdG9fc2l6ZShwZ3NoaWZ0X2xldmVsX3RvX3R0bCh2dC1cdTAwM2V3aS5wZ3NoaWZ0LFxuLVx0XHRcdFx0XHRcdFx0ICAgdnQtXHUwMDNld3IubGV2ZWwpKTtcbi1cdFx0dmFfc3RhcnQgPSB2dC1cdTAwM2VndmEgXHUwMDI2IH4odmFfc2l6ZSAtIDEpO1xuLVx0XHR2YV9lbmQgPSB2YV9zdGFydCAmIzQzOyB2YV9zaXplO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2UgbWlnaHQgYmUgcGVyZm9ybWluZyBhIHBhcmFsbGVsIFMxIHdhbGssIHNvIGJ1bXAgdXAgdGhlXG4mIzQzO1x0ICogaW52YWxpZGF0aW9uIGNvdW50ZXIgZXZlbiBpbiB0aGUgYWJzZW5jZSBvZiBhbiBhY3R1YWwgVk5DUiBUTEJcbiYjNDM7XHQgKiBpbnZhbGlkYXRpb24sIGFzIHRoaXMgY291bGQgaW5kaWNhdGUgdGhhdCB0aGUgZ3Vlc3QgaGFzIGdvbmVcbiYjNDM7XHQgKiB0aHJvdWdoIGEgQkJNIHNlcXVlbmNlLlxuJiM0MztcdCAqL1xuJiM0MztcdGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXEmIzQzOyYjNDM7O1xuJiM0MztcdHNtcF93bWIoKTtcbiBcbiYjNDM7XHRrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSkge1xuIFx0XHRzd2l0Y2ggKHNjb3BlLVx1MDAzZXR5cGUpIHtcbiBcdFx0Y2FzZSBUTEJJX0FMTDpcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0Y2FzZSBUTEJJX1ZBOlxuLVx0XHRcdGlmICh2YV9lbmQgXHUwMDNjPSBzY29wZS1cdTAwM2V2YSB8fFxuLVx0XHRcdCAgICB2YV9zdGFydCBcdTAwM2U9IChzY29wZS1cdTAwM2V2YSAmIzQzOyBzY29wZS1cdTAwM2VzaXplKSlcbiYjNDM7XHRcdFx0aWYgKCF2bmNyX3RsYl9pbnRlcnNlY3RzKHZ0LCB2dC1cdTAwM2VndmEsIHNjb3BlLVx1MDAzZXZhLCBzY29wZS1cdTAwM2VzaXplKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdGlmICh2dC1cdTAwM2V3ci5uRyBcdTAwMjZcdTAwMjYgdnQtXHUwMDNld3IuYXNpZCAhPSBzY29wZS1cdTAwM2Vhc2lkKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdGNhc2UgVExCSV9WQUE6XG4tXHRcdFx0aWYgKHZhX2VuZCBcdTAwM2M9IHNjb3BlLVx1MDAzZXZhIHx8XG4tXHRcdFx0ICAgIHZhX3N0YXJ0IFx1MDAzZT0gKHNjb3BlLVx1MDAzZXZhICYjNDM7IHNjb3BlLVx1MDAzZXNpemUpKVxuJiM0MztcdFx0XHRpZiAoIXZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LVx1MDAzZWd2YSwgc2NvcGUtXHUwMDNldmEsIHNjb3BlLVx1MDAzZXNpemUpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtMTA3Niw3ICYjNDM7MTEyNiw3IEBAIHN0YXRpYyB2b2lkIGludmFsaWRhdGVfdm5jcl92YShzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdFx0aW52YWxpZGF0ZV92bmNyKHZ0KTtcbiYjNDM7XHRcdGludmFsaWRhdGVfdm5jcihrdm0sIHZ0KTtcbiBcdH1cbiB9XG4gXG5AQCAtMTEyNiw4ICYjNDM7MTE3Niw2IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfczFfdGxiaV9yYW5nZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnN0LCB1NjQgdmFsLFxuIFx0Y2FzZSBPUF9UTEJJX1ZBTEUxT1NOWFM6XG4gXHRcdHNjb3BlLVx1MDAzZXR5cGUgPSBUTEJJX1ZBO1xuIFx0XHRzY29wZS1cdTAwM2VzaXplID0gdHRsX3RvX3NpemUoRklFTERfR0VUKFRMQklfVFRMX01BU0ssIHZhbCkpO1xuLVx0XHRpZiAoIXNjb3BlLVx1MDAzZXNpemUpXG4tXHRcdFx0c2NvcGUtXHUwMDNlc2l6ZSA9IFNaXzFHO1xuIFx0XHRzY29wZS1cdTAwM2V2YSA9IHRsYmlfdmFfczFfdG9fdmEodmFsKSBcdTAwMjYgfihzY29wZS1cdTAwM2VzaXplIC0gMSk7XG4gXHRcdHNjb3BlLVx1MDAzZWFzaWQgPSBGSUVMRF9HRVQoVExCSVJfQVNJRF9NQVNLLCB2YWwpO1xuIFx0XHRicmVhaztcbkBAIC0xMTU0LDggJiM0MzsxMjAyLDYgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9zMV90bGJpX3JhbmdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGluc3QsIHU2NCB2YWwsXG4gXHRjYXNlIE9QX1RMQklfVkFBTEUxT1NOWFM6XG4gXHRcdHNjb3BlLVx1MDAzZXR5cGUgPSBUTEJJX1ZBQTtcbiBcdFx0c2NvcGUtXHUwMDNlc2l6ZSA9IHR0bF90b19zaXplKEZJRUxEX0dFVChUTEJJX1RUTF9NQVNLLCB2YWwpKTtcbi1cdFx0aWYgKCFzY29wZS1cdTAwM2VzaXplKVxuLVx0XHRcdHNjb3BlLVx1MDAzZXNpemUgPSBTWl8xRztcbiBcdFx0c2NvcGUtXHUwMDNldmEgPSB0bGJpX3ZhX3MxX3RvX3ZhKHZhbCkgXHUwMDI2IH4oc2NvcGUtXHUwMDNlc2l6ZSAtIDEpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgT1BfVExCSV9SVkFFMjpcbkBAIC0xMzE2LDEzICYjNDM7MTM2MiwyMCBAQCB2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGwoc3RydWN0IGt2bSAqa3ZtKVxuICAqICAgaW50ZXJzZWN0cyB3aXRoIHRoZSBUTEJJIHJlcXVlc3QsIGludmFsaWRhdGUgaXQsIGFuZCB1bm1hcCB0aGUgcGFnZVxuICAqICAgZnJvbSB0aGUgZml4bWFwLiBCZWNhdXNlIHdlIG5lZWQgdG8gbG9vayBhdCBhbGwgdGhlIHZjcHUtcHJpdmF0ZSBUTEJzLFxuICAqICAgdGhpcyByZXF1aXJlcyBzb21lIHdpZGUtcmFuZ2luZyBsb2NraW5nIHRvIGVuc3VyZSB0aGF0IG5vdGhpbmcgcmFjZXNcbi0gKiAgIGFnYWluc3QgaXQuIFRoaXMgbWF5IHJlcXVpcmUgc29tZSByZWZjb3VudGluZyB0byBhdm9pZCB0aGUgc2VhcmNoIHdoZW5cbi0gKiAgIG5vIHN1Y2ggVExCIGlzIHByZXNlbnQuXG4mIzQzOyAqICAgYWdhaW5zdCBpdC4gVGhpcyByZXF1aXJlcyBzb21lIHJlZmNvdW50aW5nIHRvIGF2b2lkIHRoZSBzZWFyY2ggd2hlblxuJiM0MzsgKiAgIG5vIHN1Y2ggVExCIGlzIHByZXNlbnQgKHNlZSBiZWxvdykuXG4gICpcbiAgKiAtIE9uIE1NVSBub3RpZmllcnMsIHdlIG11c3QgaW52YWxpZGF0ZSBvdXIgVExCIGluIGEgc2ltaWxhciB3YXksIGJ1dFxuICAqICAgbG9va2luZyBhdCB0aGUgSVBBIGluc3RlYWQuIFRoZSBmdW5ueSBwYXJ0IGlzIHRoYXQgdGhlcmUgbWF5IG5vdCBiZSBhXG4gICogICBzdGFnZS0yIG1hcHBpbmcgZm9yIHRoaXMgcGFnZSBpZiBMMSBoYXNuJiMzOTt0IGFjY2Vzc2VkIGl0IHVzaW5nIExEL1NUXG4gICogICBpbnN0cnVjdGlvbnMuXG4mIzQzOyAqXG4mIzQzOyAqIC0gdm5jcl90bGJfY291bnQgdHJhY2tzIHRoZSBudW1iZXIgb2YgdmFsaWQgVk5DUiBUTEJzIFZNLXdpZGUuIFRoaXMgaXNuJiMzOTt0XG4mIzQzOyAqICAgdGhlIG51bWJlciBvZiAqbWFwcGVkKiBMMSBWTkNSIHBhZ2VzLCB3aGljaCBpcyBsaWtlbHkgYmUgYSBzdWJzZXQgKGFuZFxuJiM0MzsgKiAgIGJ5IGRlZmluaXRpb24sIGEgVExCSSBoYW5kbGVkIGZyb20gTDEgcnVucyB3aXRoIHRoZSBjYW5vbmljYWwgVk5DUlxuJiM0MzsgKiAgIHBhZ2UsIG5vdCB0aGUgTDEmIzM5O3MpLiBUaGUgaW5uZXJtb3N0IHRyYXAgaGFuZGxpbmcgY29kZSBjaGVja3MgdGhpcyB0b1xuJiM0MzsgKiAgIGZpbmQgb3V0IHdoZXRoZXIgdG8gcmV0dXJuIHRvIHRoZSBndWVzdCBBU0FQIChubyBMMSBUTEJzKSBvciB0byB2aXNpdFxuJiM0MzsgKiAgIHRoaXMgcGFydCBvZiB0aGUgd29ybGQgZm9yIHNvbWUgZXh0cmEgaW52YWxpZGF0aW9uIHdvcmsuXG4gICovXG4gXG4gaW50IGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC0xMzc3LDcgJiM0MzsxNDMwLDggQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKVxuIFx0ICovXG4gXHRzY29wZWRfZ3VhcmQod3JpdGVfbG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spIHtcbiBcdFx0dGhpc19jcHVfcmVzZXRfdm5jcl9maXhtYXAodmNwdSk7XG4tXHRcdHZ0LVx1MDAzZXZhbGlkID0gZmFsc2U7XG4mIzQzO1x0XHRpZiAodnQtXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRcdGludmFsaWRhdGVfdm5jcih2Y3B1LVx1MDAzZWt2bSwgdnQpO1xuIFxuIFx0XHR2dC1cdTAwM2V3aSA9IChzdHJ1Y3QgczFfd2Fsa19pbmZvKSB7XG4gXHRcdFx0LnJlZ2ltZVx0PSBUUl9FTDIwLFxuQEAgLTEzOTEsMTUgJiM0MzsxNDQ1LDE1IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcbiBcbiBcdHZhID0gIHJlYWRfdm5jcl9lbDIodmNwdSk7XG4gXG4mIzQzO1x0bW11X3NlcSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcbiYjNDM7XHRzbXBfcm1iKCk7XG4mIzQzO1xuIFx0cmV0ID0gX19rdm1fdHJhbnNsYXRlX3ZhKHZjcHUsIFx1MDAyNnZ0LVx1MDAzZXdpLCBcdTAwMjZ2dC1cdTAwM2V3ciwgdmEpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHdyaXRlX2ZhdWx0ID0ga3ZtX2lzX3dyaXRlX2ZhdWx0KHZjcHUpO1xuIFxuLVx0bW11X3NlcSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcbi1cdHNtcF9ybWIoKTtcbi1cbiBcdGdmbiA9IHZ0LVx1MDAzZXdyLnBhIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFx0bWVtc2xvdCA9IGdmbl90b19tZW1zbG90KHZjcHUtXHUwMDNla3ZtLCBnZm4pO1xuIFx0aWYgKCFtZW1zbG90KSB7XG5AQCAtMTQ0Nyw3ICYjNDM7MTUwMSw3IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcbiBcdFx0dnQtXHUwMDNlaHBhID0gcGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuIFx0XHR2dC1cdTAwM2VocGFfd3JpdGFibGUgPSB3cml0YWJsZTtcbiBcdFx0dnQtXHUwMDNldmFsaWQgPSB0cnVlO1xuLVx0XHR2dC1cdTAwM2VjcHUgPSAtMTtcbiYjNDM7XHRcdGF0b21pY19zZXQoXHUwMDI2dnQtXHUwMDNlY3B1LCAtMSk7XG4gXG4gXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9NQVBfTDFfVk5DUl9FTDIsIHZjcHUpO1xuIFx0XHRrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2UodmNwdS1cdTAwM2Vrdm0sIHBhZ2UsIGZhbHNlLCB2dC1cdTAwM2V3ci5wdyBcdTAwMjZcdTAwMjYgdnQtXHUwMDNlaHBhX3dyaXRhYmxlKTtcbkBAIC0xNTAyLDcgJiM0MzsxNTU2LDIwIEBAIGludCBrdm1faGFuZGxlX3ZuY3JfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNwZWN1bGF0aXZlbHkgaW5jcmVtZW50IHRoZSBUTEIgY291bnQgdG8gbWFrZSBzdXJlIGNvbmN1cnJlbnRcbiYjNDM7XHQgKiBUTEJJcyB3aWxsIHRha2UgdGhlIHNsb3cgcGF0aCwgYW5kIHdpbGwgaW50ZXJhY3Qgd2l0aCB0aGUgcmV0cnlcbiYjNDM7XHQgKiBtZWNoYW5pc20uIERyb3AgaXQgYWdhaW4gb24gZXJyb3IuXG4mIzQzO1x0ICovXG4mIzQzO1x0YXRvbWljX2luYyhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZuY3JfdGxiX2NvdW50KTtcbiYjNDM7XHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xuJiM0MztcbiBcdHJldCA9IGt2bV90cmFuc2xhdGVfdm5jcih2Y3B1LCBcdTAwMjZpc19nbWVtKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiYjNDM7XHRcdGF0b21pY19kZWMoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bmNyX3RsYl9jb3VudCk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHN3aXRjaCAocmV0KSB7XG4gXHRjYXNlIC1FQUdBSU46XG4gXHRcdC8qIExldCYjMzk7cyB0cnkgYWdhaW4uLi4gKi9cbkBAIC0xNTY4LDE0ICYjNDM7MTYzNSwxNiBAQCBzdGF0aWMgdm9pZCBrdm1fbWFwX2wxX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCF2dC1cdTAwM2V2YWxpZClcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdC8qIFdlIGNhY2hlIHRoZSBNTVUgc3RhdGUgaW4gdGhlIFRMQi4gQ2hlY2sgdGhhdCBpdCBtYXRjaGVzLiAqL1xuJiM0MztcdGlmICghISh2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCBTQ1RMUl9FTDIpIFx1MDAyNiBTQ1RMUl9FTHhfTSkgIT0gczFfd2Fsa190cmFuc2xhdGVkKFx1MDAyNnZ0LVx1MDAzZXdyKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRpZiAocmVhZF92bmNyX2VsMih2Y3B1KSAhPSB2dC1cdTAwM2VndmEpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmICh2dC1cdTAwM2V3ci5uRyBcdTAwMjZcdTAwMjYgZ2V0X2FzaWRfYnlfcmVnaW1lKHZjcHUsIFRSX0VMMjApICE9IHZ0LVx1MDAzZXdyLmFzaWQpXG4gXHRcdHJldHVybjtcbiBcbi1cdHZ0LVx1MDAzZWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTtcbi1cbiBcdGlmICh2dC1cdTAwM2VocGFfd3JpdGFibGUgXHUwMDI2XHUwMDI2IHZ0LVx1MDAzZXdyLnB3IFx1MDAyNlx1MDAyNiB2dC1cdTAwM2V3ci5wcilcbiBcdFx0cHJvdCA9IFBBR0VfS0VSTkVMO1xuIFx0ZWxzZSBpZiAodnQtXHUwMDNld3IucHIpXG5AQCAtMTU5MCw5ICYjNDM7MTY1OSw5IEBAIHN0YXRpYyB2b2lkIGt2bV9tYXBfbDFfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgKiBGSVhNRTogV08gZG9lc24mIzM5O3Qgd29yayBhdCBhbGwsIG5lZWQgUE9FIHN1cHBvcnQgaW4gdGhlIGtlcm5lbC5cbiBcdCAqL1xuIFx0aWYgKHBncHJvdF92YWwocHJvdCkgIT0gcGdwcm90X3ZhbChQQUdFX05PTkUpKSB7XG4tXHRcdF9fc2V0X2ZpeG1hcCh2bmNyX2ZpeG1hcCh2dC1cdTAwM2VjcHUpLCB2dC1cdTAwM2VocGEsIHByb3QpO1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZ2dC1cdTAwM2VjcHUsIHNtcF9wcm9jZXNzb3JfaWQoKSk7XG4mIzQzO1x0XHRfX3NldF9maXhtYXAodm5jcl9maXhtYXAoYXRvbWljX3JlYWQoXHUwMDI2dnQtXHUwMDNlY3B1KSksIHZ0LVx1MDAzZWhwYSwgcHJvdCk7XG4gXHRcdGhvc3RfZGF0YV9zZXRfZmxhZyhMMV9WTkNSX01BUFBFRCk7XG4tXHRcdGF0b21pY19pbmMoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bmNyX21hcF9jb3VudCk7XG4gXHR9XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXG5pbmRleCA1ZDVjNTc5ZDQ1NzkwLi43OTdlODg4YmY5Mzk0IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuQEAgLTQwNTcsNiAmIzQzOzQwNTcsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVfcmlwYXMyZTFpcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCxcbiBcdHUzMiBzeXNfZW5jb2RpbmcgPSBzeXNfaW5zbihwLVx1MDAzZU9wMCwgcC1cdTAwM2VPcDEsIHAtXHUwMDNlQ1JuLCBwLVx1MDAzZUNSbSwgcC1cdTAwM2VPcDIpO1xuIFx0dTY0IHZ0dGJyID0gdmNwdV9yZWFkX3N5c19yZWcodmNwdSwgVlRUQlJfRUwyKTtcbiBcdHU2NCBiYXNlLCByYW5nZTtcbiYjNDM7XHRpbnQgcGFfYml0cztcbiBcbiBcdGlmICgha3ZtX3N1cHBvcnRlZF90bGJpX2lwYXMyX29wKHZjcHUsIHN5c19lbmNvZGluZykpXG4gXHRcdHJldHVybiB1bmRlZl9hY2Nlc3ModmNwdSwgcCwgcik7XG5AQCAtNDA2OCw2ICYjNDM7NDA2OSwxNiBAQCBzdGF0aWMgYm9vbCBoYW5kbGVfcmlwYXMyZTFpcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCxcbiBcdCAqL1xuIFx0YmFzZSA9IGRlY29kZV9yYW5nZV90bGJpKHAtXHUwMDNlcmVndmFsLCBcdTAwMjZyYW5nZSwgTlVMTCk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZ25vcmUgVExCSXMgdGhhdCBzdGFydCBvdXQgb2YgUEFfYml0cyByYW5nZSwgYW5kIGNhcCB0aGVcbiYjNDM7XHQgKiBpbnZhbGlkYXRpb24gdG8gdGhlIFtiYXNlOmJpdChQQV9iaXRzKV0gaW50ZXJ2YWwuXG4mIzQzO1x0ICovXG4mIzQzO1x0cGFfYml0cyA9IGt2bV9nZXRfcGFfYml0cyh2Y3B1LVx1MDAzZWt2bSk7XG4mIzQzO1x0aWYgKGZsczY0KGJhc2UpIFx1MDAzZSBwYV9iaXRzKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJhbmdlID0gbWluKHJhbmdlLCBCSVRfVUxMKHBhX2JpdHMpIC0gYmFzZSk7XG4mIzQzO1xuIFx0a3ZtX3MyX21tdV9pdGVyYXRlX2J5X3ZtaWQodmNwdS1cdTAwM2Vrdm0sIGdldF92bWlkKHZ0dGJyKSxcbiBcdFx0XHRcdCAgIFx1MDAyNih1bmlvbiB0bGJpX2luZm8pIHtcbiBcdFx0XHRcdFx0ICAgLnJhbmdlID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1faGFuZGxlX3ZuY3JfYWJvcnQmIzM0OywKICAgICYjMzQ7a3ZtX3dhbGtfbmVzdGVkX3MyJiMzNDssCiAgICAmIzM0O2NvbXB1dGVfdGxiX2ludmFsX3JhbmdlJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X3B1dF9od19tbXUmIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfbG9hZF9od19tbXUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIEFSTTY0IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiBWTkNSIFRMQnMsIG5lc3RlZCBTMiB3YWxrcywgYW5kIFRMQiBpbnZhbGlkYXRpb24gcmFuZ2VzLiBUaGVzZSBhcmUgY29yZSB2aXJ0dWFsaXphdGlvbiBmZWF0dXJlcyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSBndWVzdCBleGVjdXRpb24gYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkYjM1NmY4YTRhODEyMTUwNWJjMTJkYmVhMDRlOTdkNTUwYjM1NWEzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAxMDowNDowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBiYWUyYzRmOTJlZjVjLi4xMDg5NjZhOWRiMTJiIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC00MTEsOCAmIzQzOzQxMSw4IEBAIHN0cnVjdCBrdm1fYXJjaCB7CiAJLyogTWFza3MgZm9yIFZOQ1ItYmFja2VkIGFuZCBnZW5lcmFsIEVMMiBzeXNyZWdzICovCiAJc3RydWN0IGt2bV9zeXNyZWdfbWFza3MJKnN5c3JlZ19tYXNrczsKIAotCS8qIENvdW50IHRoZSBudW1iZXIgb2YgVk5DUl9FTDIgY3VycmVudGx5IG1hcHBlZCAqLwotCWF0b21pY190IHZuY3JfbWFwX2NvdW50OwomIzQzOwkvKiBDb3VudCB0aGUgbnVtYmVyIG9mIFZOQ1JfRUwyIFRMQnMgKi8KJiM0MzsJYXRvbWljX3Qgdm5jcl90bGJfY291bnQ7CiAKIAkvKgogCSAqIEZvciBhbiB1bnRydXN0ZWQgaG9zdCBWTSwgJiMzOTtwa3ZtLmhhbmRsZSYjMzk7IGlzIHVzZWQgdG8gbG9va3VwCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oCmluZGV4IDAxMmQ3MTEwMzRkMTcuLmM4M2JlNmQwZTc5YWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oCkBAIC0yOTEsNiAmIzQzOzI5MSwxMyBAQCBzdGF0aWMgaW5saW5lIHU2NCBkZWNvZGVfcmFuZ2VfdGxiaSh1NjQgdmFsLCB1NjQgKnJhbmdlLCB1MTYgKmFzaWQpCiAKIAliYXNlCT0gKHZhbCAmYW1wOyBHRU5NQVNLKDM2LCAwKSkgJmx0OyZsdDsgc2hpZnQ7CiAKJiM0MzsJLyoKJiM0MzsJICogV2Ugb25seSBkZWFsIHdpdGggYXQgbW9zdCA0OGJpdCBWQS9JUEEsIHNvIDQ4IGlzIHdoZXJlIHdlCiYjNDM7CSAqIHNpZ24tZXh0ZW5kIGZyb20uIFNob3VsZCB3ZSBzdXBwb3J0IEZFQVRfTHtWUH1BKiBhdCBzb21lIHBvaW50LAomIzQzOwkgKiB0aGlzIHdpbGwgbmVlZCB0byBiZSByZXZpc2l0ZWQuCiYjNDM7CSAqLwomIzQzOwliYXNlCT0gKHU2NClzaWduX2V4dGVuZDY0KGJhc2UsIDQ4KTsKJiM0MzsKIAlpZiAoYXNpZCkKIAkJKmFzaWQgPSBGSUVMRF9HRVQoVExCSVJfQVNJRF9NQVNLLCB2YWwpOwogCkBAIC0zODgsNiAmIzQzOzM5NSw4IEBAIHN0cnVjdCBzMV93YWxrX3Jlc3VsdCB7CiAJYm9vbAlmYWlsZWQ7CiB9OwogCiYjNDM7I2RlZmluZSBTMV9NTVVfRElTQUJMRUQJCSgtMTI3KQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIGZhaWxfczFfd2FsayhzdHJ1Y3QgczFfd2Fsa19yZXN1bHQgKndyLCB1OCBmc3QsIGJvb2wgczFwdHcpCiB7CiAJd3ItJmd0O2ZzdAkJPSBmc3Q7CkBAIC0zOTYsNiAmIzQzOzQwNSwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmFpbF9zMV93YWxrKHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IsIHU4IGZzdCwgYm9vbCBzMXB0dykKIAl3ci0mZ3Q7ZmFpbGVkCT0gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzMV93YWxrX3RyYW5zbGF0ZWQoc3RydWN0IHMxX3dhbGtfcmVzdWx0ICp3cikKJiM0Mzt7CiYjNDM7CXJldHVybiB3ci0mZ3Q7bGV2ZWwgIT0gUzFfTU1VX0RJU0FCTEVEOwomIzQzO30KJiM0MzsKIGludCBfX2t2bV90cmFuc2xhdGVfdmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgczFfd2Fsa19pbmZvICp3aSwKIAkJICAgICAgIHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IsIHU2NCB2YSk7CiBpbnQgX19rdm1fZmluZF9zMV9kZXNjX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhLCB1NjQgaXBhLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXQuYyBiL2FyY2gvYXJtNjQva3ZtL2F0LmMKaW5kZXggNjQwZjJkYzAwYThiYS4uMDkyNjQyNmI4Nzk4OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vYXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9hdC5jCkBAIC0xMSw4ICYjNDM7MTEsNiBAQAogI2luY2x1ZGUgJmx0O2FzbS9rdm1fbW11LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2xzdWkuaCZndDsKIAotI2RlZmluZSBTMV9NTVVfRElTQUJMRUQJCSgtMTI3KQotCiBzdGF0aWMgaW50IGdldF9pYV9zaXplKHN0cnVjdCBzMV93YWxrX2luZm8gKndpKQogewogCXJldHVybiA2NCAtIHdpLSZndDt0eHN6OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guYyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMKaW5kZXggYmJlOWNlYmQzZDlkNS4uZmE3NzZiMThhMzJjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jCkBAIC00MjQsMTEgJiM0Mzs0MjQsMTUgQEAgc3RhdGljIGJvb2wga3ZtX2h5cF9oYW5kbGVfdGxiaV9lbDIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmV4aXRfY29kZSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyoKLQkgKiBJZiB3ZSBoYXZlIHRvIGNoZWNrIGZvciBhbnkgVk5DUiBtYXBwaW5nIGJlaW5nIGludmFsaWRhdGVkLAotCSAqIGdvIGJhY2sgdG8gdGhlIHNsb3cgcGF0aCBmb3IgZnVydGhlciBwcm9jZXNzaW5nLgomIzQzOwkgKiBJZiB3ZSBoYXZlIHRvIGNoZWNrIGZvciBhbnkgVk5DUiBUTEIgYmVpbmcgaW52YWxpZGF0ZWQsIGdvIGJhY2sKJiM0MzsJICogdG8gdGhlIHNsb3cgcGF0aCBmb3IgZnVydGhlciBwcm9jZXNzaW5nLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgc3luY2hyb25pc2F0aW9uIGJldHdlZW0gVExCSSBhbmQgd2FsayBpcyBwcm92aWRlZCBieSB0aGUKJiM0MzsJICogc3BlY3VsYXRpdmUgaW5jcmVtZW50IG9mIHRoZSBUTEIgY291bnRlciBvbiB3YWxrLCBhbmQgdGhlCiYjNDM7CSAqIGludmFsaWRhdGlvbiBjb3VudGVyLiBZZXMsIHRoaXMgaXMgZmlkZGx5LgogCSAqLwogCWlmICh2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpICZhbXA7JmFtcDsgdmNwdV9lbDJfdGdlX2lzX3NldCh2Y3B1KSAmYW1wOyZhbXA7Ci0JICAgIGF0b21pY19yZWFkKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnZuY3JfbWFwX2NvdW50KSkKJiM0MzsJICAgIGF0b21pY19yZWFkKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnZuY3JfdGxiX2NvdW50KSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJX19rdm1fc2tpcF9pbnN0cih2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKaW5kZXggZGZiOTZlZGJkYzQzYy4uMjBhZjk0MTk3YThhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKQEAgLTI3LDcgJiM0MzsyNyw3IEBAIHN0cnVjdCB2bmNyX3RsYiB7CiAJYm9vbAkJCWhwYV93cml0YWJsZTsKIAogCS8qIC0xIHdoZW4gbm90IG1hcHBlZCBvbiBhIENQVSAqLwotCWludAkJCWNwdTsKJiM0MzsJYXRvbWljX3QJCWNwdTsKIAogCS8qCiAJICogdHJ1ZSBpZiB0aGUgVExCIGlzIHZhbGlkLiBDYW4gb25seSBiZSBjaGFuZ2VkIHdpdGggdGhlCkBAIC00OCw3ICYjNDM7NDgsNyBAQCB2b2lkIGt2bV9pbml0X25lc3RlZChzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJa3ZtLSZndDthcmNoLm5lc3RlZF9tbXVzID0gTlVMTDsKIAlrdm0tJmd0O2FyY2gubmVzdGVkX21tdXNfc2l6ZSA9IDA7Ci0JYXRvbWljX3NldCgmYW1wO2t2bS0mZ3Q7YXJjaC52bmNyX21hcF9jb3VudCwgMCk7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtrdm0tJmd0O2FyY2gudm5jcl90bGJfY291bnQsIDApOwogfQogCiBzdGF0aWMgaW50IGluaXRfbmVzdGVkX3MyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUpCkBAIC01MDYsNyAmIzQzOzUwNiw3IEBAIGludCBrdm1fd2Fsa19uZXN0ZWRfczIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBwaHlzX2FkZHJfdCBnaXBhLAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgdHRsX3RvX3NpemUodTggdHRsKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgX190dGxfdG9fc2l6ZSh1OCB0dGwpCiB7CiAJaW50IGxldmVsID0gdHRsICZhbXA7IDM7CiAJaW50IGdyYW4gPSAodHRsICZndDsmZ3Q7IDIpICZhbXA7IDM7CkBAIC01NjIsMTAgJiM0Mzs1NjIsMjIgQEAgc3RhdGljIHVuc2lnbmVkIGludCB0dGxfdG9fc2l6ZSh1OCB0dGwpCiAJcmV0dXJuIG1heF9zaXplOwogfQogCi1zdGF0aWMgdTggcGdzaGlmdF9sZXZlbF90b190dGwodTE2IHNoaWZ0LCB1OCBsZXZlbCkKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHR0bF90b19zaXplKHU4IHR0bCkKJiM0Mzt7CiYjNDM7CXJldHVybiBfX3R0bF90b19zaXplKHR0bCkgPzogU1pfMUc7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1OCBwZ3NoaWZ0X2xldmVsX3RvX3R0bCh1MTYgc2hpZnQsIHM4IGxldmVsKQogewogCXU4IHR0bDsKIAomIzQzOwkvKgomIzQzOwkgKiBJZiB3ZSBkb24mIzM5O3QgaGF2ZSBhIHByb3BlciBsZXZlbCwgZmFsbGJhY2sgdG8gdGhlIG1heGltdW0KJiM0MzsJICogc2l6ZS4KJiM0MzsJICovCiYjNDM7CWlmIChsZXZlbCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAlzd2l0Y2goc2hpZnQpIHsKIAljYXNlIDEyOgogCQl0dGwgPSBUTEJJX1RUTF9UR180SzsKQEAgLTY3Niw3ICYjNDM7Njg4LDExIEBAIHVuc2lnbmVkIGxvbmcgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2Uoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgdTY0IHZhbCkKIAkJdHRsID0gZ2V0X2d1ZXN0X21hcHBpbmdfdHRsKG1tdSwgYWRkcik7CiAJfQogCi0JbWF4X3NpemUgPSB0dGxfdG9fc2l6ZSh0dGwpOwomIzQzOwkvKgomIzQzOwkgKiBEb24mIzM5O3QgdXNlIHRoZSBkZWZhdWx0IDFHQiBmYWxsYmFjaywgYXMgd2UgY2FuIGFkYXB0IHRvIHRoZQomIzQzOwkgKiBtYXggbWFwcGluZyBzaXplIHdlIGFsbG93IGF0IFMyLgomIzQzOwkgKi8KJiM0MzsJbWF4X3NpemUgPSBfX3R0bF90b19zaXplKHR0bCk7CiAKIAlpZiAoIW1heF9zaXplKSB7CiAJCS8qIENvbXB1dGUgdGhlIG1heGltdW0gZXh0ZW50IG9mIHRoZSBpbnZhbGlkYXRpb24gKi8KQEAgLTg3OSwxOCAmIzQzOzg5NSw0MSBAQCB2b2lkIGt2bV92Y3B1X2xvYWRfaHdfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAl9CiB9CiAKJiM0MzsvKgomIzQzOyAqIFVubWFwcGluZyBhbiBMMSBWTkNSIGNhbiBoYXBwZW4gY29uY3VycmVudGx5IHdpdGhvdXQgdGhlIG1tdSBsb2NrIGJlaW5nCiYjNDM7ICogZWZmZWN0aXZlICh2Y3B1X3B1dCgpIHZzIFRMQkkgaGFuZGxpbmcpLiBUaGUgYXRvbWljX3hjaGcgYmVsb3cgZW5zdXJlcwomIzQzOyAqIHRoYXQgb25seSBvbmUgQ1BVIHNldHMgaXQgdG8gLTEgd2hpbGUgZ2V0dGluZyBhIHZhbGlkIENQVSBudW1iZXIgYmFjay4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHVubWFwX2wxX3ZuY3Ioc3RydWN0IHZuY3JfdGxiICp2dCkKJiM0Mzt7CiYjNDM7CWludCBjcHUgPSBhdG9taWNfeGNoZ19yZWxheGVkKCZhbXA7dnQtJmd0O2NwdSwgLTEpOwomIzQzOwomIzQzOwlpZiAoY3B1ICE9IC0xKQomIzQzOwkJY2xlYXJfZml4bWFwKHZuY3JfZml4bWFwKGNwdSkpOwomIzQzOwomIzQzOwlyZXR1cm4gY3B1OwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRoaXNfY3B1X3Jlc2V0X3ZuY3JfZml4bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlpZiAoIWhvc3RfZGF0YV90ZXN0X2ZsYWcoTDFfVk5DUl9NQVBQRUQpKQogCQlyZXR1cm47CiAKLQlCVUdfT04odmNwdS0mZ3Q7YXJjaC52bmNyX3RsYi0mZ3Q7Y3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJQlVHX09OKGlzX2h5cF9jdHh0KHZjcHUpKTsKIAotCWNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcCh2Y3B1LSZndDthcmNoLnZuY3JfdGxiLSZndDtjcHUpKTsKLQl2Y3B1LSZndDthcmNoLnZuY3JfdGxiLSZndDtjcHUgPSAtMTsKJiM0MzsJLyoKJiM0MzsJICogVW5jb25kaXRpb25hbGx5IHVubWFwIHRoZSBsb2NhbCBWTkNSIGlmIHdlIGhhdmUgbG9zdCB0aGUgcmFjZQomIzQzOwkgKiBhZ2FpbnN0IGEgY29uY3VycmVudCBUTEJJLiBPdGhlcndpc2Ugd2UgY291bGQgZW5kLXVwIHJ1bm5pbmcKJiM0MzsJICogYW5vdGhlciB2Y3B1IHdpdGggVk5DUiBzdGlsbCBtYXBwZWQgaWYgdGhlIFRMQkkgdGhyZWFkIGlzCiYjNDM7CSAqIHByZWVtcHRlZCBiZXR3ZWVuIHRoZSBleGNoYW5nZSBhbmQgdGhlIGNsZWFyX2ZpeG1hcCgpLgomIzQzOwkgKgomIzQzOwkgKiBOb3RlIHRoYXQgd2UgZG8gbm90IGNhcmUgYWJvdXQgdGhlIFRMQkkgbnVraW5nIHRoZSBmaXhtYXAgYmVoaW5kCiYjNDM7CSAqIHRoZSBiYWNrIG9mIGFuIHJ1bm5pbmcgdmNwdS4gVGhpcyB3aWxsIG9ubHkgZ2VuZXJhdGUgYSBmYXVsdCBhbmQKJiM0MzsJICogcG9zc2libHkgYSByZXRyYW5zbGF0aW9uLgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubWFwX2wxX3ZuY3IodmNwdS0mZ3Q7YXJjaC52bmNyX3RsYikgPT0gLTEpCiYjNDM7CQljbGVhcl9maXhtYXAodm5jcl9maXhtYXAoc21wX3Byb2Nlc3Nvcl9pZCgpKSk7CiAJaG9zdF9kYXRhX2NsZWFyX2ZsYWcoTDFfVk5DUl9NQVBQRUQpOwotCWF0b21pY19kZWMoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O2FyY2gudm5jcl9tYXBfY291bnQpOwogfQogCiB2b2lkIGt2bV92Y3B1X3B1dF9od19tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtOTc4LDExICYjNDM7MTAxNywyNiBAQCB1MTYgZ2V0X2FzaWRfYnlfcmVnaW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSB0cmFuc19yZWdpbWUgcmVnaW1lKQogCXJldHVybiBhc2lkOwogfQogCi1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3Ioc3RydWN0IHZuY3JfdGxiICp2dCkKJiM0MztzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3Ioc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qgdm5jcl90bGIgKnZ0KQogewomIzQzOwlCVUdfT04oIXZ0LSZndDt2YWxpZCk7CiAJdnQtJmd0O3ZhbGlkID0gZmFsc2U7Ci0JaWYgKHZ0LSZndDtjcHUgIT0gLTEpCi0JCWNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcCh2dC0mZ3Q7Y3B1KSk7CiYjNDM7CXVubWFwX2wxX3ZuY3IodnQpOwomIzQzOwlhdG9taWNfZGVjKCZhbXA7a3ZtLSZndDthcmNoLnZuY3JfdGxiX2NvdW50KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgdm5jcl90bGJfaW50ZXJzZWN0cyhzdHJ1Y3Qgdm5jcl90bGIgKnZ0LCB1NjQgYWRkciwKJiM0MzsJCQkJdTY0IHNjb3BlX3N0YXJ0LCB1NjQgc2NvcGVfc2l6ZSkKJiM0Mzt7CiYjNDM7CXU2NCB0bGJfc2l6ZSwgdGxiX3N0YXJ0LCB0bGJfZW5kLCBzY29wZV9lbmQ7CiYjNDM7CiYjNDM7CXRsYl9zaXplID0gdHRsX3RvX3NpemUocGdzaGlmdF9sZXZlbF90b190dGwodnQtJmd0O3dpLnBnc2hpZnQsIHZ0LSZndDt3ci5sZXZlbCkpOwomIzQzOwomIzQzOwl0bGJfc3RhcnQgPSBhZGRyICZhbXA7IH4odGxiX3NpemUgLSAxKTsKJiM0MzsJdGxiX2VuZCA9IHRsYl9zdGFydCAmIzQzOyB0bGJfc2l6ZSAtIDE7CiYjNDM7CXNjb3BlX2VuZCA9IHNjb3BlX3N0YXJ0ICYjNDM7IHNjb3BlX3NpemUgLSAxOwomIzQzOwomIzQzOwlyZXR1cm4gISh0bGJfZW5kICZsdDsgc2NvcGVfc3RhcnQgfHwgdGxiX3N0YXJ0ICZndDsgc2NvcGVfZW5kKTsKIH0KIAogLyoKQEAgLTEwMDcsMTkgJiM0MzsxMDYxLDE1IEBAIHN0YXRpYyB2b2lkIGt2bV9pbnZhbGlkYXRlX3ZuY3JfaXBhKHN0cnVjdCBrdm0gKmt2bSwgdTY0IHN0YXJ0LCB1NjQgZW5kKQogCWlmICgha3ZtX2hhc19mZWF0KGt2bSwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYyX09OTFkpKQogCQlyZXR1cm47CiAKLQlrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSkgewotCQl1NjQgaXBhX3N0YXJ0LCBpcGFfZW5kLCBpcGFfc2l6ZTsKLQotCQlpcGFfc2l6ZSA9IHR0bF90b19zaXplKHBnc2hpZnRfbGV2ZWxfdG9fdHRsKHZ0LSZndDt3aS5wZ3NoaWZ0LAotCQkJCQkJCSAgICB2dC0mZ3Q7d3IubGV2ZWwpKTsKLQkJaXBhX3N0YXJ0ID0gdnQtJmd0O3dyLnBhICZhbXA7IH4oaXBhX3NpemUgLSAxKTsKLQkJaXBhX2VuZCA9IGlwYV9zdGFydCAmIzQzOyBpcGFfc2l6ZTsKLQotCQlpZiAoaXBhX2VuZCAmbHQ7PSBzdGFydCB8fCBpcGFfc3RhcnQgJmd0Oz0gZW5kKQotCQkJY29udGludWU7Ci0KLQkJaW52YWxpZGF0ZV92bmNyKHZ0KTsKLQl9CiYjNDM7CS8qCiYjNDM7CSAqIE5vdGUgdGhhdCBpbnZhbGlkYXRpbmcgdGhlIFZOQ1Igb24gdGhlIGJhY2sgb2YgYW4gTU1VIG5vdGlmaWVyCiYjNDM7CSAqIGRvZXNuJiMzOTt0IHJlcXVpcmUgbWVzc2luZyB3aXRoIHRoZSBpbnZhbGlkYXRpb24gY291bnRlciBmb3IgYQomIzQzOwkgKiBwYXJhbGxlbCB3YWxrLiBUaGUgbm90aWZpZXIgaXRzZWxmIHdpbGwgaGF2ZSBidW1wZWQgdGhlIGNvdW50ZXIsCiYjNDM7CSAqIG1ha2luZyBzdXJlIHdlIHJld2Fsay4KJiM0MzsJICovCiYjNDM7CWt2bV9mb3JfZWFjaF92bmNyX3RsYihpLCB2Y3B1LCB2dCwga3ZtKQomIzQzOwkJaWYgKHZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LSZndDt3ci5wYSwgc3RhcnQsIGVuZCAtIHN0YXJ0KSkKJiM0MzsJCQlpbnZhbGlkYXRlX3ZuY3Ioa3ZtLCB2dCk7CiB9CiAKIHN0cnVjdCBzMWUyX3RsYmlfc2NvcGUgewpAQCAtMTA0NCwyOSAmIzQzOzEwOTQsMjkgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyX3ZhKHN0cnVjdCBrdm0gKmt2bSwKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKIAotCWt2bV9mb3JfZWFjaF92bmNyX3RsYihpLCB2Y3B1LCB2dCwga3ZtKSB7Ci0JCXU2NCB2YV9zdGFydCwgdmFfZW5kLCB2YV9zaXplOwotCi0JCXZhX3NpemUgPSB0dGxfdG9fc2l6ZShwZ3NoaWZ0X2xldmVsX3RvX3R0bCh2dC0mZ3Q7d2kucGdzaGlmdCwKLQkJCQkJCQkgICB2dC0mZ3Q7d3IubGV2ZWwpKTsKLQkJdmFfc3RhcnQgPSB2dC0mZ3Q7Z3ZhICZhbXA7IH4odmFfc2l6ZSAtIDEpOwotCQl2YV9lbmQgPSB2YV9zdGFydCAmIzQzOyB2YV9zaXplOwomIzQzOwkvKgomIzQzOwkgKiBXZSBtaWdodCBiZSBwZXJmb3JtaW5nIGEgcGFyYWxsZWwgUzEgd2Fsaywgc28gYnVtcCB1cCB0aGUKJiM0MzsJICogaW52YWxpZGF0aW9uIGNvdW50ZXIgZXZlbiBpbiB0aGUgYWJzZW5jZSBvZiBhbiBhY3R1YWwgVk5DUiBUTEIKJiM0MzsJICogaW52YWxpZGF0aW9uLCBhcyB0aGlzIGNvdWxkIGluZGljYXRlIHRoYXQgdGhlIGd1ZXN0IGhhcyBnb25lCiYjNDM7CSAqIHRocm91Z2ggYSBCQk0gc2VxdWVuY2UuCiYjNDM7CSAqLwomIzQzOwlrdm0tJmd0O21tdV9pbnZhbGlkYXRlX3NlcSYjNDM7JiM0Mzs7CiYjNDM7CXNtcF93bWIoKTsKIAomIzQzOwlrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSkgewogCQlzd2l0Y2ggKHNjb3BlLSZndDt0eXBlKSB7CiAJCWNhc2UgVExCSV9BTEw6CiAJCQlicmVhazsKIAogCQljYXNlIFRMQklfVkE6Ci0JCQlpZiAodmFfZW5kICZsdDs9IHNjb3BlLSZndDt2YSB8fAotCQkJICAgIHZhX3N0YXJ0ICZndDs9IChzY29wZS0mZ3Q7dmEgJiM0Mzsgc2NvcGUtJmd0O3NpemUpKQomIzQzOwkJCWlmICghdm5jcl90bGJfaW50ZXJzZWN0cyh2dCwgdnQtJmd0O2d2YSwgc2NvcGUtJmd0O3ZhLCBzY29wZS0mZ3Q7c2l6ZSkpCiAJCQkJY29udGludWU7CiAJCQlpZiAodnQtJmd0O3dyLm5HICZhbXA7JmFtcDsgdnQtJmd0O3dyLmFzaWQgIT0gc2NvcGUtJmd0O2FzaWQpCiAJCQkJY29udGludWU7CiAJCQlicmVhazsKIAogCQljYXNlIFRMQklfVkFBOgotCQkJaWYgKHZhX2VuZCAmbHQ7PSBzY29wZS0mZ3Q7dmEgfHwKLQkJCSAgICB2YV9zdGFydCAmZ3Q7PSAoc2NvcGUtJmd0O3ZhICYjNDM7IHNjb3BlLSZndDtzaXplKSkKJiM0MzsJCQlpZiAoIXZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LSZndDtndmEsIHNjb3BlLSZndDt2YSwgc2NvcGUtJmd0O3NpemUpKQogCQkJCWNvbnRpbnVlOwogCQkJYnJlYWs7CiAKQEAgLTEwNzYsNyAmIzQzOzExMjYsNyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3JfdmEoc3RydWN0IGt2bSAqa3ZtLAogCQkJYnJlYWs7CiAJCX0KIAotCQlpbnZhbGlkYXRlX3ZuY3IodnQpOwomIzQzOwkJaW52YWxpZGF0ZV92bmNyKGt2bSwgdnQpOwogCX0KIH0KIApAQCAtMTEyNiw4ICYjNDM7MTE3Niw2IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfczFfdGxiaV9yYW5nZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnN0LCB1NjQgdmFsLAogCWNhc2UgT1BfVExCSV9WQUxFMU9TTlhTOgogCQlzY29wZS0mZ3Q7dHlwZSA9IFRMQklfVkE7CiAJCXNjb3BlLSZndDtzaXplID0gdHRsX3RvX3NpemUoRklFTERfR0VUKFRMQklfVFRMX01BU0ssIHZhbCkpOwotCQlpZiAoIXNjb3BlLSZndDtzaXplKQotCQkJc2NvcGUtJmd0O3NpemUgPSBTWl8xRzsKIAkJc2NvcGUtJmd0O3ZhID0gdGxiaV92YV9zMV90b192YSh2YWwpICZhbXA7IH4oc2NvcGUtJmd0O3NpemUgLSAxKTsKIAkJc2NvcGUtJmd0O2FzaWQgPSBGSUVMRF9HRVQoVExCSVJfQVNJRF9NQVNLLCB2YWwpOwogCQlicmVhazsKQEAgLTExNTQsOCAmIzQzOzEyMDIsNiBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX3MxX3RsYmlfcmFuZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaW5zdCwgdTY0IHZhbCwKIAljYXNlIE9QX1RMQklfVkFBTEUxT1NOWFM6CiAJCXNjb3BlLSZndDt0eXBlID0gVExCSV9WQUE7CiAJCXNjb3BlLSZndDtzaXplID0gdHRsX3RvX3NpemUoRklFTERfR0VUKFRMQklfVFRMX01BU0ssIHZhbCkpOwotCQlpZiAoIXNjb3BlLSZndDtzaXplKQotCQkJc2NvcGUtJmd0O3NpemUgPSBTWl8xRzsKIAkJc2NvcGUtJmd0O3ZhID0gdGxiaV92YV9zMV90b192YSh2YWwpICZhbXA7IH4oc2NvcGUtJmd0O3NpemUgLSAxKTsKIAkJYnJlYWs7CiAJY2FzZSBPUF9UTEJJX1JWQUUyOgpAQCAtMTMxNiwxMyAmIzQzOzEzNjIsMjAgQEAgdm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsKHN0cnVjdCBrdm0gKmt2bSkKICAqICAgaW50ZXJzZWN0cyB3aXRoIHRoZSBUTEJJIHJlcXVlc3QsIGludmFsaWRhdGUgaXQsIGFuZCB1bm1hcCB0aGUgcGFnZQogICogICBmcm9tIHRoZSBmaXhtYXAuIEJlY2F1c2Ugd2UgbmVlZCB0byBsb29rIGF0IGFsbCB0aGUgdmNwdS1wcml2YXRlIFRMQnMsCiAgKiAgIHRoaXMgcmVxdWlyZXMgc29tZSB3aWRlLXJhbmdpbmcgbG9ja2luZyB0byBlbnN1cmUgdGhhdCBub3RoaW5nIHJhY2VzCi0gKiAgIGFnYWluc3QgaXQuIFRoaXMgbWF5IHJlcXVpcmUgc29tZSByZWZjb3VudGluZyB0byBhdm9pZCB0aGUgc2VhcmNoIHdoZW4KLSAqICAgbm8gc3VjaCBUTEIgaXMgcHJlc2VudC4KJiM0MzsgKiAgIGFnYWluc3QgaXQuIFRoaXMgcmVxdWlyZXMgc29tZSByZWZjb3VudGluZyB0byBhdm9pZCB0aGUgc2VhcmNoIHdoZW4KJiM0MzsgKiAgIG5vIHN1Y2ggVExCIGlzIHByZXNlbnQgKHNlZSBiZWxvdykuCiAgKgogICogLSBPbiBNTVUgbm90aWZpZXJzLCB3ZSBtdXN0IGludmFsaWRhdGUgb3VyIFRMQiBpbiBhIHNpbWlsYXIgd2F5LCBidXQKICAqICAgbG9va2luZyBhdCB0aGUgSVBBIGluc3RlYWQuIFRoZSBmdW5ueSBwYXJ0IGlzIHRoYXQgdGhlcmUgbWF5IG5vdCBiZSBhCiAgKiAgIHN0YWdlLTIgbWFwcGluZyBmb3IgdGhpcyBwYWdlIGlmIEwxIGhhc24mIzM5O3QgYWNjZXNzZWQgaXQgdXNpbmcgTEQvU1QKICAqICAgaW5zdHJ1Y3Rpb25zLgomIzQzOyAqCiYjNDM7ICogLSB2bmNyX3RsYl9jb3VudCB0cmFja3MgdGhlIG51bWJlciBvZiB2YWxpZCBWTkNSIFRMQnMgVk0td2lkZS4gVGhpcyBpc24mIzM5O3QKJiM0MzsgKiAgIHRoZSBudW1iZXIgb2YgKm1hcHBlZCogTDEgVk5DUiBwYWdlcywgd2hpY2ggaXMgbGlrZWx5IGJlIGEgc3Vic2V0IChhbmQKJiM0MzsgKiAgIGJ5IGRlZmluaXRpb24sIGEgVExCSSBoYW5kbGVkIGZyb20gTDEgcnVucyB3aXRoIHRoZSBjYW5vbmljYWwgVk5DUgomIzQzOyAqICAgcGFnZSwgbm90IHRoZSBMMSYjMzk7cykuIFRoZSBpbm5lcm1vc3QgdHJhcCBoYW5kbGluZyBjb2RlIGNoZWNrcyB0aGlzIHRvCiYjNDM7ICogICBmaW5kIG91dCB3aGV0aGVyIHRvIHJldHVybiB0byB0aGUgZ3Vlc3QgQVNBUCAobm8gTDEgVExCcykgb3IgdG8gdmlzaXQKJiM0MzsgKiAgIHRoaXMgcGFydCBvZiB0aGUgd29ybGQgZm9yIHNvbWUgZXh0cmEgaW52YWxpZGF0aW9uIHdvcmsuCiAgKi8KIAogaW50IGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTEzNzcsNyAmIzQzOzE0MzAsOCBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pCiAJICovCiAJc2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssICZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDttbXVfbG9jaykgewogCQl0aGlzX2NwdV9yZXNldF92bmNyX2ZpeG1hcCh2Y3B1KTsKLQkJdnQtJmd0O3ZhbGlkID0gZmFsc2U7CiYjNDM7CQlpZiAodnQtJmd0O3ZhbGlkKQomIzQzOwkJCWludmFsaWRhdGVfdm5jcih2Y3B1LSZndDtrdm0sIHZ0KTsKIAogCQl2dC0mZ3Q7d2kgPSAoc3RydWN0IHMxX3dhbGtfaW5mbykgewogCQkJLnJlZ2ltZQk9IFRSX0VMMjAsCkBAIC0xMzkxLDE1ICYjNDM7MTQ0NSwxNSBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pCiAKIAl2YSA9ICByZWFkX3ZuY3JfZWwyKHZjcHUpOwogCiYjNDM7CW1tdV9zZXEgPSB2Y3B1LSZndDtrdm0tJmd0O21tdV9pbnZhbGlkYXRlX3NlcTsKJiM0MzsJc21wX3JtYigpOwomIzQzOwogCXJldCA9IF9fa3ZtX3RyYW5zbGF0ZV92YSh2Y3B1LCAmYW1wO3Z0LSZndDt3aSwgJmFtcDt2dC0mZ3Q7d3IsIHZhKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJd3JpdGVfZmF1bHQgPSBrdm1faXNfd3JpdGVfZmF1bHQodmNwdSk7CiAKLQltbXVfc2VxID0gdmNwdS0mZ3Q7a3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXE7Ci0Jc21wX3JtYigpOwotCiAJZ2ZuID0gdnQtJmd0O3dyLnBhICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiAJbWVtc2xvdCA9IGdmbl90b19tZW1zbG90KHZjcHUtJmd0O2t2bSwgZ2ZuKTsKIAlpZiAoIW1lbXNsb3QpIHsKQEAgLTE0NDcsNyAmIzQzOzE1MDEsNyBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pCiAJCXZ0LSZndDtocGEgPSBwZm4gJmx0OyZsdDsgUEFHRV9TSElGVDsKIAkJdnQtJmd0O2hwYV93cml0YWJsZSA9IHdyaXRhYmxlOwogCQl2dC0mZ3Q7dmFsaWQgPSB0cnVlOwotCQl2dC0mZ3Q7Y3B1ID0gLTE7CiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7dnQtJmd0O2NwdSwgLTEpOwogCiAJCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9NQVBfTDFfVk5DUl9FTDIsIHZjcHUpOwogCQlrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2UodmNwdS0mZ3Q7a3ZtLCBwYWdlLCBmYWxzZSwgdnQtJmd0O3dyLnB3ICZhbXA7JmFtcDsgdnQtJmd0O2hwYV93cml0YWJsZSk7CkBAIC0xNTAyLDcgJiM0MzsxNTU2LDIwIEBAIGludCBrdm1faGFuZGxlX3ZuY3JfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQlyZXR1cm4gLUVJTzsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogU3BlY3VsYXRpdmVseSBpbmNyZW1lbnQgdGhlIFRMQiBjb3VudCB0byBtYWtlIHN1cmUgY29uY3VycmVudAomIzQzOwkgKiBUTEJJcyB3aWxsIHRha2UgdGhlIHNsb3cgcGF0aCwgYW5kIHdpbGwgaW50ZXJhY3Qgd2l0aCB0aGUgcmV0cnkKJiM0MzsJICogbWVjaGFuaXNtLiBEcm9wIGl0IGFnYWluIG9uIGVycm9yLgomIzQzOwkgKi8KJiM0MzsJYXRvbWljX2luYygmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC52bmNyX3RsYl9jb3VudCk7CiYjNDM7CXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiYjNDM7CiAJcmV0ID0ga3ZtX3RyYW5zbGF0ZV92bmNyKHZjcHUsICZhbXA7aXNfZ21lbSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwomIzQzOwkJYXRvbWljX2RlYygmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC52bmNyX3RsYl9jb3VudCk7CiYjNDM7CX0KJiM0MzsKIAlzd2l0Y2ggKHJldCkgewogCWNhc2UgLUVBR0FJTjoKIAkJLyogTGV0JiMzOTtzIHRyeSBhZ2Fpbi4uLiAqLwpAQCAtMTU2OCwxNCAmIzQzOzE2MzUsMTYgQEAgc3RhdGljIHZvaWQga3ZtX21hcF9sMV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoIXZ0LSZndDt2YWxpZCkKIAkJcmV0dXJuOwogCiYjNDM7CS8qIFdlIGNhY2hlIHRoZSBNTVUgc3RhdGUgaW4gdGhlIFRMQi4gQ2hlY2sgdGhhdCBpdCBtYXRjaGVzLiAqLwomIzQzOwlpZiAoISEodmNwdV9yZWFkX3N5c19yZWcodmNwdSwgU0NUTFJfRUwyKSAmYW1wOyBTQ1RMUl9FTHhfTSkgIT0gczFfd2Fsa190cmFuc2xhdGVkKCZhbXA7dnQtJmd0O3dyKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlpZiAocmVhZF92bmNyX2VsMih2Y3B1KSAhPSB2dC0mZ3Q7Z3ZhKQogCQlyZXR1cm47CiAKIAlpZiAodnQtJmd0O3dyLm5HICZhbXA7JmFtcDsgZ2V0X2FzaWRfYnlfcmVnaW1lKHZjcHUsIFRSX0VMMjApICE9IHZ0LSZndDt3ci5hc2lkKQogCQlyZXR1cm47CiAKLQl2dC0mZ3Q7Y3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCiAJaWYgKHZ0LSZndDtocGFfd3JpdGFibGUgJmFtcDsmYW1wOyB2dC0mZ3Q7d3IucHcgJmFtcDsmYW1wOyB2dC0mZ3Q7d3IucHIpCiAJCXByb3QgPSBQQUdFX0tFUk5FTDsKIAllbHNlIGlmICh2dC0mZ3Q7d3IucHIpCkBAIC0xNTkwLDkgJiM0MzsxNjU5LDkgQEAgc3RhdGljIHZvaWQga3ZtX21hcF9sMV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkgKiBGSVhNRTogV08gZG9lc24mIzM5O3Qgd29yayBhdCBhbGwsIG5lZWQgUE9FIHN1cHBvcnQgaW4gdGhlIGtlcm5lbC4KIAkgKi8KIAlpZiAocGdwcm90X3ZhbChwcm90KSAhPSBwZ3Byb3RfdmFsKFBBR0VfTk9ORSkpIHsKLQkJX19zZXRfZml4bWFwKHZuY3JfZml4bWFwKHZ0LSZndDtjcHUpLCB2dC0mZ3Q7aHBhLCBwcm90KTsKJiM0MzsJCWF0b21pY19zZXQoJmFtcDt2dC0mZ3Q7Y3B1LCBzbXBfcHJvY2Vzc29yX2lkKCkpOwomIzQzOwkJX19zZXRfZml4bWFwKHZuY3JfZml4bWFwKGF0b21pY19yZWFkKCZhbXA7dnQtJmd0O2NwdSkpLCB2dC0mZ3Q7aHBhLCBwcm90KTsKIAkJaG9zdF9kYXRhX3NldF9mbGFnKEwxX1ZOQ1JfTUFQUEVEKTsKLQkJYXRvbWljX2luYygmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC52bmNyX21hcF9jb3VudCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYwppbmRleCA1ZDVjNTc5ZDQ1NzkwLi43OTdlODg4YmY5Mzk0IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKQEAgLTQwNTcsNiAmIzQzOzQwNTcsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVfcmlwYXMyZTFpcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKIAl1MzIgc3lzX2VuY29kaW5nID0gc3lzX2luc24ocC0mZ3Q7T3AwLCBwLSZndDtPcDEsIHAtJmd0O0NSbiwgcC0mZ3Q7Q1JtLCBwLSZndDtPcDIpOwogCXU2NCB2dHRiciA9IHZjcHVfcmVhZF9zeXNfcmVnKHZjcHUsIFZUVEJSX0VMMik7CiAJdTY0IGJhc2UsIHJhbmdlOwomIzQzOwlpbnQgcGFfYml0czsKIAogCWlmICgha3ZtX3N1cHBvcnRlZF90bGJpX2lwYXMyX29wKHZjcHUsIHN5c19lbmNvZGluZykpCiAJCXJldHVybiB1bmRlZl9hY2Nlc3ModmNwdSwgcCwgcik7CkBAIC00MDY4LDYgJiM0Mzs0MDY5LDE2IEBAIHN0YXRpYyBib29sIGhhbmRsZV9yaXBhczJlMWlzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLAogCSAqLwogCWJhc2UgPSBkZWNvZGVfcmFuZ2VfdGxiaShwLSZndDtyZWd2YWwsICZhbXA7cmFuZ2UsIE5VTEwpOwogCiYjNDM7CS8qCiYjNDM7CSAqIElnbm9yZSBUTEJJcyB0aGF0IHN0YXJ0IG91dCBvZiBQQV9iaXRzIHJhbmdlLCBhbmQgY2FwIHRoZQomIzQzOwkgKiBpbnZhbGlkYXRpb24gdG8gdGhlIFtiYXNlOmJpdChQQV9iaXRzKV0gaW50ZXJ2YWwuCiYjNDM7CSAqLwomIzQzOwlwYV9iaXRzID0ga3ZtX2dldF9wYV9iaXRzKHZjcHUtJmd0O2t2bSk7CiYjNDM7CWlmIChmbHM2NChiYXNlKSAmZ3Q7IHBhX2JpdHMpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJcmFuZ2UgPSBtaW4ocmFuZ2UsIEJJVF9VTEwocGFfYml0cykgLSBiYXNlKTsKJiM0MzsKIAlrdm1fczJfbW11X2l0ZXJhdGVfYnlfdm1pZCh2Y3B1LSZndDtrdm0sIGdldF92bWlkKHZ0dGJyKSwKIAkJCQkgICAmYW1wOyh1bmlvbiB0bGJpX2luZm8pIHsKIAkJCQkJICAgLnJhbmdlID0gewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Njk0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtWTSBBUk02NCBOZXN0ZWQgVmlydHVhbGl6YXRpb24gUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIG1ha2luZyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBLVk0mIzM5O3MgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGltcGxlbWVudGF0aW9uIG9uIEFSTTY0LiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIHR3ZWFraW5nIFZOQ1IgVExCIGhhbmRsaW5nLiBUaGUgY29kZSYjMzk7cyBzd2l0Y2hlZCBgdm5jcl9tYXBfY291bnRgIHRvIGB2bmNyX3RsYl9jb3VudGAsIGFuZCBJJiMzOTttIHNlZWluZyBtb2RpZmljYXRpb25zIHRvIGEgd2hvbGUgYnVuY2ggb2YgZnVuY3Rpb25zLiBJIG5lZWQgdG8gZ2V0IG15IGhlYWQgYXJvdW5kIHRoaXMuIExldCYjMzk7cyBzZWUuLi4gaXQgdG91Y2hlcyBga3ZtX2h5cF9oYW5kbGVfdGxiaV9lbDJgLCBga3ZtX2luaXRfbmVzdGVkYCwgYWxsIHRoZXNlIHZhcmlvdXMgVExCIGludmFsaWRhdGlvbiBhbmQgbWFwcGluZyByb3V0aW5lcyDigJMgYGt2bV93YWxrX25lc3RlZF9zMmAsIGB0dGxfdG9fc2l6ZWAsIGBwZ3NoaWZ0X2xldmVsX3RvX3R0bGAsIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAsIGB1bm1hcF9sMV92bmNyYCwgYHRoaXNfY3B1X3Jlc2V0X3ZuY3JfZml4bWFwYCwgYGludmFsaWRhdGVfdm5jcmAsIGB2bmNyX3RsYl9pbnRlcnNlY3RzYCwgYGt2bV9pbnZhbGlkYXRlX3ZuY3JfaXBhYCwgYGludmFsaWRhdGVfdm5jcl92YWAsIGBjb21wdXRlX3MxX3RsYmlfcmFuZ2VgLCBga3ZtX3RyYW5zbGF0ZV92bmNyYCwgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAsIGBrdm1fbWFwX2wxX3ZuY3JgLCBhbmQgYWxzbyBgaGFuZGxlX3JpcGFzMmUxaXNgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBkZW1hbmRzIGZ1enppbmcuIEFueSBjaGFuZ2UgbGlrZSB0aGlzIGluIGEgbG93LWxldmVsIGh5cGVydmlzb3IgZnVuY3Rpb24sIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgaXMgYSBwcmltZSB0YXJnZXQuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGFyZWFzIG9mIGludGVyZXN0IGhlcmUgZm9yIGEgZnV6emluZyBjYW1wYWlnbi4KClNvLCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gSSYjMzk7dmUgYWxyZWFkeSBpZGVudGlmaWVkIHNldmVyYWwgZmlsZXMsIGFuZCBmdW5jdGlvbnMgbGlrZSBgZGVjb2RlX3JhbmdlX3RsYmlgLCBga3ZtX2h5cF9oYW5kbGVfdGxiaV9lbDJgLCBga3ZtX2luaXRfbmVzdGVkYCwgYGt2bV93YWxrX25lc3RlZF9zMmAsIGFsbCB0aGVzZSBUTEIgcmVsYXRlZCBmdW5jdGlvbnMuIEkgbmVlZCB0byBzZWUgaG93IHRoZXkmIzM5O3JlIHVzZWQuCgpOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHRoZSBwcmVjb25kaXRpb25zIGZvciByZWFjaGluZyB0aGVzZSBjb2RlIHBhdGhzLiBTdGFuZGFyZCBLVk0gb24gQVJNNjQgcmVxdWlyZXMgYENPTkZJR19LVk1gLiBOZXN0ZWQgdmlydHVhbGl6YXRpb24sIGluIGdlbmVyYWwsIG1pZ2h0IGludm9sdmUgYENPTkZJR19BUk02NGAgYW5kIGBDT05GSUdfS1ZNYCwgYnV0IEkgYmV0IHRoZXJl4oCZcyBhIG1vcmUgc3BlY2lmaWMgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGNvbmZpZyBJIG5lZWQgdG8gc3VzcyBvdXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IHRoZSBleGFjdCBidWlsZCBjb25maWd1cmF0aW9ucyByZXF1aXJlZCB0byBoaXQgdGhlc2UgY2hhbmdlZCBhcmVhcy4gVGhpcyB3aWxsIGJlIGNyaXRpY2FsIGZvciBjcmVhdGluZyBlZmZlY3RpdmUgZnV6emluZyBoYXJuZXNzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0xOS1cbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6MjA6bWVudWNvbmZpZyBLVk1cbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMjEtXHRib29sIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NzEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmVzdGVkIEtWTSBDb25maWd1cmF0aW9uIENoZWNrKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBhbnkgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgc2NlbmFyaW9zLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjb25maXJtIHRoZSBiYXNpY3MuIExldCYjMzk7cyBub3QgYXNzdW1lIGFueXRoaW5nLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgdGhlcmUmIzM5O3MgYW4gZXhpc3RpbmcgY29uZmlndXJhdGlvbiBkZWRpY2F0ZWQgdG8gbWFuYWdpbmcgbmVzdGVkIEtWTSB2aXJ0dWFsaXphdGlvbi4gSSYjMzk7bSB0aGlua2luZywgaXMgdGhlcmUgYSBkZWZpbmVkIG1ldGhvZCBpbiBwbGFjZT8gV2hhdCYjMzk7cyB0aGUgYmVzdCB3YXkgdG8gZGV0ZXJtaW5lIGlmIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGFuZCBwcm9wZXJseSBjb25maWd1cmVkIGZvciB0aGUgY3VycmVudCBlbnZpcm9ubWVudD8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGp1bXBpbmcgaW4gd2l0aG91dCB0aGlzIHByZWxpbWluYXJ5IGNoZWNrIGlzIGFza2luZyBmb3IgdHJvdWJsZS4gSXQmIzM5O2xsIHNhdmUgbWUgc2lnbmlmaWNhbnQgZGVidWdnaW5nIHRpbWUgbGF0ZXIuIEtub3dpbmcgd2hldGhlciBvciBub3QgdGhpcyBjb25maWd1cmF0aW9uIGFscmVhZHkgZXhpc3RzIHdpbGwgaGVhdmlseSBpbmZvcm0gbXkgbmV4dCBzdGVwcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXJlIGFuZCBob3cgdGhpcyBtaWdodCBiZSBkb2N1bWVudGVkIGFuZCB3aGF0IHRvb2xzIEkgc2hvdWxkIHVzZSB0byBjaGVjayBmb3IgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXN0ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDIxNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTmVzdGVkIEtWTSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHRoZXJlJiMzOTtzIG5vIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGluIEtjb25maWcgZm9yIG5lc3RlZCBLVk0uIFRoYXQmIzM5O3MgYSBiaXQgdW51c3VhbCwgYnV0IGl0IHByb2JhYmx5IG1lYW5zIGl0JiMzOTtzIGVpdGhlciBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgcGVyaGFwcyB0cmlnZ2VyZWQgYXQgcnVudGltZSBiYXNlZCBvbiBzeXN0ZW0gY2FwYWJpbGl0aWVzLiBUbyBiZSBzdXJlLCBJIG5lZWQgdG8gZGlnIGRlZXBlci4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBob3BpbmcgdG8gc2VlIGAjaWZkZWZgIG9yIGAjaWZgIHN0YXRlbWVudHMgdGhhdCBjb250cm9sIHdoZXRoZXIgdGhlIG5lc3RlZCBLVk0gZnVuY3Rpb25hbGl0eSBpcyBidWlsdCBpbnRvIHRoZSBrZXJuZWwgb3IgZXhjbHVkZWQuIFRoaXMgd2lsbCBjbGFyaWZ5IGhvdyB0aGlzIGZlYXR1cmUgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIEFSTTY0IGFyY2hpdGVjdHVyZSYjMzk7cyBLVk0gaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlPTE2PWt2bS15ICYjNDM7PSBhcm0ubyBtbXUubyBtbWlvLm8gcHNjaS5vIGh5cGVyY2FsbHMubyBwdnRpbWUubyBcXFxuLS1cbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTE5LVx0IHZnaWMtc3lzLXJlZy12My5vIGZwc2ltZC5vIHBrdm0ubyBcXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU6MjA6XHQgYXJjaF90aW1lci5vIHRybmcubyB2bWlkLm8gZW11bGF0ZS1uZXN0ZWQubyBuZXN0ZWQubyBhdC5vIFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0yMS1cdCB2Z2ljL3ZnaWMubyB2Z2ljL3ZnaWMtaW5pdC5vIFxcXG4tLVxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUtMjUtXHQgdmdpYy92Z2ljLW1taW8tdjMubyB2Z2ljL3ZnaWMta3ZtLWRldmljZS5vIFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZToyNjpcdCB2Z2ljL3ZnaWMtaXRzLm8gdmdpYy92Z2ljLWRlYnVnLm8gdmdpYy92Z2ljLXYzLW5lc3RlZC5vIFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0yNy1cdCB2Z2ljL3ZnaWMtdjUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzM1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0tcmVsYXRlZCBGdW5jdGlvbnMgZm9yIFBvdGVudGlhbCBJbXBhY3QqKgoKT2theSwgc28gdGhpcyBpcyBhYm91dCBLVk0gYW5kIGhvdyBpdCYjMzk7cyBjb21waWxlZC4gSSYjMzk7bSBmb2N1c2luZyBvbiBmaW5kaW5nIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBUaGUga2V5IHRoaW5nIGlzIHRoYXQgS1ZNIGdldHMgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5IHdoZW4gYENPTkZJR19LVk1gIGlzIGVuYWJsZWQsIHNvIHRoYXQmIzM5O3MgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBvcHRpb24gdG8ga2VlcCBpbiBtaW5kLgoKTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gaWRlbnRpZnkgYW5kIHplcm8gaW4gb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGNvbnRleHQuIEkmIzM5O3ZlIGdvdCBhIGxpc3QgZnJvbSB0aGUgcGF0Y2g6IGBrdm1faW5pdF9uZXN0ZWRgLCBga3ZtX3dhbGtfbmVzdGVkX3MyYCwgYGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlYCwgYGt2bV92Y3B1X2xvYWRfaHdfbW11YCwgYGt2bV92Y3B1X3B1dF9od19tbXVgLCBgZ2V0X2FzaWRfYnlfcmVnaW1lYCwgYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGxgLCBga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJgLCBhbmQgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAuCgpOb3csIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgb3IgYXJlIG5vbi1zdGF0aWMuIFRoZSBrZXkgb25lcyB0aGF0IEkgbmVlZCB0byBrZWVwIGluIG1pbmQgYXJlOiBga3ZtX2luaXRfbmVzdGVkYCwgYGt2bV93YWxrX25lc3RlZF9zMmAsIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAsIGBrdm1fdmNwdV9sb2FkX2h3X21tdWAsIGBrdm1fdmNwdV9wdXRfaHdfbW11YCwgYGdldF9hc2lkX2J5X3JlZ2ltZWAsIGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsYCwgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYCwgYW5kIGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgLgoKSSYjMzk7bSBhbHNvIGxvb2tpbmcgYXQgYSBjb3VwbGUgb2Ygb3RoZXIgZnVuY3Rpb25zLCBqdXN0IHRvIGJlIHN1cmU6IGBrdm1faHlwX2hhbmRsZV90bGJpX2VsMmAgKGluIGBhcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jYCkgYW5kIGBoYW5kbGVfcmlwYXMyZTFpc2AgKGluIGBhcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jYCkuIEhvd2V2ZXIsIHRoZXNlIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCBzbyBJIGRvbiYjMzk7dCBuZWVkIHRvIGxvb2sgYXQgdGhlbS4KCkl0IGxvb2tzIGxpa2UgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAsIGBrdm1fd2Fsa19uZXN0ZWRfczJgLCBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgLCBhbmQgYGt2bV9pbml0X25lc3RlZGAgYXJlIG5vbi1zdGF0aWMuCgpOb3cgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBjYWxsZXJzIGZvciBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCBhbmQgYGhhbmRsZV9yaXBhczJlMWlzYCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmN5IGdyYXBoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faGFuZGxlX3ZuY3JfYWJvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vaGFuZGxlX2V4aXQuYz0zNzY9c3RhdGljIGV4aXRfaGFuZGxlX2ZuIGFybV9leGl0X2hhbmRsZXJzW10gPSB7XG4tLVxuYXJjaC9hcm02NC9rdm0vaGFuZGxlX2V4aXQuYy0zOTUtXHRbRVNSX0VMeF9FQ19EQUJUX0xPV11cdD0ga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydCxcbmFyY2gvYXJtNjQva3ZtL2hhbmRsZV9leGl0LmM6Mzk2Olx0W0VTUl9FTHhfRUNfREFCVF9DVVJdXHQ9IGt2bV9oYW5kbGVfdm5jcl9hYm9ydCxcbmFyY2gvYXJtNjQva3ZtL2hhbmRsZV9leGl0LmMtMzk3LVx0W0VTUl9FTHhfRUNfU09GVFNUUF9MT1ddPSBrdm1faGFuZGxlX2d1ZXN0X2RlYnVnLFxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE1MTY9c3RhdGljIHZvaWQgaGFuZGxlX3ZuY3JfcGVybShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTU0MC1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE1NDE6aW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTQyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYSBQb3RlbnRpYWwgS1ZNIEV4aXQgSGFuZGxlcioqCgpBbHJpZ2h0LCAqa3ZtX2hhbmRsZV92bmNyX2Fib3J0Ki4uLiB0aGF0JiMzOTtzIGxvb2tpbmcgcHJvbWlzaW5nIGFzIGFuIGV4aXQgaGFuZGxlciwgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHRoZSBpbnZlc3RpZ2F0aW9uLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgKmhhbmRsZV9yaXBhczJlMWlzKiBoYW5kbGVyIGFzIHdlbGwsIGp1c3QgdG8gYmUgc3VyZSBJJiMzOTttIGNvbnNpZGVyaW5nIGFsbCByZWxldmFudCBhcmVhcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFuZGxlX3JpcGFzMmUxaXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz00MDMwPXN0YXRpYyBib29sIGhhbmRsZV92bWFsbHMxMmUxaXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MDUzLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MDU0OnN0YXRpYyBib29sIGhhbmRsZV9yaXBhczJlMWlzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MDU1LVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIpXG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz00MjEyPXN0YXRpYyBzdHJ1Y3Qgc3lzX3JlZ19kZXNjIHN5c19pbnNuX2Rlc2NzW10gPSB7XG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MzEyLVx0U1lTX0lOU04oVExCSV9JUEFTMkUxSVMsIGhhbmRsZV9pcGFzMmUxaXMpLFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MzEzOlx0U1lTX0lOU04oVExCSV9SSVBBUzJFMUlTLCBoYW5kbGVfcmlwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzMTQtXHRTWVNfSU5TTihUTEJJX0lQQVMyTEUxSVMsIGhhbmRsZV9pcGFzMmUxaXMpLFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MzE1Olx0U1lTX0lOU04oVExCSV9SSVBBUzJMRTFJUywgaGFuZGxlX3JpcGFzMmUxaXMpLFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MzE2LVxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNDMzNC1cdFNZU19JTlNOKFRMQklfSVBBUzJFMSwgaGFuZGxlX2lwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQzMzU6XHRTWVNfSU5TTihUTEJJX1JJUEFTMkUxLCBoYW5kbGVfcmlwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQzMzY6XHRTWVNfSU5TTihUTEJJX1JJUEFTMkUxT1MsIGhhbmRsZV9yaXBhczJlMWlzKSxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNDMzNy1cdFNZU19JTlNOKFRMQklfSVBBUzJMRTFPUywgaGFuZGxlX2lwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzMzgtXHRTWVNfSU5TTihUTEJJX0lQQVMyTEUxLCBoYW5kbGVfaXBhczJlMWlzKSxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NDMzOTpcdFNZU19JTlNOKFRMQklfUklQQVMyTEUxLCBoYW5kbGVfcmlwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQzNDA6XHRTWVNfSU5TTihUTEJJX1JJUEFTMkxFMU9TLCBoYW5kbGVfcmlwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzNDEtXHRTWVNfSU5TTihUTEJJX1JWQUUyT1MsIGhhbmRsZV90bGJpX2VsMiksXG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MzU0LVx0U1lTX0lOU04oVExCSV9JUEFTMkUxSVNOWFMsIGhhbmRsZV9pcGFzMmUxaXMpLFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MzU1Olx0U1lTX0lOU04oVExCSV9SSVBBUzJFMUlTTlhTLCBoYW5kbGVfcmlwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzNTYtXHRTWVNfSU5TTihUTEJJX0lQQVMyTEUxSVNOWFMsIGhhbmRsZV9pcGFzMmUxaXMpLFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MzU3Olx0U1lTX0lOU04oVExCSV9SSVBBUzJMRTFJU05YUywgaGFuZGxlX3JpcGFzMmUxaXMpLFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MzU4LVxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNDM3NC1cdFNZU19JTlNOKFRMQklfSVBBUzJFMU5YUywgaGFuZGxlX2lwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQzNzU6XHRTWVNfSU5TTihUTEJJX1JJUEFTMkUxTlhTLCBoYW5kbGVfcmlwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQzNzY6XHRTWVNfSU5TTihUTEJJX1JJUEFTMkUxT1NOWFMsIGhhbmRsZV9yaXBhczJlMWlzKSxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNDM3Ny1cdFNZU19JTlNOKFRMQklfSVBBUzJMRTFPU05YUywgaGFuZGxlX2lwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzNzgtXHRTWVNfSU5TTihUTEJJX0lQQVMyTEUxTlhTLCBoYW5kbGVfaXBhczJlMWlzKSxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NDM3OTpcdFNZU19JTlNOKFRMQklfUklQQVMyTEUxTlhTLCBoYW5kbGVfcmlwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQzODA6XHRTWVNfSU5TTihUTEJJX1JJUEFTMkxFMU9TTlhTLCBoYW5kbGVfcmlwYXMyZTFpcyksXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzODEtXHRTWVNfSU5TTihUTEJJX1JWQUUyT1NOWFMsIGhhbmRsZV90bGJpX2VsMiksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjAzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkFuYWx5emluZyBJbnN0cnVjdGlvbiBEaXNwYXRjaCoqCgpTbywgYGhhbmRsZV9yaXBhczJlMWlzYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEludGVyZXN0aW5nLi4uIHVzdWFsbHksIHN0YXRpYyBmdW5jdGlvbnMgc3VnZ2VzdCBhIGxvY2FsIHNjb3BlLCBub3Qgc29tZXRoaW5nIHdpZGVseSBhY2Nlc3NpYmxlLiBIb3dldmVyLCBpdCYjMzk7cyBnZXR0aW5nIGNhbGxlZCB0aHJvdWdoIGBzeXNfaW5zbl9kZXNjc2AuIFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgcG9pbnQgLSBpdCYjMzk7cyBiZWluZyBhY2Nlc3NlZCB2aWEgYSBkaXNwYXRjaCB0YWJsZSwgd2hpY2ggbWFrZXMgbWUgcmUtZXZhbHVhdGUgbXkgaW5pdGlhbCB0aG91Z2h0LiBJdCYjMzk7cyBlc3NlbnRpYWxseSBoaWRkZW4gaW50ZXJuYWxseSBidXQgaW52b2tlZCBhcyBhIGRpc3BhdGNoIHJvdXRpbmUuIEdvdCBpdC4gTm93LCB3aGF0IGFib3V0IHRoYXQgYGt2bV93YWxrX25lc3RlZF9zMmAgY2FsbCwgaG93IGRvZXMgaXQgZml0IGluIHdpdGggdGhpcyBkaXNwYXRjaCBzZXR1cCwgYW5kIHdoYXQgcmVsYXRpb25zaGlwIGRvZXMgaXQgaGF2ZSB0byBgaGFuZGxlX3JpcGFzMmUxaXNgPyBJdCBzZWVtcyBsaWtlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHJlbGF0aW9uIHRvIHRoZSBkaXNwYXRjaGluZyBtZWNoYW5pc20gYXMgd2VsbCBhcyBpdHMgY29udGV4dCB3aXRoaW4gdGhlIHdpZGVyIHN5c3RlbSB0byBzZWUgaG93IGFsbCB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fd2Fsa19uZXN0ZWRfczImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vYXQuYz00NjI9c3RhdGljIGludCB3YWxrX3MxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHMxX3dhbGtfaW5mbyAqd2ksXG4tLVxuYXJjaC9hcm02NC9rdm0vYXQuYy00ODMtXHRcdGlmICh3aS1cdTAwM2VzMikge1xuYXJjaC9hcm02NC9rdm0vYXQuYzo0ODQ6XHRcdFx0cmV0ID0ga3ZtX3dhbGtfbmVzdGVkX3MyKHZjcHUsIGlwYSwgXHUwMDI2czJfdHJhbnMpO1xuYXJjaC9hcm02NC9rdm0vYXQuYy00ODUtXHRcdFx0aWYgKHJldCA9PSAtRUFHQUlOKVxuLS1cbmFyY2gvYXJtNjQva3ZtL2F0LmM9MTU5NT1pbnQgX19rdm1fYXRfczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG9wLCB1NjQgdmFkZHIpXG4tLVxuYXJjaC9hcm02NC9rdm0vYXQuYy0xNjQ0LVx0c2NvcGVkX2d1YXJkKHNyY3UsIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNyY3UpXG5hcmNoL2FybTY0L2t2bS9hdC5jOjE2NDU6XHRcdHJldCA9IGt2bV93YWxrX25lc3RlZF9zMih2Y3B1LCBpcGEsIFx1MDAyNm91dCk7XG5hcmNoL2FybTY0L2t2bS9hdC5jLTE2NDYtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTIyNDc9aW50IGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTIzMjItXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyMzIzOlx0XHRyZXQgPSBrdm1fd2Fsa19uZXN0ZWRfczIodmNwdSwgZmF1bHRfaXBhLCBcdTAwMjZuZXN0ZWRfdHJhbnMpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMjMyNC1cdFx0aWYgKHJldCA9PSAtRUFHQUlOKSB7XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9NDc0PXN0YXRpYyB2b2lkIHNldHVwX3MyX3dhbGsoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgczJfd2Fsa19pbmZvICp3aSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy00ODgtXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzo0ODk6aW50IGt2bV93YWxrX25lc3RlZF9zMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBoeXNfYWRkcl90IGdpcGEsXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy00OTAtXHRcdCAgICAgICBzdHJ1Y3Qga3ZtX3MyX3RyYW5zICpyZXN1bHQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDc5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRpZ2dpbmcgaW50byBLVk0gTWVtb3J5IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgYGt2bV93YWxrX25lc3RlZF9zMmAgcG9wcyB1cCBpbiBib3RoIGBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0YCBhbmQgYF9fa3ZtX2F0X3MxMmAuIEhtbSwgYW5kIGl0JiMzOTtzIG5vdCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgaW4gaXRzZWxmIOKAkyBtZWFucyBpdCYjMzk7cyBsaWtlbHkgY2FsbGVkIGZyb20gb3RoZXIgcGxhY2VzIHRvbywgb3IgYXQgbGVhc3QgcG90ZW50aWFsbHkgY2FsbGFibGUuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gVGhpcyBzdWdnZXN0cyBhIGNvcmUgcm9sZSBpbiBtYW5hZ2luZyBuZXN0ZWQgcGFnaW5nLCBsaWtlbHkgcmVsYXRlZCB0byBoYW5kbGluZyBhYm9ydHMgYW5kIGFkZHJlc3Npbmcgc3BlY2lmaWMgUzEyIHNpdHVhdGlvbnMuCgpOb3csIG15IG1pbmQgc2hpZnRz4oCmIHdoYXQgYWJvdXQgYGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlYD8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaG93IGl0IHJlbGF0ZXMgdG8gdGhpcy4gVGhlcmUmIzM5O3MgYSBoaWdoIHByb2JhYmlsaXR5IHRoZXkgd29yayBjbG9zZWx5IHRvZ2V0aGVyLCBhcyBga3ZtX3dhbGtfbmVzdGVkX3MyYCBzZWVtcyB0byBkZWFsIHdpdGggbG9va2luZyBhdCBtZW1vcnkgbWFwcGluZ3MgYW5kIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAgd291bGQgcG90ZW50aWFsbHkgdXNlIHRoYXQga25vd2xlZGdlIHRvIGludmFsaWRhdGUgVExCIGVudHJpZXMuIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZS4gUGVyaGFwcyB0aGV5JiMzOTtyZSBpbnZvbHZlZCBpbiBtYW5hZ2luZyB0aGUgbWVtb3J5IHN0YXRlIHdoZW4gYSBndWVzdCBhYm9ydHMgb3IgaXMgd29ya2luZyBhdCBTMTIuIFRoZXkgbWlnaHQgYm90aCBoYXZlIGEgcm9sZSBpbiBlbnN1cmluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBndWVzdCYjMzk7cyBtZW1vcnkgc3BhY2UgYW5kIHRoZSBob3N0JiMzOTtzIHRyYW5zbGF0aW9uIHRhYmxlcy4gSXQgaXMgcG9zc2libGUgYGt2bV93YWxrX25lc3RlZF9zMmAgaXMgdXNlZCBmb3IgdHJhdmVyc2luZyB0aGUgbmVzdGVkIHBhZ2luZyBzdHJ1Y3R1cmUgdG8gZGV0ZXJtaW5lIHRoZSByYW5nZSB0aGF0IGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAgbmVlZHMgdG8gaW52YWxpZGF0ZS4gSSYjMzk7bGwgaGF2ZSB0byBkZWx2ZSBkZWVwZXIgdG8gY29uZmlybSBteSBoeXBvdGhlc2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21wdXRlX3RsYl9pbnZhbF9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz02MDY9c3RhdGljIHU4IGdldF9ndWVzdF9tYXBwaW5nX3R0bChzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1NjQgYWRkcilcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy02NzYtXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzo2Nzc6dW5zaWduZWQgbG9uZyBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1NjQgdmFsKVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtNjc4LXtcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTQwOTQ9c3RhdGljIHZvaWQgczJfbW11X3VubWFwX2lwYShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LFxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNDEwOS1cdGJhc2VfYWRkciA9IChpbmZvLVx1MDAzZWlwYS5hZGRyIFx1MDAyNiBHRU5NQVNLX1VMTCgzNSwgMCkpIFx1MDAzY1x1MDAzYyAxMjtcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NDExMDpcdG1heF9zaXplID0gY29tcHV0ZV90bGJfaW52YWxfcmFuZ2UobW11LCBpbmZvLVx1MDAzZWlwYS5hZGRyKTtcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNDExMS1cdGJhc2VfYWRkciBcdTAwMjY9IH4obWF4X3NpemUgLSAxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyMzUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyBUTEIgSW52YWxpZGF0aW9ucyBpbiBLVk0qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAgYW5kIEkmIzM5O20gaW1tZWRpYXRlbHkgc3RydWNrIGJ5IHRoZSBmYWN0IHRoYXQgaXQgaXNuJiMzOTt0IHN0YXRpYy4gVGhhdCB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgYmVpbmcgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgbW9kdWxlLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gVGhlIG5vbi1zdGF0aWMgbmF0dXJlIGhpbnRzIGF0IGEgbW9yZSBjb21wbGV4IGludGVyYWN0aW9uLCBtYXliZSBpbnZvbHZpbmcgb3RoZXIgcGFydHMgb2YgdGhlIEtWTSBjb2RlLgoKTXkgbmV4dCBtb3ZlIGlzIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYW5kIHdoeSB0aGlzIGlzIGJlaW5nIHVzZWQuIExldCYjMzk7cyBzZWUuLi4gYSBnb29kIHN0YXJ0aW5nIHBvaW50IGlzIHByb2JhYmx5IGBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYmAuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBmb3IgcG90ZW50aWFsIGludm9jYXRpb25zLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gYWxsb2NhdGluZyB0aGUgVmlydHVhbC10by1QaHlzaWNhbCB0cmFuc2xhdGlvbiBsb29rYXNpZGUgYnVmZmVyLCB3aGljaCByZWxhdGVzIGRpcmVjdGx5IHRvIFRMQiBtYW5hZ2VtZW50LiBUaGUgbG9naWMgd2l0aGluIHNob3VsZCBpbGx1bWluYXRlIGhvdyBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgIGZhY3RvcnMgaW50byB0aGF0IGFsbG9jYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIHRvIGdldCBhIGNsZWFyZXIgdmlldyBvZiB0aGUgaW52YWxpZGF0aW9uIHN0cmF0ZWd5IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2FybS5jPTkyMT1pbnQga3ZtX2FyY2hfdmNwdV9ydW5fcGlkX2NoYW5nZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtOTUxLVx0aWYgKHZjcHVfaGFzX252KHZjcHUpKSB7XG5hcmNoL2FybTY0L2t2bS9hcm0uYzo5NTI6XHRcdHJldCA9IGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiKHZjcHUpO1xuYXJjaC9hcm02NC9rdm0vYXJtLmMtOTUzLVx0XHRpZiAocmV0KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEzMTc9dm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzgwLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTM4MTppbnQga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTM4Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODI5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIEtWTSYjMzk7cyBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJgIGlzbiYjMzk7dCBzdGF0aWMuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBLbm93aW5nIHRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgc29tZXRoaW5nIGFib3V0IGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIHVzYWdlIHdpdGhpbiB0aGUgYnJvYWRlciBLVk0gY29kZWJhc2UuIEl0IG1lYW5zIGl0JiMzOTtzIGxpa2VseSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUgaXQmIzM5O3MgZGVmaW5lZCBpbiwgd2hpY2ggaW1wYWN0cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0cmFjaW5nIGl0cyBwdXJwb3NlIGFuZCBkZXBlbmRlbmNpZXMuIE5vdywgbGV0JiMzOTtzIHNlZSB3aGVyZSBhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKnVzZWQqLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBga3ZtX2luaXRfbmVzdGVkYC4gSSYjMzk7bSBndWVzc2luZyB0aGF0IGZ1bmN0aW9uIG1pZ2h0IGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgYXMgaXQmIzM5O3Mgb2Z0ZW4gYSBjZW50cmFsIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGFuZCBoYXMgYSBnb29kIGNoYW5jZSBvZiBiZWluZyB3aGVyZSBga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJgIGlzIGNhbGxlZCBvciBzb21laG93IHJlbGV2YW50LiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsIGlzIGtleSB0byBncmFzcGluZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ3kgaW4gS1ZNJiMzOTtzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpbXBsZW1lbnRhdGlvbi4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gYnVpbGQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIHJvbGUgaW4gdmlydHVhbGl6aW5nIG5lc3RlZCBwYWdlIHRhYmxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2luaXRfbmVzdGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2FybS5jPTIyMj1pbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbi0tXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0yMzgtXG5hcmNoL2FybTY0L2t2bS9hcm0uYzoyMzk6XHRrdm1faW5pdF9uZXN0ZWQoa3ZtKTtcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTI0MC1cbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz05ODE9aW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAzNi1cdGlmIChrdm1faXNfbmVzdGVkX3MyX21tdShrdm0sIG1tdSkpXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMDM3Olx0XHRrdm1faW5pdF9uZXN0ZWRfczJfbW11KG1tdSk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMDM4LVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTExMjU9dm9pZCBrdm1fZnJlZV9zdGFnZTJfcGdkKHN0cnVjdCBrdm1fczJfbW11ICptbXUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTEzOC1cdGlmIChrdm1faXNfbmVzdGVkX3MyX21tdShrdm0sIG1tdSkpXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMTM5Olx0XHRrdm1faW5pdF9uZXN0ZWRfczJfbW11KG1tdSk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMTQwLVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTIwPXN0cnVjdCB2bmNyX3RsYiB7XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtNDYtXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzo0Nzp2b2lkIGt2bV9pbml0X25lc3RlZChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy00OC17XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9ODA1PXN0YXRpYyBzdHJ1Y3Qga3ZtX3MyX21tdSAqZ2V0X3MyX21tdV9uZXN0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTg2OS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjg3MDp2b2lkIGt2bV9pbml0X25lc3RlZF9zMl9tbXUoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSlcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTg3MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Nzc2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgRm9jdXM6IE5lc3RlZCBLVk0gb24gQXJtNjQqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG5lc3RlZCBLVk0gY29kZSwgYW5kIGhlcmUmIzM5O3MgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHdoZXJlIHRvIGZvY3VzIHRoZSBmdXp6aW5nIGVmZm9ydHMuIEZpcnN0LCBJJiMzOTttIGlkZW50aWZ5aW5nIHRoZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIFZOQ1IgKFZpcnR1YWwgTmVzdGVkIENvbnRyb2wgUmVnaXN0ZXJzKSBhYm9ydCBoYW5kbGluZyBhbmQgUzIgdHJhbnNsYXRpb24uCgpNeSBpbml0aWFsIGxpc3Qgb2YgZnVuY3Rpb25zIG9mIGludGVyZXN0IGluY2x1ZGVzOiBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCwgYGt2bV93YWxrX25lc3RlZF9zMmAsIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAsIGBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYmAsIGFuZCBga3ZtX2luaXRfbmVzdGVkYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBkaXNtaXNzaW5nIGBrdm1faW5pdF9uZXN0ZWRgIGJlY2F1c2UgaXQgYXBwZWFycyB0byBiZSBwdXJlbHkgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gYW5kIHRoZXJlZm9yZSBsZXNzIGxpa2VseSB0byBleHBvc2UgaW50ZXJlc3RpbmcgZnV6emluZyB0YXJnZXRzIGRpcmVjdGx5LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgcmVtYWluaW5nIGNhbmRpZGF0ZXMgbW9yZSBjYXJlZnVsbHk6CgoqICAgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGA6IFRoaXMgbG9va3MgbGlrZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgVk5DUiBhYm9ydHMuIEl0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0LgoqICAgYGt2bV93YWxrX25lc3RlZF9zMmA6IFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBuZXN0ZWQgUzIgcGFnZSB3YWxrLCBhbm90aGVyIGNyaXRpY2FsIGFyZWEuCiogICBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgOiBUaGlzIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBUTEIgaW52YWxpZGF0aW9uIHJhbmdlcywgcG90ZW50aWFsbHkgY29tcGxleCBsb2dpYyB0aGF0IG5lZWRzIGNsb3NlIHNjcnV0aW55LgoqICAgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYDogVGhpcyBvbmUgaXMgaW50ZXJlc3Rpbmc7IGl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgdkNQVSBydW4gUElEIGNoYW5nZXMuCgpOZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSXQgbG9va3MgbGlrZSBgQ09ORklHX0tWTWAgaXMgdGhlIHByaW1hcnkgcmVxdWlyZW1lbnQuIFRoaXMgaXMgZ29vZDsgaXQgc2ltcGxpZmllcyB0aGluZ3MuIFRoZSBwYXRjaCBtb2RpZmllcyBgYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNgIHdoaWNoIGlzIGJ1aWx0IHdpdGggYGt2bS15ICYjNDM7PSBuZXN0ZWQub2AgaW4gdGhlIGBNYWtlZmlsZWAuIFRoYXQgY29uZmlybXMgYENPTkZJR19LVk1gIGlzIGluZGVlZCBzdWZmaWNpZW50LgoKSSYjMzk7bSBub3cgZ29pbmcgdG8gY29uZmlybSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgcmVhY2hhYmxlLiBJdCYjMzk7cyBubyB1c2UgdGFyZ2V0aW5nIGEgZnVuY3Rpb24gdGhhdCBpc24mIzM5O3QgY2FsbGVkLiBJJiMzOTttIHZlcmlmeWluZyB0aGUgY2FsbCBncmFwaDoKCiogICBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBiZWNhdXNlIGl0IGlzIGluIGBhcm1fZXhpdF9oYW5kbGVyc2AgZm9yIGBFU1JfRUx4X0VDX0RBQlRfQ1VSYCwgdGhpcyBpcyBncmVhdC4KKiAgIGBrdm1fd2Fsa19uZXN0ZWRfczJgIGlzIHJlYWNoZWQgdmlhIGBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0YCBhbmQgYF9fa3ZtX2F0X3MxMmAsIHRoYXQgaXMgZ29vZC4KKiAgIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAgaXMgY2FsbGVkIGZyb20gYHMyX21tdV91bm1hcF9pcGFgLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBmcm9tIGBoYW5kbGVfcmlwYXMyZTFpc2AgYW5kIGBoYW5kbGVfaXBhczJlMWlzYCwgdGhpcyBpcyBhbHNvIHNvbGlkLgoqICAgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYCBpcyByZWFjaGVkIHZpYSBga3ZtX2FyY2hfdmNwdV9ydW5fcGlkX2NoYW5nZWAsIGdvb2QgdG8ga25vdy4KCkkmIzM5O20gYWxzbyBzZWVpbmcgb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zIGxpa2UgYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGxgLCBga3ZtX3ZjcHVfbG9hZF9od19tbXVgLCBhbmQgYGt2bV92Y3B1X3B1dF9od19tbXVgLiBIb3dldmVyLCBga3ZtX2FyY2hfZmx1c2hfc2hhZG93X2FsbGAgc2VlbXMgZ2VuZXJpYy4gSSYjMzk7bGwgZXhhbWluZSB0aGUgTU1VIGZ1bmN0aW9ucyBhcyB3ZWxsLCBmb3IgdGhvcm91Z2huZXNzLCBidXQgbXkgY29yZSBmb2N1cyB3aWxsIGJlIHRoZSBpbml0aWFsIGZvdXIgdGhhdCBJIGlkZW50aWZpZWQuIFNvLCBJIHdpbGwgY2hlY2sgYGt2bV92Y3B1X3B1dF9od19tbXVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fdmNwdV9wdXRfaHdfbW11JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2FybS5jPTc0Nj12b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9hcm0uYy03NjAtXHRpZiAodmNwdV9oYXNfbnYodmNwdSkpXG5hcmNoL2FybTY0L2t2bS9hcm0uYzo3NjE6XHRcdGt2bV92Y3B1X3B1dF9od19tbXUodmNwdSk7XG5hcmNoL2FybTY0L2t2bS9hcm0uYy03NjItXHRrdm1fYXJtX3ZtaWRfY2xlYXJfYWN0aXZlKCk7XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9OTEzPXN0YXRpYyB2b2lkIHRoaXNfY3B1X3Jlc2V0X3ZuY3JfZml4bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy05MzQtXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzo5MzU6dm9pZCBrdm1fdmNwdV9wdXRfaHdfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTkzNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4Mzk3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgaXMgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3ZjcHVfcHV0YCwgcmlnaHQ/IFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGUgcGF0Y2ggaXRzZWxmIGlzIGZ1bmN0aW9uYWwgYW5kLCBpbXBvcnRhbnRseSwgaXQmIzM5O3MgbWVzc2luZyB3aXRoIGNvcmUgS1ZNIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYy4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluaywgJiMzNDtXb3J0aEZ1enppbmcgPSB0cnVlJiMzNDsuIEFsd2F5cyBhIGdvb2Qgc2lnbi4KCk5vdywgbGV0JiMzOTtzIHNlZSwgd2hhdCBhcmUgdGhlIGtleSBhcmVhcyBpdCYjMzk7cyB0b3VjaGluZz8gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZTogYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAsIGBrdm1fd2Fsa19uZXN0ZWRfczJgLCBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgLCBga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJgLCBga3ZtX3ZjcHVfcHV0X2h3X21tdWAsIGFuZCBga3ZtX3ZjcHVfbG9hZF9od19tbXVgLiBWTkNSIFRMQnMsIG5lc3RlZCBTMiB3YWxrcywgVExCIGludmFsaWRhdGlvbi4uLiB5ZXAsIHRoaXMgaXMgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSB2aXJ0dWFsaXphdGlvbiBzdGFjaywgcG90ZW50aWFsbHkgYWNjZXNzaWJsZSBkdXJpbmcgZ3Vlc3QgZXhlY3V0aW9uLiBNeSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmc7IHBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcyBhbmQgdnVsbmVyYWJpbGl0aWVzIGluIHRoaXMgYXJlYS4KClRoZSBgQ29uZmlnc2Agc2VjdGlvbiBjb25maXJtcyBpdCYjMzk7cyBLVk0sIHNvIHdlJiMzOTtyZSBvbiB0aGUgcmlnaHQgdHJhY2suIE15IGltbWVkaWF0ZSByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIEtWTSBBUk02NCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgVk5DUiBUTEJzLCBuZXN0ZWQgUzIgd2Fsa3MsIGFuZCBUTEIgaW52YWxpZGF0aW9uIHJhbmdlcywgYWxsIG9mIHdoaWNoIGFyZSAqY3JpdGljYWwqIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIGFuZCBlYXNpbHkgcmVhY2hlZCBmcm9tIGd1ZXN0IGV4ZWN1dGlvbi4KCkkgdGhpbmsgYmVmb3JlIEkgZGl2ZSBhbnkgZGVlcGVyLCBJJiMzOTttIGdvaW5nIHRvIHZlcmlmeSBga3ZtX3ZjcHVfbG9hZF9od19tbXVgLiBJdCYjMzk7cyBhIGdvb2Qgc3ltYm9sIHRvIHN0YXJ0IHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV92Y3B1X2xvYWRfaHdfbW11JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2FybS5jPTY2ND12b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtNjcyLVx0aWYgKHZjcHVfaGFzX252KHZjcHUpKVxuYXJjaC9hcm02NC9rdm0vYXJtLmM6NjczOlx0XHRrdm1fdmNwdV9sb2FkX2h3X21tdSh2Y3B1KTtcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTY3NC1cbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz04NzA9dm9pZCBrdm1faW5pdF9uZXN0ZWRfczJfbW11KHN0cnVjdCBrdm1fczJfbW11ICptbXUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtODc3LVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6ODc4OnZvaWQga3ZtX3ZjcHVfbG9hZF9od19tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtODc5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyNjUKCQkJCQkJCW91dHB1dDogMTY3CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBpZiB0aGV5IGFyZSBteSBvd246CgoqKkxvYWRpbmcgdGhlIFZpcnR1YWwgQ1BVIFN0YXRlKioKClJpZ2h0LCBzbyBJIHNlZSB0aGlzIG9yaWdpbmF0ZXMgd2l0aGluIGBrdm1fYXJjaF92Y3B1X2xvYWRgLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludC4gSSBuZWVkIHRvIHJlcG9ydCBteSBmaW5kaW5ncywgYW5kIEkmIzM5O2xsIGxldmVyYWdlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgZm9yIHRoYXQuIEl0IHNlZW1zIHRoZSBtb3N0IGVmZmljaWVudCBhbmQgc3RhbmRhcmQgd2F5IHRvIGNvbW11bmljYXRlIHRoZSBzdGF0ZSBvZiB0aGUgbG9hZGVkIHZDUFUgaXMgdmlhIHRoaXMgcmVwb3J0aW5nIHRvb2wuIEkmIzM5O2xsIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9oYW5kbGVfdm5jcl9hYm9ydCYjMzQ7LAogICAgJiMzNDtrdm1fd2Fsa19uZXN0ZWRfczImIzM0OywKICAgICYjMzQ7Y29tcHV0ZV90bGJfaW52YWxfcmFuZ2UmIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGImIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfcHV0X2h3X21tdSYjMzQ7LAogICAgJiMzNDtrdm1fdmNwdV9sb2FkX2h3X21tdSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0gQVJNNjQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIFZOQ1IgVExCcywgbmVzdGVkIFMyIHdhbGtzLCBhbmQgVExCIGludmFsaWRhdGlvbiByYW5nZXMuIFRoZXNlIGFyZSBjb3JlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IGV4ZWN1dGlvbiBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2hhbmRsZV92bmNyX2Fib3J0JiMzNDssCiAgICAmIzM0O2t2bV93YWxrX25lc3RlZF9zMiYjMzQ7LAogICAgJiMzNDtjb21wdXRlX3RsYl9pbnZhbF9yYW5nZSYjMzQ7LAogICAgJiMzNDtrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYiYjMzQ7LAogICAgJiMzNDtrdm1fdmNwdV9wdXRfaHdfbW11JiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2xvYWRfaHdfbW11JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBBUk02NCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgaGFuZGxpbmcgb2YgVk5DUiBUTEJzLCBuZXN0ZWQgUzIgd2Fsa3MsIGFuZCBUTEIgaW52YWxpZGF0aW9uIHJhbmdlcy4gVGhlc2UgYXJlIGNvcmUgdmlydHVhbGl6YXRpb24gZmVhdHVyZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgZXhlY3V0aW9uIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6MDQ6MDYuMzc4OTY2OTA2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgxMzU2MDgxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2hhbmRsZV92bmNyX2Fib3J0XCIsXG4gICAgXCJrdm1fd2Fsa19uZXN0ZWRfczJcIixcbiAgICBcImNvbXB1dGVfdGxiX2ludmFsX3JhbmdlXCIsXG4gICAgXCJrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYlwiLFxuICAgIFwia3ZtX3ZjcHVfcHV0X2h3X21tdVwiLFxuICAgIFwia3ZtX3ZjcHVfbG9hZF9od19tbXVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gQVJNNjQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIFZOQ1IgVExCcywgbmVzdGVkIFMyIHdhbGtzLCBhbmQgVExCIGludmFsaWRhdGlvbiByYW5nZXMuIFRoZXNlIGFyZSBjb3JlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IGV4ZWN1dGlvbiBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6MDQ6MDYuMzc4OTc2ODg2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE5MjI4NzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGIzNTZmOGE0YTgxMjE1MDViYzEyZGJlYTA0ZTk3ZDU1MGIzNTVhM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyA2IDEwOjA0OjA0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IGJhZTJjNGY5MmVmNWMuLjEwODk2NmE5ZGIxMmIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTQxMSw4ICs0MTEsOCBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xcbiBcXHQvKiBNYXNrcyBmb3IgVk5DUi1iYWNrZWQgYW5kIGdlbmVyYWwgRUwyIHN5c3JlZ3MgKi9cXG4gXFx0c3RydWN0IGt2bV9zeXNyZWdfbWFza3NcXHQqc3lzcmVnX21hc2tzO1xcbiBcXG4tXFx0LyogQ291bnQgdGhlIG51bWJlciBvZiBWTkNSX0VMMiBjdXJyZW50bHkgbWFwcGVkICovXFxuLVxcdGF0b21pY190IHZuY3JfbWFwX2NvdW50O1xcbitcXHQvKiBDb3VudCB0aGUgbnVtYmVyIG9mIFZOQ1JfRUwyIFRMQnMgKi9cXG4rXFx0YXRvbWljX3Qgdm5jcl90bGJfY291bnQ7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBGb3IgYW4gdW50cnVzdGVkIGhvc3QgVk0sICdwa3ZtLmhhbmRsZScgaXMgdXNlZCB0byBsb29rdXBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaFxcbmluZGV4IDAxMmQ3MTEwMzRkMTcuLmM4M2JlNmQwZTc5YWMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaFxcbkBAIC0yOTEsNiArMjkxLDEzIEBAIHN0YXRpYyBpbmxpbmUgdTY0IGRlY29kZV9yYW5nZV90bGJpKHU2NCB2YWwsIHU2NCAqcmFuZ2UsIHUxNiAqYXNpZClcXG4gXFxuIFxcdGJhc2VcXHQ9ICh2YWwgXFx1MDAyNiBHRU5NQVNLKDM2LCAwKSkgXFx1MDAzY1xcdTAwM2Mgc2hpZnQ7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBXZSBvbmx5IGRlYWwgd2l0aCBhdCBtb3N0IDQ4Yml0IFZBL0lQQSwgc28gNDggaXMgd2hlcmUgd2VcXG4rXFx0ICogc2lnbi1leHRlbmQgZnJvbS4gU2hvdWxkIHdlIHN1cHBvcnQgRkVBVF9Me1ZQfUEqIGF0IHNvbWUgcG9pbnQsXFxuK1xcdCAqIHRoaXMgd2lsbCBuZWVkIHRvIGJlIHJldmlzaXRlZC5cXG4rXFx0ICovXFxuK1xcdGJhc2VcXHQ9ICh1NjQpc2lnbl9leHRlbmQ2NChiYXNlLCA0OCk7XFxuK1xcbiBcXHRpZiAoYXNpZClcXG4gXFx0XFx0KmFzaWQgPSBGSUVMRF9HRVQoVExCSVJfQVNJRF9NQVNLLCB2YWwpO1xcbiBcXG5AQCAtMzg4LDYgKzM5NSw4IEBAIHN0cnVjdCBzMV93YWxrX3Jlc3VsdCB7XFxuIFxcdGJvb2xcXHRmYWlsZWQ7XFxuIH07XFxuIFxcbisjZGVmaW5lIFMxX01NVV9ESVNBQkxFRFxcdFxcdCgtMTI3KVxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIGZhaWxfczFfd2FsayhzdHJ1Y3QgczFfd2Fsa19yZXN1bHQgKndyLCB1OCBmc3QsIGJvb2wgczFwdHcpXFxuIHtcXG4gXFx0d3ItXFx1MDAzZWZzdFxcdFxcdD0gZnN0O1xcbkBAIC0zOTYsNiArNDA1LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmYWlsX3MxX3dhbGsoc3RydWN0IHMxX3dhbGtfcmVzdWx0ICp3ciwgdTggZnN0LCBib29sIHMxcHR3KVxcbiBcXHR3ci1cXHUwMDNlZmFpbGVkXFx0PSB0cnVlO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgczFfd2Fsa190cmFuc2xhdGVkKHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IpXFxuK3tcXG4rXFx0cmV0dXJuIHdyLVxcdTAwM2VsZXZlbCAhPSBTMV9NTVVfRElTQUJMRUQ7XFxuK31cXG4rXFxuIGludCBfX2t2bV90cmFuc2xhdGVfdmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgczFfd2Fsa19pbmZvICp3aSxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IsIHU2NCB2YSk7XFxuIGludCBfX2t2bV9maW5kX3MxX2Rlc2NfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmEsIHU2NCBpcGEsXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2F0LmMgYi9hcmNoL2FybTY0L2t2bS9hdC5jXFxuaW5kZXggNjQwZjJkYzAwYThiYS4uMDkyNjQyNmI4Nzk4OSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9hdC5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vYXQuY1xcbkBAIC0xMSw4ICsxMSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX21tdS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2xzdWkuaFxcdTAwM2VcXG4gXFxuLSNkZWZpbmUgUzFfTU1VX0RJU0FCTEVEXFx0XFx0KC0xMjcpXFxuLVxcbiBzdGF0aWMgaW50IGdldF9pYV9zaXplKHN0cnVjdCBzMV93YWxrX2luZm8gKndpKVxcbiB7XFxuIFxcdHJldHVybiA2NCAtIHdpLVxcdTAwM2V0eHN6O1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xcbmluZGV4IGJiZTljZWJkM2Q5ZDUuLmZhNzc2YjE4YTMyY2EgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcXG5AQCAtNDI0LDExICs0MjQsMTUgQEAgc3RhdGljIGJvb2wga3ZtX2h5cF9oYW5kbGVfdGxiaV9lbDIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmV4aXRfY29kZSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogSWYgd2UgaGF2ZSB0byBjaGVjayBmb3IgYW55IFZOQ1IgbWFwcGluZyBiZWluZyBpbnZhbGlkYXRlZCxcXG4tXFx0ICogZ28gYmFjayB0byB0aGUgc2xvdyBwYXRoIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuXFxuK1xcdCAqIElmIHdlIGhhdmUgdG8gY2hlY2sgZm9yIGFueSBWTkNSIFRMQiBiZWluZyBpbnZhbGlkYXRlZCwgZ28gYmFja1xcbitcXHQgKiB0byB0aGUgc2xvdyBwYXRoIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuXFxuK1xcdCAqXFxuK1xcdCAqIFRoZSBzeW5jaHJvbmlzYXRpb24gYmV0d2VlbSBUTEJJIGFuZCB3YWxrIGlzIHByb3ZpZGVkIGJ5IHRoZVxcbitcXHQgKiBzcGVjdWxhdGl2ZSBpbmNyZW1lbnQgb2YgdGhlIFRMQiBjb3VudGVyIG9uIHdhbGssIGFuZCB0aGVcXG4rXFx0ICogaW52YWxpZGF0aW9uIGNvdW50ZXIuIFllcywgdGhpcyBpcyBmaWRkbHkuXFxuIFxcdCAqL1xcbiBcXHRpZiAodmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSBcXHUwMDI2XFx1MDAyNiB2Y3B1X2VsMl90Z2VfaXNfc2V0KHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBhdG9taWNfcmVhZChcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnZuY3JfbWFwX2NvdW50KSlcXG4rXFx0ICAgIGF0b21pY19yZWFkKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gudm5jcl90bGJfY291bnQpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRfX2t2bV9za2lwX2luc3RyKHZjcHUpO1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXFxuaW5kZXggZGZiOTZlZGJkYzQzYy4uMjBhZjk0MTk3YThhNyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXFxuQEAgLTI3LDcgKzI3LDcgQEAgc3RydWN0IHZuY3JfdGxiIHtcXG4gXFx0Ym9vbFxcdFxcdFxcdGhwYV93cml0YWJsZTtcXG4gXFxuIFxcdC8qIC0xIHdoZW4gbm90IG1hcHBlZCBvbiBhIENQVSAqL1xcbi1cXHRpbnRcXHRcXHRcXHRjcHU7XFxuK1xcdGF0b21pY190XFx0XFx0Y3B1O1xcbiBcXG4gXFx0LypcXG4gXFx0ICogdHJ1ZSBpZiB0aGUgVExCIGlzIHZhbGlkLiBDYW4gb25seSBiZSBjaGFuZ2VkIHdpdGggdGhlXFxuQEAgLTQ4LDcgKzQ4LDcgQEAgdm9pZCBrdm1faW5pdF9uZXN0ZWQoc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuIFxcdGt2bS1cXHUwMDNlYXJjaC5uZXN0ZWRfbW11cyA9IE5VTEw7XFxuIFxcdGt2bS1cXHUwMDNlYXJjaC5uZXN0ZWRfbW11c19zaXplID0gMDtcXG4tXFx0YXRvbWljX3NldChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnZuY3JfbWFwX2NvdW50LCAwKTtcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnZuY3JfdGxiX2NvdW50LCAwKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBpbml0X25lc3RlZF9zMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KVxcbkBAIC01MDYsNyArNTA2LDcgQEAgaW50IGt2bV93YWxrX25lc3RlZF9zMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBoeXNfYWRkcl90IGdpcGEsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgdHRsX3RvX3NpemUodTggdHRsKVxcbitzdGF0aWMgdW5zaWduZWQgaW50IF9fdHRsX3RvX3NpemUodTggdHRsKVxcbiB7XFxuIFxcdGludCBsZXZlbCA9IHR0bCBcXHUwMDI2IDM7XFxuIFxcdGludCBncmFuID0gKHR0bCBcXHUwMDNlXFx1MDAzZSAyKSBcXHUwMDI2IDM7XFxuQEAgLTU2MiwxMCArNTYyLDIyIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHRsX3RvX3NpemUodTggdHRsKVxcbiBcXHRyZXR1cm4gbWF4X3NpemU7XFxuIH1cXG4gXFxuLXN0YXRpYyB1OCBwZ3NoaWZ0X2xldmVsX3RvX3R0bCh1MTYgc2hpZnQsIHU4IGxldmVsKVxcbitzdGF0aWMgdW5zaWduZWQgaW50IHR0bF90b19zaXplKHU4IHR0bClcXG4re1xcbitcXHRyZXR1cm4gX190dGxfdG9fc2l6ZSh0dGwpID86IFNaXzFHO1xcbit9XFxuK1xcbitzdGF0aWMgdTggcGdzaGlmdF9sZXZlbF90b190dGwodTE2IHNoaWZ0LCBzOCBsZXZlbClcXG4ge1xcbiBcXHR1OCB0dGw7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBJZiB3ZSBkb24ndCBoYXZlIGEgcHJvcGVyIGxldmVsLCBmYWxsYmFjayB0byB0aGUgbWF4aW11bVxcbitcXHQgKiBzaXplLlxcbitcXHQgKi9cXG4rXFx0aWYgKGxldmVsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHRzd2l0Y2goc2hpZnQpIHtcXG4gXFx0Y2FzZSAxMjpcXG4gXFx0XFx0dHRsID0gVExCSV9UVExfVEdfNEs7XFxuQEAgLTY3Niw3ICs2ODgsMTEgQEAgdW5zaWduZWQgbG9uZyBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1NjQgdmFsKVxcbiBcXHRcXHR0dGwgPSBnZXRfZ3Vlc3RfbWFwcGluZ190dGwobW11LCBhZGRyKTtcXG4gXFx0fVxcbiBcXG4tXFx0bWF4X3NpemUgPSB0dGxfdG9fc2l6ZSh0dGwpO1xcbitcXHQvKlxcbitcXHQgKiBEb24ndCB1c2UgdGhlIGRlZmF1bHQgMUdCIGZhbGxiYWNrLCBhcyB3ZSBjYW4gYWRhcHQgdG8gdGhlXFxuK1xcdCAqIG1heCBtYXBwaW5nIHNpemUgd2UgYWxsb3cgYXQgUzIuXFxuK1xcdCAqL1xcbitcXHRtYXhfc2l6ZSA9IF9fdHRsX3RvX3NpemUodHRsKTtcXG4gXFxuIFxcdGlmICghbWF4X3NpemUpIHtcXG4gXFx0XFx0LyogQ29tcHV0ZSB0aGUgbWF4aW11bSBleHRlbnQgb2YgdGhlIGludmFsaWRhdGlvbiAqL1xcbkBAIC04NzksMTggKzg5NSw0MSBAQCB2b2lkIGt2bV92Y3B1X2xvYWRfaHdfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0fVxcbiB9XFxuIFxcbisvKlxcbisgKiBVbm1hcHBpbmcgYW4gTDEgVk5DUiBjYW4gaGFwcGVuIGNvbmN1cnJlbnRseSB3aXRob3V0IHRoZSBtbXUgbG9jayBiZWluZ1xcbisgKiBlZmZlY3RpdmUgKHZjcHVfcHV0KCkgdnMgVExCSSBoYW5kbGluZykuIFRoZSBhdG9taWNfeGNoZyBiZWxvdyBlbnN1cmVzXFxuKyAqIHRoYXQgb25seSBvbmUgQ1BVIHNldHMgaXQgdG8gLTEgd2hpbGUgZ2V0dGluZyBhIHZhbGlkIENQVSBudW1iZXIgYmFjay5cXG4rICovXFxuK3N0YXRpYyBpbnQgdW5tYXBfbDFfdm5jcihzdHJ1Y3Qgdm5jcl90bGIgKnZ0KVxcbit7XFxuK1xcdGludCBjcHUgPSBhdG9taWNfeGNoZ19yZWxheGVkKFxcdTAwMjZ2dC1cXHUwMDNlY3B1LCAtMSk7XFxuK1xcbitcXHRpZiAoY3B1ICE9IC0xKVxcbitcXHRcXHRjbGVhcl9maXhtYXAodm5jcl9maXhtYXAoY3B1KSk7XFxuK1xcbitcXHRyZXR1cm4gY3B1O1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB0aGlzX2NwdV9yZXNldF92bmNyX2ZpeG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0aWYgKCFob3N0X2RhdGFfdGVzdF9mbGFnKEwxX1ZOQ1JfTUFQUEVEKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0QlVHX09OKHZjcHUtXFx1MDAzZWFyY2gudm5jcl90bGItXFx1MDAzZWNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpO1xcbiBcXHRCVUdfT04oaXNfaHlwX2N0eHQodmNwdSkpO1xcbiBcXG4tXFx0Y2xlYXJfZml4bWFwKHZuY3JfZml4bWFwKHZjcHUtXFx1MDAzZWFyY2gudm5jcl90bGItXFx1MDAzZWNwdSkpO1xcbi1cXHR2Y3B1LVxcdTAwM2VhcmNoLnZuY3JfdGxiLVxcdTAwM2VjcHUgPSAtMTtcXG4rXFx0LypcXG4rXFx0ICogVW5jb25kaXRpb25hbGx5IHVubWFwIHRoZSBsb2NhbCBWTkNSIGlmIHdlIGhhdmUgbG9zdCB0aGUgcmFjZVxcbitcXHQgKiBhZ2FpbnN0IGEgY29uY3VycmVudCBUTEJJLiBPdGhlcndpc2Ugd2UgY291bGQgZW5kLXVwIHJ1bm5pbmdcXG4rXFx0ICogYW5vdGhlciB2Y3B1IHdpdGggVk5DUiBzdGlsbCBtYXBwZWQgaWYgdGhlIFRMQkkgdGhyZWFkIGlzXFxuK1xcdCAqIHByZWVtcHRlZCBiZXR3ZWVuIHRoZSBleGNoYW5nZSBhbmQgdGhlIGNsZWFyX2ZpeG1hcCgpLlxcbitcXHQgKlxcbitcXHQgKiBOb3RlIHRoYXQgd2UgZG8gbm90IGNhcmUgYWJvdXQgdGhlIFRMQkkgbnVraW5nIHRoZSBmaXhtYXAgYmVoaW5kXFxuK1xcdCAqIHRoZSBiYWNrIG9mIGFuIHJ1bm5pbmcgdmNwdS4gVGhpcyB3aWxsIG9ubHkgZ2VuZXJhdGUgYSBmYXVsdCBhbmRcXG4rXFx0ICogcG9zc2libHkgYSByZXRyYW5zbGF0aW9uLlxcbitcXHQgKi9cXG4rXFx0aWYgKHVubWFwX2wxX3ZuY3IodmNwdS1cXHUwMDNlYXJjaC52bmNyX3RsYikgPT0gLTEpXFxuK1xcdFxcdGNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcChzbXBfcHJvY2Vzc29yX2lkKCkpKTtcXG4gXFx0aG9zdF9kYXRhX2NsZWFyX2ZsYWcoTDFfVk5DUl9NQVBQRUQpO1xcbi1cXHRhdG9taWNfZGVjKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gudm5jcl9tYXBfY291bnQpO1xcbiB9XFxuIFxcbiB2b2lkIGt2bV92Y3B1X3B1dF9od19tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbkBAIC05NzgsMTEgKzEwMTcsMjYgQEAgdTE2IGdldF9hc2lkX2J5X3JlZ2ltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0gdHJhbnNfcmVnaW1lIHJlZ2ltZSlcXG4gXFx0cmV0dXJuIGFzaWQ7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGludmFsaWRhdGVfdm5jcihzdHJ1Y3Qgdm5jcl90bGIgKnZ0KVxcbitzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3Ioc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qgdm5jcl90bGIgKnZ0KVxcbiB7XFxuK1xcdEJVR19PTighdnQtXFx1MDAzZXZhbGlkKTtcXG4gXFx0dnQtXFx1MDAzZXZhbGlkID0gZmFsc2U7XFxuLVxcdGlmICh2dC1cXHUwMDNlY3B1ICE9IC0xKVxcbi1cXHRcXHRjbGVhcl9maXhtYXAodm5jcl9maXhtYXAodnQtXFx1MDAzZWNwdSkpO1xcbitcXHR1bm1hcF9sMV92bmNyKHZ0KTtcXG4rXFx0YXRvbWljX2RlYyhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnZuY3JfdGxiX2NvdW50KTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgdm5jcl90bGJfaW50ZXJzZWN0cyhzdHJ1Y3Qgdm5jcl90bGIgKnZ0LCB1NjQgYWRkcixcXG4rXFx0XFx0XFx0XFx0dTY0IHNjb3BlX3N0YXJ0LCB1NjQgc2NvcGVfc2l6ZSlcXG4re1xcbitcXHR1NjQgdGxiX3NpemUsIHRsYl9zdGFydCwgdGxiX2VuZCwgc2NvcGVfZW5kO1xcbitcXG4rXFx0dGxiX3NpemUgPSB0dGxfdG9fc2l6ZShwZ3NoaWZ0X2xldmVsX3RvX3R0bCh2dC1cXHUwMDNld2kucGdzaGlmdCwgdnQtXFx1MDAzZXdyLmxldmVsKSk7XFxuK1xcbitcXHR0bGJfc3RhcnQgPSBhZGRyIFxcdTAwMjYgfih0bGJfc2l6ZSAtIDEpO1xcbitcXHR0bGJfZW5kID0gdGxiX3N0YXJ0ICsgdGxiX3NpemUgLSAxO1xcbitcXHRzY29wZV9lbmQgPSBzY29wZV9zdGFydCArIHNjb3BlX3NpemUgLSAxO1xcbitcXG4rXFx0cmV0dXJuICEodGxiX2VuZCBcXHUwMDNjIHNjb3BlX3N0YXJ0IHx8IHRsYl9zdGFydCBcXHUwMDNlIHNjb3BlX2VuZCk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTEwMDcsMTkgKzEwNjEsMTUgQEAgc3RhdGljIHZvaWQga3ZtX2ludmFsaWRhdGVfdm5jcl9pcGEoc3RydWN0IGt2bSAqa3ZtLCB1NjQgc3RhcnQsIHU2NCBlbmQpXFxuIFxcdGlmICgha3ZtX2hhc19mZWF0KGt2bSwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYyX09OTFkpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSkge1xcbi1cXHRcXHR1NjQgaXBhX3N0YXJ0LCBpcGFfZW5kLCBpcGFfc2l6ZTtcXG4tXFxuLVxcdFxcdGlwYV9zaXplID0gdHRsX3RvX3NpemUocGdzaGlmdF9sZXZlbF90b190dGwodnQtXFx1MDAzZXdpLnBnc2hpZnQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICB2dC1cXHUwMDNld3IubGV2ZWwpKTtcXG4tXFx0XFx0aXBhX3N0YXJ0ID0gdnQtXFx1MDAzZXdyLnBhIFxcdTAwMjYgfihpcGFfc2l6ZSAtIDEpO1xcbi1cXHRcXHRpcGFfZW5kID0gaXBhX3N0YXJ0ICsgaXBhX3NpemU7XFxuLVxcbi1cXHRcXHRpZiAoaXBhX2VuZCBcXHUwMDNjPSBzdGFydCB8fCBpcGFfc3RhcnQgXFx1MDAzZT0gZW5kKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdGludmFsaWRhdGVfdm5jcih2dCk7XFxuLVxcdH1cXG4rXFx0LypcXG4rXFx0ICogTm90ZSB0aGF0IGludmFsaWRhdGluZyB0aGUgVk5DUiBvbiB0aGUgYmFjayBvZiBhbiBNTVUgbm90aWZpZXJcXG4rXFx0ICogZG9lc24ndCByZXF1aXJlIG1lc3Npbmcgd2l0aCB0aGUgaW52YWxpZGF0aW9uIGNvdW50ZXIgZm9yIGFcXG4rXFx0ICogcGFyYWxsZWwgd2Fsay4gVGhlIG5vdGlmaWVyIGl0c2VsZiB3aWxsIGhhdmUgYnVtcGVkIHRoZSBjb3VudGVyLFxcbitcXHQgKiBtYWtpbmcgc3VyZSB3ZSByZXdhbGsuXFxuK1xcdCAqL1xcbitcXHRrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSlcXG4rXFx0XFx0aWYgKHZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LVxcdTAwM2V3ci5wYSwgc3RhcnQsIGVuZCAtIHN0YXJ0KSlcXG4rXFx0XFx0XFx0aW52YWxpZGF0ZV92bmNyKGt2bSwgdnQpO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgczFlMl90bGJpX3Njb3BlIHtcXG5AQCAtMTA0NCwyOSArMTA5NCwyOSBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3JfdmEoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuIFxcbi1cXHRrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSkge1xcbi1cXHRcXHR1NjQgdmFfc3RhcnQsIHZhX2VuZCwgdmFfc2l6ZTtcXG4tXFxuLVxcdFxcdHZhX3NpemUgPSB0dGxfdG9fc2l6ZShwZ3NoaWZ0X2xldmVsX3RvX3R0bCh2dC1cXHUwMDNld2kucGdzaGlmdCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgdnQtXFx1MDAzZXdyLmxldmVsKSk7XFxuLVxcdFxcdHZhX3N0YXJ0ID0gdnQtXFx1MDAzZWd2YSBcXHUwMDI2IH4odmFfc2l6ZSAtIDEpO1xcbi1cXHRcXHR2YV9lbmQgPSB2YV9zdGFydCArIHZhX3NpemU7XFxuK1xcdC8qXFxuK1xcdCAqIFdlIG1pZ2h0IGJlIHBlcmZvcm1pbmcgYSBwYXJhbGxlbCBTMSB3YWxrLCBzbyBidW1wIHVwIHRoZVxcbitcXHQgKiBpbnZhbGlkYXRpb24gY291bnRlciBldmVuIGluIHRoZSBhYnNlbmNlIG9mIGFuIGFjdHVhbCBWTkNSIFRMQlxcbitcXHQgKiBpbnZhbGlkYXRpb24sIGFzIHRoaXMgY291bGQgaW5kaWNhdGUgdGhhdCB0aGUgZ3Vlc3QgaGFzIGdvbmVcXG4rXFx0ICogdGhyb3VnaCBhIEJCTSBzZXF1ZW5jZS5cXG4rXFx0ICovXFxuK1xcdGt2bS1cXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxKys7XFxuK1xcdHNtcF93bWIoKTtcXG4gXFxuK1xcdGt2bV9mb3JfZWFjaF92bmNyX3RsYihpLCB2Y3B1LCB2dCwga3ZtKSB7XFxuIFxcdFxcdHN3aXRjaCAoc2NvcGUtXFx1MDAzZXR5cGUpIHtcXG4gXFx0XFx0Y2FzZSBUTEJJX0FMTDpcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRcXHRjYXNlIFRMQklfVkE6XFxuLVxcdFxcdFxcdGlmICh2YV9lbmQgXFx1MDAzYz0gc2NvcGUtXFx1MDAzZXZhIHx8XFxuLVxcdFxcdFxcdCAgICB2YV9zdGFydCBcXHUwMDNlPSAoc2NvcGUtXFx1MDAzZXZhICsgc2NvcGUtXFx1MDAzZXNpemUpKVxcbitcXHRcXHRcXHRpZiAoIXZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LVxcdTAwM2VndmEsIHNjb3BlLVxcdTAwM2V2YSwgc2NvcGUtXFx1MDAzZXNpemUpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0aWYgKHZ0LVxcdTAwM2V3ci5uRyBcXHUwMDI2XFx1MDAyNiB2dC1cXHUwMDNld3IuYXNpZCAhPSBzY29wZS1cXHUwMDNlYXNpZClcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0Y2FzZSBUTEJJX1ZBQTpcXG4tXFx0XFx0XFx0aWYgKHZhX2VuZCBcXHUwMDNjPSBzY29wZS1cXHUwMDNldmEgfHxcXG4tXFx0XFx0XFx0ICAgIHZhX3N0YXJ0IFxcdTAwM2U9IChzY29wZS1cXHUwMDNldmEgKyBzY29wZS1cXHUwMDNlc2l6ZSkpXFxuK1xcdFxcdFxcdGlmICghdm5jcl90bGJfaW50ZXJzZWN0cyh2dCwgdnQtXFx1MDAzZWd2YSwgc2NvcGUtXFx1MDAzZXZhLCBzY29wZS1cXHUwMDNlc2l6ZSkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuQEAgLTEwNzYsNyArMTEyNiw3IEBAIHN0YXRpYyB2b2lkIGludmFsaWRhdGVfdm5jcl92YShzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRpbnZhbGlkYXRlX3ZuY3IodnQpO1xcbitcXHRcXHRpbnZhbGlkYXRlX3ZuY3Ioa3ZtLCB2dCk7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMTEyNiw4ICsxMTc2LDYgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9zMV90bGJpX3JhbmdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGluc3QsIHU2NCB2YWwsXFxuIFxcdGNhc2UgT1BfVExCSV9WQUxFMU9TTlhTOlxcbiBcXHRcXHRzY29wZS1cXHUwMDNldHlwZSA9IFRMQklfVkE7XFxuIFxcdFxcdHNjb3BlLVxcdTAwM2VzaXplID0gdHRsX3RvX3NpemUoRklFTERfR0VUKFRMQklfVFRMX01BU0ssIHZhbCkpO1xcbi1cXHRcXHRpZiAoIXNjb3BlLVxcdTAwM2VzaXplKVxcbi1cXHRcXHRcXHRzY29wZS1cXHUwMDNlc2l6ZSA9IFNaXzFHO1xcbiBcXHRcXHRzY29wZS1cXHUwMDNldmEgPSB0bGJpX3ZhX3MxX3RvX3ZhKHZhbCkgXFx1MDAyNiB+KHNjb3BlLVxcdTAwM2VzaXplIC0gMSk7XFxuIFxcdFxcdHNjb3BlLVxcdTAwM2Vhc2lkID0gRklFTERfR0VUKFRMQklSX0FTSURfTUFTSywgdmFsKTtcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTExNTQsOCArMTIwMiw2IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfczFfdGxiaV9yYW5nZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnN0LCB1NjQgdmFsLFxcbiBcXHRjYXNlIE9QX1RMQklfVkFBTEUxT1NOWFM6XFxuIFxcdFxcdHNjb3BlLVxcdTAwM2V0eXBlID0gVExCSV9WQUE7XFxuIFxcdFxcdHNjb3BlLVxcdTAwM2VzaXplID0gdHRsX3RvX3NpemUoRklFTERfR0VUKFRMQklfVFRMX01BU0ssIHZhbCkpO1xcbi1cXHRcXHRpZiAoIXNjb3BlLVxcdTAwM2VzaXplKVxcbi1cXHRcXHRcXHRzY29wZS1cXHUwMDNlc2l6ZSA9IFNaXzFHO1xcbiBcXHRcXHRzY29wZS1cXHUwMDNldmEgPSB0bGJpX3ZhX3MxX3RvX3ZhKHZhbCkgXFx1MDAyNiB+KHNjb3BlLVxcdTAwM2VzaXplIC0gMSk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIE9QX1RMQklfUlZBRTI6XFxuQEAgLTEzMTYsMTMgKzEzNjIsMjAgQEAgdm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsKHN0cnVjdCBrdm0gKmt2bSlcXG4gICogICBpbnRlcnNlY3RzIHdpdGggdGhlIFRMQkkgcmVxdWVzdCwgaW52YWxpZGF0ZSBpdCwgYW5kIHVubWFwIHRoZSBwYWdlXFxuICAqICAgZnJvbSB0aGUgZml4bWFwLiBCZWNhdXNlIHdlIG5lZWQgdG8gbG9vayBhdCBhbGwgdGhlIHZjcHUtcHJpdmF0ZSBUTEJzLFxcbiAgKiAgIHRoaXMgcmVxdWlyZXMgc29tZSB3aWRlLXJhbmdpbmcgbG9ja2luZyB0byBlbnN1cmUgdGhhdCBub3RoaW5nIHJhY2VzXFxuLSAqICAgYWdhaW5zdCBpdC4gVGhpcyBtYXkgcmVxdWlyZSBzb21lIHJlZmNvdW50aW5nIHRvIGF2b2lkIHRoZSBzZWFyY2ggd2hlblxcbi0gKiAgIG5vIHN1Y2ggVExCIGlzIHByZXNlbnQuXFxuKyAqICAgYWdhaW5zdCBpdC4gVGhpcyByZXF1aXJlcyBzb21lIHJlZmNvdW50aW5nIHRvIGF2b2lkIHRoZSBzZWFyY2ggd2hlblxcbisgKiAgIG5vIHN1Y2ggVExCIGlzIHByZXNlbnQgKHNlZSBiZWxvdykuXFxuICAqXFxuICAqIC0gT24gTU1VIG5vdGlmaWVycywgd2UgbXVzdCBpbnZhbGlkYXRlIG91ciBUTEIgaW4gYSBzaW1pbGFyIHdheSwgYnV0XFxuICAqICAgbG9va2luZyBhdCB0aGUgSVBBIGluc3RlYWQuIFRoZSBmdW5ueSBwYXJ0IGlzIHRoYXQgdGhlcmUgbWF5IG5vdCBiZSBhXFxuICAqICAgc3RhZ2UtMiBtYXBwaW5nIGZvciB0aGlzIHBhZ2UgaWYgTDEgaGFzbid0IGFjY2Vzc2VkIGl0IHVzaW5nIExEL1NUXFxuICAqICAgaW5zdHJ1Y3Rpb25zLlxcbisgKlxcbisgKiAtIHZuY3JfdGxiX2NvdW50IHRyYWNrcyB0aGUgbnVtYmVyIG9mIHZhbGlkIFZOQ1IgVExCcyBWTS13aWRlLiBUaGlzIGlzbid0XFxuKyAqICAgdGhlIG51bWJlciBvZiAqbWFwcGVkKiBMMSBWTkNSIHBhZ2VzLCB3aGljaCBpcyBsaWtlbHkgYmUgYSBzdWJzZXQgKGFuZFxcbisgKiAgIGJ5IGRlZmluaXRpb24sIGEgVExCSSBoYW5kbGVkIGZyb20gTDEgcnVucyB3aXRoIHRoZSBjYW5vbmljYWwgVk5DUlxcbisgKiAgIHBhZ2UsIG5vdCB0aGUgTDEncykuIFRoZSBpbm5lcm1vc3QgdHJhcCBoYW5kbGluZyBjb2RlIGNoZWNrcyB0aGlzIHRvXFxuKyAqICAgZmluZCBvdXQgd2hldGhlciB0byByZXR1cm4gdG8gdGhlIGd1ZXN0IEFTQVAgKG5vIEwxIFRMQnMpIG9yIHRvIHZpc2l0XFxuKyAqICAgdGhpcyBwYXJ0IG9mIHRoZSB3b3JsZCBmb3Igc29tZSBleHRyYSBpbnZhbGlkYXRpb24gd29yay5cXG4gICovXFxuIFxcbiBpbnQga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbkBAIC0xMzc3LDcgKzE0MzAsOCBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXFxuIFxcdCAqL1xcbiBcXHRzY29wZWRfZ3VhcmQod3JpdGVfbG9jaywgXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlbW11X2xvY2spIHtcXG4gXFx0XFx0dGhpc19jcHVfcmVzZXRfdm5jcl9maXhtYXAodmNwdSk7XFxuLVxcdFxcdHZ0LVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbitcXHRcXHRpZiAodnQtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRcXHRpbnZhbGlkYXRlX3ZuY3IodmNwdS1cXHUwMDNla3ZtLCB2dCk7XFxuIFxcbiBcXHRcXHR2dC1cXHUwMDNld2kgPSAoc3RydWN0IHMxX3dhbGtfaW5mbykge1xcbiBcXHRcXHRcXHQucmVnaW1lXFx0PSBUUl9FTDIwLFxcbkBAIC0xMzkxLDE1ICsxNDQ1LDE1IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcXG4gXFxuIFxcdHZhID0gIHJlYWRfdm5jcl9lbDIodmNwdSk7XFxuIFxcbitcXHRtbXVfc2VxID0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XFxuK1xcdHNtcF9ybWIoKTtcXG4rXFxuIFxcdHJldCA9IF9fa3ZtX3RyYW5zbGF0ZV92YSh2Y3B1LCBcXHUwMDI2dnQtXFx1MDAzZXdpLCBcXHUwMDI2dnQtXFx1MDAzZXdyLCB2YSk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHR3cml0ZV9mYXVsdCA9IGt2bV9pc193cml0ZV9mYXVsdCh2Y3B1KTtcXG4gXFxuLVxcdG1tdV9zZXEgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcXG4tXFx0c21wX3JtYigpO1xcbi1cXG4gXFx0Z2ZuID0gdnQtXFx1MDAzZXdyLnBhIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIFxcdG1lbXNsb3QgPSBnZm5fdG9fbWVtc2xvdCh2Y3B1LVxcdTAwM2Vrdm0sIGdmbik7XFxuIFxcdGlmICghbWVtc2xvdCkge1xcbkBAIC0xNDQ3LDcgKzE1MDEsNyBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXFxuIFxcdFxcdHZ0LVxcdTAwM2VocGEgPSBwZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVDtcXG4gXFx0XFx0dnQtXFx1MDAzZWhwYV93cml0YWJsZSA9IHdyaXRhYmxlO1xcbiBcXHRcXHR2dC1cXHUwMDNldmFsaWQgPSB0cnVlO1xcbi1cXHRcXHR2dC1cXHUwMDNlY3B1ID0gLTE7XFxuK1xcdFxcdGF0b21pY19zZXQoXFx1MDAyNnZ0LVxcdTAwM2VjcHUsIC0xKTtcXG4gXFxuIFxcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9NQVBfTDFfVk5DUl9FTDIsIHZjcHUpO1xcbiBcXHRcXHRrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2UodmNwdS1cXHUwMDNla3ZtLCBwYWdlLCBmYWxzZSwgdnQtXFx1MDAzZXdyLnB3IFxcdTAwMjZcXHUwMDI2IHZ0LVxcdTAwM2VocGFfd3JpdGFibGUpO1xcbkBAIC0xNTAyLDcgKzE1NTYsMjAgQEAgaW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBTcGVjdWxhdGl2ZWx5IGluY3JlbWVudCB0aGUgVExCIGNvdW50IHRvIG1ha2Ugc3VyZSBjb25jdXJyZW50XFxuK1xcdCAqIFRMQklzIHdpbGwgdGFrZSB0aGUgc2xvdyBwYXRoLCBhbmQgd2lsbCBpbnRlcmFjdCB3aXRoIHRoZSByZXRyeVxcbitcXHQgKiBtZWNoYW5pc20uIERyb3AgaXQgYWdhaW4gb24gZXJyb3IuXFxuK1xcdCAqL1xcbitcXHRhdG9taWNfaW5jKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gudm5jcl90bGJfY291bnQpO1xcbitcXHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xcbitcXG4gXFx0cmV0ID0ga3ZtX3RyYW5zbGF0ZV92bmNyKHZjcHUsIFxcdTAwMjZpc19nbWVtKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcXG4rXFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnZuY3JfdGxiX2NvdW50KTtcXG4rXFx0fVxcbitcXG4gXFx0c3dpdGNoIChyZXQpIHtcXG4gXFx0Y2FzZSAtRUFHQUlOOlxcbiBcXHRcXHQvKiBMZXQncyB0cnkgYWdhaW4uLi4gKi9cXG5AQCAtMTU2OCwxNCArMTYzNSwxNiBAQCBzdGF0aWMgdm9pZCBrdm1fbWFwX2wxX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAoIXZ0LVxcdTAwM2V2YWxpZClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0LyogV2UgY2FjaGUgdGhlIE1NVSBzdGF0ZSBpbiB0aGUgVExCLiBDaGVjayB0aGF0IGl0IG1hdGNoZXMuICovXFxuK1xcdGlmICghISh2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCBTQ1RMUl9FTDIpIFxcdTAwMjYgU0NUTFJfRUx4X00pICE9IHMxX3dhbGtfdHJhbnNsYXRlZChcXHUwMDI2dnQtXFx1MDAzZXdyKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0aWYgKHJlYWRfdm5jcl9lbDIodmNwdSkgIT0gdnQtXFx1MDAzZWd2YSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0aWYgKHZ0LVxcdTAwM2V3ci5uRyBcXHUwMDI2XFx1MDAyNiBnZXRfYXNpZF9ieV9yZWdpbWUodmNwdSwgVFJfRUwyMCkgIT0gdnQtXFx1MDAzZXdyLmFzaWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdHZ0LVxcdTAwM2VjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XFxuLVxcbiBcXHRpZiAodnQtXFx1MDAzZWhwYV93cml0YWJsZSBcXHUwMDI2XFx1MDAyNiB2dC1cXHUwMDNld3IucHcgXFx1MDAyNlxcdTAwMjYgdnQtXFx1MDAzZXdyLnByKVxcbiBcXHRcXHRwcm90ID0gUEFHRV9LRVJORUw7XFxuIFxcdGVsc2UgaWYgKHZ0LVxcdTAwM2V3ci5wcilcXG5AQCAtMTU5MCw5ICsxNjU5LDkgQEAgc3RhdGljIHZvaWQga3ZtX21hcF9sMV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0ICogRklYTUU6IFdPIGRvZXNuJ3Qgd29yayBhdCBhbGwsIG5lZWQgUE9FIHN1cHBvcnQgaW4gdGhlIGtlcm5lbC5cXG4gXFx0ICovXFxuIFxcdGlmIChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoUEFHRV9OT05FKSkge1xcbi1cXHRcXHRfX3NldF9maXhtYXAodm5jcl9maXhtYXAodnQtXFx1MDAzZWNwdSksIHZ0LVxcdTAwM2VocGEsIHByb3QpO1xcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZ2dC1cXHUwMDNlY3B1LCBzbXBfcHJvY2Vzc29yX2lkKCkpO1xcbitcXHRcXHRfX3NldF9maXhtYXAodm5jcl9maXhtYXAoYXRvbWljX3JlYWQoXFx1MDAyNnZ0LVxcdTAwM2VjcHUpKSwgdnQtXFx1MDAzZWhwYSwgcHJvdCk7XFxuIFxcdFxcdGhvc3RfZGF0YV9zZXRfZmxhZyhMMV9WTkNSX01BUFBFRCk7XFxuLVxcdFxcdGF0b21pY19pbmMoXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC52bmNyX21hcF9jb3VudCk7XFxuIFxcdH1cXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcXG5pbmRleCA1ZDVjNTc5ZDQ1NzkwLi43OTdlODg4YmY5Mzk0IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXFxuQEAgLTQwNTcsNiArNDA1Nyw3IEBAIHN0YXRpYyBib29sIGhhbmRsZV9yaXBhczJlMWlzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxcbiBcXHR1MzIgc3lzX2VuY29kaW5nID0gc3lzX2luc24ocC1cXHUwMDNlT3AwLCBwLVxcdTAwM2VPcDEsIHAtXFx1MDAzZUNSbiwgcC1cXHUwMDNlQ1JtLCBwLVxcdTAwM2VPcDIpO1xcbiBcXHR1NjQgdnR0YnIgPSB2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCBWVFRCUl9FTDIpO1xcbiBcXHR1NjQgYmFzZSwgcmFuZ2U7XFxuK1xcdGludCBwYV9iaXRzO1xcbiBcXG4gXFx0aWYgKCFrdm1fc3VwcG9ydGVkX3RsYmlfaXBhczJfb3AodmNwdSwgc3lzX2VuY29kaW5nKSlcXG4gXFx0XFx0cmV0dXJuIHVuZGVmX2FjY2Vzcyh2Y3B1LCBwLCByKTtcXG5AQCAtNDA2OCw2ICs0MDY5LDE2IEBAIHN0YXRpYyBib29sIGhhbmRsZV9yaXBhczJlMWlzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxcbiBcXHQgKi9cXG4gXFx0YmFzZSA9IGRlY29kZV9yYW5nZV90bGJpKHAtXFx1MDAzZXJlZ3ZhbCwgXFx1MDAyNnJhbmdlLCBOVUxMKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIElnbm9yZSBUTEJJcyB0aGF0IHN0YXJ0IG91dCBvZiBQQV9iaXRzIHJhbmdlLCBhbmQgY2FwIHRoZVxcbitcXHQgKiBpbnZhbGlkYXRpb24gdG8gdGhlIFtiYXNlOmJpdChQQV9iaXRzKV0gaW50ZXJ2YWwuXFxuK1xcdCAqL1xcbitcXHRwYV9iaXRzID0ga3ZtX2dldF9wYV9iaXRzKHZjcHUtXFx1MDAzZWt2bSk7XFxuK1xcdGlmIChmbHM2NChiYXNlKSBcXHUwMDNlIHBhX2JpdHMpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0cmFuZ2UgPSBtaW4ocmFuZ2UsIEJJVF9VTEwocGFfYml0cykgLSBiYXNlKTtcXG4rXFxuIFxcdGt2bV9zMl9tbXVfaXRlcmF0ZV9ieV92bWlkKHZjcHUtXFx1MDAzZWt2bSwgZ2V0X3ZtaWQodnR0YnIpLFxcbiBcXHRcXHRcXHRcXHQgICBcXHUwMDI2KHVuaW9uIHRsYmlfaW5mbykge1xcbiBcXHRcXHRcXHRcXHRcXHQgICAucmFuZ2UgPSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjA0OjA3Ljc5ODc2NzgxOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY2NzE1Nzk5MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9oYW5kbGVfdm5jcl9hYm9ydFwiLFxuICAgIFwia3ZtX3dhbGtfbmVzdGVkX3MyXCIsXG4gICAgXCJjb21wdXRlX3RsYl9pbnZhbF9yYW5nZVwiLFxuICAgIFwia3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJcIixcbiAgICBcImt2bV92Y3B1X3B1dF9od19tbXVcIixcbiAgICBcImt2bV92Y3B1X2xvYWRfaHdfbW11XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIEFSTTY0IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiBWTkNSIFRMQnMsIG5lc3RlZCBTMiB3YWxrcywgYW5kIFRMQiBpbnZhbGlkYXRpb24gcmFuZ2VzLiBUaGVzZSBhcmUgY29yZSB2aXJ0dWFsaXphdGlvbiBmZWF0dXJlcyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSBndWVzdCBleGVjdXRpb24gYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRiMzU2ZjhhNGE4MTIxNTA1YmMxMmRiZWEwNGU5N2Q1NTBiMzU1YTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDEwOjA0OjA0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCBiYWUyYzRmOTJlZjVjLi4xMDg5NjZhOWRiMTJiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC00MTEsOCArNDExLDggQEAgc3RydWN0IGt2bV9hcmNoIHtcbiBcdC8qIE1hc2tzIGZvciBWTkNSLWJhY2tlZCBhbmQgZ2VuZXJhbCBFTDIgc3lzcmVncyAqL1xuIFx0c3RydWN0IGt2bV9zeXNyZWdfbWFza3NcdCpzeXNyZWdfbWFza3M7XG4gXG4tXHQvKiBDb3VudCB0aGUgbnVtYmVyIG9mIFZOQ1JfRUwyIGN1cnJlbnRseSBtYXBwZWQgKi9cbi1cdGF0b21pY190IHZuY3JfbWFwX2NvdW50O1xuK1x0LyogQ291bnQgdGhlIG51bWJlciBvZiBWTkNSX0VMMiBUTEJzICovXG4rXHRhdG9taWNfdCB2bmNyX3RsYl9jb3VudDtcbiBcbiBcdC8qXG4gXHQgKiBGb3IgYW4gdW50cnVzdGVkIGhvc3QgVk0sICdwa3ZtLmhhbmRsZScgaXMgdXNlZCB0byBsb29rdXBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oXG5pbmRleCAwMTJkNzExMDM0ZDE3Li5jODNiZTZkMGU3OWFjIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oXG5AQCAtMjkxLDYgKzI5MSwxMyBAQCBzdGF0aWMgaW5saW5lIHU2NCBkZWNvZGVfcmFuZ2VfdGxiaSh1NjQgdmFsLCB1NjQgKnJhbmdlLCB1MTYgKmFzaWQpXG4gXG4gXHRiYXNlXHQ9ICh2YWwgXHUwMDI2IEdFTk1BU0soMzYsIDApKSBcdTAwM2NcdTAwM2Mgc2hpZnQ7XG4gXG4rXHQvKlxuK1x0ICogV2Ugb25seSBkZWFsIHdpdGggYXQgbW9zdCA0OGJpdCBWQS9JUEEsIHNvIDQ4IGlzIHdoZXJlIHdlXG4rXHQgKiBzaWduLWV4dGVuZCBmcm9tLiBTaG91bGQgd2Ugc3VwcG9ydCBGRUFUX0x7VlB9QSogYXQgc29tZSBwb2ludCxcbitcdCAqIHRoaXMgd2lsbCBuZWVkIHRvIGJlIHJldmlzaXRlZC5cbitcdCAqL1xuK1x0YmFzZVx0PSAodTY0KXNpZ25fZXh0ZW5kNjQoYmFzZSwgNDgpO1xuK1xuIFx0aWYgKGFzaWQpXG4gXHRcdCphc2lkID0gRklFTERfR0VUKFRMQklSX0FTSURfTUFTSywgdmFsKTtcbiBcbkBAIC0zODgsNiArMzk1LDggQEAgc3RydWN0IHMxX3dhbGtfcmVzdWx0IHtcbiBcdGJvb2xcdGZhaWxlZDtcbiB9O1xuIFxuKyNkZWZpbmUgUzFfTU1VX0RJU0FCTEVEXHRcdCgtMTI3KVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBmYWlsX3MxX3dhbGsoc3RydWN0IHMxX3dhbGtfcmVzdWx0ICp3ciwgdTggZnN0LCBib29sIHMxcHR3KVxuIHtcbiBcdHdyLVx1MDAzZWZzdFx0XHQ9IGZzdDtcbkBAIC0zOTYsNiArNDA1LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmYWlsX3MxX3dhbGsoc3RydWN0IHMxX3dhbGtfcmVzdWx0ICp3ciwgdTggZnN0LCBib29sIHMxcHR3KVxuIFx0d3ItXHUwMDNlZmFpbGVkXHQ9IHRydWU7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzMV93YWxrX3RyYW5zbGF0ZWQoc3RydWN0IHMxX3dhbGtfcmVzdWx0ICp3cilcbit7XG4rXHRyZXR1cm4gd3ItXHUwMDNlbGV2ZWwgIT0gUzFfTU1VX0RJU0FCTEVEO1xuK31cbitcbiBpbnQgX19rdm1fdHJhbnNsYXRlX3ZhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHMxX3dhbGtfaW5mbyAqd2ksXG4gXHRcdCAgICAgICBzdHJ1Y3QgczFfd2Fsa19yZXN1bHQgKndyLCB1NjQgdmEpO1xuIGludCBfX2t2bV9maW5kX3MxX2Rlc2NfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmEsIHU2NCBpcGEsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXQuYyBiL2FyY2gvYXJtNjQva3ZtL2F0LmNcbmluZGV4IDY0MGYyZGMwMGE4YmEuLjA5MjY0MjZiODc5ODkgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9hdC5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9hdC5jXG5AQCAtMTEsOCArMTEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vbHN1aS5oXHUwMDNlXG4gXG4tI2RlZmluZSBTMV9NTVVfRElTQUJMRURcdFx0KC0xMjcpXG4tXG4gc3RhdGljIGludCBnZXRfaWFfc2l6ZShzdHJ1Y3QgczFfd2Fsa19pbmZvICp3aSlcbiB7XG4gXHRyZXR1cm4gNjQgLSB3aS1cdTAwM2V0eHN6O1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jXG5pbmRleCBiYmU5Y2ViZDNkOWQ1Li5mYTc3NmIxOGEzMmNhIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xuQEAgLTQyNCwxMSArNDI0LDE1IEBAIHN0YXRpYyBib29sIGt2bV9oeXBfaGFuZGxlX3RsYmlfZWwyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpleGl0X2NvZGUpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qXG4tXHQgKiBJZiB3ZSBoYXZlIHRvIGNoZWNrIGZvciBhbnkgVk5DUiBtYXBwaW5nIGJlaW5nIGludmFsaWRhdGVkLFxuLVx0ICogZ28gYmFjayB0byB0aGUgc2xvdyBwYXRoIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuXG4rXHQgKiBJZiB3ZSBoYXZlIHRvIGNoZWNrIGZvciBhbnkgVk5DUiBUTEIgYmVpbmcgaW52YWxpZGF0ZWQsIGdvIGJhY2tcbitcdCAqIHRvIHRoZSBzbG93IHBhdGggZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy5cbitcdCAqXG4rXHQgKiBUaGUgc3luY2hyb25pc2F0aW9uIGJldHdlZW0gVExCSSBhbmQgd2FsayBpcyBwcm92aWRlZCBieSB0aGVcbitcdCAqIHNwZWN1bGF0aXZlIGluY3JlbWVudCBvZiB0aGUgVExCIGNvdW50ZXIgb24gd2FsaywgYW5kIHRoZVxuK1x0ICogaW52YWxpZGF0aW9uIGNvdW50ZXIuIFllcywgdGhpcyBpcyBmaWRkbHkuXG4gXHQgKi9cbiBcdGlmICh2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpIFx1MDAyNlx1MDAyNiB2Y3B1X2VsMl90Z2VfaXNfc2V0KHZjcHUpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGF0b21pY19yZWFkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm5jcl9tYXBfY291bnQpKVxuK1x0ICAgIGF0b21pY19yZWFkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm5jcl90bGJfY291bnQpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRfX2t2bV9za2lwX2luc3RyKHZjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbmluZGV4IGRmYjk2ZWRiZGM0M2MuLjIwYWY5NDE5N2E4YTcgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbkBAIC0yNyw3ICsyNyw3IEBAIHN0cnVjdCB2bmNyX3RsYiB7XG4gXHRib29sXHRcdFx0aHBhX3dyaXRhYmxlO1xuIFxuIFx0LyogLTEgd2hlbiBub3QgbWFwcGVkIG9uIGEgQ1BVICovXG4tXHRpbnRcdFx0XHRjcHU7XG4rXHRhdG9taWNfdFx0XHRjcHU7XG4gXG4gXHQvKlxuIFx0ICogdHJ1ZSBpZiB0aGUgVExCIGlzIHZhbGlkLiBDYW4gb25seSBiZSBjaGFuZ2VkIHdpdGggdGhlXG5AQCAtNDgsNyArNDgsNyBAQCB2b2lkIGt2bV9pbml0X25lc3RlZChzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0a3ZtLVx1MDAzZWFyY2gubmVzdGVkX21tdXMgPSBOVUxMO1xuIFx0a3ZtLVx1MDAzZWFyY2gubmVzdGVkX21tdXNfc2l6ZSA9IDA7XG4tXHRhdG9taWNfc2V0KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZuY3JfbWFwX2NvdW50LCAwKTtcbitcdGF0b21pY19zZXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudm5jcl90bGJfY291bnQsIDApO1xuIH1cbiBcbiBzdGF0aWMgaW50IGluaXRfbmVzdGVkX3MyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUpXG5AQCAtNTA2LDcgKzUwNiw3IEBAIGludCBrdm1fd2Fsa19uZXN0ZWRfczIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBwaHlzX2FkZHJfdCBnaXBhLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGludCB0dGxfdG9fc2l6ZSh1OCB0dGwpXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX3R0bF90b19zaXplKHU4IHR0bClcbiB7XG4gXHRpbnQgbGV2ZWwgPSB0dGwgXHUwMDI2IDM7XG4gXHRpbnQgZ3JhbiA9ICh0dGwgXHUwMDNlXHUwMDNlIDIpIFx1MDAyNiAzO1xuQEAgLTU2MiwxMCArNTYyLDIyIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHRsX3RvX3NpemUodTggdHRsKVxuIFx0cmV0dXJuIG1heF9zaXplO1xuIH1cbiBcbi1zdGF0aWMgdTggcGdzaGlmdF9sZXZlbF90b190dGwodTE2IHNoaWZ0LCB1OCBsZXZlbClcbitzdGF0aWMgdW5zaWduZWQgaW50IHR0bF90b19zaXplKHU4IHR0bClcbit7XG4rXHRyZXR1cm4gX190dGxfdG9fc2l6ZSh0dGwpID86IFNaXzFHO1xuK31cbitcbitzdGF0aWMgdTggcGdzaGlmdF9sZXZlbF90b190dGwodTE2IHNoaWZ0LCBzOCBsZXZlbClcbiB7XG4gXHR1OCB0dGw7XG4gXG4rXHQvKlxuK1x0ICogSWYgd2UgZG9uJ3QgaGF2ZSBhIHByb3BlciBsZXZlbCwgZmFsbGJhY2sgdG8gdGhlIG1heGltdW1cbitcdCAqIHNpemUuXG4rXHQgKi9cbitcdGlmIChsZXZlbCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRzd2l0Y2goc2hpZnQpIHtcbiBcdGNhc2UgMTI6XG4gXHRcdHR0bCA9IFRMQklfVFRMX1RHXzRLO1xuQEAgLTY3Niw3ICs2ODgsMTEgQEAgdW5zaWduZWQgbG9uZyBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1NjQgdmFsKVxuIFx0XHR0dGwgPSBnZXRfZ3Vlc3RfbWFwcGluZ190dGwobW11LCBhZGRyKTtcbiBcdH1cbiBcbi1cdG1heF9zaXplID0gdHRsX3RvX3NpemUodHRsKTtcbitcdC8qXG4rXHQgKiBEb24ndCB1c2UgdGhlIGRlZmF1bHQgMUdCIGZhbGxiYWNrLCBhcyB3ZSBjYW4gYWRhcHQgdG8gdGhlXG4rXHQgKiBtYXggbWFwcGluZyBzaXplIHdlIGFsbG93IGF0IFMyLlxuK1x0ICovXG4rXHRtYXhfc2l6ZSA9IF9fdHRsX3RvX3NpemUodHRsKTtcbiBcbiBcdGlmICghbWF4X3NpemUpIHtcbiBcdFx0LyogQ29tcHV0ZSB0aGUgbWF4aW11bSBleHRlbnQgb2YgdGhlIGludmFsaWRhdGlvbiAqL1xuQEAgLTg3OSwxOCArODk1LDQxIEBAIHZvaWQga3ZtX3ZjcHVfbG9hZF9od19tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0fVxuIH1cbiBcbisvKlxuKyAqIFVubWFwcGluZyBhbiBMMSBWTkNSIGNhbiBoYXBwZW4gY29uY3VycmVudGx5IHdpdGhvdXQgdGhlIG1tdSBsb2NrIGJlaW5nXG4rICogZWZmZWN0aXZlICh2Y3B1X3B1dCgpIHZzIFRMQkkgaGFuZGxpbmcpLiBUaGUgYXRvbWljX3hjaGcgYmVsb3cgZW5zdXJlc1xuKyAqIHRoYXQgb25seSBvbmUgQ1BVIHNldHMgaXQgdG8gLTEgd2hpbGUgZ2V0dGluZyBhIHZhbGlkIENQVSBudW1iZXIgYmFjay5cbisgKi9cbitzdGF0aWMgaW50IHVubWFwX2wxX3ZuY3Ioc3RydWN0IHZuY3JfdGxiICp2dClcbit7XG4rXHRpbnQgY3B1ID0gYXRvbWljX3hjaGdfcmVsYXhlZChcdTAwMjZ2dC1cdTAwM2VjcHUsIC0xKTtcbitcbitcdGlmIChjcHUgIT0gLTEpXG4rXHRcdGNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcChjcHUpKTtcbitcbitcdHJldHVybiBjcHU7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHRoaXNfY3B1X3Jlc2V0X3ZuY3JfZml4bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRpZiAoIWhvc3RfZGF0YV90ZXN0X2ZsYWcoTDFfVk5DUl9NQVBQRUQpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRCVUdfT04odmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiLVx1MDAzZWNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpO1xuIFx0QlVHX09OKGlzX2h5cF9jdHh0KHZjcHUpKTtcbiBcbi1cdGNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcCh2Y3B1LVx1MDAzZWFyY2gudm5jcl90bGItXHUwMDNlY3B1KSk7XG4tXHR2Y3B1LVx1MDAzZWFyY2gudm5jcl90bGItXHUwMDNlY3B1ID0gLTE7XG4rXHQvKlxuK1x0ICogVW5jb25kaXRpb25hbGx5IHVubWFwIHRoZSBsb2NhbCBWTkNSIGlmIHdlIGhhdmUgbG9zdCB0aGUgcmFjZVxuK1x0ICogYWdhaW5zdCBhIGNvbmN1cnJlbnQgVExCSS4gT3RoZXJ3aXNlIHdlIGNvdWxkIGVuZC11cCBydW5uaW5nXG4rXHQgKiBhbm90aGVyIHZjcHUgd2l0aCBWTkNSIHN0aWxsIG1hcHBlZCBpZiB0aGUgVExCSSB0aHJlYWQgaXNcbitcdCAqIHByZWVtcHRlZCBiZXR3ZWVuIHRoZSBleGNoYW5nZSBhbmQgdGhlIGNsZWFyX2ZpeG1hcCgpLlxuK1x0ICpcbitcdCAqIE5vdGUgdGhhdCB3ZSBkbyBub3QgY2FyZSBhYm91dCB0aGUgVExCSSBudWtpbmcgdGhlIGZpeG1hcCBiZWhpbmRcbitcdCAqIHRoZSBiYWNrIG9mIGFuIHJ1bm5pbmcgdmNwdS4gVGhpcyB3aWxsIG9ubHkgZ2VuZXJhdGUgYSBmYXVsdCBhbmRcbitcdCAqIHBvc3NpYmx5IGEgcmV0cmFuc2xhdGlvbi5cbitcdCAqL1xuK1x0aWYgKHVubWFwX2wxX3ZuY3IodmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiKSA9PSAtMSlcbitcdFx0Y2xlYXJfZml4bWFwKHZuY3JfZml4bWFwKHNtcF9wcm9jZXNzb3JfaWQoKSkpO1xuIFx0aG9zdF9kYXRhX2NsZWFyX2ZsYWcoTDFfVk5DUl9NQVBQRUQpO1xuLVx0YXRvbWljX2RlYyhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZuY3JfbWFwX2NvdW50KTtcbiB9XG4gXG4gdm9pZCBrdm1fdmNwdV9wdXRfaHdfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC05NzgsMTEgKzEwMTcsMjYgQEAgdTE2IGdldF9hc2lkX2J5X3JlZ2ltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0gdHJhbnNfcmVnaW1lIHJlZ2ltZSlcbiBcdHJldHVybiBhc2lkO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3Ioc3RydWN0IHZuY3JfdGxiICp2dClcbitzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3Ioc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qgdm5jcl90bGIgKnZ0KVxuIHtcbitcdEJVR19PTighdnQtXHUwMDNldmFsaWQpO1xuIFx0dnQtXHUwMDNldmFsaWQgPSBmYWxzZTtcbi1cdGlmICh2dC1cdTAwM2VjcHUgIT0gLTEpXG4tXHRcdGNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcCh2dC1cdTAwM2VjcHUpKTtcbitcdHVubWFwX2wxX3ZuY3IodnQpO1xuK1x0YXRvbWljX2RlYyhcdTAwMjZrdm0tXHUwMDNlYXJjaC52bmNyX3RsYl9jb3VudCk7XG4rfVxuK1xuK3N0YXRpYyBib29sIHZuY3JfdGxiX2ludGVyc2VjdHMoc3RydWN0IHZuY3JfdGxiICp2dCwgdTY0IGFkZHIsXG4rXHRcdFx0XHR1NjQgc2NvcGVfc3RhcnQsIHU2NCBzY29wZV9zaXplKVxuK3tcbitcdHU2NCB0bGJfc2l6ZSwgdGxiX3N0YXJ0LCB0bGJfZW5kLCBzY29wZV9lbmQ7XG4rXG4rXHR0bGJfc2l6ZSA9IHR0bF90b19zaXplKHBnc2hpZnRfbGV2ZWxfdG9fdHRsKHZ0LVx1MDAzZXdpLnBnc2hpZnQsIHZ0LVx1MDAzZXdyLmxldmVsKSk7XG4rXG4rXHR0bGJfc3RhcnQgPSBhZGRyIFx1MDAyNiB+KHRsYl9zaXplIC0gMSk7XG4rXHR0bGJfZW5kID0gdGxiX3N0YXJ0ICsgdGxiX3NpemUgLSAxO1xuK1x0c2NvcGVfZW5kID0gc2NvcGVfc3RhcnQgKyBzY29wZV9zaXplIC0gMTtcbitcbitcdHJldHVybiAhKHRsYl9lbmQgXHUwMDNjIHNjb3BlX3N0YXJ0IHx8IHRsYl9zdGFydCBcdTAwM2Ugc2NvcGVfZW5kKTtcbiB9XG4gXG4gLypcbkBAIC0xMDA3LDE5ICsxMDYxLDE1IEBAIHN0YXRpYyB2b2lkIGt2bV9pbnZhbGlkYXRlX3ZuY3JfaXBhKHN0cnVjdCBrdm0gKmt2bSwgdTY0IHN0YXJ0LCB1NjQgZW5kKVxuIFx0aWYgKCFrdm1faGFzX2ZlYXQoa3ZtLCBJRF9BQTY0TU1GUjRfRUwxLCBOVl9mcmFjLCBOVjJfT05MWSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGt2bV9mb3JfZWFjaF92bmNyX3RsYihpLCB2Y3B1LCB2dCwga3ZtKSB7XG4tXHRcdHU2NCBpcGFfc3RhcnQsIGlwYV9lbmQsIGlwYV9zaXplO1xuLVxuLVx0XHRpcGFfc2l6ZSA9IHR0bF90b19zaXplKHBnc2hpZnRfbGV2ZWxfdG9fdHRsKHZ0LVx1MDAzZXdpLnBnc2hpZnQsXG4tXHRcdFx0XHRcdFx0XHQgICAgdnQtXHUwMDNld3IubGV2ZWwpKTtcbi1cdFx0aXBhX3N0YXJ0ID0gdnQtXHUwMDNld3IucGEgXHUwMDI2IH4oaXBhX3NpemUgLSAxKTtcbi1cdFx0aXBhX2VuZCA9IGlwYV9zdGFydCArIGlwYV9zaXplO1xuLVxuLVx0XHRpZiAoaXBhX2VuZCBcdTAwM2M9IHN0YXJ0IHx8IGlwYV9zdGFydCBcdTAwM2U9IGVuZClcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aW52YWxpZGF0ZV92bmNyKHZ0KTtcbi1cdH1cbitcdC8qXG4rXHQgKiBOb3RlIHRoYXQgaW52YWxpZGF0aW5nIHRoZSBWTkNSIG9uIHRoZSBiYWNrIG9mIGFuIE1NVSBub3RpZmllclxuK1x0ICogZG9lc24ndCByZXF1aXJlIG1lc3Npbmcgd2l0aCB0aGUgaW52YWxpZGF0aW9uIGNvdW50ZXIgZm9yIGFcbitcdCAqIHBhcmFsbGVsIHdhbGsuIFRoZSBub3RpZmllciBpdHNlbGYgd2lsbCBoYXZlIGJ1bXBlZCB0aGUgY291bnRlcixcbitcdCAqIG1ha2luZyBzdXJlIHdlIHJld2Fsay5cbitcdCAqL1xuK1x0a3ZtX2Zvcl9lYWNoX3ZuY3JfdGxiKGksIHZjcHUsIHZ0LCBrdm0pXG4rXHRcdGlmICh2bmNyX3RsYl9pbnRlcnNlY3RzKHZ0LCB2dC1cdTAwM2V3ci5wYSwgc3RhcnQsIGVuZCAtIHN0YXJ0KSlcbitcdFx0XHRpbnZhbGlkYXRlX3ZuY3Ioa3ZtLCB2dCk7XG4gfVxuIFxuIHN0cnVjdCBzMWUyX3RsYmlfc2NvcGUge1xuQEAgLTEwNDQsMjkgKzEwOTQsMjkgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyX3ZhKHN0cnVjdCBrdm0gKmt2bSxcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiBcbi1cdGt2bV9mb3JfZWFjaF92bmNyX3RsYihpLCB2Y3B1LCB2dCwga3ZtKSB7XG4tXHRcdHU2NCB2YV9zdGFydCwgdmFfZW5kLCB2YV9zaXplO1xuLVxuLVx0XHR2YV9zaXplID0gdHRsX3RvX3NpemUocGdzaGlmdF9sZXZlbF90b190dGwodnQtXHUwMDNld2kucGdzaGlmdCxcbi1cdFx0XHRcdFx0XHRcdCAgIHZ0LVx1MDAzZXdyLmxldmVsKSk7XG4tXHRcdHZhX3N0YXJ0ID0gdnQtXHUwMDNlZ3ZhIFx1MDAyNiB+KHZhX3NpemUgLSAxKTtcbi1cdFx0dmFfZW5kID0gdmFfc3RhcnQgKyB2YV9zaXplO1xuK1x0LypcbitcdCAqIFdlIG1pZ2h0IGJlIHBlcmZvcm1pbmcgYSBwYXJhbGxlbCBTMSB3YWxrLCBzbyBidW1wIHVwIHRoZVxuK1x0ICogaW52YWxpZGF0aW9uIGNvdW50ZXIgZXZlbiBpbiB0aGUgYWJzZW5jZSBvZiBhbiBhY3R1YWwgVk5DUiBUTEJcbitcdCAqIGludmFsaWRhdGlvbiwgYXMgdGhpcyBjb3VsZCBpbmRpY2F0ZSB0aGF0IHRoZSBndWVzdCBoYXMgZ29uZVxuK1x0ICogdGhyb3VnaCBhIEJCTSBzZXF1ZW5jZS5cbitcdCAqL1xuK1x0a3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcSsrO1xuK1x0c21wX3dtYigpO1xuIFxuK1x0a3ZtX2Zvcl9lYWNoX3ZuY3JfdGxiKGksIHZjcHUsIHZ0LCBrdm0pIHtcbiBcdFx0c3dpdGNoIChzY29wZS1cdTAwM2V0eXBlKSB7XG4gXHRcdGNhc2UgVExCSV9BTEw6XG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdGNhc2UgVExCSV9WQTpcbi1cdFx0XHRpZiAodmFfZW5kIFx1MDAzYz0gc2NvcGUtXHUwMDNldmEgfHxcbi1cdFx0XHQgICAgdmFfc3RhcnQgXHUwMDNlPSAoc2NvcGUtXHUwMDNldmEgKyBzY29wZS1cdTAwM2VzaXplKSlcbitcdFx0XHRpZiAoIXZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LVx1MDAzZWd2YSwgc2NvcGUtXHUwMDNldmEsIHNjb3BlLVx1MDAzZXNpemUpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0aWYgKHZ0LVx1MDAzZXdyLm5HIFx1MDAyNlx1MDAyNiB2dC1cdTAwM2V3ci5hc2lkICE9IHNjb3BlLVx1MDAzZWFzaWQpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0Y2FzZSBUTEJJX1ZBQTpcbi1cdFx0XHRpZiAodmFfZW5kIFx1MDAzYz0gc2NvcGUtXHUwMDNldmEgfHxcbi1cdFx0XHQgICAgdmFfc3RhcnQgXHUwMDNlPSAoc2NvcGUtXHUwMDNldmEgKyBzY29wZS1cdTAwM2VzaXplKSlcbitcdFx0XHRpZiAoIXZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LVx1MDAzZWd2YSwgc2NvcGUtXHUwMDNldmEsIHNjb3BlLVx1MDAzZXNpemUpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtMTA3Niw3ICsxMTI2LDcgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyX3ZhKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuLVx0XHRpbnZhbGlkYXRlX3ZuY3IodnQpO1xuK1x0XHRpbnZhbGlkYXRlX3ZuY3Ioa3ZtLCB2dCk7XG4gXHR9XG4gfVxuIFxuQEAgLTExMjYsOCArMTE3Niw2IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfczFfdGxiaV9yYW5nZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnN0LCB1NjQgdmFsLFxuIFx0Y2FzZSBPUF9UTEJJX1ZBTEUxT1NOWFM6XG4gXHRcdHNjb3BlLVx1MDAzZXR5cGUgPSBUTEJJX1ZBO1xuIFx0XHRzY29wZS1cdTAwM2VzaXplID0gdHRsX3RvX3NpemUoRklFTERfR0VUKFRMQklfVFRMX01BU0ssIHZhbCkpO1xuLVx0XHRpZiAoIXNjb3BlLVx1MDAzZXNpemUpXG4tXHRcdFx0c2NvcGUtXHUwMDNlc2l6ZSA9IFNaXzFHO1xuIFx0XHRzY29wZS1cdTAwM2V2YSA9IHRsYmlfdmFfczFfdG9fdmEodmFsKSBcdTAwMjYgfihzY29wZS1cdTAwM2VzaXplIC0gMSk7XG4gXHRcdHNjb3BlLVx1MDAzZWFzaWQgPSBGSUVMRF9HRVQoVExCSVJfQVNJRF9NQVNLLCB2YWwpO1xuIFx0XHRicmVhaztcbkBAIC0xMTU0LDggKzEyMDIsNiBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX3MxX3RsYmlfcmFuZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaW5zdCwgdTY0IHZhbCxcbiBcdGNhc2UgT1BfVExCSV9WQUFMRTFPU05YUzpcbiBcdFx0c2NvcGUtXHUwMDNldHlwZSA9IFRMQklfVkFBO1xuIFx0XHRzY29wZS1cdTAwM2VzaXplID0gdHRsX3RvX3NpemUoRklFTERfR0VUKFRMQklfVFRMX01BU0ssIHZhbCkpO1xuLVx0XHRpZiAoIXNjb3BlLVx1MDAzZXNpemUpXG4tXHRcdFx0c2NvcGUtXHUwMDNlc2l6ZSA9IFNaXzFHO1xuIFx0XHRzY29wZS1cdTAwM2V2YSA9IHRsYmlfdmFfczFfdG9fdmEodmFsKSBcdTAwMjYgfihzY29wZS1cdTAwM2VzaXplIC0gMSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBPUF9UTEJJX1JWQUUyOlxuQEAgLTEzMTYsMTMgKzEzNjIsMjAgQEAgdm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsKHN0cnVjdCBrdm0gKmt2bSlcbiAgKiAgIGludGVyc2VjdHMgd2l0aCB0aGUgVExCSSByZXF1ZXN0LCBpbnZhbGlkYXRlIGl0LCBhbmQgdW5tYXAgdGhlIHBhZ2VcbiAgKiAgIGZyb20gdGhlIGZpeG1hcC4gQmVjYXVzZSB3ZSBuZWVkIHRvIGxvb2sgYXQgYWxsIHRoZSB2Y3B1LXByaXZhdGUgVExCcyxcbiAgKiAgIHRoaXMgcmVxdWlyZXMgc29tZSB3aWRlLXJhbmdpbmcgbG9ja2luZyB0byBlbnN1cmUgdGhhdCBub3RoaW5nIHJhY2VzXG4tICogICBhZ2FpbnN0IGl0LiBUaGlzIG1heSByZXF1aXJlIHNvbWUgcmVmY291bnRpbmcgdG8gYXZvaWQgdGhlIHNlYXJjaCB3aGVuXG4tICogICBubyBzdWNoIFRMQiBpcyBwcmVzZW50LlxuKyAqICAgYWdhaW5zdCBpdC4gVGhpcyByZXF1aXJlcyBzb21lIHJlZmNvdW50aW5nIHRvIGF2b2lkIHRoZSBzZWFyY2ggd2hlblxuKyAqICAgbm8gc3VjaCBUTEIgaXMgcHJlc2VudCAoc2VlIGJlbG93KS5cbiAgKlxuICAqIC0gT24gTU1VIG5vdGlmaWVycywgd2UgbXVzdCBpbnZhbGlkYXRlIG91ciBUTEIgaW4gYSBzaW1pbGFyIHdheSwgYnV0XG4gICogICBsb29raW5nIGF0IHRoZSBJUEEgaW5zdGVhZC4gVGhlIGZ1bm55IHBhcnQgaXMgdGhhdCB0aGVyZSBtYXkgbm90IGJlIGFcbiAgKiAgIHN0YWdlLTIgbWFwcGluZyBmb3IgdGhpcyBwYWdlIGlmIEwxIGhhc24ndCBhY2Nlc3NlZCBpdCB1c2luZyBMRC9TVFxuICAqICAgaW5zdHJ1Y3Rpb25zLlxuKyAqXG4rICogLSB2bmNyX3RsYl9jb3VudCB0cmFja3MgdGhlIG51bWJlciBvZiB2YWxpZCBWTkNSIFRMQnMgVk0td2lkZS4gVGhpcyBpc24ndFxuKyAqICAgdGhlIG51bWJlciBvZiAqbWFwcGVkKiBMMSBWTkNSIHBhZ2VzLCB3aGljaCBpcyBsaWtlbHkgYmUgYSBzdWJzZXQgKGFuZFxuKyAqICAgYnkgZGVmaW5pdGlvbiwgYSBUTEJJIGhhbmRsZWQgZnJvbSBMMSBydW5zIHdpdGggdGhlIGNhbm9uaWNhbCBWTkNSXG4rICogICBwYWdlLCBub3QgdGhlIEwxJ3MpLiBUaGUgaW5uZXJtb3N0IHRyYXAgaGFuZGxpbmcgY29kZSBjaGVja3MgdGhpcyB0b1xuKyAqICAgZmluZCBvdXQgd2hldGhlciB0byByZXR1cm4gdG8gdGhlIGd1ZXN0IEFTQVAgKG5vIEwxIFRMQnMpIG9yIHRvIHZpc2l0XG4rICogICB0aGlzIHBhcnQgb2YgdGhlIHdvcmxkIGZvciBzb21lIGV4dHJhIGludmFsaWRhdGlvbiB3b3JrLlxuICAqL1xuIFxuIGludCBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtMTM3Nyw3ICsxNDMwLDggQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKVxuIFx0ICovXG4gXHRzY29wZWRfZ3VhcmQod3JpdGVfbG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spIHtcbiBcdFx0dGhpc19jcHVfcmVzZXRfdm5jcl9maXhtYXAodmNwdSk7XG4tXHRcdHZ0LVx1MDAzZXZhbGlkID0gZmFsc2U7XG4rXHRcdGlmICh2dC1cdTAwM2V2YWxpZClcbitcdFx0XHRpbnZhbGlkYXRlX3ZuY3IodmNwdS1cdTAwM2Vrdm0sIHZ0KTtcbiBcbiBcdFx0dnQtXHUwMDNld2kgPSAoc3RydWN0IHMxX3dhbGtfaW5mbykge1xuIFx0XHRcdC5yZWdpbWVcdD0gVFJfRUwyMCxcbkBAIC0xMzkxLDE1ICsxNDQ1LDE1IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcbiBcbiBcdHZhID0gIHJlYWRfdm5jcl9lbDIodmNwdSk7XG4gXG4rXHRtbXVfc2VxID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuK1x0c21wX3JtYigpO1xuK1xuIFx0cmV0ID0gX19rdm1fdHJhbnNsYXRlX3ZhKHZjcHUsIFx1MDAyNnZ0LVx1MDAzZXdpLCBcdTAwMjZ2dC1cdTAwM2V3ciwgdmEpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHdyaXRlX2ZhdWx0ID0ga3ZtX2lzX3dyaXRlX2ZhdWx0KHZjcHUpO1xuIFxuLVx0bW11X3NlcSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcbi1cdHNtcF9ybWIoKTtcbi1cbiBcdGdmbiA9IHZ0LVx1MDAzZXdyLnBhIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFx0bWVtc2xvdCA9IGdmbl90b19tZW1zbG90KHZjcHUtXHUwMDNla3ZtLCBnZm4pO1xuIFx0aWYgKCFtZW1zbG90KSB7XG5AQCAtMTQ0Nyw3ICsxNTAxLDcgQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKVxuIFx0XHR2dC1cdTAwM2VocGEgPSBwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gXHRcdHZ0LVx1MDAzZWhwYV93cml0YWJsZSA9IHdyaXRhYmxlO1xuIFx0XHR2dC1cdTAwM2V2YWxpZCA9IHRydWU7XG4tXHRcdHZ0LVx1MDAzZWNwdSA9IC0xO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnZ0LVx1MDAzZWNwdSwgLTEpO1xuIFxuIFx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfTUFQX0wxX1ZOQ1JfRUwyLCB2Y3B1KTtcbiBcdFx0a3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKHZjcHUtXHUwMDNla3ZtLCBwYWdlLCBmYWxzZSwgdnQtXHUwMDNld3IucHcgXHUwMDI2XHUwMDI2IHZ0LVx1MDAzZWhwYV93cml0YWJsZSk7XG5AQCAtMTUwMiw3ICsxNTU2LDIwIEBAIGludCBrdm1faGFuZGxlX3ZuY3JfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBTcGVjdWxhdGl2ZWx5IGluY3JlbWVudCB0aGUgVExCIGNvdW50IHRvIG1ha2Ugc3VyZSBjb25jdXJyZW50XG4rXHQgKiBUTEJJcyB3aWxsIHRha2UgdGhlIHNsb3cgcGF0aCwgYW5kIHdpbGwgaW50ZXJhY3Qgd2l0aCB0aGUgcmV0cnlcbitcdCAqIG1lY2hhbmlzbS4gRHJvcCBpdCBhZ2FpbiBvbiBlcnJvci5cbitcdCAqL1xuK1x0YXRvbWljX2luYyhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZuY3JfdGxiX2NvdW50KTtcbitcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XG4rXG4gXHRyZXQgPSBrdm1fdHJhbnNsYXRlX3ZuY3IodmNwdSwgXHUwMDI2aXNfZ21lbSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuK1x0XHRhdG9taWNfZGVjKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm5jcl90bGJfY291bnQpO1xuK1x0fVxuK1xuIFx0c3dpdGNoIChyZXQpIHtcbiBcdGNhc2UgLUVBR0FJTjpcbiBcdFx0LyogTGV0J3MgdHJ5IGFnYWluLi4uICovXG5AQCAtMTU2OCwxNCArMTYzNSwxNiBAQCBzdGF0aWMgdm9pZCBrdm1fbWFwX2wxX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCF2dC1cdTAwM2V2YWxpZClcbiBcdFx0cmV0dXJuO1xuIFxuK1x0LyogV2UgY2FjaGUgdGhlIE1NVSBzdGF0ZSBpbiB0aGUgVExCLiBDaGVjayB0aGF0IGl0IG1hdGNoZXMuICovXG4rXHRpZiAoISEodmNwdV9yZWFkX3N5c19yZWcodmNwdSwgU0NUTFJfRUwyKSBcdTAwMjYgU0NUTFJfRUx4X00pICE9IHMxX3dhbGtfdHJhbnNsYXRlZChcdTAwMjZ2dC1cdTAwM2V3cikpXG4rXHRcdHJldHVybjtcbitcbiBcdGlmIChyZWFkX3ZuY3JfZWwyKHZjcHUpICE9IHZ0LVx1MDAzZWd2YSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHZ0LVx1MDAzZXdyLm5HIFx1MDAyNlx1MDAyNiBnZXRfYXNpZF9ieV9yZWdpbWUodmNwdSwgVFJfRUwyMCkgIT0gdnQtXHUwMDNld3IuYXNpZClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0dnQtXHUwMDNlY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpO1xuLVxuIFx0aWYgKHZ0LVx1MDAzZWhwYV93cml0YWJsZSBcdTAwMjZcdTAwMjYgdnQtXHUwMDNld3IucHcgXHUwMDI2XHUwMDI2IHZ0LVx1MDAzZXdyLnByKVxuIFx0XHRwcm90ID0gUEFHRV9LRVJORUw7XG4gXHRlbHNlIGlmICh2dC1cdTAwM2V3ci5wcilcbkBAIC0xNTkwLDkgKzE2NTksOSBAQCBzdGF0aWMgdm9pZCBrdm1fbWFwX2wxX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogRklYTUU6IFdPIGRvZXNuJ3Qgd29yayBhdCBhbGwsIG5lZWQgUE9FIHN1cHBvcnQgaW4gdGhlIGtlcm5lbC5cbiBcdCAqL1xuIFx0aWYgKHBncHJvdF92YWwocHJvdCkgIT0gcGdwcm90X3ZhbChQQUdFX05PTkUpKSB7XG4tXHRcdF9fc2V0X2ZpeG1hcCh2bmNyX2ZpeG1hcCh2dC1cdTAwM2VjcHUpLCB2dC1cdTAwM2VocGEsIHByb3QpO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnZ0LVx1MDAzZWNwdSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbitcdFx0X19zZXRfZml4bWFwKHZuY3JfZml4bWFwKGF0b21pY19yZWFkKFx1MDAyNnZ0LVx1MDAzZWNwdSkpLCB2dC1cdTAwM2VocGEsIHByb3QpO1xuIFx0XHRob3N0X2RhdGFfc2V0X2ZsYWcoTDFfVk5DUl9NQVBQRUQpO1xuLVx0XHRhdG9taWNfaW5jKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm5jcl9tYXBfY291bnQpO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuaW5kZXggNWQ1YzU3OWQ0NTc5MC4uNzk3ZTg4OGJmOTM5NCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcbkBAIC00MDU3LDYgKzQwNTcsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVfcmlwYXMyZTFpcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCxcbiBcdHUzMiBzeXNfZW5jb2RpbmcgPSBzeXNfaW5zbihwLVx1MDAzZU9wMCwgcC1cdTAwM2VPcDEsIHAtXHUwMDNlQ1JuLCBwLVx1MDAzZUNSbSwgcC1cdTAwM2VPcDIpO1xuIFx0dTY0IHZ0dGJyID0gdmNwdV9yZWFkX3N5c19yZWcodmNwdSwgVlRUQlJfRUwyKTtcbiBcdHU2NCBiYXNlLCByYW5nZTtcbitcdGludCBwYV9iaXRzO1xuIFxuIFx0aWYgKCFrdm1fc3VwcG9ydGVkX3RsYmlfaXBhczJfb3AodmNwdSwgc3lzX2VuY29kaW5nKSlcbiBcdFx0cmV0dXJuIHVuZGVmX2FjY2Vzcyh2Y3B1LCBwLCByKTtcbkBAIC00MDY4LDYgKzQwNjksMTYgQEAgc3RhdGljIGJvb2wgaGFuZGxlX3JpcGFzMmUxaXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXG4gXHQgKi9cbiBcdGJhc2UgPSBkZWNvZGVfcmFuZ2VfdGxiaShwLVx1MDAzZXJlZ3ZhbCwgXHUwMDI2cmFuZ2UsIE5VTEwpO1xuIFxuK1x0LypcbitcdCAqIElnbm9yZSBUTEJJcyB0aGF0IHN0YXJ0IG91dCBvZiBQQV9iaXRzIHJhbmdlLCBhbmQgY2FwIHRoZVxuK1x0ICogaW52YWxpZGF0aW9uIHRvIHRoZSBbYmFzZTpiaXQoUEFfYml0cyldIGludGVydmFsLlxuK1x0ICovXG4rXHRwYV9iaXRzID0ga3ZtX2dldF9wYV9iaXRzKHZjcHUtXHUwMDNla3ZtKTtcbitcdGlmIChmbHM2NChiYXNlKSBcdTAwM2UgcGFfYml0cylcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRyYW5nZSA9IG1pbihyYW5nZSwgQklUX1VMTChwYV9iaXRzKSAtIGJhc2UpO1xuK1xuIFx0a3ZtX3MyX21tdV9pdGVyYXRlX2J5X3ZtaWQodmNwdS1cdTAwM2Vrdm0sIGdldF92bWlkKHZ0dGJyKSxcbiBcdFx0XHRcdCAgIFx1MDAyNih1bmlvbiB0bGJpX2luZm8pIHtcbiBcdFx0XHRcdFx0ICAgLnJhbmdlID0ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6MDQ6MDcuNzk4NzY4OTA4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU0MzI0MDYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLVk0gQVJNNjQgTmVzdGVkIFZpcnR1YWxpemF0aW9uIFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgc29tZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gS1ZNJ3MgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGltcGxlbWVudGF0aW9uIG9uIEFSTTY0LiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIHR3ZWFraW5nIFZOQ1IgVExCIGhhbmRsaW5nLiBUaGUgY29kZSdzIHN3aXRjaGVkIGB2bmNyX21hcF9jb3VudGAgdG8gYHZuY3JfdGxiX2NvdW50YCwgYW5kIEknbSBzZWVpbmcgbW9kaWZpY2F0aW9ucyB0byBhIHdob2xlIGJ1bmNoIG9mIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGdldCBteSBoZWFkIGFyb3VuZCB0aGlzLiBMZXQncyBzZWUuLi4gaXQgdG91Y2hlcyBga3ZtX2h5cF9oYW5kbGVfdGxiaV9lbDJgLCBga3ZtX2luaXRfbmVzdGVkYCwgYWxsIHRoZXNlIHZhcmlvdXMgVExCIGludmFsaWRhdGlvbiBhbmQgbWFwcGluZyByb3V0aW5lcyDigJMgYGt2bV93YWxrX25lc3RlZF9zMmAsIGB0dGxfdG9fc2l6ZWAsIGBwZ3NoaWZ0X2xldmVsX3RvX3R0bGAsIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAsIGB1bm1hcF9sMV92bmNyYCwgYHRoaXNfY3B1X3Jlc2V0X3ZuY3JfZml4bWFwYCwgYGludmFsaWRhdGVfdm5jcmAsIGB2bmNyX3RsYl9pbnRlcnNlY3RzYCwgYGt2bV9pbnZhbGlkYXRlX3ZuY3JfaXBhYCwgYGludmFsaWRhdGVfdm5jcl92YWAsIGBjb21wdXRlX3MxX3RsYmlfcmFuZ2VgLCBga3ZtX3RyYW5zbGF0ZV92bmNyYCwgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAsIGBrdm1fbWFwX2wxX3ZuY3JgLCBhbmQgYWxzbyBgaGFuZGxlX3JpcGFzMmUxaXNgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGRlbWFuZHMgZnV6emluZy4gQW55IGNoYW5nZSBsaWtlIHRoaXMgaW4gYSBsb3ctbGV2ZWwgaHlwZXJ2aXNvciBmdW5jdGlvbiwgZXNwZWNpYWxseSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBpcyBhIHByaW1lIHRhcmdldC4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgYXJlYXMgb2YgaW50ZXJlc3QgaGVyZSBmb3IgYSBmdXp6aW5nIGNhbXBhaWduLlxuXG5TbywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIEkndmUgYWxyZWFkeSBpZGVudGlmaWVkIHNldmVyYWwgZmlsZXMsIGFuZCBmdW5jdGlvbnMgbGlrZSBgZGVjb2RlX3JhbmdlX3RsYmlgLCBga3ZtX2h5cF9oYW5kbGVfdGxiaV9lbDJgLCBga3ZtX2luaXRfbmVzdGVkYCwgYGt2bV93YWxrX25lc3RlZF9zMmAsIGFsbCB0aGVzZSBUTEIgcmVsYXRlZCBmdW5jdGlvbnMuIEkgbmVlZCB0byBzZWUgaG93IHRoZXkncmUgdXNlZC5cblxuTm93LCBsZXQncyBmaWd1cmUgb3V0IHRoZSBwcmVjb25kaXRpb25zIGZvciByZWFjaGluZyB0aGVzZSBjb2RlIHBhdGhzLiBTdGFuZGFyZCBLVk0gb24gQVJNNjQgcmVxdWlyZXMgYENPTkZJR19LVk1gLiBOZXN0ZWQgdmlydHVhbGl6YXRpb24sIGluIGdlbmVyYWwsIG1pZ2h0IGludm9sdmUgYENPTkZJR19BUk02NGAgYW5kIGBDT05GSUdfS1ZNYCwgYnV0IEkgYmV0IHRoZXJl4oCZcyBhIG1vcmUgc3BlY2lmaWMgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGNvbmZpZyBJIG5lZWQgdG8gc3VzcyBvdXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IHRoZSBleGFjdCBidWlsZCBjb25maWd1cmF0aW9ucyByZXF1aXJlZCB0byBoaXQgdGhlc2UgY2hhbmdlZCBhcmVhcy4gVGhpcyB3aWxsIGJlIGNyaXRpY2FsIGZvciBjcmVhdGluZyBlZmZlY3RpdmUgZnV6emluZyBoYXJuZXNzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2OTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMDowNDoxNi4zNDIwMTM4NTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzEzODMwNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6MjA6bWVudWNvbmZpZyBLVk1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6MDQ6MTYuNDEzNDAxNzA1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEwODkzOTM5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5lc3RlZCBLVk0gQ29uZmlndXJhdGlvbiBDaGVjayoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBhbnkgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgc2NlbmFyaW9zLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjb25maXJtIHRoZSBiYXNpY3MuIExldCdzIG5vdCBhc3N1bWUgYW55dGhpbmcuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gZGVkaWNhdGVkIHRvIG1hbmFnaW5nIG5lc3RlZCBLVk0gdmlydHVhbGl6YXRpb24uIEknbSB0aGlua2luZywgaXMgdGhlcmUgYSBkZWZpbmVkIG1ldGhvZCBpbiBwbGFjZT8gV2hhdCdzIHRoZSBiZXN0IHdheSB0byBkZXRlcm1pbmUgaWYgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYW5kIHByb3Blcmx5IGNvbmZpZ3VyZWQgZm9yIHRoZSBjdXJyZW50IGVudmlyb25tZW50PyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQganVtcGluZyBpbiB3aXRob3V0IHRoaXMgcHJlbGltaW5hcnkgY2hlY2sgaXMgYXNraW5nIGZvciB0cm91YmxlLiBJdCdsbCBzYXZlIG1lIHNpZ25pZmljYW50IGRlYnVnZ2luZyB0aW1lIGxhdGVyLiBLbm93aW5nIHdoZXRoZXIgb3Igbm90IHRoaXMgY29uZmlndXJhdGlvbiBhbHJlYWR5IGV4aXN0cyB3aWxsIGhlYXZpbHkgaW5mb3JtIG15IG5leHQgc3RlcHMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIGFuZCBob3cgdGhpcyBtaWdodCBiZSBkb2N1bWVudGVkIGFuZCB3aGF0IHRvb2xzIEkgc2hvdWxkIHVzZSB0byBjaGVjayBmb3IgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NzEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMDowNDoyMC41MjIzNDI4NjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA4MjEwNzQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lc3RlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMDowNDoyMC42MTMxNzIxOTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTEyMTg5MzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgTmVzdGVkIEtWTSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlcmUncyBubyBleHBsaWNpdCBjb25maWd1cmF0aW9uIG9wdGlvbiBpbiBLY29uZmlnIGZvciBuZXN0ZWQgS1ZNLiBUaGF0J3MgYSBiaXQgdW51c3VhbCwgYnV0IGl0IHByb2JhYmx5IG1lYW5zIGl0J3MgZWl0aGVyIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBwZXJoYXBzIHRyaWdnZXJlZCBhdCBydW50aW1lIGJhc2VkIG9uIHN5c3RlbSBjYXBhYmlsaXRpZXMuIFRvIGJlIHN1cmUsIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzLiBTcGVjaWZpY2FsbHksIEknbSBob3BpbmcgdG8gc2VlIGAjaWZkZWZgIG9yIGAjaWZgIHN0YXRlbWVudHMgdGhhdCBjb250cm9sIHdoZXRoZXIgdGhlIG5lc3RlZCBLVk0gZnVuY3Rpb25hbGl0eSBpcyBidWlsdCBpbnRvIHRoZSBrZXJuZWwgb3IgZXhjbHVkZWQuIFRoaXMgd2lsbCBjbGFyaWZ5IGhvdyB0aGlzIGZlYXR1cmUgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIEFSTTY0IGFyY2hpdGVjdHVyZSdzIEtWTSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMDowNDoyNC43MjUzNjQ1NDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE1MzM5NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL01ha2VmaWxlPTE2PWt2bS15ICs9IGFybS5vIG1tdS5vIG1taW8ubyBwc2NpLm8gaHlwZXJjYWxscy5vIHB2dGltZS5vIFxcXFxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTE5LVxcdCB2Z2ljLXN5cy1yZWctdjMubyBmcHNpbWQubyBwa3ZtLm8gXFxcXFxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlOjIwOlxcdCBhcmNoX3RpbWVyLm8gdHJuZy5vIHZtaWQubyBlbXVsYXRlLW5lc3RlZC5vIG5lc3RlZC5vIGF0Lm8gXFxcXFxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTIxLVxcdCB2Z2ljL3ZnaWMubyB2Z2ljL3ZnaWMtaW5pdC5vIFxcXFxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTI1LVxcdCB2Z2ljL3ZnaWMtbW1pby12My5vIHZnaWMvdmdpYy1rdm0tZGV2aWNlLm8gXFxcXFxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlOjI2OlxcdCB2Z2ljL3ZnaWMtaXRzLm8gdmdpYy92Z2ljLWRlYnVnLm8gdmdpYy92Z2ljLXYzLW5lc3RlZC5vIFxcXFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0yNy1cXHQgdmdpYy92Z2ljLXY1Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6MDQ6MjQuODA2OTA0Mzk2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIwODEwMjUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNLXJlbGF0ZWQgRnVuY3Rpb25zIGZvciBQb3RlbnRpYWwgSW1wYWN0KipcblxuT2theSwgc28gdGhpcyBpcyBhYm91dCBLVk0gYW5kIGhvdyBpdCdzIGNvbXBpbGVkLiBJJ20gZm9jdXNpbmcgb24gZmluZGluZyB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4gVGhlIGtleSB0aGluZyBpcyB0aGF0IEtWTSBnZXRzIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSB3aGVuIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkLCBzbyB0aGF0J3MgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBvcHRpb24gdG8ga2VlcCBpbiBtaW5kLlxuXG5NeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBpZGVudGlmeSBhbmQgemVybyBpbiBvbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoaXMgY29udGV4dC4gSSd2ZSBnb3QgYSBsaXN0IGZyb20gdGhlIHBhdGNoOiBga3ZtX2luaXRfbmVzdGVkYCwgYGt2bV93YWxrX25lc3RlZF9zMmAsIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAsIGBrdm1fdmNwdV9sb2FkX2h3X21tdWAsIGBrdm1fdmNwdV9wdXRfaHdfbW11YCwgYGdldF9hc2lkX2J5X3JlZ2ltZWAsIGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsYCwgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYCwgYW5kIGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgLlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgb3IgYXJlIG5vbi1zdGF0aWMuIFRoZSBrZXkgb25lcyB0aGF0IEkgbmVlZCB0byBrZWVwIGluIG1pbmQgYXJlOiBga3ZtX2luaXRfbmVzdGVkYCwgYGt2bV93YWxrX25lc3RlZF9zMmAsIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAsIGBrdm1fdmNwdV9sb2FkX2h3X21tdWAsIGBrdm1fdmNwdV9wdXRfaHdfbW11YCwgYGdldF9hc2lkX2J5X3JlZ2ltZWAsIGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsYCwgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYCwgYW5kIGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgLlxuXG5JJ20gYWxzbyBsb29raW5nIGF0IGEgY291cGxlIG9mIG90aGVyIGZ1bmN0aW9ucywganVzdCB0byBiZSBzdXJlOiBga3ZtX2h5cF9oYW5kbGVfdGxiaV9lbDJgIChpbiBgYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY2ApIGFuZCBgaGFuZGxlX3JpcGFzMmUxaXNgIChpbiBgYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY2ApLiBIb3dldmVyLCB0aGVzZSBhcmUgc3RhdGljIGZ1bmN0aW9ucywgc28gSSBkb24ndCBuZWVkIHRvIGxvb2sgYXQgdGhlbS5cblxuSXQgbG9va3MgbGlrZSBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCwgYGt2bV93YWxrX25lc3RlZF9zMmAsIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAsIGFuZCBga3ZtX2luaXRfbmVzdGVkYCBhcmUgbm9uLXN0YXRpYy5cblxuTm93IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGUgY2FsbGVycyBmb3IgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAgYW5kIGBoYW5kbGVfcmlwYXMyZTFpc2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jeSBncmFwaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MzUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6MDQ6MzIuMDE1MDA4ODA5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDc0NDI1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1faGFuZGxlX3ZuY3JfYWJvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL2hhbmRsZV9leGl0LmM9Mzc2PXN0YXRpYyBleGl0X2hhbmRsZV9mbiBhcm1fZXhpdF9oYW5kbGVyc1tdID0ge1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vaGFuZGxlX2V4aXQuYy0zOTUtXFx0W0VTUl9FTHhfRUNfREFCVF9MT1ddXFx0PSBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0LFxcbmFyY2gvYXJtNjQva3ZtL2hhbmRsZV9leGl0LmM6Mzk2OlxcdFtFU1JfRUx4X0VDX0RBQlRfQ1VSXVxcdD0ga3ZtX2hhbmRsZV92bmNyX2Fib3J0LFxcbmFyY2gvYXJtNjQva3ZtL2hhbmRsZV9leGl0LmMtMzk3LVxcdFtFU1JfRUx4X0VDX1NPRlRTVFBfTE9XXT0ga3ZtX2hhbmRsZV9ndWVzdF9kZWJ1ZyxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE1MTY9c3RhdGljIHZvaWQgaGFuZGxlX3ZuY3JfcGVybShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTQwLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE1NDE6aW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTU0Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjA0OjMyLjEwOTc2MTQyM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDk5NTE1MTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYSBQb3RlbnRpYWwgS1ZNIEV4aXQgSGFuZGxlcioqXG5cbkFscmlnaHQsICprdm1faGFuZGxlX3ZuY3JfYWJvcnQqLi4uIHRoYXQncyBsb29raW5nIHByb21pc2luZyBhcyBhbiBleGl0IGhhbmRsZXIsIGEgZ29vZCBwbGFjZSB0byBzdGFydCB0aGUgaW52ZXN0aWdhdGlvbi4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlICpoYW5kbGVfcmlwYXMyZTFpcyogaGFuZGxlciBhcyB3ZWxsLCBqdXN0IHRvIGJlIHN1cmUgSSdtIGNvbnNpZGVyaW5nIGFsbCByZWxldmFudCBhcmVhcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMDowNDozNi4yMDkyNzk1NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIzMjk5NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFuZGxlX3JpcGFzMmUxaXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9NDAzMD1zdGF0aWMgYm9vbCBoYW5kbGVfdm1hbGxzMTJlMWlzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MDUzLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NDA1NDpzdGF0aWMgYm9vbCBoYW5kbGVfcmlwYXMyZTFpcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQwNTUtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9NDIxMj1zdGF0aWMgc3RydWN0IHN5c19yZWdfZGVzYyBzeXNfaW5zbl9kZXNjc1tdID0ge1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MzEyLVxcdFNZU19JTlNOKFRMQklfSVBBUzJFMUlTLCBoYW5kbGVfaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQzMTM6XFx0U1lTX0lOU04oVExCSV9SSVBBUzJFMUlTLCBoYW5kbGVfcmlwYXMyZTFpcyksXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MzE0LVxcdFNZU19JTlNOKFRMQklfSVBBUzJMRTFJUywgaGFuZGxlX2lwYXMyZTFpcyksXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MzE1OlxcdFNZU19JTlNOKFRMQklfUklQQVMyTEUxSVMsIGhhbmRsZV9yaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzMTYtXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzMzQtXFx0U1lTX0lOU04oVExCSV9JUEFTMkUxLCBoYW5kbGVfaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQzMzU6XFx0U1lTX0lOU04oVExCSV9SSVBBUzJFMSwgaGFuZGxlX3JpcGFzMmUxaXMpLFxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NDMzNjpcXHRTWVNfSU5TTihUTEJJX1JJUEFTMkUxT1MsIGhhbmRsZV9yaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzMzctXFx0U1lTX0lOU04oVExCSV9JUEFTMkxFMU9TLCBoYW5kbGVfaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzMzgtXFx0U1lTX0lOU04oVExCSV9JUEFTMkxFMSwgaGFuZGxlX2lwYXMyZTFpcyksXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MzM5OlxcdFNZU19JTlNOKFRMQklfUklQQVMyTEUxLCBoYW5kbGVfcmlwYXMyZTFpcyksXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MzQwOlxcdFNZU19JTlNOKFRMQklfUklQQVMyTEUxT1MsIGhhbmRsZV9yaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzNDEtXFx0U1lTX0lOU04oVExCSV9SVkFFMk9TLCBoYW5kbGVfdGxiaV9lbDIpLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MzU0LVxcdFNZU19JTlNOKFRMQklfSVBBUzJFMUlTTlhTLCBoYW5kbGVfaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQzNTU6XFx0U1lTX0lOU04oVExCSV9SSVBBUzJFMUlTTlhTLCBoYW5kbGVfcmlwYXMyZTFpcyksXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MzU2LVxcdFNZU19JTlNOKFRMQklfSVBBUzJMRTFJU05YUywgaGFuZGxlX2lwYXMyZTFpcyksXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MzU3OlxcdFNZU19JTlNOKFRMQklfUklQQVMyTEUxSVNOWFMsIGhhbmRsZV9yaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzNTgtXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzNzQtXFx0U1lTX0lOU04oVExCSV9JUEFTMkUxTlhTLCBoYW5kbGVfaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQzNzU6XFx0U1lTX0lOU04oVExCSV9SSVBBUzJFMU5YUywgaGFuZGxlX3JpcGFzMmUxaXMpLFxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NDM3NjpcXHRTWVNfSU5TTihUTEJJX1JJUEFTMkUxT1NOWFMsIGhhbmRsZV9yaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzNzctXFx0U1lTX0lOU04oVExCSV9JUEFTMkxFMU9TTlhTLCBoYW5kbGVfaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzNzgtXFx0U1lTX0lOU04oVExCSV9JUEFTMkxFMU5YUywgaGFuZGxlX2lwYXMyZTFpcyksXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0Mzc5OlxcdFNZU19JTlNOKFRMQklfUklQQVMyTEUxTlhTLCBoYW5kbGVfcmlwYXMyZTFpcyksXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MzgwOlxcdFNZU19JTlNOKFRMQklfUklQQVMyTEUxT1NOWFMsIGhhbmRsZV9yaXBhczJlMWlzKSxcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQzODEtXFx0U1lTX0lOU04oVExCSV9SVkFFMk9TTlhTLCBoYW5kbGVfdGxiaV9lbDIpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMDowNDozNi4zMDE2MTM3NzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyNzY5NDUxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgSW5zdHJ1Y3Rpb24gRGlzcGF0Y2gqKlxuXG5TbywgYGhhbmRsZV9yaXBhczJlMWlzYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEludGVyZXN0aW5nLi4uIHVzdWFsbHksIHN0YXRpYyBmdW5jdGlvbnMgc3VnZ2VzdCBhIGxvY2FsIHNjb3BlLCBub3Qgc29tZXRoaW5nIHdpZGVseSBhY2Nlc3NpYmxlLiBIb3dldmVyLCBpdCdzIGdldHRpbmcgY2FsbGVkIHRocm91Z2ggYHN5c19pbnNuX2Rlc2NzYC4gVGhhdCdzIHRoZSBjcnVjaWFsIHBvaW50IC0gaXQncyBiZWluZyBhY2Nlc3NlZCB2aWEgYSBkaXNwYXRjaCB0YWJsZSwgd2hpY2ggbWFrZXMgbWUgcmUtZXZhbHVhdGUgbXkgaW5pdGlhbCB0aG91Z2h0LiBJdCdzIGVzc2VudGlhbGx5IGhpZGRlbiBpbnRlcm5hbGx5IGJ1dCBpbnZva2VkIGFzIGEgZGlzcGF0Y2ggcm91dGluZS4gR290IGl0LiBOb3csIHdoYXQgYWJvdXQgdGhhdCBga3ZtX3dhbGtfbmVzdGVkX3MyYCBjYWxsLCBob3cgZG9lcyBpdCBmaXQgaW4gd2l0aCB0aGlzIGRpc3BhdGNoIHNldHVwLCBhbmQgd2hhdCByZWxhdGlvbnNoaXAgZG9lcyBpdCBoYXZlIHRvIGBoYW5kbGVfcmlwYXMyZTFpc2A/IEl0IHNlZW1zIGxpa2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gcmVsYXRpb24gdG8gdGhlIGRpc3BhdGNoaW5nIG1lY2hhbmlzbSBhcyB3ZWxsIGFzIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgd2lkZXIgc3lzdGVtIHRvIHNlZSBob3cgYWxsIHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjAzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6MDQ6NDAuMTI5MzExMzRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMTc2MzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV93YWxrX25lc3RlZF9zMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vYXQuYz00NjI9c3RhdGljIGludCB3YWxrX3MxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHMxX3dhbGtfaW5mbyAqd2ksXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hdC5jLTQ4My1cXHRcXHRpZiAod2ktXFx1MDAzZXMyKSB7XFxuYXJjaC9hcm02NC9rdm0vYXQuYzo0ODQ6XFx0XFx0XFx0cmV0ID0ga3ZtX3dhbGtfbmVzdGVkX3MyKHZjcHUsIGlwYSwgXFx1MDAyNnMyX3RyYW5zKTtcXG5hcmNoL2FybTY0L2t2bS9hdC5jLTQ4NS1cXHRcXHRcXHRpZiAocmV0ID09IC1FQUdBSU4pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hdC5jPTE1OTU9aW50IF9fa3ZtX2F0X3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBvcCwgdTY0IHZhZGRyKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXQuYy0xNjQ0LVxcdHNjb3BlZF9ndWFyZChzcmN1LCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1KVxcbmFyY2gvYXJtNjQva3ZtL2F0LmM6MTY0NTpcXHRcXHRyZXQgPSBrdm1fd2Fsa19uZXN0ZWRfczIodmNwdSwgaXBhLCBcXHUwMDI2b3V0KTtcXG5hcmNoL2FybTY0L2t2bS9hdC5jLTE2NDYtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0yMjQ3PWludCBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTIzMjItXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjMyMzpcXHRcXHRyZXQgPSBrdm1fd2Fsa19uZXN0ZWRfczIodmNwdSwgZmF1bHRfaXBhLCBcXHUwMDI2bmVzdGVkX3RyYW5zKTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yMzI0LVxcdFxcdGlmIChyZXQgPT0gLUVBR0FJTikge1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9NDc0PXN0YXRpYyB2b2lkIHNldHVwX3MyX3dhbGsoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgczJfd2Fsa19pbmZvICp3aSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTQ4OC1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzo0ODk6aW50IGt2bV93YWxrX25lc3RlZF9zMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBoeXNfYWRkcl90IGdpcGEsXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtNDkwLVxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX3MyX3RyYW5zICpyZXN1bHQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjA0OjQwLjE5OTQ5MzMxNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTU2NDcyOTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIEtWTSBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgYGt2bV93YWxrX25lc3RlZF9zMmAgcG9wcyB1cCBpbiBib3RoIGBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0YCBhbmQgYF9fa3ZtX2F0X3MxMmAuIEhtbSwgYW5kIGl0J3Mgbm90IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZyBpbiBpdHNlbGYg4oCTIG1lYW5zIGl0J3MgbGlrZWx5IGNhbGxlZCBmcm9tIG90aGVyIHBsYWNlcyB0b28sIG9yIGF0IGxlYXN0IHBvdGVudGlhbGx5IGNhbGxhYmxlLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gVGhpcyBzdWdnZXN0cyBhIGNvcmUgcm9sZSBpbiBtYW5hZ2luZyBuZXN0ZWQgcGFnaW5nLCBsaWtlbHkgcmVsYXRlZCB0byBoYW5kbGluZyBhYm9ydHMgYW5kIGFkZHJlc3Npbmcgc3BlY2lmaWMgUzEyIHNpdHVhdGlvbnMuXG5cbk5vdywgbXkgbWluZCBzaGlmdHPigKYgd2hhdCBhYm91dCBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgaXQgcmVsYXRlcyB0byB0aGlzLiBUaGVyZSdzIGEgaGlnaCBwcm9iYWJpbGl0eSB0aGV5IHdvcmsgY2xvc2VseSB0b2dldGhlciwgYXMgYGt2bV93YWxrX25lc3RlZF9zMmAgc2VlbXMgdG8gZGVhbCB3aXRoIGxvb2tpbmcgYXQgbWVtb3J5IG1hcHBpbmdzIGFuZCBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgIHdvdWxkIHBvdGVudGlhbGx5IHVzZSB0aGF0IGtub3dsZWRnZSB0byBpbnZhbGlkYXRlIFRMQiBlbnRyaWVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UuIFBlcmhhcHMgdGhleSdyZSBpbnZvbHZlZCBpbiBtYW5hZ2luZyB0aGUgbWVtb3J5IHN0YXRlIHdoZW4gYSBndWVzdCBhYm9ydHMgb3IgaXMgd29ya2luZyBhdCBTMTIuIFRoZXkgbWlnaHQgYm90aCBoYXZlIGEgcm9sZSBpbiBlbnN1cmluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBndWVzdCdzIG1lbW9yeSBzcGFjZSBhbmQgdGhlIGhvc3QncyB0cmFuc2xhdGlvbiB0YWJsZXMuIEl0IGlzIHBvc3NpYmxlIGBrdm1fd2Fsa19uZXN0ZWRfczJgIGlzIHVzZWQgZm9yIHRyYXZlcnNpbmcgdGhlIG5lc3RlZCBwYWdpbmcgc3RydWN0dXJlIHRvIGRldGVybWluZSB0aGUgcmFuZ2UgdGhhdCBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgIG5lZWRzIHRvIGludmFsaWRhdGUuIEknbGwgaGF2ZSB0byBkZWx2ZSBkZWVwZXIgdG8gY29uZmlybSBteSBoeXBvdGhlc2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ3OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjA0OjQ0LjM1NTk2OTM0OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY1NTMyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTYwNj1zdGF0aWMgdTggZ2V0X2d1ZXN0X21hcHBpbmdfdHRsKHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHU2NCBhZGRyKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtNjc2LVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjY3Nzp1bnNpZ25lZCBsb25nIGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHU2NCB2YWwpXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtNjc4LXtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9NDA5ND1zdGF0aWMgdm9pZCBzMl9tbXVfdW5tYXBfaXBhKHN0cnVjdCBrdm1fczJfbW11ICptbXUsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQxMDktXFx0YmFzZV9hZGRyID0gKGluZm8tXFx1MDAzZWlwYS5hZGRyIFxcdTAwMjYgR0VOTUFTS19VTEwoMzUsIDApKSBcXHUwMDNjXFx1MDAzYyAxMjtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQxMTA6XFx0bWF4X3NpemUgPSBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZShtbXUsIGluZm8tXFx1MDAzZWlwYS5hZGRyKTtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQxMTEtXFx0YmFzZV9hZGRyIFxcdTAwMjY9IH4obWF4X3NpemUgLSAxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6MDQ6NDQuNDIyNTI3ODE0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDI3NzQyODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIFRMQiBJbnZhbGlkYXRpb25zIGluIEtWTSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAgYW5kIEknbSBpbW1lZGlhdGVseSBzdHJ1Y2sgYnkgdGhlIGZhY3QgdGhhdCBpdCBpc24ndCBzdGF0aWMuIFRoYXQgdGVsbHMgbWUgaXQncyBsaWtlbHkgYmVpbmcgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgbW9kdWxlLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gVGhlIG5vbi1zdGF0aWMgbmF0dXJlIGhpbnRzIGF0IGEgbW9yZSBjb21wbGV4IGludGVyYWN0aW9uLCBtYXliZSBpbnZvbHZpbmcgb3RoZXIgcGFydHMgb2YgdGhlIEtWTSBjb2RlLlxuXG5NeSBuZXh0IG1vdmUgaXMgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZmlndXJlIG91dCB3aGVyZSBhbmQgd2h5IHRoaXMgaXMgYmVpbmcgdXNlZC4gTGV0J3Mgc2VlLi4uIGEgZ29vZCBzdGFydGluZyBwb2ludCBpcyBwcm9iYWJseSBga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJgLiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBpbnZvY2F0aW9ucy4gSSdtIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gYWxsb2NhdGluZyB0aGUgVmlydHVhbC10by1QaHlzaWNhbCB0cmFuc2xhdGlvbiBsb29rYXNpZGUgYnVmZmVyLCB3aGljaCByZWxhdGVzIGRpcmVjdGx5IHRvIFRMQiBtYW5hZ2VtZW50LiBUaGUgbG9naWMgd2l0aGluIHNob3VsZCBpbGx1bWluYXRlIGhvdyBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgIGZhY3RvcnMgaW50byB0aGF0IGFsbG9jYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIHRvIGdldCBhIGNsZWFyZXIgdmlldyBvZiB0aGUgaW52YWxpZGF0aW9uIHN0cmF0ZWd5IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjM1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6MDQ6NDguNTY1MzA1MTM5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTY0ODA3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vYXJtLmM9OTIxPWludCBrdm1fYXJjaF92Y3B1X3J1bl9waWRfY2hhbmdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTk1MS1cXHRpZiAodmNwdV9oYXNfbnYodmNwdSkpIHtcXG5hcmNoL2FybTY0L2t2bS9hcm0uYzo5NTI6XFx0XFx0cmV0ID0ga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGIodmNwdSk7XFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtOTUzLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMzE3PXZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X2FsbChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzgwLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEzODE6aW50IGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzgyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6MDQ6NDguNjM2OTU5NTc0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzQ2MDg4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBLVk0ncyBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIGBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYmAgaXNuJ3Qgc3RhdGljLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBLbm93aW5nIHRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgc29tZXRoaW5nIGFib3V0IGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIHVzYWdlIHdpdGhpbiB0aGUgYnJvYWRlciBLVk0gY29kZWJhc2UuIEl0IG1lYW5zIGl0J3MgbGlrZWx5IGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIG1vZHVsZSBpdCdzIGRlZmluZWQgaW4sIHdoaWNoIGltcGFjdHMgaG93IEknZCBhcHByb2FjaCB0cmFjaW5nIGl0cyBwdXJwb3NlIGFuZCBkZXBlbmRlbmNpZXMuIE5vdywgbGV0J3Mgc2VlIHdoZXJlIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBrdm1faW5pdF9uZXN0ZWRgLiBJJ20gZ3Vlc3NpbmcgdGhhdCBmdW5jdGlvbiBtaWdodCBiZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGFzIGl0J3Mgb2Z0ZW4gYSBjZW50cmFsIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGFuZCBoYXMgYSBnb29kIGNoYW5jZSBvZiBiZWluZyB3aGVyZSBga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJgIGlzIGNhbGxlZCBvciBzb21laG93IHJlbGV2YW50LiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsIGlzIGtleSB0byBncmFzcGluZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ3kgaW4gS1ZNJ3MgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGltcGxlbWVudGF0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCB0byBidWlsZCBhIGNsZWFyZXIgcGljdHVyZSBvZiBpdHMgcm9sZSBpbiB2aXJ0dWFsaXppbmcgbmVzdGVkIHBhZ2UgdGFibGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgyOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjA0OjUyLjc3MTU3MTY5OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4MjExMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2luaXRfbmVzdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9hcm0uYz0yMjI9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0yMzgtXFxuYXJjaC9hcm02NC9rdm0vYXJtLmM6MjM5OlxcdGt2bV9pbml0X25lc3RlZChrdm0pO1xcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTI0MC1cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTk4MT1pbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEwMzYtXFx0aWYgKGt2bV9pc19uZXN0ZWRfczJfbW11KGt2bSwgbW11KSlcXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMDM3OlxcdFxcdGt2bV9pbml0X25lc3RlZF9zMl9tbXUobW11KTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMDM4LVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9MTEyNT12b2lkIGt2bV9mcmVlX3N0YWdlMl9wZ2Qoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExMzgtXFx0aWYgKGt2bV9pc19uZXN0ZWRfczJfbW11KGt2bSwgbW11KSlcXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMTM5OlxcdFxcdGt2bV9pbml0X25lc3RlZF9zMl9tbXUobW11KTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMTQwLVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MjA9c3RydWN0IHZuY3JfdGxiIHtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTQ2LVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjQ3OnZvaWQga3ZtX2luaXRfbmVzdGVkKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy00OC17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz04MDU9c3RhdGljIHN0cnVjdCBrdm1fczJfbW11ICpnZXRfczJfbW11X25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy04NjktXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6ODcwOnZvaWQga3ZtX2luaXRfbmVzdGVkX3MyX21tdShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTg3MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjA0OjUyLjgyMjM5NjY3NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQyODgyMDY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIEZvY3VzOiBOZXN0ZWQgS1ZNIG9uIEFybTY0KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgbmVzdGVkIEtWTSBjb2RlLCBhbmQgaGVyZSdzIG15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB3aGVyZSB0byBmb2N1cyB0aGUgZnV6emluZyBlZmZvcnRzLiBGaXJzdCwgSSdtIGlkZW50aWZ5aW5nIHRoZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIFZOQ1IgKFZpcnR1YWwgTmVzdGVkIENvbnRyb2wgUmVnaXN0ZXJzKSBhYm9ydCBoYW5kbGluZyBhbmQgUzIgdHJhbnNsYXRpb24uXG5cbk15IGluaXRpYWwgbGlzdCBvZiBmdW5jdGlvbnMgb2YgaW50ZXJlc3QgaW5jbHVkZXM6IGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgLCBga3ZtX3dhbGtfbmVzdGVkX3MyYCwgYGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlYCwgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYCwgYW5kIGBrdm1faW5pdF9uZXN0ZWRgLiBJJ20gaW1tZWRpYXRlbHkgZGlzbWlzc2luZyBga3ZtX2luaXRfbmVzdGVkYCBiZWNhdXNlIGl0IGFwcGVhcnMgdG8gYmUgcHVyZWx5IGFuIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGFuZCB0aGVyZWZvcmUgbGVzcyBsaWtlbHkgdG8gZXhwb3NlIGludGVyZXN0aW5nIGZ1enppbmcgdGFyZ2V0cyBkaXJlY3RseS5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSByZW1haW5pbmcgY2FuZGlkYXRlcyBtb3JlIGNhcmVmdWxseTpcblxuKiAgIGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgOiBUaGlzIGxvb2tzIGxpa2UgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIFZOQ1IgYWJvcnRzLiBJdCdzIGEgcHJpbWUgdGFyZ2V0LlxuKiAgIGBrdm1fd2Fsa19uZXN0ZWRfczJgOiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgbmVzdGVkIFMyIHBhZ2Ugd2FsaywgYW5vdGhlciBjcml0aWNhbCBhcmVhLlxuKiAgIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWA6IFRoaXMgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIFRMQiBpbnZhbGlkYXRpb24gcmFuZ2VzLCBwb3RlbnRpYWxseSBjb21wbGV4IGxvZ2ljIHRoYXQgbmVlZHMgY2xvc2Ugc2NydXRpbnkuXG4qICAgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYDogVGhpcyBvbmUgaXMgaW50ZXJlc3Rpbmc7IGl0J3MgY2FsbGVkIGR1cmluZyB2Q1BVIHJ1biBQSUQgY2hhbmdlcy5cblxuTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19LVk1gIGlzIHRoZSBwcmltYXJ5IHJlcXVpcmVtZW50LiBUaGlzIGlzIGdvb2Q7IGl0IHNpbXBsaWZpZXMgdGhpbmdzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYCB3aGljaCBpcyBidWlsdCB3aXRoIGBrdm0teSArPSBuZXN0ZWQub2AgaW4gdGhlIGBNYWtlZmlsZWAuIFRoYXQgY29uZmlybXMgYENPTkZJR19LVk1gIGlzIGluZGVlZCBzdWZmaWNpZW50LlxuXG5JJ20gbm93IGdvaW5nIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IHJlYWNoYWJsZS4gSXQncyBubyB1c2UgdGFyZ2V0aW5nIGEgZnVuY3Rpb24gdGhhdCBpc24ndCBjYWxsZWQuIEknbSB2ZXJpZnlpbmcgdGhlIGNhbGwgZ3JhcGg6XG5cbiogICBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBiZWNhdXNlIGl0IGlzIGluIGBhcm1fZXhpdF9oYW5kbGVyc2AgZm9yIGBFU1JfRUx4X0VDX0RBQlRfQ1VSYCwgdGhpcyBpcyBncmVhdC5cbiogICBga3ZtX3dhbGtfbmVzdGVkX3MyYCBpcyByZWFjaGVkIHZpYSBga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydGAgYW5kIGBfX2t2bV9hdF9zMTJgLCB0aGF0IGlzIGdvb2QuXG4qICAgYGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlYCBpcyBjYWxsZWQgZnJvbSBgczJfbW11X3VubWFwX2lwYWAsIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGZyb20gYGhhbmRsZV9yaXBhczJlMWlzYCBhbmQgYGhhbmRsZV9pcGFzMmUxaXNgLCB0aGlzIGlzIGFsc28gc29saWQuXG4qICAgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYCBpcyByZWFjaGVkIHZpYSBga3ZtX2FyY2hfdmNwdV9ydW5fcGlkX2NoYW5nZWAsIGdvb2QgdG8ga25vdy5cblxuSSdtIGFsc28gc2VlaW5nIG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9ucyBsaWtlIGBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsYCwgYGt2bV92Y3B1X2xvYWRfaHdfbW11YCwgYW5kIGBrdm1fdmNwdV9wdXRfaHdfbW11YC4gSG93ZXZlciwgYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGxgIHNlZW1zIGdlbmVyaWMuIEknbGwgZXhhbWluZSB0aGUgTU1VIGZ1bmN0aW9ucyBhcyB3ZWxsLCBmb3IgdGhvcm91Z2huZXNzLCBidXQgbXkgY29yZSBmb2N1cyB3aWxsIGJlIHRoZSBpbml0aWFsIGZvdXIgdGhhdCBJIGlkZW50aWZpZWQuIFNvLCBJIHdpbGwgY2hlY2sgYGt2bV92Y3B1X3B1dF9od19tbXVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc3NiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMDowNTowMy4yNTEyMjA2NTdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjMwNDQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdmNwdV9wdXRfaHdfbW11XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9hcm0uYz03NDY9dm9pZCBrdm1fYXJjaF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy03NjAtXFx0aWYgKHZjcHVfaGFzX252KHZjcHUpKVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjc2MTpcXHRcXHRrdm1fdmNwdV9wdXRfaHdfbW11KHZjcHUpO1xcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTc2Mi1cXHRrdm1fYXJtX3ZtaWRfY2xlYXJfYWN0aXZlKCk7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz05MTM9c3RhdGljIHZvaWQgdGhpc19jcHVfcmVzZXRfdm5jcl9maXhtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtOTM0LVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjkzNTp2b2lkIGt2bV92Y3B1X3B1dF9od19tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTkzNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjA1OjAzLjUxMzU0MTU4OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTQ3MjAzODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gdGhpcyBpcyBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfdmNwdV9wdXRgLCByaWdodD8gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhlIHBhdGNoIGl0c2VsZiBpcyBmdW5jdGlvbmFsIGFuZCwgaW1wb3J0YW50bHksIGl0J3MgbWVzc2luZyB3aXRoIGNvcmUgS1ZNIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYy4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluaywgXCJXb3J0aEZ1enppbmcgPSB0cnVlXCIuIEFsd2F5cyBhIGdvb2Qgc2lnbi5cblxuTm93LCBsZXQncyBzZWUsIHdoYXQgYXJlIHRoZSBrZXkgYXJlYXMgaXQncyB0b3VjaGluZz8gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZTogYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAsIGBrdm1fd2Fsa19uZXN0ZWRfczJgLCBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgLCBga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJgLCBga3ZtX3ZjcHVfcHV0X2h3X21tdWAsIGFuZCBga3ZtX3ZjcHVfbG9hZF9od19tbXVgLiBWTkNSIFRMQnMsIG5lc3RlZCBTMiB3YWxrcywgVExCIGludmFsaWRhdGlvbi4uLiB5ZXAsIHRoaXMgaXMgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSB2aXJ0dWFsaXphdGlvbiBzdGFjaywgcG90ZW50aWFsbHkgYWNjZXNzaWJsZSBkdXJpbmcgZ3Vlc3QgZXhlY3V0aW9uLiBNeSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmc7IHBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcyBhbmQgdnVsbmVyYWJpbGl0aWVzIGluIHRoaXMgYXJlYS5cblxuVGhlIGBDb25maWdzYCBzZWN0aW9uIGNvbmZpcm1zIGl0J3MgS1ZNLCBzbyB3ZSdyZSBvbiB0aGUgcmlnaHQgdHJhY2suIE15IGltbWVkaWF0ZSByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIEtWTSBBUk02NCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgVk5DUiBUTEJzLCBuZXN0ZWQgUzIgd2Fsa3MsIGFuZCBUTEIgaW52YWxpZGF0aW9uIHJhbmdlcywgYWxsIG9mIHdoaWNoIGFyZSAqY3JpdGljYWwqIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIGFuZCBlYXNpbHkgcmVhY2hlZCBmcm9tIGd1ZXN0IGV4ZWN1dGlvbi5cblxuSSB0aGluayBiZWZvcmUgSSBkaXZlIGFueSBkZWVwZXIsIEknbSBnb2luZyB0byB2ZXJpZnkgYGt2bV92Y3B1X2xvYWRfaHdfbW11YC4gSXQncyBhIGdvb2Qgc3ltYm9sIHRvIHN0YXJ0IHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Mzk3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjA1OjA5LjY2MDc0ODQ4NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY2ODY0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3ZjcHVfbG9hZF9od19tbXVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL2FybS5jPTY2ND12b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy02NzItXFx0aWYgKHZjcHVfaGFzX252KHZjcHUpKVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjY3MzpcXHRcXHRrdm1fdmNwdV9sb2FkX2h3X21tdSh2Y3B1KTtcXG5hcmNoL2FybTY0L2t2bS9hcm0uYy02NzQtXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz04NzA9dm9pZCBrdm1faW5pdF9uZXN0ZWRfczJfbW11KHN0cnVjdCBrdm1fczJfbW11ICptbXUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy04NzctXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6ODc4OnZvaWQga3ZtX3ZjcHVfbG9hZF9od19tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTg3OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjA1OjA5LjcxNzQzODcwMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njc1MjUyNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBpZiB0aGV5IGFyZSBteSBvd246XG5cbioqTG9hZGluZyB0aGUgVmlydHVhbCBDUFUgU3RhdGUqKlxuXG5SaWdodCwgc28gSSBzZWUgdGhpcyBvcmlnaW5hdGVzIHdpdGhpbiBga3ZtX2FyY2hfdmNwdV9sb2FkYC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludC4gSSBuZWVkIHRvIHJlcG9ydCBteSBmaW5kaW5ncywgYW5kIEknbGwgbGV2ZXJhZ2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBmb3IgdGhhdC4gSXQgc2VlbXMgdGhlIG1vc3QgZWZmaWNpZW50IGFuZCBzdGFuZGFyZCB3YXkgdG8gY29tbXVuaWNhdGUgdGhlIHN0YXRlIG9mIHRoZSBsb2FkZWQgdkNQVSBpcyB2aWEgdGhpcyByZXBvcnRpbmcgdG9vbC4gSSdsbCBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjY1LCJPdXRwdXRUb2tlbnMiOjE2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjA1OjE0LjM5MjY5NDEyOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTg3MDAxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2hhbmRsZV92bmNyX2Fib3J0XCIsXG4gICAgXCJrdm1fd2Fsa19uZXN0ZWRfczJcIixcbiAgICBcImNvbXB1dGVfdGxiX2ludmFsX3JhbmdlXCIsXG4gICAgXCJrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYlwiLFxuICAgIFwia3ZtX3ZjcHVfcHV0X2h3X21tdVwiLFxuICAgIFwia3ZtX3ZjcHVfbG9hZF9od19tbXVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gQVJNNjQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIFZOQ1IgVExCcywgbmVzdGVkIFMyIHdhbGtzLCBhbmQgVExCIGludmFsaWRhdGlvbiByYW5nZXMuIFRoZXNlIGFyZSBjb3JlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IGV4ZWN1dGlvbiBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1faGFuZGxlX3ZuY3JfYWJvcnRcIixcbiAgICBcImt2bV93YWxrX25lc3RlZF9zMlwiLFxuICAgIFwiY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VcIixcbiAgICBcImt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiXCIsXG4gICAgXCJrdm1fdmNwdV9wdXRfaHdfbW11XCIsXG4gICAgXCJrdm1fdmNwdV9sb2FkX2h3X21tdVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBBUk02NCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgaGFuZGxpbmcgb2YgVk5DUiBUTEJzLCBuZXN0ZWQgUzIgd2Fsa3MsIGFuZCBUTEIgaW52YWxpZGF0aW9uIHJhbmdlcy4gVGhlc2UgYXJlIGNvcmUgdmlydHVhbGl6YXRpb24gZmVhdHVyZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgZXhlY3V0aW9uIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5f7bc[1] Phase: Succeeded StartedAt: 2026-08-06 10:05:25 +0000 UTC FinishedAt: 2026-08-06 10:05:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7bc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-06 10:05:25 +0000 UTC FinishedAt: 2026-08-06 10:05:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7bc[2] Phase: Succeeded StartedAt: 2026-08-06 10:05:25 +0000 UTC FinishedAt: 2026-08-06 10:45:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-06 10:05:25 +0000 UTC FinishedAt: 2026-08-06 10:45:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-06 10:05:25 +0000 UTC FinishedAt: 2026-08-06 10:05:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-06 10:05:25 +0000 UTC FinishedAt: 2026-08-06 10:05:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflow5f7bc/series-workflow5f7bc-convert-artifact-238493574/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-06 10:05:35 +0000 UTC FinishedAt: 2026-08-06 10:22:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-06 10:05:35 +0000 UTC FinishedAt: 2026-08-06 10:22:06 +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:*7f7370c8-38cb-40b4-b88f-2a5727004053,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-workflow5f7bc/series-workflow5f7bc-convert-artifact-238493574/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": "3e35e3d3-28b0-4899-8f7e-55f001b779be", "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-workflow5f7bc/series-workflow5f7bc-build-action-1316512540/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-06 10:05:35 +0000 UTC FinishedAt: 2026-08-06 10:21:56 +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:*7f7370c8-38cb-40b4-b88f-2a5727004053,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-workflow5f7bc/series-workflow5f7bc-convert-artifact-238493574/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": "3e35e3d3-28b0-4899-8f7e-55f001b779be", "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-workflow5f7bc/series-workflow5f7bc-build-action-1316512540/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-06 10:22:06 +0000 UTC FinishedAt: 2026-08-06 10:22:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-06 10:22:06 +0000 UTC FinishedAt: 2026-08-06 10:22:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-06 10:22:06 +0000 UTC FinishedAt: 2026-08-06 10:22:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-06 10:22:06 +0000 UTC FinishedAt: 2026-08-06 10:22:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflow5f7bc/series-workflow5f7bc-convert-artifact-4215589081/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-06 10:22:16 +0000 UTC FinishedAt: 2026-08-06 10:24:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-06 10:22:16 +0000 UTC FinishedAt: 2026-08-06 10:23:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3e35e3d3-28b0-4899-8f7e-55f001b779be,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-workflow5f7bc/series-workflow5f7bc-build-action-1316512540/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-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-06 10:24:08 +0000 UTC FinishedAt: 2026-08-06 10:24:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-06 10:24:08 +0000 UTC FinishedAt: 2026-08-06 10:24:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-06 10:24:08 +0000 UTC FinishedAt: 2026-08-06 10:41:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-06 10:24:08 +0000 UTC FinishedAt: 2026-08-06 10:41:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7f7370c8-38cb-40b4-b88f-2a5727004053,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-workflow5f7bc/series-workflow5f7bc-convert-artifact-4215589081/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": "cb1f24f2-0d79-456c-a4b0-c4ef76be5912", "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-workflow5f7bc/series-workflow5f7bc-build-action-2283531573/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-06 10:24:08 +0000 UTC FinishedAt: 2026-08-06 10:41:47 +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:*7f7370c8-38cb-40b4-b88f-2a5727004053,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-workflow5f7bc/series-workflow5f7bc-convert-artifact-4215589081/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": "cb1f24f2-0d79-456c-a4b0-c4ef76be5912", "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-workflow5f7bc/series-workflow5f7bc-build-action-2283531573/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-06 10:41:57 +0000 UTC FinishedAt: 2026-08-06 10:41:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-06 10:41:57 +0000 UTC FinishedAt: 2026-08-06 10:41:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-06 10:41:57 +0000 UTC FinishedAt: 2026-08-06 10:44:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-06 10:41:57 +0000 UTC FinishedAt: 2026-08-06 10:43:55 +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:*cb1f24f2-0d79-456c-a4b0-c4ef76be5912,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-workflow5f7bc/series-workflow5f7bc-build-action-2283531573/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-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-06 10:44:05 +0000 UTC FinishedAt: 2026-08-06 10:45:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-06 10:44:05 +0000 UTC FinishedAt: 2026-08-06 10:45:24 +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_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*3e35e3d3-28b0-4899-8f7e-55f001b779be,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cb1f24f2-0d79-456c-a4b0-c4ef76be5912,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-workflow5f7bc/series-workflow5f7bc-build-action-1316512540/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-workflow5f7bc/series-workflow5f7bc-build-action-2283531573/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-06 10:44:05 +0000 UTC FinishedAt: 2026-08-06 10:44:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-06 10:44:05 +0000 UTC FinishedAt: 2026-08-06 10:44:10 +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_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5f7bc/series-workflow5f7bc-convert-artifact-4184255438/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-06 10:44:05 +0000 UTC FinishedAt: 2026-08-06 10:44:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-06 10:44:05 +0000 UTC FinishedAt: 2026-08-06 10:44:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-06 10:44:05 +0000 UTC FinishedAt: 2026-08-06 10:44:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-06 10:44:15 +0000 UTC FinishedAt: 2026-08-06 10:45:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f7bc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_handle_vncr_abort","kvm_walk_nested_s2","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb","kvm_vcpu_put_hw_mmu","kvm_vcpu_load_hw_mmu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"5d8dbdd5-d6ba-4de1-9461-68af37a75832","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-06 10:44:15 +0000 UTC FinishedAt: 2026-08-06 10:45:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3e35e3d3-28b0-4899-8f7e-55f001b779be,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cb1f24f2-0d79-456c-a4b0-c4ef76be5912,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-workflow5f7bc/series-workflow5f7bc-build-action-1316512540/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-workflow5f7bc/series-workflow5f7bc-build-action-2283531573/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-workflow5f7bc/series-workflow5f7bc-convert-artifact-4184255438/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,}