Name: series-workflowbpwc6 Phase: Succeeded StartedAt: 2026-07-13 07:37:17 +0000 UTC FinishedAt: 2026-07-13 09:25:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpwc6[0] Phase: Succeeded StartedAt: 2026-07-13 07:37:17 +0000 UTC FinishedAt: 2026-07-13 07:57:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpwc6[0].run-triage Phase: Succeeded StartedAt: 2026-07-13 07:37:17 +0000 UTC FinishedAt: 2026-07-13 07:57:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "adea84ee6cdea611146c4251d3c1616f5a09feca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "adea84ee6cdea611146c4251d3c1616f5a09feca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "083a4c86-6101-4522-ba18-cb9ccffbbf92" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "pfnmap_mapping_size", "fault_supports_gstage_huge_mapping", "kvm_riscv_mmu_map" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEzIDA3OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Bmbm1hcF9tYXBwaW5nX3NpemUmIzM0OywKICAgICYjMzQ7ZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfbW11X21hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViBLVk0gTU1VIHRvIHN1cHBvcnQgaHVnZSBtYXBwaW5ncyBmb3IgVk1fUEZOTUFQIGZhdWx0cyAoZS5nLiwgaG9zdCBkZXZpY2UgTU1JTykuIEl0IGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYHBmbm1hcF9tYXBwaW5nX3NpemVgIGFuZCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBpbiBga3ZtX3Jpc2N2X21tdV9tYXBgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA3OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTAwY2JjMmFjNWViMjYyNjUzMDJhN2ZjYmI3Mzc2ZWE3NzcxYmE5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDA3OjU2OjAwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcbmluZGV4IDJkM2RlZjAyNDI3MGMwLi41M2ZiMzRkNGI3NmQwOSAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuQEAgLTE2LDYgJiM0MzsxNiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbmFjbC5oXHUwMDNlXG4gXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3RyYWNlLmhcJiMzNDtcbiYjNDM7XG4gc3RhdGljIHZvaWQgbW11X3dwX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBpbnQgc2xvdClcbiB7XG4gXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cyA9IGt2bV9tZW1zbG90cyhrdm0pO1xuQEAgLTI4Niw3ICYjNDM7Mjg4LDcgQEAgYm9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuIH1cbiBcbiBzdGF0aWMgYm9vbCBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4tXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGh2YSlcbiYjNDM7XHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGh2YSwgdW5zaWduZWQgbG9uZyBtYXBfc2l6ZSlcbiB7XG4gXHRodmFfdCB1YWRkcl9zdGFydCwgdWFkZHJfZW5kO1xuIFx0Z3BhX3QgZ3BhX3N0YXJ0O1xuQEAgLTMyMSw3ICYjNDM7MzIzLDcgQEAgc3RhdGljIGJvb2wgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuIFx0ICogICBlIC1cdTAwM2UgZ1xuIFx0ICogICBmIC1cdTAwM2UgaFxuIFx0ICovXG4tXHRpZiAoKGdwYV9zdGFydCBcdTAwMjYgKFBNRF9TSVpFIC0gMSkpICE9ICh1YWRkcl9zdGFydCBcdTAwMjYgKFBNRF9TSVpFIC0gMSkpKVxuJiM0MztcdGlmICgoZ3BhX3N0YXJ0IFx1MDAyNiAobWFwX3NpemUgLSAxKSkgIT0gKHVhZGRyX3N0YXJ0IFx1MDAyNiAobWFwX3NpemUgLSAxKSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qXG5AQCAtMzM2LDcgJiM0MzszMzgsNyBAQCBzdGF0aWMgYm9vbCBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4gXHQgKiB1c2Vyc3BhY2VfYWRkciBvciB0aGUgYmFzZV9nZm4sIGFzIGJvdGggYXJlIGVxdWFsbHkgYWxpZ25lZCAocGVyXG4gXHQgKiB0aGUgY2hlY2sgYWJvdmUpIGFuZCBlcXVhbGx5IHNpemVkLlxuIFx0ICovXG4tXHRyZXR1cm4gKGh2YSBcdTAwM2U9IEFMSUdOKHVhZGRyX3N0YXJ0LCBQTURfU0laRSkpIFx1MDAyNlx1MDAyNiAoaHZhIFx1MDAzYyBBTElHTl9ET1dOKHVhZGRyX2VuZCwgUE1EX1NJWkUpKTtcbiYjNDM7XHRyZXR1cm4gKGh2YSBcdTAwM2U9IEFMSUdOKHVhZGRyX3N0YXJ0LCBtYXBfc2l6ZSkpIFx1MDAyNlx1MDAyNiAoaHZhIFx1MDAzYyBBTElHTl9ET1dOKHVhZGRyX2VuZCwgbWFwX3NpemUpKTtcbiB9XG4gXG4gc3RhdGljIGludCBnZXRfaHZhX21hcHBpbmdfc2l6ZShzdHJ1Y3Qga3ZtICprdm0sXG5AQCAtNDA0LDcgJiM0Mzs0MDYsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3Qoc3RydWN0IGt2bSAqa3ZtLFxuIFx0ICogc3VyZSB0aGF0IHRoZSBIVkEgYW5kIEdQQSBhcmUgc3VmZmljaWVudGx5IGFsaWduZWQgYW5kIHRoYXQgdGhlXG4gXHQgKiBibG9jayBtYXAgaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgbWVtc2xvdC5cbiBcdCAqL1xuLVx0aWYgKGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcobWVtc2xvdCwgaHZhKSkge1xuJiM0MztcdGlmIChmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKG1lbXNsb3QsIGh2YSwgUE1EX1NJWkUpKSB7XG4gXHRcdGludCBzejtcbiBcbiBcdFx0c3ogPSBnZXRfaHZhX21hcHBpbmdfc2l6ZShrdm0sIGh2YSk7XG5AQCAtNDIxLDYgJiM0Mzs0MjMsMzEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KHN0cnVjdCBrdm0gKmt2bSxcbiBcdHJldHVybiBQQUdFX1NJWkU7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBEZXRlcm1pbmUgdGhlIEctc3RhZ2UgbWFwcGluZyBzaXplIGZvciBhIFZNX1BGTk1BUCAoZS5nLiBob3N0IGRldmljZVxuJiM0MzsgKiBNTUlPKSBmYXVsdC4gIFVubGlrZSBhcm02NCYjMzk7cyBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiwgd2UgbmV2ZXIgZGVyaXZlIHRoZVxuJiM0MzsgKiBob3N0IHBoeXNpY2FsIGFkZHJlc3MgZnJvbSB2bWEtXHUwMDNldm1fcGdvZmYgKHdoaWNoIGlzIHVucmVsaWFibGUgc2luY2UgdGhlXG4mIzQzOyAqIFZGSU8gdW5tYXBfbWFwcGluZ19yYW5nZSgpIGNoYW5nZXMpLiAgSW5zdGVhZCB3ZSB3YWxrIHRoZSBob3N0IHBhZ2UgdGFibGVzXG4mIzQzOyAqIHZpYSBnZXRfaHZhX21hcHBpbmdfc2l6ZSgpOiBpZiB0aGUgaG9zdCBpdHNlbGYgaW5zdGFsbGVkIGEgbGVhZiBibG9jayBmb3JcbiYjNDM7ICogdGhpcyBhZGRyZXNzLCBwaHlzaWNhbCBjb250aWd1aXR5IHdpdGhpbiB0aGF0IGJsb2NrIGlzIGFscmVhZHkgZ3VhcmFudGVlZFxuJiM0MzsgKiBieSB0aGUgaG9zdCBtbS4gIFRoZSBtZW1vcnkgdHlwZSBzdGF5cyBjb3JyZWN0IGJlY2F1c2UgUklTQy1WIGRlcml2ZXMgaXRcbiYjNDM7ICogZnJvbSB0aGUgcGh5c2ljYWwgYWRkcmVzcyYjMzk7IFBNQSwgaW5kZXBlbmRlbnQgb2YgdGhlIEctc3RhZ2UgUFRFIHNpemUuXG4mIzQzOyAqXG4mIzQzOyAqIEJlIGNvbnNlcnZhdGl2ZSBmb3Igbm93IGFuZCBvbmx5IHByb21vdGUgdG8gUE1ELXNpemVkIGJsb2NrczsgUFVELXNpemVkXG4mIzQzOyAqIGRldmljZSBibG9ja3MgYXJlIGxlZnQgYXMgZnV0dXJlIHdvcmsuICBGYWxsIGJhY2sgdG8gUEFHRV9TSVpFIHdoZW5ldmVyXG4mIzQzOyAqIGNvbnRpZ3VpdHkgb3IgSFZBL0dQQSBhbGlnbm1lbnQgY2Fubm90IGJlIHByb3Zlbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHBmbm1hcF9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4mIzQzO1x0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBodmEpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZ2V0X2h2YV9tYXBwaW5nX3NpemUoa3ZtLCBodmEpIFx1MDAzZT0gUE1EX1NJWkUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcobWVtc2xvdCwgaHZhLCBQTURfU0laRSkpXG4mIzQzO1x0XHRyZXR1cm4gUE1EX1NJWkU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBQQUdFX1NJWkU7XG4mIzQzO31cbiYjNDM7XG4gaW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbiBcdFx0ICAgICAgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgYm9vbCBpc193cml0ZSxcbiBcdFx0ICAgICAgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyAqb3V0X21hcClcbkBAIC00NjUsMTEgJiM0Mzs0OTIsMTQgQEAgaW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbiBcdGVsc2VcbiBcdFx0dm1hX3BhZ2VzaGlmdCA9IFBBR0VfU0hJRlQ7XG4gXHR2bWFfcGFnZXNpemUgPSAxVUxMIFx1MDAzY1x1MDAzYyB2bWFfcGFnZXNoaWZ0O1xuLVx0aWYgKGxvZ2dpbmcgfHwgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUEZOTUFQKSlcbiYjNDM7XG4mIzQzO1x0aWYgKGxvZ2dpbmcpXG4gXHRcdHZtYV9wYWdlc2l6ZSA9IFBBR0VfU0laRTtcbiYjNDM7XHRlbHNlIGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1BGTk1BUClcbiYjNDM7XHRcdHZtYV9wYWdlc2l6ZSA9IHBmbm1hcF9tYXBwaW5nX3NpemUoa3ZtLCBtZW1zbG90LCBodmEpO1xuIFxuIFx0aWYgKHZtYV9wYWdlc2l6ZSA9PSBQTURfU0laRSB8fCB2bWFfcGFnZXNpemUgPT0gUFVEX1NJWkUpXG4tXHRcdGdmbiA9IChncGEgXHUwMDI2IGh1Z2VfcGFnZV9tYXNrKGhzdGF0ZV92bWEodm1hKSkpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdFx0Z2ZuID0gKGdwYSBcdTAwMjYgfih2bWFfcGFnZXNpemUgLSAxKSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXG4gXHQvKlxuIFx0ICogUmVhZCBtbXVfaW52YWxpZGF0ZV9zZXEgc28gdGhhdCBLVk0gY2FuIGRldGVjdCBpZiB0aGUgcmVzdWx0cyBvZlxuQEAgLTUxNSw2ICYjNDM7NTQ1LDkgQEAgaW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbiBcdGlmICghbG9nZ2luZyBcdTAwMjZcdTAwMjYgKHZtYV9wYWdlc2l6ZSA9PSBQQUdFX1NJWkUpKVxuIFx0XHR2bWFfcGFnZXNpemUgPSB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3Qoa3ZtLCBtZW1zbG90LCBodmEsIFx1MDAyNmhmbiwgXHUwMDI2Z3BhKTtcbiBcbiYjNDM7XHR0cmFjZV9rdm1fbW11X21hcChncGEsIGh2YSwgaGZuLCB2bWFfcGFnZXNpemUsXG4mIzQzO1x0XHRcdCAgISEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9QRk5NQVApKTtcbiYjNDM7XG4gXHRpZiAod3JpdGFibGUpIHtcbiBcdFx0bWFya19wYWdlX2RpcnR5X2luX3Nsb3Qoa3ZtLCBtZW1zbG90LCBnZm4pO1xuIFx0XHRyZXQgPSBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKFx1MDAyNmdzdGFnZSwgcGNhY2hlLCBncGEsIGhmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS90cmFjZS5oIGIvYXJjaC9yaXNjdi9rdm0vdHJhY2UuaFxuaW5kZXggM2Q1NDE3NWQ4MDVjYmMuLmRiMmQyOGYxZDcxNDgzIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdHJhY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vdHJhY2UuaFxuQEAgLTU2LDYgJiM0Mzs1NiwzNSBAQCBUUkFDRV9FVkVOVChrdm1fZXhpdCxcbiBcdFx0X19lbnRyeS1cdTAwM2VodGluc3QpXG4gKTtcbiBcbiYjNDM7VFJBQ0VfRVZFTlQoa3ZtX21tdV9tYXAsXG4mIzQzO1x0VFBfUFJPVE8odW5zaWduZWQgbG9uZyBncGEsIHVuc2lnbmVkIGxvbmcgaHZhLCB1bnNpZ25lZCBsb25nIGhmbixcbiYjNDM7XHRcdCB1bnNpZ25lZCBsb25nIG1hcF9zaXplLCBib29sIGlzX3Bmbm1hcCksXG4mIzQzO1x0VFBfQVJHUyhncGEsIGh2YSwgaGZuLCBtYXBfc2l6ZSwgaXNfcGZubWFwKSxcbiYjNDM7XG4mIzQzO1x0VFBfU1RSVUNUX19lbnRyeShcbiYjNDM7XHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgZ3BhKVxuJiM0MztcdFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBodmEpXG4mIzQzO1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGhmbilcbiYjNDM7XHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbWFwX3NpemUpXG4mIzQzO1x0XHRfX2ZpZWxkKGJvb2wsIGlzX3Bmbm1hcClcbiYjNDM7XHQpLFxuJiM0MztcbiYjNDM7XHRUUF9mYXN0X2Fzc2lnbihcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlZ3BhXHRcdD0gZ3BhO1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VodmFcdFx0PSBodmE7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWhmblx0XHQ9IGhmbjtcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbWFwX3NpemVcdD0gbWFwX3NpemU7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWlzX3Bmbm1hcFx0PSBpc19wZm5tYXA7XG4mIzQzO1x0KSxcbiYjNDM7XG4mIzQzO1x0VFBfcHJpbnRrKFwmIzM0O0dQQToweCVseCwgSFZBOjB4JWx4LCBIRk46MHglbHgsIHNpemU6JWx1S0IsIHBmbm1hcDolZFwmIzM0OyxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlZ3BhLFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VodmEsXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWhmbixcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbWFwX3NpemUgXHUwMDNlXHUwMDNlIDEwLFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2Vpc19wZm5tYXApXG4mIzQzOyk7XG4mIzQzO1xuICNlbmRpZiAvKiBfVFJBQ0VfUlNJQ1ZfS1ZNX0ggKi9cbiBcbiAjdW5kZWYgVFJBQ0VfSU5DTFVERV9QQVRIXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGZubWFwX21hcHBpbmdfc2l6ZSYjMzQ7LAogICAgJiMzNDtmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nJiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9tbXVfbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgUklTQy1WIEtWTSBNTVUgdG8gc3VwcG9ydCBodWdlIG1hcHBpbmdzIGZvciBWTV9QRk5NQVAgZmF1bHRzIChlLmcuLCBob3N0IGRldmljZSBNTUlPKS4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgcGZubWFwX21hcHBpbmdfc2l6ZWAgYW5kIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nIGxvZ2ljIGluIGBrdm1fcmlzY3ZfbW11X21hcGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgY29yZSBLVk0gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEwMGNiYzJhYzVlYjI2MjY1MzAyYTdmY2JiNzM3NmVhNzc3MWJhOWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAxMyAwNzo1NjowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jIGIvYXJjaC9yaXNjdi9rdm0vbW11LmMKaW5kZXggMmQzZGVmMDI0MjcwYzAuLjUzZmIzNGQ0Yjc2ZDA5IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuYwpAQCAtMTYsNiAmIzQzOzE2LDggQEAKICNpbmNsdWRlICZsdDthc20va3ZtX21tdS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm1fbmFjbC5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJiMzNDt0cmFjZS5oJiMzNDsKJiM0MzsKIHN0YXRpYyB2b2lkIG1tdV93cF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IHNsb3QpCiB7CiAJc3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHMgPSBrdm1fbWVtc2xvdHMoa3ZtKTsKQEAgLTI4Niw3ICYjNDM7Mjg4LDcgQEAgYm9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKQogfQogCiBzdGF0aWMgYm9vbCBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGh2YSkKJiM0MzsJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGh2YSwgdW5zaWduZWQgbG9uZyBtYXBfc2l6ZSkKIHsKIAlodmFfdCB1YWRkcl9zdGFydCwgdWFkZHJfZW5kOwogCWdwYV90IGdwYV9zdGFydDsKQEAgLTMyMSw3ICYjNDM7MzIzLDcgQEAgc3RhdGljIGJvb2wgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LAogCSAqICAgZSAtJmd0OyBnCiAJICogICBmIC0mZ3Q7IGgKIAkgKi8KLQlpZiAoKGdwYV9zdGFydCAmYW1wOyAoUE1EX1NJWkUgLSAxKSkgIT0gKHVhZGRyX3N0YXJ0ICZhbXA7IChQTURfU0laRSAtIDEpKSkKJiM0MzsJaWYgKChncGFfc3RhcnQgJmFtcDsgKG1hcF9zaXplIC0gMSkpICE9ICh1YWRkcl9zdGFydCAmYW1wOyAobWFwX3NpemUgLSAxKSkpCiAJCXJldHVybiBmYWxzZTsKIAogCS8qCkBAIC0zMzYsNyAmIzQzOzMzOCw3IEBAIHN0YXRpYyBib29sIGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCwKIAkgKiB1c2Vyc3BhY2VfYWRkciBvciB0aGUgYmFzZV9nZm4sIGFzIGJvdGggYXJlIGVxdWFsbHkgYWxpZ25lZCAocGVyCiAJICogdGhlIGNoZWNrIGFib3ZlKSBhbmQgZXF1YWxseSBzaXplZC4KIAkgKi8KLQlyZXR1cm4gKGh2YSAmZ3Q7PSBBTElHTih1YWRkcl9zdGFydCwgUE1EX1NJWkUpKSAmYW1wOyZhbXA7IChodmEgJmx0OyBBTElHTl9ET1dOKHVhZGRyX2VuZCwgUE1EX1NJWkUpKTsKJiM0MzsJcmV0dXJuIChodmEgJmd0Oz0gQUxJR04odWFkZHJfc3RhcnQsIG1hcF9zaXplKSkgJmFtcDsmYW1wOyAoaHZhICZsdDsgQUxJR05fRE9XTih1YWRkcl9lbmQsIG1hcF9zaXplKSk7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X2h2YV9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLApAQCAtNDA0LDcgJiM0Mzs0MDYsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3Qoc3RydWN0IGt2bSAqa3ZtLAogCSAqIHN1cmUgdGhhdCB0aGUgSFZBIGFuZCBHUEEgYXJlIHN1ZmZpY2llbnRseSBhbGlnbmVkIGFuZCB0aGF0IHRoZQogCSAqIGJsb2NrIG1hcCBpcyBjb250YWluZWQgd2l0aGluIHRoZSBtZW1zbG90LgogCSAqLwotCWlmIChmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKG1lbXNsb3QsIGh2YSkpIHsKJiM0MzsJaWYgKGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcobWVtc2xvdCwgaHZhLCBQTURfU0laRSkpIHsKIAkJaW50IHN6OwogCiAJCXN6ID0gZ2V0X2h2YV9tYXBwaW5nX3NpemUoa3ZtLCBodmEpOwpAQCAtNDIxLDYgJiM0Mzs0MjMsMzEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KHN0cnVjdCBrdm0gKmt2bSwKIAlyZXR1cm4gUEFHRV9TSVpFOwogfQogCiYjNDM7LyoKJiM0MzsgKiBEZXRlcm1pbmUgdGhlIEctc3RhZ2UgbWFwcGluZyBzaXplIGZvciBhIFZNX1BGTk1BUCAoZS5nLiBob3N0IGRldmljZQomIzQzOyAqIE1NSU8pIGZhdWx0LiAgVW5saWtlIGFybTY0JiMzOTtzIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uLCB3ZSBuZXZlciBkZXJpdmUgdGhlCiYjNDM7ICogaG9zdCBwaHlzaWNhbCBhZGRyZXNzIGZyb20gdm1hLSZndDt2bV9wZ29mZiAod2hpY2ggaXMgdW5yZWxpYWJsZSBzaW5jZSB0aGUKJiM0MzsgKiBWRklPIHVubWFwX21hcHBpbmdfcmFuZ2UoKSBjaGFuZ2VzKS4gIEluc3RlYWQgd2Ugd2FsayB0aGUgaG9zdCBwYWdlIHRhYmxlcwomIzQzOyAqIHZpYSBnZXRfaHZhX21hcHBpbmdfc2l6ZSgpOiBpZiB0aGUgaG9zdCBpdHNlbGYgaW5zdGFsbGVkIGEgbGVhZiBibG9jayBmb3IKJiM0MzsgKiB0aGlzIGFkZHJlc3MsIHBoeXNpY2FsIGNvbnRpZ3VpdHkgd2l0aGluIHRoYXQgYmxvY2sgaXMgYWxyZWFkeSBndWFyYW50ZWVkCiYjNDM7ICogYnkgdGhlIGhvc3QgbW0uICBUaGUgbWVtb3J5IHR5cGUgc3RheXMgY29ycmVjdCBiZWNhdXNlIFJJU0MtViBkZXJpdmVzIGl0CiYjNDM7ICogZnJvbSB0aGUgcGh5c2ljYWwgYWRkcmVzcyYjMzk7IFBNQSwgaW5kZXBlbmRlbnQgb2YgdGhlIEctc3RhZ2UgUFRFIHNpemUuCiYjNDM7ICoKJiM0MzsgKiBCZSBjb25zZXJ2YXRpdmUgZm9yIG5vdyBhbmQgb25seSBwcm9tb3RlIHRvIFBNRC1zaXplZCBibG9ja3M7IFBVRC1zaXplZAomIzQzOyAqIGRldmljZSBibG9ja3MgYXJlIGxlZnQgYXMgZnV0dXJlIHdvcmsuICBGYWxsIGJhY2sgdG8gUEFHRV9TSVpFIHdoZW5ldmVyCiYjNDM7ICogY29udGlndWl0eSBvciBIVkEvR1BBIGFsaWdubWVudCBjYW5ub3QgYmUgcHJvdmVuLgomIzQzOyAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHBmbm1hcF9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLAomIzQzOwkJCQkJIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsCiYjNDM7CQkJCQkgdW5zaWduZWQgbG9uZyBodmEpCiYjNDM7ewomIzQzOwlpZiAoZ2V0X2h2YV9tYXBwaW5nX3NpemUoa3ZtLCBodmEpICZndDs9IFBNRF9TSVpFICZhbXA7JmFtcDsKJiM0MzsJICAgIGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcobWVtc2xvdCwgaHZhLCBQTURfU0laRSkpCiYjNDM7CQlyZXR1cm4gUE1EX1NJWkU7CiYjNDM7CiYjNDM7CXJldHVybiBQQUdFX1NJWkU7CiYjNDM7fQomIzQzOwogaW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCwKIAkJICAgICAgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgYm9vbCBpc193cml0ZSwKIAkJICAgICAgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyAqb3V0X21hcCkKQEAgLTQ2NSwxMSAmIzQzOzQ5MiwxNCBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LAogCWVsc2UKIAkJdm1hX3BhZ2VzaGlmdCA9IFBBR0VfU0hJRlQ7CiAJdm1hX3BhZ2VzaXplID0gMVVMTCAmbHQ7Jmx0OyB2bWFfcGFnZXNoaWZ0OwotCWlmIChsb2dnaW5nIHx8ICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1BGTk1BUCkpCiYjNDM7CiYjNDM7CWlmIChsb2dnaW5nKQogCQl2bWFfcGFnZXNpemUgPSBQQUdFX1NJWkU7CiYjNDM7CWVsc2UgaWYgKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fUEZOTUFQKQomIzQzOwkJdm1hX3BhZ2VzaXplID0gcGZubWFwX21hcHBpbmdfc2l6ZShrdm0sIG1lbXNsb3QsIGh2YSk7CiAKIAlpZiAodm1hX3BhZ2VzaXplID09IFBNRF9TSVpFIHx8IHZtYV9wYWdlc2l6ZSA9PSBQVURfU0laRSkKLQkJZ2ZuID0gKGdwYSAmYW1wOyBodWdlX3BhZ2VfbWFzayhoc3RhdGVfdm1hKHZtYSkpKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwkJZ2ZuID0gKGdwYSAmYW1wOyB+KHZtYV9wYWdlc2l6ZSAtIDEpKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwogCiAJLyoKIAkgKiBSZWFkIG1tdV9pbnZhbGlkYXRlX3NlcSBzbyB0aGF0IEtWTSBjYW4gZGV0ZWN0IGlmIHRoZSByZXN1bHRzIG9mCkBAIC01MTUsNiAmIzQzOzU0NSw5IEBAIGludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsCiAJaWYgKCFsb2dnaW5nICZhbXA7JmFtcDsgKHZtYV9wYWdlc2l6ZSA9PSBQQUdFX1NJWkUpKQogCQl2bWFfcGFnZXNpemUgPSB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3Qoa3ZtLCBtZW1zbG90LCBodmEsICZhbXA7aGZuLCAmYW1wO2dwYSk7CiAKJiM0MzsJdHJhY2Vfa3ZtX21tdV9tYXAoZ3BhLCBodmEsIGhmbiwgdm1hX3BhZ2VzaXplLAomIzQzOwkJCSAgISEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9QRk5NQVApKTsKJiM0MzsKIAlpZiAod3JpdGFibGUpIHsKIAkJbWFya19wYWdlX2RpcnR5X2luX3Nsb3Qoa3ZtLCBtZW1zbG90LCBnZm4pOwogCQlyZXQgPSBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKCZhbXA7Z3N0YWdlLCBwY2FjaGUsIGdwYSwgaGZuICZsdDsmbHQ7IFBBR0VfU0hJRlQsCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS90cmFjZS5oIGIvYXJjaC9yaXNjdi9rdm0vdHJhY2UuaAppbmRleCAzZDU0MTc1ZDgwNWNiYy4uZGIyZDI4ZjFkNzE0ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vdHJhY2UuaApAQCAtNTYsNiAmIzQzOzU2LDM1IEBAIFRSQUNFX0VWRU5UKGt2bV9leGl0LAogCQlfX2VudHJ5LSZndDtodGluc3QpCiApOwogCiYjNDM7VFJBQ0VfRVZFTlQoa3ZtX21tdV9tYXAsCiYjNDM7CVRQX1BST1RPKHVuc2lnbmVkIGxvbmcgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgdW5zaWduZWQgbG9uZyBoZm4sCiYjNDM7CQkgdW5zaWduZWQgbG9uZyBtYXBfc2l6ZSwgYm9vbCBpc19wZm5tYXApLAomIzQzOwlUUF9BUkdTKGdwYSwgaHZhLCBoZm4sIG1hcF9zaXplLCBpc19wZm5tYXApLAomIzQzOwomIzQzOwlUUF9TVFJVQ1RfX2VudHJ5KAomIzQzOwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBncGEpCiYjNDM7CQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGh2YSkKJiM0MzsJCV9fZmllbGQodW5zaWduZWQgbG9uZywgaGZuKQomIzQzOwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBtYXBfc2l6ZSkKJiM0MzsJCV9fZmllbGQoYm9vbCwgaXNfcGZubWFwKQomIzQzOwkpLAomIzQzOwomIzQzOwlUUF9mYXN0X2Fzc2lnbigKJiM0MzsJCV9fZW50cnktJmd0O2dwYQkJPSBncGE7CiYjNDM7CQlfX2VudHJ5LSZndDtodmEJCT0gaHZhOwomIzQzOwkJX19lbnRyeS0mZ3Q7aGZuCQk9IGhmbjsKJiM0MzsJCV9fZW50cnktJmd0O21hcF9zaXplCT0gbWFwX3NpemU7CiYjNDM7CQlfX2VudHJ5LSZndDtpc19wZm5tYXAJPSBpc19wZm5tYXA7CiYjNDM7CSksCiYjNDM7CiYjNDM7CVRQX3ByaW50aygmIzM0O0dQQToweCVseCwgSFZBOjB4JWx4LCBIRk46MHglbHgsIHNpemU6JWx1S0IsIHBmbm1hcDolZCYjMzQ7LAomIzQzOwkJX19lbnRyeS0mZ3Q7Z3BhLAomIzQzOwkJX19lbnRyeS0mZ3Q7aHZhLAomIzQzOwkJX19lbnRyeS0mZ3Q7aGZuLAomIzQzOwkJX19lbnRyeS0mZ3Q7bWFwX3NpemUgJmd0OyZndDsgMTAsCiYjNDM7CQlfX2VudHJ5LSZndDtpc19wZm5tYXApCiYjNDM7KTsKJiM0MzsKICNlbmRpZiAvKiBfVFJBQ0VfUlNJQ1ZfS1ZNX0ggKi8KIAogI3VuZGVmIFRSQUNFX0lOQ0xVREVfUEFUSAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODc1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUklTQy1WIEtWTSBNTVUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIFJJU0MtViBLVk0gY29kZSwgc3BlY2lmaWNhbGx5IGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AgYW5kIGBhcmNoL3Jpc2N2L2t2bS90cmFjZS5oYC4gSXQgYXBwZWFycyB0byBiZSByZWZpbmluZyBob3cgaHVnZSBtYXBwaW5ncyB3b3JrIHdoZW4gd2UgaGF2ZSBgVk1fUEZOTUFQYCBmYXVsdHMsIHRob3NlIHJlbGF0ZWQgdG8gaG9zdCBkZXZpY2UgTU1JTy4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGFib3V0IG9wdGltaXppbmcgdGhlIEctc3RhZ2UgbWFwcGluZyBzaXplIGRldGVybWluYXRpb24uIFRoZXkmIzM5O3ZlIGludHJvZHVjZWQgdGhpcyBgcGZubWFwX21hcHBpbmdfc2l6ZSgpYCBmdW5jdGlvbiwgYW5kIHRoZXkmIzM5O3ZlIG1vZGlmaWVkIHRoZSBgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZygpYCBmdW5jdGlvbiwgbWFraW5nIGl0IG1vcmUgZmxleGlibGUgYnkgdGFraW5nIGBtYXBfc2l6ZWAgYXMgYW4gYXJndW1lbnQgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgaGFyZGNvZGVkIHZhbHVlLiBUaGVuLCBga3ZtX3Jpc2N2X21tdV9tYXAoKWAgaGFzIGJlZW4gdXBkYXRlZCB0byBsZXZlcmFnZSB0aGUgYHBmbm1hcF9tYXBwaW5nX3NpemUoKWAgZnVuY3Rpb24gZm9yIGBWTV9QRk5NQVBgIHZtYXMuIFRoZXkmIzM5O3ZlIGV2ZW4gYWRkZWQgYSBga3ZtX21tdV9tYXBgIHRyYWNlcG9pbnQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyDigJMgYWx3YXlzIGEgZ29vZCBzaWduLgoKRnVuY3Rpb25hbGx5LCB0aGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBpbXByb3ZlbWVudCB0byB0aGUgUklTQy1WIEtWTSBNTVUsIHJpZ2h0PyBJdCYjMzk7cyBhbGwgYWJvdXQgaW1wcm92aW5nIHRoZSBlZmZpY2llbmN5IGFuZCBmbGV4aWJpbGl0eSBvZiB0aG9zZSBtYXBwaW5ncy4gVGhlIHF1ZXN0aW9uIG5vdyBpczogaXMgdGhpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gV2VsbCwgeWVzLCBLVk0gb24gUklTQy1WIGlzIHRlc3RhYmxlIGluIFFFTVUsIGVpdGhlciB3aXRoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvciBqdXN0IHBsYWluIEtWTSBvbiBSSVNDLVYuIFNvIGl0IHNob3VsZCBiZSB0ZXN0YWJsZS4KCkhhbmcgb24uLi4gZG9lc24mIzM5O3Qgc3l6a2FsbGVyIHN1cHBvcnQgUklTQy1WIEtWTT8gWWVzLCBpdCBkb2VzLCBpZiBpdCYjMzk7cyBjb25maWd1cmVkLiBPa2F5LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHdlIGhhdmUgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbnMgaW4gcGxhY2UgdG8gcHJvcGVybHkgdGVzdCB0aGlzIHBhdGNoIHdpdGggc3l6a2FsbGVyLgoKTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGJhc2ljcy4gYENPTkZJR19LVk1gIGlzIGRlZmluaXRlbHkgbmVlZGVkLCB0aGF0JiMzOTtzIGEgZ2l2ZW4uIE5leHQsIGxldCYjMzk7cyBkaXZlIGludG8gYGFyY2gvcmlzY3Yva3ZtL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzM1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gUklTQy1WIE1NVSBQZXJmb3JtYW5jZSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBDT05GSUdfS1ZNYCBpcyBkZWZpbml0ZWx5IGluIHBsYXkgaGVyZS4gTXkgaW5pdGlhbCBmb2N1cyBoYXMgdG8gYmUgb24gaWRlbnRpZnlpbmcgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQsIGdpdmVuIHRoZSBtb2RpZmljYXRpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGdvdCBga3ZtX3Jpc2N2X21tdV9tYXBgLCBgcGZubWFwX21hcHBpbmdfc2l6ZWAsIGBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nYCwgYW5kIGB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3RgIGZsYWdnZWQuCgpOb3csIGBrdm1fcmlzY3ZfbW11X21hcGAgaXMgYSBwb3RlbnRpYWwgaG90c3BvdCDigJMgaXQmIzM5O3MgZGVmaW5pdGVseSBpbnZvbHZlZCB3aXRoIHBhZ2UgZmF1bHRzLCBzbyBpdCBjb3VsZCBiZSBwZXJmb3JtYW5jZS1jcml0aWNhbCwgYnV0IGl0JiMzOTtzIGFsc28gdGhlIG1haW4gZnVuY3Rpb24gdGhhdCYjMzk7cyBtb2RpZmllZCwgbWFraW5nIGl0IGEgbmF0dXJhbCBwbGFjZSB0byBzdGFydCwgc28gSSYjMzk7bGwga2VlcCB0aGF0IGluIG1pbmQuIFRoZSBuZXcgZnVuY3Rpb24sIGBwZm5tYXBfbWFwcGluZ19zaXplYCwgY2F0Y2hlcyBteSBhdHRlbnRpb24gaW1tZWRpYXRlbHkgYXMgd2VsbCwgYW5kIGBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nYCBpcyBhbm90aGVyIG9uZSB0aGF0IG5lZWRzIGEgY2xvc2VyIGxvb2ssIGdpdmVuIGl0JiMzOTtzIGFsc28gY2hhbmdlZC4KCkkgd2FudCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLCBzbyBJJiMzOTttIGdvaW5nIHRvIGhhdmUgYSBsb29rIGF0IGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AuIEkmIzM5O20gZ29pbmcgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyLCBnaXZlbiB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fcmlzY3ZfbW11X21hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL21tdS5jPTQ0MD1zdGF0aWMgdW5zaWduZWQgbG9uZyBwZm5tYXBfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy00NTAtXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo0NTE6aW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTQ1Mi1cdFx0ICAgICAgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgYm9vbCBpc193cml0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mzg4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYGt2bV9yaXNjdl9tbXVfbWFwYCoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgYGt2bV9yaXNjdl9tbXVfbWFwYCBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBJdCYjMzk7cyBjcnVjaWFsIHRvIGdyYXNwIHRoZSBjb250ZXh0IG9mIGl0cyBjYWxscyB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvciB3aXRoaW4gdGhlIEtWTS9SSVNDLVYgYXJjaGl0ZWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIHVzZSBteSBkZWJ1Z2dpbmcgdG9vbHMgdG8gZmlndXJlIHRoaXMgb3V0IHF1aWNrbHkuIEkgd2FudCB0byBzZWUgaWYgaXQmIzM5O3MgaW52b2x2ZWQgaW4gdmlydHVhbCBhZGRyZXNzIHRyYW5zbGF0aW9uLCBtZW1vcnkgbWFuYWdlbWVudCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIEZpbmRpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93IGFuZCBkYXRhIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoaXMgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fcmlzY3ZfbW11X21hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9tbXUuYz00NDA9c3RhdGljIHVuc2lnbmVkIGxvbmcgcGZubWFwX21hcHBpbmdfc2l6ZShzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNDUwLVxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NDUxOmludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy00NTItXHRcdCAgICAgIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIGJvb2wgaXNfd3JpdGUsXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9leGl0LmM9MTU9c3RhdGljIGludCBnc3RhZ2VfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4sXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9leGl0LmMtNDUtXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X2V4aXQuYzo0NjpcdHJldCA9IGt2bV9yaXNjdl9tbXVfbWFwKHZjcHUsIG1lbXNsb3QsIGZhdWx0X2FkZHIsIGh2YSxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jLTQ3LVx0XHRcdFx0KHRyYXAtXHUwMDNlc2NhdXNlID09IEVYQ19TVE9SRV9HVUVTVF9QQUdFX0ZBVUxUKSA/IHRydWUgOiBmYWxzZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTI3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUklTQy1WIEtWTSBNTVUgUGF0Y2gqKgoKT2theSwgc28gYGt2bV9yaXNjdl9tbXVfbWFwYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgZ3N0YWdlX3BhZ2VfZmF1bHRgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGFnZSBmYXVsdCBoYW5kbGVyLCB3aGljaCwgd2hpbGUgcG90ZW50aWFsbHkgaG90IGNvZGUsIGlzICp0aGUqIGNvcmUgbG9naWMgZm9yIHRoaXMgZ3N0YWdlIGZlYXR1cmUuIFdlIG5lZWQgdG8gemVybyBpbiBvbiB0aGlzIGxvZ2ljLiBUaGUga2V5IGZ1bmN0aW9ucyB0byBkaXNzZWN0IGFyZSBkZWZpbml0ZWx5IGBwZm5tYXBfbWFwcGluZ19zaXplYCwgYGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmdgLCBgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0YCwgYW5kIG9mIGNvdXJzZSwgYGt2bV9yaXNjdl9tbXVfbWFwYCBpdHNlbGYuCgpUaGUgZmFjdCB0aGF0IHRoaXMgaXMgUklTQy1WIHNwZWNpZmljIGlzIGNydWNpYWwuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBSSVNDLVYgS1ZNIE1NVS4gVGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9uIGhlcmUuCgpBcyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLCBgQ09ORklHX0tWTWAgaXMgdGhlIG9idmlvdXMgb25lLCB3aGljaCB3ZSBrbmV3LiBIb3dldmVyLCB0aGUgbWVudGlvbiBvZiBgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0YCBtYWtlcyBtZSB3b25kZXIgYWJvdXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEV2ZW4gdGhvdWdoIHRoZSBuZXcgZnVuY3Rpb24sIGBwZm5tYXBfbWFwcGluZ19zaXplYCwgc2VlbXMgdG8gYmUgbW9yZSBjZW50cmFsIHRvIHRoaXMgcGF0Y2guIExldCYjMzk7cyBkaWcgaW50byB3aGV0aGVyIGBwZm5tYXBfbWFwcGluZ19zaXplYCBpdHNlbGYgaGFzIGFueSBoaWRkZW4gY29uZmlnIGRlcGVuZGVuY2llcy4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Bmbm1hcF9tYXBwaW5nX3NpemUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9tbXUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9tbXUuYz0zOTc9c3RhdGljIHVuc2lnbmVkIGxvbmcgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy00MzktICovXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo0NDA6c3RhdGljIHVuc2lnbmVkIGxvbmcgcGZubWFwX21hcHBpbmdfc2l6ZShzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy00NDEtXHRcdFx0XHRcdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jPTQ1MT1pbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTQ5OC1cdGVsc2UgaWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUEZOTUFQKVxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NDk5Olx0XHR2bWFfcGFnZXNpemUgPSBwZm5tYXBfbWFwcGluZ19zaXplKGt2bSwgbWVtc2xvdCwgaHZhKTtcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTUwMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgwMQoJCQkJCQkJb3V0cHV0OiAxNDkKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUklTQy1WIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0IHNlZW1zIHRoZSBvbmx5IG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGZsYWcgaXMgYEtWTWAgaXRzZWxmLiBJIGluaXRpYWxseSB0aG91Z2h0IHRoZXJlIG1pZ2h0IGJlIGEgZGVwZW5kZW5jeSBvbiBzb21ldGhpbmcgbGlrZSBgVk1fUEZOTUFQYCwgYnV0IHRoYXQmIzM5O3MgdXNlZCBmb3IgZGV2aWNlIG1lbW9yeSBtYXBwaW5n4oCUdGhpbmsgVkZJTyBpbiB0aGlzIGNvbnRleHQuIEFuZCB3aGlsZSBWRklPIG1pZ2h0ICp0cmlnZ2VyKiB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb25hbGl0eSwgdGhlIHBhdGNoIGl0c2VsZiByZXNpZGVzIHdpdGhpbiB0aGUgS1ZNIGNvcmUuIFNvLCB5ZWFoLCBgS1ZNYCBpcyB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uLgoKTGV0IG1lIHJlZnJlc2ggb24gdGhlIHJlbGV2YW50IHN5bWJvbHMgYWdhaW4uLi4gYHBmbm1hcF9tYXBwaW5nX3NpemVgLCBgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZ2AsIGFuZCBga3ZtX3Jpc2N2X21tdV9tYXBgLiBSaWdodCwgSSYjMzk7bSB3aXRoIGl0LiBUaGUgcGF0Y2ggZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyB0aGUgUklTQy1WIEtWTSBNTVUgaGFuZGxlcyBodWdlIG1hcHBpbmdzIGZvciBgVk1fUEZOTUFQYCBmYXVsdHMsIHdoaWNoIGlzIHByZWNpc2VseSBob3cgd2UgZGVhbCB3aXRoIGhvc3QgZGV2aWNlIE1NSU8uIEl0IGFkZHMgdGhpcyBuZXcgYHBmbm1hcF9tYXBwaW5nX3NpemVgIGZ1bmN0aW9uIGFuZCB0d2Vha3MgdGhlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgaW4gYGt2bV9yaXNjdl9tbXVfbWFwYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB0byB0aGUgY29yZSBLVk0gbG9naWMgdGhhdCB3ZSB0b3VjaCBxdWl0ZSBvZnRlbi4KCkFscmlnaHQsIEkmIzM5O20gc2F0aXNmaWVkLiBMZXQmIzM5O3MgY2FsbCB0aGlzIHNldCBhcyByZXNvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Bmbm1hcF9tYXBwaW5nX3NpemUmIzM0OywKICAgICYjMzQ7ZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfbW11X21hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViBLVk0gTU1VIHRvIHN1cHBvcnQgaHVnZSBtYXBwaW5ncyBmb3IgVk1fUEZOTUFQIGZhdWx0cyAoZS5nLiwgaG9zdCBkZXZpY2UgTU1JTykuIEl0IGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYHBmbm1hcF9tYXBwaW5nX3NpemVgIGFuZCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBpbiBga3ZtX3Jpc2N2X21tdV9tYXBgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwZm5tYXBfbWFwcGluZ19zaXplJiMzNDssCiAgICAmIzM0O2ZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X21tdV9tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBSSVNDLVYgS1ZNIE1NVSB0byBzdXBwb3J0IGh1Z2UgbWFwcGluZ3MgZm9yIFZNX1BGTk1BUCBmYXVsdHMgKGUuZy4sIGhvc3QgZGV2aWNlIE1NSU8pLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBwZm5tYXBfbWFwcGluZ19zaXplYCBhbmQgbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbG9naWMgaW4gYGt2bV9yaXNjdl9tbXVfbWFwYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA3OjU2OjAxLjg4NzgxMjUxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE0NjUyMTU1OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGZubWFwX21hcHBpbmdfc2l6ZVwiLFxuICAgIFwiZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZ1wiLFxuICAgIFwia3ZtX3Jpc2N2X21tdV9tYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViBLVk0gTU1VIHRvIHN1cHBvcnQgaHVnZSBtYXBwaW5ncyBmb3IgVk1fUEZOTUFQIGZhdWx0cyAoZS5nLiwgaG9zdCBkZXZpY2UgTU1JTykuIEl0IGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYHBmbm1hcF9tYXBwaW5nX3NpemVgIGFuZCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBpbiBga3ZtX3Jpc2N2X21tdV9tYXBgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzo1NjowMS44ODc4MjEyNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEwNDYyMTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTAwY2JjMmFjNWViMjYyNjUzMDJhN2ZjYmI3Mzc2ZWE3NzcxYmE5Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAxMyAwNzo1NjowMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jXFxuaW5kZXggMmQzZGVmMDI0MjcwYzAuLjUzZmIzNGQ0Yjc2ZDA5IDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jXFxuKysrIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcXG5AQCAtMTYsNiArMTYsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9tbXUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fbmFjbC5oXFx1MDAzZVxcbiBcXG4rI2luY2x1ZGUgXFxcInRyYWNlLmhcXFwiXFxuK1xcbiBzdGF0aWMgdm9pZCBtbXVfd3BfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBzbG90KVxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzID0ga3ZtX21lbXNsb3RzKGt2bSk7XFxuQEAgLTI4Niw3ICsyODgsNyBAQCBib29sIGt2bV90ZXN0X2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgaHZhKVxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBodmEsIHVuc2lnbmVkIGxvbmcgbWFwX3NpemUpXFxuIHtcXG4gXFx0aHZhX3QgdWFkZHJfc3RhcnQsIHVhZGRyX2VuZDtcXG4gXFx0Z3BhX3QgZ3BhX3N0YXJ0O1xcbkBAIC0zMjEsNyArMzIzLDcgQEAgc3RhdGljIGJvb2wgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbiBcXHQgKiAgIGUgLVxcdTAwM2UgZ1xcbiBcXHQgKiAgIGYgLVxcdTAwM2UgaFxcbiBcXHQgKi9cXG4tXFx0aWYgKChncGFfc3RhcnQgXFx1MDAyNiAoUE1EX1NJWkUgLSAxKSkgIT0gKHVhZGRyX3N0YXJ0IFxcdTAwMjYgKFBNRF9TSVpFIC0gMSkpKVxcbitcXHRpZiAoKGdwYV9zdGFydCBcXHUwMDI2IChtYXBfc2l6ZSAtIDEpKSAhPSAodWFkZHJfc3RhcnQgXFx1MDAyNiAobWFwX3NpemUgLSAxKSkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdC8qXFxuQEAgLTMzNiw3ICszMzgsNyBAQCBzdGF0aWMgYm9vbCBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuIFxcdCAqIHVzZXJzcGFjZV9hZGRyIG9yIHRoZSBiYXNlX2dmbiwgYXMgYm90aCBhcmUgZXF1YWxseSBhbGlnbmVkIChwZXJcXG4gXFx0ICogdGhlIGNoZWNrIGFib3ZlKSBhbmQgZXF1YWxseSBzaXplZC5cXG4gXFx0ICovXFxuLVxcdHJldHVybiAoaHZhIFxcdTAwM2U9IEFMSUdOKHVhZGRyX3N0YXJ0LCBQTURfU0laRSkpIFxcdTAwMjZcXHUwMDI2IChodmEgXFx1MDAzYyBBTElHTl9ET1dOKHVhZGRyX2VuZCwgUE1EX1NJWkUpKTtcXG4rXFx0cmV0dXJuIChodmEgXFx1MDAzZT0gQUxJR04odWFkZHJfc3RhcnQsIG1hcF9zaXplKSkgXFx1MDAyNlxcdTAwMjYgKGh2YSBcXHUwMDNjIEFMSUdOX0RPV04odWFkZHJfZW5kLCBtYXBfc2l6ZSkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGdldF9odmFfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcXG5AQCAtNDA0LDcgKzQwNiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdChzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdCAqIHN1cmUgdGhhdCB0aGUgSFZBIGFuZCBHUEEgYXJlIHN1ZmZpY2llbnRseSBhbGlnbmVkIGFuZCB0aGF0IHRoZVxcbiBcXHQgKiBibG9jayBtYXAgaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgbWVtc2xvdC5cXG4gXFx0ICovXFxuLVxcdGlmIChmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKG1lbXNsb3QsIGh2YSkpIHtcXG4rXFx0aWYgKGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcobWVtc2xvdCwgaHZhLCBQTURfU0laRSkpIHtcXG4gXFx0XFx0aW50IHN6O1xcbiBcXG4gXFx0XFx0c3ogPSBnZXRfaHZhX21hcHBpbmdfc2l6ZShrdm0sIGh2YSk7XFxuQEAgLTQyMSw2ICs0MjMsMzEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0cmV0dXJuIFBBR0VfU0laRTtcXG4gfVxcbiBcXG4rLypcXG4rICogRGV0ZXJtaW5lIHRoZSBHLXN0YWdlIG1hcHBpbmcgc2l6ZSBmb3IgYSBWTV9QRk5NQVAgKGUuZy4gaG9zdCBkZXZpY2VcXG4rICogTU1JTykgZmF1bHQuICBVbmxpa2UgYXJtNjQncyBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiwgd2UgbmV2ZXIgZGVyaXZlIHRoZVxcbisgKiBob3N0IHBoeXNpY2FsIGFkZHJlc3MgZnJvbSB2bWEtXFx1MDAzZXZtX3Bnb2ZmICh3aGljaCBpcyB1bnJlbGlhYmxlIHNpbmNlIHRoZVxcbisgKiBWRklPIHVubWFwX21hcHBpbmdfcmFuZ2UoKSBjaGFuZ2VzKS4gIEluc3RlYWQgd2Ugd2FsayB0aGUgaG9zdCBwYWdlIHRhYmxlc1xcbisgKiB2aWEgZ2V0X2h2YV9tYXBwaW5nX3NpemUoKTogaWYgdGhlIGhvc3QgaXRzZWxmIGluc3RhbGxlZCBhIGxlYWYgYmxvY2sgZm9yXFxuKyAqIHRoaXMgYWRkcmVzcywgcGh5c2ljYWwgY29udGlndWl0eSB3aXRoaW4gdGhhdCBibG9jayBpcyBhbHJlYWR5IGd1YXJhbnRlZWRcXG4rICogYnkgdGhlIGhvc3QgbW0uICBUaGUgbWVtb3J5IHR5cGUgc3RheXMgY29ycmVjdCBiZWNhdXNlIFJJU0MtViBkZXJpdmVzIGl0XFxuKyAqIGZyb20gdGhlIHBoeXNpY2FsIGFkZHJlc3MnIFBNQSwgaW5kZXBlbmRlbnQgb2YgdGhlIEctc3RhZ2UgUFRFIHNpemUuXFxuKyAqXFxuKyAqIEJlIGNvbnNlcnZhdGl2ZSBmb3Igbm93IGFuZCBvbmx5IHByb21vdGUgdG8gUE1ELXNpemVkIGJsb2NrczsgUFVELXNpemVkXFxuKyAqIGRldmljZSBibG9ja3MgYXJlIGxlZnQgYXMgZnV0dXJlIHdvcmsuICBGYWxsIGJhY2sgdG8gUEFHRV9TSVpFIHdoZW5ldmVyXFxuKyAqIGNvbnRpZ3VpdHkgb3IgSFZBL0dQQSBhbGlnbm1lbnQgY2Fubm90IGJlIHByb3Zlbi5cXG4rICovXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBmbm1hcF9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcXG4rXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgaHZhKVxcbit7XFxuK1xcdGlmIChnZXRfaHZhX21hcHBpbmdfc2l6ZShrdm0sIGh2YSkgXFx1MDAzZT0gUE1EX1NJWkUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcobWVtc2xvdCwgaHZhLCBQTURfU0laRSkpXFxuK1xcdFxcdHJldHVybiBQTURfU0laRTtcXG4rXFxuK1xcdHJldHVybiBQQUdFX1NJWkU7XFxuK31cXG4rXFxuIGludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuIFxcdFxcdCAgICAgIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIGJvb2wgaXNfd3JpdGUsXFxuIFxcdFxcdCAgICAgIHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgKm91dF9tYXApXFxuQEAgLTQ2NSwxMSArNDkyLDE0IEBAIGludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuIFxcdGVsc2VcXG4gXFx0XFx0dm1hX3BhZ2VzaGlmdCA9IFBBR0VfU0hJRlQ7XFxuIFxcdHZtYV9wYWdlc2l6ZSA9IDFVTEwgXFx1MDAzY1xcdTAwM2Mgdm1hX3BhZ2VzaGlmdDtcXG4tXFx0aWYgKGxvZ2dpbmcgfHwgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9QRk5NQVApKVxcbitcXG4rXFx0aWYgKGxvZ2dpbmcpXFxuIFxcdFxcdHZtYV9wYWdlc2l6ZSA9IFBBR0VfU0laRTtcXG4rXFx0ZWxzZSBpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1BGTk1BUClcXG4rXFx0XFx0dm1hX3BhZ2VzaXplID0gcGZubWFwX21hcHBpbmdfc2l6ZShrdm0sIG1lbXNsb3QsIGh2YSk7XFxuIFxcbiBcXHRpZiAodm1hX3BhZ2VzaXplID09IFBNRF9TSVpFIHx8IHZtYV9wYWdlc2l6ZSA9PSBQVURfU0laRSlcXG4tXFx0XFx0Z2ZuID0gKGdwYSBcXHUwMDI2IGh1Z2VfcGFnZV9tYXNrKGhzdGF0ZV92bWEodm1hKSkpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdFxcdGdmbiA9IChncGEgXFx1MDAyNiB+KHZtYV9wYWdlc2l6ZSAtIDEpKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogUmVhZCBtbXVfaW52YWxpZGF0ZV9zZXEgc28gdGhhdCBLVk0gY2FuIGRldGVjdCBpZiB0aGUgcmVzdWx0cyBvZlxcbkBAIC01MTUsNiArNTQ1LDkgQEAgaW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcXG4gXFx0aWYgKCFsb2dnaW5nIFxcdTAwMjZcXHUwMDI2ICh2bWFfcGFnZXNpemUgPT0gUEFHRV9TSVpFKSlcXG4gXFx0XFx0dm1hX3BhZ2VzaXplID0gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KGt2bSwgbWVtc2xvdCwgaHZhLCBcXHUwMDI2aGZuLCBcXHUwMDI2Z3BhKTtcXG4gXFxuK1xcdHRyYWNlX2t2bV9tbXVfbWFwKGdwYSwgaHZhLCBoZm4sIHZtYV9wYWdlc2l6ZSxcXG4rXFx0XFx0XFx0ICAhISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fUEZOTUFQKSk7XFxuK1xcbiBcXHRpZiAod3JpdGFibGUpIHtcXG4gXFx0XFx0bWFya19wYWdlX2RpcnR5X2luX3Nsb3Qoa3ZtLCBtZW1zbG90LCBnZm4pO1xcbiBcXHRcXHRyZXQgPSBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKFxcdTAwMjZnc3RhZ2UsIHBjYWNoZSwgZ3BhLCBoZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdHJhY2UuaCBiL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmhcXG5pbmRleCAzZDU0MTc1ZDgwNWNiYy4uZGIyZDI4ZjFkNzE0ODMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdHJhY2UuaFxcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmhcXG5AQCAtNTYsNiArNTYsMzUgQEAgVFJBQ0VfRVZFTlQoa3ZtX2V4aXQsXFxuIFxcdFxcdF9fZW50cnktXFx1MDAzZWh0aW5zdClcXG4gKTtcXG4gXFxuK1RSQUNFX0VWRU5UKGt2bV9tbXVfbWFwLFxcbitcXHRUUF9QUk9UTyh1bnNpZ25lZCBsb25nIGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIHVuc2lnbmVkIGxvbmcgaGZuLFxcbitcXHRcXHQgdW5zaWduZWQgbG9uZyBtYXBfc2l6ZSwgYm9vbCBpc19wZm5tYXApLFxcbitcXHRUUF9BUkdTKGdwYSwgaHZhLCBoZm4sIG1hcF9zaXplLCBpc19wZm5tYXApLFxcbitcXG4rXFx0VFBfU1RSVUNUX19lbnRyeShcXG4rXFx0XFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBncGEpXFxuK1xcdFxcdF9fZmllbGQodW5zaWduZWQgbG9uZywgaHZhKVxcbitcXHRcXHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGhmbilcXG4rXFx0XFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBtYXBfc2l6ZSlcXG4rXFx0XFx0X19maWVsZChib29sLCBpc19wZm5tYXApXFxuK1xcdCksXFxuK1xcbitcXHRUUF9mYXN0X2Fzc2lnbihcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlZ3BhXFx0XFx0PSBncGE7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZWh2YVxcdFxcdD0gaHZhO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VoZm5cXHRcXHQ9IGhmbjtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlbWFwX3NpemVcXHQ9IG1hcF9zaXplO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2Vpc19wZm5tYXBcXHQ9IGlzX3Bmbm1hcDtcXG4rXFx0KSxcXG4rXFxuK1xcdFRQX3ByaW50ayhcXFwiR1BBOjB4JWx4LCBIVkE6MHglbHgsIEhGTjoweCVseCwgc2l6ZTolbHVLQiwgcGZubWFwOiVkXFxcIixcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlZ3BhLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VodmEsXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZWhmbixcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlbWFwX3NpemUgXFx1MDAzZVxcdTAwM2UgMTAsXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZWlzX3Bmbm1hcClcXG4rKTtcXG4rXFxuICNlbmRpZiAvKiBfVFJBQ0VfUlNJQ1ZfS1ZNX0ggKi9cXG4gXFxuICN1bmRlZiBUUkFDRV9JTkNMVURFX1BBVEhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6NTY6MDIuNTAxNDIxMTg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDg1MTU5MjE0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwZm5tYXBfbWFwcGluZ19zaXplXCIsXG4gICAgXCJmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nXCIsXG4gICAgXCJrdm1fcmlzY3ZfbW11X21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgUklTQy1WIEtWTSBNTVUgdG8gc3VwcG9ydCBodWdlIG1hcHBpbmdzIGZvciBWTV9QRk5NQVAgZmF1bHRzIChlLmcuLCBob3N0IGRldmljZSBNTUlPKS4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgcGZubWFwX21hcHBpbmdfc2l6ZWAgYW5kIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nIGxvZ2ljIGluIGBrdm1fcmlzY3ZfbW11X21hcGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgY29yZSBLVk0gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTAwY2JjMmFjNWViMjYyNjUzMDJhN2ZjYmI3Mzc2ZWE3NzcxYmE5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDA3OjU2OjAwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbW11LmMgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuaW5kZXggMmQzZGVmMDI0MjcwYzAuLjUzZmIzNGQ0Yjc2ZDA5IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vbW11LmNcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG5AQCAtMTYsNiArMTYsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX25hY2wuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFwidHJhY2UuaFwiXG4rXG4gc3RhdGljIHZvaWQgbW11X3dwX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBpbnQgc2xvdClcbiB7XG4gXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cyA9IGt2bV9tZW1zbG90cyhrdm0pO1xuQEAgLTI4Niw3ICsyODgsNyBAQCBib29sIGt2bV90ZXN0X2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4gfVxuIFxuIHN0YXRpYyBib29sIGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbi1cdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgaHZhKVxuK1x0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBodmEsIHVuc2lnbmVkIGxvbmcgbWFwX3NpemUpXG4ge1xuIFx0aHZhX3QgdWFkZHJfc3RhcnQsIHVhZGRyX2VuZDtcbiBcdGdwYV90IGdwYV9zdGFydDtcbkBAIC0zMjEsNyArMzIzLDcgQEAgc3RhdGljIGJvb2wgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuIFx0ICogICBlIC1cdTAwM2UgZ1xuIFx0ICogICBmIC1cdTAwM2UgaFxuIFx0ICovXG4tXHRpZiAoKGdwYV9zdGFydCBcdTAwMjYgKFBNRF9TSVpFIC0gMSkpICE9ICh1YWRkcl9zdGFydCBcdTAwMjYgKFBNRF9TSVpFIC0gMSkpKVxuK1x0aWYgKChncGFfc3RhcnQgXHUwMDI2IChtYXBfc2l6ZSAtIDEpKSAhPSAodWFkZHJfc3RhcnQgXHUwMDI2IChtYXBfc2l6ZSAtIDEpKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0LypcbkBAIC0zMzYsNyArMzM4LDcgQEAgc3RhdGljIGJvb2wgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuIFx0ICogdXNlcnNwYWNlX2FkZHIgb3IgdGhlIGJhc2VfZ2ZuLCBhcyBib3RoIGFyZSBlcXVhbGx5IGFsaWduZWQgKHBlclxuIFx0ICogdGhlIGNoZWNrIGFib3ZlKSBhbmQgZXF1YWxseSBzaXplZC5cbiBcdCAqL1xuLVx0cmV0dXJuIChodmEgXHUwMDNlPSBBTElHTih1YWRkcl9zdGFydCwgUE1EX1NJWkUpKSBcdTAwMjZcdTAwMjYgKGh2YSBcdTAwM2MgQUxJR05fRE9XTih1YWRkcl9lbmQsIFBNRF9TSVpFKSk7XG4rXHRyZXR1cm4gKGh2YSBcdTAwM2U9IEFMSUdOKHVhZGRyX3N0YXJ0LCBtYXBfc2l6ZSkpIFx1MDAyNlx1MDAyNiAoaHZhIFx1MDAzYyBBTElHTl9ET1dOKHVhZGRyX2VuZCwgbWFwX3NpemUpKTtcbiB9XG4gXG4gc3RhdGljIGludCBnZXRfaHZhX21hcHBpbmdfc2l6ZShzdHJ1Y3Qga3ZtICprdm0sXG5AQCAtNDA0LDcgKzQwNiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdChzdHJ1Y3Qga3ZtICprdm0sXG4gXHQgKiBzdXJlIHRoYXQgdGhlIEhWQSBhbmQgR1BBIGFyZSBzdWZmaWNpZW50bHkgYWxpZ25lZCBhbmQgdGhhdCB0aGVcbiBcdCAqIGJsb2NrIG1hcCBpcyBjb250YWluZWQgd2l0aGluIHRoZSBtZW1zbG90LlxuIFx0ICovXG4tXHRpZiAoZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhtZW1zbG90LCBodmEpKSB7XG4rXHRpZiAoZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhtZW1zbG90LCBodmEsIFBNRF9TSVpFKSkge1xuIFx0XHRpbnQgc3o7XG4gXG4gXHRcdHN6ID0gZ2V0X2h2YV9tYXBwaW5nX3NpemUoa3ZtLCBodmEpO1xuQEAgLTQyMSw2ICs0MjMsMzEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KHN0cnVjdCBrdm0gKmt2bSxcbiBcdHJldHVybiBQQUdFX1NJWkU7XG4gfVxuIFxuKy8qXG4rICogRGV0ZXJtaW5lIHRoZSBHLXN0YWdlIG1hcHBpbmcgc2l6ZSBmb3IgYSBWTV9QRk5NQVAgKGUuZy4gaG9zdCBkZXZpY2VcbisgKiBNTUlPKSBmYXVsdC4gIFVubGlrZSBhcm02NCdzIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uLCB3ZSBuZXZlciBkZXJpdmUgdGhlXG4rICogaG9zdCBwaHlzaWNhbCBhZGRyZXNzIGZyb20gdm1hLVx1MDAzZXZtX3Bnb2ZmICh3aGljaCBpcyB1bnJlbGlhYmxlIHNpbmNlIHRoZVxuKyAqIFZGSU8gdW5tYXBfbWFwcGluZ19yYW5nZSgpIGNoYW5nZXMpLiAgSW5zdGVhZCB3ZSB3YWxrIHRoZSBob3N0IHBhZ2UgdGFibGVzXG4rICogdmlhIGdldF9odmFfbWFwcGluZ19zaXplKCk6IGlmIHRoZSBob3N0IGl0c2VsZiBpbnN0YWxsZWQgYSBsZWFmIGJsb2NrIGZvclxuKyAqIHRoaXMgYWRkcmVzcywgcGh5c2ljYWwgY29udGlndWl0eSB3aXRoaW4gdGhhdCBibG9jayBpcyBhbHJlYWR5IGd1YXJhbnRlZWRcbisgKiBieSB0aGUgaG9zdCBtbS4gIFRoZSBtZW1vcnkgdHlwZSBzdGF5cyBjb3JyZWN0IGJlY2F1c2UgUklTQy1WIGRlcml2ZXMgaXRcbisgKiBmcm9tIHRoZSBwaHlzaWNhbCBhZGRyZXNzJyBQTUEsIGluZGVwZW5kZW50IG9mIHRoZSBHLXN0YWdlIFBURSBzaXplLlxuKyAqXG4rICogQmUgY29uc2VydmF0aXZlIGZvciBub3cgYW5kIG9ubHkgcHJvbW90ZSB0byBQTUQtc2l6ZWQgYmxvY2tzOyBQVUQtc2l6ZWRcbisgKiBkZXZpY2UgYmxvY2tzIGFyZSBsZWZ0IGFzIGZ1dHVyZSB3b3JrLiAgRmFsbCBiYWNrIHRvIFBBR0VfU0laRSB3aGVuZXZlclxuKyAqIGNvbnRpZ3VpdHkgb3IgSFZBL0dQQSBhbGlnbm1lbnQgY2Fubm90IGJlIHByb3Zlbi5cbisgKi9cbitzdGF0aWMgdW5zaWduZWQgbG9uZyBwZm5tYXBfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHRcdFx0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4rXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGh2YSlcbit7XG4rXHRpZiAoZ2V0X2h2YV9tYXBwaW5nX3NpemUoa3ZtLCBodmEpIFx1MDAzZT0gUE1EX1NJWkUgXHUwMDI2XHUwMDI2XG4rXHQgICAgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhtZW1zbG90LCBodmEsIFBNRF9TSVpFKSlcbitcdFx0cmV0dXJuIFBNRF9TSVpFO1xuK1xuK1x0cmV0dXJuIFBBR0VfU0laRTtcbit9XG4rXG4gaW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbiBcdFx0ICAgICAgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgYm9vbCBpc193cml0ZSxcbiBcdFx0ICAgICAgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyAqb3V0X21hcClcbkBAIC00NjUsMTEgKzQ5MiwxNCBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuIFx0ZWxzZVxuIFx0XHR2bWFfcGFnZXNoaWZ0ID0gUEFHRV9TSElGVDtcbiBcdHZtYV9wYWdlc2l6ZSA9IDFVTEwgXHUwMDNjXHUwMDNjIHZtYV9wYWdlc2hpZnQ7XG4tXHRpZiAobG9nZ2luZyB8fCAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9QRk5NQVApKVxuK1xuK1x0aWYgKGxvZ2dpbmcpXG4gXHRcdHZtYV9wYWdlc2l6ZSA9IFBBR0VfU0laRTtcbitcdGVsc2UgaWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUEZOTUFQKVxuK1x0XHR2bWFfcGFnZXNpemUgPSBwZm5tYXBfbWFwcGluZ19zaXplKGt2bSwgbWVtc2xvdCwgaHZhKTtcbiBcbiBcdGlmICh2bWFfcGFnZXNpemUgPT0gUE1EX1NJWkUgfHwgdm1hX3BhZ2VzaXplID09IFBVRF9TSVpFKVxuLVx0XHRnZm4gPSAoZ3BhIFx1MDAyNiBodWdlX3BhZ2VfbWFzayhoc3RhdGVfdm1hKHZtYSkpKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcdFx0Z2ZuID0gKGdwYSBcdTAwMjYgfih2bWFfcGFnZXNpemUgLSAxKSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXG4gXHQvKlxuIFx0ICogUmVhZCBtbXVfaW52YWxpZGF0ZV9zZXEgc28gdGhhdCBLVk0gY2FuIGRldGVjdCBpZiB0aGUgcmVzdWx0cyBvZlxuQEAgLTUxNSw2ICs1NDUsOSBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuIFx0aWYgKCFsb2dnaW5nIFx1MDAyNlx1MDAyNiAodm1hX3BhZ2VzaXplID09IFBBR0VfU0laRSkpXG4gXHRcdHZtYV9wYWdlc2l6ZSA9IHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdChrdm0sIG1lbXNsb3QsIGh2YSwgXHUwMDI2aGZuLCBcdTAwMjZncGEpO1xuIFxuK1x0dHJhY2Vfa3ZtX21tdV9tYXAoZ3BhLCBodmEsIGhmbiwgdm1hX3BhZ2VzaXplLFxuK1x0XHRcdCAgISEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9QRk5NQVApKTtcbitcbiBcdGlmICh3cml0YWJsZSkge1xuIFx0XHRtYXJrX3BhZ2VfZGlydHlfaW5fc2xvdChrdm0sIG1lbXNsb3QsIGdmbik7XG4gXHRcdHJldCA9IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UoXHUwMDI2Z3N0YWdlLCBwY2FjaGUsIGdwYSwgaGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmggYi9hcmNoL3Jpc2N2L2t2bS90cmFjZS5oXG5pbmRleCAzZDU0MTc1ZDgwNWNiYy4uZGIyZDI4ZjFkNzE0ODMgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS90cmFjZS5oXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS90cmFjZS5oXG5AQCAtNTYsNiArNTYsMzUgQEAgVFJBQ0VfRVZFTlQoa3ZtX2V4aXQsXG4gXHRcdF9fZW50cnktXHUwMDNlaHRpbnN0KVxuICk7XG4gXG4rVFJBQ0VfRVZFTlQoa3ZtX21tdV9tYXAsXG4rXHRUUF9QUk9UTyh1bnNpZ25lZCBsb25nIGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIHVuc2lnbmVkIGxvbmcgaGZuLFxuK1x0XHQgdW5zaWduZWQgbG9uZyBtYXBfc2l6ZSwgYm9vbCBpc19wZm5tYXApLFxuK1x0VFBfQVJHUyhncGEsIGh2YSwgaGZuLCBtYXBfc2l6ZSwgaXNfcGZubWFwKSxcbitcbitcdFRQX1NUUlVDVF9fZW50cnkoXG4rXHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgZ3BhKVxuK1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGh2YSlcbitcdFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBoZm4pXG4rXHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbWFwX3NpemUpXG4rXHRcdF9fZmllbGQoYm9vbCwgaXNfcGZubWFwKVxuK1x0KSxcbitcbitcdFRQX2Zhc3RfYXNzaWduKFxuK1x0XHRfX2VudHJ5LVx1MDAzZWdwYVx0XHQ9IGdwYTtcbitcdFx0X19lbnRyeS1cdTAwM2VodmFcdFx0PSBodmE7XG4rXHRcdF9fZW50cnktXHUwMDNlaGZuXHRcdD0gaGZuO1xuK1x0XHRfX2VudHJ5LVx1MDAzZW1hcF9zaXplXHQ9IG1hcF9zaXplO1xuK1x0XHRfX2VudHJ5LVx1MDAzZWlzX3Bmbm1hcFx0PSBpc19wZm5tYXA7XG4rXHQpLFxuK1xuK1x0VFBfcHJpbnRrKFwiR1BBOjB4JWx4LCBIVkE6MHglbHgsIEhGTjoweCVseCwgc2l6ZTolbHVLQiwgcGZubWFwOiVkXCIsXG4rXHRcdF9fZW50cnktXHUwMDNlZ3BhLFxuK1x0XHRfX2VudHJ5LVx1MDAzZWh2YSxcbitcdFx0X19lbnRyeS1cdTAwM2VoZm4sXG4rXHRcdF9fZW50cnktXHUwMDNlbWFwX3NpemUgXHUwMDNlXHUwMDNlIDEwLFxuK1x0XHRfX2VudHJ5LVx1MDAzZWlzX3Bmbm1hcClcbispO1xuK1xuICNlbmRpZiAvKiBfVFJBQ0VfUlNJQ1ZfS1ZNX0ggKi9cbiBcbiAjdW5kZWYgVFJBQ0VfSU5DTFVERV9QQVRIXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzo1NjowMi41MDE0Mjc4ODVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODEyNzQ4ODA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJJU0MtViBLVk0gTU1VIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgUklTQy1WIEtWTSBjb2RlLCBzcGVjaWZpY2FsbHkgYGFyY2gvcmlzY3Yva3ZtL21tdS5jYCBhbmQgYGFyY2gvcmlzY3Yva3ZtL3RyYWNlLmhgLiBJdCBhcHBlYXJzIHRvIGJlIHJlZmluaW5nIGhvdyBodWdlIG1hcHBpbmdzIHdvcmsgd2hlbiB3ZSBoYXZlIGBWTV9QRk5NQVBgIGZhdWx0cywgdGhvc2UgcmVsYXRlZCB0byBob3N0IGRldmljZSBNTUlPLiBFc3NlbnRpYWxseSwgaXQncyBhYm91dCBvcHRpbWl6aW5nIHRoZSBHLXN0YWdlIG1hcHBpbmcgc2l6ZSBkZXRlcm1pbmF0aW9uLiBUaGV5J3ZlIGludHJvZHVjZWQgdGhpcyBgcGZubWFwX21hcHBpbmdfc2l6ZSgpYCBmdW5jdGlvbiwgYW5kIHRoZXkndmUgbW9kaWZpZWQgdGhlIGBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKClgIGZ1bmN0aW9uLCBtYWtpbmcgaXQgbW9yZSBmbGV4aWJsZSBieSB0YWtpbmcgYG1hcF9zaXplYCBhcyBhbiBhcmd1bWVudCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gYSBoYXJkY29kZWQgdmFsdWUuIFRoZW4sIGBrdm1fcmlzY3ZfbW11X21hcCgpYCBoYXMgYmVlbiB1cGRhdGVkIHRvIGxldmVyYWdlIHRoZSBgcGZubWFwX21hcHBpbmdfc2l6ZSgpYCBmdW5jdGlvbiBmb3IgYFZNX1BGTk1BUGAgdm1hcy4gVGhleSd2ZSBldmVuIGFkZGVkIGEgYGt2bV9tbXVfbWFwYCB0cmFjZXBvaW50IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMg4oCTIGFsd2F5cyBhIGdvb2Qgc2lnbi5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBpbXByb3ZlbWVudCB0byB0aGUgUklTQy1WIEtWTSBNTVUsIHJpZ2h0PyBJdCdzIGFsbCBhYm91dCBpbXByb3ZpbmcgdGhlIGVmZmljaWVuY3kgYW5kIGZsZXhpYmlsaXR5IG9mIHRob3NlIG1hcHBpbmdzLiBUaGUgcXVlc3Rpb24gbm93IGlzOiBpcyB0aGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBXZWxsLCB5ZXMsIEtWTSBvbiBSSVNDLVYgaXMgdGVzdGFibGUgaW4gUUVNVSwgZWl0aGVyIHdpdGggbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9yIGp1c3QgcGxhaW4gS1ZNIG9uIFJJU0MtVi4gU28gaXQgc2hvdWxkIGJlIHRlc3RhYmxlLlxuXG5IYW5nIG9uLi4uIGRvZXNuJ3Qgc3l6a2FsbGVyIHN1cHBvcnQgUklTQy1WIEtWTT8gWWVzLCBpdCBkb2VzLCBpZiBpdCdzIGNvbmZpZ3VyZWQuIE9rYXksIGxldCdzIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb25zIGluIHBsYWNlIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBwYXRjaCB3aXRoIHN5emthbGxlci5cblxuTGV0J3Mgc3RhcnQgd2l0aCB0aGUgYmFzaWNzLiBgQ09ORklHX0tWTWAgaXMgZGVmaW5pdGVseSBuZWVkZWQsIHRoYXQncyBhIGdpdmVuLiBOZXh0LCBsZXQncyBkaXZlIGludG8gYGFyY2gvcmlzY3Yva3ZtL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODc1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6NTY6MzAuNjI4OTE4NDc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTMyNjM3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzo1NjozMS4wOTQyNTEyMzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTQ1NTUzOTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gUklTQy1WIE1NVSBQZXJmb3JtYW5jZSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYENPTkZJR19LVk1gIGlzIGRlZmluaXRlbHkgaW4gcGxheSBoZXJlLiBNeSBpbml0aWFsIGZvY3VzIGhhcyB0byBiZSBvbiBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSByZWxldmFudCwgZ2l2ZW4gdGhlIG1vZGlmaWNhdGlvbnMuIExldCdzIHNlZS4uLiBJJ3ZlIGdvdCBga3ZtX3Jpc2N2X21tdV9tYXBgLCBgcGZubWFwX21hcHBpbmdfc2l6ZWAsIGBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nYCwgYW5kIGB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3RgIGZsYWdnZWQuXG5cbk5vdywgYGt2bV9yaXNjdl9tbXVfbWFwYCBpcyBhIHBvdGVudGlhbCBob3RzcG90IOKAkyBpdCdzIGRlZmluaXRlbHkgaW52b2x2ZWQgd2l0aCBwYWdlIGZhdWx0cywgc28gaXQgY291bGQgYmUgcGVyZm9ybWFuY2UtY3JpdGljYWwsIGJ1dCBpdCdzIGFsc28gdGhlIG1haW4gZnVuY3Rpb24gdGhhdCdzIG1vZGlmaWVkLCBtYWtpbmcgaXQgYSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0LCBzbyBJJ2xsIGtlZXAgdGhhdCBpbiBtaW5kLiBUaGUgbmV3IGZ1bmN0aW9uLCBgcGZubWFwX21hcHBpbmdfc2l6ZWAsIGNhdGNoZXMgbXkgYXR0ZW50aW9uIGltbWVkaWF0ZWx5IGFzIHdlbGwsIGFuZCBgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZ2AgaXMgYW5vdGhlciBvbmUgdGhhdCBuZWVkcyBhIGNsb3NlciBsb29rLCBnaXZlbiBpdCdzIGFsc28gY2hhbmdlZC5cblxuSSB3YW50IHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIHNvIEknbSBnb2luZyB0byBoYXZlIGEgbG9vayBhdCBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLiBJJ20gZ29pbmcgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyLCBnaXZlbiB0aGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDczNSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzo1NjozNi42Mzk4MDgwMzVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MjAwMjQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fcmlzY3ZfbW11X21hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9tbXUuYz00NDA9c3RhdGljIHVuc2lnbmVkIGxvbmcgcGZubWFwX21hcHBpbmdfc2l6ZShzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy00NTAtXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NDUxOmludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNDUyLVxcdFxcdCAgICAgIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIGJvb2wgaXNfd3JpdGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA3OjU2OjM4LjMxMTgxNzcwM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzAxMjg0MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlRyYWNpbmcgdGhlIFVzYWdlIG9mIGBrdm1fcmlzY3ZfbW11X21hcGAqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgYGt2bV9yaXNjdl9tbXVfbWFwYCBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBJdCdzIGNydWNpYWwgdG8gZ3Jhc3AgdGhlIGNvbnRleHQgb2YgaXRzIGNhbGxzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGJlaGF2aW9yIHdpdGhpbiB0aGUgS1ZNL1JJU0MtViBhcmNoaXRlY3R1cmUuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaC4gTGV0J3Mgc2VlIGlmIEkgY2FuIHVzZSBteSBkZWJ1Z2dpbmcgdG9vbHMgdG8gZmlndXJlIHRoaXMgb3V0IHF1aWNrbHkuIEkgd2FudCB0byBzZWUgaWYgaXQncyBpbnZvbHZlZCBpbiB2aXJ0dWFsIGFkZHJlc3MgdHJhbnNsYXRpb24sIG1lbW9yeSBtYW5hZ2VtZW50LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gRmluZGluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYW5kIGRhdGEgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mzg4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6NTY6NDEuNDgxOTQ5MDVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NDY3MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9yaXNjdl9tbXVfbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9tbXUuYz00NDA9c3RhdGljIHVuc2lnbmVkIGxvbmcgcGZubWFwX21hcHBpbmdfc2l6ZShzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy00NTAtXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NDUxOmludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNDUyLVxcdFxcdCAgICAgIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIGJvb2wgaXNfd3JpdGUsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X2V4aXQuYz0xNT1zdGF0aWMgaW50IGdzdGFnZV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bixcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jLTQ1LVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jOjQ2OlxcdHJldCA9IGt2bV9yaXNjdl9tbXVfbWFwKHZjcHUsIG1lbXNsb3QsIGZhdWx0X2FkZHIsIGh2YSxcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X2V4aXQuYy00Ny1cXHRcXHRcXHRcXHQodHJhcC1cXHUwMDNlc2NhdXNlID09IEVYQ19TVE9SRV9HVUVTVF9QQUdFX0ZBVUxUKSA/IHRydWUgOiBmYWxzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6NTY6NDEuNjI4NDIyNzA5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIwMDY1NjY1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJJU0MtViBLVk0gTU1VIFBhdGNoKipcblxuT2theSwgc28gYGt2bV9yaXNjdl9tbXVfbWFwYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgZ3N0YWdlX3BhZ2VfZmF1bHRgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGxvb2tpbmcgYXQgYSBwYWdlIGZhdWx0IGhhbmRsZXIsIHdoaWNoLCB3aGlsZSBwb3RlbnRpYWxseSBob3QgY29kZSwgaXMgKnRoZSogY29yZSBsb2dpYyBmb3IgdGhpcyBnc3RhZ2UgZmVhdHVyZS4gV2UgbmVlZCB0byB6ZXJvIGluIG9uIHRoaXMgbG9naWMuIFRoZSBrZXkgZnVuY3Rpb25zIHRvIGRpc3NlY3QgYXJlIGRlZmluaXRlbHkgYHBmbm1hcF9tYXBwaW5nX3NpemVgLCBgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZ2AsIGB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3RgLCBhbmQgb2YgY291cnNlLCBga3ZtX3Jpc2N2X21tdV9tYXBgIGl0c2VsZi5cblxuVGhlIGZhY3QgdGhhdCB0aGlzIGlzIFJJU0MtViBzcGVjaWZpYyBpcyBjcnVjaWFsLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBSSVNDLVYgS1ZNIE1NVS4gVGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBzaWduaWZpY2FudCBtb2RpZmljYXRpb24gaGVyZS5cblxuQXMgZm9yIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcywgYENPTkZJR19LVk1gIGlzIHRoZSBvYnZpb3VzIG9uZSwgd2hpY2ggd2Uga25ldy4gSG93ZXZlciwgdGhlIG1lbnRpb24gb2YgYHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdGAgbWFrZXMgbWUgd29uZGVyIGFib3V0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBFdmVuIHRob3VnaCB0aGUgbmV3IGZ1bmN0aW9uLCBgcGZubWFwX21hcHBpbmdfc2l6ZWAsIHNlZW1zIHRvIGJlIG1vcmUgY2VudHJhbCB0byB0aGlzIHBhdGNoLiBMZXQncyBkaWcgaW50byB3aGV0aGVyIGBwZm5tYXBfbWFwcGluZ19zaXplYCBpdHNlbGYgaGFzIGFueSBoaWRkZW4gY29uZmlnIGRlcGVuZGVuY2llcy4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MjcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6NTY6NDYuODI5MDgxNTY4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTE2OTM3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGZubWFwX21hcHBpbmdfc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9tbXUuYz0zOTc9c3RhdGljIHVuc2lnbmVkIGxvbmcgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTQzOS0gKi9cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo0NDA6c3RhdGljIHVuc2lnbmVkIGxvbmcgcGZubWFwX21hcHBpbmdfc2l6ZShzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNDQxLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM9NDUxPWludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy00OTgtXFx0ZWxzZSBpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1BGTk1BUClcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo0OTk6XFx0XFx0dm1hX3BhZ2VzaXplID0gcGZubWFwX21hcHBpbmdfc2l6ZShrdm0sIG1lbXNsb3QsIGh2YSk7XFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNTAwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzo1Njo0Ny4yNDA3ODIxNDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgxMjI5Mzg4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSSVNDLVYgS1ZNIFBhdGNoKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBpdCBzZWVtcyB0aGUgb25seSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBmbGFnIGlzIGBLVk1gIGl0c2VsZi4gSSBpbml0aWFsbHkgdGhvdWdodCB0aGVyZSBtaWdodCBiZSBhIGRlcGVuZGVuY3kgb24gc29tZXRoaW5nIGxpa2UgYFZNX1BGTk1BUGAsIGJ1dCB0aGF0J3MgdXNlZCBmb3IgZGV2aWNlIG1lbW9yeSBtYXBwaW5n4oCUdGhpbmsgVkZJTyBpbiB0aGlzIGNvbnRleHQuIEFuZCB3aGlsZSBWRklPIG1pZ2h0ICp0cmlnZ2VyKiB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb25hbGl0eSwgdGhlIHBhdGNoIGl0c2VsZiByZXNpZGVzIHdpdGhpbiB0aGUgS1ZNIGNvcmUuIFNvLCB5ZWFoLCBgS1ZNYCBpcyB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uLlxuXG5MZXQgbWUgcmVmcmVzaCBvbiB0aGUgcmVsZXZhbnQgc3ltYm9scyBhZ2Fpbi4uLiBgcGZubWFwX21hcHBpbmdfc2l6ZWAsIGBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nYCwgYW5kIGBrdm1fcmlzY3ZfbW11X21hcGAuIFJpZ2h0LCBJJ20gd2l0aCBpdC4gVGhlIHBhdGNoIGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgdGhlIFJJU0MtViBLVk0gTU1VIGhhbmRsZXMgaHVnZSBtYXBwaW5ncyBmb3IgYFZNX1BGTk1BUGAgZmF1bHRzLCB3aGljaCBpcyBwcmVjaXNlbHkgaG93IHdlIGRlYWwgd2l0aCBob3N0IGRldmljZSBNTUlPLiBJdCBhZGRzIHRoaXMgbmV3IGBwZm5tYXBfbWFwcGluZ19zaXplYCBmdW5jdGlvbiBhbmQgdHdlYWtzIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nIGluIGBrdm1fcmlzY3ZfbW11X21hcGAuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gdG8gdGhlIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgd2UgdG91Y2ggcXVpdGUgb2Z0ZW4uXG5cbkFscmlnaHQsIEknbSBzYXRpc2ZpZWQuIExldCdzIGNhbGwgdGhpcyBzZXQgYXMgcmVzb2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MDEsIk91dHB1dFRva2VucyI6MTQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA3OjU2OjUzLjA1MzA3ODY2M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5OTkyOTI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGZubWFwX21hcHBpbmdfc2l6ZVwiLFxuICAgIFwiZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZ1wiLFxuICAgIFwia3ZtX3Jpc2N2X21tdV9tYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViBLVk0gTU1VIHRvIHN1cHBvcnQgaHVnZSBtYXBwaW5ncyBmb3IgVk1fUEZOTUFQIGZhdWx0cyAoZS5nLiwgaG9zdCBkZXZpY2UgTU1JTykuIEl0IGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYHBmbm1hcF9tYXBwaW5nX3NpemVgIGFuZCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBpbiBga3ZtX3Jpc2N2X21tdV9tYXBgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBmbm1hcF9tYXBwaW5nX3NpemVcIixcbiAgICBcImZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmdcIixcbiAgICBcImt2bV9yaXNjdl9tbXVfbWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBSSVNDLVYgS1ZNIE1NVSB0byBzdXBwb3J0IGh1Z2UgbWFwcGluZ3MgZm9yIFZNX1BGTk1BUCBmYXVsdHMgKGUuZy4sIGhvc3QgZGV2aWNlIE1NSU8pLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBwZm5tYXBfbWFwcGluZ19zaXplYCBhbmQgbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbG9naWMgaW4gYGt2bV9yaXNjdl9tbXVfbWFwYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowbpwc6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-13 07:37:17 +0000 UTC FinishedAt: 2026-07-13 07:56:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "adea84ee6cdea611146c4251d3c1616f5a09feca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "adea84ee6cdea611146c4251d3c1616f5a09feca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "083a4c86-6101-4522-ba18-cb9ccffbbf92" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "pfnmap_mapping_size", "fault_supports_gstage_huge_mapping", "kvm_riscv_mmu_map" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEzIDA3OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Bmbm1hcF9tYXBwaW5nX3NpemUmIzM0OywKICAgICYjMzQ7ZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfbW11X21hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViBLVk0gTU1VIHRvIHN1cHBvcnQgaHVnZSBtYXBwaW5ncyBmb3IgVk1fUEZOTUFQIGZhdWx0cyAoZS5nLiwgaG9zdCBkZXZpY2UgTU1JTykuIEl0IGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYHBmbm1hcF9tYXBwaW5nX3NpemVgIGFuZCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBpbiBga3ZtX3Jpc2N2X21tdV9tYXBgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA3OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTAwY2JjMmFjNWViMjYyNjUzMDJhN2ZjYmI3Mzc2ZWE3NzcxYmE5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDA3OjU2OjAwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcbmluZGV4IDJkM2RlZjAyNDI3MGMwLi41M2ZiMzRkNGI3NmQwOSAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuQEAgLTE2LDYgJiM0MzsxNiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbmFjbC5oXHUwMDNlXG4gXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3RyYWNlLmhcJiMzNDtcbiYjNDM7XG4gc3RhdGljIHZvaWQgbW11X3dwX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBpbnQgc2xvdClcbiB7XG4gXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cyA9IGt2bV9tZW1zbG90cyhrdm0pO1xuQEAgLTI4Niw3ICYjNDM7Mjg4LDcgQEAgYm9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuIH1cbiBcbiBzdGF0aWMgYm9vbCBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4tXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGh2YSlcbiYjNDM7XHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGh2YSwgdW5zaWduZWQgbG9uZyBtYXBfc2l6ZSlcbiB7XG4gXHRodmFfdCB1YWRkcl9zdGFydCwgdWFkZHJfZW5kO1xuIFx0Z3BhX3QgZ3BhX3N0YXJ0O1xuQEAgLTMyMSw3ICYjNDM7MzIzLDcgQEAgc3RhdGljIGJvb2wgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuIFx0ICogICBlIC1cdTAwM2UgZ1xuIFx0ICogICBmIC1cdTAwM2UgaFxuIFx0ICovXG4tXHRpZiAoKGdwYV9zdGFydCBcdTAwMjYgKFBNRF9TSVpFIC0gMSkpICE9ICh1YWRkcl9zdGFydCBcdTAwMjYgKFBNRF9TSVpFIC0gMSkpKVxuJiM0MztcdGlmICgoZ3BhX3N0YXJ0IFx1MDAyNiAobWFwX3NpemUgLSAxKSkgIT0gKHVhZGRyX3N0YXJ0IFx1MDAyNiAobWFwX3NpemUgLSAxKSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qXG5AQCAtMzM2LDcgJiM0MzszMzgsNyBAQCBzdGF0aWMgYm9vbCBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4gXHQgKiB1c2Vyc3BhY2VfYWRkciBvciB0aGUgYmFzZV9nZm4sIGFzIGJvdGggYXJlIGVxdWFsbHkgYWxpZ25lZCAocGVyXG4gXHQgKiB0aGUgY2hlY2sgYWJvdmUpIGFuZCBlcXVhbGx5IHNpemVkLlxuIFx0ICovXG4tXHRyZXR1cm4gKGh2YSBcdTAwM2U9IEFMSUdOKHVhZGRyX3N0YXJ0LCBQTURfU0laRSkpIFx1MDAyNlx1MDAyNiAoaHZhIFx1MDAzYyBBTElHTl9ET1dOKHVhZGRyX2VuZCwgUE1EX1NJWkUpKTtcbiYjNDM7XHRyZXR1cm4gKGh2YSBcdTAwM2U9IEFMSUdOKHVhZGRyX3N0YXJ0LCBtYXBfc2l6ZSkpIFx1MDAyNlx1MDAyNiAoaHZhIFx1MDAzYyBBTElHTl9ET1dOKHVhZGRyX2VuZCwgbWFwX3NpemUpKTtcbiB9XG4gXG4gc3RhdGljIGludCBnZXRfaHZhX21hcHBpbmdfc2l6ZShzdHJ1Y3Qga3ZtICprdm0sXG5AQCAtNDA0LDcgJiM0Mzs0MDYsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3Qoc3RydWN0IGt2bSAqa3ZtLFxuIFx0ICogc3VyZSB0aGF0IHRoZSBIVkEgYW5kIEdQQSBhcmUgc3VmZmljaWVudGx5IGFsaWduZWQgYW5kIHRoYXQgdGhlXG4gXHQgKiBibG9jayBtYXAgaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgbWVtc2xvdC5cbiBcdCAqL1xuLVx0aWYgKGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcobWVtc2xvdCwgaHZhKSkge1xuJiM0MztcdGlmIChmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKG1lbXNsb3QsIGh2YSwgUE1EX1NJWkUpKSB7XG4gXHRcdGludCBzejtcbiBcbiBcdFx0c3ogPSBnZXRfaHZhX21hcHBpbmdfc2l6ZShrdm0sIGh2YSk7XG5AQCAtNDIxLDYgJiM0Mzs0MjMsMzEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KHN0cnVjdCBrdm0gKmt2bSxcbiBcdHJldHVybiBQQUdFX1NJWkU7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBEZXRlcm1pbmUgdGhlIEctc3RhZ2UgbWFwcGluZyBzaXplIGZvciBhIFZNX1BGTk1BUCAoZS5nLiBob3N0IGRldmljZVxuJiM0MzsgKiBNTUlPKSBmYXVsdC4gIFVubGlrZSBhcm02NCYjMzk7cyBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiwgd2UgbmV2ZXIgZGVyaXZlIHRoZVxuJiM0MzsgKiBob3N0IHBoeXNpY2FsIGFkZHJlc3MgZnJvbSB2bWEtXHUwMDNldm1fcGdvZmYgKHdoaWNoIGlzIHVucmVsaWFibGUgc2luY2UgdGhlXG4mIzQzOyAqIFZGSU8gdW5tYXBfbWFwcGluZ19yYW5nZSgpIGNoYW5nZXMpLiAgSW5zdGVhZCB3ZSB3YWxrIHRoZSBob3N0IHBhZ2UgdGFibGVzXG4mIzQzOyAqIHZpYSBnZXRfaHZhX21hcHBpbmdfc2l6ZSgpOiBpZiB0aGUgaG9zdCBpdHNlbGYgaW5zdGFsbGVkIGEgbGVhZiBibG9jayBmb3JcbiYjNDM7ICogdGhpcyBhZGRyZXNzLCBwaHlzaWNhbCBjb250aWd1aXR5IHdpdGhpbiB0aGF0IGJsb2NrIGlzIGFscmVhZHkgZ3VhcmFudGVlZFxuJiM0MzsgKiBieSB0aGUgaG9zdCBtbS4gIFRoZSBtZW1vcnkgdHlwZSBzdGF5cyBjb3JyZWN0IGJlY2F1c2UgUklTQy1WIGRlcml2ZXMgaXRcbiYjNDM7ICogZnJvbSB0aGUgcGh5c2ljYWwgYWRkcmVzcyYjMzk7IFBNQSwgaW5kZXBlbmRlbnQgb2YgdGhlIEctc3RhZ2UgUFRFIHNpemUuXG4mIzQzOyAqXG4mIzQzOyAqIEJlIGNvbnNlcnZhdGl2ZSBmb3Igbm93IGFuZCBvbmx5IHByb21vdGUgdG8gUE1ELXNpemVkIGJsb2NrczsgUFVELXNpemVkXG4mIzQzOyAqIGRldmljZSBibG9ja3MgYXJlIGxlZnQgYXMgZnV0dXJlIHdvcmsuICBGYWxsIGJhY2sgdG8gUEFHRV9TSVpFIHdoZW5ldmVyXG4mIzQzOyAqIGNvbnRpZ3VpdHkgb3IgSFZBL0dQQSBhbGlnbm1lbnQgY2Fubm90IGJlIHByb3Zlbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHBmbm1hcF9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4mIzQzO1x0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBodmEpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZ2V0X2h2YV9tYXBwaW5nX3NpemUoa3ZtLCBodmEpIFx1MDAzZT0gUE1EX1NJWkUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcobWVtc2xvdCwgaHZhLCBQTURfU0laRSkpXG4mIzQzO1x0XHRyZXR1cm4gUE1EX1NJWkU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBQQUdFX1NJWkU7XG4mIzQzO31cbiYjNDM7XG4gaW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbiBcdFx0ICAgICAgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgYm9vbCBpc193cml0ZSxcbiBcdFx0ICAgICAgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyAqb3V0X21hcClcbkBAIC00NjUsMTEgJiM0Mzs0OTIsMTQgQEAgaW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbiBcdGVsc2VcbiBcdFx0dm1hX3BhZ2VzaGlmdCA9IFBBR0VfU0hJRlQ7XG4gXHR2bWFfcGFnZXNpemUgPSAxVUxMIFx1MDAzY1x1MDAzYyB2bWFfcGFnZXNoaWZ0O1xuLVx0aWYgKGxvZ2dpbmcgfHwgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUEZOTUFQKSlcbiYjNDM7XG4mIzQzO1x0aWYgKGxvZ2dpbmcpXG4gXHRcdHZtYV9wYWdlc2l6ZSA9IFBBR0VfU0laRTtcbiYjNDM7XHRlbHNlIGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1BGTk1BUClcbiYjNDM7XHRcdHZtYV9wYWdlc2l6ZSA9IHBmbm1hcF9tYXBwaW5nX3NpemUoa3ZtLCBtZW1zbG90LCBodmEpO1xuIFxuIFx0aWYgKHZtYV9wYWdlc2l6ZSA9PSBQTURfU0laRSB8fCB2bWFfcGFnZXNpemUgPT0gUFVEX1NJWkUpXG4tXHRcdGdmbiA9IChncGEgXHUwMDI2IGh1Z2VfcGFnZV9tYXNrKGhzdGF0ZV92bWEodm1hKSkpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdFx0Z2ZuID0gKGdwYSBcdTAwMjYgfih2bWFfcGFnZXNpemUgLSAxKSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXG4gXHQvKlxuIFx0ICogUmVhZCBtbXVfaW52YWxpZGF0ZV9zZXEgc28gdGhhdCBLVk0gY2FuIGRldGVjdCBpZiB0aGUgcmVzdWx0cyBvZlxuQEAgLTUxNSw2ICYjNDM7NTQ1LDkgQEAgaW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbiBcdGlmICghbG9nZ2luZyBcdTAwMjZcdTAwMjYgKHZtYV9wYWdlc2l6ZSA9PSBQQUdFX1NJWkUpKVxuIFx0XHR2bWFfcGFnZXNpemUgPSB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3Qoa3ZtLCBtZW1zbG90LCBodmEsIFx1MDAyNmhmbiwgXHUwMDI2Z3BhKTtcbiBcbiYjNDM7XHR0cmFjZV9rdm1fbW11X21hcChncGEsIGh2YSwgaGZuLCB2bWFfcGFnZXNpemUsXG4mIzQzO1x0XHRcdCAgISEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9QRk5NQVApKTtcbiYjNDM7XG4gXHRpZiAod3JpdGFibGUpIHtcbiBcdFx0bWFya19wYWdlX2RpcnR5X2luX3Nsb3Qoa3ZtLCBtZW1zbG90LCBnZm4pO1xuIFx0XHRyZXQgPSBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKFx1MDAyNmdzdGFnZSwgcGNhY2hlLCBncGEsIGhmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS90cmFjZS5oIGIvYXJjaC9yaXNjdi9rdm0vdHJhY2UuaFxuaW5kZXggM2Q1NDE3NWQ4MDVjYmMuLmRiMmQyOGYxZDcxNDgzIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdHJhY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vdHJhY2UuaFxuQEAgLTU2LDYgJiM0Mzs1NiwzNSBAQCBUUkFDRV9FVkVOVChrdm1fZXhpdCxcbiBcdFx0X19lbnRyeS1cdTAwM2VodGluc3QpXG4gKTtcbiBcbiYjNDM7VFJBQ0VfRVZFTlQoa3ZtX21tdV9tYXAsXG4mIzQzO1x0VFBfUFJPVE8odW5zaWduZWQgbG9uZyBncGEsIHVuc2lnbmVkIGxvbmcgaHZhLCB1bnNpZ25lZCBsb25nIGhmbixcbiYjNDM7XHRcdCB1bnNpZ25lZCBsb25nIG1hcF9zaXplLCBib29sIGlzX3Bmbm1hcCksXG4mIzQzO1x0VFBfQVJHUyhncGEsIGh2YSwgaGZuLCBtYXBfc2l6ZSwgaXNfcGZubWFwKSxcbiYjNDM7XG4mIzQzO1x0VFBfU1RSVUNUX19lbnRyeShcbiYjNDM7XHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgZ3BhKVxuJiM0MztcdFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBodmEpXG4mIzQzO1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGhmbilcbiYjNDM7XHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbWFwX3NpemUpXG4mIzQzO1x0XHRfX2ZpZWxkKGJvb2wsIGlzX3Bmbm1hcClcbiYjNDM7XHQpLFxuJiM0MztcbiYjNDM7XHRUUF9mYXN0X2Fzc2lnbihcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlZ3BhXHRcdD0gZ3BhO1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VodmFcdFx0PSBodmE7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWhmblx0XHQ9IGhmbjtcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbWFwX3NpemVcdD0gbWFwX3NpemU7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWlzX3Bmbm1hcFx0PSBpc19wZm5tYXA7XG4mIzQzO1x0KSxcbiYjNDM7XG4mIzQzO1x0VFBfcHJpbnRrKFwmIzM0O0dQQToweCVseCwgSFZBOjB4JWx4LCBIRk46MHglbHgsIHNpemU6JWx1S0IsIHBmbm1hcDolZFwmIzM0OyxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlZ3BhLFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VodmEsXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWhmbixcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlbWFwX3NpemUgXHUwMDNlXHUwMDNlIDEwLFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2Vpc19wZm5tYXApXG4mIzQzOyk7XG4mIzQzO1xuICNlbmRpZiAvKiBfVFJBQ0VfUlNJQ1ZfS1ZNX0ggKi9cbiBcbiAjdW5kZWYgVFJBQ0VfSU5DTFVERV9QQVRIXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGZubWFwX21hcHBpbmdfc2l6ZSYjMzQ7LAogICAgJiMzNDtmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nJiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9tbXVfbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgUklTQy1WIEtWTSBNTVUgdG8gc3VwcG9ydCBodWdlIG1hcHBpbmdzIGZvciBWTV9QRk5NQVAgZmF1bHRzIChlLmcuLCBob3N0IGRldmljZSBNTUlPKS4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgcGZubWFwX21hcHBpbmdfc2l6ZWAgYW5kIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nIGxvZ2ljIGluIGBrdm1fcmlzY3ZfbW11X21hcGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgY29yZSBLVk0gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEwMGNiYzJhYzVlYjI2MjY1MzAyYTdmY2JiNzM3NmVhNzc3MWJhOWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAxMyAwNzo1NjowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jIGIvYXJjaC9yaXNjdi9rdm0vbW11LmMKaW5kZXggMmQzZGVmMDI0MjcwYzAuLjUzZmIzNGQ0Yjc2ZDA5IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuYwpAQCAtMTYsNiAmIzQzOzE2LDggQEAKICNpbmNsdWRlICZsdDthc20va3ZtX21tdS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm1fbmFjbC5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJiMzNDt0cmFjZS5oJiMzNDsKJiM0MzsKIHN0YXRpYyB2b2lkIG1tdV93cF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IHNsb3QpCiB7CiAJc3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHMgPSBrdm1fbWVtc2xvdHMoa3ZtKTsKQEAgLTI4Niw3ICYjNDM7Mjg4LDcgQEAgYm9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKQogfQogCiBzdGF0aWMgYm9vbCBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGh2YSkKJiM0MzsJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGh2YSwgdW5zaWduZWQgbG9uZyBtYXBfc2l6ZSkKIHsKIAlodmFfdCB1YWRkcl9zdGFydCwgdWFkZHJfZW5kOwogCWdwYV90IGdwYV9zdGFydDsKQEAgLTMyMSw3ICYjNDM7MzIzLDcgQEAgc3RhdGljIGJvb2wgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LAogCSAqICAgZSAtJmd0OyBnCiAJICogICBmIC0mZ3Q7IGgKIAkgKi8KLQlpZiAoKGdwYV9zdGFydCAmYW1wOyAoUE1EX1NJWkUgLSAxKSkgIT0gKHVhZGRyX3N0YXJ0ICZhbXA7IChQTURfU0laRSAtIDEpKSkKJiM0MzsJaWYgKChncGFfc3RhcnQgJmFtcDsgKG1hcF9zaXplIC0gMSkpICE9ICh1YWRkcl9zdGFydCAmYW1wOyAobWFwX3NpemUgLSAxKSkpCiAJCXJldHVybiBmYWxzZTsKIAogCS8qCkBAIC0zMzYsNyAmIzQzOzMzOCw3IEBAIHN0YXRpYyBib29sIGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCwKIAkgKiB1c2Vyc3BhY2VfYWRkciBvciB0aGUgYmFzZV9nZm4sIGFzIGJvdGggYXJlIGVxdWFsbHkgYWxpZ25lZCAocGVyCiAJICogdGhlIGNoZWNrIGFib3ZlKSBhbmQgZXF1YWxseSBzaXplZC4KIAkgKi8KLQlyZXR1cm4gKGh2YSAmZ3Q7PSBBTElHTih1YWRkcl9zdGFydCwgUE1EX1NJWkUpKSAmYW1wOyZhbXA7IChodmEgJmx0OyBBTElHTl9ET1dOKHVhZGRyX2VuZCwgUE1EX1NJWkUpKTsKJiM0MzsJcmV0dXJuIChodmEgJmd0Oz0gQUxJR04odWFkZHJfc3RhcnQsIG1hcF9zaXplKSkgJmFtcDsmYW1wOyAoaHZhICZsdDsgQUxJR05fRE9XTih1YWRkcl9lbmQsIG1hcF9zaXplKSk7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X2h2YV9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLApAQCAtNDA0LDcgJiM0Mzs0MDYsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3Qoc3RydWN0IGt2bSAqa3ZtLAogCSAqIHN1cmUgdGhhdCB0aGUgSFZBIGFuZCBHUEEgYXJlIHN1ZmZpY2llbnRseSBhbGlnbmVkIGFuZCB0aGF0IHRoZQogCSAqIGJsb2NrIG1hcCBpcyBjb250YWluZWQgd2l0aGluIHRoZSBtZW1zbG90LgogCSAqLwotCWlmIChmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKG1lbXNsb3QsIGh2YSkpIHsKJiM0MzsJaWYgKGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcobWVtc2xvdCwgaHZhLCBQTURfU0laRSkpIHsKIAkJaW50IHN6OwogCiAJCXN6ID0gZ2V0X2h2YV9tYXBwaW5nX3NpemUoa3ZtLCBodmEpOwpAQCAtNDIxLDYgJiM0Mzs0MjMsMzEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KHN0cnVjdCBrdm0gKmt2bSwKIAlyZXR1cm4gUEFHRV9TSVpFOwogfQogCiYjNDM7LyoKJiM0MzsgKiBEZXRlcm1pbmUgdGhlIEctc3RhZ2UgbWFwcGluZyBzaXplIGZvciBhIFZNX1BGTk1BUCAoZS5nLiBob3N0IGRldmljZQomIzQzOyAqIE1NSU8pIGZhdWx0LiAgVW5saWtlIGFybTY0JiMzOTtzIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uLCB3ZSBuZXZlciBkZXJpdmUgdGhlCiYjNDM7ICogaG9zdCBwaHlzaWNhbCBhZGRyZXNzIGZyb20gdm1hLSZndDt2bV9wZ29mZiAod2hpY2ggaXMgdW5yZWxpYWJsZSBzaW5jZSB0aGUKJiM0MzsgKiBWRklPIHVubWFwX21hcHBpbmdfcmFuZ2UoKSBjaGFuZ2VzKS4gIEluc3RlYWQgd2Ugd2FsayB0aGUgaG9zdCBwYWdlIHRhYmxlcwomIzQzOyAqIHZpYSBnZXRfaHZhX21hcHBpbmdfc2l6ZSgpOiBpZiB0aGUgaG9zdCBpdHNlbGYgaW5zdGFsbGVkIGEgbGVhZiBibG9jayBmb3IKJiM0MzsgKiB0aGlzIGFkZHJlc3MsIHBoeXNpY2FsIGNvbnRpZ3VpdHkgd2l0aGluIHRoYXQgYmxvY2sgaXMgYWxyZWFkeSBndWFyYW50ZWVkCiYjNDM7ICogYnkgdGhlIGhvc3QgbW0uICBUaGUgbWVtb3J5IHR5cGUgc3RheXMgY29ycmVjdCBiZWNhdXNlIFJJU0MtViBkZXJpdmVzIGl0CiYjNDM7ICogZnJvbSB0aGUgcGh5c2ljYWwgYWRkcmVzcyYjMzk7IFBNQSwgaW5kZXBlbmRlbnQgb2YgdGhlIEctc3RhZ2UgUFRFIHNpemUuCiYjNDM7ICoKJiM0MzsgKiBCZSBjb25zZXJ2YXRpdmUgZm9yIG5vdyBhbmQgb25seSBwcm9tb3RlIHRvIFBNRC1zaXplZCBibG9ja3M7IFBVRC1zaXplZAomIzQzOyAqIGRldmljZSBibG9ja3MgYXJlIGxlZnQgYXMgZnV0dXJlIHdvcmsuICBGYWxsIGJhY2sgdG8gUEFHRV9TSVpFIHdoZW5ldmVyCiYjNDM7ICogY29udGlndWl0eSBvciBIVkEvR1BBIGFsaWdubWVudCBjYW5ub3QgYmUgcHJvdmVuLgomIzQzOyAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHBmbm1hcF9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLAomIzQzOwkJCQkJIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsCiYjNDM7CQkJCQkgdW5zaWduZWQgbG9uZyBodmEpCiYjNDM7ewomIzQzOwlpZiAoZ2V0X2h2YV9tYXBwaW5nX3NpemUoa3ZtLCBodmEpICZndDs9IFBNRF9TSVpFICZhbXA7JmFtcDsKJiM0MzsJICAgIGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcobWVtc2xvdCwgaHZhLCBQTURfU0laRSkpCiYjNDM7CQlyZXR1cm4gUE1EX1NJWkU7CiYjNDM7CiYjNDM7CXJldHVybiBQQUdFX1NJWkU7CiYjNDM7fQomIzQzOwogaW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCwKIAkJICAgICAgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgYm9vbCBpc193cml0ZSwKIAkJICAgICAgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyAqb3V0X21hcCkKQEAgLTQ2NSwxMSAmIzQzOzQ5MiwxNCBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LAogCWVsc2UKIAkJdm1hX3BhZ2VzaGlmdCA9IFBBR0VfU0hJRlQ7CiAJdm1hX3BhZ2VzaXplID0gMVVMTCAmbHQ7Jmx0OyB2bWFfcGFnZXNoaWZ0OwotCWlmIChsb2dnaW5nIHx8ICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1BGTk1BUCkpCiYjNDM7CiYjNDM7CWlmIChsb2dnaW5nKQogCQl2bWFfcGFnZXNpemUgPSBQQUdFX1NJWkU7CiYjNDM7CWVsc2UgaWYgKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fUEZOTUFQKQomIzQzOwkJdm1hX3BhZ2VzaXplID0gcGZubWFwX21hcHBpbmdfc2l6ZShrdm0sIG1lbXNsb3QsIGh2YSk7CiAKIAlpZiAodm1hX3BhZ2VzaXplID09IFBNRF9TSVpFIHx8IHZtYV9wYWdlc2l6ZSA9PSBQVURfU0laRSkKLQkJZ2ZuID0gKGdwYSAmYW1wOyBodWdlX3BhZ2VfbWFzayhoc3RhdGVfdm1hKHZtYSkpKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwkJZ2ZuID0gKGdwYSAmYW1wOyB+KHZtYV9wYWdlc2l6ZSAtIDEpKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwogCiAJLyoKIAkgKiBSZWFkIG1tdV9pbnZhbGlkYXRlX3NlcSBzbyB0aGF0IEtWTSBjYW4gZGV0ZWN0IGlmIHRoZSByZXN1bHRzIG9mCkBAIC01MTUsNiAmIzQzOzU0NSw5IEBAIGludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsCiAJaWYgKCFsb2dnaW5nICZhbXA7JmFtcDsgKHZtYV9wYWdlc2l6ZSA9PSBQQUdFX1NJWkUpKQogCQl2bWFfcGFnZXNpemUgPSB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3Qoa3ZtLCBtZW1zbG90LCBodmEsICZhbXA7aGZuLCAmYW1wO2dwYSk7CiAKJiM0MzsJdHJhY2Vfa3ZtX21tdV9tYXAoZ3BhLCBodmEsIGhmbiwgdm1hX3BhZ2VzaXplLAomIzQzOwkJCSAgISEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9QRk5NQVApKTsKJiM0MzsKIAlpZiAod3JpdGFibGUpIHsKIAkJbWFya19wYWdlX2RpcnR5X2luX3Nsb3Qoa3ZtLCBtZW1zbG90LCBnZm4pOwogCQlyZXQgPSBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKCZhbXA7Z3N0YWdlLCBwY2FjaGUsIGdwYSwgaGZuICZsdDsmbHQ7IFBBR0VfU0hJRlQsCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS90cmFjZS5oIGIvYXJjaC9yaXNjdi9rdm0vdHJhY2UuaAppbmRleCAzZDU0MTc1ZDgwNWNiYy4uZGIyZDI4ZjFkNzE0ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vdHJhY2UuaApAQCAtNTYsNiAmIzQzOzU2LDM1IEBAIFRSQUNFX0VWRU5UKGt2bV9leGl0LAogCQlfX2VudHJ5LSZndDtodGluc3QpCiApOwogCiYjNDM7VFJBQ0VfRVZFTlQoa3ZtX21tdV9tYXAsCiYjNDM7CVRQX1BST1RPKHVuc2lnbmVkIGxvbmcgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgdW5zaWduZWQgbG9uZyBoZm4sCiYjNDM7CQkgdW5zaWduZWQgbG9uZyBtYXBfc2l6ZSwgYm9vbCBpc19wZm5tYXApLAomIzQzOwlUUF9BUkdTKGdwYSwgaHZhLCBoZm4sIG1hcF9zaXplLCBpc19wZm5tYXApLAomIzQzOwomIzQzOwlUUF9TVFJVQ1RfX2VudHJ5KAomIzQzOwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBncGEpCiYjNDM7CQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGh2YSkKJiM0MzsJCV9fZmllbGQodW5zaWduZWQgbG9uZywgaGZuKQomIzQzOwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBtYXBfc2l6ZSkKJiM0MzsJCV9fZmllbGQoYm9vbCwgaXNfcGZubWFwKQomIzQzOwkpLAomIzQzOwomIzQzOwlUUF9mYXN0X2Fzc2lnbigKJiM0MzsJCV9fZW50cnktJmd0O2dwYQkJPSBncGE7CiYjNDM7CQlfX2VudHJ5LSZndDtodmEJCT0gaHZhOwomIzQzOwkJX19lbnRyeS0mZ3Q7aGZuCQk9IGhmbjsKJiM0MzsJCV9fZW50cnktJmd0O21hcF9zaXplCT0gbWFwX3NpemU7CiYjNDM7CQlfX2VudHJ5LSZndDtpc19wZm5tYXAJPSBpc19wZm5tYXA7CiYjNDM7CSksCiYjNDM7CiYjNDM7CVRQX3ByaW50aygmIzM0O0dQQToweCVseCwgSFZBOjB4JWx4LCBIRk46MHglbHgsIHNpemU6JWx1S0IsIHBmbm1hcDolZCYjMzQ7LAomIzQzOwkJX19lbnRyeS0mZ3Q7Z3BhLAomIzQzOwkJX19lbnRyeS0mZ3Q7aHZhLAomIzQzOwkJX19lbnRyeS0mZ3Q7aGZuLAomIzQzOwkJX19lbnRyeS0mZ3Q7bWFwX3NpemUgJmd0OyZndDsgMTAsCiYjNDM7CQlfX2VudHJ5LSZndDtpc19wZm5tYXApCiYjNDM7KTsKJiM0MzsKICNlbmRpZiAvKiBfVFJBQ0VfUlNJQ1ZfS1ZNX0ggKi8KIAogI3VuZGVmIFRSQUNFX0lOQ0xVREVfUEFUSAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODc1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUklTQy1WIEtWTSBNTVUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIFJJU0MtViBLVk0gY29kZSwgc3BlY2lmaWNhbGx5IGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AgYW5kIGBhcmNoL3Jpc2N2L2t2bS90cmFjZS5oYC4gSXQgYXBwZWFycyB0byBiZSByZWZpbmluZyBob3cgaHVnZSBtYXBwaW5ncyB3b3JrIHdoZW4gd2UgaGF2ZSBgVk1fUEZOTUFQYCBmYXVsdHMsIHRob3NlIHJlbGF0ZWQgdG8gaG9zdCBkZXZpY2UgTU1JTy4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGFib3V0IG9wdGltaXppbmcgdGhlIEctc3RhZ2UgbWFwcGluZyBzaXplIGRldGVybWluYXRpb24uIFRoZXkmIzM5O3ZlIGludHJvZHVjZWQgdGhpcyBgcGZubWFwX21hcHBpbmdfc2l6ZSgpYCBmdW5jdGlvbiwgYW5kIHRoZXkmIzM5O3ZlIG1vZGlmaWVkIHRoZSBgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZygpYCBmdW5jdGlvbiwgbWFraW5nIGl0IG1vcmUgZmxleGlibGUgYnkgdGFraW5nIGBtYXBfc2l6ZWAgYXMgYW4gYXJndW1lbnQgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgaGFyZGNvZGVkIHZhbHVlLiBUaGVuLCBga3ZtX3Jpc2N2X21tdV9tYXAoKWAgaGFzIGJlZW4gdXBkYXRlZCB0byBsZXZlcmFnZSB0aGUgYHBmbm1hcF9tYXBwaW5nX3NpemUoKWAgZnVuY3Rpb24gZm9yIGBWTV9QRk5NQVBgIHZtYXMuIFRoZXkmIzM5O3ZlIGV2ZW4gYWRkZWQgYSBga3ZtX21tdV9tYXBgIHRyYWNlcG9pbnQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyDigJMgYWx3YXlzIGEgZ29vZCBzaWduLgoKRnVuY3Rpb25hbGx5LCB0aGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBpbXByb3ZlbWVudCB0byB0aGUgUklTQy1WIEtWTSBNTVUsIHJpZ2h0PyBJdCYjMzk7cyBhbGwgYWJvdXQgaW1wcm92aW5nIHRoZSBlZmZpY2llbmN5IGFuZCBmbGV4aWJpbGl0eSBvZiB0aG9zZSBtYXBwaW5ncy4gVGhlIHF1ZXN0aW9uIG5vdyBpczogaXMgdGhpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gV2VsbCwgeWVzLCBLVk0gb24gUklTQy1WIGlzIHRlc3RhYmxlIGluIFFFTVUsIGVpdGhlciB3aXRoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvciBqdXN0IHBsYWluIEtWTSBvbiBSSVNDLVYuIFNvIGl0IHNob3VsZCBiZSB0ZXN0YWJsZS4KCkhhbmcgb24uLi4gZG9lc24mIzM5O3Qgc3l6a2FsbGVyIHN1cHBvcnQgUklTQy1WIEtWTT8gWWVzLCBpdCBkb2VzLCBpZiBpdCYjMzk7cyBjb25maWd1cmVkLiBPa2F5LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHdlIGhhdmUgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbnMgaW4gcGxhY2UgdG8gcHJvcGVybHkgdGVzdCB0aGlzIHBhdGNoIHdpdGggc3l6a2FsbGVyLgoKTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGJhc2ljcy4gYENPTkZJR19LVk1gIGlzIGRlZmluaXRlbHkgbmVlZGVkLCB0aGF0JiMzOTtzIGEgZ2l2ZW4uIE5leHQsIGxldCYjMzk7cyBkaXZlIGludG8gYGFyY2gvcmlzY3Yva3ZtL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzM1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gUklTQy1WIE1NVSBQZXJmb3JtYW5jZSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBDT05GSUdfS1ZNYCBpcyBkZWZpbml0ZWx5IGluIHBsYXkgaGVyZS4gTXkgaW5pdGlhbCBmb2N1cyBoYXMgdG8gYmUgb24gaWRlbnRpZnlpbmcgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQsIGdpdmVuIHRoZSBtb2RpZmljYXRpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGdvdCBga3ZtX3Jpc2N2X21tdV9tYXBgLCBgcGZubWFwX21hcHBpbmdfc2l6ZWAsIGBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nYCwgYW5kIGB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3RgIGZsYWdnZWQuCgpOb3csIGBrdm1fcmlzY3ZfbW11X21hcGAgaXMgYSBwb3RlbnRpYWwgaG90c3BvdCDigJMgaXQmIzM5O3MgZGVmaW5pdGVseSBpbnZvbHZlZCB3aXRoIHBhZ2UgZmF1bHRzLCBzbyBpdCBjb3VsZCBiZSBwZXJmb3JtYW5jZS1jcml0aWNhbCwgYnV0IGl0JiMzOTtzIGFsc28gdGhlIG1haW4gZnVuY3Rpb24gdGhhdCYjMzk7cyBtb2RpZmllZCwgbWFraW5nIGl0IGEgbmF0dXJhbCBwbGFjZSB0byBzdGFydCwgc28gSSYjMzk7bGwga2VlcCB0aGF0IGluIG1pbmQuIFRoZSBuZXcgZnVuY3Rpb24sIGBwZm5tYXBfbWFwcGluZ19zaXplYCwgY2F0Y2hlcyBteSBhdHRlbnRpb24gaW1tZWRpYXRlbHkgYXMgd2VsbCwgYW5kIGBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nYCBpcyBhbm90aGVyIG9uZSB0aGF0IG5lZWRzIGEgY2xvc2VyIGxvb2ssIGdpdmVuIGl0JiMzOTtzIGFsc28gY2hhbmdlZC4KCkkgd2FudCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLCBzbyBJJiMzOTttIGdvaW5nIHRvIGhhdmUgYSBsb29rIGF0IGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AuIEkmIzM5O20gZ29pbmcgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyLCBnaXZlbiB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fcmlzY3ZfbW11X21hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL21tdS5jPTQ0MD1zdGF0aWMgdW5zaWduZWQgbG9uZyBwZm5tYXBfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy00NTAtXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo0NTE6aW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTQ1Mi1cdFx0ICAgICAgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgYm9vbCBpc193cml0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mzg4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYGt2bV9yaXNjdl9tbXVfbWFwYCoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgYGt2bV9yaXNjdl9tbXVfbWFwYCBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBJdCYjMzk7cyBjcnVjaWFsIHRvIGdyYXNwIHRoZSBjb250ZXh0IG9mIGl0cyBjYWxscyB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBiZWhhdmlvciB3aXRoaW4gdGhlIEtWTS9SSVNDLVYgYXJjaGl0ZWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIHVzZSBteSBkZWJ1Z2dpbmcgdG9vbHMgdG8gZmlndXJlIHRoaXMgb3V0IHF1aWNrbHkuIEkgd2FudCB0byBzZWUgaWYgaXQmIzM5O3MgaW52b2x2ZWQgaW4gdmlydHVhbCBhZGRyZXNzIHRyYW5zbGF0aW9uLCBtZW1vcnkgbWFuYWdlbWVudCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIEZpbmRpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93IGFuZCBkYXRhIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoaXMgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fcmlzY3ZfbW11X21hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9tbXUuYz00NDA9c3RhdGljIHVuc2lnbmVkIGxvbmcgcGZubWFwX21hcHBpbmdfc2l6ZShzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNDUwLVxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NDUxOmludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy00NTItXHRcdCAgICAgIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIGJvb2wgaXNfd3JpdGUsXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9leGl0LmM9MTU9c3RhdGljIGludCBnc3RhZ2VfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4sXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9leGl0LmMtNDUtXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X2V4aXQuYzo0NjpcdHJldCA9IGt2bV9yaXNjdl9tbXVfbWFwKHZjcHUsIG1lbXNsb3QsIGZhdWx0X2FkZHIsIGh2YSxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jLTQ3LVx0XHRcdFx0KHRyYXAtXHUwMDNlc2NhdXNlID09IEVYQ19TVE9SRV9HVUVTVF9QQUdFX0ZBVUxUKSA/IHRydWUgOiBmYWxzZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTI3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUklTQy1WIEtWTSBNTVUgUGF0Y2gqKgoKT2theSwgc28gYGt2bV9yaXNjdl9tbXVfbWFwYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgZ3N0YWdlX3BhZ2VfZmF1bHRgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGFnZSBmYXVsdCBoYW5kbGVyLCB3aGljaCwgd2hpbGUgcG90ZW50aWFsbHkgaG90IGNvZGUsIGlzICp0aGUqIGNvcmUgbG9naWMgZm9yIHRoaXMgZ3N0YWdlIGZlYXR1cmUuIFdlIG5lZWQgdG8gemVybyBpbiBvbiB0aGlzIGxvZ2ljLiBUaGUga2V5IGZ1bmN0aW9ucyB0byBkaXNzZWN0IGFyZSBkZWZpbml0ZWx5IGBwZm5tYXBfbWFwcGluZ19zaXplYCwgYGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmdgLCBgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0YCwgYW5kIG9mIGNvdXJzZSwgYGt2bV9yaXNjdl9tbXVfbWFwYCBpdHNlbGYuCgpUaGUgZmFjdCB0aGF0IHRoaXMgaXMgUklTQy1WIHNwZWNpZmljIGlzIGNydWNpYWwuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBSSVNDLVYgS1ZNIE1NVS4gVGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9uIGhlcmUuCgpBcyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLCBgQ09ORklHX0tWTWAgaXMgdGhlIG9idmlvdXMgb25lLCB3aGljaCB3ZSBrbmV3LiBIb3dldmVyLCB0aGUgbWVudGlvbiBvZiBgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0YCBtYWtlcyBtZSB3b25kZXIgYWJvdXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEV2ZW4gdGhvdWdoIHRoZSBuZXcgZnVuY3Rpb24sIGBwZm5tYXBfbWFwcGluZ19zaXplYCwgc2VlbXMgdG8gYmUgbW9yZSBjZW50cmFsIHRvIHRoaXMgcGF0Y2guIExldCYjMzk7cyBkaWcgaW50byB3aGV0aGVyIGBwZm5tYXBfbWFwcGluZ19zaXplYCBpdHNlbGYgaGFzIGFueSBoaWRkZW4gY29uZmlnIGRlcGVuZGVuY2llcy4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Bmbm1hcF9tYXBwaW5nX3NpemUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9tbXUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9tbXUuYz0zOTc9c3RhdGljIHVuc2lnbmVkIGxvbmcgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy00MzktICovXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo0NDA6c3RhdGljIHVuc2lnbmVkIGxvbmcgcGZubWFwX21hcHBpbmdfc2l6ZShzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy00NDEtXHRcdFx0XHRcdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jPTQ1MT1pbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTQ5OC1cdGVsc2UgaWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUEZOTUFQKVxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NDk5Olx0XHR2bWFfcGFnZXNpemUgPSBwZm5tYXBfbWFwcGluZ19zaXplKGt2bSwgbWVtc2xvdCwgaHZhKTtcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTUwMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgwMQoJCQkJCQkJb3V0cHV0OiAxNDkKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUklTQy1WIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0IHNlZW1zIHRoZSBvbmx5IG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGZsYWcgaXMgYEtWTWAgaXRzZWxmLiBJIGluaXRpYWxseSB0aG91Z2h0IHRoZXJlIG1pZ2h0IGJlIGEgZGVwZW5kZW5jeSBvbiBzb21ldGhpbmcgbGlrZSBgVk1fUEZOTUFQYCwgYnV0IHRoYXQmIzM5O3MgdXNlZCBmb3IgZGV2aWNlIG1lbW9yeSBtYXBwaW5n4oCUdGhpbmsgVkZJTyBpbiB0aGlzIGNvbnRleHQuIEFuZCB3aGlsZSBWRklPIG1pZ2h0ICp0cmlnZ2VyKiB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb25hbGl0eSwgdGhlIHBhdGNoIGl0c2VsZiByZXNpZGVzIHdpdGhpbiB0aGUgS1ZNIGNvcmUuIFNvLCB5ZWFoLCBgS1ZNYCBpcyB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uLgoKTGV0IG1lIHJlZnJlc2ggb24gdGhlIHJlbGV2YW50IHN5bWJvbHMgYWdhaW4uLi4gYHBmbm1hcF9tYXBwaW5nX3NpemVgLCBgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZ2AsIGFuZCBga3ZtX3Jpc2N2X21tdV9tYXBgLiBSaWdodCwgSSYjMzk7bSB3aXRoIGl0LiBUaGUgcGF0Y2ggZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyB0aGUgUklTQy1WIEtWTSBNTVUgaGFuZGxlcyBodWdlIG1hcHBpbmdzIGZvciBgVk1fUEZOTUFQYCBmYXVsdHMsIHdoaWNoIGlzIHByZWNpc2VseSBob3cgd2UgZGVhbCB3aXRoIGhvc3QgZGV2aWNlIE1NSU8uIEl0IGFkZHMgdGhpcyBuZXcgYHBmbm1hcF9tYXBwaW5nX3NpemVgIGZ1bmN0aW9uIGFuZCB0d2Vha3MgdGhlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgaW4gYGt2bV9yaXNjdl9tbXVfbWFwYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB0byB0aGUgY29yZSBLVk0gbG9naWMgdGhhdCB3ZSB0b3VjaCBxdWl0ZSBvZnRlbi4KCkFscmlnaHQsIEkmIzM5O20gc2F0aXNmaWVkLiBMZXQmIzM5O3MgY2FsbCB0aGlzIHNldCBhcyByZXNvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Bmbm1hcF9tYXBwaW5nX3NpemUmIzM0OywKICAgICYjMzQ7ZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfbW11X21hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViBLVk0gTU1VIHRvIHN1cHBvcnQgaHVnZSBtYXBwaW5ncyBmb3IgVk1fUEZOTUFQIGZhdWx0cyAoZS5nLiwgaG9zdCBkZXZpY2UgTU1JTykuIEl0IGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYHBmbm1hcF9tYXBwaW5nX3NpemVgIGFuZCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBpbiBga3ZtX3Jpc2N2X21tdV9tYXBgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwZm5tYXBfbWFwcGluZ19zaXplJiMzNDssCiAgICAmIzM0O2ZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X21tdV9tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBSSVNDLVYgS1ZNIE1NVSB0byBzdXBwb3J0IGh1Z2UgbWFwcGluZ3MgZm9yIFZNX1BGTk1BUCBmYXVsdHMgKGUuZy4sIGhvc3QgZGV2aWNlIE1NSU8pLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBwZm5tYXBfbWFwcGluZ19zaXplYCBhbmQgbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbG9naWMgaW4gYGt2bV9yaXNjdl9tbXVfbWFwYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA3OjU2OjAxLjg4NzgxMjUxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE0NjUyMTU1OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGZubWFwX21hcHBpbmdfc2l6ZVwiLFxuICAgIFwiZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZ1wiLFxuICAgIFwia3ZtX3Jpc2N2X21tdV9tYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViBLVk0gTU1VIHRvIHN1cHBvcnQgaHVnZSBtYXBwaW5ncyBmb3IgVk1fUEZOTUFQIGZhdWx0cyAoZS5nLiwgaG9zdCBkZXZpY2UgTU1JTykuIEl0IGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYHBmbm1hcF9tYXBwaW5nX3NpemVgIGFuZCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBpbiBga3ZtX3Jpc2N2X21tdV9tYXBgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzo1NjowMS44ODc4MjEyNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEwNDYyMTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTAwY2JjMmFjNWViMjYyNjUzMDJhN2ZjYmI3Mzc2ZWE3NzcxYmE5Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAxMyAwNzo1NjowMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jXFxuaW5kZXggMmQzZGVmMDI0MjcwYzAuLjUzZmIzNGQ0Yjc2ZDA5IDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jXFxuKysrIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcXG5AQCAtMTYsNiArMTYsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9tbXUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fbmFjbC5oXFx1MDAzZVxcbiBcXG4rI2luY2x1ZGUgXFxcInRyYWNlLmhcXFwiXFxuK1xcbiBzdGF0aWMgdm9pZCBtbXVfd3BfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBzbG90KVxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzID0ga3ZtX21lbXNsb3RzKGt2bSk7XFxuQEAgLTI4Niw3ICsyODgsNyBAQCBib29sIGt2bV90ZXN0X2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgaHZhKVxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBodmEsIHVuc2lnbmVkIGxvbmcgbWFwX3NpemUpXFxuIHtcXG4gXFx0aHZhX3QgdWFkZHJfc3RhcnQsIHVhZGRyX2VuZDtcXG4gXFx0Z3BhX3QgZ3BhX3N0YXJ0O1xcbkBAIC0zMjEsNyArMzIzLDcgQEAgc3RhdGljIGJvb2wgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbiBcXHQgKiAgIGUgLVxcdTAwM2UgZ1xcbiBcXHQgKiAgIGYgLVxcdTAwM2UgaFxcbiBcXHQgKi9cXG4tXFx0aWYgKChncGFfc3RhcnQgXFx1MDAyNiAoUE1EX1NJWkUgLSAxKSkgIT0gKHVhZGRyX3N0YXJ0IFxcdTAwMjYgKFBNRF9TSVpFIC0gMSkpKVxcbitcXHRpZiAoKGdwYV9zdGFydCBcXHUwMDI2IChtYXBfc2l6ZSAtIDEpKSAhPSAodWFkZHJfc3RhcnQgXFx1MDAyNiAobWFwX3NpemUgLSAxKSkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdC8qXFxuQEAgLTMzNiw3ICszMzgsNyBAQCBzdGF0aWMgYm9vbCBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuIFxcdCAqIHVzZXJzcGFjZV9hZGRyIG9yIHRoZSBiYXNlX2dmbiwgYXMgYm90aCBhcmUgZXF1YWxseSBhbGlnbmVkIChwZXJcXG4gXFx0ICogdGhlIGNoZWNrIGFib3ZlKSBhbmQgZXF1YWxseSBzaXplZC5cXG4gXFx0ICovXFxuLVxcdHJldHVybiAoaHZhIFxcdTAwM2U9IEFMSUdOKHVhZGRyX3N0YXJ0LCBQTURfU0laRSkpIFxcdTAwMjZcXHUwMDI2IChodmEgXFx1MDAzYyBBTElHTl9ET1dOKHVhZGRyX2VuZCwgUE1EX1NJWkUpKTtcXG4rXFx0cmV0dXJuIChodmEgXFx1MDAzZT0gQUxJR04odWFkZHJfc3RhcnQsIG1hcF9zaXplKSkgXFx1MDAyNlxcdTAwMjYgKGh2YSBcXHUwMDNjIEFMSUdOX0RPV04odWFkZHJfZW5kLCBtYXBfc2l6ZSkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGdldF9odmFfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcXG5AQCAtNDA0LDcgKzQwNiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdChzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdCAqIHN1cmUgdGhhdCB0aGUgSFZBIGFuZCBHUEEgYXJlIHN1ZmZpY2llbnRseSBhbGlnbmVkIGFuZCB0aGF0IHRoZVxcbiBcXHQgKiBibG9jayBtYXAgaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgbWVtc2xvdC5cXG4gXFx0ICovXFxuLVxcdGlmIChmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKG1lbXNsb3QsIGh2YSkpIHtcXG4rXFx0aWYgKGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcobWVtc2xvdCwgaHZhLCBQTURfU0laRSkpIHtcXG4gXFx0XFx0aW50IHN6O1xcbiBcXG4gXFx0XFx0c3ogPSBnZXRfaHZhX21hcHBpbmdfc2l6ZShrdm0sIGh2YSk7XFxuQEAgLTQyMSw2ICs0MjMsMzEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0cmV0dXJuIFBBR0VfU0laRTtcXG4gfVxcbiBcXG4rLypcXG4rICogRGV0ZXJtaW5lIHRoZSBHLXN0YWdlIG1hcHBpbmcgc2l6ZSBmb3IgYSBWTV9QRk5NQVAgKGUuZy4gaG9zdCBkZXZpY2VcXG4rICogTU1JTykgZmF1bHQuICBVbmxpa2UgYXJtNjQncyBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiwgd2UgbmV2ZXIgZGVyaXZlIHRoZVxcbisgKiBob3N0IHBoeXNpY2FsIGFkZHJlc3MgZnJvbSB2bWEtXFx1MDAzZXZtX3Bnb2ZmICh3aGljaCBpcyB1bnJlbGlhYmxlIHNpbmNlIHRoZVxcbisgKiBWRklPIHVubWFwX21hcHBpbmdfcmFuZ2UoKSBjaGFuZ2VzKS4gIEluc3RlYWQgd2Ugd2FsayB0aGUgaG9zdCBwYWdlIHRhYmxlc1xcbisgKiB2aWEgZ2V0X2h2YV9tYXBwaW5nX3NpemUoKTogaWYgdGhlIGhvc3QgaXRzZWxmIGluc3RhbGxlZCBhIGxlYWYgYmxvY2sgZm9yXFxuKyAqIHRoaXMgYWRkcmVzcywgcGh5c2ljYWwgY29udGlndWl0eSB3aXRoaW4gdGhhdCBibG9jayBpcyBhbHJlYWR5IGd1YXJhbnRlZWRcXG4rICogYnkgdGhlIGhvc3QgbW0uICBUaGUgbWVtb3J5IHR5cGUgc3RheXMgY29ycmVjdCBiZWNhdXNlIFJJU0MtViBkZXJpdmVzIGl0XFxuKyAqIGZyb20gdGhlIHBoeXNpY2FsIGFkZHJlc3MnIFBNQSwgaW5kZXBlbmRlbnQgb2YgdGhlIEctc3RhZ2UgUFRFIHNpemUuXFxuKyAqXFxuKyAqIEJlIGNvbnNlcnZhdGl2ZSBmb3Igbm93IGFuZCBvbmx5IHByb21vdGUgdG8gUE1ELXNpemVkIGJsb2NrczsgUFVELXNpemVkXFxuKyAqIGRldmljZSBibG9ja3MgYXJlIGxlZnQgYXMgZnV0dXJlIHdvcmsuICBGYWxsIGJhY2sgdG8gUEFHRV9TSVpFIHdoZW5ldmVyXFxuKyAqIGNvbnRpZ3VpdHkgb3IgSFZBL0dQQSBhbGlnbm1lbnQgY2Fubm90IGJlIHByb3Zlbi5cXG4rICovXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBmbm1hcF9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcXG4rXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgaHZhKVxcbit7XFxuK1xcdGlmIChnZXRfaHZhX21hcHBpbmdfc2l6ZShrdm0sIGh2YSkgXFx1MDAzZT0gUE1EX1NJWkUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcobWVtc2xvdCwgaHZhLCBQTURfU0laRSkpXFxuK1xcdFxcdHJldHVybiBQTURfU0laRTtcXG4rXFxuK1xcdHJldHVybiBQQUdFX1NJWkU7XFxuK31cXG4rXFxuIGludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuIFxcdFxcdCAgICAgIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIGJvb2wgaXNfd3JpdGUsXFxuIFxcdFxcdCAgICAgIHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgKm91dF9tYXApXFxuQEAgLTQ2NSwxMSArNDkyLDE0IEBAIGludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuIFxcdGVsc2VcXG4gXFx0XFx0dm1hX3BhZ2VzaGlmdCA9IFBBR0VfU0hJRlQ7XFxuIFxcdHZtYV9wYWdlc2l6ZSA9IDFVTEwgXFx1MDAzY1xcdTAwM2Mgdm1hX3BhZ2VzaGlmdDtcXG4tXFx0aWYgKGxvZ2dpbmcgfHwgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9QRk5NQVApKVxcbitcXG4rXFx0aWYgKGxvZ2dpbmcpXFxuIFxcdFxcdHZtYV9wYWdlc2l6ZSA9IFBBR0VfU0laRTtcXG4rXFx0ZWxzZSBpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1BGTk1BUClcXG4rXFx0XFx0dm1hX3BhZ2VzaXplID0gcGZubWFwX21hcHBpbmdfc2l6ZShrdm0sIG1lbXNsb3QsIGh2YSk7XFxuIFxcbiBcXHRpZiAodm1hX3BhZ2VzaXplID09IFBNRF9TSVpFIHx8IHZtYV9wYWdlc2l6ZSA9PSBQVURfU0laRSlcXG4tXFx0XFx0Z2ZuID0gKGdwYSBcXHUwMDI2IGh1Z2VfcGFnZV9tYXNrKGhzdGF0ZV92bWEodm1hKSkpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdFxcdGdmbiA9IChncGEgXFx1MDAyNiB+KHZtYV9wYWdlc2l6ZSAtIDEpKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogUmVhZCBtbXVfaW52YWxpZGF0ZV9zZXEgc28gdGhhdCBLVk0gY2FuIGRldGVjdCBpZiB0aGUgcmVzdWx0cyBvZlxcbkBAIC01MTUsNiArNTQ1LDkgQEAgaW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcXG4gXFx0aWYgKCFsb2dnaW5nIFxcdTAwMjZcXHUwMDI2ICh2bWFfcGFnZXNpemUgPT0gUEFHRV9TSVpFKSlcXG4gXFx0XFx0dm1hX3BhZ2VzaXplID0gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KGt2bSwgbWVtc2xvdCwgaHZhLCBcXHUwMDI2aGZuLCBcXHUwMDI2Z3BhKTtcXG4gXFxuK1xcdHRyYWNlX2t2bV9tbXVfbWFwKGdwYSwgaHZhLCBoZm4sIHZtYV9wYWdlc2l6ZSxcXG4rXFx0XFx0XFx0ICAhISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fUEZOTUFQKSk7XFxuK1xcbiBcXHRpZiAod3JpdGFibGUpIHtcXG4gXFx0XFx0bWFya19wYWdlX2RpcnR5X2luX3Nsb3Qoa3ZtLCBtZW1zbG90LCBnZm4pO1xcbiBcXHRcXHRyZXQgPSBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKFxcdTAwMjZnc3RhZ2UsIHBjYWNoZSwgZ3BhLCBoZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdHJhY2UuaCBiL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmhcXG5pbmRleCAzZDU0MTc1ZDgwNWNiYy4uZGIyZDI4ZjFkNzE0ODMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdHJhY2UuaFxcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmhcXG5AQCAtNTYsNiArNTYsMzUgQEAgVFJBQ0VfRVZFTlQoa3ZtX2V4aXQsXFxuIFxcdFxcdF9fZW50cnktXFx1MDAzZWh0aW5zdClcXG4gKTtcXG4gXFxuK1RSQUNFX0VWRU5UKGt2bV9tbXVfbWFwLFxcbitcXHRUUF9QUk9UTyh1bnNpZ25lZCBsb25nIGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIHVuc2lnbmVkIGxvbmcgaGZuLFxcbitcXHRcXHQgdW5zaWduZWQgbG9uZyBtYXBfc2l6ZSwgYm9vbCBpc19wZm5tYXApLFxcbitcXHRUUF9BUkdTKGdwYSwgaHZhLCBoZm4sIG1hcF9zaXplLCBpc19wZm5tYXApLFxcbitcXG4rXFx0VFBfU1RSVUNUX19lbnRyeShcXG4rXFx0XFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBncGEpXFxuK1xcdFxcdF9fZmllbGQodW5zaWduZWQgbG9uZywgaHZhKVxcbitcXHRcXHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGhmbilcXG4rXFx0XFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBtYXBfc2l6ZSlcXG4rXFx0XFx0X19maWVsZChib29sLCBpc19wZm5tYXApXFxuK1xcdCksXFxuK1xcbitcXHRUUF9mYXN0X2Fzc2lnbihcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlZ3BhXFx0XFx0PSBncGE7XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZWh2YVxcdFxcdD0gaHZhO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VoZm5cXHRcXHQ9IGhmbjtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlbWFwX3NpemVcXHQ9IG1hcF9zaXplO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2Vpc19wZm5tYXBcXHQ9IGlzX3Bmbm1hcDtcXG4rXFx0KSxcXG4rXFxuK1xcdFRQX3ByaW50ayhcXFwiR1BBOjB4JWx4LCBIVkE6MHglbHgsIEhGTjoweCVseCwgc2l6ZTolbHVLQiwgcGZubWFwOiVkXFxcIixcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlZ3BhLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VodmEsXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZWhmbixcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlbWFwX3NpemUgXFx1MDAzZVxcdTAwM2UgMTAsXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZWlzX3Bmbm1hcClcXG4rKTtcXG4rXFxuICNlbmRpZiAvKiBfVFJBQ0VfUlNJQ1ZfS1ZNX0ggKi9cXG4gXFxuICN1bmRlZiBUUkFDRV9JTkNMVURFX1BBVEhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6NTY6MDIuNTAxNDIxMTg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDg1MTU5MjE0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwZm5tYXBfbWFwcGluZ19zaXplXCIsXG4gICAgXCJmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nXCIsXG4gICAgXCJrdm1fcmlzY3ZfbW11X21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgUklTQy1WIEtWTSBNTVUgdG8gc3VwcG9ydCBodWdlIG1hcHBpbmdzIGZvciBWTV9QRk5NQVAgZmF1bHRzIChlLmcuLCBob3N0IGRldmljZSBNTUlPKS4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgcGZubWFwX21hcHBpbmdfc2l6ZWAgYW5kIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nIGxvZ2ljIGluIGBrdm1fcmlzY3ZfbW11X21hcGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgY29yZSBLVk0gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTAwY2JjMmFjNWViMjYyNjUzMDJhN2ZjYmI3Mzc2ZWE3NzcxYmE5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDA3OjU2OjAwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbW11LmMgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuaW5kZXggMmQzZGVmMDI0MjcwYzAuLjUzZmIzNGQ0Yjc2ZDA5IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vbW11LmNcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG5AQCAtMTYsNiArMTYsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX25hY2wuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFwidHJhY2UuaFwiXG4rXG4gc3RhdGljIHZvaWQgbW11X3dwX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBpbnQgc2xvdClcbiB7XG4gXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cyA9IGt2bV9tZW1zbG90cyhrdm0pO1xuQEAgLTI4Niw3ICsyODgsNyBAQCBib29sIGt2bV90ZXN0X2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4gfVxuIFxuIHN0YXRpYyBib29sIGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbi1cdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgaHZhKVxuK1x0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBodmEsIHVuc2lnbmVkIGxvbmcgbWFwX3NpemUpXG4ge1xuIFx0aHZhX3QgdWFkZHJfc3RhcnQsIHVhZGRyX2VuZDtcbiBcdGdwYV90IGdwYV9zdGFydDtcbkBAIC0zMjEsNyArMzIzLDcgQEAgc3RhdGljIGJvb2wgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuIFx0ICogICBlIC1cdTAwM2UgZ1xuIFx0ICogICBmIC1cdTAwM2UgaFxuIFx0ICovXG4tXHRpZiAoKGdwYV9zdGFydCBcdTAwMjYgKFBNRF9TSVpFIC0gMSkpICE9ICh1YWRkcl9zdGFydCBcdTAwMjYgKFBNRF9TSVpFIC0gMSkpKVxuK1x0aWYgKChncGFfc3RhcnQgXHUwMDI2IChtYXBfc2l6ZSAtIDEpKSAhPSAodWFkZHJfc3RhcnQgXHUwMDI2IChtYXBfc2l6ZSAtIDEpKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0LypcbkBAIC0zMzYsNyArMzM4LDcgQEAgc3RhdGljIGJvb2wgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuIFx0ICogdXNlcnNwYWNlX2FkZHIgb3IgdGhlIGJhc2VfZ2ZuLCBhcyBib3RoIGFyZSBlcXVhbGx5IGFsaWduZWQgKHBlclxuIFx0ICogdGhlIGNoZWNrIGFib3ZlKSBhbmQgZXF1YWxseSBzaXplZC5cbiBcdCAqL1xuLVx0cmV0dXJuIChodmEgXHUwMDNlPSBBTElHTih1YWRkcl9zdGFydCwgUE1EX1NJWkUpKSBcdTAwMjZcdTAwMjYgKGh2YSBcdTAwM2MgQUxJR05fRE9XTih1YWRkcl9lbmQsIFBNRF9TSVpFKSk7XG4rXHRyZXR1cm4gKGh2YSBcdTAwM2U9IEFMSUdOKHVhZGRyX3N0YXJ0LCBtYXBfc2l6ZSkpIFx1MDAyNlx1MDAyNiAoaHZhIFx1MDAzYyBBTElHTl9ET1dOKHVhZGRyX2VuZCwgbWFwX3NpemUpKTtcbiB9XG4gXG4gc3RhdGljIGludCBnZXRfaHZhX21hcHBpbmdfc2l6ZShzdHJ1Y3Qga3ZtICprdm0sXG5AQCAtNDA0LDcgKzQwNiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdChzdHJ1Y3Qga3ZtICprdm0sXG4gXHQgKiBzdXJlIHRoYXQgdGhlIEhWQSBhbmQgR1BBIGFyZSBzdWZmaWNpZW50bHkgYWxpZ25lZCBhbmQgdGhhdCB0aGVcbiBcdCAqIGJsb2NrIG1hcCBpcyBjb250YWluZWQgd2l0aGluIHRoZSBtZW1zbG90LlxuIFx0ICovXG4tXHRpZiAoZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhtZW1zbG90LCBodmEpKSB7XG4rXHRpZiAoZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhtZW1zbG90LCBodmEsIFBNRF9TSVpFKSkge1xuIFx0XHRpbnQgc3o7XG4gXG4gXHRcdHN6ID0gZ2V0X2h2YV9tYXBwaW5nX3NpemUoa3ZtLCBodmEpO1xuQEAgLTQyMSw2ICs0MjMsMzEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KHN0cnVjdCBrdm0gKmt2bSxcbiBcdHJldHVybiBQQUdFX1NJWkU7XG4gfVxuIFxuKy8qXG4rICogRGV0ZXJtaW5lIHRoZSBHLXN0YWdlIG1hcHBpbmcgc2l6ZSBmb3IgYSBWTV9QRk5NQVAgKGUuZy4gaG9zdCBkZXZpY2VcbisgKiBNTUlPKSBmYXVsdC4gIFVubGlrZSBhcm02NCdzIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uLCB3ZSBuZXZlciBkZXJpdmUgdGhlXG4rICogaG9zdCBwaHlzaWNhbCBhZGRyZXNzIGZyb20gdm1hLVx1MDAzZXZtX3Bnb2ZmICh3aGljaCBpcyB1bnJlbGlhYmxlIHNpbmNlIHRoZVxuKyAqIFZGSU8gdW5tYXBfbWFwcGluZ19yYW5nZSgpIGNoYW5nZXMpLiAgSW5zdGVhZCB3ZSB3YWxrIHRoZSBob3N0IHBhZ2UgdGFibGVzXG4rICogdmlhIGdldF9odmFfbWFwcGluZ19zaXplKCk6IGlmIHRoZSBob3N0IGl0c2VsZiBpbnN0YWxsZWQgYSBsZWFmIGJsb2NrIGZvclxuKyAqIHRoaXMgYWRkcmVzcywgcGh5c2ljYWwgY29udGlndWl0eSB3aXRoaW4gdGhhdCBibG9jayBpcyBhbHJlYWR5IGd1YXJhbnRlZWRcbisgKiBieSB0aGUgaG9zdCBtbS4gIFRoZSBtZW1vcnkgdHlwZSBzdGF5cyBjb3JyZWN0IGJlY2F1c2UgUklTQy1WIGRlcml2ZXMgaXRcbisgKiBmcm9tIHRoZSBwaHlzaWNhbCBhZGRyZXNzJyBQTUEsIGluZGVwZW5kZW50IG9mIHRoZSBHLXN0YWdlIFBURSBzaXplLlxuKyAqXG4rICogQmUgY29uc2VydmF0aXZlIGZvciBub3cgYW5kIG9ubHkgcHJvbW90ZSB0byBQTUQtc2l6ZWQgYmxvY2tzOyBQVUQtc2l6ZWRcbisgKiBkZXZpY2UgYmxvY2tzIGFyZSBsZWZ0IGFzIGZ1dHVyZSB3b3JrLiAgRmFsbCBiYWNrIHRvIFBBR0VfU0laRSB3aGVuZXZlclxuKyAqIGNvbnRpZ3VpdHkgb3IgSFZBL0dQQSBhbGlnbm1lbnQgY2Fubm90IGJlIHByb3Zlbi5cbisgKi9cbitzdGF0aWMgdW5zaWduZWQgbG9uZyBwZm5tYXBfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHRcdFx0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4rXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGh2YSlcbit7XG4rXHRpZiAoZ2V0X2h2YV9tYXBwaW5nX3NpemUoa3ZtLCBodmEpIFx1MDAzZT0gUE1EX1NJWkUgXHUwMDI2XHUwMDI2XG4rXHQgICAgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhtZW1zbG90LCBodmEsIFBNRF9TSVpFKSlcbitcdFx0cmV0dXJuIFBNRF9TSVpFO1xuK1xuK1x0cmV0dXJuIFBBR0VfU0laRTtcbit9XG4rXG4gaW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbiBcdFx0ICAgICAgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgYm9vbCBpc193cml0ZSxcbiBcdFx0ICAgICAgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyAqb3V0X21hcClcbkBAIC00NjUsMTEgKzQ5MiwxNCBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuIFx0ZWxzZVxuIFx0XHR2bWFfcGFnZXNoaWZ0ID0gUEFHRV9TSElGVDtcbiBcdHZtYV9wYWdlc2l6ZSA9IDFVTEwgXHUwMDNjXHUwMDNjIHZtYV9wYWdlc2hpZnQ7XG4tXHRpZiAobG9nZ2luZyB8fCAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9QRk5NQVApKVxuK1xuK1x0aWYgKGxvZ2dpbmcpXG4gXHRcdHZtYV9wYWdlc2l6ZSA9IFBBR0VfU0laRTtcbitcdGVsc2UgaWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUEZOTUFQKVxuK1x0XHR2bWFfcGFnZXNpemUgPSBwZm5tYXBfbWFwcGluZ19zaXplKGt2bSwgbWVtc2xvdCwgaHZhKTtcbiBcbiBcdGlmICh2bWFfcGFnZXNpemUgPT0gUE1EX1NJWkUgfHwgdm1hX3BhZ2VzaXplID09IFBVRF9TSVpFKVxuLVx0XHRnZm4gPSAoZ3BhIFx1MDAyNiBodWdlX3BhZ2VfbWFzayhoc3RhdGVfdm1hKHZtYSkpKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcdFx0Z2ZuID0gKGdwYSBcdTAwMjYgfih2bWFfcGFnZXNpemUgLSAxKSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXG4gXHQvKlxuIFx0ICogUmVhZCBtbXVfaW52YWxpZGF0ZV9zZXEgc28gdGhhdCBLVk0gY2FuIGRldGVjdCBpZiB0aGUgcmVzdWx0cyBvZlxuQEAgLTUxNSw2ICs1NDUsOSBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuIFx0aWYgKCFsb2dnaW5nIFx1MDAyNlx1MDAyNiAodm1hX3BhZ2VzaXplID09IFBBR0VfU0laRSkpXG4gXHRcdHZtYV9wYWdlc2l6ZSA9IHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdChrdm0sIG1lbXNsb3QsIGh2YSwgXHUwMDI2aGZuLCBcdTAwMjZncGEpO1xuIFxuK1x0dHJhY2Vfa3ZtX21tdV9tYXAoZ3BhLCBodmEsIGhmbiwgdm1hX3BhZ2VzaXplLFxuK1x0XHRcdCAgISEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9QRk5NQVApKTtcbitcbiBcdGlmICh3cml0YWJsZSkge1xuIFx0XHRtYXJrX3BhZ2VfZGlydHlfaW5fc2xvdChrdm0sIG1lbXNsb3QsIGdmbik7XG4gXHRcdHJldCA9IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UoXHUwMDI2Z3N0YWdlLCBwY2FjaGUsIGdwYSwgaGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmggYi9hcmNoL3Jpc2N2L2t2bS90cmFjZS5oXG5pbmRleCAzZDU0MTc1ZDgwNWNiYy4uZGIyZDI4ZjFkNzE0ODMgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS90cmFjZS5oXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS90cmFjZS5oXG5AQCAtNTYsNiArNTYsMzUgQEAgVFJBQ0VfRVZFTlQoa3ZtX2V4aXQsXG4gXHRcdF9fZW50cnktXHUwMDNlaHRpbnN0KVxuICk7XG4gXG4rVFJBQ0VfRVZFTlQoa3ZtX21tdV9tYXAsXG4rXHRUUF9QUk9UTyh1bnNpZ25lZCBsb25nIGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIHVuc2lnbmVkIGxvbmcgaGZuLFxuK1x0XHQgdW5zaWduZWQgbG9uZyBtYXBfc2l6ZSwgYm9vbCBpc19wZm5tYXApLFxuK1x0VFBfQVJHUyhncGEsIGh2YSwgaGZuLCBtYXBfc2l6ZSwgaXNfcGZubWFwKSxcbitcbitcdFRQX1NUUlVDVF9fZW50cnkoXG4rXHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgZ3BhKVxuK1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGh2YSlcbitcdFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBoZm4pXG4rXHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbWFwX3NpemUpXG4rXHRcdF9fZmllbGQoYm9vbCwgaXNfcGZubWFwKVxuK1x0KSxcbitcbitcdFRQX2Zhc3RfYXNzaWduKFxuK1x0XHRfX2VudHJ5LVx1MDAzZWdwYVx0XHQ9IGdwYTtcbitcdFx0X19lbnRyeS1cdTAwM2VodmFcdFx0PSBodmE7XG4rXHRcdF9fZW50cnktXHUwMDNlaGZuXHRcdD0gaGZuO1xuK1x0XHRfX2VudHJ5LVx1MDAzZW1hcF9zaXplXHQ9IG1hcF9zaXplO1xuK1x0XHRfX2VudHJ5LVx1MDAzZWlzX3Bmbm1hcFx0PSBpc19wZm5tYXA7XG4rXHQpLFxuK1xuK1x0VFBfcHJpbnRrKFwiR1BBOjB4JWx4LCBIVkE6MHglbHgsIEhGTjoweCVseCwgc2l6ZTolbHVLQiwgcGZubWFwOiVkXCIsXG4rXHRcdF9fZW50cnktXHUwMDNlZ3BhLFxuK1x0XHRfX2VudHJ5LVx1MDAzZWh2YSxcbitcdFx0X19lbnRyeS1cdTAwM2VoZm4sXG4rXHRcdF9fZW50cnktXHUwMDNlbWFwX3NpemUgXHUwMDNlXHUwMDNlIDEwLFxuK1x0XHRfX2VudHJ5LVx1MDAzZWlzX3Bmbm1hcClcbispO1xuK1xuICNlbmRpZiAvKiBfVFJBQ0VfUlNJQ1ZfS1ZNX0ggKi9cbiBcbiAjdW5kZWYgVFJBQ0VfSU5DTFVERV9QQVRIXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzo1NjowMi41MDE0Mjc4ODVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODEyNzQ4ODA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJJU0MtViBLVk0gTU1VIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgUklTQy1WIEtWTSBjb2RlLCBzcGVjaWZpY2FsbHkgYGFyY2gvcmlzY3Yva3ZtL21tdS5jYCBhbmQgYGFyY2gvcmlzY3Yva3ZtL3RyYWNlLmhgLiBJdCBhcHBlYXJzIHRvIGJlIHJlZmluaW5nIGhvdyBodWdlIG1hcHBpbmdzIHdvcmsgd2hlbiB3ZSBoYXZlIGBWTV9QRk5NQVBgIGZhdWx0cywgdGhvc2UgcmVsYXRlZCB0byBob3N0IGRldmljZSBNTUlPLiBFc3NlbnRpYWxseSwgaXQncyBhYm91dCBvcHRpbWl6aW5nIHRoZSBHLXN0YWdlIG1hcHBpbmcgc2l6ZSBkZXRlcm1pbmF0aW9uLiBUaGV5J3ZlIGludHJvZHVjZWQgdGhpcyBgcGZubWFwX21hcHBpbmdfc2l6ZSgpYCBmdW5jdGlvbiwgYW5kIHRoZXkndmUgbW9kaWZpZWQgdGhlIGBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKClgIGZ1bmN0aW9uLCBtYWtpbmcgaXQgbW9yZSBmbGV4aWJsZSBieSB0YWtpbmcgYG1hcF9zaXplYCBhcyBhbiBhcmd1bWVudCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gYSBoYXJkY29kZWQgdmFsdWUuIFRoZW4sIGBrdm1fcmlzY3ZfbW11X21hcCgpYCBoYXMgYmVlbiB1cGRhdGVkIHRvIGxldmVyYWdlIHRoZSBgcGZubWFwX21hcHBpbmdfc2l6ZSgpYCBmdW5jdGlvbiBmb3IgYFZNX1BGTk1BUGAgdm1hcy4gVGhleSd2ZSBldmVuIGFkZGVkIGEgYGt2bV9tbXVfbWFwYCB0cmFjZXBvaW50IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMg4oCTIGFsd2F5cyBhIGdvb2Qgc2lnbi5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBpbXByb3ZlbWVudCB0byB0aGUgUklTQy1WIEtWTSBNTVUsIHJpZ2h0PyBJdCdzIGFsbCBhYm91dCBpbXByb3ZpbmcgdGhlIGVmZmljaWVuY3kgYW5kIGZsZXhpYmlsaXR5IG9mIHRob3NlIG1hcHBpbmdzLiBUaGUgcXVlc3Rpb24gbm93IGlzOiBpcyB0aGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBXZWxsLCB5ZXMsIEtWTSBvbiBSSVNDLVYgaXMgdGVzdGFibGUgaW4gUUVNVSwgZWl0aGVyIHdpdGggbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9yIGp1c3QgcGxhaW4gS1ZNIG9uIFJJU0MtVi4gU28gaXQgc2hvdWxkIGJlIHRlc3RhYmxlLlxuXG5IYW5nIG9uLi4uIGRvZXNuJ3Qgc3l6a2FsbGVyIHN1cHBvcnQgUklTQy1WIEtWTT8gWWVzLCBpdCBkb2VzLCBpZiBpdCdzIGNvbmZpZ3VyZWQuIE9rYXksIGxldCdzIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb25zIGluIHBsYWNlIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBwYXRjaCB3aXRoIHN5emthbGxlci5cblxuTGV0J3Mgc3RhcnQgd2l0aCB0aGUgYmFzaWNzLiBgQ09ORklHX0tWTWAgaXMgZGVmaW5pdGVseSBuZWVkZWQsIHRoYXQncyBhIGdpdmVuLiBOZXh0LCBsZXQncyBkaXZlIGludG8gYGFyY2gvcmlzY3Yva3ZtL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODc1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6NTY6MzAuNjI4OTE4NDc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTMyNjM3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzo1NjozMS4wOTQyNTEyMzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTQ1NTUzOTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gUklTQy1WIE1NVSBQZXJmb3JtYW5jZSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYENPTkZJR19LVk1gIGlzIGRlZmluaXRlbHkgaW4gcGxheSBoZXJlLiBNeSBpbml0aWFsIGZvY3VzIGhhcyB0byBiZSBvbiBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSByZWxldmFudCwgZ2l2ZW4gdGhlIG1vZGlmaWNhdGlvbnMuIExldCdzIHNlZS4uLiBJJ3ZlIGdvdCBga3ZtX3Jpc2N2X21tdV9tYXBgLCBgcGZubWFwX21hcHBpbmdfc2l6ZWAsIGBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nYCwgYW5kIGB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3RgIGZsYWdnZWQuXG5cbk5vdywgYGt2bV9yaXNjdl9tbXVfbWFwYCBpcyBhIHBvdGVudGlhbCBob3RzcG90IOKAkyBpdCdzIGRlZmluaXRlbHkgaW52b2x2ZWQgd2l0aCBwYWdlIGZhdWx0cywgc28gaXQgY291bGQgYmUgcGVyZm9ybWFuY2UtY3JpdGljYWwsIGJ1dCBpdCdzIGFsc28gdGhlIG1haW4gZnVuY3Rpb24gdGhhdCdzIG1vZGlmaWVkLCBtYWtpbmcgaXQgYSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0LCBzbyBJJ2xsIGtlZXAgdGhhdCBpbiBtaW5kLiBUaGUgbmV3IGZ1bmN0aW9uLCBgcGZubWFwX21hcHBpbmdfc2l6ZWAsIGNhdGNoZXMgbXkgYXR0ZW50aW9uIGltbWVkaWF0ZWx5IGFzIHdlbGwsIGFuZCBgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZ2AgaXMgYW5vdGhlciBvbmUgdGhhdCBuZWVkcyBhIGNsb3NlciBsb29rLCBnaXZlbiBpdCdzIGFsc28gY2hhbmdlZC5cblxuSSB3YW50IHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUsIHNvIEknbSBnb2luZyB0byBoYXZlIGEgbG9vayBhdCBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLiBJJ20gZ29pbmcgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyLCBnaXZlbiB0aGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDczNSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzo1NjozNi42Mzk4MDgwMzVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MjAwMjQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fcmlzY3ZfbW11X21hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9tbXUuYz00NDA9c3RhdGljIHVuc2lnbmVkIGxvbmcgcGZubWFwX21hcHBpbmdfc2l6ZShzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy00NTAtXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NDUxOmludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNDUyLVxcdFxcdCAgICAgIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIGJvb2wgaXNfd3JpdGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA3OjU2OjM4LjMxMTgxNzcwM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzAxMjg0MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlRyYWNpbmcgdGhlIFVzYWdlIG9mIGBrdm1fcmlzY3ZfbW11X21hcGAqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgYGt2bV9yaXNjdl9tbXVfbWFwYCBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBJdCdzIGNydWNpYWwgdG8gZ3Jhc3AgdGhlIGNvbnRleHQgb2YgaXRzIGNhbGxzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGJlaGF2aW9yIHdpdGhpbiB0aGUgS1ZNL1JJU0MtViBhcmNoaXRlY3R1cmUuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaC4gTGV0J3Mgc2VlIGlmIEkgY2FuIHVzZSBteSBkZWJ1Z2dpbmcgdG9vbHMgdG8gZmlndXJlIHRoaXMgb3V0IHF1aWNrbHkuIEkgd2FudCB0byBzZWUgaWYgaXQncyBpbnZvbHZlZCBpbiB2aXJ0dWFsIGFkZHJlc3MgdHJhbnNsYXRpb24sIG1lbW9yeSBtYW5hZ2VtZW50LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gRmluZGluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYW5kIGRhdGEgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mzg4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6NTY6NDEuNDgxOTQ5MDVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NDY3MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9yaXNjdl9tbXVfbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9tbXUuYz00NDA9c3RhdGljIHVuc2lnbmVkIGxvbmcgcGZubWFwX21hcHBpbmdfc2l6ZShzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy00NTAtXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NDUxOmludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNDUyLVxcdFxcdCAgICAgIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIGJvb2wgaXNfd3JpdGUsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X2V4aXQuYz0xNT1zdGF0aWMgaW50IGdzdGFnZV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bixcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jLTQ1LVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jOjQ2OlxcdHJldCA9IGt2bV9yaXNjdl9tbXVfbWFwKHZjcHUsIG1lbXNsb3QsIGZhdWx0X2FkZHIsIGh2YSxcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X2V4aXQuYy00Ny1cXHRcXHRcXHRcXHQodHJhcC1cXHUwMDNlc2NhdXNlID09IEVYQ19TVE9SRV9HVUVTVF9QQUdFX0ZBVUxUKSA/IHRydWUgOiBmYWxzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6NTY6NDEuNjI4NDIyNzA5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIwMDY1NjY1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJJU0MtViBLVk0gTU1VIFBhdGNoKipcblxuT2theSwgc28gYGt2bV9yaXNjdl9tbXVfbWFwYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgZ3N0YWdlX3BhZ2VfZmF1bHRgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGxvb2tpbmcgYXQgYSBwYWdlIGZhdWx0IGhhbmRsZXIsIHdoaWNoLCB3aGlsZSBwb3RlbnRpYWxseSBob3QgY29kZSwgaXMgKnRoZSogY29yZSBsb2dpYyBmb3IgdGhpcyBnc3RhZ2UgZmVhdHVyZS4gV2UgbmVlZCB0byB6ZXJvIGluIG9uIHRoaXMgbG9naWMuIFRoZSBrZXkgZnVuY3Rpb25zIHRvIGRpc3NlY3QgYXJlIGRlZmluaXRlbHkgYHBmbm1hcF9tYXBwaW5nX3NpemVgLCBgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZ2AsIGB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3RgLCBhbmQgb2YgY291cnNlLCBga3ZtX3Jpc2N2X21tdV9tYXBgIGl0c2VsZi5cblxuVGhlIGZhY3QgdGhhdCB0aGlzIGlzIFJJU0MtViBzcGVjaWZpYyBpcyBjcnVjaWFsLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBSSVNDLVYgS1ZNIE1NVS4gVGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBzaWduaWZpY2FudCBtb2RpZmljYXRpb24gaGVyZS5cblxuQXMgZm9yIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcywgYENPTkZJR19LVk1gIGlzIHRoZSBvYnZpb3VzIG9uZSwgd2hpY2ggd2Uga25ldy4gSG93ZXZlciwgdGhlIG1lbnRpb24gb2YgYHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdGAgbWFrZXMgbWUgd29uZGVyIGFib3V0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBFdmVuIHRob3VnaCB0aGUgbmV3IGZ1bmN0aW9uLCBgcGZubWFwX21hcHBpbmdfc2l6ZWAsIHNlZW1zIHRvIGJlIG1vcmUgY2VudHJhbCB0byB0aGlzIHBhdGNoLiBMZXQncyBkaWcgaW50byB3aGV0aGVyIGBwZm5tYXBfbWFwcGluZ19zaXplYCBpdHNlbGYgaGFzIGFueSBoaWRkZW4gY29uZmlnIGRlcGVuZGVuY2llcy4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MjcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6NTY6NDYuODI5MDgxNTY4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTE2OTM3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGZubWFwX21hcHBpbmdfc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9tbXUuYz0zOTc9c3RhdGljIHVuc2lnbmVkIGxvbmcgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTQzOS0gKi9cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo0NDA6c3RhdGljIHVuc2lnbmVkIGxvbmcgcGZubWFwX21hcHBpbmdfc2l6ZShzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNDQxLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM9NDUxPWludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy00OTgtXFx0ZWxzZSBpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1BGTk1BUClcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo0OTk6XFx0XFx0dm1hX3BhZ2VzaXplID0gcGZubWFwX21hcHBpbmdfc2l6ZShrdm0sIG1lbXNsb3QsIGh2YSk7XFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNTAwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzo1Njo0Ny4yNDA3ODIxNDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgxMjI5Mzg4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSSVNDLVYgS1ZNIFBhdGNoKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBpdCBzZWVtcyB0aGUgb25seSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBmbGFnIGlzIGBLVk1gIGl0c2VsZi4gSSBpbml0aWFsbHkgdGhvdWdodCB0aGVyZSBtaWdodCBiZSBhIGRlcGVuZGVuY3kgb24gc29tZXRoaW5nIGxpa2UgYFZNX1BGTk1BUGAsIGJ1dCB0aGF0J3MgdXNlZCBmb3IgZGV2aWNlIG1lbW9yeSBtYXBwaW5n4oCUdGhpbmsgVkZJTyBpbiB0aGlzIGNvbnRleHQuIEFuZCB3aGlsZSBWRklPIG1pZ2h0ICp0cmlnZ2VyKiB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb25hbGl0eSwgdGhlIHBhdGNoIGl0c2VsZiByZXNpZGVzIHdpdGhpbiB0aGUgS1ZNIGNvcmUuIFNvLCB5ZWFoLCBgS1ZNYCBpcyB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uLlxuXG5MZXQgbWUgcmVmcmVzaCBvbiB0aGUgcmVsZXZhbnQgc3ltYm9scyBhZ2Fpbi4uLiBgcGZubWFwX21hcHBpbmdfc2l6ZWAsIGBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nYCwgYW5kIGBrdm1fcmlzY3ZfbW11X21hcGAuIFJpZ2h0LCBJJ20gd2l0aCBpdC4gVGhlIHBhdGNoIGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgdGhlIFJJU0MtViBLVk0gTU1VIGhhbmRsZXMgaHVnZSBtYXBwaW5ncyBmb3IgYFZNX1BGTk1BUGAgZmF1bHRzLCB3aGljaCBpcyBwcmVjaXNlbHkgaG93IHdlIGRlYWwgd2l0aCBob3N0IGRldmljZSBNTUlPLiBJdCBhZGRzIHRoaXMgbmV3IGBwZm5tYXBfbWFwcGluZ19zaXplYCBmdW5jdGlvbiBhbmQgdHdlYWtzIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nIGluIGBrdm1fcmlzY3ZfbW11X21hcGAuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gdG8gdGhlIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgd2UgdG91Y2ggcXVpdGUgb2Z0ZW4uXG5cbkFscmlnaHQsIEknbSBzYXRpc2ZpZWQuIExldCdzIGNhbGwgdGhpcyBzZXQgYXMgcmVzb2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MDEsIk91dHB1dFRva2VucyI6MTQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA3OjU2OjUzLjA1MzA3ODY2M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5OTkyOTI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGZubWFwX21hcHBpbmdfc2l6ZVwiLFxuICAgIFwiZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZ1wiLFxuICAgIFwia3ZtX3Jpc2N2X21tdV9tYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViBLVk0gTU1VIHRvIHN1cHBvcnQgaHVnZSBtYXBwaW5ncyBmb3IgVk1fUEZOTUFQIGZhdWx0cyAoZS5nLiwgaG9zdCBkZXZpY2UgTU1JTykuIEl0IGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYHBmbm1hcF9tYXBwaW5nX3NpemVgIGFuZCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBpbiBga3ZtX3Jpc2N2X21tdV9tYXBgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBmbm1hcF9tYXBwaW5nX3NpemVcIixcbiAgICBcImZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmdcIixcbiAgICBcImt2bV9yaXNjdl9tbXVfbWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBSSVNDLVYgS1ZNIE1NVSB0byBzdXBwb3J0IGh1Z2UgbWFwcGluZ3MgZm9yIFZNX1BGTk1BUCBmYXVsdHMgKGUuZy4sIGhvc3QgZGV2aWNlIE1NSU8pLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBwZm5tYXBfbWFwcGluZ19zaXplYCBhbmQgbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbG9naWMgaW4gYGt2bV9yaXNjdl9tbXVfbWFwYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowbpwc6[1] Phase: Succeeded StartedAt: 2026-07-13 07:57:05 +0000 UTC FinishedAt: 2026-07-13 07:57:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpwc6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-13 07:57:05 +0000 UTC FinishedAt: 2026-07-13 07:57:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpwc6[2] Phase: Succeeded StartedAt: 2026-07-13 07:57:05 +0000 UTC FinishedAt: 2026-07-13 09:25:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-13 07:57:06 +0000 UTC FinishedAt: 2026-07-13 09:25:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-13 07:57:06 +0000 UTC FinishedAt: 2026-07-13 07:58:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-13 07:57:06 +0000 UTC FinishedAt: 2026-07-13 07:57:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowbpwc6/series-workflowbpwc6-convert-artifact-189022574/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-13 07:58:01 +0000 UTC FinishedAt: 2026-07-13 08:43:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-13 07:58:01 +0000 UTC FinishedAt: 2026-07-13 08:43:19 +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:*df28499c-2a2c-49f9-95b6-6a8640245c1c,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-workflowbpwc6/series-workflowbpwc6-convert-artifact-189022574/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": "b7db0bf3-339b-4a6c-9e94-def57744cfa9", "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-workflowbpwc6/series-workflowbpwc6-build-action-1736577425/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Failed StartedAt: 2026-07-13 07:58:01 +0000 UTC FinishedAt: 2026-07-13 08:02:04 +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:*df28499c-2a2c-49f9-95b6-6a8640245c1c,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-workflowbpwc6/series-workflowbpwc6-convert-artifact-189022574/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(1) Phase: Succeeded StartedAt: 2026-07-13 08:07:22 +0000 UTC FinishedAt: 2026-07-13 08:42:59 +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:*df28499c-2a2c-49f9-95b6-6a8640245c1c,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-workflowbpwc6/series-workflowbpwc6-convert-artifact-189022574/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": "b7db0bf3-339b-4a6c-9e94-def57744cfa9", "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-workflowbpwc6/series-workflowbpwc6-build-action-1736577425/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-13 08:43:19 +0000 UTC FinishedAt: 2026-07-13 08:43:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-13 08:43:19 +0000 UTC FinishedAt: 2026-07-13 08:43:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-13 08:43:19 +0000 UTC FinishedAt: 2026-07-13 08:43:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-13 08:43:19 +0000 UTC FinishedAt: 2026-07-13 08:43:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowbpwc6/series-workflowbpwc6-convert-artifact-1765616225/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-13 08:43:29 +0000 UTC FinishedAt: 2026-07-13 08:45:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-13 08:43:29 +0000 UTC FinishedAt: 2026-07-13 08:45:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b7db0bf3-339b-4a6c-9e94-def57744cfa9,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-workflowbpwc6/series-workflowbpwc6-build-action-1736577425/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-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-13 08:45:33 +0000 UTC FinishedAt: 2026-07-13 08:45:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-13 08:45:33 +0000 UTC FinishedAt: 2026-07-13 08:45:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-13 08:45:33 +0000 UTC FinishedAt: 2026-07-13 09:20:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-13 08:45:33 +0000 UTC FinishedAt: 2026-07-13 09:20:59 +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:*df28499c-2a2c-49f9-95b6-6a8640245c1c,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-workflowbpwc6/series-workflowbpwc6-convert-artifact-1765616225/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": "e8f61aa8-23dc-45a3-9e73-70fcd9b0c7b2", "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-workflowbpwc6/series-workflowbpwc6-build-action-2316610413/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-13 08:45:33 +0000 UTC FinishedAt: 2026-07-13 09:20:45 +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:*df28499c-2a2c-49f9-95b6-6a8640245c1c,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-workflowbpwc6/series-workflowbpwc6-convert-artifact-1765616225/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": "e8f61aa8-23dc-45a3-9e73-70fcd9b0c7b2", "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-workflowbpwc6/series-workflowbpwc6-build-action-2316610413/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-13 09:20:59 +0000 UTC FinishedAt: 2026-07-13 09:20:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-13 09:20:59 +0000 UTC FinishedAt: 2026-07-13 09:20:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-13 09:20:59 +0000 UTC FinishedAt: 2026-07-13 09:23:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-13 09:20:59 +0000 UTC FinishedAt: 2026-07-13 09:22:54 +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:*e8f61aa8-23dc-45a3-9e73-70fcd9b0c7b2,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-workflowbpwc6/series-workflowbpwc6-build-action-2316610413/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-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-13 09:23:08 +0000 UTC FinishedAt: 2026-07-13 09:25:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-13 09:23:08 +0000 UTC FinishedAt: 2026-07-13 09:25:16 +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":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"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:*b7db0bf3-339b-4a6c-9e94-def57744cfa9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e8f61aa8-23dc-45a3-9e73-70fcd9b0c7b2,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-workflowbpwc6/series-workflowbpwc6-build-action-1736577425/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-workflowbpwc6/series-workflowbpwc6-build-action-2316610413/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-13 09:23:08 +0000 UTC FinishedAt: 2026-07-13 09:24:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-13 09:23:08 +0000 UTC FinishedAt: 2026-07-13 09:23:59 +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":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"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-workflowbpwc6/series-workflowbpwc6-convert-artifact-4129454070/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-13 09:23:08 +0000 UTC FinishedAt: 2026-07-13 09:23:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-13 09:23:08 +0000 UTC FinishedAt: 2026-07-13 09:23:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-13 09:23:08 +0000 UTC FinishedAt: 2026-07-13 09:23:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-13 09:24:08 +0000 UTC FinishedAt: 2026-07-13 09:25:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpwc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pfnmap_mapping_size","fault_supports_gstage_huge_mapping","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adea84ee6cdea611146c4251d3c1616f5a09feca","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"083a4c86-6101-4522-ba18-cb9ccffbbf92","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-13 09:24:08 +0000 UTC FinishedAt: 2026-07-13 09:25:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b7db0bf3-339b-4a6c-9e94-def57744cfa9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e8f61aa8-23dc-45a3-9e73-70fcd9b0c7b2,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-workflowbpwc6/series-workflowbpwc6-build-action-1736577425/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-workflowbpwc6/series-workflowbpwc6-build-action-2316610413/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-workflowbpwc6/series-workflowbpwc6-convert-artifact-4129454070/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,}