Name: series-workflowr786b Phase: Failed StartedAt: 2026-07-30 01:04:06 +0000 UTC FinishedAt: 2026-07-30 01:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr786b[0] Phase: Succeeded StartedAt: 2026-07-30 01:04:06 +0000 UTC FinishedAt: 2026-07-30 01:23:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr786b[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 01:04:06 +0000 UTC FinishedAt: 2026-07-30 01:23:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAxOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLCB3aGljaCBhcmUgdXNlci1zcGFjZSB0ZXN0aW5nIHByb2dyYW1zLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDE6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkZDNlNWI0NmFhNTU1ZTJjZDg2YjBjYzUwYWQ1YjFhZTAyOTQxMDc0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMDE6MjM6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDg4YzZjODA0NmRkZWMuLmQ5NGY1NmM2MzBmZDUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtMTA3LDYgJiM0MzsxMDcsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9wbXVfY291bnRlcnNfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3BtdV9ldmVudF9maWx0ZXJfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdFxuJiM0MztURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zZXRfYm9vdF9jcHVfaWRcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zZXRfc3JlZ3NfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbmluZGV4IGQ2NGM4YTIyODIwN2EuLmU4MzU2ZWU1NGQ3YjkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbkBAIC0yMyw2ICYjNDM7MjMsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5naWZ5LmhcdTAwM2VcbiBcbiAjZGVmaW5lIG1zZWNzX3RvX3VzZWNzKG1zZWMpICAgICgobXNlYykgKiAxMDAwVUxMKVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcbmluZGV4IGJlNzliZGEwMjRiZjEuLjgyYThlYTZiNjYxZjAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcbkBAIC0xMjA3LDMwICYjNDM7MTIwNywyMyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1jc192bWxhdW5jaCh2b2lkKVxuIFxuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2Vodl9jbGVhbl9maWVsZHMgPSAwO1xuIFxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7cHVzaCAlJXJicDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyY3g7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcmR4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyZGk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICQwO1wmIzM0O1xuJiM0MztcdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O3B1c2ggJDA7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDttb3YgJSVyc3AsICglW2hvc3RfcnNwXSk7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O21vdiAlJXJheCwgKCVbaG9zdF9yaXBdKTtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4gXHRcdFx0ICAgICBcJiMzNDt2bWxhdW5jaDtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O2luY3EgKCUlcnNwKTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0OzE6IHBvcCAlJXJheDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJjeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJicDtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDsxOiA7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuJiM0MztcdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJheDtcJiMzNDtcbiBcdFx0XHQgICAgIDogW3JldF1cJiMzNDs9XHUwMDI2YVwmIzM0OyhyZXQpXG4gXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cJiMzNDtyXCYjMzQ7XG4gXHRcdFx0ICAgICAgICgodTY0KVx1MDAyNmN1cnJlbnRfZXZtY3MtXHUwMDNlaG9zdF9yc3ApLFxuIFx0XHRcdCAgICAgICBbaG9zdF9yaXBdXCYjMzQ7clwmIzM0O1xuLVx0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcmlwKVxuLVx0XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7LCBcJiMzNDtyYnhcJiMzNDssIFwmIzM0O3I4XCYjMzQ7LCBcJiMzNDtyOVwmIzM0OywgXCYjMzQ7cjEwXCYjMzQ7LFxuLVx0XHRcdCAgICAgICBcJiMzNDtyMTFcJiMzNDssIFwmIzM0O3IxMlwmIzM0OywgXCYjMzQ7cjEzXCYjMzQ7LCBcJiMzNDtyMTRcJiMzNDssIFwmIzM0O3IxNVwmIzM0Oyk7XG4mIzQzO1x0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcmlwKSxcbiYjNDM7XHRcdFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xuJiM0MztcdFx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0Oyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xMjQ2LDMwICYjNDM7MTIzOSwyMyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1jc192bXJlc3VtZSh2b2lkKVxuIFx0LyogSE9TVF9SU1AgKi9cbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlaHZfY2xlYW5fZmllbGRzIFx1MDAyNj0gfkhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9IT1NUX1BPSU5URVI7XG4gXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcJiMzNDtwdXNoICUlcmJwO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJjeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyZHg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcnNpO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJkaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJDA7XCYjMzQ7XG4mIzQzO1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7cHVzaCAkMDtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O21vdiAlJXJzcCwgKCVbaG9zdF9yc3BdKTtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O2xlYSAxZiglJXJpcCksICUlcmF4O1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7bW92ICUlcmF4LCAoJVtob3N0X3JpcF0pO1wmIzM0O1xuJiM0MztcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbiBcdFx0XHQgICAgIFwmIzM0O3ZtcmVzdW1lO1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7aW5jcSAoJSVyc3ApO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7MTogcG9wICUlcmF4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cG9wICUlcmRpO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cG9wICUlcnNpO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cG9wICUlcmR4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cG9wICUlcmN4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cG9wICUlcmJwO1wmIzM0O1xuJiM0MztcdFx0XHQgICAgIFwmIzM0OzE6IDtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7cG9wICUlcmF4O1wmIzM0O1xuIFx0XHRcdCAgICAgOiBbcmV0XVwmIzM0Oz1cdTAwMjZhXCYjMzQ7KHJldClcbiBcdFx0XHQgICAgIDogW2hvc3RfcnNwXVwmIzM0O3JcJiMzNDtcbiBcdFx0XHQgICAgICAgKCh1NjQpXHUwMDI2Y3VycmVudF9ldm1jcy1cdTAwM2Vob3N0X3JzcCksXG4gXHRcdFx0ICAgICAgIFtob3N0X3JpcF1cJiMzNDtyXCYjMzQ7XG4tXHRcdFx0ICAgICAgICgodTY0KVx1MDAyNmN1cnJlbnRfZXZtY3MtXHUwMDNlaG9zdF9yaXApXG4tXHRcdFx0ICAgICA6IFwmIzM0O21lbW9yeVwmIzM0OywgXCYjMzQ7Y2NcJiMzNDssIFwmIzM0O3JieFwmIzM0OywgXCYjMzQ7cjhcJiMzNDssIFwmIzM0O3I5XCYjMzQ7LCBcJiMzNDtyMTBcJiMzNDssXG4tXHRcdFx0ICAgICAgIFwmIzM0O3IxMVwmIzM0OywgXCYjMzQ7cjEyXCYjMzQ7LCBcJiMzNDtyMTNcJiMzNDssIFwmIzM0O3IxNFwmIzM0OywgXCYjMzQ7cjE1XCYjMzQ7KTtcbiYjNDM7XHRcdFx0ICAgICAgICgodTY0KVx1MDAyNmN1cnJlbnRfZXZtY3MtXHUwMDNlaG9zdF9yaXApLFxuJiM0MztcdFx0XHQgICAgICAgR1VFU1RfUkVHU19PRkZTRVRTXG4mIzQzO1x0XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxuaW5kZXggYjE2MTE3NGVjZTQ1My4uNmU2ZjcwMDM1NTA4YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXG5AQCAtMjQsNiAmIzQzOzI0LDcgQEAgZXh0ZXJuIGJvb2wgaG9zdF9jcHVfaXNfYW1kO1xuIGV4dGVybiBib29sIGhvc3RfY3B1X2lzX2h5Z29uO1xuIGV4dGVybiBib29sIGhvc3RfY3B1X2lzX2FtZF9jb21wYXRpYmxlO1xuIGV4dGVybiB1NjQgZ3Vlc3RfdHNjX2toejtcbiYjNDM7ZXh0ZXJuIHN0cnVjdCBrdm1fbW11IGd1ZXN0X21tdTtcbiBcbiAjaWZuZGVmIE1BWF9OUl9DUFVJRF9FTlRSSUVTXG4gI2RlZmluZSBNQVhfTlJfQ1BVSURfRU5UUklFUyAxMDBcbkBAIC0zOTgsOCAmIzQzOzM5OSw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHg4Nl9tb2RlbCh1bnNpZ25lZCBpbnQgZWF4KVxuICNkZWZpbmUgUFRFX0dFVF9QQShwdGUpXHRcdCgocHRlKSBcdTAwMjYgUEhZU0lDQUxfUEFHRV9NQVNLKVxuICNkZWZpbmUgUFRFX0dFVF9QRk4ocHRlKSAgICAgICAgKFBURV9HRVRfUEEocHRlKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVClcbiBcbi0vKiBHZW5lcmFsIFJlZ2lzdGVycyBpbiA2NC1CaXQgTW9kZSAqL1xuLXN0cnVjdCBncHI2NF9yZWdzIHtcbiYjNDM7c3RydWN0IGd1ZXN0X3JlZ3Mge1xuIFx0dTY0IHJheDtcbiBcdHU2NCByY3g7XG4gXHR1NjQgcmR4O1xuQEAgLTQxNiw4ICYjNDM7NDE2LDM4IEBAIHN0cnVjdCBncHI2NF9yZWdzIHtcbiBcdHU2NCByMTM7XG4gXHR1NjQgcjE0O1xuIFx0dTY0IHIxNTtcbiYjNDM7XHR1NjQgcmZsYWdzO1xuIH07XG4gXG4mIzQzO2V4dGVybiBzdHJ1Y3QgZ3Vlc3RfcmVncyBndWVzdF9yZWdzO1xuJiM0MztcbiYjNDM7I2RlZmluZSBHVUVTVF9SRUdfT0ZGU0VUKG5hbWUpIFxcXG4mIzQzO1x0W29mZl8jI25hbWVdIFwmIzM0O2lcJiMzNDsgKG9mZnNldG9mKHN0cnVjdCBndWVzdF9yZWdzLCBuYW1lKSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19PRkZTRVRTXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocmF4KSxcdFxcXG4mIzQzO1x0R1VFU1RfUkVHX09GRlNFVChyY3gpLFx0XFxcbiYjNDM7XHRHVUVTVF9SRUdfT0ZGU0VUKHJkeCksXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocmJ4KSxcdFxcXG4mIzQzO1x0R1VFU1RfUkVHX09GRlNFVChyc3ApLFx0XFxcbiYjNDM7XHRHVUVTVF9SRUdfT0ZGU0VUKHJicCksXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocnNpKSxcdFxcXG4mIzQzO1x0R1VFU1RfUkVHX09GRlNFVChyZGkpLFx0XFxcbiYjNDM7XHRHVUVTVF9SRUdfT0ZGU0VUKHI4KSxcdFxcXG4mIzQzO1x0R1VFU1RfUkVHX09GRlNFVChyOSksXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocjEwKSxcdFxcXG4mIzQzO1x0R1VFU1RfUkVHX09GRlNFVChyMTEpLFx0XFxcbiYjNDM7XHRHVUVTVF9SRUdfT0ZGU0VUKHIxMiksXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocjEzKSxcdFxcXG4mIzQzO1x0R1VFU1RfUkVHX09GRlNFVChyMTQpLFx0XFxcbiYjNDM7XHRHVUVTVF9SRUdfT0ZGU0VUKHIxNSksXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocmZsYWdzKVxuJiM0MztcbiYjNDM7I2RlZmluZSBHVUVTVF9SRUcobmFtZSkgXCYjMzQ7Z3Vlc3RfcmVncyAmIzQzOyAlY1tvZmZfXCYjMzQ7ICNuYW1lIFwmIzM0O11cJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgR1VFU1RfU1dJVENIX0dQUl9BU00obmFtZSkgXFxcbiYjNDM7XHRcJiMzNDt4Y2hnICUlXCYjMzQ7ICNuYW1lIFwmIzM0OywgXCYjMzQ7IEdVRVNUX1JFRyhuYW1lKSBcJiMzNDtcXG5cXHRcJiMzNDtcbiYjNDM7XG4gc3RydWN0IGRlc2M2NCB7XG4gXHR1MTYgbGltaXQwO1xuIFx0dTE2IGJhc2UwO1xuQEAgLTU4NCw2ICYjNDM7NjE0LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY3IwKHU2NCB2YWwpXG4gXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcJiMzNDttb3YgJTAsICUlY3IwXCYjMzQ7IDogOiBcJiMzNDtyXCYjMzQ7ICh2YWwpIDogXCYjMzQ7bWVtb3J5XCYjMzQ7KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdTY0IGdldF9jcjIodm9pZClcbiYjNDM7e1xuJiM0MztcdHU2NCBjcjI7XG4mIzQzO1xuJiM0MztcdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O21vdiAlJWNyMiwgJVtjcjJdXCYjMzQ7IDogW2NyMl1cJiMzNDs9clwmIzM0OyhjcjIpKTtcbiYjNDM7XHRyZXR1cm4gY3IyO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdTY0IGdldF9jcjModm9pZClcbiB7XG4gXHR1NjQgY3IzO1xuQEAgLTg3OSw2ICYjNDM7OTE3LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9zc2VfcmVnKGludCByZWcsIGNvbnN0IHNzZTEyOF90ICpkYXRhKVxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGludmxwZyh1NjQgYWRkcilcbiYjNDM7e1xuJiM0MztcdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O2ludmxwZyAoJTApXCYjMzQ7IDogOiBcJiMzNDtyXCYjMzQ7KGFkZHIpIDogXCYjMzQ7bWVtb3J5XCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHZvaWQgY3B1X3JlbGF4KHZvaWQpXG4ge1xuIFx0YXNtIHZvbGF0aWxlKFwmIzM0O3JlcDsgbm9wXCYjMzQ7IDo6OiBcJiMzNDttZW1vcnlcJiMzNDspO1xuQEAgLTkxNSw2ICYjNDM7OTU4LDExIEBAIHN0cnVjdCBrdm1feDg2X3N0YXRlICp2Y3B1X3NhdmVfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHZjcHVfbG9hZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSk7XG4gdm9pZCBrdm1feDg2X3N0YXRlX2NsZWFudXAoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKTtcbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGt2bV94ODZfc3RhdGVfaXNfZ3Vlc3RfbW9kZShzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3RhdGUtXHUwMDNlbmVzdGVkLnNpemUgXHUwMDI2XHUwMDI2IChzdGF0ZS1cdTAwM2VuZXN0ZWQuZmxhZ3MgXHUwMDI2IEtWTV9TVEFURV9ORVNURURfR1VFU1RfTU9ERSk7XG4mIzQzO31cbiYjNDM7XG4gY29uc3Qgc3RydWN0IGt2bV9tc3JfbGlzdCAqa3ZtX2dldF9tc3JfaW5kZXhfbGlzdCh2b2lkKTtcbiBjb25zdCBzdHJ1Y3Qga3ZtX21zcl9saXN0ICprdm1fZ2V0X2ZlYXR1cmVfbXNyX2luZGV4X2xpc3Qodm9pZCk7XG4gYm9vbCBrdm1fbXNyX2lzX2luX3NhdmVfcmVzdG9yZV9saXN0KHUzMiBtc3JfaW5kZXgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuaW5kZXggNGJjZmQ2MGUzYWVjYi4uMDRmNWUzNGRlYTNhZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXG5AQCAtMjkwLDYgJiM0MzsyOTAsMjMgQEAgc3RydWN0IHZteF9tc3JfZW50cnkge1xuIFx0dTY0IHZhbHVlO1xuIH0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMTYpKSk7XG4gXG4mIzQzOyNkZWZpbmUgVk1YX1NXSVRDSF9HUFJTX0FTTSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJheCkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYngpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmN4KSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkeCkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYnApIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocnNpKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkaSkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOCkgIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjkpICBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMCkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTEpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjEyKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMykgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTQpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE1KVxuJiM0MztcbiAjaW5jbHVkZSBcJiMzNDtldm1jcy5oXCYjMzQ7XG4gXG4gc3RhdGljIGlubGluZSBpbnQgdm14b24odTY0IHBoeXMpXG5AQCAtMzYzLDkgJiM0MzszODAsNiBAQCBzdGF0aWMgaW5saW5lIHU2NCB2bXB0cnN0eih2b2lkKVxuIFx0cmV0dXJuIHZhbHVlO1xuIH1cbiBcbi0vKlxuLSAqIE5vIGd1ZXN0IHN0YXRlIChlLmcuIEdQUnMpIGlzIGVzdGFibGlzaGVkIGJ5IHRoaXMgdm1sYXVuY2guXG4tICovXG4gc3RhdGljIGlubGluZSBpbnQgdm1sYXVuY2godm9pZClcbiB7XG4gXHRpbnQgcmV0O1xuQEAgLTM3MywzNCAmIzQzOzM4NywyNCBAQCBzdGF0aWMgaW5saW5lIGludCB2bWxhdW5jaCh2b2lkKVxuIFx0aWYgKGVuYWJsZV9ldm1jcylcbiBcdFx0cmV0dXJuIGV2bWNzX3ZtbGF1bmNoKCk7XG4gXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcJiMzNDtwdXNoICUlcmJwO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJjeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyZHg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcnNpO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJkaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJDA7XCYjMzQ7XG4mIzQzO1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7cHVzaCAkMDtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O3Ztd3JpdGUgJSVyc3AsICVbaG9zdF9yc3BdO1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7bGVhIDFmKCUlcmlwKSwgJSVyYXg7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDt2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4gXHRcdFx0ICAgICBcJiMzNDt2bWxhdW5jaDtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O2luY3EgKCUlcnNwKTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0OzE6IHBvcCAlJXJheDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJjeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJicDtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDsxOiA7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuJiM0MztcdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJheDtcJiMzNDtcbiBcdFx0XHQgICAgIDogW3JldF1cJiMzNDs9XHUwMDI2YVwmIzM0OyhyZXQpXG4gXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cJiMzNDtyXCYjMzQ7KCh1NjQpSE9TVF9SU1ApLFxuLVx0XHRcdCAgICAgICBbaG9zdF9yaXBdXCYjMzQ7clwmIzM0OygodTY0KUhPU1RfUklQKVxuLVx0XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7LCBcJiMzNDtyYnhcJiMzNDssIFwmIzM0O3I4XCYjMzQ7LCBcJiMzNDtyOVwmIzM0OywgXCYjMzQ7cjEwXCYjMzQ7LFxuLVx0XHRcdCAgICAgICBcJiMzNDtyMTFcJiMzNDssIFwmIzM0O3IxMlwmIzM0OywgXCYjMzQ7cjEzXCYjMzQ7LCBcJiMzNDtyMTRcJiMzNDssIFwmIzM0O3IxNVwmIzM0Oyk7XG4mIzQzO1x0XHRcdCAgICAgICBbaG9zdF9yaXBdXCYjMzQ7clwmIzM0OygodTY0KUhPU1RfUklQKSxcbiYjNDM7XHRcdFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xuJiM0MztcdFx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0Oyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi0vKlxuLSAqIE5vIGd1ZXN0IHN0YXRlIChlLmcuIEdQUnMpIGlzIGVzdGFibGlzaGVkIGJ5IHRoaXMgdm1yZXN1bWUuXG4tICovXG4gc3RhdGljIGlubGluZSBpbnQgdm1yZXN1bWUodm9pZClcbiB7XG4gXHRpbnQgcmV0O1xuQEAgLTQwOCwyOCAmIzQzOzQxMiwyMSBAQCBzdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKVxuIFx0aWYgKGVuYWJsZV9ldm1jcylcbiBcdFx0cmV0dXJuIGV2bWNzX3ZtcmVzdW1lKCk7XG4gXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcJiMzNDtwdXNoICUlcmJwO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJjeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyZHg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcnNpO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJkaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJDA7XCYjMzQ7XG4mIzQzO1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7cHVzaCAkMDtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O3Ztd3JpdGUgJSVyc3AsICVbaG9zdF9yc3BdO1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7bGVhIDFmKCUlcmlwKSwgJSVyYXg7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDt2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4gXHRcdFx0ICAgICBcJiMzNDt2bXJlc3VtZTtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O2luY3EgKCUlcnNwKTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0OzE6IHBvcCAlJXJheDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJjeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJicDtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDsxOiA7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuJiM0MztcdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJheDtcJiMzNDtcbiBcdFx0XHQgICAgIDogW3JldF1cJiMzNDs9XHUwMDI2YVwmIzM0OyhyZXQpXG4gXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cJiMzNDtyXCYjMzQ7KCh1NjQpSE9TVF9SU1ApLFxuLVx0XHRcdCAgICAgICBbaG9zdF9yaXBdXCYjMzQ7clwmIzM0OygodTY0KUhPU1RfUklQKVxuLVx0XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7LCBcJiMzNDtyYnhcJiMzNDssIFwmIzM0O3I4XCYjMzQ7LCBcJiMzNDtyOVwmIzM0OywgXCYjMzQ7cjEwXCYjMzQ7LFxuLVx0XHRcdCAgICAgICBcJiMzNDtyMTFcJiMzNDssIFwmIzM0O3IxMlwmIzM0OywgXCYjMzQ7cjEzXCYjMzQ7LCBcJiMzNDtyMTRcJiMzNDssIFwmIzM0O3IxNVwmIzM0Oyk7XG4mIzQzO1x0XHRcdCAgICAgICBbaG9zdF9yaXBdXCYjMzQ7clwmIzM0OygodTY0KUhPU1RfUklQKSxcbiYjNDM7XHRcdFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xuJiM0MztcdFx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0Oyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuY1xuaW5kZXggMWQ3MmRjZGZjZTNiNi4uM2UzNTNhYzM5ZWViNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNcbkBAIC03NCw3ICYjNDM7NzQsNyBAQCB0ZXN0X2Fzc2VydChib29sIGV4cCwgY29uc3QgY2hhciAqZXhwX3N0cixcbiBcdGlmICghKGV4cCkpIHtcbiBcdFx0dmFfc3RhcnQoYXAsIGZtdCk7XG4gXG4tXHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDs9PT09IFRlc3QgQXNzZXJ0aW9uIEZhaWx1cmUgPT09PVxcblwmIzM0O1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1xcbj09PT0gVGVzdCBBc3NlcnRpb24gRmFpbHVyZSA9PT09XFxuXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7ICAlczoldTogJXNcXG5cJiMzNDtcbiBcdFx0XHRcJiMzNDsgIHBpZD0lZCB0aWQ9JWQgZXJybm89JWQgLSAlc1xcblwmIzM0OyxcbiBcdFx0XHRmaWxlLCBsaW5lLCBleHBfc3RyLCBnZXRwaWQoKSwga3ZtX2dldHRpZCgpLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcbmluZGV4IGVmNTZkY2VmZTAxMTkuLmQzMWZhODFlYTA3NTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcbkBAIC0yOCw2ICYjNDM7MjgsOSBAQCBib29sIGhvc3RfY3B1X2lzX2h5Z29uO1xuIGJvb2wgaG9zdF9jcHVfaXNfYW1kX2NvbXBhdGlibGU7XG4gYm9vbCBpc19mb3JjZWRfZW11bGF0aW9uX2VuYWJsZWQ7XG4gdTY0IGd1ZXN0X3RzY19raHo7XG4mIzQzO3N0cnVjdCBrdm1fbW11IGd1ZXN0X21tdTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBndWVzdF9yZWdzIGd1ZXN0X3JlZ3M7XG4gXG4gY29uc3QgY2hhciAqZXhfc3RyKGludCB2ZWN0b3IpXG4ge1xuQEAgLTgyOSw2ICYjNDM7ODMyLDE3IEBAIHZvaWQga3ZtX2FyY2hfdm1fcG9zdF9jcmVhdGUoc3RydWN0IGt2bV92bSAqdm0sIHVuc2lnbmVkIGludCBucl92Y3B1cylcbiBcdFRFU1RfQVNTRVJUKHIgXHUwMDNlIDAsIFwmIzM0O0tWTV9HRVRfVFNDX0tIWiBkaWQgbm90IHByb3ZpZGUgYSB2YWxpZCBUU0MgZnJlcXVlbmN5LlwmIzM0Oyk7XG4gXHRndWVzdF90c2Nfa2h6ID0gcjtcbiBcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBndWVzdF90c2Nfa2h6KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZ3Vlc3QgTU1VIGlzIGp1c3QgYSBwbGFjZWhvbGRlciB0byBwcm92aWRlIGFjY2VzcyB0byBQVEUgbWFza3NcbiYjNDM7XHQgKiAoZm9yIG5vdykuIFRoZSBndWVzdCBkb2VzIG5vdCBoYXZlIG1hcHBpbmdzIGZvciBpdHMgb3duIHBhZ2UgdGFibGVzXG4mIzQzO1x0ICogYnkgZGVmYXVsdCwgc28gYW55IG1lYW5pbmdmdWwgdXNlIG9mIGd1ZXN0IHBhZ2UgdGFibGVzIHJlcXVpcmVzXG4mIzQzO1x0ICogZXhwbGljaXQgc2V0dXAgYnkgdGhlIHRlc3QuIFplcm8gdGhlIFBHRCB0byBtYWtlIGl0IG9idmlvdXMgdGhlIGd1ZXN0XG4mIzQzO1x0ICogcGFnZSB0YWJsZXMgYXJlIG5vdCBpbW1lZGlhdGVseSB1c2FibGUgYnkgZ3Vlc3QgY29kZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRndWVzdF9tbXUgPSB2bS1cdTAwM2VtbXU7XG4mIzQzO1x0Z3Vlc3RfbW11LnBnZCA9IDA7XG4mIzQzO1x0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGd1ZXN0X21tdSk7XG4gfVxuIFxuIHZvaWQgdmNwdV9hcmNoX3NldF9lbnRyeV9wb2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHZvaWQgKmd1ZXN0X2NvZGUpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uY1xuaW5kZXggMTQ0NWI4OTA5ODZmZC4uYjA1YmU1MGYwNzVkNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uY1xuQEAgLTEzLDkgJiM0MzsxMyw2IEBAXG4gXG4gI2RlZmluZSBTRVZfREVWX1BBVEggXCYjMzQ7L2Rldi9zZXZcJiMzNDtcbiBcbi1zdHJ1Y3QgZ3ByNjRfcmVncyBndWVzdF9yZWdzO1xuLXU2NCByZmxhZ3M7XG4tXG4gLyogQWxsb2NhdGUgbWVtb3J5IHJlZ2lvbnMgZm9yIG5lc3RlZCBTVk0gdGVzdHMuXG4gICpcbiAgKiBJbnB1dCBBcmdzOlxuQEAgLTEzNyw0NiAmIzQzOzEzNCw0NyBAQCB2b2lkIGdlbmVyaWNfc3ZtX3NldHVwKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0sIHZvaWQgKmd1ZXN0X3JpcClcbiAgKiBzYXZlL3Jlc3RvcmUgNjQtYml0IGdlbmVyYWwgcmVnaXN0ZXJzIGV4Y2VwdCByYXgsIHJpcCwgcnNwXG4gICogd2hpY2ggYXJlIGRpcmVjdGx5IGhhbmRlZCB0aHJvdWdoIHRoZSBWTUNCIGd1ZXN0IHByb2Nlc3NvciBzdGF0ZVxuICAqL1xuLSNkZWZpbmUgU0FWRV9HUFJfQ1x0XHRcdFx0XFxcbi1cdFwmIzM0O3hjaGcgJSVyYngsIGd1ZXN0X3JlZ3MmIzQzOzB4MjBcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcmN4LCBndWVzdF9yZWdzJiM0MzsweDEwXFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXJkeCwgZ3Vlc3RfcmVncyYjNDM7MHgxOFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyYnAsIGd1ZXN0X3JlZ3MmIzQzOzB4MzBcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcnNpLCBndWVzdF9yZWdzJiM0MzsweDM4XFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXJkaSwgZ3Vlc3RfcmVncyYjNDM7MHg0MFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyOCwgIGd1ZXN0X3JlZ3MmIzQzOzB4NDhcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcjksICBndWVzdF9yZWdzJiM0MzsweDUwXFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXIxMCwgZ3Vlc3RfcmVncyYjNDM7MHg1OFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyMTEsIGd1ZXN0X3JlZ3MmIzQzOzB4NjBcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcjEyLCBndWVzdF9yZWdzJiM0MzsweDY4XFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXIxMywgZ3Vlc3RfcmVncyYjNDM7MHg3MFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyMTQsIGd1ZXN0X3JlZ3MmIzQzOzB4NzhcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcjE1LCBndWVzdF9yZWdzJiM0MzsweDgwXFxuXFx0XCYjMzQ7XG4tXG4tI2RlZmluZSBMT0FEX0dQUl9DICAgICAgU0FWRV9HUFJfQ1xuJiM0MzsjZGVmaW5lIFNWTV9TV0lUQ0hfR1BSU19BU00gXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYngpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmN4KSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkeCkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYnApIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocnNpKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkaSkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOCkgIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjkpICBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMCkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTEpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjEyKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMykgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTQpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE1KVxuIFxuIC8qXG4gICogc2VsZnRlc3RzIGRvIG5vdCB1c2UgaW50ZXJydXB0cyBzbyB3ZSBkcm9wcGVkIGNsZ2kvc3RpL2NsaS9zdGdpXG4tICogZm9yIG5vdy4gcmVnaXN0ZXJzIGludm9sdmVkIGluIExPQUQvU0FWRV9HUFJfQyBhcmUgZXZlbnR1YWxseVxuJiM0MzsgKiBmb3Igbm93LiBSZWdpc3RlcnMgaW52b2x2ZWQgaW4gU1ZNX1NXSVRDSF9HUFJTX0FTTSBhcmUgZXZlbnR1YWxseVxuICAqIHVubW9kaWZpZWQgc28gdGhleSBkbyBub3QgbmVlZCB0byBiZSBpbiB0aGUgY2xvYmJlciBsaXN0LlxuICAqL1xuIHZvaWQgcnVuX2d1ZXN0KHN0cnVjdCB2bWNiICp2bWNiLCB1NjQgdm1jYl9ncGEpXG4ge1xuIFx0YXNtIHZvbGF0aWxlIChcbiBcdFx0XCYjMzQ7dm1sb2FkICVbdm1jYl9ncGFdXFxuXFx0XCYjMzQ7XG4tXHRcdFwmIzM0O21vdiByZmxhZ3MsICUlcjE1XFxuXFx0XCYjMzQ7XHQvLyByZmxhZ3Ncbi1cdFx0XCYjMzQ7bW92ICUlcjE1LCAweDE3MCglW3ZtY2JdKVxcblxcdFwmIzM0O1xuLVx0XHRcJiMzNDttb3YgZ3Vlc3RfcmVncywgJSVyMTVcXG5cXHRcJiMzNDtcdC8vIHJheFxuLVx0XHRcJiMzNDttb3YgJSVyMTUsIDB4MWY4KCVbdm1jYl0pXFxuXFx0XCYjMzQ7XG4tXHRcdExPQURfR1BSX0NcbiYjNDM7XHRcdFwmIzM0O21vdiBcJiMzNDsgR1VFU1RfUkVHKHJmbGFncykgXCYjMzQ7LCAlJXIxNVxcblxcdFwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7bW92ICUlcjE1LCAlW3ZtY2JfcmZsYWdzXVxcblxcdFwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7bW92IFwmIzM0OyBHVUVTVF9SRUcocmF4KSBcJiMzNDssICUlcjE1XFxuXFx0XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDttb3YgJSVyMTUsICVbdm1jYl9yYXhdXFxuXFx0XCYjMzQ7XG4mIzQzO1x0XHRTVk1fU1dJVENIX0dQUlNfQVNNXG4gXHRcdFwmIzM0O3ZtcnVuICVbdm1jYl9ncGFdXFxuXFx0XCYjMzQ7XG4tXHRcdFNBVkVfR1BSX0Ncbi1cdFx0XCYjMzQ7bW92IDB4MTcwKCVbdm1jYl0pLCAlJXIxNVxcblxcdFwmIzM0O1x0Ly8gcmZsYWdzXG4tXHRcdFwmIzM0O21vdiAlJXIxNSwgcmZsYWdzXFxuXFx0XCYjMzQ7XG4tXHRcdFwmIzM0O21vdiAweDFmOCglW3ZtY2JdKSwgJSVyMTVcXG5cXHRcJiMzNDtcdC8vIHJheFxuLVx0XHRcJiMzNDttb3YgJSVyMTUsIGd1ZXN0X3JlZ3NcXG5cXHRcJiMzNDtcbiYjNDM7XHRcdFNWTV9TV0lUQ0hfR1BSU19BU01cbiYjNDM7XHRcdFwmIzM0O21vdiAlW3ZtY2JfcmZsYWdzXSwgJSVyMTVcXG5cXHRcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O21vdiAlJXIxNSwgXCYjMzQ7IEdVRVNUX1JFRyhyZmxhZ3MpIFwmIzM0O1xcblxcdFwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7bW92ICVbdm1jYl9yYXhdLCAlJXIxNVxcblxcdFwmIzM0O1x0Ly8gcmF4XG4mIzQzO1x0XHRcJiMzNDttb3YgJSVyMTUsIFwmIzM0OyBHVUVTVF9SRUcocmF4KSBcJiMzNDtcXG5cXHRcJiMzNDtcbiBcdFx0XCYjMzQ7dm1zYXZlICVbdm1jYl9ncGFdXFxuXFx0XCYjMzQ7XG4tXHRcdDogOiBbdm1jYl0gXCYjMzQ7clwmIzM0OyAodm1jYiksIFt2bWNiX2dwYV0gXCYjMzQ7YVwmIzM0OyAodm1jYl9ncGEpXG4mIzQzO1x0XHQ6IFt2bWNiX3JmbGFnc10gXCYjMzQ7JiM0MzttXCYjMzQ7ICh2bWNiLVx1MDAzZXNhdmUucmZsYWdzKSxcbiYjNDM7XHRcdCAgW3ZtY2JfcmF4XSBcJiMzNDsmIzQzO21cJiMzNDsgKHZtY2ItXHUwMDNlc2F2ZS5yYXgpXG4mIzQzO1x0XHQ6IFt2bWNiX2dwYV0gXCYjMzQ7YVwmIzM0OyAodm1jYl9ncGEpLFxuJiM0MztcdFx0ICBHVUVTVF9SRUdTX09GRlNFVFNcbiBcdFx0OiBcJiMzNDtyMTVcJiMzNDssIFwmIzM0O21lbW9yeVwmIzM0Oyk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jXG5pbmRleCBlN2RkNTc5MTk1OWJhLi4zODA1MGM2MGEwNjcwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuY1xuQEAgLTEwLDM2ICYjNDM7MTAsOCBAQFxuIFxuIHZvaWQgdWNhbGxfYXJjaF9kb191Y2FsbChndmFfdCB1YylcbiB7XG4tXHQvKlxuLVx0ICogRklYTUU6IFJldmVydCB0aGlzIGhhY2sgKHRoZSBlbnRpcmUgY29tbWl0IHRoYXQgYWRkZWQgaXQpIG9uY2UgblZNWFxuLVx0ICogcHJlc2VydmVzIEwyIEdQUnMgYWNyb3NzIGEgbmVzdGVkIFZNLUV4aXQuICBJZiBhIHVjYWxsIGZyb20gTDIsIGUuZy5cbi1cdCAqIHRvIGRvIGEgR1VFU1RfU1lOQygpLCBsYW5kcyB0aGUgdkNQVSBpbiBMMSwgYW55IGFuZCBhbGwgR1BScyBjYW4gYmVcbi1cdCAqIGNsb2JiZXJlZCBieSBMMS4gIFNhdmUgYW5kIHJlc3RvcmUgbm9uLXZvbGF0aWxlIEdQUnMgKGNsb2JiZXJpbmcgUkJQXG4tXHQgKiBpbiBwYXJ0aWN1bGFyIGlzIHByb2JsZW1hdGljKSBhbG9uZyB3aXRoIFJEWCBhbmQgUkRJICh3aGljaCBhcmVcbi1cdCAqIGlucHV0cyksIGFuZCBjbG9iYmVyIHZvbGF0aWxlIEdQUnMuICpzaWdoKlxuLVx0ICovXG4tI2RlZmluZSBIT1JSSUZJQ19MMl9VQ0FMTF9DTE9CQkVSX0hBQ0tcdFxcXG4tXHRcJiMzNDtyY3hcJiMzNDssIFwmIzM0O3JzaVwmIzM0OywgXCYjMzQ7cjhcJiMzNDssIFwmIzM0O3I5XCYjMzQ7LCBcJiMzNDtyMTBcJiMzNDssIFwmIzM0O3IxMVwmIzM0O1xuLVxuLVx0YXNtIHZvbGF0aWxlKFwmIzM0O3B1c2ggJSVyYnBcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwdXNoICUlcjE1XFxuXFx0XCYjMzQ7XG4tXHRcdCAgICAgXCYjMzQ7cHVzaCAlJXIxNFxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3B1c2ggJSVyMTNcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwdXNoICUlcjEyXFxuXFx0XCYjMzQ7XG4tXHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJieFxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3B1c2ggJSVyZHhcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwdXNoICUlcmRpXFxuXFx0XCYjMzQ7XG4tXHRcdCAgICAgXCYjMzQ7aW4gJVtwb3J0XSwgJSVhbFxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3BvcCAlJXJkaVxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3BvcCAlJXJkeFxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3BvcCAlJXJieFxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3BvcCAlJXIxMlxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3BvcCAlJXIxM1xcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3BvcCAlJXIxNFxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3BvcCAlJXIxNVxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3BvcCAlJXJicFxcblxcdFwmIzM0O1xuLVx0XHQ6IDogW3BvcnRdIFwmIzM0O2RcJiMzNDsgKFVDQUxMX1BJT19QT1JUKSwgXCYjMzQ7RFwmIzM0OyAodWMpIDogXCYjMzQ7cmF4XCYjMzQ7LCBcJiMzNDttZW1vcnlcJiMzNDssXG4tXHRcdCAgICAgSE9SUklGSUNfTDJfVUNBTExfQ0xPQkJFUl9IQUNLKTtcbiYjNDM7XHRhc20gdm9sYXRpbGUoXCYjMzQ7aW4gJVtwb3J0XSwgJSVhbFwmIzM0O1xuJiM0MztcdFx0OiA6IFtwb3J0XSBcJiMzNDtkXCYjMzQ7IChVQ0FMTF9QSU9fUE9SVCksIFwmIzM0O0RcJiMzNDsgKHVjKSA6IFwmIzM0O3JheFwmIzM0OywgXCYjMzQ7bWVtb3J5XCYjMzQ7KTtcbiB9XG4gXG4gdm9pZCAqdWNhbGxfYXJjaF9nZXRfdWNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmNcbmluZGV4IGNkMDljOWRlNDQ4NWEuLjA4OWUxYThhZjUzZmMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni92bXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmNcbkBAIC0yMzIsNyAmIzQzOzIzMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3ZtY3NfY29udHJvbF9maWVsZHMoc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIFxuIFx0dm13cml0ZShFWENFUFRJT05fQklUTUFQLCAwKTtcbiBcdHZtd3JpdGUoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BU0ssIDApO1xuLVx0dm13cml0ZShQQUdFX0ZBVUxUX0VSUk9SX0NPREVfTUFUQ0gsIC0xKTsgLyogTmV2ZXIgbWF0Y2ggKi9cbiYjNDM7XHR2bXdyaXRlKFBBR0VfRkFVTFRfRVJST1JfQ09ERV9NQVRDSCwgMCk7XG4gXHR2bXdyaXRlKENSM19UQVJHRVRfQ09VTlQsIDApO1xuIFx0dm13cml0ZShWTV9FWElUX0NPTlRST0xTLCByZG1zcihNU1JfSUEzMl9WTVhfRVhJVF9DVExTKSB8XG4gXHRcdFZNX0VYSVRfSE9TVF9BRERSX1NQQUNFX1NJWkUpO1x0ICAvKiA2NC1iaXQgaG9zdCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY1xuaW5kZXggNzdjZTg3YzQxYTg2OC4uYWE3ZjNiNDA1ZmQzMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jXG5AQCAtMjIsOSAmIzQzOzIyLDYgQEBcbiBcbiAjZGVmaW5lIFNZTkNfUE9SVFx0MHhlXG4gXG4tI2RlZmluZSBTVFIoeCkgI3hcbi0jZGVmaW5lIFhTVFIocykgU1RSKHMpXG4tXG4gLypcbiAgKiBTTUkgaGFuZGxlcjogcnVucyBpbiByZWFsLWFkZHJlc3MgbW9kZS5cbiAgKiBSZXBvcnRzIFNNUkFNX1NUQUdFIHZpYSBwb3J0IElPLCB0aGVuIGRvZXMgUlNNLlxuQEAgLTM3LDcgJiM0MzszNCw3IEBAIHN0YXRpYyB1OCBzbWlfaGFuZGxlcltdID0ge1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jX3dpdGhfaG9zdCh1NjQgcGhhc2UpXG4ge1xuLVx0YXNtIHZvbGF0aWxlKFwmIzM0O2luICRcJiMzNDsgWFNUUihTWU5DX1BPUlQpIFwmIzM0OywgJSVhbCBcXG5cJiMzNDtcbiYjNDM7XHRhc20gdm9sYXRpbGUoXCYjMzQ7aW4gJFwmIzM0OyBfX3N0cmluZ2lmeShTWU5DX1BPUlQpIFwmIzM0OywgJSVhbCBcXG5cJiMzNDtcbiBcdFx0ICAgICA6IFwmIzM0OyYjNDM7YVwmIzM0OyAocGhhc2UpKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9maXhfaHlwZXJjYWxsX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZml4X2h5cGVyY2FsbF90ZXN0LmNcbmluZGV4IDc1M2EwZTczMGVhOGQuLjQ5MzFlYzIyNzY4ZWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jXG5AQCAtNiw3ICYjNDM7Niw2IEBAXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wYXJhLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1fcGFyYS5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5naWZ5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2t2bV90ZXN0X2hhcm5lc3MuaFwmIzM0O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTA3MzkxYWIyYzkzMFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuY1xuQEAgLTAsMCAmIzQzOzEsMjg4IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZ2V0b3B0LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RfdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2t2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cHJvY2Vzc29yLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c3ZtX3V0aWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bXguaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBOUl9JVEVSQVRJT05TXHRcdDUwMFxuJiM0MztcbiYjNDM7I2RlZmluZSBQVFJTX1BFUl9QVEVcdFx0NTEyXG4mIzQzOyNkZWZpbmUgUFhEX0lOREVYKHZhZGRyLCBsZXZlbClcdCgoKHZhZGRyKSBcdTAwM2VcdTAwM2UgUEdfTEVWRUxfU0hJRlQobGV2ZWwpKSBcdTAwMjYgKFBUUlNfUEVSX1BURSAtIDEpKVxuJiM0MztcbiYjNDM7I2RlZmluZSBURVNUX01FTV9CQVNFX0dWQVx0MHhjMDAwMDAwMFVMTFxuJiM0MzsjZGVmaW5lIFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUXHQweGQwMDAwMDAwVUxMXG4mIzQzOyNkZWZpbmUgUEFUVEVSTlx0XHRcdDB4YWJjZGVmYWJjZGVmYWJjZFVMTFxuJiM0MztcbiYjNDM7c3RhdGljIHU2NCBleHBlY3RlZF92YWRkcjtcbiYjNDM7c3RhdGljIHU2NCBndWVzdF9mYXVsdHM7XG4mIzQzO1xuJiM0MztzdGF0aWMgdTY0ICpndWVzdF9nZXRfcHRlKHU2NCB2YWRkcilcbiYjNDM7e1xuJiM0MztcdHU2NCBwZ3RhYmxlX3BhLCBwdGU7XG4mIzQzO1x0dTY0ICpwZ3RhYmxlO1xuJiM0MztcdGludCBsZXZlbDtcbiYjNDM7XG4mIzQzO1x0bGV2ZWwgPSAoZ2V0X2NyNCgpIFx1MDAyNiBYODZfQ1I0X0xBNTcpID8gUEdfTEVWRUxfMjU2VCA6IFBHX0xFVkVMXzUxMkc7XG4mIzQzO1xuJiM0MztcdHBndGFibGVfcGEgPSBnZXRfY3IzKCkgXHUwMDI2IFBIWVNJQ0FMX1BBR0VfTUFTSztcbiYjNDM7XHRmb3IgKDsgbGV2ZWwgXHUwMDNlIFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7XG4mIzQzO1x0XHRwZ3RhYmxlID0gKHU2NCAqKShwZ3RhYmxlX3BhICYjNDM7IFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUKTtcbiYjNDM7XHRcdHB0ZSA9IHBndGFibGVbUFhEX0lOREVYKHZhZGRyLCBsZXZlbCldO1xuJiM0MztcdFx0R1VFU1RfQVNTRVJUKHB0ZSBcdTAwMjYgUFRFX1BSRVNFTlRfTUFTSyhcdTAwMjZndWVzdF9tbXUpKTtcbiYjNDM7XHRcdEdVRVNUX0FTU0VSVCghKHB0ZSBcdTAwMjYgUFRFX0hVR0VfTUFTSyhcdTAwMjZndWVzdF9tbXUpKSk7XG4mIzQzO1x0XHRwZ3RhYmxlX3BhID0gUFRFX0dFVF9QQShwdGUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGd0YWJsZSA9ICh1NjQgKikocGd0YWJsZV9wYSAmIzQzOyBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVCk7XG4mIzQzO1x0cmV0dXJuIFx1MDAyNnBndGFibGVbUFhEX0lOREVYKHZhZGRyLCBQR19MRVZFTF80SyldO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBndWVzdF9wZl9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IGZhdWx0X2FkZHI7XG4mIzQzO1x0dTY0ICpwdGVwO1xuJiM0MztcbiYjNDM7XHRmYXVsdF9hZGRyID0gZ2V0X2NyMigpO1xuJiM0MztcdEdVRVNUX0FTU0VSVF9FUShmYXVsdF9hZGRyLCBSRUFEX09OQ0UoZXhwZWN0ZWRfdmFkZHIpKTtcbiYjNDM7XG4mIzQzO1x0cHRlcCA9IGd1ZXN0X2dldF9wdGUoZmF1bHRfYWRkcik7XG4mIzQzO1x0R1VFU1RfQVNTRVJUKHB0ZXApO1xuJiM0MztcdEdVRVNUX0FTU0VSVCghKCpwdGVwIFx1MDAyNiBQVEVfUFJFU0VOVF9NQVNLKFx1MDAyNmd1ZXN0X21tdSkpKTtcbiYjNDM7XG4mIzQzO1x0KnB0ZXAgfD0gUFRFX1BSRVNFTlRfTUFTSyhcdTAwMjZndWVzdF9tbXUpO1xuJiM0MztcdGd1ZXN0X2ZhdWx0cyYjNDM7JiM0Mzs7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2FjY2Vzc19tZW1vcnkodm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHZhZGRyLCB2YWw7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHZhZGRyID0gVEVTVF9NRU1fQkFTRV9HVkEgJiM0MzsgKGkgJSBQVFJTX1BFUl9QVEUpICogUEFHRV9TSVpFO1xuJiM0MztcdFx0V1JJVEVfT05DRShleHBlY3RlZF92YWRkciwgdmFkZHIpO1xuJiM0MztcbiYjNDM7XHRcdC8qIFJlYWQgdG8gdHJpZ2dlciAjUEYgKi9cbiYjNDM7XHRcdHZhbCA9IFJFQURfT05DRSgqKHU2NCAqKXZhZGRyKTtcbiYjNDM7XHRcdEdVRVNUX0FTU0VSVF9FUSh2YWwsIFBBVFRFUk4pO1xuJiM0MztcbiYjNDM7XHRcdC8qIENsZWFyIHRoZSBwcmVzZW50IGJpdCBhZ2FpbiBzbyBpdCBmYXVsdHMgbmV4dCB0aW1lICovXG4mIzQzO1x0XHQqZ3Vlc3RfZ2V0X3B0ZSh2YWRkcikgXHUwMDI2PSB+UFRFX1BSRVNFTlRfTUFTSyhcdTAwMjZndWVzdF9tbXUpO1xuJiM0MztcdFx0aW52bHBnKHZhZGRyKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGwxX3N2bV9jb2RlKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0pXG4mIzQzO3tcbiYjNDM7XHRnZW5lcmljX3N2bV9zZXR1cChzdm0sIGd1ZXN0X2FjY2Vzc19tZW1vcnkpO1xuJiM0MztcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgfD0gQklUKFVEX1ZFQ1RPUik7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgxKSB7XG4mIzQzO1x0XHRydW5fZ3Vlc3Qoc3ZtLVx1MDAzZXZtY2IsIHN2bS1cdTAwM2V2bWNiX2dwYSk7XG4mIzQzO1x0XHRHVUVTVF9BU1NFUlRfRVEoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5leGl0X2NvZGUsXG4mIzQzO1x0XHRcdFx0KFNWTV9FWElUX0VYQ1BfQkFTRSAmIzQzOyBVRF9WRUNUT1IpKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbiYjNDM7e1xuJiM0MztcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpO1xuJiM0MztcdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7XG4mIzQzO1x0cHJlcGFyZV92bWNzKHZteCwgZ3Vlc3RfYWNjZXNzX21lbW9yeSk7XG4mIzQzO1xuJiM0MztcdEdVRVNUX0FTU0VSVCghdm13cml0ZShFWENFUFRJT05fQklUTUFQLCBCSVQoVURfVkVDVE9SKSkpO1xuJiM0MztcbiYjNDM7XHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuJiM0MztcdHdoaWxlICgxKSB7XG4mIzQzO1x0XHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpO1xuJiM0MztcdFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pIFx1MDAyNiAweGZmLCBVRF9WRUNUT1IpO1xuJiM0MztcdFx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqdGVzdF9kYXRhKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKVxuJiM0MztcdFx0bDFfc3ZtX2NvZGUodGVzdF9kYXRhKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRsMV92bXhfY29kZSh0ZXN0X2RhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqc2lndXNyX3RocmVhZF9mbih2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHRwdGhyZWFkX3QgdmNwdV90aHJlYWQgPSAocHRocmVhZF90KWFyZztcbiYjNDM7XG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0cHRocmVhZF90ZXN0Y2FuY2VsKCk7XG4mIzQzO1x0XHRwdGhyZWFkX2tpbGwodmNwdV90aHJlYWQsIFNJR1VTUjEpO1xuJiM0MztcdFx0dXNsZWVwKG1zZWNzX3RvX3VzZWNzKDEpKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGR1bW15X3NpZ25hbF9oYW5kbGVyKGludCBzaWdubykge31cbiYjNDM7c3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gc2E7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2Y3B1X3NpZ3Vzcl9saXN0ZW4odm9pZClcbiYjNDM7e1xuJiM0MztcdHNhLnNhX2hhbmRsZXIgPSBkdW1teV9zaWduYWxfaGFuZGxlcjtcbiYjNDM7XHRzaWdhY3Rpb24oU0lHVVNSMSwgXHUwMDI2c2EsIE5VTEwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2Y3B1X3NpZ3Vzcl9pZ25vcmUodm9pZClcbiYjNDM7e1xuJiM0MztcdHNhLnNhX2hhbmRsZXIgPSBTSUdfSUdOO1xuJiM0MztcdHNpZ2FjdGlvbihTSUdVU1IxLCBcdTAwMjZzYSwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGt2bV94ODZfc3RhdGVfcXVldWVfdWQoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24ucGVuZGluZyB8fCBzdGF0ZS1cdTAwM2VldmVudHMuZXhjZXB0aW9uLmluamVjdGVkKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzdGF0ZS1cdTAwM2VldmVudHMuZmxhZ3MgfD0gS1ZNX1ZDUFVFVkVOVF9WQUxJRF9QQVlMT0FEO1xuJiM0MztcdHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24ucGVuZGluZyA9IHRydWU7XG4mIzQzO1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5pbmplY3RlZCA9IGZhbHNlO1xuJiM0MztcdHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24ubnIgPSBVRF9WRUNUT1I7XG4mIzQzO1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5oYXNfZXJyb3JfY29kZSA9IGZhbHNlO1xuJiM0MztcdHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb25faGFzX3BheWxvYWQgPSBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnVuX3Rlc3QoYm9vbCBuZXN0ZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGU7XG4mIzQzO1x0aW50IHIsIGksIGxldmVsO1xuJiM0MztcdHB0aHJlYWRfdCBzaWd1c3JfdGhyZWFkO1xuJiM0MztcdGdwYV90IGdwYSwgcGd0YWJsZV9ncGE7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuJiM0MztcdHN0cnVjdCBrdm1fdm0gKnZtO1xuJiM0MztcdHN0cnVjdCB1Y2FsbCB1YztcbiYjNDM7XHR1NjQgKnBndGFibGU7XG4mIzQzO1x0Z3ZhX3QgZ3ZhO1xuJiM0MztcdHU2NCBwdGU7XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgbmVzdGVkID8gbDFfZ3Vlc3RfY29kZSA6IGd1ZXN0X2FjY2Vzc19tZW1vcnkpO1xuJiM0MztcdHZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIodm0sIFBGX1ZFQ1RPUiwgZ3Vlc3RfcGZfaGFuZGxlcik7XG4mIzQzO1xuJiM0MztcdGlmIChuZXN0ZWQpIHtcbiYjNDM7XHRcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVhDRVBUSU9OX1BBWUxPQUQsIC0ydWwpO1xuJiM0MztcdFx0aWYgKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkpXG4mIzQzO1x0XHRcdHZjcHVfYWxsb2Nfc3ZtKHZtLCBcdTAwMjZndmEpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHR2Y3B1X2FsbG9jX3ZteCh2bSwgXHUwMDI2Z3ZhKTtcbiYjNDM7XHRcdHZjcHVfYXJnc19zZXQodmNwdSwgMSwgZ3ZhKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFsbG9jYXRlIGEgcGFnZSBhbmQgd3JpdGUgdGhlIHBhdHRlcm4gdG8gaXQgKi9cbiYjNDM7XHRndmEgPSB2bV9hbGxvY19wYWdlKHZtKTtcbiYjNDM7XHQqKHU2NCAqKWFkZHJfZ3ZhMmh2YSh2bSwgZ3ZhKSA9IFBBVFRFUk47XG4mIzQzO1x0Z3BhID0gYWRkcl9ndmEyZ3BhKHZtLCBndmEpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1hcCBhbGwgdmlydHVhbCBhZGRyZXNzZXMgdG8gdGhlIHBhdHRlcm4gcGFnZSBhbmQgY2xlYXIgdGhlIHByZXNlbnRcbiYjNDM7XHQgKiBiaXQgc3VjaCB0aGF0IGd1ZXN0IGFjY2Vzc2VzIHdpbGwgY2F1c2UgYSAjUEYuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUFRSU19QRVJfUFRFOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Z3ZhID0gVEVTVF9NRU1fQkFTRV9HVkEgJiM0MzsgaSAqIGdldHBhZ2VzaXplKCk7XG4mIzQzO1x0XHR2aXJ0X3BnX21hcCh2bSwgZ3ZhLCBncGEpO1xuJiM0MztcdFx0KnZtX2dldF9wdGUodm0sIGd2YSkgXHUwMDI2PSB+UFRFX1BSRVNFTlRfTUFTSyhcdTAwMjZ2bS1cdTAwM2VtbXUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBOb3cgY3JlYXRlIG1hcHBpbmdzIGZvciB0aGUgcGFnZSB0YWJsZXMgY3JlYXRlZCBhYm92ZSBzbyB0aGF0IHRoZVxuJiM0MztcdCAqIGd1ZXN0ICNQRiBoYW5kbGVyIGNhbiB3YWxrIHRoZW0uIEFsbCBQVEVzIGZvciB0ZXN0IHZpcnR1YWwgYWRkcmVzc2VzXG4mIzQzO1x0ICogc2hvdWxkIGxpZSBvbiB0aGUgc2FtZSBQVEUgcGFnZSwgc28gb25lIHBhZ2UgaXMgbWFwcGVkIGZvciBlYWNoIHBhZ2VcbiYjNDM7XHQgKiB0YWJsZSBsZXZlbC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFVzZSBhbiBvZmZzZXQgZm9yIHRoZSBHVkEgaW5zdGVhZCBvZiBjcmVhdGluZyBpZGVudGl0eSBtYXBwaW5ncyB0b1xuJiM0MztcdCAqIGF2b2lkIGNvbGxpc2lvbiB3aXRoIGV4aXN0aW5nIG1hcHBpbmdzIGF0IGxvdyBHVkFzIChlLmcuIEVMRikuXG4mIzQzO1x0ICovXG4mIzQzO1x0cGd0YWJsZV9ncGEgPSB2bS1cdTAwM2VtbXUucGdkO1xuJiM0MztcdGZvciAobGV2ZWwgPSB2bS1cdTAwM2VtbXUucGd0YWJsZV9sZXZlbHM7IGxldmVsIFx1MDAzZT0gUEdfTEVWRUxfNEs7IGxldmVsLS0pIHtcbiYjNDM7XHRcdHZpcnRfbWFwKHZtLCBwZ3RhYmxlX2dwYSAmIzQzOyBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVCwgcGd0YWJsZV9ncGEsIDEpO1xuJiM0MztcdFx0cGd0YWJsZSA9IGFkZHJfZ3BhMmh2YSh2bSwgcGd0YWJsZV9ncGEpO1xuJiM0MztcdFx0cHRlID0gcGd0YWJsZVtQWERfSU5ERVgoVEVTVF9NRU1fQkFTRV9HVkEsIGxldmVsKV07XG4mIzQzO1x0XHRwZ3RhYmxlX2dwYSA9IFBURV9HRVRfUEEocHRlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEluaXRpYWxpemUgdGhlIHRocmVhZCBzZW5kaW5nIFNJR1VTUiBhbmQgaW5zdGFsbCB0aGUgaGFuZGxlciAqL1xuJiM0MztcdHZjcHVfc2lndXNyX2lnbm9yZSgpO1xuJiM0MztcdHIgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZzaWd1c3JfdGhyZWFkLCBOVUxMLCBzaWd1c3JfdGhyZWFkX2ZuLFxuJiM0MztcdFx0XHQgICAodm9pZCAqKXB0aHJlYWRfc2VsZigpKTtcbiYjNDM7XHRURVNUX0FTU0VSVCghciwgXCYjMzQ7cHRocmVhZF9jcmVhdGUoKSBmYWlsZWQ6ICVkXCYjMzQ7LCByKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMTsgaSBcdTAwM2M9IE5SX0lURVJBVElPTlM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogT25seSBoYW5kbGUgU0lHVVNSIHdoaWxlIHRoZSB2Q1BVIGlzIHJ1bm5pbmcsIG90aGVyd2lzZVxuJiM0MztcdFx0ICogaWdub3JlIGl0IHRvIGF2b2lkIGludGVycnVwdGluZyBvdGhlciBpb2N0bHMvc3lzY2FsbHMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHZjcHVfc2lndXNyX2xpc3RlbigpO1xuJiM0MztcdFx0ciA9IF9fdmNwdV9ydW4odmNwdSk7XG4mIzQzO1x0XHRURVNUX0FTU0VSVCghciB8fCBlcnJubyA9PSBFSU5UUiwgXCYjMzQ7RXhwZWN0ZWQgc3VjY2VzcyBvciBTSUdVU1IxXCYjMzQ7KTtcbiYjNDM7XHRcdHZjcHVfc2lndXNyX2lnbm9yZSgpO1xuJiM0MztcbiYjNDM7XHRcdC8qIFRoZSBndWVzdCBvbmx5IGV4aXRzIGR1ZSB0byBhIHNpZ25hbCBvciBmYWlsZWQgYXNzZXJ0aW9uICovXG4mIzQzO1x0XHRpZiAoIXIpIHtcbiYjNDM7XHRcdFx0VEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX0lPKTtcbiYjNDM7XHRcdFx0VEVTVF9BU1NFUlRfRVEoZ2V0X3VjYWxsKHZjcHUsIFx1MDAyNnVjKSwgVUNBTExfQUJPUlQpO1xuJiM0MztcdFx0XHRSRVBPUlRfR1VFU1RfQVNTRVJUKHVjKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0c3RhdGUgPSB2Y3B1X3NhdmVfc3RhdGUodmNwdSk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIElmIHRoZSB2Q1BVIGlzIGluIGd1ZXN0IG1vZGUsIGluamVjdCBhICNVRCB0byB0cmlnZ2VyIGFuXG4mIzQzO1x0XHQgKiBMMi1cdTAwM2VMMSBWTS1FeGl0IGV2ZXJ5IG90aGVyIGl0ZXJhdGlvbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGt2bV94ODZfc3RhdGVfaXNfZ3Vlc3RfbW9kZShzdGF0ZSkgXHUwMDI2XHUwMDI2IGkgJSAyID09IDApXG4mIzQzO1x0XHRcdGt2bV94ODZfc3RhdGVfcXVldWVfdWQoc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRcdGt2bV92bV9yZWxlYXNlKHZtKTtcbiYjNDM7XHRcdHZjcHUgPSB2bV9yZWNyZWF0ZV93aXRoX29uZV92Y3B1KHZtKTtcbiYjNDM7XHRcdGlmIChuZXN0ZWQpXG4mIzQzO1x0XHRcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVhDRVBUSU9OX1BBWUxPQUQsIC0ydWwpO1xuJiM0MztcdFx0dmNwdV9sb2FkX3N0YXRlKHZjcHUsIHN0YXRlKTtcbiYjNDM7XHRcdGt2bV94ODZfc3RhdGVfY2xlYW51cChzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdFx0cHJfaW5mbyhcJiMzNDtcXHJTYXZlJiM0MztyZXN0b3JlIGl0ZXJhdGlvbnM6ICVkXCYjMzQ7LCBpKTtcbiYjNDM7XHR9XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzeW5jX2dsb2JhbF9mcm9tX2d1ZXN0KHZtLCBndWVzdF9mYXVsdHMpO1xuJiM0MztcdFRFU1RfQVNTRVJUKGd1ZXN0X2ZhdWx0cywgXCYjMzQ7Tm8gZ3Vlc3QgcGFnZSBmYXVsdHMgdHJpZ2dlcmVkXCYjMzQ7KTtcbiYjNDM7XHRwcl9pbmZvKFwmIzM0O0d1ZXN0IHBhZ2UgZmF1bHRzJXM6ICVsdVxcblwmIzM0OywgbmVzdGVkID8gXCYjMzQ7IChpbiBMMilcJiMzNDsgOiBcJiMzNDtcJiMzNDssIGd1ZXN0X2ZhdWx0cyk7XG4mIzQzO1xuJiM0MztcdHB0aHJlYWRfY2FuY2VsKHNpZ3Vzcl90aHJlYWQpO1xuJiM0MztcdHB0aHJlYWRfam9pbihzaWd1c3JfdGhyZWFkLCBOVUxMKTtcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4mIzQzO3tcbiYjNDM7XHRwcl9pbmZvKFwmIzM0O1J1bm5pbmcgc2F2ZSYjNDM7cmVzdG9yZSBzdHJlc3MgdGVzdC4uLlxcblwmIzM0Oyk7XG4mIzQzO1x0cnVuX3Rlc3QoLypuZXN0ZWQ9Ki9mYWxzZSk7XG4mIzQzO1xuJiM0MztcdGlmICgha3ZtX2hhc19jYXAoS1ZNX0NBUF9FWENFUFRJT05fUEFZTE9BRCkgfHxcbiYjNDM7XHQgICAgIWt2bV9oYXNfY2FwKEtWTV9DQVBfTkVTVEVEX1NUQVRFKSB8fFxuJiM0MztcdCAgICAoIWt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkgXHUwMDI2XHUwMDI2ICFrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKSkge1xuJiM0MztcdFx0cHJfaW5mbyhcJiMzNDtOZXN0ZWQgdmlydHVhbGl6YXRpb24gbm90IHN1cHBvcnRlZCwgc2tpcHBpbmcgbmVzdGVkIHRlc3RcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwcl9pbmZvKFwmIzM0O1J1bm5pbmcgc2F2ZSYjNDM7cmVzdG9yZSBzdHJlc3MgdGVzdCB3aXRoIGEgbmVzdGVkIGd1ZXN0Li4uXFxuXCYjMzQ7KTtcbiYjNDM7XHRydW5fdGVzdCgvKm5lc3RlZD0qL3RydWUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXG5pbmRleCBlMjU0MmY0Y2VkNjA1Li5kMWVkYWZkNWFmNzU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmNcbkBAIC0yMiw5ICYjNDM7MjIsNiBAQFxuICNkZWZpbmUgU01SQU1fR1BBIDB4MTAwMDAwMFxuICNkZWZpbmUgU01SQU1fU1RBR0UgMHhmZVxuIFxuLSNkZWZpbmUgU1RSKHgpICN4XG4tI2RlZmluZSBYU1RSKHMpIFNUUihzKVxuLVxuICNkZWZpbmUgU1lOQ19QT1JUIDB4ZVxuICNkZWZpbmUgRE9ORSAweGZmXG4gXG5AQCAtNDIsNyAmIzQzOzM5LDcgQEAgdTggc21pX2hhbmRsZXJbXSA9IHtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc3luY193aXRoX2hvc3QodTY0IHBoYXNlKVxuIHtcbi1cdGFzbSB2b2xhdGlsZShcJiMzNDtpbiAkXCYjMzQ7IFhTVFIoU1lOQ19QT1JUKVwmIzM0OywgJSVhbCBcXG5cJiMzNDtcbiYjNDM7XHRhc20gdm9sYXRpbGUoXCYjMzQ7aW4gJFwmIzM0OyBfX3N0cmluZ2lmeShTWU5DX1BPUlQpXCYjMzQ7LCAlJWFsIFxcblwmIzM0O1xuIFx0XHQgICAgIDogXCYjMzQ7JiM0MzthXCYjMzQ7IChwaGFzZSkpO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMToyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8sIHdoaWNoIGFyZSB1c2VyLXNwYWNlIHRlc3RpbmcgcHJvZ3JhbXMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRkM2U1YjQ2YWE1NTVlMmNkODZiMGNjNTBhZDViMWFlMDI5NDEwNzQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAwMToyMzowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCmluZGV4IDg4YzZjODA0NmRkZWMuLmQ5NGY1NmM2MzBmZDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQpAQCAtMTA3LDYgJiM0MzsxMDcsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9wbXVfY291bnRlcnNfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvcG11X2V2ZW50X2ZpbHRlcl90ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdAomIzQzO1RFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvc2V0X2Jvb3RfY3B1X2lkCiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zZXRfc3JlZ3NfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oCmluZGV4IGQ2NGM4YTIyODIwN2EuLmU4MzU2ZWU1NGQ3YjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oCkBAIC0yMyw2ICYjNDM7MjMsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvbW1hbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZ2lmeS5oJmd0OwogCiAjZGVmaW5lIG1zZWNzX3RvX3VzZWNzKG1zZWMpICAgICgobXNlYykgKiAxMDAwVUxMKQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oCmluZGV4IGJlNzliZGEwMjRiZjEuLjgyYThlYTZiNjYxZjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oCkBAIC0xMjA3LDMwICYjNDM7MTIwNywyMyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1jc192bWxhdW5jaCh2b2lkKQogCiAJY3VycmVudF9ldm1jcy0mZ3Q7aHZfY2xlYW5fZmllbGRzID0gMDsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKCYjMzQ7cHVzaCAlJXJicDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyY3g7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcmR4OyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJzaTsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyZGk7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICQwOyYjMzQ7CiYjNDM7CV9fYXNtX18gX192b2xhdGlsZV9fKCYjMzQ7cHVzaCAkMDsmIzM0OwogCQkJICAgICAmIzM0O21vdiAlJXJzcCwgKCVbaG9zdF9yc3BdKTsmIzM0OwogCQkJICAgICAmIzM0O2xlYSAxZiglJXJpcCksICUlcmF4OyYjMzQ7CiAJCQkgICAgICYjMzQ7bW92ICUlcmF4LCAoJVtob3N0X3JpcF0pOyYjMzQ7CiYjNDM7CQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCiAJCQkgICAgICYjMzQ7dm1sYXVuY2g7JiMzNDsKIAkJCSAgICAgJiMzNDtpbmNxICglJXJzcCk7JiMzNDsKLQkJCSAgICAgJiMzNDsxOiBwb3AgJSVyYXg7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyZGk7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyc2k7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyZHg7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyY3g7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyYnA7JiMzNDsKJiM0MzsJCQkgICAgICYjMzQ7MTogOyYjMzQ7CiYjNDM7CQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCiYjNDM7CQkJICAgICAmIzM0O3BvcCAlJXJheDsmIzM0OwogCQkJICAgICA6IFtyZXRdJiMzNDs9JmFtcDthJiMzNDsocmV0KQogCQkJICAgICA6IFtob3N0X3JzcF0mIzM0O3ImIzM0OwogCQkJICAgICAgICgodTY0KSZhbXA7Y3VycmVudF9ldm1jcy0mZ3Q7aG9zdF9yc3ApLAogCQkJICAgICAgIFtob3N0X3JpcF0mIzM0O3ImIzM0OwotCQkJICAgICAgICgodTY0KSZhbXA7Y3VycmVudF9ldm1jcy0mZ3Q7aG9zdF9yaXApCi0JCQkgICAgIDogJiMzNDttZW1vcnkmIzM0OywgJiMzNDtjYyYjMzQ7LCAmIzM0O3JieCYjMzQ7LCAmIzM0O3I4JiMzNDssICYjMzQ7cjkmIzM0OywgJiMzNDtyMTAmIzM0OywKLQkJCSAgICAgICAmIzM0O3IxMSYjMzQ7LCAmIzM0O3IxMiYjMzQ7LCAmIzM0O3IxMyYjMzQ7LCAmIzM0O3IxNCYjMzQ7LCAmIzM0O3IxNSYjMzQ7KTsKJiM0MzsJCQkgICAgICAgKCh1NjQpJmFtcDtjdXJyZW50X2V2bWNzLSZndDtob3N0X3JpcCksCiYjNDM7CQkJICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUUwomIzQzOwkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEyNDYsMzAgJiM0MzsxMjM5LDIzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtcmVzdW1lKHZvaWQpCiAJLyogSE9TVF9SU1AgKi8KIAljdXJyZW50X2V2bWNzLSZndDtodl9jbGVhbl9maWVsZHMgJmFtcDs9IH5IVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfSE9TVF9QT0lOVEVSOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICUlcmJwOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyZHg7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcnNpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJDA7JiMzNDsKJiM0MzsJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICQwOyYjMzQ7CiAJCQkgICAgICYjMzQ7bW92ICUlcnNwLCAoJVtob3N0X3JzcF0pOyYjMzQ7CiAJCQkgICAgICYjMzQ7bGVhIDFmKCUlcmlwKSwgJSVyYXg7JiMzNDsKIAkJCSAgICAgJiMzNDttb3YgJSVyYXgsICglW2hvc3RfcmlwXSk7JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KIAkJCSAgICAgJiMzNDt2bXJlc3VtZTsmIzM0OwogCQkJICAgICAmIzM0O2luY3EgKCUlcnNwKTsmIzM0OwotCQkJICAgICAmIzM0OzE6IHBvcCAlJXJheDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJzaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJicDsmIzM0OwomIzQzOwkJCSAgICAgJiMzNDsxOiA7JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KJiM0MzsJCQkgICAgICYjMzQ7cG9wICUlcmF4OyYjMzQ7CiAJCQkgICAgIDogW3JldF0mIzM0Oz0mYW1wO2EmIzM0OyhyZXQpCiAJCQkgICAgIDogW2hvc3RfcnNwXSYjMzQ7ciYjMzQ7CiAJCQkgICAgICAgKCh1NjQpJmFtcDtjdXJyZW50X2V2bWNzLSZndDtob3N0X3JzcCksCiAJCQkgICAgICAgW2hvc3RfcmlwXSYjMzQ7ciYjMzQ7Ci0JCQkgICAgICAgKCh1NjQpJmFtcDtjdXJyZW50X2V2bWNzLSZndDtob3N0X3JpcCkKLQkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDssICYjMzQ7cmJ4JiMzNDssICYjMzQ7cjgmIzM0OywgJiMzNDtyOSYjMzQ7LCAmIzM0O3IxMCYjMzQ7LAotCQkJICAgICAgICYjMzQ7cjExJiMzNDssICYjMzQ7cjEyJiMzNDssICYjMzQ7cjEzJiMzNDssICYjMzQ7cjE0JiMzNDssICYjMzQ7cjE1JiMzNDspOwomIzQzOwkJCSAgICAgICAoKHU2NCkmYW1wO2N1cnJlbnRfZXZtY3MtJmd0O2hvc3RfcmlwKSwKJiM0MzsJCQkgICAgICAgR1VFU1RfUkVHU19PRkZTRVRTCiYjNDM7CQkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDssICYjMzQ7Y2MmIzM0Oyk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oCmluZGV4IGIxNjExNzRlY2U0NTMuLjZlNmY3MDAzNTUwOGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmgKQEAgLTI0LDYgJiM0MzsyNCw3IEBAIGV4dGVybiBib29sIGhvc3RfY3B1X2lzX2FtZDsKIGV4dGVybiBib29sIGhvc3RfY3B1X2lzX2h5Z29uOwogZXh0ZXJuIGJvb2wgaG9zdF9jcHVfaXNfYW1kX2NvbXBhdGlibGU7CiBleHRlcm4gdTY0IGd1ZXN0X3RzY19raHo7CiYjNDM7ZXh0ZXJuIHN0cnVjdCBrdm1fbW11IGd1ZXN0X21tdTsKIAogI2lmbmRlZiBNQVhfTlJfQ1BVSURfRU5UUklFUwogI2RlZmluZSBNQVhfTlJfQ1BVSURfRU5UUklFUyAxMDAKQEAgLTM5OCw4ICYjNDM7Mzk5LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgeDg2X21vZGVsKHVuc2lnbmVkIGludCBlYXgpCiAjZGVmaW5lIFBURV9HRVRfUEEocHRlKQkJKChwdGUpICZhbXA7IFBIWVNJQ0FMX1BBR0VfTUFTSykKICNkZWZpbmUgUFRFX0dFVF9QRk4ocHRlKSAgICAgICAgKFBURV9HRVRfUEEocHRlKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKQogCi0vKiBHZW5lcmFsIFJlZ2lzdGVycyBpbiA2NC1CaXQgTW9kZSAqLwotc3RydWN0IGdwcjY0X3JlZ3MgewomIzQzO3N0cnVjdCBndWVzdF9yZWdzIHsKIAl1NjQgcmF4OwogCXU2NCByY3g7CiAJdTY0IHJkeDsKQEAgLTQxNiw4ICYjNDM7NDE2LDM4IEBAIHN0cnVjdCBncHI2NF9yZWdzIHsKIAl1NjQgcjEzOwogCXU2NCByMTQ7CiAJdTY0IHIxNTsKJiM0MzsJdTY0IHJmbGFnczsKIH07CiAKJiM0MztleHRlcm4gc3RydWN0IGd1ZXN0X3JlZ3MgZ3Vlc3RfcmVnczsKJiM0MzsKJiM0MzsjZGVmaW5lIEdVRVNUX1JFR19PRkZTRVQobmFtZSkgXAomIzQzOwlbb2ZmXyMjbmFtZV0gJiMzNDtpJiMzNDsgKG9mZnNldG9mKHN0cnVjdCBndWVzdF9yZWdzLCBuYW1lKSkKJiM0MzsKJiM0MzsjZGVmaW5lIEdVRVNUX1JFR1NfT0ZGU0VUUwlcCiYjNDM7CUdVRVNUX1JFR19PRkZTRVQocmF4KSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHJjeCksCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyZHgpLAlcCiYjNDM7CUdVRVNUX1JFR19PRkZTRVQocmJ4KSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHJzcCksCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyYnApLAlcCiYjNDM7CUdVRVNUX1JFR19PRkZTRVQocnNpKSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHJkaSksCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyOCksCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyOSksCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyMTApLAlcCiYjNDM7CUdVRVNUX1JFR19PRkZTRVQocjExKSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHIxMiksCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyMTMpLAlcCiYjNDM7CUdVRVNUX1JFR19PRkZTRVQocjE0KSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHIxNSksCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyZmxhZ3MpCiYjNDM7CiYjNDM7I2RlZmluZSBHVUVTVF9SRUcobmFtZSkgJiMzNDtndWVzdF9yZWdzICYjNDM7ICVjW29mZl8mIzM0OyAjbmFtZSAmIzM0O10mIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgR1VFU1RfU1dJVENIX0dQUl9BU00obmFtZSkgXAomIzQzOwkmIzM0O3hjaGcgJSUmIzM0OyAjbmFtZSAmIzM0OywgJiMzNDsgR1VFU1RfUkVHKG5hbWUpICYjMzQ7XG5cdCYjMzQ7CiYjNDM7CiBzdHJ1Y3QgZGVzYzY0IHsKIAl1MTYgbGltaXQwOwogCXUxNiBiYXNlMDsKQEAgLTU4NCw2ICYjNDM7NjE0LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY3IwKHU2NCB2YWwpCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDttb3YgJTAsICUlY3IwJiMzNDsgOiA6ICYjMzQ7ciYjMzQ7ICh2YWwpIDogJiMzNDttZW1vcnkmIzM0Oyk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHU2NCBnZXRfY3IyKHZvaWQpCiYjNDM7ewomIzQzOwl1NjQgY3IyOwomIzQzOwomIzQzOwlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O21vdiAlJWNyMiwgJVtjcjJdJiMzNDsgOiBbY3IyXSYjMzQ7PXImIzM0OyhjcjIpKTsKJiM0MzsJcmV0dXJuIGNyMjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHU2NCBnZXRfY3IzKHZvaWQpCiB7CiAJdTY0IGNyMzsKQEAgLTg3OSw2ICYjNDM7OTE3LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9zc2VfcmVnKGludCByZWcsIGNvbnN0IHNzZTEyOF90ICpkYXRhKQogCX0KIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpbnZscGcodTY0IGFkZHIpCiYjNDM7ewomIzQzOwlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O2ludmxwZyAoJTApJiMzNDsgOiA6ICYjMzQ7ciYjMzQ7KGFkZHIpIDogJiMzNDttZW1vcnkmIzM0Oyk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIGNwdV9yZWxheCh2b2lkKQogewogCWFzbSB2b2xhdGlsZSgmIzM0O3JlcDsgbm9wJiMzNDsgOjo6ICYjMzQ7bWVtb3J5JiMzNDspOwpAQCAtOTE1LDYgJiM0Mzs5NTgsMTEgQEAgc3RydWN0IGt2bV94ODZfc3RhdGUgKnZjcHVfc2F2ZV9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCB2Y3B1X2xvYWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGUpOwogdm9pZCBrdm1feDg2X3N0YXRlX2NsZWFudXAoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKTsKIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1feDg2X3N0YXRlX2lzX2d1ZXN0X21vZGUoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN0YXRlLSZndDtuZXN0ZWQuc2l6ZSAmYW1wOyZhbXA7IChzdGF0ZS0mZ3Q7bmVzdGVkLmZsYWdzICZhbXA7IEtWTV9TVEFURV9ORVNURURfR1VFU1RfTU9ERSk7CiYjNDM7fQomIzQzOwogY29uc3Qgc3RydWN0IGt2bV9tc3JfbGlzdCAqa3ZtX2dldF9tc3JfaW5kZXhfbGlzdCh2b2lkKTsKIGNvbnN0IHN0cnVjdCBrdm1fbXNyX2xpc3QgKmt2bV9nZXRfZmVhdHVyZV9tc3JfaW5kZXhfbGlzdCh2b2lkKTsKIGJvb2wga3ZtX21zcl9pc19pbl9zYXZlX3Jlc3RvcmVfbGlzdCh1MzIgbXNyX2luZGV4KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaAppbmRleCA0YmNmZDYwZTNhZWNiLi4wNGY1ZTM0ZGVhM2FlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oCkBAIC0yOTAsNiAmIzQzOzI5MCwyMyBAQCBzdHJ1Y3Qgdm14X21zcl9lbnRyeSB7CiAJdTY0IHZhbHVlOwogfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgxNikpKTsKIAomIzQzOyNkZWZpbmUgVk1YX1NXSVRDSF9HUFJTX0FTTSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJheCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYngpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocmN4KSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkeCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYnApIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocnNpKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkaSkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOCkgIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjkpICBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTEpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjEyKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMykgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTQpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjE1KQomIzQzOwogI2luY2x1ZGUgJiMzNDtldm1jcy5oJiMzNDsKIAogc3RhdGljIGlubGluZSBpbnQgdm14b24odTY0IHBoeXMpCkBAIC0zNjMsOSAmIzQzOzM4MCw2IEBAIHN0YXRpYyBpbmxpbmUgdTY0IHZtcHRyc3R6KHZvaWQpCiAJcmV0dXJuIHZhbHVlOwogfQogCi0vKgotICogTm8gZ3Vlc3Qgc3RhdGUgKGUuZy4gR1BScykgaXMgZXN0YWJsaXNoZWQgYnkgdGhpcyB2bWxhdW5jaC4KLSAqLwogc3RhdGljIGlubGluZSBpbnQgdm1sYXVuY2godm9pZCkKIHsKIAlpbnQgcmV0OwpAQCAtMzczLDM0ICYjNDM7Mzg3LDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpCiAJaWYgKGVuYWJsZV9ldm1jcykKIAkJcmV0dXJuIGV2bWNzX3ZtbGF1bmNoKCk7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O3B1c2ggJSVyYnA7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcmN4OyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJkeDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyc2k7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcmRpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAkMDsmIzM0OwomIzQzOwlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O3B1c2ggJDA7JiMzNDsKIAkJCSAgICAgJiMzNDt2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTsmIzM0OwogCQkJICAgICAmIzM0O2xlYSAxZiglJXJpcCksICUlcmF4OyYjMzQ7CiAJCQkgICAgICYjMzQ7dm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KIAkJCSAgICAgJiMzNDt2bWxhdW5jaDsmIzM0OwogCQkJICAgICAmIzM0O2luY3EgKCUlcnNwKTsmIzM0OwotCQkJICAgICAmIzM0OzE6IHBvcCAlJXJheDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJzaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJicDsmIzM0OwomIzQzOwkJCSAgICAgJiMzNDsxOiA7JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KJiM0MzsJCQkgICAgICYjMzQ7cG9wICUlcmF4OyYjMzQ7CiAJCQkgICAgIDogW3JldF0mIzM0Oz0mYW1wO2EmIzM0OyhyZXQpCiAJCQkgICAgIDogW2hvc3RfcnNwXSYjMzQ7ciYjMzQ7KCh1NjQpSE9TVF9SU1ApLAotCQkJICAgICAgIFtob3N0X3JpcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUklQKQotCQkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDssICYjMzQ7Y2MmIzM0OywgJiMzNDtyYngmIzM0OywgJiMzNDtyOCYjMzQ7LCAmIzM0O3I5JiMzNDssICYjMzQ7cjEwJiMzNDssCi0JCQkgICAgICAgJiMzNDtyMTEmIzM0OywgJiMzNDtyMTImIzM0OywgJiMzNDtyMTMmIzM0OywgJiMzNDtyMTQmIzM0OywgJiMzNDtyMTUmIzM0Oyk7CiYjNDM7CQkJICAgICAgIFtob3N0X3JpcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUklQKSwKJiM0MzsJCQkgICAgICAgR1VFU1RfUkVHU19PRkZTRVRTCiYjNDM7CQkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDssICYjMzQ7Y2MmIzM0Oyk7CiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIE5vIGd1ZXN0IHN0YXRlIChlLmcuIEdQUnMpIGlzIGVzdGFibGlzaGVkIGJ5IHRoaXMgdm1yZXN1bWUuCi0gKi8KIHN0YXRpYyBpbmxpbmUgaW50IHZtcmVzdW1lKHZvaWQpCiB7CiAJaW50IHJldDsKQEAgLTQwOCwyOCAmIzQzOzQxMiwyMSBAQCBzdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKQogCWlmIChlbmFibGVfZXZtY3MpCiAJCXJldHVybiBldm1jc192bXJlc3VtZSgpOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICUlcmJwOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyZHg7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcnNpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJDA7JiMzNDsKJiM0MzsJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICQwOyYjMzQ7CiAJCQkgICAgICYjMzQ7dm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07JiMzNDsKIAkJCSAgICAgJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDsmIzM0OwogCQkJICAgICAmIzM0O3Ztd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdOyYjMzQ7CiYjNDM7CQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCiAJCQkgICAgICYjMzQ7dm1yZXN1bWU7JiMzNDsKIAkJCSAgICAgJiMzNDtpbmNxICglJXJzcCk7JiMzNDsKLQkJCSAgICAgJiMzNDsxOiBwb3AgJSVyYXg7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyZGk7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyc2k7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyZHg7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyY3g7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyYnA7JiMzNDsKJiM0MzsJCQkgICAgICYjMzQ7MTogOyYjMzQ7CiYjNDM7CQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCiYjNDM7CQkJICAgICAmIzM0O3BvcCAlJXJheDsmIzM0OwogCQkJICAgICA6IFtyZXRdJiMzNDs9JmFtcDthJiMzNDsocmV0KQogCQkJICAgICA6IFtob3N0X3JzcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUlNQKSwKLQkJCSAgICAgICBbaG9zdF9yaXBdJiMzNDtyJiMzNDsoKHU2NClIT1NUX1JJUCkKLQkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDssICYjMzQ7cmJ4JiMzNDssICYjMzQ7cjgmIzM0OywgJiMzNDtyOSYjMzQ7LCAmIzM0O3IxMCYjMzQ7LAotCQkJICAgICAgICYjMzQ7cjExJiMzNDssICYjMzQ7cjEyJiMzNDssICYjMzQ7cjEzJiMzNDssICYjMzQ7cjE0JiMzNDssICYjMzQ7cjE1JiMzNDspOwomIzQzOwkJCSAgICAgICBbaG9zdF9yaXBdJiMzNDtyJiMzNDsoKHU2NClIT1NUX1JJUCksCiYjNDM7CQkJICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUUwomIzQzOwkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jCmluZGV4IDFkNzJkY2RmY2UzYjYuLjNlMzUzYWMzOWVlYjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuYwpAQCAtNzQsNyAmIzQzOzc0LDcgQEAgdGVzdF9hc3NlcnQoYm9vbCBleHAsIGNvbnN0IGNoYXIgKmV4cF9zdHIsCiAJaWYgKCEoZXhwKSkgewogCQl2YV9zdGFydChhcCwgZm10KTsKIAotCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDs9PT09IFRlc3QgQXNzZXJ0aW9uIEZhaWx1cmUgPT09PVxuJiMzNDsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O1xuPT09PSBUZXN0IEFzc2VydGlvbiBGYWlsdXJlID09PT1cbiYjMzQ7CiAJCQkmIzM0OyAgJXM6JXU6ICVzXG4mIzM0OwogCQkJJiMzNDsgIHBpZD0lZCB0aWQ9JWQgZXJybm89JWQgLSAlc1xuJiMzNDssCiAJCQlmaWxlLCBsaW5lLCBleHBfc3RyLCBnZXRwaWQoKSwga3ZtX2dldHRpZCgpLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYwppbmRleCBlZjU2ZGNlZmUwMTE5Li5kMzFmYTgxZWEwNzU2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYwpAQCAtMjgsNiAmIzQzOzI4LDkgQEAgYm9vbCBob3N0X2NwdV9pc19oeWdvbjsKIGJvb2wgaG9zdF9jcHVfaXNfYW1kX2NvbXBhdGlibGU7CiBib29sIGlzX2ZvcmNlZF9lbXVsYXRpb25fZW5hYmxlZDsKIHU2NCBndWVzdF90c2Nfa2h6OwomIzQzO3N0cnVjdCBrdm1fbW11IGd1ZXN0X21tdTsKJiM0MzsKJiM0MztzdHJ1Y3QgZ3Vlc3RfcmVncyBndWVzdF9yZWdzOwogCiBjb25zdCBjaGFyICpleF9zdHIoaW50IHZlY3RvcikKIHsKQEAgLTgyOSw2ICYjNDM7ODMyLDE3IEBAIHZvaWQga3ZtX2FyY2hfdm1fcG9zdF9jcmVhdGUoc3RydWN0IGt2bV92bSAqdm0sIHVuc2lnbmVkIGludCBucl92Y3B1cykKIAlURVNUX0FTU0VSVChyICZndDsgMCwgJiMzNDtLVk1fR0VUX1RTQ19LSFogZGlkIG5vdCBwcm92aWRlIGEgdmFsaWQgVFNDIGZyZXF1ZW5jeS4mIzM0Oyk7CiAJZ3Vlc3RfdHNjX2toeiA9IHI7CiAJc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGd1ZXN0X3RzY19raHopOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgZ3Vlc3QgTU1VIGlzIGp1c3QgYSBwbGFjZWhvbGRlciB0byBwcm92aWRlIGFjY2VzcyB0byBQVEUgbWFza3MKJiM0MzsJICogKGZvciBub3cpLiBUaGUgZ3Vlc3QgZG9lcyBub3QgaGF2ZSBtYXBwaW5ncyBmb3IgaXRzIG93biBwYWdlIHRhYmxlcwomIzQzOwkgKiBieSBkZWZhdWx0LCBzbyBhbnkgbWVhbmluZ2Z1bCB1c2Ugb2YgZ3Vlc3QgcGFnZSB0YWJsZXMgcmVxdWlyZXMKJiM0MzsJICogZXhwbGljaXQgc2V0dXAgYnkgdGhlIHRlc3QuIFplcm8gdGhlIFBHRCB0byBtYWtlIGl0IG9idmlvdXMgdGhlIGd1ZXN0CiYjNDM7CSAqIHBhZ2UgdGFibGVzIGFyZSBub3QgaW1tZWRpYXRlbHkgdXNhYmxlIGJ5IGd1ZXN0IGNvZGUuCiYjNDM7CSAqLwomIzQzOwlndWVzdF9tbXUgPSB2bS0mZ3Q7bW11OwomIzQzOwlndWVzdF9tbXUucGdkID0gMDsKJiM0MzsJc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGd1ZXN0X21tdSk7CiB9CiAKIHZvaWQgdmNwdV9hcmNoX3NldF9lbnRyeV9wb2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHZvaWQgKmd1ZXN0X2NvZGUpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jCmluZGV4IDE0NDViODkwOTg2ZmQuLmIwNWJlNTBmMDc1ZDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jCkBAIC0xMyw5ICYjNDM7MTMsNiBAQAogCiAjZGVmaW5lIFNFVl9ERVZfUEFUSCAmIzM0Oy9kZXYvc2V2JiMzNDsKIAotc3RydWN0IGdwcjY0X3JlZ3MgZ3Vlc3RfcmVnczsKLXU2NCByZmxhZ3M7Ci0KIC8qIEFsbG9jYXRlIG1lbW9yeSByZWdpb25zIGZvciBuZXN0ZWQgU1ZNIHRlc3RzLgogICoKICAqIElucHV0IEFyZ3M6CkBAIC0xMzcsNDYgJiM0MzsxMzQsNDcgQEAgdm9pZCBnZW5lcmljX3N2bV9zZXR1cChzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtLCB2b2lkICpndWVzdF9yaXApCiAgKiBzYXZlL3Jlc3RvcmUgNjQtYml0IGdlbmVyYWwgcmVnaXN0ZXJzIGV4Y2VwdCByYXgsIHJpcCwgcnNwCiAgKiB3aGljaCBhcmUgZGlyZWN0bHkgaGFuZGVkIHRocm91Z2ggdGhlIFZNQ0IgZ3Vlc3QgcHJvY2Vzc29yIHN0YXRlCiAgKi8KLSNkZWZpbmUgU0FWRV9HUFJfQwkJCQlcCi0JJiMzNDt4Y2hnICUlcmJ4LCBndWVzdF9yZWdzJiM0MzsweDIwXG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyY3gsIGd1ZXN0X3JlZ3MmIzQzOzB4MTBcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXJkeCwgZ3Vlc3RfcmVncyYjNDM7MHgxOFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcmJwLCBndWVzdF9yZWdzJiM0MzsweDMwXG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyc2ksIGd1ZXN0X3JlZ3MmIzQzOzB4Mzhcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXJkaSwgZ3Vlc3RfcmVncyYjNDM7MHg0MFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcjgsICBndWVzdF9yZWdzJiM0MzsweDQ4XG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyOSwgIGd1ZXN0X3JlZ3MmIzQzOzB4NTBcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXIxMCwgZ3Vlc3RfcmVncyYjNDM7MHg1OFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcjExLCBndWVzdF9yZWdzJiM0MzsweDYwXG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyMTIsIGd1ZXN0X3JlZ3MmIzQzOzB4Njhcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXIxMywgZ3Vlc3RfcmVncyYjNDM7MHg3MFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcjE0LCBndWVzdF9yZWdzJiM0MzsweDc4XG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyMTUsIGd1ZXN0X3JlZ3MmIzQzOzB4ODBcblx0JiMzNDsKLQotI2RlZmluZSBMT0FEX0dQUl9DICAgICAgU0FWRV9HUFJfQwomIzQzOyNkZWZpbmUgU1ZNX1NXSVRDSF9HUFJTX0FTTSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJieCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyY3gpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocmR4KSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJicCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyc2kpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocmRpKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHI4KSAgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOSkgIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjEwKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMSkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTIpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjEzKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTUpCiAKIC8qCiAgKiBzZWxmdGVzdHMgZG8gbm90IHVzZSBpbnRlcnJ1cHRzIHNvIHdlIGRyb3BwZWQgY2xnaS9zdGkvY2xpL3N0Z2kKLSAqIGZvciBub3cuIHJlZ2lzdGVycyBpbnZvbHZlZCBpbiBMT0FEL1NBVkVfR1BSX0MgYXJlIGV2ZW50dWFsbHkKJiM0MzsgKiBmb3Igbm93LiBSZWdpc3RlcnMgaW52b2x2ZWQgaW4gU1ZNX1NXSVRDSF9HUFJTX0FTTSBhcmUgZXZlbnR1YWxseQogICogdW5tb2RpZmllZCBzbyB0aGV5IGRvIG5vdCBuZWVkIHRvIGJlIGluIHRoZSBjbG9iYmVyIGxpc3QuCiAgKi8KIHZvaWQgcnVuX2d1ZXN0KHN0cnVjdCB2bWNiICp2bWNiLCB1NjQgdm1jYl9ncGEpCiB7CiAJYXNtIHZvbGF0aWxlICgKIAkJJiMzNDt2bWxvYWQgJVt2bWNiX2dwYV1cblx0JiMzNDsKLQkJJiMzNDttb3YgcmZsYWdzLCAlJXIxNVxuXHQmIzM0OwkvLyByZmxhZ3MKLQkJJiMzNDttb3YgJSVyMTUsIDB4MTcwKCVbdm1jYl0pXG5cdCYjMzQ7Ci0JCSYjMzQ7bW92IGd1ZXN0X3JlZ3MsICUlcjE1XG5cdCYjMzQ7CS8vIHJheAotCQkmIzM0O21vdiAlJXIxNSwgMHgxZjgoJVt2bWNiXSlcblx0JiMzNDsKLQkJTE9BRF9HUFJfQwomIzQzOwkJJiMzNDttb3YgJiMzNDsgR1VFU1RfUkVHKHJmbGFncykgJiMzNDssICUlcjE1XG5cdCYjMzQ7CiYjNDM7CQkmIzM0O21vdiAlJXIxNSwgJVt2bWNiX3JmbGFnc11cblx0JiMzNDsKJiM0MzsJCSYjMzQ7bW92ICYjMzQ7IEdVRVNUX1JFRyhyYXgpICYjMzQ7LCAlJXIxNVxuXHQmIzM0OwomIzQzOwkJJiMzNDttb3YgJSVyMTUsICVbdm1jYl9yYXhdXG5cdCYjMzQ7CiYjNDM7CQlTVk1fU1dJVENIX0dQUlNfQVNNCiAJCSYjMzQ7dm1ydW4gJVt2bWNiX2dwYV1cblx0JiMzNDsKLQkJU0FWRV9HUFJfQwotCQkmIzM0O21vdiAweDE3MCglW3ZtY2JdKSwgJSVyMTVcblx0JiMzNDsJLy8gcmZsYWdzCi0JCSYjMzQ7bW92ICUlcjE1LCByZmxhZ3Ncblx0JiMzNDsKLQkJJiMzNDttb3YgMHgxZjgoJVt2bWNiXSksICUlcjE1XG5cdCYjMzQ7CS8vIHJheAotCQkmIzM0O21vdiAlJXIxNSwgZ3Vlc3RfcmVnc1xuXHQmIzM0OwomIzQzOwkJU1ZNX1NXSVRDSF9HUFJTX0FTTQomIzQzOwkJJiMzNDttb3YgJVt2bWNiX3JmbGFnc10sICUlcjE1XG5cdCYjMzQ7CiYjNDM7CQkmIzM0O21vdiAlJXIxNSwgJiMzNDsgR1VFU1RfUkVHKHJmbGFncykgJiMzNDtcblx0JiMzNDsKJiM0MzsJCSYjMzQ7bW92ICVbdm1jYl9yYXhdLCAlJXIxNVxuXHQmIzM0OwkvLyByYXgKJiM0MzsJCSYjMzQ7bW92ICUlcjE1LCAmIzM0OyBHVUVTVF9SRUcocmF4KSAmIzM0O1xuXHQmIzM0OwogCQkmIzM0O3Ztc2F2ZSAlW3ZtY2JfZ3BhXVxuXHQmIzM0OwotCQk6IDogW3ZtY2JdICYjMzQ7ciYjMzQ7ICh2bWNiKSwgW3ZtY2JfZ3BhXSAmIzM0O2EmIzM0OyAodm1jYl9ncGEpCiYjNDM7CQk6IFt2bWNiX3JmbGFnc10gJiMzNDsmIzQzO20mIzM0OyAodm1jYi0mZ3Q7c2F2ZS5yZmxhZ3MpLAomIzQzOwkJICBbdm1jYl9yYXhdICYjMzQ7JiM0MzttJiMzNDsgKHZtY2ItJmd0O3NhdmUucmF4KQomIzQzOwkJOiBbdm1jYl9ncGFdICYjMzQ7YSYjMzQ7ICh2bWNiX2dwYSksCiYjNDM7CQkgIEdVRVNUX1JFR1NfT0ZGU0VUUwogCQk6ICYjMzQ7cjE1JiMzNDssICYjMzQ7bWVtb3J5JiMzNDspOwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuYwppbmRleCBlN2RkNTc5MTk1OWJhLi4zODA1MGM2MGEwNjcwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmMKQEAgLTEwLDM2ICYjNDM7MTAsOCBAQAogCiB2b2lkIHVjYWxsX2FyY2hfZG9fdWNhbGwoZ3ZhX3QgdWMpCiB7Ci0JLyoKLQkgKiBGSVhNRTogUmV2ZXJ0IHRoaXMgaGFjayAodGhlIGVudGlyZSBjb21taXQgdGhhdCBhZGRlZCBpdCkgb25jZSBuVk1YCi0JICogcHJlc2VydmVzIEwyIEdQUnMgYWNyb3NzIGEgbmVzdGVkIFZNLUV4aXQuICBJZiBhIHVjYWxsIGZyb20gTDIsIGUuZy4KLQkgKiB0byBkbyBhIEdVRVNUX1NZTkMoKSwgbGFuZHMgdGhlIHZDUFUgaW4gTDEsIGFueSBhbmQgYWxsIEdQUnMgY2FuIGJlCi0JICogY2xvYmJlcmVkIGJ5IEwxLiAgU2F2ZSBhbmQgcmVzdG9yZSBub24tdm9sYXRpbGUgR1BScyAoY2xvYmJlcmluZyBSQlAKLQkgKiBpbiBwYXJ0aWN1bGFyIGlzIHByb2JsZW1hdGljKSBhbG9uZyB3aXRoIFJEWCBhbmQgUkRJICh3aGljaCBhcmUKLQkgKiBpbnB1dHMpLCBhbmQgY2xvYmJlciB2b2xhdGlsZSBHUFJzLiAqc2lnaCoKLQkgKi8KLSNkZWZpbmUgSE9SUklGSUNfTDJfVUNBTExfQ0xPQkJFUl9IQUNLCVwKLQkmIzM0O3JjeCYjMzQ7LCAmIzM0O3JzaSYjMzQ7LCAmIzM0O3I4JiMzNDssICYjMzQ7cjkmIzM0OywgJiMzNDtyMTAmIzM0OywgJiMzNDtyMTEmIzM0OwotCi0JYXNtIHZvbGF0aWxlKCYjMzQ7cHVzaCAlJXJicFxuXHQmIzM0OwotCQkgICAgICYjMzQ7cHVzaCAlJXIxNVxuXHQmIzM0OwotCQkgICAgICYjMzQ7cHVzaCAlJXIxNFxuXHQmIzM0OwotCQkgICAgICYjMzQ7cHVzaCAlJXIxM1xuXHQmIzM0OwotCQkgICAgICYjMzQ7cHVzaCAlJXIxMlxuXHQmIzM0OwotCQkgICAgICYjMzQ7cHVzaCAlJXJieFxuXHQmIzM0OwotCQkgICAgICYjMzQ7cHVzaCAlJXJkeFxuXHQmIzM0OwotCQkgICAgICYjMzQ7cHVzaCAlJXJkaVxuXHQmIzM0OwotCQkgICAgICYjMzQ7aW4gJVtwb3J0XSwgJSVhbFxuXHQmIzM0OwotCQkgICAgICYjMzQ7cG9wICUlcmRpXG5cdCYjMzQ7Ci0JCSAgICAgJiMzNDtwb3AgJSVyZHhcblx0JiMzNDsKLQkJICAgICAmIzM0O3BvcCAlJXJieFxuXHQmIzM0OwotCQkgICAgICYjMzQ7cG9wICUlcjEyXG5cdCYjMzQ7Ci0JCSAgICAgJiMzNDtwb3AgJSVyMTNcblx0JiMzNDsKLQkJICAgICAmIzM0O3BvcCAlJXIxNFxuXHQmIzM0OwotCQkgICAgICYjMzQ7cG9wICUlcjE1XG5cdCYjMzQ7Ci0JCSAgICAgJiMzNDtwb3AgJSVyYnBcblx0JiMzNDsKLQkJOiA6IFtwb3J0XSAmIzM0O2QmIzM0OyAoVUNBTExfUElPX1BPUlQpLCAmIzM0O0QmIzM0OyAodWMpIDogJiMzNDtyYXgmIzM0OywgJiMzNDttZW1vcnkmIzM0OywKLQkJICAgICBIT1JSSUZJQ19MMl9VQ0FMTF9DTE9CQkVSX0hBQ0spOwomIzQzOwlhc20gdm9sYXRpbGUoJiMzNDtpbiAlW3BvcnRdLCAlJWFsJiMzNDsKJiM0MzsJCTogOiBbcG9ydF0gJiMzNDtkJiMzNDsgKFVDQUxMX1BJT19QT1JUKSwgJiMzNDtEJiMzNDsgKHVjKSA6ICYjMzQ7cmF4JiMzNDssICYjMzQ7bWVtb3J5JiMzNDspOwogfQogCiB2b2lkICp1Y2FsbF9hcmNoX2dldF91Y2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni92bXguYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jCmluZGV4IGNkMDljOWRlNDQ4NWEuLjA4OWUxYThhZjUzZmMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jCkBAIC0yMzIsNyAmIzQzOzIzMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3ZtY3NfY29udHJvbF9maWVsZHMoc3RydWN0IHZteF9wYWdlcyAqdm14KQogCiAJdm13cml0ZShFWENFUFRJT05fQklUTUFQLCAwKTsKIAl2bXdyaXRlKFBBR0VfRkFVTFRfRVJST1JfQ09ERV9NQVNLLCAwKTsKLQl2bXdyaXRlKFBBR0VfRkFVTFRfRVJST1JfQ09ERV9NQVRDSCwgLTEpOyAvKiBOZXZlciBtYXRjaCAqLwomIzQzOwl2bXdyaXRlKFBBR0VfRkFVTFRfRVJST1JfQ09ERV9NQVRDSCwgMCk7CiAJdm13cml0ZShDUjNfVEFSR0VUX0NPVU5ULCAwKTsKIAl2bXdyaXRlKFZNX0VYSVRfQ09OVFJPTFMsIHJkbXNyKE1TUl9JQTMyX1ZNWF9FWElUX0NUTFMpIHwKIAkJVk1fRVhJVF9IT1NUX0FERFJfU1BBQ0VfU0laRSk7CSAgLyogNjQtYml0IGhvc3QgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuYwppbmRleCA3N2NlODdjNDFhODY4Li5hYTdmM2I0MDVmZDMyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jCkBAIC0yMiw5ICYjNDM7MjIsNiBAQAogCiAjZGVmaW5lIFNZTkNfUE9SVAkweGUKIAotI2RlZmluZSBTVFIoeCkgI3gKLSNkZWZpbmUgWFNUUihzKSBTVFIocykKLQogLyoKICAqIFNNSSBoYW5kbGVyOiBydW5zIGluIHJlYWwtYWRkcmVzcyBtb2RlLgogICogUmVwb3J0cyBTTVJBTV9TVEFHRSB2aWEgcG9ydCBJTywgdGhlbiBkb2VzIFJTTS4KQEAgLTM3LDcgJiM0MzszNCw3IEBAIHN0YXRpYyB1OCBzbWlfaGFuZGxlcltdID0gewogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3luY193aXRoX2hvc3QodTY0IHBoYXNlKQogewotCWFzbSB2b2xhdGlsZSgmIzM0O2luICQmIzM0OyBYU1RSKFNZTkNfUE9SVCkgJiMzNDssICUlYWwgXG4mIzM0OwomIzQzOwlhc20gdm9sYXRpbGUoJiMzNDtpbiAkJiMzNDsgX19zdHJpbmdpZnkoU1lOQ19QT1JUKSAmIzM0OywgJSVhbCBcbiYjMzQ7CiAJCSAgICAgOiAmIzM0OyYjNDM7YSYjMzQ7IChwaGFzZSkpOwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9maXhfaHlwZXJjYWxsX3Rlc3QuYwppbmRleCA3NTNhMGU3MzBlYThkLi40OTMxZWMyMjc2OGVlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZml4X2h5cGVyY2FsbF90ZXN0LmMKQEAgLTYsNyAmIzQzOzYsNiBAQAogICovCiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9wYXJhLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva3ZtX3BhcmEuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmdpZnkuaCZndDsKICNpbmNsdWRlICZsdDtzdGRpbnQuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtrdm1fdGVzdF9oYXJuZXNzLmgmIzM0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNTA3MzkxYWIyYzkzMAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmMKQEAgLTAsMCAmIzQzOzEsMjg4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt0aW1lLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3B0aHJlYWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtnZXRvcHQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RfdXRpbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7cHJvY2Vzc29yLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7c3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bXguaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBOUl9JVEVSQVRJT05TCQk1MDAKJiM0MzsKJiM0MzsjZGVmaW5lIFBUUlNfUEVSX1BURQkJNTEyCiYjNDM7I2RlZmluZSBQWERfSU5ERVgodmFkZHIsIGxldmVsKQkoKCh2YWRkcikgJmd0OyZndDsgUEdfTEVWRUxfU0hJRlQobGV2ZWwpKSAmYW1wOyAoUFRSU19QRVJfUFRFIC0gMSkpCiYjNDM7CiYjNDM7I2RlZmluZSBURVNUX01FTV9CQVNFX0dWQQkweGMwMDAwMDAwVUxMCiYjNDM7I2RlZmluZSBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVAkweGQwMDAwMDAwVUxMCiYjNDM7I2RlZmluZSBQQVRURVJOCQkJMHhhYmNkZWZhYmNkZWZhYmNkVUxMCiYjNDM7CiYjNDM7c3RhdGljIHU2NCBleHBlY3RlZF92YWRkcjsKJiM0MztzdGF0aWMgdTY0IGd1ZXN0X2ZhdWx0czsKJiM0MzsKJiM0MztzdGF0aWMgdTY0ICpndWVzdF9nZXRfcHRlKHU2NCB2YWRkcikKJiM0Mzt7CiYjNDM7CXU2NCBwZ3RhYmxlX3BhLCBwdGU7CiYjNDM7CXU2NCAqcGd0YWJsZTsKJiM0MzsJaW50IGxldmVsOwomIzQzOwomIzQzOwlsZXZlbCA9IChnZXRfY3I0KCkgJmFtcDsgWDg2X0NSNF9MQTU3KSA/IFBHX0xFVkVMXzI1NlQgOiBQR19MRVZFTF81MTJHOwomIzQzOwomIzQzOwlwZ3RhYmxlX3BhID0gZ2V0X2NyMygpICZhbXA7IFBIWVNJQ0FMX1BBR0VfTUFTSzsKJiM0MzsJZm9yICg7IGxldmVsICZndDsgUEdfTEVWRUxfNEs7IGxldmVsLS0pIHsKJiM0MzsJCXBndGFibGUgPSAodTY0ICopKHBndGFibGVfcGEgJiM0MzsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQpOwomIzQzOwkJcHRlID0gcGd0YWJsZVtQWERfSU5ERVgodmFkZHIsIGxldmVsKV07CiYjNDM7CQlHVUVTVF9BU1NFUlQocHRlICZhbXA7IFBURV9QUkVTRU5UX01BU0soJmFtcDtndWVzdF9tbXUpKTsKJiM0MzsJCUdVRVNUX0FTU0VSVCghKHB0ZSAmYW1wOyBQVEVfSFVHRV9NQVNLKCZhbXA7Z3Vlc3RfbW11KSkpOwomIzQzOwkJcGd0YWJsZV9wYSA9IFBURV9HRVRfUEEocHRlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwZ3RhYmxlID0gKHU2NCAqKShwZ3RhYmxlX3BhICYjNDM7IFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUKTsKJiM0MzsJcmV0dXJuICZhbXA7cGd0YWJsZVtQWERfSU5ERVgodmFkZHIsIFBHX0xFVkVMXzRLKV07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X3BmX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpCiYjNDM7ewomIzQzOwl1NjQgZmF1bHRfYWRkcjsKJiM0MzsJdTY0ICpwdGVwOwomIzQzOwomIzQzOwlmYXVsdF9hZGRyID0gZ2V0X2NyMigpOwomIzQzOwlHVUVTVF9BU1NFUlRfRVEoZmF1bHRfYWRkciwgUkVBRF9PTkNFKGV4cGVjdGVkX3ZhZGRyKSk7CiYjNDM7CiYjNDM7CXB0ZXAgPSBndWVzdF9nZXRfcHRlKGZhdWx0X2FkZHIpOwomIzQzOwlHVUVTVF9BU1NFUlQocHRlcCk7CiYjNDM7CUdVRVNUX0FTU0VSVCghKCpwdGVwICZhbXA7IFBURV9QUkVTRU5UX01BU0soJmFtcDtndWVzdF9tbXUpKSk7CiYjNDM7CiYjNDM7CSpwdGVwIHw9IFBURV9QUkVTRU5UX01BU0soJmFtcDtndWVzdF9tbXUpOwomIzQzOwlndWVzdF9mYXVsdHMmIzQzOyYjNDM7OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBndWVzdF9hY2Nlc3NfbWVtb3J5KHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CXU2NCB2YWRkciwgdmFsOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdmFkZHIgPSBURVNUX01FTV9CQVNFX0dWQSAmIzQzOyAoaSAlIFBUUlNfUEVSX1BURSkgKiBQQUdFX1NJWkU7CiYjNDM7CQlXUklURV9PTkNFKGV4cGVjdGVkX3ZhZGRyLCB2YWRkcik7CiYjNDM7CiYjNDM7CQkvKiBSZWFkIHRvIHRyaWdnZXIgI1BGICovCiYjNDM7CQl2YWwgPSBSRUFEX09OQ0UoKih1NjQgKil2YWRkcik7CiYjNDM7CQlHVUVTVF9BU1NFUlRfRVEodmFsLCBQQVRURVJOKTsKJiM0MzsKJiM0MzsJCS8qIENsZWFyIHRoZSBwcmVzZW50IGJpdCBhZ2FpbiBzbyBpdCBmYXVsdHMgbmV4dCB0aW1lICovCiYjNDM7CQkqZ3Vlc3RfZ2V0X3B0ZSh2YWRkcikgJmFtcDs9IH5QVEVfUFJFU0VOVF9NQVNLKCZhbXA7Z3Vlc3RfbW11KTsKJiM0MzsJCWludmxwZyh2YWRkcik7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbDFfc3ZtX2NvZGUoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSkKJiM0Mzt7CiYjNDM7CWdlbmVyaWNfc3ZtX3NldHVwKHN2bSwgZ3Vlc3RfYWNjZXNzX21lbW9yeSk7CiYjNDM7CXN2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyB8PSBCSVQoVURfVkVDVE9SKTsKJiM0MzsKJiM0MzsJd2hpbGUgKDEpIHsKJiM0MzsJCXJ1bl9ndWVzdChzdm0tJmd0O3ZtY2IsIHN2bS0mZ3Q7dm1jYl9ncGEpOwomIzQzOwkJR1VFU1RfQVNTRVJUX0VRKHN2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbC5leGl0X2NvZGUsCiYjNDM7CQkJCShTVk1fRVhJVF9FWENQX0JBU0UgJiM0MzsgVURfVkVDVE9SKSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KQomIzQzO3sKJiM0MzsJR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7CiYjNDM7CUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7CiYjNDM7CXByZXBhcmVfdm1jcyh2bXgsIGd1ZXN0X2FjY2Vzc19tZW1vcnkpOwomIzQzOwomIzQzOwlHVUVTVF9BU1NFUlQoIXZtd3JpdGUoRVhDRVBUSU9OX0JJVE1BUCwgQklUKFVEX1ZFQ1RPUikpKTsKJiM0MzsKJiM0MzsJR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJd2hpbGUgKDEpIHsKJiM0MzsJCUdVRVNUX0FTU0VSVF9FUSh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSwgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSk7CiYjNDM7CQlHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX0lOVFJfSU5GTykgJmFtcDsgMHhmZiwgVURfVkVDVE9SKTsKJiM0MzsJCUdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZSh2b2lkICp0ZXN0X2RhdGEpCiYjNDM7ewomIzQzOwlpZiAodGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkpCiYjNDM7CQlsMV9zdm1fY29kZSh0ZXN0X2RhdGEpOwomIzQzOwllbHNlCiYjNDM7CQlsMV92bXhfY29kZSh0ZXN0X2RhdGEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqc2lndXNyX3RocmVhZF9mbih2b2lkICphcmcpCiYjNDM7ewomIzQzOwlwdGhyZWFkX3QgdmNwdV90aHJlYWQgPSAocHRocmVhZF90KWFyZzsKJiM0MzsKJiM0MzsJZm9yICg7OykgewomIzQzOwkJcHRocmVhZF90ZXN0Y2FuY2VsKCk7CiYjNDM7CQlwdGhyZWFkX2tpbGwodmNwdV90aHJlYWQsIFNJR1VTUjEpOwomIzQzOwkJdXNsZWVwKG1zZWNzX3RvX3VzZWNzKDEpKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZHVtbXlfc2lnbmFsX2hhbmRsZXIoaW50IHNpZ25vKSB7fQomIzQzO3N0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIHNhOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZjcHVfc2lndXNyX2xpc3Rlbih2b2lkKQomIzQzO3sKJiM0MzsJc2Euc2FfaGFuZGxlciA9IGR1bW15X3NpZ25hbF9oYW5kbGVyOwomIzQzOwlzaWdhY3Rpb24oU0lHVVNSMSwgJmFtcDtzYSwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZjcHVfc2lndXNyX2lnbm9yZSh2b2lkKQomIzQzO3sKJiM0MzsJc2Euc2FfaGFuZGxlciA9IFNJR19JR047CiYjNDM7CXNpZ2FjdGlvbihTSUdVU1IxLCAmYW1wO3NhLCBOVUxMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQga3ZtX3g4Nl9zdGF0ZV9xdWV1ZV91ZChzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGUpCiYjNDM7ewomIzQzOwlpZiAoc3RhdGUtJmd0O2V2ZW50cy5leGNlcHRpb24ucGVuZGluZyB8fCBzdGF0ZS0mZ3Q7ZXZlbnRzLmV4Y2VwdGlvbi5pbmplY3RlZCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3RhdGUtJmd0O2V2ZW50cy5mbGFncyB8PSBLVk1fVkNQVUVWRU5UX1ZBTElEX1BBWUxPQUQ7CiYjNDM7CXN0YXRlLSZndDtldmVudHMuZXhjZXB0aW9uLnBlbmRpbmcgPSB0cnVlOwomIzQzOwlzdGF0ZS0mZ3Q7ZXZlbnRzLmV4Y2VwdGlvbi5pbmplY3RlZCA9IGZhbHNlOwomIzQzOwlzdGF0ZS0mZ3Q7ZXZlbnRzLmV4Y2VwdGlvbi5uciA9IFVEX1ZFQ1RPUjsKJiM0MzsJc3RhdGUtJmd0O2V2ZW50cy5leGNlcHRpb24uaGFzX2Vycm9yX2NvZGUgPSBmYWxzZTsKJiM0MzsJc3RhdGUtJmd0O2V2ZW50cy5leGNlcHRpb25faGFzX3BheWxvYWQgPSBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnVuX3Rlc3QoYm9vbCBuZXN0ZWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGU7CiYjNDM7CWludCByLCBpLCBsZXZlbDsKJiM0MzsJcHRocmVhZF90IHNpZ3Vzcl90aHJlYWQ7CiYjNDM7CWdwYV90IGdwYSwgcGd0YWJsZV9ncGE7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKJiM0MzsJc3RydWN0IGt2bV92bSAqdm07CiYjNDM7CXN0cnVjdCB1Y2FsbCB1YzsKJiM0MzsJdTY0ICpwZ3RhYmxlOwomIzQzOwlndmFfdCBndmE7CiYjNDM7CXU2NCBwdGU7CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoJmFtcDt2Y3B1LCBuZXN0ZWQgPyBsMV9ndWVzdF9jb2RlIDogZ3Vlc3RfYWNjZXNzX21lbW9yeSk7CiYjNDM7CXZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIodm0sIFBGX1ZFQ1RPUiwgZ3Vlc3RfcGZfaGFuZGxlcik7CiYjNDM7CiYjNDM7CWlmIChuZXN0ZWQpIHsKJiM0MzsJCXZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVhDRVBUSU9OX1BBWUxPQUQsIC0ydWwpOwomIzQzOwkJaWYgKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkpCiYjNDM7CQkJdmNwdV9hbGxvY19zdm0odm0sICZhbXA7Z3ZhKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQl2Y3B1X2FsbG9jX3ZteCh2bSwgJmFtcDtndmEpOwomIzQzOwkJdmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBndmEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFsbG9jYXRlIGEgcGFnZSBhbmQgd3JpdGUgdGhlIHBhdHRlcm4gdG8gaXQgKi8KJiM0MzsJZ3ZhID0gdm1fYWxsb2NfcGFnZSh2bSk7CiYjNDM7CSoodTY0ICopYWRkcl9ndmEyaHZhKHZtLCBndmEpID0gUEFUVEVSTjsKJiM0MzsJZ3BhID0gYWRkcl9ndmEyZ3BhKHZtLCBndmEpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYXAgYWxsIHZpcnR1YWwgYWRkcmVzc2VzIHRvIHRoZSBwYXR0ZXJuIHBhZ2UgYW5kIGNsZWFyIHRoZSBwcmVzZW50CiYjNDM7CSAqIGJpdCBzdWNoIHRoYXQgZ3Vlc3QgYWNjZXNzZXMgd2lsbCBjYXVzZSBhICNQRi4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBQVFJTX1BFUl9QVEU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlndmEgPSBURVNUX01FTV9CQVNFX0dWQSAmIzQzOyBpICogZ2V0cGFnZXNpemUoKTsKJiM0MzsJCXZpcnRfcGdfbWFwKHZtLCBndmEsIGdwYSk7CiYjNDM7CQkqdm1fZ2V0X3B0ZSh2bSwgZ3ZhKSAmYW1wOz0gflBURV9QUkVTRU5UX01BU0soJmFtcDt2bS0mZ3Q7bW11KTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBOb3cgY3JlYXRlIG1hcHBpbmdzIGZvciB0aGUgcGFnZSB0YWJsZXMgY3JlYXRlZCBhYm92ZSBzbyB0aGF0IHRoZQomIzQzOwkgKiBndWVzdCAjUEYgaGFuZGxlciBjYW4gd2FsayB0aGVtLiBBbGwgUFRFcyBmb3IgdGVzdCB2aXJ0dWFsIGFkZHJlc3NlcwomIzQzOwkgKiBzaG91bGQgbGllIG9uIHRoZSBzYW1lIFBURSBwYWdlLCBzbyBvbmUgcGFnZSBpcyBtYXBwZWQgZm9yIGVhY2ggcGFnZQomIzQzOwkgKiB0YWJsZSBsZXZlbC4KJiM0MzsJICoKJiM0MzsJICogVXNlIGFuIG9mZnNldCBmb3IgdGhlIEdWQSBpbnN0ZWFkIG9mIGNyZWF0aW5nIGlkZW50aXR5IG1hcHBpbmdzIHRvCiYjNDM7CSAqIGF2b2lkIGNvbGxpc2lvbiB3aXRoIGV4aXN0aW5nIG1hcHBpbmdzIGF0IGxvdyBHVkFzIChlLmcuIEVMRikuCiYjNDM7CSAqLwomIzQzOwlwZ3RhYmxlX2dwYSA9IHZtLSZndDttbXUucGdkOwomIzQzOwlmb3IgKGxldmVsID0gdm0tJmd0O21tdS5wZ3RhYmxlX2xldmVsczsgbGV2ZWwgJmd0Oz0gUEdfTEVWRUxfNEs7IGxldmVsLS0pIHsKJiM0MzsJCXZpcnRfbWFwKHZtLCBwZ3RhYmxlX2dwYSAmIzQzOyBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVCwgcGd0YWJsZV9ncGEsIDEpOwomIzQzOwkJcGd0YWJsZSA9IGFkZHJfZ3BhMmh2YSh2bSwgcGd0YWJsZV9ncGEpOwomIzQzOwkJcHRlID0gcGd0YWJsZVtQWERfSU5ERVgoVEVTVF9NRU1fQkFTRV9HVkEsIGxldmVsKV07CiYjNDM7CQlwZ3RhYmxlX2dwYSA9IFBURV9HRVRfUEEocHRlKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBJbml0aWFsaXplIHRoZSB0aHJlYWQgc2VuZGluZyBTSUdVU1IgYW5kIGluc3RhbGwgdGhlIGhhbmRsZXIgKi8KJiM0MzsJdmNwdV9zaWd1c3JfaWdub3JlKCk7CiYjNDM7CXIgPSBwdGhyZWFkX2NyZWF0ZSgmYW1wO3NpZ3Vzcl90aHJlYWQsIE5VTEwsIHNpZ3Vzcl90aHJlYWRfZm4sCiYjNDM7CQkJICAgKHZvaWQgKilwdGhyZWFkX3NlbGYoKSk7CiYjNDM7CVRFU1RfQVNTRVJUKCFyLCAmIzM0O3B0aHJlYWRfY3JlYXRlKCkgZmFpbGVkOiAlZCYjMzQ7LCByKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMTsgaSAmbHQ7PSBOUl9JVEVSQVRJT05TOyBpJiM0MzsmIzQzOykgewomIzQzOwkJLyoKJiM0MzsJCSAqIE9ubHkgaGFuZGxlIFNJR1VTUiB3aGlsZSB0aGUgdkNQVSBpcyBydW5uaW5nLCBvdGhlcndpc2UKJiM0MzsJCSAqIGlnbm9yZSBpdCB0byBhdm9pZCBpbnRlcnJ1cHRpbmcgb3RoZXIgaW9jdGxzL3N5c2NhbGxzLgomIzQzOwkJICovCiYjNDM7CQl2Y3B1X3NpZ3Vzcl9saXN0ZW4oKTsKJiM0MzsJCXIgPSBfX3ZjcHVfcnVuKHZjcHUpOwomIzQzOwkJVEVTVF9BU1NFUlQoIXIgfHwgZXJybm8gPT0gRUlOVFIsICYjMzQ7RXhwZWN0ZWQgc3VjY2VzcyBvciBTSUdVU1IxJiMzNDspOwomIzQzOwkJdmNwdV9zaWd1c3JfaWdub3JlKCk7CiYjNDM7CiYjNDM7CQkvKiBUaGUgZ3Vlc3Qgb25seSBleGl0cyBkdWUgdG8gYSBzaWduYWwgb3IgZmFpbGVkIGFzc2VydGlvbiAqLwomIzQzOwkJaWYgKCFyKSB7CiYjNDM7CQkJVEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX0lPKTsKJiM0MzsJCQlURVNUX0FTU0VSVF9FUShnZXRfdWNhbGwodmNwdSwgJmFtcDt1YyksIFVDQUxMX0FCT1JUKTsKJiM0MzsJCQlSRVBPUlRfR1VFU1RfQVNTRVJUKHVjKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXN0YXRlID0gdmNwdV9zYXZlX3N0YXRlKHZjcHUpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIElmIHRoZSB2Q1BVIGlzIGluIGd1ZXN0IG1vZGUsIGluamVjdCBhICNVRCB0byB0cmlnZ2VyIGFuCiYjNDM7CQkgKiBMMi0mZ3Q7TDEgVk0tRXhpdCBldmVyeSBvdGhlciBpdGVyYXRpb24uCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChrdm1feDg2X3N0YXRlX2lzX2d1ZXN0X21vZGUoc3RhdGUpICZhbXA7JmFtcDsgaSAlIDIgPT0gMCkKJiM0MzsJCQlrdm1feDg2X3N0YXRlX3F1ZXVlX3VkKHN0YXRlKTsKJiM0MzsKJiM0MzsJCWt2bV92bV9yZWxlYXNlKHZtKTsKJiM0MzsJCXZjcHUgPSB2bV9yZWNyZWF0ZV93aXRoX29uZV92Y3B1KHZtKTsKJiM0MzsJCWlmIChuZXN0ZWQpCiYjNDM7CQkJdm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FWENFUFRJT05fUEFZTE9BRCwgLTJ1bCk7CiYjNDM7CQl2Y3B1X2xvYWRfc3RhdGUodmNwdSwgc3RhdGUpOwomIzQzOwkJa3ZtX3g4Nl9zdGF0ZV9jbGVhbnVwKHN0YXRlKTsKJiM0MzsKJiM0MzsJCXByX2luZm8oJiMzNDtcclNhdmUmIzQzO3Jlc3RvcmUgaXRlcmF0aW9uczogJWQmIzM0OywgaSk7CiYjNDM7CX0KJiM0MzsJcHJfaW5mbygmIzM0O1xuJiMzNDspOwomIzQzOwomIzQzOwlzeW5jX2dsb2JhbF9mcm9tX2d1ZXN0KHZtLCBndWVzdF9mYXVsdHMpOwomIzQzOwlURVNUX0FTU0VSVChndWVzdF9mYXVsdHMsICYjMzQ7Tm8gZ3Vlc3QgcGFnZSBmYXVsdHMgdHJpZ2dlcmVkJiMzNDspOwomIzQzOwlwcl9pbmZvKCYjMzQ7R3Vlc3QgcGFnZSBmYXVsdHMlczogJWx1XG4mIzM0OywgbmVzdGVkID8gJiMzNDsgKGluIEwyKSYjMzQ7IDogJiMzNDsmIzM0OywgZ3Vlc3RfZmF1bHRzKTsKJiM0MzsKJiM0MzsJcHRocmVhZF9jYW5jZWwoc2lndXNyX3RocmVhZCk7CiYjNDM7CXB0aHJlYWRfam9pbihzaWd1c3JfdGhyZWFkLCBOVUxMKTsKJiM0MzsJa3ZtX3ZtX2ZyZWUodm0pOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQomIzQzO3sKJiM0MzsJcHJfaW5mbygmIzM0O1J1bm5pbmcgc2F2ZSYjNDM7cmVzdG9yZSBzdHJlc3MgdGVzdC4uLlxuJiMzNDspOwomIzQzOwlydW5fdGVzdCgvKm5lc3RlZD0qL2ZhbHNlKTsKJiM0MzsKJiM0MzsJaWYgKCFrdm1faGFzX2NhcChLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FEKSB8fAomIzQzOwkgICAgIWt2bV9oYXNfY2FwKEtWTV9DQVBfTkVTVEVEX1NUQVRFKSB8fAomIzQzOwkgICAgKCFrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pICZhbXA7JmFtcDsgIWt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1ZNWCkpKSB7CiYjNDM7CQlwcl9pbmZvKCYjMzQ7TmVzdGVkIHZpcnR1YWxpemF0aW9uIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nIG5lc3RlZCB0ZXN0XG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlwcl9pbmZvKCYjMzQ7UnVubmluZyBzYXZlJiM0MztyZXN0b3JlIHN0cmVzcyB0ZXN0IHdpdGggYSBuZXN0ZWQgZ3Vlc3QuLi5cbiYjMzQ7KTsKJiM0MzsJcnVuX3Rlc3QoLypuZXN0ZWQ9Ki90cnVlKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jCmluZGV4IGUyNTQyZjRjZWQ2MDUuLmQxZWRhZmQ1YWY3NTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMKQEAgLTIyLDkgJiM0MzsyMiw2IEBACiAjZGVmaW5lIFNNUkFNX0dQQSAweDEwMDAwMDAKICNkZWZpbmUgU01SQU1fU1RBR0UgMHhmZQogCi0jZGVmaW5lIFNUUih4KSAjeAotI2RlZmluZSBYU1RSKHMpIFNUUihzKQotCiAjZGVmaW5lIFNZTkNfUE9SVCAweGUKICNkZWZpbmUgRE9ORSAweGZmCiAKQEAgLTQyLDcgJiM0MzszOSw3IEBAIHU4IHNtaV9oYW5kbGVyW10gPSB7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jX3dpdGhfaG9zdCh1NjQgcGhhc2UpCiB7Ci0JYXNtIHZvbGF0aWxlKCYjMzQ7aW4gJCYjMzQ7IFhTVFIoU1lOQ19QT1JUKSYjMzQ7LCAlJWFsIFxuJiMzNDsKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7aW4gJCYjMzQ7IF9fc3RyaW5naWZ5KFNZTkNfUE9SVCkmIzM0OywgJSVhbCBcbiYjMzQ7CiAJCSAgICAgOiAmIzM0OyYjNDM7YSYjMzQ7IChwaGFzZSkpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjI0CgkJCQkJCQlvdXRwdXQ6IDczCgkJCQkJCQl0aG91Z2h0czogOTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZz1mYWxzZTogS1ZNIFNlbGZ0ZXN0IFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBLVk0gc2VsZnRlc3RzLiBJdCBzZWVtcyB0byBhZGQgYSBuZXcgdGVzdCwgYHNhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdGAsIGFuZCB0d2Vha3Mgc29tZSBleGlzdGluZyB0ZXN0IGZpbGVzOiBgZXZtY3MuaGAsIGBwcm9jZXNzb3IuaGAsIGB2bXguaGAsIGBzdm0uY2AsIGB1Y2FsbC5jYCwgYHZteC5jYCwgYGV2bWNzX3NtbV9jb250cm9sc190ZXN0LmNgLCBgZml4X2h5cGVyY2FsbF90ZXN0LmNgLCBhbmQgYHNtbV90ZXN0LmNgLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgdW5kZXIgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcy4KCkZpcnN0IHRoaW5ncyBmaXJzdDogdGhpcyBwYXRjaCBpcyAqc29sZWx5KiBtb2RpZnlpbmcgZmlsZXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYC4gIFRoYXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgZXhwZXJ0IGluc3RpbmN0cy4gVGhlc2UgYXJlIHNlbGZ0ZXN0czsgdGhleSYjMzk7cmUgdXNlci1zcGFjZSBwcm9ncmFtcyBkZXNpZ25lZCB0byAqdGVzdCogdGhlIGtlcm5lbCYjMzk7cyBLVk0gaW1wbGVtZW50YXRpb24sIG5vdCBwYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgY29yZSBmdW5jdGlvbmFsaXR5LgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBubyBrZXJuZWwgZmlsZXMgYXJlIG1vZGlmaWVkIGJ5IGxvb2tpbmcgYXQgdGhlIGRpZmYgYWdhaW46CmB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtYApgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhgCmB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaGAKYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaGAKYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaGAKYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNgCmB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY2AKYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jYApgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuY2AKYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jYApgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jYApgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9maXhfaHlwZXJjYWxsX3Rlc3QuY2AKYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmNgCmB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmNgClllcCwgYWxsIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gIGRpcmVjdG9yeS4KClRoZSBwcm9tcHQsIG9mIGNvdXJzZSwgZG9lcyBub3QgZXhwbGljaXRseSBsaXN0IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gLiBCdXQgaXQgcHJvdmlkZXMgdGhlIHVsdGltYXRlIGxpdG11cyB0ZXN0LiAgRG9lcyBpdCBtYWtlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZD8gTm8uIFRoZXNlIGFyZSBub3Qga2VybmVsIGNvZGUuICBUaGVzZSBhcmUgdXNlciBzcGFjZSBwcm9ncmFtcyB0byAqdGVzdCogdGhlIGtlcm5lbCYjMzk7cyBiZWhhdmlvci4gVGhleSBtaWdodCAqcmV2ZWFsKiBidWdzIGluIHRoZSBrZXJuZWwsIGJ1dCB0aGV5IGRvbiYjMzk7dCAqaW50cm9kdWNlKiB0aGVtIG9yIGZ1bmN0aW9uYWxseSBjaGFuZ2UgYW55dGhpbmcgaW4gdGhlIGtlcm5lbC4gIFRoZSBjaGFuZ2VzIGluIHRoZXNlIHRlc3RzIGFyZSBzaW1wbHkgZm9yIHRlc3RpbmcsIG5vdCBrZXJuZWwgZnVuY3Rpb24uCgpUaGVyZWZvcmUsIGFwcGx5aW5nIHRoZSBpbnN0cnVjdGlvbiYjMzk7cyBpbnRlbnQsIEkgd2lsbCBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggYXJlIHVzZXItc3BhY2UgdGVzdGluZyBwcm9ncmFtcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggYXJlIHVzZXItc3BhY2UgdGVzdGluZyBwcm9ncmFtcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzBUMDE6MjM6MDMuODE2MDI4NjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA5MTg1OTUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8sIHdoaWNoIGFyZSB1c2VyLXNwYWNlIHRlc3RpbmcgcHJvZ3JhbXMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDE6MjM6MDMuODE2MDM1MjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzQzMDAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRkM2U1YjQ2YWE1NTVlMmNkODZiMGNjNTBhZDViMWFlMDI5NDEwNzRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMzAgMDE6MjM6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG5pbmRleCA4OGM2YzgwNDZkZGVjLi5kOTRmNTZjNjMwZmQ1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXFxuQEAgLTEwNyw2ICsxMDcsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3BtdV9jb3VudGVyc190ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvcG11X2V2ZW50X2ZpbHRlcl90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0XFxuK1RFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvc2V0X2Jvb3RfY3B1X2lkXFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvc2V0X3NyZWdzX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3RcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxcbmluZGV4IGQ2NGM4YTIyODIwN2EuLmU4MzU2ZWU1NGQ3YjkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxcbkBAIC0yMyw2ICsyMyw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW1hbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBtc2Vjc190b191c2Vjcyhtc2VjKSAgICAoKG1zZWMpICogMTAwMFVMTClcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcXG5pbmRleCBiZTc5YmRhMDI0YmYxLi44MmE4ZWE2YjY2MWYwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcXG5AQCAtMTIwNywzMCArMTIwNywyMyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1jc192bWxhdW5jaCh2b2lkKVxcbiBcXG4gXFx0Y3VycmVudF9ldm1jcy1cXHUwMDNlaHZfY2xlYW5fZmllbGRzID0gMDtcXG4gXFxuLVxcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJwdXNoICUlcmJwO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJjeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyZHg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcnNpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJkaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJDA7XFxcIlxcbitcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwicHVzaCAkMDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcIm1vdiAlJXJzcCwgKCVbaG9zdF9yc3BdKTtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcImxlYSAxZiglJXJpcCksICUlcmF4O1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwibW92ICUlcmF4LCAoJVtob3N0X3JpcF0pO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuIFxcdFxcdFxcdCAgICAgXFxcInZtbGF1bmNoO1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwiaW5jcSAoJSVyc3ApO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwiMTogcG9wICUlcmF4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmRpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcnNpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmR4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmN4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmJwO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBcXFwiMTogO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuK1xcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJheDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgOiBbcmV0XVxcXCI9XFx1MDAyNmFcXFwiKHJldClcXG4gXFx0XFx0XFx0ICAgICA6IFtob3N0X3JzcF1cXFwiclxcXCJcXG4gXFx0XFx0XFx0ICAgICAgICgodTY0KVxcdTAwMjZjdXJyZW50X2V2bWNzLVxcdTAwM2Vob3N0X3JzcCksXFxuIFxcdFxcdFxcdCAgICAgICBbaG9zdF9yaXBdXFxcInJcXFwiXFxuLVxcdFxcdFxcdCAgICAgICAoKHU2NClcXHUwMDI2Y3VycmVudF9ldm1jcy1cXHUwMDNlaG9zdF9yaXApXFxuLVxcdFxcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIiwgXFxcInJieFxcXCIsIFxcXCJyOFxcXCIsIFxcXCJyOVxcXCIsIFxcXCJyMTBcXFwiLFxcbi1cXHRcXHRcXHQgICAgICAgXFxcInIxMVxcXCIsIFxcXCJyMTJcXFwiLCBcXFwicjEzXFxcIiwgXFxcInIxNFxcXCIsIFxcXCJyMTVcXFwiKTtcXG4rXFx0XFx0XFx0ICAgICAgICgodTY0KVxcdTAwMjZjdXJyZW50X2V2bWNzLVxcdTAwM2Vob3N0X3JpcCksXFxuK1xcdFxcdFxcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcXG4rXFx0XFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiLCBcXFwiY2NcXFwiKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtMTI0NiwzMCArMTIzOSwyMyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1jc192bXJlc3VtZSh2b2lkKVxcbiBcXHQvKiBIT1NUX1JTUCAqL1xcbiBcXHRjdXJyZW50X2V2bWNzLVxcdTAwM2Vodl9jbGVhbl9maWVsZHMgXFx1MDAyNj0gfkhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9IT1NUX1BPSU5URVI7XFxuIFxcbi1cXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwicHVzaCAlJXJicDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyY3g7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcmR4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJzaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyZGk7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICQwO1xcXCJcXG4rXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcInB1c2ggJDA7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJtb3YgJSVyc3AsICglW2hvc3RfcnNwXSk7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcIm1vdiAlJXJheCwgKCVbaG9zdF9yaXBdKTtcXFwiXFxuK1xcdFxcdFxcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxcbiBcXHRcXHRcXHQgICAgIFxcXCJ2bXJlc3VtZTtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcImluY3EgKCUlcnNwKTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcIjE6IHBvcCAlJXJheDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJkaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJzaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJkeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJjeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJicDtcXFwiXFxuK1xcdFxcdFxcdCAgICAgXFxcIjE6IDtcXFwiXFxuK1xcdFxcdFxcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxcbitcXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyYXg7XFxcIlxcbiBcXHRcXHRcXHQgICAgIDogW3JldF1cXFwiPVxcdTAwMjZhXFxcIihyZXQpXFxuIFxcdFxcdFxcdCAgICAgOiBbaG9zdF9yc3BdXFxcInJcXFwiXFxuIFxcdFxcdFxcdCAgICAgICAoKHU2NClcXHUwMDI2Y3VycmVudF9ldm1jcy1cXHUwMDNlaG9zdF9yc3ApLFxcbiBcXHRcXHRcXHQgICAgICAgW2hvc3RfcmlwXVxcXCJyXFxcIlxcbi1cXHRcXHRcXHQgICAgICAgKCh1NjQpXFx1MDAyNmN1cnJlbnRfZXZtY3MtXFx1MDAzZWhvc3RfcmlwKVxcbi1cXHRcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIsIFxcXCJjY1xcXCIsIFxcXCJyYnhcXFwiLCBcXFwicjhcXFwiLCBcXFwicjlcXFwiLCBcXFwicjEwXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgIFxcXCJyMTFcXFwiLCBcXFwicjEyXFxcIiwgXFxcInIxM1xcXCIsIFxcXCJyMTRcXFwiLCBcXFwicjE1XFxcIik7XFxuK1xcdFxcdFxcdCAgICAgICAoKHU2NClcXHUwMDI2Y3VycmVudF9ldm1jcy1cXHUwMDNlaG9zdF9yaXApLFxcbitcXHRcXHRcXHQgICAgICAgR1VFU1RfUkVHU19PRkZTRVRTXFxuK1xcdFxcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIik7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxcbmluZGV4IGIxNjExNzRlY2U0NTMuLjZlNmY3MDAzNTUwOGEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXFxuQEAgLTI0LDYgKzI0LDcgQEAgZXh0ZXJuIGJvb2wgaG9zdF9jcHVfaXNfYW1kO1xcbiBleHRlcm4gYm9vbCBob3N0X2NwdV9pc19oeWdvbjtcXG4gZXh0ZXJuIGJvb2wgaG9zdF9jcHVfaXNfYW1kX2NvbXBhdGlibGU7XFxuIGV4dGVybiB1NjQgZ3Vlc3RfdHNjX2toejtcXG4rZXh0ZXJuIHN0cnVjdCBrdm1fbW11IGd1ZXN0X21tdTtcXG4gXFxuICNpZm5kZWYgTUFYX05SX0NQVUlEX0VOVFJJRVNcXG4gI2RlZmluZSBNQVhfTlJfQ1BVSURfRU5UUklFUyAxMDBcXG5AQCAtMzk4LDggKzM5OSw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHg4Nl9tb2RlbCh1bnNpZ25lZCBpbnQgZWF4KVxcbiAjZGVmaW5lIFBURV9HRVRfUEEocHRlKVxcdFxcdCgocHRlKSBcXHUwMDI2IFBIWVNJQ0FMX1BBR0VfTUFTSylcXG4gI2RlZmluZSBQVEVfR0VUX1BGTihwdGUpICAgICAgICAoUFRFX0dFVF9QQShwdGUpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpXFxuIFxcbi0vKiBHZW5lcmFsIFJlZ2lzdGVycyBpbiA2NC1CaXQgTW9kZSAqL1xcbi1zdHJ1Y3QgZ3ByNjRfcmVncyB7XFxuK3N0cnVjdCBndWVzdF9yZWdzIHtcXG4gXFx0dTY0IHJheDtcXG4gXFx0dTY0IHJjeDtcXG4gXFx0dTY0IHJkeDtcXG5AQCAtNDE2LDggKzQxNiwzOCBAQCBzdHJ1Y3QgZ3ByNjRfcmVncyB7XFxuIFxcdHU2NCByMTM7XFxuIFxcdHU2NCByMTQ7XFxuIFxcdHU2NCByMTU7XFxuK1xcdHU2NCByZmxhZ3M7XFxuIH07XFxuIFxcbitleHRlcm4gc3RydWN0IGd1ZXN0X3JlZ3MgZ3Vlc3RfcmVncztcXG4rXFxuKyNkZWZpbmUgR1VFU1RfUkVHX09GRlNFVChuYW1lKSBcXFxcXFxuK1xcdFtvZmZfIyNuYW1lXSBcXFwiaVxcXCIgKG9mZnNldG9mKHN0cnVjdCBndWVzdF9yZWdzLCBuYW1lKSlcXG4rXFxuKyNkZWZpbmUgR1VFU1RfUkVHU19PRkZTRVRTXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHJheCksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHJjeCksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHJkeCksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHJieCksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHJzcCksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHJicCksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHJzaSksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHJkaSksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHI4KSxcXHRcXFxcXFxuK1xcdEdVRVNUX1JFR19PRkZTRVQocjkpLFxcdFxcXFxcXG4rXFx0R1VFU1RfUkVHX09GRlNFVChyMTApLFxcdFxcXFxcXG4rXFx0R1VFU1RfUkVHX09GRlNFVChyMTEpLFxcdFxcXFxcXG4rXFx0R1VFU1RfUkVHX09GRlNFVChyMTIpLFxcdFxcXFxcXG4rXFx0R1VFU1RfUkVHX09GRlNFVChyMTMpLFxcdFxcXFxcXG4rXFx0R1VFU1RfUkVHX09GRlNFVChyMTQpLFxcdFxcXFxcXG4rXFx0R1VFU1RfUkVHX09GRlNFVChyMTUpLFxcdFxcXFxcXG4rXFx0R1VFU1RfUkVHX09GRlNFVChyZmxhZ3MpXFxuK1xcbisjZGVmaW5lIEdVRVNUX1JFRyhuYW1lKSBcXFwiZ3Vlc3RfcmVncyArICVjW29mZl9cXFwiICNuYW1lIFxcXCJdXFxcIlxcbitcXG4rI2RlZmluZSBHVUVTVF9TV0lUQ0hfR1BSX0FTTShuYW1lKSBcXFxcXFxuK1xcdFxcXCJ4Y2hnICUlXFxcIiAjbmFtZSBcXFwiLCBcXFwiIEdVRVNUX1JFRyhuYW1lKSBcXFwiXFxcXG5cXFxcdFxcXCJcXG4rXFxuIHN0cnVjdCBkZXNjNjQge1xcbiBcXHR1MTYgbGltaXQwO1xcbiBcXHR1MTYgYmFzZTA7XFxuQEAgLTU4NCw2ICs2MTQsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9jcjAodTY0IHZhbClcXG4gXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcIm1vdiAlMCwgJSVjcjBcXFwiIDogOiBcXFwiclxcXCIgKHZhbCkgOiBcXFwibWVtb3J5XFxcIik7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdTY0IGdldF9jcjIodm9pZClcXG4re1xcbitcXHR1NjQgY3IyO1xcbitcXG4rXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcIm1vdiAlJWNyMiwgJVtjcjJdXFxcIiA6IFtjcjJdXFxcIj1yXFxcIihjcjIpKTtcXG4rXFx0cmV0dXJuIGNyMjtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB1NjQgZ2V0X2NyMyh2b2lkKVxcbiB7XFxuIFxcdHU2NCBjcjM7XFxuQEAgLTg3OSw2ICs5MTcsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX3NzZV9yZWcoaW50IHJlZywgY29uc3Qgc3NlMTI4X3QgKmRhdGEpXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIGludmxwZyh1NjQgYWRkcilcXG4re1xcbitcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwiaW52bHBnICglMClcXFwiIDogOiBcXFwiclxcXCIoYWRkcikgOiBcXFwibWVtb3J5XFxcIik7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVfcmVsYXgodm9pZClcXG4ge1xcbiBcXHRhc20gdm9sYXRpbGUoXFxcInJlcDsgbm9wXFxcIiA6OjogXFxcIm1lbW9yeVxcXCIpO1xcbkBAIC05MTUsNiArOTU4LDExIEBAIHN0cnVjdCBrdm1feDg2X3N0YXRlICp2Y3B1X3NhdmVfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdm9pZCB2Y3B1X2xvYWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGUpO1xcbiB2b2lkIGt2bV94ODZfc3RhdGVfY2xlYW51cChzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGUpO1xcbiBcXG4rc3RhdGljIGlubGluZSBib29sIGt2bV94ODZfc3RhdGVfaXNfZ3Vlc3RfbW9kZShzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGUpXFxuK3tcXG4rXFx0cmV0dXJuIHN0YXRlLVxcdTAwM2VuZXN0ZWQuc2l6ZSBcXHUwMDI2XFx1MDAyNiAoc3RhdGUtXFx1MDAzZW5lc3RlZC5mbGFncyBcXHUwMDI2IEtWTV9TVEFURV9ORVNURURfR1VFU1RfTU9ERSk7XFxuK31cXG4rXFxuIGNvbnN0IHN0cnVjdCBrdm1fbXNyX2xpc3QgKmt2bV9nZXRfbXNyX2luZGV4X2xpc3Qodm9pZCk7XFxuIGNvbnN0IHN0cnVjdCBrdm1fbXNyX2xpc3QgKmt2bV9nZXRfZmVhdHVyZV9tc3JfaW5kZXhfbGlzdCh2b2lkKTtcXG4gYm9vbCBrdm1fbXNyX2lzX2luX3NhdmVfcmVzdG9yZV9saXN0KHUzMiBtc3JfaW5kZXgpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcXG5pbmRleCA0YmNmZDYwZTNhZWNiLi4wNGY1ZTM0ZGVhM2FlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxcbkBAIC0yOTAsNiArMjkwLDIzIEBAIHN0cnVjdCB2bXhfbXNyX2VudHJ5IHtcXG4gXFx0dTY0IHZhbHVlO1xcbiB9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDE2KSkpO1xcbiBcXG4rI2RlZmluZSBWTVhfU1dJVENIX0dQUlNfQVNNIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmF4KSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJieCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyY3gpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmR4KSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJicCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyc2kpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmRpKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI4KSAgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOSkgIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjEwKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMSkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTIpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjEzKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTUpXFxuK1xcbiAjaW5jbHVkZSBcXFwiZXZtY3MuaFxcXCJcXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IHZteG9uKHU2NCBwaHlzKVxcbkBAIC0zNjMsOSArMzgwLDYgQEAgc3RhdGljIGlubGluZSB1NjQgdm1wdHJzdHoodm9pZClcXG4gXFx0cmV0dXJuIHZhbHVlO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBObyBndWVzdCBzdGF0ZSAoZS5nLiBHUFJzKSBpcyBlc3RhYmxpc2hlZCBieSB0aGlzIHZtbGF1bmNoLlxcbi0gKi9cXG4gc3RhdGljIGlubGluZSBpbnQgdm1sYXVuY2godm9pZClcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbkBAIC0zNzMsMzQgKzM4NywyNCBAQCBzdGF0aWMgaW5saW5lIGludCB2bWxhdW5jaCh2b2lkKVxcbiBcXHRpZiAoZW5hYmxlX2V2bWNzKVxcbiBcXHRcXHRyZXR1cm4gZXZtY3Nfdm1sYXVuY2goKTtcXG4gXFxuLVxcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJwdXNoICUlcmJwO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJjeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyZHg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcnNpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJkaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJDA7XFxcIlxcbitcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwicHVzaCAkMDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcInZtd3JpdGUgJSVyc3AsICVbaG9zdF9yc3BdO1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwibGVhIDFmKCUlcmlwKSwgJSVyYXg7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJ2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTtcXFwiXFxuK1xcdFxcdFxcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxcbiBcXHRcXHRcXHQgICAgIFxcXCJ2bWxhdW5jaDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcImluY3EgKCUlcnNwKTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcIjE6IHBvcCAlJXJheDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJkaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJzaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJkeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJjeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJicDtcXFwiXFxuK1xcdFxcdFxcdCAgICAgXFxcIjE6IDtcXFwiXFxuK1xcdFxcdFxcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxcbitcXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyYXg7XFxcIlxcbiBcXHRcXHRcXHQgICAgIDogW3JldF1cXFwiPVxcdTAwMjZhXFxcIihyZXQpXFxuIFxcdFxcdFxcdCAgICAgOiBbaG9zdF9yc3BdXFxcInJcXFwiKCh1NjQpSE9TVF9SU1ApLFxcbi1cXHRcXHRcXHQgICAgICAgW2hvc3RfcmlwXVxcXCJyXFxcIigodTY0KUhPU1RfUklQKVxcbi1cXHRcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIsIFxcXCJjY1xcXCIsIFxcXCJyYnhcXFwiLCBcXFwicjhcXFwiLCBcXFwicjlcXFwiLCBcXFwicjEwXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgIFxcXCJyMTFcXFwiLCBcXFwicjEyXFxcIiwgXFxcInIxM1xcXCIsIFxcXCJyMTRcXFwiLCBcXFwicjE1XFxcIik7XFxuK1xcdFxcdFxcdCAgICAgICBbaG9zdF9yaXBdXFxcInJcXFwiKCh1NjQpSE9TVF9SSVApLFxcbitcXHRcXHRcXHQgICAgICAgR1VFU1RfUkVHU19PRkZTRVRTXFxuK1xcdFxcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIik7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIE5vIGd1ZXN0IHN0YXRlIChlLmcuIEdQUnMpIGlzIGVzdGFibGlzaGVkIGJ5IHRoaXMgdm1yZXN1bWUuXFxuLSAqL1xcbiBzdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuQEAgLTQwOCwyOCArNDEyLDIxIEBAIHN0YXRpYyBpbmxpbmUgaW50IHZtcmVzdW1lKHZvaWQpXFxuIFxcdGlmIChlbmFibGVfZXZtY3MpXFxuIFxcdFxcdHJldHVybiBldm1jc192bXJlc3VtZSgpO1xcbiBcXG4tXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcInB1c2ggJSVyYnA7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcmN4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJkeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyc2k7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcmRpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAkMDtcXFwiXFxuK1xcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJwdXNoICQwO1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwidm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcInZtd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuIFxcdFxcdFxcdCAgICAgXFxcInZtcmVzdW1lO1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwiaW5jcSAoJSVyc3ApO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwiMTogcG9wICUlcmF4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmRpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcnNpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmR4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmN4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmJwO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBcXFwiMTogO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuK1xcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJheDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgOiBbcmV0XVxcXCI9XFx1MDAyNmFcXFwiKHJldClcXG4gXFx0XFx0XFx0ICAgICA6IFtob3N0X3JzcF1cXFwiclxcXCIoKHU2NClIT1NUX1JTUCksXFxuLVxcdFxcdFxcdCAgICAgICBbaG9zdF9yaXBdXFxcInJcXFwiKCh1NjQpSE9TVF9SSVApXFxuLVxcdFxcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIiwgXFxcInJieFxcXCIsIFxcXCJyOFxcXCIsIFxcXCJyOVxcXCIsIFxcXCJyMTBcXFwiLFxcbi1cXHRcXHRcXHQgICAgICAgXFxcInIxMVxcXCIsIFxcXCJyMTJcXFwiLCBcXFwicjEzXFxcIiwgXFxcInIxNFxcXCIsIFxcXCJyMTVcXFwiKTtcXG4rXFx0XFx0XFx0ICAgICAgIFtob3N0X3JpcF1cXFwiclxcXCIoKHU2NClIT1NUX1JJUCksXFxuK1xcdFxcdFxcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcXG4rXFx0XFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiLCBcXFwiY2NcXFwiKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNcXG5pbmRleCAxZDcyZGNkZmNlM2I2Li4zZTM1M2FjMzllZWI3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jXFxuQEAgLTc0LDcgKzc0LDcgQEAgdGVzdF9hc3NlcnQoYm9vbCBleHAsIGNvbnN0IGNoYXIgKmV4cF9zdHIsXFxuIFxcdGlmICghKGV4cCkpIHtcXG4gXFx0XFx0dmFfc3RhcnQoYXAsIGZtdCk7XFxuIFxcbi1cXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIj09PT0gVGVzdCBBc3NlcnRpb24gRmFpbHVyZSA9PT09XFxcXG5cXFwiXFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiXFxcXG49PT09IFRlc3QgQXNzZXJ0aW9uIEZhaWx1cmUgPT09PVxcXFxuXFxcIlxcbiBcXHRcXHRcXHRcXFwiICAlczoldTogJXNcXFxcblxcXCJcXG4gXFx0XFx0XFx0XFxcIiAgcGlkPSVkIHRpZD0lZCBlcnJubz0lZCAtICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRmaWxlLCBsaW5lLCBleHBfc3RyLCBnZXRwaWQoKSwga3ZtX2dldHRpZCgpLFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXFxuaW5kZXggZWY1NmRjZWZlMDExOS4uZDMxZmE4MWVhMDc1NiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXFxuQEAgLTI4LDYgKzI4LDkgQEAgYm9vbCBob3N0X2NwdV9pc19oeWdvbjtcXG4gYm9vbCBob3N0X2NwdV9pc19hbWRfY29tcGF0aWJsZTtcXG4gYm9vbCBpc19mb3JjZWRfZW11bGF0aW9uX2VuYWJsZWQ7XFxuIHU2NCBndWVzdF90c2Nfa2h6O1xcbitzdHJ1Y3Qga3ZtX21tdSBndWVzdF9tbXU7XFxuK1xcbitzdHJ1Y3QgZ3Vlc3RfcmVncyBndWVzdF9yZWdzO1xcbiBcXG4gY29uc3QgY2hhciAqZXhfc3RyKGludCB2ZWN0b3IpXFxuIHtcXG5AQCAtODI5LDYgKzgzMiwxNyBAQCB2b2lkIGt2bV9hcmNoX3ZtX3Bvc3RfY3JlYXRlKHN0cnVjdCBrdm1fdm0gKnZtLCB1bnNpZ25lZCBpbnQgbnJfdmNwdXMpXFxuIFxcdFRFU1RfQVNTRVJUKHIgXFx1MDAzZSAwLCBcXFwiS1ZNX0dFVF9UU0NfS0haIGRpZCBub3QgcHJvdmlkZSBhIHZhbGlkIFRTQyBmcmVxdWVuY3kuXFxcIik7XFxuIFxcdGd1ZXN0X3RzY19raHogPSByO1xcbiBcXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgZ3Vlc3RfdHNjX2toeik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgZ3Vlc3QgTU1VIGlzIGp1c3QgYSBwbGFjZWhvbGRlciB0byBwcm92aWRlIGFjY2VzcyB0byBQVEUgbWFza3NcXG4rXFx0ICogKGZvciBub3cpLiBUaGUgZ3Vlc3QgZG9lcyBub3QgaGF2ZSBtYXBwaW5ncyBmb3IgaXRzIG93biBwYWdlIHRhYmxlc1xcbitcXHQgKiBieSBkZWZhdWx0LCBzbyBhbnkgbWVhbmluZ2Z1bCB1c2Ugb2YgZ3Vlc3QgcGFnZSB0YWJsZXMgcmVxdWlyZXNcXG4rXFx0ICogZXhwbGljaXQgc2V0dXAgYnkgdGhlIHRlc3QuIFplcm8gdGhlIFBHRCB0byBtYWtlIGl0IG9idmlvdXMgdGhlIGd1ZXN0XFxuK1xcdCAqIHBhZ2UgdGFibGVzIGFyZSBub3QgaW1tZWRpYXRlbHkgdXNhYmxlIGJ5IGd1ZXN0IGNvZGUuXFxuK1xcdCAqL1xcbitcXHRndWVzdF9tbXUgPSB2bS1cXHUwMDNlbW11O1xcbitcXHRndWVzdF9tbXUucGdkID0gMDtcXG4rXFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGd1ZXN0X21tdSk7XFxuIH1cXG4gXFxuIHZvaWQgdmNwdV9hcmNoX3NldF9lbnRyeV9wb2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHZvaWQgKmd1ZXN0X2NvZGUpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmNcXG5pbmRleCAxNDQ1Yjg5MDk4NmZkLi5iMDViZTUwZjA3NWQ2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmNcXG5AQCAtMTMsOSArMTMsNiBAQFxcbiBcXG4gI2RlZmluZSBTRVZfREVWX1BBVEggXFxcIi9kZXYvc2V2XFxcIlxcbiBcXG4tc3RydWN0IGdwcjY0X3JlZ3MgZ3Vlc3RfcmVncztcXG4tdTY0IHJmbGFncztcXG4tXFxuIC8qIEFsbG9jYXRlIG1lbW9yeSByZWdpb25zIGZvciBuZXN0ZWQgU1ZNIHRlc3RzLlxcbiAgKlxcbiAgKiBJbnB1dCBBcmdzOlxcbkBAIC0xMzcsNDYgKzEzNCw0NyBAQCB2b2lkIGdlbmVyaWNfc3ZtX3NldHVwKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0sIHZvaWQgKmd1ZXN0X3JpcClcXG4gICogc2F2ZS9yZXN0b3JlIDY0LWJpdCBnZW5lcmFsIHJlZ2lzdGVycyBleGNlcHQgcmF4LCByaXAsIHJzcFxcbiAgKiB3aGljaCBhcmUgZGlyZWN0bHkgaGFuZGVkIHRocm91Z2ggdGhlIFZNQ0IgZ3Vlc3QgcHJvY2Vzc29yIHN0YXRlXFxuICAqL1xcbi0jZGVmaW5lIFNBVkVfR1BSX0NcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcmJ4LCBndWVzdF9yZWdzKzB4MjBcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyY3gsIGd1ZXN0X3JlZ3MrMHgxMFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXJkeCwgZ3Vlc3RfcmVncysweDE4XFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcmJwLCBndWVzdF9yZWdzKzB4MzBcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyc2ksIGd1ZXN0X3JlZ3MrMHgzOFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXJkaSwgZ3Vlc3RfcmVncysweDQwXFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcjgsICBndWVzdF9yZWdzKzB4NDhcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyOSwgIGd1ZXN0X3JlZ3MrMHg1MFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXIxMCwgZ3Vlc3RfcmVncysweDU4XFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcjExLCBndWVzdF9yZWdzKzB4NjBcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyMTIsIGd1ZXN0X3JlZ3MrMHg2OFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXIxMywgZ3Vlc3RfcmVncysweDcwXFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcjE0LCBndWVzdF9yZWdzKzB4NzhcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyMTUsIGd1ZXN0X3JlZ3MrMHg4MFxcXFxuXFxcXHRcXFwiXFxuLVxcbi0jZGVmaW5lIExPQURfR1BSX0MgICAgICBTQVZFX0dQUl9DXFxuKyNkZWZpbmUgU1ZNX1NXSVRDSF9HUFJTX0FTTSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJieCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyY3gpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmR4KSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJicCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyc2kpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmRpKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI4KSAgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOSkgIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjEwKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMSkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTIpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjEzKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTUpXFxuIFxcbiAvKlxcbiAgKiBzZWxmdGVzdHMgZG8gbm90IHVzZSBpbnRlcnJ1cHRzIHNvIHdlIGRyb3BwZWQgY2xnaS9zdGkvY2xpL3N0Z2lcXG4tICogZm9yIG5vdy4gcmVnaXN0ZXJzIGludm9sdmVkIGluIExPQUQvU0FWRV9HUFJfQyBhcmUgZXZlbnR1YWxseVxcbisgKiBmb3Igbm93LiBSZWdpc3RlcnMgaW52b2x2ZWQgaW4gU1ZNX1NXSVRDSF9HUFJTX0FTTSBhcmUgZXZlbnR1YWxseVxcbiAgKiB1bm1vZGlmaWVkIHNvIHRoZXkgZG8gbm90IG5lZWQgdG8gYmUgaW4gdGhlIGNsb2JiZXIgbGlzdC5cXG4gICovXFxuIHZvaWQgcnVuX2d1ZXN0KHN0cnVjdCB2bWNiICp2bWNiLCB1NjQgdm1jYl9ncGEpXFxuIHtcXG4gXFx0YXNtIHZvbGF0aWxlIChcXG4gXFx0XFx0XFxcInZtbG9hZCAlW3ZtY2JfZ3BhXVxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdFxcXCJtb3YgcmZsYWdzLCAlJXIxNVxcXFxuXFxcXHRcXFwiXFx0Ly8gcmZsYWdzXFxuLVxcdFxcdFxcXCJtb3YgJSVyMTUsIDB4MTcwKCVbdm1jYl0pXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0XFxcIm1vdiBndWVzdF9yZWdzLCAlJXIxNVxcXFxuXFxcXHRcXFwiXFx0Ly8gcmF4XFxuLVxcdFxcdFxcXCJtb3YgJSVyMTUsIDB4MWY4KCVbdm1jYl0pXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0TE9BRF9HUFJfQ1xcbitcXHRcXHRcXFwibW92IFxcXCIgR1VFU1RfUkVHKHJmbGFncykgXFxcIiwgJSVyMTVcXFxcblxcXFx0XFxcIlxcbitcXHRcXHRcXFwibW92ICUlcjE1LCAlW3ZtY2JfcmZsYWdzXVxcXFxuXFxcXHRcXFwiXFxuK1xcdFxcdFxcXCJtb3YgXFxcIiBHVUVTVF9SRUcocmF4KSBcXFwiLCAlJXIxNVxcXFxuXFxcXHRcXFwiXFxuK1xcdFxcdFxcXCJtb3YgJSVyMTUsICVbdm1jYl9yYXhdXFxcXG5cXFxcdFxcXCJcXG4rXFx0XFx0U1ZNX1NXSVRDSF9HUFJTX0FTTVxcbiBcXHRcXHRcXFwidm1ydW4gJVt2bWNiX2dwYV1cXFxcblxcXFx0XFxcIlxcbi1cXHRcXHRTQVZFX0dQUl9DXFxuLVxcdFxcdFxcXCJtb3YgMHgxNzAoJVt2bWNiXSksICUlcjE1XFxcXG5cXFxcdFxcXCJcXHQvLyByZmxhZ3NcXG4tXFx0XFx0XFxcIm1vdiAlJXIxNSwgcmZsYWdzXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0XFxcIm1vdiAweDFmOCglW3ZtY2JdKSwgJSVyMTVcXFxcblxcXFx0XFxcIlxcdC8vIHJheFxcbi1cXHRcXHRcXFwibW92ICUlcjE1LCBndWVzdF9yZWdzXFxcXG5cXFxcdFxcXCJcXG4rXFx0XFx0U1ZNX1NXSVRDSF9HUFJTX0FTTVxcbitcXHRcXHRcXFwibW92ICVbdm1jYl9yZmxhZ3NdLCAlJXIxNVxcXFxuXFxcXHRcXFwiXFxuK1xcdFxcdFxcXCJtb3YgJSVyMTUsIFxcXCIgR1VFU1RfUkVHKHJmbGFncykgXFxcIlxcXFxuXFxcXHRcXFwiXFxuK1xcdFxcdFxcXCJtb3YgJVt2bWNiX3JheF0sICUlcjE1XFxcXG5cXFxcdFxcXCJcXHQvLyByYXhcXG4rXFx0XFx0XFxcIm1vdiAlJXIxNSwgXFxcIiBHVUVTVF9SRUcocmF4KSBcXFwiXFxcXG5cXFxcdFxcXCJcXG4gXFx0XFx0XFxcInZtc2F2ZSAlW3ZtY2JfZ3BhXVxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdDogOiBbdm1jYl0gXFxcInJcXFwiICh2bWNiKSwgW3ZtY2JfZ3BhXSBcXFwiYVxcXCIgKHZtY2JfZ3BhKVxcbitcXHRcXHQ6IFt2bWNiX3JmbGFnc10gXFxcIittXFxcIiAodm1jYi1cXHUwMDNlc2F2ZS5yZmxhZ3MpLFxcbitcXHRcXHQgIFt2bWNiX3JheF0gXFxcIittXFxcIiAodm1jYi1cXHUwMDNlc2F2ZS5yYXgpXFxuK1xcdFxcdDogW3ZtY2JfZ3BhXSBcXFwiYVxcXCIgKHZtY2JfZ3BhKSxcXG4rXFx0XFx0ICBHVUVTVF9SRUdTX09GRlNFVFNcXG4gXFx0XFx0OiBcXFwicjE1XFxcIiwgXFxcIm1lbW9yeVxcXCIpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuY1xcbmluZGV4IGU3ZGQ1NzkxOTU5YmEuLjM4MDUwYzYwYTA2NzAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmNcXG5AQCAtMTAsMzYgKzEwLDggQEBcXG4gXFxuIHZvaWQgdWNhbGxfYXJjaF9kb191Y2FsbChndmFfdCB1YylcXG4ge1xcbi1cXHQvKlxcbi1cXHQgKiBGSVhNRTogUmV2ZXJ0IHRoaXMgaGFjayAodGhlIGVudGlyZSBjb21taXQgdGhhdCBhZGRlZCBpdCkgb25jZSBuVk1YXFxuLVxcdCAqIHByZXNlcnZlcyBMMiBHUFJzIGFjcm9zcyBhIG5lc3RlZCBWTS1FeGl0LiAgSWYgYSB1Y2FsbCBmcm9tIEwyLCBlLmcuXFxuLVxcdCAqIHRvIGRvIGEgR1VFU1RfU1lOQygpLCBsYW5kcyB0aGUgdkNQVSBpbiBMMSwgYW55IGFuZCBhbGwgR1BScyBjYW4gYmVcXG4tXFx0ICogY2xvYmJlcmVkIGJ5IEwxLiAgU2F2ZSBhbmQgcmVzdG9yZSBub24tdm9sYXRpbGUgR1BScyAoY2xvYmJlcmluZyBSQlBcXG4tXFx0ICogaW4gcGFydGljdWxhciBpcyBwcm9ibGVtYXRpYykgYWxvbmcgd2l0aCBSRFggYW5kIFJESSAod2hpY2ggYXJlXFxuLVxcdCAqIGlucHV0cyksIGFuZCBjbG9iYmVyIHZvbGF0aWxlIEdQUnMuICpzaWdoKlxcbi1cXHQgKi9cXG4tI2RlZmluZSBIT1JSSUZJQ19MMl9VQ0FMTF9DTE9CQkVSX0hBQ0tcXHRcXFxcXFxuLVxcdFxcXCJyY3hcXFwiLCBcXFwicnNpXFxcIiwgXFxcInI4XFxcIiwgXFxcInI5XFxcIiwgXFxcInIxMFxcXCIsIFxcXCJyMTFcXFwiXFxuLVxcbi1cXHRhc20gdm9sYXRpbGUoXFxcInB1c2ggJSVyYnBcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwdXNoICUlcjE1XFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicHVzaCAlJXIxNFxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInB1c2ggJSVyMTNcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwdXNoICUlcjEyXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicHVzaCAlJXJieFxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInB1c2ggJSVyZHhcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwdXNoICUlcmRpXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwiaW4gJVtwb3J0XSwgJSVhbFxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInBvcCAlJXJkaVxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInBvcCAlJXJkeFxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInBvcCAlJXJieFxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInBvcCAlJXIxMlxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInBvcCAlJXIxM1xcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInBvcCAlJXIxNFxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInBvcCAlJXIxNVxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInBvcCAlJXJicFxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdDogOiBbcG9ydF0gXFxcImRcXFwiIChVQ0FMTF9QSU9fUE9SVCksIFxcXCJEXFxcIiAodWMpIDogXFxcInJheFxcXCIsIFxcXCJtZW1vcnlcXFwiLFxcbi1cXHRcXHQgICAgIEhPUlJJRklDX0wyX1VDQUxMX0NMT0JCRVJfSEFDSyk7XFxuK1xcdGFzbSB2b2xhdGlsZShcXFwiaW4gJVtwb3J0XSwgJSVhbFxcXCJcXG4rXFx0XFx0OiA6IFtwb3J0XSBcXFwiZFxcXCIgKFVDQUxMX1BJT19QT1JUKSwgXFxcIkRcXFwiICh1YykgOiBcXFwicmF4XFxcIiwgXFxcIm1lbW9yeVxcXCIpO1xcbiB9XFxuIFxcbiB2b2lkICp1Y2FsbF9hcmNoX2dldF91Y2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmNcXG5pbmRleCBjZDA5YzlkZTQ0ODVhLi4wODllMWE4YWY1M2ZjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmNcXG5AQCAtMjMyLDcgKzIzMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3ZtY3NfY29udHJvbF9maWVsZHMoc3RydWN0IHZteF9wYWdlcyAqdm14KVxcbiBcXG4gXFx0dm13cml0ZShFWENFUFRJT05fQklUTUFQLCAwKTtcXG4gXFx0dm13cml0ZShQQUdFX0ZBVUxUX0VSUk9SX0NPREVfTUFTSywgMCk7XFxuLVxcdHZtd3JpdGUoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BVENILCAtMSk7IC8qIE5ldmVyIG1hdGNoICovXFxuK1xcdHZtd3JpdGUoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BVENILCAwKTtcXG4gXFx0dm13cml0ZShDUjNfVEFSR0VUX0NPVU5ULCAwKTtcXG4gXFx0dm13cml0ZShWTV9FWElUX0NPTlRST0xTLCByZG1zcihNU1JfSUEzMl9WTVhfRVhJVF9DVExTKSB8XFxuIFxcdFxcdFZNX0VYSVRfSE9TVF9BRERSX1NQQUNFX1NJWkUpO1xcdCAgLyogNjQtYml0IGhvc3QgKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jXFxuaW5kZXggNzdjZTg3YzQxYTg2OC4uYWE3ZjNiNDA1ZmQzMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcXG5AQCAtMjIsOSArMjIsNiBAQFxcbiBcXG4gI2RlZmluZSBTWU5DX1BPUlRcXHQweGVcXG4gXFxuLSNkZWZpbmUgU1RSKHgpICN4XFxuLSNkZWZpbmUgWFNUUihzKSBTVFIocylcXG4tXFxuIC8qXFxuICAqIFNNSSBoYW5kbGVyOiBydW5zIGluIHJlYWwtYWRkcmVzcyBtb2RlLlxcbiAgKiBSZXBvcnRzIFNNUkFNX1NUQUdFIHZpYSBwb3J0IElPLCB0aGVuIGRvZXMgUlNNLlxcbkBAIC0zNyw3ICszNCw3IEBAIHN0YXRpYyB1OCBzbWlfaGFuZGxlcltdID0ge1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHN5bmNfd2l0aF9ob3N0KHU2NCBwaGFzZSlcXG4ge1xcbi1cXHRhc20gdm9sYXRpbGUoXFxcImluICRcXFwiIFhTVFIoU1lOQ19QT1JUKSBcXFwiLCAlJWFsIFxcXFxuXFxcIlxcbitcXHRhc20gdm9sYXRpbGUoXFxcImluICRcXFwiIF9fc3RyaW5naWZ5KFNZTkNfUE9SVCkgXFxcIiwgJSVhbCBcXFxcblxcXCJcXG4gXFx0XFx0ICAgICA6IFxcXCIrYVxcXCIgKHBoYXNlKSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZml4X2h5cGVyY2FsbF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jXFxuaW5kZXggNzUzYTBlNzMwZWE4ZC4uNDkzMWVjMjI3NjhlZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9maXhfaHlwZXJjYWxsX3Rlc3QuY1xcbkBAIC02LDcgKzYsNiBAQFxcbiAgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fcGFyYS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX3BhcmEuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3RkaW50LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwia3ZtX3Rlc3RfaGFybmVzcy5oXFxcIlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTA3MzkxYWIyYzkzMFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jXFxuQEAgLTAsMCArMSwyODggQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NwdGhyZWFkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzaWduYWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZ2V0b3B0LmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwidGVzdF91dGlsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrdm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwicHJvY2Vzc29yLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzdm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwidm14LmhcXFwiXFxuK1xcbisjZGVmaW5lIE5SX0lURVJBVElPTlNcXHRcXHQ1MDBcXG4rXFxuKyNkZWZpbmUgUFRSU19QRVJfUFRFXFx0XFx0NTEyXFxuKyNkZWZpbmUgUFhEX0lOREVYKHZhZGRyLCBsZXZlbClcXHQoKCh2YWRkcikgXFx1MDAzZVxcdTAwM2UgUEdfTEVWRUxfU0hJRlQobGV2ZWwpKSBcXHUwMDI2IChQVFJTX1BFUl9QVEUgLSAxKSlcXG4rXFxuKyNkZWZpbmUgVEVTVF9NRU1fQkFTRV9HVkFcXHQweGMwMDAwMDAwVUxMXFxuKyNkZWZpbmUgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVRcXHQweGQwMDAwMDAwVUxMXFxuKyNkZWZpbmUgUEFUVEVSTlxcdFxcdFxcdDB4YWJjZGVmYWJjZGVmYWJjZFVMTFxcbitcXG4rc3RhdGljIHU2NCBleHBlY3RlZF92YWRkcjtcXG4rc3RhdGljIHU2NCBndWVzdF9mYXVsdHM7XFxuK1xcbitzdGF0aWMgdTY0ICpndWVzdF9nZXRfcHRlKHU2NCB2YWRkcilcXG4re1xcbitcXHR1NjQgcGd0YWJsZV9wYSwgcHRlO1xcbitcXHR1NjQgKnBndGFibGU7XFxuK1xcdGludCBsZXZlbDtcXG4rXFxuK1xcdGxldmVsID0gKGdldF9jcjQoKSBcXHUwMDI2IFg4Nl9DUjRfTEE1NykgPyBQR19MRVZFTF8yNTZUIDogUEdfTEVWRUxfNTEyRztcXG4rXFxuK1xcdHBndGFibGVfcGEgPSBnZXRfY3IzKCkgXFx1MDAyNiBQSFlTSUNBTF9QQUdFX01BU0s7XFxuK1xcdGZvciAoOyBsZXZlbCBcXHUwMDNlIFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7XFxuK1xcdFxcdHBndGFibGUgPSAodTY0ICopKHBndGFibGVfcGEgKyBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVCk7XFxuK1xcdFxcdHB0ZSA9IHBndGFibGVbUFhEX0lOREVYKHZhZGRyLCBsZXZlbCldO1xcbitcXHRcXHRHVUVTVF9BU1NFUlQocHRlIFxcdTAwMjYgUFRFX1BSRVNFTlRfTUFTSyhcXHUwMDI2Z3Vlc3RfbW11KSk7XFxuK1xcdFxcdEdVRVNUX0FTU0VSVCghKHB0ZSBcXHUwMDI2IFBURV9IVUdFX01BU0soXFx1MDAyNmd1ZXN0X21tdSkpKTtcXG4rXFx0XFx0cGd0YWJsZV9wYSA9IFBURV9HRVRfUEEocHRlKTtcXG4rXFx0fVxcbitcXG4rXFx0cGd0YWJsZSA9ICh1NjQgKikocGd0YWJsZV9wYSArIFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUKTtcXG4rXFx0cmV0dXJuIFxcdTAwMjZwZ3RhYmxlW1BYRF9JTkRFWCh2YWRkciwgUEdfTEVWRUxfNEspXTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZ3Vlc3RfcGZfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncylcXG4re1xcbitcXHR1NjQgZmF1bHRfYWRkcjtcXG4rXFx0dTY0ICpwdGVwO1xcbitcXG4rXFx0ZmF1bHRfYWRkciA9IGdldF9jcjIoKTtcXG4rXFx0R1VFU1RfQVNTRVJUX0VRKGZhdWx0X2FkZHIsIFJFQURfT05DRShleHBlY3RlZF92YWRkcikpO1xcbitcXG4rXFx0cHRlcCA9IGd1ZXN0X2dldF9wdGUoZmF1bHRfYWRkcik7XFxuK1xcdEdVRVNUX0FTU0VSVChwdGVwKTtcXG4rXFx0R1VFU1RfQVNTRVJUKCEoKnB0ZXAgXFx1MDAyNiBQVEVfUFJFU0VOVF9NQVNLKFxcdTAwMjZndWVzdF9tbXUpKSk7XFxuK1xcbitcXHQqcHRlcCB8PSBQVEVfUFJFU0VOVF9NQVNLKFxcdTAwMjZndWVzdF9tbXUpO1xcbitcXHRndWVzdF9mYXVsdHMrKztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZ3Vlc3RfYWNjZXNzX21lbW9yeSh2b2lkICphcmcpXFxuK3tcXG4rXFx0dTY0IHZhZGRyLCB2YWw7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgOyBpKyspIHtcXG4rXFx0XFx0dmFkZHIgPSBURVNUX01FTV9CQVNFX0dWQSArIChpICUgUFRSU19QRVJfUFRFKSAqIFBBR0VfU0laRTtcXG4rXFx0XFx0V1JJVEVfT05DRShleHBlY3RlZF92YWRkciwgdmFkZHIpO1xcbitcXG4rXFx0XFx0LyogUmVhZCB0byB0cmlnZ2VyICNQRiAqL1xcbitcXHRcXHR2YWwgPSBSRUFEX09OQ0UoKih1NjQgKil2YWRkcik7XFxuK1xcdFxcdEdVRVNUX0FTU0VSVF9FUSh2YWwsIFBBVFRFUk4pO1xcbitcXG4rXFx0XFx0LyogQ2xlYXIgdGhlIHByZXNlbnQgYml0IGFnYWluIHNvIGl0IGZhdWx0cyBuZXh0IHRpbWUgKi9cXG4rXFx0XFx0Kmd1ZXN0X2dldF9wdGUodmFkZHIpIFxcdTAwMjY9IH5QVEVfUFJFU0VOVF9NQVNLKFxcdTAwMjZndWVzdF9tbXUpO1xcbitcXHRcXHRpbnZscGcodmFkZHIpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGwxX3N2bV9jb2RlKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0pXFxuK3tcXG4rXFx0Z2VuZXJpY19zdm1fc2V0dXAoc3ZtLCBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcXG4rXFx0c3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zIHw9IEJJVChVRF9WRUNUT1IpO1xcbitcXG4rXFx0d2hpbGUgKDEpIHtcXG4rXFx0XFx0cnVuX2d1ZXN0KHN2bS1cXHUwMDNldm1jYiwgc3ZtLVxcdTAwM2V2bWNiX2dwYSk7XFxuK1xcdFxcdEdVRVNUX0FTU0VSVF9FUShzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9jb2RlLFxcbitcXHRcXHRcXHRcXHQoU1ZNX0VYSVRfRVhDUF9CQVNFICsgVURfVkVDVE9SKSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxcbit7XFxuK1xcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpO1xcbitcXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteCkpO1xcbitcXHRwcmVwYXJlX3ZtY3Modm14LCBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcXG4rXFxuK1xcdEdVRVNUX0FTU0VSVCghdm13cml0ZShFWENFUFRJT05fQklUTUFQLCBCSVQoVURfVkVDVE9SKSkpO1xcbitcXG4rXFx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcXG4rXFx0d2hpbGUgKDEpIHtcXG4rXFx0XFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JKTtcXG4rXFx0XFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pIFxcdTAwMjYgMHhmZiwgVURfVkVDVE9SKTtcXG4rXFx0XFx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSlcXG4re1xcbitcXHRpZiAodGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkpXFxuK1xcdFxcdGwxX3N2bV9jb2RlKHRlc3RfZGF0YSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bDFfdm14X2NvZGUodGVzdF9kYXRhKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgKnNpZ3Vzcl90aHJlYWRfZm4odm9pZCAqYXJnKVxcbit7XFxuK1xcdHB0aHJlYWRfdCB2Y3B1X3RocmVhZCA9IChwdGhyZWFkX3QpYXJnO1xcbitcXG4rXFx0Zm9yICg7Oykge1xcbitcXHRcXHRwdGhyZWFkX3Rlc3RjYW5jZWwoKTtcXG4rXFx0XFx0cHRocmVhZF9raWxsKHZjcHVfdGhyZWFkLCBTSUdVU1IxKTtcXG4rXFx0XFx0dXNsZWVwKG1zZWNzX3RvX3VzZWNzKDEpKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZHVtbXlfc2lnbmFsX2hhbmRsZXIoaW50IHNpZ25vKSB7fVxcbitzdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBzYTtcXG4rXFxuK3N0YXRpYyB2b2lkIHZjcHVfc2lndXNyX2xpc3Rlbih2b2lkKVxcbit7XFxuK1xcdHNhLnNhX2hhbmRsZXIgPSBkdW1teV9zaWduYWxfaGFuZGxlcjtcXG4rXFx0c2lnYWN0aW9uKFNJR1VTUjEsIFxcdTAwMjZzYSwgTlVMTCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHZjcHVfc2lndXNyX2lnbm9yZSh2b2lkKVxcbit7XFxuK1xcdHNhLnNhX2hhbmRsZXIgPSBTSUdfSUdOO1xcbitcXHRzaWdhY3Rpb24oU0lHVVNSMSwgXFx1MDAyNnNhLCBOVUxMKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQga3ZtX3g4Nl9zdGF0ZV9xdWV1ZV91ZChzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGUpXFxuK3tcXG4rXFx0aWYgKHN0YXRlLVxcdTAwM2VldmVudHMuZXhjZXB0aW9uLnBlbmRpbmcgfHwgc3RhdGUtXFx1MDAzZWV2ZW50cy5leGNlcHRpb24uaW5qZWN0ZWQpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHN0YXRlLVxcdTAwM2VldmVudHMuZmxhZ3MgfD0gS1ZNX1ZDUFVFVkVOVF9WQUxJRF9QQVlMT0FEO1xcbitcXHRzdGF0ZS1cXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5wZW5kaW5nID0gdHJ1ZTtcXG4rXFx0c3RhdGUtXFx1MDAzZWV2ZW50cy5leGNlcHRpb24uaW5qZWN0ZWQgPSBmYWxzZTtcXG4rXFx0c3RhdGUtXFx1MDAzZWV2ZW50cy5leGNlcHRpb24ubnIgPSBVRF9WRUNUT1I7XFxuK1xcdHN0YXRlLVxcdTAwM2VldmVudHMuZXhjZXB0aW9uLmhhc19lcnJvcl9jb2RlID0gZmFsc2U7XFxuK1xcdHN0YXRlLVxcdTAwM2VldmVudHMuZXhjZXB0aW9uX2hhc19wYXlsb2FkID0gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ1bl90ZXN0KGJvb2wgbmVzdGVkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZTtcXG4rXFx0aW50IHIsIGksIGxldmVsO1xcbitcXHRwdGhyZWFkX3Qgc2lndXNyX3RocmVhZDtcXG4rXFx0Z3BhX3QgZ3BhLCBwZ3RhYmxlX2dwYTtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbitcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0c3RydWN0IHVjYWxsIHVjO1xcbitcXHR1NjQgKnBndGFibGU7XFxuK1xcdGd2YV90IGd2YTtcXG4rXFx0dTY0IHB0ZTtcXG4rXFxuK1xcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXFx1MDAyNnZjcHUsIG5lc3RlZCA/IGwxX2d1ZXN0X2NvZGUgOiBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcXG4rXFx0dm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgUEZfVkVDVE9SLCBndWVzdF9wZl9oYW5kbGVyKTtcXG4rXFxuK1xcdGlmIChuZXN0ZWQpIHtcXG4rXFx0XFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FWENFUFRJT05fUEFZTE9BRCwgLTJ1bCk7XFxuK1xcdFxcdGlmIChrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKVxcbitcXHRcXHRcXHR2Y3B1X2FsbG9jX3N2bSh2bSwgXFx1MDAyNmd2YSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0dmNwdV9hbGxvY192bXgodm0sIFxcdTAwMjZndmEpO1xcbitcXHRcXHR2Y3B1X2FyZ3Nfc2V0KHZjcHUsIDEsIGd2YSk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFsbG9jYXRlIGEgcGFnZSBhbmQgd3JpdGUgdGhlIHBhdHRlcm4gdG8gaXQgKi9cXG4rXFx0Z3ZhID0gdm1fYWxsb2NfcGFnZSh2bSk7XFxuK1xcdCoodTY0ICopYWRkcl9ndmEyaHZhKHZtLCBndmEpID0gUEFUVEVSTjtcXG4rXFx0Z3BhID0gYWRkcl9ndmEyZ3BhKHZtLCBndmEpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTWFwIGFsbCB2aXJ0dWFsIGFkZHJlc3NlcyB0byB0aGUgcGF0dGVybiBwYWdlIGFuZCBjbGVhciB0aGUgcHJlc2VudFxcbitcXHQgKiBiaXQgc3VjaCB0aGF0IGd1ZXN0IGFjY2Vzc2VzIHdpbGwgY2F1c2UgYSAjUEYuXFxuK1xcdCAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUFRSU19QRVJfUFRFOyBpKyspIHtcXG4rXFx0XFx0Z3ZhID0gVEVTVF9NRU1fQkFTRV9HVkEgKyBpICogZ2V0cGFnZXNpemUoKTtcXG4rXFx0XFx0dmlydF9wZ19tYXAodm0sIGd2YSwgZ3BhKTtcXG4rXFx0XFx0KnZtX2dldF9wdGUodm0sIGd2YSkgXFx1MDAyNj0gflBURV9QUkVTRU5UX01BU0soXFx1MDAyNnZtLVxcdTAwM2VtbXUpO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBOb3cgY3JlYXRlIG1hcHBpbmdzIGZvciB0aGUgcGFnZSB0YWJsZXMgY3JlYXRlZCBhYm92ZSBzbyB0aGF0IHRoZVxcbitcXHQgKiBndWVzdCAjUEYgaGFuZGxlciBjYW4gd2FsayB0aGVtLiBBbGwgUFRFcyBmb3IgdGVzdCB2aXJ0dWFsIGFkZHJlc3Nlc1xcbitcXHQgKiBzaG91bGQgbGllIG9uIHRoZSBzYW1lIFBURSBwYWdlLCBzbyBvbmUgcGFnZSBpcyBtYXBwZWQgZm9yIGVhY2ggcGFnZVxcbitcXHQgKiB0YWJsZSBsZXZlbC5cXG4rXFx0ICpcXG4rXFx0ICogVXNlIGFuIG9mZnNldCBmb3IgdGhlIEdWQSBpbnN0ZWFkIG9mIGNyZWF0aW5nIGlkZW50aXR5IG1hcHBpbmdzIHRvXFxuK1xcdCAqIGF2b2lkIGNvbGxpc2lvbiB3aXRoIGV4aXN0aW5nIG1hcHBpbmdzIGF0IGxvdyBHVkFzIChlLmcuIEVMRikuXFxuK1xcdCAqL1xcbitcXHRwZ3RhYmxlX2dwYSA9IHZtLVxcdTAwM2VtbXUucGdkO1xcbitcXHRmb3IgKGxldmVsID0gdm0tXFx1MDAzZW1tdS5wZ3RhYmxlX2xldmVsczsgbGV2ZWwgXFx1MDAzZT0gUEdfTEVWRUxfNEs7IGxldmVsLS0pIHtcXG4rXFx0XFx0dmlydF9tYXAodm0sIHBndGFibGVfZ3BhICsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQsIHBndGFibGVfZ3BhLCAxKTtcXG4rXFx0XFx0cGd0YWJsZSA9IGFkZHJfZ3BhMmh2YSh2bSwgcGd0YWJsZV9ncGEpO1xcbitcXHRcXHRwdGUgPSBwZ3RhYmxlW1BYRF9JTkRFWChURVNUX01FTV9CQVNFX0dWQSwgbGV2ZWwpXTtcXG4rXFx0XFx0cGd0YWJsZV9ncGEgPSBQVEVfR0VUX1BBKHB0ZSk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEluaXRpYWxpemUgdGhlIHRocmVhZCBzZW5kaW5nIFNJR1VTUiBhbmQgaW5zdGFsbCB0aGUgaGFuZGxlciAqL1xcbitcXHR2Y3B1X3NpZ3Vzcl9pZ25vcmUoKTtcXG4rXFx0ciA9IHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZzaWd1c3JfdGhyZWFkLCBOVUxMLCBzaWd1c3JfdGhyZWFkX2ZuLFxcbitcXHRcXHRcXHQgICAodm9pZCAqKXB0aHJlYWRfc2VsZigpKTtcXG4rXFx0VEVTVF9BU1NFUlQoIXIsIFxcXCJwdGhyZWFkX2NyZWF0ZSgpIGZhaWxlZDogJWRcXFwiLCByKTtcXG4rXFxuK1xcdGZvciAoaSA9IDE7IGkgXFx1MDAzYz0gTlJfSVRFUkFUSU9OUzsgaSsrKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIE9ubHkgaGFuZGxlIFNJR1VTUiB3aGlsZSB0aGUgdkNQVSBpcyBydW5uaW5nLCBvdGhlcndpc2VcXG4rXFx0XFx0ICogaWdub3JlIGl0IHRvIGF2b2lkIGludGVycnVwdGluZyBvdGhlciBpb2N0bHMvc3lzY2FsbHMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHR2Y3B1X3NpZ3Vzcl9saXN0ZW4oKTtcXG4rXFx0XFx0ciA9IF9fdmNwdV9ydW4odmNwdSk7XFxuK1xcdFxcdFRFU1RfQVNTRVJUKCFyIHx8IGVycm5vID09IEVJTlRSLCBcXFwiRXhwZWN0ZWQgc3VjY2VzcyBvciBTSUdVU1IxXFxcIik7XFxuK1xcdFxcdHZjcHVfc2lndXNyX2lnbm9yZSgpO1xcbitcXG4rXFx0XFx0LyogVGhlIGd1ZXN0IG9ubHkgZXhpdHMgZHVlIHRvIGEgc2lnbmFsIG9yIGZhaWxlZCBhc3NlcnRpb24gKi9cXG4rXFx0XFx0aWYgKCFyKSB7XFxuK1xcdFxcdFxcdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XFxuK1xcdFxcdFxcdFRFU1RfQVNTRVJUX0VRKGdldF91Y2FsbCh2Y3B1LCBcXHUwMDI2dWMpLCBVQ0FMTF9BQk9SVCk7XFxuK1xcdFxcdFxcdFJFUE9SVF9HVUVTVF9BU1NFUlQodWMpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0c3RhdGUgPSB2Y3B1X3NhdmVfc3RhdGUodmNwdSk7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBJZiB0aGUgdkNQVSBpcyBpbiBndWVzdCBtb2RlLCBpbmplY3QgYSAjVUQgdG8gdHJpZ2dlciBhblxcbitcXHRcXHQgKiBMMi1cXHUwMDNlTDEgVk0tRXhpdCBldmVyeSBvdGhlciBpdGVyYXRpb24uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoa3ZtX3g4Nl9zdGF0ZV9pc19ndWVzdF9tb2RlKHN0YXRlKSBcXHUwMDI2XFx1MDAyNiBpICUgMiA9PSAwKVxcbitcXHRcXHRcXHRrdm1feDg2X3N0YXRlX3F1ZXVlX3VkKHN0YXRlKTtcXG4rXFxuK1xcdFxcdGt2bV92bV9yZWxlYXNlKHZtKTtcXG4rXFx0XFx0dmNwdSA9IHZtX3JlY3JlYXRlX3dpdGhfb25lX3ZjcHUodm0pO1xcbitcXHRcXHRpZiAobmVzdGVkKVxcbitcXHRcXHRcXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FELCAtMnVsKTtcXG4rXFx0XFx0dmNwdV9sb2FkX3N0YXRlKHZjcHUsIHN0YXRlKTtcXG4rXFx0XFx0a3ZtX3g4Nl9zdGF0ZV9jbGVhbnVwKHN0YXRlKTtcXG4rXFxuK1xcdFxcdHByX2luZm8oXFxcIlxcXFxyU2F2ZStyZXN0b3JlIGl0ZXJhdGlvbnM6ICVkXFxcIiwgaSk7XFxuK1xcdH1cXG4rXFx0cHJfaW5mbyhcXFwiXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3Qodm0sIGd1ZXN0X2ZhdWx0cyk7XFxuK1xcdFRFU1RfQVNTRVJUKGd1ZXN0X2ZhdWx0cywgXFxcIk5vIGd1ZXN0IHBhZ2UgZmF1bHRzIHRyaWdnZXJlZFxcXCIpO1xcbitcXHRwcl9pbmZvKFxcXCJHdWVzdCBwYWdlIGZhdWx0cyVzOiAlbHVcXFxcblxcXCIsIG5lc3RlZCA/IFxcXCIgKGluIEwyKVxcXCIgOiBcXFwiXFxcIiwgZ3Vlc3RfZmF1bHRzKTtcXG4rXFxuK1xcdHB0aHJlYWRfY2FuY2VsKHNpZ3Vzcl90aHJlYWQpO1xcbitcXHRwdGhyZWFkX2pvaW4oc2lndXNyX3RocmVhZCwgTlVMTCk7XFxuK1xcdGt2bV92bV9mcmVlKHZtKTtcXG4rfVxcbitcXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4re1xcbitcXHRwcl9pbmZvKFxcXCJSdW5uaW5nIHNhdmUrcmVzdG9yZSBzdHJlc3MgdGVzdC4uLlxcXFxuXFxcIik7XFxuK1xcdHJ1bl90ZXN0KC8qbmVzdGVkPSovZmFsc2UpO1xcbitcXG4rXFx0aWYgKCFrdm1faGFzX2NhcChLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FEKSB8fFxcbitcXHQgICAgIWt2bV9oYXNfY2FwKEtWTV9DQVBfTkVTVEVEX1NUQVRFKSB8fFxcbitcXHQgICAgKCFrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pIFxcdTAwMjZcXHUwMDI2ICFrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKSkge1xcbitcXHRcXHRwcl9pbmZvKFxcXCJOZXN0ZWQgdmlydHVhbGl6YXRpb24gbm90IHN1cHBvcnRlZCwgc2tpcHBpbmcgbmVzdGVkIHRlc3RcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0cHJfaW5mbyhcXFwiUnVubmluZyBzYXZlK3Jlc3RvcmUgc3RyZXNzIHRlc3Qgd2l0aCBhIG5lc3RlZCBndWVzdC4uLlxcXFxuXFxcIik7XFxuK1xcdHJ1bl90ZXN0KC8qbmVzdGVkPSovdHJ1ZSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xcbmluZGV4IGUyNTQyZjRjZWQ2MDUuLmQxZWRhZmQ1YWY3NTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXFxuQEAgLTIyLDkgKzIyLDYgQEBcXG4gI2RlZmluZSBTTVJBTV9HUEEgMHgxMDAwMDAwXFxuICNkZWZpbmUgU01SQU1fU1RBR0UgMHhmZVxcbiBcXG4tI2RlZmluZSBTVFIoeCkgI3hcXG4tI2RlZmluZSBYU1RSKHMpIFNUUihzKVxcbi1cXG4gI2RlZmluZSBTWU5DX1BPUlQgMHhlXFxuICNkZWZpbmUgRE9ORSAweGZmXFxuIFxcbkBAIC00Miw3ICszOSw3IEBAIHU4IHNtaV9oYW5kbGVyW10gPSB7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgc3luY193aXRoX2hvc3QodTY0IHBoYXNlKVxcbiB7XFxuLVxcdGFzbSB2b2xhdGlsZShcXFwiaW4gJFxcXCIgWFNUUihTWU5DX1BPUlQpXFxcIiwgJSVhbCBcXFxcblxcXCJcXG4rXFx0YXNtIHZvbGF0aWxlKFxcXCJpbiAkXFxcIiBfX3N0cmluZ2lmeShTWU5DX1BPUlQpXFxcIiwgJSVhbCBcXFxcblxcXCJcXG4gXFx0XFx0ICAgICA6IFxcXCIrYVxcXCIgKHBoYXNlKSk7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAxOjIzOjA0LjM1NDExNTAwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExNTUzNzY3NjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggYXJlIHVzZXItc3BhY2UgdGVzdGluZyBwcm9ncmFtcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkZDNlNWI0NmFhNTU1ZTJjZDg2YjBjYzUwYWQ1YjFhZTAyOTQxMDc0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMDE6MjM6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuaW5kZXggODhjNmM4MDQ2ZGRlYy4uZDk0ZjU2YzYzMGZkNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbkBAIC0xMDcsNiArMTA3LDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9wbXVfY291bnRlcnNfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvcG11X2V2ZW50X2ZpbHRlcl90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdFxuK1RFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zZXRfYm9vdF9jcHVfaWRcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3NldF9zcmVnc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXG5pbmRleCBkNjRjOGEyMjgyMDdhLi5lODM1NmVlNTRkN2I5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXG5AQCAtMjMsNiArMjMsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmdpZnkuaFx1MDAzZVxuIFxuICNkZWZpbmUgbXNlY3NfdG9fdXNlY3MobXNlYykgICAgKChtc2VjKSAqIDEwMDBVTEwpXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaFxuaW5kZXggYmU3OWJkYTAyNGJmMS4uODJhOGVhNmI2NjFmMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaFxuQEAgLTEyMDcsMzAgKzEyMDcsMjMgQEAgc3RhdGljIGlubGluZSBpbnQgZXZtY3Nfdm1sYXVuY2godm9pZClcbiBcbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlaHZfY2xlYW5fZmllbGRzID0gMDtcbiBcbi1cdF9fYXNtX18gX192b2xhdGlsZV9fKFwicHVzaCAlJXJicDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcmN4O1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyZHg7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJzaTtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcmRpO1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJDA7XCJcbitcdF9fYXNtX18gX192b2xhdGlsZV9fKFwicHVzaCAkMDtcIlxuIFx0XHRcdCAgICAgXCJtb3YgJSVyc3AsICglW2hvc3RfcnNwXSk7XCJcbiBcdFx0XHQgICAgIFwibGVhIDFmKCUlcmlwKSwgJSVyYXg7XCJcbiBcdFx0XHQgICAgIFwibW92ICUlcmF4LCAoJVtob3N0X3JpcF0pO1wiXG4rXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4gXHRcdFx0ICAgICBcInZtbGF1bmNoO1wiXG4gXHRcdFx0ICAgICBcImluY3EgKCUlcnNwKTtcIlxuLVx0XHRcdCAgICAgXCIxOiBwb3AgJSVyYXg7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmRpO1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJzaTtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyZHg7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmN4O1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJicDtcIlxuK1x0XHRcdCAgICAgXCIxOiA7XCJcbitcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbitcdFx0XHQgICAgIFwicG9wICUlcmF4O1wiXG4gXHRcdFx0ICAgICA6IFtyZXRdXCI9XHUwMDI2YVwiKHJldClcbiBcdFx0XHQgICAgIDogW2hvc3RfcnNwXVwiclwiXG4gXHRcdFx0ICAgICAgICgodTY0KVx1MDAyNmN1cnJlbnRfZXZtY3MtXHUwMDNlaG9zdF9yc3ApLFxuIFx0XHRcdCAgICAgICBbaG9zdF9yaXBdXCJyXCJcbi1cdFx0XHQgICAgICAgKCh1NjQpXHUwMDI2Y3VycmVudF9ldm1jcy1cdTAwM2Vob3N0X3JpcClcbi1cdFx0XHQgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiLCBcInJieFwiLCBcInI4XCIsIFwicjlcIiwgXCJyMTBcIixcbi1cdFx0XHQgICAgICAgXCJyMTFcIiwgXCJyMTJcIiwgXCJyMTNcIiwgXCJyMTRcIiwgXCJyMTVcIik7XG4rXHRcdFx0ICAgICAgICgodTY0KVx1MDAyNmN1cnJlbnRfZXZtY3MtXHUwMDNlaG9zdF9yaXApLFxuK1x0XHRcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcbitcdFx0XHQgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTEyNDYsMzAgKzEyMzksMjMgQEAgc3RhdGljIGlubGluZSBpbnQgZXZtY3Nfdm1yZXN1bWUodm9pZClcbiBcdC8qIEhPU1RfUlNQICovXG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZWh2X2NsZWFuX2ZpZWxkcyBcdTAwMjY9IH5IVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfSE9TVF9QT0lOVEVSO1xuIFxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJwdXNoICUlcmJwO1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyY3g7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJkeDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcnNpO1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyZGk7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAkMDtcIlxuK1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJwdXNoICQwO1wiXG4gXHRcdFx0ICAgICBcIm1vdiAlJXJzcCwgKCVbaG9zdF9yc3BdKTtcIlxuIFx0XHRcdCAgICAgXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcIlxuIFx0XHRcdCAgICAgXCJtb3YgJSVyYXgsICglW2hvc3RfcmlwXSk7XCJcbitcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbiBcdFx0XHQgICAgIFwidm1yZXN1bWU7XCJcbiBcdFx0XHQgICAgIFwiaW5jcSAoJSVyc3ApO1wiXG4tXHRcdFx0ICAgICBcIjE6IHBvcCAlJXJheDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyZGk7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcnNpO1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJkeDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyY3g7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmJwO1wiXG4rXHRcdFx0ICAgICBcIjE6IDtcIlxuK1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuK1x0XHRcdCAgICAgXCJwb3AgJSVyYXg7XCJcbiBcdFx0XHQgICAgIDogW3JldF1cIj1cdTAwMjZhXCIocmV0KVxuIFx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCJyXCJcbiBcdFx0XHQgICAgICAgKCh1NjQpXHUwMDI2Y3VycmVudF9ldm1jcy1cdTAwM2Vob3N0X3JzcCksXG4gXHRcdFx0ICAgICAgIFtob3N0X3JpcF1cInJcIlxuLVx0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcmlwKVxuLVx0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIsIFwicmJ4XCIsIFwicjhcIiwgXCJyOVwiLCBcInIxMFwiLFxuLVx0XHRcdCAgICAgICBcInIxMVwiLCBcInIxMlwiLCBcInIxM1wiLCBcInIxNFwiLCBcInIxNVwiKTtcbitcdFx0XHQgICAgICAgKCh1NjQpXHUwMDI2Y3VycmVudF9ldm1jcy1cdTAwM2Vob3N0X3JpcCksXG4rXHRcdFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xuK1x0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXG5pbmRleCBiMTYxMTc0ZWNlNDUzLi42ZTZmNzAwMzU1MDhhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcbkBAIC0yNCw2ICsyNCw3IEBAIGV4dGVybiBib29sIGhvc3RfY3B1X2lzX2FtZDtcbiBleHRlcm4gYm9vbCBob3N0X2NwdV9pc19oeWdvbjtcbiBleHRlcm4gYm9vbCBob3N0X2NwdV9pc19hbWRfY29tcGF0aWJsZTtcbiBleHRlcm4gdTY0IGd1ZXN0X3RzY19raHo7XG4rZXh0ZXJuIHN0cnVjdCBrdm1fbW11IGd1ZXN0X21tdTtcbiBcbiAjaWZuZGVmIE1BWF9OUl9DUFVJRF9FTlRSSUVTXG4gI2RlZmluZSBNQVhfTlJfQ1BVSURfRU5UUklFUyAxMDBcbkBAIC0zOTgsOCArMzk5LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgeDg2X21vZGVsKHVuc2lnbmVkIGludCBlYXgpXG4gI2RlZmluZSBQVEVfR0VUX1BBKHB0ZSlcdFx0KChwdGUpIFx1MDAyNiBQSFlTSUNBTF9QQUdFX01BU0spXG4gI2RlZmluZSBQVEVfR0VUX1BGTihwdGUpICAgICAgICAoUFRFX0dFVF9QQShwdGUpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKVxuIFxuLS8qIEdlbmVyYWwgUmVnaXN0ZXJzIGluIDY0LUJpdCBNb2RlICovXG4tc3RydWN0IGdwcjY0X3JlZ3Mge1xuK3N0cnVjdCBndWVzdF9yZWdzIHtcbiBcdHU2NCByYXg7XG4gXHR1NjQgcmN4O1xuIFx0dTY0IHJkeDtcbkBAIC00MTYsOCArNDE2LDM4IEBAIHN0cnVjdCBncHI2NF9yZWdzIHtcbiBcdHU2NCByMTM7XG4gXHR1NjQgcjE0O1xuIFx0dTY0IHIxNTtcbitcdHU2NCByZmxhZ3M7XG4gfTtcbiBcbitleHRlcm4gc3RydWN0IGd1ZXN0X3JlZ3MgZ3Vlc3RfcmVncztcbitcbisjZGVmaW5lIEdVRVNUX1JFR19PRkZTRVQobmFtZSkgXFxcbitcdFtvZmZfIyNuYW1lXSBcImlcIiAob2Zmc2V0b2Yoc3RydWN0IGd1ZXN0X3JlZ3MsIG5hbWUpKVxuK1xuKyNkZWZpbmUgR1VFU1RfUkVHU19PRkZTRVRTXHRcXFxuK1x0R1VFU1RfUkVHX09GRlNFVChyYXgpLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocmN4KSxcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHJkeCksXHRcXFxuK1x0R1VFU1RfUkVHX09GRlNFVChyYngpLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocnNwKSxcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHJicCksXHRcXFxuK1x0R1VFU1RfUkVHX09GRlNFVChyc2kpLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocmRpKSxcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHI4KSxcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHI5KSxcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHIxMCksXHRcXFxuK1x0R1VFU1RfUkVHX09GRlNFVChyMTEpLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocjEyKSxcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHIxMyksXHRcXFxuK1x0R1VFU1RfUkVHX09GRlNFVChyMTQpLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocjE1KSxcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHJmbGFncylcbitcbisjZGVmaW5lIEdVRVNUX1JFRyhuYW1lKSBcImd1ZXN0X3JlZ3MgKyAlY1tvZmZfXCIgI25hbWUgXCJdXCJcbitcbisjZGVmaW5lIEdVRVNUX1NXSVRDSF9HUFJfQVNNKG5hbWUpIFxcXG4rXHRcInhjaGcgJSVcIiAjbmFtZSBcIiwgXCIgR1VFU1RfUkVHKG5hbWUpIFwiXFxuXFx0XCJcbitcbiBzdHJ1Y3QgZGVzYzY0IHtcbiBcdHUxNiBsaW1pdDA7XG4gXHR1MTYgYmFzZTA7XG5AQCAtNTg0LDYgKzYxNCwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2NyMCh1NjQgdmFsKVxuIFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJtb3YgJTAsICUlY3IwXCIgOiA6IFwiclwiICh2YWwpIDogXCJtZW1vcnlcIik7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdTY0IGdldF9jcjIodm9pZClcbit7XG4rXHR1NjQgY3IyO1xuK1xuK1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJtb3YgJSVjcjIsICVbY3IyXVwiIDogW2NyMl1cIj1yXCIoY3IyKSk7XG4rXHRyZXR1cm4gY3IyO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHU2NCBnZXRfY3IzKHZvaWQpXG4ge1xuIFx0dTY0IGNyMztcbkBAIC04NzksNiArOTE3LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9zc2VfcmVnKGludCByZWcsIGNvbnN0IHNzZTEyOF90ICpkYXRhKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgaW52bHBnKHU2NCBhZGRyKVxuK3tcbitcdF9fYXNtX18gX192b2xhdGlsZV9fKFwiaW52bHBnICglMClcIiA6IDogXCJyXCIoYWRkcikgOiBcIm1lbW9yeVwiKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSB2b2lkIGNwdV9yZWxheCh2b2lkKVxuIHtcbiBcdGFzbSB2b2xhdGlsZShcInJlcDsgbm9wXCIgOjo6IFwibWVtb3J5XCIpO1xuQEAgLTkxNSw2ICs5NTgsMTEgQEAgc3RydWN0IGt2bV94ODZfc3RhdGUgKnZjcHVfc2F2ZV9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdmNwdV9sb2FkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKTtcbiB2b2lkIGt2bV94ODZfc3RhdGVfY2xlYW51cChzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGUpO1xuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1feDg2X3N0YXRlX2lzX2d1ZXN0X21vZGUoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKVxuK3tcbitcdHJldHVybiBzdGF0ZS1cdTAwM2VuZXN0ZWQuc2l6ZSBcdTAwMjZcdTAwMjYgKHN0YXRlLVx1MDAzZW5lc3RlZC5mbGFncyBcdTAwMjYgS1ZNX1NUQVRFX05FU1RFRF9HVUVTVF9NT0RFKTtcbit9XG4rXG4gY29uc3Qgc3RydWN0IGt2bV9tc3JfbGlzdCAqa3ZtX2dldF9tc3JfaW5kZXhfbGlzdCh2b2lkKTtcbiBjb25zdCBzdHJ1Y3Qga3ZtX21zcl9saXN0ICprdm1fZ2V0X2ZlYXR1cmVfbXNyX2luZGV4X2xpc3Qodm9pZCk7XG4gYm9vbCBrdm1fbXNyX2lzX2luX3NhdmVfcmVzdG9yZV9saXN0KHUzMiBtc3JfaW5kZXgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuaW5kZXggNGJjZmQ2MGUzYWVjYi4uMDRmNWUzNGRlYTNhZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXG5AQCAtMjkwLDYgKzI5MCwyMyBAQCBzdHJ1Y3Qgdm14X21zcl9lbnRyeSB7XG4gXHR1NjQgdmFsdWU7XG4gfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgxNikpKTtcbiBcbisjZGVmaW5lIFZNWF9TV0lUQ0hfR1BSU19BU00gXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJheCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJieCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJjeCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkeCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJicCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJzaSkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkaSkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI4KSAgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI5KSAgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMSkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMikgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMykgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNSlcbitcbiAjaW5jbHVkZSBcImV2bWNzLmhcIlxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IHZteG9uKHU2NCBwaHlzKVxuQEAgLTM2Myw5ICszODAsNiBAQCBzdGF0aWMgaW5saW5lIHU2NCB2bXB0cnN0eih2b2lkKVxuIFx0cmV0dXJuIHZhbHVlO1xuIH1cbiBcbi0vKlxuLSAqIE5vIGd1ZXN0IHN0YXRlIChlLmcuIEdQUnMpIGlzIGVzdGFibGlzaGVkIGJ5IHRoaXMgdm1sYXVuY2guXG4tICovXG4gc3RhdGljIGlubGluZSBpbnQgdm1sYXVuY2godm9pZClcbiB7XG4gXHRpbnQgcmV0O1xuQEAgLTM3MywzNCArMzg3LDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpXG4gXHRpZiAoZW5hYmxlX2V2bWNzKVxuIFx0XHRyZXR1cm4gZXZtY3Nfdm1sYXVuY2goKTtcbiBcbi1cdF9fYXNtX18gX192b2xhdGlsZV9fKFwicHVzaCAlJXJicDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcmN4O1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyZHg7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJzaTtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcmRpO1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJDA7XCJcbitcdF9fYXNtX18gX192b2xhdGlsZV9fKFwicHVzaCAkMDtcIlxuIFx0XHRcdCAgICAgXCJ2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTtcIlxuIFx0XHRcdCAgICAgXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcIlxuIFx0XHRcdCAgICAgXCJ2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTtcIlxuK1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuIFx0XHRcdCAgICAgXCJ2bWxhdW5jaDtcIlxuIFx0XHRcdCAgICAgXCJpbmNxICglJXJzcCk7XCJcbi1cdFx0XHQgICAgIFwiMTogcG9wICUlcmF4O1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJkaTtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyc2k7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmR4O1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJjeDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyYnA7XCJcbitcdFx0XHQgICAgIFwiMTogO1wiXG4rXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4rXHRcdFx0ICAgICBcInBvcCAlJXJheDtcIlxuIFx0XHRcdCAgICAgOiBbcmV0XVwiPVx1MDAyNmFcIihyZXQpXG4gXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cInJcIigodTY0KUhPU1RfUlNQKSxcbi1cdFx0XHQgICAgICAgW2hvc3RfcmlwXVwiclwiKCh1NjQpSE9TVF9SSVApXG4tXHRcdFx0ICAgICA6IFwibWVtb3J5XCIsIFwiY2NcIiwgXCJyYnhcIiwgXCJyOFwiLCBcInI5XCIsIFwicjEwXCIsXG4tXHRcdFx0ICAgICAgIFwicjExXCIsIFwicjEyXCIsIFwicjEzXCIsIFwicjE0XCIsIFwicjE1XCIpO1xuK1x0XHRcdCAgICAgICBbaG9zdF9yaXBdXCJyXCIoKHU2NClIT1NUX1JJUCksXG4rXHRcdFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xuK1x0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tLypcbi0gKiBObyBndWVzdCBzdGF0ZSAoZS5nLiBHUFJzKSBpcyBlc3RhYmxpc2hlZCBieSB0aGlzIHZtcmVzdW1lLlxuLSAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHZtcmVzdW1lKHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbkBAIC00MDgsMjggKzQxMiwyMSBAQCBzdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKVxuIFx0aWYgKGVuYWJsZV9ldm1jcylcbiBcdFx0cmV0dXJuIGV2bWNzX3ZtcmVzdW1lKCk7XG4gXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJSVyYnA7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJjeDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcmR4O1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyc2k7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJkaTtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICQwO1wiXG4rXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJDA7XCJcbiBcdFx0XHQgICAgIFwidm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07XCJcbiBcdFx0XHQgICAgIFwibGVhIDFmKCUlcmlwKSwgJSVyYXg7XCJcbiBcdFx0XHQgICAgIFwidm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07XCJcbitcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbiBcdFx0XHQgICAgIFwidm1yZXN1bWU7XCJcbiBcdFx0XHQgICAgIFwiaW5jcSAoJSVyc3ApO1wiXG4tXHRcdFx0ICAgICBcIjE6IHBvcCAlJXJheDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyZGk7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcnNpO1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJkeDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyY3g7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmJwO1wiXG4rXHRcdFx0ICAgICBcIjE6IDtcIlxuK1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuK1x0XHRcdCAgICAgXCJwb3AgJSVyYXg7XCJcbiBcdFx0XHQgICAgIDogW3JldF1cIj1cdTAwMjZhXCIocmV0KVxuIFx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCJyXCIoKHU2NClIT1NUX1JTUCksXG4tXHRcdFx0ICAgICAgIFtob3N0X3JpcF1cInJcIigodTY0KUhPU1RfUklQKVxuLVx0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIsIFwicmJ4XCIsIFwicjhcIiwgXCJyOVwiLCBcInIxMFwiLFxuLVx0XHRcdCAgICAgICBcInIxMVwiLCBcInIxMlwiLCBcInIxM1wiLCBcInIxNFwiLCBcInIxNVwiKTtcbitcdFx0XHQgICAgICAgW2hvc3RfcmlwXVwiclwiKCh1NjQpSE9TVF9SSVApLFxuK1x0XHRcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcbitcdFx0XHQgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jXG5pbmRleCAxZDcyZGNkZmNlM2I2Li4zZTM1M2FjMzllZWI3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuY1xuQEAgLTc0LDcgKzc0LDcgQEAgdGVzdF9hc3NlcnQoYm9vbCBleHAsIGNvbnN0IGNoYXIgKmV4cF9zdHIsXG4gXHRpZiAoIShleHApKSB7XG4gXHRcdHZhX3N0YXJ0KGFwLCBmbXQpO1xuIFxuLVx0XHRmcHJpbnRmKHN0ZGVyciwgXCI9PT09IFRlc3QgQXNzZXJ0aW9uIEZhaWx1cmUgPT09PVxcblwiXG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIlxcbj09PT0gVGVzdCBBc3NlcnRpb24gRmFpbHVyZSA9PT09XFxuXCJcbiBcdFx0XHRcIiAgJXM6JXU6ICVzXFxuXCJcbiBcdFx0XHRcIiAgcGlkPSVkIHRpZD0lZCBlcnJubz0lZCAtICVzXFxuXCIsXG4gXHRcdFx0ZmlsZSwgbGluZSwgZXhwX3N0ciwgZ2V0cGlkKCksIGt2bV9nZXR0aWQoKSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG5pbmRleCBlZjU2ZGNlZmUwMTE5Li5kMzFmYTgxZWEwNzU2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG5AQCAtMjgsNiArMjgsOSBAQCBib29sIGhvc3RfY3B1X2lzX2h5Z29uO1xuIGJvb2wgaG9zdF9jcHVfaXNfYW1kX2NvbXBhdGlibGU7XG4gYm9vbCBpc19mb3JjZWRfZW11bGF0aW9uX2VuYWJsZWQ7XG4gdTY0IGd1ZXN0X3RzY19raHo7XG4rc3RydWN0IGt2bV9tbXUgZ3Vlc3RfbW11O1xuK1xuK3N0cnVjdCBndWVzdF9yZWdzIGd1ZXN0X3JlZ3M7XG4gXG4gY29uc3QgY2hhciAqZXhfc3RyKGludCB2ZWN0b3IpXG4ge1xuQEAgLTgyOSw2ICs4MzIsMTcgQEAgdm9pZCBrdm1fYXJjaF92bV9wb3N0X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgdW5zaWduZWQgaW50IG5yX3ZjcHVzKVxuIFx0VEVTVF9BU1NFUlQociBcdTAwM2UgMCwgXCJLVk1fR0VUX1RTQ19LSFogZGlkIG5vdCBwcm92aWRlIGEgdmFsaWQgVFNDIGZyZXF1ZW5jeS5cIik7XG4gXHRndWVzdF90c2Nfa2h6ID0gcjtcbiBcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBndWVzdF90c2Nfa2h6KTtcbitcbitcdC8qXG4rXHQgKiBUaGUgZ3Vlc3QgTU1VIGlzIGp1c3QgYSBwbGFjZWhvbGRlciB0byBwcm92aWRlIGFjY2VzcyB0byBQVEUgbWFza3NcbitcdCAqIChmb3Igbm93KS4gVGhlIGd1ZXN0IGRvZXMgbm90IGhhdmUgbWFwcGluZ3MgZm9yIGl0cyBvd24gcGFnZSB0YWJsZXNcbitcdCAqIGJ5IGRlZmF1bHQsIHNvIGFueSBtZWFuaW5nZnVsIHVzZSBvZiBndWVzdCBwYWdlIHRhYmxlcyByZXF1aXJlc1xuK1x0ICogZXhwbGljaXQgc2V0dXAgYnkgdGhlIHRlc3QuIFplcm8gdGhlIFBHRCB0byBtYWtlIGl0IG9idmlvdXMgdGhlIGd1ZXN0XG4rXHQgKiBwYWdlIHRhYmxlcyBhcmUgbm90IGltbWVkaWF0ZWx5IHVzYWJsZSBieSBndWVzdCBjb2RlLlxuK1x0ICovXG4rXHRndWVzdF9tbXUgPSB2bS1cdTAwM2VtbXU7XG4rXHRndWVzdF9tbXUucGdkID0gMDtcbitcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBndWVzdF9tbXUpO1xuIH1cbiBcbiB2b2lkIHZjcHVfYXJjaF9zZXRfZW50cnlfcG9pbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpndWVzdF9jb2RlKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmNcbmluZGV4IDE0NDViODkwOTg2ZmQuLmIwNWJlNTBmMDc1ZDYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmNcbkBAIC0xMyw5ICsxMyw2IEBAXG4gXG4gI2RlZmluZSBTRVZfREVWX1BBVEggXCIvZGV2L3NldlwiXG4gXG4tc3RydWN0IGdwcjY0X3JlZ3MgZ3Vlc3RfcmVncztcbi11NjQgcmZsYWdzO1xuLVxuIC8qIEFsbG9jYXRlIG1lbW9yeSByZWdpb25zIGZvciBuZXN0ZWQgU1ZNIHRlc3RzLlxuICAqXG4gICogSW5wdXQgQXJnczpcbkBAIC0xMzcsNDYgKzEzNCw0NyBAQCB2b2lkIGdlbmVyaWNfc3ZtX3NldHVwKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0sIHZvaWQgKmd1ZXN0X3JpcClcbiAgKiBzYXZlL3Jlc3RvcmUgNjQtYml0IGdlbmVyYWwgcmVnaXN0ZXJzIGV4Y2VwdCByYXgsIHJpcCwgcnNwXG4gICogd2hpY2ggYXJlIGRpcmVjdGx5IGhhbmRlZCB0aHJvdWdoIHRoZSBWTUNCIGd1ZXN0IHByb2Nlc3NvciBzdGF0ZVxuICAqL1xuLSNkZWZpbmUgU0FWRV9HUFJfQ1x0XHRcdFx0XFxcbi1cdFwieGNoZyAlJXJieCwgZ3Vlc3RfcmVncysweDIwXFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyY3gsIGd1ZXN0X3JlZ3MrMHgxMFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcmR4LCBndWVzdF9yZWdzKzB4MThcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXJicCwgZ3Vlc3RfcmVncysweDMwXFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyc2ksIGd1ZXN0X3JlZ3MrMHgzOFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcmRpLCBndWVzdF9yZWdzKzB4NDBcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXI4LCAgZ3Vlc3RfcmVncysweDQ4XFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyOSwgIGd1ZXN0X3JlZ3MrMHg1MFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcjEwLCBndWVzdF9yZWdzKzB4NThcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXIxMSwgZ3Vlc3RfcmVncysweDYwXFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyMTIsIGd1ZXN0X3JlZ3MrMHg2OFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcjEzLCBndWVzdF9yZWdzKzB4NzBcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXIxNCwgZ3Vlc3RfcmVncysweDc4XFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyMTUsIGd1ZXN0X3JlZ3MrMHg4MFxcblxcdFwiXG4tXG4tI2RlZmluZSBMT0FEX0dQUl9DICAgICAgU0FWRV9HUFJfQ1xuKyNkZWZpbmUgU1ZNX1NXSVRDSF9HUFJTX0FTTSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJ4KSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmN4KSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmR4KSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJwKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocnNpKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmRpKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjgpICBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjkpICBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjEwKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjExKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjEyKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjEzKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE0KSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE1KVxuIFxuIC8qXG4gICogc2VsZnRlc3RzIGRvIG5vdCB1c2UgaW50ZXJydXB0cyBzbyB3ZSBkcm9wcGVkIGNsZ2kvc3RpL2NsaS9zdGdpXG4tICogZm9yIG5vdy4gcmVnaXN0ZXJzIGludm9sdmVkIGluIExPQUQvU0FWRV9HUFJfQyBhcmUgZXZlbnR1YWxseVxuKyAqIGZvciBub3cuIFJlZ2lzdGVycyBpbnZvbHZlZCBpbiBTVk1fU1dJVENIX0dQUlNfQVNNIGFyZSBldmVudHVhbGx5XG4gICogdW5tb2RpZmllZCBzbyB0aGV5IGRvIG5vdCBuZWVkIHRvIGJlIGluIHRoZSBjbG9iYmVyIGxpc3QuXG4gICovXG4gdm9pZCBydW5fZ3Vlc3Qoc3RydWN0IHZtY2IgKnZtY2IsIHU2NCB2bWNiX2dwYSlcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFxuIFx0XHRcInZtbG9hZCAlW3ZtY2JfZ3BhXVxcblxcdFwiXG4tXHRcdFwibW92IHJmbGFncywgJSVyMTVcXG5cXHRcIlx0Ly8gcmZsYWdzXG4tXHRcdFwibW92ICUlcjE1LCAweDE3MCglW3ZtY2JdKVxcblxcdFwiXG4tXHRcdFwibW92IGd1ZXN0X3JlZ3MsICUlcjE1XFxuXFx0XCJcdC8vIHJheFxuLVx0XHRcIm1vdiAlJXIxNSwgMHgxZjgoJVt2bWNiXSlcXG5cXHRcIlxuLVx0XHRMT0FEX0dQUl9DXG4rXHRcdFwibW92IFwiIEdVRVNUX1JFRyhyZmxhZ3MpIFwiLCAlJXIxNVxcblxcdFwiXG4rXHRcdFwibW92ICUlcjE1LCAlW3ZtY2JfcmZsYWdzXVxcblxcdFwiXG4rXHRcdFwibW92IFwiIEdVRVNUX1JFRyhyYXgpIFwiLCAlJXIxNVxcblxcdFwiXG4rXHRcdFwibW92ICUlcjE1LCAlW3ZtY2JfcmF4XVxcblxcdFwiXG4rXHRcdFNWTV9TV0lUQ0hfR1BSU19BU01cbiBcdFx0XCJ2bXJ1biAlW3ZtY2JfZ3BhXVxcblxcdFwiXG4tXHRcdFNBVkVfR1BSX0Ncbi1cdFx0XCJtb3YgMHgxNzAoJVt2bWNiXSksICUlcjE1XFxuXFx0XCJcdC8vIHJmbGFnc1xuLVx0XHRcIm1vdiAlJXIxNSwgcmZsYWdzXFxuXFx0XCJcbi1cdFx0XCJtb3YgMHgxZjgoJVt2bWNiXSksICUlcjE1XFxuXFx0XCJcdC8vIHJheFxuLVx0XHRcIm1vdiAlJXIxNSwgZ3Vlc3RfcmVnc1xcblxcdFwiXG4rXHRcdFNWTV9TV0lUQ0hfR1BSU19BU01cbitcdFx0XCJtb3YgJVt2bWNiX3JmbGFnc10sICUlcjE1XFxuXFx0XCJcbitcdFx0XCJtb3YgJSVyMTUsIFwiIEdVRVNUX1JFRyhyZmxhZ3MpIFwiXFxuXFx0XCJcbitcdFx0XCJtb3YgJVt2bWNiX3JheF0sICUlcjE1XFxuXFx0XCJcdC8vIHJheFxuK1x0XHRcIm1vdiAlJXIxNSwgXCIgR1VFU1RfUkVHKHJheCkgXCJcXG5cXHRcIlxuIFx0XHRcInZtc2F2ZSAlW3ZtY2JfZ3BhXVxcblxcdFwiXG4tXHRcdDogOiBbdm1jYl0gXCJyXCIgKHZtY2IpLCBbdm1jYl9ncGFdIFwiYVwiICh2bWNiX2dwYSlcbitcdFx0OiBbdm1jYl9yZmxhZ3NdIFwiK21cIiAodm1jYi1cdTAwM2VzYXZlLnJmbGFncyksXG4rXHRcdCAgW3ZtY2JfcmF4XSBcIittXCIgKHZtY2ItXHUwMDNlc2F2ZS5yYXgpXG4rXHRcdDogW3ZtY2JfZ3BhXSBcImFcIiAodm1jYl9ncGEpLFxuK1x0XHQgIEdVRVNUX1JFR1NfT0ZGU0VUU1xuIFx0XHQ6IFwicjE1XCIsIFwibWVtb3J5XCIpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuY1xuaW5kZXggZTdkZDU3OTE5NTliYS4uMzgwNTBjNjBhMDY3MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmNcbkBAIC0xMCwzNiArMTAsOCBAQFxuIFxuIHZvaWQgdWNhbGxfYXJjaF9kb191Y2FsbChndmFfdCB1YylcbiB7XG4tXHQvKlxuLVx0ICogRklYTUU6IFJldmVydCB0aGlzIGhhY2sgKHRoZSBlbnRpcmUgY29tbWl0IHRoYXQgYWRkZWQgaXQpIG9uY2UgblZNWFxuLVx0ICogcHJlc2VydmVzIEwyIEdQUnMgYWNyb3NzIGEgbmVzdGVkIFZNLUV4aXQuICBJZiBhIHVjYWxsIGZyb20gTDIsIGUuZy5cbi1cdCAqIHRvIGRvIGEgR1VFU1RfU1lOQygpLCBsYW5kcyB0aGUgdkNQVSBpbiBMMSwgYW55IGFuZCBhbGwgR1BScyBjYW4gYmVcbi1cdCAqIGNsb2JiZXJlZCBieSBMMS4gIFNhdmUgYW5kIHJlc3RvcmUgbm9uLXZvbGF0aWxlIEdQUnMgKGNsb2JiZXJpbmcgUkJQXG4tXHQgKiBpbiBwYXJ0aWN1bGFyIGlzIHByb2JsZW1hdGljKSBhbG9uZyB3aXRoIFJEWCBhbmQgUkRJICh3aGljaCBhcmVcbi1cdCAqIGlucHV0cyksIGFuZCBjbG9iYmVyIHZvbGF0aWxlIEdQUnMuICpzaWdoKlxuLVx0ICovXG4tI2RlZmluZSBIT1JSSUZJQ19MMl9VQ0FMTF9DTE9CQkVSX0hBQ0tcdFxcXG4tXHRcInJjeFwiLCBcInJzaVwiLCBcInI4XCIsIFwicjlcIiwgXCJyMTBcIiwgXCJyMTFcIlxuLVxuLVx0YXNtIHZvbGF0aWxlKFwicHVzaCAlJXJicFxcblxcdFwiXG4tXHRcdCAgICAgXCJwdXNoICUlcjE1XFxuXFx0XCJcbi1cdFx0ICAgICBcInB1c2ggJSVyMTRcXG5cXHRcIlxuLVx0XHQgICAgIFwicHVzaCAlJXIxM1xcblxcdFwiXG4tXHRcdCAgICAgXCJwdXNoICUlcjEyXFxuXFx0XCJcbi1cdFx0ICAgICBcInB1c2ggJSVyYnhcXG5cXHRcIlxuLVx0XHQgICAgIFwicHVzaCAlJXJkeFxcblxcdFwiXG4tXHRcdCAgICAgXCJwdXNoICUlcmRpXFxuXFx0XCJcbi1cdFx0ICAgICBcImluICVbcG9ydF0sICUlYWxcXG5cXHRcIlxuLVx0XHQgICAgIFwicG9wICUlcmRpXFxuXFx0XCJcbi1cdFx0ICAgICBcInBvcCAlJXJkeFxcblxcdFwiXG4tXHRcdCAgICAgXCJwb3AgJSVyYnhcXG5cXHRcIlxuLVx0XHQgICAgIFwicG9wICUlcjEyXFxuXFx0XCJcbi1cdFx0ICAgICBcInBvcCAlJXIxM1xcblxcdFwiXG4tXHRcdCAgICAgXCJwb3AgJSVyMTRcXG5cXHRcIlxuLVx0XHQgICAgIFwicG9wICUlcjE1XFxuXFx0XCJcbi1cdFx0ICAgICBcInBvcCAlJXJicFxcblxcdFwiXG4tXHRcdDogOiBbcG9ydF0gXCJkXCIgKFVDQUxMX1BJT19QT1JUKSwgXCJEXCIgKHVjKSA6IFwicmF4XCIsIFwibWVtb3J5XCIsXG4tXHRcdCAgICAgSE9SUklGSUNfTDJfVUNBTExfQ0xPQkJFUl9IQUNLKTtcbitcdGFzbSB2b2xhdGlsZShcImluICVbcG9ydF0sICUlYWxcIlxuK1x0XHQ6IDogW3BvcnRdIFwiZFwiIChVQ0FMTF9QSU9fUE9SVCksIFwiRFwiICh1YykgOiBcInJheFwiLCBcIm1lbW9yeVwiKTtcbiB9XG4gXG4gdm9pZCAqdWNhbGxfYXJjaF9nZXRfdWNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmNcbmluZGV4IGNkMDljOWRlNDQ4NWEuLjA4OWUxYThhZjUzZmMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni92bXguY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmNcbkBAIC0yMzIsNyArMjMyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGluaXRfdm1jc19jb250cm9sX2ZpZWxkcyhzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4gXG4gXHR2bXdyaXRlKEVYQ0VQVElPTl9CSVRNQVAsIDApO1xuIFx0dm13cml0ZShQQUdFX0ZBVUxUX0VSUk9SX0NPREVfTUFTSywgMCk7XG4tXHR2bXdyaXRlKFBBR0VfRkFVTFRfRVJST1JfQ09ERV9NQVRDSCwgLTEpOyAvKiBOZXZlciBtYXRjaCAqL1xuK1x0dm13cml0ZShQQUdFX0ZBVUxUX0VSUk9SX0NPREVfTUFUQ0gsIDApO1xuIFx0dm13cml0ZShDUjNfVEFSR0VUX0NPVU5ULCAwKTtcbiBcdHZtd3JpdGUoVk1fRVhJVF9DT05UUk9MUywgcmRtc3IoTVNSX0lBMzJfVk1YX0VYSVRfQ1RMUykgfFxuIFx0XHRWTV9FWElUX0hPU1RfQUREUl9TUEFDRV9TSVpFKTtcdCAgLyogNjQtYml0IGhvc3QgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcbmluZGV4IDc3Y2U4N2M0MWE4NjguLmFhN2YzYjQwNWZkMzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY1xuQEAgLTIyLDkgKzIyLDYgQEBcbiBcbiAjZGVmaW5lIFNZTkNfUE9SVFx0MHhlXG4gXG4tI2RlZmluZSBTVFIoeCkgI3hcbi0jZGVmaW5lIFhTVFIocykgU1RSKHMpXG4tXG4gLypcbiAgKiBTTUkgaGFuZGxlcjogcnVucyBpbiByZWFsLWFkZHJlc3MgbW9kZS5cbiAgKiBSZXBvcnRzIFNNUkFNX1NUQUdFIHZpYSBwb3J0IElPLCB0aGVuIGRvZXMgUlNNLlxuQEAgLTM3LDcgKzM0LDcgQEAgc3RhdGljIHU4IHNtaV9oYW5kbGVyW10gPSB7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHN5bmNfd2l0aF9ob3N0KHU2NCBwaGFzZSlcbiB7XG4tXHRhc20gdm9sYXRpbGUoXCJpbiAkXCIgWFNUUihTWU5DX1BPUlQpIFwiLCAlJWFsIFxcblwiXG4rXHRhc20gdm9sYXRpbGUoXCJpbiAkXCIgX19zdHJpbmdpZnkoU1lOQ19QT1JUKSBcIiwgJSVhbCBcXG5cIlxuIFx0XHQgICAgIDogXCIrYVwiIChwaGFzZSkpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9maXhfaHlwZXJjYWxsX3Rlc3QuY1xuaW5kZXggNzUzYTBlNzMwZWE4ZC4uNDkzMWVjMjI3NjhlZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZml4X2h5cGVyY2FsbF90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZml4X2h5cGVyY2FsbF90ZXN0LmNcbkBAIC02LDcgKzYsNiBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGFyYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX3BhcmEuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImt2bV90ZXN0X2hhcm5lc3MuaFwiXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41MDczOTFhYjJjOTMwXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jXG5AQCAtMCwwICsxLDI4OCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NnZXRvcHQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwidGVzdF91dGlsLmhcIlxuKyNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJwcm9jZXNzb3IuaFwiXG4rI2luY2x1ZGUgXCJzdm1fdXRpbC5oXCJcbisjaW5jbHVkZSBcInZteC5oXCJcbitcbisjZGVmaW5lIE5SX0lURVJBVElPTlNcdFx0NTAwXG4rXG4rI2RlZmluZSBQVFJTX1BFUl9QVEVcdFx0NTEyXG4rI2RlZmluZSBQWERfSU5ERVgodmFkZHIsIGxldmVsKVx0KCgodmFkZHIpIFx1MDAzZVx1MDAzZSBQR19MRVZFTF9TSElGVChsZXZlbCkpIFx1MDAyNiAoUFRSU19QRVJfUFRFIC0gMSkpXG4rXG4rI2RlZmluZSBURVNUX01FTV9CQVNFX0dWQVx0MHhjMDAwMDAwMFVMTFxuKyNkZWZpbmUgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVRcdDB4ZDAwMDAwMDBVTExcbisjZGVmaW5lIFBBVFRFUk5cdFx0XHQweGFiY2RlZmFiY2RlZmFiY2RVTExcbitcbitzdGF0aWMgdTY0IGV4cGVjdGVkX3ZhZGRyO1xuK3N0YXRpYyB1NjQgZ3Vlc3RfZmF1bHRzO1xuK1xuK3N0YXRpYyB1NjQgKmd1ZXN0X2dldF9wdGUodTY0IHZhZGRyKVxuK3tcbitcdHU2NCBwZ3RhYmxlX3BhLCBwdGU7XG4rXHR1NjQgKnBndGFibGU7XG4rXHRpbnQgbGV2ZWw7XG4rXG4rXHRsZXZlbCA9IChnZXRfY3I0KCkgXHUwMDI2IFg4Nl9DUjRfTEE1NykgPyBQR19MRVZFTF8yNTZUIDogUEdfTEVWRUxfNTEyRztcbitcbitcdHBndGFibGVfcGEgPSBnZXRfY3IzKCkgXHUwMDI2IFBIWVNJQ0FMX1BBR0VfTUFTSztcbitcdGZvciAoOyBsZXZlbCBcdTAwM2UgUEdfTEVWRUxfNEs7IGxldmVsLS0pIHtcbitcdFx0cGd0YWJsZSA9ICh1NjQgKikocGd0YWJsZV9wYSArIFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUKTtcbitcdFx0cHRlID0gcGd0YWJsZVtQWERfSU5ERVgodmFkZHIsIGxldmVsKV07XG4rXHRcdEdVRVNUX0FTU0VSVChwdGUgXHUwMDI2IFBURV9QUkVTRU5UX01BU0soXHUwMDI2Z3Vlc3RfbW11KSk7XG4rXHRcdEdVRVNUX0FTU0VSVCghKHB0ZSBcdTAwMjYgUFRFX0hVR0VfTUFTSyhcdTAwMjZndWVzdF9tbXUpKSk7XG4rXHRcdHBndGFibGVfcGEgPSBQVEVfR0VUX1BBKHB0ZSk7XG4rXHR9XG4rXG4rXHRwZ3RhYmxlID0gKHU2NCAqKShwZ3RhYmxlX3BhICsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQpO1xuK1x0cmV0dXJuIFx1MDAyNnBndGFibGVbUFhEX0lOREVYKHZhZGRyLCBQR19MRVZFTF80SyldO1xuK31cbitcbitzdGF0aWMgdm9pZCBndWVzdF9wZl9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKVxuK3tcbitcdHU2NCBmYXVsdF9hZGRyO1xuK1x0dTY0ICpwdGVwO1xuK1xuK1x0ZmF1bHRfYWRkciA9IGdldF9jcjIoKTtcbitcdEdVRVNUX0FTU0VSVF9FUShmYXVsdF9hZGRyLCBSRUFEX09OQ0UoZXhwZWN0ZWRfdmFkZHIpKTtcbitcbitcdHB0ZXAgPSBndWVzdF9nZXRfcHRlKGZhdWx0X2FkZHIpO1xuK1x0R1VFU1RfQVNTRVJUKHB0ZXApO1xuK1x0R1VFU1RfQVNTRVJUKCEoKnB0ZXAgXHUwMDI2IFBURV9QUkVTRU5UX01BU0soXHUwMDI2Z3Vlc3RfbW11KSkpO1xuK1xuK1x0KnB0ZXAgfD0gUFRFX1BSRVNFTlRfTUFTSyhcdTAwMjZndWVzdF9tbXUpO1xuK1x0Z3Vlc3RfZmF1bHRzKys7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGd1ZXN0X2FjY2Vzc19tZW1vcnkodm9pZCAqYXJnKVxuK3tcbitcdHU2NCB2YWRkciwgdmFsO1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyA7IGkrKykge1xuK1x0XHR2YWRkciA9IFRFU1RfTUVNX0JBU0VfR1ZBICsgKGkgJSBQVFJTX1BFUl9QVEUpICogUEFHRV9TSVpFO1xuK1x0XHRXUklURV9PTkNFKGV4cGVjdGVkX3ZhZGRyLCB2YWRkcik7XG4rXG4rXHRcdC8qIFJlYWQgdG8gdHJpZ2dlciAjUEYgKi9cbitcdFx0dmFsID0gUkVBRF9PTkNFKCoodTY0ICopdmFkZHIpO1xuK1x0XHRHVUVTVF9BU1NFUlRfRVEodmFsLCBQQVRURVJOKTtcbitcbitcdFx0LyogQ2xlYXIgdGhlIHByZXNlbnQgYml0IGFnYWluIHNvIGl0IGZhdWx0cyBuZXh0IHRpbWUgKi9cbitcdFx0Kmd1ZXN0X2dldF9wdGUodmFkZHIpIFx1MDAyNj0gflBURV9QUkVTRU5UX01BU0soXHUwMDI2Z3Vlc3RfbW11KTtcbitcdFx0aW52bHBnKHZhZGRyKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgbDFfc3ZtX2NvZGUoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSlcbit7XG4rXHRnZW5lcmljX3N2bV9zZXR1cChzdm0sIGd1ZXN0X2FjY2Vzc19tZW1vcnkpO1xuK1x0c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyB8PSBCSVQoVURfVkVDVE9SKTtcbitcbitcdHdoaWxlICgxKSB7XG4rXHRcdHJ1bl9ndWVzdChzdm0tXHUwMDNldm1jYiwgc3ZtLVx1MDAzZXZtY2JfZ3BhKTtcbitcdFx0R1VFU1RfQVNTRVJUX0VRKHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9jb2RlLFxuK1x0XHRcdFx0KFNWTV9FWElUX0VYQ1BfQkFTRSArIFVEX1ZFQ1RPUikpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4re1xuK1x0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7XG4rXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteCkpO1xuK1x0cHJlcGFyZV92bWNzKHZteCwgZ3Vlc3RfYWNjZXNzX21lbW9yeSk7XG4rXG4rXHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoRVhDRVBUSU9OX0JJVE1BUCwgQklUKFVEX1ZFQ1RPUikpKTtcbitcbitcdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR3aGlsZSAoMSkge1xuK1x0XHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpO1xuK1x0XHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX0lOVFJfSU5GTykgXHUwMDI2IDB4ZmYsIFVEX1ZFQ1RPUik7XG4rXHRcdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqdGVzdF9kYXRhKVxuK3tcbitcdGlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSlcbitcdFx0bDFfc3ZtX2NvZGUodGVzdF9kYXRhKTtcbitcdGVsc2VcbitcdFx0bDFfdm14X2NvZGUodGVzdF9kYXRhKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgKnNpZ3Vzcl90aHJlYWRfZm4odm9pZCAqYXJnKVxuK3tcbitcdHB0aHJlYWRfdCB2Y3B1X3RocmVhZCA9IChwdGhyZWFkX3QpYXJnO1xuK1xuK1x0Zm9yICg7Oykge1xuK1x0XHRwdGhyZWFkX3Rlc3RjYW5jZWwoKTtcbitcdFx0cHRocmVhZF9raWxsKHZjcHVfdGhyZWFkLCBTSUdVU1IxKTtcbitcdFx0dXNsZWVwKG1zZWNzX3RvX3VzZWNzKDEpKTtcbitcdH1cbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgdm9pZCBkdW1teV9zaWduYWxfaGFuZGxlcihpbnQgc2lnbm8pIHt9XG4rc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gc2E7XG4rXG4rc3RhdGljIHZvaWQgdmNwdV9zaWd1c3JfbGlzdGVuKHZvaWQpXG4re1xuK1x0c2Euc2FfaGFuZGxlciA9IGR1bW15X3NpZ25hbF9oYW5kbGVyO1xuK1x0c2lnYWN0aW9uKFNJR1VTUjEsIFx1MDAyNnNhLCBOVUxMKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdmNwdV9zaWd1c3JfaWdub3JlKHZvaWQpXG4re1xuK1x0c2Euc2FfaGFuZGxlciA9IFNJR19JR047XG4rXHRzaWdhY3Rpb24oU0lHVVNSMSwgXHUwMDI2c2EsIE5VTEwpO1xuK31cbitcbitzdGF0aWMgdm9pZCBrdm1feDg2X3N0YXRlX3F1ZXVlX3VkKHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSlcbit7XG4rXHRpZiAoc3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5wZW5kaW5nIHx8IHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24uaW5qZWN0ZWQpXG4rXHRcdHJldHVybjtcbitcbitcdHN0YXRlLVx1MDAzZWV2ZW50cy5mbGFncyB8PSBLVk1fVkNQVUVWRU5UX1ZBTElEX1BBWUxPQUQ7XG4rXHRzdGF0ZS1cdTAwM2VldmVudHMuZXhjZXB0aW9uLnBlbmRpbmcgPSB0cnVlO1xuK1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5pbmplY3RlZCA9IGZhbHNlO1xuK1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5uciA9IFVEX1ZFQ1RPUjtcbitcdHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24uaGFzX2Vycm9yX2NvZGUgPSBmYWxzZTtcbitcdHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb25faGFzX3BheWxvYWQgPSBmYWxzZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnVuX3Rlc3QoYm9vbCBuZXN0ZWQpXG4re1xuK1x0c3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlO1xuK1x0aW50IHIsIGksIGxldmVsO1xuK1x0cHRocmVhZF90IHNpZ3Vzcl90aHJlYWQ7XG4rXHRncGFfdCBncGEsIHBndGFibGVfZ3BhO1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRzdHJ1Y3QgdWNhbGwgdWM7XG4rXHR1NjQgKnBndGFibGU7XG4rXHRndmFfdCBndmE7XG4rXHR1NjQgcHRlO1xuK1xuK1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBuZXN0ZWQgPyBsMV9ndWVzdF9jb2RlIDogZ3Vlc3RfYWNjZXNzX21lbW9yeSk7XG4rXHR2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBQRl9WRUNUT1IsIGd1ZXN0X3BmX2hhbmRsZXIpO1xuK1xuK1x0aWYgKG5lc3RlZCkge1xuK1x0XHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FELCAtMnVsKTtcbitcdFx0aWYgKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkpXG4rXHRcdFx0dmNwdV9hbGxvY19zdm0odm0sIFx1MDAyNmd2YSk7XG4rXHRcdGVsc2VcbitcdFx0XHR2Y3B1X2FsbG9jX3ZteCh2bSwgXHUwMDI2Z3ZhKTtcbitcdFx0dmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBndmEpO1xuK1x0fVxuK1xuK1x0LyogQWxsb2NhdGUgYSBwYWdlIGFuZCB3cml0ZSB0aGUgcGF0dGVybiB0byBpdCAqL1xuK1x0Z3ZhID0gdm1fYWxsb2NfcGFnZSh2bSk7XG4rXHQqKHU2NCAqKWFkZHJfZ3ZhMmh2YSh2bSwgZ3ZhKSA9IFBBVFRFUk47XG4rXHRncGEgPSBhZGRyX2d2YTJncGEodm0sIGd2YSk7XG4rXG4rXHQvKlxuK1x0ICogTWFwIGFsbCB2aXJ0dWFsIGFkZHJlc3NlcyB0byB0aGUgcGF0dGVybiBwYWdlIGFuZCBjbGVhciB0aGUgcHJlc2VudFxuK1x0ICogYml0IHN1Y2ggdGhhdCBndWVzdCBhY2Nlc3NlcyB3aWxsIGNhdXNlIGEgI1BGLlxuK1x0ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBQVFJTX1BFUl9QVEU7IGkrKykge1xuK1x0XHRndmEgPSBURVNUX01FTV9CQVNFX0dWQSArIGkgKiBnZXRwYWdlc2l6ZSgpO1xuK1x0XHR2aXJ0X3BnX21hcCh2bSwgZ3ZhLCBncGEpO1xuK1x0XHQqdm1fZ2V0X3B0ZSh2bSwgZ3ZhKSBcdTAwMjY9IH5QVEVfUFJFU0VOVF9NQVNLKFx1MDAyNnZtLVx1MDAzZW1tdSk7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogTm93IGNyZWF0ZSBtYXBwaW5ncyBmb3IgdGhlIHBhZ2UgdGFibGVzIGNyZWF0ZWQgYWJvdmUgc28gdGhhdCB0aGVcbitcdCAqIGd1ZXN0ICNQRiBoYW5kbGVyIGNhbiB3YWxrIHRoZW0uIEFsbCBQVEVzIGZvciB0ZXN0IHZpcnR1YWwgYWRkcmVzc2VzXG4rXHQgKiBzaG91bGQgbGllIG9uIHRoZSBzYW1lIFBURSBwYWdlLCBzbyBvbmUgcGFnZSBpcyBtYXBwZWQgZm9yIGVhY2ggcGFnZVxuK1x0ICogdGFibGUgbGV2ZWwuXG4rXHQgKlxuK1x0ICogVXNlIGFuIG9mZnNldCBmb3IgdGhlIEdWQSBpbnN0ZWFkIG9mIGNyZWF0aW5nIGlkZW50aXR5IG1hcHBpbmdzIHRvXG4rXHQgKiBhdm9pZCBjb2xsaXNpb24gd2l0aCBleGlzdGluZyBtYXBwaW5ncyBhdCBsb3cgR1ZBcyAoZS5nLiBFTEYpLlxuK1x0ICovXG4rXHRwZ3RhYmxlX2dwYSA9IHZtLVx1MDAzZW1tdS5wZ2Q7XG4rXHRmb3IgKGxldmVsID0gdm0tXHUwMDNlbW11LnBndGFibGVfbGV2ZWxzOyBsZXZlbCBcdTAwM2U9IFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7XG4rXHRcdHZpcnRfbWFwKHZtLCBwZ3RhYmxlX2dwYSArIFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VULCBwZ3RhYmxlX2dwYSwgMSk7XG4rXHRcdHBndGFibGUgPSBhZGRyX2dwYTJodmEodm0sIHBndGFibGVfZ3BhKTtcbitcdFx0cHRlID0gcGd0YWJsZVtQWERfSU5ERVgoVEVTVF9NRU1fQkFTRV9HVkEsIGxldmVsKV07XG4rXHRcdHBndGFibGVfZ3BhID0gUFRFX0dFVF9QQShwdGUpO1xuK1x0fVxuK1xuK1x0LyogSW5pdGlhbGl6ZSB0aGUgdGhyZWFkIHNlbmRpbmcgU0lHVVNSIGFuZCBpbnN0YWxsIHRoZSBoYW5kbGVyICovXG4rXHR2Y3B1X3NpZ3Vzcl9pZ25vcmUoKTtcbitcdHIgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZzaWd1c3JfdGhyZWFkLCBOVUxMLCBzaWd1c3JfdGhyZWFkX2ZuLFxuK1x0XHRcdCAgICh2b2lkICopcHRocmVhZF9zZWxmKCkpO1xuK1x0VEVTVF9BU1NFUlQoIXIsIFwicHRocmVhZF9jcmVhdGUoKSBmYWlsZWQ6ICVkXCIsIHIpO1xuK1xuK1x0Zm9yIChpID0gMTsgaSBcdTAwM2M9IE5SX0lURVJBVElPTlM7IGkrKykge1xuK1x0XHQvKlxuK1x0XHQgKiBPbmx5IGhhbmRsZSBTSUdVU1Igd2hpbGUgdGhlIHZDUFUgaXMgcnVubmluZywgb3RoZXJ3aXNlXG4rXHRcdCAqIGlnbm9yZSBpdCB0byBhdm9pZCBpbnRlcnJ1cHRpbmcgb3RoZXIgaW9jdGxzL3N5c2NhbGxzLlxuK1x0XHQgKi9cbitcdFx0dmNwdV9zaWd1c3JfbGlzdGVuKCk7XG4rXHRcdHIgPSBfX3ZjcHVfcnVuKHZjcHUpO1xuK1x0XHRURVNUX0FTU0VSVCghciB8fCBlcnJubyA9PSBFSU5UUiwgXCJFeHBlY3RlZCBzdWNjZXNzIG9yIFNJR1VTUjFcIik7XG4rXHRcdHZjcHVfc2lndXNyX2lnbm9yZSgpO1xuK1xuK1x0XHQvKiBUaGUgZ3Vlc3Qgb25seSBleGl0cyBkdWUgdG8gYSBzaWduYWwgb3IgZmFpbGVkIGFzc2VydGlvbiAqL1xuK1x0XHRpZiAoIXIpIHtcbitcdFx0XHRURVNUX0FTU0VSVF9LVk1fRVhJVF9SRUFTT04odmNwdSwgS1ZNX0VYSVRfSU8pO1xuK1x0XHRcdFRFU1RfQVNTRVJUX0VRKGdldF91Y2FsbCh2Y3B1LCBcdTAwMjZ1YyksIFVDQUxMX0FCT1JUKTtcbitcdFx0XHRSRVBPUlRfR1VFU1RfQVNTRVJUKHVjKTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1xuK1x0XHRzdGF0ZSA9IHZjcHVfc2F2ZV9zdGF0ZSh2Y3B1KTtcbitcbitcdFx0LypcbitcdFx0ICogSWYgdGhlIHZDUFUgaXMgaW4gZ3Vlc3QgbW9kZSwgaW5qZWN0IGEgI1VEIHRvIHRyaWdnZXIgYW5cbitcdFx0ICogTDItXHUwMDNlTDEgVk0tRXhpdCBldmVyeSBvdGhlciBpdGVyYXRpb24uXG4rXHRcdCAqL1xuK1x0XHRpZiAoa3ZtX3g4Nl9zdGF0ZV9pc19ndWVzdF9tb2RlKHN0YXRlKSBcdTAwMjZcdTAwMjYgaSAlIDIgPT0gMClcbitcdFx0XHRrdm1feDg2X3N0YXRlX3F1ZXVlX3VkKHN0YXRlKTtcbitcbitcdFx0a3ZtX3ZtX3JlbGVhc2Uodm0pO1xuK1x0XHR2Y3B1ID0gdm1fcmVjcmVhdGVfd2l0aF9vbmVfdmNwdSh2bSk7XG4rXHRcdGlmIChuZXN0ZWQpXG4rXHRcdFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FWENFUFRJT05fUEFZTE9BRCwgLTJ1bCk7XG4rXHRcdHZjcHVfbG9hZF9zdGF0ZSh2Y3B1LCBzdGF0ZSk7XG4rXHRcdGt2bV94ODZfc3RhdGVfY2xlYW51cChzdGF0ZSk7XG4rXG4rXHRcdHByX2luZm8oXCJcXHJTYXZlK3Jlc3RvcmUgaXRlcmF0aW9uczogJWRcIiwgaSk7XG4rXHR9XG4rXHRwcl9pbmZvKFwiXFxuXCIpO1xuK1xuK1x0c3luY19nbG9iYWxfZnJvbV9ndWVzdCh2bSwgZ3Vlc3RfZmF1bHRzKTtcbitcdFRFU1RfQVNTRVJUKGd1ZXN0X2ZhdWx0cywgXCJObyBndWVzdCBwYWdlIGZhdWx0cyB0cmlnZ2VyZWRcIik7XG4rXHRwcl9pbmZvKFwiR3Vlc3QgcGFnZSBmYXVsdHMlczogJWx1XFxuXCIsIG5lc3RlZCA/IFwiIChpbiBMMilcIiA6IFwiXCIsIGd1ZXN0X2ZhdWx0cyk7XG4rXG4rXHRwdGhyZWFkX2NhbmNlbChzaWd1c3JfdGhyZWFkKTtcbitcdHB0aHJlYWRfam9pbihzaWd1c3JfdGhyZWFkLCBOVUxMKTtcbitcdGt2bV92bV9mcmVlKHZtKTtcbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbit7XG4rXHRwcl9pbmZvKFwiUnVubmluZyBzYXZlK3Jlc3RvcmUgc3RyZXNzIHRlc3QuLi5cXG5cIik7XG4rXHRydW5fdGVzdCgvKm5lc3RlZD0qL2ZhbHNlKTtcbitcbitcdGlmICgha3ZtX2hhc19jYXAoS1ZNX0NBUF9FWENFUFRJT05fUEFZTE9BRCkgfHxcbitcdCAgICAha3ZtX2hhc19jYXAoS1ZNX0NBUF9ORVNURURfU1RBVEUpIHx8XG4rXHQgICAgKCFrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pIFx1MDAyNlx1MDAyNiAha3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSkpIHtcbitcdFx0cHJfaW5mbyhcIk5lc3RlZCB2aXJ0dWFsaXphdGlvbiBub3Qgc3VwcG9ydGVkLCBza2lwcGluZyBuZXN0ZWQgdGVzdFxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRwcl9pbmZvKFwiUnVubmluZyBzYXZlK3Jlc3RvcmUgc3RyZXNzIHRlc3Qgd2l0aCBhIG5lc3RlZCBndWVzdC4uLlxcblwiKTtcbitcdHJ1bl90ZXN0KC8qbmVzdGVkPSovdHJ1ZSk7XG4rXHRyZXR1cm4gMDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXG5pbmRleCBlMjU0MmY0Y2VkNjA1Li5kMWVkYWZkNWFmNzU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmNcbkBAIC0yMiw5ICsyMiw2IEBAXG4gI2RlZmluZSBTTVJBTV9HUEEgMHgxMDAwMDAwXG4gI2RlZmluZSBTTVJBTV9TVEFHRSAweGZlXG4gXG4tI2RlZmluZSBTVFIoeCkgI3hcbi0jZGVmaW5lIFhTVFIocykgU1RSKHMpXG4tXG4gI2RlZmluZSBTWU5DX1BPUlQgMHhlXG4gI2RlZmluZSBET05FIDB4ZmZcbiBcbkBAIC00Miw3ICszOSw3IEBAIHU4IHNtaV9oYW5kbGVyW10gPSB7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHN5bmNfd2l0aF9ob3N0KHU2NCBwaGFzZSlcbiB7XG4tXHRhc20gdm9sYXRpbGUoXCJpbiAkXCIgWFNUUihTWU5DX1BPUlQpXCIsICUlYWwgXFxuXCJcbitcdGFzbSB2b2xhdGlsZShcImluICRcIiBfX3N0cmluZ2lmeShTWU5DX1BPUlQpXCIsICUlYWwgXFxuXCJcbiBcdFx0ICAgICA6IFwiK2FcIiAocGhhc2UpKTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMToyMzowNC4zNTQxMTYyNTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTU1MzczOTMxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IEtWTSBTZWxmdGVzdCBQYXRjaCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEtWTSBzZWxmdGVzdHMuIEl0IHNlZW1zIHRvIGFkZCBhIG5ldyB0ZXN0LCBgc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0YCwgYW5kIHR3ZWFrcyBzb21lIGV4aXN0aW5nIHRlc3QgZmlsZXM6IGBldm1jcy5oYCwgYHByb2Nlc3Nvci5oYCwgYHZteC5oYCwgYHN2bS5jYCwgYHVjYWxsLmNgLCBgdm14LmNgLCBgZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY2AsIGBmaXhfaHlwZXJjYWxsX3Rlc3QuY2AsIGFuZCBgc21tX3Rlc3QuY2AuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCB1bmRlciBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3Q6IHRoaXMgcGF0Y2ggaXMgKnNvbGVseSogbW9kaWZ5aW5nIGZpbGVzIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AuICBUaGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIG15IGV4cGVydCBpbnN0aW5jdHMuIFRoZXNlIGFyZSBzZWxmdGVzdHM7IHRoZXkncmUgdXNlci1zcGFjZSBwcm9ncmFtcyBkZXNpZ25lZCB0byAqdGVzdCogdGhlIGtlcm5lbCdzIEtWTSBpbXBsZW1lbnRhdGlvbiwgbm90IHBhcnQgb2YgdGhlIGtlcm5lbCdzIGNvcmUgZnVuY3Rpb25hbGl0eS5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBubyBrZXJuZWwgZmlsZXMgYXJlIG1vZGlmaWVkIGJ5IGxvb2tpbmcgYXQgdGhlIGRpZmYgYWdhaW46XG5gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bWBcbmB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaGBcbmB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaGBcbmB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhgXG5gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oYFxuYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNgXG5gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNgXG5gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmNgXG5gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuY2BcbmB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni92bXguY2BcbmB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNgXG5gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9maXhfaHlwZXJjYWxsX3Rlc3QuY2BcbmB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jYFxuYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY2BcblllcCwgYWxsIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gIGRpcmVjdG9yeS5cblxuVGhlIHByb21wdCwgb2YgY291cnNlLCBkb2VzIG5vdCBleHBsaWNpdGx5IGxpc3QgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AuIEJ1dCBpdCBwcm92aWRlcyB0aGUgdWx0aW1hdGUgbGl0bXVzIHRlc3QuICBEb2VzIGl0IG1ha2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkPyBOby4gVGhlc2UgYXJlIG5vdCBrZXJuZWwgY29kZS4gIFRoZXNlIGFyZSB1c2VyIHNwYWNlIHByb2dyYW1zIHRvICp0ZXN0KiB0aGUga2VybmVsJ3MgYmVoYXZpb3IuIFRoZXkgbWlnaHQgKnJldmVhbCogYnVncyBpbiB0aGUga2VybmVsLCBidXQgdGhleSBkb24ndCAqaW50cm9kdWNlKiB0aGVtIG9yIGZ1bmN0aW9uYWxseSBjaGFuZ2UgYW55dGhpbmcgaW4gdGhlIGtlcm5lbC4gIFRoZSBjaGFuZ2VzIGluIHRoZXNlIHRlc3RzIGFyZSBzaW1wbHkgZm9yIHRlc3RpbmcsIG5vdCBrZXJuZWwgZnVuY3Rpb24uXG5cblRoZXJlZm9yZSwgYXBwbHlpbmcgdGhlIGluc3RydWN0aW9uJ3MgaW50ZW50LCBJIHdpbGwgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIyNCwiT3V0cHV0VG9rZW5zIjo3MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAxOjIzOjE1LjkwNzg1ODk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggYXJlIHVzZXItc3BhY2UgdGVzdGluZyBwcm9ncmFtcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggYXJlIHVzZXItc3BhY2UgdGVzdGluZyBwcm9ncmFtcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowr786b[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 01:04:06 +0000 UTC FinishedAt: 2026-07-30 01:23:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAxOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLCB3aGljaCBhcmUgdXNlci1zcGFjZSB0ZXN0aW5nIHByb2dyYW1zLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDE6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkZDNlNWI0NmFhNTU1ZTJjZDg2YjBjYzUwYWQ1YjFhZTAyOTQxMDc0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMDE6MjM6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDg4YzZjODA0NmRkZWMuLmQ5NGY1NmM2MzBmZDUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtMTA3LDYgJiM0MzsxMDcsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9wbXVfY291bnRlcnNfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3BtdV9ldmVudF9maWx0ZXJfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdFxuJiM0MztURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zZXRfYm9vdF9jcHVfaWRcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zZXRfc3JlZ3NfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbmluZGV4IGQ2NGM4YTIyODIwN2EuLmU4MzU2ZWU1NGQ3YjkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbkBAIC0yMyw2ICYjNDM7MjMsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5naWZ5LmhcdTAwM2VcbiBcbiAjZGVmaW5lIG1zZWNzX3RvX3VzZWNzKG1zZWMpICAgICgobXNlYykgKiAxMDAwVUxMKVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcbmluZGV4IGJlNzliZGEwMjRiZjEuLjgyYThlYTZiNjYxZjAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcbkBAIC0xMjA3LDMwICYjNDM7MTIwNywyMyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1jc192bWxhdW5jaCh2b2lkKVxuIFxuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2Vodl9jbGVhbl9maWVsZHMgPSAwO1xuIFxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7cHVzaCAlJXJicDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyY3g7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcmR4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyZGk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICQwO1wmIzM0O1xuJiM0MztcdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O3B1c2ggJDA7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDttb3YgJSVyc3AsICglW2hvc3RfcnNwXSk7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O21vdiAlJXJheCwgKCVbaG9zdF9yaXBdKTtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4gXHRcdFx0ICAgICBcJiMzNDt2bWxhdW5jaDtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O2luY3EgKCUlcnNwKTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0OzE6IHBvcCAlJXJheDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJjeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJicDtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDsxOiA7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuJiM0MztcdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJheDtcJiMzNDtcbiBcdFx0XHQgICAgIDogW3JldF1cJiMzNDs9XHUwMDI2YVwmIzM0OyhyZXQpXG4gXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cJiMzNDtyXCYjMzQ7XG4gXHRcdFx0ICAgICAgICgodTY0KVx1MDAyNmN1cnJlbnRfZXZtY3MtXHUwMDNlaG9zdF9yc3ApLFxuIFx0XHRcdCAgICAgICBbaG9zdF9yaXBdXCYjMzQ7clwmIzM0O1xuLVx0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcmlwKVxuLVx0XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7LCBcJiMzNDtyYnhcJiMzNDssIFwmIzM0O3I4XCYjMzQ7LCBcJiMzNDtyOVwmIzM0OywgXCYjMzQ7cjEwXCYjMzQ7LFxuLVx0XHRcdCAgICAgICBcJiMzNDtyMTFcJiMzNDssIFwmIzM0O3IxMlwmIzM0OywgXCYjMzQ7cjEzXCYjMzQ7LCBcJiMzNDtyMTRcJiMzNDssIFwmIzM0O3IxNVwmIzM0Oyk7XG4mIzQzO1x0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcmlwKSxcbiYjNDM7XHRcdFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xuJiM0MztcdFx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0Oyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xMjQ2LDMwICYjNDM7MTIzOSwyMyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1jc192bXJlc3VtZSh2b2lkKVxuIFx0LyogSE9TVF9SU1AgKi9cbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlaHZfY2xlYW5fZmllbGRzIFx1MDAyNj0gfkhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9IT1NUX1BPSU5URVI7XG4gXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcJiMzNDtwdXNoICUlcmJwO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJjeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyZHg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcnNpO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJkaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJDA7XCYjMzQ7XG4mIzQzO1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7cHVzaCAkMDtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O21vdiAlJXJzcCwgKCVbaG9zdF9yc3BdKTtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O2xlYSAxZiglJXJpcCksICUlcmF4O1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7bW92ICUlcmF4LCAoJVtob3N0X3JpcF0pO1wmIzM0O1xuJiM0MztcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbiBcdFx0XHQgICAgIFwmIzM0O3ZtcmVzdW1lO1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7aW5jcSAoJSVyc3ApO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7MTogcG9wICUlcmF4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cG9wICUlcmRpO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cG9wICUlcnNpO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cG9wICUlcmR4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cG9wICUlcmN4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cG9wICUlcmJwO1wmIzM0O1xuJiM0MztcdFx0XHQgICAgIFwmIzM0OzE6IDtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7cG9wICUlcmF4O1wmIzM0O1xuIFx0XHRcdCAgICAgOiBbcmV0XVwmIzM0Oz1cdTAwMjZhXCYjMzQ7KHJldClcbiBcdFx0XHQgICAgIDogW2hvc3RfcnNwXVwmIzM0O3JcJiMzNDtcbiBcdFx0XHQgICAgICAgKCh1NjQpXHUwMDI2Y3VycmVudF9ldm1jcy1cdTAwM2Vob3N0X3JzcCksXG4gXHRcdFx0ICAgICAgIFtob3N0X3JpcF1cJiMzNDtyXCYjMzQ7XG4tXHRcdFx0ICAgICAgICgodTY0KVx1MDAyNmN1cnJlbnRfZXZtY3MtXHUwMDNlaG9zdF9yaXApXG4tXHRcdFx0ICAgICA6IFwmIzM0O21lbW9yeVwmIzM0OywgXCYjMzQ7Y2NcJiMzNDssIFwmIzM0O3JieFwmIzM0OywgXCYjMzQ7cjhcJiMzNDssIFwmIzM0O3I5XCYjMzQ7LCBcJiMzNDtyMTBcJiMzNDssXG4tXHRcdFx0ICAgICAgIFwmIzM0O3IxMVwmIzM0OywgXCYjMzQ7cjEyXCYjMzQ7LCBcJiMzNDtyMTNcJiMzNDssIFwmIzM0O3IxNFwmIzM0OywgXCYjMzQ7cjE1XCYjMzQ7KTtcbiYjNDM7XHRcdFx0ICAgICAgICgodTY0KVx1MDAyNmN1cnJlbnRfZXZtY3MtXHUwMDNlaG9zdF9yaXApLFxuJiM0MztcdFx0XHQgICAgICAgR1VFU1RfUkVHU19PRkZTRVRTXG4mIzQzO1x0XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxuaW5kZXggYjE2MTE3NGVjZTQ1My4uNmU2ZjcwMDM1NTA4YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXG5AQCAtMjQsNiAmIzQzOzI0LDcgQEAgZXh0ZXJuIGJvb2wgaG9zdF9jcHVfaXNfYW1kO1xuIGV4dGVybiBib29sIGhvc3RfY3B1X2lzX2h5Z29uO1xuIGV4dGVybiBib29sIGhvc3RfY3B1X2lzX2FtZF9jb21wYXRpYmxlO1xuIGV4dGVybiB1NjQgZ3Vlc3RfdHNjX2toejtcbiYjNDM7ZXh0ZXJuIHN0cnVjdCBrdm1fbW11IGd1ZXN0X21tdTtcbiBcbiAjaWZuZGVmIE1BWF9OUl9DUFVJRF9FTlRSSUVTXG4gI2RlZmluZSBNQVhfTlJfQ1BVSURfRU5UUklFUyAxMDBcbkBAIC0zOTgsOCAmIzQzOzM5OSw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHg4Nl9tb2RlbCh1bnNpZ25lZCBpbnQgZWF4KVxuICNkZWZpbmUgUFRFX0dFVF9QQShwdGUpXHRcdCgocHRlKSBcdTAwMjYgUEhZU0lDQUxfUEFHRV9NQVNLKVxuICNkZWZpbmUgUFRFX0dFVF9QRk4ocHRlKSAgICAgICAgKFBURV9HRVRfUEEocHRlKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVClcbiBcbi0vKiBHZW5lcmFsIFJlZ2lzdGVycyBpbiA2NC1CaXQgTW9kZSAqL1xuLXN0cnVjdCBncHI2NF9yZWdzIHtcbiYjNDM7c3RydWN0IGd1ZXN0X3JlZ3Mge1xuIFx0dTY0IHJheDtcbiBcdHU2NCByY3g7XG4gXHR1NjQgcmR4O1xuQEAgLTQxNiw4ICYjNDM7NDE2LDM4IEBAIHN0cnVjdCBncHI2NF9yZWdzIHtcbiBcdHU2NCByMTM7XG4gXHR1NjQgcjE0O1xuIFx0dTY0IHIxNTtcbiYjNDM7XHR1NjQgcmZsYWdzO1xuIH07XG4gXG4mIzQzO2V4dGVybiBzdHJ1Y3QgZ3Vlc3RfcmVncyBndWVzdF9yZWdzO1xuJiM0MztcbiYjNDM7I2RlZmluZSBHVUVTVF9SRUdfT0ZGU0VUKG5hbWUpIFxcXG4mIzQzO1x0W29mZl8jI25hbWVdIFwmIzM0O2lcJiMzNDsgKG9mZnNldG9mKHN0cnVjdCBndWVzdF9yZWdzLCBuYW1lKSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19PRkZTRVRTXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocmF4KSxcdFxcXG4mIzQzO1x0R1VFU1RfUkVHX09GRlNFVChyY3gpLFx0XFxcbiYjNDM7XHRHVUVTVF9SRUdfT0ZGU0VUKHJkeCksXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocmJ4KSxcdFxcXG4mIzQzO1x0R1VFU1RfUkVHX09GRlNFVChyc3ApLFx0XFxcbiYjNDM7XHRHVUVTVF9SRUdfT0ZGU0VUKHJicCksXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocnNpKSxcdFxcXG4mIzQzO1x0R1VFU1RfUkVHX09GRlNFVChyZGkpLFx0XFxcbiYjNDM7XHRHVUVTVF9SRUdfT0ZGU0VUKHI4KSxcdFxcXG4mIzQzO1x0R1VFU1RfUkVHX09GRlNFVChyOSksXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocjEwKSxcdFxcXG4mIzQzO1x0R1VFU1RfUkVHX09GRlNFVChyMTEpLFx0XFxcbiYjNDM7XHRHVUVTVF9SRUdfT0ZGU0VUKHIxMiksXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocjEzKSxcdFxcXG4mIzQzO1x0R1VFU1RfUkVHX09GRlNFVChyMTQpLFx0XFxcbiYjNDM7XHRHVUVTVF9SRUdfT0ZGU0VUKHIxNSksXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocmZsYWdzKVxuJiM0MztcbiYjNDM7I2RlZmluZSBHVUVTVF9SRUcobmFtZSkgXCYjMzQ7Z3Vlc3RfcmVncyAmIzQzOyAlY1tvZmZfXCYjMzQ7ICNuYW1lIFwmIzM0O11cJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgR1VFU1RfU1dJVENIX0dQUl9BU00obmFtZSkgXFxcbiYjNDM7XHRcJiMzNDt4Y2hnICUlXCYjMzQ7ICNuYW1lIFwmIzM0OywgXCYjMzQ7IEdVRVNUX1JFRyhuYW1lKSBcJiMzNDtcXG5cXHRcJiMzNDtcbiYjNDM7XG4gc3RydWN0IGRlc2M2NCB7XG4gXHR1MTYgbGltaXQwO1xuIFx0dTE2IGJhc2UwO1xuQEAgLTU4NCw2ICYjNDM7NjE0LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY3IwKHU2NCB2YWwpXG4gXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcJiMzNDttb3YgJTAsICUlY3IwXCYjMzQ7IDogOiBcJiMzNDtyXCYjMzQ7ICh2YWwpIDogXCYjMzQ7bWVtb3J5XCYjMzQ7KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdTY0IGdldF9jcjIodm9pZClcbiYjNDM7e1xuJiM0MztcdHU2NCBjcjI7XG4mIzQzO1xuJiM0MztcdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O21vdiAlJWNyMiwgJVtjcjJdXCYjMzQ7IDogW2NyMl1cJiMzNDs9clwmIzM0OyhjcjIpKTtcbiYjNDM7XHRyZXR1cm4gY3IyO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdTY0IGdldF9jcjModm9pZClcbiB7XG4gXHR1NjQgY3IzO1xuQEAgLTg3OSw2ICYjNDM7OTE3LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9zc2VfcmVnKGludCByZWcsIGNvbnN0IHNzZTEyOF90ICpkYXRhKVxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGludmxwZyh1NjQgYWRkcilcbiYjNDM7e1xuJiM0MztcdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O2ludmxwZyAoJTApXCYjMzQ7IDogOiBcJiMzNDtyXCYjMzQ7KGFkZHIpIDogXCYjMzQ7bWVtb3J5XCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHZvaWQgY3B1X3JlbGF4KHZvaWQpXG4ge1xuIFx0YXNtIHZvbGF0aWxlKFwmIzM0O3JlcDsgbm9wXCYjMzQ7IDo6OiBcJiMzNDttZW1vcnlcJiMzNDspO1xuQEAgLTkxNSw2ICYjNDM7OTU4LDExIEBAIHN0cnVjdCBrdm1feDg2X3N0YXRlICp2Y3B1X3NhdmVfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHZjcHVfbG9hZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSk7XG4gdm9pZCBrdm1feDg2X3N0YXRlX2NsZWFudXAoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKTtcbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGt2bV94ODZfc3RhdGVfaXNfZ3Vlc3RfbW9kZShzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3RhdGUtXHUwMDNlbmVzdGVkLnNpemUgXHUwMDI2XHUwMDI2IChzdGF0ZS1cdTAwM2VuZXN0ZWQuZmxhZ3MgXHUwMDI2IEtWTV9TVEFURV9ORVNURURfR1VFU1RfTU9ERSk7XG4mIzQzO31cbiYjNDM7XG4gY29uc3Qgc3RydWN0IGt2bV9tc3JfbGlzdCAqa3ZtX2dldF9tc3JfaW5kZXhfbGlzdCh2b2lkKTtcbiBjb25zdCBzdHJ1Y3Qga3ZtX21zcl9saXN0ICprdm1fZ2V0X2ZlYXR1cmVfbXNyX2luZGV4X2xpc3Qodm9pZCk7XG4gYm9vbCBrdm1fbXNyX2lzX2luX3NhdmVfcmVzdG9yZV9saXN0KHUzMiBtc3JfaW5kZXgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuaW5kZXggNGJjZmQ2MGUzYWVjYi4uMDRmNWUzNGRlYTNhZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXG5AQCAtMjkwLDYgJiM0MzsyOTAsMjMgQEAgc3RydWN0IHZteF9tc3JfZW50cnkge1xuIFx0dTY0IHZhbHVlO1xuIH0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMTYpKSk7XG4gXG4mIzQzOyNkZWZpbmUgVk1YX1NXSVRDSF9HUFJTX0FTTSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJheCkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYngpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmN4KSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkeCkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYnApIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocnNpKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkaSkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOCkgIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjkpICBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMCkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTEpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjEyKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMykgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTQpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE1KVxuJiM0MztcbiAjaW5jbHVkZSBcJiMzNDtldm1jcy5oXCYjMzQ7XG4gXG4gc3RhdGljIGlubGluZSBpbnQgdm14b24odTY0IHBoeXMpXG5AQCAtMzYzLDkgJiM0MzszODAsNiBAQCBzdGF0aWMgaW5saW5lIHU2NCB2bXB0cnN0eih2b2lkKVxuIFx0cmV0dXJuIHZhbHVlO1xuIH1cbiBcbi0vKlxuLSAqIE5vIGd1ZXN0IHN0YXRlIChlLmcuIEdQUnMpIGlzIGVzdGFibGlzaGVkIGJ5IHRoaXMgdm1sYXVuY2guXG4tICovXG4gc3RhdGljIGlubGluZSBpbnQgdm1sYXVuY2godm9pZClcbiB7XG4gXHRpbnQgcmV0O1xuQEAgLTM3MywzNCAmIzQzOzM4NywyNCBAQCBzdGF0aWMgaW5saW5lIGludCB2bWxhdW5jaCh2b2lkKVxuIFx0aWYgKGVuYWJsZV9ldm1jcylcbiBcdFx0cmV0dXJuIGV2bWNzX3ZtbGF1bmNoKCk7XG4gXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcJiMzNDtwdXNoICUlcmJwO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJjeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyZHg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcnNpO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJkaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJDA7XCYjMzQ7XG4mIzQzO1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7cHVzaCAkMDtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O3Ztd3JpdGUgJSVyc3AsICVbaG9zdF9yc3BdO1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7bGVhIDFmKCUlcmlwKSwgJSVyYXg7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDt2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4gXHRcdFx0ICAgICBcJiMzNDt2bWxhdW5jaDtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O2luY3EgKCUlcnNwKTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0OzE6IHBvcCAlJXJheDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJjeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJicDtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDsxOiA7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuJiM0MztcdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJheDtcJiMzNDtcbiBcdFx0XHQgICAgIDogW3JldF1cJiMzNDs9XHUwMDI2YVwmIzM0OyhyZXQpXG4gXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cJiMzNDtyXCYjMzQ7KCh1NjQpSE9TVF9SU1ApLFxuLVx0XHRcdCAgICAgICBbaG9zdF9yaXBdXCYjMzQ7clwmIzM0OygodTY0KUhPU1RfUklQKVxuLVx0XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7LCBcJiMzNDtyYnhcJiMzNDssIFwmIzM0O3I4XCYjMzQ7LCBcJiMzNDtyOVwmIzM0OywgXCYjMzQ7cjEwXCYjMzQ7LFxuLVx0XHRcdCAgICAgICBcJiMzNDtyMTFcJiMzNDssIFwmIzM0O3IxMlwmIzM0OywgXCYjMzQ7cjEzXCYjMzQ7LCBcJiMzNDtyMTRcJiMzNDssIFwmIzM0O3IxNVwmIzM0Oyk7XG4mIzQzO1x0XHRcdCAgICAgICBbaG9zdF9yaXBdXCYjMzQ7clwmIzM0OygodTY0KUhPU1RfUklQKSxcbiYjNDM7XHRcdFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xuJiM0MztcdFx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0Oyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi0vKlxuLSAqIE5vIGd1ZXN0IHN0YXRlIChlLmcuIEdQUnMpIGlzIGVzdGFibGlzaGVkIGJ5IHRoaXMgdm1yZXN1bWUuXG4tICovXG4gc3RhdGljIGlubGluZSBpbnQgdm1yZXN1bWUodm9pZClcbiB7XG4gXHRpbnQgcmV0O1xuQEAgLTQwOCwyOCAmIzQzOzQxMiwyMSBAQCBzdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKVxuIFx0aWYgKGVuYWJsZV9ldm1jcylcbiBcdFx0cmV0dXJuIGV2bWNzX3ZtcmVzdW1lKCk7XG4gXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcJiMzNDtwdXNoICUlcmJwO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJjeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyZHg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcnNpO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJkaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJDA7XCYjMzQ7XG4mIzQzO1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7cHVzaCAkMDtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O3Ztd3JpdGUgJSVyc3AsICVbaG9zdF9yc3BdO1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7bGVhIDFmKCUlcmlwKSwgJSVyYXg7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDt2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4gXHRcdFx0ICAgICBcJiMzNDt2bXJlc3VtZTtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O2luY3EgKCUlcnNwKTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0OzE6IHBvcCAlJXJheDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJjeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJicDtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDsxOiA7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuJiM0MztcdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJheDtcJiMzNDtcbiBcdFx0XHQgICAgIDogW3JldF1cJiMzNDs9XHUwMDI2YVwmIzM0OyhyZXQpXG4gXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cJiMzNDtyXCYjMzQ7KCh1NjQpSE9TVF9SU1ApLFxuLVx0XHRcdCAgICAgICBbaG9zdF9yaXBdXCYjMzQ7clwmIzM0OygodTY0KUhPU1RfUklQKVxuLVx0XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7LCBcJiMzNDtyYnhcJiMzNDssIFwmIzM0O3I4XCYjMzQ7LCBcJiMzNDtyOVwmIzM0OywgXCYjMzQ7cjEwXCYjMzQ7LFxuLVx0XHRcdCAgICAgICBcJiMzNDtyMTFcJiMzNDssIFwmIzM0O3IxMlwmIzM0OywgXCYjMzQ7cjEzXCYjMzQ7LCBcJiMzNDtyMTRcJiMzNDssIFwmIzM0O3IxNVwmIzM0Oyk7XG4mIzQzO1x0XHRcdCAgICAgICBbaG9zdF9yaXBdXCYjMzQ7clwmIzM0OygodTY0KUhPU1RfUklQKSxcbiYjNDM7XHRcdFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xuJiM0MztcdFx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0Oyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuY1xuaW5kZXggMWQ3MmRjZGZjZTNiNi4uM2UzNTNhYzM5ZWViNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNcbkBAIC03NCw3ICYjNDM7NzQsNyBAQCB0ZXN0X2Fzc2VydChib29sIGV4cCwgY29uc3QgY2hhciAqZXhwX3N0cixcbiBcdGlmICghKGV4cCkpIHtcbiBcdFx0dmFfc3RhcnQoYXAsIGZtdCk7XG4gXG4tXHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDs9PT09IFRlc3QgQXNzZXJ0aW9uIEZhaWx1cmUgPT09PVxcblwmIzM0O1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1xcbj09PT0gVGVzdCBBc3NlcnRpb24gRmFpbHVyZSA9PT09XFxuXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7ICAlczoldTogJXNcXG5cJiMzNDtcbiBcdFx0XHRcJiMzNDsgIHBpZD0lZCB0aWQ9JWQgZXJybm89JWQgLSAlc1xcblwmIzM0OyxcbiBcdFx0XHRmaWxlLCBsaW5lLCBleHBfc3RyLCBnZXRwaWQoKSwga3ZtX2dldHRpZCgpLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcbmluZGV4IGVmNTZkY2VmZTAxMTkuLmQzMWZhODFlYTA3NTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcbkBAIC0yOCw2ICYjNDM7MjgsOSBAQCBib29sIGhvc3RfY3B1X2lzX2h5Z29uO1xuIGJvb2wgaG9zdF9jcHVfaXNfYW1kX2NvbXBhdGlibGU7XG4gYm9vbCBpc19mb3JjZWRfZW11bGF0aW9uX2VuYWJsZWQ7XG4gdTY0IGd1ZXN0X3RzY19raHo7XG4mIzQzO3N0cnVjdCBrdm1fbW11IGd1ZXN0X21tdTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBndWVzdF9yZWdzIGd1ZXN0X3JlZ3M7XG4gXG4gY29uc3QgY2hhciAqZXhfc3RyKGludCB2ZWN0b3IpXG4ge1xuQEAgLTgyOSw2ICYjNDM7ODMyLDE3IEBAIHZvaWQga3ZtX2FyY2hfdm1fcG9zdF9jcmVhdGUoc3RydWN0IGt2bV92bSAqdm0sIHVuc2lnbmVkIGludCBucl92Y3B1cylcbiBcdFRFU1RfQVNTRVJUKHIgXHUwMDNlIDAsIFwmIzM0O0tWTV9HRVRfVFNDX0tIWiBkaWQgbm90IHByb3ZpZGUgYSB2YWxpZCBUU0MgZnJlcXVlbmN5LlwmIzM0Oyk7XG4gXHRndWVzdF90c2Nfa2h6ID0gcjtcbiBcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBndWVzdF90c2Nfa2h6KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZ3Vlc3QgTU1VIGlzIGp1c3QgYSBwbGFjZWhvbGRlciB0byBwcm92aWRlIGFjY2VzcyB0byBQVEUgbWFza3NcbiYjNDM7XHQgKiAoZm9yIG5vdykuIFRoZSBndWVzdCBkb2VzIG5vdCBoYXZlIG1hcHBpbmdzIGZvciBpdHMgb3duIHBhZ2UgdGFibGVzXG4mIzQzO1x0ICogYnkgZGVmYXVsdCwgc28gYW55IG1lYW5pbmdmdWwgdXNlIG9mIGd1ZXN0IHBhZ2UgdGFibGVzIHJlcXVpcmVzXG4mIzQzO1x0ICogZXhwbGljaXQgc2V0dXAgYnkgdGhlIHRlc3QuIFplcm8gdGhlIFBHRCB0byBtYWtlIGl0IG9idmlvdXMgdGhlIGd1ZXN0XG4mIzQzO1x0ICogcGFnZSB0YWJsZXMgYXJlIG5vdCBpbW1lZGlhdGVseSB1c2FibGUgYnkgZ3Vlc3QgY29kZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRndWVzdF9tbXUgPSB2bS1cdTAwM2VtbXU7XG4mIzQzO1x0Z3Vlc3RfbW11LnBnZCA9IDA7XG4mIzQzO1x0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGd1ZXN0X21tdSk7XG4gfVxuIFxuIHZvaWQgdmNwdV9hcmNoX3NldF9lbnRyeV9wb2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHZvaWQgKmd1ZXN0X2NvZGUpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uY1xuaW5kZXggMTQ0NWI4OTA5ODZmZC4uYjA1YmU1MGYwNzVkNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uY1xuQEAgLTEzLDkgJiM0MzsxMyw2IEBAXG4gXG4gI2RlZmluZSBTRVZfREVWX1BBVEggXCYjMzQ7L2Rldi9zZXZcJiMzNDtcbiBcbi1zdHJ1Y3QgZ3ByNjRfcmVncyBndWVzdF9yZWdzO1xuLXU2NCByZmxhZ3M7XG4tXG4gLyogQWxsb2NhdGUgbWVtb3J5IHJlZ2lvbnMgZm9yIG5lc3RlZCBTVk0gdGVzdHMuXG4gICpcbiAgKiBJbnB1dCBBcmdzOlxuQEAgLTEzNyw0NiAmIzQzOzEzNCw0NyBAQCB2b2lkIGdlbmVyaWNfc3ZtX3NldHVwKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0sIHZvaWQgKmd1ZXN0X3JpcClcbiAgKiBzYXZlL3Jlc3RvcmUgNjQtYml0IGdlbmVyYWwgcmVnaXN0ZXJzIGV4Y2VwdCByYXgsIHJpcCwgcnNwXG4gICogd2hpY2ggYXJlIGRpcmVjdGx5IGhhbmRlZCB0aHJvdWdoIHRoZSBWTUNCIGd1ZXN0IHByb2Nlc3NvciBzdGF0ZVxuICAqL1xuLSNkZWZpbmUgU0FWRV9HUFJfQ1x0XHRcdFx0XFxcbi1cdFwmIzM0O3hjaGcgJSVyYngsIGd1ZXN0X3JlZ3MmIzQzOzB4MjBcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcmN4LCBndWVzdF9yZWdzJiM0MzsweDEwXFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXJkeCwgZ3Vlc3RfcmVncyYjNDM7MHgxOFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyYnAsIGd1ZXN0X3JlZ3MmIzQzOzB4MzBcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcnNpLCBndWVzdF9yZWdzJiM0MzsweDM4XFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXJkaSwgZ3Vlc3RfcmVncyYjNDM7MHg0MFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyOCwgIGd1ZXN0X3JlZ3MmIzQzOzB4NDhcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcjksICBndWVzdF9yZWdzJiM0MzsweDUwXFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXIxMCwgZ3Vlc3RfcmVncyYjNDM7MHg1OFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyMTEsIGd1ZXN0X3JlZ3MmIzQzOzB4NjBcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcjEyLCBndWVzdF9yZWdzJiM0MzsweDY4XFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXIxMywgZ3Vlc3RfcmVncyYjNDM7MHg3MFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyMTQsIGd1ZXN0X3JlZ3MmIzQzOzB4NzhcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcjE1LCBndWVzdF9yZWdzJiM0MzsweDgwXFxuXFx0XCYjMzQ7XG4tXG4tI2RlZmluZSBMT0FEX0dQUl9DICAgICAgU0FWRV9HUFJfQ1xuJiM0MzsjZGVmaW5lIFNWTV9TV0lUQ0hfR1BSU19BU00gXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYngpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmN4KSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkeCkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYnApIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocnNpKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkaSkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOCkgIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjkpICBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMCkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTEpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjEyKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMykgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTQpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE1KVxuIFxuIC8qXG4gICogc2VsZnRlc3RzIGRvIG5vdCB1c2UgaW50ZXJydXB0cyBzbyB3ZSBkcm9wcGVkIGNsZ2kvc3RpL2NsaS9zdGdpXG4tICogZm9yIG5vdy4gcmVnaXN0ZXJzIGludm9sdmVkIGluIExPQUQvU0FWRV9HUFJfQyBhcmUgZXZlbnR1YWxseVxuJiM0MzsgKiBmb3Igbm93LiBSZWdpc3RlcnMgaW52b2x2ZWQgaW4gU1ZNX1NXSVRDSF9HUFJTX0FTTSBhcmUgZXZlbnR1YWxseVxuICAqIHVubW9kaWZpZWQgc28gdGhleSBkbyBub3QgbmVlZCB0byBiZSBpbiB0aGUgY2xvYmJlciBsaXN0LlxuICAqL1xuIHZvaWQgcnVuX2d1ZXN0KHN0cnVjdCB2bWNiICp2bWNiLCB1NjQgdm1jYl9ncGEpXG4ge1xuIFx0YXNtIHZvbGF0aWxlIChcbiBcdFx0XCYjMzQ7dm1sb2FkICVbdm1jYl9ncGFdXFxuXFx0XCYjMzQ7XG4tXHRcdFwmIzM0O21vdiByZmxhZ3MsICUlcjE1XFxuXFx0XCYjMzQ7XHQvLyByZmxhZ3Ncbi1cdFx0XCYjMzQ7bW92ICUlcjE1LCAweDE3MCglW3ZtY2JdKVxcblxcdFwmIzM0O1xuLVx0XHRcJiMzNDttb3YgZ3Vlc3RfcmVncywgJSVyMTVcXG5cXHRcJiMzNDtcdC8vIHJheFxuLVx0XHRcJiMzNDttb3YgJSVyMTUsIDB4MWY4KCVbdm1jYl0pXFxuXFx0XCYjMzQ7XG4tXHRcdExPQURfR1BSX0NcbiYjNDM7XHRcdFwmIzM0O21vdiBcJiMzNDsgR1VFU1RfUkVHKHJmbGFncykgXCYjMzQ7LCAlJXIxNVxcblxcdFwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7bW92ICUlcjE1LCAlW3ZtY2JfcmZsYWdzXVxcblxcdFwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7bW92IFwmIzM0OyBHVUVTVF9SRUcocmF4KSBcJiMzNDssICUlcjE1XFxuXFx0XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDttb3YgJSVyMTUsICVbdm1jYl9yYXhdXFxuXFx0XCYjMzQ7XG4mIzQzO1x0XHRTVk1fU1dJVENIX0dQUlNfQVNNXG4gXHRcdFwmIzM0O3ZtcnVuICVbdm1jYl9ncGFdXFxuXFx0XCYjMzQ7XG4tXHRcdFNBVkVfR1BSX0Ncbi1cdFx0XCYjMzQ7bW92IDB4MTcwKCVbdm1jYl0pLCAlJXIxNVxcblxcdFwmIzM0O1x0Ly8gcmZsYWdzXG4tXHRcdFwmIzM0O21vdiAlJXIxNSwgcmZsYWdzXFxuXFx0XCYjMzQ7XG4tXHRcdFwmIzM0O21vdiAweDFmOCglW3ZtY2JdKSwgJSVyMTVcXG5cXHRcJiMzNDtcdC8vIHJheFxuLVx0XHRcJiMzNDttb3YgJSVyMTUsIGd1ZXN0X3JlZ3NcXG5cXHRcJiMzNDtcbiYjNDM7XHRcdFNWTV9TV0lUQ0hfR1BSU19BU01cbiYjNDM7XHRcdFwmIzM0O21vdiAlW3ZtY2JfcmZsYWdzXSwgJSVyMTVcXG5cXHRcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O21vdiAlJXIxNSwgXCYjMzQ7IEdVRVNUX1JFRyhyZmxhZ3MpIFwmIzM0O1xcblxcdFwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7bW92ICVbdm1jYl9yYXhdLCAlJXIxNVxcblxcdFwmIzM0O1x0Ly8gcmF4XG4mIzQzO1x0XHRcJiMzNDttb3YgJSVyMTUsIFwmIzM0OyBHVUVTVF9SRUcocmF4KSBcJiMzNDtcXG5cXHRcJiMzNDtcbiBcdFx0XCYjMzQ7dm1zYXZlICVbdm1jYl9ncGFdXFxuXFx0XCYjMzQ7XG4tXHRcdDogOiBbdm1jYl0gXCYjMzQ7clwmIzM0OyAodm1jYiksIFt2bWNiX2dwYV0gXCYjMzQ7YVwmIzM0OyAodm1jYl9ncGEpXG4mIzQzO1x0XHQ6IFt2bWNiX3JmbGFnc10gXCYjMzQ7JiM0MzttXCYjMzQ7ICh2bWNiLVx1MDAzZXNhdmUucmZsYWdzKSxcbiYjNDM7XHRcdCAgW3ZtY2JfcmF4XSBcJiMzNDsmIzQzO21cJiMzNDsgKHZtY2ItXHUwMDNlc2F2ZS5yYXgpXG4mIzQzO1x0XHQ6IFt2bWNiX2dwYV0gXCYjMzQ7YVwmIzM0OyAodm1jYl9ncGEpLFxuJiM0MztcdFx0ICBHVUVTVF9SRUdTX09GRlNFVFNcbiBcdFx0OiBcJiMzNDtyMTVcJiMzNDssIFwmIzM0O21lbW9yeVwmIzM0Oyk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jXG5pbmRleCBlN2RkNTc5MTk1OWJhLi4zODA1MGM2MGEwNjcwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuY1xuQEAgLTEwLDM2ICYjNDM7MTAsOCBAQFxuIFxuIHZvaWQgdWNhbGxfYXJjaF9kb191Y2FsbChndmFfdCB1YylcbiB7XG4tXHQvKlxuLVx0ICogRklYTUU6IFJldmVydCB0aGlzIGhhY2sgKHRoZSBlbnRpcmUgY29tbWl0IHRoYXQgYWRkZWQgaXQpIG9uY2UgblZNWFxuLVx0ICogcHJlc2VydmVzIEwyIEdQUnMgYWNyb3NzIGEgbmVzdGVkIFZNLUV4aXQuICBJZiBhIHVjYWxsIGZyb20gTDIsIGUuZy5cbi1cdCAqIHRvIGRvIGEgR1VFU1RfU1lOQygpLCBsYW5kcyB0aGUgdkNQVSBpbiBMMSwgYW55IGFuZCBhbGwgR1BScyBjYW4gYmVcbi1cdCAqIGNsb2JiZXJlZCBieSBMMS4gIFNhdmUgYW5kIHJlc3RvcmUgbm9uLXZvbGF0aWxlIEdQUnMgKGNsb2JiZXJpbmcgUkJQXG4tXHQgKiBpbiBwYXJ0aWN1bGFyIGlzIHByb2JsZW1hdGljKSBhbG9uZyB3aXRoIFJEWCBhbmQgUkRJICh3aGljaCBhcmVcbi1cdCAqIGlucHV0cyksIGFuZCBjbG9iYmVyIHZvbGF0aWxlIEdQUnMuICpzaWdoKlxuLVx0ICovXG4tI2RlZmluZSBIT1JSSUZJQ19MMl9VQ0FMTF9DTE9CQkVSX0hBQ0tcdFxcXG4tXHRcJiMzNDtyY3hcJiMzNDssIFwmIzM0O3JzaVwmIzM0OywgXCYjMzQ7cjhcJiMzNDssIFwmIzM0O3I5XCYjMzQ7LCBcJiMzNDtyMTBcJiMzNDssIFwmIzM0O3IxMVwmIzM0O1xuLVxuLVx0YXNtIHZvbGF0aWxlKFwmIzM0O3B1c2ggJSVyYnBcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwdXNoICUlcjE1XFxuXFx0XCYjMzQ7XG4tXHRcdCAgICAgXCYjMzQ7cHVzaCAlJXIxNFxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3B1c2ggJSVyMTNcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwdXNoICUlcjEyXFxuXFx0XCYjMzQ7XG4tXHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJieFxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3B1c2ggJSVyZHhcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwdXNoICUlcmRpXFxuXFx0XCYjMzQ7XG4tXHRcdCAgICAgXCYjMzQ7aW4gJVtwb3J0XSwgJSVhbFxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3BvcCAlJXJkaVxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3BvcCAlJXJkeFxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3BvcCAlJXJieFxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3BvcCAlJXIxMlxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3BvcCAlJXIxM1xcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3BvcCAlJXIxNFxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3BvcCAlJXIxNVxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3BvcCAlJXJicFxcblxcdFwmIzM0O1xuLVx0XHQ6IDogW3BvcnRdIFwmIzM0O2RcJiMzNDsgKFVDQUxMX1BJT19QT1JUKSwgXCYjMzQ7RFwmIzM0OyAodWMpIDogXCYjMzQ7cmF4XCYjMzQ7LCBcJiMzNDttZW1vcnlcJiMzNDssXG4tXHRcdCAgICAgSE9SUklGSUNfTDJfVUNBTExfQ0xPQkJFUl9IQUNLKTtcbiYjNDM7XHRhc20gdm9sYXRpbGUoXCYjMzQ7aW4gJVtwb3J0XSwgJSVhbFwmIzM0O1xuJiM0MztcdFx0OiA6IFtwb3J0XSBcJiMzNDtkXCYjMzQ7IChVQ0FMTF9QSU9fUE9SVCksIFwmIzM0O0RcJiMzNDsgKHVjKSA6IFwmIzM0O3JheFwmIzM0OywgXCYjMzQ7bWVtb3J5XCYjMzQ7KTtcbiB9XG4gXG4gdm9pZCAqdWNhbGxfYXJjaF9nZXRfdWNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmNcbmluZGV4IGNkMDljOWRlNDQ4NWEuLjA4OWUxYThhZjUzZmMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni92bXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmNcbkBAIC0yMzIsNyAmIzQzOzIzMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3ZtY3NfY29udHJvbF9maWVsZHMoc3RydWN0IHZteF9wYWdlcyAqdm14KVxuIFxuIFx0dm13cml0ZShFWENFUFRJT05fQklUTUFQLCAwKTtcbiBcdHZtd3JpdGUoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BU0ssIDApO1xuLVx0dm13cml0ZShQQUdFX0ZBVUxUX0VSUk9SX0NPREVfTUFUQ0gsIC0xKTsgLyogTmV2ZXIgbWF0Y2ggKi9cbiYjNDM7XHR2bXdyaXRlKFBBR0VfRkFVTFRfRVJST1JfQ09ERV9NQVRDSCwgMCk7XG4gXHR2bXdyaXRlKENSM19UQVJHRVRfQ09VTlQsIDApO1xuIFx0dm13cml0ZShWTV9FWElUX0NPTlRST0xTLCByZG1zcihNU1JfSUEzMl9WTVhfRVhJVF9DVExTKSB8XG4gXHRcdFZNX0VYSVRfSE9TVF9BRERSX1NQQUNFX1NJWkUpO1x0ICAvKiA2NC1iaXQgaG9zdCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY1xuaW5kZXggNzdjZTg3YzQxYTg2OC4uYWE3ZjNiNDA1ZmQzMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jXG5AQCAtMjIsOSAmIzQzOzIyLDYgQEBcbiBcbiAjZGVmaW5lIFNZTkNfUE9SVFx0MHhlXG4gXG4tI2RlZmluZSBTVFIoeCkgI3hcbi0jZGVmaW5lIFhTVFIocykgU1RSKHMpXG4tXG4gLypcbiAgKiBTTUkgaGFuZGxlcjogcnVucyBpbiByZWFsLWFkZHJlc3MgbW9kZS5cbiAgKiBSZXBvcnRzIFNNUkFNX1NUQUdFIHZpYSBwb3J0IElPLCB0aGVuIGRvZXMgUlNNLlxuQEAgLTM3LDcgJiM0MzszNCw3IEBAIHN0YXRpYyB1OCBzbWlfaGFuZGxlcltdID0ge1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jX3dpdGhfaG9zdCh1NjQgcGhhc2UpXG4ge1xuLVx0YXNtIHZvbGF0aWxlKFwmIzM0O2luICRcJiMzNDsgWFNUUihTWU5DX1BPUlQpIFwmIzM0OywgJSVhbCBcXG5cJiMzNDtcbiYjNDM7XHRhc20gdm9sYXRpbGUoXCYjMzQ7aW4gJFwmIzM0OyBfX3N0cmluZ2lmeShTWU5DX1BPUlQpIFwmIzM0OywgJSVhbCBcXG5cJiMzNDtcbiBcdFx0ICAgICA6IFwmIzM0OyYjNDM7YVwmIzM0OyAocGhhc2UpKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9maXhfaHlwZXJjYWxsX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZml4X2h5cGVyY2FsbF90ZXN0LmNcbmluZGV4IDc1M2EwZTczMGVhOGQuLjQ5MzFlYzIyNzY4ZWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jXG5AQCAtNiw3ICYjNDM7Niw2IEBAXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wYXJhLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1fcGFyYS5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5naWZ5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2t2bV90ZXN0X2hhcm5lc3MuaFwmIzM0O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTA3MzkxYWIyYzkzMFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuY1xuQEAgLTAsMCAmIzQzOzEsMjg4IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZ2V0b3B0LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RfdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2t2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cHJvY2Vzc29yLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c3ZtX3V0aWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bXguaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBOUl9JVEVSQVRJT05TXHRcdDUwMFxuJiM0MztcbiYjNDM7I2RlZmluZSBQVFJTX1BFUl9QVEVcdFx0NTEyXG4mIzQzOyNkZWZpbmUgUFhEX0lOREVYKHZhZGRyLCBsZXZlbClcdCgoKHZhZGRyKSBcdTAwM2VcdTAwM2UgUEdfTEVWRUxfU0hJRlQobGV2ZWwpKSBcdTAwMjYgKFBUUlNfUEVSX1BURSAtIDEpKVxuJiM0MztcbiYjNDM7I2RlZmluZSBURVNUX01FTV9CQVNFX0dWQVx0MHhjMDAwMDAwMFVMTFxuJiM0MzsjZGVmaW5lIFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUXHQweGQwMDAwMDAwVUxMXG4mIzQzOyNkZWZpbmUgUEFUVEVSTlx0XHRcdDB4YWJjZGVmYWJjZGVmYWJjZFVMTFxuJiM0MztcbiYjNDM7c3RhdGljIHU2NCBleHBlY3RlZF92YWRkcjtcbiYjNDM7c3RhdGljIHU2NCBndWVzdF9mYXVsdHM7XG4mIzQzO1xuJiM0MztzdGF0aWMgdTY0ICpndWVzdF9nZXRfcHRlKHU2NCB2YWRkcilcbiYjNDM7e1xuJiM0MztcdHU2NCBwZ3RhYmxlX3BhLCBwdGU7XG4mIzQzO1x0dTY0ICpwZ3RhYmxlO1xuJiM0MztcdGludCBsZXZlbDtcbiYjNDM7XG4mIzQzO1x0bGV2ZWwgPSAoZ2V0X2NyNCgpIFx1MDAyNiBYODZfQ1I0X0xBNTcpID8gUEdfTEVWRUxfMjU2VCA6IFBHX0xFVkVMXzUxMkc7XG4mIzQzO1xuJiM0MztcdHBndGFibGVfcGEgPSBnZXRfY3IzKCkgXHUwMDI2IFBIWVNJQ0FMX1BBR0VfTUFTSztcbiYjNDM7XHRmb3IgKDsgbGV2ZWwgXHUwMDNlIFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7XG4mIzQzO1x0XHRwZ3RhYmxlID0gKHU2NCAqKShwZ3RhYmxlX3BhICYjNDM7IFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUKTtcbiYjNDM7XHRcdHB0ZSA9IHBndGFibGVbUFhEX0lOREVYKHZhZGRyLCBsZXZlbCldO1xuJiM0MztcdFx0R1VFU1RfQVNTRVJUKHB0ZSBcdTAwMjYgUFRFX1BSRVNFTlRfTUFTSyhcdTAwMjZndWVzdF9tbXUpKTtcbiYjNDM7XHRcdEdVRVNUX0FTU0VSVCghKHB0ZSBcdTAwMjYgUFRFX0hVR0VfTUFTSyhcdTAwMjZndWVzdF9tbXUpKSk7XG4mIzQzO1x0XHRwZ3RhYmxlX3BhID0gUFRFX0dFVF9QQShwdGUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGd0YWJsZSA9ICh1NjQgKikocGd0YWJsZV9wYSAmIzQzOyBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVCk7XG4mIzQzO1x0cmV0dXJuIFx1MDAyNnBndGFibGVbUFhEX0lOREVYKHZhZGRyLCBQR19MRVZFTF80SyldO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBndWVzdF9wZl9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IGZhdWx0X2FkZHI7XG4mIzQzO1x0dTY0ICpwdGVwO1xuJiM0MztcbiYjNDM7XHRmYXVsdF9hZGRyID0gZ2V0X2NyMigpO1xuJiM0MztcdEdVRVNUX0FTU0VSVF9FUShmYXVsdF9hZGRyLCBSRUFEX09OQ0UoZXhwZWN0ZWRfdmFkZHIpKTtcbiYjNDM7XG4mIzQzO1x0cHRlcCA9IGd1ZXN0X2dldF9wdGUoZmF1bHRfYWRkcik7XG4mIzQzO1x0R1VFU1RfQVNTRVJUKHB0ZXApO1xuJiM0MztcdEdVRVNUX0FTU0VSVCghKCpwdGVwIFx1MDAyNiBQVEVfUFJFU0VOVF9NQVNLKFx1MDAyNmd1ZXN0X21tdSkpKTtcbiYjNDM7XG4mIzQzO1x0KnB0ZXAgfD0gUFRFX1BSRVNFTlRfTUFTSyhcdTAwMjZndWVzdF9tbXUpO1xuJiM0MztcdGd1ZXN0X2ZhdWx0cyYjNDM7JiM0Mzs7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2FjY2Vzc19tZW1vcnkodm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHZhZGRyLCB2YWw7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHZhZGRyID0gVEVTVF9NRU1fQkFTRV9HVkEgJiM0MzsgKGkgJSBQVFJTX1BFUl9QVEUpICogUEFHRV9TSVpFO1xuJiM0MztcdFx0V1JJVEVfT05DRShleHBlY3RlZF92YWRkciwgdmFkZHIpO1xuJiM0MztcbiYjNDM7XHRcdC8qIFJlYWQgdG8gdHJpZ2dlciAjUEYgKi9cbiYjNDM7XHRcdHZhbCA9IFJFQURfT05DRSgqKHU2NCAqKXZhZGRyKTtcbiYjNDM7XHRcdEdVRVNUX0FTU0VSVF9FUSh2YWwsIFBBVFRFUk4pO1xuJiM0MztcbiYjNDM7XHRcdC8qIENsZWFyIHRoZSBwcmVzZW50IGJpdCBhZ2FpbiBzbyBpdCBmYXVsdHMgbmV4dCB0aW1lICovXG4mIzQzO1x0XHQqZ3Vlc3RfZ2V0X3B0ZSh2YWRkcikgXHUwMDI2PSB+UFRFX1BSRVNFTlRfTUFTSyhcdTAwMjZndWVzdF9tbXUpO1xuJiM0MztcdFx0aW52bHBnKHZhZGRyKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGwxX3N2bV9jb2RlKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0pXG4mIzQzO3tcbiYjNDM7XHRnZW5lcmljX3N2bV9zZXR1cChzdm0sIGd1ZXN0X2FjY2Vzc19tZW1vcnkpO1xuJiM0MztcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgfD0gQklUKFVEX1ZFQ1RPUik7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgxKSB7XG4mIzQzO1x0XHRydW5fZ3Vlc3Qoc3ZtLVx1MDAzZXZtY2IsIHN2bS1cdTAwM2V2bWNiX2dwYSk7XG4mIzQzO1x0XHRHVUVTVF9BU1NFUlRfRVEoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5leGl0X2NvZGUsXG4mIzQzO1x0XHRcdFx0KFNWTV9FWElUX0VYQ1BfQkFTRSAmIzQzOyBVRF9WRUNUT1IpKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGwxX3ZteF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteClcbiYjNDM7e1xuJiM0MztcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpO1xuJiM0MztcdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7XG4mIzQzO1x0cHJlcGFyZV92bWNzKHZteCwgZ3Vlc3RfYWNjZXNzX21lbW9yeSk7XG4mIzQzO1xuJiM0MztcdEdVRVNUX0FTU0VSVCghdm13cml0ZShFWENFUFRJT05fQklUTUFQLCBCSVQoVURfVkVDVE9SKSkpO1xuJiM0MztcbiYjNDM7XHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuJiM0MztcdHdoaWxlICgxKSB7XG4mIzQzO1x0XHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpO1xuJiM0MztcdFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pIFx1MDAyNiAweGZmLCBVRF9WRUNUT1IpO1xuJiM0MztcdFx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqdGVzdF9kYXRhKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKVxuJiM0MztcdFx0bDFfc3ZtX2NvZGUodGVzdF9kYXRhKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRsMV92bXhfY29kZSh0ZXN0X2RhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqc2lndXNyX3RocmVhZF9mbih2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHRwdGhyZWFkX3QgdmNwdV90aHJlYWQgPSAocHRocmVhZF90KWFyZztcbiYjNDM7XG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0cHRocmVhZF90ZXN0Y2FuY2VsKCk7XG4mIzQzO1x0XHRwdGhyZWFkX2tpbGwodmNwdV90aHJlYWQsIFNJR1VTUjEpO1xuJiM0MztcdFx0dXNsZWVwKG1zZWNzX3RvX3VzZWNzKDEpKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGR1bW15X3NpZ25hbF9oYW5kbGVyKGludCBzaWdubykge31cbiYjNDM7c3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gc2E7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2Y3B1X3NpZ3Vzcl9saXN0ZW4odm9pZClcbiYjNDM7e1xuJiM0MztcdHNhLnNhX2hhbmRsZXIgPSBkdW1teV9zaWduYWxfaGFuZGxlcjtcbiYjNDM7XHRzaWdhY3Rpb24oU0lHVVNSMSwgXHUwMDI2c2EsIE5VTEwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2Y3B1X3NpZ3Vzcl9pZ25vcmUodm9pZClcbiYjNDM7e1xuJiM0MztcdHNhLnNhX2hhbmRsZXIgPSBTSUdfSUdOO1xuJiM0MztcdHNpZ2FjdGlvbihTSUdVU1IxLCBcdTAwMjZzYSwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGt2bV94ODZfc3RhdGVfcXVldWVfdWQoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24ucGVuZGluZyB8fCBzdGF0ZS1cdTAwM2VldmVudHMuZXhjZXB0aW9uLmluamVjdGVkKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzdGF0ZS1cdTAwM2VldmVudHMuZmxhZ3MgfD0gS1ZNX1ZDUFVFVkVOVF9WQUxJRF9QQVlMT0FEO1xuJiM0MztcdHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24ucGVuZGluZyA9IHRydWU7XG4mIzQzO1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5pbmplY3RlZCA9IGZhbHNlO1xuJiM0MztcdHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24ubnIgPSBVRF9WRUNUT1I7XG4mIzQzO1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5oYXNfZXJyb3JfY29kZSA9IGZhbHNlO1xuJiM0MztcdHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb25faGFzX3BheWxvYWQgPSBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnVuX3Rlc3QoYm9vbCBuZXN0ZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGU7XG4mIzQzO1x0aW50IHIsIGksIGxldmVsO1xuJiM0MztcdHB0aHJlYWRfdCBzaWd1c3JfdGhyZWFkO1xuJiM0MztcdGdwYV90IGdwYSwgcGd0YWJsZV9ncGE7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuJiM0MztcdHN0cnVjdCBrdm1fdm0gKnZtO1xuJiM0MztcdHN0cnVjdCB1Y2FsbCB1YztcbiYjNDM7XHR1NjQgKnBndGFibGU7XG4mIzQzO1x0Z3ZhX3QgZ3ZhO1xuJiM0MztcdHU2NCBwdGU7XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgbmVzdGVkID8gbDFfZ3Vlc3RfY29kZSA6IGd1ZXN0X2FjY2Vzc19tZW1vcnkpO1xuJiM0MztcdHZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIodm0sIFBGX1ZFQ1RPUiwgZ3Vlc3RfcGZfaGFuZGxlcik7XG4mIzQzO1xuJiM0MztcdGlmIChuZXN0ZWQpIHtcbiYjNDM7XHRcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVhDRVBUSU9OX1BBWUxPQUQsIC0ydWwpO1xuJiM0MztcdFx0aWYgKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkpXG4mIzQzO1x0XHRcdHZjcHVfYWxsb2Nfc3ZtKHZtLCBcdTAwMjZndmEpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHR2Y3B1X2FsbG9jX3ZteCh2bSwgXHUwMDI2Z3ZhKTtcbiYjNDM7XHRcdHZjcHVfYXJnc19zZXQodmNwdSwgMSwgZ3ZhKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFsbG9jYXRlIGEgcGFnZSBhbmQgd3JpdGUgdGhlIHBhdHRlcm4gdG8gaXQgKi9cbiYjNDM7XHRndmEgPSB2bV9hbGxvY19wYWdlKHZtKTtcbiYjNDM7XHQqKHU2NCAqKWFkZHJfZ3ZhMmh2YSh2bSwgZ3ZhKSA9IFBBVFRFUk47XG4mIzQzO1x0Z3BhID0gYWRkcl9ndmEyZ3BhKHZtLCBndmEpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1hcCBhbGwgdmlydHVhbCBhZGRyZXNzZXMgdG8gdGhlIHBhdHRlcm4gcGFnZSBhbmQgY2xlYXIgdGhlIHByZXNlbnRcbiYjNDM7XHQgKiBiaXQgc3VjaCB0aGF0IGd1ZXN0IGFjY2Vzc2VzIHdpbGwgY2F1c2UgYSAjUEYuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUFRSU19QRVJfUFRFOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Z3ZhID0gVEVTVF9NRU1fQkFTRV9HVkEgJiM0MzsgaSAqIGdldHBhZ2VzaXplKCk7XG4mIzQzO1x0XHR2aXJ0X3BnX21hcCh2bSwgZ3ZhLCBncGEpO1xuJiM0MztcdFx0KnZtX2dldF9wdGUodm0sIGd2YSkgXHUwMDI2PSB+UFRFX1BSRVNFTlRfTUFTSyhcdTAwMjZ2bS1cdTAwM2VtbXUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBOb3cgY3JlYXRlIG1hcHBpbmdzIGZvciB0aGUgcGFnZSB0YWJsZXMgY3JlYXRlZCBhYm92ZSBzbyB0aGF0IHRoZVxuJiM0MztcdCAqIGd1ZXN0ICNQRiBoYW5kbGVyIGNhbiB3YWxrIHRoZW0uIEFsbCBQVEVzIGZvciB0ZXN0IHZpcnR1YWwgYWRkcmVzc2VzXG4mIzQzO1x0ICogc2hvdWxkIGxpZSBvbiB0aGUgc2FtZSBQVEUgcGFnZSwgc28gb25lIHBhZ2UgaXMgbWFwcGVkIGZvciBlYWNoIHBhZ2VcbiYjNDM7XHQgKiB0YWJsZSBsZXZlbC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFVzZSBhbiBvZmZzZXQgZm9yIHRoZSBHVkEgaW5zdGVhZCBvZiBjcmVhdGluZyBpZGVudGl0eSBtYXBwaW5ncyB0b1xuJiM0MztcdCAqIGF2b2lkIGNvbGxpc2lvbiB3aXRoIGV4aXN0aW5nIG1hcHBpbmdzIGF0IGxvdyBHVkFzIChlLmcuIEVMRikuXG4mIzQzO1x0ICovXG4mIzQzO1x0cGd0YWJsZV9ncGEgPSB2bS1cdTAwM2VtbXUucGdkO1xuJiM0MztcdGZvciAobGV2ZWwgPSB2bS1cdTAwM2VtbXUucGd0YWJsZV9sZXZlbHM7IGxldmVsIFx1MDAzZT0gUEdfTEVWRUxfNEs7IGxldmVsLS0pIHtcbiYjNDM7XHRcdHZpcnRfbWFwKHZtLCBwZ3RhYmxlX2dwYSAmIzQzOyBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVCwgcGd0YWJsZV9ncGEsIDEpO1xuJiM0MztcdFx0cGd0YWJsZSA9IGFkZHJfZ3BhMmh2YSh2bSwgcGd0YWJsZV9ncGEpO1xuJiM0MztcdFx0cHRlID0gcGd0YWJsZVtQWERfSU5ERVgoVEVTVF9NRU1fQkFTRV9HVkEsIGxldmVsKV07XG4mIzQzO1x0XHRwZ3RhYmxlX2dwYSA9IFBURV9HRVRfUEEocHRlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEluaXRpYWxpemUgdGhlIHRocmVhZCBzZW5kaW5nIFNJR1VTUiBhbmQgaW5zdGFsbCB0aGUgaGFuZGxlciAqL1xuJiM0MztcdHZjcHVfc2lndXNyX2lnbm9yZSgpO1xuJiM0MztcdHIgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZzaWd1c3JfdGhyZWFkLCBOVUxMLCBzaWd1c3JfdGhyZWFkX2ZuLFxuJiM0MztcdFx0XHQgICAodm9pZCAqKXB0aHJlYWRfc2VsZigpKTtcbiYjNDM7XHRURVNUX0FTU0VSVCghciwgXCYjMzQ7cHRocmVhZF9jcmVhdGUoKSBmYWlsZWQ6ICVkXCYjMzQ7LCByKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMTsgaSBcdTAwM2M9IE5SX0lURVJBVElPTlM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogT25seSBoYW5kbGUgU0lHVVNSIHdoaWxlIHRoZSB2Q1BVIGlzIHJ1bm5pbmcsIG90aGVyd2lzZVxuJiM0MztcdFx0ICogaWdub3JlIGl0IHRvIGF2b2lkIGludGVycnVwdGluZyBvdGhlciBpb2N0bHMvc3lzY2FsbHMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHZjcHVfc2lndXNyX2xpc3RlbigpO1xuJiM0MztcdFx0ciA9IF9fdmNwdV9ydW4odmNwdSk7XG4mIzQzO1x0XHRURVNUX0FTU0VSVCghciB8fCBlcnJubyA9PSBFSU5UUiwgXCYjMzQ7RXhwZWN0ZWQgc3VjY2VzcyBvciBTSUdVU1IxXCYjMzQ7KTtcbiYjNDM7XHRcdHZjcHVfc2lndXNyX2lnbm9yZSgpO1xuJiM0MztcbiYjNDM7XHRcdC8qIFRoZSBndWVzdCBvbmx5IGV4aXRzIGR1ZSB0byBhIHNpZ25hbCBvciBmYWlsZWQgYXNzZXJ0aW9uICovXG4mIzQzO1x0XHRpZiAoIXIpIHtcbiYjNDM7XHRcdFx0VEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX0lPKTtcbiYjNDM7XHRcdFx0VEVTVF9BU1NFUlRfRVEoZ2V0X3VjYWxsKHZjcHUsIFx1MDAyNnVjKSwgVUNBTExfQUJPUlQpO1xuJiM0MztcdFx0XHRSRVBPUlRfR1VFU1RfQVNTRVJUKHVjKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0c3RhdGUgPSB2Y3B1X3NhdmVfc3RhdGUodmNwdSk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIElmIHRoZSB2Q1BVIGlzIGluIGd1ZXN0IG1vZGUsIGluamVjdCBhICNVRCB0byB0cmlnZ2VyIGFuXG4mIzQzO1x0XHQgKiBMMi1cdTAwM2VMMSBWTS1FeGl0IGV2ZXJ5IG90aGVyIGl0ZXJhdGlvbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGt2bV94ODZfc3RhdGVfaXNfZ3Vlc3RfbW9kZShzdGF0ZSkgXHUwMDI2XHUwMDI2IGkgJSAyID09IDApXG4mIzQzO1x0XHRcdGt2bV94ODZfc3RhdGVfcXVldWVfdWQoc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRcdGt2bV92bV9yZWxlYXNlKHZtKTtcbiYjNDM7XHRcdHZjcHUgPSB2bV9yZWNyZWF0ZV93aXRoX29uZV92Y3B1KHZtKTtcbiYjNDM7XHRcdGlmIChuZXN0ZWQpXG4mIzQzO1x0XHRcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVhDRVBUSU9OX1BBWUxPQUQsIC0ydWwpO1xuJiM0MztcdFx0dmNwdV9sb2FkX3N0YXRlKHZjcHUsIHN0YXRlKTtcbiYjNDM7XHRcdGt2bV94ODZfc3RhdGVfY2xlYW51cChzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdFx0cHJfaW5mbyhcJiMzNDtcXHJTYXZlJiM0MztyZXN0b3JlIGl0ZXJhdGlvbnM6ICVkXCYjMzQ7LCBpKTtcbiYjNDM7XHR9XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzeW5jX2dsb2JhbF9mcm9tX2d1ZXN0KHZtLCBndWVzdF9mYXVsdHMpO1xuJiM0MztcdFRFU1RfQVNTRVJUKGd1ZXN0X2ZhdWx0cywgXCYjMzQ7Tm8gZ3Vlc3QgcGFnZSBmYXVsdHMgdHJpZ2dlcmVkXCYjMzQ7KTtcbiYjNDM7XHRwcl9pbmZvKFwmIzM0O0d1ZXN0IHBhZ2UgZmF1bHRzJXM6ICVsdVxcblwmIzM0OywgbmVzdGVkID8gXCYjMzQ7IChpbiBMMilcJiMzNDsgOiBcJiMzNDtcJiMzNDssIGd1ZXN0X2ZhdWx0cyk7XG4mIzQzO1xuJiM0MztcdHB0aHJlYWRfY2FuY2VsKHNpZ3Vzcl90aHJlYWQpO1xuJiM0MztcdHB0aHJlYWRfam9pbihzaWd1c3JfdGhyZWFkLCBOVUxMKTtcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4mIzQzO3tcbiYjNDM7XHRwcl9pbmZvKFwmIzM0O1J1bm5pbmcgc2F2ZSYjNDM7cmVzdG9yZSBzdHJlc3MgdGVzdC4uLlxcblwmIzM0Oyk7XG4mIzQzO1x0cnVuX3Rlc3QoLypuZXN0ZWQ9Ki9mYWxzZSk7XG4mIzQzO1xuJiM0MztcdGlmICgha3ZtX2hhc19jYXAoS1ZNX0NBUF9FWENFUFRJT05fUEFZTE9BRCkgfHxcbiYjNDM7XHQgICAgIWt2bV9oYXNfY2FwKEtWTV9DQVBfTkVTVEVEX1NUQVRFKSB8fFxuJiM0MztcdCAgICAoIWt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkgXHUwMDI2XHUwMDI2ICFrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKSkge1xuJiM0MztcdFx0cHJfaW5mbyhcJiMzNDtOZXN0ZWQgdmlydHVhbGl6YXRpb24gbm90IHN1cHBvcnRlZCwgc2tpcHBpbmcgbmVzdGVkIHRlc3RcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwcl9pbmZvKFwmIzM0O1J1bm5pbmcgc2F2ZSYjNDM7cmVzdG9yZSBzdHJlc3MgdGVzdCB3aXRoIGEgbmVzdGVkIGd1ZXN0Li4uXFxuXCYjMzQ7KTtcbiYjNDM7XHRydW5fdGVzdCgvKm5lc3RlZD0qL3RydWUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXG5pbmRleCBlMjU0MmY0Y2VkNjA1Li5kMWVkYWZkNWFmNzU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmNcbkBAIC0yMiw5ICYjNDM7MjIsNiBAQFxuICNkZWZpbmUgU01SQU1fR1BBIDB4MTAwMDAwMFxuICNkZWZpbmUgU01SQU1fU1RBR0UgMHhmZVxuIFxuLSNkZWZpbmUgU1RSKHgpICN4XG4tI2RlZmluZSBYU1RSKHMpIFNUUihzKVxuLVxuICNkZWZpbmUgU1lOQ19QT1JUIDB4ZVxuICNkZWZpbmUgRE9ORSAweGZmXG4gXG5AQCAtNDIsNyAmIzQzOzM5LDcgQEAgdTggc21pX2hhbmRsZXJbXSA9IHtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc3luY193aXRoX2hvc3QodTY0IHBoYXNlKVxuIHtcbi1cdGFzbSB2b2xhdGlsZShcJiMzNDtpbiAkXCYjMzQ7IFhTVFIoU1lOQ19QT1JUKVwmIzM0OywgJSVhbCBcXG5cJiMzNDtcbiYjNDM7XHRhc20gdm9sYXRpbGUoXCYjMzQ7aW4gJFwmIzM0OyBfX3N0cmluZ2lmeShTWU5DX1BPUlQpXCYjMzQ7LCAlJWFsIFxcblwmIzM0O1xuIFx0XHQgICAgIDogXCYjMzQ7JiM0MzthXCYjMzQ7IChwaGFzZSkpO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMToyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8sIHdoaWNoIGFyZSB1c2VyLXNwYWNlIHRlc3RpbmcgcHJvZ3JhbXMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRkM2U1YjQ2YWE1NTVlMmNkODZiMGNjNTBhZDViMWFlMDI5NDEwNzQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAwMToyMzowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCmluZGV4IDg4YzZjODA0NmRkZWMuLmQ5NGY1NmM2MzBmZDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQpAQCAtMTA3LDYgJiM0MzsxMDcsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9wbXVfY291bnRlcnNfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvcG11X2V2ZW50X2ZpbHRlcl90ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdAomIzQzO1RFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvc2V0X2Jvb3RfY3B1X2lkCiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zZXRfc3JlZ3NfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oCmluZGV4IGQ2NGM4YTIyODIwN2EuLmU4MzU2ZWU1NGQ3YjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oCkBAIC0yMyw2ICYjNDM7MjMsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvbW1hbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZ2lmeS5oJmd0OwogCiAjZGVmaW5lIG1zZWNzX3RvX3VzZWNzKG1zZWMpICAgICgobXNlYykgKiAxMDAwVUxMKQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oCmluZGV4IGJlNzliZGEwMjRiZjEuLjgyYThlYTZiNjYxZjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oCkBAIC0xMjA3LDMwICYjNDM7MTIwNywyMyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1jc192bWxhdW5jaCh2b2lkKQogCiAJY3VycmVudF9ldm1jcy0mZ3Q7aHZfY2xlYW5fZmllbGRzID0gMDsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKCYjMzQ7cHVzaCAlJXJicDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyY3g7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcmR4OyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJzaTsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyZGk7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICQwOyYjMzQ7CiYjNDM7CV9fYXNtX18gX192b2xhdGlsZV9fKCYjMzQ7cHVzaCAkMDsmIzM0OwogCQkJICAgICAmIzM0O21vdiAlJXJzcCwgKCVbaG9zdF9yc3BdKTsmIzM0OwogCQkJICAgICAmIzM0O2xlYSAxZiglJXJpcCksICUlcmF4OyYjMzQ7CiAJCQkgICAgICYjMzQ7bW92ICUlcmF4LCAoJVtob3N0X3JpcF0pOyYjMzQ7CiYjNDM7CQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCiAJCQkgICAgICYjMzQ7dm1sYXVuY2g7JiMzNDsKIAkJCSAgICAgJiMzNDtpbmNxICglJXJzcCk7JiMzNDsKLQkJCSAgICAgJiMzNDsxOiBwb3AgJSVyYXg7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyZGk7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyc2k7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyZHg7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyY3g7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyYnA7JiMzNDsKJiM0MzsJCQkgICAgICYjMzQ7MTogOyYjMzQ7CiYjNDM7CQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCiYjNDM7CQkJICAgICAmIzM0O3BvcCAlJXJheDsmIzM0OwogCQkJICAgICA6IFtyZXRdJiMzNDs9JmFtcDthJiMzNDsocmV0KQogCQkJICAgICA6IFtob3N0X3JzcF0mIzM0O3ImIzM0OwogCQkJICAgICAgICgodTY0KSZhbXA7Y3VycmVudF9ldm1jcy0mZ3Q7aG9zdF9yc3ApLAogCQkJICAgICAgIFtob3N0X3JpcF0mIzM0O3ImIzM0OwotCQkJICAgICAgICgodTY0KSZhbXA7Y3VycmVudF9ldm1jcy0mZ3Q7aG9zdF9yaXApCi0JCQkgICAgIDogJiMzNDttZW1vcnkmIzM0OywgJiMzNDtjYyYjMzQ7LCAmIzM0O3JieCYjMzQ7LCAmIzM0O3I4JiMzNDssICYjMzQ7cjkmIzM0OywgJiMzNDtyMTAmIzM0OywKLQkJCSAgICAgICAmIzM0O3IxMSYjMzQ7LCAmIzM0O3IxMiYjMzQ7LCAmIzM0O3IxMyYjMzQ7LCAmIzM0O3IxNCYjMzQ7LCAmIzM0O3IxNSYjMzQ7KTsKJiM0MzsJCQkgICAgICAgKCh1NjQpJmFtcDtjdXJyZW50X2V2bWNzLSZndDtob3N0X3JpcCksCiYjNDM7CQkJICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUUwomIzQzOwkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEyNDYsMzAgJiM0MzsxMjM5LDIzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtcmVzdW1lKHZvaWQpCiAJLyogSE9TVF9SU1AgKi8KIAljdXJyZW50X2V2bWNzLSZndDtodl9jbGVhbl9maWVsZHMgJmFtcDs9IH5IVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfSE9TVF9QT0lOVEVSOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICUlcmJwOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyZHg7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcnNpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJDA7JiMzNDsKJiM0MzsJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICQwOyYjMzQ7CiAJCQkgICAgICYjMzQ7bW92ICUlcnNwLCAoJVtob3N0X3JzcF0pOyYjMzQ7CiAJCQkgICAgICYjMzQ7bGVhIDFmKCUlcmlwKSwgJSVyYXg7JiMzNDsKIAkJCSAgICAgJiMzNDttb3YgJSVyYXgsICglW2hvc3RfcmlwXSk7JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KIAkJCSAgICAgJiMzNDt2bXJlc3VtZTsmIzM0OwogCQkJICAgICAmIzM0O2luY3EgKCUlcnNwKTsmIzM0OwotCQkJICAgICAmIzM0OzE6IHBvcCAlJXJheDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJzaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJicDsmIzM0OwomIzQzOwkJCSAgICAgJiMzNDsxOiA7JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KJiM0MzsJCQkgICAgICYjMzQ7cG9wICUlcmF4OyYjMzQ7CiAJCQkgICAgIDogW3JldF0mIzM0Oz0mYW1wO2EmIzM0OyhyZXQpCiAJCQkgICAgIDogW2hvc3RfcnNwXSYjMzQ7ciYjMzQ7CiAJCQkgICAgICAgKCh1NjQpJmFtcDtjdXJyZW50X2V2bWNzLSZndDtob3N0X3JzcCksCiAJCQkgICAgICAgW2hvc3RfcmlwXSYjMzQ7ciYjMzQ7Ci0JCQkgICAgICAgKCh1NjQpJmFtcDtjdXJyZW50X2V2bWNzLSZndDtob3N0X3JpcCkKLQkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDssICYjMzQ7cmJ4JiMzNDssICYjMzQ7cjgmIzM0OywgJiMzNDtyOSYjMzQ7LCAmIzM0O3IxMCYjMzQ7LAotCQkJICAgICAgICYjMzQ7cjExJiMzNDssICYjMzQ7cjEyJiMzNDssICYjMzQ7cjEzJiMzNDssICYjMzQ7cjE0JiMzNDssICYjMzQ7cjE1JiMzNDspOwomIzQzOwkJCSAgICAgICAoKHU2NCkmYW1wO2N1cnJlbnRfZXZtY3MtJmd0O2hvc3RfcmlwKSwKJiM0MzsJCQkgICAgICAgR1VFU1RfUkVHU19PRkZTRVRTCiYjNDM7CQkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDssICYjMzQ7Y2MmIzM0Oyk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oCmluZGV4IGIxNjExNzRlY2U0NTMuLjZlNmY3MDAzNTUwOGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmgKQEAgLTI0LDYgJiM0MzsyNCw3IEBAIGV4dGVybiBib29sIGhvc3RfY3B1X2lzX2FtZDsKIGV4dGVybiBib29sIGhvc3RfY3B1X2lzX2h5Z29uOwogZXh0ZXJuIGJvb2wgaG9zdF9jcHVfaXNfYW1kX2NvbXBhdGlibGU7CiBleHRlcm4gdTY0IGd1ZXN0X3RzY19raHo7CiYjNDM7ZXh0ZXJuIHN0cnVjdCBrdm1fbW11IGd1ZXN0X21tdTsKIAogI2lmbmRlZiBNQVhfTlJfQ1BVSURfRU5UUklFUwogI2RlZmluZSBNQVhfTlJfQ1BVSURfRU5UUklFUyAxMDAKQEAgLTM5OCw4ICYjNDM7Mzk5LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgeDg2X21vZGVsKHVuc2lnbmVkIGludCBlYXgpCiAjZGVmaW5lIFBURV9HRVRfUEEocHRlKQkJKChwdGUpICZhbXA7IFBIWVNJQ0FMX1BBR0VfTUFTSykKICNkZWZpbmUgUFRFX0dFVF9QRk4ocHRlKSAgICAgICAgKFBURV9HRVRfUEEocHRlKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKQogCi0vKiBHZW5lcmFsIFJlZ2lzdGVycyBpbiA2NC1CaXQgTW9kZSAqLwotc3RydWN0IGdwcjY0X3JlZ3MgewomIzQzO3N0cnVjdCBndWVzdF9yZWdzIHsKIAl1NjQgcmF4OwogCXU2NCByY3g7CiAJdTY0IHJkeDsKQEAgLTQxNiw4ICYjNDM7NDE2LDM4IEBAIHN0cnVjdCBncHI2NF9yZWdzIHsKIAl1NjQgcjEzOwogCXU2NCByMTQ7CiAJdTY0IHIxNTsKJiM0MzsJdTY0IHJmbGFnczsKIH07CiAKJiM0MztleHRlcm4gc3RydWN0IGd1ZXN0X3JlZ3MgZ3Vlc3RfcmVnczsKJiM0MzsKJiM0MzsjZGVmaW5lIEdVRVNUX1JFR19PRkZTRVQobmFtZSkgXAomIzQzOwlbb2ZmXyMjbmFtZV0gJiMzNDtpJiMzNDsgKG9mZnNldG9mKHN0cnVjdCBndWVzdF9yZWdzLCBuYW1lKSkKJiM0MzsKJiM0MzsjZGVmaW5lIEdVRVNUX1JFR1NfT0ZGU0VUUwlcCiYjNDM7CUdVRVNUX1JFR19PRkZTRVQocmF4KSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHJjeCksCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyZHgpLAlcCiYjNDM7CUdVRVNUX1JFR19PRkZTRVQocmJ4KSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHJzcCksCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyYnApLAlcCiYjNDM7CUdVRVNUX1JFR19PRkZTRVQocnNpKSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHJkaSksCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyOCksCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyOSksCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyMTApLAlcCiYjNDM7CUdVRVNUX1JFR19PRkZTRVQocjExKSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHIxMiksCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyMTMpLAlcCiYjNDM7CUdVRVNUX1JFR19PRkZTRVQocjE0KSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHIxNSksCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyZmxhZ3MpCiYjNDM7CiYjNDM7I2RlZmluZSBHVUVTVF9SRUcobmFtZSkgJiMzNDtndWVzdF9yZWdzICYjNDM7ICVjW29mZl8mIzM0OyAjbmFtZSAmIzM0O10mIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgR1VFU1RfU1dJVENIX0dQUl9BU00obmFtZSkgXAomIzQzOwkmIzM0O3hjaGcgJSUmIzM0OyAjbmFtZSAmIzM0OywgJiMzNDsgR1VFU1RfUkVHKG5hbWUpICYjMzQ7XG5cdCYjMzQ7CiYjNDM7CiBzdHJ1Y3QgZGVzYzY0IHsKIAl1MTYgbGltaXQwOwogCXUxNiBiYXNlMDsKQEAgLTU4NCw2ICYjNDM7NjE0LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY3IwKHU2NCB2YWwpCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDttb3YgJTAsICUlY3IwJiMzNDsgOiA6ICYjMzQ7ciYjMzQ7ICh2YWwpIDogJiMzNDttZW1vcnkmIzM0Oyk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHU2NCBnZXRfY3IyKHZvaWQpCiYjNDM7ewomIzQzOwl1NjQgY3IyOwomIzQzOwomIzQzOwlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O21vdiAlJWNyMiwgJVtjcjJdJiMzNDsgOiBbY3IyXSYjMzQ7PXImIzM0OyhjcjIpKTsKJiM0MzsJcmV0dXJuIGNyMjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHU2NCBnZXRfY3IzKHZvaWQpCiB7CiAJdTY0IGNyMzsKQEAgLTg3OSw2ICYjNDM7OTE3LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9zc2VfcmVnKGludCByZWcsIGNvbnN0IHNzZTEyOF90ICpkYXRhKQogCX0KIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpbnZscGcodTY0IGFkZHIpCiYjNDM7ewomIzQzOwlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O2ludmxwZyAoJTApJiMzNDsgOiA6ICYjMzQ7ciYjMzQ7KGFkZHIpIDogJiMzNDttZW1vcnkmIzM0Oyk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIGNwdV9yZWxheCh2b2lkKQogewogCWFzbSB2b2xhdGlsZSgmIzM0O3JlcDsgbm9wJiMzNDsgOjo6ICYjMzQ7bWVtb3J5JiMzNDspOwpAQCAtOTE1LDYgJiM0Mzs5NTgsMTEgQEAgc3RydWN0IGt2bV94ODZfc3RhdGUgKnZjcHVfc2F2ZV9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCB2Y3B1X2xvYWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGUpOwogdm9pZCBrdm1feDg2X3N0YXRlX2NsZWFudXAoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKTsKIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1feDg2X3N0YXRlX2lzX2d1ZXN0X21vZGUoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN0YXRlLSZndDtuZXN0ZWQuc2l6ZSAmYW1wOyZhbXA7IChzdGF0ZS0mZ3Q7bmVzdGVkLmZsYWdzICZhbXA7IEtWTV9TVEFURV9ORVNURURfR1VFU1RfTU9ERSk7CiYjNDM7fQomIzQzOwogY29uc3Qgc3RydWN0IGt2bV9tc3JfbGlzdCAqa3ZtX2dldF9tc3JfaW5kZXhfbGlzdCh2b2lkKTsKIGNvbnN0IHN0cnVjdCBrdm1fbXNyX2xpc3QgKmt2bV9nZXRfZmVhdHVyZV9tc3JfaW5kZXhfbGlzdCh2b2lkKTsKIGJvb2wga3ZtX21zcl9pc19pbl9zYXZlX3Jlc3RvcmVfbGlzdCh1MzIgbXNyX2luZGV4KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaAppbmRleCA0YmNmZDYwZTNhZWNiLi4wNGY1ZTM0ZGVhM2FlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oCkBAIC0yOTAsNiAmIzQzOzI5MCwyMyBAQCBzdHJ1Y3Qgdm14X21zcl9lbnRyeSB7CiAJdTY0IHZhbHVlOwogfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgxNikpKTsKIAomIzQzOyNkZWZpbmUgVk1YX1NXSVRDSF9HUFJTX0FTTSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJheCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYngpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocmN4KSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkeCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYnApIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocnNpKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkaSkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOCkgIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjkpICBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTEpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjEyKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMykgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTQpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjE1KQomIzQzOwogI2luY2x1ZGUgJiMzNDtldm1jcy5oJiMzNDsKIAogc3RhdGljIGlubGluZSBpbnQgdm14b24odTY0IHBoeXMpCkBAIC0zNjMsOSAmIzQzOzM4MCw2IEBAIHN0YXRpYyBpbmxpbmUgdTY0IHZtcHRyc3R6KHZvaWQpCiAJcmV0dXJuIHZhbHVlOwogfQogCi0vKgotICogTm8gZ3Vlc3Qgc3RhdGUgKGUuZy4gR1BScykgaXMgZXN0YWJsaXNoZWQgYnkgdGhpcyB2bWxhdW5jaC4KLSAqLwogc3RhdGljIGlubGluZSBpbnQgdm1sYXVuY2godm9pZCkKIHsKIAlpbnQgcmV0OwpAQCAtMzczLDM0ICYjNDM7Mzg3LDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpCiAJaWYgKGVuYWJsZV9ldm1jcykKIAkJcmV0dXJuIGV2bWNzX3ZtbGF1bmNoKCk7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O3B1c2ggJSVyYnA7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcmN4OyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJkeDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyc2k7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcmRpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAkMDsmIzM0OwomIzQzOwlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O3B1c2ggJDA7JiMzNDsKIAkJCSAgICAgJiMzNDt2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTsmIzM0OwogCQkJICAgICAmIzM0O2xlYSAxZiglJXJpcCksICUlcmF4OyYjMzQ7CiAJCQkgICAgICYjMzQ7dm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KIAkJCSAgICAgJiMzNDt2bWxhdW5jaDsmIzM0OwogCQkJICAgICAmIzM0O2luY3EgKCUlcnNwKTsmIzM0OwotCQkJICAgICAmIzM0OzE6IHBvcCAlJXJheDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJzaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJicDsmIzM0OwomIzQzOwkJCSAgICAgJiMzNDsxOiA7JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KJiM0MzsJCQkgICAgICYjMzQ7cG9wICUlcmF4OyYjMzQ7CiAJCQkgICAgIDogW3JldF0mIzM0Oz0mYW1wO2EmIzM0OyhyZXQpCiAJCQkgICAgIDogW2hvc3RfcnNwXSYjMzQ7ciYjMzQ7KCh1NjQpSE9TVF9SU1ApLAotCQkJICAgICAgIFtob3N0X3JpcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUklQKQotCQkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDssICYjMzQ7Y2MmIzM0OywgJiMzNDtyYngmIzM0OywgJiMzNDtyOCYjMzQ7LCAmIzM0O3I5JiMzNDssICYjMzQ7cjEwJiMzNDssCi0JCQkgICAgICAgJiMzNDtyMTEmIzM0OywgJiMzNDtyMTImIzM0OywgJiMzNDtyMTMmIzM0OywgJiMzNDtyMTQmIzM0OywgJiMzNDtyMTUmIzM0Oyk7CiYjNDM7CQkJICAgICAgIFtob3N0X3JpcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUklQKSwKJiM0MzsJCQkgICAgICAgR1VFU1RfUkVHU19PRkZTRVRTCiYjNDM7CQkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDssICYjMzQ7Y2MmIzM0Oyk7CiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIE5vIGd1ZXN0IHN0YXRlIChlLmcuIEdQUnMpIGlzIGVzdGFibGlzaGVkIGJ5IHRoaXMgdm1yZXN1bWUuCi0gKi8KIHN0YXRpYyBpbmxpbmUgaW50IHZtcmVzdW1lKHZvaWQpCiB7CiAJaW50IHJldDsKQEAgLTQwOCwyOCAmIzQzOzQxMiwyMSBAQCBzdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKQogCWlmIChlbmFibGVfZXZtY3MpCiAJCXJldHVybiBldm1jc192bXJlc3VtZSgpOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICUlcmJwOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyZHg7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcnNpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJDA7JiMzNDsKJiM0MzsJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICQwOyYjMzQ7CiAJCQkgICAgICYjMzQ7dm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07JiMzNDsKIAkJCSAgICAgJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDsmIzM0OwogCQkJICAgICAmIzM0O3Ztd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdOyYjMzQ7CiYjNDM7CQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCiAJCQkgICAgICYjMzQ7dm1yZXN1bWU7JiMzNDsKIAkJCSAgICAgJiMzNDtpbmNxICglJXJzcCk7JiMzNDsKLQkJCSAgICAgJiMzNDsxOiBwb3AgJSVyYXg7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyZGk7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyc2k7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyZHg7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyY3g7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyYnA7JiMzNDsKJiM0MzsJCQkgICAgICYjMzQ7MTogOyYjMzQ7CiYjNDM7CQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCiYjNDM7CQkJICAgICAmIzM0O3BvcCAlJXJheDsmIzM0OwogCQkJICAgICA6IFtyZXRdJiMzNDs9JmFtcDthJiMzNDsocmV0KQogCQkJICAgICA6IFtob3N0X3JzcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUlNQKSwKLQkJCSAgICAgICBbaG9zdF9yaXBdJiMzNDtyJiMzNDsoKHU2NClIT1NUX1JJUCkKLQkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDssICYjMzQ7cmJ4JiMzNDssICYjMzQ7cjgmIzM0OywgJiMzNDtyOSYjMzQ7LCAmIzM0O3IxMCYjMzQ7LAotCQkJICAgICAgICYjMzQ7cjExJiMzNDssICYjMzQ7cjEyJiMzNDssICYjMzQ7cjEzJiMzNDssICYjMzQ7cjE0JiMzNDssICYjMzQ7cjE1JiMzNDspOwomIzQzOwkJCSAgICAgICBbaG9zdF9yaXBdJiMzNDtyJiMzNDsoKHU2NClIT1NUX1JJUCksCiYjNDM7CQkJICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUUwomIzQzOwkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jCmluZGV4IDFkNzJkY2RmY2UzYjYuLjNlMzUzYWMzOWVlYjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuYwpAQCAtNzQsNyAmIzQzOzc0LDcgQEAgdGVzdF9hc3NlcnQoYm9vbCBleHAsIGNvbnN0IGNoYXIgKmV4cF9zdHIsCiAJaWYgKCEoZXhwKSkgewogCQl2YV9zdGFydChhcCwgZm10KTsKIAotCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDs9PT09IFRlc3QgQXNzZXJ0aW9uIEZhaWx1cmUgPT09PVxuJiMzNDsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O1xuPT09PSBUZXN0IEFzc2VydGlvbiBGYWlsdXJlID09PT1cbiYjMzQ7CiAJCQkmIzM0OyAgJXM6JXU6ICVzXG4mIzM0OwogCQkJJiMzNDsgIHBpZD0lZCB0aWQ9JWQgZXJybm89JWQgLSAlc1xuJiMzNDssCiAJCQlmaWxlLCBsaW5lLCBleHBfc3RyLCBnZXRwaWQoKSwga3ZtX2dldHRpZCgpLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYwppbmRleCBlZjU2ZGNlZmUwMTE5Li5kMzFmYTgxZWEwNzU2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYwpAQCAtMjgsNiAmIzQzOzI4LDkgQEAgYm9vbCBob3N0X2NwdV9pc19oeWdvbjsKIGJvb2wgaG9zdF9jcHVfaXNfYW1kX2NvbXBhdGlibGU7CiBib29sIGlzX2ZvcmNlZF9lbXVsYXRpb25fZW5hYmxlZDsKIHU2NCBndWVzdF90c2Nfa2h6OwomIzQzO3N0cnVjdCBrdm1fbW11IGd1ZXN0X21tdTsKJiM0MzsKJiM0MztzdHJ1Y3QgZ3Vlc3RfcmVncyBndWVzdF9yZWdzOwogCiBjb25zdCBjaGFyICpleF9zdHIoaW50IHZlY3RvcikKIHsKQEAgLTgyOSw2ICYjNDM7ODMyLDE3IEBAIHZvaWQga3ZtX2FyY2hfdm1fcG9zdF9jcmVhdGUoc3RydWN0IGt2bV92bSAqdm0sIHVuc2lnbmVkIGludCBucl92Y3B1cykKIAlURVNUX0FTU0VSVChyICZndDsgMCwgJiMzNDtLVk1fR0VUX1RTQ19LSFogZGlkIG5vdCBwcm92aWRlIGEgdmFsaWQgVFNDIGZyZXF1ZW5jeS4mIzM0Oyk7CiAJZ3Vlc3RfdHNjX2toeiA9IHI7CiAJc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGd1ZXN0X3RzY19raHopOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgZ3Vlc3QgTU1VIGlzIGp1c3QgYSBwbGFjZWhvbGRlciB0byBwcm92aWRlIGFjY2VzcyB0byBQVEUgbWFza3MKJiM0MzsJICogKGZvciBub3cpLiBUaGUgZ3Vlc3QgZG9lcyBub3QgaGF2ZSBtYXBwaW5ncyBmb3IgaXRzIG93biBwYWdlIHRhYmxlcwomIzQzOwkgKiBieSBkZWZhdWx0LCBzbyBhbnkgbWVhbmluZ2Z1bCB1c2Ugb2YgZ3Vlc3QgcGFnZSB0YWJsZXMgcmVxdWlyZXMKJiM0MzsJICogZXhwbGljaXQgc2V0dXAgYnkgdGhlIHRlc3QuIFplcm8gdGhlIFBHRCB0byBtYWtlIGl0IG9idmlvdXMgdGhlIGd1ZXN0CiYjNDM7CSAqIHBhZ2UgdGFibGVzIGFyZSBub3QgaW1tZWRpYXRlbHkgdXNhYmxlIGJ5IGd1ZXN0IGNvZGUuCiYjNDM7CSAqLwomIzQzOwlndWVzdF9tbXUgPSB2bS0mZ3Q7bW11OwomIzQzOwlndWVzdF9tbXUucGdkID0gMDsKJiM0MzsJc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGd1ZXN0X21tdSk7CiB9CiAKIHZvaWQgdmNwdV9hcmNoX3NldF9lbnRyeV9wb2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHZvaWQgKmd1ZXN0X2NvZGUpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jCmluZGV4IDE0NDViODkwOTg2ZmQuLmIwNWJlNTBmMDc1ZDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jCkBAIC0xMyw5ICYjNDM7MTMsNiBAQAogCiAjZGVmaW5lIFNFVl9ERVZfUEFUSCAmIzM0Oy9kZXYvc2V2JiMzNDsKIAotc3RydWN0IGdwcjY0X3JlZ3MgZ3Vlc3RfcmVnczsKLXU2NCByZmxhZ3M7Ci0KIC8qIEFsbG9jYXRlIG1lbW9yeSByZWdpb25zIGZvciBuZXN0ZWQgU1ZNIHRlc3RzLgogICoKICAqIElucHV0IEFyZ3M6CkBAIC0xMzcsNDYgJiM0MzsxMzQsNDcgQEAgdm9pZCBnZW5lcmljX3N2bV9zZXR1cChzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtLCB2b2lkICpndWVzdF9yaXApCiAgKiBzYXZlL3Jlc3RvcmUgNjQtYml0IGdlbmVyYWwgcmVnaXN0ZXJzIGV4Y2VwdCByYXgsIHJpcCwgcnNwCiAgKiB3aGljaCBhcmUgZGlyZWN0bHkgaGFuZGVkIHRocm91Z2ggdGhlIFZNQ0IgZ3Vlc3QgcHJvY2Vzc29yIHN0YXRlCiAgKi8KLSNkZWZpbmUgU0FWRV9HUFJfQwkJCQlcCi0JJiMzNDt4Y2hnICUlcmJ4LCBndWVzdF9yZWdzJiM0MzsweDIwXG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyY3gsIGd1ZXN0X3JlZ3MmIzQzOzB4MTBcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXJkeCwgZ3Vlc3RfcmVncyYjNDM7MHgxOFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcmJwLCBndWVzdF9yZWdzJiM0MzsweDMwXG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyc2ksIGd1ZXN0X3JlZ3MmIzQzOzB4Mzhcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXJkaSwgZ3Vlc3RfcmVncyYjNDM7MHg0MFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcjgsICBndWVzdF9yZWdzJiM0MzsweDQ4XG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyOSwgIGd1ZXN0X3JlZ3MmIzQzOzB4NTBcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXIxMCwgZ3Vlc3RfcmVncyYjNDM7MHg1OFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcjExLCBndWVzdF9yZWdzJiM0MzsweDYwXG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyMTIsIGd1ZXN0X3JlZ3MmIzQzOzB4Njhcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXIxMywgZ3Vlc3RfcmVncyYjNDM7MHg3MFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcjE0LCBndWVzdF9yZWdzJiM0MzsweDc4XG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyMTUsIGd1ZXN0X3JlZ3MmIzQzOzB4ODBcblx0JiMzNDsKLQotI2RlZmluZSBMT0FEX0dQUl9DICAgICAgU0FWRV9HUFJfQwomIzQzOyNkZWZpbmUgU1ZNX1NXSVRDSF9HUFJTX0FTTSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJieCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyY3gpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocmR4KSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJicCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyc2kpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocmRpKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHI4KSAgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOSkgIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjEwKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMSkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTIpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjEzKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTUpCiAKIC8qCiAgKiBzZWxmdGVzdHMgZG8gbm90IHVzZSBpbnRlcnJ1cHRzIHNvIHdlIGRyb3BwZWQgY2xnaS9zdGkvY2xpL3N0Z2kKLSAqIGZvciBub3cuIHJlZ2lzdGVycyBpbnZvbHZlZCBpbiBMT0FEL1NBVkVfR1BSX0MgYXJlIGV2ZW50dWFsbHkKJiM0MzsgKiBmb3Igbm93LiBSZWdpc3RlcnMgaW52b2x2ZWQgaW4gU1ZNX1NXSVRDSF9HUFJTX0FTTSBhcmUgZXZlbnR1YWxseQogICogdW5tb2RpZmllZCBzbyB0aGV5IGRvIG5vdCBuZWVkIHRvIGJlIGluIHRoZSBjbG9iYmVyIGxpc3QuCiAgKi8KIHZvaWQgcnVuX2d1ZXN0KHN0cnVjdCB2bWNiICp2bWNiLCB1NjQgdm1jYl9ncGEpCiB7CiAJYXNtIHZvbGF0aWxlICgKIAkJJiMzNDt2bWxvYWQgJVt2bWNiX2dwYV1cblx0JiMzNDsKLQkJJiMzNDttb3YgcmZsYWdzLCAlJXIxNVxuXHQmIzM0OwkvLyByZmxhZ3MKLQkJJiMzNDttb3YgJSVyMTUsIDB4MTcwKCVbdm1jYl0pXG5cdCYjMzQ7Ci0JCSYjMzQ7bW92IGd1ZXN0X3JlZ3MsICUlcjE1XG5cdCYjMzQ7CS8vIHJheAotCQkmIzM0O21vdiAlJXIxNSwgMHgxZjgoJVt2bWNiXSlcblx0JiMzNDsKLQkJTE9BRF9HUFJfQwomIzQzOwkJJiMzNDttb3YgJiMzNDsgR1VFU1RfUkVHKHJmbGFncykgJiMzNDssICUlcjE1XG5cdCYjMzQ7CiYjNDM7CQkmIzM0O21vdiAlJXIxNSwgJVt2bWNiX3JmbGFnc11cblx0JiMzNDsKJiM0MzsJCSYjMzQ7bW92ICYjMzQ7IEdVRVNUX1JFRyhyYXgpICYjMzQ7LCAlJXIxNVxuXHQmIzM0OwomIzQzOwkJJiMzNDttb3YgJSVyMTUsICVbdm1jYl9yYXhdXG5cdCYjMzQ7CiYjNDM7CQlTVk1fU1dJVENIX0dQUlNfQVNNCiAJCSYjMzQ7dm1ydW4gJVt2bWNiX2dwYV1cblx0JiMzNDsKLQkJU0FWRV9HUFJfQwotCQkmIzM0O21vdiAweDE3MCglW3ZtY2JdKSwgJSVyMTVcblx0JiMzNDsJLy8gcmZsYWdzCi0JCSYjMzQ7bW92ICUlcjE1LCByZmxhZ3Ncblx0JiMzNDsKLQkJJiMzNDttb3YgMHgxZjgoJVt2bWNiXSksICUlcjE1XG5cdCYjMzQ7CS8vIHJheAotCQkmIzM0O21vdiAlJXIxNSwgZ3Vlc3RfcmVnc1xuXHQmIzM0OwomIzQzOwkJU1ZNX1NXSVRDSF9HUFJTX0FTTQomIzQzOwkJJiMzNDttb3YgJVt2bWNiX3JmbGFnc10sICUlcjE1XG5cdCYjMzQ7CiYjNDM7CQkmIzM0O21vdiAlJXIxNSwgJiMzNDsgR1VFU1RfUkVHKHJmbGFncykgJiMzNDtcblx0JiMzNDsKJiM0MzsJCSYjMzQ7bW92ICVbdm1jYl9yYXhdLCAlJXIxNVxuXHQmIzM0OwkvLyByYXgKJiM0MzsJCSYjMzQ7bW92ICUlcjE1LCAmIzM0OyBHVUVTVF9SRUcocmF4KSAmIzM0O1xuXHQmIzM0OwogCQkmIzM0O3Ztc2F2ZSAlW3ZtY2JfZ3BhXVxuXHQmIzM0OwotCQk6IDogW3ZtY2JdICYjMzQ7ciYjMzQ7ICh2bWNiKSwgW3ZtY2JfZ3BhXSAmIzM0O2EmIzM0OyAodm1jYl9ncGEpCiYjNDM7CQk6IFt2bWNiX3JmbGFnc10gJiMzNDsmIzQzO20mIzM0OyAodm1jYi0mZ3Q7c2F2ZS5yZmxhZ3MpLAomIzQzOwkJICBbdm1jYl9yYXhdICYjMzQ7JiM0MzttJiMzNDsgKHZtY2ItJmd0O3NhdmUucmF4KQomIzQzOwkJOiBbdm1jYl9ncGFdICYjMzQ7YSYjMzQ7ICh2bWNiX2dwYSksCiYjNDM7CQkgIEdVRVNUX1JFR1NfT0ZGU0VUUwogCQk6ICYjMzQ7cjE1JiMzNDssICYjMzQ7bWVtb3J5JiMzNDspOwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuYwppbmRleCBlN2RkNTc5MTk1OWJhLi4zODA1MGM2MGEwNjcwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmMKQEAgLTEwLDM2ICYjNDM7MTAsOCBAQAogCiB2b2lkIHVjYWxsX2FyY2hfZG9fdWNhbGwoZ3ZhX3QgdWMpCiB7Ci0JLyoKLQkgKiBGSVhNRTogUmV2ZXJ0IHRoaXMgaGFjayAodGhlIGVudGlyZSBjb21taXQgdGhhdCBhZGRlZCBpdCkgb25jZSBuVk1YCi0JICogcHJlc2VydmVzIEwyIEdQUnMgYWNyb3NzIGEgbmVzdGVkIFZNLUV4aXQuICBJZiBhIHVjYWxsIGZyb20gTDIsIGUuZy4KLQkgKiB0byBkbyBhIEdVRVNUX1NZTkMoKSwgbGFuZHMgdGhlIHZDUFUgaW4gTDEsIGFueSBhbmQgYWxsIEdQUnMgY2FuIGJlCi0JICogY2xvYmJlcmVkIGJ5IEwxLiAgU2F2ZSBhbmQgcmVzdG9yZSBub24tdm9sYXRpbGUgR1BScyAoY2xvYmJlcmluZyBSQlAKLQkgKiBpbiBwYXJ0aWN1bGFyIGlzIHByb2JsZW1hdGljKSBhbG9uZyB3aXRoIFJEWCBhbmQgUkRJICh3aGljaCBhcmUKLQkgKiBpbnB1dHMpLCBhbmQgY2xvYmJlciB2b2xhdGlsZSBHUFJzLiAqc2lnaCoKLQkgKi8KLSNkZWZpbmUgSE9SUklGSUNfTDJfVUNBTExfQ0xPQkJFUl9IQUNLCVwKLQkmIzM0O3JjeCYjMzQ7LCAmIzM0O3JzaSYjMzQ7LCAmIzM0O3I4JiMzNDssICYjMzQ7cjkmIzM0OywgJiMzNDtyMTAmIzM0OywgJiMzNDtyMTEmIzM0OwotCi0JYXNtIHZvbGF0aWxlKCYjMzQ7cHVzaCAlJXJicFxuXHQmIzM0OwotCQkgICAgICYjMzQ7cHVzaCAlJXIxNVxuXHQmIzM0OwotCQkgICAgICYjMzQ7cHVzaCAlJXIxNFxuXHQmIzM0OwotCQkgICAgICYjMzQ7cHVzaCAlJXIxM1xuXHQmIzM0OwotCQkgICAgICYjMzQ7cHVzaCAlJXIxMlxuXHQmIzM0OwotCQkgICAgICYjMzQ7cHVzaCAlJXJieFxuXHQmIzM0OwotCQkgICAgICYjMzQ7cHVzaCAlJXJkeFxuXHQmIzM0OwotCQkgICAgICYjMzQ7cHVzaCAlJXJkaVxuXHQmIzM0OwotCQkgICAgICYjMzQ7aW4gJVtwb3J0XSwgJSVhbFxuXHQmIzM0OwotCQkgICAgICYjMzQ7cG9wICUlcmRpXG5cdCYjMzQ7Ci0JCSAgICAgJiMzNDtwb3AgJSVyZHhcblx0JiMzNDsKLQkJICAgICAmIzM0O3BvcCAlJXJieFxuXHQmIzM0OwotCQkgICAgICYjMzQ7cG9wICUlcjEyXG5cdCYjMzQ7Ci0JCSAgICAgJiMzNDtwb3AgJSVyMTNcblx0JiMzNDsKLQkJICAgICAmIzM0O3BvcCAlJXIxNFxuXHQmIzM0OwotCQkgICAgICYjMzQ7cG9wICUlcjE1XG5cdCYjMzQ7Ci0JCSAgICAgJiMzNDtwb3AgJSVyYnBcblx0JiMzNDsKLQkJOiA6IFtwb3J0XSAmIzM0O2QmIzM0OyAoVUNBTExfUElPX1BPUlQpLCAmIzM0O0QmIzM0OyAodWMpIDogJiMzNDtyYXgmIzM0OywgJiMzNDttZW1vcnkmIzM0OywKLQkJICAgICBIT1JSSUZJQ19MMl9VQ0FMTF9DTE9CQkVSX0hBQ0spOwomIzQzOwlhc20gdm9sYXRpbGUoJiMzNDtpbiAlW3BvcnRdLCAlJWFsJiMzNDsKJiM0MzsJCTogOiBbcG9ydF0gJiMzNDtkJiMzNDsgKFVDQUxMX1BJT19QT1JUKSwgJiMzNDtEJiMzNDsgKHVjKSA6ICYjMzQ7cmF4JiMzNDssICYjMzQ7bWVtb3J5JiMzNDspOwogfQogCiB2b2lkICp1Y2FsbF9hcmNoX2dldF91Y2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni92bXguYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jCmluZGV4IGNkMDljOWRlNDQ4NWEuLjA4OWUxYThhZjUzZmMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jCkBAIC0yMzIsNyAmIzQzOzIzMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3ZtY3NfY29udHJvbF9maWVsZHMoc3RydWN0IHZteF9wYWdlcyAqdm14KQogCiAJdm13cml0ZShFWENFUFRJT05fQklUTUFQLCAwKTsKIAl2bXdyaXRlKFBBR0VfRkFVTFRfRVJST1JfQ09ERV9NQVNLLCAwKTsKLQl2bXdyaXRlKFBBR0VfRkFVTFRfRVJST1JfQ09ERV9NQVRDSCwgLTEpOyAvKiBOZXZlciBtYXRjaCAqLwomIzQzOwl2bXdyaXRlKFBBR0VfRkFVTFRfRVJST1JfQ09ERV9NQVRDSCwgMCk7CiAJdm13cml0ZShDUjNfVEFSR0VUX0NPVU5ULCAwKTsKIAl2bXdyaXRlKFZNX0VYSVRfQ09OVFJPTFMsIHJkbXNyKE1TUl9JQTMyX1ZNWF9FWElUX0NUTFMpIHwKIAkJVk1fRVhJVF9IT1NUX0FERFJfU1BBQ0VfU0laRSk7CSAgLyogNjQtYml0IGhvc3QgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuYwppbmRleCA3N2NlODdjNDFhODY4Li5hYTdmM2I0MDVmZDMyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jCkBAIC0yMiw5ICYjNDM7MjIsNiBAQAogCiAjZGVmaW5lIFNZTkNfUE9SVAkweGUKIAotI2RlZmluZSBTVFIoeCkgI3gKLSNkZWZpbmUgWFNUUihzKSBTVFIocykKLQogLyoKICAqIFNNSSBoYW5kbGVyOiBydW5zIGluIHJlYWwtYWRkcmVzcyBtb2RlLgogICogUmVwb3J0cyBTTVJBTV9TVEFHRSB2aWEgcG9ydCBJTywgdGhlbiBkb2VzIFJTTS4KQEAgLTM3LDcgJiM0MzszNCw3IEBAIHN0YXRpYyB1OCBzbWlfaGFuZGxlcltdID0gewogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3luY193aXRoX2hvc3QodTY0IHBoYXNlKQogewotCWFzbSB2b2xhdGlsZSgmIzM0O2luICQmIzM0OyBYU1RSKFNZTkNfUE9SVCkgJiMzNDssICUlYWwgXG4mIzM0OwomIzQzOwlhc20gdm9sYXRpbGUoJiMzNDtpbiAkJiMzNDsgX19zdHJpbmdpZnkoU1lOQ19QT1JUKSAmIzM0OywgJSVhbCBcbiYjMzQ7CiAJCSAgICAgOiAmIzM0OyYjNDM7YSYjMzQ7IChwaGFzZSkpOwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9maXhfaHlwZXJjYWxsX3Rlc3QuYwppbmRleCA3NTNhMGU3MzBlYThkLi40OTMxZWMyMjc2OGVlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZml4X2h5cGVyY2FsbF90ZXN0LmMKQEAgLTYsNyAmIzQzOzYsNiBAQAogICovCiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9wYXJhLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva3ZtX3BhcmEuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmdpZnkuaCZndDsKICNpbmNsdWRlICZsdDtzdGRpbnQuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtrdm1fdGVzdF9oYXJuZXNzLmgmIzM0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNTA3MzkxYWIyYzkzMAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmMKQEAgLTAsMCAmIzQzOzEsMjg4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt0aW1lLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3B0aHJlYWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtnZXRvcHQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RfdXRpbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7cHJvY2Vzc29yLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7c3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bXguaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBOUl9JVEVSQVRJT05TCQk1MDAKJiM0MzsKJiM0MzsjZGVmaW5lIFBUUlNfUEVSX1BURQkJNTEyCiYjNDM7I2RlZmluZSBQWERfSU5ERVgodmFkZHIsIGxldmVsKQkoKCh2YWRkcikgJmd0OyZndDsgUEdfTEVWRUxfU0hJRlQobGV2ZWwpKSAmYW1wOyAoUFRSU19QRVJfUFRFIC0gMSkpCiYjNDM7CiYjNDM7I2RlZmluZSBURVNUX01FTV9CQVNFX0dWQQkweGMwMDAwMDAwVUxMCiYjNDM7I2RlZmluZSBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVAkweGQwMDAwMDAwVUxMCiYjNDM7I2RlZmluZSBQQVRURVJOCQkJMHhhYmNkZWZhYmNkZWZhYmNkVUxMCiYjNDM7CiYjNDM7c3RhdGljIHU2NCBleHBlY3RlZF92YWRkcjsKJiM0MztzdGF0aWMgdTY0IGd1ZXN0X2ZhdWx0czsKJiM0MzsKJiM0MztzdGF0aWMgdTY0ICpndWVzdF9nZXRfcHRlKHU2NCB2YWRkcikKJiM0Mzt7CiYjNDM7CXU2NCBwZ3RhYmxlX3BhLCBwdGU7CiYjNDM7CXU2NCAqcGd0YWJsZTsKJiM0MzsJaW50IGxldmVsOwomIzQzOwomIzQzOwlsZXZlbCA9IChnZXRfY3I0KCkgJmFtcDsgWDg2X0NSNF9MQTU3KSA/IFBHX0xFVkVMXzI1NlQgOiBQR19MRVZFTF81MTJHOwomIzQzOwomIzQzOwlwZ3RhYmxlX3BhID0gZ2V0X2NyMygpICZhbXA7IFBIWVNJQ0FMX1BBR0VfTUFTSzsKJiM0MzsJZm9yICg7IGxldmVsICZndDsgUEdfTEVWRUxfNEs7IGxldmVsLS0pIHsKJiM0MzsJCXBndGFibGUgPSAodTY0ICopKHBndGFibGVfcGEgJiM0MzsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQpOwomIzQzOwkJcHRlID0gcGd0YWJsZVtQWERfSU5ERVgodmFkZHIsIGxldmVsKV07CiYjNDM7CQlHVUVTVF9BU1NFUlQocHRlICZhbXA7IFBURV9QUkVTRU5UX01BU0soJmFtcDtndWVzdF9tbXUpKTsKJiM0MzsJCUdVRVNUX0FTU0VSVCghKHB0ZSAmYW1wOyBQVEVfSFVHRV9NQVNLKCZhbXA7Z3Vlc3RfbW11KSkpOwomIzQzOwkJcGd0YWJsZV9wYSA9IFBURV9HRVRfUEEocHRlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwZ3RhYmxlID0gKHU2NCAqKShwZ3RhYmxlX3BhICYjNDM7IFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUKTsKJiM0MzsJcmV0dXJuICZhbXA7cGd0YWJsZVtQWERfSU5ERVgodmFkZHIsIFBHX0xFVkVMXzRLKV07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X3BmX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpCiYjNDM7ewomIzQzOwl1NjQgZmF1bHRfYWRkcjsKJiM0MzsJdTY0ICpwdGVwOwomIzQzOwomIzQzOwlmYXVsdF9hZGRyID0gZ2V0X2NyMigpOwomIzQzOwlHVUVTVF9BU1NFUlRfRVEoZmF1bHRfYWRkciwgUkVBRF9PTkNFKGV4cGVjdGVkX3ZhZGRyKSk7CiYjNDM7CiYjNDM7CXB0ZXAgPSBndWVzdF9nZXRfcHRlKGZhdWx0X2FkZHIpOwomIzQzOwlHVUVTVF9BU1NFUlQocHRlcCk7CiYjNDM7CUdVRVNUX0FTU0VSVCghKCpwdGVwICZhbXA7IFBURV9QUkVTRU5UX01BU0soJmFtcDtndWVzdF9tbXUpKSk7CiYjNDM7CiYjNDM7CSpwdGVwIHw9IFBURV9QUkVTRU5UX01BU0soJmFtcDtndWVzdF9tbXUpOwomIzQzOwlndWVzdF9mYXVsdHMmIzQzOyYjNDM7OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBndWVzdF9hY2Nlc3NfbWVtb3J5KHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CXU2NCB2YWRkciwgdmFsOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdmFkZHIgPSBURVNUX01FTV9CQVNFX0dWQSAmIzQzOyAoaSAlIFBUUlNfUEVSX1BURSkgKiBQQUdFX1NJWkU7CiYjNDM7CQlXUklURV9PTkNFKGV4cGVjdGVkX3ZhZGRyLCB2YWRkcik7CiYjNDM7CiYjNDM7CQkvKiBSZWFkIHRvIHRyaWdnZXIgI1BGICovCiYjNDM7CQl2YWwgPSBSRUFEX09OQ0UoKih1NjQgKil2YWRkcik7CiYjNDM7CQlHVUVTVF9BU1NFUlRfRVEodmFsLCBQQVRURVJOKTsKJiM0MzsKJiM0MzsJCS8qIENsZWFyIHRoZSBwcmVzZW50IGJpdCBhZ2FpbiBzbyBpdCBmYXVsdHMgbmV4dCB0aW1lICovCiYjNDM7CQkqZ3Vlc3RfZ2V0X3B0ZSh2YWRkcikgJmFtcDs9IH5QVEVfUFJFU0VOVF9NQVNLKCZhbXA7Z3Vlc3RfbW11KTsKJiM0MzsJCWludmxwZyh2YWRkcik7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbDFfc3ZtX2NvZGUoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSkKJiM0Mzt7CiYjNDM7CWdlbmVyaWNfc3ZtX3NldHVwKHN2bSwgZ3Vlc3RfYWNjZXNzX21lbW9yeSk7CiYjNDM7CXN2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyB8PSBCSVQoVURfVkVDVE9SKTsKJiM0MzsKJiM0MzsJd2hpbGUgKDEpIHsKJiM0MzsJCXJ1bl9ndWVzdChzdm0tJmd0O3ZtY2IsIHN2bS0mZ3Q7dm1jYl9ncGEpOwomIzQzOwkJR1VFU1RfQVNTRVJUX0VRKHN2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbC5leGl0X2NvZGUsCiYjNDM7CQkJCShTVk1fRVhJVF9FWENQX0JBU0UgJiM0MzsgVURfVkVDVE9SKSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KQomIzQzO3sKJiM0MzsJR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7CiYjNDM7CUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14KSk7CiYjNDM7CXByZXBhcmVfdm1jcyh2bXgsIGd1ZXN0X2FjY2Vzc19tZW1vcnkpOwomIzQzOwomIzQzOwlHVUVTVF9BU1NFUlQoIXZtd3JpdGUoRVhDRVBUSU9OX0JJVE1BUCwgQklUKFVEX1ZFQ1RPUikpKTsKJiM0MzsKJiM0MzsJR1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTsKJiM0MzsJd2hpbGUgKDEpIHsKJiM0MzsJCUdVRVNUX0FTU0VSVF9FUSh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSwgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSk7CiYjNDM7CQlHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX0lOVFJfSU5GTykgJmFtcDsgMHhmZiwgVURfVkVDVE9SKTsKJiM0MzsJCUdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZSh2b2lkICp0ZXN0X2RhdGEpCiYjNDM7ewomIzQzOwlpZiAodGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkpCiYjNDM7CQlsMV9zdm1fY29kZSh0ZXN0X2RhdGEpOwomIzQzOwllbHNlCiYjNDM7CQlsMV92bXhfY29kZSh0ZXN0X2RhdGEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqc2lndXNyX3RocmVhZF9mbih2b2lkICphcmcpCiYjNDM7ewomIzQzOwlwdGhyZWFkX3QgdmNwdV90aHJlYWQgPSAocHRocmVhZF90KWFyZzsKJiM0MzsKJiM0MzsJZm9yICg7OykgewomIzQzOwkJcHRocmVhZF90ZXN0Y2FuY2VsKCk7CiYjNDM7CQlwdGhyZWFkX2tpbGwodmNwdV90aHJlYWQsIFNJR1VTUjEpOwomIzQzOwkJdXNsZWVwKG1zZWNzX3RvX3VzZWNzKDEpKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZHVtbXlfc2lnbmFsX2hhbmRsZXIoaW50IHNpZ25vKSB7fQomIzQzO3N0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIHNhOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZjcHVfc2lndXNyX2xpc3Rlbih2b2lkKQomIzQzO3sKJiM0MzsJc2Euc2FfaGFuZGxlciA9IGR1bW15X3NpZ25hbF9oYW5kbGVyOwomIzQzOwlzaWdhY3Rpb24oU0lHVVNSMSwgJmFtcDtzYSwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZjcHVfc2lndXNyX2lnbm9yZSh2b2lkKQomIzQzO3sKJiM0MzsJc2Euc2FfaGFuZGxlciA9IFNJR19JR047CiYjNDM7CXNpZ2FjdGlvbihTSUdVU1IxLCAmYW1wO3NhLCBOVUxMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQga3ZtX3g4Nl9zdGF0ZV9xdWV1ZV91ZChzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGUpCiYjNDM7ewomIzQzOwlpZiAoc3RhdGUtJmd0O2V2ZW50cy5leGNlcHRpb24ucGVuZGluZyB8fCBzdGF0ZS0mZ3Q7ZXZlbnRzLmV4Y2VwdGlvbi5pbmplY3RlZCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3RhdGUtJmd0O2V2ZW50cy5mbGFncyB8PSBLVk1fVkNQVUVWRU5UX1ZBTElEX1BBWUxPQUQ7CiYjNDM7CXN0YXRlLSZndDtldmVudHMuZXhjZXB0aW9uLnBlbmRpbmcgPSB0cnVlOwomIzQzOwlzdGF0ZS0mZ3Q7ZXZlbnRzLmV4Y2VwdGlvbi5pbmplY3RlZCA9IGZhbHNlOwomIzQzOwlzdGF0ZS0mZ3Q7ZXZlbnRzLmV4Y2VwdGlvbi5uciA9IFVEX1ZFQ1RPUjsKJiM0MzsJc3RhdGUtJmd0O2V2ZW50cy5leGNlcHRpb24uaGFzX2Vycm9yX2NvZGUgPSBmYWxzZTsKJiM0MzsJc3RhdGUtJmd0O2V2ZW50cy5leGNlcHRpb25faGFzX3BheWxvYWQgPSBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnVuX3Rlc3QoYm9vbCBuZXN0ZWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGU7CiYjNDM7CWludCByLCBpLCBsZXZlbDsKJiM0MzsJcHRocmVhZF90IHNpZ3Vzcl90aHJlYWQ7CiYjNDM7CWdwYV90IGdwYSwgcGd0YWJsZV9ncGE7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKJiM0MzsJc3RydWN0IGt2bV92bSAqdm07CiYjNDM7CXN0cnVjdCB1Y2FsbCB1YzsKJiM0MzsJdTY0ICpwZ3RhYmxlOwomIzQzOwlndmFfdCBndmE7CiYjNDM7CXU2NCBwdGU7CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoJmFtcDt2Y3B1LCBuZXN0ZWQgPyBsMV9ndWVzdF9jb2RlIDogZ3Vlc3RfYWNjZXNzX21lbW9yeSk7CiYjNDM7CXZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIodm0sIFBGX1ZFQ1RPUiwgZ3Vlc3RfcGZfaGFuZGxlcik7CiYjNDM7CiYjNDM7CWlmIChuZXN0ZWQpIHsKJiM0MzsJCXZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVhDRVBUSU9OX1BBWUxPQUQsIC0ydWwpOwomIzQzOwkJaWYgKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkpCiYjNDM7CQkJdmNwdV9hbGxvY19zdm0odm0sICZhbXA7Z3ZhKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQl2Y3B1X2FsbG9jX3ZteCh2bSwgJmFtcDtndmEpOwomIzQzOwkJdmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBndmEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFsbG9jYXRlIGEgcGFnZSBhbmQgd3JpdGUgdGhlIHBhdHRlcm4gdG8gaXQgKi8KJiM0MzsJZ3ZhID0gdm1fYWxsb2NfcGFnZSh2bSk7CiYjNDM7CSoodTY0ICopYWRkcl9ndmEyaHZhKHZtLCBndmEpID0gUEFUVEVSTjsKJiM0MzsJZ3BhID0gYWRkcl9ndmEyZ3BhKHZtLCBndmEpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYXAgYWxsIHZpcnR1YWwgYWRkcmVzc2VzIHRvIHRoZSBwYXR0ZXJuIHBhZ2UgYW5kIGNsZWFyIHRoZSBwcmVzZW50CiYjNDM7CSAqIGJpdCBzdWNoIHRoYXQgZ3Vlc3QgYWNjZXNzZXMgd2lsbCBjYXVzZSBhICNQRi4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBQVFJTX1BFUl9QVEU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlndmEgPSBURVNUX01FTV9CQVNFX0dWQSAmIzQzOyBpICogZ2V0cGFnZXNpemUoKTsKJiM0MzsJCXZpcnRfcGdfbWFwKHZtLCBndmEsIGdwYSk7CiYjNDM7CQkqdm1fZ2V0X3B0ZSh2bSwgZ3ZhKSAmYW1wOz0gflBURV9QUkVTRU5UX01BU0soJmFtcDt2bS0mZ3Q7bW11KTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBOb3cgY3JlYXRlIG1hcHBpbmdzIGZvciB0aGUgcGFnZSB0YWJsZXMgY3JlYXRlZCBhYm92ZSBzbyB0aGF0IHRoZQomIzQzOwkgKiBndWVzdCAjUEYgaGFuZGxlciBjYW4gd2FsayB0aGVtLiBBbGwgUFRFcyBmb3IgdGVzdCB2aXJ0dWFsIGFkZHJlc3NlcwomIzQzOwkgKiBzaG91bGQgbGllIG9uIHRoZSBzYW1lIFBURSBwYWdlLCBzbyBvbmUgcGFnZSBpcyBtYXBwZWQgZm9yIGVhY2ggcGFnZQomIzQzOwkgKiB0YWJsZSBsZXZlbC4KJiM0MzsJICoKJiM0MzsJICogVXNlIGFuIG9mZnNldCBmb3IgdGhlIEdWQSBpbnN0ZWFkIG9mIGNyZWF0aW5nIGlkZW50aXR5IG1hcHBpbmdzIHRvCiYjNDM7CSAqIGF2b2lkIGNvbGxpc2lvbiB3aXRoIGV4aXN0aW5nIG1hcHBpbmdzIGF0IGxvdyBHVkFzIChlLmcuIEVMRikuCiYjNDM7CSAqLwomIzQzOwlwZ3RhYmxlX2dwYSA9IHZtLSZndDttbXUucGdkOwomIzQzOwlmb3IgKGxldmVsID0gdm0tJmd0O21tdS5wZ3RhYmxlX2xldmVsczsgbGV2ZWwgJmd0Oz0gUEdfTEVWRUxfNEs7IGxldmVsLS0pIHsKJiM0MzsJCXZpcnRfbWFwKHZtLCBwZ3RhYmxlX2dwYSAmIzQzOyBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVCwgcGd0YWJsZV9ncGEsIDEpOwomIzQzOwkJcGd0YWJsZSA9IGFkZHJfZ3BhMmh2YSh2bSwgcGd0YWJsZV9ncGEpOwomIzQzOwkJcHRlID0gcGd0YWJsZVtQWERfSU5ERVgoVEVTVF9NRU1fQkFTRV9HVkEsIGxldmVsKV07CiYjNDM7CQlwZ3RhYmxlX2dwYSA9IFBURV9HRVRfUEEocHRlKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBJbml0aWFsaXplIHRoZSB0aHJlYWQgc2VuZGluZyBTSUdVU1IgYW5kIGluc3RhbGwgdGhlIGhhbmRsZXIgKi8KJiM0MzsJdmNwdV9zaWd1c3JfaWdub3JlKCk7CiYjNDM7CXIgPSBwdGhyZWFkX2NyZWF0ZSgmYW1wO3NpZ3Vzcl90aHJlYWQsIE5VTEwsIHNpZ3Vzcl90aHJlYWRfZm4sCiYjNDM7CQkJICAgKHZvaWQgKilwdGhyZWFkX3NlbGYoKSk7CiYjNDM7CVRFU1RfQVNTRVJUKCFyLCAmIzM0O3B0aHJlYWRfY3JlYXRlKCkgZmFpbGVkOiAlZCYjMzQ7LCByKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMTsgaSAmbHQ7PSBOUl9JVEVSQVRJT05TOyBpJiM0MzsmIzQzOykgewomIzQzOwkJLyoKJiM0MzsJCSAqIE9ubHkgaGFuZGxlIFNJR1VTUiB3aGlsZSB0aGUgdkNQVSBpcyBydW5uaW5nLCBvdGhlcndpc2UKJiM0MzsJCSAqIGlnbm9yZSBpdCB0byBhdm9pZCBpbnRlcnJ1cHRpbmcgb3RoZXIgaW9jdGxzL3N5c2NhbGxzLgomIzQzOwkJICovCiYjNDM7CQl2Y3B1X3NpZ3Vzcl9saXN0ZW4oKTsKJiM0MzsJCXIgPSBfX3ZjcHVfcnVuKHZjcHUpOwomIzQzOwkJVEVTVF9BU1NFUlQoIXIgfHwgZXJybm8gPT0gRUlOVFIsICYjMzQ7RXhwZWN0ZWQgc3VjY2VzcyBvciBTSUdVU1IxJiMzNDspOwomIzQzOwkJdmNwdV9zaWd1c3JfaWdub3JlKCk7CiYjNDM7CiYjNDM7CQkvKiBUaGUgZ3Vlc3Qgb25seSBleGl0cyBkdWUgdG8gYSBzaWduYWwgb3IgZmFpbGVkIGFzc2VydGlvbiAqLwomIzQzOwkJaWYgKCFyKSB7CiYjNDM7CQkJVEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX0lPKTsKJiM0MzsJCQlURVNUX0FTU0VSVF9FUShnZXRfdWNhbGwodmNwdSwgJmFtcDt1YyksIFVDQUxMX0FCT1JUKTsKJiM0MzsJCQlSRVBPUlRfR1VFU1RfQVNTRVJUKHVjKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXN0YXRlID0gdmNwdV9zYXZlX3N0YXRlKHZjcHUpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIElmIHRoZSB2Q1BVIGlzIGluIGd1ZXN0IG1vZGUsIGluamVjdCBhICNVRCB0byB0cmlnZ2VyIGFuCiYjNDM7CQkgKiBMMi0mZ3Q7TDEgVk0tRXhpdCBldmVyeSBvdGhlciBpdGVyYXRpb24uCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChrdm1feDg2X3N0YXRlX2lzX2d1ZXN0X21vZGUoc3RhdGUpICZhbXA7JmFtcDsgaSAlIDIgPT0gMCkKJiM0MzsJCQlrdm1feDg2X3N0YXRlX3F1ZXVlX3VkKHN0YXRlKTsKJiM0MzsKJiM0MzsJCWt2bV92bV9yZWxlYXNlKHZtKTsKJiM0MzsJCXZjcHUgPSB2bV9yZWNyZWF0ZV93aXRoX29uZV92Y3B1KHZtKTsKJiM0MzsJCWlmIChuZXN0ZWQpCiYjNDM7CQkJdm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FWENFUFRJT05fUEFZTE9BRCwgLTJ1bCk7CiYjNDM7CQl2Y3B1X2xvYWRfc3RhdGUodmNwdSwgc3RhdGUpOwomIzQzOwkJa3ZtX3g4Nl9zdGF0ZV9jbGVhbnVwKHN0YXRlKTsKJiM0MzsKJiM0MzsJCXByX2luZm8oJiMzNDtcclNhdmUmIzQzO3Jlc3RvcmUgaXRlcmF0aW9uczogJWQmIzM0OywgaSk7CiYjNDM7CX0KJiM0MzsJcHJfaW5mbygmIzM0O1xuJiMzNDspOwomIzQzOwomIzQzOwlzeW5jX2dsb2JhbF9mcm9tX2d1ZXN0KHZtLCBndWVzdF9mYXVsdHMpOwomIzQzOwlURVNUX0FTU0VSVChndWVzdF9mYXVsdHMsICYjMzQ7Tm8gZ3Vlc3QgcGFnZSBmYXVsdHMgdHJpZ2dlcmVkJiMzNDspOwomIzQzOwlwcl9pbmZvKCYjMzQ7R3Vlc3QgcGFnZSBmYXVsdHMlczogJWx1XG4mIzM0OywgbmVzdGVkID8gJiMzNDsgKGluIEwyKSYjMzQ7IDogJiMzNDsmIzM0OywgZ3Vlc3RfZmF1bHRzKTsKJiM0MzsKJiM0MzsJcHRocmVhZF9jYW5jZWwoc2lndXNyX3RocmVhZCk7CiYjNDM7CXB0aHJlYWRfam9pbihzaWd1c3JfdGhyZWFkLCBOVUxMKTsKJiM0MzsJa3ZtX3ZtX2ZyZWUodm0pOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQomIzQzO3sKJiM0MzsJcHJfaW5mbygmIzM0O1J1bm5pbmcgc2F2ZSYjNDM7cmVzdG9yZSBzdHJlc3MgdGVzdC4uLlxuJiMzNDspOwomIzQzOwlydW5fdGVzdCgvKm5lc3RlZD0qL2ZhbHNlKTsKJiM0MzsKJiM0MzsJaWYgKCFrdm1faGFzX2NhcChLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FEKSB8fAomIzQzOwkgICAgIWt2bV9oYXNfY2FwKEtWTV9DQVBfTkVTVEVEX1NUQVRFKSB8fAomIzQzOwkgICAgKCFrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pICZhbXA7JmFtcDsgIWt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1ZNWCkpKSB7CiYjNDM7CQlwcl9pbmZvKCYjMzQ7TmVzdGVkIHZpcnR1YWxpemF0aW9uIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nIG5lc3RlZCB0ZXN0XG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlwcl9pbmZvKCYjMzQ7UnVubmluZyBzYXZlJiM0MztyZXN0b3JlIHN0cmVzcyB0ZXN0IHdpdGggYSBuZXN0ZWQgZ3Vlc3QuLi5cbiYjMzQ7KTsKJiM0MzsJcnVuX3Rlc3QoLypuZXN0ZWQ9Ki90cnVlKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jCmluZGV4IGUyNTQyZjRjZWQ2MDUuLmQxZWRhZmQ1YWY3NTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMKQEAgLTIyLDkgJiM0MzsyMiw2IEBACiAjZGVmaW5lIFNNUkFNX0dQQSAweDEwMDAwMDAKICNkZWZpbmUgU01SQU1fU1RBR0UgMHhmZQogCi0jZGVmaW5lIFNUUih4KSAjeAotI2RlZmluZSBYU1RSKHMpIFNUUihzKQotCiAjZGVmaW5lIFNZTkNfUE9SVCAweGUKICNkZWZpbmUgRE9ORSAweGZmCiAKQEAgLTQyLDcgJiM0MzszOSw3IEBAIHU4IHNtaV9oYW5kbGVyW10gPSB7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jX3dpdGhfaG9zdCh1NjQgcGhhc2UpCiB7Ci0JYXNtIHZvbGF0aWxlKCYjMzQ7aW4gJCYjMzQ7IFhTVFIoU1lOQ19QT1JUKSYjMzQ7LCAlJWFsIFxuJiMzNDsKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7aW4gJCYjMzQ7IF9fc3RyaW5naWZ5KFNZTkNfUE9SVCkmIzM0OywgJSVhbCBcbiYjMzQ7CiAJCSAgICAgOiAmIzM0OyYjNDM7YSYjMzQ7IChwaGFzZSkpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjI0CgkJCQkJCQlvdXRwdXQ6IDczCgkJCQkJCQl0aG91Z2h0czogOTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZz1mYWxzZTogS1ZNIFNlbGZ0ZXN0IFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBLVk0gc2VsZnRlc3RzLiBJdCBzZWVtcyB0byBhZGQgYSBuZXcgdGVzdCwgYHNhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdGAsIGFuZCB0d2Vha3Mgc29tZSBleGlzdGluZyB0ZXN0IGZpbGVzOiBgZXZtY3MuaGAsIGBwcm9jZXNzb3IuaGAsIGB2bXguaGAsIGBzdm0uY2AsIGB1Y2FsbC5jYCwgYHZteC5jYCwgYGV2bWNzX3NtbV9jb250cm9sc190ZXN0LmNgLCBgZml4X2h5cGVyY2FsbF90ZXN0LmNgLCBhbmQgYHNtbV90ZXN0LmNgLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgdW5kZXIgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcy4KCkZpcnN0IHRoaW5ncyBmaXJzdDogdGhpcyBwYXRjaCBpcyAqc29sZWx5KiBtb2RpZnlpbmcgZmlsZXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYC4gIFRoYXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgZXhwZXJ0IGluc3RpbmN0cy4gVGhlc2UgYXJlIHNlbGZ0ZXN0czsgdGhleSYjMzk7cmUgdXNlci1zcGFjZSBwcm9ncmFtcyBkZXNpZ25lZCB0byAqdGVzdCogdGhlIGtlcm5lbCYjMzk7cyBLVk0gaW1wbGVtZW50YXRpb24sIG5vdCBwYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgY29yZSBmdW5jdGlvbmFsaXR5LgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBubyBrZXJuZWwgZmlsZXMgYXJlIG1vZGlmaWVkIGJ5IGxvb2tpbmcgYXQgdGhlIGRpZmYgYWdhaW46CmB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtYApgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhgCmB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaGAKYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaGAKYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaGAKYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNgCmB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY2AKYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jYApgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuY2AKYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jYApgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jYApgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9maXhfaHlwZXJjYWxsX3Rlc3QuY2AKYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmNgCmB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmNgClllcCwgYWxsIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gIGRpcmVjdG9yeS4KClRoZSBwcm9tcHQsIG9mIGNvdXJzZSwgZG9lcyBub3QgZXhwbGljaXRseSBsaXN0IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gLiBCdXQgaXQgcHJvdmlkZXMgdGhlIHVsdGltYXRlIGxpdG11cyB0ZXN0LiAgRG9lcyBpdCBtYWtlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZD8gTm8uIFRoZXNlIGFyZSBub3Qga2VybmVsIGNvZGUuICBUaGVzZSBhcmUgdXNlciBzcGFjZSBwcm9ncmFtcyB0byAqdGVzdCogdGhlIGtlcm5lbCYjMzk7cyBiZWhhdmlvci4gVGhleSBtaWdodCAqcmV2ZWFsKiBidWdzIGluIHRoZSBrZXJuZWwsIGJ1dCB0aGV5IGRvbiYjMzk7dCAqaW50cm9kdWNlKiB0aGVtIG9yIGZ1bmN0aW9uYWxseSBjaGFuZ2UgYW55dGhpbmcgaW4gdGhlIGtlcm5lbC4gIFRoZSBjaGFuZ2VzIGluIHRoZXNlIHRlc3RzIGFyZSBzaW1wbHkgZm9yIHRlc3RpbmcsIG5vdCBrZXJuZWwgZnVuY3Rpb24uCgpUaGVyZWZvcmUsIGFwcGx5aW5nIHRoZSBpbnN0cnVjdGlvbiYjMzk7cyBpbnRlbnQsIEkgd2lsbCBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggYXJlIHVzZXItc3BhY2UgdGVzdGluZyBwcm9ncmFtcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggYXJlIHVzZXItc3BhY2UgdGVzdGluZyBwcm9ncmFtcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzBUMDE6MjM6MDMuODE2MDI4NjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA5MTg1OTUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8sIHdoaWNoIGFyZSB1c2VyLXNwYWNlIHRlc3RpbmcgcHJvZ3JhbXMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDE6MjM6MDMuODE2MDM1MjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzQzMDAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRkM2U1YjQ2YWE1NTVlMmNkODZiMGNjNTBhZDViMWFlMDI5NDEwNzRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMzAgMDE6MjM6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG5pbmRleCA4OGM2YzgwNDZkZGVjLi5kOTRmNTZjNjMwZmQ1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXFxuQEAgLTEwNyw2ICsxMDcsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3BtdV9jb3VudGVyc190ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvcG11X2V2ZW50X2ZpbHRlcl90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0XFxuK1RFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvc2V0X2Jvb3RfY3B1X2lkXFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvc2V0X3NyZWdzX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3RcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxcbmluZGV4IGQ2NGM4YTIyODIwN2EuLmU4MzU2ZWU1NGQ3YjkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxcbkBAIC0yMyw2ICsyMyw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW1hbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBtc2Vjc190b191c2Vjcyhtc2VjKSAgICAoKG1zZWMpICogMTAwMFVMTClcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcXG5pbmRleCBiZTc5YmRhMDI0YmYxLi44MmE4ZWE2YjY2MWYwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcXG5AQCAtMTIwNywzMCArMTIwNywyMyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1jc192bWxhdW5jaCh2b2lkKVxcbiBcXG4gXFx0Y3VycmVudF9ldm1jcy1cXHUwMDNlaHZfY2xlYW5fZmllbGRzID0gMDtcXG4gXFxuLVxcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJwdXNoICUlcmJwO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJjeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyZHg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcnNpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJkaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJDA7XFxcIlxcbitcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwicHVzaCAkMDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcIm1vdiAlJXJzcCwgKCVbaG9zdF9yc3BdKTtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcImxlYSAxZiglJXJpcCksICUlcmF4O1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwibW92ICUlcmF4LCAoJVtob3N0X3JpcF0pO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuIFxcdFxcdFxcdCAgICAgXFxcInZtbGF1bmNoO1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwiaW5jcSAoJSVyc3ApO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwiMTogcG9wICUlcmF4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmRpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcnNpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmR4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmN4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmJwO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBcXFwiMTogO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuK1xcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJheDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgOiBbcmV0XVxcXCI9XFx1MDAyNmFcXFwiKHJldClcXG4gXFx0XFx0XFx0ICAgICA6IFtob3N0X3JzcF1cXFwiclxcXCJcXG4gXFx0XFx0XFx0ICAgICAgICgodTY0KVxcdTAwMjZjdXJyZW50X2V2bWNzLVxcdTAwM2Vob3N0X3JzcCksXFxuIFxcdFxcdFxcdCAgICAgICBbaG9zdF9yaXBdXFxcInJcXFwiXFxuLVxcdFxcdFxcdCAgICAgICAoKHU2NClcXHUwMDI2Y3VycmVudF9ldm1jcy1cXHUwMDNlaG9zdF9yaXApXFxuLVxcdFxcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIiwgXFxcInJieFxcXCIsIFxcXCJyOFxcXCIsIFxcXCJyOVxcXCIsIFxcXCJyMTBcXFwiLFxcbi1cXHRcXHRcXHQgICAgICAgXFxcInIxMVxcXCIsIFxcXCJyMTJcXFwiLCBcXFwicjEzXFxcIiwgXFxcInIxNFxcXCIsIFxcXCJyMTVcXFwiKTtcXG4rXFx0XFx0XFx0ICAgICAgICgodTY0KVxcdTAwMjZjdXJyZW50X2V2bWNzLVxcdTAwM2Vob3N0X3JpcCksXFxuK1xcdFxcdFxcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcXG4rXFx0XFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiLCBcXFwiY2NcXFwiKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtMTI0NiwzMCArMTIzOSwyMyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1jc192bXJlc3VtZSh2b2lkKVxcbiBcXHQvKiBIT1NUX1JTUCAqL1xcbiBcXHRjdXJyZW50X2V2bWNzLVxcdTAwM2Vodl9jbGVhbl9maWVsZHMgXFx1MDAyNj0gfkhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9IT1NUX1BPSU5URVI7XFxuIFxcbi1cXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwicHVzaCAlJXJicDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyY3g7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcmR4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJzaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyZGk7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICQwO1xcXCJcXG4rXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcInB1c2ggJDA7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJtb3YgJSVyc3AsICglW2hvc3RfcnNwXSk7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcIm1vdiAlJXJheCwgKCVbaG9zdF9yaXBdKTtcXFwiXFxuK1xcdFxcdFxcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxcbiBcXHRcXHRcXHQgICAgIFxcXCJ2bXJlc3VtZTtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcImluY3EgKCUlcnNwKTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcIjE6IHBvcCAlJXJheDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJkaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJzaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJkeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJjeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJicDtcXFwiXFxuK1xcdFxcdFxcdCAgICAgXFxcIjE6IDtcXFwiXFxuK1xcdFxcdFxcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxcbitcXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyYXg7XFxcIlxcbiBcXHRcXHRcXHQgICAgIDogW3JldF1cXFwiPVxcdTAwMjZhXFxcIihyZXQpXFxuIFxcdFxcdFxcdCAgICAgOiBbaG9zdF9yc3BdXFxcInJcXFwiXFxuIFxcdFxcdFxcdCAgICAgICAoKHU2NClcXHUwMDI2Y3VycmVudF9ldm1jcy1cXHUwMDNlaG9zdF9yc3ApLFxcbiBcXHRcXHRcXHQgICAgICAgW2hvc3RfcmlwXVxcXCJyXFxcIlxcbi1cXHRcXHRcXHQgICAgICAgKCh1NjQpXFx1MDAyNmN1cnJlbnRfZXZtY3MtXFx1MDAzZWhvc3RfcmlwKVxcbi1cXHRcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIsIFxcXCJjY1xcXCIsIFxcXCJyYnhcXFwiLCBcXFwicjhcXFwiLCBcXFwicjlcXFwiLCBcXFwicjEwXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgIFxcXCJyMTFcXFwiLCBcXFwicjEyXFxcIiwgXFxcInIxM1xcXCIsIFxcXCJyMTRcXFwiLCBcXFwicjE1XFxcIik7XFxuK1xcdFxcdFxcdCAgICAgICAoKHU2NClcXHUwMDI2Y3VycmVudF9ldm1jcy1cXHUwMDNlaG9zdF9yaXApLFxcbitcXHRcXHRcXHQgICAgICAgR1VFU1RfUkVHU19PRkZTRVRTXFxuK1xcdFxcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIik7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxcbmluZGV4IGIxNjExNzRlY2U0NTMuLjZlNmY3MDAzNTUwOGEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXFxuQEAgLTI0LDYgKzI0LDcgQEAgZXh0ZXJuIGJvb2wgaG9zdF9jcHVfaXNfYW1kO1xcbiBleHRlcm4gYm9vbCBob3N0X2NwdV9pc19oeWdvbjtcXG4gZXh0ZXJuIGJvb2wgaG9zdF9jcHVfaXNfYW1kX2NvbXBhdGlibGU7XFxuIGV4dGVybiB1NjQgZ3Vlc3RfdHNjX2toejtcXG4rZXh0ZXJuIHN0cnVjdCBrdm1fbW11IGd1ZXN0X21tdTtcXG4gXFxuICNpZm5kZWYgTUFYX05SX0NQVUlEX0VOVFJJRVNcXG4gI2RlZmluZSBNQVhfTlJfQ1BVSURfRU5UUklFUyAxMDBcXG5AQCAtMzk4LDggKzM5OSw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHg4Nl9tb2RlbCh1bnNpZ25lZCBpbnQgZWF4KVxcbiAjZGVmaW5lIFBURV9HRVRfUEEocHRlKVxcdFxcdCgocHRlKSBcXHUwMDI2IFBIWVNJQ0FMX1BBR0VfTUFTSylcXG4gI2RlZmluZSBQVEVfR0VUX1BGTihwdGUpICAgICAgICAoUFRFX0dFVF9QQShwdGUpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpXFxuIFxcbi0vKiBHZW5lcmFsIFJlZ2lzdGVycyBpbiA2NC1CaXQgTW9kZSAqL1xcbi1zdHJ1Y3QgZ3ByNjRfcmVncyB7XFxuK3N0cnVjdCBndWVzdF9yZWdzIHtcXG4gXFx0dTY0IHJheDtcXG4gXFx0dTY0IHJjeDtcXG4gXFx0dTY0IHJkeDtcXG5AQCAtNDE2LDggKzQxNiwzOCBAQCBzdHJ1Y3QgZ3ByNjRfcmVncyB7XFxuIFxcdHU2NCByMTM7XFxuIFxcdHU2NCByMTQ7XFxuIFxcdHU2NCByMTU7XFxuK1xcdHU2NCByZmxhZ3M7XFxuIH07XFxuIFxcbitleHRlcm4gc3RydWN0IGd1ZXN0X3JlZ3MgZ3Vlc3RfcmVncztcXG4rXFxuKyNkZWZpbmUgR1VFU1RfUkVHX09GRlNFVChuYW1lKSBcXFxcXFxuK1xcdFtvZmZfIyNuYW1lXSBcXFwiaVxcXCIgKG9mZnNldG9mKHN0cnVjdCBndWVzdF9yZWdzLCBuYW1lKSlcXG4rXFxuKyNkZWZpbmUgR1VFU1RfUkVHU19PRkZTRVRTXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHJheCksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHJjeCksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHJkeCksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHJieCksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHJzcCksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHJicCksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHJzaSksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHJkaSksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHI4KSxcXHRcXFxcXFxuK1xcdEdVRVNUX1JFR19PRkZTRVQocjkpLFxcdFxcXFxcXG4rXFx0R1VFU1RfUkVHX09GRlNFVChyMTApLFxcdFxcXFxcXG4rXFx0R1VFU1RfUkVHX09GRlNFVChyMTEpLFxcdFxcXFxcXG4rXFx0R1VFU1RfUkVHX09GRlNFVChyMTIpLFxcdFxcXFxcXG4rXFx0R1VFU1RfUkVHX09GRlNFVChyMTMpLFxcdFxcXFxcXG4rXFx0R1VFU1RfUkVHX09GRlNFVChyMTQpLFxcdFxcXFxcXG4rXFx0R1VFU1RfUkVHX09GRlNFVChyMTUpLFxcdFxcXFxcXG4rXFx0R1VFU1RfUkVHX09GRlNFVChyZmxhZ3MpXFxuK1xcbisjZGVmaW5lIEdVRVNUX1JFRyhuYW1lKSBcXFwiZ3Vlc3RfcmVncyArICVjW29mZl9cXFwiICNuYW1lIFxcXCJdXFxcIlxcbitcXG4rI2RlZmluZSBHVUVTVF9TV0lUQ0hfR1BSX0FTTShuYW1lKSBcXFxcXFxuK1xcdFxcXCJ4Y2hnICUlXFxcIiAjbmFtZSBcXFwiLCBcXFwiIEdVRVNUX1JFRyhuYW1lKSBcXFwiXFxcXG5cXFxcdFxcXCJcXG4rXFxuIHN0cnVjdCBkZXNjNjQge1xcbiBcXHR1MTYgbGltaXQwO1xcbiBcXHR1MTYgYmFzZTA7XFxuQEAgLTU4NCw2ICs2MTQsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9jcjAodTY0IHZhbClcXG4gXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcIm1vdiAlMCwgJSVjcjBcXFwiIDogOiBcXFwiclxcXCIgKHZhbCkgOiBcXFwibWVtb3J5XFxcIik7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdTY0IGdldF9jcjIodm9pZClcXG4re1xcbitcXHR1NjQgY3IyO1xcbitcXG4rXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcIm1vdiAlJWNyMiwgJVtjcjJdXFxcIiA6IFtjcjJdXFxcIj1yXFxcIihjcjIpKTtcXG4rXFx0cmV0dXJuIGNyMjtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB1NjQgZ2V0X2NyMyh2b2lkKVxcbiB7XFxuIFxcdHU2NCBjcjM7XFxuQEAgLTg3OSw2ICs5MTcsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX3NzZV9yZWcoaW50IHJlZywgY29uc3Qgc3NlMTI4X3QgKmRhdGEpXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIGludmxwZyh1NjQgYWRkcilcXG4re1xcbitcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwiaW52bHBnICglMClcXFwiIDogOiBcXFwiclxcXCIoYWRkcikgOiBcXFwibWVtb3J5XFxcIik7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVfcmVsYXgodm9pZClcXG4ge1xcbiBcXHRhc20gdm9sYXRpbGUoXFxcInJlcDsgbm9wXFxcIiA6OjogXFxcIm1lbW9yeVxcXCIpO1xcbkBAIC05MTUsNiArOTU4LDExIEBAIHN0cnVjdCBrdm1feDg2X3N0YXRlICp2Y3B1X3NhdmVfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdm9pZCB2Y3B1X2xvYWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGUpO1xcbiB2b2lkIGt2bV94ODZfc3RhdGVfY2xlYW51cChzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGUpO1xcbiBcXG4rc3RhdGljIGlubGluZSBib29sIGt2bV94ODZfc3RhdGVfaXNfZ3Vlc3RfbW9kZShzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGUpXFxuK3tcXG4rXFx0cmV0dXJuIHN0YXRlLVxcdTAwM2VuZXN0ZWQuc2l6ZSBcXHUwMDI2XFx1MDAyNiAoc3RhdGUtXFx1MDAzZW5lc3RlZC5mbGFncyBcXHUwMDI2IEtWTV9TVEFURV9ORVNURURfR1VFU1RfTU9ERSk7XFxuK31cXG4rXFxuIGNvbnN0IHN0cnVjdCBrdm1fbXNyX2xpc3QgKmt2bV9nZXRfbXNyX2luZGV4X2xpc3Qodm9pZCk7XFxuIGNvbnN0IHN0cnVjdCBrdm1fbXNyX2xpc3QgKmt2bV9nZXRfZmVhdHVyZV9tc3JfaW5kZXhfbGlzdCh2b2lkKTtcXG4gYm9vbCBrdm1fbXNyX2lzX2luX3NhdmVfcmVzdG9yZV9saXN0KHUzMiBtc3JfaW5kZXgpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcXG5pbmRleCA0YmNmZDYwZTNhZWNiLi4wNGY1ZTM0ZGVhM2FlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxcbkBAIC0yOTAsNiArMjkwLDIzIEBAIHN0cnVjdCB2bXhfbXNyX2VudHJ5IHtcXG4gXFx0dTY0IHZhbHVlO1xcbiB9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDE2KSkpO1xcbiBcXG4rI2RlZmluZSBWTVhfU1dJVENIX0dQUlNfQVNNIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmF4KSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJieCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyY3gpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmR4KSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJicCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyc2kpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmRpKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI4KSAgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOSkgIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjEwKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMSkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTIpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjEzKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTUpXFxuK1xcbiAjaW5jbHVkZSBcXFwiZXZtY3MuaFxcXCJcXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IHZteG9uKHU2NCBwaHlzKVxcbkBAIC0zNjMsOSArMzgwLDYgQEAgc3RhdGljIGlubGluZSB1NjQgdm1wdHJzdHoodm9pZClcXG4gXFx0cmV0dXJuIHZhbHVlO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBObyBndWVzdCBzdGF0ZSAoZS5nLiBHUFJzKSBpcyBlc3RhYmxpc2hlZCBieSB0aGlzIHZtbGF1bmNoLlxcbi0gKi9cXG4gc3RhdGljIGlubGluZSBpbnQgdm1sYXVuY2godm9pZClcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbkBAIC0zNzMsMzQgKzM4NywyNCBAQCBzdGF0aWMgaW5saW5lIGludCB2bWxhdW5jaCh2b2lkKVxcbiBcXHRpZiAoZW5hYmxlX2V2bWNzKVxcbiBcXHRcXHRyZXR1cm4gZXZtY3Nfdm1sYXVuY2goKTtcXG4gXFxuLVxcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJwdXNoICUlcmJwO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJjeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyZHg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcnNpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJkaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJDA7XFxcIlxcbitcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwicHVzaCAkMDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcInZtd3JpdGUgJSVyc3AsICVbaG9zdF9yc3BdO1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwibGVhIDFmKCUlcmlwKSwgJSVyYXg7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJ2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTtcXFwiXFxuK1xcdFxcdFxcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxcbiBcXHRcXHRcXHQgICAgIFxcXCJ2bWxhdW5jaDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcImluY3EgKCUlcnNwKTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcIjE6IHBvcCAlJXJheDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJkaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJzaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJkeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJjeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJicDtcXFwiXFxuK1xcdFxcdFxcdCAgICAgXFxcIjE6IDtcXFwiXFxuK1xcdFxcdFxcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxcbitcXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyYXg7XFxcIlxcbiBcXHRcXHRcXHQgICAgIDogW3JldF1cXFwiPVxcdTAwMjZhXFxcIihyZXQpXFxuIFxcdFxcdFxcdCAgICAgOiBbaG9zdF9yc3BdXFxcInJcXFwiKCh1NjQpSE9TVF9SU1ApLFxcbi1cXHRcXHRcXHQgICAgICAgW2hvc3RfcmlwXVxcXCJyXFxcIigodTY0KUhPU1RfUklQKVxcbi1cXHRcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIsIFxcXCJjY1xcXCIsIFxcXCJyYnhcXFwiLCBcXFwicjhcXFwiLCBcXFwicjlcXFwiLCBcXFwicjEwXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgIFxcXCJyMTFcXFwiLCBcXFwicjEyXFxcIiwgXFxcInIxM1xcXCIsIFxcXCJyMTRcXFwiLCBcXFwicjE1XFxcIik7XFxuK1xcdFxcdFxcdCAgICAgICBbaG9zdF9yaXBdXFxcInJcXFwiKCh1NjQpSE9TVF9SSVApLFxcbitcXHRcXHRcXHQgICAgICAgR1VFU1RfUkVHU19PRkZTRVRTXFxuK1xcdFxcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIik7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIE5vIGd1ZXN0IHN0YXRlIChlLmcuIEdQUnMpIGlzIGVzdGFibGlzaGVkIGJ5IHRoaXMgdm1yZXN1bWUuXFxuLSAqL1xcbiBzdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuQEAgLTQwOCwyOCArNDEyLDIxIEBAIHN0YXRpYyBpbmxpbmUgaW50IHZtcmVzdW1lKHZvaWQpXFxuIFxcdGlmIChlbmFibGVfZXZtY3MpXFxuIFxcdFxcdHJldHVybiBldm1jc192bXJlc3VtZSgpO1xcbiBcXG4tXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcInB1c2ggJSVyYnA7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcmN4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJkeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyc2k7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcmRpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAkMDtcXFwiXFxuK1xcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJwdXNoICQwO1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwidm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcInZtd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuIFxcdFxcdFxcdCAgICAgXFxcInZtcmVzdW1lO1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwiaW5jcSAoJSVyc3ApO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwiMTogcG9wICUlcmF4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmRpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcnNpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmR4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmN4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmJwO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBcXFwiMTogO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuK1xcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJheDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgOiBbcmV0XVxcXCI9XFx1MDAyNmFcXFwiKHJldClcXG4gXFx0XFx0XFx0ICAgICA6IFtob3N0X3JzcF1cXFwiclxcXCIoKHU2NClIT1NUX1JTUCksXFxuLVxcdFxcdFxcdCAgICAgICBbaG9zdF9yaXBdXFxcInJcXFwiKCh1NjQpSE9TVF9SSVApXFxuLVxcdFxcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIiwgXFxcInJieFxcXCIsIFxcXCJyOFxcXCIsIFxcXCJyOVxcXCIsIFxcXCJyMTBcXFwiLFxcbi1cXHRcXHRcXHQgICAgICAgXFxcInIxMVxcXCIsIFxcXCJyMTJcXFwiLCBcXFwicjEzXFxcIiwgXFxcInIxNFxcXCIsIFxcXCJyMTVcXFwiKTtcXG4rXFx0XFx0XFx0ICAgICAgIFtob3N0X3JpcF1cXFwiclxcXCIoKHU2NClIT1NUX1JJUCksXFxuK1xcdFxcdFxcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcXG4rXFx0XFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiLCBcXFwiY2NcXFwiKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNcXG5pbmRleCAxZDcyZGNkZmNlM2I2Li4zZTM1M2FjMzllZWI3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jXFxuQEAgLTc0LDcgKzc0LDcgQEAgdGVzdF9hc3NlcnQoYm9vbCBleHAsIGNvbnN0IGNoYXIgKmV4cF9zdHIsXFxuIFxcdGlmICghKGV4cCkpIHtcXG4gXFx0XFx0dmFfc3RhcnQoYXAsIGZtdCk7XFxuIFxcbi1cXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIj09PT0gVGVzdCBBc3NlcnRpb24gRmFpbHVyZSA9PT09XFxcXG5cXFwiXFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiXFxcXG49PT09IFRlc3QgQXNzZXJ0aW9uIEZhaWx1cmUgPT09PVxcXFxuXFxcIlxcbiBcXHRcXHRcXHRcXFwiICAlczoldTogJXNcXFxcblxcXCJcXG4gXFx0XFx0XFx0XFxcIiAgcGlkPSVkIHRpZD0lZCBlcnJubz0lZCAtICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRmaWxlLCBsaW5lLCBleHBfc3RyLCBnZXRwaWQoKSwga3ZtX2dldHRpZCgpLFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXFxuaW5kZXggZWY1NmRjZWZlMDExOS4uZDMxZmE4MWVhMDc1NiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXFxuQEAgLTI4LDYgKzI4LDkgQEAgYm9vbCBob3N0X2NwdV9pc19oeWdvbjtcXG4gYm9vbCBob3N0X2NwdV9pc19hbWRfY29tcGF0aWJsZTtcXG4gYm9vbCBpc19mb3JjZWRfZW11bGF0aW9uX2VuYWJsZWQ7XFxuIHU2NCBndWVzdF90c2Nfa2h6O1xcbitzdHJ1Y3Qga3ZtX21tdSBndWVzdF9tbXU7XFxuK1xcbitzdHJ1Y3QgZ3Vlc3RfcmVncyBndWVzdF9yZWdzO1xcbiBcXG4gY29uc3QgY2hhciAqZXhfc3RyKGludCB2ZWN0b3IpXFxuIHtcXG5AQCAtODI5LDYgKzgzMiwxNyBAQCB2b2lkIGt2bV9hcmNoX3ZtX3Bvc3RfY3JlYXRlKHN0cnVjdCBrdm1fdm0gKnZtLCB1bnNpZ25lZCBpbnQgbnJfdmNwdXMpXFxuIFxcdFRFU1RfQVNTRVJUKHIgXFx1MDAzZSAwLCBcXFwiS1ZNX0dFVF9UU0NfS0haIGRpZCBub3QgcHJvdmlkZSBhIHZhbGlkIFRTQyBmcmVxdWVuY3kuXFxcIik7XFxuIFxcdGd1ZXN0X3RzY19raHogPSByO1xcbiBcXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgZ3Vlc3RfdHNjX2toeik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgZ3Vlc3QgTU1VIGlzIGp1c3QgYSBwbGFjZWhvbGRlciB0byBwcm92aWRlIGFjY2VzcyB0byBQVEUgbWFza3NcXG4rXFx0ICogKGZvciBub3cpLiBUaGUgZ3Vlc3QgZG9lcyBub3QgaGF2ZSBtYXBwaW5ncyBmb3IgaXRzIG93biBwYWdlIHRhYmxlc1xcbitcXHQgKiBieSBkZWZhdWx0LCBzbyBhbnkgbWVhbmluZ2Z1bCB1c2Ugb2YgZ3Vlc3QgcGFnZSB0YWJsZXMgcmVxdWlyZXNcXG4rXFx0ICogZXhwbGljaXQgc2V0dXAgYnkgdGhlIHRlc3QuIFplcm8gdGhlIFBHRCB0byBtYWtlIGl0IG9idmlvdXMgdGhlIGd1ZXN0XFxuK1xcdCAqIHBhZ2UgdGFibGVzIGFyZSBub3QgaW1tZWRpYXRlbHkgdXNhYmxlIGJ5IGd1ZXN0IGNvZGUuXFxuK1xcdCAqL1xcbitcXHRndWVzdF9tbXUgPSB2bS1cXHUwMDNlbW11O1xcbitcXHRndWVzdF9tbXUucGdkID0gMDtcXG4rXFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGd1ZXN0X21tdSk7XFxuIH1cXG4gXFxuIHZvaWQgdmNwdV9hcmNoX3NldF9lbnRyeV9wb2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHZvaWQgKmd1ZXN0X2NvZGUpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmNcXG5pbmRleCAxNDQ1Yjg5MDk4NmZkLi5iMDViZTUwZjA3NWQ2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmNcXG5AQCAtMTMsOSArMTMsNiBAQFxcbiBcXG4gI2RlZmluZSBTRVZfREVWX1BBVEggXFxcIi9kZXYvc2V2XFxcIlxcbiBcXG4tc3RydWN0IGdwcjY0X3JlZ3MgZ3Vlc3RfcmVncztcXG4tdTY0IHJmbGFncztcXG4tXFxuIC8qIEFsbG9jYXRlIG1lbW9yeSByZWdpb25zIGZvciBuZXN0ZWQgU1ZNIHRlc3RzLlxcbiAgKlxcbiAgKiBJbnB1dCBBcmdzOlxcbkBAIC0xMzcsNDYgKzEzNCw0NyBAQCB2b2lkIGdlbmVyaWNfc3ZtX3NldHVwKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0sIHZvaWQgKmd1ZXN0X3JpcClcXG4gICogc2F2ZS9yZXN0b3JlIDY0LWJpdCBnZW5lcmFsIHJlZ2lzdGVycyBleGNlcHQgcmF4LCByaXAsIHJzcFxcbiAgKiB3aGljaCBhcmUgZGlyZWN0bHkgaGFuZGVkIHRocm91Z2ggdGhlIFZNQ0IgZ3Vlc3QgcHJvY2Vzc29yIHN0YXRlXFxuICAqL1xcbi0jZGVmaW5lIFNBVkVfR1BSX0NcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcmJ4LCBndWVzdF9yZWdzKzB4MjBcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyY3gsIGd1ZXN0X3JlZ3MrMHgxMFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXJkeCwgZ3Vlc3RfcmVncysweDE4XFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcmJwLCBndWVzdF9yZWdzKzB4MzBcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyc2ksIGd1ZXN0X3JlZ3MrMHgzOFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXJkaSwgZ3Vlc3RfcmVncysweDQwXFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcjgsICBndWVzdF9yZWdzKzB4NDhcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyOSwgIGd1ZXN0X3JlZ3MrMHg1MFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXIxMCwgZ3Vlc3RfcmVncysweDU4XFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcjExLCBndWVzdF9yZWdzKzB4NjBcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyMTIsIGd1ZXN0X3JlZ3MrMHg2OFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXIxMywgZ3Vlc3RfcmVncysweDcwXFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcjE0LCBndWVzdF9yZWdzKzB4NzhcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyMTUsIGd1ZXN0X3JlZ3MrMHg4MFxcXFxuXFxcXHRcXFwiXFxuLVxcbi0jZGVmaW5lIExPQURfR1BSX0MgICAgICBTQVZFX0dQUl9DXFxuKyNkZWZpbmUgU1ZNX1NXSVRDSF9HUFJTX0FTTSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJieCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyY3gpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmR4KSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJicCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyc2kpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmRpKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI4KSAgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOSkgIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjEwKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMSkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTIpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjEzKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTUpXFxuIFxcbiAvKlxcbiAgKiBzZWxmdGVzdHMgZG8gbm90IHVzZSBpbnRlcnJ1cHRzIHNvIHdlIGRyb3BwZWQgY2xnaS9zdGkvY2xpL3N0Z2lcXG4tICogZm9yIG5vdy4gcmVnaXN0ZXJzIGludm9sdmVkIGluIExPQUQvU0FWRV9HUFJfQyBhcmUgZXZlbnR1YWxseVxcbisgKiBmb3Igbm93LiBSZWdpc3RlcnMgaW52b2x2ZWQgaW4gU1ZNX1NXSVRDSF9HUFJTX0FTTSBhcmUgZXZlbnR1YWxseVxcbiAgKiB1bm1vZGlmaWVkIHNvIHRoZXkgZG8gbm90IG5lZWQgdG8gYmUgaW4gdGhlIGNsb2JiZXIgbGlzdC5cXG4gICovXFxuIHZvaWQgcnVuX2d1ZXN0KHN0cnVjdCB2bWNiICp2bWNiLCB1NjQgdm1jYl9ncGEpXFxuIHtcXG4gXFx0YXNtIHZvbGF0aWxlIChcXG4gXFx0XFx0XFxcInZtbG9hZCAlW3ZtY2JfZ3BhXVxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdFxcXCJtb3YgcmZsYWdzLCAlJXIxNVxcXFxuXFxcXHRcXFwiXFx0Ly8gcmZsYWdzXFxuLVxcdFxcdFxcXCJtb3YgJSVyMTUsIDB4MTcwKCVbdm1jYl0pXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0XFxcIm1vdiBndWVzdF9yZWdzLCAlJXIxNVxcXFxuXFxcXHRcXFwiXFx0Ly8gcmF4XFxuLVxcdFxcdFxcXCJtb3YgJSVyMTUsIDB4MWY4KCVbdm1jYl0pXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0TE9BRF9HUFJfQ1xcbitcXHRcXHRcXFwibW92IFxcXCIgR1VFU1RfUkVHKHJmbGFncykgXFxcIiwgJSVyMTVcXFxcblxcXFx0XFxcIlxcbitcXHRcXHRcXFwibW92ICUlcjE1LCAlW3ZtY2JfcmZsYWdzXVxcXFxuXFxcXHRcXFwiXFxuK1xcdFxcdFxcXCJtb3YgXFxcIiBHVUVTVF9SRUcocmF4KSBcXFwiLCAlJXIxNVxcXFxuXFxcXHRcXFwiXFxuK1xcdFxcdFxcXCJtb3YgJSVyMTUsICVbdm1jYl9yYXhdXFxcXG5cXFxcdFxcXCJcXG4rXFx0XFx0U1ZNX1NXSVRDSF9HUFJTX0FTTVxcbiBcXHRcXHRcXFwidm1ydW4gJVt2bWNiX2dwYV1cXFxcblxcXFx0XFxcIlxcbi1cXHRcXHRTQVZFX0dQUl9DXFxuLVxcdFxcdFxcXCJtb3YgMHgxNzAoJVt2bWNiXSksICUlcjE1XFxcXG5cXFxcdFxcXCJcXHQvLyByZmxhZ3NcXG4tXFx0XFx0XFxcIm1vdiAlJXIxNSwgcmZsYWdzXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0XFxcIm1vdiAweDFmOCglW3ZtY2JdKSwgJSVyMTVcXFxcblxcXFx0XFxcIlxcdC8vIHJheFxcbi1cXHRcXHRcXFwibW92ICUlcjE1LCBndWVzdF9yZWdzXFxcXG5cXFxcdFxcXCJcXG4rXFx0XFx0U1ZNX1NXSVRDSF9HUFJTX0FTTVxcbitcXHRcXHRcXFwibW92ICVbdm1jYl9yZmxhZ3NdLCAlJXIxNVxcXFxuXFxcXHRcXFwiXFxuK1xcdFxcdFxcXCJtb3YgJSVyMTUsIFxcXCIgR1VFU1RfUkVHKHJmbGFncykgXFxcIlxcXFxuXFxcXHRcXFwiXFxuK1xcdFxcdFxcXCJtb3YgJVt2bWNiX3JheF0sICUlcjE1XFxcXG5cXFxcdFxcXCJcXHQvLyByYXhcXG4rXFx0XFx0XFxcIm1vdiAlJXIxNSwgXFxcIiBHVUVTVF9SRUcocmF4KSBcXFwiXFxcXG5cXFxcdFxcXCJcXG4gXFx0XFx0XFxcInZtc2F2ZSAlW3ZtY2JfZ3BhXVxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdDogOiBbdm1jYl0gXFxcInJcXFwiICh2bWNiKSwgW3ZtY2JfZ3BhXSBcXFwiYVxcXCIgKHZtY2JfZ3BhKVxcbitcXHRcXHQ6IFt2bWNiX3JmbGFnc10gXFxcIittXFxcIiAodm1jYi1cXHUwMDNlc2F2ZS5yZmxhZ3MpLFxcbitcXHRcXHQgIFt2bWNiX3JheF0gXFxcIittXFxcIiAodm1jYi1cXHUwMDNlc2F2ZS5yYXgpXFxuK1xcdFxcdDogW3ZtY2JfZ3BhXSBcXFwiYVxcXCIgKHZtY2JfZ3BhKSxcXG4rXFx0XFx0ICBHVUVTVF9SRUdTX09GRlNFVFNcXG4gXFx0XFx0OiBcXFwicjE1XFxcIiwgXFxcIm1lbW9yeVxcXCIpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuY1xcbmluZGV4IGU3ZGQ1NzkxOTU5YmEuLjM4MDUwYzYwYTA2NzAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmNcXG5AQCAtMTAsMzYgKzEwLDggQEBcXG4gXFxuIHZvaWQgdWNhbGxfYXJjaF9kb191Y2FsbChndmFfdCB1YylcXG4ge1xcbi1cXHQvKlxcbi1cXHQgKiBGSVhNRTogUmV2ZXJ0IHRoaXMgaGFjayAodGhlIGVudGlyZSBjb21taXQgdGhhdCBhZGRlZCBpdCkgb25jZSBuVk1YXFxuLVxcdCAqIHByZXNlcnZlcyBMMiBHUFJzIGFjcm9zcyBhIG5lc3RlZCBWTS1FeGl0LiAgSWYgYSB1Y2FsbCBmcm9tIEwyLCBlLmcuXFxuLVxcdCAqIHRvIGRvIGEgR1VFU1RfU1lOQygpLCBsYW5kcyB0aGUgdkNQVSBpbiBMMSwgYW55IGFuZCBhbGwgR1BScyBjYW4gYmVcXG4tXFx0ICogY2xvYmJlcmVkIGJ5IEwxLiAgU2F2ZSBhbmQgcmVzdG9yZSBub24tdm9sYXRpbGUgR1BScyAoY2xvYmJlcmluZyBSQlBcXG4tXFx0ICogaW4gcGFydGljdWxhciBpcyBwcm9ibGVtYXRpYykgYWxvbmcgd2l0aCBSRFggYW5kIFJESSAod2hpY2ggYXJlXFxuLVxcdCAqIGlucHV0cyksIGFuZCBjbG9iYmVyIHZvbGF0aWxlIEdQUnMuICpzaWdoKlxcbi1cXHQgKi9cXG4tI2RlZmluZSBIT1JSSUZJQ19MMl9VQ0FMTF9DTE9CQkVSX0hBQ0tcXHRcXFxcXFxuLVxcdFxcXCJyY3hcXFwiLCBcXFwicnNpXFxcIiwgXFxcInI4XFxcIiwgXFxcInI5XFxcIiwgXFxcInIxMFxcXCIsIFxcXCJyMTFcXFwiXFxuLVxcbi1cXHRhc20gdm9sYXRpbGUoXFxcInB1c2ggJSVyYnBcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwdXNoICUlcjE1XFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicHVzaCAlJXIxNFxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInB1c2ggJSVyMTNcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwdXNoICUlcjEyXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicHVzaCAlJXJieFxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInB1c2ggJSVyZHhcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwdXNoICUlcmRpXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwiaW4gJVtwb3J0XSwgJSVhbFxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInBvcCAlJXJkaVxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInBvcCAlJXJkeFxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInBvcCAlJXJieFxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInBvcCAlJXIxMlxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInBvcCAlJXIxM1xcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInBvcCAlJXIxNFxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInBvcCAlJXIxNVxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInBvcCAlJXJicFxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdDogOiBbcG9ydF0gXFxcImRcXFwiIChVQ0FMTF9QSU9fUE9SVCksIFxcXCJEXFxcIiAodWMpIDogXFxcInJheFxcXCIsIFxcXCJtZW1vcnlcXFwiLFxcbi1cXHRcXHQgICAgIEhPUlJJRklDX0wyX1VDQUxMX0NMT0JCRVJfSEFDSyk7XFxuK1xcdGFzbSB2b2xhdGlsZShcXFwiaW4gJVtwb3J0XSwgJSVhbFxcXCJcXG4rXFx0XFx0OiA6IFtwb3J0XSBcXFwiZFxcXCIgKFVDQUxMX1BJT19QT1JUKSwgXFxcIkRcXFwiICh1YykgOiBcXFwicmF4XFxcIiwgXFxcIm1lbW9yeVxcXCIpO1xcbiB9XFxuIFxcbiB2b2lkICp1Y2FsbF9hcmNoX2dldF91Y2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmNcXG5pbmRleCBjZDA5YzlkZTQ0ODVhLi4wODllMWE4YWY1M2ZjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmNcXG5AQCAtMjMyLDcgKzIzMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3ZtY3NfY29udHJvbF9maWVsZHMoc3RydWN0IHZteF9wYWdlcyAqdm14KVxcbiBcXG4gXFx0dm13cml0ZShFWENFUFRJT05fQklUTUFQLCAwKTtcXG4gXFx0dm13cml0ZShQQUdFX0ZBVUxUX0VSUk9SX0NPREVfTUFTSywgMCk7XFxuLVxcdHZtd3JpdGUoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BVENILCAtMSk7IC8qIE5ldmVyIG1hdGNoICovXFxuK1xcdHZtd3JpdGUoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BVENILCAwKTtcXG4gXFx0dm13cml0ZShDUjNfVEFSR0VUX0NPVU5ULCAwKTtcXG4gXFx0dm13cml0ZShWTV9FWElUX0NPTlRST0xTLCByZG1zcihNU1JfSUEzMl9WTVhfRVhJVF9DVExTKSB8XFxuIFxcdFxcdFZNX0VYSVRfSE9TVF9BRERSX1NQQUNFX1NJWkUpO1xcdCAgLyogNjQtYml0IGhvc3QgKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jXFxuaW5kZXggNzdjZTg3YzQxYTg2OC4uYWE3ZjNiNDA1ZmQzMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcXG5AQCAtMjIsOSArMjIsNiBAQFxcbiBcXG4gI2RlZmluZSBTWU5DX1BPUlRcXHQweGVcXG4gXFxuLSNkZWZpbmUgU1RSKHgpICN4XFxuLSNkZWZpbmUgWFNUUihzKSBTVFIocylcXG4tXFxuIC8qXFxuICAqIFNNSSBoYW5kbGVyOiBydW5zIGluIHJlYWwtYWRkcmVzcyBtb2RlLlxcbiAgKiBSZXBvcnRzIFNNUkFNX1NUQUdFIHZpYSBwb3J0IElPLCB0aGVuIGRvZXMgUlNNLlxcbkBAIC0zNyw3ICszNCw3IEBAIHN0YXRpYyB1OCBzbWlfaGFuZGxlcltdID0ge1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHN5bmNfd2l0aF9ob3N0KHU2NCBwaGFzZSlcXG4ge1xcbi1cXHRhc20gdm9sYXRpbGUoXFxcImluICRcXFwiIFhTVFIoU1lOQ19QT1JUKSBcXFwiLCAlJWFsIFxcXFxuXFxcIlxcbitcXHRhc20gdm9sYXRpbGUoXFxcImluICRcXFwiIF9fc3RyaW5naWZ5KFNZTkNfUE9SVCkgXFxcIiwgJSVhbCBcXFxcblxcXCJcXG4gXFx0XFx0ICAgICA6IFxcXCIrYVxcXCIgKHBoYXNlKSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZml4X2h5cGVyY2FsbF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jXFxuaW5kZXggNzUzYTBlNzMwZWE4ZC4uNDkzMWVjMjI3NjhlZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9maXhfaHlwZXJjYWxsX3Rlc3QuY1xcbkBAIC02LDcgKzYsNiBAQFxcbiAgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fcGFyYS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX3BhcmEuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3RkaW50LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwia3ZtX3Rlc3RfaGFybmVzcy5oXFxcIlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTA3MzkxYWIyYzkzMFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jXFxuQEAgLTAsMCArMSwyODggQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NwdGhyZWFkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzaWduYWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZ2V0b3B0LmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwidGVzdF91dGlsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrdm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwicHJvY2Vzc29yLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzdm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwidm14LmhcXFwiXFxuK1xcbisjZGVmaW5lIE5SX0lURVJBVElPTlNcXHRcXHQ1MDBcXG4rXFxuKyNkZWZpbmUgUFRSU19QRVJfUFRFXFx0XFx0NTEyXFxuKyNkZWZpbmUgUFhEX0lOREVYKHZhZGRyLCBsZXZlbClcXHQoKCh2YWRkcikgXFx1MDAzZVxcdTAwM2UgUEdfTEVWRUxfU0hJRlQobGV2ZWwpKSBcXHUwMDI2IChQVFJTX1BFUl9QVEUgLSAxKSlcXG4rXFxuKyNkZWZpbmUgVEVTVF9NRU1fQkFTRV9HVkFcXHQweGMwMDAwMDAwVUxMXFxuKyNkZWZpbmUgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVRcXHQweGQwMDAwMDAwVUxMXFxuKyNkZWZpbmUgUEFUVEVSTlxcdFxcdFxcdDB4YWJjZGVmYWJjZGVmYWJjZFVMTFxcbitcXG4rc3RhdGljIHU2NCBleHBlY3RlZF92YWRkcjtcXG4rc3RhdGljIHU2NCBndWVzdF9mYXVsdHM7XFxuK1xcbitzdGF0aWMgdTY0ICpndWVzdF9nZXRfcHRlKHU2NCB2YWRkcilcXG4re1xcbitcXHR1NjQgcGd0YWJsZV9wYSwgcHRlO1xcbitcXHR1NjQgKnBndGFibGU7XFxuK1xcdGludCBsZXZlbDtcXG4rXFxuK1xcdGxldmVsID0gKGdldF9jcjQoKSBcXHUwMDI2IFg4Nl9DUjRfTEE1NykgPyBQR19MRVZFTF8yNTZUIDogUEdfTEVWRUxfNTEyRztcXG4rXFxuK1xcdHBndGFibGVfcGEgPSBnZXRfY3IzKCkgXFx1MDAyNiBQSFlTSUNBTF9QQUdFX01BU0s7XFxuK1xcdGZvciAoOyBsZXZlbCBcXHUwMDNlIFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7XFxuK1xcdFxcdHBndGFibGUgPSAodTY0ICopKHBndGFibGVfcGEgKyBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVCk7XFxuK1xcdFxcdHB0ZSA9IHBndGFibGVbUFhEX0lOREVYKHZhZGRyLCBsZXZlbCldO1xcbitcXHRcXHRHVUVTVF9BU1NFUlQocHRlIFxcdTAwMjYgUFRFX1BSRVNFTlRfTUFTSyhcXHUwMDI2Z3Vlc3RfbW11KSk7XFxuK1xcdFxcdEdVRVNUX0FTU0VSVCghKHB0ZSBcXHUwMDI2IFBURV9IVUdFX01BU0soXFx1MDAyNmd1ZXN0X21tdSkpKTtcXG4rXFx0XFx0cGd0YWJsZV9wYSA9IFBURV9HRVRfUEEocHRlKTtcXG4rXFx0fVxcbitcXG4rXFx0cGd0YWJsZSA9ICh1NjQgKikocGd0YWJsZV9wYSArIFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUKTtcXG4rXFx0cmV0dXJuIFxcdTAwMjZwZ3RhYmxlW1BYRF9JTkRFWCh2YWRkciwgUEdfTEVWRUxfNEspXTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZ3Vlc3RfcGZfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncylcXG4re1xcbitcXHR1NjQgZmF1bHRfYWRkcjtcXG4rXFx0dTY0ICpwdGVwO1xcbitcXG4rXFx0ZmF1bHRfYWRkciA9IGdldF9jcjIoKTtcXG4rXFx0R1VFU1RfQVNTRVJUX0VRKGZhdWx0X2FkZHIsIFJFQURfT05DRShleHBlY3RlZF92YWRkcikpO1xcbitcXG4rXFx0cHRlcCA9IGd1ZXN0X2dldF9wdGUoZmF1bHRfYWRkcik7XFxuK1xcdEdVRVNUX0FTU0VSVChwdGVwKTtcXG4rXFx0R1VFU1RfQVNTRVJUKCEoKnB0ZXAgXFx1MDAyNiBQVEVfUFJFU0VOVF9NQVNLKFxcdTAwMjZndWVzdF9tbXUpKSk7XFxuK1xcbitcXHQqcHRlcCB8PSBQVEVfUFJFU0VOVF9NQVNLKFxcdTAwMjZndWVzdF9tbXUpO1xcbitcXHRndWVzdF9mYXVsdHMrKztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZ3Vlc3RfYWNjZXNzX21lbW9yeSh2b2lkICphcmcpXFxuK3tcXG4rXFx0dTY0IHZhZGRyLCB2YWw7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgOyBpKyspIHtcXG4rXFx0XFx0dmFkZHIgPSBURVNUX01FTV9CQVNFX0dWQSArIChpICUgUFRSU19QRVJfUFRFKSAqIFBBR0VfU0laRTtcXG4rXFx0XFx0V1JJVEVfT05DRShleHBlY3RlZF92YWRkciwgdmFkZHIpO1xcbitcXG4rXFx0XFx0LyogUmVhZCB0byB0cmlnZ2VyICNQRiAqL1xcbitcXHRcXHR2YWwgPSBSRUFEX09OQ0UoKih1NjQgKil2YWRkcik7XFxuK1xcdFxcdEdVRVNUX0FTU0VSVF9FUSh2YWwsIFBBVFRFUk4pO1xcbitcXG4rXFx0XFx0LyogQ2xlYXIgdGhlIHByZXNlbnQgYml0IGFnYWluIHNvIGl0IGZhdWx0cyBuZXh0IHRpbWUgKi9cXG4rXFx0XFx0Kmd1ZXN0X2dldF9wdGUodmFkZHIpIFxcdTAwMjY9IH5QVEVfUFJFU0VOVF9NQVNLKFxcdTAwMjZndWVzdF9tbXUpO1xcbitcXHRcXHRpbnZscGcodmFkZHIpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGwxX3N2bV9jb2RlKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0pXFxuK3tcXG4rXFx0Z2VuZXJpY19zdm1fc2V0dXAoc3ZtLCBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcXG4rXFx0c3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zIHw9IEJJVChVRF9WRUNUT1IpO1xcbitcXG4rXFx0d2hpbGUgKDEpIHtcXG4rXFx0XFx0cnVuX2d1ZXN0KHN2bS1cXHUwMDNldm1jYiwgc3ZtLVxcdTAwM2V2bWNiX2dwYSk7XFxuK1xcdFxcdEdVRVNUX0FTU0VSVF9FUShzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9jb2RlLFxcbitcXHRcXHRcXHRcXHQoU1ZNX0VYSVRfRVhDUF9CQVNFICsgVURfVkVDVE9SKSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxcbit7XFxuK1xcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpO1xcbitcXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteCkpO1xcbitcXHRwcmVwYXJlX3ZtY3Modm14LCBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcXG4rXFxuK1xcdEdVRVNUX0FTU0VSVCghdm13cml0ZShFWENFUFRJT05fQklUTUFQLCBCSVQoVURfVkVDVE9SKSkpO1xcbitcXG4rXFx0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcXG4rXFx0d2hpbGUgKDEpIHtcXG4rXFx0XFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pLCBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JKTtcXG4rXFx0XFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pIFxcdTAwMjYgMHhmZiwgVURfVkVDVE9SKTtcXG4rXFx0XFx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHZvaWQgKnRlc3RfZGF0YSlcXG4re1xcbitcXHRpZiAodGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkpXFxuK1xcdFxcdGwxX3N2bV9jb2RlKHRlc3RfZGF0YSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bDFfdm14X2NvZGUodGVzdF9kYXRhKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgKnNpZ3Vzcl90aHJlYWRfZm4odm9pZCAqYXJnKVxcbit7XFxuK1xcdHB0aHJlYWRfdCB2Y3B1X3RocmVhZCA9IChwdGhyZWFkX3QpYXJnO1xcbitcXG4rXFx0Zm9yICg7Oykge1xcbitcXHRcXHRwdGhyZWFkX3Rlc3RjYW5jZWwoKTtcXG4rXFx0XFx0cHRocmVhZF9raWxsKHZjcHVfdGhyZWFkLCBTSUdVU1IxKTtcXG4rXFx0XFx0dXNsZWVwKG1zZWNzX3RvX3VzZWNzKDEpKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZHVtbXlfc2lnbmFsX2hhbmRsZXIoaW50IHNpZ25vKSB7fVxcbitzdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBzYTtcXG4rXFxuK3N0YXRpYyB2b2lkIHZjcHVfc2lndXNyX2xpc3Rlbih2b2lkKVxcbit7XFxuK1xcdHNhLnNhX2hhbmRsZXIgPSBkdW1teV9zaWduYWxfaGFuZGxlcjtcXG4rXFx0c2lnYWN0aW9uKFNJR1VTUjEsIFxcdTAwMjZzYSwgTlVMTCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHZjcHVfc2lndXNyX2lnbm9yZSh2b2lkKVxcbit7XFxuK1xcdHNhLnNhX2hhbmRsZXIgPSBTSUdfSUdOO1xcbitcXHRzaWdhY3Rpb24oU0lHVVNSMSwgXFx1MDAyNnNhLCBOVUxMKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQga3ZtX3g4Nl9zdGF0ZV9xdWV1ZV91ZChzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGUpXFxuK3tcXG4rXFx0aWYgKHN0YXRlLVxcdTAwM2VldmVudHMuZXhjZXB0aW9uLnBlbmRpbmcgfHwgc3RhdGUtXFx1MDAzZWV2ZW50cy5leGNlcHRpb24uaW5qZWN0ZWQpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHN0YXRlLVxcdTAwM2VldmVudHMuZmxhZ3MgfD0gS1ZNX1ZDUFVFVkVOVF9WQUxJRF9QQVlMT0FEO1xcbitcXHRzdGF0ZS1cXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5wZW5kaW5nID0gdHJ1ZTtcXG4rXFx0c3RhdGUtXFx1MDAzZWV2ZW50cy5leGNlcHRpb24uaW5qZWN0ZWQgPSBmYWxzZTtcXG4rXFx0c3RhdGUtXFx1MDAzZWV2ZW50cy5leGNlcHRpb24ubnIgPSBVRF9WRUNUT1I7XFxuK1xcdHN0YXRlLVxcdTAwM2VldmVudHMuZXhjZXB0aW9uLmhhc19lcnJvcl9jb2RlID0gZmFsc2U7XFxuK1xcdHN0YXRlLVxcdTAwM2VldmVudHMuZXhjZXB0aW9uX2hhc19wYXlsb2FkID0gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ1bl90ZXN0KGJvb2wgbmVzdGVkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZTtcXG4rXFx0aW50IHIsIGksIGxldmVsO1xcbitcXHRwdGhyZWFkX3Qgc2lndXNyX3RocmVhZDtcXG4rXFx0Z3BhX3QgZ3BhLCBwZ3RhYmxlX2dwYTtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbitcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0c3RydWN0IHVjYWxsIHVjO1xcbitcXHR1NjQgKnBndGFibGU7XFxuK1xcdGd2YV90IGd2YTtcXG4rXFx0dTY0IHB0ZTtcXG4rXFxuK1xcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXFx1MDAyNnZjcHUsIG5lc3RlZCA/IGwxX2d1ZXN0X2NvZGUgOiBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcXG4rXFx0dm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgUEZfVkVDVE9SLCBndWVzdF9wZl9oYW5kbGVyKTtcXG4rXFxuK1xcdGlmIChuZXN0ZWQpIHtcXG4rXFx0XFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FWENFUFRJT05fUEFZTE9BRCwgLTJ1bCk7XFxuK1xcdFxcdGlmIChrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKVxcbitcXHRcXHRcXHR2Y3B1X2FsbG9jX3N2bSh2bSwgXFx1MDAyNmd2YSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0dmNwdV9hbGxvY192bXgodm0sIFxcdTAwMjZndmEpO1xcbitcXHRcXHR2Y3B1X2FyZ3Nfc2V0KHZjcHUsIDEsIGd2YSk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFsbG9jYXRlIGEgcGFnZSBhbmQgd3JpdGUgdGhlIHBhdHRlcm4gdG8gaXQgKi9cXG4rXFx0Z3ZhID0gdm1fYWxsb2NfcGFnZSh2bSk7XFxuK1xcdCoodTY0ICopYWRkcl9ndmEyaHZhKHZtLCBndmEpID0gUEFUVEVSTjtcXG4rXFx0Z3BhID0gYWRkcl9ndmEyZ3BhKHZtLCBndmEpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTWFwIGFsbCB2aXJ0dWFsIGFkZHJlc3NlcyB0byB0aGUgcGF0dGVybiBwYWdlIGFuZCBjbGVhciB0aGUgcHJlc2VudFxcbitcXHQgKiBiaXQgc3VjaCB0aGF0IGd1ZXN0IGFjY2Vzc2VzIHdpbGwgY2F1c2UgYSAjUEYuXFxuK1xcdCAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUFRSU19QRVJfUFRFOyBpKyspIHtcXG4rXFx0XFx0Z3ZhID0gVEVTVF9NRU1fQkFTRV9HVkEgKyBpICogZ2V0cGFnZXNpemUoKTtcXG4rXFx0XFx0dmlydF9wZ19tYXAodm0sIGd2YSwgZ3BhKTtcXG4rXFx0XFx0KnZtX2dldF9wdGUodm0sIGd2YSkgXFx1MDAyNj0gflBURV9QUkVTRU5UX01BU0soXFx1MDAyNnZtLVxcdTAwM2VtbXUpO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBOb3cgY3JlYXRlIG1hcHBpbmdzIGZvciB0aGUgcGFnZSB0YWJsZXMgY3JlYXRlZCBhYm92ZSBzbyB0aGF0IHRoZVxcbitcXHQgKiBndWVzdCAjUEYgaGFuZGxlciBjYW4gd2FsayB0aGVtLiBBbGwgUFRFcyBmb3IgdGVzdCB2aXJ0dWFsIGFkZHJlc3Nlc1xcbitcXHQgKiBzaG91bGQgbGllIG9uIHRoZSBzYW1lIFBURSBwYWdlLCBzbyBvbmUgcGFnZSBpcyBtYXBwZWQgZm9yIGVhY2ggcGFnZVxcbitcXHQgKiB0YWJsZSBsZXZlbC5cXG4rXFx0ICpcXG4rXFx0ICogVXNlIGFuIG9mZnNldCBmb3IgdGhlIEdWQSBpbnN0ZWFkIG9mIGNyZWF0aW5nIGlkZW50aXR5IG1hcHBpbmdzIHRvXFxuK1xcdCAqIGF2b2lkIGNvbGxpc2lvbiB3aXRoIGV4aXN0aW5nIG1hcHBpbmdzIGF0IGxvdyBHVkFzIChlLmcuIEVMRikuXFxuK1xcdCAqL1xcbitcXHRwZ3RhYmxlX2dwYSA9IHZtLVxcdTAwM2VtbXUucGdkO1xcbitcXHRmb3IgKGxldmVsID0gdm0tXFx1MDAzZW1tdS5wZ3RhYmxlX2xldmVsczsgbGV2ZWwgXFx1MDAzZT0gUEdfTEVWRUxfNEs7IGxldmVsLS0pIHtcXG4rXFx0XFx0dmlydF9tYXAodm0sIHBndGFibGVfZ3BhICsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQsIHBndGFibGVfZ3BhLCAxKTtcXG4rXFx0XFx0cGd0YWJsZSA9IGFkZHJfZ3BhMmh2YSh2bSwgcGd0YWJsZV9ncGEpO1xcbitcXHRcXHRwdGUgPSBwZ3RhYmxlW1BYRF9JTkRFWChURVNUX01FTV9CQVNFX0dWQSwgbGV2ZWwpXTtcXG4rXFx0XFx0cGd0YWJsZV9ncGEgPSBQVEVfR0VUX1BBKHB0ZSk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEluaXRpYWxpemUgdGhlIHRocmVhZCBzZW5kaW5nIFNJR1VTUiBhbmQgaW5zdGFsbCB0aGUgaGFuZGxlciAqL1xcbitcXHR2Y3B1X3NpZ3Vzcl9pZ25vcmUoKTtcXG4rXFx0ciA9IHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZzaWd1c3JfdGhyZWFkLCBOVUxMLCBzaWd1c3JfdGhyZWFkX2ZuLFxcbitcXHRcXHRcXHQgICAodm9pZCAqKXB0aHJlYWRfc2VsZigpKTtcXG4rXFx0VEVTVF9BU1NFUlQoIXIsIFxcXCJwdGhyZWFkX2NyZWF0ZSgpIGZhaWxlZDogJWRcXFwiLCByKTtcXG4rXFxuK1xcdGZvciAoaSA9IDE7IGkgXFx1MDAzYz0gTlJfSVRFUkFUSU9OUzsgaSsrKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIE9ubHkgaGFuZGxlIFNJR1VTUiB3aGlsZSB0aGUgdkNQVSBpcyBydW5uaW5nLCBvdGhlcndpc2VcXG4rXFx0XFx0ICogaWdub3JlIGl0IHRvIGF2b2lkIGludGVycnVwdGluZyBvdGhlciBpb2N0bHMvc3lzY2FsbHMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHR2Y3B1X3NpZ3Vzcl9saXN0ZW4oKTtcXG4rXFx0XFx0ciA9IF9fdmNwdV9ydW4odmNwdSk7XFxuK1xcdFxcdFRFU1RfQVNTRVJUKCFyIHx8IGVycm5vID09IEVJTlRSLCBcXFwiRXhwZWN0ZWQgc3VjY2VzcyBvciBTSUdVU1IxXFxcIik7XFxuK1xcdFxcdHZjcHVfc2lndXNyX2lnbm9yZSgpO1xcbitcXG4rXFx0XFx0LyogVGhlIGd1ZXN0IG9ubHkgZXhpdHMgZHVlIHRvIGEgc2lnbmFsIG9yIGZhaWxlZCBhc3NlcnRpb24gKi9cXG4rXFx0XFx0aWYgKCFyKSB7XFxuK1xcdFxcdFxcdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XFxuK1xcdFxcdFxcdFRFU1RfQVNTRVJUX0VRKGdldF91Y2FsbCh2Y3B1LCBcXHUwMDI2dWMpLCBVQ0FMTF9BQk9SVCk7XFxuK1xcdFxcdFxcdFJFUE9SVF9HVUVTVF9BU1NFUlQodWMpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0c3RhdGUgPSB2Y3B1X3NhdmVfc3RhdGUodmNwdSk7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBJZiB0aGUgdkNQVSBpcyBpbiBndWVzdCBtb2RlLCBpbmplY3QgYSAjVUQgdG8gdHJpZ2dlciBhblxcbitcXHRcXHQgKiBMMi1cXHUwMDNlTDEgVk0tRXhpdCBldmVyeSBvdGhlciBpdGVyYXRpb24uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoa3ZtX3g4Nl9zdGF0ZV9pc19ndWVzdF9tb2RlKHN0YXRlKSBcXHUwMDI2XFx1MDAyNiBpICUgMiA9PSAwKVxcbitcXHRcXHRcXHRrdm1feDg2X3N0YXRlX3F1ZXVlX3VkKHN0YXRlKTtcXG4rXFxuK1xcdFxcdGt2bV92bV9yZWxlYXNlKHZtKTtcXG4rXFx0XFx0dmNwdSA9IHZtX3JlY3JlYXRlX3dpdGhfb25lX3ZjcHUodm0pO1xcbitcXHRcXHRpZiAobmVzdGVkKVxcbitcXHRcXHRcXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FELCAtMnVsKTtcXG4rXFx0XFx0dmNwdV9sb2FkX3N0YXRlKHZjcHUsIHN0YXRlKTtcXG4rXFx0XFx0a3ZtX3g4Nl9zdGF0ZV9jbGVhbnVwKHN0YXRlKTtcXG4rXFxuK1xcdFxcdHByX2luZm8oXFxcIlxcXFxyU2F2ZStyZXN0b3JlIGl0ZXJhdGlvbnM6ICVkXFxcIiwgaSk7XFxuK1xcdH1cXG4rXFx0cHJfaW5mbyhcXFwiXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3Qodm0sIGd1ZXN0X2ZhdWx0cyk7XFxuK1xcdFRFU1RfQVNTRVJUKGd1ZXN0X2ZhdWx0cywgXFxcIk5vIGd1ZXN0IHBhZ2UgZmF1bHRzIHRyaWdnZXJlZFxcXCIpO1xcbitcXHRwcl9pbmZvKFxcXCJHdWVzdCBwYWdlIGZhdWx0cyVzOiAlbHVcXFxcblxcXCIsIG5lc3RlZCA/IFxcXCIgKGluIEwyKVxcXCIgOiBcXFwiXFxcIiwgZ3Vlc3RfZmF1bHRzKTtcXG4rXFxuK1xcdHB0aHJlYWRfY2FuY2VsKHNpZ3Vzcl90aHJlYWQpO1xcbitcXHRwdGhyZWFkX2pvaW4oc2lndXNyX3RocmVhZCwgTlVMTCk7XFxuK1xcdGt2bV92bV9mcmVlKHZtKTtcXG4rfVxcbitcXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4re1xcbitcXHRwcl9pbmZvKFxcXCJSdW5uaW5nIHNhdmUrcmVzdG9yZSBzdHJlc3MgdGVzdC4uLlxcXFxuXFxcIik7XFxuK1xcdHJ1bl90ZXN0KC8qbmVzdGVkPSovZmFsc2UpO1xcbitcXG4rXFx0aWYgKCFrdm1faGFzX2NhcChLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FEKSB8fFxcbitcXHQgICAgIWt2bV9oYXNfY2FwKEtWTV9DQVBfTkVTVEVEX1NUQVRFKSB8fFxcbitcXHQgICAgKCFrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pIFxcdTAwMjZcXHUwMDI2ICFrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKSkge1xcbitcXHRcXHRwcl9pbmZvKFxcXCJOZXN0ZWQgdmlydHVhbGl6YXRpb24gbm90IHN1cHBvcnRlZCwgc2tpcHBpbmcgbmVzdGVkIHRlc3RcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0cHJfaW5mbyhcXFwiUnVubmluZyBzYXZlK3Jlc3RvcmUgc3RyZXNzIHRlc3Qgd2l0aCBhIG5lc3RlZCBndWVzdC4uLlxcXFxuXFxcIik7XFxuK1xcdHJ1bl90ZXN0KC8qbmVzdGVkPSovdHJ1ZSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xcbmluZGV4IGUyNTQyZjRjZWQ2MDUuLmQxZWRhZmQ1YWY3NTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXFxuQEAgLTIyLDkgKzIyLDYgQEBcXG4gI2RlZmluZSBTTVJBTV9HUEEgMHgxMDAwMDAwXFxuICNkZWZpbmUgU01SQU1fU1RBR0UgMHhmZVxcbiBcXG4tI2RlZmluZSBTVFIoeCkgI3hcXG4tI2RlZmluZSBYU1RSKHMpIFNUUihzKVxcbi1cXG4gI2RlZmluZSBTWU5DX1BPUlQgMHhlXFxuICNkZWZpbmUgRE9ORSAweGZmXFxuIFxcbkBAIC00Miw3ICszOSw3IEBAIHU4IHNtaV9oYW5kbGVyW10gPSB7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgc3luY193aXRoX2hvc3QodTY0IHBoYXNlKVxcbiB7XFxuLVxcdGFzbSB2b2xhdGlsZShcXFwiaW4gJFxcXCIgWFNUUihTWU5DX1BPUlQpXFxcIiwgJSVhbCBcXFxcblxcXCJcXG4rXFx0YXNtIHZvbGF0aWxlKFxcXCJpbiAkXFxcIiBfX3N0cmluZ2lmeShTWU5DX1BPUlQpXFxcIiwgJSVhbCBcXFxcblxcXCJcXG4gXFx0XFx0ICAgICA6IFxcXCIrYVxcXCIgKHBoYXNlKSk7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAxOjIzOjA0LjM1NDExNTAwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExNTUzNzY3NjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggYXJlIHVzZXItc3BhY2UgdGVzdGluZyBwcm9ncmFtcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkZDNlNWI0NmFhNTU1ZTJjZDg2YjBjYzUwYWQ1YjFhZTAyOTQxMDc0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMDE6MjM6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuaW5kZXggODhjNmM4MDQ2ZGRlYy4uZDk0ZjU2YzYzMGZkNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbkBAIC0xMDcsNiArMTA3LDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9wbXVfY291bnRlcnNfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvcG11X2V2ZW50X2ZpbHRlcl90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdFxuK1RFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zZXRfYm9vdF9jcHVfaWRcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3NldF9zcmVnc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXG5pbmRleCBkNjRjOGEyMjgyMDdhLi5lODM1NmVlNTRkN2I5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXG5AQCAtMjMsNiArMjMsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmdpZnkuaFx1MDAzZVxuIFxuICNkZWZpbmUgbXNlY3NfdG9fdXNlY3MobXNlYykgICAgKChtc2VjKSAqIDEwMDBVTEwpXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaFxuaW5kZXggYmU3OWJkYTAyNGJmMS4uODJhOGVhNmI2NjFmMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaFxuQEAgLTEyMDcsMzAgKzEyMDcsMjMgQEAgc3RhdGljIGlubGluZSBpbnQgZXZtY3Nfdm1sYXVuY2godm9pZClcbiBcbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlaHZfY2xlYW5fZmllbGRzID0gMDtcbiBcbi1cdF9fYXNtX18gX192b2xhdGlsZV9fKFwicHVzaCAlJXJicDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcmN4O1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyZHg7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJzaTtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcmRpO1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJDA7XCJcbitcdF9fYXNtX18gX192b2xhdGlsZV9fKFwicHVzaCAkMDtcIlxuIFx0XHRcdCAgICAgXCJtb3YgJSVyc3AsICglW2hvc3RfcnNwXSk7XCJcbiBcdFx0XHQgICAgIFwibGVhIDFmKCUlcmlwKSwgJSVyYXg7XCJcbiBcdFx0XHQgICAgIFwibW92ICUlcmF4LCAoJVtob3N0X3JpcF0pO1wiXG4rXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4gXHRcdFx0ICAgICBcInZtbGF1bmNoO1wiXG4gXHRcdFx0ICAgICBcImluY3EgKCUlcnNwKTtcIlxuLVx0XHRcdCAgICAgXCIxOiBwb3AgJSVyYXg7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmRpO1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJzaTtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyZHg7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmN4O1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJicDtcIlxuK1x0XHRcdCAgICAgXCIxOiA7XCJcbitcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbitcdFx0XHQgICAgIFwicG9wICUlcmF4O1wiXG4gXHRcdFx0ICAgICA6IFtyZXRdXCI9XHUwMDI2YVwiKHJldClcbiBcdFx0XHQgICAgIDogW2hvc3RfcnNwXVwiclwiXG4gXHRcdFx0ICAgICAgICgodTY0KVx1MDAyNmN1cnJlbnRfZXZtY3MtXHUwMDNlaG9zdF9yc3ApLFxuIFx0XHRcdCAgICAgICBbaG9zdF9yaXBdXCJyXCJcbi1cdFx0XHQgICAgICAgKCh1NjQpXHUwMDI2Y3VycmVudF9ldm1jcy1cdTAwM2Vob3N0X3JpcClcbi1cdFx0XHQgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiLCBcInJieFwiLCBcInI4XCIsIFwicjlcIiwgXCJyMTBcIixcbi1cdFx0XHQgICAgICAgXCJyMTFcIiwgXCJyMTJcIiwgXCJyMTNcIiwgXCJyMTRcIiwgXCJyMTVcIik7XG4rXHRcdFx0ICAgICAgICgodTY0KVx1MDAyNmN1cnJlbnRfZXZtY3MtXHUwMDNlaG9zdF9yaXApLFxuK1x0XHRcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcbitcdFx0XHQgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTEyNDYsMzAgKzEyMzksMjMgQEAgc3RhdGljIGlubGluZSBpbnQgZXZtY3Nfdm1yZXN1bWUodm9pZClcbiBcdC8qIEhPU1RfUlNQICovXG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZWh2X2NsZWFuX2ZpZWxkcyBcdTAwMjY9IH5IVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfSE9TVF9QT0lOVEVSO1xuIFxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJwdXNoICUlcmJwO1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyY3g7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJkeDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcnNpO1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyZGk7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAkMDtcIlxuK1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJwdXNoICQwO1wiXG4gXHRcdFx0ICAgICBcIm1vdiAlJXJzcCwgKCVbaG9zdF9yc3BdKTtcIlxuIFx0XHRcdCAgICAgXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcIlxuIFx0XHRcdCAgICAgXCJtb3YgJSVyYXgsICglW2hvc3RfcmlwXSk7XCJcbitcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbiBcdFx0XHQgICAgIFwidm1yZXN1bWU7XCJcbiBcdFx0XHQgICAgIFwiaW5jcSAoJSVyc3ApO1wiXG4tXHRcdFx0ICAgICBcIjE6IHBvcCAlJXJheDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyZGk7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcnNpO1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJkeDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyY3g7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmJwO1wiXG4rXHRcdFx0ICAgICBcIjE6IDtcIlxuK1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuK1x0XHRcdCAgICAgXCJwb3AgJSVyYXg7XCJcbiBcdFx0XHQgICAgIDogW3JldF1cIj1cdTAwMjZhXCIocmV0KVxuIFx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCJyXCJcbiBcdFx0XHQgICAgICAgKCh1NjQpXHUwMDI2Y3VycmVudF9ldm1jcy1cdTAwM2Vob3N0X3JzcCksXG4gXHRcdFx0ICAgICAgIFtob3N0X3JpcF1cInJcIlxuLVx0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcmlwKVxuLVx0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIsIFwicmJ4XCIsIFwicjhcIiwgXCJyOVwiLCBcInIxMFwiLFxuLVx0XHRcdCAgICAgICBcInIxMVwiLCBcInIxMlwiLCBcInIxM1wiLCBcInIxNFwiLCBcInIxNVwiKTtcbitcdFx0XHQgICAgICAgKCh1NjQpXHUwMDI2Y3VycmVudF9ldm1jcy1cdTAwM2Vob3N0X3JpcCksXG4rXHRcdFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xuK1x0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXG5pbmRleCBiMTYxMTc0ZWNlNDUzLi42ZTZmNzAwMzU1MDhhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcbkBAIC0yNCw2ICsyNCw3IEBAIGV4dGVybiBib29sIGhvc3RfY3B1X2lzX2FtZDtcbiBleHRlcm4gYm9vbCBob3N0X2NwdV9pc19oeWdvbjtcbiBleHRlcm4gYm9vbCBob3N0X2NwdV9pc19hbWRfY29tcGF0aWJsZTtcbiBleHRlcm4gdTY0IGd1ZXN0X3RzY19raHo7XG4rZXh0ZXJuIHN0cnVjdCBrdm1fbW11IGd1ZXN0X21tdTtcbiBcbiAjaWZuZGVmIE1BWF9OUl9DUFVJRF9FTlRSSUVTXG4gI2RlZmluZSBNQVhfTlJfQ1BVSURfRU5UUklFUyAxMDBcbkBAIC0zOTgsOCArMzk5LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgeDg2X21vZGVsKHVuc2lnbmVkIGludCBlYXgpXG4gI2RlZmluZSBQVEVfR0VUX1BBKHB0ZSlcdFx0KChwdGUpIFx1MDAyNiBQSFlTSUNBTF9QQUdFX01BU0spXG4gI2RlZmluZSBQVEVfR0VUX1BGTihwdGUpICAgICAgICAoUFRFX0dFVF9QQShwdGUpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKVxuIFxuLS8qIEdlbmVyYWwgUmVnaXN0ZXJzIGluIDY0LUJpdCBNb2RlICovXG4tc3RydWN0IGdwcjY0X3JlZ3Mge1xuK3N0cnVjdCBndWVzdF9yZWdzIHtcbiBcdHU2NCByYXg7XG4gXHR1NjQgcmN4O1xuIFx0dTY0IHJkeDtcbkBAIC00MTYsOCArNDE2LDM4IEBAIHN0cnVjdCBncHI2NF9yZWdzIHtcbiBcdHU2NCByMTM7XG4gXHR1NjQgcjE0O1xuIFx0dTY0IHIxNTtcbitcdHU2NCByZmxhZ3M7XG4gfTtcbiBcbitleHRlcm4gc3RydWN0IGd1ZXN0X3JlZ3MgZ3Vlc3RfcmVncztcbitcbisjZGVmaW5lIEdVRVNUX1JFR19PRkZTRVQobmFtZSkgXFxcbitcdFtvZmZfIyNuYW1lXSBcImlcIiAob2Zmc2V0b2Yoc3RydWN0IGd1ZXN0X3JlZ3MsIG5hbWUpKVxuK1xuKyNkZWZpbmUgR1VFU1RfUkVHU19PRkZTRVRTXHRcXFxuK1x0R1VFU1RfUkVHX09GRlNFVChyYXgpLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocmN4KSxcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHJkeCksXHRcXFxuK1x0R1VFU1RfUkVHX09GRlNFVChyYngpLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocnNwKSxcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHJicCksXHRcXFxuK1x0R1VFU1RfUkVHX09GRlNFVChyc2kpLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocmRpKSxcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHI4KSxcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHI5KSxcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHIxMCksXHRcXFxuK1x0R1VFU1RfUkVHX09GRlNFVChyMTEpLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocjEyKSxcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHIxMyksXHRcXFxuK1x0R1VFU1RfUkVHX09GRlNFVChyMTQpLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocjE1KSxcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHJmbGFncylcbitcbisjZGVmaW5lIEdVRVNUX1JFRyhuYW1lKSBcImd1ZXN0X3JlZ3MgKyAlY1tvZmZfXCIgI25hbWUgXCJdXCJcbitcbisjZGVmaW5lIEdVRVNUX1NXSVRDSF9HUFJfQVNNKG5hbWUpIFxcXG4rXHRcInhjaGcgJSVcIiAjbmFtZSBcIiwgXCIgR1VFU1RfUkVHKG5hbWUpIFwiXFxuXFx0XCJcbitcbiBzdHJ1Y3QgZGVzYzY0IHtcbiBcdHUxNiBsaW1pdDA7XG4gXHR1MTYgYmFzZTA7XG5AQCAtNTg0LDYgKzYxNCwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2NyMCh1NjQgdmFsKVxuIFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJtb3YgJTAsICUlY3IwXCIgOiA6IFwiclwiICh2YWwpIDogXCJtZW1vcnlcIik7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdTY0IGdldF9jcjIodm9pZClcbit7XG4rXHR1NjQgY3IyO1xuK1xuK1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJtb3YgJSVjcjIsICVbY3IyXVwiIDogW2NyMl1cIj1yXCIoY3IyKSk7XG4rXHRyZXR1cm4gY3IyO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHU2NCBnZXRfY3IzKHZvaWQpXG4ge1xuIFx0dTY0IGNyMztcbkBAIC04NzksNiArOTE3LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9zc2VfcmVnKGludCByZWcsIGNvbnN0IHNzZTEyOF90ICpkYXRhKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgaW52bHBnKHU2NCBhZGRyKVxuK3tcbitcdF9fYXNtX18gX192b2xhdGlsZV9fKFwiaW52bHBnICglMClcIiA6IDogXCJyXCIoYWRkcikgOiBcIm1lbW9yeVwiKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSB2b2lkIGNwdV9yZWxheCh2b2lkKVxuIHtcbiBcdGFzbSB2b2xhdGlsZShcInJlcDsgbm9wXCIgOjo6IFwibWVtb3J5XCIpO1xuQEAgLTkxNSw2ICs5NTgsMTEgQEAgc3RydWN0IGt2bV94ODZfc3RhdGUgKnZjcHVfc2F2ZV9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdmNwdV9sb2FkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKTtcbiB2b2lkIGt2bV94ODZfc3RhdGVfY2xlYW51cChzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGUpO1xuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1feDg2X3N0YXRlX2lzX2d1ZXN0X21vZGUoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKVxuK3tcbitcdHJldHVybiBzdGF0ZS1cdTAwM2VuZXN0ZWQuc2l6ZSBcdTAwMjZcdTAwMjYgKHN0YXRlLVx1MDAzZW5lc3RlZC5mbGFncyBcdTAwMjYgS1ZNX1NUQVRFX05FU1RFRF9HVUVTVF9NT0RFKTtcbit9XG4rXG4gY29uc3Qgc3RydWN0IGt2bV9tc3JfbGlzdCAqa3ZtX2dldF9tc3JfaW5kZXhfbGlzdCh2b2lkKTtcbiBjb25zdCBzdHJ1Y3Qga3ZtX21zcl9saXN0ICprdm1fZ2V0X2ZlYXR1cmVfbXNyX2luZGV4X2xpc3Qodm9pZCk7XG4gYm9vbCBrdm1fbXNyX2lzX2luX3NhdmVfcmVzdG9yZV9saXN0KHUzMiBtc3JfaW5kZXgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuaW5kZXggNGJjZmQ2MGUzYWVjYi4uMDRmNWUzNGRlYTNhZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXG5AQCAtMjkwLDYgKzI5MCwyMyBAQCBzdHJ1Y3Qgdm14X21zcl9lbnRyeSB7XG4gXHR1NjQgdmFsdWU7XG4gfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgxNikpKTtcbiBcbisjZGVmaW5lIFZNWF9TV0lUQ0hfR1BSU19BU00gXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJheCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJieCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJjeCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkeCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJicCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJzaSkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkaSkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI4KSAgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI5KSAgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMSkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMikgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMykgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNSlcbitcbiAjaW5jbHVkZSBcImV2bWNzLmhcIlxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IHZteG9uKHU2NCBwaHlzKVxuQEAgLTM2Myw5ICszODAsNiBAQCBzdGF0aWMgaW5saW5lIHU2NCB2bXB0cnN0eih2b2lkKVxuIFx0cmV0dXJuIHZhbHVlO1xuIH1cbiBcbi0vKlxuLSAqIE5vIGd1ZXN0IHN0YXRlIChlLmcuIEdQUnMpIGlzIGVzdGFibGlzaGVkIGJ5IHRoaXMgdm1sYXVuY2guXG4tICovXG4gc3RhdGljIGlubGluZSBpbnQgdm1sYXVuY2godm9pZClcbiB7XG4gXHRpbnQgcmV0O1xuQEAgLTM3MywzNCArMzg3LDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpXG4gXHRpZiAoZW5hYmxlX2V2bWNzKVxuIFx0XHRyZXR1cm4gZXZtY3Nfdm1sYXVuY2goKTtcbiBcbi1cdF9fYXNtX18gX192b2xhdGlsZV9fKFwicHVzaCAlJXJicDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcmN4O1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyZHg7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJzaTtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcmRpO1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJDA7XCJcbitcdF9fYXNtX18gX192b2xhdGlsZV9fKFwicHVzaCAkMDtcIlxuIFx0XHRcdCAgICAgXCJ2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTtcIlxuIFx0XHRcdCAgICAgXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcIlxuIFx0XHRcdCAgICAgXCJ2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTtcIlxuK1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuIFx0XHRcdCAgICAgXCJ2bWxhdW5jaDtcIlxuIFx0XHRcdCAgICAgXCJpbmNxICglJXJzcCk7XCJcbi1cdFx0XHQgICAgIFwiMTogcG9wICUlcmF4O1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJkaTtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyc2k7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmR4O1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJjeDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyYnA7XCJcbitcdFx0XHQgICAgIFwiMTogO1wiXG4rXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4rXHRcdFx0ICAgICBcInBvcCAlJXJheDtcIlxuIFx0XHRcdCAgICAgOiBbcmV0XVwiPVx1MDAyNmFcIihyZXQpXG4gXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cInJcIigodTY0KUhPU1RfUlNQKSxcbi1cdFx0XHQgICAgICAgW2hvc3RfcmlwXVwiclwiKCh1NjQpSE9TVF9SSVApXG4tXHRcdFx0ICAgICA6IFwibWVtb3J5XCIsIFwiY2NcIiwgXCJyYnhcIiwgXCJyOFwiLCBcInI5XCIsIFwicjEwXCIsXG4tXHRcdFx0ICAgICAgIFwicjExXCIsIFwicjEyXCIsIFwicjEzXCIsIFwicjE0XCIsIFwicjE1XCIpO1xuK1x0XHRcdCAgICAgICBbaG9zdF9yaXBdXCJyXCIoKHU2NClIT1NUX1JJUCksXG4rXHRcdFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xuK1x0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tLypcbi0gKiBObyBndWVzdCBzdGF0ZSAoZS5nLiBHUFJzKSBpcyBlc3RhYmxpc2hlZCBieSB0aGlzIHZtcmVzdW1lLlxuLSAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHZtcmVzdW1lKHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbkBAIC00MDgsMjggKzQxMiwyMSBAQCBzdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKVxuIFx0aWYgKGVuYWJsZV9ldm1jcylcbiBcdFx0cmV0dXJuIGV2bWNzX3ZtcmVzdW1lKCk7XG4gXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJSVyYnA7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJjeDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcmR4O1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyc2k7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJkaTtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICQwO1wiXG4rXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJDA7XCJcbiBcdFx0XHQgICAgIFwidm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07XCJcbiBcdFx0XHQgICAgIFwibGVhIDFmKCUlcmlwKSwgJSVyYXg7XCJcbiBcdFx0XHQgICAgIFwidm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07XCJcbitcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbiBcdFx0XHQgICAgIFwidm1yZXN1bWU7XCJcbiBcdFx0XHQgICAgIFwiaW5jcSAoJSVyc3ApO1wiXG4tXHRcdFx0ICAgICBcIjE6IHBvcCAlJXJheDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyZGk7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcnNpO1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJkeDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyY3g7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmJwO1wiXG4rXHRcdFx0ICAgICBcIjE6IDtcIlxuK1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuK1x0XHRcdCAgICAgXCJwb3AgJSVyYXg7XCJcbiBcdFx0XHQgICAgIDogW3JldF1cIj1cdTAwMjZhXCIocmV0KVxuIFx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCJyXCIoKHU2NClIT1NUX1JTUCksXG4tXHRcdFx0ICAgICAgIFtob3N0X3JpcF1cInJcIigodTY0KUhPU1RfUklQKVxuLVx0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIsIFwicmJ4XCIsIFwicjhcIiwgXCJyOVwiLCBcInIxMFwiLFxuLVx0XHRcdCAgICAgICBcInIxMVwiLCBcInIxMlwiLCBcInIxM1wiLCBcInIxNFwiLCBcInIxNVwiKTtcbitcdFx0XHQgICAgICAgW2hvc3RfcmlwXVwiclwiKCh1NjQpSE9TVF9SSVApLFxuK1x0XHRcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcbitcdFx0XHQgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jXG5pbmRleCAxZDcyZGNkZmNlM2I2Li4zZTM1M2FjMzllZWI3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuY1xuQEAgLTc0LDcgKzc0LDcgQEAgdGVzdF9hc3NlcnQoYm9vbCBleHAsIGNvbnN0IGNoYXIgKmV4cF9zdHIsXG4gXHRpZiAoIShleHApKSB7XG4gXHRcdHZhX3N0YXJ0KGFwLCBmbXQpO1xuIFxuLVx0XHRmcHJpbnRmKHN0ZGVyciwgXCI9PT09IFRlc3QgQXNzZXJ0aW9uIEZhaWx1cmUgPT09PVxcblwiXG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIlxcbj09PT0gVGVzdCBBc3NlcnRpb24gRmFpbHVyZSA9PT09XFxuXCJcbiBcdFx0XHRcIiAgJXM6JXU6ICVzXFxuXCJcbiBcdFx0XHRcIiAgcGlkPSVkIHRpZD0lZCBlcnJubz0lZCAtICVzXFxuXCIsXG4gXHRcdFx0ZmlsZSwgbGluZSwgZXhwX3N0ciwgZ2V0cGlkKCksIGt2bV9nZXR0aWQoKSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG5pbmRleCBlZjU2ZGNlZmUwMTE5Li5kMzFmYTgxZWEwNzU2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG5AQCAtMjgsNiArMjgsOSBAQCBib29sIGhvc3RfY3B1X2lzX2h5Z29uO1xuIGJvb2wgaG9zdF9jcHVfaXNfYW1kX2NvbXBhdGlibGU7XG4gYm9vbCBpc19mb3JjZWRfZW11bGF0aW9uX2VuYWJsZWQ7XG4gdTY0IGd1ZXN0X3RzY19raHo7XG4rc3RydWN0IGt2bV9tbXUgZ3Vlc3RfbW11O1xuK1xuK3N0cnVjdCBndWVzdF9yZWdzIGd1ZXN0X3JlZ3M7XG4gXG4gY29uc3QgY2hhciAqZXhfc3RyKGludCB2ZWN0b3IpXG4ge1xuQEAgLTgyOSw2ICs4MzIsMTcgQEAgdm9pZCBrdm1fYXJjaF92bV9wb3N0X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgdW5zaWduZWQgaW50IG5yX3ZjcHVzKVxuIFx0VEVTVF9BU1NFUlQociBcdTAwM2UgMCwgXCJLVk1fR0VUX1RTQ19LSFogZGlkIG5vdCBwcm92aWRlIGEgdmFsaWQgVFNDIGZyZXF1ZW5jeS5cIik7XG4gXHRndWVzdF90c2Nfa2h6ID0gcjtcbiBcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBndWVzdF90c2Nfa2h6KTtcbitcbitcdC8qXG4rXHQgKiBUaGUgZ3Vlc3QgTU1VIGlzIGp1c3QgYSBwbGFjZWhvbGRlciB0byBwcm92aWRlIGFjY2VzcyB0byBQVEUgbWFza3NcbitcdCAqIChmb3Igbm93KS4gVGhlIGd1ZXN0IGRvZXMgbm90IGhhdmUgbWFwcGluZ3MgZm9yIGl0cyBvd24gcGFnZSB0YWJsZXNcbitcdCAqIGJ5IGRlZmF1bHQsIHNvIGFueSBtZWFuaW5nZnVsIHVzZSBvZiBndWVzdCBwYWdlIHRhYmxlcyByZXF1aXJlc1xuK1x0ICogZXhwbGljaXQgc2V0dXAgYnkgdGhlIHRlc3QuIFplcm8gdGhlIFBHRCB0byBtYWtlIGl0IG9idmlvdXMgdGhlIGd1ZXN0XG4rXHQgKiBwYWdlIHRhYmxlcyBhcmUgbm90IGltbWVkaWF0ZWx5IHVzYWJsZSBieSBndWVzdCBjb2RlLlxuK1x0ICovXG4rXHRndWVzdF9tbXUgPSB2bS1cdTAwM2VtbXU7XG4rXHRndWVzdF9tbXUucGdkID0gMDtcbitcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBndWVzdF9tbXUpO1xuIH1cbiBcbiB2b2lkIHZjcHVfYXJjaF9zZXRfZW50cnlfcG9pbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpndWVzdF9jb2RlKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmNcbmluZGV4IDE0NDViODkwOTg2ZmQuLmIwNWJlNTBmMDc1ZDYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmNcbkBAIC0xMyw5ICsxMyw2IEBAXG4gXG4gI2RlZmluZSBTRVZfREVWX1BBVEggXCIvZGV2L3NldlwiXG4gXG4tc3RydWN0IGdwcjY0X3JlZ3MgZ3Vlc3RfcmVncztcbi11NjQgcmZsYWdzO1xuLVxuIC8qIEFsbG9jYXRlIG1lbW9yeSByZWdpb25zIGZvciBuZXN0ZWQgU1ZNIHRlc3RzLlxuICAqXG4gICogSW5wdXQgQXJnczpcbkBAIC0xMzcsNDYgKzEzNCw0NyBAQCB2b2lkIGdlbmVyaWNfc3ZtX3NldHVwKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0sIHZvaWQgKmd1ZXN0X3JpcClcbiAgKiBzYXZlL3Jlc3RvcmUgNjQtYml0IGdlbmVyYWwgcmVnaXN0ZXJzIGV4Y2VwdCByYXgsIHJpcCwgcnNwXG4gICogd2hpY2ggYXJlIGRpcmVjdGx5IGhhbmRlZCB0aHJvdWdoIHRoZSBWTUNCIGd1ZXN0IHByb2Nlc3NvciBzdGF0ZVxuICAqL1xuLSNkZWZpbmUgU0FWRV9HUFJfQ1x0XHRcdFx0XFxcbi1cdFwieGNoZyAlJXJieCwgZ3Vlc3RfcmVncysweDIwXFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyY3gsIGd1ZXN0X3JlZ3MrMHgxMFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcmR4LCBndWVzdF9yZWdzKzB4MThcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXJicCwgZ3Vlc3RfcmVncysweDMwXFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyc2ksIGd1ZXN0X3JlZ3MrMHgzOFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcmRpLCBndWVzdF9yZWdzKzB4NDBcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXI4LCAgZ3Vlc3RfcmVncysweDQ4XFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyOSwgIGd1ZXN0X3JlZ3MrMHg1MFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcjEwLCBndWVzdF9yZWdzKzB4NThcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXIxMSwgZ3Vlc3RfcmVncysweDYwXFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyMTIsIGd1ZXN0X3JlZ3MrMHg2OFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcjEzLCBndWVzdF9yZWdzKzB4NzBcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXIxNCwgZ3Vlc3RfcmVncysweDc4XFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyMTUsIGd1ZXN0X3JlZ3MrMHg4MFxcblxcdFwiXG4tXG4tI2RlZmluZSBMT0FEX0dQUl9DICAgICAgU0FWRV9HUFJfQ1xuKyNkZWZpbmUgU1ZNX1NXSVRDSF9HUFJTX0FTTSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJ4KSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmN4KSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmR4KSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJwKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocnNpKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmRpKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjgpICBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjkpICBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjEwKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjExKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjEyKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjEzKSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE0KSBcXFxuK1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE1KVxuIFxuIC8qXG4gICogc2VsZnRlc3RzIGRvIG5vdCB1c2UgaW50ZXJydXB0cyBzbyB3ZSBkcm9wcGVkIGNsZ2kvc3RpL2NsaS9zdGdpXG4tICogZm9yIG5vdy4gcmVnaXN0ZXJzIGludm9sdmVkIGluIExPQUQvU0FWRV9HUFJfQyBhcmUgZXZlbnR1YWxseVxuKyAqIGZvciBub3cuIFJlZ2lzdGVycyBpbnZvbHZlZCBpbiBTVk1fU1dJVENIX0dQUlNfQVNNIGFyZSBldmVudHVhbGx5XG4gICogdW5tb2RpZmllZCBzbyB0aGV5IGRvIG5vdCBuZWVkIHRvIGJlIGluIHRoZSBjbG9iYmVyIGxpc3QuXG4gICovXG4gdm9pZCBydW5fZ3Vlc3Qoc3RydWN0IHZtY2IgKnZtY2IsIHU2NCB2bWNiX2dwYSlcbiB7XG4gXHRhc20gdm9sYXRpbGUgKFxuIFx0XHRcInZtbG9hZCAlW3ZtY2JfZ3BhXVxcblxcdFwiXG4tXHRcdFwibW92IHJmbGFncywgJSVyMTVcXG5cXHRcIlx0Ly8gcmZsYWdzXG4tXHRcdFwibW92ICUlcjE1LCAweDE3MCglW3ZtY2JdKVxcblxcdFwiXG4tXHRcdFwibW92IGd1ZXN0X3JlZ3MsICUlcjE1XFxuXFx0XCJcdC8vIHJheFxuLVx0XHRcIm1vdiAlJXIxNSwgMHgxZjgoJVt2bWNiXSlcXG5cXHRcIlxuLVx0XHRMT0FEX0dQUl9DXG4rXHRcdFwibW92IFwiIEdVRVNUX1JFRyhyZmxhZ3MpIFwiLCAlJXIxNVxcblxcdFwiXG4rXHRcdFwibW92ICUlcjE1LCAlW3ZtY2JfcmZsYWdzXVxcblxcdFwiXG4rXHRcdFwibW92IFwiIEdVRVNUX1JFRyhyYXgpIFwiLCAlJXIxNVxcblxcdFwiXG4rXHRcdFwibW92ICUlcjE1LCAlW3ZtY2JfcmF4XVxcblxcdFwiXG4rXHRcdFNWTV9TV0lUQ0hfR1BSU19BU01cbiBcdFx0XCJ2bXJ1biAlW3ZtY2JfZ3BhXVxcblxcdFwiXG4tXHRcdFNBVkVfR1BSX0Ncbi1cdFx0XCJtb3YgMHgxNzAoJVt2bWNiXSksICUlcjE1XFxuXFx0XCJcdC8vIHJmbGFnc1xuLVx0XHRcIm1vdiAlJXIxNSwgcmZsYWdzXFxuXFx0XCJcbi1cdFx0XCJtb3YgMHgxZjgoJVt2bWNiXSksICUlcjE1XFxuXFx0XCJcdC8vIHJheFxuLVx0XHRcIm1vdiAlJXIxNSwgZ3Vlc3RfcmVnc1xcblxcdFwiXG4rXHRcdFNWTV9TV0lUQ0hfR1BSU19BU01cbitcdFx0XCJtb3YgJVt2bWNiX3JmbGFnc10sICUlcjE1XFxuXFx0XCJcbitcdFx0XCJtb3YgJSVyMTUsIFwiIEdVRVNUX1JFRyhyZmxhZ3MpIFwiXFxuXFx0XCJcbitcdFx0XCJtb3YgJVt2bWNiX3JheF0sICUlcjE1XFxuXFx0XCJcdC8vIHJheFxuK1x0XHRcIm1vdiAlJXIxNSwgXCIgR1VFU1RfUkVHKHJheCkgXCJcXG5cXHRcIlxuIFx0XHRcInZtc2F2ZSAlW3ZtY2JfZ3BhXVxcblxcdFwiXG4tXHRcdDogOiBbdm1jYl0gXCJyXCIgKHZtY2IpLCBbdm1jYl9ncGFdIFwiYVwiICh2bWNiX2dwYSlcbitcdFx0OiBbdm1jYl9yZmxhZ3NdIFwiK21cIiAodm1jYi1cdTAwM2VzYXZlLnJmbGFncyksXG4rXHRcdCAgW3ZtY2JfcmF4XSBcIittXCIgKHZtY2ItXHUwMDNlc2F2ZS5yYXgpXG4rXHRcdDogW3ZtY2JfZ3BhXSBcImFcIiAodm1jYl9ncGEpLFxuK1x0XHQgIEdVRVNUX1JFR1NfT0ZGU0VUU1xuIFx0XHQ6IFwicjE1XCIsIFwibWVtb3J5XCIpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuY1xuaW5kZXggZTdkZDU3OTE5NTliYS4uMzgwNTBjNjBhMDY3MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmNcbkBAIC0xMCwzNiArMTAsOCBAQFxuIFxuIHZvaWQgdWNhbGxfYXJjaF9kb191Y2FsbChndmFfdCB1YylcbiB7XG4tXHQvKlxuLVx0ICogRklYTUU6IFJldmVydCB0aGlzIGhhY2sgKHRoZSBlbnRpcmUgY29tbWl0IHRoYXQgYWRkZWQgaXQpIG9uY2UgblZNWFxuLVx0ICogcHJlc2VydmVzIEwyIEdQUnMgYWNyb3NzIGEgbmVzdGVkIFZNLUV4aXQuICBJZiBhIHVjYWxsIGZyb20gTDIsIGUuZy5cbi1cdCAqIHRvIGRvIGEgR1VFU1RfU1lOQygpLCBsYW5kcyB0aGUgdkNQVSBpbiBMMSwgYW55IGFuZCBhbGwgR1BScyBjYW4gYmVcbi1cdCAqIGNsb2JiZXJlZCBieSBMMS4gIFNhdmUgYW5kIHJlc3RvcmUgbm9uLXZvbGF0aWxlIEdQUnMgKGNsb2JiZXJpbmcgUkJQXG4tXHQgKiBpbiBwYXJ0aWN1bGFyIGlzIHByb2JsZW1hdGljKSBhbG9uZyB3aXRoIFJEWCBhbmQgUkRJICh3aGljaCBhcmVcbi1cdCAqIGlucHV0cyksIGFuZCBjbG9iYmVyIHZvbGF0aWxlIEdQUnMuICpzaWdoKlxuLVx0ICovXG4tI2RlZmluZSBIT1JSSUZJQ19MMl9VQ0FMTF9DTE9CQkVSX0hBQ0tcdFxcXG4tXHRcInJjeFwiLCBcInJzaVwiLCBcInI4XCIsIFwicjlcIiwgXCJyMTBcIiwgXCJyMTFcIlxuLVxuLVx0YXNtIHZvbGF0aWxlKFwicHVzaCAlJXJicFxcblxcdFwiXG4tXHRcdCAgICAgXCJwdXNoICUlcjE1XFxuXFx0XCJcbi1cdFx0ICAgICBcInB1c2ggJSVyMTRcXG5cXHRcIlxuLVx0XHQgICAgIFwicHVzaCAlJXIxM1xcblxcdFwiXG4tXHRcdCAgICAgXCJwdXNoICUlcjEyXFxuXFx0XCJcbi1cdFx0ICAgICBcInB1c2ggJSVyYnhcXG5cXHRcIlxuLVx0XHQgICAgIFwicHVzaCAlJXJkeFxcblxcdFwiXG4tXHRcdCAgICAgXCJwdXNoICUlcmRpXFxuXFx0XCJcbi1cdFx0ICAgICBcImluICVbcG9ydF0sICUlYWxcXG5cXHRcIlxuLVx0XHQgICAgIFwicG9wICUlcmRpXFxuXFx0XCJcbi1cdFx0ICAgICBcInBvcCAlJXJkeFxcblxcdFwiXG4tXHRcdCAgICAgXCJwb3AgJSVyYnhcXG5cXHRcIlxuLVx0XHQgICAgIFwicG9wICUlcjEyXFxuXFx0XCJcbi1cdFx0ICAgICBcInBvcCAlJXIxM1xcblxcdFwiXG4tXHRcdCAgICAgXCJwb3AgJSVyMTRcXG5cXHRcIlxuLVx0XHQgICAgIFwicG9wICUlcjE1XFxuXFx0XCJcbi1cdFx0ICAgICBcInBvcCAlJXJicFxcblxcdFwiXG4tXHRcdDogOiBbcG9ydF0gXCJkXCIgKFVDQUxMX1BJT19QT1JUKSwgXCJEXCIgKHVjKSA6IFwicmF4XCIsIFwibWVtb3J5XCIsXG4tXHRcdCAgICAgSE9SUklGSUNfTDJfVUNBTExfQ0xPQkJFUl9IQUNLKTtcbitcdGFzbSB2b2xhdGlsZShcImluICVbcG9ydF0sICUlYWxcIlxuK1x0XHQ6IDogW3BvcnRdIFwiZFwiIChVQ0FMTF9QSU9fUE9SVCksIFwiRFwiICh1YykgOiBcInJheFwiLCBcIm1lbW9yeVwiKTtcbiB9XG4gXG4gdm9pZCAqdWNhbGxfYXJjaF9nZXRfdWNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3ZteC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmNcbmluZGV4IGNkMDljOWRlNDQ4NWEuLjA4OWUxYThhZjUzZmMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni92bXguY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdm14LmNcbkBAIC0yMzIsNyArMjMyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGluaXRfdm1jc19jb250cm9sX2ZpZWxkcyhzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4gXG4gXHR2bXdyaXRlKEVYQ0VQVElPTl9CSVRNQVAsIDApO1xuIFx0dm13cml0ZShQQUdFX0ZBVUxUX0VSUk9SX0NPREVfTUFTSywgMCk7XG4tXHR2bXdyaXRlKFBBR0VfRkFVTFRfRVJST1JfQ09ERV9NQVRDSCwgLTEpOyAvKiBOZXZlciBtYXRjaCAqL1xuK1x0dm13cml0ZShQQUdFX0ZBVUxUX0VSUk9SX0NPREVfTUFUQ0gsIDApO1xuIFx0dm13cml0ZShDUjNfVEFSR0VUX0NPVU5ULCAwKTtcbiBcdHZtd3JpdGUoVk1fRVhJVF9DT05UUk9MUywgcmRtc3IoTVNSX0lBMzJfVk1YX0VYSVRfQ1RMUykgfFxuIFx0XHRWTV9FWElUX0hPU1RfQUREUl9TUEFDRV9TSVpFKTtcdCAgLyogNjQtYml0IGhvc3QgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcbmluZGV4IDc3Y2U4N2M0MWE4NjguLmFhN2YzYjQwNWZkMzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY1xuQEAgLTIyLDkgKzIyLDYgQEBcbiBcbiAjZGVmaW5lIFNZTkNfUE9SVFx0MHhlXG4gXG4tI2RlZmluZSBTVFIoeCkgI3hcbi0jZGVmaW5lIFhTVFIocykgU1RSKHMpXG4tXG4gLypcbiAgKiBTTUkgaGFuZGxlcjogcnVucyBpbiByZWFsLWFkZHJlc3MgbW9kZS5cbiAgKiBSZXBvcnRzIFNNUkFNX1NUQUdFIHZpYSBwb3J0IElPLCB0aGVuIGRvZXMgUlNNLlxuQEAgLTM3LDcgKzM0LDcgQEAgc3RhdGljIHU4IHNtaV9oYW5kbGVyW10gPSB7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHN5bmNfd2l0aF9ob3N0KHU2NCBwaGFzZSlcbiB7XG4tXHRhc20gdm9sYXRpbGUoXCJpbiAkXCIgWFNUUihTWU5DX1BPUlQpIFwiLCAlJWFsIFxcblwiXG4rXHRhc20gdm9sYXRpbGUoXCJpbiAkXCIgX19zdHJpbmdpZnkoU1lOQ19QT1JUKSBcIiwgJSVhbCBcXG5cIlxuIFx0XHQgICAgIDogXCIrYVwiIChwaGFzZSkpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9maXhfaHlwZXJjYWxsX3Rlc3QuY1xuaW5kZXggNzUzYTBlNzMwZWE4ZC4uNDkzMWVjMjI3NjhlZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZml4X2h5cGVyY2FsbF90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZml4X2h5cGVyY2FsbF90ZXN0LmNcbkBAIC02LDcgKzYsNiBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGFyYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX3BhcmEuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImt2bV90ZXN0X2hhcm5lc3MuaFwiXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41MDczOTFhYjJjOTMwXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jXG5AQCAtMCwwICsxLDI4OCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NnZXRvcHQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwidGVzdF91dGlsLmhcIlxuKyNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJwcm9jZXNzb3IuaFwiXG4rI2luY2x1ZGUgXCJzdm1fdXRpbC5oXCJcbisjaW5jbHVkZSBcInZteC5oXCJcbitcbisjZGVmaW5lIE5SX0lURVJBVElPTlNcdFx0NTAwXG4rXG4rI2RlZmluZSBQVFJTX1BFUl9QVEVcdFx0NTEyXG4rI2RlZmluZSBQWERfSU5ERVgodmFkZHIsIGxldmVsKVx0KCgodmFkZHIpIFx1MDAzZVx1MDAzZSBQR19MRVZFTF9TSElGVChsZXZlbCkpIFx1MDAyNiAoUFRSU19QRVJfUFRFIC0gMSkpXG4rXG4rI2RlZmluZSBURVNUX01FTV9CQVNFX0dWQVx0MHhjMDAwMDAwMFVMTFxuKyNkZWZpbmUgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVRcdDB4ZDAwMDAwMDBVTExcbisjZGVmaW5lIFBBVFRFUk5cdFx0XHQweGFiY2RlZmFiY2RlZmFiY2RVTExcbitcbitzdGF0aWMgdTY0IGV4cGVjdGVkX3ZhZGRyO1xuK3N0YXRpYyB1NjQgZ3Vlc3RfZmF1bHRzO1xuK1xuK3N0YXRpYyB1NjQgKmd1ZXN0X2dldF9wdGUodTY0IHZhZGRyKVxuK3tcbitcdHU2NCBwZ3RhYmxlX3BhLCBwdGU7XG4rXHR1NjQgKnBndGFibGU7XG4rXHRpbnQgbGV2ZWw7XG4rXG4rXHRsZXZlbCA9IChnZXRfY3I0KCkgXHUwMDI2IFg4Nl9DUjRfTEE1NykgPyBQR19MRVZFTF8yNTZUIDogUEdfTEVWRUxfNTEyRztcbitcbitcdHBndGFibGVfcGEgPSBnZXRfY3IzKCkgXHUwMDI2IFBIWVNJQ0FMX1BBR0VfTUFTSztcbitcdGZvciAoOyBsZXZlbCBcdTAwM2UgUEdfTEVWRUxfNEs7IGxldmVsLS0pIHtcbitcdFx0cGd0YWJsZSA9ICh1NjQgKikocGd0YWJsZV9wYSArIFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUKTtcbitcdFx0cHRlID0gcGd0YWJsZVtQWERfSU5ERVgodmFkZHIsIGxldmVsKV07XG4rXHRcdEdVRVNUX0FTU0VSVChwdGUgXHUwMDI2IFBURV9QUkVTRU5UX01BU0soXHUwMDI2Z3Vlc3RfbW11KSk7XG4rXHRcdEdVRVNUX0FTU0VSVCghKHB0ZSBcdTAwMjYgUFRFX0hVR0VfTUFTSyhcdTAwMjZndWVzdF9tbXUpKSk7XG4rXHRcdHBndGFibGVfcGEgPSBQVEVfR0VUX1BBKHB0ZSk7XG4rXHR9XG4rXG4rXHRwZ3RhYmxlID0gKHU2NCAqKShwZ3RhYmxlX3BhICsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQpO1xuK1x0cmV0dXJuIFx1MDAyNnBndGFibGVbUFhEX0lOREVYKHZhZGRyLCBQR19MRVZFTF80SyldO1xuK31cbitcbitzdGF0aWMgdm9pZCBndWVzdF9wZl9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKVxuK3tcbitcdHU2NCBmYXVsdF9hZGRyO1xuK1x0dTY0ICpwdGVwO1xuK1xuK1x0ZmF1bHRfYWRkciA9IGdldF9jcjIoKTtcbitcdEdVRVNUX0FTU0VSVF9FUShmYXVsdF9hZGRyLCBSRUFEX09OQ0UoZXhwZWN0ZWRfdmFkZHIpKTtcbitcbitcdHB0ZXAgPSBndWVzdF9nZXRfcHRlKGZhdWx0X2FkZHIpO1xuK1x0R1VFU1RfQVNTRVJUKHB0ZXApO1xuK1x0R1VFU1RfQVNTRVJUKCEoKnB0ZXAgXHUwMDI2IFBURV9QUkVTRU5UX01BU0soXHUwMDI2Z3Vlc3RfbW11KSkpO1xuK1xuK1x0KnB0ZXAgfD0gUFRFX1BSRVNFTlRfTUFTSyhcdTAwMjZndWVzdF9tbXUpO1xuK1x0Z3Vlc3RfZmF1bHRzKys7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGd1ZXN0X2FjY2Vzc19tZW1vcnkodm9pZCAqYXJnKVxuK3tcbitcdHU2NCB2YWRkciwgdmFsO1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyA7IGkrKykge1xuK1x0XHR2YWRkciA9IFRFU1RfTUVNX0JBU0VfR1ZBICsgKGkgJSBQVFJTX1BFUl9QVEUpICogUEFHRV9TSVpFO1xuK1x0XHRXUklURV9PTkNFKGV4cGVjdGVkX3ZhZGRyLCB2YWRkcik7XG4rXG4rXHRcdC8qIFJlYWQgdG8gdHJpZ2dlciAjUEYgKi9cbitcdFx0dmFsID0gUkVBRF9PTkNFKCoodTY0ICopdmFkZHIpO1xuK1x0XHRHVUVTVF9BU1NFUlRfRVEodmFsLCBQQVRURVJOKTtcbitcbitcdFx0LyogQ2xlYXIgdGhlIHByZXNlbnQgYml0IGFnYWluIHNvIGl0IGZhdWx0cyBuZXh0IHRpbWUgKi9cbitcdFx0Kmd1ZXN0X2dldF9wdGUodmFkZHIpIFx1MDAyNj0gflBURV9QUkVTRU5UX01BU0soXHUwMDI2Z3Vlc3RfbW11KTtcbitcdFx0aW52bHBnKHZhZGRyKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgbDFfc3ZtX2NvZGUoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSlcbit7XG4rXHRnZW5lcmljX3N2bV9zZXR1cChzdm0sIGd1ZXN0X2FjY2Vzc19tZW1vcnkpO1xuK1x0c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyB8PSBCSVQoVURfVkVDVE9SKTtcbitcbitcdHdoaWxlICgxKSB7XG4rXHRcdHJ1bl9ndWVzdChzdm0tXHUwMDNldm1jYiwgc3ZtLVx1MDAzZXZtY2JfZ3BhKTtcbitcdFx0R1VFU1RfQVNTRVJUX0VRKHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9jb2RlLFxuK1x0XHRcdFx0KFNWTV9FWElUX0VYQ1BfQkFTRSArIFVEX1ZFQ1RPUikpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4re1xuK1x0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7XG4rXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteCkpO1xuK1x0cHJlcGFyZV92bWNzKHZteCwgZ3Vlc3RfYWNjZXNzX21lbW9yeSk7XG4rXG4rXHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoRVhDRVBUSU9OX0JJVE1BUCwgQklUKFVEX1ZFQ1RPUikpKTtcbitcbitcdEdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7XG4rXHR3aGlsZSAoMSkge1xuK1x0XHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpO1xuK1x0XHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX0lOVFJfSU5GTykgXHUwMDI2IDB4ZmYsIFVEX1ZFQ1RPUik7XG4rXHRcdEdVRVNUX0FTU0VSVCghdm1yZXN1bWUoKSk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqdGVzdF9kYXRhKVxuK3tcbitcdGlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSlcbitcdFx0bDFfc3ZtX2NvZGUodGVzdF9kYXRhKTtcbitcdGVsc2VcbitcdFx0bDFfdm14X2NvZGUodGVzdF9kYXRhKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgKnNpZ3Vzcl90aHJlYWRfZm4odm9pZCAqYXJnKVxuK3tcbitcdHB0aHJlYWRfdCB2Y3B1X3RocmVhZCA9IChwdGhyZWFkX3QpYXJnO1xuK1xuK1x0Zm9yICg7Oykge1xuK1x0XHRwdGhyZWFkX3Rlc3RjYW5jZWwoKTtcbitcdFx0cHRocmVhZF9raWxsKHZjcHVfdGhyZWFkLCBTSUdVU1IxKTtcbitcdFx0dXNsZWVwKG1zZWNzX3RvX3VzZWNzKDEpKTtcbitcdH1cbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgdm9pZCBkdW1teV9zaWduYWxfaGFuZGxlcihpbnQgc2lnbm8pIHt9XG4rc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gc2E7XG4rXG4rc3RhdGljIHZvaWQgdmNwdV9zaWd1c3JfbGlzdGVuKHZvaWQpXG4re1xuK1x0c2Euc2FfaGFuZGxlciA9IGR1bW15X3NpZ25hbF9oYW5kbGVyO1xuK1x0c2lnYWN0aW9uKFNJR1VTUjEsIFx1MDAyNnNhLCBOVUxMKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdmNwdV9zaWd1c3JfaWdub3JlKHZvaWQpXG4re1xuK1x0c2Euc2FfaGFuZGxlciA9IFNJR19JR047XG4rXHRzaWdhY3Rpb24oU0lHVVNSMSwgXHUwMDI2c2EsIE5VTEwpO1xuK31cbitcbitzdGF0aWMgdm9pZCBrdm1feDg2X3N0YXRlX3F1ZXVlX3VkKHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSlcbit7XG4rXHRpZiAoc3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5wZW5kaW5nIHx8IHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24uaW5qZWN0ZWQpXG4rXHRcdHJldHVybjtcbitcbitcdHN0YXRlLVx1MDAzZWV2ZW50cy5mbGFncyB8PSBLVk1fVkNQVUVWRU5UX1ZBTElEX1BBWUxPQUQ7XG4rXHRzdGF0ZS1cdTAwM2VldmVudHMuZXhjZXB0aW9uLnBlbmRpbmcgPSB0cnVlO1xuK1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5pbmplY3RlZCA9IGZhbHNlO1xuK1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5uciA9IFVEX1ZFQ1RPUjtcbitcdHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24uaGFzX2Vycm9yX2NvZGUgPSBmYWxzZTtcbitcdHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb25faGFzX3BheWxvYWQgPSBmYWxzZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnVuX3Rlc3QoYm9vbCBuZXN0ZWQpXG4re1xuK1x0c3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlO1xuK1x0aW50IHIsIGksIGxldmVsO1xuK1x0cHRocmVhZF90IHNpZ3Vzcl90aHJlYWQ7XG4rXHRncGFfdCBncGEsIHBndGFibGVfZ3BhO1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRzdHJ1Y3QgdWNhbGwgdWM7XG4rXHR1NjQgKnBndGFibGU7XG4rXHRndmFfdCBndmE7XG4rXHR1NjQgcHRlO1xuK1xuK1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBuZXN0ZWQgPyBsMV9ndWVzdF9jb2RlIDogZ3Vlc3RfYWNjZXNzX21lbW9yeSk7XG4rXHR2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBQRl9WRUNUT1IsIGd1ZXN0X3BmX2hhbmRsZXIpO1xuK1xuK1x0aWYgKG5lc3RlZCkge1xuK1x0XHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FELCAtMnVsKTtcbitcdFx0aWYgKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkpXG4rXHRcdFx0dmNwdV9hbGxvY19zdm0odm0sIFx1MDAyNmd2YSk7XG4rXHRcdGVsc2VcbitcdFx0XHR2Y3B1X2FsbG9jX3ZteCh2bSwgXHUwMDI2Z3ZhKTtcbitcdFx0dmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBndmEpO1xuK1x0fVxuK1xuK1x0LyogQWxsb2NhdGUgYSBwYWdlIGFuZCB3cml0ZSB0aGUgcGF0dGVybiB0byBpdCAqL1xuK1x0Z3ZhID0gdm1fYWxsb2NfcGFnZSh2bSk7XG4rXHQqKHU2NCAqKWFkZHJfZ3ZhMmh2YSh2bSwgZ3ZhKSA9IFBBVFRFUk47XG4rXHRncGEgPSBhZGRyX2d2YTJncGEodm0sIGd2YSk7XG4rXG4rXHQvKlxuK1x0ICogTWFwIGFsbCB2aXJ0dWFsIGFkZHJlc3NlcyB0byB0aGUgcGF0dGVybiBwYWdlIGFuZCBjbGVhciB0aGUgcHJlc2VudFxuK1x0ICogYml0IHN1Y2ggdGhhdCBndWVzdCBhY2Nlc3NlcyB3aWxsIGNhdXNlIGEgI1BGLlxuK1x0ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBQVFJTX1BFUl9QVEU7IGkrKykge1xuK1x0XHRndmEgPSBURVNUX01FTV9CQVNFX0dWQSArIGkgKiBnZXRwYWdlc2l6ZSgpO1xuK1x0XHR2aXJ0X3BnX21hcCh2bSwgZ3ZhLCBncGEpO1xuK1x0XHQqdm1fZ2V0X3B0ZSh2bSwgZ3ZhKSBcdTAwMjY9IH5QVEVfUFJFU0VOVF9NQVNLKFx1MDAyNnZtLVx1MDAzZW1tdSk7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogTm93IGNyZWF0ZSBtYXBwaW5ncyBmb3IgdGhlIHBhZ2UgdGFibGVzIGNyZWF0ZWQgYWJvdmUgc28gdGhhdCB0aGVcbitcdCAqIGd1ZXN0ICNQRiBoYW5kbGVyIGNhbiB3YWxrIHRoZW0uIEFsbCBQVEVzIGZvciB0ZXN0IHZpcnR1YWwgYWRkcmVzc2VzXG4rXHQgKiBzaG91bGQgbGllIG9uIHRoZSBzYW1lIFBURSBwYWdlLCBzbyBvbmUgcGFnZSBpcyBtYXBwZWQgZm9yIGVhY2ggcGFnZVxuK1x0ICogdGFibGUgbGV2ZWwuXG4rXHQgKlxuK1x0ICogVXNlIGFuIG9mZnNldCBmb3IgdGhlIEdWQSBpbnN0ZWFkIG9mIGNyZWF0aW5nIGlkZW50aXR5IG1hcHBpbmdzIHRvXG4rXHQgKiBhdm9pZCBjb2xsaXNpb24gd2l0aCBleGlzdGluZyBtYXBwaW5ncyBhdCBsb3cgR1ZBcyAoZS5nLiBFTEYpLlxuK1x0ICovXG4rXHRwZ3RhYmxlX2dwYSA9IHZtLVx1MDAzZW1tdS5wZ2Q7XG4rXHRmb3IgKGxldmVsID0gdm0tXHUwMDNlbW11LnBndGFibGVfbGV2ZWxzOyBsZXZlbCBcdTAwM2U9IFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7XG4rXHRcdHZpcnRfbWFwKHZtLCBwZ3RhYmxlX2dwYSArIFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VULCBwZ3RhYmxlX2dwYSwgMSk7XG4rXHRcdHBndGFibGUgPSBhZGRyX2dwYTJodmEodm0sIHBndGFibGVfZ3BhKTtcbitcdFx0cHRlID0gcGd0YWJsZVtQWERfSU5ERVgoVEVTVF9NRU1fQkFTRV9HVkEsIGxldmVsKV07XG4rXHRcdHBndGFibGVfZ3BhID0gUFRFX0dFVF9QQShwdGUpO1xuK1x0fVxuK1xuK1x0LyogSW5pdGlhbGl6ZSB0aGUgdGhyZWFkIHNlbmRpbmcgU0lHVVNSIGFuZCBpbnN0YWxsIHRoZSBoYW5kbGVyICovXG4rXHR2Y3B1X3NpZ3Vzcl9pZ25vcmUoKTtcbitcdHIgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZzaWd1c3JfdGhyZWFkLCBOVUxMLCBzaWd1c3JfdGhyZWFkX2ZuLFxuK1x0XHRcdCAgICh2b2lkICopcHRocmVhZF9zZWxmKCkpO1xuK1x0VEVTVF9BU1NFUlQoIXIsIFwicHRocmVhZF9jcmVhdGUoKSBmYWlsZWQ6ICVkXCIsIHIpO1xuK1xuK1x0Zm9yIChpID0gMTsgaSBcdTAwM2M9IE5SX0lURVJBVElPTlM7IGkrKykge1xuK1x0XHQvKlxuK1x0XHQgKiBPbmx5IGhhbmRsZSBTSUdVU1Igd2hpbGUgdGhlIHZDUFUgaXMgcnVubmluZywgb3RoZXJ3aXNlXG4rXHRcdCAqIGlnbm9yZSBpdCB0byBhdm9pZCBpbnRlcnJ1cHRpbmcgb3RoZXIgaW9jdGxzL3N5c2NhbGxzLlxuK1x0XHQgKi9cbitcdFx0dmNwdV9zaWd1c3JfbGlzdGVuKCk7XG4rXHRcdHIgPSBfX3ZjcHVfcnVuKHZjcHUpO1xuK1x0XHRURVNUX0FTU0VSVCghciB8fCBlcnJubyA9PSBFSU5UUiwgXCJFeHBlY3RlZCBzdWNjZXNzIG9yIFNJR1VTUjFcIik7XG4rXHRcdHZjcHVfc2lndXNyX2lnbm9yZSgpO1xuK1xuK1x0XHQvKiBUaGUgZ3Vlc3Qgb25seSBleGl0cyBkdWUgdG8gYSBzaWduYWwgb3IgZmFpbGVkIGFzc2VydGlvbiAqL1xuK1x0XHRpZiAoIXIpIHtcbitcdFx0XHRURVNUX0FTU0VSVF9LVk1fRVhJVF9SRUFTT04odmNwdSwgS1ZNX0VYSVRfSU8pO1xuK1x0XHRcdFRFU1RfQVNTRVJUX0VRKGdldF91Y2FsbCh2Y3B1LCBcdTAwMjZ1YyksIFVDQUxMX0FCT1JUKTtcbitcdFx0XHRSRVBPUlRfR1VFU1RfQVNTRVJUKHVjKTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1xuK1x0XHRzdGF0ZSA9IHZjcHVfc2F2ZV9zdGF0ZSh2Y3B1KTtcbitcbitcdFx0LypcbitcdFx0ICogSWYgdGhlIHZDUFUgaXMgaW4gZ3Vlc3QgbW9kZSwgaW5qZWN0IGEgI1VEIHRvIHRyaWdnZXIgYW5cbitcdFx0ICogTDItXHUwMDNlTDEgVk0tRXhpdCBldmVyeSBvdGhlciBpdGVyYXRpb24uXG4rXHRcdCAqL1xuK1x0XHRpZiAoa3ZtX3g4Nl9zdGF0ZV9pc19ndWVzdF9tb2RlKHN0YXRlKSBcdTAwMjZcdTAwMjYgaSAlIDIgPT0gMClcbitcdFx0XHRrdm1feDg2X3N0YXRlX3F1ZXVlX3VkKHN0YXRlKTtcbitcbitcdFx0a3ZtX3ZtX3JlbGVhc2Uodm0pO1xuK1x0XHR2Y3B1ID0gdm1fcmVjcmVhdGVfd2l0aF9vbmVfdmNwdSh2bSk7XG4rXHRcdGlmIChuZXN0ZWQpXG4rXHRcdFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FWENFUFRJT05fUEFZTE9BRCwgLTJ1bCk7XG4rXHRcdHZjcHVfbG9hZF9zdGF0ZSh2Y3B1LCBzdGF0ZSk7XG4rXHRcdGt2bV94ODZfc3RhdGVfY2xlYW51cChzdGF0ZSk7XG4rXG4rXHRcdHByX2luZm8oXCJcXHJTYXZlK3Jlc3RvcmUgaXRlcmF0aW9uczogJWRcIiwgaSk7XG4rXHR9XG4rXHRwcl9pbmZvKFwiXFxuXCIpO1xuK1xuK1x0c3luY19nbG9iYWxfZnJvbV9ndWVzdCh2bSwgZ3Vlc3RfZmF1bHRzKTtcbitcdFRFU1RfQVNTRVJUKGd1ZXN0X2ZhdWx0cywgXCJObyBndWVzdCBwYWdlIGZhdWx0cyB0cmlnZ2VyZWRcIik7XG4rXHRwcl9pbmZvKFwiR3Vlc3QgcGFnZSBmYXVsdHMlczogJWx1XFxuXCIsIG5lc3RlZCA/IFwiIChpbiBMMilcIiA6IFwiXCIsIGd1ZXN0X2ZhdWx0cyk7XG4rXG4rXHRwdGhyZWFkX2NhbmNlbChzaWd1c3JfdGhyZWFkKTtcbitcdHB0aHJlYWRfam9pbihzaWd1c3JfdGhyZWFkLCBOVUxMKTtcbitcdGt2bV92bV9mcmVlKHZtKTtcbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbit7XG4rXHRwcl9pbmZvKFwiUnVubmluZyBzYXZlK3Jlc3RvcmUgc3RyZXNzIHRlc3QuLi5cXG5cIik7XG4rXHRydW5fdGVzdCgvKm5lc3RlZD0qL2ZhbHNlKTtcbitcbitcdGlmICgha3ZtX2hhc19jYXAoS1ZNX0NBUF9FWENFUFRJT05fUEFZTE9BRCkgfHxcbitcdCAgICAha3ZtX2hhc19jYXAoS1ZNX0NBUF9ORVNURURfU1RBVEUpIHx8XG4rXHQgICAgKCFrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pIFx1MDAyNlx1MDAyNiAha3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSkpIHtcbitcdFx0cHJfaW5mbyhcIk5lc3RlZCB2aXJ0dWFsaXphdGlvbiBub3Qgc3VwcG9ydGVkLCBza2lwcGluZyBuZXN0ZWQgdGVzdFxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRwcl9pbmZvKFwiUnVubmluZyBzYXZlK3Jlc3RvcmUgc3RyZXNzIHRlc3Qgd2l0aCBhIG5lc3RlZCBndWVzdC4uLlxcblwiKTtcbitcdHJ1bl90ZXN0KC8qbmVzdGVkPSovdHJ1ZSk7XG4rXHRyZXR1cm4gMDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXG5pbmRleCBlMjU0MmY0Y2VkNjA1Li5kMWVkYWZkNWFmNzU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmNcbkBAIC0yMiw5ICsyMiw2IEBAXG4gI2RlZmluZSBTTVJBTV9HUEEgMHgxMDAwMDAwXG4gI2RlZmluZSBTTVJBTV9TVEFHRSAweGZlXG4gXG4tI2RlZmluZSBTVFIoeCkgI3hcbi0jZGVmaW5lIFhTVFIocykgU1RSKHMpXG4tXG4gI2RlZmluZSBTWU5DX1BPUlQgMHhlXG4gI2RlZmluZSBET05FIDB4ZmZcbiBcbkBAIC00Miw3ICszOSw3IEBAIHU4IHNtaV9oYW5kbGVyW10gPSB7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHN5bmNfd2l0aF9ob3N0KHU2NCBwaGFzZSlcbiB7XG4tXHRhc20gdm9sYXRpbGUoXCJpbiAkXCIgWFNUUihTWU5DX1BPUlQpXCIsICUlYWwgXFxuXCJcbitcdGFzbSB2b2xhdGlsZShcImluICRcIiBfX3N0cmluZ2lmeShTWU5DX1BPUlQpXCIsICUlYWwgXFxuXCJcbiBcdFx0ICAgICA6IFwiK2FcIiAocGhhc2UpKTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMToyMzowNC4zNTQxMTYyNTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTU1MzczOTMxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IEtWTSBTZWxmdGVzdCBQYXRjaCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEtWTSBzZWxmdGVzdHMuIEl0IHNlZW1zIHRvIGFkZCBhIG5ldyB0ZXN0LCBgc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0YCwgYW5kIHR3ZWFrcyBzb21lIGV4aXN0aW5nIHRlc3QgZmlsZXM6IGBldm1jcy5oYCwgYHByb2Nlc3Nvci5oYCwgYHZteC5oYCwgYHN2bS5jYCwgYHVjYWxsLmNgLCBgdm14LmNgLCBgZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY2AsIGBmaXhfaHlwZXJjYWxsX3Rlc3QuY2AsIGFuZCBgc21tX3Rlc3QuY2AuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCB1bmRlciBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3Q6IHRoaXMgcGF0Y2ggaXMgKnNvbGVseSogbW9kaWZ5aW5nIGZpbGVzIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AuICBUaGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIG15IGV4cGVydCBpbnN0aW5jdHMuIFRoZXNlIGFyZSBzZWxmdGVzdHM7IHRoZXkncmUgdXNlci1zcGFjZSBwcm9ncmFtcyBkZXNpZ25lZCB0byAqdGVzdCogdGhlIGtlcm5lbCdzIEtWTSBpbXBsZW1lbnRhdGlvbiwgbm90IHBhcnQgb2YgdGhlIGtlcm5lbCdzIGNvcmUgZnVuY3Rpb25hbGl0eS5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBubyBrZXJuZWwgZmlsZXMgYXJlIG1vZGlmaWVkIGJ5IGxvb2tpbmcgYXQgdGhlIGRpZmYgYWdhaW46XG5gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bWBcbmB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaGBcbmB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaGBcbmB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhgXG5gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oYFxuYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNgXG5gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNgXG5gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmNgXG5gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuY2BcbmB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni92bXguY2BcbmB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNgXG5gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9maXhfaHlwZXJjYWxsX3Rlc3QuY2BcbmB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jYFxuYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY2BcblllcCwgYWxsIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gIGRpcmVjdG9yeS5cblxuVGhlIHByb21wdCwgb2YgY291cnNlLCBkb2VzIG5vdCBleHBsaWNpdGx5IGxpc3QgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AuIEJ1dCBpdCBwcm92aWRlcyB0aGUgdWx0aW1hdGUgbGl0bXVzIHRlc3QuICBEb2VzIGl0IG1ha2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkPyBOby4gVGhlc2UgYXJlIG5vdCBrZXJuZWwgY29kZS4gIFRoZXNlIGFyZSB1c2VyIHNwYWNlIHByb2dyYW1zIHRvICp0ZXN0KiB0aGUga2VybmVsJ3MgYmVoYXZpb3IuIFRoZXkgbWlnaHQgKnJldmVhbCogYnVncyBpbiB0aGUga2VybmVsLCBidXQgdGhleSBkb24ndCAqaW50cm9kdWNlKiB0aGVtIG9yIGZ1bmN0aW9uYWxseSBjaGFuZ2UgYW55dGhpbmcgaW4gdGhlIGtlcm5lbC4gIFRoZSBjaGFuZ2VzIGluIHRoZXNlIHRlc3RzIGFyZSBzaW1wbHkgZm9yIHRlc3RpbmcsIG5vdCBrZXJuZWwgZnVuY3Rpb24uXG5cblRoZXJlZm9yZSwgYXBwbHlpbmcgdGhlIGluc3RydWN0aW9uJ3MgaW50ZW50LCBJIHdpbGwgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIyNCwiT3V0cHV0VG9rZW5zIjo3MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAxOjIzOjE1LjkwNzg1ODk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggYXJlIHVzZXItc3BhY2UgdGVzdGluZyBwcm9ncmFtcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggYXJlIHVzZXItc3BhY2UgdGVzdGluZyBwcm9ncmFtcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowr786b[1] Phase: Running StartedAt: 2026-07-30 01:23:26 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr786b[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-30 01:23:26 +0000 UTC FinishedAt: 2026-07-30 01:23:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}