Name: series-workflow77r52 Phase: Failed StartedAt: 2026-07-28 19:11:40 +0000 UTC FinishedAt: 2026-07-28 19:40:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77r52[0] Phase: Succeeded StartedAt: 2026-07-28 19:11:40 +0000 UTC FinishedAt: 2026-07-28 19:40:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77r52[0].run-triage Phase: Succeeded StartedAt: 2026-07-28 19:11:40 +0000 UTC FinishedAt: 2026-07-28 19:40:07 +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+CgkJCTx0ZD4yMDI2LzA3LzI4IDE5OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhbmQgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGNvZGUgb3IgZHJpdmVycy4gU2luY2UgdGhlIGZ1enppbmcgdGFyZ2V0cyB0aGUga2VybmVsIGFuZCBub3QgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbHMsIHRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGtlcm5lbCBjaGFuZ2VzIHRvIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE5OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTI5NDg2OGFkMDkxMzVhZjEwZTAxZTY2MDRmM2E5NzkxMWZjNTRlYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDE5OjM5OjQxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5pbmRleCA4OGM2YzgwNDZkZGVjLi5lNjdiMWU5ODkzZjY4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuQEAgLTExMiw2ICYjNDM7MTEyLDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvc2V0X3NyZWdzX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zbW1fdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3N0YXRlX3Rlc3RcbiYjNDM7VEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvdm14X3ByZWVtcHRpb25fdGltZXJfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3N2bV92bWNhbGxfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3N2bV9pbnRfY3RsX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXG5pbmRleCBkNjRjOGEyMjgyMDdhLi5lODM1NmVlNTRkN2I5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXG5AQCAtMjMsNiAmIzQzOzIzLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXHUwMDNlXG4gXG4gI2RlZmluZSBtc2Vjc190b191c2Vjcyhtc2VjKSAgICAoKG1zZWMpICogMTAwMFVMTClcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXG5pbmRleCBiZTc5YmRhMDI0YmYxLi44MmE4ZWE2YjY2MWYwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXG5AQCAtMTIwNywzMCAmIzQzOzEyMDcsMjMgQEAgc3RhdGljIGlubGluZSBpbnQgZXZtY3Nfdm1sYXVuY2godm9pZClcbiBcbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlaHZfY2xlYW5fZmllbGRzID0gMDtcbiBcbi1cdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O3B1c2ggJSVyYnA7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcmN4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJkeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyc2k7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcmRpO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAkMDtcJiMzNDtcbiYjNDM7XHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcJiMzNDtwdXNoICQwO1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7bW92ICUlcnNwLCAoJVtob3N0X3JzcF0pO1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7bGVhIDFmKCUlcmlwKSwgJSVyYXg7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDttb3YgJSVyYXgsICglW2hvc3RfcmlwXSk7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuIFx0XHRcdCAgICAgXCYjMzQ7dm1sYXVuY2g7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDtpbmNxICglJXJzcCk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDsxOiBwb3AgJSVyYXg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyZGk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyc2k7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyZHg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyY3g7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYnA7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7MTogO1wmIzM0O1xuJiM0MztcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbiYjNDM7XHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYXg7XCYjMzQ7XG4gXHRcdFx0ICAgICA6IFtyZXRdXCYjMzQ7PVx1MDAyNmFcJiMzNDsocmV0KVxuIFx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCYjMzQ7clwmIzM0O1xuIFx0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcnNwKSxcbiBcdFx0XHQgICAgICAgW2hvc3RfcmlwXVwmIzM0O3JcJiMzNDtcbi1cdFx0XHQgICAgICAgKCh1NjQpXHUwMDI2Y3VycmVudF9ldm1jcy1cdTAwM2Vob3N0X3JpcClcbi1cdFx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0OywgXCYjMzQ7cmJ4XCYjMzQ7LCBcJiMzNDtyOFwmIzM0OywgXCYjMzQ7cjlcJiMzNDssIFwmIzM0O3IxMFwmIzM0Oyxcbi1cdFx0XHQgICAgICAgXCYjMzQ7cjExXCYjMzQ7LCBcJiMzNDtyMTJcJiMzNDssIFwmIzM0O3IxM1wmIzM0OywgXCYjMzQ7cjE0XCYjMzQ7LCBcJiMzNDtyMTVcJiMzNDspO1xuJiM0MztcdFx0XHQgICAgICAgKCh1NjQpXHUwMDI2Y3VycmVudF9ldm1jcy1cdTAwM2Vob3N0X3JpcCksXG4mIzQzO1x0XHRcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcbiYjNDM7XHRcdFx0ICAgICA6IFwmIzM0O21lbW9yeVwmIzM0OywgXCYjMzQ7Y2NcJiMzNDspO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTI0NiwzMCAmIzQzOzEyMzksMjMgQEAgc3RhdGljIGlubGluZSBpbnQgZXZtY3Nfdm1yZXN1bWUodm9pZClcbiBcdC8qIEhPU1RfUlNQICovXG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZWh2X2NsZWFuX2ZpZWxkcyBcdTAwMjY9IH5IVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfSE9TVF9QT0lOVEVSO1xuIFxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7cHVzaCAlJXJicDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyY3g7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcmR4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyZGk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICQwO1wmIzM0O1xuJiM0MztcdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O3B1c2ggJDA7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDttb3YgJSVyc3AsICglW2hvc3RfcnNwXSk7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O21vdiAlJXJheCwgKCVbaG9zdF9yaXBdKTtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4gXHRcdFx0ICAgICBcJiMzNDt2bXJlc3VtZTtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O2luY3EgKCUlcnNwKTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0OzE6IHBvcCAlJXJheDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJjeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJicDtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDsxOiA7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuJiM0MztcdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJheDtcJiMzNDtcbiBcdFx0XHQgICAgIDogW3JldF1cJiMzNDs9XHUwMDI2YVwmIzM0OyhyZXQpXG4gXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cJiMzNDtyXCYjMzQ7XG4gXHRcdFx0ICAgICAgICgodTY0KVx1MDAyNmN1cnJlbnRfZXZtY3MtXHUwMDNlaG9zdF9yc3ApLFxuIFx0XHRcdCAgICAgICBbaG9zdF9yaXBdXCYjMzQ7clwmIzM0O1xuLVx0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcmlwKVxuLVx0XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7LCBcJiMzNDtyYnhcJiMzNDssIFwmIzM0O3I4XCYjMzQ7LCBcJiMzNDtyOVwmIzM0OywgXCYjMzQ7cjEwXCYjMzQ7LFxuLVx0XHRcdCAgICAgICBcJiMzNDtyMTFcJiMzNDssIFwmIzM0O3IxMlwmIzM0OywgXCYjMzQ7cjEzXCYjMzQ7LCBcJiMzNDtyMTRcJiMzNDssIFwmIzM0O3IxNVwmIzM0Oyk7XG4mIzQzO1x0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcmlwKSxcbiYjNDM7XHRcdFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xuJiM0MztcdFx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0Oyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcbmluZGV4IGIxNjExNzRlY2U0NTMuLjQ2MWM4YWVmN2QzN2IgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxuQEAgLTI0LDYgJiM0MzsyNCw3IEBAIGV4dGVybiBib29sIGhvc3RfY3B1X2lzX2FtZDtcbiBleHRlcm4gYm9vbCBob3N0X2NwdV9pc19oeWdvbjtcbiBleHRlcm4gYm9vbCBob3N0X2NwdV9pc19hbWRfY29tcGF0aWJsZTtcbiBleHRlcm4gdTY0IGd1ZXN0X3RzY19raHo7XG4mIzQzO2V4dGVybiBzdHJ1Y3Qga3ZtX21tdSBndWVzdF9tbXU7XG4gXG4gI2lmbmRlZiBNQVhfTlJfQ1BVSURfRU5UUklFU1xuICNkZWZpbmUgTUFYX05SX0NQVUlEX0VOVFJJRVMgMTAwXG5AQCAtMzk4LDggJiM0MzszOTksNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4ODZfbW9kZWwodW5zaWduZWQgaW50IGVheClcbiAjZGVmaW5lIFBURV9HRVRfUEEocHRlKVx0XHQoKHB0ZSkgXHUwMDI2IFBIWVNJQ0FMX1BBR0VfTUFTSylcbiAjZGVmaW5lIFBURV9HRVRfUEZOKHB0ZSkgICAgICAgIChQVEVfR0VUX1BBKHB0ZSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpXG4gXG4tLyogR2VuZXJhbCBSZWdpc3RlcnMgaW4gNjQtQml0IE1vZGUgKi9cbi1zdHJ1Y3QgZ3ByNjRfcmVncyB7XG4mIzQzO3N0cnVjdCBndWVzdF9yZWdzIHtcbiBcdHU2NCByYXg7XG4gXHR1NjQgcmN4O1xuIFx0dTY0IHJkeDtcbkBAIC00MTYsOCAmIzQzOzQxNiwzOCBAQCBzdHJ1Y3QgZ3ByNjRfcmVncyB7XG4gXHR1NjQgcjEzO1xuIFx0dTY0IHIxNDtcbiBcdHU2NCByMTU7XG4mIzQzO1x0dTY0IHJmbGFncztcbiB9O1xuIFxuJiM0MztleHRlcm4gc3RydWN0IGd1ZXN0X3JlZ3MgZ3Vlc3RfcmVncztcbiYjNDM7XG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHX09GRlNFVChuYW1lKSBcXFxuJiM0MztcdFtvZmZfIyNuYW1lXSBcJiMzNDtpXCYjMzQ7IChvZmZzZXRvZihzdHJ1Y3QgZ3Vlc3RfcmVncywgbmFtZSkpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEdVRVNUX1JFR1NfT0ZGU0VUU1x0XFxcbiYjNDM7XHRHVUVTVF9SRUdfT0ZGU0VUKHJheCksXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocmN4KSxcdFxcXG4mIzQzO1x0R1VFU1RfUkVHX09GRlNFVChyZHgpLFx0XFxcbiYjNDM7XHRHVUVTVF9SRUdfT0ZGU0VUKHJieCksXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocnNwKSxcdFxcXG4mIzQzO1x0R1VFU1RfUkVHX09GRlNFVChyYnApLFx0XFxcbiYjNDM7XHRHVUVTVF9SRUdfT0ZGU0VUKHJzaSksXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocmRpKSxcdFxcXG4mIzQzO1x0R1VFU1RfUkVHX09GRlNFVChyOCksXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocjkpLFx0XFxcbiYjNDM7XHRHVUVTVF9SRUdfT0ZGU0VUKHIxMCksXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocjExKSxcdFxcXG4mIzQzO1x0R1VFU1RfUkVHX09GRlNFVChyMTIpLFx0XFxcbiYjNDM7XHRHVUVTVF9SRUdfT0ZGU0VUKHIxMyksXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocjE0KSxcdFxcXG4mIzQzO1x0R1VFU1RfUkVHX09GRlNFVChyMTUpLFx0XFxcbiYjNDM7XHRHVUVTVF9SRUdfT0ZGU0VUKHJmbGFncylcbiYjNDM7XG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHKG5hbWUpIFwmIzM0O2d1ZXN0X3JlZ3MgJiM0MzsgJWNbb2ZmX1wmIzM0OyAjbmFtZSBcJiMzNDtdXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEdVRVNUX1NXSVRDSF9HUFJfQVNNKG5hbWUpIFxcXG4mIzQzO1x0XCYjMzQ7eGNoZyAlJVwmIzM0OyAjbmFtZSBcJiMzNDssIFwmIzM0OyBHVUVTVF9SRUcobmFtZSkgXCYjMzQ7XFxuXFx0XCYjMzQ7XG4mIzQzO1xuIHN0cnVjdCBkZXNjNjQge1xuIFx0dTE2IGxpbWl0MDtcbiBcdHUxNiBiYXNlMDtcbkBAIC01ODQsNiAmIzQzOzYxNCwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2NyMCh1NjQgdmFsKVxuIFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7bW92ICUwLCAlJWNyMFwmIzM0OyA6IDogXCYjMzQ7clwmIzM0OyAodmFsKSA6IFwmIzM0O21lbW9yeVwmIzM0Oyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHU2NCBnZXRfY3IyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR1NjQgY3IyO1xuJiM0MztcbiYjNDM7XHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcJiMzNDttb3YgJSVjcjIsICVbY3IyXVwmIzM0O1xuJiM0MztcdFx0XHQgICAgIDogLyogb3V0cHV0ICovIFtjcjJdXCYjMzQ7PXJcJiMzNDsoY3IyKSk7XG4mIzQzO1x0cmV0dXJuIGNyMjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHU2NCBnZXRfY3IzKHZvaWQpXG4ge1xuIFx0dTY0IGNyMztcbkBAIC04NzksNiAmIzQzOzkxOCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfc3NlX3JlZyhpbnQgcmVnLCBjb25zdCBzc2UxMjhfdCAqZGF0YSlcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpbnZscGcodTY0IGFkZHIpXG4mIzQzO3tcbiYjNDM7XHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcJiMzNDtpbnZscGcgKCUwKVwmIzM0OyA6IDogXCYjMzQ7clwmIzM0OyhhZGRyKSA6IFwmIzM0O21lbW9yeVwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIGNwdV9yZWxheCh2b2lkKVxuIHtcbiBcdGFzbSB2b2xhdGlsZShcJiMzNDtyZXA7IG5vcFwmIzM0OyA6OjogXCYjMzQ7bWVtb3J5XCYjMzQ7KTtcbkBAIC05MTUsNiAmIzQzOzk1OSwxMSBAQCBzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqdmNwdV9zYXZlX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCB2Y3B1X2xvYWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGUpO1xuIHZvaWQga3ZtX3g4Nl9zdGF0ZV9jbGVhbnVwKHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSk7XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1feDg2X3N0YXRlX2lzX2d1ZXN0X21vZGUoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN0YXRlLVx1MDAzZW5lc3RlZC5zaXplIFx1MDAyNlx1MDAyNiAoc3RhdGUtXHUwMDNlbmVzdGVkLmZsYWdzIFx1MDAyNiBLVk1fU1RBVEVfTkVTVEVEX0dVRVNUX01PREUpO1xuJiM0Mzt9XG4mIzQzO1xuIGNvbnN0IHN0cnVjdCBrdm1fbXNyX2xpc3QgKmt2bV9nZXRfbXNyX2luZGV4X2xpc3Qodm9pZCk7XG4gY29uc3Qgc3RydWN0IGt2bV9tc3JfbGlzdCAqa3ZtX2dldF9mZWF0dXJlX21zcl9pbmRleF9saXN0KHZvaWQpO1xuIGJvb2wga3ZtX21zcl9pc19pbl9zYXZlX3Jlc3RvcmVfbGlzdCh1MzIgbXNyX2luZGV4KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbmluZGV4IDRiY2ZkNjBlM2FlY2IuLjA0ZjVlMzRkZWEzYWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuQEAgLTI5MCw2ICYjNDM7MjkwLDIzIEBAIHN0cnVjdCB2bXhfbXNyX2VudHJ5IHtcbiBcdHU2NCB2YWx1ZTtcbiB9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDE2KSkpO1xuIFxuJiM0MzsjZGVmaW5lIFZNWF9TV0lUQ0hfR1BSU19BU00gXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYXgpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJ4KSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJjeCkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZHgpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJwKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJzaSkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZGkpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjgpICBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI5KSAgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTApIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjExKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMikgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTMpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE0KSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNSlcbiYjNDM7XG4gI2luY2x1ZGUgXCYjMzQ7ZXZtY3MuaFwmIzM0O1xuIFxuIHN0YXRpYyBpbmxpbmUgaW50IHZteG9uKHU2NCBwaHlzKVxuQEAgLTM2Myw5ICYjNDM7MzgwLDYgQEAgc3RhdGljIGlubGluZSB1NjQgdm1wdHJzdHoodm9pZClcbiBcdHJldHVybiB2YWx1ZTtcbiB9XG4gXG4tLypcbi0gKiBObyBndWVzdCBzdGF0ZSAoZS5nLiBHUFJzKSBpcyBlc3RhYmxpc2hlZCBieSB0aGlzIHZtbGF1bmNoLlxuLSAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbkBAIC0zNzMsMzQgJiM0MzszODcsMjQgQEAgc3RhdGljIGlubGluZSBpbnQgdm1sYXVuY2godm9pZClcbiBcdGlmIChlbmFibGVfZXZtY3MpXG4gXHRcdHJldHVybiBldm1jc192bWxhdW5jaCgpO1xuIFxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7cHVzaCAlJXJicDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyY3g7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcmR4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyZGk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICQwO1wmIzM0O1xuJiM0MztcdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O3B1c2ggJDA7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDt2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O2xlYSAxZiglJXJpcCksICUlcmF4O1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7dm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuIFx0XHRcdCAgICAgXCYjMzQ7dm1sYXVuY2g7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDtpbmNxICglJXJzcCk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDsxOiBwb3AgJSVyYXg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyZGk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyc2k7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyZHg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyY3g7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYnA7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7MTogO1wmIzM0O1xuJiM0MztcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbiYjNDM7XHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYXg7XCYjMzQ7XG4gXHRcdFx0ICAgICA6IFtyZXRdXCYjMzQ7PVx1MDAyNmFcJiMzNDsocmV0KVxuIFx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCYjMzQ7clwmIzM0OygodTY0KUhPU1RfUlNQKSxcbi1cdFx0XHQgICAgICAgW2hvc3RfcmlwXVwmIzM0O3JcJiMzNDsoKHU2NClIT1NUX1JJUClcbi1cdFx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0OywgXCYjMzQ7cmJ4XCYjMzQ7LCBcJiMzNDtyOFwmIzM0OywgXCYjMzQ7cjlcJiMzNDssIFwmIzM0O3IxMFwmIzM0Oyxcbi1cdFx0XHQgICAgICAgXCYjMzQ7cjExXCYjMzQ7LCBcJiMzNDtyMTJcJiMzNDssIFwmIzM0O3IxM1wmIzM0OywgXCYjMzQ7cjE0XCYjMzQ7LCBcJiMzNDtyMTVcJiMzNDspO1xuJiM0MztcdFx0XHQgICAgICAgW2hvc3RfcmlwXVwmIzM0O3JcJiMzNDsoKHU2NClIT1NUX1JJUCksXG4mIzQzO1x0XHRcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcbiYjNDM7XHRcdFx0ICAgICA6IFwmIzM0O21lbW9yeVwmIzM0OywgXCYjMzQ7Y2NcJiMzNDspO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tLypcbi0gKiBObyBndWVzdCBzdGF0ZSAoZS5nLiBHUFJzKSBpcyBlc3RhYmxpc2hlZCBieSB0aGlzIHZtcmVzdW1lLlxuLSAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHZtcmVzdW1lKHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbkBAIC00MDgsMjggJiM0Mzs0MTIsMjEgQEAgc3RhdGljIGlubGluZSBpbnQgdm1yZXN1bWUodm9pZClcbiBcdGlmIChlbmFibGVfZXZtY3MpXG4gXHRcdHJldHVybiBldm1jc192bXJlc3VtZSgpO1xuIFxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7cHVzaCAlJXJicDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyY3g7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcmR4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyZGk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICQwO1wmIzM0O1xuJiM0MztcdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O3B1c2ggJDA7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDt2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O2xlYSAxZiglJXJpcCksICUlcmF4O1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7dm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuIFx0XHRcdCAgICAgXCYjMzQ7dm1yZXN1bWU7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDtpbmNxICglJXJzcCk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDsxOiBwb3AgJSVyYXg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyZGk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyc2k7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyZHg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyY3g7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYnA7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7MTogO1wmIzM0O1xuJiM0MztcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbiYjNDM7XHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYXg7XCYjMzQ7XG4gXHRcdFx0ICAgICA6IFtyZXRdXCYjMzQ7PVx1MDAyNmFcJiMzNDsocmV0KVxuIFx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCYjMzQ7clwmIzM0OygodTY0KUhPU1RfUlNQKSxcbi1cdFx0XHQgICAgICAgW2hvc3RfcmlwXVwmIzM0O3JcJiMzNDsoKHU2NClIT1NUX1JJUClcbi1cdFx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0OywgXCYjMzQ7cmJ4XCYjMzQ7LCBcJiMzNDtyOFwmIzM0OywgXCYjMzQ7cjlcJiMzNDssIFwmIzM0O3IxMFwmIzM0Oyxcbi1cdFx0XHQgICAgICAgXCYjMzQ7cjExXCYjMzQ7LCBcJiMzNDtyMTJcJiMzNDssIFwmIzM0O3IxM1wmIzM0OywgXCYjMzQ7cjE0XCYjMzQ7LCBcJiMzNDtyMTVcJiMzNDspO1xuJiM0MztcdFx0XHQgICAgICAgW2hvc3RfcmlwXVwmIzM0O3JcJiMzNDsoKHU2NClIT1NUX1JJUCksXG4mIzQzO1x0XHRcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcbiYjNDM7XHRcdFx0ICAgICA6IFwmIzM0O21lbW9yeVwmIzM0OywgXCYjMzQ7Y2NcJiMzNDspO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNcbmluZGV4IDFkNzJkY2RmY2UzYjYuLjNlMzUzYWMzOWVlYjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jXG5AQCAtNzQsNyAmIzQzOzc0LDcgQEAgdGVzdF9hc3NlcnQoYm9vbCBleHAsIGNvbnN0IGNoYXIgKmV4cF9zdHIsXG4gXHRpZiAoIShleHApKSB7XG4gXHRcdHZhX3N0YXJ0KGFwLCBmbXQpO1xuIFxuLVx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7PT09PSBUZXN0IEFzc2VydGlvbiBGYWlsdXJlID09PT1cXG5cJiMzNDtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXG49PT09IFRlc3QgQXNzZXJ0aW9uIEZhaWx1cmUgPT09PVxcblwmIzM0O1xuIFx0XHRcdFwmIzM0OyAgJXM6JXU6ICVzXFxuXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7ICBwaWQ9JWQgdGlkPSVkIGVycm5vPSVkIC0gJXNcXG5cJiMzNDssXG4gXHRcdFx0ZmlsZSwgbGluZSwgZXhwX3N0ciwgZ2V0cGlkKCksIGt2bV9nZXR0aWQoKSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG5pbmRleCBlZjU2ZGNlZmUwMTE5Li5kMzFmYTgxZWEwNzU2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG5AQCAtMjgsNiAmIzQzOzI4LDkgQEAgYm9vbCBob3N0X2NwdV9pc19oeWdvbjtcbiBib29sIGhvc3RfY3B1X2lzX2FtZF9jb21wYXRpYmxlO1xuIGJvb2wgaXNfZm9yY2VkX2VtdWxhdGlvbl9lbmFibGVkO1xuIHU2NCBndWVzdF90c2Nfa2h6O1xuJiM0MztzdHJ1Y3Qga3ZtX21tdSBndWVzdF9tbXU7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZ3Vlc3RfcmVncyBndWVzdF9yZWdzO1xuIFxuIGNvbnN0IGNoYXIgKmV4X3N0cihpbnQgdmVjdG9yKVxuIHtcbkBAIC04MjksNiAmIzQzOzgzMiwxNyBAQCB2b2lkIGt2bV9hcmNoX3ZtX3Bvc3RfY3JlYXRlKHN0cnVjdCBrdm1fdm0gKnZtLCB1bnNpZ25lZCBpbnQgbnJfdmNwdXMpXG4gXHRURVNUX0FTU0VSVChyIFx1MDAzZSAwLCBcJiMzNDtLVk1fR0VUX1RTQ19LSFogZGlkIG5vdCBwcm92aWRlIGEgdmFsaWQgVFNDIGZyZXF1ZW5jeS5cJiMzNDspO1xuIFx0Z3Vlc3RfdHNjX2toeiA9IHI7XG4gXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgZ3Vlc3RfdHNjX2toeik7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIGd1ZXN0IE1NVSBpcyBqdXN0IGEgcGxhY2Vob2xkZXIgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gUFRFIG1hc2tzXG4mIzQzO1x0ICogKGZvciBub3cpLiBUaGUgZ3Vlc3QgZG9lcyBub3QgaGF2ZSBtYXBwaW5ncyBmb3IgaXRzIG93biBwYWdlIHRhYmxlc1xuJiM0MztcdCAqIGJ5IGRlZmF1bHQsIHNvIGFueSBtZWFuaW5nZnVsIHVzZSBvZiBndWVzdCBwYWdlIHRhYmxlcyByZXF1aXJlc1xuJiM0MztcdCAqIGV4cGxpY2l0IHNldHVwIGJ5IHRoZSB0ZXN0LiBaZXJvIHRoZSBQR0QgdG8gbWFrZSBpdCBvYnZpb3VzIHRoZSBndWVzdFxuJiM0MztcdCAqIHBhZ2UgdGFibGVzIGFyZSBub3QgaW1tZWRpYXRlbHkgdXNhYmxlIGJ5IGd1ZXN0IGNvZGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0Z3Vlc3RfbW11ID0gdm0tXHUwMDNlbW11O1xuJiM0MztcdGd1ZXN0X21tdS5wZ2QgPSAwO1xuJiM0MztcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBndWVzdF9tbXUpO1xuIH1cbiBcbiB2b2lkIHZjcHVfYXJjaF9zZXRfZW50cnlfcG9pbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpndWVzdF9jb2RlKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmNcbmluZGV4IDE0NDViODkwOTg2ZmQuLmIwNWJlNTBmMDc1ZDYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmNcbkBAIC0xMyw5ICYjNDM7MTMsNiBAQFxuIFxuICNkZWZpbmUgU0VWX0RFVl9QQVRIIFwmIzM0Oy9kZXYvc2V2XCYjMzQ7XG4gXG4tc3RydWN0IGdwcjY0X3JlZ3MgZ3Vlc3RfcmVncztcbi11NjQgcmZsYWdzO1xuLVxuIC8qIEFsbG9jYXRlIG1lbW9yeSByZWdpb25zIGZvciBuZXN0ZWQgU1ZNIHRlc3RzLlxuICAqXG4gICogSW5wdXQgQXJnczpcbkBAIC0xMzcsNDYgJiM0MzsxMzQsNDcgQEAgdm9pZCBnZW5lcmljX3N2bV9zZXR1cChzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtLCB2b2lkICpndWVzdF9yaXApXG4gICogc2F2ZS9yZXN0b3JlIDY0LWJpdCBnZW5lcmFsIHJlZ2lzdGVycyBleGNlcHQgcmF4LCByaXAsIHJzcFxuICAqIHdoaWNoIGFyZSBkaXJlY3RseSBoYW5kZWQgdGhyb3VnaCB0aGUgVk1DQiBndWVzdCBwcm9jZXNzb3Igc3RhdGVcbiAgKi9cbi0jZGVmaW5lIFNBVkVfR1BSX0NcdFx0XHRcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcmJ4LCBndWVzdF9yZWdzJiM0MzsweDIwXFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXJjeCwgZ3Vlc3RfcmVncyYjNDM7MHgxMFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyZHgsIGd1ZXN0X3JlZ3MmIzQzOzB4MThcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcmJwLCBndWVzdF9yZWdzJiM0MzsweDMwXFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXJzaSwgZ3Vlc3RfcmVncyYjNDM7MHgzOFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyZGksIGd1ZXN0X3JlZ3MmIzQzOzB4NDBcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcjgsICBndWVzdF9yZWdzJiM0MzsweDQ4XFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXI5LCAgZ3Vlc3RfcmVncyYjNDM7MHg1MFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyMTAsIGd1ZXN0X3JlZ3MmIzQzOzB4NThcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcjExLCBndWVzdF9yZWdzJiM0MzsweDYwXFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXIxMiwgZ3Vlc3RfcmVncyYjNDM7MHg2OFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyMTMsIGd1ZXN0X3JlZ3MmIzQzOzB4NzBcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcjE0LCBndWVzdF9yZWdzJiM0MzsweDc4XFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXIxNSwgZ3Vlc3RfcmVncyYjNDM7MHg4MFxcblxcdFwmIzM0O1xuLVxuLSNkZWZpbmUgTE9BRF9HUFJfQyAgICAgIFNBVkVfR1BSX0NcbiYjNDM7I2RlZmluZSBTVk1fU1dJVENIX0dQUlNfQVNNIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJ4KSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJjeCkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZHgpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJwKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJzaSkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZGkpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjgpICBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI5KSAgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTApIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjExKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMikgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTMpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE0KSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNSlcbiBcbiAvKlxuICAqIHNlbGZ0ZXN0cyBkbyBub3QgdXNlIGludGVycnVwdHMgc28gd2UgZHJvcHBlZCBjbGdpL3N0aS9jbGkvc3RnaVxuLSAqIGZvciBub3cuIHJlZ2lzdGVycyBpbnZvbHZlZCBpbiBMT0FEL1NBVkVfR1BSX0MgYXJlIGV2ZW50dWFsbHlcbiYjNDM7ICogZm9yIG5vdy4gUmVnaXN0ZXJzIGludm9sdmVkIGluIFNWTV9TV0lUQ0hfR1BSU19BU00gYXJlIGV2ZW50dWFsbHlcbiAgKiB1bm1vZGlmaWVkIHNvIHRoZXkgZG8gbm90IG5lZWQgdG8gYmUgaW4gdGhlIGNsb2JiZXIgbGlzdC5cbiAgKi9cbiB2b2lkIHJ1bl9ndWVzdChzdHJ1Y3Qgdm1jYiAqdm1jYiwgdTY0IHZtY2JfZ3BhKVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG4gXHRcdFwmIzM0O3ZtbG9hZCAlW3ZtY2JfZ3BhXVxcblxcdFwmIzM0O1xuLVx0XHRcJiMzNDttb3YgcmZsYWdzLCAlJXIxNVxcblxcdFwmIzM0O1x0Ly8gcmZsYWdzXG4tXHRcdFwmIzM0O21vdiAlJXIxNSwgMHgxNzAoJVt2bWNiXSlcXG5cXHRcJiMzNDtcbi1cdFx0XCYjMzQ7bW92IGd1ZXN0X3JlZ3MsICUlcjE1XFxuXFx0XCYjMzQ7XHQvLyByYXhcbi1cdFx0XCYjMzQ7bW92ICUlcjE1LCAweDFmOCglW3ZtY2JdKVxcblxcdFwmIzM0O1xuLVx0XHRMT0FEX0dQUl9DXG4mIzQzO1x0XHRcJiMzNDttb3YgXCYjMzQ7IEdVRVNUX1JFRyhyZmxhZ3MpIFwmIzM0OywgJSVyMTVcXG5cXHRcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O21vdiAlJXIxNSwgJVt2bWNiX3JmbGFnc11cXG5cXHRcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O21vdiBcJiMzNDsgR1VFU1RfUkVHKHJheCkgXCYjMzQ7LCAlJXIxNVxcblxcdFwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7bW92ICUlcjE1LCAlW3ZtY2JfcmF4XVxcblxcdFwmIzM0O1xuJiM0MztcdFx0U1ZNX1NXSVRDSF9HUFJTX0FTTVxuIFx0XHRcJiMzNDt2bXJ1biAlW3ZtY2JfZ3BhXVxcblxcdFwmIzM0O1xuLVx0XHRTQVZFX0dQUl9DXG4tXHRcdFwmIzM0O21vdiAweDE3MCglW3ZtY2JdKSwgJSVyMTVcXG5cXHRcJiMzNDtcdC8vIHJmbGFnc1xuLVx0XHRcJiMzNDttb3YgJSVyMTUsIHJmbGFnc1xcblxcdFwmIzM0O1xuLVx0XHRcJiMzNDttb3YgMHgxZjgoJVt2bWNiXSksICUlcjE1XFxuXFx0XCYjMzQ7XHQvLyByYXhcbi1cdFx0XCYjMzQ7bW92ICUlcjE1LCBndWVzdF9yZWdzXFxuXFx0XCYjMzQ7XG4mIzQzO1x0XHRTVk1fU1dJVENIX0dQUlNfQVNNXG4mIzQzO1x0XHRcJiMzNDttb3YgJVt2bWNiX3JmbGFnc10sICUlcjE1XFxuXFx0XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDttb3YgJSVyMTUsIFwmIzM0OyBHVUVTVF9SRUcocmZsYWdzKSBcJiMzNDtcXG5cXHRcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O21vdiAlW3ZtY2JfcmF4XSwgJSVyMTVcXG5cXHRcJiMzNDtcdC8vIHJheFxuJiM0MztcdFx0XCYjMzQ7bW92ICUlcjE1LCBcJiMzNDsgR1VFU1RfUkVHKHJheCkgXCYjMzQ7XFxuXFx0XCYjMzQ7XG4gXHRcdFwmIzM0O3Ztc2F2ZSAlW3ZtY2JfZ3BhXVxcblxcdFwmIzM0O1xuLVx0XHQ6IDogW3ZtY2JdIFwmIzM0O3JcJiMzNDsgKHZtY2IpLCBbdm1jYl9ncGFdIFwmIzM0O2FcJiMzNDsgKHZtY2JfZ3BhKVxuJiM0MztcdFx0OiBbdm1jYl9yZmxhZ3NdIFwmIzM0OyYjNDM7bVwmIzM0OyAodm1jYi1cdTAwM2VzYXZlLnJmbGFncyksXG4mIzQzO1x0XHQgIFt2bWNiX3JheF0gXCYjMzQ7JiM0MzttXCYjMzQ7ICh2bWNiLVx1MDAzZXNhdmUucmF4KVxuJiM0MztcdFx0OiBbdm1jYl9ncGFdIFwmIzM0O2FcJiMzNDsgKHZtY2JfZ3BhKSxcbiYjNDM7XHRcdCAgR1VFU1RfUkVHU19PRkZTRVRTXG4gXHRcdDogXCYjMzQ7cjE1XCYjMzQ7LCBcJiMzNDttZW1vcnlcJiMzNDspO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuY1xuaW5kZXggZTdkZDU3OTE5NTliYS4uMzgwNTBjNjBhMDY3MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmNcbkBAIC0xMCwzNiAmIzQzOzEwLDggQEBcbiBcbiB2b2lkIHVjYWxsX2FyY2hfZG9fdWNhbGwoZ3ZhX3QgdWMpXG4ge1xuLVx0Lypcbi1cdCAqIEZJWE1FOiBSZXZlcnQgdGhpcyBoYWNrICh0aGUgZW50aXJlIGNvbW1pdCB0aGF0IGFkZGVkIGl0KSBvbmNlIG5WTVhcbi1cdCAqIHByZXNlcnZlcyBMMiBHUFJzIGFjcm9zcyBhIG5lc3RlZCBWTS1FeGl0LiAgSWYgYSB1Y2FsbCBmcm9tIEwyLCBlLmcuXG4tXHQgKiB0byBkbyBhIEdVRVNUX1NZTkMoKSwgbGFuZHMgdGhlIHZDUFUgaW4gTDEsIGFueSBhbmQgYWxsIEdQUnMgY2FuIGJlXG4tXHQgKiBjbG9iYmVyZWQgYnkgTDEuICBTYXZlIGFuZCByZXN0b3JlIG5vbi12b2xhdGlsZSBHUFJzIChjbG9iYmVyaW5nIFJCUFxuLVx0ICogaW4gcGFydGljdWxhciBpcyBwcm9ibGVtYXRpYykgYWxvbmcgd2l0aCBSRFggYW5kIFJESSAod2hpY2ggYXJlXG4tXHQgKiBpbnB1dHMpLCBhbmQgY2xvYmJlciB2b2xhdGlsZSBHUFJzLiAqc2lnaCpcbi1cdCAqL1xuLSNkZWZpbmUgSE9SUklGSUNfTDJfVUNBTExfQ0xPQkJFUl9IQUNLXHRcXFxuLVx0XCYjMzQ7cmN4XCYjMzQ7LCBcJiMzNDtyc2lcJiMzNDssIFwmIzM0O3I4XCYjMzQ7LCBcJiMzNDtyOVwmIzM0OywgXCYjMzQ7cjEwXCYjMzQ7LCBcJiMzNDtyMTFcJiMzNDtcbi1cbi1cdGFzbSB2b2xhdGlsZShcJiMzNDtwdXNoICUlcmJwXFxuXFx0XCYjMzQ7XG4tXHRcdCAgICAgXCYjMzQ7cHVzaCAlJXIxNVxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3B1c2ggJSVyMTRcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwdXNoICUlcjEzXFxuXFx0XCYjMzQ7XG4tXHRcdCAgICAgXCYjMzQ7cHVzaCAlJXIxMlxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3B1c2ggJSVyYnhcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwdXNoICUlcmR4XFxuXFx0XCYjMzQ7XG4tXHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJkaVxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O2luICVbcG9ydF0sICUlYWxcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyZGlcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyZHhcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyYnhcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyMTJcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyMTNcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyMTRcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyMTVcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyYnBcXG5cXHRcJiMzNDtcbi1cdFx0OiA6IFtwb3J0XSBcJiMzNDtkXCYjMzQ7IChVQ0FMTF9QSU9fUE9SVCksIFwmIzM0O0RcJiMzNDsgKHVjKSA6IFwmIzM0O3JheFwmIzM0OywgXCYjMzQ7bWVtb3J5XCYjMzQ7LFxuLVx0XHQgICAgIEhPUlJJRklDX0wyX1VDQUxMX0NMT0JCRVJfSEFDSyk7XG4mIzQzO1x0YXNtIHZvbGF0aWxlKFwmIzM0O2luICVbcG9ydF0sICUlYWxcJiMzNDtcbiYjNDM7XHRcdDogOiBbcG9ydF0gXCYjMzQ7ZFwmIzM0OyAoVUNBTExfUElPX1BPUlQpLCBcJiMzNDtEXCYjMzQ7ICh1YykgOiBcJiMzNDtyYXhcJiMzNDssIFwmIzM0O21lbW9yeVwmIzM0Oyk7XG4gfVxuIFxuIHZvaWQgKnVjYWxsX2FyY2hfZ2V0X3VjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcbmluZGV4IDc3Y2U4N2M0MWE4NjguLmFhN2YzYjQwNWZkMzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY1xuQEAgLTIyLDkgJiM0MzsyMiw2IEBAXG4gXG4gI2RlZmluZSBTWU5DX1BPUlRcdDB4ZVxuIFxuLSNkZWZpbmUgU1RSKHgpICN4XG4tI2RlZmluZSBYU1RSKHMpIFNUUihzKVxuLVxuIC8qXG4gICogU01JIGhhbmRsZXI6IHJ1bnMgaW4gcmVhbC1hZGRyZXNzIG1vZGUuXG4gICogUmVwb3J0cyBTTVJBTV9TVEFHRSB2aWEgcG9ydCBJTywgdGhlbiBkb2VzIFJTTS5cbkBAIC0zNyw3ICYjNDM7MzQsNyBAQCBzdGF0aWMgdTggc21pX2hhbmRsZXJbXSA9IHtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc3luY193aXRoX2hvc3QodTY0IHBoYXNlKVxuIHtcbi1cdGFzbSB2b2xhdGlsZShcJiMzNDtpbiAkXCYjMzQ7IFhTVFIoU1lOQ19QT1JUKSBcJiMzNDssICUlYWwgXFxuXCYjMzQ7XG4mIzQzO1x0YXNtIHZvbGF0aWxlKFwmIzM0O2luICRcJiMzNDsgX19zdHJpbmdpZnkoU1lOQ19QT1JUKSBcJiMzNDssICUlYWwgXFxuXCYjMzQ7XG4gXHRcdCAgICAgOiBcJiMzNDsmIzQzO2FcJiMzNDsgKHBoYXNlKSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZml4X2h5cGVyY2FsbF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jXG5pbmRleCA3NTNhMGU3MzBlYThkLi40OTMxZWMyMjc2OGVlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9maXhfaHlwZXJjYWxsX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9maXhfaHlwZXJjYWxsX3Rlc3QuY1xuQEAgLTYsNyAmIzQzOzYsNiBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGFyYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX3BhcmEuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtrdm1fdGVzdF9oYXJuZXNzLmhcJiMzNDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmJhMWQ3MjMwMDFlOTRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmNcbkBAIC0wLDAgJiM0MzsxLDI5MSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2dldG9wdC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt0ZXN0X3V0aWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrdm1fdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Byb2Nlc3Nvci5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3N2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm14LmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTlJfSVRFUkFUSU9OU1x0XHQ1MDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUFRSU19QRVJfUFRFXHRcdDUxMlxuJiM0MzsjZGVmaW5lIFBYRF9JTkRFWCh2YWRkciwgbGV2ZWwpXHQoKCh2YWRkcikgXHUwMDNlXHUwMDNlIFBHX0xFVkVMX1NISUZUKGxldmVsKSkgXHUwMDI2IChQVFJTX1BFUl9QVEUgLSAxKSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgVEVTVF9NRU1fQkFTRV9HVkFcdDB4YzAwMDAwMDBVTExcbiYjNDM7I2RlZmluZSBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVFx0MHhkMDAwMDAwMFVMTFxuJiM0MzsjZGVmaW5lIFBBVFRFUk5cdFx0XHQweGFiY2RlZmFiY2RlZmFiY2RVTExcbiYjNDM7XG4mIzQzO3N0YXRpYyB1NjQgZXhwZWN0ZWRfdmFkZHI7XG4mIzQzO3N0YXRpYyB1NjQgZ3Vlc3RfZmF1bHRzO1xuJiM0MztcbiYjNDM7c3RhdGljIHU2NCAqZ3Vlc3RfZ2V0X3B0ZSh1NjQgdmFkZHIpXG4mIzQzO3tcbiYjNDM7XHR1NjQgcGd0YWJsZV9wYSwgcHRlO1xuJiM0MztcdHU2NCAqcGd0YWJsZTtcbiYjNDM7XHRpbnQgbGV2ZWw7XG4mIzQzO1xuJiM0MztcdGxldmVsID0gKGdldF9jcjQoKSBcdTAwMjYgWDg2X0NSNF9MQTU3KSA/IFBHX0xFVkVMXzI1NlQgOiBQR19MRVZFTF81MTJHO1xuJiM0MztcbiYjNDM7XHRwZ3RhYmxlX3BhID0gZ2V0X2NyMygpIFx1MDAyNiBQSFlTSUNBTF9QQUdFX01BU0s7XG4mIzQzO1x0Zm9yICg7IGxldmVsIFx1MDAzZSBQR19MRVZFTF80SzsgbGV2ZWwtLSkge1xuJiM0MztcdFx0cGd0YWJsZSA9ICh1NjQgKikocGd0YWJsZV9wYSAmIzQzOyBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVCk7XG4mIzQzO1x0XHRwdGUgPSBwZ3RhYmxlW1BYRF9JTkRFWCh2YWRkciwgbGV2ZWwpXTtcbiYjNDM7XHRcdEdVRVNUX0FTU0VSVChwdGUgXHUwMDI2IFBURV9QUkVTRU5UX01BU0soXHUwMDI2Z3Vlc3RfbW11KSk7XG4mIzQzO1x0XHRHVUVTVF9BU1NFUlQoIShwdGUgXHUwMDI2IFBURV9IVUdFX01BU0soXHUwMDI2Z3Vlc3RfbW11KSkpO1xuJiM0MztcdFx0cGd0YWJsZV9wYSA9IFBURV9HRVRfUEEocHRlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBndGFibGUgPSAodTY0ICopKHBndGFibGVfcGEgJiM0MzsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQpO1xuJiM0MztcdHJldHVybiBcdTAwMjZwZ3RhYmxlW1BYRF9JTkRFWCh2YWRkciwgUEdfTEVWRUxfNEspXTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3RfcGZfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncylcbiYjNDM7e1xuJiM0MztcdHU2NCBmYXVsdF9hZGRyO1xuJiM0MztcdHU2NCAqcHRlcDtcbiYjNDM7XG4mIzQzO1x0ZmF1bHRfYWRkciA9IGdldF9jcjIoKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlRfRVEoZmF1bHRfYWRkciwgUkVBRF9PTkNFKGV4cGVjdGVkX3ZhZGRyKSk7XG4mIzQzO1xuJiM0MztcdHB0ZXAgPSBndWVzdF9nZXRfcHRlKGZhdWx0X2FkZHIpO1xuJiM0MztcdEdVRVNUX0FTU0VSVChwdGVwKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQoISgqcHRlcCBcdTAwMjYgUFRFX1BSRVNFTlRfTUFTSyhcdTAwMjZndWVzdF9tbXUpKSk7XG4mIzQzO1xuJiM0MztcdCpwdGVwIHw9IFBURV9QUkVTRU5UX01BU0soXHUwMDI2Z3Vlc3RfbW11KTtcbiYjNDM7XHRndWVzdF9mYXVsdHMmIzQzOyYjNDM7O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBndWVzdF9hY2Nlc3NfbWVtb3J5KHZvaWQgKmFyZylcbiYjNDM7e1xuJiM0MztcdHU2NCB2YWRkciwgdmFsO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyA7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR2YWRkciA9IFRFU1RfTUVNX0JBU0VfR1ZBICYjNDM7IChpICUgUFRSU19QRVJfUFRFKSAqIFBBR0VfU0laRTtcbiYjNDM7XHRcdFdSSVRFX09OQ0UoZXhwZWN0ZWRfdmFkZHIsIHZhZGRyKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSZWFkIHRvIHRyaWdnZXIgI1BGICovXG4mIzQzO1x0XHR2YWwgPSBSRUFEX09OQ0UoKih1NjQgKil2YWRkcik7XG4mIzQzO1x0XHRHVUVTVF9BU1NFUlRfRVEodmFsLCBQQVRURVJOKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBDbGVhciB0aGUgcHJlc2VudCBiaXQgYWdhaW4gc28gaXQgZmF1bHRzIG5leHQgdGltZSAqL1xuJiM0MztcdFx0Kmd1ZXN0X2dldF9wdGUodmFkZHIpIFx1MDAyNj0gflBURV9QUkVTRU5UX01BU0soXHUwMDI2Z3Vlc3RfbW11KTtcbiYjNDM7XHRcdGludmxwZyh2YWRkcik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBsMV9zdm1fY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtKVxuJiM0Mzt7XG4mIzQzO1x0Z2VuZXJpY19zdm1fc2V0dXAoc3ZtLCBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcbiYjNDM7XHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zIHw9IEJJVChVRF9WRUNUT1IpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoMSkge1xuJiM0MztcdFx0cnVuX2d1ZXN0KHN2bS1cdTAwM2V2bWNiLCBzdm0tXHUwMDNldm1jYl9ncGEpO1xuJiM0MztcdFx0R1VFU1RfQVNTRVJUX0VRKHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9jb2RlLFxuJiM0MztcdFx0XHRcdChTVk1fRVhJVF9FWENQX0JBU0UgJiM0MzsgVURfVkVDVE9SKSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4mIzQzO3tcbiYjNDM7XHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteCkpO1xuJiM0MztcdHByZXBhcmVfdm1jcyh2bXgsIGd1ZXN0X2FjY2Vzc19tZW1vcnkpO1xuJiM0MztcbiYjNDM7XHQvKiBJbnRlcmNlcHQgVUQsIGlnbm9yZSBhbnkgI1BGICovXG4mIzQzO1x0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEVYQ0VQVElPTl9CSVRNQVAsIEJJVChVRF9WRUNUT1IpIHwgQklUKFBGX1ZFQ1RPUikpKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BU0ssIDApKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BVENILCAtMSkpO1xuJiM0MztcbiYjNDM7XHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuJiM0MztcdHdoaWxlICgxKSB7XG4mIzQzO1x0XHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpO1xuJiM0MztcdFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pIFx1MDAyNiAweGZmLCBVRF9WRUNUT1IpO1xuJiM0MztcdFx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqdGVzdF9kYXRhKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKVxuJiM0MztcdFx0bDFfc3ZtX2NvZGUodGVzdF9kYXRhKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRsMV92bXhfY29kZSh0ZXN0X2RhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqc2lndXNyX3RocmVhZF9mbih2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHRwdGhyZWFkX3QgdmNwdV90aHJlYWQgPSAocHRocmVhZF90KWFyZztcbiYjNDM7XG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0cHRocmVhZF90ZXN0Y2FuY2VsKCk7XG4mIzQzO1x0XHRwdGhyZWFkX2tpbGwodmNwdV90aHJlYWQsIFNJR1VTUjEpO1xuJiM0MztcdFx0dXNsZWVwKG1zZWNzX3RvX3VzZWNzKDEpKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGR1bW15X3NpZ25hbF9oYW5kbGVyKGludCBzaWdubykge31cbiYjNDM7c3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gc2E7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2Y3B1X3NpZ3Vzcl9saXN0ZW4odm9pZClcbiYjNDM7e1xuJiM0MztcdHNhLnNhX2hhbmRsZXIgPSBkdW1teV9zaWduYWxfaGFuZGxlcjtcbiYjNDM7XHRzaWdhY3Rpb24oU0lHVVNSMSwgXHUwMDI2c2EsIE5VTEwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2Y3B1X3NpZ3Vzcl9pZ25vcmUodm9pZClcbiYjNDM7e1xuJiM0MztcdHNhLnNhX2hhbmRsZXIgPSBTSUdfSUdOO1xuJiM0MztcdHNpZ2FjdGlvbihTSUdVU1IxLCBcdTAwMjZzYSwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGt2bV94ODZfc3RhdGVfcXVldWVfdWQoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24ucGVuZGluZyB8fCBzdGF0ZS1cdTAwM2VldmVudHMuZXhjZXB0aW9uLmluamVjdGVkKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzdGF0ZS1cdTAwM2VldmVudHMuZmxhZ3MgfD0gS1ZNX1ZDUFVFVkVOVF9WQUxJRF9QQVlMT0FEO1xuJiM0MztcdHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24ucGVuZGluZyA9IHRydWU7XG4mIzQzO1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5pbmplY3RlZCA9IGZhbHNlO1xuJiM0MztcdHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24ubnIgPSBVRF9WRUNUT1I7XG4mIzQzO1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5oYXNfZXJyb3JfY29kZSA9IGZhbHNlO1xuJiM0MztcdHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb25faGFzX3BheWxvYWQgPSBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnVuX3Rlc3QoYm9vbCBuZXN0ZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGU7XG4mIzQzO1x0aW50IHIsIGksIGxldmVsO1xuJiM0MztcdHB0aHJlYWRfdCBzaWd1c3JfdGhyZWFkO1xuJiM0MztcdGdwYV90IGdwYSwgcGd0YWJsZV9ncGE7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuJiM0MztcdHN0cnVjdCBrdm1fdm0gKnZtO1xuJiM0MztcdHN0cnVjdCB1Y2FsbCB1YztcbiYjNDM7XHR1NjQgKnBndGFibGU7XG4mIzQzO1x0Z3ZhX3QgZ3ZhO1xuJiM0MztcdHU2NCBwdGU7XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgbmVzdGVkID8gbDFfZ3Vlc3RfY29kZSA6IGd1ZXN0X2FjY2Vzc19tZW1vcnkpO1xuJiM0MztcdHZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIodm0sIFBGX1ZFQ1RPUiwgZ3Vlc3RfcGZfaGFuZGxlcik7XG4mIzQzO1x0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FWENFUFRJT05fUEFZTE9BRCwgLTJ1bCk7XG4mIzQzO1xuJiM0MztcdGlmIChuZXN0ZWQpIHtcbiYjNDM7XHRcdGlmIChrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKVxuJiM0MztcdFx0XHR2Y3B1X2FsbG9jX3N2bSh2bSwgXHUwMDI2Z3ZhKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0dmNwdV9hbGxvY192bXgodm0sIFx1MDAyNmd2YSk7XG4mIzQzO1x0XHR2Y3B1X2FyZ3Nfc2V0KHZjcHUsIDEsIGd2YSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBbGxvY2F0ZSBhIHBhZ2UgYW5kIHdyaXRlIHRoZSBwYXR0ZXJuIHRvIGl0ICovXG4mIzQzO1x0Z3ZhID0gdm1fYWxsb2NfcGFnZSh2bSk7XG4mIzQzO1x0Kih1NjQgKilhZGRyX2d2YTJodmEodm0sIGd2YSkgPSBQQVRURVJOO1xuJiM0MztcdGdwYSA9IGFkZHJfZ3ZhMmdwYSh2bSwgZ3ZhKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYXAgYWxsIHZpcnR1YWwgYWRkcmVzc2VzIHRvIHRoZSBwYXR0ZXJuIHBhZ2UgYW5kIGNsZWFyIHRoZSBwcmVzZW50XG4mIzQzO1x0ICogYml0IHN1Y2ggdGhhdCBndWVzdCBhY2Nlc3NlcyB3aWxsIGNhdXNlIGEgI1BGLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFBUUlNfUEVSX1BURTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGd2YSA9IFRFU1RfTUVNX0JBU0VfR1ZBICYjNDM7IGkgKiBnZXRwYWdlc2l6ZSgpO1xuJiM0MztcdFx0dmlydF9wZ19tYXAodm0sIGd2YSwgZ3BhKTtcbiYjNDM7XHRcdCp2bV9nZXRfcHRlKHZtLCBndmEpIFx1MDAyNj0gflBURV9QUkVTRU5UX01BU0soXHUwMDI2dm0tXHUwMDNlbW11KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTm93IGNyZWF0ZSBtYXBwaW5ncyBmb3IgdGhlIHBhZ2UgdGFibGVzIGNyZWF0ZWQgYWJvdmUgc28gdGhhdCB0aGVcbiYjNDM7XHQgKiBndWVzdCAjUEYgaGFuZGxlciBjYW4gd2FsayB0aGVtLiBBbGwgUFRFcyBmb3IgdGVzdCB2aXJ0dWFsIGFkZHJlc3Nlc1xuJiM0MztcdCAqIHNob3VsZCBsaWUgb24gdGhlIHNhbWUgUFRFIHBhZ2UsIHNvIG9uZSBwYWdlIGlzIG1hcHBlZCBmb3IgZWFjaCBwYWdlXG4mIzQzO1x0ICogdGFibGUgbGV2ZWwuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBVc2UgYW4gb2Zmc2V0IGZvciB0aGUgR1ZBIGluc3RlYWQgb2YgY3JlYXRpbmcgaWRlbnRpdHkgbWFwcGluZ3MgdG9cbiYjNDM7XHQgKiBhdm9pZCBjb2xsaXNpb24gd2l0aCBleGlzdGluZyBtYXBwaW5ncyBhdCBsb3cgR1ZBcyAoZS5nLiBFTEYpLlxuJiM0MztcdCAqL1xuJiM0MztcdHBndGFibGVfZ3BhID0gdm0tXHUwMDNlbW11LnBnZDtcbiYjNDM7XHRmb3IgKGxldmVsID0gdm0tXHUwMDNlbW11LnBndGFibGVfbGV2ZWxzOyBsZXZlbCBcdTAwM2U9IFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7XG4mIzQzO1x0XHR2aXJ0X21hcCh2bSwgcGd0YWJsZV9ncGEgJiM0MzsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQsIHBndGFibGVfZ3BhLCAxKTtcbiYjNDM7XHRcdHBndGFibGUgPSBhZGRyX2dwYTJodmEodm0sIHBndGFibGVfZ3BhKTtcbiYjNDM7XHRcdHB0ZSA9IHBndGFibGVbUFhEX0lOREVYKFRFU1RfTUVNX0JBU0VfR1ZBLCBsZXZlbCldO1xuJiM0MztcdFx0cGd0YWJsZV9ncGEgPSBQVEVfR0VUX1BBKHB0ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBJbml0aWFsaXplIHRoZSB0aHJlYWQgc2VuZGluZyBTSUdVU1IgYW5kIGluc3RhbGwgdGhlIGhhbmRsZXIgKi9cbiYjNDM7XHR2Y3B1X3NpZ3Vzcl9pZ25vcmUoKTtcbiYjNDM7XHRyID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2c2lndXNyX3RocmVhZCwgTlVMTCwgc2lndXNyX3RocmVhZF9mbixcbiYjNDM7XHRcdFx0ICAgKHZvaWQgKilwdGhyZWFkX3NlbGYoKSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoIXIsIFwmIzM0O3B0aHJlYWRfY3JlYXRlKCkgZmFpbGVkOiAlZFwmIzM0Oywgcik7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDE7IGkgXHUwMDNjPSBOUl9JVEVSQVRJT05TOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIE9ubHkgaGFuZGxlIFNJR1VTUiB3aGlsZSB0aGUgdkNQVSBpcyBydW5uaW5nLCBvdGhlcndpc2VcbiYjNDM7XHRcdCAqIGlnbm9yZSBpdCB0byBhdm9pZCBpbnRlcnJ1cHRpbmcgb3RoZXIgaW9jdGxzL3N5c2NhbGxzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR2Y3B1X3NpZ3Vzcl9saXN0ZW4oKTtcbiYjNDM7XHRcdHIgPSBfX3ZjcHVfcnVuKHZjcHUpO1xuJiM0MztcdFx0aWYgKHIgPT0gLTEpXG4mIzQzO1x0XHRcdFRFU1RfQVNTRVJUX0VRKGVycm5vLCBFSU5UUik7XG4mIzQzO1x0XHR2Y3B1X3NpZ3Vzcl9pZ25vcmUoKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBUaGUgZ3Vlc3Qgb25seSBleGl0cyBkdWUgdG8gYSBzaWduYWwgb3IgZmFpbGVkIGFzc2VydGlvbiAqL1xuJiM0MztcdFx0aWYgKCFyKSB7XG4mIzQzO1x0XHRcdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XG4mIzQzO1x0XHRcdFRFU1RfQVNTRVJUX0VRKGdldF91Y2FsbCh2Y3B1LCBcdTAwMjZ1YyksIFVDQUxMX0FCT1JUKTtcbiYjNDM7XHRcdFx0UkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHN0YXRlID0gdmNwdV9zYXZlX3N0YXRlKHZjcHUpO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJZiB0aGUgdkNQVSBpcyBpbiBndWVzdCBtb2RlLCBpbmplY3QgYSAjVUQgdG8gdHJpZ2dlciBhblxuJiM0MztcdFx0ICogTDItXHUwMDNlTDEgVk0tRXhpdCBldmVyeSBvdGhlciBpdGVyYXRpb24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChrdm1feDg2X3N0YXRlX2lzX2d1ZXN0X21vZGUoc3RhdGUpIFx1MDAyNlx1MDAyNiBpICUgMiA9PSAwKVxuJiM0MztcdFx0XHRrdm1feDg2X3N0YXRlX3F1ZXVlX3VkKHN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0XHRrdm1fdm1fcmVsZWFzZSh2bSk7XG4mIzQzO1x0XHR2Y3B1ID0gdm1fcmVjcmVhdGVfd2l0aF9vbmVfdmNwdSh2bSk7XG4mIzQzO1x0XHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FELCAtMnVsKTtcbiYjNDM7XHRcdHZjcHVfbG9hZF9zdGF0ZSh2Y3B1LCBzdGF0ZSk7XG4mIzQzO1x0XHRrdm1feDg2X3N0YXRlX2NsZWFudXAoc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRcdHByX2luZm8oXCYjMzQ7XFxyU2F2ZSYjNDM7cmVzdG9yZSBpdGVyYXRpb25zOiAlZFwmIzM0OywgaSk7XG4mIzQzO1x0fVxuJiM0MztcdHByX2luZm8oXCYjMzQ7XFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0c3luY19nbG9iYWxfZnJvbV9ndWVzdCh2bSwgZ3Vlc3RfZmF1bHRzKTtcbiYjNDM7XHRURVNUX0FTU0VSVChndWVzdF9mYXVsdHMgXHUwMDNlIDAsIFwmIzM0O05vIGd1ZXN0IHBhZ2UgZmF1bHRzIHRyaWdnZXJlZFwmIzM0Oyk7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtHdWVzdCBwYWdlIGZhdWx0cyVzOiAlbHVcXG5cJiMzNDssIG5lc3RlZCA/IFwmIzM0OyAoaW4gTDIpXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LCBndWVzdF9mYXVsdHMpO1xuJiM0MztcbiYjNDM7XHRwdGhyZWFkX2NhbmNlbChzaWd1c3JfdGhyZWFkKTtcbiYjNDM7XHRwdGhyZWFkX2pvaW4oc2lndXNyX3RocmVhZCwgTlVMTCk7XG4mIzQzO1x0a3ZtX3ZtX2ZyZWUodm0pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuJiM0Mzt7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtSdW5uaW5nIHNhdmUmIzQzO3Jlc3RvcmUgc3RyZXNzIHRlc3QuLi5cXG5cJiMzNDspO1xuJiM0MztcdHJ1bl90ZXN0KC8qbmVzdGVkPSovZmFsc2UpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWt2bV9oYXNfY2FwKEtWTV9DQVBfRVhDRVBUSU9OX1BBWUxPQUQpIHx8XG4mIzQzO1x0ICAgICFrdm1faGFzX2NhcChLVk1fQ0FQX05FU1RFRF9TVEFURSkgfHxcbiYjNDM7XHQgICAgKCFrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pIFx1MDAyNlx1MDAyNiAha3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSkpIHtcbiYjNDM7XHRcdHByX2luZm8oXCYjMzQ7TmVzdGVkIHZpcnR1YWxpemF0aW9uIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nIG5lc3RlZCB0ZXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtSdW5uaW5nIHNhdmUmIzQzO3Jlc3RvcmUgc3RyZXNzIHRlc3Qgd2l0aCBhIG5lc3RlZCBndWVzdC4uLlxcblwmIzM0Oyk7XG4mIzQzO1x0cnVuX3Rlc3QoLypuZXN0ZWQ9Ki90cnVlKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xuaW5kZXggZTI1NDJmNGNlZDYwNS4uZDFlZGFmZDVhZjc1NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXG5AQCAtMjIsOSAmIzQzOzIyLDYgQEBcbiAjZGVmaW5lIFNNUkFNX0dQQSAweDEwMDAwMDBcbiAjZGVmaW5lIFNNUkFNX1NUQUdFIDB4ZmVcbiBcbi0jZGVmaW5lIFNUUih4KSAjeFxuLSNkZWZpbmUgWFNUUihzKSBTVFIocylcbi1cbiAjZGVmaW5lIFNZTkNfUE9SVCAweGVcbiAjZGVmaW5lIERPTkUgMHhmZlxuIFxuQEAgLTQyLDcgJiM0MzszOSw3IEBAIHU4IHNtaV9oYW5kbGVyW10gPSB7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHN5bmNfd2l0aF9ob3N0KHU2NCBwaGFzZSlcbiB7XG4tXHRhc20gdm9sYXRpbGUoXCYjMzQ7aW4gJFwmIzM0OyBYU1RSKFNZTkNfUE9SVClcJiMzNDssICUlYWwgXFxuXCYjMzQ7XG4mIzQzO1x0YXNtIHZvbGF0aWxlKFwmIzM0O2luICRcJiMzNDsgX19zdHJpbmdpZnkoU1lOQ19QT1JUKVwmIzM0OywgJSVhbCBcXG5cJiMzNDtcbiBcdFx0ICAgICA6IFwmIzM0OyYjNDM7YVwmIzM0OyAocGhhc2UpKTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTk6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhbmQgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGNvZGUgb3IgZHJpdmVycy4gU2luY2UgdGhlIGZ1enppbmcgdGFyZ2V0cyB0aGUga2VybmVsIGFuZCBub3QgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbHMsIHRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGtlcm5lbCBjaGFuZ2VzIHRvIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTI5NDg2OGFkMDkxMzVhZjEwZTAxZTY2MDRmM2E5NzkxMWZjNTRlYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDI4IDE5OjM5OjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KaW5kZXggODhjNmM4MDQ2ZGRlYy4uZTY3YjFlOTg5M2Y2OCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCkBAIC0xMTIsNiAmIzQzOzExMiw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3NldF9zcmVnc190ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3NtbV90ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zdGF0ZV90ZXN0CiYjNDM7VEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni92bXhfcHJlZW1wdGlvbl90aW1lcl90ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zdm1fdm1jYWxsX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3N2bV9pbnRfY3RsX3Rlc3QKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmgKaW5kZXggZDY0YzhhMjI4MjA3YS4uZTgzNTZlZTU0ZDdiOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmgKQEAgLTIzLDYgJiM0MzsyMyw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9tbWFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5naWZ5LmgmZ3Q7CiAKICNkZWZpbmUgbXNlY3NfdG9fdXNlY3MobXNlYykgICAgKChtc2VjKSAqIDEwMDBVTEwpCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmgKaW5kZXggYmU3OWJkYTAyNGJmMS4uODJhOGVhNmI2NjFmMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmgKQEAgLTEyMDcsMzAgJiM0MzsxMjA3LDIzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtbGF1bmNoKHZvaWQpCiAKIAljdXJyZW50X2V2bWNzLSZndDtodl9jbGVhbl9maWVsZHMgPSAwOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICUlcmJwOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyZHg7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcnNpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJDA7JiMzNDsKJiM0MzsJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICQwOyYjMzQ7CiAJCQkgICAgICYjMzQ7bW92ICUlcnNwLCAoJVtob3N0X3JzcF0pOyYjMzQ7CiAJCQkgICAgICYjMzQ7bGVhIDFmKCUlcmlwKSwgJSVyYXg7JiMzNDsKIAkJCSAgICAgJiMzNDttb3YgJSVyYXgsICglW2hvc3RfcmlwXSk7JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KIAkJCSAgICAgJiMzNDt2bWxhdW5jaDsmIzM0OwogCQkJICAgICAmIzM0O2luY3EgKCUlcnNwKTsmIzM0OwotCQkJICAgICAmIzM0OzE6IHBvcCAlJXJheDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJzaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJicDsmIzM0OwomIzQzOwkJCSAgICAgJiMzNDsxOiA7JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KJiM0MzsJCQkgICAgICYjMzQ7cG9wICUlcmF4OyYjMzQ7CiAJCQkgICAgIDogW3JldF0mIzM0Oz0mYW1wO2EmIzM0OyhyZXQpCiAJCQkgICAgIDogW2hvc3RfcnNwXSYjMzQ7ciYjMzQ7CiAJCQkgICAgICAgKCh1NjQpJmFtcDtjdXJyZW50X2V2bWNzLSZndDtob3N0X3JzcCksCiAJCQkgICAgICAgW2hvc3RfcmlwXSYjMzQ7ciYjMzQ7Ci0JCQkgICAgICAgKCh1NjQpJmFtcDtjdXJyZW50X2V2bWNzLSZndDtob3N0X3JpcCkKLQkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDssICYjMzQ7cmJ4JiMzNDssICYjMzQ7cjgmIzM0OywgJiMzNDtyOSYjMzQ7LCAmIzM0O3IxMCYjMzQ7LAotCQkJICAgICAgICYjMzQ7cjExJiMzNDssICYjMzQ7cjEyJiMzNDssICYjMzQ7cjEzJiMzNDssICYjMzQ7cjE0JiMzNDssICYjMzQ7cjE1JiMzNDspOwomIzQzOwkJCSAgICAgICAoKHU2NCkmYW1wO2N1cnJlbnRfZXZtY3MtJmd0O2hvc3RfcmlwKSwKJiM0MzsJCQkgICAgICAgR1VFU1RfUkVHU19PRkZTRVRTCiYjNDM7CQkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDssICYjMzQ7Y2MmIzM0Oyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTI0NiwzMCAmIzQzOzEyMzksMjMgQEAgc3RhdGljIGlubGluZSBpbnQgZXZtY3Nfdm1yZXN1bWUodm9pZCkKIAkvKiBIT1NUX1JTUCAqLwogCWN1cnJlbnRfZXZtY3MtJmd0O2h2X2NsZWFuX2ZpZWxkcyAmYW1wOz0gfkhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9IT1NUX1BPSU5URVI7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O3B1c2ggJSVyYnA7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcmN4OyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJkeDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyc2k7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcmRpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAkMDsmIzM0OwomIzQzOwlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O3B1c2ggJDA7JiMzNDsKIAkJCSAgICAgJiMzNDttb3YgJSVyc3AsICglW2hvc3RfcnNwXSk7JiMzNDsKIAkJCSAgICAgJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDsmIzM0OwogCQkJICAgICAmIzM0O21vdiAlJXJheCwgKCVbaG9zdF9yaXBdKTsmIzM0OwomIzQzOwkJCSAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTQogCQkJICAgICAmIzM0O3ZtcmVzdW1lOyYjMzQ7CiAJCQkgICAgICYjMzQ7aW5jcSAoJSVyc3ApOyYjMzQ7Ci0JCQkgICAgICYjMzQ7MTogcG9wICUlcmF4OyYjMzQ7Ci0JCQkgICAgICYjMzQ7cG9wICUlcmRpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cG9wICUlcnNpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cG9wICUlcmR4OyYjMzQ7Ci0JCQkgICAgICYjMzQ7cG9wICUlcmN4OyYjMzQ7Ci0JCQkgICAgICYjMzQ7cG9wICUlcmJwOyYjMzQ7CiYjNDM7CQkJICAgICAmIzM0OzE6IDsmIzM0OwomIzQzOwkJCSAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTQomIzQzOwkJCSAgICAgJiMzNDtwb3AgJSVyYXg7JiMzNDsKIAkJCSAgICAgOiBbcmV0XSYjMzQ7PSZhbXA7YSYjMzQ7KHJldCkKIAkJCSAgICAgOiBbaG9zdF9yc3BdJiMzNDtyJiMzNDsKIAkJCSAgICAgICAoKHU2NCkmYW1wO2N1cnJlbnRfZXZtY3MtJmd0O2hvc3RfcnNwKSwKIAkJCSAgICAgICBbaG9zdF9yaXBdJiMzNDtyJiMzNDsKLQkJCSAgICAgICAoKHU2NCkmYW1wO2N1cnJlbnRfZXZtY3MtJmd0O2hvc3RfcmlwKQotCQkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDssICYjMzQ7Y2MmIzM0OywgJiMzNDtyYngmIzM0OywgJiMzNDtyOCYjMzQ7LCAmIzM0O3I5JiMzNDssICYjMzQ7cjEwJiMzNDssCi0JCQkgICAgICAgJiMzNDtyMTEmIzM0OywgJiMzNDtyMTImIzM0OywgJiMzNDtyMTMmIzM0OywgJiMzNDtyMTQmIzM0OywgJiMzNDtyMTUmIzM0Oyk7CiYjNDM7CQkJICAgICAgICgodTY0KSZhbXA7Y3VycmVudF9ldm1jcy0mZ3Q7aG9zdF9yaXApLAomIzQzOwkJCSAgICAgICBHVUVTVF9SRUdTX09GRlNFVFMKJiM0MzsJCQkgICAgIDogJiMzNDttZW1vcnkmIzM0OywgJiMzNDtjYyYjMzQ7KTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmgKaW5kZXggYjE2MTE3NGVjZTQ1My4uNDYxYzhhZWY3ZDM3YiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaApAQCAtMjQsNiAmIzQzOzI0LDcgQEAgZXh0ZXJuIGJvb2wgaG9zdF9jcHVfaXNfYW1kOwogZXh0ZXJuIGJvb2wgaG9zdF9jcHVfaXNfaHlnb247CiBleHRlcm4gYm9vbCBob3N0X2NwdV9pc19hbWRfY29tcGF0aWJsZTsKIGV4dGVybiB1NjQgZ3Vlc3RfdHNjX2toejsKJiM0MztleHRlcm4gc3RydWN0IGt2bV9tbXUgZ3Vlc3RfbW11OwogCiAjaWZuZGVmIE1BWF9OUl9DUFVJRF9FTlRSSUVTCiAjZGVmaW5lIE1BWF9OUl9DUFVJRF9FTlRSSUVTIDEwMApAQCAtMzk4LDggJiM0MzszOTksNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4ODZfbW9kZWwodW5zaWduZWQgaW50IGVheCkKICNkZWZpbmUgUFRFX0dFVF9QQShwdGUpCQkoKHB0ZSkgJmFtcDsgUEhZU0lDQUxfUEFHRV9NQVNLKQogI2RlZmluZSBQVEVfR0VUX1BGTihwdGUpICAgICAgICAoUFRFX0dFVF9QQShwdGUpICZndDsmZ3Q7IFBBR0VfU0hJRlQpCiAKLS8qIEdlbmVyYWwgUmVnaXN0ZXJzIGluIDY0LUJpdCBNb2RlICovCi1zdHJ1Y3QgZ3ByNjRfcmVncyB7CiYjNDM7c3RydWN0IGd1ZXN0X3JlZ3MgewogCXU2NCByYXg7CiAJdTY0IHJjeDsKIAl1NjQgcmR4OwpAQCAtNDE2LDggJiM0Mzs0MTYsMzggQEAgc3RydWN0IGdwcjY0X3JlZ3MgewogCXU2NCByMTM7CiAJdTY0IHIxNDsKIAl1NjQgcjE1OwomIzQzOwl1NjQgcmZsYWdzOwogfTsKIAomIzQzO2V4dGVybiBzdHJ1Y3QgZ3Vlc3RfcmVncyBndWVzdF9yZWdzOwomIzQzOwomIzQzOyNkZWZpbmUgR1VFU1RfUkVHX09GRlNFVChuYW1lKSBcCiYjNDM7CVtvZmZfIyNuYW1lXSAmIzM0O2kmIzM0OyAob2Zmc2V0b2Yoc3RydWN0IGd1ZXN0X3JlZ3MsIG5hbWUpKQomIzQzOwomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19PRkZTRVRTCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyYXgpLAlcCiYjNDM7CUdVRVNUX1JFR19PRkZTRVQocmN4KSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHJkeCksCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyYngpLAlcCiYjNDM7CUdVRVNUX1JFR19PRkZTRVQocnNwKSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHJicCksCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyc2kpLAlcCiYjNDM7CUdVRVNUX1JFR19PRkZTRVQocmRpKSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHI4KSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHI5KSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHIxMCksCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyMTEpLAlcCiYjNDM7CUdVRVNUX1JFR19PRkZTRVQocjEyKSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHIxMyksCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyMTQpLAlcCiYjNDM7CUdVRVNUX1JFR19PRkZTRVQocjE1KSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHJmbGFncykKJiM0MzsKJiM0MzsjZGVmaW5lIEdVRVNUX1JFRyhuYW1lKSAmIzM0O2d1ZXN0X3JlZ3MgJiM0MzsgJWNbb2ZmXyYjMzQ7ICNuYW1lICYjMzQ7XSYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBHVUVTVF9TV0lUQ0hfR1BSX0FTTShuYW1lKSBcCiYjNDM7CSYjMzQ7eGNoZyAlJSYjMzQ7ICNuYW1lICYjMzQ7LCAmIzM0OyBHVUVTVF9SRUcobmFtZSkgJiMzNDtcblx0JiMzNDsKJiM0MzsKIHN0cnVjdCBkZXNjNjQgewogCXUxNiBsaW1pdDA7CiAJdTE2IGJhc2UwOwpAQCAtNTg0LDYgJiM0Mzs2MTQsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9jcjAodTY0IHZhbCkKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O21vdiAlMCwgJSVjcjAmIzM0OyA6IDogJiMzNDtyJiMzNDsgKHZhbCkgOiAmIzM0O21lbW9yeSYjMzQ7KTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdTY0IGdldF9jcjIodm9pZCkKJiM0Mzt7CiYjNDM7CXU2NCBjcjI7CiYjNDM7CiYjNDM7CV9fYXNtX18gX192b2xhdGlsZV9fKCYjMzQ7bW92ICUlY3IyLCAlW2NyMl0mIzM0OwomIzQzOwkJCSAgICAgOiAvKiBvdXRwdXQgKi8gW2NyMl0mIzM0Oz1yJiMzNDsoY3IyKSk7CiYjNDM7CXJldHVybiBjcjI7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB1NjQgZ2V0X2NyMyh2b2lkKQogewogCXU2NCBjcjM7CkBAIC04NzksNiAmIzQzOzkxOCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfc3NlX3JlZyhpbnQgcmVnLCBjb25zdCBzc2UxMjhfdCAqZGF0YSkKIAl9CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW52bHBnKHU2NCBhZGRyKQomIzQzO3sKJiM0MzsJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtpbnZscGcgKCUwKSYjMzQ7IDogOiAmIzM0O3ImIzM0OyhhZGRyKSA6ICYjMzQ7bWVtb3J5JiMzNDspOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVfcmVsYXgodm9pZCkKIHsKIAlhc20gdm9sYXRpbGUoJiMzNDtyZXA7IG5vcCYjMzQ7IDo6OiAmIzM0O21lbW9yeSYjMzQ7KTsKQEAgLTkxNSw2ICYjNDM7OTU5LDExIEBAIHN0cnVjdCBrdm1feDg2X3N0YXRlICp2Y3B1X3NhdmVfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQgdmNwdV9sb2FkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKTsKIHZvaWQga3ZtX3g4Nl9zdGF0ZV9jbGVhbnVwKHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSk7CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3g4Nl9zdGF0ZV9pc19ndWVzdF9tb2RlKHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBzdGF0ZS0mZ3Q7bmVzdGVkLnNpemUgJmFtcDsmYW1wOyAoc3RhdGUtJmd0O25lc3RlZC5mbGFncyAmYW1wOyBLVk1fU1RBVEVfTkVTVEVEX0dVRVNUX01PREUpOwomIzQzO30KJiM0MzsKIGNvbnN0IHN0cnVjdCBrdm1fbXNyX2xpc3QgKmt2bV9nZXRfbXNyX2luZGV4X2xpc3Qodm9pZCk7CiBjb25zdCBzdHJ1Y3Qga3ZtX21zcl9saXN0ICprdm1fZ2V0X2ZlYXR1cmVfbXNyX2luZGV4X2xpc3Qodm9pZCk7CiBib29sIGt2bV9tc3JfaXNfaW5fc2F2ZV9yZXN0b3JlX2xpc3QodTMyIG1zcl9pbmRleCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmgKaW5kZXggNGJjZmQ2MGUzYWVjYi4uMDRmNWUzNGRlYTNhZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaApAQCAtMjkwLDYgJiM0MzsyOTAsMjMgQEAgc3RydWN0IHZteF9tc3JfZW50cnkgewogCXU2NCB2YWx1ZTsKIH0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMTYpKSk7CiAKJiM0MzsjZGVmaW5lIFZNWF9TV0lUQ0hfR1BSU19BU00gXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYXgpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocmJ4KSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJjeCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZHgpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocmJwKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJzaSkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZGkpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjgpICBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHI5KSAgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTApIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjExKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMikgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTMpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjE0KSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNSkKJiM0MzsKICNpbmNsdWRlICYjMzQ7ZXZtY3MuaCYjMzQ7CiAKIHN0YXRpYyBpbmxpbmUgaW50IHZteG9uKHU2NCBwaHlzKQpAQCAtMzYzLDkgJiM0MzszODAsNiBAQCBzdGF0aWMgaW5saW5lIHU2NCB2bXB0cnN0eih2b2lkKQogCXJldHVybiB2YWx1ZTsKIH0KIAotLyoKLSAqIE5vIGd1ZXN0IHN0YXRlIChlLmcuIEdQUnMpIGlzIGVzdGFibGlzaGVkIGJ5IHRoaXMgdm1sYXVuY2guCi0gKi8KIHN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpCiB7CiAJaW50IHJldDsKQEAgLTM3MywzNCAmIzQzOzM4NywyNCBAQCBzdGF0aWMgaW5saW5lIGludCB2bWxhdW5jaCh2b2lkKQogCWlmIChlbmFibGVfZXZtY3MpCiAJCXJldHVybiBldm1jc192bWxhdW5jaCgpOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICUlcmJwOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyZHg7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcnNpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJDA7JiMzNDsKJiM0MzsJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICQwOyYjMzQ7CiAJCQkgICAgICYjMzQ7dm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07JiMzNDsKIAkJCSAgICAgJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDsmIzM0OwogCQkJICAgICAmIzM0O3Ztd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdOyYjMzQ7CiYjNDM7CQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCiAJCQkgICAgICYjMzQ7dm1sYXVuY2g7JiMzNDsKIAkJCSAgICAgJiMzNDtpbmNxICglJXJzcCk7JiMzNDsKLQkJCSAgICAgJiMzNDsxOiBwb3AgJSVyYXg7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyZGk7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyc2k7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyZHg7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyY3g7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyYnA7JiMzNDsKJiM0MzsJCQkgICAgICYjMzQ7MTogOyYjMzQ7CiYjNDM7CQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCiYjNDM7CQkJICAgICAmIzM0O3BvcCAlJXJheDsmIzM0OwogCQkJICAgICA6IFtyZXRdJiMzNDs9JmFtcDthJiMzNDsocmV0KQogCQkJICAgICA6IFtob3N0X3JzcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUlNQKSwKLQkJCSAgICAgICBbaG9zdF9yaXBdJiMzNDtyJiMzNDsoKHU2NClIT1NUX1JJUCkKLQkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDssICYjMzQ7cmJ4JiMzNDssICYjMzQ7cjgmIzM0OywgJiMzNDtyOSYjMzQ7LCAmIzM0O3IxMCYjMzQ7LAotCQkJICAgICAgICYjMzQ7cjExJiMzNDssICYjMzQ7cjEyJiMzNDssICYjMzQ7cjEzJiMzNDssICYjMzQ7cjE0JiMzNDssICYjMzQ7cjE1JiMzNDspOwomIzQzOwkJCSAgICAgICBbaG9zdF9yaXBdJiMzNDtyJiMzNDsoKHU2NClIT1NUX1JJUCksCiYjNDM7CQkJICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUUwomIzQzOwkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBObyBndWVzdCBzdGF0ZSAoZS5nLiBHUFJzKSBpcyBlc3RhYmxpc2hlZCBieSB0aGlzIHZtcmVzdW1lLgotICovCiBzdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKQogewogCWludCByZXQ7CkBAIC00MDgsMjggJiM0Mzs0MTIsMjEgQEAgc3RhdGljIGlubGluZSBpbnQgdm1yZXN1bWUodm9pZCkKIAlpZiAoZW5hYmxlX2V2bWNzKQogCQlyZXR1cm4gZXZtY3Nfdm1yZXN1bWUoKTsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKCYjMzQ7cHVzaCAlJXJicDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyY3g7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcmR4OyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJzaTsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyZGk7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICQwOyYjMzQ7CiYjNDM7CV9fYXNtX18gX192b2xhdGlsZV9fKCYjMzQ7cHVzaCAkMDsmIzM0OwogCQkJICAgICAmIzM0O3Ztd3JpdGUgJSVyc3AsICVbaG9zdF9yc3BdOyYjMzQ7CiAJCQkgICAgICYjMzQ7bGVhIDFmKCUlcmlwKSwgJSVyYXg7JiMzNDsKIAkJCSAgICAgJiMzNDt2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTsmIzM0OwomIzQzOwkJCSAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTQogCQkJICAgICAmIzM0O3ZtcmVzdW1lOyYjMzQ7CiAJCQkgICAgICYjMzQ7aW5jcSAoJSVyc3ApOyYjMzQ7Ci0JCQkgICAgICYjMzQ7MTogcG9wICUlcmF4OyYjMzQ7Ci0JCQkgICAgICYjMzQ7cG9wICUlcmRpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cG9wICUlcnNpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cG9wICUlcmR4OyYjMzQ7Ci0JCQkgICAgICYjMzQ7cG9wICUlcmN4OyYjMzQ7Ci0JCQkgICAgICYjMzQ7cG9wICUlcmJwOyYjMzQ7CiYjNDM7CQkJICAgICAmIzM0OzE6IDsmIzM0OwomIzQzOwkJCSAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTQomIzQzOwkJCSAgICAgJiMzNDtwb3AgJSVyYXg7JiMzNDsKIAkJCSAgICAgOiBbcmV0XSYjMzQ7PSZhbXA7YSYjMzQ7KHJldCkKIAkJCSAgICAgOiBbaG9zdF9yc3BdJiMzNDtyJiMzNDsoKHU2NClIT1NUX1JTUCksCi0JCQkgICAgICAgW2hvc3RfcmlwXSYjMzQ7ciYjMzQ7KCh1NjQpSE9TVF9SSVApCi0JCQkgICAgIDogJiMzNDttZW1vcnkmIzM0OywgJiMzNDtjYyYjMzQ7LCAmIzM0O3JieCYjMzQ7LCAmIzM0O3I4JiMzNDssICYjMzQ7cjkmIzM0OywgJiMzNDtyMTAmIzM0OywKLQkJCSAgICAgICAmIzM0O3IxMSYjMzQ7LCAmIzM0O3IxMiYjMzQ7LCAmIzM0O3IxMyYjMzQ7LCAmIzM0O3IxNCYjMzQ7LCAmIzM0O3IxNSYjMzQ7KTsKJiM0MzsJCQkgICAgICAgW2hvc3RfcmlwXSYjMzQ7ciYjMzQ7KCh1NjQpSE9TVF9SSVApLAomIzQzOwkJCSAgICAgICBHVUVTVF9SRUdTX09GRlNFVFMKJiM0MzsJCQkgICAgIDogJiMzNDttZW1vcnkmIzM0OywgJiMzNDtjYyYjMzQ7KTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuYwppbmRleCAxZDcyZGNkZmNlM2I2Li4zZTM1M2FjMzllZWI3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmMKQEAgLTc0LDcgJiM0Mzs3NCw3IEBAIHRlc3RfYXNzZXJ0KGJvb2wgZXhwLCBjb25zdCBjaGFyICpleHBfc3RyLAogCWlmICghKGV4cCkpIHsKIAkJdmFfc3RhcnQoYXAsIGZtdCk7CiAKLQkJZnByaW50ZihzdGRlcnIsICYjMzQ7PT09PSBUZXN0IEFzc2VydGlvbiBGYWlsdXJlID09PT1cbiYjMzQ7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtcbj09PT0gVGVzdCBBc3NlcnRpb24gRmFpbHVyZSA9PT09XG4mIzM0OwogCQkJJiMzNDsgICVzOiV1OiAlc1xuJiMzNDsKIAkJCSYjMzQ7ICBwaWQ9JWQgdGlkPSVkIGVycm5vPSVkIC0gJXNcbiYjMzQ7LAogCQkJZmlsZSwgbGluZSwgZXhwX3N0ciwgZ2V0cGlkKCksIGt2bV9nZXR0aWQoKSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMKaW5kZXggZWY1NmRjZWZlMDExOS4uZDMxZmE4MWVhMDc1NiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMKQEAgLTI4LDYgJiM0MzsyOCw5IEBAIGJvb2wgaG9zdF9jcHVfaXNfaHlnb247CiBib29sIGhvc3RfY3B1X2lzX2FtZF9jb21wYXRpYmxlOwogYm9vbCBpc19mb3JjZWRfZW11bGF0aW9uX2VuYWJsZWQ7CiB1NjQgZ3Vlc3RfdHNjX2toejsKJiM0MztzdHJ1Y3Qga3ZtX21tdSBndWVzdF9tbXU7CiYjNDM7CiYjNDM7c3RydWN0IGd1ZXN0X3JlZ3MgZ3Vlc3RfcmVnczsKIAogY29uc3QgY2hhciAqZXhfc3RyKGludCB2ZWN0b3IpCiB7CkBAIC04MjksNiAmIzQzOzgzMiwxNyBAQCB2b2lkIGt2bV9hcmNoX3ZtX3Bvc3RfY3JlYXRlKHN0cnVjdCBrdm1fdm0gKnZtLCB1bnNpZ25lZCBpbnQgbnJfdmNwdXMpCiAJVEVTVF9BU1NFUlQociAmZ3Q7IDAsICYjMzQ7S1ZNX0dFVF9UU0NfS0haIGRpZCBub3QgcHJvdmlkZSBhIHZhbGlkIFRTQyBmcmVxdWVuY3kuJiMzNDspOwogCWd1ZXN0X3RzY19raHogPSByOwogCXN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBndWVzdF90c2Nfa2h6KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGd1ZXN0IE1NVSBpcyBqdXN0IGEgcGxhY2Vob2xkZXIgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gUFRFIG1hc2tzCiYjNDM7CSAqIChmb3Igbm93KS4gVGhlIGd1ZXN0IGRvZXMgbm90IGhhdmUgbWFwcGluZ3MgZm9yIGl0cyBvd24gcGFnZSB0YWJsZXMKJiM0MzsJICogYnkgZGVmYXVsdCwgc28gYW55IG1lYW5pbmdmdWwgdXNlIG9mIGd1ZXN0IHBhZ2UgdGFibGVzIHJlcXVpcmVzCiYjNDM7CSAqIGV4cGxpY2l0IHNldHVwIGJ5IHRoZSB0ZXN0LiBaZXJvIHRoZSBQR0QgdG8gbWFrZSBpdCBvYnZpb3VzIHRoZSBndWVzdAomIzQzOwkgKiBwYWdlIHRhYmxlcyBhcmUgbm90IGltbWVkaWF0ZWx5IHVzYWJsZSBieSBndWVzdCBjb2RlLgomIzQzOwkgKi8KJiM0MzsJZ3Vlc3RfbW11ID0gdm0tJmd0O21tdTsKJiM0MzsJZ3Vlc3RfbW11LnBnZCA9IDA7CiYjNDM7CXN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBndWVzdF9tbXUpOwogfQogCiB2b2lkIHZjcHVfYXJjaF9zZXRfZW50cnlfcG9pbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpndWVzdF9jb2RlKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uYwppbmRleCAxNDQ1Yjg5MDk4NmZkLi5iMDViZTUwZjA3NWQ2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uYwpAQCAtMTMsOSAmIzQzOzEzLDYgQEAKIAogI2RlZmluZSBTRVZfREVWX1BBVEggJiMzNDsvZGV2L3NldiYjMzQ7CiAKLXN0cnVjdCBncHI2NF9yZWdzIGd1ZXN0X3JlZ3M7Ci11NjQgcmZsYWdzOwotCiAvKiBBbGxvY2F0ZSBtZW1vcnkgcmVnaW9ucyBmb3IgbmVzdGVkIFNWTSB0ZXN0cy4KICAqCiAgKiBJbnB1dCBBcmdzOgpAQCAtMTM3LDQ2ICYjNDM7MTM0LDQ3IEBAIHZvaWQgZ2VuZXJpY19zdm1fc2V0dXAoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSwgdm9pZCAqZ3Vlc3RfcmlwKQogICogc2F2ZS9yZXN0b3JlIDY0LWJpdCBnZW5lcmFsIHJlZ2lzdGVycyBleGNlcHQgcmF4LCByaXAsIHJzcAogICogd2hpY2ggYXJlIGRpcmVjdGx5IGhhbmRlZCB0aHJvdWdoIHRoZSBWTUNCIGd1ZXN0IHByb2Nlc3NvciBzdGF0ZQogICovCi0jZGVmaW5lIFNBVkVfR1BSX0MJCQkJXAotCSYjMzQ7eGNoZyAlJXJieCwgZ3Vlc3RfcmVncyYjNDM7MHgyMFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcmN4LCBndWVzdF9yZWdzJiM0MzsweDEwXG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyZHgsIGd1ZXN0X3JlZ3MmIzQzOzB4MThcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXJicCwgZ3Vlc3RfcmVncyYjNDM7MHgzMFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcnNpLCBndWVzdF9yZWdzJiM0MzsweDM4XG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyZGksIGd1ZXN0X3JlZ3MmIzQzOzB4NDBcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXI4LCAgZ3Vlc3RfcmVncyYjNDM7MHg0OFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcjksICBndWVzdF9yZWdzJiM0MzsweDUwXG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyMTAsIGd1ZXN0X3JlZ3MmIzQzOzB4NThcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXIxMSwgZ3Vlc3RfcmVncyYjNDM7MHg2MFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcjEyLCBndWVzdF9yZWdzJiM0MzsweDY4XG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyMTMsIGd1ZXN0X3JlZ3MmIzQzOzB4NzBcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXIxNCwgZ3Vlc3RfcmVncyYjNDM7MHg3OFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcjE1LCBndWVzdF9yZWdzJiM0MzsweDgwXG5cdCYjMzQ7Ci0KLSNkZWZpbmUgTE9BRF9HUFJfQyAgICAgIFNBVkVfR1BSX0MKJiM0MzsjZGVmaW5lIFNWTV9TV0lUQ0hfR1BSU19BU00gXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYngpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocmN4KSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkeCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYnApIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocnNpKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkaSkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOCkgIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjkpICBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTEpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjEyKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMykgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTQpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjE1KQogCiAvKgogICogc2VsZnRlc3RzIGRvIG5vdCB1c2UgaW50ZXJydXB0cyBzbyB3ZSBkcm9wcGVkIGNsZ2kvc3RpL2NsaS9zdGdpCi0gKiBmb3Igbm93LiByZWdpc3RlcnMgaW52b2x2ZWQgaW4gTE9BRC9TQVZFX0dQUl9DIGFyZSBldmVudHVhbGx5CiYjNDM7ICogZm9yIG5vdy4gUmVnaXN0ZXJzIGludm9sdmVkIGluIFNWTV9TV0lUQ0hfR1BSU19BU00gYXJlIGV2ZW50dWFsbHkKICAqIHVubW9kaWZpZWQgc28gdGhleSBkbyBub3QgbmVlZCB0byBiZSBpbiB0aGUgY2xvYmJlciBsaXN0LgogICovCiB2b2lkIHJ1bl9ndWVzdChzdHJ1Y3Qgdm1jYiAqdm1jYiwgdTY0IHZtY2JfZ3BhKQogewogCWFzbSB2b2xhdGlsZSAoCiAJCSYjMzQ7dm1sb2FkICVbdm1jYl9ncGFdXG5cdCYjMzQ7Ci0JCSYjMzQ7bW92IHJmbGFncywgJSVyMTVcblx0JiMzNDsJLy8gcmZsYWdzCi0JCSYjMzQ7bW92ICUlcjE1LCAweDE3MCglW3ZtY2JdKVxuXHQmIzM0OwotCQkmIzM0O21vdiBndWVzdF9yZWdzLCAlJXIxNVxuXHQmIzM0OwkvLyByYXgKLQkJJiMzNDttb3YgJSVyMTUsIDB4MWY4KCVbdm1jYl0pXG5cdCYjMzQ7Ci0JCUxPQURfR1BSX0MKJiM0MzsJCSYjMzQ7bW92ICYjMzQ7IEdVRVNUX1JFRyhyZmxhZ3MpICYjMzQ7LCAlJXIxNVxuXHQmIzM0OwomIzQzOwkJJiMzNDttb3YgJSVyMTUsICVbdm1jYl9yZmxhZ3NdXG5cdCYjMzQ7CiYjNDM7CQkmIzM0O21vdiAmIzM0OyBHVUVTVF9SRUcocmF4KSAmIzM0OywgJSVyMTVcblx0JiMzNDsKJiM0MzsJCSYjMzQ7bW92ICUlcjE1LCAlW3ZtY2JfcmF4XVxuXHQmIzM0OwomIzQzOwkJU1ZNX1NXSVRDSF9HUFJTX0FTTQogCQkmIzM0O3ZtcnVuICVbdm1jYl9ncGFdXG5cdCYjMzQ7Ci0JCVNBVkVfR1BSX0MKLQkJJiMzNDttb3YgMHgxNzAoJVt2bWNiXSksICUlcjE1XG5cdCYjMzQ7CS8vIHJmbGFncwotCQkmIzM0O21vdiAlJXIxNSwgcmZsYWdzXG5cdCYjMzQ7Ci0JCSYjMzQ7bW92IDB4MWY4KCVbdm1jYl0pLCAlJXIxNVxuXHQmIzM0OwkvLyByYXgKLQkJJiMzNDttb3YgJSVyMTUsIGd1ZXN0X3JlZ3Ncblx0JiMzNDsKJiM0MzsJCVNWTV9TV0lUQ0hfR1BSU19BU00KJiM0MzsJCSYjMzQ7bW92ICVbdm1jYl9yZmxhZ3NdLCAlJXIxNVxuXHQmIzM0OwomIzQzOwkJJiMzNDttb3YgJSVyMTUsICYjMzQ7IEdVRVNUX1JFRyhyZmxhZ3MpICYjMzQ7XG5cdCYjMzQ7CiYjNDM7CQkmIzM0O21vdiAlW3ZtY2JfcmF4XSwgJSVyMTVcblx0JiMzNDsJLy8gcmF4CiYjNDM7CQkmIzM0O21vdiAlJXIxNSwgJiMzNDsgR1VFU1RfUkVHKHJheCkgJiMzNDtcblx0JiMzNDsKIAkJJiMzNDt2bXNhdmUgJVt2bWNiX2dwYV1cblx0JiMzNDsKLQkJOiA6IFt2bWNiXSAmIzM0O3ImIzM0OyAodm1jYiksIFt2bWNiX2dwYV0gJiMzNDthJiMzNDsgKHZtY2JfZ3BhKQomIzQzOwkJOiBbdm1jYl9yZmxhZ3NdICYjMzQ7JiM0MzttJiMzNDsgKHZtY2ItJmd0O3NhdmUucmZsYWdzKSwKJiM0MzsJCSAgW3ZtY2JfcmF4XSAmIzM0OyYjNDM7bSYjMzQ7ICh2bWNiLSZndDtzYXZlLnJheCkKJiM0MzsJCTogW3ZtY2JfZ3BhXSAmIzM0O2EmIzM0OyAodm1jYl9ncGEpLAomIzQzOwkJICBHVUVTVF9SRUdTX09GRlNFVFMKIAkJOiAmIzM0O3IxNSYjMzQ7LCAmIzM0O21lbW9yeSYjMzQ7KTsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmMKaW5kZXggZTdkZDU3OTE5NTliYS4uMzgwNTBjNjBhMDY3MCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jCkBAIC0xMCwzNiAmIzQzOzEwLDggQEAKIAogdm9pZCB1Y2FsbF9hcmNoX2RvX3VjYWxsKGd2YV90IHVjKQogewotCS8qCi0JICogRklYTUU6IFJldmVydCB0aGlzIGhhY2sgKHRoZSBlbnRpcmUgY29tbWl0IHRoYXQgYWRkZWQgaXQpIG9uY2UgblZNWAotCSAqIHByZXNlcnZlcyBMMiBHUFJzIGFjcm9zcyBhIG5lc3RlZCBWTS1FeGl0LiAgSWYgYSB1Y2FsbCBmcm9tIEwyLCBlLmcuCi0JICogdG8gZG8gYSBHVUVTVF9TWU5DKCksIGxhbmRzIHRoZSB2Q1BVIGluIEwxLCBhbnkgYW5kIGFsbCBHUFJzIGNhbiBiZQotCSAqIGNsb2JiZXJlZCBieSBMMS4gIFNhdmUgYW5kIHJlc3RvcmUgbm9uLXZvbGF0aWxlIEdQUnMgKGNsb2JiZXJpbmcgUkJQCi0JICogaW4gcGFydGljdWxhciBpcyBwcm9ibGVtYXRpYykgYWxvbmcgd2l0aCBSRFggYW5kIFJESSAod2hpY2ggYXJlCi0JICogaW5wdXRzKSwgYW5kIGNsb2JiZXIgdm9sYXRpbGUgR1BScy4gKnNpZ2gqCi0JICovCi0jZGVmaW5lIEhPUlJJRklDX0wyX1VDQUxMX0NMT0JCRVJfSEFDSwlcCi0JJiMzNDtyY3gmIzM0OywgJiMzNDtyc2kmIzM0OywgJiMzNDtyOCYjMzQ7LCAmIzM0O3I5JiMzNDssICYjMzQ7cjEwJiMzNDssICYjMzQ7cjExJiMzNDsKLQotCWFzbSB2b2xhdGlsZSgmIzM0O3B1c2ggJSVyYnBcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyMTVcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyMTRcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyMTNcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyMTJcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyYnhcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyZHhcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyZGlcblx0JiMzNDsKLQkJICAgICAmIzM0O2luICVbcG9ydF0sICUlYWxcblx0JiMzNDsKLQkJICAgICAmIzM0O3BvcCAlJXJkaVxuXHQmIzM0OwotCQkgICAgICYjMzQ7cG9wICUlcmR4XG5cdCYjMzQ7Ci0JCSAgICAgJiMzNDtwb3AgJSVyYnhcblx0JiMzNDsKLQkJICAgICAmIzM0O3BvcCAlJXIxMlxuXHQmIzM0OwotCQkgICAgICYjMzQ7cG9wICUlcjEzXG5cdCYjMzQ7Ci0JCSAgICAgJiMzNDtwb3AgJSVyMTRcblx0JiMzNDsKLQkJICAgICAmIzM0O3BvcCAlJXIxNVxuXHQmIzM0OwotCQkgICAgICYjMzQ7cG9wICUlcmJwXG5cdCYjMzQ7Ci0JCTogOiBbcG9ydF0gJiMzNDtkJiMzNDsgKFVDQUxMX1BJT19QT1JUKSwgJiMzNDtEJiMzNDsgKHVjKSA6ICYjMzQ7cmF4JiMzNDssICYjMzQ7bWVtb3J5JiMzNDssCi0JCSAgICAgSE9SUklGSUNfTDJfVUNBTExfQ0xPQkJFUl9IQUNLKTsKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7aW4gJVtwb3J0XSwgJSVhbCYjMzQ7CiYjNDM7CQk6IDogW3BvcnRdICYjMzQ7ZCYjMzQ7IChVQ0FMTF9QSU9fUE9SVCksICYjMzQ7RCYjMzQ7ICh1YykgOiAmIzM0O3JheCYjMzQ7LCAmIzM0O21lbW9yeSYjMzQ7KTsKIH0KIAogdm9pZCAqdWNhbGxfYXJjaF9nZXRfdWNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jCmluZGV4IDc3Y2U4N2M0MWE4NjguLmFhN2YzYjQwNWZkMzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMKQEAgLTIyLDkgJiM0MzsyMiw2IEBACiAKICNkZWZpbmUgU1lOQ19QT1JUCTB4ZQogCi0jZGVmaW5lIFNUUih4KSAjeAotI2RlZmluZSBYU1RSKHMpIFNUUihzKQotCiAvKgogICogU01JIGhhbmRsZXI6IHJ1bnMgaW4gcmVhbC1hZGRyZXNzIG1vZGUuCiAgKiBSZXBvcnRzIFNNUkFNX1NUQUdFIHZpYSBwb3J0IElPLCB0aGVuIGRvZXMgUlNNLgpAQCAtMzcsNyAmIzQzOzM0LDcgQEAgc3RhdGljIHU4IHNtaV9oYW5kbGVyW10gPSB7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jX3dpdGhfaG9zdCh1NjQgcGhhc2UpCiB7Ci0JYXNtIHZvbGF0aWxlKCYjMzQ7aW4gJCYjMzQ7IFhTVFIoU1lOQ19QT1JUKSAmIzM0OywgJSVhbCBcbiYjMzQ7CiYjNDM7CWFzbSB2b2xhdGlsZSgmIzM0O2luICQmIzM0OyBfX3N0cmluZ2lmeShTWU5DX1BPUlQpICYjMzQ7LCAlJWFsIFxuJiMzNDsKIAkJICAgICA6ICYjMzQ7JiM0MzthJiMzNDsgKHBoYXNlKSk7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZml4X2h5cGVyY2FsbF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jCmluZGV4IDc1M2EwZTczMGVhOGQuLjQ5MzFlYzIyNzY4ZWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZml4X2h5cGVyY2FsbF90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9maXhfaHlwZXJjYWxsX3Rlc3QuYwpAQCAtNiw3ICYjNDM7Niw2IEBACiAgKi8KICNpbmNsdWRlICZsdDthc20va3ZtX3BhcmEuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rdm1fcGFyYS5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZ2lmeS5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2t2bV90ZXN0X2hhcm5lc3MuaCYjMzQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5iYTFkNzIzMDAxZTk0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuYwpAQCAtMCwwICYjNDM7MSwyOTEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3RpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzaWduYWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2dldG9wdC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtwcm9jZXNzb3IuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzdm1fdXRpbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZteC5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIE5SX0lURVJBVElPTlMJCTUwMAomIzQzOwomIzQzOyNkZWZpbmUgUFRSU19QRVJfUFRFCQk1MTIKJiM0MzsjZGVmaW5lIFBYRF9JTkRFWCh2YWRkciwgbGV2ZWwpCSgoKHZhZGRyKSAmZ3Q7Jmd0OyBQR19MRVZFTF9TSElGVChsZXZlbCkpICZhbXA7IChQVFJTX1BFUl9QVEUgLSAxKSkKJiM0MzsKJiM0MzsjZGVmaW5lIFRFU1RfTUVNX0JBU0VfR1ZBCTB4YzAwMDAwMDBVTEwKJiM0MzsjZGVmaW5lIFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUCTB4ZDAwMDAwMDBVTEwKJiM0MzsjZGVmaW5lIFBBVFRFUk4JCQkweGFiY2RlZmFiY2RlZmFiY2RVTEwKJiM0MzsKJiM0MztzdGF0aWMgdTY0IGV4cGVjdGVkX3ZhZGRyOwomIzQzO3N0YXRpYyB1NjQgZ3Vlc3RfZmF1bHRzOwomIzQzOwomIzQzO3N0YXRpYyB1NjQgKmd1ZXN0X2dldF9wdGUodTY0IHZhZGRyKQomIzQzO3sKJiM0MzsJdTY0IHBndGFibGVfcGEsIHB0ZTsKJiM0MzsJdTY0ICpwZ3RhYmxlOwomIzQzOwlpbnQgbGV2ZWw7CiYjNDM7CiYjNDM7CWxldmVsID0gKGdldF9jcjQoKSAmYW1wOyBYODZfQ1I0X0xBNTcpID8gUEdfTEVWRUxfMjU2VCA6IFBHX0xFVkVMXzUxMkc7CiYjNDM7CiYjNDM7CXBndGFibGVfcGEgPSBnZXRfY3IzKCkgJmFtcDsgUEhZU0lDQUxfUEFHRV9NQVNLOwomIzQzOwlmb3IgKDsgbGV2ZWwgJmd0OyBQR19MRVZFTF80SzsgbGV2ZWwtLSkgewomIzQzOwkJcGd0YWJsZSA9ICh1NjQgKikocGd0YWJsZV9wYSAmIzQzOyBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVCk7CiYjNDM7CQlwdGUgPSBwZ3RhYmxlW1BYRF9JTkRFWCh2YWRkciwgbGV2ZWwpXTsKJiM0MzsJCUdVRVNUX0FTU0VSVChwdGUgJmFtcDsgUFRFX1BSRVNFTlRfTUFTSygmYW1wO2d1ZXN0X21tdSkpOwomIzQzOwkJR1VFU1RfQVNTRVJUKCEocHRlICZhbXA7IFBURV9IVUdFX01BU0soJmFtcDtndWVzdF9tbXUpKSk7CiYjNDM7CQlwZ3RhYmxlX3BhID0gUFRFX0dFVF9QQShwdGUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBndGFibGUgPSAodTY0ICopKHBndGFibGVfcGEgJiM0MzsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQpOwomIzQzOwlyZXR1cm4gJmFtcDtwZ3RhYmxlW1BYRF9JTkRFWCh2YWRkciwgUEdfTEVWRUxfNEspXTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3RfcGZfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncykKJiM0Mzt7CiYjNDM7CXU2NCBmYXVsdF9hZGRyOwomIzQzOwl1NjQgKnB0ZXA7CiYjNDM7CiYjNDM7CWZhdWx0X2FkZHIgPSBnZXRfY3IyKCk7CiYjNDM7CUdVRVNUX0FTU0VSVF9FUShmYXVsdF9hZGRyLCBSRUFEX09OQ0UoZXhwZWN0ZWRfdmFkZHIpKTsKJiM0MzsKJiM0MzsJcHRlcCA9IGd1ZXN0X2dldF9wdGUoZmF1bHRfYWRkcik7CiYjNDM7CUdVRVNUX0FTU0VSVChwdGVwKTsKJiM0MzsJR1VFU1RfQVNTRVJUKCEoKnB0ZXAgJmFtcDsgUFRFX1BSRVNFTlRfTUFTSygmYW1wO2d1ZXN0X21tdSkpKTsKJiM0MzsKJiM0MzsJKnB0ZXAgfD0gUFRFX1BSRVNFTlRfTUFTSygmYW1wO2d1ZXN0X21tdSk7CiYjNDM7CWd1ZXN0X2ZhdWx0cyYjNDM7JiM0Mzs7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2FjY2Vzc19tZW1vcnkodm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJdTY0IHZhZGRyLCB2YWw7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyA7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl2YWRkciA9IFRFU1RfTUVNX0JBU0VfR1ZBICYjNDM7IChpICUgUFRSU19QRVJfUFRFKSAqIFBBR0VfU0laRTsKJiM0MzsJCVdSSVRFX09OQ0UoZXhwZWN0ZWRfdmFkZHIsIHZhZGRyKTsKJiM0MzsKJiM0MzsJCS8qIFJlYWQgdG8gdHJpZ2dlciAjUEYgKi8KJiM0MzsJCXZhbCA9IFJFQURfT05DRSgqKHU2NCAqKXZhZGRyKTsKJiM0MzsJCUdVRVNUX0FTU0VSVF9FUSh2YWwsIFBBVFRFUk4pOwomIzQzOwomIzQzOwkJLyogQ2xlYXIgdGhlIHByZXNlbnQgYml0IGFnYWluIHNvIGl0IGZhdWx0cyBuZXh0IHRpbWUgKi8KJiM0MzsJCSpndWVzdF9nZXRfcHRlKHZhZGRyKSAmYW1wOz0gflBURV9QUkVTRU5UX01BU0soJmFtcDtndWVzdF9tbXUpOwomIzQzOwkJaW52bHBnKHZhZGRyKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBsMV9zdm1fY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtKQomIzQzO3sKJiM0MzsJZ2VuZXJpY19zdm1fc2V0dXAoc3ZtLCBndWVzdF9hY2Nlc3NfbWVtb3J5KTsKJiM0MzsJc3ZtLSZndDt2bWNiLSZndDtjb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zIHw9IEJJVChVRF9WRUNUT1IpOwomIzQzOwomIzQzOwl3aGlsZSAoMSkgewomIzQzOwkJcnVuX2d1ZXN0KHN2bS0mZ3Q7dm1jYiwgc3ZtLSZndDt2bWNiX2dwYSk7CiYjNDM7CQlHVUVTVF9BU1NFUlRfRVEoc3ZtLSZndDt2bWNiLSZndDtjb250cm9sLmV4aXRfY29kZSwKJiM0MzsJCQkJKFNWTV9FWElUX0VYQ1BfQkFTRSAmIzQzOyBVRF9WRUNUT1IpKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiYjNDM7ewomIzQzOwlHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTsKJiM0MzsJR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTsKJiM0MzsJcHJlcGFyZV92bWNzKHZteCwgZ3Vlc3RfYWNjZXNzX21lbW9yeSk7CiYjNDM7CiYjNDM7CS8qIEludGVyY2VwdCBVRCwgaWdub3JlIGFueSAjUEYgKi8KJiM0MzsJR1VFU1RfQVNTRVJUKCF2bXdyaXRlKEVYQ0VQVElPTl9CSVRNQVAsIEJJVChVRF9WRUNUT1IpIHwgQklUKFBGX1ZFQ1RPUikpKTsKJiM0MzsJR1VFU1RfQVNTRVJUKCF2bXdyaXRlKFBBR0VfRkFVTFRfRVJST1JfQ09ERV9NQVNLLCAwKSk7CiYjNDM7CUdVRVNUX0FTU0VSVCghdm13cml0ZShQQUdFX0ZBVUxUX0VSUk9SX0NPREVfTUFUQ0gsIC0xKSk7CiYjNDM7CiYjNDM7CUdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7CiYjNDM7CXdoaWxlICgxKSB7CiYjNDM7CQlHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpOwomIzQzOwkJR1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pICZhbXA7IDB4ZmYsIFVEX1ZFQ1RPUik7CiYjNDM7CQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqdGVzdF9kYXRhKQomIzQzO3sKJiM0MzsJaWYgKHRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKQomIzQzOwkJbDFfc3ZtX2NvZGUodGVzdF9kYXRhKTsKJiM0MzsJZWxzZQomIzQzOwkJbDFfdm14X2NvZGUodGVzdF9kYXRhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgKnNpZ3Vzcl90aHJlYWRfZm4odm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJcHRocmVhZF90IHZjcHVfdGhyZWFkID0gKHB0aHJlYWRfdClhcmc7CiYjNDM7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCXB0aHJlYWRfdGVzdGNhbmNlbCgpOwomIzQzOwkJcHRocmVhZF9raWxsKHZjcHVfdGhyZWFkLCBTSUdVU1IxKTsKJiM0MzsJCXVzbGVlcChtc2Vjc190b191c2VjcygxKSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGR1bW15X3NpZ25hbF9oYW5kbGVyKGludCBzaWdubykge30KJiM0MztzdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBzYTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2Y3B1X3NpZ3Vzcl9saXN0ZW4odm9pZCkKJiM0Mzt7CiYjNDM7CXNhLnNhX2hhbmRsZXIgPSBkdW1teV9zaWduYWxfaGFuZGxlcjsKJiM0MzsJc2lnYWN0aW9uKFNJR1VTUjEsICZhbXA7c2EsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2Y3B1X3NpZ3Vzcl9pZ25vcmUodm9pZCkKJiM0Mzt7CiYjNDM7CXNhLnNhX2hhbmRsZXIgPSBTSUdfSUdOOwomIzQzOwlzaWdhY3Rpb24oU0lHVVNSMSwgJmFtcDtzYSwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGt2bV94ODZfc3RhdGVfcXVldWVfdWQoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJaWYgKHN0YXRlLSZndDtldmVudHMuZXhjZXB0aW9uLnBlbmRpbmcgfHwgc3RhdGUtJmd0O2V2ZW50cy5leGNlcHRpb24uaW5qZWN0ZWQpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXN0YXRlLSZndDtldmVudHMuZmxhZ3MgfD0gS1ZNX1ZDUFVFVkVOVF9WQUxJRF9QQVlMT0FEOwomIzQzOwlzdGF0ZS0mZ3Q7ZXZlbnRzLmV4Y2VwdGlvbi5wZW5kaW5nID0gdHJ1ZTsKJiM0MzsJc3RhdGUtJmd0O2V2ZW50cy5leGNlcHRpb24uaW5qZWN0ZWQgPSBmYWxzZTsKJiM0MzsJc3RhdGUtJmd0O2V2ZW50cy5leGNlcHRpb24ubnIgPSBVRF9WRUNUT1I7CiYjNDM7CXN0YXRlLSZndDtldmVudHMuZXhjZXB0aW9uLmhhc19lcnJvcl9jb2RlID0gZmFsc2U7CiYjNDM7CXN0YXRlLSZndDtldmVudHMuZXhjZXB0aW9uX2hhc19wYXlsb2FkID0gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ1bl90ZXN0KGJvb2wgbmVzdGVkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlOwomIzQzOwlpbnQgciwgaSwgbGV2ZWw7CiYjNDM7CXB0aHJlYWRfdCBzaWd1c3JfdGhyZWFkOwomIzQzOwlncGFfdCBncGEsIHBndGFibGVfZ3BhOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlzdHJ1Y3QgdWNhbGwgdWM7CiYjNDM7CXU2NCAqcGd0YWJsZTsKJiM0MzsJZ3ZhX3QgZ3ZhOwomIzQzOwl1NjQgcHRlOwomIzQzOwomIzQzOwl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgbmVzdGVkID8gbDFfZ3Vlc3RfY29kZSA6IGd1ZXN0X2FjY2Vzc19tZW1vcnkpOwomIzQzOwl2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBQRl9WRUNUT1IsIGd1ZXN0X3BmX2hhbmRsZXIpOwomIzQzOwl2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FELCAtMnVsKTsKJiM0MzsKJiM0MzsJaWYgKG5lc3RlZCkgewomIzQzOwkJaWYgKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkpCiYjNDM7CQkJdmNwdV9hbGxvY19zdm0odm0sICZhbXA7Z3ZhKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQl2Y3B1X2FsbG9jX3ZteCh2bSwgJmFtcDtndmEpOwomIzQzOwkJdmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBndmEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFsbG9jYXRlIGEgcGFnZSBhbmQgd3JpdGUgdGhlIHBhdHRlcm4gdG8gaXQgKi8KJiM0MzsJZ3ZhID0gdm1fYWxsb2NfcGFnZSh2bSk7CiYjNDM7CSoodTY0ICopYWRkcl9ndmEyaHZhKHZtLCBndmEpID0gUEFUVEVSTjsKJiM0MzsJZ3BhID0gYWRkcl9ndmEyZ3BhKHZtLCBndmEpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYXAgYWxsIHZpcnR1YWwgYWRkcmVzc2VzIHRvIHRoZSBwYXR0ZXJuIHBhZ2UgYW5kIGNsZWFyIHRoZSBwcmVzZW50CiYjNDM7CSAqIGJpdCBzdWNoIHRoYXQgZ3Vlc3QgYWNjZXNzZXMgd2lsbCBjYXVzZSBhICNQRi4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBQVFJTX1BFUl9QVEU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlndmEgPSBURVNUX01FTV9CQVNFX0dWQSAmIzQzOyBpICogZ2V0cGFnZXNpemUoKTsKJiM0MzsJCXZpcnRfcGdfbWFwKHZtLCBndmEsIGdwYSk7CiYjNDM7CQkqdm1fZ2V0X3B0ZSh2bSwgZ3ZhKSAmYW1wOz0gflBURV9QUkVTRU5UX01BU0soJmFtcDt2bS0mZ3Q7bW11KTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBOb3cgY3JlYXRlIG1hcHBpbmdzIGZvciB0aGUgcGFnZSB0YWJsZXMgY3JlYXRlZCBhYm92ZSBzbyB0aGF0IHRoZQomIzQzOwkgKiBndWVzdCAjUEYgaGFuZGxlciBjYW4gd2FsayB0aGVtLiBBbGwgUFRFcyBmb3IgdGVzdCB2aXJ0dWFsIGFkZHJlc3NlcwomIzQzOwkgKiBzaG91bGQgbGllIG9uIHRoZSBzYW1lIFBURSBwYWdlLCBzbyBvbmUgcGFnZSBpcyBtYXBwZWQgZm9yIGVhY2ggcGFnZQomIzQzOwkgKiB0YWJsZSBsZXZlbC4KJiM0MzsJICoKJiM0MzsJICogVXNlIGFuIG9mZnNldCBmb3IgdGhlIEdWQSBpbnN0ZWFkIG9mIGNyZWF0aW5nIGlkZW50aXR5IG1hcHBpbmdzIHRvCiYjNDM7CSAqIGF2b2lkIGNvbGxpc2lvbiB3aXRoIGV4aXN0aW5nIG1hcHBpbmdzIGF0IGxvdyBHVkFzIChlLmcuIEVMRikuCiYjNDM7CSAqLwomIzQzOwlwZ3RhYmxlX2dwYSA9IHZtLSZndDttbXUucGdkOwomIzQzOwlmb3IgKGxldmVsID0gdm0tJmd0O21tdS5wZ3RhYmxlX2xldmVsczsgbGV2ZWwgJmd0Oz0gUEdfTEVWRUxfNEs7IGxldmVsLS0pIHsKJiM0MzsJCXZpcnRfbWFwKHZtLCBwZ3RhYmxlX2dwYSAmIzQzOyBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVCwgcGd0YWJsZV9ncGEsIDEpOwomIzQzOwkJcGd0YWJsZSA9IGFkZHJfZ3BhMmh2YSh2bSwgcGd0YWJsZV9ncGEpOwomIzQzOwkJcHRlID0gcGd0YWJsZVtQWERfSU5ERVgoVEVTVF9NRU1fQkFTRV9HVkEsIGxldmVsKV07CiYjNDM7CQlwZ3RhYmxlX2dwYSA9IFBURV9HRVRfUEEocHRlKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBJbml0aWFsaXplIHRoZSB0aHJlYWQgc2VuZGluZyBTSUdVU1IgYW5kIGluc3RhbGwgdGhlIGhhbmRsZXIgKi8KJiM0MzsJdmNwdV9zaWd1c3JfaWdub3JlKCk7CiYjNDM7CXIgPSBwdGhyZWFkX2NyZWF0ZSgmYW1wO3NpZ3Vzcl90aHJlYWQsIE5VTEwsIHNpZ3Vzcl90aHJlYWRfZm4sCiYjNDM7CQkJICAgKHZvaWQgKilwdGhyZWFkX3NlbGYoKSk7CiYjNDM7CVRFU1RfQVNTRVJUKCFyLCAmIzM0O3B0aHJlYWRfY3JlYXRlKCkgZmFpbGVkOiAlZCYjMzQ7LCByKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMTsgaSAmbHQ7PSBOUl9JVEVSQVRJT05TOyBpJiM0MzsmIzQzOykgewomIzQzOwkJLyoKJiM0MzsJCSAqIE9ubHkgaGFuZGxlIFNJR1VTUiB3aGlsZSB0aGUgdkNQVSBpcyBydW5uaW5nLCBvdGhlcndpc2UKJiM0MzsJCSAqIGlnbm9yZSBpdCB0byBhdm9pZCBpbnRlcnJ1cHRpbmcgb3RoZXIgaW9jdGxzL3N5c2NhbGxzLgomIzQzOwkJICovCiYjNDM7CQl2Y3B1X3NpZ3Vzcl9saXN0ZW4oKTsKJiM0MzsJCXIgPSBfX3ZjcHVfcnVuKHZjcHUpOwomIzQzOwkJaWYgKHIgPT0gLTEpCiYjNDM7CQkJVEVTVF9BU1NFUlRfRVEoZXJybm8sIEVJTlRSKTsKJiM0MzsJCXZjcHVfc2lndXNyX2lnbm9yZSgpOwomIzQzOwomIzQzOwkJLyogVGhlIGd1ZXN0IG9ubHkgZXhpdHMgZHVlIHRvIGEgc2lnbmFsIG9yIGZhaWxlZCBhc3NlcnRpb24gKi8KJiM0MzsJCWlmICghcikgewomIzQzOwkJCVRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7CiYjNDM7CQkJVEVTVF9BU1NFUlRfRVEoZ2V0X3VjYWxsKHZjcHUsICZhbXA7dWMpLCBVQ0FMTF9BQk9SVCk7CiYjNDM7CQkJUkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlzdGF0ZSA9IHZjcHVfc2F2ZV9zdGF0ZSh2Y3B1KTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBJZiB0aGUgdkNQVSBpcyBpbiBndWVzdCBtb2RlLCBpbmplY3QgYSAjVUQgdG8gdHJpZ2dlciBhbgomIzQzOwkJICogTDItJmd0O0wxIFZNLUV4aXQgZXZlcnkgb3RoZXIgaXRlcmF0aW9uLgomIzQzOwkJICovCiYjNDM7CQlpZiAoa3ZtX3g4Nl9zdGF0ZV9pc19ndWVzdF9tb2RlKHN0YXRlKSAmYW1wOyZhbXA7IGkgJSAyID09IDApCiYjNDM7CQkJa3ZtX3g4Nl9zdGF0ZV9xdWV1ZV91ZChzdGF0ZSk7CiYjNDM7CiYjNDM7CQlrdm1fdm1fcmVsZWFzZSh2bSk7CiYjNDM7CQl2Y3B1ID0gdm1fcmVjcmVhdGVfd2l0aF9vbmVfdmNwdSh2bSk7CiYjNDM7CQl2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FELCAtMnVsKTsKJiM0MzsJCXZjcHVfbG9hZF9zdGF0ZSh2Y3B1LCBzdGF0ZSk7CiYjNDM7CQlrdm1feDg2X3N0YXRlX2NsZWFudXAoc3RhdGUpOwomIzQzOwomIzQzOwkJcHJfaW5mbygmIzM0O1xyU2F2ZSYjNDM7cmVzdG9yZSBpdGVyYXRpb25zOiAlZCYjMzQ7LCBpKTsKJiM0MzsJfQomIzQzOwlwcl9pbmZvKCYjMzQ7XG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3Qodm0sIGd1ZXN0X2ZhdWx0cyk7CiYjNDM7CVRFU1RfQVNTRVJUKGd1ZXN0X2ZhdWx0cyAmZ3Q7IDAsICYjMzQ7Tm8gZ3Vlc3QgcGFnZSBmYXVsdHMgdHJpZ2dlcmVkJiMzNDspOwomIzQzOwlwcl9pbmZvKCYjMzQ7R3Vlc3QgcGFnZSBmYXVsdHMlczogJWx1XG4mIzM0OywgbmVzdGVkID8gJiMzNDsgKGluIEwyKSYjMzQ7IDogJiMzNDsmIzM0OywgZ3Vlc3RfZmF1bHRzKTsKJiM0MzsKJiM0MzsJcHRocmVhZF9jYW5jZWwoc2lndXNyX3RocmVhZCk7CiYjNDM7CXB0aHJlYWRfam9pbihzaWd1c3JfdGhyZWFkLCBOVUxMKTsKJiM0MzsJa3ZtX3ZtX2ZyZWUodm0pOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQomIzQzO3sKJiM0MzsJcHJfaW5mbygmIzM0O1J1bm5pbmcgc2F2ZSYjNDM7cmVzdG9yZSBzdHJlc3MgdGVzdC4uLlxuJiMzNDspOwomIzQzOwlydW5fdGVzdCgvKm5lc3RlZD0qL2ZhbHNlKTsKJiM0MzsKJiM0MzsJaWYgKCFrdm1faGFzX2NhcChLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FEKSB8fAomIzQzOwkgICAgIWt2bV9oYXNfY2FwKEtWTV9DQVBfTkVTVEVEX1NUQVRFKSB8fAomIzQzOwkgICAgKCFrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pICZhbXA7JmFtcDsgIWt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1ZNWCkpKSB7CiYjNDM7CQlwcl9pbmZvKCYjMzQ7TmVzdGVkIHZpcnR1YWxpemF0aW9uIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nIG5lc3RlZCB0ZXN0XG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlwcl9pbmZvKCYjMzQ7UnVubmluZyBzYXZlJiM0MztyZXN0b3JlIHN0cmVzcyB0ZXN0IHdpdGggYSBuZXN0ZWQgZ3Vlc3QuLi5cbiYjMzQ7KTsKJiM0MzsJcnVuX3Rlc3QoLypuZXN0ZWQ9Ki90cnVlKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jCmluZGV4IGUyNTQyZjRjZWQ2MDUuLmQxZWRhZmQ1YWY3NTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMKQEAgLTIyLDkgJiM0MzsyMiw2IEBACiAjZGVmaW5lIFNNUkFNX0dQQSAweDEwMDAwMDAKICNkZWZpbmUgU01SQU1fU1RBR0UgMHhmZQogCi0jZGVmaW5lIFNUUih4KSAjeAotI2RlZmluZSBYU1RSKHMpIFNUUihzKQotCiAjZGVmaW5lIFNZTkNfUE9SVCAweGUKICNkZWZpbmUgRE9ORSAweGZmCiAKQEAgLTQyLDcgJiM0MzszOSw3IEBAIHU4IHNtaV9oYW5kbGVyW10gPSB7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jX3dpdGhfaG9zdCh1NjQgcGhhc2UpCiB7Ci0JYXNtIHZvbGF0aWxlKCYjMzQ7aW4gJCYjMzQ7IFhTVFIoU1lOQ19QT1JUKSYjMzQ7LCAlJWFsIFxuJiMzNDsKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7aW4gJCYjMzQ7IF9fc3RyaW5naWZ5KFNZTkNfUE9SVCkmIzM0OywgJSVhbCBcbiYjMzQ7CiAJCSAgICAgOiAmIzM0OyYjNDM7YSYjMzQ7IChwaGFzZSkpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE5OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTY5CgkJCQkJCQlvdXRwdXQ6IDg4CgkJCQkJCQl0aG91Z2h0czogOTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTSBTZWxmdGVzdCBQYXRjaCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBLVk0gc2VsZnRlc3RzLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGludHJvZHVjaW5nIGEgbmV3IHRlc3QsIGBzYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuY2AsIGFuZCB0b3VjaGluZyB1cCBzb21lIGV4aXN0aW5nIHRlc3RzIGFuZCBoZWFkZXJzLiBDcnVjaWFsbHksIHRob3VnaCwgaXQmIzM5O3MgYWxsIGNvbnRhaW5lZCB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gLiAgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHVuZGVyc3Rvb2QuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGUgZmlsZSBsaXN0IGFnYWluIHRvIGJlIGFic29sdXRlbHkgc3VyZTogYE1ha2VmaWxlLmt2bWAsIGB0ZXN0X3V0aWwuaGAsIGBldm1jcy5oYCwgYHByb2Nlc3Nvci5oYCwgYHZteC5oYCwgYGFzc2VydC5jYCwgYHByb2Nlc3Nvci5jYCwgYHN2bS5jYCwgYHVjYWxsLmNgLCBgZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY2AsIGBmaXhfaHlwZXJjYWxsX3Rlc3QuY2AsIGBzYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuY2AsIGFuZCBgc21tX3Rlc3QuY2AuIFllcCwgYWxsIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gIGRpcmVjdG9yeS4KClRoZSBrZXkgdGhpbmcgaXMsIHRoaXMgaXMgKnB1cmVseSogYSBzZWxmdGVzdCBtb2RpZmljYXRpb24uIEl0IGRvZXNuJiMzOTt0IG1vZGlmeSBhbnkga2VybmVsIGNvZGUgYXQgYWxsLiBObyBjaGFuZ2VzIHRvIGBhcmNoL3g4Ni9rdm0vYCwgYHZpcnQva3ZtL2AsIG9yIGFueXdoZXJlIGVsc2UgaW4gdGhlIGtlcm5lbCBwcm9wZXIuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2Ugc3l6a2FsbGVyIGZ1enplcyB0aGUga2VybmVsIGl0c2VsZiwgbm90IHRoZSB1c2Vyc3BhY2UgdG9vbHMgdGhhdCB0ZXN0IGl0LgoKTGV0IG1lIHNlZSB3aGF0IHRoZSBpbnN0cnVjdGlvbnMgc2F5IGFib3V0IHRoaXMgc2NlbmFyaW8uICBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZnkgdGhhdCBjaGFuZ2VzIHRvIGB0b29scy9gIGFuZCBzZWxmdGVzdHMgc2hvdWxkIGJlIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHVuZGVyIHRoZXNlIGNpcmN1bXN0YW5jZXMuCgpSaWdodCwgc28gdGhpcyBmYWxscyBzcXVhcmVseSB3aXRoaW4gdGhlIGNyaXRlcmlhIGZvciBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQmIzM5O3MgYSBzZWxmdGVzdCwgYW5kIGl0JiMzOTtzIG5vdCBjaGFuZ2luZyB0aGUga2VybmVsJiMzOTtzIGJlaGF2aW9yLiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIGNvZGUsIG5vIG5ldyBmdW5jdGlvbmFsaXR5LCBub3RoaW5nIHRoYXQgd291bGQgYmUgcmVhY2hlZCBkdXJpbmcgZnV6emluZy4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3Qgd2FycmFudCBmdXp6aW5nLiAgSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNsZWFyOiB0aGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LCB3aGljaCBkbyBub3QgbW9kaWZ5IHRoZSBrZXJuZWwgY29kZSB0aGF0IHN5emthbGxlciBmdXp6ZXIgaXMgZGVzaWduZWQgdG8gdGVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxOTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhbmQgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGNvZGUgb3IgZHJpdmVycy4gU2luY2UgdGhlIGZ1enppbmcgdGFyZ2V0cyB0aGUga2VybmVsIGFuZCBub3QgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbHMsIHRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGtlcm5lbCBjaGFuZ2VzIHRvIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYW5kIG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLy4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBjb3JlIGtlcm5lbCBjb2RlIG9yIGRyaXZlcnMuIFNpbmNlIHRoZSBmdXp6aW5nIHRhcmdldHMgdGhlIGtlcm5lbCBhbmQgbm90IHVzZXJzcGFjZSB0ZXN0aW5nIHRvb2xzLCB0aGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBrZXJuZWwgY2hhbmdlcyB0byBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE5OjM5OjQyLjcwMjMxNjYyNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzIyMDI5OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgYW5kIG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLy4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBjb3JlIGtlcm5lbCBjb2RlIG9yIGRyaXZlcnMuIFNpbmNlIHRoZSBmdXp6aW5nIHRhcmdldHMgdGhlIGtlcm5lbCBhbmQgbm90IHVzZXJzcGFjZSB0ZXN0aW5nIHRvb2xzLCB0aGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBrZXJuZWwgY2hhbmdlcyB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTk6Mzk6NDIuNzAyMzI1MDg0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUyMjE1NjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTI5NDg2OGFkMDkxMzVhZjEwZTAxZTY2MDRmM2E5NzkxMWZjNTRlYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyOCAxOTozOTo0MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbmluZGV4IDg4YzZjODA0NmRkZWMuLmU2N2IxZTk4OTNmNjggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG5AQCAtMTEyLDYgKzExMiw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvc2V0X3NyZWdzX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zbW1fdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3N0YXRlX3Rlc3RcXG4rVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni92bXhfcHJlZW1wdGlvbl90aW1lcl90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvc3ZtX3ZtY2FsbF90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvc3ZtX2ludF9jdGxfdGVzdFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXFxuaW5kZXggZDY0YzhhMjI4MjA3YS4uZTgzNTZlZTU0ZDdiOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXFxuQEAgLTIzLDYgKzIzLDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5naWZ5LmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIG1zZWNzX3RvX3VzZWNzKG1zZWMpICAgICgobXNlYykgKiAxMDAwVUxMKVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaFxcbmluZGV4IGJlNzliZGEwMjRiZjEuLjgyYThlYTZiNjYxZjAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaFxcbkBAIC0xMjA3LDMwICsxMjA3LDIzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtbGF1bmNoKHZvaWQpXFxuIFxcbiBcXHRjdXJyZW50X2V2bWNzLVxcdTAwM2Vodl9jbGVhbl9maWVsZHMgPSAwO1xcbiBcXG4tXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcInB1c2ggJSVyYnA7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcmN4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJkeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyc2k7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcmRpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAkMDtcXFwiXFxuK1xcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJwdXNoICQwO1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwibW92ICUlcnNwLCAoJVtob3N0X3JzcF0pO1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwibGVhIDFmKCUlcmlwKSwgJSVyYXg7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJtb3YgJSVyYXgsICglW2hvc3RfcmlwXSk7XFxcIlxcbitcXHRcXHRcXHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cXG4gXFx0XFx0XFx0ICAgICBcXFwidm1sYXVuY2g7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJpbmNxICglJXJzcCk7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCIxOiBwb3AgJSVyYXg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyZGk7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyc2k7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyZHg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyY3g7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyYnA7XFxcIlxcbitcXHRcXHRcXHQgICAgIFxcXCIxOiA7XFxcIlxcbitcXHRcXHRcXHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cXG4rXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmF4O1xcXCJcXG4gXFx0XFx0XFx0ICAgICA6IFtyZXRdXFxcIj1cXHUwMDI2YVxcXCIocmV0KVxcbiBcXHRcXHRcXHQgICAgIDogW2hvc3RfcnNwXVxcXCJyXFxcIlxcbiBcXHRcXHRcXHQgICAgICAgKCh1NjQpXFx1MDAyNmN1cnJlbnRfZXZtY3MtXFx1MDAzZWhvc3RfcnNwKSxcXG4gXFx0XFx0XFx0ICAgICAgIFtob3N0X3JpcF1cXFwiclxcXCJcXG4tXFx0XFx0XFx0ICAgICAgICgodTY0KVxcdTAwMjZjdXJyZW50X2V2bWNzLVxcdTAwM2Vob3N0X3JpcClcXG4tXFx0XFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiLCBcXFwiY2NcXFwiLCBcXFwicmJ4XFxcIiwgXFxcInI4XFxcIiwgXFxcInI5XFxcIiwgXFxcInIxMFxcXCIsXFxuLVxcdFxcdFxcdCAgICAgICBcXFwicjExXFxcIiwgXFxcInIxMlxcXCIsIFxcXCJyMTNcXFwiLCBcXFwicjE0XFxcIiwgXFxcInIxNVxcXCIpO1xcbitcXHRcXHRcXHQgICAgICAgKCh1NjQpXFx1MDAyNmN1cnJlbnRfZXZtY3MtXFx1MDAzZWhvc3RfcmlwKSxcXG4rXFx0XFx0XFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xcbitcXHRcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIsIFxcXCJjY1xcXCIpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbkBAIC0xMjQ2LDMwICsxMjM5LDIzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtcmVzdW1lKHZvaWQpXFxuIFxcdC8qIEhPU1RfUlNQICovXFxuIFxcdGN1cnJlbnRfZXZtY3MtXFx1MDAzZWh2X2NsZWFuX2ZpZWxkcyBcXHUwMDI2PSB+SFZfVk1YX0VOTElHSFRFTkVEX0NMRUFOX0ZJRUxEX0hPU1RfUE9JTlRFUjtcXG4gXFxuLVxcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJwdXNoICUlcmJwO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJjeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyZHg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcnNpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJkaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJDA7XFxcIlxcbitcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwicHVzaCAkMDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcIm1vdiAlJXJzcCwgKCVbaG9zdF9yc3BdKTtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcImxlYSAxZiglJXJpcCksICUlcmF4O1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwibW92ICUlcmF4LCAoJVtob3N0X3JpcF0pO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuIFxcdFxcdFxcdCAgICAgXFxcInZtcmVzdW1lO1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwiaW5jcSAoJSVyc3ApO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwiMTogcG9wICUlcmF4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmRpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcnNpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmR4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmN4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmJwO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBcXFwiMTogO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuK1xcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJheDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgOiBbcmV0XVxcXCI9XFx1MDAyNmFcXFwiKHJldClcXG4gXFx0XFx0XFx0ICAgICA6IFtob3N0X3JzcF1cXFwiclxcXCJcXG4gXFx0XFx0XFx0ICAgICAgICgodTY0KVxcdTAwMjZjdXJyZW50X2V2bWNzLVxcdTAwM2Vob3N0X3JzcCksXFxuIFxcdFxcdFxcdCAgICAgICBbaG9zdF9yaXBdXFxcInJcXFwiXFxuLVxcdFxcdFxcdCAgICAgICAoKHU2NClcXHUwMDI2Y3VycmVudF9ldm1jcy1cXHUwMDNlaG9zdF9yaXApXFxuLVxcdFxcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIiwgXFxcInJieFxcXCIsIFxcXCJyOFxcXCIsIFxcXCJyOVxcXCIsIFxcXCJyMTBcXFwiLFxcbi1cXHRcXHRcXHQgICAgICAgXFxcInIxMVxcXCIsIFxcXCJyMTJcXFwiLCBcXFwicjEzXFxcIiwgXFxcInIxNFxcXCIsIFxcXCJyMTVcXFwiKTtcXG4rXFx0XFx0XFx0ICAgICAgICgodTY0KVxcdTAwMjZjdXJyZW50X2V2bWNzLVxcdTAwM2Vob3N0X3JpcCksXFxuK1xcdFxcdFxcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcXG4rXFx0XFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiLCBcXFwiY2NcXFwiKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXFxuaW5kZXggYjE2MTE3NGVjZTQ1My4uNDYxYzhhZWY3ZDM3YiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcXG5AQCAtMjQsNiArMjQsNyBAQCBleHRlcm4gYm9vbCBob3N0X2NwdV9pc19hbWQ7XFxuIGV4dGVybiBib29sIGhvc3RfY3B1X2lzX2h5Z29uO1xcbiBleHRlcm4gYm9vbCBob3N0X2NwdV9pc19hbWRfY29tcGF0aWJsZTtcXG4gZXh0ZXJuIHU2NCBndWVzdF90c2Nfa2h6O1xcbitleHRlcm4gc3RydWN0IGt2bV9tbXUgZ3Vlc3RfbW11O1xcbiBcXG4gI2lmbmRlZiBNQVhfTlJfQ1BVSURfRU5UUklFU1xcbiAjZGVmaW5lIE1BWF9OUl9DUFVJRF9FTlRSSUVTIDEwMFxcbkBAIC0zOTgsOCArMzk5LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgeDg2X21vZGVsKHVuc2lnbmVkIGludCBlYXgpXFxuICNkZWZpbmUgUFRFX0dFVF9QQShwdGUpXFx0XFx0KChwdGUpIFxcdTAwMjYgUEhZU0lDQUxfUEFHRV9NQVNLKVxcbiAjZGVmaW5lIFBURV9HRVRfUEZOKHB0ZSkgICAgICAgIChQVEVfR0VUX1BBKHB0ZSkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVClcXG4gXFxuLS8qIEdlbmVyYWwgUmVnaXN0ZXJzIGluIDY0LUJpdCBNb2RlICovXFxuLXN0cnVjdCBncHI2NF9yZWdzIHtcXG4rc3RydWN0IGd1ZXN0X3JlZ3Mge1xcbiBcXHR1NjQgcmF4O1xcbiBcXHR1NjQgcmN4O1xcbiBcXHR1NjQgcmR4O1xcbkBAIC00MTYsOCArNDE2LDM4IEBAIHN0cnVjdCBncHI2NF9yZWdzIHtcXG4gXFx0dTY0IHIxMztcXG4gXFx0dTY0IHIxNDtcXG4gXFx0dTY0IHIxNTtcXG4rXFx0dTY0IHJmbGFncztcXG4gfTtcXG4gXFxuK2V4dGVybiBzdHJ1Y3QgZ3Vlc3RfcmVncyBndWVzdF9yZWdzO1xcbitcXG4rI2RlZmluZSBHVUVTVF9SRUdfT0ZGU0VUKG5hbWUpIFxcXFxcXG4rXFx0W29mZl8jI25hbWVdIFxcXCJpXFxcIiAob2Zmc2V0b2Yoc3RydWN0IGd1ZXN0X3JlZ3MsIG5hbWUpKVxcbitcXG4rI2RlZmluZSBHVUVTVF9SRUdTX09GRlNFVFNcXHRcXFxcXFxuK1xcdEdVRVNUX1JFR19PRkZTRVQocmF4KSxcXHRcXFxcXFxuK1xcdEdVRVNUX1JFR19PRkZTRVQocmN4KSxcXHRcXFxcXFxuK1xcdEdVRVNUX1JFR19PRkZTRVQocmR4KSxcXHRcXFxcXFxuK1xcdEdVRVNUX1JFR19PRkZTRVQocmJ4KSxcXHRcXFxcXFxuK1xcdEdVRVNUX1JFR19PRkZTRVQocnNwKSxcXHRcXFxcXFxuK1xcdEdVRVNUX1JFR19PRkZTRVQocmJwKSxcXHRcXFxcXFxuK1xcdEdVRVNUX1JFR19PRkZTRVQocnNpKSxcXHRcXFxcXFxuK1xcdEdVRVNUX1JFR19PRkZTRVQocmRpKSxcXHRcXFxcXFxuK1xcdEdVRVNUX1JFR19PRkZTRVQocjgpLFxcdFxcXFxcXG4rXFx0R1VFU1RfUkVHX09GRlNFVChyOSksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHIxMCksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHIxMSksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHIxMiksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHIxMyksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHIxNCksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHIxNSksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHJmbGFncylcXG4rXFxuKyNkZWZpbmUgR1VFU1RfUkVHKG5hbWUpIFxcXCJndWVzdF9yZWdzICsgJWNbb2ZmX1xcXCIgI25hbWUgXFxcIl1cXFwiXFxuK1xcbisjZGVmaW5lIEdVRVNUX1NXSVRDSF9HUFJfQVNNKG5hbWUpIFxcXFxcXG4rXFx0XFxcInhjaGcgJSVcXFwiICNuYW1lIFxcXCIsIFxcXCIgR1VFU1RfUkVHKG5hbWUpIFxcXCJcXFxcblxcXFx0XFxcIlxcbitcXG4gc3RydWN0IGRlc2M2NCB7XFxuIFxcdHUxNiBsaW1pdDA7XFxuIFxcdHUxNiBiYXNlMDtcXG5AQCAtNTg0LDYgKzYxNCwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2NyMCh1NjQgdmFsKVxcbiBcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwibW92ICUwLCAlJWNyMFxcXCIgOiA6IFxcXCJyXFxcIiAodmFsKSA6IFxcXCJtZW1vcnlcXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB1NjQgZ2V0X2NyMih2b2lkKVxcbit7XFxuK1xcdHU2NCBjcjI7XFxuK1xcbitcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwibW92ICUlY3IyLCAlW2NyMl1cXFwiXFxuK1xcdFxcdFxcdCAgICAgOiAvKiBvdXRwdXQgKi8gW2NyMl1cXFwiPXJcXFwiKGNyMikpO1xcbitcXHRyZXR1cm4gY3IyO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHU2NCBnZXRfY3IzKHZvaWQpXFxuIHtcXG4gXFx0dTY0IGNyMztcXG5AQCAtODc5LDYgKzkxOCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfc3NlX3JlZyhpbnQgcmVnLCBjb25zdCBzc2UxMjhfdCAqZGF0YSlcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgaW52bHBnKHU2NCBhZGRyKVxcbit7XFxuK1xcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJpbnZscGcgKCUwKVxcXCIgOiA6IFxcXCJyXFxcIihhZGRyKSA6IFxcXCJtZW1vcnlcXFwiKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIGNwdV9yZWxheCh2b2lkKVxcbiB7XFxuIFxcdGFzbSB2b2xhdGlsZShcXFwicmVwOyBub3BcXFwiIDo6OiBcXFwibWVtb3J5XFxcIik7XFxuQEAgLTkxNSw2ICs5NTksMTEgQEAgc3RydWN0IGt2bV94ODZfc3RhdGUgKnZjcHVfc2F2ZV9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB2b2lkIHZjcHVfbG9hZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSk7XFxuIHZvaWQga3ZtX3g4Nl9zdGF0ZV9jbGVhbnVwKHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSk7XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3g4Nl9zdGF0ZV9pc19ndWVzdF9tb2RlKHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSlcXG4re1xcbitcXHRyZXR1cm4gc3RhdGUtXFx1MDAzZW5lc3RlZC5zaXplIFxcdTAwMjZcXHUwMDI2IChzdGF0ZS1cXHUwMDNlbmVzdGVkLmZsYWdzIFxcdTAwMjYgS1ZNX1NUQVRFX05FU1RFRF9HVUVTVF9NT0RFKTtcXG4rfVxcbitcXG4gY29uc3Qgc3RydWN0IGt2bV9tc3JfbGlzdCAqa3ZtX2dldF9tc3JfaW5kZXhfbGlzdCh2b2lkKTtcXG4gY29uc3Qgc3RydWN0IGt2bV9tc3JfbGlzdCAqa3ZtX2dldF9mZWF0dXJlX21zcl9pbmRleF9saXN0KHZvaWQpO1xcbiBib29sIGt2bV9tc3JfaXNfaW5fc2F2ZV9yZXN0b3JlX2xpc3QodTMyIG1zcl9pbmRleCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxcbmluZGV4IDRiY2ZkNjBlM2FlY2IuLjA0ZjVlMzRkZWEzYWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXFxuQEAgLTI5MCw2ICsyOTAsMjMgQEAgc3RydWN0IHZteF9tc3JfZW50cnkge1xcbiBcXHR1NjQgdmFsdWU7XFxuIH0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMTYpKSk7XFxuIFxcbisjZGVmaW5lIFZNWF9TV0lUQ0hfR1BSU19BU00gXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYXgpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJ4KSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJjeCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZHgpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJwKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJzaSkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZGkpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjgpICBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI5KSAgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTApIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjExKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMikgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTMpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE0KSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNSlcXG4rXFxuICNpbmNsdWRlIFxcXCJldm1jcy5oXFxcIlxcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgdm14b24odTY0IHBoeXMpXFxuQEAgLTM2Myw5ICszODAsNiBAQCBzdGF0aWMgaW5saW5lIHU2NCB2bXB0cnN0eih2b2lkKVxcbiBcXHRyZXR1cm4gdmFsdWU7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIE5vIGd1ZXN0IHN0YXRlIChlLmcuIEdQUnMpIGlzIGVzdGFibGlzaGVkIGJ5IHRoaXMgdm1sYXVuY2guXFxuLSAqL1xcbiBzdGF0aWMgaW5saW5lIGludCB2bWxhdW5jaCh2b2lkKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuQEAgLTM3MywzNCArMzg3LDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpXFxuIFxcdGlmIChlbmFibGVfZXZtY3MpXFxuIFxcdFxcdHJldHVybiBldm1jc192bWxhdW5jaCgpO1xcbiBcXG4tXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcInB1c2ggJSVyYnA7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcmN4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJkeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyc2k7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcmRpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAkMDtcXFwiXFxuK1xcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJwdXNoICQwO1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwidm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcInZtd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuIFxcdFxcdFxcdCAgICAgXFxcInZtbGF1bmNoO1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwiaW5jcSAoJSVyc3ApO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwiMTogcG9wICUlcmF4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmRpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcnNpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmR4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmN4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmJwO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBcXFwiMTogO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuK1xcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJheDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgOiBbcmV0XVxcXCI9XFx1MDAyNmFcXFwiKHJldClcXG4gXFx0XFx0XFx0ICAgICA6IFtob3N0X3JzcF1cXFwiclxcXCIoKHU2NClIT1NUX1JTUCksXFxuLVxcdFxcdFxcdCAgICAgICBbaG9zdF9yaXBdXFxcInJcXFwiKCh1NjQpSE9TVF9SSVApXFxuLVxcdFxcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIiwgXFxcInJieFxcXCIsIFxcXCJyOFxcXCIsIFxcXCJyOVxcXCIsIFxcXCJyMTBcXFwiLFxcbi1cXHRcXHRcXHQgICAgICAgXFxcInIxMVxcXCIsIFxcXCJyMTJcXFwiLCBcXFwicjEzXFxcIiwgXFxcInIxNFxcXCIsIFxcXCJyMTVcXFwiKTtcXG4rXFx0XFx0XFx0ICAgICAgIFtob3N0X3JpcF1cXFwiclxcXCIoKHU2NClIT1NUX1JJUCksXFxuK1xcdFxcdFxcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcXG4rXFx0XFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiLCBcXFwiY2NcXFwiKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tLypcXG4tICogTm8gZ3Vlc3Qgc3RhdGUgKGUuZy4gR1BScykgaXMgZXN0YWJsaXNoZWQgYnkgdGhpcyB2bXJlc3VtZS5cXG4tICovXFxuIHN0YXRpYyBpbmxpbmUgaW50IHZtcmVzdW1lKHZvaWQpXFxuIHtcXG4gXFx0aW50IHJldDtcXG5AQCAtNDA4LDI4ICs0MTIsMjEgQEAgc3RhdGljIGlubGluZSBpbnQgdm1yZXN1bWUodm9pZClcXG4gXFx0aWYgKGVuYWJsZV9ldm1jcylcXG4gXFx0XFx0cmV0dXJuIGV2bWNzX3ZtcmVzdW1lKCk7XFxuIFxcbi1cXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwicHVzaCAlJXJicDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyY3g7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcmR4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJzaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyZGk7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICQwO1xcXCJcXG4rXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcInB1c2ggJDA7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJ2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcImxlYSAxZiglJXJpcCksICUlcmF4O1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwidm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07XFxcIlxcbitcXHRcXHRcXHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cXG4gXFx0XFx0XFx0ICAgICBcXFwidm1yZXN1bWU7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJpbmNxICglJXJzcCk7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCIxOiBwb3AgJSVyYXg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyZGk7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyc2k7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyZHg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyY3g7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyYnA7XFxcIlxcbitcXHRcXHRcXHQgICAgIFxcXCIxOiA7XFxcIlxcbitcXHRcXHRcXHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cXG4rXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmF4O1xcXCJcXG4gXFx0XFx0XFx0ICAgICA6IFtyZXRdXFxcIj1cXHUwMDI2YVxcXCIocmV0KVxcbiBcXHRcXHRcXHQgICAgIDogW2hvc3RfcnNwXVxcXCJyXFxcIigodTY0KUhPU1RfUlNQKSxcXG4tXFx0XFx0XFx0ICAgICAgIFtob3N0X3JpcF1cXFwiclxcXCIoKHU2NClIT1NUX1JJUClcXG4tXFx0XFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiLCBcXFwiY2NcXFwiLCBcXFwicmJ4XFxcIiwgXFxcInI4XFxcIiwgXFxcInI5XFxcIiwgXFxcInIxMFxcXCIsXFxuLVxcdFxcdFxcdCAgICAgICBcXFwicjExXFxcIiwgXFxcInIxMlxcXCIsIFxcXCJyMTNcXFwiLCBcXFwicjE0XFxcIiwgXFxcInIxNVxcXCIpO1xcbitcXHRcXHRcXHQgICAgICAgW2hvc3RfcmlwXVxcXCJyXFxcIigodTY0KUhPU1RfUklQKSxcXG4rXFx0XFx0XFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xcbitcXHRcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIsIFxcXCJjY1xcXCIpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuY1xcbmluZGV4IDFkNzJkY2RmY2UzYjYuLjNlMzUzYWMzOWVlYjcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNcXG5AQCAtNzQsNyArNzQsNyBAQCB0ZXN0X2Fzc2VydChib29sIGV4cCwgY29uc3QgY2hhciAqZXhwX3N0cixcXG4gXFx0aWYgKCEoZXhwKSkge1xcbiBcXHRcXHR2YV9zdGFydChhcCwgZm10KTtcXG4gXFxuLVxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiPT09PSBUZXN0IEFzc2VydGlvbiBGYWlsdXJlID09PT1cXFxcblxcXCJcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJcXFxcbj09PT0gVGVzdCBBc3NlcnRpb24gRmFpbHVyZSA9PT09XFxcXG5cXFwiXFxuIFxcdFxcdFxcdFxcXCIgICVzOiV1OiAlc1xcXFxuXFxcIlxcbiBcXHRcXHRcXHRcXFwiICBwaWQ9JWQgdGlkPSVkIGVycm5vPSVkIC0gJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdGZpbGUsIGxpbmUsIGV4cF9zdHIsIGdldHBpZCgpLCBrdm1fZ2V0dGlkKCksXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcXG5pbmRleCBlZjU2ZGNlZmUwMTE5Li5kMzFmYTgxZWEwNzU2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcXG5AQCAtMjgsNiArMjgsOSBAQCBib29sIGhvc3RfY3B1X2lzX2h5Z29uO1xcbiBib29sIGhvc3RfY3B1X2lzX2FtZF9jb21wYXRpYmxlO1xcbiBib29sIGlzX2ZvcmNlZF9lbXVsYXRpb25fZW5hYmxlZDtcXG4gdTY0IGd1ZXN0X3RzY19raHo7XFxuK3N0cnVjdCBrdm1fbW11IGd1ZXN0X21tdTtcXG4rXFxuK3N0cnVjdCBndWVzdF9yZWdzIGd1ZXN0X3JlZ3M7XFxuIFxcbiBjb25zdCBjaGFyICpleF9zdHIoaW50IHZlY3RvcilcXG4ge1xcbkBAIC04MjksNiArODMyLDE3IEBAIHZvaWQga3ZtX2FyY2hfdm1fcG9zdF9jcmVhdGUoc3RydWN0IGt2bV92bSAqdm0sIHVuc2lnbmVkIGludCBucl92Y3B1cylcXG4gXFx0VEVTVF9BU1NFUlQociBcXHUwMDNlIDAsIFxcXCJLVk1fR0VUX1RTQ19LSFogZGlkIG5vdCBwcm92aWRlIGEgdmFsaWQgVFNDIGZyZXF1ZW5jeS5cXFwiKTtcXG4gXFx0Z3Vlc3RfdHNjX2toeiA9IHI7XFxuIFxcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBndWVzdF90c2Nfa2h6KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBndWVzdCBNTVUgaXMganVzdCBhIHBsYWNlaG9sZGVyIHRvIHByb3ZpZGUgYWNjZXNzIHRvIFBURSBtYXNrc1xcbitcXHQgKiAoZm9yIG5vdykuIFRoZSBndWVzdCBkb2VzIG5vdCBoYXZlIG1hcHBpbmdzIGZvciBpdHMgb3duIHBhZ2UgdGFibGVzXFxuK1xcdCAqIGJ5IGRlZmF1bHQsIHNvIGFueSBtZWFuaW5nZnVsIHVzZSBvZiBndWVzdCBwYWdlIHRhYmxlcyByZXF1aXJlc1xcbitcXHQgKiBleHBsaWNpdCBzZXR1cCBieSB0aGUgdGVzdC4gWmVybyB0aGUgUEdEIHRvIG1ha2UgaXQgb2J2aW91cyB0aGUgZ3Vlc3RcXG4rXFx0ICogcGFnZSB0YWJsZXMgYXJlIG5vdCBpbW1lZGlhdGVseSB1c2FibGUgYnkgZ3Vlc3QgY29kZS5cXG4rXFx0ICovXFxuK1xcdGd1ZXN0X21tdSA9IHZtLVxcdTAwM2VtbXU7XFxuK1xcdGd1ZXN0X21tdS5wZ2QgPSAwO1xcbitcXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgZ3Vlc3RfbW11KTtcXG4gfVxcbiBcXG4gdm9pZCB2Y3B1X2FyY2hfc2V0X2VudHJ5X3BvaW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqZ3Vlc3RfY29kZSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uY1xcbmluZGV4IDE0NDViODkwOTg2ZmQuLmIwNWJlNTBmMDc1ZDYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uY1xcbkBAIC0xMyw5ICsxMyw2IEBAXFxuIFxcbiAjZGVmaW5lIFNFVl9ERVZfUEFUSCBcXFwiL2Rldi9zZXZcXFwiXFxuIFxcbi1zdHJ1Y3QgZ3ByNjRfcmVncyBndWVzdF9yZWdzO1xcbi11NjQgcmZsYWdzO1xcbi1cXG4gLyogQWxsb2NhdGUgbWVtb3J5IHJlZ2lvbnMgZm9yIG5lc3RlZCBTVk0gdGVzdHMuXFxuICAqXFxuICAqIElucHV0IEFyZ3M6XFxuQEAgLTEzNyw0NiArMTM0LDQ3IEBAIHZvaWQgZ2VuZXJpY19zdm1fc2V0dXAoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSwgdm9pZCAqZ3Vlc3RfcmlwKVxcbiAgKiBzYXZlL3Jlc3RvcmUgNjQtYml0IGdlbmVyYWwgcmVnaXN0ZXJzIGV4Y2VwdCByYXgsIHJpcCwgcnNwXFxuICAqIHdoaWNoIGFyZSBkaXJlY3RseSBoYW5kZWQgdGhyb3VnaCB0aGUgVk1DQiBndWVzdCBwcm9jZXNzb3Igc3RhdGVcXG4gICovXFxuLSNkZWZpbmUgU0FWRV9HUFJfQ1xcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyYngsIGd1ZXN0X3JlZ3MrMHgyMFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXJjeCwgZ3Vlc3RfcmVncysweDEwXFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcmR4LCBndWVzdF9yZWdzKzB4MThcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyYnAsIGd1ZXN0X3JlZ3MrMHgzMFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXJzaSwgZ3Vlc3RfcmVncysweDM4XFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcmRpLCBndWVzdF9yZWdzKzB4NDBcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyOCwgIGd1ZXN0X3JlZ3MrMHg0OFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXI5LCAgZ3Vlc3RfcmVncysweDUwXFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcjEwLCBndWVzdF9yZWdzKzB4NThcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyMTEsIGd1ZXN0X3JlZ3MrMHg2MFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXIxMiwgZ3Vlc3RfcmVncysweDY4XFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcjEzLCBndWVzdF9yZWdzKzB4NzBcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyMTQsIGd1ZXN0X3JlZ3MrMHg3OFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXIxNSwgZ3Vlc3RfcmVncysweDgwXFxcXG5cXFxcdFxcXCJcXG4tXFxuLSNkZWZpbmUgTE9BRF9HUFJfQyAgICAgIFNBVkVfR1BSX0NcXG4rI2RlZmluZSBTVk1fU1dJVENIX0dQUlNfQVNNIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJ4KSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJjeCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZHgpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJwKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJzaSkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZGkpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjgpICBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI5KSAgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTApIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjExKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMikgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTMpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE0KSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNSlcXG4gXFxuIC8qXFxuICAqIHNlbGZ0ZXN0cyBkbyBub3QgdXNlIGludGVycnVwdHMgc28gd2UgZHJvcHBlZCBjbGdpL3N0aS9jbGkvc3RnaVxcbi0gKiBmb3Igbm93LiByZWdpc3RlcnMgaW52b2x2ZWQgaW4gTE9BRC9TQVZFX0dQUl9DIGFyZSBldmVudHVhbGx5XFxuKyAqIGZvciBub3cuIFJlZ2lzdGVycyBpbnZvbHZlZCBpbiBTVk1fU1dJVENIX0dQUlNfQVNNIGFyZSBldmVudHVhbGx5XFxuICAqIHVubW9kaWZpZWQgc28gdGhleSBkbyBub3QgbmVlZCB0byBiZSBpbiB0aGUgY2xvYmJlciBsaXN0LlxcbiAgKi9cXG4gdm9pZCBydW5fZ3Vlc3Qoc3RydWN0IHZtY2IgKnZtY2IsIHU2NCB2bWNiX2dwYSlcXG4ge1xcbiBcXHRhc20gdm9sYXRpbGUgKFxcbiBcXHRcXHRcXFwidm1sb2FkICVbdm1jYl9ncGFdXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0XFxcIm1vdiByZmxhZ3MsICUlcjE1XFxcXG5cXFxcdFxcXCJcXHQvLyByZmxhZ3NcXG4tXFx0XFx0XFxcIm1vdiAlJXIxNSwgMHgxNzAoJVt2bWNiXSlcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHRcXFwibW92IGd1ZXN0X3JlZ3MsICUlcjE1XFxcXG5cXFxcdFxcXCJcXHQvLyByYXhcXG4tXFx0XFx0XFxcIm1vdiAlJXIxNSwgMHgxZjgoJVt2bWNiXSlcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHRMT0FEX0dQUl9DXFxuK1xcdFxcdFxcXCJtb3YgXFxcIiBHVUVTVF9SRUcocmZsYWdzKSBcXFwiLCAlJXIxNVxcXFxuXFxcXHRcXFwiXFxuK1xcdFxcdFxcXCJtb3YgJSVyMTUsICVbdm1jYl9yZmxhZ3NdXFxcXG5cXFxcdFxcXCJcXG4rXFx0XFx0XFxcIm1vdiBcXFwiIEdVRVNUX1JFRyhyYXgpIFxcXCIsICUlcjE1XFxcXG5cXFxcdFxcXCJcXG4rXFx0XFx0XFxcIm1vdiAlJXIxNSwgJVt2bWNiX3JheF1cXFxcblxcXFx0XFxcIlxcbitcXHRcXHRTVk1fU1dJVENIX0dQUlNfQVNNXFxuIFxcdFxcdFxcXCJ2bXJ1biAlW3ZtY2JfZ3BhXVxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdFNBVkVfR1BSX0NcXG4tXFx0XFx0XFxcIm1vdiAweDE3MCglW3ZtY2JdKSwgJSVyMTVcXFxcblxcXFx0XFxcIlxcdC8vIHJmbGFnc1xcbi1cXHRcXHRcXFwibW92ICUlcjE1LCByZmxhZ3NcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHRcXFwibW92IDB4MWY4KCVbdm1jYl0pLCAlJXIxNVxcXFxuXFxcXHRcXFwiXFx0Ly8gcmF4XFxuLVxcdFxcdFxcXCJtb3YgJSVyMTUsIGd1ZXN0X3JlZ3NcXFxcblxcXFx0XFxcIlxcbitcXHRcXHRTVk1fU1dJVENIX0dQUlNfQVNNXFxuK1xcdFxcdFxcXCJtb3YgJVt2bWNiX3JmbGFnc10sICUlcjE1XFxcXG5cXFxcdFxcXCJcXG4rXFx0XFx0XFxcIm1vdiAlJXIxNSwgXFxcIiBHVUVTVF9SRUcocmZsYWdzKSBcXFwiXFxcXG5cXFxcdFxcXCJcXG4rXFx0XFx0XFxcIm1vdiAlW3ZtY2JfcmF4XSwgJSVyMTVcXFxcblxcXFx0XFxcIlxcdC8vIHJheFxcbitcXHRcXHRcXFwibW92ICUlcjE1LCBcXFwiIEdVRVNUX1JFRyhyYXgpIFxcXCJcXFxcblxcXFx0XFxcIlxcbiBcXHRcXHRcXFwidm1zYXZlICVbdm1jYl9ncGFdXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0OiA6IFt2bWNiXSBcXFwiclxcXCIgKHZtY2IpLCBbdm1jYl9ncGFdIFxcXCJhXFxcIiAodm1jYl9ncGEpXFxuK1xcdFxcdDogW3ZtY2JfcmZsYWdzXSBcXFwiK21cXFwiICh2bWNiLVxcdTAwM2VzYXZlLnJmbGFncyksXFxuK1xcdFxcdCAgW3ZtY2JfcmF4XSBcXFwiK21cXFwiICh2bWNiLVxcdTAwM2VzYXZlLnJheClcXG4rXFx0XFx0OiBbdm1jYl9ncGFdIFxcXCJhXFxcIiAodm1jYl9ncGEpLFxcbitcXHRcXHQgIEdVRVNUX1JFR1NfT0ZGU0VUU1xcbiBcXHRcXHQ6IFxcXCJyMTVcXFwiLCBcXFwibWVtb3J5XFxcIik7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jXFxuaW5kZXggZTdkZDU3OTE5NTliYS4uMzgwNTBjNjBhMDY3MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuY1xcbkBAIC0xMCwzNiArMTAsOCBAQFxcbiBcXG4gdm9pZCB1Y2FsbF9hcmNoX2RvX3VjYWxsKGd2YV90IHVjKVxcbiB7XFxuLVxcdC8qXFxuLVxcdCAqIEZJWE1FOiBSZXZlcnQgdGhpcyBoYWNrICh0aGUgZW50aXJlIGNvbW1pdCB0aGF0IGFkZGVkIGl0KSBvbmNlIG5WTVhcXG4tXFx0ICogcHJlc2VydmVzIEwyIEdQUnMgYWNyb3NzIGEgbmVzdGVkIFZNLUV4aXQuICBJZiBhIHVjYWxsIGZyb20gTDIsIGUuZy5cXG4tXFx0ICogdG8gZG8gYSBHVUVTVF9TWU5DKCksIGxhbmRzIHRoZSB2Q1BVIGluIEwxLCBhbnkgYW5kIGFsbCBHUFJzIGNhbiBiZVxcbi1cXHQgKiBjbG9iYmVyZWQgYnkgTDEuICBTYXZlIGFuZCByZXN0b3JlIG5vbi12b2xhdGlsZSBHUFJzIChjbG9iYmVyaW5nIFJCUFxcbi1cXHQgKiBpbiBwYXJ0aWN1bGFyIGlzIHByb2JsZW1hdGljKSBhbG9uZyB3aXRoIFJEWCBhbmQgUkRJICh3aGljaCBhcmVcXG4tXFx0ICogaW5wdXRzKSwgYW5kIGNsb2JiZXIgdm9sYXRpbGUgR1BScy4gKnNpZ2gqXFxuLVxcdCAqL1xcbi0jZGVmaW5lIEhPUlJJRklDX0wyX1VDQUxMX0NMT0JCRVJfSEFDS1xcdFxcXFxcXG4tXFx0XFxcInJjeFxcXCIsIFxcXCJyc2lcXFwiLCBcXFwicjhcXFwiLCBcXFwicjlcXFwiLCBcXFwicjEwXFxcIiwgXFxcInIxMVxcXCJcXG4tXFxuLVxcdGFzbSB2b2xhdGlsZShcXFwicHVzaCAlJXJicFxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInB1c2ggJSVyMTVcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwdXNoICUlcjE0XFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicHVzaCAlJXIxM1xcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInB1c2ggJSVyMTJcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwdXNoICUlcmJ4XFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicHVzaCAlJXJkeFxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInB1c2ggJSVyZGlcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJpbiAlW3BvcnRdLCAlJWFsXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicG9wICUlcmRpXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicG9wICUlcmR4XFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicG9wICUlcmJ4XFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicG9wICUlcjEyXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicG9wICUlcjEzXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicG9wICUlcjE0XFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicG9wICUlcjE1XFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicG9wICUlcmJwXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0OiA6IFtwb3J0XSBcXFwiZFxcXCIgKFVDQUxMX1BJT19QT1JUKSwgXFxcIkRcXFwiICh1YykgOiBcXFwicmF4XFxcIiwgXFxcIm1lbW9yeVxcXCIsXFxuLVxcdFxcdCAgICAgSE9SUklGSUNfTDJfVUNBTExfQ0xPQkJFUl9IQUNLKTtcXG4rXFx0YXNtIHZvbGF0aWxlKFxcXCJpbiAlW3BvcnRdLCAlJWFsXFxcIlxcbitcXHRcXHQ6IDogW3BvcnRdIFxcXCJkXFxcIiAoVUNBTExfUElPX1BPUlQpLCBcXFwiRFxcXCIgKHVjKSA6IFxcXCJyYXhcXFwiLCBcXFwibWVtb3J5XFxcIik7XFxuIH1cXG4gXFxuIHZvaWQgKnVjYWxsX2FyY2hfZ2V0X3VjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jXFxuaW5kZXggNzdjZTg3YzQxYTg2OC4uYWE3ZjNiNDA1ZmQzMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcXG5AQCAtMjIsOSArMjIsNiBAQFxcbiBcXG4gI2RlZmluZSBTWU5DX1BPUlRcXHQweGVcXG4gXFxuLSNkZWZpbmUgU1RSKHgpICN4XFxuLSNkZWZpbmUgWFNUUihzKSBTVFIocylcXG4tXFxuIC8qXFxuICAqIFNNSSBoYW5kbGVyOiBydW5zIGluIHJlYWwtYWRkcmVzcyBtb2RlLlxcbiAgKiBSZXBvcnRzIFNNUkFNX1NUQUdFIHZpYSBwb3J0IElPLCB0aGVuIGRvZXMgUlNNLlxcbkBAIC0zNyw3ICszNCw3IEBAIHN0YXRpYyB1OCBzbWlfaGFuZGxlcltdID0ge1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHN5bmNfd2l0aF9ob3N0KHU2NCBwaGFzZSlcXG4ge1xcbi1cXHRhc20gdm9sYXRpbGUoXFxcImluICRcXFwiIFhTVFIoU1lOQ19QT1JUKSBcXFwiLCAlJWFsIFxcXFxuXFxcIlxcbitcXHRhc20gdm9sYXRpbGUoXFxcImluICRcXFwiIF9fc3RyaW5naWZ5KFNZTkNfUE9SVCkgXFxcIiwgJSVhbCBcXFxcblxcXCJcXG4gXFx0XFx0ICAgICA6IFxcXCIrYVxcXCIgKHBoYXNlKSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZml4X2h5cGVyY2FsbF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jXFxuaW5kZXggNzUzYTBlNzMwZWE4ZC4uNDkzMWVjMjI3NjhlZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9maXhfaHlwZXJjYWxsX3Rlc3QuY1xcbkBAIC02LDcgKzYsNiBAQFxcbiAgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fcGFyYS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX3BhcmEuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3RkaW50LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwia3ZtX3Rlc3RfaGFybmVzcy5oXFxcIlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYmExZDcyMzAwMWU5NFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jXFxuQEAgLTAsMCArMSwyOTEgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NwdGhyZWFkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzaWduYWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZ2V0b3B0LmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwidGVzdF91dGlsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrdm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwicHJvY2Vzc29yLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzdm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwidm14LmhcXFwiXFxuK1xcbisjZGVmaW5lIE5SX0lURVJBVElPTlNcXHRcXHQ1MDBcXG4rXFxuKyNkZWZpbmUgUFRSU19QRVJfUFRFXFx0XFx0NTEyXFxuKyNkZWZpbmUgUFhEX0lOREVYKHZhZGRyLCBsZXZlbClcXHQoKCh2YWRkcikgXFx1MDAzZVxcdTAwM2UgUEdfTEVWRUxfU0hJRlQobGV2ZWwpKSBcXHUwMDI2IChQVFJTX1BFUl9QVEUgLSAxKSlcXG4rXFxuKyNkZWZpbmUgVEVTVF9NRU1fQkFTRV9HVkFcXHQweGMwMDAwMDAwVUxMXFxuKyNkZWZpbmUgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVRcXHQweGQwMDAwMDAwVUxMXFxuKyNkZWZpbmUgUEFUVEVSTlxcdFxcdFxcdDB4YWJjZGVmYWJjZGVmYWJjZFVMTFxcbitcXG4rc3RhdGljIHU2NCBleHBlY3RlZF92YWRkcjtcXG4rc3RhdGljIHU2NCBndWVzdF9mYXVsdHM7XFxuK1xcbitzdGF0aWMgdTY0ICpndWVzdF9nZXRfcHRlKHU2NCB2YWRkcilcXG4re1xcbitcXHR1NjQgcGd0YWJsZV9wYSwgcHRlO1xcbitcXHR1NjQgKnBndGFibGU7XFxuK1xcdGludCBsZXZlbDtcXG4rXFxuK1xcdGxldmVsID0gKGdldF9jcjQoKSBcXHUwMDI2IFg4Nl9DUjRfTEE1NykgPyBQR19MRVZFTF8yNTZUIDogUEdfTEVWRUxfNTEyRztcXG4rXFxuK1xcdHBndGFibGVfcGEgPSBnZXRfY3IzKCkgXFx1MDAyNiBQSFlTSUNBTF9QQUdFX01BU0s7XFxuK1xcdGZvciAoOyBsZXZlbCBcXHUwMDNlIFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7XFxuK1xcdFxcdHBndGFibGUgPSAodTY0ICopKHBndGFibGVfcGEgKyBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVCk7XFxuK1xcdFxcdHB0ZSA9IHBndGFibGVbUFhEX0lOREVYKHZhZGRyLCBsZXZlbCldO1xcbitcXHRcXHRHVUVTVF9BU1NFUlQocHRlIFxcdTAwMjYgUFRFX1BSRVNFTlRfTUFTSyhcXHUwMDI2Z3Vlc3RfbW11KSk7XFxuK1xcdFxcdEdVRVNUX0FTU0VSVCghKHB0ZSBcXHUwMDI2IFBURV9IVUdFX01BU0soXFx1MDAyNmd1ZXN0X21tdSkpKTtcXG4rXFx0XFx0cGd0YWJsZV9wYSA9IFBURV9HRVRfUEEocHRlKTtcXG4rXFx0fVxcbitcXG4rXFx0cGd0YWJsZSA9ICh1NjQgKikocGd0YWJsZV9wYSArIFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUKTtcXG4rXFx0cmV0dXJuIFxcdTAwMjZwZ3RhYmxlW1BYRF9JTkRFWCh2YWRkciwgUEdfTEVWRUxfNEspXTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZ3Vlc3RfcGZfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncylcXG4re1xcbitcXHR1NjQgZmF1bHRfYWRkcjtcXG4rXFx0dTY0ICpwdGVwO1xcbitcXG4rXFx0ZmF1bHRfYWRkciA9IGdldF9jcjIoKTtcXG4rXFx0R1VFU1RfQVNTRVJUX0VRKGZhdWx0X2FkZHIsIFJFQURfT05DRShleHBlY3RlZF92YWRkcikpO1xcbitcXG4rXFx0cHRlcCA9IGd1ZXN0X2dldF9wdGUoZmF1bHRfYWRkcik7XFxuK1xcdEdVRVNUX0FTU0VSVChwdGVwKTtcXG4rXFx0R1VFU1RfQVNTRVJUKCEoKnB0ZXAgXFx1MDAyNiBQVEVfUFJFU0VOVF9NQVNLKFxcdTAwMjZndWVzdF9tbXUpKSk7XFxuK1xcbitcXHQqcHRlcCB8PSBQVEVfUFJFU0VOVF9NQVNLKFxcdTAwMjZndWVzdF9tbXUpO1xcbitcXHRndWVzdF9mYXVsdHMrKztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZ3Vlc3RfYWNjZXNzX21lbW9yeSh2b2lkICphcmcpXFxuK3tcXG4rXFx0dTY0IHZhZGRyLCB2YWw7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgOyBpKyspIHtcXG4rXFx0XFx0dmFkZHIgPSBURVNUX01FTV9CQVNFX0dWQSArIChpICUgUFRSU19QRVJfUFRFKSAqIFBBR0VfU0laRTtcXG4rXFx0XFx0V1JJVEVfT05DRShleHBlY3RlZF92YWRkciwgdmFkZHIpO1xcbitcXG4rXFx0XFx0LyogUmVhZCB0byB0cmlnZ2VyICNQRiAqL1xcbitcXHRcXHR2YWwgPSBSRUFEX09OQ0UoKih1NjQgKil2YWRkcik7XFxuK1xcdFxcdEdVRVNUX0FTU0VSVF9FUSh2YWwsIFBBVFRFUk4pO1xcbitcXG4rXFx0XFx0LyogQ2xlYXIgdGhlIHByZXNlbnQgYml0IGFnYWluIHNvIGl0IGZhdWx0cyBuZXh0IHRpbWUgKi9cXG4rXFx0XFx0Kmd1ZXN0X2dldF9wdGUodmFkZHIpIFxcdTAwMjY9IH5QVEVfUFJFU0VOVF9NQVNLKFxcdTAwMjZndWVzdF9tbXUpO1xcbitcXHRcXHRpbnZscGcodmFkZHIpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGwxX3N2bV9jb2RlKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0pXFxuK3tcXG4rXFx0Z2VuZXJpY19zdm1fc2V0dXAoc3ZtLCBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcXG4rXFx0c3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zIHw9IEJJVChVRF9WRUNUT1IpO1xcbitcXG4rXFx0d2hpbGUgKDEpIHtcXG4rXFx0XFx0cnVuX2d1ZXN0KHN2bS1cXHUwMDNldm1jYiwgc3ZtLVxcdTAwM2V2bWNiX2dwYSk7XFxuK1xcdFxcdEdVRVNUX0FTU0VSVF9FUShzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9jb2RlLFxcbitcXHRcXHRcXHRcXHQoU1ZNX0VYSVRfRVhDUF9CQVNFICsgVURfVkVDVE9SKSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxcbit7XFxuK1xcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpO1xcbitcXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteCkpO1xcbitcXHRwcmVwYXJlX3ZtY3Modm14LCBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcXG4rXFxuK1xcdC8qIEludGVyY2VwdCBVRCwgaWdub3JlIGFueSAjUEYgKi9cXG4rXFx0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEVYQ0VQVElPTl9CSVRNQVAsIEJJVChVRF9WRUNUT1IpIHwgQklUKFBGX1ZFQ1RPUikpKTtcXG4rXFx0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKFBBR0VfRkFVTFRfRVJST1JfQ09ERV9NQVNLLCAwKSk7XFxuK1xcdEdVRVNUX0FTU0VSVCghdm13cml0ZShQQUdFX0ZBVUxUX0VSUk9SX0NPREVfTUFUQ0gsIC0xKSk7XFxuK1xcbitcXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xcbitcXHR3aGlsZSAoMSkge1xcbitcXHRcXHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpO1xcbitcXHRcXHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX0lOVFJfSU5GTykgXFx1MDAyNiAweGZmLCBVRF9WRUNUT1IpO1xcbitcXHRcXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqdGVzdF9kYXRhKVxcbit7XFxuK1xcdGlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSlcXG4rXFx0XFx0bDFfc3ZtX2NvZGUodGVzdF9kYXRhKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRsMV92bXhfY29kZSh0ZXN0X2RhdGEpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCAqc2lndXNyX3RocmVhZF9mbih2b2lkICphcmcpXFxuK3tcXG4rXFx0cHRocmVhZF90IHZjcHVfdGhyZWFkID0gKHB0aHJlYWRfdClhcmc7XFxuK1xcbitcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdHB0aHJlYWRfdGVzdGNhbmNlbCgpO1xcbitcXHRcXHRwdGhyZWFkX2tpbGwodmNwdV90aHJlYWQsIFNJR1VTUjEpO1xcbitcXHRcXHR1c2xlZXAobXNlY3NfdG9fdXNlY3MoMSkpO1xcbitcXHR9XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBkdW1teV9zaWduYWxfaGFuZGxlcihpbnQgc2lnbm8pIHt9XFxuK3N0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIHNhO1xcbitcXG4rc3RhdGljIHZvaWQgdmNwdV9zaWd1c3JfbGlzdGVuKHZvaWQpXFxuK3tcXG4rXFx0c2Euc2FfaGFuZGxlciA9IGR1bW15X3NpZ25hbF9oYW5kbGVyO1xcbitcXHRzaWdhY3Rpb24oU0lHVVNSMSwgXFx1MDAyNnNhLCBOVUxMKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdmNwdV9zaWd1c3JfaWdub3JlKHZvaWQpXFxuK3tcXG4rXFx0c2Euc2FfaGFuZGxlciA9IFNJR19JR047XFxuK1xcdHNpZ2FjdGlvbihTSUdVU1IxLCBcXHUwMDI2c2EsIE5VTEwpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBrdm1feDg2X3N0YXRlX3F1ZXVlX3VkKHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSlcXG4re1xcbitcXHRpZiAoc3RhdGUtXFx1MDAzZWV2ZW50cy5leGNlcHRpb24ucGVuZGluZyB8fCBzdGF0ZS1cXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5pbmplY3RlZClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c3RhdGUtXFx1MDAzZWV2ZW50cy5mbGFncyB8PSBLVk1fVkNQVUVWRU5UX1ZBTElEX1BBWUxPQUQ7XFxuK1xcdHN0YXRlLVxcdTAwM2VldmVudHMuZXhjZXB0aW9uLnBlbmRpbmcgPSB0cnVlO1xcbitcXHRzdGF0ZS1cXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5pbmplY3RlZCA9IGZhbHNlO1xcbitcXHRzdGF0ZS1cXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5uciA9IFVEX1ZFQ1RPUjtcXG4rXFx0c3RhdGUtXFx1MDAzZWV2ZW50cy5leGNlcHRpb24uaGFzX2Vycm9yX2NvZGUgPSBmYWxzZTtcXG4rXFx0c3RhdGUtXFx1MDAzZWV2ZW50cy5leGNlcHRpb25faGFzX3BheWxvYWQgPSBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnVuX3Rlc3QoYm9vbCBuZXN0ZWQpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlO1xcbitcXHRpbnQgciwgaSwgbGV2ZWw7XFxuK1xcdHB0aHJlYWRfdCBzaWd1c3JfdGhyZWFkO1xcbitcXHRncGFfdCBncGEsIHBndGFibGVfZ3BhO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHRzdHJ1Y3QgdWNhbGwgdWM7XFxuK1xcdHU2NCAqcGd0YWJsZTtcXG4rXFx0Z3ZhX3QgZ3ZhO1xcbitcXHR1NjQgcHRlO1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgbmVzdGVkID8gbDFfZ3Vlc3RfY29kZSA6IGd1ZXN0X2FjY2Vzc19tZW1vcnkpO1xcbitcXHR2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBQRl9WRUNUT1IsIGd1ZXN0X3BmX2hhbmRsZXIpO1xcbitcXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FELCAtMnVsKTtcXG4rXFxuK1xcdGlmIChuZXN0ZWQpIHtcXG4rXFx0XFx0aWYgKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkpXFxuK1xcdFxcdFxcdHZjcHVfYWxsb2Nfc3ZtKHZtLCBcXHUwMDI2Z3ZhKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHR2Y3B1X2FsbG9jX3ZteCh2bSwgXFx1MDAyNmd2YSk7XFxuK1xcdFxcdHZjcHVfYXJnc19zZXQodmNwdSwgMSwgZ3ZhKTtcXG4rXFx0fVxcbitcXG4rXFx0LyogQWxsb2NhdGUgYSBwYWdlIGFuZCB3cml0ZSB0aGUgcGF0dGVybiB0byBpdCAqL1xcbitcXHRndmEgPSB2bV9hbGxvY19wYWdlKHZtKTtcXG4rXFx0Kih1NjQgKilhZGRyX2d2YTJodmEodm0sIGd2YSkgPSBQQVRURVJOO1xcbitcXHRncGEgPSBhZGRyX2d2YTJncGEodm0sIGd2YSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBNYXAgYWxsIHZpcnR1YWwgYWRkcmVzc2VzIHRvIHRoZSBwYXR0ZXJuIHBhZ2UgYW5kIGNsZWFyIHRoZSBwcmVzZW50XFxuK1xcdCAqIGJpdCBzdWNoIHRoYXQgZ3Vlc3QgYWNjZXNzZXMgd2lsbCBjYXVzZSBhICNQRi5cXG4rXFx0ICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBQVFJTX1BFUl9QVEU7IGkrKykge1xcbitcXHRcXHRndmEgPSBURVNUX01FTV9CQVNFX0dWQSArIGkgKiBnZXRwYWdlc2l6ZSgpO1xcbitcXHRcXHR2aXJ0X3BnX21hcCh2bSwgZ3ZhLCBncGEpO1xcbitcXHRcXHQqdm1fZ2V0X3B0ZSh2bSwgZ3ZhKSBcXHUwMDI2PSB+UFRFX1BSRVNFTlRfTUFTSyhcXHUwMDI2dm0tXFx1MDAzZW1tdSk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE5vdyBjcmVhdGUgbWFwcGluZ3MgZm9yIHRoZSBwYWdlIHRhYmxlcyBjcmVhdGVkIGFib3ZlIHNvIHRoYXQgdGhlXFxuK1xcdCAqIGd1ZXN0ICNQRiBoYW5kbGVyIGNhbiB3YWxrIHRoZW0uIEFsbCBQVEVzIGZvciB0ZXN0IHZpcnR1YWwgYWRkcmVzc2VzXFxuK1xcdCAqIHNob3VsZCBsaWUgb24gdGhlIHNhbWUgUFRFIHBhZ2UsIHNvIG9uZSBwYWdlIGlzIG1hcHBlZCBmb3IgZWFjaCBwYWdlXFxuK1xcdCAqIHRhYmxlIGxldmVsLlxcbitcXHQgKlxcbitcXHQgKiBVc2UgYW4gb2Zmc2V0IGZvciB0aGUgR1ZBIGluc3RlYWQgb2YgY3JlYXRpbmcgaWRlbnRpdHkgbWFwcGluZ3MgdG9cXG4rXFx0ICogYXZvaWQgY29sbGlzaW9uIHdpdGggZXhpc3RpbmcgbWFwcGluZ3MgYXQgbG93IEdWQXMgKGUuZy4gRUxGKS5cXG4rXFx0ICovXFxuK1xcdHBndGFibGVfZ3BhID0gdm0tXFx1MDAzZW1tdS5wZ2Q7XFxuK1xcdGZvciAobGV2ZWwgPSB2bS1cXHUwMDNlbW11LnBndGFibGVfbGV2ZWxzOyBsZXZlbCBcXHUwMDNlPSBQR19MRVZFTF80SzsgbGV2ZWwtLSkge1xcbitcXHRcXHR2aXJ0X21hcCh2bSwgcGd0YWJsZV9ncGEgKyBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVCwgcGd0YWJsZV9ncGEsIDEpO1xcbitcXHRcXHRwZ3RhYmxlID0gYWRkcl9ncGEyaHZhKHZtLCBwZ3RhYmxlX2dwYSk7XFxuK1xcdFxcdHB0ZSA9IHBndGFibGVbUFhEX0lOREVYKFRFU1RfTUVNX0JBU0VfR1ZBLCBsZXZlbCldO1xcbitcXHRcXHRwZ3RhYmxlX2dwYSA9IFBURV9HRVRfUEEocHRlKTtcXG4rXFx0fVxcbitcXG4rXFx0LyogSW5pdGlhbGl6ZSB0aGUgdGhyZWFkIHNlbmRpbmcgU0lHVVNSIGFuZCBpbnN0YWxsIHRoZSBoYW5kbGVyICovXFxuK1xcdHZjcHVfc2lndXNyX2lnbm9yZSgpO1xcbitcXHRyID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnNpZ3Vzcl90aHJlYWQsIE5VTEwsIHNpZ3Vzcl90aHJlYWRfZm4sXFxuK1xcdFxcdFxcdCAgICh2b2lkICopcHRocmVhZF9zZWxmKCkpO1xcbitcXHRURVNUX0FTU0VSVCghciwgXFxcInB0aHJlYWRfY3JlYXRlKCkgZmFpbGVkOiAlZFxcXCIsIHIpO1xcbitcXG4rXFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjPSBOUl9JVEVSQVRJT05TOyBpKyspIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogT25seSBoYW5kbGUgU0lHVVNSIHdoaWxlIHRoZSB2Q1BVIGlzIHJ1bm5pbmcsIG90aGVyd2lzZVxcbitcXHRcXHQgKiBpZ25vcmUgaXQgdG8gYXZvaWQgaW50ZXJydXB0aW5nIG90aGVyIGlvY3Rscy9zeXNjYWxscy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHZjcHVfc2lndXNyX2xpc3RlbigpO1xcbitcXHRcXHRyID0gX192Y3B1X3J1bih2Y3B1KTtcXG4rXFx0XFx0aWYgKHIgPT0gLTEpXFxuK1xcdFxcdFxcdFRFU1RfQVNTRVJUX0VRKGVycm5vLCBFSU5UUik7XFxuK1xcdFxcdHZjcHVfc2lndXNyX2lnbm9yZSgpO1xcbitcXG4rXFx0XFx0LyogVGhlIGd1ZXN0IG9ubHkgZXhpdHMgZHVlIHRvIGEgc2lnbmFsIG9yIGZhaWxlZCBhc3NlcnRpb24gKi9cXG4rXFx0XFx0aWYgKCFyKSB7XFxuK1xcdFxcdFxcdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XFxuK1xcdFxcdFxcdFRFU1RfQVNTRVJUX0VRKGdldF91Y2FsbCh2Y3B1LCBcXHUwMDI2dWMpLCBVQ0FMTF9BQk9SVCk7XFxuK1xcdFxcdFxcdFJFUE9SVF9HVUVTVF9BU1NFUlQodWMpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0c3RhdGUgPSB2Y3B1X3NhdmVfc3RhdGUodmNwdSk7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBJZiB0aGUgdkNQVSBpcyBpbiBndWVzdCBtb2RlLCBpbmplY3QgYSAjVUQgdG8gdHJpZ2dlciBhblxcbitcXHRcXHQgKiBMMi1cXHUwMDNlTDEgVk0tRXhpdCBldmVyeSBvdGhlciBpdGVyYXRpb24uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoa3ZtX3g4Nl9zdGF0ZV9pc19ndWVzdF9tb2RlKHN0YXRlKSBcXHUwMDI2XFx1MDAyNiBpICUgMiA9PSAwKVxcbitcXHRcXHRcXHRrdm1feDg2X3N0YXRlX3F1ZXVlX3VkKHN0YXRlKTtcXG4rXFxuK1xcdFxcdGt2bV92bV9yZWxlYXNlKHZtKTtcXG4rXFx0XFx0dmNwdSA9IHZtX3JlY3JlYXRlX3dpdGhfb25lX3ZjcHUodm0pO1xcbitcXHRcXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FELCAtMnVsKTtcXG4rXFx0XFx0dmNwdV9sb2FkX3N0YXRlKHZjcHUsIHN0YXRlKTtcXG4rXFx0XFx0a3ZtX3g4Nl9zdGF0ZV9jbGVhbnVwKHN0YXRlKTtcXG4rXFxuK1xcdFxcdHByX2luZm8oXFxcIlxcXFxyU2F2ZStyZXN0b3JlIGl0ZXJhdGlvbnM6ICVkXFxcIiwgaSk7XFxuK1xcdH1cXG4rXFx0cHJfaW5mbyhcXFwiXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3Qodm0sIGd1ZXN0X2ZhdWx0cyk7XFxuK1xcdFRFU1RfQVNTRVJUKGd1ZXN0X2ZhdWx0cyBcXHUwMDNlIDAsIFxcXCJObyBndWVzdCBwYWdlIGZhdWx0cyB0cmlnZ2VyZWRcXFwiKTtcXG4rXFx0cHJfaW5mbyhcXFwiR3Vlc3QgcGFnZSBmYXVsdHMlczogJWx1XFxcXG5cXFwiLCBuZXN0ZWQgPyBcXFwiIChpbiBMMilcXFwiIDogXFxcIlxcXCIsIGd1ZXN0X2ZhdWx0cyk7XFxuK1xcbitcXHRwdGhyZWFkX2NhbmNlbChzaWd1c3JfdGhyZWFkKTtcXG4rXFx0cHRocmVhZF9qb2luKHNpZ3Vzcl90aHJlYWQsIE5VTEwpO1xcbitcXHRrdm1fdm1fZnJlZSh2bSk7XFxuK31cXG4rXFxuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuK3tcXG4rXFx0cHJfaW5mbyhcXFwiUnVubmluZyBzYXZlK3Jlc3RvcmUgc3RyZXNzIHRlc3QuLi5cXFxcblxcXCIpO1xcbitcXHRydW5fdGVzdCgvKm5lc3RlZD0qL2ZhbHNlKTtcXG4rXFxuK1xcdGlmICgha3ZtX2hhc19jYXAoS1ZNX0NBUF9FWENFUFRJT05fUEFZTE9BRCkgfHxcXG4rXFx0ICAgICFrdm1faGFzX2NhcChLVk1fQ0FQX05FU1RFRF9TVEFURSkgfHxcXG4rXFx0ICAgICgha3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSBcXHUwMDI2XFx1MDAyNiAha3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSkpIHtcXG4rXFx0XFx0cHJfaW5mbyhcXFwiTmVzdGVkIHZpcnR1YWxpemF0aW9uIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nIG5lc3RlZCB0ZXN0XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHByX2luZm8oXFxcIlJ1bm5pbmcgc2F2ZStyZXN0b3JlIHN0cmVzcyB0ZXN0IHdpdGggYSBuZXN0ZWQgZ3Vlc3QuLi5cXFxcblxcXCIpO1xcbitcXHRydW5fdGVzdCgvKm5lc3RlZD0qL3RydWUpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmNcXG5pbmRleCBlMjU0MmY0Y2VkNjA1Li5kMWVkYWZkNWFmNzU1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xcbkBAIC0yMiw5ICsyMiw2IEBAXFxuICNkZWZpbmUgU01SQU1fR1BBIDB4MTAwMDAwMFxcbiAjZGVmaW5lIFNNUkFNX1NUQUdFIDB4ZmVcXG4gXFxuLSNkZWZpbmUgU1RSKHgpICN4XFxuLSNkZWZpbmUgWFNUUihzKSBTVFIocylcXG4tXFxuICNkZWZpbmUgU1lOQ19QT1JUIDB4ZVxcbiAjZGVmaW5lIERPTkUgMHhmZlxcbiBcXG5AQCAtNDIsNyArMzksNyBAQCB1OCBzbWlfaGFuZGxlcltdID0ge1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHN5bmNfd2l0aF9ob3N0KHU2NCBwaGFzZSlcXG4ge1xcbi1cXHRhc20gdm9sYXRpbGUoXFxcImluICRcXFwiIFhTVFIoU1lOQ19QT1JUKVxcXCIsICUlYWwgXFxcXG5cXFwiXFxuK1xcdGFzbSB2b2xhdGlsZShcXFwiaW4gJFxcXCIgX19zdHJpbmdpZnkoU1lOQ19QT1JUKVxcXCIsICUlYWwgXFxcXG5cXFwiXFxuIFxcdFxcdCAgICAgOiBcXFwiK2FcXFwiIChwaGFzZSkpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxOTozOTo0My44NTUxNzk3NjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTE2OTE1OTQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGFuZCBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8uIEl0IGRvZXMgbm90IG1vZGlmeSBhbnkgY29yZSBrZXJuZWwgY29kZSBvciBkcml2ZXJzLiBTaW5jZSB0aGUgZnV6emluZyB0YXJnZXRzIHRoZSBrZXJuZWwgYW5kIG5vdCB1c2Vyc3BhY2UgdGVzdGluZyB0b29scywgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwga2VybmVsIGNoYW5nZXMgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGUyOTQ4NjhhZDA5MTM1YWYxMGUwMWU2NjA0ZjNhOTc5MTFmYzU0ZWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyOCAxOTozOTo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5pbmRleCA4OGM2YzgwNDZkZGVjLi5lNjdiMWU5ODkzZjY4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuQEAgLTExMiw2ICsxMTIsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3NldF9zcmVnc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3NtbV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zdGF0ZV90ZXN0XG4rVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3N2bV92bWNhbGxfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvc3ZtX2ludF9jdGxfdGVzdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbmluZGV4IGQ2NGM4YTIyODIwN2EuLmU4MzU2ZWU1NGQ3YjkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbkBAIC0yMyw2ICsyMyw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXHUwMDNlXG4gXG4gI2RlZmluZSBtc2Vjc190b191c2Vjcyhtc2VjKSAgICAoKG1zZWMpICogMTAwMFVMTClcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXG5pbmRleCBiZTc5YmRhMDI0YmYxLi44MmE4ZWE2YjY2MWYwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXG5AQCAtMTIwNywzMCArMTIwNywyMyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1jc192bWxhdW5jaCh2b2lkKVxuIFxuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2Vodl9jbGVhbl9maWVsZHMgPSAwO1xuIFxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJwdXNoICUlcmJwO1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyY3g7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJkeDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcnNpO1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyZGk7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAkMDtcIlxuK1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJwdXNoICQwO1wiXG4gXHRcdFx0ICAgICBcIm1vdiAlJXJzcCwgKCVbaG9zdF9yc3BdKTtcIlxuIFx0XHRcdCAgICAgXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcIlxuIFx0XHRcdCAgICAgXCJtb3YgJSVyYXgsICglW2hvc3RfcmlwXSk7XCJcbitcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbiBcdFx0XHQgICAgIFwidm1sYXVuY2g7XCJcbiBcdFx0XHQgICAgIFwiaW5jcSAoJSVyc3ApO1wiXG4tXHRcdFx0ICAgICBcIjE6IHBvcCAlJXJheDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyZGk7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcnNpO1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJkeDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyY3g7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmJwO1wiXG4rXHRcdFx0ICAgICBcIjE6IDtcIlxuK1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuK1x0XHRcdCAgICAgXCJwb3AgJSVyYXg7XCJcbiBcdFx0XHQgICAgIDogW3JldF1cIj1cdTAwMjZhXCIocmV0KVxuIFx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCJyXCJcbiBcdFx0XHQgICAgICAgKCh1NjQpXHUwMDI2Y3VycmVudF9ldm1jcy1cdTAwM2Vob3N0X3JzcCksXG4gXHRcdFx0ICAgICAgIFtob3N0X3JpcF1cInJcIlxuLVx0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcmlwKVxuLVx0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIsIFwicmJ4XCIsIFwicjhcIiwgXCJyOVwiLCBcInIxMFwiLFxuLVx0XHRcdCAgICAgICBcInIxMVwiLCBcInIxMlwiLCBcInIxM1wiLCBcInIxNFwiLCBcInIxNVwiKTtcbitcdFx0XHQgICAgICAgKCh1NjQpXHUwMDI2Y3VycmVudF9ldm1jcy1cdTAwM2Vob3N0X3JpcCksXG4rXHRcdFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xuK1x0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTI0NiwzMCArMTIzOSwyMyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1jc192bXJlc3VtZSh2b2lkKVxuIFx0LyogSE9TVF9SU1AgKi9cbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlaHZfY2xlYW5fZmllbGRzIFx1MDAyNj0gfkhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9IT1NUX1BPSU5URVI7XG4gXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJSVyYnA7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJjeDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcmR4O1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyc2k7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJkaTtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICQwO1wiXG4rXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJDA7XCJcbiBcdFx0XHQgICAgIFwibW92ICUlcnNwLCAoJVtob3N0X3JzcF0pO1wiXG4gXHRcdFx0ICAgICBcImxlYSAxZiglJXJpcCksICUlcmF4O1wiXG4gXHRcdFx0ICAgICBcIm1vdiAlJXJheCwgKCVbaG9zdF9yaXBdKTtcIlxuK1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuIFx0XHRcdCAgICAgXCJ2bXJlc3VtZTtcIlxuIFx0XHRcdCAgICAgXCJpbmNxICglJXJzcCk7XCJcbi1cdFx0XHQgICAgIFwiMTogcG9wICUlcmF4O1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJkaTtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyc2k7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmR4O1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJjeDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyYnA7XCJcbitcdFx0XHQgICAgIFwiMTogO1wiXG4rXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4rXHRcdFx0ICAgICBcInBvcCAlJXJheDtcIlxuIFx0XHRcdCAgICAgOiBbcmV0XVwiPVx1MDAyNmFcIihyZXQpXG4gXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cInJcIlxuIFx0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcnNwKSxcbiBcdFx0XHQgICAgICAgW2hvc3RfcmlwXVwiclwiXG4tXHRcdFx0ICAgICAgICgodTY0KVx1MDAyNmN1cnJlbnRfZXZtY3MtXHUwMDNlaG9zdF9yaXApXG4tXHRcdFx0ICAgICA6IFwibWVtb3J5XCIsIFwiY2NcIiwgXCJyYnhcIiwgXCJyOFwiLCBcInI5XCIsIFwicjEwXCIsXG4tXHRcdFx0ICAgICAgIFwicjExXCIsIFwicjEyXCIsIFwicjEzXCIsIFwicjE0XCIsIFwicjE1XCIpO1xuK1x0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcmlwKSxcbitcdFx0XHQgICAgICAgR1VFU1RfUkVHU19PRkZTRVRTXG4rXHRcdFx0ICAgICA6IFwibWVtb3J5XCIsIFwiY2NcIik7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcbmluZGV4IGIxNjExNzRlY2U0NTMuLjQ2MWM4YWVmN2QzN2IgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxuQEAgLTI0LDYgKzI0LDcgQEAgZXh0ZXJuIGJvb2wgaG9zdF9jcHVfaXNfYW1kO1xuIGV4dGVybiBib29sIGhvc3RfY3B1X2lzX2h5Z29uO1xuIGV4dGVybiBib29sIGhvc3RfY3B1X2lzX2FtZF9jb21wYXRpYmxlO1xuIGV4dGVybiB1NjQgZ3Vlc3RfdHNjX2toejtcbitleHRlcm4gc3RydWN0IGt2bV9tbXUgZ3Vlc3RfbW11O1xuIFxuICNpZm5kZWYgTUFYX05SX0NQVUlEX0VOVFJJRVNcbiAjZGVmaW5lIE1BWF9OUl9DUFVJRF9FTlRSSUVTIDEwMFxuQEAgLTM5OCw4ICszOTksNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4ODZfbW9kZWwodW5zaWduZWQgaW50IGVheClcbiAjZGVmaW5lIFBURV9HRVRfUEEocHRlKVx0XHQoKHB0ZSkgXHUwMDI2IFBIWVNJQ0FMX1BBR0VfTUFTSylcbiAjZGVmaW5lIFBURV9HRVRfUEZOKHB0ZSkgICAgICAgIChQVEVfR0VUX1BBKHB0ZSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpXG4gXG4tLyogR2VuZXJhbCBSZWdpc3RlcnMgaW4gNjQtQml0IE1vZGUgKi9cbi1zdHJ1Y3QgZ3ByNjRfcmVncyB7XG4rc3RydWN0IGd1ZXN0X3JlZ3Mge1xuIFx0dTY0IHJheDtcbiBcdHU2NCByY3g7XG4gXHR1NjQgcmR4O1xuQEAgLTQxNiw4ICs0MTYsMzggQEAgc3RydWN0IGdwcjY0X3JlZ3Mge1xuIFx0dTY0IHIxMztcbiBcdHU2NCByMTQ7XG4gXHR1NjQgcjE1O1xuK1x0dTY0IHJmbGFncztcbiB9O1xuIFxuK2V4dGVybiBzdHJ1Y3QgZ3Vlc3RfcmVncyBndWVzdF9yZWdzO1xuK1xuKyNkZWZpbmUgR1VFU1RfUkVHX09GRlNFVChuYW1lKSBcXFxuK1x0W29mZl8jI25hbWVdIFwiaVwiIChvZmZzZXRvZihzdHJ1Y3QgZ3Vlc3RfcmVncywgbmFtZSkpXG4rXG4rI2RlZmluZSBHVUVTVF9SRUdTX09GRlNFVFNcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHJheCksXHRcXFxuK1x0R1VFU1RfUkVHX09GRlNFVChyY3gpLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocmR4KSxcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHJieCksXHRcXFxuK1x0R1VFU1RfUkVHX09GRlNFVChyc3ApLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocmJwKSxcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHJzaSksXHRcXFxuK1x0R1VFU1RfUkVHX09GRlNFVChyZGkpLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocjgpLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocjkpLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocjEwKSxcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHIxMSksXHRcXFxuK1x0R1VFU1RfUkVHX09GRlNFVChyMTIpLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocjEzKSxcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHIxNCksXHRcXFxuK1x0R1VFU1RfUkVHX09GRlNFVChyMTUpLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocmZsYWdzKVxuK1xuKyNkZWZpbmUgR1VFU1RfUkVHKG5hbWUpIFwiZ3Vlc3RfcmVncyArICVjW29mZl9cIiAjbmFtZSBcIl1cIlxuK1xuKyNkZWZpbmUgR1VFU1RfU1dJVENIX0dQUl9BU00obmFtZSkgXFxcbitcdFwieGNoZyAlJVwiICNuYW1lIFwiLCBcIiBHVUVTVF9SRUcobmFtZSkgXCJcXG5cXHRcIlxuK1xuIHN0cnVjdCBkZXNjNjQge1xuIFx0dTE2IGxpbWl0MDtcbiBcdHUxNiBiYXNlMDtcbkBAIC01ODQsNiArNjE0LDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY3IwKHU2NCB2YWwpXG4gXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcIm1vdiAlMCwgJSVjcjBcIiA6IDogXCJyXCIgKHZhbCkgOiBcIm1lbW9yeVwiKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB1NjQgZ2V0X2NyMih2b2lkKVxuK3tcbitcdHU2NCBjcjI7XG4rXG4rXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcIm1vdiAlJWNyMiwgJVtjcjJdXCJcbitcdFx0XHQgICAgIDogLyogb3V0cHV0ICovIFtjcjJdXCI9clwiKGNyMikpO1xuK1x0cmV0dXJuIGNyMjtcbit9XG4rXG4gc3RhdGljIGlubGluZSB1NjQgZ2V0X2NyMyh2b2lkKVxuIHtcbiBcdHU2NCBjcjM7XG5AQCAtODc5LDYgKzkxOCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfc3NlX3JlZyhpbnQgcmVnLCBjb25zdCBzc2UxMjhfdCAqZGF0YSlcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIGludmxwZyh1NjQgYWRkcilcbit7XG4rXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcImludmxwZyAoJTApXCIgOiA6IFwiclwiKGFkZHIpIDogXCJtZW1vcnlcIik7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVfcmVsYXgodm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUoXCJyZXA7IG5vcFwiIDo6OiBcIm1lbW9yeVwiKTtcbkBAIC05MTUsNiArOTU5LDExIEBAIHN0cnVjdCBrdm1feDg2X3N0YXRlICp2Y3B1X3NhdmVfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHZjcHVfbG9hZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSk7XG4gdm9pZCBrdm1feDg2X3N0YXRlX2NsZWFudXAoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKTtcbiBcbitzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3g4Nl9zdGF0ZV9pc19ndWVzdF9tb2RlKHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSlcbit7XG4rXHRyZXR1cm4gc3RhdGUtXHUwMDNlbmVzdGVkLnNpemUgXHUwMDI2XHUwMDI2IChzdGF0ZS1cdTAwM2VuZXN0ZWQuZmxhZ3MgXHUwMDI2IEtWTV9TVEFURV9ORVNURURfR1VFU1RfTU9ERSk7XG4rfVxuK1xuIGNvbnN0IHN0cnVjdCBrdm1fbXNyX2xpc3QgKmt2bV9nZXRfbXNyX2luZGV4X2xpc3Qodm9pZCk7XG4gY29uc3Qgc3RydWN0IGt2bV9tc3JfbGlzdCAqa3ZtX2dldF9mZWF0dXJlX21zcl9pbmRleF9saXN0KHZvaWQpO1xuIGJvb2wga3ZtX21zcl9pc19pbl9zYXZlX3Jlc3RvcmVfbGlzdCh1MzIgbXNyX2luZGV4KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbmluZGV4IDRiY2ZkNjBlM2FlY2IuLjA0ZjVlMzRkZWEzYWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuQEAgLTI5MCw2ICsyOTAsMjMgQEAgc3RydWN0IHZteF9tc3JfZW50cnkge1xuIFx0dTY0IHZhbHVlO1xuIH0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMTYpKSk7XG4gXG4rI2RlZmluZSBWTVhfU1dJVENIX0dQUlNfQVNNIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYXgpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYngpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyY3gpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZHgpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYnApIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyc2kpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZGkpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOCkgIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOSkgIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTApIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTEpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTIpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTMpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTQpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTUpXG4rXG4gI2luY2x1ZGUgXCJldm1jcy5oXCJcbiBcbiBzdGF0aWMgaW5saW5lIGludCB2bXhvbih1NjQgcGh5cylcbkBAIC0zNjMsOSArMzgwLDYgQEAgc3RhdGljIGlubGluZSB1NjQgdm1wdHJzdHoodm9pZClcbiBcdHJldHVybiB2YWx1ZTtcbiB9XG4gXG4tLypcbi0gKiBObyBndWVzdCBzdGF0ZSAoZS5nLiBHUFJzKSBpcyBlc3RhYmxpc2hlZCBieSB0aGlzIHZtbGF1bmNoLlxuLSAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbkBAIC0zNzMsMzQgKzM4NywyNCBAQCBzdGF0aWMgaW5saW5lIGludCB2bWxhdW5jaCh2b2lkKVxuIFx0aWYgKGVuYWJsZV9ldm1jcylcbiBcdFx0cmV0dXJuIGV2bWNzX3ZtbGF1bmNoKCk7XG4gXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJSVyYnA7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJjeDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcmR4O1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyc2k7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJkaTtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICQwO1wiXG4rXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJDA7XCJcbiBcdFx0XHQgICAgIFwidm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07XCJcbiBcdFx0XHQgICAgIFwibGVhIDFmKCUlcmlwKSwgJSVyYXg7XCJcbiBcdFx0XHQgICAgIFwidm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07XCJcbitcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbiBcdFx0XHQgICAgIFwidm1sYXVuY2g7XCJcbiBcdFx0XHQgICAgIFwiaW5jcSAoJSVyc3ApO1wiXG4tXHRcdFx0ICAgICBcIjE6IHBvcCAlJXJheDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyZGk7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcnNpO1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJkeDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyY3g7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmJwO1wiXG4rXHRcdFx0ICAgICBcIjE6IDtcIlxuK1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuK1x0XHRcdCAgICAgXCJwb3AgJSVyYXg7XCJcbiBcdFx0XHQgICAgIDogW3JldF1cIj1cdTAwMjZhXCIocmV0KVxuIFx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCJyXCIoKHU2NClIT1NUX1JTUCksXG4tXHRcdFx0ICAgICAgIFtob3N0X3JpcF1cInJcIigodTY0KUhPU1RfUklQKVxuLVx0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIsIFwicmJ4XCIsIFwicjhcIiwgXCJyOVwiLCBcInIxMFwiLFxuLVx0XHRcdCAgICAgICBcInIxMVwiLCBcInIxMlwiLCBcInIxM1wiLCBcInIxNFwiLCBcInIxNVwiKTtcbitcdFx0XHQgICAgICAgW2hvc3RfcmlwXVwiclwiKCh1NjQpSE9TVF9SSVApLFxuK1x0XHRcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcbitcdFx0XHQgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLS8qXG4tICogTm8gZ3Vlc3Qgc3RhdGUgKGUuZy4gR1BScykgaXMgZXN0YWJsaXNoZWQgYnkgdGhpcyB2bXJlc3VtZS5cbi0gKi9cbiBzdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKVxuIHtcbiBcdGludCByZXQ7XG5AQCAtNDA4LDI4ICs0MTIsMjEgQEAgc3RhdGljIGlubGluZSBpbnQgdm1yZXN1bWUodm9pZClcbiBcdGlmIChlbmFibGVfZXZtY3MpXG4gXHRcdHJldHVybiBldm1jc192bXJlc3VtZSgpO1xuIFxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJwdXNoICUlcmJwO1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyY3g7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJkeDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcnNpO1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyZGk7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAkMDtcIlxuK1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJwdXNoICQwO1wiXG4gXHRcdFx0ICAgICBcInZtd3JpdGUgJSVyc3AsICVbaG9zdF9yc3BdO1wiXG4gXHRcdFx0ICAgICBcImxlYSAxZiglJXJpcCksICUlcmF4O1wiXG4gXHRcdFx0ICAgICBcInZtd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdO1wiXG4rXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4gXHRcdFx0ICAgICBcInZtcmVzdW1lO1wiXG4gXHRcdFx0ICAgICBcImluY3EgKCUlcnNwKTtcIlxuLVx0XHRcdCAgICAgXCIxOiBwb3AgJSVyYXg7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmRpO1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJzaTtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyZHg7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmN4O1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJicDtcIlxuK1x0XHRcdCAgICAgXCIxOiA7XCJcbitcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbitcdFx0XHQgICAgIFwicG9wICUlcmF4O1wiXG4gXHRcdFx0ICAgICA6IFtyZXRdXCI9XHUwMDI2YVwiKHJldClcbiBcdFx0XHQgICAgIDogW2hvc3RfcnNwXVwiclwiKCh1NjQpSE9TVF9SU1ApLFxuLVx0XHRcdCAgICAgICBbaG9zdF9yaXBdXCJyXCIoKHU2NClIT1NUX1JJUClcbi1cdFx0XHQgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiLCBcInJieFwiLCBcInI4XCIsIFwicjlcIiwgXCJyMTBcIixcbi1cdFx0XHQgICAgICAgXCJyMTFcIiwgXCJyMTJcIiwgXCJyMTNcIiwgXCJyMTRcIiwgXCJyMTVcIik7XG4rXHRcdFx0ICAgICAgIFtob3N0X3JpcF1cInJcIigodTY0KUhPU1RfUklQKSxcbitcdFx0XHQgICAgICAgR1VFU1RfUkVHU19PRkZTRVRTXG4rXHRcdFx0ICAgICA6IFwibWVtb3J5XCIsIFwiY2NcIik7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuY1xuaW5kZXggMWQ3MmRjZGZjZTNiNi4uM2UzNTNhYzM5ZWViNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNcbkBAIC03NCw3ICs3NCw3IEBAIHRlc3RfYXNzZXJ0KGJvb2wgZXhwLCBjb25zdCBjaGFyICpleHBfc3RyLFxuIFx0aWYgKCEoZXhwKSkge1xuIFx0XHR2YV9zdGFydChhcCwgZm10KTtcbiBcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwiPT09PSBUZXN0IEFzc2VydGlvbiBGYWlsdXJlID09PT1cXG5cIlxuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJcXG49PT09IFRlc3QgQXNzZXJ0aW9uIEZhaWx1cmUgPT09PVxcblwiXG4gXHRcdFx0XCIgICVzOiV1OiAlc1xcblwiXG4gXHRcdFx0XCIgIHBpZD0lZCB0aWQ9JWQgZXJybm89JWQgLSAlc1xcblwiLFxuIFx0XHRcdGZpbGUsIGxpbmUsIGV4cF9zdHIsIGdldHBpZCgpLCBrdm1fZ2V0dGlkKCksXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xuaW5kZXggZWY1NmRjZWZlMDExOS4uZDMxZmE4MWVhMDc1NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xuQEAgLTI4LDYgKzI4LDkgQEAgYm9vbCBob3N0X2NwdV9pc19oeWdvbjtcbiBib29sIGhvc3RfY3B1X2lzX2FtZF9jb21wYXRpYmxlO1xuIGJvb2wgaXNfZm9yY2VkX2VtdWxhdGlvbl9lbmFibGVkO1xuIHU2NCBndWVzdF90c2Nfa2h6O1xuK3N0cnVjdCBrdm1fbW11IGd1ZXN0X21tdTtcbitcbitzdHJ1Y3QgZ3Vlc3RfcmVncyBndWVzdF9yZWdzO1xuIFxuIGNvbnN0IGNoYXIgKmV4X3N0cihpbnQgdmVjdG9yKVxuIHtcbkBAIC04MjksNiArODMyLDE3IEBAIHZvaWQga3ZtX2FyY2hfdm1fcG9zdF9jcmVhdGUoc3RydWN0IGt2bV92bSAqdm0sIHVuc2lnbmVkIGludCBucl92Y3B1cylcbiBcdFRFU1RfQVNTRVJUKHIgXHUwMDNlIDAsIFwiS1ZNX0dFVF9UU0NfS0haIGRpZCBub3QgcHJvdmlkZSBhIHZhbGlkIFRTQyBmcmVxdWVuY3kuXCIpO1xuIFx0Z3Vlc3RfdHNjX2toeiA9IHI7XG4gXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgZ3Vlc3RfdHNjX2toeik7XG4rXG4rXHQvKlxuK1x0ICogVGhlIGd1ZXN0IE1NVSBpcyBqdXN0IGEgcGxhY2Vob2xkZXIgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gUFRFIG1hc2tzXG4rXHQgKiAoZm9yIG5vdykuIFRoZSBndWVzdCBkb2VzIG5vdCBoYXZlIG1hcHBpbmdzIGZvciBpdHMgb3duIHBhZ2UgdGFibGVzXG4rXHQgKiBieSBkZWZhdWx0LCBzbyBhbnkgbWVhbmluZ2Z1bCB1c2Ugb2YgZ3Vlc3QgcGFnZSB0YWJsZXMgcmVxdWlyZXNcbitcdCAqIGV4cGxpY2l0IHNldHVwIGJ5IHRoZSB0ZXN0LiBaZXJvIHRoZSBQR0QgdG8gbWFrZSBpdCBvYnZpb3VzIHRoZSBndWVzdFxuK1x0ICogcGFnZSB0YWJsZXMgYXJlIG5vdCBpbW1lZGlhdGVseSB1c2FibGUgYnkgZ3Vlc3QgY29kZS5cbitcdCAqL1xuK1x0Z3Vlc3RfbW11ID0gdm0tXHUwMDNlbW11O1xuK1x0Z3Vlc3RfbW11LnBnZCA9IDA7XG4rXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgZ3Vlc3RfbW11KTtcbiB9XG4gXG4gdm9pZCB2Y3B1X2FyY2hfc2V0X2VudHJ5X3BvaW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqZ3Vlc3RfY29kZSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jXG5pbmRleCAxNDQ1Yjg5MDk4NmZkLi5iMDViZTUwZjA3NWQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jXG5AQCAtMTMsOSArMTMsNiBAQFxuIFxuICNkZWZpbmUgU0VWX0RFVl9QQVRIIFwiL2Rldi9zZXZcIlxuIFxuLXN0cnVjdCBncHI2NF9yZWdzIGd1ZXN0X3JlZ3M7XG4tdTY0IHJmbGFncztcbi1cbiAvKiBBbGxvY2F0ZSBtZW1vcnkgcmVnaW9ucyBmb3IgbmVzdGVkIFNWTSB0ZXN0cy5cbiAgKlxuICAqIElucHV0IEFyZ3M6XG5AQCAtMTM3LDQ2ICsxMzQsNDcgQEAgdm9pZCBnZW5lcmljX3N2bV9zZXR1cChzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtLCB2b2lkICpndWVzdF9yaXApXG4gICogc2F2ZS9yZXN0b3JlIDY0LWJpdCBnZW5lcmFsIHJlZ2lzdGVycyBleGNlcHQgcmF4LCByaXAsIHJzcFxuICAqIHdoaWNoIGFyZSBkaXJlY3RseSBoYW5kZWQgdGhyb3VnaCB0aGUgVk1DQiBndWVzdCBwcm9jZXNzb3Igc3RhdGVcbiAgKi9cbi0jZGVmaW5lIFNBVkVfR1BSX0NcdFx0XHRcdFxcXG4tXHRcInhjaGcgJSVyYngsIGd1ZXN0X3JlZ3MrMHgyMFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcmN4LCBndWVzdF9yZWdzKzB4MTBcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXJkeCwgZ3Vlc3RfcmVncysweDE4XFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyYnAsIGd1ZXN0X3JlZ3MrMHgzMFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcnNpLCBndWVzdF9yZWdzKzB4MzhcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXJkaSwgZ3Vlc3RfcmVncysweDQwXFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyOCwgIGd1ZXN0X3JlZ3MrMHg0OFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcjksICBndWVzdF9yZWdzKzB4NTBcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXIxMCwgZ3Vlc3RfcmVncysweDU4XFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyMTEsIGd1ZXN0X3JlZ3MrMHg2MFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcjEyLCBndWVzdF9yZWdzKzB4NjhcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXIxMywgZ3Vlc3RfcmVncysweDcwXFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyMTQsIGd1ZXN0X3JlZ3MrMHg3OFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcjE1LCBndWVzdF9yZWdzKzB4ODBcXG5cXHRcIlxuLVxuLSNkZWZpbmUgTE9BRF9HUFJfQyAgICAgIFNBVkVfR1BSX0NcbisjZGVmaW5lIFNWTV9TV0lUQ0hfR1BSU19BU00gXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJieCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJjeCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkeCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJicCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJzaSkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkaSkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI4KSAgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI5KSAgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMSkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMikgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMykgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNSlcbiBcbiAvKlxuICAqIHNlbGZ0ZXN0cyBkbyBub3QgdXNlIGludGVycnVwdHMgc28gd2UgZHJvcHBlZCBjbGdpL3N0aS9jbGkvc3RnaVxuLSAqIGZvciBub3cuIHJlZ2lzdGVycyBpbnZvbHZlZCBpbiBMT0FEL1NBVkVfR1BSX0MgYXJlIGV2ZW50dWFsbHlcbisgKiBmb3Igbm93LiBSZWdpc3RlcnMgaW52b2x2ZWQgaW4gU1ZNX1NXSVRDSF9HUFJTX0FTTSBhcmUgZXZlbnR1YWxseVxuICAqIHVubW9kaWZpZWQgc28gdGhleSBkbyBub3QgbmVlZCB0byBiZSBpbiB0aGUgY2xvYmJlciBsaXN0LlxuICAqL1xuIHZvaWQgcnVuX2d1ZXN0KHN0cnVjdCB2bWNiICp2bWNiLCB1NjQgdm1jYl9ncGEpXG4ge1xuIFx0YXNtIHZvbGF0aWxlIChcbiBcdFx0XCJ2bWxvYWQgJVt2bWNiX2dwYV1cXG5cXHRcIlxuLVx0XHRcIm1vdiByZmxhZ3MsICUlcjE1XFxuXFx0XCJcdC8vIHJmbGFnc1xuLVx0XHRcIm1vdiAlJXIxNSwgMHgxNzAoJVt2bWNiXSlcXG5cXHRcIlxuLVx0XHRcIm1vdiBndWVzdF9yZWdzLCAlJXIxNVxcblxcdFwiXHQvLyByYXhcbi1cdFx0XCJtb3YgJSVyMTUsIDB4MWY4KCVbdm1jYl0pXFxuXFx0XCJcbi1cdFx0TE9BRF9HUFJfQ1xuK1x0XHRcIm1vdiBcIiBHVUVTVF9SRUcocmZsYWdzKSBcIiwgJSVyMTVcXG5cXHRcIlxuK1x0XHRcIm1vdiAlJXIxNSwgJVt2bWNiX3JmbGFnc11cXG5cXHRcIlxuK1x0XHRcIm1vdiBcIiBHVUVTVF9SRUcocmF4KSBcIiwgJSVyMTVcXG5cXHRcIlxuK1x0XHRcIm1vdiAlJXIxNSwgJVt2bWNiX3JheF1cXG5cXHRcIlxuK1x0XHRTVk1fU1dJVENIX0dQUlNfQVNNXG4gXHRcdFwidm1ydW4gJVt2bWNiX2dwYV1cXG5cXHRcIlxuLVx0XHRTQVZFX0dQUl9DXG4tXHRcdFwibW92IDB4MTcwKCVbdm1jYl0pLCAlJXIxNVxcblxcdFwiXHQvLyByZmxhZ3Ncbi1cdFx0XCJtb3YgJSVyMTUsIHJmbGFnc1xcblxcdFwiXG4tXHRcdFwibW92IDB4MWY4KCVbdm1jYl0pLCAlJXIxNVxcblxcdFwiXHQvLyByYXhcbi1cdFx0XCJtb3YgJSVyMTUsIGd1ZXN0X3JlZ3NcXG5cXHRcIlxuK1x0XHRTVk1fU1dJVENIX0dQUlNfQVNNXG4rXHRcdFwibW92ICVbdm1jYl9yZmxhZ3NdLCAlJXIxNVxcblxcdFwiXG4rXHRcdFwibW92ICUlcjE1LCBcIiBHVUVTVF9SRUcocmZsYWdzKSBcIlxcblxcdFwiXG4rXHRcdFwibW92ICVbdm1jYl9yYXhdLCAlJXIxNVxcblxcdFwiXHQvLyByYXhcbitcdFx0XCJtb3YgJSVyMTUsIFwiIEdVRVNUX1JFRyhyYXgpIFwiXFxuXFx0XCJcbiBcdFx0XCJ2bXNhdmUgJVt2bWNiX2dwYV1cXG5cXHRcIlxuLVx0XHQ6IDogW3ZtY2JdIFwiclwiICh2bWNiKSwgW3ZtY2JfZ3BhXSBcImFcIiAodm1jYl9ncGEpXG4rXHRcdDogW3ZtY2JfcmZsYWdzXSBcIittXCIgKHZtY2ItXHUwMDNlc2F2ZS5yZmxhZ3MpLFxuK1x0XHQgIFt2bWNiX3JheF0gXCIrbVwiICh2bWNiLVx1MDAzZXNhdmUucmF4KVxuK1x0XHQ6IFt2bWNiX2dwYV0gXCJhXCIgKHZtY2JfZ3BhKSxcbitcdFx0ICBHVUVTVF9SRUdTX09GRlNFVFNcbiBcdFx0OiBcInIxNVwiLCBcIm1lbW9yeVwiKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmNcbmluZGV4IGU3ZGQ1NzkxOTU5YmEuLjM4MDUwYzYwYTA2NzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jXG5AQCAtMTAsMzYgKzEwLDggQEBcbiBcbiB2b2lkIHVjYWxsX2FyY2hfZG9fdWNhbGwoZ3ZhX3QgdWMpXG4ge1xuLVx0Lypcbi1cdCAqIEZJWE1FOiBSZXZlcnQgdGhpcyBoYWNrICh0aGUgZW50aXJlIGNvbW1pdCB0aGF0IGFkZGVkIGl0KSBvbmNlIG5WTVhcbi1cdCAqIHByZXNlcnZlcyBMMiBHUFJzIGFjcm9zcyBhIG5lc3RlZCBWTS1FeGl0LiAgSWYgYSB1Y2FsbCBmcm9tIEwyLCBlLmcuXG4tXHQgKiB0byBkbyBhIEdVRVNUX1NZTkMoKSwgbGFuZHMgdGhlIHZDUFUgaW4gTDEsIGFueSBhbmQgYWxsIEdQUnMgY2FuIGJlXG4tXHQgKiBjbG9iYmVyZWQgYnkgTDEuICBTYXZlIGFuZCByZXN0b3JlIG5vbi12b2xhdGlsZSBHUFJzIChjbG9iYmVyaW5nIFJCUFxuLVx0ICogaW4gcGFydGljdWxhciBpcyBwcm9ibGVtYXRpYykgYWxvbmcgd2l0aCBSRFggYW5kIFJESSAod2hpY2ggYXJlXG4tXHQgKiBpbnB1dHMpLCBhbmQgY2xvYmJlciB2b2xhdGlsZSBHUFJzLiAqc2lnaCpcbi1cdCAqL1xuLSNkZWZpbmUgSE9SUklGSUNfTDJfVUNBTExfQ0xPQkJFUl9IQUNLXHRcXFxuLVx0XCJyY3hcIiwgXCJyc2lcIiwgXCJyOFwiLCBcInI5XCIsIFwicjEwXCIsIFwicjExXCJcbi1cbi1cdGFzbSB2b2xhdGlsZShcInB1c2ggJSVyYnBcXG5cXHRcIlxuLVx0XHQgICAgIFwicHVzaCAlJXIxNVxcblxcdFwiXG4tXHRcdCAgICAgXCJwdXNoICUlcjE0XFxuXFx0XCJcbi1cdFx0ICAgICBcInB1c2ggJSVyMTNcXG5cXHRcIlxuLVx0XHQgICAgIFwicHVzaCAlJXIxMlxcblxcdFwiXG4tXHRcdCAgICAgXCJwdXNoICUlcmJ4XFxuXFx0XCJcbi1cdFx0ICAgICBcInB1c2ggJSVyZHhcXG5cXHRcIlxuLVx0XHQgICAgIFwicHVzaCAlJXJkaVxcblxcdFwiXG4tXHRcdCAgICAgXCJpbiAlW3BvcnRdLCAlJWFsXFxuXFx0XCJcbi1cdFx0ICAgICBcInBvcCAlJXJkaVxcblxcdFwiXG4tXHRcdCAgICAgXCJwb3AgJSVyZHhcXG5cXHRcIlxuLVx0XHQgICAgIFwicG9wICUlcmJ4XFxuXFx0XCJcbi1cdFx0ICAgICBcInBvcCAlJXIxMlxcblxcdFwiXG4tXHRcdCAgICAgXCJwb3AgJSVyMTNcXG5cXHRcIlxuLVx0XHQgICAgIFwicG9wICUlcjE0XFxuXFx0XCJcbi1cdFx0ICAgICBcInBvcCAlJXIxNVxcblxcdFwiXG4tXHRcdCAgICAgXCJwb3AgJSVyYnBcXG5cXHRcIlxuLVx0XHQ6IDogW3BvcnRdIFwiZFwiIChVQ0FMTF9QSU9fUE9SVCksIFwiRFwiICh1YykgOiBcInJheFwiLCBcIm1lbW9yeVwiLFxuLVx0XHQgICAgIEhPUlJJRklDX0wyX1VDQUxMX0NMT0JCRVJfSEFDSyk7XG4rXHRhc20gdm9sYXRpbGUoXCJpbiAlW3BvcnRdLCAlJWFsXCJcbitcdFx0OiA6IFtwb3J0XSBcImRcIiAoVUNBTExfUElPX1BPUlQpLCBcIkRcIiAodWMpIDogXCJyYXhcIiwgXCJtZW1vcnlcIik7XG4gfVxuIFxuIHZvaWQgKnVjYWxsX2FyY2hfZ2V0X3VjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcbmluZGV4IDc3Y2U4N2M0MWE4NjguLmFhN2YzYjQwNWZkMzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY1xuQEAgLTIyLDkgKzIyLDYgQEBcbiBcbiAjZGVmaW5lIFNZTkNfUE9SVFx0MHhlXG4gXG4tI2RlZmluZSBTVFIoeCkgI3hcbi0jZGVmaW5lIFhTVFIocykgU1RSKHMpXG4tXG4gLypcbiAgKiBTTUkgaGFuZGxlcjogcnVucyBpbiByZWFsLWFkZHJlc3MgbW9kZS5cbiAgKiBSZXBvcnRzIFNNUkFNX1NUQUdFIHZpYSBwb3J0IElPLCB0aGVuIGRvZXMgUlNNLlxuQEAgLTM3LDcgKzM0LDcgQEAgc3RhdGljIHU4IHNtaV9oYW5kbGVyW10gPSB7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHN5bmNfd2l0aF9ob3N0KHU2NCBwaGFzZSlcbiB7XG4tXHRhc20gdm9sYXRpbGUoXCJpbiAkXCIgWFNUUihTWU5DX1BPUlQpIFwiLCAlJWFsIFxcblwiXG4rXHRhc20gdm9sYXRpbGUoXCJpbiAkXCIgX19zdHJpbmdpZnkoU1lOQ19QT1JUKSBcIiwgJSVhbCBcXG5cIlxuIFx0XHQgICAgIDogXCIrYVwiIChwaGFzZSkpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9maXhfaHlwZXJjYWxsX3Rlc3QuY1xuaW5kZXggNzUzYTBlNzMwZWE4ZC4uNDkzMWVjMjI3NjhlZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZml4X2h5cGVyY2FsbF90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZml4X2h5cGVyY2FsbF90ZXN0LmNcbkBAIC02LDcgKzYsNiBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGFyYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX3BhcmEuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImt2bV90ZXN0X2hhcm5lc3MuaFwiXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iYTFkNzIzMDAxZTk0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jXG5AQCAtMCwwICsxLDI5MSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NnZXRvcHQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwidGVzdF91dGlsLmhcIlxuKyNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJwcm9jZXNzb3IuaFwiXG4rI2luY2x1ZGUgXCJzdm1fdXRpbC5oXCJcbisjaW5jbHVkZSBcInZteC5oXCJcbitcbisjZGVmaW5lIE5SX0lURVJBVElPTlNcdFx0NTAwXG4rXG4rI2RlZmluZSBQVFJTX1BFUl9QVEVcdFx0NTEyXG4rI2RlZmluZSBQWERfSU5ERVgodmFkZHIsIGxldmVsKVx0KCgodmFkZHIpIFx1MDAzZVx1MDAzZSBQR19MRVZFTF9TSElGVChsZXZlbCkpIFx1MDAyNiAoUFRSU19QRVJfUFRFIC0gMSkpXG4rXG4rI2RlZmluZSBURVNUX01FTV9CQVNFX0dWQVx0MHhjMDAwMDAwMFVMTFxuKyNkZWZpbmUgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVRcdDB4ZDAwMDAwMDBVTExcbisjZGVmaW5lIFBBVFRFUk5cdFx0XHQweGFiY2RlZmFiY2RlZmFiY2RVTExcbitcbitzdGF0aWMgdTY0IGV4cGVjdGVkX3ZhZGRyO1xuK3N0YXRpYyB1NjQgZ3Vlc3RfZmF1bHRzO1xuK1xuK3N0YXRpYyB1NjQgKmd1ZXN0X2dldF9wdGUodTY0IHZhZGRyKVxuK3tcbitcdHU2NCBwZ3RhYmxlX3BhLCBwdGU7XG4rXHR1NjQgKnBndGFibGU7XG4rXHRpbnQgbGV2ZWw7XG4rXG4rXHRsZXZlbCA9IChnZXRfY3I0KCkgXHUwMDI2IFg4Nl9DUjRfTEE1NykgPyBQR19MRVZFTF8yNTZUIDogUEdfTEVWRUxfNTEyRztcbitcbitcdHBndGFibGVfcGEgPSBnZXRfY3IzKCkgXHUwMDI2IFBIWVNJQ0FMX1BBR0VfTUFTSztcbitcdGZvciAoOyBsZXZlbCBcdTAwM2UgUEdfTEVWRUxfNEs7IGxldmVsLS0pIHtcbitcdFx0cGd0YWJsZSA9ICh1NjQgKikocGd0YWJsZV9wYSArIFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUKTtcbitcdFx0cHRlID0gcGd0YWJsZVtQWERfSU5ERVgodmFkZHIsIGxldmVsKV07XG4rXHRcdEdVRVNUX0FTU0VSVChwdGUgXHUwMDI2IFBURV9QUkVTRU5UX01BU0soXHUwMDI2Z3Vlc3RfbW11KSk7XG4rXHRcdEdVRVNUX0FTU0VSVCghKHB0ZSBcdTAwMjYgUFRFX0hVR0VfTUFTSyhcdTAwMjZndWVzdF9tbXUpKSk7XG4rXHRcdHBndGFibGVfcGEgPSBQVEVfR0VUX1BBKHB0ZSk7XG4rXHR9XG4rXG4rXHRwZ3RhYmxlID0gKHU2NCAqKShwZ3RhYmxlX3BhICsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQpO1xuK1x0cmV0dXJuIFx1MDAyNnBndGFibGVbUFhEX0lOREVYKHZhZGRyLCBQR19MRVZFTF80SyldO1xuK31cbitcbitzdGF0aWMgdm9pZCBndWVzdF9wZl9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKVxuK3tcbitcdHU2NCBmYXVsdF9hZGRyO1xuK1x0dTY0ICpwdGVwO1xuK1xuK1x0ZmF1bHRfYWRkciA9IGdldF9jcjIoKTtcbitcdEdVRVNUX0FTU0VSVF9FUShmYXVsdF9hZGRyLCBSRUFEX09OQ0UoZXhwZWN0ZWRfdmFkZHIpKTtcbitcbitcdHB0ZXAgPSBndWVzdF9nZXRfcHRlKGZhdWx0X2FkZHIpO1xuK1x0R1VFU1RfQVNTRVJUKHB0ZXApO1xuK1x0R1VFU1RfQVNTRVJUKCEoKnB0ZXAgXHUwMDI2IFBURV9QUkVTRU5UX01BU0soXHUwMDI2Z3Vlc3RfbW11KSkpO1xuK1xuK1x0KnB0ZXAgfD0gUFRFX1BSRVNFTlRfTUFTSyhcdTAwMjZndWVzdF9tbXUpO1xuK1x0Z3Vlc3RfZmF1bHRzKys7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGd1ZXN0X2FjY2Vzc19tZW1vcnkodm9pZCAqYXJnKVxuK3tcbitcdHU2NCB2YWRkciwgdmFsO1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyA7IGkrKykge1xuK1x0XHR2YWRkciA9IFRFU1RfTUVNX0JBU0VfR1ZBICsgKGkgJSBQVFJTX1BFUl9QVEUpICogUEFHRV9TSVpFO1xuK1x0XHRXUklURV9PTkNFKGV4cGVjdGVkX3ZhZGRyLCB2YWRkcik7XG4rXG4rXHRcdC8qIFJlYWQgdG8gdHJpZ2dlciAjUEYgKi9cbitcdFx0dmFsID0gUkVBRF9PTkNFKCoodTY0ICopdmFkZHIpO1xuK1x0XHRHVUVTVF9BU1NFUlRfRVEodmFsLCBQQVRURVJOKTtcbitcbitcdFx0LyogQ2xlYXIgdGhlIHByZXNlbnQgYml0IGFnYWluIHNvIGl0IGZhdWx0cyBuZXh0IHRpbWUgKi9cbitcdFx0Kmd1ZXN0X2dldF9wdGUodmFkZHIpIFx1MDAyNj0gflBURV9QUkVTRU5UX01BU0soXHUwMDI2Z3Vlc3RfbW11KTtcbitcdFx0aW52bHBnKHZhZGRyKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgbDFfc3ZtX2NvZGUoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSlcbit7XG4rXHRnZW5lcmljX3N2bV9zZXR1cChzdm0sIGd1ZXN0X2FjY2Vzc19tZW1vcnkpO1xuK1x0c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyB8PSBCSVQoVURfVkVDVE9SKTtcbitcbitcdHdoaWxlICgxKSB7XG4rXHRcdHJ1bl9ndWVzdChzdm0tXHUwMDNldm1jYiwgc3ZtLVx1MDAzZXZtY2JfZ3BhKTtcbitcdFx0R1VFU1RfQVNTRVJUX0VRKHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9jb2RlLFxuK1x0XHRcdFx0KFNWTV9FWElUX0VYQ1BfQkFTRSArIFVEX1ZFQ1RPUikpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4re1xuK1x0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7XG4rXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteCkpO1xuK1x0cHJlcGFyZV92bWNzKHZteCwgZ3Vlc3RfYWNjZXNzX21lbW9yeSk7XG4rXG4rXHQvKiBJbnRlcmNlcHQgVUQsIGlnbm9yZSBhbnkgI1BGICovXG4rXHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoRVhDRVBUSU9OX0JJVE1BUCwgQklUKFVEX1ZFQ1RPUikgfCBCSVQoUEZfVkVDVE9SKSkpO1xuK1x0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKFBBR0VfRkFVTFRfRVJST1JfQ09ERV9NQVNLLCAwKSk7XG4rXHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BVENILCAtMSkpO1xuK1xuK1x0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdHdoaWxlICgxKSB7XG4rXHRcdEdVRVNUX0FTU0VSVF9FUSh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSwgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSk7XG4rXHRcdEdVRVNUX0FTU0VSVF9FUSh2bXJlYWR6KFZNX0VYSVRfSU5UUl9JTkZPKSBcdTAwMjYgMHhmZiwgVURfVkVDVE9SKTtcbitcdFx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZSh2b2lkICp0ZXN0X2RhdGEpXG4re1xuK1x0aWYgKHRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKVxuK1x0XHRsMV9zdm1fY29kZSh0ZXN0X2RhdGEpO1xuK1x0ZWxzZVxuK1x0XHRsMV92bXhfY29kZSh0ZXN0X2RhdGEpO1xuK31cbitcbitzdGF0aWMgdm9pZCAqc2lndXNyX3RocmVhZF9mbih2b2lkICphcmcpXG4re1xuK1x0cHRocmVhZF90IHZjcHVfdGhyZWFkID0gKHB0aHJlYWRfdClhcmc7XG4rXG4rXHRmb3IgKDs7KSB7XG4rXHRcdHB0aHJlYWRfdGVzdGNhbmNlbCgpO1xuK1x0XHRwdGhyZWFkX2tpbGwodmNwdV90aHJlYWQsIFNJR1VTUjEpO1xuK1x0XHR1c2xlZXAobXNlY3NfdG9fdXNlY3MoMSkpO1xuK1x0fVxuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGR1bW15X3NpZ25hbF9oYW5kbGVyKGludCBzaWdubykge31cbitzdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBzYTtcbitcbitzdGF0aWMgdm9pZCB2Y3B1X3NpZ3Vzcl9saXN0ZW4odm9pZClcbit7XG4rXHRzYS5zYV9oYW5kbGVyID0gZHVtbXlfc2lnbmFsX2hhbmRsZXI7XG4rXHRzaWdhY3Rpb24oU0lHVVNSMSwgXHUwMDI2c2EsIE5VTEwpO1xuK31cbitcbitzdGF0aWMgdm9pZCB2Y3B1X3NpZ3Vzcl9pZ25vcmUodm9pZClcbit7XG4rXHRzYS5zYV9oYW5kbGVyID0gU0lHX0lHTjtcbitcdHNpZ2FjdGlvbihTSUdVU1IxLCBcdTAwMjZzYSwgTlVMTCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGt2bV94ODZfc3RhdGVfcXVldWVfdWQoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKVxuK3tcbitcdGlmIChzdGF0ZS1cdTAwM2VldmVudHMuZXhjZXB0aW9uLnBlbmRpbmcgfHwgc3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5pbmplY3RlZClcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3RhdGUtXHUwMDNlZXZlbnRzLmZsYWdzIHw9IEtWTV9WQ1BVRVZFTlRfVkFMSURfUEFZTE9BRDtcbitcdHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24ucGVuZGluZyA9IHRydWU7XG4rXHRzdGF0ZS1cdTAwM2VldmVudHMuZXhjZXB0aW9uLmluamVjdGVkID0gZmFsc2U7XG4rXHRzdGF0ZS1cdTAwM2VldmVudHMuZXhjZXB0aW9uLm5yID0gVURfVkVDVE9SO1xuK1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5oYXNfZXJyb3JfY29kZSA9IGZhbHNlO1xuK1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbl9oYXNfcGF5bG9hZCA9IGZhbHNlO1xuK31cbitcbitzdGF0aWMgdm9pZCBydW5fdGVzdChib29sIG5lc3RlZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGU7XG4rXHRpbnQgciwgaSwgbGV2ZWw7XG4rXHRwdGhyZWFkX3Qgc2lndXNyX3RocmVhZDtcbitcdGdwYV90IGdwYSwgcGd0YWJsZV9ncGE7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdHN0cnVjdCB1Y2FsbCB1YztcbitcdHU2NCAqcGd0YWJsZTtcbitcdGd2YV90IGd2YTtcbitcdHU2NCBwdGU7XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIG5lc3RlZCA/IGwxX2d1ZXN0X2NvZGUgOiBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcbitcdHZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIodm0sIFBGX1ZFQ1RPUiwgZ3Vlc3RfcGZfaGFuZGxlcik7XG4rXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FELCAtMnVsKTtcbitcbitcdGlmIChuZXN0ZWQpIHtcbitcdFx0aWYgKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkpXG4rXHRcdFx0dmNwdV9hbGxvY19zdm0odm0sIFx1MDAyNmd2YSk7XG4rXHRcdGVsc2VcbitcdFx0XHR2Y3B1X2FsbG9jX3ZteCh2bSwgXHUwMDI2Z3ZhKTtcbitcdFx0dmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBndmEpO1xuK1x0fVxuK1xuK1x0LyogQWxsb2NhdGUgYSBwYWdlIGFuZCB3cml0ZSB0aGUgcGF0dGVybiB0byBpdCAqL1xuK1x0Z3ZhID0gdm1fYWxsb2NfcGFnZSh2bSk7XG4rXHQqKHU2NCAqKWFkZHJfZ3ZhMmh2YSh2bSwgZ3ZhKSA9IFBBVFRFUk47XG4rXHRncGEgPSBhZGRyX2d2YTJncGEodm0sIGd2YSk7XG4rXG4rXHQvKlxuK1x0ICogTWFwIGFsbCB2aXJ0dWFsIGFkZHJlc3NlcyB0byB0aGUgcGF0dGVybiBwYWdlIGFuZCBjbGVhciB0aGUgcHJlc2VudFxuK1x0ICogYml0IHN1Y2ggdGhhdCBndWVzdCBhY2Nlc3NlcyB3aWxsIGNhdXNlIGEgI1BGLlxuK1x0ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBQVFJTX1BFUl9QVEU7IGkrKykge1xuK1x0XHRndmEgPSBURVNUX01FTV9CQVNFX0dWQSArIGkgKiBnZXRwYWdlc2l6ZSgpO1xuK1x0XHR2aXJ0X3BnX21hcCh2bSwgZ3ZhLCBncGEpO1xuK1x0XHQqdm1fZ2V0X3B0ZSh2bSwgZ3ZhKSBcdTAwMjY9IH5QVEVfUFJFU0VOVF9NQVNLKFx1MDAyNnZtLVx1MDAzZW1tdSk7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogTm93IGNyZWF0ZSBtYXBwaW5ncyBmb3IgdGhlIHBhZ2UgdGFibGVzIGNyZWF0ZWQgYWJvdmUgc28gdGhhdCB0aGVcbitcdCAqIGd1ZXN0ICNQRiBoYW5kbGVyIGNhbiB3YWxrIHRoZW0uIEFsbCBQVEVzIGZvciB0ZXN0IHZpcnR1YWwgYWRkcmVzc2VzXG4rXHQgKiBzaG91bGQgbGllIG9uIHRoZSBzYW1lIFBURSBwYWdlLCBzbyBvbmUgcGFnZSBpcyBtYXBwZWQgZm9yIGVhY2ggcGFnZVxuK1x0ICogdGFibGUgbGV2ZWwuXG4rXHQgKlxuK1x0ICogVXNlIGFuIG9mZnNldCBmb3IgdGhlIEdWQSBpbnN0ZWFkIG9mIGNyZWF0aW5nIGlkZW50aXR5IG1hcHBpbmdzIHRvXG4rXHQgKiBhdm9pZCBjb2xsaXNpb24gd2l0aCBleGlzdGluZyBtYXBwaW5ncyBhdCBsb3cgR1ZBcyAoZS5nLiBFTEYpLlxuK1x0ICovXG4rXHRwZ3RhYmxlX2dwYSA9IHZtLVx1MDAzZW1tdS5wZ2Q7XG4rXHRmb3IgKGxldmVsID0gdm0tXHUwMDNlbW11LnBndGFibGVfbGV2ZWxzOyBsZXZlbCBcdTAwM2U9IFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7XG4rXHRcdHZpcnRfbWFwKHZtLCBwZ3RhYmxlX2dwYSArIFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VULCBwZ3RhYmxlX2dwYSwgMSk7XG4rXHRcdHBndGFibGUgPSBhZGRyX2dwYTJodmEodm0sIHBndGFibGVfZ3BhKTtcbitcdFx0cHRlID0gcGd0YWJsZVtQWERfSU5ERVgoVEVTVF9NRU1fQkFTRV9HVkEsIGxldmVsKV07XG4rXHRcdHBndGFibGVfZ3BhID0gUFRFX0dFVF9QQShwdGUpO1xuK1x0fVxuK1xuK1x0LyogSW5pdGlhbGl6ZSB0aGUgdGhyZWFkIHNlbmRpbmcgU0lHVVNSIGFuZCBpbnN0YWxsIHRoZSBoYW5kbGVyICovXG4rXHR2Y3B1X3NpZ3Vzcl9pZ25vcmUoKTtcbitcdHIgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZzaWd1c3JfdGhyZWFkLCBOVUxMLCBzaWd1c3JfdGhyZWFkX2ZuLFxuK1x0XHRcdCAgICh2b2lkICopcHRocmVhZF9zZWxmKCkpO1xuK1x0VEVTVF9BU1NFUlQoIXIsIFwicHRocmVhZF9jcmVhdGUoKSBmYWlsZWQ6ICVkXCIsIHIpO1xuK1xuK1x0Zm9yIChpID0gMTsgaSBcdTAwM2M9IE5SX0lURVJBVElPTlM7IGkrKykge1xuK1x0XHQvKlxuK1x0XHQgKiBPbmx5IGhhbmRsZSBTSUdVU1Igd2hpbGUgdGhlIHZDUFUgaXMgcnVubmluZywgb3RoZXJ3aXNlXG4rXHRcdCAqIGlnbm9yZSBpdCB0byBhdm9pZCBpbnRlcnJ1cHRpbmcgb3RoZXIgaW9jdGxzL3N5c2NhbGxzLlxuK1x0XHQgKi9cbitcdFx0dmNwdV9zaWd1c3JfbGlzdGVuKCk7XG4rXHRcdHIgPSBfX3ZjcHVfcnVuKHZjcHUpO1xuK1x0XHRpZiAociA9PSAtMSlcbitcdFx0XHRURVNUX0FTU0VSVF9FUShlcnJubywgRUlOVFIpO1xuK1x0XHR2Y3B1X3NpZ3Vzcl9pZ25vcmUoKTtcbitcbitcdFx0LyogVGhlIGd1ZXN0IG9ubHkgZXhpdHMgZHVlIHRvIGEgc2lnbmFsIG9yIGZhaWxlZCBhc3NlcnRpb24gKi9cbitcdFx0aWYgKCFyKSB7XG4rXHRcdFx0VEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX0lPKTtcbitcdFx0XHRURVNUX0FTU0VSVF9FUShnZXRfdWNhbGwodmNwdSwgXHUwMDI2dWMpLCBVQ0FMTF9BQk9SVCk7XG4rXHRcdFx0UkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0c3RhdGUgPSB2Y3B1X3NhdmVfc3RhdGUodmNwdSk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIElmIHRoZSB2Q1BVIGlzIGluIGd1ZXN0IG1vZGUsIGluamVjdCBhICNVRCB0byB0cmlnZ2VyIGFuXG4rXHRcdCAqIEwyLVx1MDAzZUwxIFZNLUV4aXQgZXZlcnkgb3RoZXIgaXRlcmF0aW9uLlxuK1x0XHQgKi9cbitcdFx0aWYgKGt2bV94ODZfc3RhdGVfaXNfZ3Vlc3RfbW9kZShzdGF0ZSkgXHUwMDI2XHUwMDI2IGkgJSAyID09IDApXG4rXHRcdFx0a3ZtX3g4Nl9zdGF0ZV9xdWV1ZV91ZChzdGF0ZSk7XG4rXG4rXHRcdGt2bV92bV9yZWxlYXNlKHZtKTtcbitcdFx0dmNwdSA9IHZtX3JlY3JlYXRlX3dpdGhfb25lX3ZjcHUodm0pO1xuK1x0XHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FELCAtMnVsKTtcbitcdFx0dmNwdV9sb2FkX3N0YXRlKHZjcHUsIHN0YXRlKTtcbitcdFx0a3ZtX3g4Nl9zdGF0ZV9jbGVhbnVwKHN0YXRlKTtcbitcbitcdFx0cHJfaW5mbyhcIlxcclNhdmUrcmVzdG9yZSBpdGVyYXRpb25zOiAlZFwiLCBpKTtcbitcdH1cbitcdHByX2luZm8oXCJcXG5cIik7XG4rXG4rXHRzeW5jX2dsb2JhbF9mcm9tX2d1ZXN0KHZtLCBndWVzdF9mYXVsdHMpO1xuK1x0VEVTVF9BU1NFUlQoZ3Vlc3RfZmF1bHRzIFx1MDAzZSAwLCBcIk5vIGd1ZXN0IHBhZ2UgZmF1bHRzIHRyaWdnZXJlZFwiKTtcbitcdHByX2luZm8oXCJHdWVzdCBwYWdlIGZhdWx0cyVzOiAlbHVcXG5cIiwgbmVzdGVkID8gXCIgKGluIEwyKVwiIDogXCJcIiwgZ3Vlc3RfZmF1bHRzKTtcbitcbitcdHB0aHJlYWRfY2FuY2VsKHNpZ3Vzcl90aHJlYWQpO1xuK1x0cHRocmVhZF9qb2luKHNpZ3Vzcl90aHJlYWQsIE5VTEwpO1xuK1x0a3ZtX3ZtX2ZyZWUodm0pO1xuK31cbitcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuK3tcbitcdHByX2luZm8oXCJSdW5uaW5nIHNhdmUrcmVzdG9yZSBzdHJlc3MgdGVzdC4uLlxcblwiKTtcbitcdHJ1bl90ZXN0KC8qbmVzdGVkPSovZmFsc2UpO1xuK1xuK1x0aWYgKCFrdm1faGFzX2NhcChLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FEKSB8fFxuK1x0ICAgICFrdm1faGFzX2NhcChLVk1fQ0FQX05FU1RFRF9TVEFURSkgfHxcbitcdCAgICAoIWt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkgXHUwMDI2XHUwMDI2ICFrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKSkge1xuK1x0XHRwcl9pbmZvKFwiTmVzdGVkIHZpcnR1YWxpemF0aW9uIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nIG5lc3RlZCB0ZXN0XFxuXCIpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHByX2luZm8oXCJSdW5uaW5nIHNhdmUrcmVzdG9yZSBzdHJlc3MgdGVzdCB3aXRoIGEgbmVzdGVkIGd1ZXN0Li4uXFxuXCIpO1xuK1x0cnVuX3Rlc3QoLypuZXN0ZWQ9Ki90cnVlKTtcbitcdHJldHVybiAwO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmNcbmluZGV4IGUyNTQyZjRjZWQ2MDUuLmQxZWRhZmQ1YWY3NTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xuQEAgLTIyLDkgKzIyLDYgQEBcbiAjZGVmaW5lIFNNUkFNX0dQQSAweDEwMDAwMDBcbiAjZGVmaW5lIFNNUkFNX1NUQUdFIDB4ZmVcbiBcbi0jZGVmaW5lIFNUUih4KSAjeFxuLSNkZWZpbmUgWFNUUihzKSBTVFIocylcbi1cbiAjZGVmaW5lIFNZTkNfUE9SVCAweGVcbiAjZGVmaW5lIERPTkUgMHhmZlxuIFxuQEAgLTQyLDcgKzM5LDcgQEAgdTggc21pX2hhbmRsZXJbXSA9IHtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc3luY193aXRoX2hvc3QodTY0IHBoYXNlKVxuIHtcbi1cdGFzbSB2b2xhdGlsZShcImluICRcIiBYU1RSKFNZTkNfUE9SVClcIiwgJSVhbCBcXG5cIlxuK1x0YXNtIHZvbGF0aWxlKFwiaW4gJFwiIF9fc3RyaW5naWZ5KFNZTkNfUE9SVClcIiwgJSVhbCBcXG5cIlxuIFx0XHQgICAgIDogXCIrYVwiIChwaGFzZSkpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE5OjM5OjQzLjg1NTE4MTIxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTY5MTI3NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBTZWxmdGVzdCBQYXRjaCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgS1ZNIHNlbGZ0ZXN0cy4gSXQgbG9va3MgbGlrZSBpdCdzIGludHJvZHVjaW5nIGEgbmV3IHRlc3QsIGBzYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuY2AsIGFuZCB0b3VjaGluZyB1cCBzb21lIGV4aXN0aW5nIHRlc3RzIGFuZCBoZWFkZXJzLiBDcnVjaWFsbHksIHRob3VnaCwgaXQncyBhbGwgY29udGFpbmVkIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AuICBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdW5kZXJzdG9vZC5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhlIGZpbGUgbGlzdCBhZ2FpbiB0byBiZSBhYnNvbHV0ZWx5IHN1cmU6IGBNYWtlZmlsZS5rdm1gLCBgdGVzdF91dGlsLmhgLCBgZXZtY3MuaGAsIGBwcm9jZXNzb3IuaGAsIGB2bXguaGAsIGBhc3NlcnQuY2AsIGBwcm9jZXNzb3IuY2AsIGBzdm0uY2AsIGB1Y2FsbC5jYCwgYGV2bWNzX3NtbV9jb250cm9sc190ZXN0LmNgLCBgZml4X2h5cGVyY2FsbF90ZXN0LmNgLCBgc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmNgLCBhbmQgYHNtbV90ZXN0LmNgLiBZZXAsIGFsbCB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYCBkaXJlY3RvcnkuXG5cblRoZSBrZXkgdGhpbmcgaXMsIHRoaXMgaXMgKnB1cmVseSogYSBzZWxmdGVzdCBtb2RpZmljYXRpb24uIEl0IGRvZXNuJ3QgbW9kaWZ5IGFueSBrZXJuZWwgY29kZSBhdCBhbGwuIE5vIGNoYW5nZXMgdG8gYGFyY2gveDg2L2t2bS9gLCBgdmlydC9rdm0vYCwgb3IgYW55d2hlcmUgZWxzZSBpbiB0aGUga2VybmVsIHByb3Blci4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBzeXprYWxsZXIgZnV6emVzIHRoZSBrZXJuZWwgaXRzZWxmLCBub3QgdGhlIHVzZXJzcGFjZSB0b29scyB0aGF0IHRlc3QgaXQuXG5cbkxldCBtZSBzZWUgd2hhdCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSBhYm91dCB0aGlzIHNjZW5hcmlvLiAgVGhlIGluc3RydWN0aW9ucyBzcGVjaWZ5IHRoYXQgY2hhbmdlcyB0byBgdG9vbHMvYCBhbmQgc2VsZnRlc3RzIHNob3VsZCBiZSBgV29ydGhGdXp6aW5nPWZhbHNlYCB1bmRlciB0aGVzZSBjaXJjdW1zdGFuY2VzLlxuXG5SaWdodCwgc28gdGhpcyBmYWxscyBzcXVhcmVseSB3aXRoaW4gdGhlIGNyaXRlcmlhIGZvciBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQncyBhIHNlbGZ0ZXN0LCBhbmQgaXQncyBub3QgY2hhbmdpbmcgdGhlIGtlcm5lbCdzIGJlaGF2aW9yLiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgY29kZSwgbm8gbmV3IGZ1bmN0aW9uYWxpdHksIG5vdGhpbmcgdGhhdCB3b3VsZCBiZSByZWFjaGVkIGR1cmluZyBmdXp6aW5nLlxuXG5UaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3Qgd2FycmFudCBmdXp6aW5nLiAgSSdtIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgY2xlYXI6IHRoZSBwYXRjaCBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnksIHdoaWNoIGRvIG5vdCBtb2RpZnkgdGhlIGtlcm5lbCBjb2RlIHRoYXQgc3l6a2FsbGVyIGZ1enplciBpcyBkZXNpZ25lZCB0byB0ZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk2OSwiT3V0cHV0VG9rZW5zIjo4OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE5OjM5OjU1LjAyNDMxMjUwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGFuZCBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8uIEl0IGRvZXMgbm90IG1vZGlmeSBhbnkgY29yZSBrZXJuZWwgY29kZSBvciBkcml2ZXJzLiBTaW5jZSB0aGUgZnV6emluZyB0YXJnZXRzIHRoZSBrZXJuZWwgYW5kIG5vdCB1c2Vyc3BhY2UgdGVzdGluZyB0b29scywgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwga2VybmVsIGNoYW5nZXMgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhbmQgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGNvZGUgb3IgZHJpdmVycy4gU2luY2UgdGhlIGZ1enppbmcgdGFyZ2V0cyB0aGUga2VybmVsIGFuZCBub3QgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbHMsIHRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGtlcm5lbCBjaGFuZ2VzIHRvIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow77r52[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-28 19:11:40 +0000 UTC FinishedAt: 2026-07-28 19:39:57 +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+CgkJCTx0ZD4yMDI2LzA3LzI4IDE5OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhbmQgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGNvZGUgb3IgZHJpdmVycy4gU2luY2UgdGhlIGZ1enppbmcgdGFyZ2V0cyB0aGUga2VybmVsIGFuZCBub3QgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbHMsIHRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGtlcm5lbCBjaGFuZ2VzIHRvIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE5OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTI5NDg2OGFkMDkxMzVhZjEwZTAxZTY2MDRmM2E5NzkxMWZjNTRlYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDE5OjM5OjQxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5pbmRleCA4OGM2YzgwNDZkZGVjLi5lNjdiMWU5ODkzZjY4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuQEAgLTExMiw2ICYjNDM7MTEyLDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvc2V0X3NyZWdzX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zbW1fdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3N0YXRlX3Rlc3RcbiYjNDM7VEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvdm14X3ByZWVtcHRpb25fdGltZXJfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3N2bV92bWNhbGxfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3N2bV9pbnRfY3RsX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXG5pbmRleCBkNjRjOGEyMjgyMDdhLi5lODM1NmVlNTRkN2I5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXG5AQCAtMjMsNiAmIzQzOzIzLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXHUwMDNlXG4gXG4gI2RlZmluZSBtc2Vjc190b191c2Vjcyhtc2VjKSAgICAoKG1zZWMpICogMTAwMFVMTClcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXG5pbmRleCBiZTc5YmRhMDI0YmYxLi44MmE4ZWE2YjY2MWYwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXG5AQCAtMTIwNywzMCAmIzQzOzEyMDcsMjMgQEAgc3RhdGljIGlubGluZSBpbnQgZXZtY3Nfdm1sYXVuY2godm9pZClcbiBcbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlaHZfY2xlYW5fZmllbGRzID0gMDtcbiBcbi1cdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O3B1c2ggJSVyYnA7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcmN4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJkeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyc2k7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcmRpO1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAkMDtcJiMzNDtcbiYjNDM7XHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcJiMzNDtwdXNoICQwO1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7bW92ICUlcnNwLCAoJVtob3N0X3JzcF0pO1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7bGVhIDFmKCUlcmlwKSwgJSVyYXg7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDttb3YgJSVyYXgsICglW2hvc3RfcmlwXSk7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuIFx0XHRcdCAgICAgXCYjMzQ7dm1sYXVuY2g7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDtpbmNxICglJXJzcCk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDsxOiBwb3AgJSVyYXg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyZGk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyc2k7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyZHg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyY3g7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYnA7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7MTogO1wmIzM0O1xuJiM0MztcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbiYjNDM7XHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYXg7XCYjMzQ7XG4gXHRcdFx0ICAgICA6IFtyZXRdXCYjMzQ7PVx1MDAyNmFcJiMzNDsocmV0KVxuIFx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCYjMzQ7clwmIzM0O1xuIFx0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcnNwKSxcbiBcdFx0XHQgICAgICAgW2hvc3RfcmlwXVwmIzM0O3JcJiMzNDtcbi1cdFx0XHQgICAgICAgKCh1NjQpXHUwMDI2Y3VycmVudF9ldm1jcy1cdTAwM2Vob3N0X3JpcClcbi1cdFx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0OywgXCYjMzQ7cmJ4XCYjMzQ7LCBcJiMzNDtyOFwmIzM0OywgXCYjMzQ7cjlcJiMzNDssIFwmIzM0O3IxMFwmIzM0Oyxcbi1cdFx0XHQgICAgICAgXCYjMzQ7cjExXCYjMzQ7LCBcJiMzNDtyMTJcJiMzNDssIFwmIzM0O3IxM1wmIzM0OywgXCYjMzQ7cjE0XCYjMzQ7LCBcJiMzNDtyMTVcJiMzNDspO1xuJiM0MztcdFx0XHQgICAgICAgKCh1NjQpXHUwMDI2Y3VycmVudF9ldm1jcy1cdTAwM2Vob3N0X3JpcCksXG4mIzQzO1x0XHRcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcbiYjNDM7XHRcdFx0ICAgICA6IFwmIzM0O21lbW9yeVwmIzM0OywgXCYjMzQ7Y2NcJiMzNDspO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTI0NiwzMCAmIzQzOzEyMzksMjMgQEAgc3RhdGljIGlubGluZSBpbnQgZXZtY3Nfdm1yZXN1bWUodm9pZClcbiBcdC8qIEhPU1RfUlNQICovXG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZWh2X2NsZWFuX2ZpZWxkcyBcdTAwMjY9IH5IVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfSE9TVF9QT0lOVEVSO1xuIFxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7cHVzaCAlJXJicDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyY3g7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcmR4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyZGk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICQwO1wmIzM0O1xuJiM0MztcdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O3B1c2ggJDA7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDttb3YgJSVyc3AsICglW2hvc3RfcnNwXSk7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O21vdiAlJXJheCwgKCVbaG9zdF9yaXBdKTtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4gXHRcdFx0ICAgICBcJiMzNDt2bXJlc3VtZTtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O2luY3EgKCUlcnNwKTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0OzE6IHBvcCAlJXJheDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJkeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJjeDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJicDtcJiMzNDtcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDsxOiA7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuJiM0MztcdFx0XHQgICAgIFwmIzM0O3BvcCAlJXJheDtcJiMzNDtcbiBcdFx0XHQgICAgIDogW3JldF1cJiMzNDs9XHUwMDI2YVwmIzM0OyhyZXQpXG4gXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cJiMzNDtyXCYjMzQ7XG4gXHRcdFx0ICAgICAgICgodTY0KVx1MDAyNmN1cnJlbnRfZXZtY3MtXHUwMDNlaG9zdF9yc3ApLFxuIFx0XHRcdCAgICAgICBbaG9zdF9yaXBdXCYjMzQ7clwmIzM0O1xuLVx0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcmlwKVxuLVx0XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDssIFwmIzM0O2NjXCYjMzQ7LCBcJiMzNDtyYnhcJiMzNDssIFwmIzM0O3I4XCYjMzQ7LCBcJiMzNDtyOVwmIzM0OywgXCYjMzQ7cjEwXCYjMzQ7LFxuLVx0XHRcdCAgICAgICBcJiMzNDtyMTFcJiMzNDssIFwmIzM0O3IxMlwmIzM0OywgXCYjMzQ7cjEzXCYjMzQ7LCBcJiMzNDtyMTRcJiMzNDssIFwmIzM0O3IxNVwmIzM0Oyk7XG4mIzQzO1x0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcmlwKSxcbiYjNDM7XHRcdFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xuJiM0MztcdFx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0Oyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcbmluZGV4IGIxNjExNzRlY2U0NTMuLjQ2MWM4YWVmN2QzN2IgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxuQEAgLTI0LDYgJiM0MzsyNCw3IEBAIGV4dGVybiBib29sIGhvc3RfY3B1X2lzX2FtZDtcbiBleHRlcm4gYm9vbCBob3N0X2NwdV9pc19oeWdvbjtcbiBleHRlcm4gYm9vbCBob3N0X2NwdV9pc19hbWRfY29tcGF0aWJsZTtcbiBleHRlcm4gdTY0IGd1ZXN0X3RzY19raHo7XG4mIzQzO2V4dGVybiBzdHJ1Y3Qga3ZtX21tdSBndWVzdF9tbXU7XG4gXG4gI2lmbmRlZiBNQVhfTlJfQ1BVSURfRU5UUklFU1xuICNkZWZpbmUgTUFYX05SX0NQVUlEX0VOVFJJRVMgMTAwXG5AQCAtMzk4LDggJiM0MzszOTksNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4ODZfbW9kZWwodW5zaWduZWQgaW50IGVheClcbiAjZGVmaW5lIFBURV9HRVRfUEEocHRlKVx0XHQoKHB0ZSkgXHUwMDI2IFBIWVNJQ0FMX1BBR0VfTUFTSylcbiAjZGVmaW5lIFBURV9HRVRfUEZOKHB0ZSkgICAgICAgIChQVEVfR0VUX1BBKHB0ZSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpXG4gXG4tLyogR2VuZXJhbCBSZWdpc3RlcnMgaW4gNjQtQml0IE1vZGUgKi9cbi1zdHJ1Y3QgZ3ByNjRfcmVncyB7XG4mIzQzO3N0cnVjdCBndWVzdF9yZWdzIHtcbiBcdHU2NCByYXg7XG4gXHR1NjQgcmN4O1xuIFx0dTY0IHJkeDtcbkBAIC00MTYsOCAmIzQzOzQxNiwzOCBAQCBzdHJ1Y3QgZ3ByNjRfcmVncyB7XG4gXHR1NjQgcjEzO1xuIFx0dTY0IHIxNDtcbiBcdHU2NCByMTU7XG4mIzQzO1x0dTY0IHJmbGFncztcbiB9O1xuIFxuJiM0MztleHRlcm4gc3RydWN0IGd1ZXN0X3JlZ3MgZ3Vlc3RfcmVncztcbiYjNDM7XG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHX09GRlNFVChuYW1lKSBcXFxuJiM0MztcdFtvZmZfIyNuYW1lXSBcJiMzNDtpXCYjMzQ7IChvZmZzZXRvZihzdHJ1Y3QgZ3Vlc3RfcmVncywgbmFtZSkpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEdVRVNUX1JFR1NfT0ZGU0VUU1x0XFxcbiYjNDM7XHRHVUVTVF9SRUdfT0ZGU0VUKHJheCksXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocmN4KSxcdFxcXG4mIzQzO1x0R1VFU1RfUkVHX09GRlNFVChyZHgpLFx0XFxcbiYjNDM7XHRHVUVTVF9SRUdfT0ZGU0VUKHJieCksXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocnNwKSxcdFxcXG4mIzQzO1x0R1VFU1RfUkVHX09GRlNFVChyYnApLFx0XFxcbiYjNDM7XHRHVUVTVF9SRUdfT0ZGU0VUKHJzaSksXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocmRpKSxcdFxcXG4mIzQzO1x0R1VFU1RfUkVHX09GRlNFVChyOCksXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocjkpLFx0XFxcbiYjNDM7XHRHVUVTVF9SRUdfT0ZGU0VUKHIxMCksXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocjExKSxcdFxcXG4mIzQzO1x0R1VFU1RfUkVHX09GRlNFVChyMTIpLFx0XFxcbiYjNDM7XHRHVUVTVF9SRUdfT0ZGU0VUKHIxMyksXHRcXFxuJiM0MztcdEdVRVNUX1JFR19PRkZTRVQocjE0KSxcdFxcXG4mIzQzO1x0R1VFU1RfUkVHX09GRlNFVChyMTUpLFx0XFxcbiYjNDM7XHRHVUVTVF9SRUdfT0ZGU0VUKHJmbGFncylcbiYjNDM7XG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVHKG5hbWUpIFwmIzM0O2d1ZXN0X3JlZ3MgJiM0MzsgJWNbb2ZmX1wmIzM0OyAjbmFtZSBcJiMzNDtdXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEdVRVNUX1NXSVRDSF9HUFJfQVNNKG5hbWUpIFxcXG4mIzQzO1x0XCYjMzQ7eGNoZyAlJVwmIzM0OyAjbmFtZSBcJiMzNDssIFwmIzM0OyBHVUVTVF9SRUcobmFtZSkgXCYjMzQ7XFxuXFx0XCYjMzQ7XG4mIzQzO1xuIHN0cnVjdCBkZXNjNjQge1xuIFx0dTE2IGxpbWl0MDtcbiBcdHUxNiBiYXNlMDtcbkBAIC01ODQsNiAmIzQzOzYxNCwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2NyMCh1NjQgdmFsKVxuIFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7bW92ICUwLCAlJWNyMFwmIzM0OyA6IDogXCYjMzQ7clwmIzM0OyAodmFsKSA6IFwmIzM0O21lbW9yeVwmIzM0Oyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHU2NCBnZXRfY3IyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR1NjQgY3IyO1xuJiM0MztcbiYjNDM7XHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcJiMzNDttb3YgJSVjcjIsICVbY3IyXVwmIzM0O1xuJiM0MztcdFx0XHQgICAgIDogLyogb3V0cHV0ICovIFtjcjJdXCYjMzQ7PXJcJiMzNDsoY3IyKSk7XG4mIzQzO1x0cmV0dXJuIGNyMjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHU2NCBnZXRfY3IzKHZvaWQpXG4ge1xuIFx0dTY0IGNyMztcbkBAIC04NzksNiAmIzQzOzkxOCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfc3NlX3JlZyhpbnQgcmVnLCBjb25zdCBzc2UxMjhfdCAqZGF0YSlcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpbnZscGcodTY0IGFkZHIpXG4mIzQzO3tcbiYjNDM7XHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcJiMzNDtpbnZscGcgKCUwKVwmIzM0OyA6IDogXCYjMzQ7clwmIzM0OyhhZGRyKSA6IFwmIzM0O21lbW9yeVwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIGNwdV9yZWxheCh2b2lkKVxuIHtcbiBcdGFzbSB2b2xhdGlsZShcJiMzNDtyZXA7IG5vcFwmIzM0OyA6OjogXCYjMzQ7bWVtb3J5XCYjMzQ7KTtcbkBAIC05MTUsNiAmIzQzOzk1OSwxMSBAQCBzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqdmNwdV9zYXZlX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCB2Y3B1X2xvYWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGUpO1xuIHZvaWQga3ZtX3g4Nl9zdGF0ZV9jbGVhbnVwKHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSk7XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1feDg2X3N0YXRlX2lzX2d1ZXN0X21vZGUoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN0YXRlLVx1MDAzZW5lc3RlZC5zaXplIFx1MDAyNlx1MDAyNiAoc3RhdGUtXHUwMDNlbmVzdGVkLmZsYWdzIFx1MDAyNiBLVk1fU1RBVEVfTkVTVEVEX0dVRVNUX01PREUpO1xuJiM0Mzt9XG4mIzQzO1xuIGNvbnN0IHN0cnVjdCBrdm1fbXNyX2xpc3QgKmt2bV9nZXRfbXNyX2luZGV4X2xpc3Qodm9pZCk7XG4gY29uc3Qgc3RydWN0IGt2bV9tc3JfbGlzdCAqa3ZtX2dldF9mZWF0dXJlX21zcl9pbmRleF9saXN0KHZvaWQpO1xuIGJvb2wga3ZtX21zcl9pc19pbl9zYXZlX3Jlc3RvcmVfbGlzdCh1MzIgbXNyX2luZGV4KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbmluZGV4IDRiY2ZkNjBlM2FlY2IuLjA0ZjVlMzRkZWEzYWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuQEAgLTI5MCw2ICYjNDM7MjkwLDIzIEBAIHN0cnVjdCB2bXhfbXNyX2VudHJ5IHtcbiBcdHU2NCB2YWx1ZTtcbiB9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDE2KSkpO1xuIFxuJiM0MzsjZGVmaW5lIFZNWF9TV0lUQ0hfR1BSU19BU00gXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYXgpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJ4KSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJjeCkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZHgpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJwKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJzaSkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZGkpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjgpICBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI5KSAgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTApIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjExKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMikgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTMpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE0KSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNSlcbiYjNDM7XG4gI2luY2x1ZGUgXCYjMzQ7ZXZtY3MuaFwmIzM0O1xuIFxuIHN0YXRpYyBpbmxpbmUgaW50IHZteG9uKHU2NCBwaHlzKVxuQEAgLTM2Myw5ICYjNDM7MzgwLDYgQEAgc3RhdGljIGlubGluZSB1NjQgdm1wdHJzdHoodm9pZClcbiBcdHJldHVybiB2YWx1ZTtcbiB9XG4gXG4tLypcbi0gKiBObyBndWVzdCBzdGF0ZSAoZS5nLiBHUFJzKSBpcyBlc3RhYmxpc2hlZCBieSB0aGlzIHZtbGF1bmNoLlxuLSAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbkBAIC0zNzMsMzQgJiM0MzszODcsMjQgQEAgc3RhdGljIGlubGluZSBpbnQgdm1sYXVuY2godm9pZClcbiBcdGlmIChlbmFibGVfZXZtY3MpXG4gXHRcdHJldHVybiBldm1jc192bWxhdW5jaCgpO1xuIFxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7cHVzaCAlJXJicDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyY3g7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcmR4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyZGk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICQwO1wmIzM0O1xuJiM0MztcdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O3B1c2ggJDA7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDt2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O2xlYSAxZiglJXJpcCksICUlcmF4O1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7dm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuIFx0XHRcdCAgICAgXCYjMzQ7dm1sYXVuY2g7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDtpbmNxICglJXJzcCk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDsxOiBwb3AgJSVyYXg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyZGk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyc2k7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyZHg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyY3g7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYnA7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7MTogO1wmIzM0O1xuJiM0MztcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbiYjNDM7XHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYXg7XCYjMzQ7XG4gXHRcdFx0ICAgICA6IFtyZXRdXCYjMzQ7PVx1MDAyNmFcJiMzNDsocmV0KVxuIFx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCYjMzQ7clwmIzM0OygodTY0KUhPU1RfUlNQKSxcbi1cdFx0XHQgICAgICAgW2hvc3RfcmlwXVwmIzM0O3JcJiMzNDsoKHU2NClIT1NUX1JJUClcbi1cdFx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0OywgXCYjMzQ7cmJ4XCYjMzQ7LCBcJiMzNDtyOFwmIzM0OywgXCYjMzQ7cjlcJiMzNDssIFwmIzM0O3IxMFwmIzM0Oyxcbi1cdFx0XHQgICAgICAgXCYjMzQ7cjExXCYjMzQ7LCBcJiMzNDtyMTJcJiMzNDssIFwmIzM0O3IxM1wmIzM0OywgXCYjMzQ7cjE0XCYjMzQ7LCBcJiMzNDtyMTVcJiMzNDspO1xuJiM0MztcdFx0XHQgICAgICAgW2hvc3RfcmlwXVwmIzM0O3JcJiMzNDsoKHU2NClIT1NUX1JJUCksXG4mIzQzO1x0XHRcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcbiYjNDM7XHRcdFx0ICAgICA6IFwmIzM0O21lbW9yeVwmIzM0OywgXCYjMzQ7Y2NcJiMzNDspO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tLypcbi0gKiBObyBndWVzdCBzdGF0ZSAoZS5nLiBHUFJzKSBpcyBlc3RhYmxpc2hlZCBieSB0aGlzIHZtcmVzdW1lLlxuLSAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHZtcmVzdW1lKHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbkBAIC00MDgsMjggJiM0Mzs0MTIsMjEgQEAgc3RhdGljIGlubGluZSBpbnQgdm1yZXN1bWUodm9pZClcbiBcdGlmIChlbmFibGVfZXZtY3MpXG4gXHRcdHJldHVybiBldm1jc192bXJlc3VtZSgpO1xuIFxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7cHVzaCAlJXJicDtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyY3g7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICUlcmR4O1wmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJzaTtcJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O3B1c2ggJSVyZGk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwdXNoICQwO1wmIzM0O1xuJiM0MztcdF9fYXNtX18gX192b2xhdGlsZV9fKFwmIzM0O3B1c2ggJDA7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDt2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTtcJiMzNDtcbiBcdFx0XHQgICAgIFwmIzM0O2xlYSAxZiglJXJpcCksICUlcmF4O1wmIzM0O1xuIFx0XHRcdCAgICAgXCYjMzQ7dm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuIFx0XHRcdCAgICAgXCYjMzQ7dm1yZXN1bWU7XCYjMzQ7XG4gXHRcdFx0ICAgICBcJiMzNDtpbmNxICglJXJzcCk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDsxOiBwb3AgJSVyYXg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyZGk7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyc2k7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyZHg7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyY3g7XCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYnA7XCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7MTogO1wmIzM0O1xuJiM0MztcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbiYjNDM7XHRcdFx0ICAgICBcJiMzNDtwb3AgJSVyYXg7XCYjMzQ7XG4gXHRcdFx0ICAgICA6IFtyZXRdXCYjMzQ7PVx1MDAyNmFcJiMzNDsocmV0KVxuIFx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCYjMzQ7clwmIzM0OygodTY0KUhPU1RfUlNQKSxcbi1cdFx0XHQgICAgICAgW2hvc3RfcmlwXVwmIzM0O3JcJiMzNDsoKHU2NClIT1NUX1JJUClcbi1cdFx0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0OywgXCYjMzQ7cmJ4XCYjMzQ7LCBcJiMzNDtyOFwmIzM0OywgXCYjMzQ7cjlcJiMzNDssIFwmIzM0O3IxMFwmIzM0Oyxcbi1cdFx0XHQgICAgICAgXCYjMzQ7cjExXCYjMzQ7LCBcJiMzNDtyMTJcJiMzNDssIFwmIzM0O3IxM1wmIzM0OywgXCYjMzQ7cjE0XCYjMzQ7LCBcJiMzNDtyMTVcJiMzNDspO1xuJiM0MztcdFx0XHQgICAgICAgW2hvc3RfcmlwXVwmIzM0O3JcJiMzNDsoKHU2NClIT1NUX1JJUCksXG4mIzQzO1x0XHRcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcbiYjNDM7XHRcdFx0ICAgICA6IFwmIzM0O21lbW9yeVwmIzM0OywgXCYjMzQ7Y2NcJiMzNDspO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNcbmluZGV4IDFkNzJkY2RmY2UzYjYuLjNlMzUzYWMzOWVlYjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jXG5AQCAtNzQsNyAmIzQzOzc0LDcgQEAgdGVzdF9hc3NlcnQoYm9vbCBleHAsIGNvbnN0IGNoYXIgKmV4cF9zdHIsXG4gXHRpZiAoIShleHApKSB7XG4gXHRcdHZhX3N0YXJ0KGFwLCBmbXQpO1xuIFxuLVx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7PT09PSBUZXN0IEFzc2VydGlvbiBGYWlsdXJlID09PT1cXG5cJiMzNDtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXG49PT09IFRlc3QgQXNzZXJ0aW9uIEZhaWx1cmUgPT09PVxcblwmIzM0O1xuIFx0XHRcdFwmIzM0OyAgJXM6JXU6ICVzXFxuXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7ICBwaWQ9JWQgdGlkPSVkIGVycm5vPSVkIC0gJXNcXG5cJiMzNDssXG4gXHRcdFx0ZmlsZSwgbGluZSwgZXhwX3N0ciwgZ2V0cGlkKCksIGt2bV9nZXR0aWQoKSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG5pbmRleCBlZjU2ZGNlZmUwMTE5Li5kMzFmYTgxZWEwNzU2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG5AQCAtMjgsNiAmIzQzOzI4LDkgQEAgYm9vbCBob3N0X2NwdV9pc19oeWdvbjtcbiBib29sIGhvc3RfY3B1X2lzX2FtZF9jb21wYXRpYmxlO1xuIGJvb2wgaXNfZm9yY2VkX2VtdWxhdGlvbl9lbmFibGVkO1xuIHU2NCBndWVzdF90c2Nfa2h6O1xuJiM0MztzdHJ1Y3Qga3ZtX21tdSBndWVzdF9tbXU7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZ3Vlc3RfcmVncyBndWVzdF9yZWdzO1xuIFxuIGNvbnN0IGNoYXIgKmV4X3N0cihpbnQgdmVjdG9yKVxuIHtcbkBAIC04MjksNiAmIzQzOzgzMiwxNyBAQCB2b2lkIGt2bV9hcmNoX3ZtX3Bvc3RfY3JlYXRlKHN0cnVjdCBrdm1fdm0gKnZtLCB1bnNpZ25lZCBpbnQgbnJfdmNwdXMpXG4gXHRURVNUX0FTU0VSVChyIFx1MDAzZSAwLCBcJiMzNDtLVk1fR0VUX1RTQ19LSFogZGlkIG5vdCBwcm92aWRlIGEgdmFsaWQgVFNDIGZyZXF1ZW5jeS5cJiMzNDspO1xuIFx0Z3Vlc3RfdHNjX2toeiA9IHI7XG4gXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgZ3Vlc3RfdHNjX2toeik7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIGd1ZXN0IE1NVSBpcyBqdXN0IGEgcGxhY2Vob2xkZXIgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gUFRFIG1hc2tzXG4mIzQzO1x0ICogKGZvciBub3cpLiBUaGUgZ3Vlc3QgZG9lcyBub3QgaGF2ZSBtYXBwaW5ncyBmb3IgaXRzIG93biBwYWdlIHRhYmxlc1xuJiM0MztcdCAqIGJ5IGRlZmF1bHQsIHNvIGFueSBtZWFuaW5nZnVsIHVzZSBvZiBndWVzdCBwYWdlIHRhYmxlcyByZXF1aXJlc1xuJiM0MztcdCAqIGV4cGxpY2l0IHNldHVwIGJ5IHRoZSB0ZXN0LiBaZXJvIHRoZSBQR0QgdG8gbWFrZSBpdCBvYnZpb3VzIHRoZSBndWVzdFxuJiM0MztcdCAqIHBhZ2UgdGFibGVzIGFyZSBub3QgaW1tZWRpYXRlbHkgdXNhYmxlIGJ5IGd1ZXN0IGNvZGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0Z3Vlc3RfbW11ID0gdm0tXHUwMDNlbW11O1xuJiM0MztcdGd1ZXN0X21tdS5wZ2QgPSAwO1xuJiM0MztcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBndWVzdF9tbXUpO1xuIH1cbiBcbiB2b2lkIHZjcHVfYXJjaF9zZXRfZW50cnlfcG9pbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpndWVzdF9jb2RlKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmNcbmluZGV4IDE0NDViODkwOTg2ZmQuLmIwNWJlNTBmMDc1ZDYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmNcbkBAIC0xMyw5ICYjNDM7MTMsNiBAQFxuIFxuICNkZWZpbmUgU0VWX0RFVl9QQVRIIFwmIzM0Oy9kZXYvc2V2XCYjMzQ7XG4gXG4tc3RydWN0IGdwcjY0X3JlZ3MgZ3Vlc3RfcmVncztcbi11NjQgcmZsYWdzO1xuLVxuIC8qIEFsbG9jYXRlIG1lbW9yeSByZWdpb25zIGZvciBuZXN0ZWQgU1ZNIHRlc3RzLlxuICAqXG4gICogSW5wdXQgQXJnczpcbkBAIC0xMzcsNDYgJiM0MzsxMzQsNDcgQEAgdm9pZCBnZW5lcmljX3N2bV9zZXR1cChzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtLCB2b2lkICpndWVzdF9yaXApXG4gICogc2F2ZS9yZXN0b3JlIDY0LWJpdCBnZW5lcmFsIHJlZ2lzdGVycyBleGNlcHQgcmF4LCByaXAsIHJzcFxuICAqIHdoaWNoIGFyZSBkaXJlY3RseSBoYW5kZWQgdGhyb3VnaCB0aGUgVk1DQiBndWVzdCBwcm9jZXNzb3Igc3RhdGVcbiAgKi9cbi0jZGVmaW5lIFNBVkVfR1BSX0NcdFx0XHRcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcmJ4LCBndWVzdF9yZWdzJiM0MzsweDIwXFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXJjeCwgZ3Vlc3RfcmVncyYjNDM7MHgxMFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyZHgsIGd1ZXN0X3JlZ3MmIzQzOzB4MThcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcmJwLCBndWVzdF9yZWdzJiM0MzsweDMwXFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXJzaSwgZ3Vlc3RfcmVncyYjNDM7MHgzOFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyZGksIGd1ZXN0X3JlZ3MmIzQzOzB4NDBcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcjgsICBndWVzdF9yZWdzJiM0MzsweDQ4XFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXI5LCAgZ3Vlc3RfcmVncyYjNDM7MHg1MFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyMTAsIGd1ZXN0X3JlZ3MmIzQzOzB4NThcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcjExLCBndWVzdF9yZWdzJiM0MzsweDYwXFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXIxMiwgZ3Vlc3RfcmVncyYjNDM7MHg2OFxcblxcdFwmIzM0O1x0XFxcbi1cdFwmIzM0O3hjaGcgJSVyMTMsIGd1ZXN0X3JlZ3MmIzQzOzB4NzBcXG5cXHRcJiMzNDtcdFxcXG4tXHRcJiMzNDt4Y2hnICUlcjE0LCBndWVzdF9yZWdzJiM0MzsweDc4XFxuXFx0XCYjMzQ7XHRcXFxuLVx0XCYjMzQ7eGNoZyAlJXIxNSwgZ3Vlc3RfcmVncyYjNDM7MHg4MFxcblxcdFwmIzM0O1xuLVxuLSNkZWZpbmUgTE9BRF9HUFJfQyAgICAgIFNBVkVfR1BSX0NcbiYjNDM7I2RlZmluZSBTVk1fU1dJVENIX0dQUlNfQVNNIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJ4KSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJjeCkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZHgpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJwKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJzaSkgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZGkpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjgpICBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI5KSAgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTApIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjExKSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMikgXFxcbiYjNDM7XHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTMpIFxcXG4mIzQzO1x0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE0KSBcXFxuJiM0MztcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNSlcbiBcbiAvKlxuICAqIHNlbGZ0ZXN0cyBkbyBub3QgdXNlIGludGVycnVwdHMgc28gd2UgZHJvcHBlZCBjbGdpL3N0aS9jbGkvc3RnaVxuLSAqIGZvciBub3cuIHJlZ2lzdGVycyBpbnZvbHZlZCBpbiBMT0FEL1NBVkVfR1BSX0MgYXJlIGV2ZW50dWFsbHlcbiYjNDM7ICogZm9yIG5vdy4gUmVnaXN0ZXJzIGludm9sdmVkIGluIFNWTV9TV0lUQ0hfR1BSU19BU00gYXJlIGV2ZW50dWFsbHlcbiAgKiB1bm1vZGlmaWVkIHNvIHRoZXkgZG8gbm90IG5lZWQgdG8gYmUgaW4gdGhlIGNsb2JiZXIgbGlzdC5cbiAgKi9cbiB2b2lkIHJ1bl9ndWVzdChzdHJ1Y3Qgdm1jYiAqdm1jYiwgdTY0IHZtY2JfZ3BhKVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG4gXHRcdFwmIzM0O3ZtbG9hZCAlW3ZtY2JfZ3BhXVxcblxcdFwmIzM0O1xuLVx0XHRcJiMzNDttb3YgcmZsYWdzLCAlJXIxNVxcblxcdFwmIzM0O1x0Ly8gcmZsYWdzXG4tXHRcdFwmIzM0O21vdiAlJXIxNSwgMHgxNzAoJVt2bWNiXSlcXG5cXHRcJiMzNDtcbi1cdFx0XCYjMzQ7bW92IGd1ZXN0X3JlZ3MsICUlcjE1XFxuXFx0XCYjMzQ7XHQvLyByYXhcbi1cdFx0XCYjMzQ7bW92ICUlcjE1LCAweDFmOCglW3ZtY2JdKVxcblxcdFwmIzM0O1xuLVx0XHRMT0FEX0dQUl9DXG4mIzQzO1x0XHRcJiMzNDttb3YgXCYjMzQ7IEdVRVNUX1JFRyhyZmxhZ3MpIFwmIzM0OywgJSVyMTVcXG5cXHRcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O21vdiAlJXIxNSwgJVt2bWNiX3JmbGFnc11cXG5cXHRcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O21vdiBcJiMzNDsgR1VFU1RfUkVHKHJheCkgXCYjMzQ7LCAlJXIxNVxcblxcdFwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7bW92ICUlcjE1LCAlW3ZtY2JfcmF4XVxcblxcdFwmIzM0O1xuJiM0MztcdFx0U1ZNX1NXSVRDSF9HUFJTX0FTTVxuIFx0XHRcJiMzNDt2bXJ1biAlW3ZtY2JfZ3BhXVxcblxcdFwmIzM0O1xuLVx0XHRTQVZFX0dQUl9DXG4tXHRcdFwmIzM0O21vdiAweDE3MCglW3ZtY2JdKSwgJSVyMTVcXG5cXHRcJiMzNDtcdC8vIHJmbGFnc1xuLVx0XHRcJiMzNDttb3YgJSVyMTUsIHJmbGFnc1xcblxcdFwmIzM0O1xuLVx0XHRcJiMzNDttb3YgMHgxZjgoJVt2bWNiXSksICUlcjE1XFxuXFx0XCYjMzQ7XHQvLyByYXhcbi1cdFx0XCYjMzQ7bW92ICUlcjE1LCBndWVzdF9yZWdzXFxuXFx0XCYjMzQ7XG4mIzQzO1x0XHRTVk1fU1dJVENIX0dQUlNfQVNNXG4mIzQzO1x0XHRcJiMzNDttb3YgJVt2bWNiX3JmbGFnc10sICUlcjE1XFxuXFx0XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDttb3YgJSVyMTUsIFwmIzM0OyBHVUVTVF9SRUcocmZsYWdzKSBcJiMzNDtcXG5cXHRcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O21vdiAlW3ZtY2JfcmF4XSwgJSVyMTVcXG5cXHRcJiMzNDtcdC8vIHJheFxuJiM0MztcdFx0XCYjMzQ7bW92ICUlcjE1LCBcJiMzNDsgR1VFU1RfUkVHKHJheCkgXCYjMzQ7XFxuXFx0XCYjMzQ7XG4gXHRcdFwmIzM0O3Ztc2F2ZSAlW3ZtY2JfZ3BhXVxcblxcdFwmIzM0O1xuLVx0XHQ6IDogW3ZtY2JdIFwmIzM0O3JcJiMzNDsgKHZtY2IpLCBbdm1jYl9ncGFdIFwmIzM0O2FcJiMzNDsgKHZtY2JfZ3BhKVxuJiM0MztcdFx0OiBbdm1jYl9yZmxhZ3NdIFwmIzM0OyYjNDM7bVwmIzM0OyAodm1jYi1cdTAwM2VzYXZlLnJmbGFncyksXG4mIzQzO1x0XHQgIFt2bWNiX3JheF0gXCYjMzQ7JiM0MzttXCYjMzQ7ICh2bWNiLVx1MDAzZXNhdmUucmF4KVxuJiM0MztcdFx0OiBbdm1jYl9ncGFdIFwmIzM0O2FcJiMzNDsgKHZtY2JfZ3BhKSxcbiYjNDM7XHRcdCAgR1VFU1RfUkVHU19PRkZTRVRTXG4gXHRcdDogXCYjMzQ7cjE1XCYjMzQ7LCBcJiMzNDttZW1vcnlcJiMzNDspO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuY1xuaW5kZXggZTdkZDU3OTE5NTliYS4uMzgwNTBjNjBhMDY3MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmNcbkBAIC0xMCwzNiAmIzQzOzEwLDggQEBcbiBcbiB2b2lkIHVjYWxsX2FyY2hfZG9fdWNhbGwoZ3ZhX3QgdWMpXG4ge1xuLVx0Lypcbi1cdCAqIEZJWE1FOiBSZXZlcnQgdGhpcyBoYWNrICh0aGUgZW50aXJlIGNvbW1pdCB0aGF0IGFkZGVkIGl0KSBvbmNlIG5WTVhcbi1cdCAqIHByZXNlcnZlcyBMMiBHUFJzIGFjcm9zcyBhIG5lc3RlZCBWTS1FeGl0LiAgSWYgYSB1Y2FsbCBmcm9tIEwyLCBlLmcuXG4tXHQgKiB0byBkbyBhIEdVRVNUX1NZTkMoKSwgbGFuZHMgdGhlIHZDUFUgaW4gTDEsIGFueSBhbmQgYWxsIEdQUnMgY2FuIGJlXG4tXHQgKiBjbG9iYmVyZWQgYnkgTDEuICBTYXZlIGFuZCByZXN0b3JlIG5vbi12b2xhdGlsZSBHUFJzIChjbG9iYmVyaW5nIFJCUFxuLVx0ICogaW4gcGFydGljdWxhciBpcyBwcm9ibGVtYXRpYykgYWxvbmcgd2l0aCBSRFggYW5kIFJESSAod2hpY2ggYXJlXG4tXHQgKiBpbnB1dHMpLCBhbmQgY2xvYmJlciB2b2xhdGlsZSBHUFJzLiAqc2lnaCpcbi1cdCAqL1xuLSNkZWZpbmUgSE9SUklGSUNfTDJfVUNBTExfQ0xPQkJFUl9IQUNLXHRcXFxuLVx0XCYjMzQ7cmN4XCYjMzQ7LCBcJiMzNDtyc2lcJiMzNDssIFwmIzM0O3I4XCYjMzQ7LCBcJiMzNDtyOVwmIzM0OywgXCYjMzQ7cjEwXCYjMzQ7LCBcJiMzNDtyMTFcJiMzNDtcbi1cbi1cdGFzbSB2b2xhdGlsZShcJiMzNDtwdXNoICUlcmJwXFxuXFx0XCYjMzQ7XG4tXHRcdCAgICAgXCYjMzQ7cHVzaCAlJXIxNVxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3B1c2ggJSVyMTRcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwdXNoICUlcjEzXFxuXFx0XCYjMzQ7XG4tXHRcdCAgICAgXCYjMzQ7cHVzaCAlJXIxMlxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O3B1c2ggJSVyYnhcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwdXNoICUlcmR4XFxuXFx0XCYjMzQ7XG4tXHRcdCAgICAgXCYjMzQ7cHVzaCAlJXJkaVxcblxcdFwmIzM0O1xuLVx0XHQgICAgIFwmIzM0O2luICVbcG9ydF0sICUlYWxcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyZGlcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyZHhcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyYnhcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyMTJcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyMTNcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyMTRcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyMTVcXG5cXHRcJiMzNDtcbi1cdFx0ICAgICBcJiMzNDtwb3AgJSVyYnBcXG5cXHRcJiMzNDtcbi1cdFx0OiA6IFtwb3J0XSBcJiMzNDtkXCYjMzQ7IChVQ0FMTF9QSU9fUE9SVCksIFwmIzM0O0RcJiMzNDsgKHVjKSA6IFwmIzM0O3JheFwmIzM0OywgXCYjMzQ7bWVtb3J5XCYjMzQ7LFxuLVx0XHQgICAgIEhPUlJJRklDX0wyX1VDQUxMX0NMT0JCRVJfSEFDSyk7XG4mIzQzO1x0YXNtIHZvbGF0aWxlKFwmIzM0O2luICVbcG9ydF0sICUlYWxcJiMzNDtcbiYjNDM7XHRcdDogOiBbcG9ydF0gXCYjMzQ7ZFwmIzM0OyAoVUNBTExfUElPX1BPUlQpLCBcJiMzNDtEXCYjMzQ7ICh1YykgOiBcJiMzNDtyYXhcJiMzNDssIFwmIzM0O21lbW9yeVwmIzM0Oyk7XG4gfVxuIFxuIHZvaWQgKnVjYWxsX2FyY2hfZ2V0X3VjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcbmluZGV4IDc3Y2U4N2M0MWE4NjguLmFhN2YzYjQwNWZkMzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY1xuQEAgLTIyLDkgJiM0MzsyMiw2IEBAXG4gXG4gI2RlZmluZSBTWU5DX1BPUlRcdDB4ZVxuIFxuLSNkZWZpbmUgU1RSKHgpICN4XG4tI2RlZmluZSBYU1RSKHMpIFNUUihzKVxuLVxuIC8qXG4gICogU01JIGhhbmRsZXI6IHJ1bnMgaW4gcmVhbC1hZGRyZXNzIG1vZGUuXG4gICogUmVwb3J0cyBTTVJBTV9TVEFHRSB2aWEgcG9ydCBJTywgdGhlbiBkb2VzIFJTTS5cbkBAIC0zNyw3ICYjNDM7MzQsNyBAQCBzdGF0aWMgdTggc21pX2hhbmRsZXJbXSA9IHtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc3luY193aXRoX2hvc3QodTY0IHBoYXNlKVxuIHtcbi1cdGFzbSB2b2xhdGlsZShcJiMzNDtpbiAkXCYjMzQ7IFhTVFIoU1lOQ19QT1JUKSBcJiMzNDssICUlYWwgXFxuXCYjMzQ7XG4mIzQzO1x0YXNtIHZvbGF0aWxlKFwmIzM0O2luICRcJiMzNDsgX19zdHJpbmdpZnkoU1lOQ19QT1JUKSBcJiMzNDssICUlYWwgXFxuXCYjMzQ7XG4gXHRcdCAgICAgOiBcJiMzNDsmIzQzO2FcJiMzNDsgKHBoYXNlKSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZml4X2h5cGVyY2FsbF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jXG5pbmRleCA3NTNhMGU3MzBlYThkLi40OTMxZWMyMjc2OGVlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9maXhfaHlwZXJjYWxsX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9maXhfaHlwZXJjYWxsX3Rlc3QuY1xuQEAgLTYsNyAmIzQzOzYsNiBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGFyYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX3BhcmEuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtrdm1fdGVzdF9oYXJuZXNzLmhcJiMzNDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmJhMWQ3MjMwMDFlOTRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmNcbkBAIC0wLDAgJiM0MzsxLDI5MSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2dldG9wdC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt0ZXN0X3V0aWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrdm1fdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Byb2Nlc3Nvci5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3N2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm14LmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTlJfSVRFUkFUSU9OU1x0XHQ1MDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUFRSU19QRVJfUFRFXHRcdDUxMlxuJiM0MzsjZGVmaW5lIFBYRF9JTkRFWCh2YWRkciwgbGV2ZWwpXHQoKCh2YWRkcikgXHUwMDNlXHUwMDNlIFBHX0xFVkVMX1NISUZUKGxldmVsKSkgXHUwMDI2IChQVFJTX1BFUl9QVEUgLSAxKSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgVEVTVF9NRU1fQkFTRV9HVkFcdDB4YzAwMDAwMDBVTExcbiYjNDM7I2RlZmluZSBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVFx0MHhkMDAwMDAwMFVMTFxuJiM0MzsjZGVmaW5lIFBBVFRFUk5cdFx0XHQweGFiY2RlZmFiY2RlZmFiY2RVTExcbiYjNDM7XG4mIzQzO3N0YXRpYyB1NjQgZXhwZWN0ZWRfdmFkZHI7XG4mIzQzO3N0YXRpYyB1NjQgZ3Vlc3RfZmF1bHRzO1xuJiM0MztcbiYjNDM7c3RhdGljIHU2NCAqZ3Vlc3RfZ2V0X3B0ZSh1NjQgdmFkZHIpXG4mIzQzO3tcbiYjNDM7XHR1NjQgcGd0YWJsZV9wYSwgcHRlO1xuJiM0MztcdHU2NCAqcGd0YWJsZTtcbiYjNDM7XHRpbnQgbGV2ZWw7XG4mIzQzO1xuJiM0MztcdGxldmVsID0gKGdldF9jcjQoKSBcdTAwMjYgWDg2X0NSNF9MQTU3KSA/IFBHX0xFVkVMXzI1NlQgOiBQR19MRVZFTF81MTJHO1xuJiM0MztcbiYjNDM7XHRwZ3RhYmxlX3BhID0gZ2V0X2NyMygpIFx1MDAyNiBQSFlTSUNBTF9QQUdFX01BU0s7XG4mIzQzO1x0Zm9yICg7IGxldmVsIFx1MDAzZSBQR19MRVZFTF80SzsgbGV2ZWwtLSkge1xuJiM0MztcdFx0cGd0YWJsZSA9ICh1NjQgKikocGd0YWJsZV9wYSAmIzQzOyBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVCk7XG4mIzQzO1x0XHRwdGUgPSBwZ3RhYmxlW1BYRF9JTkRFWCh2YWRkciwgbGV2ZWwpXTtcbiYjNDM7XHRcdEdVRVNUX0FTU0VSVChwdGUgXHUwMDI2IFBURV9QUkVTRU5UX01BU0soXHUwMDI2Z3Vlc3RfbW11KSk7XG4mIzQzO1x0XHRHVUVTVF9BU1NFUlQoIShwdGUgXHUwMDI2IFBURV9IVUdFX01BU0soXHUwMDI2Z3Vlc3RfbW11KSkpO1xuJiM0MztcdFx0cGd0YWJsZV9wYSA9IFBURV9HRVRfUEEocHRlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBndGFibGUgPSAodTY0ICopKHBndGFibGVfcGEgJiM0MzsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQpO1xuJiM0MztcdHJldHVybiBcdTAwMjZwZ3RhYmxlW1BYRF9JTkRFWCh2YWRkciwgUEdfTEVWRUxfNEspXTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3RfcGZfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncylcbiYjNDM7e1xuJiM0MztcdHU2NCBmYXVsdF9hZGRyO1xuJiM0MztcdHU2NCAqcHRlcDtcbiYjNDM7XG4mIzQzO1x0ZmF1bHRfYWRkciA9IGdldF9jcjIoKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlRfRVEoZmF1bHRfYWRkciwgUkVBRF9PTkNFKGV4cGVjdGVkX3ZhZGRyKSk7XG4mIzQzO1xuJiM0MztcdHB0ZXAgPSBndWVzdF9nZXRfcHRlKGZhdWx0X2FkZHIpO1xuJiM0MztcdEdVRVNUX0FTU0VSVChwdGVwKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQoISgqcHRlcCBcdTAwMjYgUFRFX1BSRVNFTlRfTUFTSyhcdTAwMjZndWVzdF9tbXUpKSk7XG4mIzQzO1xuJiM0MztcdCpwdGVwIHw9IFBURV9QUkVTRU5UX01BU0soXHUwMDI2Z3Vlc3RfbW11KTtcbiYjNDM7XHRndWVzdF9mYXVsdHMmIzQzOyYjNDM7O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBndWVzdF9hY2Nlc3NfbWVtb3J5KHZvaWQgKmFyZylcbiYjNDM7e1xuJiM0MztcdHU2NCB2YWRkciwgdmFsO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyA7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR2YWRkciA9IFRFU1RfTUVNX0JBU0VfR1ZBICYjNDM7IChpICUgUFRSU19QRVJfUFRFKSAqIFBBR0VfU0laRTtcbiYjNDM7XHRcdFdSSVRFX09OQ0UoZXhwZWN0ZWRfdmFkZHIsIHZhZGRyKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSZWFkIHRvIHRyaWdnZXIgI1BGICovXG4mIzQzO1x0XHR2YWwgPSBSRUFEX09OQ0UoKih1NjQgKil2YWRkcik7XG4mIzQzO1x0XHRHVUVTVF9BU1NFUlRfRVEodmFsLCBQQVRURVJOKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBDbGVhciB0aGUgcHJlc2VudCBiaXQgYWdhaW4gc28gaXQgZmF1bHRzIG5leHQgdGltZSAqL1xuJiM0MztcdFx0Kmd1ZXN0X2dldF9wdGUodmFkZHIpIFx1MDAyNj0gflBURV9QUkVTRU5UX01BU0soXHUwMDI2Z3Vlc3RfbW11KTtcbiYjNDM7XHRcdGludmxwZyh2YWRkcik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBsMV9zdm1fY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtKVxuJiM0Mzt7XG4mIzQzO1x0Z2VuZXJpY19zdm1fc2V0dXAoc3ZtLCBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcbiYjNDM7XHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zIHw9IEJJVChVRF9WRUNUT1IpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoMSkge1xuJiM0MztcdFx0cnVuX2d1ZXN0KHN2bS1cdTAwM2V2bWNiLCBzdm0tXHUwMDNldm1jYl9ncGEpO1xuJiM0MztcdFx0R1VFU1RfQVNTRVJUX0VRKHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9jb2RlLFxuJiM0MztcdFx0XHRcdChTVk1fRVhJVF9FWENQX0JBU0UgJiM0MzsgVURfVkVDVE9SKSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4mIzQzO3tcbiYjNDM7XHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteCkpO1xuJiM0MztcdHByZXBhcmVfdm1jcyh2bXgsIGd1ZXN0X2FjY2Vzc19tZW1vcnkpO1xuJiM0MztcbiYjNDM7XHQvKiBJbnRlcmNlcHQgVUQsIGlnbm9yZSBhbnkgI1BGICovXG4mIzQzO1x0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEVYQ0VQVElPTl9CSVRNQVAsIEJJVChVRF9WRUNUT1IpIHwgQklUKFBGX1ZFQ1RPUikpKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BU0ssIDApKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BVENILCAtMSkpO1xuJiM0MztcbiYjNDM7XHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xuJiM0MztcdHdoaWxlICgxKSB7XG4mIzQzO1x0XHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpO1xuJiM0MztcdFx0R1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pIFx1MDAyNiAweGZmLCBVRF9WRUNUT1IpO1xuJiM0MztcdFx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqdGVzdF9kYXRhKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKVxuJiM0MztcdFx0bDFfc3ZtX2NvZGUodGVzdF9kYXRhKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRsMV92bXhfY29kZSh0ZXN0X2RhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqc2lndXNyX3RocmVhZF9mbih2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHRwdGhyZWFkX3QgdmNwdV90aHJlYWQgPSAocHRocmVhZF90KWFyZztcbiYjNDM7XG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0cHRocmVhZF90ZXN0Y2FuY2VsKCk7XG4mIzQzO1x0XHRwdGhyZWFkX2tpbGwodmNwdV90aHJlYWQsIFNJR1VTUjEpO1xuJiM0MztcdFx0dXNsZWVwKG1zZWNzX3RvX3VzZWNzKDEpKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGR1bW15X3NpZ25hbF9oYW5kbGVyKGludCBzaWdubykge31cbiYjNDM7c3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gc2E7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2Y3B1X3NpZ3Vzcl9saXN0ZW4odm9pZClcbiYjNDM7e1xuJiM0MztcdHNhLnNhX2hhbmRsZXIgPSBkdW1teV9zaWduYWxfaGFuZGxlcjtcbiYjNDM7XHRzaWdhY3Rpb24oU0lHVVNSMSwgXHUwMDI2c2EsIE5VTEwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2Y3B1X3NpZ3Vzcl9pZ25vcmUodm9pZClcbiYjNDM7e1xuJiM0MztcdHNhLnNhX2hhbmRsZXIgPSBTSUdfSUdOO1xuJiM0MztcdHNpZ2FjdGlvbihTSUdVU1IxLCBcdTAwMjZzYSwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGt2bV94ODZfc3RhdGVfcXVldWVfdWQoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24ucGVuZGluZyB8fCBzdGF0ZS1cdTAwM2VldmVudHMuZXhjZXB0aW9uLmluamVjdGVkKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzdGF0ZS1cdTAwM2VldmVudHMuZmxhZ3MgfD0gS1ZNX1ZDUFVFVkVOVF9WQUxJRF9QQVlMT0FEO1xuJiM0MztcdHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24ucGVuZGluZyA9IHRydWU7XG4mIzQzO1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5pbmplY3RlZCA9IGZhbHNlO1xuJiM0MztcdHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24ubnIgPSBVRF9WRUNUT1I7XG4mIzQzO1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5oYXNfZXJyb3JfY29kZSA9IGZhbHNlO1xuJiM0MztcdHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb25faGFzX3BheWxvYWQgPSBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnVuX3Rlc3QoYm9vbCBuZXN0ZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGU7XG4mIzQzO1x0aW50IHIsIGksIGxldmVsO1xuJiM0MztcdHB0aHJlYWRfdCBzaWd1c3JfdGhyZWFkO1xuJiM0MztcdGdwYV90IGdwYSwgcGd0YWJsZV9ncGE7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuJiM0MztcdHN0cnVjdCBrdm1fdm0gKnZtO1xuJiM0MztcdHN0cnVjdCB1Y2FsbCB1YztcbiYjNDM7XHR1NjQgKnBndGFibGU7XG4mIzQzO1x0Z3ZhX3QgZ3ZhO1xuJiM0MztcdHU2NCBwdGU7XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgbmVzdGVkID8gbDFfZ3Vlc3RfY29kZSA6IGd1ZXN0X2FjY2Vzc19tZW1vcnkpO1xuJiM0MztcdHZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIodm0sIFBGX1ZFQ1RPUiwgZ3Vlc3RfcGZfaGFuZGxlcik7XG4mIzQzO1x0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FWENFUFRJT05fUEFZTE9BRCwgLTJ1bCk7XG4mIzQzO1xuJiM0MztcdGlmIChuZXN0ZWQpIHtcbiYjNDM7XHRcdGlmIChrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKVxuJiM0MztcdFx0XHR2Y3B1X2FsbG9jX3N2bSh2bSwgXHUwMDI2Z3ZhKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0dmNwdV9hbGxvY192bXgodm0sIFx1MDAyNmd2YSk7XG4mIzQzO1x0XHR2Y3B1X2FyZ3Nfc2V0KHZjcHUsIDEsIGd2YSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBbGxvY2F0ZSBhIHBhZ2UgYW5kIHdyaXRlIHRoZSBwYXR0ZXJuIHRvIGl0ICovXG4mIzQzO1x0Z3ZhID0gdm1fYWxsb2NfcGFnZSh2bSk7XG4mIzQzO1x0Kih1NjQgKilhZGRyX2d2YTJodmEodm0sIGd2YSkgPSBQQVRURVJOO1xuJiM0MztcdGdwYSA9IGFkZHJfZ3ZhMmdwYSh2bSwgZ3ZhKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYXAgYWxsIHZpcnR1YWwgYWRkcmVzc2VzIHRvIHRoZSBwYXR0ZXJuIHBhZ2UgYW5kIGNsZWFyIHRoZSBwcmVzZW50XG4mIzQzO1x0ICogYml0IHN1Y2ggdGhhdCBndWVzdCBhY2Nlc3NlcyB3aWxsIGNhdXNlIGEgI1BGLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFBUUlNfUEVSX1BURTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGd2YSA9IFRFU1RfTUVNX0JBU0VfR1ZBICYjNDM7IGkgKiBnZXRwYWdlc2l6ZSgpO1xuJiM0MztcdFx0dmlydF9wZ19tYXAodm0sIGd2YSwgZ3BhKTtcbiYjNDM7XHRcdCp2bV9nZXRfcHRlKHZtLCBndmEpIFx1MDAyNj0gflBURV9QUkVTRU5UX01BU0soXHUwMDI2dm0tXHUwMDNlbW11KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTm93IGNyZWF0ZSBtYXBwaW5ncyBmb3IgdGhlIHBhZ2UgdGFibGVzIGNyZWF0ZWQgYWJvdmUgc28gdGhhdCB0aGVcbiYjNDM7XHQgKiBndWVzdCAjUEYgaGFuZGxlciBjYW4gd2FsayB0aGVtLiBBbGwgUFRFcyBmb3IgdGVzdCB2aXJ0dWFsIGFkZHJlc3Nlc1xuJiM0MztcdCAqIHNob3VsZCBsaWUgb24gdGhlIHNhbWUgUFRFIHBhZ2UsIHNvIG9uZSBwYWdlIGlzIG1hcHBlZCBmb3IgZWFjaCBwYWdlXG4mIzQzO1x0ICogdGFibGUgbGV2ZWwuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBVc2UgYW4gb2Zmc2V0IGZvciB0aGUgR1ZBIGluc3RlYWQgb2YgY3JlYXRpbmcgaWRlbnRpdHkgbWFwcGluZ3MgdG9cbiYjNDM7XHQgKiBhdm9pZCBjb2xsaXNpb24gd2l0aCBleGlzdGluZyBtYXBwaW5ncyBhdCBsb3cgR1ZBcyAoZS5nLiBFTEYpLlxuJiM0MztcdCAqL1xuJiM0MztcdHBndGFibGVfZ3BhID0gdm0tXHUwMDNlbW11LnBnZDtcbiYjNDM7XHRmb3IgKGxldmVsID0gdm0tXHUwMDNlbW11LnBndGFibGVfbGV2ZWxzOyBsZXZlbCBcdTAwM2U9IFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7XG4mIzQzO1x0XHR2aXJ0X21hcCh2bSwgcGd0YWJsZV9ncGEgJiM0MzsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQsIHBndGFibGVfZ3BhLCAxKTtcbiYjNDM7XHRcdHBndGFibGUgPSBhZGRyX2dwYTJodmEodm0sIHBndGFibGVfZ3BhKTtcbiYjNDM7XHRcdHB0ZSA9IHBndGFibGVbUFhEX0lOREVYKFRFU1RfTUVNX0JBU0VfR1ZBLCBsZXZlbCldO1xuJiM0MztcdFx0cGd0YWJsZV9ncGEgPSBQVEVfR0VUX1BBKHB0ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBJbml0aWFsaXplIHRoZSB0aHJlYWQgc2VuZGluZyBTSUdVU1IgYW5kIGluc3RhbGwgdGhlIGhhbmRsZXIgKi9cbiYjNDM7XHR2Y3B1X3NpZ3Vzcl9pZ25vcmUoKTtcbiYjNDM7XHRyID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2c2lndXNyX3RocmVhZCwgTlVMTCwgc2lndXNyX3RocmVhZF9mbixcbiYjNDM7XHRcdFx0ICAgKHZvaWQgKilwdGhyZWFkX3NlbGYoKSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoIXIsIFwmIzM0O3B0aHJlYWRfY3JlYXRlKCkgZmFpbGVkOiAlZFwmIzM0Oywgcik7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDE7IGkgXHUwMDNjPSBOUl9JVEVSQVRJT05TOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIE9ubHkgaGFuZGxlIFNJR1VTUiB3aGlsZSB0aGUgdkNQVSBpcyBydW5uaW5nLCBvdGhlcndpc2VcbiYjNDM7XHRcdCAqIGlnbm9yZSBpdCB0byBhdm9pZCBpbnRlcnJ1cHRpbmcgb3RoZXIgaW9jdGxzL3N5c2NhbGxzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR2Y3B1X3NpZ3Vzcl9saXN0ZW4oKTtcbiYjNDM7XHRcdHIgPSBfX3ZjcHVfcnVuKHZjcHUpO1xuJiM0MztcdFx0aWYgKHIgPT0gLTEpXG4mIzQzO1x0XHRcdFRFU1RfQVNTRVJUX0VRKGVycm5vLCBFSU5UUik7XG4mIzQzO1x0XHR2Y3B1X3NpZ3Vzcl9pZ25vcmUoKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBUaGUgZ3Vlc3Qgb25seSBleGl0cyBkdWUgdG8gYSBzaWduYWwgb3IgZmFpbGVkIGFzc2VydGlvbiAqL1xuJiM0MztcdFx0aWYgKCFyKSB7XG4mIzQzO1x0XHRcdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XG4mIzQzO1x0XHRcdFRFU1RfQVNTRVJUX0VRKGdldF91Y2FsbCh2Y3B1LCBcdTAwMjZ1YyksIFVDQUxMX0FCT1JUKTtcbiYjNDM7XHRcdFx0UkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHN0YXRlID0gdmNwdV9zYXZlX3N0YXRlKHZjcHUpO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJZiB0aGUgdkNQVSBpcyBpbiBndWVzdCBtb2RlLCBpbmplY3QgYSAjVUQgdG8gdHJpZ2dlciBhblxuJiM0MztcdFx0ICogTDItXHUwMDNlTDEgVk0tRXhpdCBldmVyeSBvdGhlciBpdGVyYXRpb24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChrdm1feDg2X3N0YXRlX2lzX2d1ZXN0X21vZGUoc3RhdGUpIFx1MDAyNlx1MDAyNiBpICUgMiA9PSAwKVxuJiM0MztcdFx0XHRrdm1feDg2X3N0YXRlX3F1ZXVlX3VkKHN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0XHRrdm1fdm1fcmVsZWFzZSh2bSk7XG4mIzQzO1x0XHR2Y3B1ID0gdm1fcmVjcmVhdGVfd2l0aF9vbmVfdmNwdSh2bSk7XG4mIzQzO1x0XHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FELCAtMnVsKTtcbiYjNDM7XHRcdHZjcHVfbG9hZF9zdGF0ZSh2Y3B1LCBzdGF0ZSk7XG4mIzQzO1x0XHRrdm1feDg2X3N0YXRlX2NsZWFudXAoc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRcdHByX2luZm8oXCYjMzQ7XFxyU2F2ZSYjNDM7cmVzdG9yZSBpdGVyYXRpb25zOiAlZFwmIzM0OywgaSk7XG4mIzQzO1x0fVxuJiM0MztcdHByX2luZm8oXCYjMzQ7XFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0c3luY19nbG9iYWxfZnJvbV9ndWVzdCh2bSwgZ3Vlc3RfZmF1bHRzKTtcbiYjNDM7XHRURVNUX0FTU0VSVChndWVzdF9mYXVsdHMgXHUwMDNlIDAsIFwmIzM0O05vIGd1ZXN0IHBhZ2UgZmF1bHRzIHRyaWdnZXJlZFwmIzM0Oyk7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtHdWVzdCBwYWdlIGZhdWx0cyVzOiAlbHVcXG5cJiMzNDssIG5lc3RlZCA/IFwmIzM0OyAoaW4gTDIpXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LCBndWVzdF9mYXVsdHMpO1xuJiM0MztcbiYjNDM7XHRwdGhyZWFkX2NhbmNlbChzaWd1c3JfdGhyZWFkKTtcbiYjNDM7XHRwdGhyZWFkX2pvaW4oc2lndXNyX3RocmVhZCwgTlVMTCk7XG4mIzQzO1x0a3ZtX3ZtX2ZyZWUodm0pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuJiM0Mzt7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtSdW5uaW5nIHNhdmUmIzQzO3Jlc3RvcmUgc3RyZXNzIHRlc3QuLi5cXG5cJiMzNDspO1xuJiM0MztcdHJ1bl90ZXN0KC8qbmVzdGVkPSovZmFsc2UpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWt2bV9oYXNfY2FwKEtWTV9DQVBfRVhDRVBUSU9OX1BBWUxPQUQpIHx8XG4mIzQzO1x0ICAgICFrdm1faGFzX2NhcChLVk1fQ0FQX05FU1RFRF9TVEFURSkgfHxcbiYjNDM7XHQgICAgKCFrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pIFx1MDAyNlx1MDAyNiAha3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSkpIHtcbiYjNDM7XHRcdHByX2luZm8oXCYjMzQ7TmVzdGVkIHZpcnR1YWxpemF0aW9uIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nIG5lc3RlZCB0ZXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtSdW5uaW5nIHNhdmUmIzQzO3Jlc3RvcmUgc3RyZXNzIHRlc3Qgd2l0aCBhIG5lc3RlZCBndWVzdC4uLlxcblwmIzM0Oyk7XG4mIzQzO1x0cnVuX3Rlc3QoLypuZXN0ZWQ9Ki90cnVlKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xuaW5kZXggZTI1NDJmNGNlZDYwNS4uZDFlZGFmZDVhZjc1NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jXG5AQCAtMjIsOSAmIzQzOzIyLDYgQEBcbiAjZGVmaW5lIFNNUkFNX0dQQSAweDEwMDAwMDBcbiAjZGVmaW5lIFNNUkFNX1NUQUdFIDB4ZmVcbiBcbi0jZGVmaW5lIFNUUih4KSAjeFxuLSNkZWZpbmUgWFNUUihzKSBTVFIocylcbi1cbiAjZGVmaW5lIFNZTkNfUE9SVCAweGVcbiAjZGVmaW5lIERPTkUgMHhmZlxuIFxuQEAgLTQyLDcgJiM0MzszOSw3IEBAIHU4IHNtaV9oYW5kbGVyW10gPSB7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHN5bmNfd2l0aF9ob3N0KHU2NCBwaGFzZSlcbiB7XG4tXHRhc20gdm9sYXRpbGUoXCYjMzQ7aW4gJFwmIzM0OyBYU1RSKFNZTkNfUE9SVClcJiMzNDssICUlYWwgXFxuXCYjMzQ7XG4mIzQzO1x0YXNtIHZvbGF0aWxlKFwmIzM0O2luICRcJiMzNDsgX19zdHJpbmdpZnkoU1lOQ19QT1JUKVwmIzM0OywgJSVhbCBcXG5cJiMzNDtcbiBcdFx0ICAgICA6IFwmIzM0OyYjNDM7YVwmIzM0OyAocGhhc2UpKTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTk6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhbmQgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGNvZGUgb3IgZHJpdmVycy4gU2luY2UgdGhlIGZ1enppbmcgdGFyZ2V0cyB0aGUga2VybmVsIGFuZCBub3QgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbHMsIHRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGtlcm5lbCBjaGFuZ2VzIHRvIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTI5NDg2OGFkMDkxMzVhZjEwZTAxZTY2MDRmM2E5NzkxMWZjNTRlYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDI4IDE5OjM5OjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KaW5kZXggODhjNmM4MDQ2ZGRlYy4uZTY3YjFlOTg5M2Y2OCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCkBAIC0xMTIsNiAmIzQzOzExMiw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3NldF9zcmVnc190ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3NtbV90ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zdGF0ZV90ZXN0CiYjNDM7VEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni92bXhfcHJlZW1wdGlvbl90aW1lcl90ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9zdm1fdm1jYWxsX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3N2bV9pbnRfY3RsX3Rlc3QKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmgKaW5kZXggZDY0YzhhMjI4MjA3YS4uZTgzNTZlZTU0ZDdiOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmgKQEAgLTIzLDYgJiM0MzsyMyw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9tbWFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5naWZ5LmgmZ3Q7CiAKICNkZWZpbmUgbXNlY3NfdG9fdXNlY3MobXNlYykgICAgKChtc2VjKSAqIDEwMDBVTEwpCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmgKaW5kZXggYmU3OWJkYTAyNGJmMS4uODJhOGVhNmI2NjFmMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmgKQEAgLTEyMDcsMzAgJiM0MzsxMjA3LDIzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtbGF1bmNoKHZvaWQpCiAKIAljdXJyZW50X2V2bWNzLSZndDtodl9jbGVhbl9maWVsZHMgPSAwOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICUlcmJwOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyZHg7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcnNpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJDA7JiMzNDsKJiM0MzsJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICQwOyYjMzQ7CiAJCQkgICAgICYjMzQ7bW92ICUlcnNwLCAoJVtob3N0X3JzcF0pOyYjMzQ7CiAJCQkgICAgICYjMzQ7bGVhIDFmKCUlcmlwKSwgJSVyYXg7JiMzNDsKIAkJCSAgICAgJiMzNDttb3YgJSVyYXgsICglW2hvc3RfcmlwXSk7JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KIAkJCSAgICAgJiMzNDt2bWxhdW5jaDsmIzM0OwogCQkJICAgICAmIzM0O2luY3EgKCUlcnNwKTsmIzM0OwotCQkJICAgICAmIzM0OzE6IHBvcCAlJXJheDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJzaTsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJkeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3BvcCAlJXJicDsmIzM0OwomIzQzOwkJCSAgICAgJiMzNDsxOiA7JiMzNDsKJiM0MzsJCQkgICAgIFZNWF9TV0lUQ0hfR1BSU19BU00KJiM0MzsJCQkgICAgICYjMzQ7cG9wICUlcmF4OyYjMzQ7CiAJCQkgICAgIDogW3JldF0mIzM0Oz0mYW1wO2EmIzM0OyhyZXQpCiAJCQkgICAgIDogW2hvc3RfcnNwXSYjMzQ7ciYjMzQ7CiAJCQkgICAgICAgKCh1NjQpJmFtcDtjdXJyZW50X2V2bWNzLSZndDtob3N0X3JzcCksCiAJCQkgICAgICAgW2hvc3RfcmlwXSYjMzQ7ciYjMzQ7Ci0JCQkgICAgICAgKCh1NjQpJmFtcDtjdXJyZW50X2V2bWNzLSZndDtob3N0X3JpcCkKLQkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDssICYjMzQ7cmJ4JiMzNDssICYjMzQ7cjgmIzM0OywgJiMzNDtyOSYjMzQ7LCAmIzM0O3IxMCYjMzQ7LAotCQkJICAgICAgICYjMzQ7cjExJiMzNDssICYjMzQ7cjEyJiMzNDssICYjMzQ7cjEzJiMzNDssICYjMzQ7cjE0JiMzNDssICYjMzQ7cjE1JiMzNDspOwomIzQzOwkJCSAgICAgICAoKHU2NCkmYW1wO2N1cnJlbnRfZXZtY3MtJmd0O2hvc3RfcmlwKSwKJiM0MzsJCQkgICAgICAgR1VFU1RfUkVHU19PRkZTRVRTCiYjNDM7CQkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDssICYjMzQ7Y2MmIzM0Oyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTI0NiwzMCAmIzQzOzEyMzksMjMgQEAgc3RhdGljIGlubGluZSBpbnQgZXZtY3Nfdm1yZXN1bWUodm9pZCkKIAkvKiBIT1NUX1JTUCAqLwogCWN1cnJlbnRfZXZtY3MtJmd0O2h2X2NsZWFuX2ZpZWxkcyAmYW1wOz0gfkhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9IT1NUX1BPSU5URVI7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O3B1c2ggJSVyYnA7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcmN4OyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJkeDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyc2k7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcmRpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAkMDsmIzM0OwomIzQzOwlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O3B1c2ggJDA7JiMzNDsKIAkJCSAgICAgJiMzNDttb3YgJSVyc3AsICglW2hvc3RfcnNwXSk7JiMzNDsKIAkJCSAgICAgJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDsmIzM0OwogCQkJICAgICAmIzM0O21vdiAlJXJheCwgKCVbaG9zdF9yaXBdKTsmIzM0OwomIzQzOwkJCSAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTQogCQkJICAgICAmIzM0O3ZtcmVzdW1lOyYjMzQ7CiAJCQkgICAgICYjMzQ7aW5jcSAoJSVyc3ApOyYjMzQ7Ci0JCQkgICAgICYjMzQ7MTogcG9wICUlcmF4OyYjMzQ7Ci0JCQkgICAgICYjMzQ7cG9wICUlcmRpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cG9wICUlcnNpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cG9wICUlcmR4OyYjMzQ7Ci0JCQkgICAgICYjMzQ7cG9wICUlcmN4OyYjMzQ7Ci0JCQkgICAgICYjMzQ7cG9wICUlcmJwOyYjMzQ7CiYjNDM7CQkJICAgICAmIzM0OzE6IDsmIzM0OwomIzQzOwkJCSAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTQomIzQzOwkJCSAgICAgJiMzNDtwb3AgJSVyYXg7JiMzNDsKIAkJCSAgICAgOiBbcmV0XSYjMzQ7PSZhbXA7YSYjMzQ7KHJldCkKIAkJCSAgICAgOiBbaG9zdF9yc3BdJiMzNDtyJiMzNDsKIAkJCSAgICAgICAoKHU2NCkmYW1wO2N1cnJlbnRfZXZtY3MtJmd0O2hvc3RfcnNwKSwKIAkJCSAgICAgICBbaG9zdF9yaXBdJiMzNDtyJiMzNDsKLQkJCSAgICAgICAoKHU2NCkmYW1wO2N1cnJlbnRfZXZtY3MtJmd0O2hvc3RfcmlwKQotCQkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDssICYjMzQ7Y2MmIzM0OywgJiMzNDtyYngmIzM0OywgJiMzNDtyOCYjMzQ7LCAmIzM0O3I5JiMzNDssICYjMzQ7cjEwJiMzNDssCi0JCQkgICAgICAgJiMzNDtyMTEmIzM0OywgJiMzNDtyMTImIzM0OywgJiMzNDtyMTMmIzM0OywgJiMzNDtyMTQmIzM0OywgJiMzNDtyMTUmIzM0Oyk7CiYjNDM7CQkJICAgICAgICgodTY0KSZhbXA7Y3VycmVudF9ldm1jcy0mZ3Q7aG9zdF9yaXApLAomIzQzOwkJCSAgICAgICBHVUVTVF9SRUdTX09GRlNFVFMKJiM0MzsJCQkgICAgIDogJiMzNDttZW1vcnkmIzM0OywgJiMzNDtjYyYjMzQ7KTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmgKaW5kZXggYjE2MTE3NGVjZTQ1My4uNDYxYzhhZWY3ZDM3YiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaApAQCAtMjQsNiAmIzQzOzI0LDcgQEAgZXh0ZXJuIGJvb2wgaG9zdF9jcHVfaXNfYW1kOwogZXh0ZXJuIGJvb2wgaG9zdF9jcHVfaXNfaHlnb247CiBleHRlcm4gYm9vbCBob3N0X2NwdV9pc19hbWRfY29tcGF0aWJsZTsKIGV4dGVybiB1NjQgZ3Vlc3RfdHNjX2toejsKJiM0MztleHRlcm4gc3RydWN0IGt2bV9tbXUgZ3Vlc3RfbW11OwogCiAjaWZuZGVmIE1BWF9OUl9DUFVJRF9FTlRSSUVTCiAjZGVmaW5lIE1BWF9OUl9DUFVJRF9FTlRSSUVTIDEwMApAQCAtMzk4LDggJiM0MzszOTksNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4ODZfbW9kZWwodW5zaWduZWQgaW50IGVheCkKICNkZWZpbmUgUFRFX0dFVF9QQShwdGUpCQkoKHB0ZSkgJmFtcDsgUEhZU0lDQUxfUEFHRV9NQVNLKQogI2RlZmluZSBQVEVfR0VUX1BGTihwdGUpICAgICAgICAoUFRFX0dFVF9QQShwdGUpICZndDsmZ3Q7IFBBR0VfU0hJRlQpCiAKLS8qIEdlbmVyYWwgUmVnaXN0ZXJzIGluIDY0LUJpdCBNb2RlICovCi1zdHJ1Y3QgZ3ByNjRfcmVncyB7CiYjNDM7c3RydWN0IGd1ZXN0X3JlZ3MgewogCXU2NCByYXg7CiAJdTY0IHJjeDsKIAl1NjQgcmR4OwpAQCAtNDE2LDggJiM0Mzs0MTYsMzggQEAgc3RydWN0IGdwcjY0X3JlZ3MgewogCXU2NCByMTM7CiAJdTY0IHIxNDsKIAl1NjQgcjE1OwomIzQzOwl1NjQgcmZsYWdzOwogfTsKIAomIzQzO2V4dGVybiBzdHJ1Y3QgZ3Vlc3RfcmVncyBndWVzdF9yZWdzOwomIzQzOwomIzQzOyNkZWZpbmUgR1VFU1RfUkVHX09GRlNFVChuYW1lKSBcCiYjNDM7CVtvZmZfIyNuYW1lXSAmIzM0O2kmIzM0OyAob2Zmc2V0b2Yoc3RydWN0IGd1ZXN0X3JlZ3MsIG5hbWUpKQomIzQzOwomIzQzOyNkZWZpbmUgR1VFU1RfUkVHU19PRkZTRVRTCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyYXgpLAlcCiYjNDM7CUdVRVNUX1JFR19PRkZTRVQocmN4KSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHJkeCksCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyYngpLAlcCiYjNDM7CUdVRVNUX1JFR19PRkZTRVQocnNwKSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHJicCksCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyc2kpLAlcCiYjNDM7CUdVRVNUX1JFR19PRkZTRVQocmRpKSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHI4KSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHI5KSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHIxMCksCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyMTEpLAlcCiYjNDM7CUdVRVNUX1JFR19PRkZTRVQocjEyKSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHIxMyksCVwKJiM0MzsJR1VFU1RfUkVHX09GRlNFVChyMTQpLAlcCiYjNDM7CUdVRVNUX1JFR19PRkZTRVQocjE1KSwJXAomIzQzOwlHVUVTVF9SRUdfT0ZGU0VUKHJmbGFncykKJiM0MzsKJiM0MzsjZGVmaW5lIEdVRVNUX1JFRyhuYW1lKSAmIzM0O2d1ZXN0X3JlZ3MgJiM0MzsgJWNbb2ZmXyYjMzQ7ICNuYW1lICYjMzQ7XSYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBHVUVTVF9TV0lUQ0hfR1BSX0FTTShuYW1lKSBcCiYjNDM7CSYjMzQ7eGNoZyAlJSYjMzQ7ICNuYW1lICYjMzQ7LCAmIzM0OyBHVUVTVF9SRUcobmFtZSkgJiMzNDtcblx0JiMzNDsKJiM0MzsKIHN0cnVjdCBkZXNjNjQgewogCXUxNiBsaW1pdDA7CiAJdTE2IGJhc2UwOwpAQCAtNTg0LDYgJiM0Mzs2MTQsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9jcjAodTY0IHZhbCkKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O21vdiAlMCwgJSVjcjAmIzM0OyA6IDogJiMzNDtyJiMzNDsgKHZhbCkgOiAmIzM0O21lbW9yeSYjMzQ7KTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdTY0IGdldF9jcjIodm9pZCkKJiM0Mzt7CiYjNDM7CXU2NCBjcjI7CiYjNDM7CiYjNDM7CV9fYXNtX18gX192b2xhdGlsZV9fKCYjMzQ7bW92ICUlY3IyLCAlW2NyMl0mIzM0OwomIzQzOwkJCSAgICAgOiAvKiBvdXRwdXQgKi8gW2NyMl0mIzM0Oz1yJiMzNDsoY3IyKSk7CiYjNDM7CXJldHVybiBjcjI7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB1NjQgZ2V0X2NyMyh2b2lkKQogewogCXU2NCBjcjM7CkBAIC04NzksNiAmIzQzOzkxOCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfc3NlX3JlZyhpbnQgcmVnLCBjb25zdCBzc2UxMjhfdCAqZGF0YSkKIAl9CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW52bHBnKHU2NCBhZGRyKQomIzQzO3sKJiM0MzsJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtpbnZscGcgKCUwKSYjMzQ7IDogOiAmIzM0O3ImIzM0OyhhZGRyKSA6ICYjMzQ7bWVtb3J5JiMzNDspOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVfcmVsYXgodm9pZCkKIHsKIAlhc20gdm9sYXRpbGUoJiMzNDtyZXA7IG5vcCYjMzQ7IDo6OiAmIzM0O21lbW9yeSYjMzQ7KTsKQEAgLTkxNSw2ICYjNDM7OTU5LDExIEBAIHN0cnVjdCBrdm1feDg2X3N0YXRlICp2Y3B1X3NhdmVfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQgdmNwdV9sb2FkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKTsKIHZvaWQga3ZtX3g4Nl9zdGF0ZV9jbGVhbnVwKHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSk7CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3g4Nl9zdGF0ZV9pc19ndWVzdF9tb2RlKHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBzdGF0ZS0mZ3Q7bmVzdGVkLnNpemUgJmFtcDsmYW1wOyAoc3RhdGUtJmd0O25lc3RlZC5mbGFncyAmYW1wOyBLVk1fU1RBVEVfTkVTVEVEX0dVRVNUX01PREUpOwomIzQzO30KJiM0MzsKIGNvbnN0IHN0cnVjdCBrdm1fbXNyX2xpc3QgKmt2bV9nZXRfbXNyX2luZGV4X2xpc3Qodm9pZCk7CiBjb25zdCBzdHJ1Y3Qga3ZtX21zcl9saXN0ICprdm1fZ2V0X2ZlYXR1cmVfbXNyX2luZGV4X2xpc3Qodm9pZCk7CiBib29sIGt2bV9tc3JfaXNfaW5fc2F2ZV9yZXN0b3JlX2xpc3QodTMyIG1zcl9pbmRleCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmgKaW5kZXggNGJjZmQ2MGUzYWVjYi4uMDRmNWUzNGRlYTNhZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaApAQCAtMjkwLDYgJiM0MzsyOTAsMjMgQEAgc3RydWN0IHZteF9tc3JfZW50cnkgewogCXU2NCB2YWx1ZTsKIH0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMTYpKSk7CiAKJiM0MzsjZGVmaW5lIFZNWF9TV0lUQ0hfR1BSU19BU00gXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYXgpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocmJ4KSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJjeCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZHgpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocmJwKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJzaSkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZGkpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjgpICBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHI5KSAgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTApIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjExKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMikgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTMpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjE0KSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNSkKJiM0MzsKICNpbmNsdWRlICYjMzQ7ZXZtY3MuaCYjMzQ7CiAKIHN0YXRpYyBpbmxpbmUgaW50IHZteG9uKHU2NCBwaHlzKQpAQCAtMzYzLDkgJiM0MzszODAsNiBAQCBzdGF0aWMgaW5saW5lIHU2NCB2bXB0cnN0eih2b2lkKQogCXJldHVybiB2YWx1ZTsKIH0KIAotLyoKLSAqIE5vIGd1ZXN0IHN0YXRlIChlLmcuIEdQUnMpIGlzIGVzdGFibGlzaGVkIGJ5IHRoaXMgdm1sYXVuY2guCi0gKi8KIHN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpCiB7CiAJaW50IHJldDsKQEAgLTM3MywzNCAmIzQzOzM4NywyNCBAQCBzdGF0aWMgaW5saW5lIGludCB2bWxhdW5jaCh2b2lkKQogCWlmIChlbmFibGVfZXZtY3MpCiAJCXJldHVybiBldm1jc192bWxhdW5jaCgpOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICUlcmJwOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJjeDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyZHg7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcnNpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJkaTsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJDA7JiMzNDsKJiM0MzsJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDtwdXNoICQwOyYjMzQ7CiAJCQkgICAgICYjMzQ7dm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07JiMzNDsKIAkJCSAgICAgJiMzNDtsZWEgMWYoJSVyaXApLCAlJXJheDsmIzM0OwogCQkJICAgICAmIzM0O3Ztd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdOyYjMzQ7CiYjNDM7CQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCiAJCQkgICAgICYjMzQ7dm1sYXVuY2g7JiMzNDsKIAkJCSAgICAgJiMzNDtpbmNxICglJXJzcCk7JiMzNDsKLQkJCSAgICAgJiMzNDsxOiBwb3AgJSVyYXg7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyZGk7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyc2k7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyZHg7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyY3g7JiMzNDsKLQkJCSAgICAgJiMzNDtwb3AgJSVyYnA7JiMzNDsKJiM0MzsJCQkgICAgICYjMzQ7MTogOyYjMzQ7CiYjNDM7CQkJICAgICBWTVhfU1dJVENIX0dQUlNfQVNNCiYjNDM7CQkJICAgICAmIzM0O3BvcCAlJXJheDsmIzM0OwogCQkJICAgICA6IFtyZXRdJiMzNDs9JmFtcDthJiMzNDsocmV0KQogCQkJICAgICA6IFtob3N0X3JzcF0mIzM0O3ImIzM0OygodTY0KUhPU1RfUlNQKSwKLQkJCSAgICAgICBbaG9zdF9yaXBdJiMzNDtyJiMzNDsoKHU2NClIT1NUX1JJUCkKLQkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDssICYjMzQ7cmJ4JiMzNDssICYjMzQ7cjgmIzM0OywgJiMzNDtyOSYjMzQ7LCAmIzM0O3IxMCYjMzQ7LAotCQkJICAgICAgICYjMzQ7cjExJiMzNDssICYjMzQ7cjEyJiMzNDssICYjMzQ7cjEzJiMzNDssICYjMzQ7cjE0JiMzNDssICYjMzQ7cjE1JiMzNDspOwomIzQzOwkJCSAgICAgICBbaG9zdF9yaXBdJiMzNDtyJiMzNDsoKHU2NClIT1NUX1JJUCksCiYjNDM7CQkJICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUUwomIzQzOwkJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBObyBndWVzdCBzdGF0ZSAoZS5nLiBHUFJzKSBpcyBlc3RhYmxpc2hlZCBieSB0aGlzIHZtcmVzdW1lLgotICovCiBzdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKQogewogCWludCByZXQ7CkBAIC00MDgsMjggJiM0Mzs0MTIsMjEgQEAgc3RhdGljIGlubGluZSBpbnQgdm1yZXN1bWUodm9pZCkKIAlpZiAoZW5hYmxlX2V2bWNzKQogCQlyZXR1cm4gZXZtY3Nfdm1yZXN1bWUoKTsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKCYjMzQ7cHVzaCAlJXJicDsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyY3g7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICUlcmR4OyYjMzQ7Ci0JCQkgICAgICYjMzQ7cHVzaCAlJXJzaTsmIzM0OwotCQkJICAgICAmIzM0O3B1c2ggJSVyZGk7JiMzNDsKLQkJCSAgICAgJiMzNDtwdXNoICQwOyYjMzQ7CiYjNDM7CV9fYXNtX18gX192b2xhdGlsZV9fKCYjMzQ7cHVzaCAkMDsmIzM0OwogCQkJICAgICAmIzM0O3Ztd3JpdGUgJSVyc3AsICVbaG9zdF9yc3BdOyYjMzQ7CiAJCQkgICAgICYjMzQ7bGVhIDFmKCUlcmlwKSwgJSVyYXg7JiMzNDsKIAkJCSAgICAgJiMzNDt2bXdyaXRlICUlcmF4LCAlW2hvc3RfcmlwXTsmIzM0OwomIzQzOwkJCSAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTQogCQkJICAgICAmIzM0O3ZtcmVzdW1lOyYjMzQ7CiAJCQkgICAgICYjMzQ7aW5jcSAoJSVyc3ApOyYjMzQ7Ci0JCQkgICAgICYjMzQ7MTogcG9wICUlcmF4OyYjMzQ7Ci0JCQkgICAgICYjMzQ7cG9wICUlcmRpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cG9wICUlcnNpOyYjMzQ7Ci0JCQkgICAgICYjMzQ7cG9wICUlcmR4OyYjMzQ7Ci0JCQkgICAgICYjMzQ7cG9wICUlcmN4OyYjMzQ7Ci0JCQkgICAgICYjMzQ7cG9wICUlcmJwOyYjMzQ7CiYjNDM7CQkJICAgICAmIzM0OzE6IDsmIzM0OwomIzQzOwkJCSAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTQomIzQzOwkJCSAgICAgJiMzNDtwb3AgJSVyYXg7JiMzNDsKIAkJCSAgICAgOiBbcmV0XSYjMzQ7PSZhbXA7YSYjMzQ7KHJldCkKIAkJCSAgICAgOiBbaG9zdF9yc3BdJiMzNDtyJiMzNDsoKHU2NClIT1NUX1JTUCksCi0JCQkgICAgICAgW2hvc3RfcmlwXSYjMzQ7ciYjMzQ7KCh1NjQpSE9TVF9SSVApCi0JCQkgICAgIDogJiMzNDttZW1vcnkmIzM0OywgJiMzNDtjYyYjMzQ7LCAmIzM0O3JieCYjMzQ7LCAmIzM0O3I4JiMzNDssICYjMzQ7cjkmIzM0OywgJiMzNDtyMTAmIzM0OywKLQkJCSAgICAgICAmIzM0O3IxMSYjMzQ7LCAmIzM0O3IxMiYjMzQ7LCAmIzM0O3IxMyYjMzQ7LCAmIzM0O3IxNCYjMzQ7LCAmIzM0O3IxNSYjMzQ7KTsKJiM0MzsJCQkgICAgICAgW2hvc3RfcmlwXSYjMzQ7ciYjMzQ7KCh1NjQpSE9TVF9SSVApLAomIzQzOwkJCSAgICAgICBHVUVTVF9SRUdTX09GRlNFVFMKJiM0MzsJCQkgICAgIDogJiMzNDttZW1vcnkmIzM0OywgJiMzNDtjYyYjMzQ7KTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuYwppbmRleCAxZDcyZGNkZmNlM2I2Li4zZTM1M2FjMzllZWI3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmMKQEAgLTc0LDcgJiM0Mzs3NCw3IEBAIHRlc3RfYXNzZXJ0KGJvb2wgZXhwLCBjb25zdCBjaGFyICpleHBfc3RyLAogCWlmICghKGV4cCkpIHsKIAkJdmFfc3RhcnQoYXAsIGZtdCk7CiAKLQkJZnByaW50ZihzdGRlcnIsICYjMzQ7PT09PSBUZXN0IEFzc2VydGlvbiBGYWlsdXJlID09PT1cbiYjMzQ7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtcbj09PT0gVGVzdCBBc3NlcnRpb24gRmFpbHVyZSA9PT09XG4mIzM0OwogCQkJJiMzNDsgICVzOiV1OiAlc1xuJiMzNDsKIAkJCSYjMzQ7ICBwaWQ9JWQgdGlkPSVkIGVycm5vPSVkIC0gJXNcbiYjMzQ7LAogCQkJZmlsZSwgbGluZSwgZXhwX3N0ciwgZ2V0cGlkKCksIGt2bV9nZXR0aWQoKSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMKaW5kZXggZWY1NmRjZWZlMDExOS4uZDMxZmE4MWVhMDc1NiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMKQEAgLTI4LDYgJiM0MzsyOCw5IEBAIGJvb2wgaG9zdF9jcHVfaXNfaHlnb247CiBib29sIGhvc3RfY3B1X2lzX2FtZF9jb21wYXRpYmxlOwogYm9vbCBpc19mb3JjZWRfZW11bGF0aW9uX2VuYWJsZWQ7CiB1NjQgZ3Vlc3RfdHNjX2toejsKJiM0MztzdHJ1Y3Qga3ZtX21tdSBndWVzdF9tbXU7CiYjNDM7CiYjNDM7c3RydWN0IGd1ZXN0X3JlZ3MgZ3Vlc3RfcmVnczsKIAogY29uc3QgY2hhciAqZXhfc3RyKGludCB2ZWN0b3IpCiB7CkBAIC04MjksNiAmIzQzOzgzMiwxNyBAQCB2b2lkIGt2bV9hcmNoX3ZtX3Bvc3RfY3JlYXRlKHN0cnVjdCBrdm1fdm0gKnZtLCB1bnNpZ25lZCBpbnQgbnJfdmNwdXMpCiAJVEVTVF9BU1NFUlQociAmZ3Q7IDAsICYjMzQ7S1ZNX0dFVF9UU0NfS0haIGRpZCBub3QgcHJvdmlkZSBhIHZhbGlkIFRTQyBmcmVxdWVuY3kuJiMzNDspOwogCWd1ZXN0X3RzY19raHogPSByOwogCXN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBndWVzdF90c2Nfa2h6KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGd1ZXN0IE1NVSBpcyBqdXN0IGEgcGxhY2Vob2xkZXIgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gUFRFIG1hc2tzCiYjNDM7CSAqIChmb3Igbm93KS4gVGhlIGd1ZXN0IGRvZXMgbm90IGhhdmUgbWFwcGluZ3MgZm9yIGl0cyBvd24gcGFnZSB0YWJsZXMKJiM0MzsJICogYnkgZGVmYXVsdCwgc28gYW55IG1lYW5pbmdmdWwgdXNlIG9mIGd1ZXN0IHBhZ2UgdGFibGVzIHJlcXVpcmVzCiYjNDM7CSAqIGV4cGxpY2l0IHNldHVwIGJ5IHRoZSB0ZXN0LiBaZXJvIHRoZSBQR0QgdG8gbWFrZSBpdCBvYnZpb3VzIHRoZSBndWVzdAomIzQzOwkgKiBwYWdlIHRhYmxlcyBhcmUgbm90IGltbWVkaWF0ZWx5IHVzYWJsZSBieSBndWVzdCBjb2RlLgomIzQzOwkgKi8KJiM0MzsJZ3Vlc3RfbW11ID0gdm0tJmd0O21tdTsKJiM0MzsJZ3Vlc3RfbW11LnBnZCA9IDA7CiYjNDM7CXN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBndWVzdF9tbXUpOwogfQogCiB2b2lkIHZjcHVfYXJjaF9zZXRfZW50cnlfcG9pbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpndWVzdF9jb2RlKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uYwppbmRleCAxNDQ1Yjg5MDk4NmZkLi5iMDViZTUwZjA3NWQ2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uYwpAQCAtMTMsOSAmIzQzOzEzLDYgQEAKIAogI2RlZmluZSBTRVZfREVWX1BBVEggJiMzNDsvZGV2L3NldiYjMzQ7CiAKLXN0cnVjdCBncHI2NF9yZWdzIGd1ZXN0X3JlZ3M7Ci11NjQgcmZsYWdzOwotCiAvKiBBbGxvY2F0ZSBtZW1vcnkgcmVnaW9ucyBmb3IgbmVzdGVkIFNWTSB0ZXN0cy4KICAqCiAgKiBJbnB1dCBBcmdzOgpAQCAtMTM3LDQ2ICYjNDM7MTM0LDQ3IEBAIHZvaWQgZ2VuZXJpY19zdm1fc2V0dXAoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSwgdm9pZCAqZ3Vlc3RfcmlwKQogICogc2F2ZS9yZXN0b3JlIDY0LWJpdCBnZW5lcmFsIHJlZ2lzdGVycyBleGNlcHQgcmF4LCByaXAsIHJzcAogICogd2hpY2ggYXJlIGRpcmVjdGx5IGhhbmRlZCB0aHJvdWdoIHRoZSBWTUNCIGd1ZXN0IHByb2Nlc3NvciBzdGF0ZQogICovCi0jZGVmaW5lIFNBVkVfR1BSX0MJCQkJXAotCSYjMzQ7eGNoZyAlJXJieCwgZ3Vlc3RfcmVncyYjNDM7MHgyMFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcmN4LCBndWVzdF9yZWdzJiM0MzsweDEwXG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyZHgsIGd1ZXN0X3JlZ3MmIzQzOzB4MThcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXJicCwgZ3Vlc3RfcmVncyYjNDM7MHgzMFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcnNpLCBndWVzdF9yZWdzJiM0MzsweDM4XG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyZGksIGd1ZXN0X3JlZ3MmIzQzOzB4NDBcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXI4LCAgZ3Vlc3RfcmVncyYjNDM7MHg0OFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcjksICBndWVzdF9yZWdzJiM0MzsweDUwXG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyMTAsIGd1ZXN0X3JlZ3MmIzQzOzB4NThcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXIxMSwgZ3Vlc3RfcmVncyYjNDM7MHg2MFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcjEyLCBndWVzdF9yZWdzJiM0MzsweDY4XG5cdCYjMzQ7CVwKLQkmIzM0O3hjaGcgJSVyMTMsIGd1ZXN0X3JlZ3MmIzQzOzB4NzBcblx0JiMzNDsJXAotCSYjMzQ7eGNoZyAlJXIxNCwgZ3Vlc3RfcmVncyYjNDM7MHg3OFxuXHQmIzM0OwlcCi0JJiMzNDt4Y2hnICUlcjE1LCBndWVzdF9yZWdzJiM0MzsweDgwXG5cdCYjMzQ7Ci0KLSNkZWZpbmUgTE9BRF9HUFJfQyAgICAgIFNBVkVfR1BSX0MKJiM0MzsjZGVmaW5lIFNWTV9TV0lUQ0hfR1BSU19BU00gXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYngpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocmN4KSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkeCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYnApIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocnNpKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkaSkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOCkgIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjkpICBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMCkgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTEpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjEyKSBcCiYjNDM7CUdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMykgXAomIzQzOwlHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTQpIFwKJiM0MzsJR1VFU1RfU1dJVENIX0dQUl9BU00ocjE1KQogCiAvKgogICogc2VsZnRlc3RzIGRvIG5vdCB1c2UgaW50ZXJydXB0cyBzbyB3ZSBkcm9wcGVkIGNsZ2kvc3RpL2NsaS9zdGdpCi0gKiBmb3Igbm93LiByZWdpc3RlcnMgaW52b2x2ZWQgaW4gTE9BRC9TQVZFX0dQUl9DIGFyZSBldmVudHVhbGx5CiYjNDM7ICogZm9yIG5vdy4gUmVnaXN0ZXJzIGludm9sdmVkIGluIFNWTV9TV0lUQ0hfR1BSU19BU00gYXJlIGV2ZW50dWFsbHkKICAqIHVubW9kaWZpZWQgc28gdGhleSBkbyBub3QgbmVlZCB0byBiZSBpbiB0aGUgY2xvYmJlciBsaXN0LgogICovCiB2b2lkIHJ1bl9ndWVzdChzdHJ1Y3Qgdm1jYiAqdm1jYiwgdTY0IHZtY2JfZ3BhKQogewogCWFzbSB2b2xhdGlsZSAoCiAJCSYjMzQ7dm1sb2FkICVbdm1jYl9ncGFdXG5cdCYjMzQ7Ci0JCSYjMzQ7bW92IHJmbGFncywgJSVyMTVcblx0JiMzNDsJLy8gcmZsYWdzCi0JCSYjMzQ7bW92ICUlcjE1LCAweDE3MCglW3ZtY2JdKVxuXHQmIzM0OwotCQkmIzM0O21vdiBndWVzdF9yZWdzLCAlJXIxNVxuXHQmIzM0OwkvLyByYXgKLQkJJiMzNDttb3YgJSVyMTUsIDB4MWY4KCVbdm1jYl0pXG5cdCYjMzQ7Ci0JCUxPQURfR1BSX0MKJiM0MzsJCSYjMzQ7bW92ICYjMzQ7IEdVRVNUX1JFRyhyZmxhZ3MpICYjMzQ7LCAlJXIxNVxuXHQmIzM0OwomIzQzOwkJJiMzNDttb3YgJSVyMTUsICVbdm1jYl9yZmxhZ3NdXG5cdCYjMzQ7CiYjNDM7CQkmIzM0O21vdiAmIzM0OyBHVUVTVF9SRUcocmF4KSAmIzM0OywgJSVyMTVcblx0JiMzNDsKJiM0MzsJCSYjMzQ7bW92ICUlcjE1LCAlW3ZtY2JfcmF4XVxuXHQmIzM0OwomIzQzOwkJU1ZNX1NXSVRDSF9HUFJTX0FTTQogCQkmIzM0O3ZtcnVuICVbdm1jYl9ncGFdXG5cdCYjMzQ7Ci0JCVNBVkVfR1BSX0MKLQkJJiMzNDttb3YgMHgxNzAoJVt2bWNiXSksICUlcjE1XG5cdCYjMzQ7CS8vIHJmbGFncwotCQkmIzM0O21vdiAlJXIxNSwgcmZsYWdzXG5cdCYjMzQ7Ci0JCSYjMzQ7bW92IDB4MWY4KCVbdm1jYl0pLCAlJXIxNVxuXHQmIzM0OwkvLyByYXgKLQkJJiMzNDttb3YgJSVyMTUsIGd1ZXN0X3JlZ3Ncblx0JiMzNDsKJiM0MzsJCVNWTV9TV0lUQ0hfR1BSU19BU00KJiM0MzsJCSYjMzQ7bW92ICVbdm1jYl9yZmxhZ3NdLCAlJXIxNVxuXHQmIzM0OwomIzQzOwkJJiMzNDttb3YgJSVyMTUsICYjMzQ7IEdVRVNUX1JFRyhyZmxhZ3MpICYjMzQ7XG5cdCYjMzQ7CiYjNDM7CQkmIzM0O21vdiAlW3ZtY2JfcmF4XSwgJSVyMTVcblx0JiMzNDsJLy8gcmF4CiYjNDM7CQkmIzM0O21vdiAlJXIxNSwgJiMzNDsgR1VFU1RfUkVHKHJheCkgJiMzNDtcblx0JiMzNDsKIAkJJiMzNDt2bXNhdmUgJVt2bWNiX2dwYV1cblx0JiMzNDsKLQkJOiA6IFt2bWNiXSAmIzM0O3ImIzM0OyAodm1jYiksIFt2bWNiX2dwYV0gJiMzNDthJiMzNDsgKHZtY2JfZ3BhKQomIzQzOwkJOiBbdm1jYl9yZmxhZ3NdICYjMzQ7JiM0MzttJiMzNDsgKHZtY2ItJmd0O3NhdmUucmZsYWdzKSwKJiM0MzsJCSAgW3ZtY2JfcmF4XSAmIzM0OyYjNDM7bSYjMzQ7ICh2bWNiLSZndDtzYXZlLnJheCkKJiM0MzsJCTogW3ZtY2JfZ3BhXSAmIzM0O2EmIzM0OyAodm1jYl9ncGEpLAomIzQzOwkJICBHVUVTVF9SRUdTX09GRlNFVFMKIAkJOiAmIzM0O3IxNSYjMzQ7LCAmIzM0O21lbW9yeSYjMzQ7KTsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmMKaW5kZXggZTdkZDU3OTE5NTliYS4uMzgwNTBjNjBhMDY3MCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jCkBAIC0xMCwzNiAmIzQzOzEwLDggQEAKIAogdm9pZCB1Y2FsbF9hcmNoX2RvX3VjYWxsKGd2YV90IHVjKQogewotCS8qCi0JICogRklYTUU6IFJldmVydCB0aGlzIGhhY2sgKHRoZSBlbnRpcmUgY29tbWl0IHRoYXQgYWRkZWQgaXQpIG9uY2UgblZNWAotCSAqIHByZXNlcnZlcyBMMiBHUFJzIGFjcm9zcyBhIG5lc3RlZCBWTS1FeGl0LiAgSWYgYSB1Y2FsbCBmcm9tIEwyLCBlLmcuCi0JICogdG8gZG8gYSBHVUVTVF9TWU5DKCksIGxhbmRzIHRoZSB2Q1BVIGluIEwxLCBhbnkgYW5kIGFsbCBHUFJzIGNhbiBiZQotCSAqIGNsb2JiZXJlZCBieSBMMS4gIFNhdmUgYW5kIHJlc3RvcmUgbm9uLXZvbGF0aWxlIEdQUnMgKGNsb2JiZXJpbmcgUkJQCi0JICogaW4gcGFydGljdWxhciBpcyBwcm9ibGVtYXRpYykgYWxvbmcgd2l0aCBSRFggYW5kIFJESSAod2hpY2ggYXJlCi0JICogaW5wdXRzKSwgYW5kIGNsb2JiZXIgdm9sYXRpbGUgR1BScy4gKnNpZ2gqCi0JICovCi0jZGVmaW5lIEhPUlJJRklDX0wyX1VDQUxMX0NMT0JCRVJfSEFDSwlcCi0JJiMzNDtyY3gmIzM0OywgJiMzNDtyc2kmIzM0OywgJiMzNDtyOCYjMzQ7LCAmIzM0O3I5JiMzNDssICYjMzQ7cjEwJiMzNDssICYjMzQ7cjExJiMzNDsKLQotCWFzbSB2b2xhdGlsZSgmIzM0O3B1c2ggJSVyYnBcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyMTVcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyMTRcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyMTNcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyMTJcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyYnhcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyZHhcblx0JiMzNDsKLQkJICAgICAmIzM0O3B1c2ggJSVyZGlcblx0JiMzNDsKLQkJICAgICAmIzM0O2luICVbcG9ydF0sICUlYWxcblx0JiMzNDsKLQkJICAgICAmIzM0O3BvcCAlJXJkaVxuXHQmIzM0OwotCQkgICAgICYjMzQ7cG9wICUlcmR4XG5cdCYjMzQ7Ci0JCSAgICAgJiMzNDtwb3AgJSVyYnhcblx0JiMzNDsKLQkJICAgICAmIzM0O3BvcCAlJXIxMlxuXHQmIzM0OwotCQkgICAgICYjMzQ7cG9wICUlcjEzXG5cdCYjMzQ7Ci0JCSAgICAgJiMzNDtwb3AgJSVyMTRcblx0JiMzNDsKLQkJICAgICAmIzM0O3BvcCAlJXIxNVxuXHQmIzM0OwotCQkgICAgICYjMzQ7cG9wICUlcmJwXG5cdCYjMzQ7Ci0JCTogOiBbcG9ydF0gJiMzNDtkJiMzNDsgKFVDQUxMX1BJT19QT1JUKSwgJiMzNDtEJiMzNDsgKHVjKSA6ICYjMzQ7cmF4JiMzNDssICYjMzQ7bWVtb3J5JiMzNDssCi0JCSAgICAgSE9SUklGSUNfTDJfVUNBTExfQ0xPQkJFUl9IQUNLKTsKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7aW4gJVtwb3J0XSwgJSVhbCYjMzQ7CiYjNDM7CQk6IDogW3BvcnRdICYjMzQ7ZCYjMzQ7IChVQ0FMTF9QSU9fUE9SVCksICYjMzQ7RCYjMzQ7ICh1YykgOiAmIzM0O3JheCYjMzQ7LCAmIzM0O21lbW9yeSYjMzQ7KTsKIH0KIAogdm9pZCAqdWNhbGxfYXJjaF9nZXRfdWNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jCmluZGV4IDc3Y2U4N2M0MWE4NjguLmFhN2YzYjQwNWZkMzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMKQEAgLTIyLDkgJiM0MzsyMiw2IEBACiAKICNkZWZpbmUgU1lOQ19QT1JUCTB4ZQogCi0jZGVmaW5lIFNUUih4KSAjeAotI2RlZmluZSBYU1RSKHMpIFNUUihzKQotCiAvKgogICogU01JIGhhbmRsZXI6IHJ1bnMgaW4gcmVhbC1hZGRyZXNzIG1vZGUuCiAgKiBSZXBvcnRzIFNNUkFNX1NUQUdFIHZpYSBwb3J0IElPLCB0aGVuIGRvZXMgUlNNLgpAQCAtMzcsNyAmIzQzOzM0LDcgQEAgc3RhdGljIHU4IHNtaV9oYW5kbGVyW10gPSB7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jX3dpdGhfaG9zdCh1NjQgcGhhc2UpCiB7Ci0JYXNtIHZvbGF0aWxlKCYjMzQ7aW4gJCYjMzQ7IFhTVFIoU1lOQ19QT1JUKSAmIzM0OywgJSVhbCBcbiYjMzQ7CiYjNDM7CWFzbSB2b2xhdGlsZSgmIzM0O2luICQmIzM0OyBfX3N0cmluZ2lmeShTWU5DX1BPUlQpICYjMzQ7LCAlJWFsIFxuJiMzNDsKIAkJICAgICA6ICYjMzQ7JiM0MzthJiMzNDsgKHBoYXNlKSk7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZml4X2h5cGVyY2FsbF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jCmluZGV4IDc1M2EwZTczMGVhOGQuLjQ5MzFlYzIyNzY4ZWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZml4X2h5cGVyY2FsbF90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9maXhfaHlwZXJjYWxsX3Rlc3QuYwpAQCAtNiw3ICYjNDM7Niw2IEBACiAgKi8KICNpbmNsdWRlICZsdDthc20va3ZtX3BhcmEuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rdm1fcGFyYS5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZ2lmeS5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2t2bV90ZXN0X2hhcm5lc3MuaCYjMzQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5iYTFkNzIzMDAxZTk0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuYwpAQCAtMCwwICYjNDM7MSwyOTEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3RpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzaWduYWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2dldG9wdC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtwcm9jZXNzb3IuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzdm1fdXRpbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZteC5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIE5SX0lURVJBVElPTlMJCTUwMAomIzQzOwomIzQzOyNkZWZpbmUgUFRSU19QRVJfUFRFCQk1MTIKJiM0MzsjZGVmaW5lIFBYRF9JTkRFWCh2YWRkciwgbGV2ZWwpCSgoKHZhZGRyKSAmZ3Q7Jmd0OyBQR19MRVZFTF9TSElGVChsZXZlbCkpICZhbXA7IChQVFJTX1BFUl9QVEUgLSAxKSkKJiM0MzsKJiM0MzsjZGVmaW5lIFRFU1RfTUVNX0JBU0VfR1ZBCTB4YzAwMDAwMDBVTEwKJiM0MzsjZGVmaW5lIFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUCTB4ZDAwMDAwMDBVTEwKJiM0MzsjZGVmaW5lIFBBVFRFUk4JCQkweGFiY2RlZmFiY2RlZmFiY2RVTEwKJiM0MzsKJiM0MztzdGF0aWMgdTY0IGV4cGVjdGVkX3ZhZGRyOwomIzQzO3N0YXRpYyB1NjQgZ3Vlc3RfZmF1bHRzOwomIzQzOwomIzQzO3N0YXRpYyB1NjQgKmd1ZXN0X2dldF9wdGUodTY0IHZhZGRyKQomIzQzO3sKJiM0MzsJdTY0IHBndGFibGVfcGEsIHB0ZTsKJiM0MzsJdTY0ICpwZ3RhYmxlOwomIzQzOwlpbnQgbGV2ZWw7CiYjNDM7CiYjNDM7CWxldmVsID0gKGdldF9jcjQoKSAmYW1wOyBYODZfQ1I0X0xBNTcpID8gUEdfTEVWRUxfMjU2VCA6IFBHX0xFVkVMXzUxMkc7CiYjNDM7CiYjNDM7CXBndGFibGVfcGEgPSBnZXRfY3IzKCkgJmFtcDsgUEhZU0lDQUxfUEFHRV9NQVNLOwomIzQzOwlmb3IgKDsgbGV2ZWwgJmd0OyBQR19MRVZFTF80SzsgbGV2ZWwtLSkgewomIzQzOwkJcGd0YWJsZSA9ICh1NjQgKikocGd0YWJsZV9wYSAmIzQzOyBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVCk7CiYjNDM7CQlwdGUgPSBwZ3RhYmxlW1BYRF9JTkRFWCh2YWRkciwgbGV2ZWwpXTsKJiM0MzsJCUdVRVNUX0FTU0VSVChwdGUgJmFtcDsgUFRFX1BSRVNFTlRfTUFTSygmYW1wO2d1ZXN0X21tdSkpOwomIzQzOwkJR1VFU1RfQVNTRVJUKCEocHRlICZhbXA7IFBURV9IVUdFX01BU0soJmFtcDtndWVzdF9tbXUpKSk7CiYjNDM7CQlwZ3RhYmxlX3BhID0gUFRFX0dFVF9QQShwdGUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBndGFibGUgPSAodTY0ICopKHBndGFibGVfcGEgJiM0MzsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQpOwomIzQzOwlyZXR1cm4gJmFtcDtwZ3RhYmxlW1BYRF9JTkRFWCh2YWRkciwgUEdfTEVWRUxfNEspXTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3RfcGZfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncykKJiM0Mzt7CiYjNDM7CXU2NCBmYXVsdF9hZGRyOwomIzQzOwl1NjQgKnB0ZXA7CiYjNDM7CiYjNDM7CWZhdWx0X2FkZHIgPSBnZXRfY3IyKCk7CiYjNDM7CUdVRVNUX0FTU0VSVF9FUShmYXVsdF9hZGRyLCBSRUFEX09OQ0UoZXhwZWN0ZWRfdmFkZHIpKTsKJiM0MzsKJiM0MzsJcHRlcCA9IGd1ZXN0X2dldF9wdGUoZmF1bHRfYWRkcik7CiYjNDM7CUdVRVNUX0FTU0VSVChwdGVwKTsKJiM0MzsJR1VFU1RfQVNTRVJUKCEoKnB0ZXAgJmFtcDsgUFRFX1BSRVNFTlRfTUFTSygmYW1wO2d1ZXN0X21tdSkpKTsKJiM0MzsKJiM0MzsJKnB0ZXAgfD0gUFRFX1BSRVNFTlRfTUFTSygmYW1wO2d1ZXN0X21tdSk7CiYjNDM7CWd1ZXN0X2ZhdWx0cyYjNDM7JiM0Mzs7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2FjY2Vzc19tZW1vcnkodm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJdTY0IHZhZGRyLCB2YWw7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyA7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl2YWRkciA9IFRFU1RfTUVNX0JBU0VfR1ZBICYjNDM7IChpICUgUFRSU19QRVJfUFRFKSAqIFBBR0VfU0laRTsKJiM0MzsJCVdSSVRFX09OQ0UoZXhwZWN0ZWRfdmFkZHIsIHZhZGRyKTsKJiM0MzsKJiM0MzsJCS8qIFJlYWQgdG8gdHJpZ2dlciAjUEYgKi8KJiM0MzsJCXZhbCA9IFJFQURfT05DRSgqKHU2NCAqKXZhZGRyKTsKJiM0MzsJCUdVRVNUX0FTU0VSVF9FUSh2YWwsIFBBVFRFUk4pOwomIzQzOwomIzQzOwkJLyogQ2xlYXIgdGhlIHByZXNlbnQgYml0IGFnYWluIHNvIGl0IGZhdWx0cyBuZXh0IHRpbWUgKi8KJiM0MzsJCSpndWVzdF9nZXRfcHRlKHZhZGRyKSAmYW1wOz0gflBURV9QUkVTRU5UX01BU0soJmFtcDtndWVzdF9tbXUpOwomIzQzOwkJaW52bHBnKHZhZGRyKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBsMV9zdm1fY29kZShzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtKQomIzQzO3sKJiM0MzsJZ2VuZXJpY19zdm1fc2V0dXAoc3ZtLCBndWVzdF9hY2Nlc3NfbWVtb3J5KTsKJiM0MzsJc3ZtLSZndDt2bWNiLSZndDtjb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zIHw9IEJJVChVRF9WRUNUT1IpOwomIzQzOwomIzQzOwl3aGlsZSAoMSkgewomIzQzOwkJcnVuX2d1ZXN0KHN2bS0mZ3Q7dm1jYiwgc3ZtLSZndDt2bWNiX2dwYSk7CiYjNDM7CQlHVUVTVF9BU1NFUlRfRVEoc3ZtLSZndDt2bWNiLSZndDtjb250cm9sLmV4aXRfY29kZSwKJiM0MzsJCQkJKFNWTV9FWElUX0VYQ1BfQkFTRSAmIzQzOyBVRF9WRUNUT1IpKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpCiYjNDM7ewomIzQzOwlHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXgpKTsKJiM0MzsJR1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXgpKTsKJiM0MzsJcHJlcGFyZV92bWNzKHZteCwgZ3Vlc3RfYWNjZXNzX21lbW9yeSk7CiYjNDM7CiYjNDM7CS8qIEludGVyY2VwdCBVRCwgaWdub3JlIGFueSAjUEYgKi8KJiM0MzsJR1VFU1RfQVNTRVJUKCF2bXdyaXRlKEVYQ0VQVElPTl9CSVRNQVAsIEJJVChVRF9WRUNUT1IpIHwgQklUKFBGX1ZFQ1RPUikpKTsKJiM0MzsJR1VFU1RfQVNTRVJUKCF2bXdyaXRlKFBBR0VfRkFVTFRfRVJST1JfQ09ERV9NQVNLLCAwKSk7CiYjNDM7CUdVRVNUX0FTU0VSVCghdm13cml0ZShQQUdFX0ZBVUxUX0VSUk9SX0NPREVfTUFUQ0gsIC0xKSk7CiYjNDM7CiYjNDM7CUdVRVNUX0FTU0VSVCghdm1sYXVuY2goKSk7CiYjNDM7CXdoaWxlICgxKSB7CiYjNDM7CQlHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpOwomIzQzOwkJR1VFU1RfQVNTRVJUX0VRKHZtcmVhZHooVk1fRVhJVF9JTlRSX0lORk8pICZhbXA7IDB4ZmYsIFVEX1ZFQ1RPUik7CiYjNDM7CQlHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqdGVzdF9kYXRhKQomIzQzO3sKJiM0MzsJaWYgKHRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKQomIzQzOwkJbDFfc3ZtX2NvZGUodGVzdF9kYXRhKTsKJiM0MzsJZWxzZQomIzQzOwkJbDFfdm14X2NvZGUodGVzdF9kYXRhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgKnNpZ3Vzcl90aHJlYWRfZm4odm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJcHRocmVhZF90IHZjcHVfdGhyZWFkID0gKHB0aHJlYWRfdClhcmc7CiYjNDM7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCXB0aHJlYWRfdGVzdGNhbmNlbCgpOwomIzQzOwkJcHRocmVhZF9raWxsKHZjcHVfdGhyZWFkLCBTSUdVU1IxKTsKJiM0MzsJCXVzbGVlcChtc2Vjc190b191c2VjcygxKSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGR1bW15X3NpZ25hbF9oYW5kbGVyKGludCBzaWdubykge30KJiM0MztzdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBzYTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2Y3B1X3NpZ3Vzcl9saXN0ZW4odm9pZCkKJiM0Mzt7CiYjNDM7CXNhLnNhX2hhbmRsZXIgPSBkdW1teV9zaWduYWxfaGFuZGxlcjsKJiM0MzsJc2lnYWN0aW9uKFNJR1VTUjEsICZhbXA7c2EsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2Y3B1X3NpZ3Vzcl9pZ25vcmUodm9pZCkKJiM0Mzt7CiYjNDM7CXNhLnNhX2hhbmRsZXIgPSBTSUdfSUdOOwomIzQzOwlzaWdhY3Rpb24oU0lHVVNSMSwgJmFtcDtzYSwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGt2bV94ODZfc3RhdGVfcXVldWVfdWQoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJaWYgKHN0YXRlLSZndDtldmVudHMuZXhjZXB0aW9uLnBlbmRpbmcgfHwgc3RhdGUtJmd0O2V2ZW50cy5leGNlcHRpb24uaW5qZWN0ZWQpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXN0YXRlLSZndDtldmVudHMuZmxhZ3MgfD0gS1ZNX1ZDUFVFVkVOVF9WQUxJRF9QQVlMT0FEOwomIzQzOwlzdGF0ZS0mZ3Q7ZXZlbnRzLmV4Y2VwdGlvbi5wZW5kaW5nID0gdHJ1ZTsKJiM0MzsJc3RhdGUtJmd0O2V2ZW50cy5leGNlcHRpb24uaW5qZWN0ZWQgPSBmYWxzZTsKJiM0MzsJc3RhdGUtJmd0O2V2ZW50cy5leGNlcHRpb24ubnIgPSBVRF9WRUNUT1I7CiYjNDM7CXN0YXRlLSZndDtldmVudHMuZXhjZXB0aW9uLmhhc19lcnJvcl9jb2RlID0gZmFsc2U7CiYjNDM7CXN0YXRlLSZndDtldmVudHMuZXhjZXB0aW9uX2hhc19wYXlsb2FkID0gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ1bl90ZXN0KGJvb2wgbmVzdGVkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlOwomIzQzOwlpbnQgciwgaSwgbGV2ZWw7CiYjNDM7CXB0aHJlYWRfdCBzaWd1c3JfdGhyZWFkOwomIzQzOwlncGFfdCBncGEsIHBndGFibGVfZ3BhOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlzdHJ1Y3QgdWNhbGwgdWM7CiYjNDM7CXU2NCAqcGd0YWJsZTsKJiM0MzsJZ3ZhX3QgZ3ZhOwomIzQzOwl1NjQgcHRlOwomIzQzOwomIzQzOwl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgbmVzdGVkID8gbDFfZ3Vlc3RfY29kZSA6IGd1ZXN0X2FjY2Vzc19tZW1vcnkpOwomIzQzOwl2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBQRl9WRUNUT1IsIGd1ZXN0X3BmX2hhbmRsZXIpOwomIzQzOwl2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FELCAtMnVsKTsKJiM0MzsKJiM0MzsJaWYgKG5lc3RlZCkgewomIzQzOwkJaWYgKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkpCiYjNDM7CQkJdmNwdV9hbGxvY19zdm0odm0sICZhbXA7Z3ZhKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQl2Y3B1X2FsbG9jX3ZteCh2bSwgJmFtcDtndmEpOwomIzQzOwkJdmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBndmEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFsbG9jYXRlIGEgcGFnZSBhbmQgd3JpdGUgdGhlIHBhdHRlcm4gdG8gaXQgKi8KJiM0MzsJZ3ZhID0gdm1fYWxsb2NfcGFnZSh2bSk7CiYjNDM7CSoodTY0ICopYWRkcl9ndmEyaHZhKHZtLCBndmEpID0gUEFUVEVSTjsKJiM0MzsJZ3BhID0gYWRkcl9ndmEyZ3BhKHZtLCBndmEpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYXAgYWxsIHZpcnR1YWwgYWRkcmVzc2VzIHRvIHRoZSBwYXR0ZXJuIHBhZ2UgYW5kIGNsZWFyIHRoZSBwcmVzZW50CiYjNDM7CSAqIGJpdCBzdWNoIHRoYXQgZ3Vlc3QgYWNjZXNzZXMgd2lsbCBjYXVzZSBhICNQRi4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBQVFJTX1BFUl9QVEU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlndmEgPSBURVNUX01FTV9CQVNFX0dWQSAmIzQzOyBpICogZ2V0cGFnZXNpemUoKTsKJiM0MzsJCXZpcnRfcGdfbWFwKHZtLCBndmEsIGdwYSk7CiYjNDM7CQkqdm1fZ2V0X3B0ZSh2bSwgZ3ZhKSAmYW1wOz0gflBURV9QUkVTRU5UX01BU0soJmFtcDt2bS0mZ3Q7bW11KTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBOb3cgY3JlYXRlIG1hcHBpbmdzIGZvciB0aGUgcGFnZSB0YWJsZXMgY3JlYXRlZCBhYm92ZSBzbyB0aGF0IHRoZQomIzQzOwkgKiBndWVzdCAjUEYgaGFuZGxlciBjYW4gd2FsayB0aGVtLiBBbGwgUFRFcyBmb3IgdGVzdCB2aXJ0dWFsIGFkZHJlc3NlcwomIzQzOwkgKiBzaG91bGQgbGllIG9uIHRoZSBzYW1lIFBURSBwYWdlLCBzbyBvbmUgcGFnZSBpcyBtYXBwZWQgZm9yIGVhY2ggcGFnZQomIzQzOwkgKiB0YWJsZSBsZXZlbC4KJiM0MzsJICoKJiM0MzsJICogVXNlIGFuIG9mZnNldCBmb3IgdGhlIEdWQSBpbnN0ZWFkIG9mIGNyZWF0aW5nIGlkZW50aXR5IG1hcHBpbmdzIHRvCiYjNDM7CSAqIGF2b2lkIGNvbGxpc2lvbiB3aXRoIGV4aXN0aW5nIG1hcHBpbmdzIGF0IGxvdyBHVkFzIChlLmcuIEVMRikuCiYjNDM7CSAqLwomIzQzOwlwZ3RhYmxlX2dwYSA9IHZtLSZndDttbXUucGdkOwomIzQzOwlmb3IgKGxldmVsID0gdm0tJmd0O21tdS5wZ3RhYmxlX2xldmVsczsgbGV2ZWwgJmd0Oz0gUEdfTEVWRUxfNEs7IGxldmVsLS0pIHsKJiM0MzsJCXZpcnRfbWFwKHZtLCBwZ3RhYmxlX2dwYSAmIzQzOyBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVCwgcGd0YWJsZV9ncGEsIDEpOwomIzQzOwkJcGd0YWJsZSA9IGFkZHJfZ3BhMmh2YSh2bSwgcGd0YWJsZV9ncGEpOwomIzQzOwkJcHRlID0gcGd0YWJsZVtQWERfSU5ERVgoVEVTVF9NRU1fQkFTRV9HVkEsIGxldmVsKV07CiYjNDM7CQlwZ3RhYmxlX2dwYSA9IFBURV9HRVRfUEEocHRlKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBJbml0aWFsaXplIHRoZSB0aHJlYWQgc2VuZGluZyBTSUdVU1IgYW5kIGluc3RhbGwgdGhlIGhhbmRsZXIgKi8KJiM0MzsJdmNwdV9zaWd1c3JfaWdub3JlKCk7CiYjNDM7CXIgPSBwdGhyZWFkX2NyZWF0ZSgmYW1wO3NpZ3Vzcl90aHJlYWQsIE5VTEwsIHNpZ3Vzcl90aHJlYWRfZm4sCiYjNDM7CQkJICAgKHZvaWQgKilwdGhyZWFkX3NlbGYoKSk7CiYjNDM7CVRFU1RfQVNTRVJUKCFyLCAmIzM0O3B0aHJlYWRfY3JlYXRlKCkgZmFpbGVkOiAlZCYjMzQ7LCByKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMTsgaSAmbHQ7PSBOUl9JVEVSQVRJT05TOyBpJiM0MzsmIzQzOykgewomIzQzOwkJLyoKJiM0MzsJCSAqIE9ubHkgaGFuZGxlIFNJR1VTUiB3aGlsZSB0aGUgdkNQVSBpcyBydW5uaW5nLCBvdGhlcndpc2UKJiM0MzsJCSAqIGlnbm9yZSBpdCB0byBhdm9pZCBpbnRlcnJ1cHRpbmcgb3RoZXIgaW9jdGxzL3N5c2NhbGxzLgomIzQzOwkJICovCiYjNDM7CQl2Y3B1X3NpZ3Vzcl9saXN0ZW4oKTsKJiM0MzsJCXIgPSBfX3ZjcHVfcnVuKHZjcHUpOwomIzQzOwkJaWYgKHIgPT0gLTEpCiYjNDM7CQkJVEVTVF9BU1NFUlRfRVEoZXJybm8sIEVJTlRSKTsKJiM0MzsJCXZjcHVfc2lndXNyX2lnbm9yZSgpOwomIzQzOwomIzQzOwkJLyogVGhlIGd1ZXN0IG9ubHkgZXhpdHMgZHVlIHRvIGEgc2lnbmFsIG9yIGZhaWxlZCBhc3NlcnRpb24gKi8KJiM0MzsJCWlmICghcikgewomIzQzOwkJCVRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7CiYjNDM7CQkJVEVTVF9BU1NFUlRfRVEoZ2V0X3VjYWxsKHZjcHUsICZhbXA7dWMpLCBVQ0FMTF9BQk9SVCk7CiYjNDM7CQkJUkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlzdGF0ZSA9IHZjcHVfc2F2ZV9zdGF0ZSh2Y3B1KTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBJZiB0aGUgdkNQVSBpcyBpbiBndWVzdCBtb2RlLCBpbmplY3QgYSAjVUQgdG8gdHJpZ2dlciBhbgomIzQzOwkJICogTDItJmd0O0wxIFZNLUV4aXQgZXZlcnkgb3RoZXIgaXRlcmF0aW9uLgomIzQzOwkJICovCiYjNDM7CQlpZiAoa3ZtX3g4Nl9zdGF0ZV9pc19ndWVzdF9tb2RlKHN0YXRlKSAmYW1wOyZhbXA7IGkgJSAyID09IDApCiYjNDM7CQkJa3ZtX3g4Nl9zdGF0ZV9xdWV1ZV91ZChzdGF0ZSk7CiYjNDM7CiYjNDM7CQlrdm1fdm1fcmVsZWFzZSh2bSk7CiYjNDM7CQl2Y3B1ID0gdm1fcmVjcmVhdGVfd2l0aF9vbmVfdmNwdSh2bSk7CiYjNDM7CQl2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FELCAtMnVsKTsKJiM0MzsJCXZjcHVfbG9hZF9zdGF0ZSh2Y3B1LCBzdGF0ZSk7CiYjNDM7CQlrdm1feDg2X3N0YXRlX2NsZWFudXAoc3RhdGUpOwomIzQzOwomIzQzOwkJcHJfaW5mbygmIzM0O1xyU2F2ZSYjNDM7cmVzdG9yZSBpdGVyYXRpb25zOiAlZCYjMzQ7LCBpKTsKJiM0MzsJfQomIzQzOwlwcl9pbmZvKCYjMzQ7XG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3Qodm0sIGd1ZXN0X2ZhdWx0cyk7CiYjNDM7CVRFU1RfQVNTRVJUKGd1ZXN0X2ZhdWx0cyAmZ3Q7IDAsICYjMzQ7Tm8gZ3Vlc3QgcGFnZSBmYXVsdHMgdHJpZ2dlcmVkJiMzNDspOwomIzQzOwlwcl9pbmZvKCYjMzQ7R3Vlc3QgcGFnZSBmYXVsdHMlczogJWx1XG4mIzM0OywgbmVzdGVkID8gJiMzNDsgKGluIEwyKSYjMzQ7IDogJiMzNDsmIzM0OywgZ3Vlc3RfZmF1bHRzKTsKJiM0MzsKJiM0MzsJcHRocmVhZF9jYW5jZWwoc2lndXNyX3RocmVhZCk7CiYjNDM7CXB0aHJlYWRfam9pbihzaWd1c3JfdGhyZWFkLCBOVUxMKTsKJiM0MzsJa3ZtX3ZtX2ZyZWUodm0pOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQomIzQzO3sKJiM0MzsJcHJfaW5mbygmIzM0O1J1bm5pbmcgc2F2ZSYjNDM7cmVzdG9yZSBzdHJlc3MgdGVzdC4uLlxuJiMzNDspOwomIzQzOwlydW5fdGVzdCgvKm5lc3RlZD0qL2ZhbHNlKTsKJiM0MzsKJiM0MzsJaWYgKCFrdm1faGFzX2NhcChLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FEKSB8fAomIzQzOwkgICAgIWt2bV9oYXNfY2FwKEtWTV9DQVBfTkVTVEVEX1NUQVRFKSB8fAomIzQzOwkgICAgKCFrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pICZhbXA7JmFtcDsgIWt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1ZNWCkpKSB7CiYjNDM7CQlwcl9pbmZvKCYjMzQ7TmVzdGVkIHZpcnR1YWxpemF0aW9uIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nIG5lc3RlZCB0ZXN0XG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlwcl9pbmZvKCYjMzQ7UnVubmluZyBzYXZlJiM0MztyZXN0b3JlIHN0cmVzcyB0ZXN0IHdpdGggYSBuZXN0ZWQgZ3Vlc3QuLi5cbiYjMzQ7KTsKJiM0MzsJcnVuX3Rlc3QoLypuZXN0ZWQ9Ki90cnVlKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbW1fdGVzdC5jCmluZGV4IGUyNTQyZjRjZWQ2MDUuLmQxZWRhZmQ1YWY3NTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMKQEAgLTIyLDkgJiM0MzsyMiw2IEBACiAjZGVmaW5lIFNNUkFNX0dQQSAweDEwMDAwMDAKICNkZWZpbmUgU01SQU1fU1RBR0UgMHhmZQogCi0jZGVmaW5lIFNUUih4KSAjeAotI2RlZmluZSBYU1RSKHMpIFNUUihzKQotCiAjZGVmaW5lIFNZTkNfUE9SVCAweGUKICNkZWZpbmUgRE9ORSAweGZmCiAKQEAgLTQyLDcgJiM0MzszOSw3IEBAIHU4IHNtaV9oYW5kbGVyW10gPSB7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jX3dpdGhfaG9zdCh1NjQgcGhhc2UpCiB7Ci0JYXNtIHZvbGF0aWxlKCYjMzQ7aW4gJCYjMzQ7IFhTVFIoU1lOQ19QT1JUKSYjMzQ7LCAlJWFsIFxuJiMzNDsKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7aW4gJCYjMzQ7IF9fc3RyaW5naWZ5KFNZTkNfUE9SVCkmIzM0OywgJSVhbCBcbiYjMzQ7CiAJCSAgICAgOiAmIzM0OyYjNDM7YSYjMzQ7IChwaGFzZSkpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE5OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTY5CgkJCQkJCQlvdXRwdXQ6IDg4CgkJCQkJCQl0aG91Z2h0czogOTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTSBTZWxmdGVzdCBQYXRjaCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBLVk0gc2VsZnRlc3RzLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGludHJvZHVjaW5nIGEgbmV3IHRlc3QsIGBzYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuY2AsIGFuZCB0b3VjaGluZyB1cCBzb21lIGV4aXN0aW5nIHRlc3RzIGFuZCBoZWFkZXJzLiBDcnVjaWFsbHksIHRob3VnaCwgaXQmIzM5O3MgYWxsIGNvbnRhaW5lZCB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gLiAgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHVuZGVyc3Rvb2QuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGUgZmlsZSBsaXN0IGFnYWluIHRvIGJlIGFic29sdXRlbHkgc3VyZTogYE1ha2VmaWxlLmt2bWAsIGB0ZXN0X3V0aWwuaGAsIGBldm1jcy5oYCwgYHByb2Nlc3Nvci5oYCwgYHZteC5oYCwgYGFzc2VydC5jYCwgYHByb2Nlc3Nvci5jYCwgYHN2bS5jYCwgYHVjYWxsLmNgLCBgZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY2AsIGBmaXhfaHlwZXJjYWxsX3Rlc3QuY2AsIGBzYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuY2AsIGFuZCBgc21tX3Rlc3QuY2AuIFllcCwgYWxsIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gIGRpcmVjdG9yeS4KClRoZSBrZXkgdGhpbmcgaXMsIHRoaXMgaXMgKnB1cmVseSogYSBzZWxmdGVzdCBtb2RpZmljYXRpb24uIEl0IGRvZXNuJiMzOTt0IG1vZGlmeSBhbnkga2VybmVsIGNvZGUgYXQgYWxsLiBObyBjaGFuZ2VzIHRvIGBhcmNoL3g4Ni9rdm0vYCwgYHZpcnQva3ZtL2AsIG9yIGFueXdoZXJlIGVsc2UgaW4gdGhlIGtlcm5lbCBwcm9wZXIuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2Ugc3l6a2FsbGVyIGZ1enplcyB0aGUga2VybmVsIGl0c2VsZiwgbm90IHRoZSB1c2Vyc3BhY2UgdG9vbHMgdGhhdCB0ZXN0IGl0LgoKTGV0IG1lIHNlZSB3aGF0IHRoZSBpbnN0cnVjdGlvbnMgc2F5IGFib3V0IHRoaXMgc2NlbmFyaW8uICBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZnkgdGhhdCBjaGFuZ2VzIHRvIGB0b29scy9gIGFuZCBzZWxmdGVzdHMgc2hvdWxkIGJlIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHVuZGVyIHRoZXNlIGNpcmN1bXN0YW5jZXMuCgpSaWdodCwgc28gdGhpcyBmYWxscyBzcXVhcmVseSB3aXRoaW4gdGhlIGNyaXRlcmlhIGZvciBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQmIzM5O3MgYSBzZWxmdGVzdCwgYW5kIGl0JiMzOTtzIG5vdCBjaGFuZ2luZyB0aGUga2VybmVsJiMzOTtzIGJlaGF2aW9yLiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIGNvZGUsIG5vIG5ldyBmdW5jdGlvbmFsaXR5LCBub3RoaW5nIHRoYXQgd291bGQgYmUgcmVhY2hlZCBkdXJpbmcgZnV6emluZy4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3Qgd2FycmFudCBmdXp6aW5nLiAgSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNsZWFyOiB0aGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LCB3aGljaCBkbyBub3QgbW9kaWZ5IHRoZSBrZXJuZWwgY29kZSB0aGF0IHN5emthbGxlciBmdXp6ZXIgaXMgZGVzaWduZWQgdG8gdGVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxOTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhbmQgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGNvZGUgb3IgZHJpdmVycy4gU2luY2UgdGhlIGZ1enppbmcgdGFyZ2V0cyB0aGUga2VybmVsIGFuZCBub3QgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbHMsIHRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGtlcm5lbCBjaGFuZ2VzIHRvIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYW5kIG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLy4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBjb3JlIGtlcm5lbCBjb2RlIG9yIGRyaXZlcnMuIFNpbmNlIHRoZSBmdXp6aW5nIHRhcmdldHMgdGhlIGtlcm5lbCBhbmQgbm90IHVzZXJzcGFjZSB0ZXN0aW5nIHRvb2xzLCB0aGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBrZXJuZWwgY2hhbmdlcyB0byBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE5OjM5OjQyLjcwMjMxNjYyNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzIyMDI5OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgYW5kIG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLy4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBjb3JlIGtlcm5lbCBjb2RlIG9yIGRyaXZlcnMuIFNpbmNlIHRoZSBmdXp6aW5nIHRhcmdldHMgdGhlIGtlcm5lbCBhbmQgbm90IHVzZXJzcGFjZSB0ZXN0aW5nIHRvb2xzLCB0aGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBrZXJuZWwgY2hhbmdlcyB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTk6Mzk6NDIuNzAyMzI1MDg0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUyMjE1NjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTI5NDg2OGFkMDkxMzVhZjEwZTAxZTY2MDRmM2E5NzkxMWZjNTRlYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyOCAxOTozOTo0MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbmluZGV4IDg4YzZjODA0NmRkZWMuLmU2N2IxZTk4OTNmNjggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG5AQCAtMTEyLDYgKzExMiw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvc2V0X3NyZWdzX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zbW1fdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3N0YXRlX3Rlc3RcXG4rVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni92bXhfcHJlZW1wdGlvbl90aW1lcl90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvc3ZtX3ZtY2FsbF90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvc3ZtX2ludF9jdGxfdGVzdFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXFxuaW5kZXggZDY0YzhhMjI4MjA3YS4uZTgzNTZlZTU0ZDdiOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXFxuQEAgLTIzLDYgKzIzLDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5naWZ5LmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIG1zZWNzX3RvX3VzZWNzKG1zZWMpICAgICgobXNlYykgKiAxMDAwVUxMKVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaFxcbmluZGV4IGJlNzliZGEwMjRiZjEuLjgyYThlYTZiNjYxZjAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaFxcbkBAIC0xMjA3LDMwICsxMjA3LDIzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtbGF1bmNoKHZvaWQpXFxuIFxcbiBcXHRjdXJyZW50X2V2bWNzLVxcdTAwM2Vodl9jbGVhbl9maWVsZHMgPSAwO1xcbiBcXG4tXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcInB1c2ggJSVyYnA7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcmN4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJkeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyc2k7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcmRpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAkMDtcXFwiXFxuK1xcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJwdXNoICQwO1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwibW92ICUlcnNwLCAoJVtob3N0X3JzcF0pO1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwibGVhIDFmKCUlcmlwKSwgJSVyYXg7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJtb3YgJSVyYXgsICglW2hvc3RfcmlwXSk7XFxcIlxcbitcXHRcXHRcXHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cXG4gXFx0XFx0XFx0ICAgICBcXFwidm1sYXVuY2g7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJpbmNxICglJXJzcCk7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCIxOiBwb3AgJSVyYXg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyZGk7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyc2k7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyZHg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyY3g7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyYnA7XFxcIlxcbitcXHRcXHRcXHQgICAgIFxcXCIxOiA7XFxcIlxcbitcXHRcXHRcXHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cXG4rXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmF4O1xcXCJcXG4gXFx0XFx0XFx0ICAgICA6IFtyZXRdXFxcIj1cXHUwMDI2YVxcXCIocmV0KVxcbiBcXHRcXHRcXHQgICAgIDogW2hvc3RfcnNwXVxcXCJyXFxcIlxcbiBcXHRcXHRcXHQgICAgICAgKCh1NjQpXFx1MDAyNmN1cnJlbnRfZXZtY3MtXFx1MDAzZWhvc3RfcnNwKSxcXG4gXFx0XFx0XFx0ICAgICAgIFtob3N0X3JpcF1cXFwiclxcXCJcXG4tXFx0XFx0XFx0ICAgICAgICgodTY0KVxcdTAwMjZjdXJyZW50X2V2bWNzLVxcdTAwM2Vob3N0X3JpcClcXG4tXFx0XFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiLCBcXFwiY2NcXFwiLCBcXFwicmJ4XFxcIiwgXFxcInI4XFxcIiwgXFxcInI5XFxcIiwgXFxcInIxMFxcXCIsXFxuLVxcdFxcdFxcdCAgICAgICBcXFwicjExXFxcIiwgXFxcInIxMlxcXCIsIFxcXCJyMTNcXFwiLCBcXFwicjE0XFxcIiwgXFxcInIxNVxcXCIpO1xcbitcXHRcXHRcXHQgICAgICAgKCh1NjQpXFx1MDAyNmN1cnJlbnRfZXZtY3MtXFx1MDAzZWhvc3RfcmlwKSxcXG4rXFx0XFx0XFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xcbitcXHRcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIsIFxcXCJjY1xcXCIpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbkBAIC0xMjQ2LDMwICsxMjM5LDIzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGV2bWNzX3ZtcmVzdW1lKHZvaWQpXFxuIFxcdC8qIEhPU1RfUlNQICovXFxuIFxcdGN1cnJlbnRfZXZtY3MtXFx1MDAzZWh2X2NsZWFuX2ZpZWxkcyBcXHUwMDI2PSB+SFZfVk1YX0VOTElHSFRFTkVEX0NMRUFOX0ZJRUxEX0hPU1RfUE9JTlRFUjtcXG4gXFxuLVxcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJwdXNoICUlcmJwO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJjeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyZHg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcnNpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJkaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJDA7XFxcIlxcbitcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwicHVzaCAkMDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcIm1vdiAlJXJzcCwgKCVbaG9zdF9yc3BdKTtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcImxlYSAxZiglJXJpcCksICUlcmF4O1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwibW92ICUlcmF4LCAoJVtob3N0X3JpcF0pO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuIFxcdFxcdFxcdCAgICAgXFxcInZtcmVzdW1lO1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwiaW5jcSAoJSVyc3ApO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwiMTogcG9wICUlcmF4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmRpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcnNpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmR4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmN4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmJwO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBcXFwiMTogO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuK1xcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJheDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgOiBbcmV0XVxcXCI9XFx1MDAyNmFcXFwiKHJldClcXG4gXFx0XFx0XFx0ICAgICA6IFtob3N0X3JzcF1cXFwiclxcXCJcXG4gXFx0XFx0XFx0ICAgICAgICgodTY0KVxcdTAwMjZjdXJyZW50X2V2bWNzLVxcdTAwM2Vob3N0X3JzcCksXFxuIFxcdFxcdFxcdCAgICAgICBbaG9zdF9yaXBdXFxcInJcXFwiXFxuLVxcdFxcdFxcdCAgICAgICAoKHU2NClcXHUwMDI2Y3VycmVudF9ldm1jcy1cXHUwMDNlaG9zdF9yaXApXFxuLVxcdFxcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIiwgXFxcInJieFxcXCIsIFxcXCJyOFxcXCIsIFxcXCJyOVxcXCIsIFxcXCJyMTBcXFwiLFxcbi1cXHRcXHRcXHQgICAgICAgXFxcInIxMVxcXCIsIFxcXCJyMTJcXFwiLCBcXFwicjEzXFxcIiwgXFxcInIxNFxcXCIsIFxcXCJyMTVcXFwiKTtcXG4rXFx0XFx0XFx0ICAgICAgICgodTY0KVxcdTAwMjZjdXJyZW50X2V2bWNzLVxcdTAwM2Vob3N0X3JpcCksXFxuK1xcdFxcdFxcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcXG4rXFx0XFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiLCBcXFwiY2NcXFwiKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Byb2Nlc3Nvci5oXFxuaW5kZXggYjE2MTE3NGVjZTQ1My4uNDYxYzhhZWY3ZDM3YiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcXG5AQCAtMjQsNiArMjQsNyBAQCBleHRlcm4gYm9vbCBob3N0X2NwdV9pc19hbWQ7XFxuIGV4dGVybiBib29sIGhvc3RfY3B1X2lzX2h5Z29uO1xcbiBleHRlcm4gYm9vbCBob3N0X2NwdV9pc19hbWRfY29tcGF0aWJsZTtcXG4gZXh0ZXJuIHU2NCBndWVzdF90c2Nfa2h6O1xcbitleHRlcm4gc3RydWN0IGt2bV9tbXUgZ3Vlc3RfbW11O1xcbiBcXG4gI2lmbmRlZiBNQVhfTlJfQ1BVSURfRU5UUklFU1xcbiAjZGVmaW5lIE1BWF9OUl9DUFVJRF9FTlRSSUVTIDEwMFxcbkBAIC0zOTgsOCArMzk5LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgeDg2X21vZGVsKHVuc2lnbmVkIGludCBlYXgpXFxuICNkZWZpbmUgUFRFX0dFVF9QQShwdGUpXFx0XFx0KChwdGUpIFxcdTAwMjYgUEhZU0lDQUxfUEFHRV9NQVNLKVxcbiAjZGVmaW5lIFBURV9HRVRfUEZOKHB0ZSkgICAgICAgIChQVEVfR0VUX1BBKHB0ZSkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVClcXG4gXFxuLS8qIEdlbmVyYWwgUmVnaXN0ZXJzIGluIDY0LUJpdCBNb2RlICovXFxuLXN0cnVjdCBncHI2NF9yZWdzIHtcXG4rc3RydWN0IGd1ZXN0X3JlZ3Mge1xcbiBcXHR1NjQgcmF4O1xcbiBcXHR1NjQgcmN4O1xcbiBcXHR1NjQgcmR4O1xcbkBAIC00MTYsOCArNDE2LDM4IEBAIHN0cnVjdCBncHI2NF9yZWdzIHtcXG4gXFx0dTY0IHIxMztcXG4gXFx0dTY0IHIxNDtcXG4gXFx0dTY0IHIxNTtcXG4rXFx0dTY0IHJmbGFncztcXG4gfTtcXG4gXFxuK2V4dGVybiBzdHJ1Y3QgZ3Vlc3RfcmVncyBndWVzdF9yZWdzO1xcbitcXG4rI2RlZmluZSBHVUVTVF9SRUdfT0ZGU0VUKG5hbWUpIFxcXFxcXG4rXFx0W29mZl8jI25hbWVdIFxcXCJpXFxcIiAob2Zmc2V0b2Yoc3RydWN0IGd1ZXN0X3JlZ3MsIG5hbWUpKVxcbitcXG4rI2RlZmluZSBHVUVTVF9SRUdTX09GRlNFVFNcXHRcXFxcXFxuK1xcdEdVRVNUX1JFR19PRkZTRVQocmF4KSxcXHRcXFxcXFxuK1xcdEdVRVNUX1JFR19PRkZTRVQocmN4KSxcXHRcXFxcXFxuK1xcdEdVRVNUX1JFR19PRkZTRVQocmR4KSxcXHRcXFxcXFxuK1xcdEdVRVNUX1JFR19PRkZTRVQocmJ4KSxcXHRcXFxcXFxuK1xcdEdVRVNUX1JFR19PRkZTRVQocnNwKSxcXHRcXFxcXFxuK1xcdEdVRVNUX1JFR19PRkZTRVQocmJwKSxcXHRcXFxcXFxuK1xcdEdVRVNUX1JFR19PRkZTRVQocnNpKSxcXHRcXFxcXFxuK1xcdEdVRVNUX1JFR19PRkZTRVQocmRpKSxcXHRcXFxcXFxuK1xcdEdVRVNUX1JFR19PRkZTRVQocjgpLFxcdFxcXFxcXG4rXFx0R1VFU1RfUkVHX09GRlNFVChyOSksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHIxMCksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHIxMSksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHIxMiksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHIxMyksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHIxNCksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHIxNSksXFx0XFxcXFxcbitcXHRHVUVTVF9SRUdfT0ZGU0VUKHJmbGFncylcXG4rXFxuKyNkZWZpbmUgR1VFU1RfUkVHKG5hbWUpIFxcXCJndWVzdF9yZWdzICsgJWNbb2ZmX1xcXCIgI25hbWUgXFxcIl1cXFwiXFxuK1xcbisjZGVmaW5lIEdVRVNUX1NXSVRDSF9HUFJfQVNNKG5hbWUpIFxcXFxcXG4rXFx0XFxcInhjaGcgJSVcXFwiICNuYW1lIFxcXCIsIFxcXCIgR1VFU1RfUkVHKG5hbWUpIFxcXCJcXFxcblxcXFx0XFxcIlxcbitcXG4gc3RydWN0IGRlc2M2NCB7XFxuIFxcdHUxNiBsaW1pdDA7XFxuIFxcdHUxNiBiYXNlMDtcXG5AQCAtNTg0LDYgKzYxNCwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2NyMCh1NjQgdmFsKVxcbiBcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwibW92ICUwLCAlJWNyMFxcXCIgOiA6IFxcXCJyXFxcIiAodmFsKSA6IFxcXCJtZW1vcnlcXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB1NjQgZ2V0X2NyMih2b2lkKVxcbit7XFxuK1xcdHU2NCBjcjI7XFxuK1xcbitcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwibW92ICUlY3IyLCAlW2NyMl1cXFwiXFxuK1xcdFxcdFxcdCAgICAgOiAvKiBvdXRwdXQgKi8gW2NyMl1cXFwiPXJcXFwiKGNyMikpO1xcbitcXHRyZXR1cm4gY3IyO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHU2NCBnZXRfY3IzKHZvaWQpXFxuIHtcXG4gXFx0dTY0IGNyMztcXG5AQCAtODc5LDYgKzkxOCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfc3NlX3JlZyhpbnQgcmVnLCBjb25zdCBzc2UxMjhfdCAqZGF0YSlcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgaW52bHBnKHU2NCBhZGRyKVxcbit7XFxuK1xcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJpbnZscGcgKCUwKVxcXCIgOiA6IFxcXCJyXFxcIihhZGRyKSA6IFxcXCJtZW1vcnlcXFwiKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIGNwdV9yZWxheCh2b2lkKVxcbiB7XFxuIFxcdGFzbSB2b2xhdGlsZShcXFwicmVwOyBub3BcXFwiIDo6OiBcXFwibWVtb3J5XFxcIik7XFxuQEAgLTkxNSw2ICs5NTksMTEgQEAgc3RydWN0IGt2bV94ODZfc3RhdGUgKnZjcHVfc2F2ZV9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB2b2lkIHZjcHVfbG9hZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSk7XFxuIHZvaWQga3ZtX3g4Nl9zdGF0ZV9jbGVhbnVwKHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSk7XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3g4Nl9zdGF0ZV9pc19ndWVzdF9tb2RlKHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSlcXG4re1xcbitcXHRyZXR1cm4gc3RhdGUtXFx1MDAzZW5lc3RlZC5zaXplIFxcdTAwMjZcXHUwMDI2IChzdGF0ZS1cXHUwMDNlbmVzdGVkLmZsYWdzIFxcdTAwMjYgS1ZNX1NUQVRFX05FU1RFRF9HVUVTVF9NT0RFKTtcXG4rfVxcbitcXG4gY29uc3Qgc3RydWN0IGt2bV9tc3JfbGlzdCAqa3ZtX2dldF9tc3JfaW5kZXhfbGlzdCh2b2lkKTtcXG4gY29uc3Qgc3RydWN0IGt2bV9tc3JfbGlzdCAqa3ZtX2dldF9mZWF0dXJlX21zcl9pbmRleF9saXN0KHZvaWQpO1xcbiBib29sIGt2bV9tc3JfaXNfaW5fc2F2ZV9yZXN0b3JlX2xpc3QodTMyIG1zcl9pbmRleCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxcbmluZGV4IDRiY2ZkNjBlM2FlY2IuLjA0ZjVlMzRkZWEzYWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXFxuQEAgLTI5MCw2ICsyOTAsMjMgQEAgc3RydWN0IHZteF9tc3JfZW50cnkge1xcbiBcXHR1NjQgdmFsdWU7XFxuIH0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMTYpKSk7XFxuIFxcbisjZGVmaW5lIFZNWF9TV0lUQ0hfR1BSU19BU00gXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYXgpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJ4KSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJjeCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZHgpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJwKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJzaSkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZGkpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjgpICBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI5KSAgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTApIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjExKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMikgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTMpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE0KSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNSlcXG4rXFxuICNpbmNsdWRlIFxcXCJldm1jcy5oXFxcIlxcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgdm14b24odTY0IHBoeXMpXFxuQEAgLTM2Myw5ICszODAsNiBAQCBzdGF0aWMgaW5saW5lIHU2NCB2bXB0cnN0eih2b2lkKVxcbiBcXHRyZXR1cm4gdmFsdWU7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIE5vIGd1ZXN0IHN0YXRlIChlLmcuIEdQUnMpIGlzIGVzdGFibGlzaGVkIGJ5IHRoaXMgdm1sYXVuY2guXFxuLSAqL1xcbiBzdGF0aWMgaW5saW5lIGludCB2bWxhdW5jaCh2b2lkKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuQEAgLTM3MywzNCArMzg3LDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpXFxuIFxcdGlmIChlbmFibGVfZXZtY3MpXFxuIFxcdFxcdHJldHVybiBldm1jc192bWxhdW5jaCgpO1xcbiBcXG4tXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcInB1c2ggJSVyYnA7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcmN4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJkeDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyc2k7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcmRpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAkMDtcXFwiXFxuK1xcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJwdXNoICQwO1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwidm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcInZtd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuIFxcdFxcdFxcdCAgICAgXFxcInZtbGF1bmNoO1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwiaW5jcSAoJSVyc3ApO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwiMTogcG9wICUlcmF4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmRpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcnNpO1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmR4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmN4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmJwO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBcXFwiMTogO1xcXCJcXG4rXFx0XFx0XFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXFxuK1xcdFxcdFxcdCAgICAgXFxcInBvcCAlJXJheDtcXFwiXFxuIFxcdFxcdFxcdCAgICAgOiBbcmV0XVxcXCI9XFx1MDAyNmFcXFwiKHJldClcXG4gXFx0XFx0XFx0ICAgICA6IFtob3N0X3JzcF1cXFwiclxcXCIoKHU2NClIT1NUX1JTUCksXFxuLVxcdFxcdFxcdCAgICAgICBbaG9zdF9yaXBdXFxcInJcXFwiKCh1NjQpSE9TVF9SSVApXFxuLVxcdFxcdFxcdCAgICAgOiBcXFwibWVtb3J5XFxcIiwgXFxcImNjXFxcIiwgXFxcInJieFxcXCIsIFxcXCJyOFxcXCIsIFxcXCJyOVxcXCIsIFxcXCJyMTBcXFwiLFxcbi1cXHRcXHRcXHQgICAgICAgXFxcInIxMVxcXCIsIFxcXCJyMTJcXFwiLCBcXFwicjEzXFxcIiwgXFxcInIxNFxcXCIsIFxcXCJyMTVcXFwiKTtcXG4rXFx0XFx0XFx0ICAgICAgIFtob3N0X3JpcF1cXFwiclxcXCIoKHU2NClIT1NUX1JJUCksXFxuK1xcdFxcdFxcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcXG4rXFx0XFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiLCBcXFwiY2NcXFwiKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tLypcXG4tICogTm8gZ3Vlc3Qgc3RhdGUgKGUuZy4gR1BScykgaXMgZXN0YWJsaXNoZWQgYnkgdGhpcyB2bXJlc3VtZS5cXG4tICovXFxuIHN0YXRpYyBpbmxpbmUgaW50IHZtcmVzdW1lKHZvaWQpXFxuIHtcXG4gXFx0aW50IHJldDtcXG5AQCAtNDA4LDI4ICs0MTIsMjEgQEAgc3RhdGljIGlubGluZSBpbnQgdm1yZXN1bWUodm9pZClcXG4gXFx0aWYgKGVuYWJsZV9ldm1jcylcXG4gXFx0XFx0cmV0dXJuIGV2bWNzX3ZtcmVzdW1lKCk7XFxuIFxcbi1cXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwicHVzaCAlJXJicDtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyY3g7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICUlcmR4O1xcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwicHVzaCAlJXJzaTtcXFwiXFxuLVxcdFxcdFxcdCAgICAgXFxcInB1c2ggJSVyZGk7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwdXNoICQwO1xcXCJcXG4rXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcInB1c2ggJDA7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJ2bXdyaXRlICUlcnNwLCAlW2hvc3RfcnNwXTtcXFwiXFxuIFxcdFxcdFxcdCAgICAgXFxcImxlYSAxZiglJXJpcCksICUlcmF4O1xcXCJcXG4gXFx0XFx0XFx0ICAgICBcXFwidm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07XFxcIlxcbitcXHRcXHRcXHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cXG4gXFx0XFx0XFx0ICAgICBcXFwidm1yZXN1bWU7XFxcIlxcbiBcXHRcXHRcXHQgICAgIFxcXCJpbmNxICglJXJzcCk7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCIxOiBwb3AgJSVyYXg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyZGk7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyc2k7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyZHg7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyY3g7XFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJwb3AgJSVyYnA7XFxcIlxcbitcXHRcXHRcXHQgICAgIFxcXCIxOiA7XFxcIlxcbitcXHRcXHRcXHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cXG4rXFx0XFx0XFx0ICAgICBcXFwicG9wICUlcmF4O1xcXCJcXG4gXFx0XFx0XFx0ICAgICA6IFtyZXRdXFxcIj1cXHUwMDI2YVxcXCIocmV0KVxcbiBcXHRcXHRcXHQgICAgIDogW2hvc3RfcnNwXVxcXCJyXFxcIigodTY0KUhPU1RfUlNQKSxcXG4tXFx0XFx0XFx0ICAgICAgIFtob3N0X3JpcF1cXFwiclxcXCIoKHU2NClIT1NUX1JJUClcXG4tXFx0XFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiLCBcXFwiY2NcXFwiLCBcXFwicmJ4XFxcIiwgXFxcInI4XFxcIiwgXFxcInI5XFxcIiwgXFxcInIxMFxcXCIsXFxuLVxcdFxcdFxcdCAgICAgICBcXFwicjExXFxcIiwgXFxcInIxMlxcXCIsIFxcXCJyMTNcXFwiLCBcXFwicjE0XFxcIiwgXFxcInIxNVxcXCIpO1xcbitcXHRcXHRcXHQgICAgICAgW2hvc3RfcmlwXVxcXCJyXFxcIigodTY0KUhPU1RfUklQKSxcXG4rXFx0XFx0XFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xcbitcXHRcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIsIFxcXCJjY1xcXCIpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuY1xcbmluZGV4IDFkNzJkY2RmY2UzYjYuLjNlMzUzYWMzOWVlYjcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNcXG5AQCAtNzQsNyArNzQsNyBAQCB0ZXN0X2Fzc2VydChib29sIGV4cCwgY29uc3QgY2hhciAqZXhwX3N0cixcXG4gXFx0aWYgKCEoZXhwKSkge1xcbiBcXHRcXHR2YV9zdGFydChhcCwgZm10KTtcXG4gXFxuLVxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiPT09PSBUZXN0IEFzc2VydGlvbiBGYWlsdXJlID09PT1cXFxcblxcXCJcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJcXFxcbj09PT0gVGVzdCBBc3NlcnRpb24gRmFpbHVyZSA9PT09XFxcXG5cXFwiXFxuIFxcdFxcdFxcdFxcXCIgICVzOiV1OiAlc1xcXFxuXFxcIlxcbiBcXHRcXHRcXHRcXFwiICBwaWQ9JWQgdGlkPSVkIGVycm5vPSVkIC0gJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdGZpbGUsIGxpbmUsIGV4cF9zdHIsIGdldHBpZCgpLCBrdm1fZ2V0dGlkKCksXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcXG5pbmRleCBlZjU2ZGNlZmUwMTE5Li5kMzFmYTgxZWEwNzU2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcXG5AQCAtMjgsNiArMjgsOSBAQCBib29sIGhvc3RfY3B1X2lzX2h5Z29uO1xcbiBib29sIGhvc3RfY3B1X2lzX2FtZF9jb21wYXRpYmxlO1xcbiBib29sIGlzX2ZvcmNlZF9lbXVsYXRpb25fZW5hYmxlZDtcXG4gdTY0IGd1ZXN0X3RzY19raHo7XFxuK3N0cnVjdCBrdm1fbW11IGd1ZXN0X21tdTtcXG4rXFxuK3N0cnVjdCBndWVzdF9yZWdzIGd1ZXN0X3JlZ3M7XFxuIFxcbiBjb25zdCBjaGFyICpleF9zdHIoaW50IHZlY3RvcilcXG4ge1xcbkBAIC04MjksNiArODMyLDE3IEBAIHZvaWQga3ZtX2FyY2hfdm1fcG9zdF9jcmVhdGUoc3RydWN0IGt2bV92bSAqdm0sIHVuc2lnbmVkIGludCBucl92Y3B1cylcXG4gXFx0VEVTVF9BU1NFUlQociBcXHUwMDNlIDAsIFxcXCJLVk1fR0VUX1RTQ19LSFogZGlkIG5vdCBwcm92aWRlIGEgdmFsaWQgVFNDIGZyZXF1ZW5jeS5cXFwiKTtcXG4gXFx0Z3Vlc3RfdHNjX2toeiA9IHI7XFxuIFxcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBndWVzdF90c2Nfa2h6KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBndWVzdCBNTVUgaXMganVzdCBhIHBsYWNlaG9sZGVyIHRvIHByb3ZpZGUgYWNjZXNzIHRvIFBURSBtYXNrc1xcbitcXHQgKiAoZm9yIG5vdykuIFRoZSBndWVzdCBkb2VzIG5vdCBoYXZlIG1hcHBpbmdzIGZvciBpdHMgb3duIHBhZ2UgdGFibGVzXFxuK1xcdCAqIGJ5IGRlZmF1bHQsIHNvIGFueSBtZWFuaW5nZnVsIHVzZSBvZiBndWVzdCBwYWdlIHRhYmxlcyByZXF1aXJlc1xcbitcXHQgKiBleHBsaWNpdCBzZXR1cCBieSB0aGUgdGVzdC4gWmVybyB0aGUgUEdEIHRvIG1ha2UgaXQgb2J2aW91cyB0aGUgZ3Vlc3RcXG4rXFx0ICogcGFnZSB0YWJsZXMgYXJlIG5vdCBpbW1lZGlhdGVseSB1c2FibGUgYnkgZ3Vlc3QgY29kZS5cXG4rXFx0ICovXFxuK1xcdGd1ZXN0X21tdSA9IHZtLVxcdTAwM2VtbXU7XFxuK1xcdGd1ZXN0X21tdS5wZ2QgPSAwO1xcbitcXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgZ3Vlc3RfbW11KTtcXG4gfVxcbiBcXG4gdm9pZCB2Y3B1X2FyY2hfc2V0X2VudHJ5X3BvaW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqZ3Vlc3RfY29kZSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uY1xcbmluZGV4IDE0NDViODkwOTg2ZmQuLmIwNWJlNTBmMDc1ZDYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uY1xcbkBAIC0xMyw5ICsxMyw2IEBAXFxuIFxcbiAjZGVmaW5lIFNFVl9ERVZfUEFUSCBcXFwiL2Rldi9zZXZcXFwiXFxuIFxcbi1zdHJ1Y3QgZ3ByNjRfcmVncyBndWVzdF9yZWdzO1xcbi11NjQgcmZsYWdzO1xcbi1cXG4gLyogQWxsb2NhdGUgbWVtb3J5IHJlZ2lvbnMgZm9yIG5lc3RlZCBTVk0gdGVzdHMuXFxuICAqXFxuICAqIElucHV0IEFyZ3M6XFxuQEAgLTEzNyw0NiArMTM0LDQ3IEBAIHZvaWQgZ2VuZXJpY19zdm1fc2V0dXAoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSwgdm9pZCAqZ3Vlc3RfcmlwKVxcbiAgKiBzYXZlL3Jlc3RvcmUgNjQtYml0IGdlbmVyYWwgcmVnaXN0ZXJzIGV4Y2VwdCByYXgsIHJpcCwgcnNwXFxuICAqIHdoaWNoIGFyZSBkaXJlY3RseSBoYW5kZWQgdGhyb3VnaCB0aGUgVk1DQiBndWVzdCBwcm9jZXNzb3Igc3RhdGVcXG4gICovXFxuLSNkZWZpbmUgU0FWRV9HUFJfQ1xcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyYngsIGd1ZXN0X3JlZ3MrMHgyMFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXJjeCwgZ3Vlc3RfcmVncysweDEwXFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcmR4LCBndWVzdF9yZWdzKzB4MThcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyYnAsIGd1ZXN0X3JlZ3MrMHgzMFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXJzaSwgZ3Vlc3RfcmVncysweDM4XFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcmRpLCBndWVzdF9yZWdzKzB4NDBcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyOCwgIGd1ZXN0X3JlZ3MrMHg0OFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXI5LCAgZ3Vlc3RfcmVncysweDUwXFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcjEwLCBndWVzdF9yZWdzKzB4NThcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyMTEsIGd1ZXN0X3JlZ3MrMHg2MFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXIxMiwgZ3Vlc3RfcmVncysweDY4XFxcXG5cXFxcdFxcXCJcXHRcXFxcXFxuLVxcdFxcXCJ4Y2hnICUlcjEzLCBndWVzdF9yZWdzKzB4NzBcXFxcblxcXFx0XFxcIlxcdFxcXFxcXG4tXFx0XFxcInhjaGcgJSVyMTQsIGd1ZXN0X3JlZ3MrMHg3OFxcXFxuXFxcXHRcXFwiXFx0XFxcXFxcbi1cXHRcXFwieGNoZyAlJXIxNSwgZ3Vlc3RfcmVncysweDgwXFxcXG5cXFxcdFxcXCJcXG4tXFxuLSNkZWZpbmUgTE9BRF9HUFJfQyAgICAgIFNBVkVfR1BSX0NcXG4rI2RlZmluZSBTVk1fU1dJVENIX0dQUlNfQVNNIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJ4KSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJjeCkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZHgpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocmJwKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJzaSkgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZGkpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjgpICBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI5KSAgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTApIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjExKSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMikgXFxcXFxcbitcXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTMpIFxcXFxcXG4rXFx0R1VFU1RfU1dJVENIX0dQUl9BU00ocjE0KSBcXFxcXFxuK1xcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNSlcXG4gXFxuIC8qXFxuICAqIHNlbGZ0ZXN0cyBkbyBub3QgdXNlIGludGVycnVwdHMgc28gd2UgZHJvcHBlZCBjbGdpL3N0aS9jbGkvc3RnaVxcbi0gKiBmb3Igbm93LiByZWdpc3RlcnMgaW52b2x2ZWQgaW4gTE9BRC9TQVZFX0dQUl9DIGFyZSBldmVudHVhbGx5XFxuKyAqIGZvciBub3cuIFJlZ2lzdGVycyBpbnZvbHZlZCBpbiBTVk1fU1dJVENIX0dQUlNfQVNNIGFyZSBldmVudHVhbGx5XFxuICAqIHVubW9kaWZpZWQgc28gdGhleSBkbyBub3QgbmVlZCB0byBiZSBpbiB0aGUgY2xvYmJlciBsaXN0LlxcbiAgKi9cXG4gdm9pZCBydW5fZ3Vlc3Qoc3RydWN0IHZtY2IgKnZtY2IsIHU2NCB2bWNiX2dwYSlcXG4ge1xcbiBcXHRhc20gdm9sYXRpbGUgKFxcbiBcXHRcXHRcXFwidm1sb2FkICVbdm1jYl9ncGFdXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0XFxcIm1vdiByZmxhZ3MsICUlcjE1XFxcXG5cXFxcdFxcXCJcXHQvLyByZmxhZ3NcXG4tXFx0XFx0XFxcIm1vdiAlJXIxNSwgMHgxNzAoJVt2bWNiXSlcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHRcXFwibW92IGd1ZXN0X3JlZ3MsICUlcjE1XFxcXG5cXFxcdFxcXCJcXHQvLyByYXhcXG4tXFx0XFx0XFxcIm1vdiAlJXIxNSwgMHgxZjgoJVt2bWNiXSlcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHRMT0FEX0dQUl9DXFxuK1xcdFxcdFxcXCJtb3YgXFxcIiBHVUVTVF9SRUcocmZsYWdzKSBcXFwiLCAlJXIxNVxcXFxuXFxcXHRcXFwiXFxuK1xcdFxcdFxcXCJtb3YgJSVyMTUsICVbdm1jYl9yZmxhZ3NdXFxcXG5cXFxcdFxcXCJcXG4rXFx0XFx0XFxcIm1vdiBcXFwiIEdVRVNUX1JFRyhyYXgpIFxcXCIsICUlcjE1XFxcXG5cXFxcdFxcXCJcXG4rXFx0XFx0XFxcIm1vdiAlJXIxNSwgJVt2bWNiX3JheF1cXFxcblxcXFx0XFxcIlxcbitcXHRcXHRTVk1fU1dJVENIX0dQUlNfQVNNXFxuIFxcdFxcdFxcXCJ2bXJ1biAlW3ZtY2JfZ3BhXVxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdFNBVkVfR1BSX0NcXG4tXFx0XFx0XFxcIm1vdiAweDE3MCglW3ZtY2JdKSwgJSVyMTVcXFxcblxcXFx0XFxcIlxcdC8vIHJmbGFnc1xcbi1cXHRcXHRcXFwibW92ICUlcjE1LCByZmxhZ3NcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHRcXFwibW92IDB4MWY4KCVbdm1jYl0pLCAlJXIxNVxcXFxuXFxcXHRcXFwiXFx0Ly8gcmF4XFxuLVxcdFxcdFxcXCJtb3YgJSVyMTUsIGd1ZXN0X3JlZ3NcXFxcblxcXFx0XFxcIlxcbitcXHRcXHRTVk1fU1dJVENIX0dQUlNfQVNNXFxuK1xcdFxcdFxcXCJtb3YgJVt2bWNiX3JmbGFnc10sICUlcjE1XFxcXG5cXFxcdFxcXCJcXG4rXFx0XFx0XFxcIm1vdiAlJXIxNSwgXFxcIiBHVUVTVF9SRUcocmZsYWdzKSBcXFwiXFxcXG5cXFxcdFxcXCJcXG4rXFx0XFx0XFxcIm1vdiAlW3ZtY2JfcmF4XSwgJSVyMTVcXFxcblxcXFx0XFxcIlxcdC8vIHJheFxcbitcXHRcXHRcXFwibW92ICUlcjE1LCBcXFwiIEdVRVNUX1JFRyhyYXgpIFxcXCJcXFxcblxcXFx0XFxcIlxcbiBcXHRcXHRcXFwidm1zYXZlICVbdm1jYl9ncGFdXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0OiA6IFt2bWNiXSBcXFwiclxcXCIgKHZtY2IpLCBbdm1jYl9ncGFdIFxcXCJhXFxcIiAodm1jYl9ncGEpXFxuK1xcdFxcdDogW3ZtY2JfcmZsYWdzXSBcXFwiK21cXFwiICh2bWNiLVxcdTAwM2VzYXZlLnJmbGFncyksXFxuK1xcdFxcdCAgW3ZtY2JfcmF4XSBcXFwiK21cXFwiICh2bWNiLVxcdTAwM2VzYXZlLnJheClcXG4rXFx0XFx0OiBbdm1jYl9ncGFdIFxcXCJhXFxcIiAodm1jYl9ncGEpLFxcbitcXHRcXHQgIEdVRVNUX1JFR1NfT0ZGU0VUU1xcbiBcXHRcXHQ6IFxcXCJyMTVcXFwiLCBcXFwibWVtb3J5XFxcIik7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jXFxuaW5kZXggZTdkZDU3OTE5NTliYS4uMzgwNTBjNjBhMDY3MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuY1xcbkBAIC0xMCwzNiArMTAsOCBAQFxcbiBcXG4gdm9pZCB1Y2FsbF9hcmNoX2RvX3VjYWxsKGd2YV90IHVjKVxcbiB7XFxuLVxcdC8qXFxuLVxcdCAqIEZJWE1FOiBSZXZlcnQgdGhpcyBoYWNrICh0aGUgZW50aXJlIGNvbW1pdCB0aGF0IGFkZGVkIGl0KSBvbmNlIG5WTVhcXG4tXFx0ICogcHJlc2VydmVzIEwyIEdQUnMgYWNyb3NzIGEgbmVzdGVkIFZNLUV4aXQuICBJZiBhIHVjYWxsIGZyb20gTDIsIGUuZy5cXG4tXFx0ICogdG8gZG8gYSBHVUVTVF9TWU5DKCksIGxhbmRzIHRoZSB2Q1BVIGluIEwxLCBhbnkgYW5kIGFsbCBHUFJzIGNhbiBiZVxcbi1cXHQgKiBjbG9iYmVyZWQgYnkgTDEuICBTYXZlIGFuZCByZXN0b3JlIG5vbi12b2xhdGlsZSBHUFJzIChjbG9iYmVyaW5nIFJCUFxcbi1cXHQgKiBpbiBwYXJ0aWN1bGFyIGlzIHByb2JsZW1hdGljKSBhbG9uZyB3aXRoIFJEWCBhbmQgUkRJICh3aGljaCBhcmVcXG4tXFx0ICogaW5wdXRzKSwgYW5kIGNsb2JiZXIgdm9sYXRpbGUgR1BScy4gKnNpZ2gqXFxuLVxcdCAqL1xcbi0jZGVmaW5lIEhPUlJJRklDX0wyX1VDQUxMX0NMT0JCRVJfSEFDS1xcdFxcXFxcXG4tXFx0XFxcInJjeFxcXCIsIFxcXCJyc2lcXFwiLCBcXFwicjhcXFwiLCBcXFwicjlcXFwiLCBcXFwicjEwXFxcIiwgXFxcInIxMVxcXCJcXG4tXFxuLVxcdGFzbSB2b2xhdGlsZShcXFwicHVzaCAlJXJicFxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInB1c2ggJSVyMTVcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwdXNoICUlcjE0XFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicHVzaCAlJXIxM1xcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInB1c2ggJSVyMTJcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJwdXNoICUlcmJ4XFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicHVzaCAlJXJkeFxcXFxuXFxcXHRcXFwiXFxuLVxcdFxcdCAgICAgXFxcInB1c2ggJSVyZGlcXFxcblxcXFx0XFxcIlxcbi1cXHRcXHQgICAgIFxcXCJpbiAlW3BvcnRdLCAlJWFsXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicG9wICUlcmRpXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicG9wICUlcmR4XFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicG9wICUlcmJ4XFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicG9wICUlcjEyXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicG9wICUlcjEzXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicG9wICUlcjE0XFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicG9wICUlcjE1XFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0ICAgICBcXFwicG9wICUlcmJwXFxcXG5cXFxcdFxcXCJcXG4tXFx0XFx0OiA6IFtwb3J0XSBcXFwiZFxcXCIgKFVDQUxMX1BJT19QT1JUKSwgXFxcIkRcXFwiICh1YykgOiBcXFwicmF4XFxcIiwgXFxcIm1lbW9yeVxcXCIsXFxuLVxcdFxcdCAgICAgSE9SUklGSUNfTDJfVUNBTExfQ0xPQkJFUl9IQUNLKTtcXG4rXFx0YXNtIHZvbGF0aWxlKFxcXCJpbiAlW3BvcnRdLCAlJWFsXFxcIlxcbitcXHRcXHQ6IDogW3BvcnRdIFxcXCJkXFxcIiAoVUNBTExfUElPX1BPUlQpLCBcXFwiRFxcXCIgKHVjKSA6IFxcXCJyYXhcXFwiLCBcXFwibWVtb3J5XFxcIik7XFxuIH1cXG4gXFxuIHZvaWQgKnVjYWxsX2FyY2hfZ2V0X3VjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9ldm1jc19zbW1fY29udHJvbHNfdGVzdC5jXFxuaW5kZXggNzdjZTg3YzQxYTg2OC4uYWE3ZjNiNDA1ZmQzMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcXG5AQCAtMjIsOSArMjIsNiBAQFxcbiBcXG4gI2RlZmluZSBTWU5DX1BPUlRcXHQweGVcXG4gXFxuLSNkZWZpbmUgU1RSKHgpICN4XFxuLSNkZWZpbmUgWFNUUihzKSBTVFIocylcXG4tXFxuIC8qXFxuICAqIFNNSSBoYW5kbGVyOiBydW5zIGluIHJlYWwtYWRkcmVzcyBtb2RlLlxcbiAgKiBSZXBvcnRzIFNNUkFNX1NUQUdFIHZpYSBwb3J0IElPLCB0aGVuIGRvZXMgUlNNLlxcbkBAIC0zNyw3ICszNCw3IEBAIHN0YXRpYyB1OCBzbWlfaGFuZGxlcltdID0ge1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHN5bmNfd2l0aF9ob3N0KHU2NCBwaGFzZSlcXG4ge1xcbi1cXHRhc20gdm9sYXRpbGUoXFxcImluICRcXFwiIFhTVFIoU1lOQ19QT1JUKSBcXFwiLCAlJWFsIFxcXFxuXFxcIlxcbitcXHRhc20gdm9sYXRpbGUoXFxcImluICRcXFwiIF9fc3RyaW5naWZ5KFNZTkNfUE9SVCkgXFxcIiwgJSVhbCBcXFxcblxcXCJcXG4gXFx0XFx0ICAgICA6IFxcXCIrYVxcXCIgKHBoYXNlKSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZml4X2h5cGVyY2FsbF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jXFxuaW5kZXggNzUzYTBlNzMwZWE4ZC4uNDkzMWVjMjI3NjhlZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9maXhfaHlwZXJjYWxsX3Rlc3QuY1xcbkBAIC02LDcgKzYsNiBAQFxcbiAgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fcGFyYS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX3BhcmEuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3RkaW50LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwia3ZtX3Rlc3RfaGFybmVzcy5oXFxcIlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYmExZDcyMzAwMWU5NFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jXFxuQEAgLTAsMCArMSwyOTEgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NwdGhyZWFkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzaWduYWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZ2V0b3B0LmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwidGVzdF91dGlsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrdm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwicHJvY2Vzc29yLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzdm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwidm14LmhcXFwiXFxuK1xcbisjZGVmaW5lIE5SX0lURVJBVElPTlNcXHRcXHQ1MDBcXG4rXFxuKyNkZWZpbmUgUFRSU19QRVJfUFRFXFx0XFx0NTEyXFxuKyNkZWZpbmUgUFhEX0lOREVYKHZhZGRyLCBsZXZlbClcXHQoKCh2YWRkcikgXFx1MDAzZVxcdTAwM2UgUEdfTEVWRUxfU0hJRlQobGV2ZWwpKSBcXHUwMDI2IChQVFJTX1BFUl9QVEUgLSAxKSlcXG4rXFxuKyNkZWZpbmUgVEVTVF9NRU1fQkFTRV9HVkFcXHQweGMwMDAwMDAwVUxMXFxuKyNkZWZpbmUgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVRcXHQweGQwMDAwMDAwVUxMXFxuKyNkZWZpbmUgUEFUVEVSTlxcdFxcdFxcdDB4YWJjZGVmYWJjZGVmYWJjZFVMTFxcbitcXG4rc3RhdGljIHU2NCBleHBlY3RlZF92YWRkcjtcXG4rc3RhdGljIHU2NCBndWVzdF9mYXVsdHM7XFxuK1xcbitzdGF0aWMgdTY0ICpndWVzdF9nZXRfcHRlKHU2NCB2YWRkcilcXG4re1xcbitcXHR1NjQgcGd0YWJsZV9wYSwgcHRlO1xcbitcXHR1NjQgKnBndGFibGU7XFxuK1xcdGludCBsZXZlbDtcXG4rXFxuK1xcdGxldmVsID0gKGdldF9jcjQoKSBcXHUwMDI2IFg4Nl9DUjRfTEE1NykgPyBQR19MRVZFTF8yNTZUIDogUEdfTEVWRUxfNTEyRztcXG4rXFxuK1xcdHBndGFibGVfcGEgPSBnZXRfY3IzKCkgXFx1MDAyNiBQSFlTSUNBTF9QQUdFX01BU0s7XFxuK1xcdGZvciAoOyBsZXZlbCBcXHUwMDNlIFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7XFxuK1xcdFxcdHBndGFibGUgPSAodTY0ICopKHBndGFibGVfcGEgKyBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVCk7XFxuK1xcdFxcdHB0ZSA9IHBndGFibGVbUFhEX0lOREVYKHZhZGRyLCBsZXZlbCldO1xcbitcXHRcXHRHVUVTVF9BU1NFUlQocHRlIFxcdTAwMjYgUFRFX1BSRVNFTlRfTUFTSyhcXHUwMDI2Z3Vlc3RfbW11KSk7XFxuK1xcdFxcdEdVRVNUX0FTU0VSVCghKHB0ZSBcXHUwMDI2IFBURV9IVUdFX01BU0soXFx1MDAyNmd1ZXN0X21tdSkpKTtcXG4rXFx0XFx0cGd0YWJsZV9wYSA9IFBURV9HRVRfUEEocHRlKTtcXG4rXFx0fVxcbitcXG4rXFx0cGd0YWJsZSA9ICh1NjQgKikocGd0YWJsZV9wYSArIFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUKTtcXG4rXFx0cmV0dXJuIFxcdTAwMjZwZ3RhYmxlW1BYRF9JTkRFWCh2YWRkciwgUEdfTEVWRUxfNEspXTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZ3Vlc3RfcGZfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncylcXG4re1xcbitcXHR1NjQgZmF1bHRfYWRkcjtcXG4rXFx0dTY0ICpwdGVwO1xcbitcXG4rXFx0ZmF1bHRfYWRkciA9IGdldF9jcjIoKTtcXG4rXFx0R1VFU1RfQVNTRVJUX0VRKGZhdWx0X2FkZHIsIFJFQURfT05DRShleHBlY3RlZF92YWRkcikpO1xcbitcXG4rXFx0cHRlcCA9IGd1ZXN0X2dldF9wdGUoZmF1bHRfYWRkcik7XFxuK1xcdEdVRVNUX0FTU0VSVChwdGVwKTtcXG4rXFx0R1VFU1RfQVNTRVJUKCEoKnB0ZXAgXFx1MDAyNiBQVEVfUFJFU0VOVF9NQVNLKFxcdTAwMjZndWVzdF9tbXUpKSk7XFxuK1xcbitcXHQqcHRlcCB8PSBQVEVfUFJFU0VOVF9NQVNLKFxcdTAwMjZndWVzdF9tbXUpO1xcbitcXHRndWVzdF9mYXVsdHMrKztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZ3Vlc3RfYWNjZXNzX21lbW9yeSh2b2lkICphcmcpXFxuK3tcXG4rXFx0dTY0IHZhZGRyLCB2YWw7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgOyBpKyspIHtcXG4rXFx0XFx0dmFkZHIgPSBURVNUX01FTV9CQVNFX0dWQSArIChpICUgUFRSU19QRVJfUFRFKSAqIFBBR0VfU0laRTtcXG4rXFx0XFx0V1JJVEVfT05DRShleHBlY3RlZF92YWRkciwgdmFkZHIpO1xcbitcXG4rXFx0XFx0LyogUmVhZCB0byB0cmlnZ2VyICNQRiAqL1xcbitcXHRcXHR2YWwgPSBSRUFEX09OQ0UoKih1NjQgKil2YWRkcik7XFxuK1xcdFxcdEdVRVNUX0FTU0VSVF9FUSh2YWwsIFBBVFRFUk4pO1xcbitcXG4rXFx0XFx0LyogQ2xlYXIgdGhlIHByZXNlbnQgYml0IGFnYWluIHNvIGl0IGZhdWx0cyBuZXh0IHRpbWUgKi9cXG4rXFx0XFx0Kmd1ZXN0X2dldF9wdGUodmFkZHIpIFxcdTAwMjY9IH5QVEVfUFJFU0VOVF9NQVNLKFxcdTAwMjZndWVzdF9tbXUpO1xcbitcXHRcXHRpbnZscGcodmFkZHIpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGwxX3N2bV9jb2RlKHN0cnVjdCBzdm1fdGVzdF9kYXRhICpzdm0pXFxuK3tcXG4rXFx0Z2VuZXJpY19zdm1fc2V0dXAoc3ZtLCBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcXG4rXFx0c3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zIHw9IEJJVChVRF9WRUNUT1IpO1xcbitcXG4rXFx0d2hpbGUgKDEpIHtcXG4rXFx0XFx0cnVuX2d1ZXN0KHN2bS1cXHUwMDNldm1jYiwgc3ZtLVxcdTAwM2V2bWNiX2dwYSk7XFxuK1xcdFxcdEdVRVNUX0FTU0VSVF9FUShzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9jb2RlLFxcbitcXHRcXHRcXHRcXHQoU1ZNX0VYSVRfRVhDUF9CQVNFICsgVURfVkVDVE9SKSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbDFfdm14X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14KVxcbit7XFxuK1xcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteCkpO1xcbitcXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteCkpO1xcbitcXHRwcmVwYXJlX3ZtY3Modm14LCBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcXG4rXFxuK1xcdC8qIEludGVyY2VwdCBVRCwgaWdub3JlIGFueSAjUEYgKi9cXG4rXFx0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKEVYQ0VQVElPTl9CSVRNQVAsIEJJVChVRF9WRUNUT1IpIHwgQklUKFBGX1ZFQ1RPUikpKTtcXG4rXFx0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKFBBR0VfRkFVTFRfRVJST1JfQ09ERV9NQVNLLCAwKSk7XFxuK1xcdEdVRVNUX0FTU0VSVCghdm13cml0ZShQQUdFX0ZBVUxUX0VSUk9SX0NPREVfTUFUQ0gsIC0xKSk7XFxuK1xcbitcXHRHVUVTVF9BU1NFUlQoIXZtbGF1bmNoKCkpO1xcbitcXHR3aGlsZSAoMSkge1xcbitcXHRcXHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX1JFQVNPTiksIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkpO1xcbitcXHRcXHRHVUVTVF9BU1NFUlRfRVEodm1yZWFkeihWTV9FWElUX0lOVFJfSU5GTykgXFx1MDAyNiAweGZmLCBVRF9WRUNUT1IpO1xcbitcXHRcXHRHVUVTVF9BU1NFUlQoIXZtcmVzdW1lKCkpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUodm9pZCAqdGVzdF9kYXRhKVxcbit7XFxuK1xcdGlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSlcXG4rXFx0XFx0bDFfc3ZtX2NvZGUodGVzdF9kYXRhKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRsMV92bXhfY29kZSh0ZXN0X2RhdGEpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCAqc2lndXNyX3RocmVhZF9mbih2b2lkICphcmcpXFxuK3tcXG4rXFx0cHRocmVhZF90IHZjcHVfdGhyZWFkID0gKHB0aHJlYWRfdClhcmc7XFxuK1xcbitcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdHB0aHJlYWRfdGVzdGNhbmNlbCgpO1xcbitcXHRcXHRwdGhyZWFkX2tpbGwodmNwdV90aHJlYWQsIFNJR1VTUjEpO1xcbitcXHRcXHR1c2xlZXAobXNlY3NfdG9fdXNlY3MoMSkpO1xcbitcXHR9XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBkdW1teV9zaWduYWxfaGFuZGxlcihpbnQgc2lnbm8pIHt9XFxuK3N0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIHNhO1xcbitcXG4rc3RhdGljIHZvaWQgdmNwdV9zaWd1c3JfbGlzdGVuKHZvaWQpXFxuK3tcXG4rXFx0c2Euc2FfaGFuZGxlciA9IGR1bW15X3NpZ25hbF9oYW5kbGVyO1xcbitcXHRzaWdhY3Rpb24oU0lHVVNSMSwgXFx1MDAyNnNhLCBOVUxMKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdmNwdV9zaWd1c3JfaWdub3JlKHZvaWQpXFxuK3tcXG4rXFx0c2Euc2FfaGFuZGxlciA9IFNJR19JR047XFxuK1xcdHNpZ2FjdGlvbihTSUdVU1IxLCBcXHUwMDI2c2EsIE5VTEwpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBrdm1feDg2X3N0YXRlX3F1ZXVlX3VkKHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSlcXG4re1xcbitcXHRpZiAoc3RhdGUtXFx1MDAzZWV2ZW50cy5leGNlcHRpb24ucGVuZGluZyB8fCBzdGF0ZS1cXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5pbmplY3RlZClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c3RhdGUtXFx1MDAzZWV2ZW50cy5mbGFncyB8PSBLVk1fVkNQVUVWRU5UX1ZBTElEX1BBWUxPQUQ7XFxuK1xcdHN0YXRlLVxcdTAwM2VldmVudHMuZXhjZXB0aW9uLnBlbmRpbmcgPSB0cnVlO1xcbitcXHRzdGF0ZS1cXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5pbmplY3RlZCA9IGZhbHNlO1xcbitcXHRzdGF0ZS1cXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5uciA9IFVEX1ZFQ1RPUjtcXG4rXFx0c3RhdGUtXFx1MDAzZWV2ZW50cy5leGNlcHRpb24uaGFzX2Vycm9yX2NvZGUgPSBmYWxzZTtcXG4rXFx0c3RhdGUtXFx1MDAzZWV2ZW50cy5leGNlcHRpb25faGFzX3BheWxvYWQgPSBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnVuX3Rlc3QoYm9vbCBuZXN0ZWQpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlO1xcbitcXHRpbnQgciwgaSwgbGV2ZWw7XFxuK1xcdHB0aHJlYWRfdCBzaWd1c3JfdGhyZWFkO1xcbitcXHRncGFfdCBncGEsIHBndGFibGVfZ3BhO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHRzdHJ1Y3QgdWNhbGwgdWM7XFxuK1xcdHU2NCAqcGd0YWJsZTtcXG4rXFx0Z3ZhX3QgZ3ZhO1xcbitcXHR1NjQgcHRlO1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgbmVzdGVkID8gbDFfZ3Vlc3RfY29kZSA6IGd1ZXN0X2FjY2Vzc19tZW1vcnkpO1xcbitcXHR2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBQRl9WRUNUT1IsIGd1ZXN0X3BmX2hhbmRsZXIpO1xcbitcXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FELCAtMnVsKTtcXG4rXFxuK1xcdGlmIChuZXN0ZWQpIHtcXG4rXFx0XFx0aWYgKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkpXFxuK1xcdFxcdFxcdHZjcHVfYWxsb2Nfc3ZtKHZtLCBcXHUwMDI2Z3ZhKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHR2Y3B1X2FsbG9jX3ZteCh2bSwgXFx1MDAyNmd2YSk7XFxuK1xcdFxcdHZjcHVfYXJnc19zZXQodmNwdSwgMSwgZ3ZhKTtcXG4rXFx0fVxcbitcXG4rXFx0LyogQWxsb2NhdGUgYSBwYWdlIGFuZCB3cml0ZSB0aGUgcGF0dGVybiB0byBpdCAqL1xcbitcXHRndmEgPSB2bV9hbGxvY19wYWdlKHZtKTtcXG4rXFx0Kih1NjQgKilhZGRyX2d2YTJodmEodm0sIGd2YSkgPSBQQVRURVJOO1xcbitcXHRncGEgPSBhZGRyX2d2YTJncGEodm0sIGd2YSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBNYXAgYWxsIHZpcnR1YWwgYWRkcmVzc2VzIHRvIHRoZSBwYXR0ZXJuIHBhZ2UgYW5kIGNsZWFyIHRoZSBwcmVzZW50XFxuK1xcdCAqIGJpdCBzdWNoIHRoYXQgZ3Vlc3QgYWNjZXNzZXMgd2lsbCBjYXVzZSBhICNQRi5cXG4rXFx0ICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBQVFJTX1BFUl9QVEU7IGkrKykge1xcbitcXHRcXHRndmEgPSBURVNUX01FTV9CQVNFX0dWQSArIGkgKiBnZXRwYWdlc2l6ZSgpO1xcbitcXHRcXHR2aXJ0X3BnX21hcCh2bSwgZ3ZhLCBncGEpO1xcbitcXHRcXHQqdm1fZ2V0X3B0ZSh2bSwgZ3ZhKSBcXHUwMDI2PSB+UFRFX1BSRVNFTlRfTUFTSyhcXHUwMDI2dm0tXFx1MDAzZW1tdSk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE5vdyBjcmVhdGUgbWFwcGluZ3MgZm9yIHRoZSBwYWdlIHRhYmxlcyBjcmVhdGVkIGFib3ZlIHNvIHRoYXQgdGhlXFxuK1xcdCAqIGd1ZXN0ICNQRiBoYW5kbGVyIGNhbiB3YWxrIHRoZW0uIEFsbCBQVEVzIGZvciB0ZXN0IHZpcnR1YWwgYWRkcmVzc2VzXFxuK1xcdCAqIHNob3VsZCBsaWUgb24gdGhlIHNhbWUgUFRFIHBhZ2UsIHNvIG9uZSBwYWdlIGlzIG1hcHBlZCBmb3IgZWFjaCBwYWdlXFxuK1xcdCAqIHRhYmxlIGxldmVsLlxcbitcXHQgKlxcbitcXHQgKiBVc2UgYW4gb2Zmc2V0IGZvciB0aGUgR1ZBIGluc3RlYWQgb2YgY3JlYXRpbmcgaWRlbnRpdHkgbWFwcGluZ3MgdG9cXG4rXFx0ICogYXZvaWQgY29sbGlzaW9uIHdpdGggZXhpc3RpbmcgbWFwcGluZ3MgYXQgbG93IEdWQXMgKGUuZy4gRUxGKS5cXG4rXFx0ICovXFxuK1xcdHBndGFibGVfZ3BhID0gdm0tXFx1MDAzZW1tdS5wZ2Q7XFxuK1xcdGZvciAobGV2ZWwgPSB2bS1cXHUwMDNlbW11LnBndGFibGVfbGV2ZWxzOyBsZXZlbCBcXHUwMDNlPSBQR19MRVZFTF80SzsgbGV2ZWwtLSkge1xcbitcXHRcXHR2aXJ0X21hcCh2bSwgcGd0YWJsZV9ncGEgKyBURVNUX1BHVEFCTEVfR1ZBX09GRlNFVCwgcGd0YWJsZV9ncGEsIDEpO1xcbitcXHRcXHRwZ3RhYmxlID0gYWRkcl9ncGEyaHZhKHZtLCBwZ3RhYmxlX2dwYSk7XFxuK1xcdFxcdHB0ZSA9IHBndGFibGVbUFhEX0lOREVYKFRFU1RfTUVNX0JBU0VfR1ZBLCBsZXZlbCldO1xcbitcXHRcXHRwZ3RhYmxlX2dwYSA9IFBURV9HRVRfUEEocHRlKTtcXG4rXFx0fVxcbitcXG4rXFx0LyogSW5pdGlhbGl6ZSB0aGUgdGhyZWFkIHNlbmRpbmcgU0lHVVNSIGFuZCBpbnN0YWxsIHRoZSBoYW5kbGVyICovXFxuK1xcdHZjcHVfc2lndXNyX2lnbm9yZSgpO1xcbitcXHRyID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnNpZ3Vzcl90aHJlYWQsIE5VTEwsIHNpZ3Vzcl90aHJlYWRfZm4sXFxuK1xcdFxcdFxcdCAgICh2b2lkICopcHRocmVhZF9zZWxmKCkpO1xcbitcXHRURVNUX0FTU0VSVCghciwgXFxcInB0aHJlYWRfY3JlYXRlKCkgZmFpbGVkOiAlZFxcXCIsIHIpO1xcbitcXG4rXFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjPSBOUl9JVEVSQVRJT05TOyBpKyspIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogT25seSBoYW5kbGUgU0lHVVNSIHdoaWxlIHRoZSB2Q1BVIGlzIHJ1bm5pbmcsIG90aGVyd2lzZVxcbitcXHRcXHQgKiBpZ25vcmUgaXQgdG8gYXZvaWQgaW50ZXJydXB0aW5nIG90aGVyIGlvY3Rscy9zeXNjYWxscy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHZjcHVfc2lndXNyX2xpc3RlbigpO1xcbitcXHRcXHRyID0gX192Y3B1X3J1bih2Y3B1KTtcXG4rXFx0XFx0aWYgKHIgPT0gLTEpXFxuK1xcdFxcdFxcdFRFU1RfQVNTRVJUX0VRKGVycm5vLCBFSU5UUik7XFxuK1xcdFxcdHZjcHVfc2lndXNyX2lnbm9yZSgpO1xcbitcXG4rXFx0XFx0LyogVGhlIGd1ZXN0IG9ubHkgZXhpdHMgZHVlIHRvIGEgc2lnbmFsIG9yIGZhaWxlZCBhc3NlcnRpb24gKi9cXG4rXFx0XFx0aWYgKCFyKSB7XFxuK1xcdFxcdFxcdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XFxuK1xcdFxcdFxcdFRFU1RfQVNTRVJUX0VRKGdldF91Y2FsbCh2Y3B1LCBcXHUwMDI2dWMpLCBVQ0FMTF9BQk9SVCk7XFxuK1xcdFxcdFxcdFJFUE9SVF9HVUVTVF9BU1NFUlQodWMpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0c3RhdGUgPSB2Y3B1X3NhdmVfc3RhdGUodmNwdSk7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBJZiB0aGUgdkNQVSBpcyBpbiBndWVzdCBtb2RlLCBpbmplY3QgYSAjVUQgdG8gdHJpZ2dlciBhblxcbitcXHRcXHQgKiBMMi1cXHUwMDNlTDEgVk0tRXhpdCBldmVyeSBvdGhlciBpdGVyYXRpb24uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoa3ZtX3g4Nl9zdGF0ZV9pc19ndWVzdF9tb2RlKHN0YXRlKSBcXHUwMDI2XFx1MDAyNiBpICUgMiA9PSAwKVxcbitcXHRcXHRcXHRrdm1feDg2X3N0YXRlX3F1ZXVlX3VkKHN0YXRlKTtcXG4rXFxuK1xcdFxcdGt2bV92bV9yZWxlYXNlKHZtKTtcXG4rXFx0XFx0dmNwdSA9IHZtX3JlY3JlYXRlX3dpdGhfb25lX3ZjcHUodm0pO1xcbitcXHRcXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FELCAtMnVsKTtcXG4rXFx0XFx0dmNwdV9sb2FkX3N0YXRlKHZjcHUsIHN0YXRlKTtcXG4rXFx0XFx0a3ZtX3g4Nl9zdGF0ZV9jbGVhbnVwKHN0YXRlKTtcXG4rXFxuK1xcdFxcdHByX2luZm8oXFxcIlxcXFxyU2F2ZStyZXN0b3JlIGl0ZXJhdGlvbnM6ICVkXFxcIiwgaSk7XFxuK1xcdH1cXG4rXFx0cHJfaW5mbyhcXFwiXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3Qodm0sIGd1ZXN0X2ZhdWx0cyk7XFxuK1xcdFRFU1RfQVNTRVJUKGd1ZXN0X2ZhdWx0cyBcXHUwMDNlIDAsIFxcXCJObyBndWVzdCBwYWdlIGZhdWx0cyB0cmlnZ2VyZWRcXFwiKTtcXG4rXFx0cHJfaW5mbyhcXFwiR3Vlc3QgcGFnZSBmYXVsdHMlczogJWx1XFxcXG5cXFwiLCBuZXN0ZWQgPyBcXFwiIChpbiBMMilcXFwiIDogXFxcIlxcXCIsIGd1ZXN0X2ZhdWx0cyk7XFxuK1xcbitcXHRwdGhyZWFkX2NhbmNlbChzaWd1c3JfdGhyZWFkKTtcXG4rXFx0cHRocmVhZF9qb2luKHNpZ3Vzcl90aHJlYWQsIE5VTEwpO1xcbitcXHRrdm1fdm1fZnJlZSh2bSk7XFxuK31cXG4rXFxuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuK3tcXG4rXFx0cHJfaW5mbyhcXFwiUnVubmluZyBzYXZlK3Jlc3RvcmUgc3RyZXNzIHRlc3QuLi5cXFxcblxcXCIpO1xcbitcXHRydW5fdGVzdCgvKm5lc3RlZD0qL2ZhbHNlKTtcXG4rXFxuK1xcdGlmICgha3ZtX2hhc19jYXAoS1ZNX0NBUF9FWENFUFRJT05fUEFZTE9BRCkgfHxcXG4rXFx0ICAgICFrdm1faGFzX2NhcChLVk1fQ0FQX05FU1RFRF9TVEFURSkgfHxcXG4rXFx0ICAgICgha3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1ZNKSBcXHUwMDI2XFx1MDAyNiAha3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSkpIHtcXG4rXFx0XFx0cHJfaW5mbyhcXFwiTmVzdGVkIHZpcnR1YWxpemF0aW9uIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nIG5lc3RlZCB0ZXN0XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHByX2luZm8oXFxcIlJ1bm5pbmcgc2F2ZStyZXN0b3JlIHN0cmVzcyB0ZXN0IHdpdGggYSBuZXN0ZWQgZ3Vlc3QuLi5cXFxcblxcXCIpO1xcbitcXHRydW5fdGVzdCgvKm5lc3RlZD0qL3RydWUpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmNcXG5pbmRleCBlMjU0MmY0Y2VkNjA1Li5kMWVkYWZkNWFmNzU1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xcbkBAIC0yMiw5ICsyMiw2IEBAXFxuICNkZWZpbmUgU01SQU1fR1BBIDB4MTAwMDAwMFxcbiAjZGVmaW5lIFNNUkFNX1NUQUdFIDB4ZmVcXG4gXFxuLSNkZWZpbmUgU1RSKHgpICN4XFxuLSNkZWZpbmUgWFNUUihzKSBTVFIocylcXG4tXFxuICNkZWZpbmUgU1lOQ19QT1JUIDB4ZVxcbiAjZGVmaW5lIERPTkUgMHhmZlxcbiBcXG5AQCAtNDIsNyArMzksNyBAQCB1OCBzbWlfaGFuZGxlcltdID0ge1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHN5bmNfd2l0aF9ob3N0KHU2NCBwaGFzZSlcXG4ge1xcbi1cXHRhc20gdm9sYXRpbGUoXFxcImluICRcXFwiIFhTVFIoU1lOQ19QT1JUKVxcXCIsICUlYWwgXFxcXG5cXFwiXFxuK1xcdGFzbSB2b2xhdGlsZShcXFwiaW4gJFxcXCIgX19zdHJpbmdpZnkoU1lOQ19QT1JUKVxcXCIsICUlYWwgXFxcXG5cXFwiXFxuIFxcdFxcdCAgICAgOiBcXFwiK2FcXFwiIChwaGFzZSkpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxOTozOTo0My44NTUxNzk3NjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTE2OTE1OTQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGFuZCBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8uIEl0IGRvZXMgbm90IG1vZGlmeSBhbnkgY29yZSBrZXJuZWwgY29kZSBvciBkcml2ZXJzLiBTaW5jZSB0aGUgZnV6emluZyB0YXJnZXRzIHRoZSBrZXJuZWwgYW5kIG5vdCB1c2Vyc3BhY2UgdGVzdGluZyB0b29scywgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwga2VybmVsIGNoYW5nZXMgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGUyOTQ4NjhhZDA5MTM1YWYxMGUwMWU2NjA0ZjNhOTc5MTFmYzU0ZWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyOCAxOTozOTo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5pbmRleCA4OGM2YzgwNDZkZGVjLi5lNjdiMWU5ODkzZjY4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuQEAgLTExMiw2ICsxMTIsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3NldF9zcmVnc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3NtbV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zdGF0ZV90ZXN0XG4rVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3ZteF9wcmVlbXB0aW9uX3RpbWVyX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3N2bV92bWNhbGxfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvc3ZtX2ludF9jdGxfdGVzdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbmluZGV4IGQ2NGM4YTIyODIwN2EuLmU4MzU2ZWU1NGQ3YjkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbkBAIC0yMyw2ICsyMyw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXHUwMDNlXG4gXG4gI2RlZmluZSBtc2Vjc190b191c2Vjcyhtc2VjKSAgICAoKG1zZWMpICogMTAwMFVMTClcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvZXZtY3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXG5pbmRleCBiZTc5YmRhMDI0YmYxLi44MmE4ZWE2YjY2MWYwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2V2bWNzLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9ldm1jcy5oXG5AQCAtMTIwNywzMCArMTIwNywyMyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1jc192bWxhdW5jaCh2b2lkKVxuIFxuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2Vodl9jbGVhbl9maWVsZHMgPSAwO1xuIFxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJwdXNoICUlcmJwO1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyY3g7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJkeDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcnNpO1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyZGk7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAkMDtcIlxuK1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJwdXNoICQwO1wiXG4gXHRcdFx0ICAgICBcIm1vdiAlJXJzcCwgKCVbaG9zdF9yc3BdKTtcIlxuIFx0XHRcdCAgICAgXCJsZWEgMWYoJSVyaXApLCAlJXJheDtcIlxuIFx0XHRcdCAgICAgXCJtb3YgJSVyYXgsICglW2hvc3RfcmlwXSk7XCJcbitcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbiBcdFx0XHQgICAgIFwidm1sYXVuY2g7XCJcbiBcdFx0XHQgICAgIFwiaW5jcSAoJSVyc3ApO1wiXG4tXHRcdFx0ICAgICBcIjE6IHBvcCAlJXJheDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyZGk7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcnNpO1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJkeDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyY3g7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmJwO1wiXG4rXHRcdFx0ICAgICBcIjE6IDtcIlxuK1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuK1x0XHRcdCAgICAgXCJwb3AgJSVyYXg7XCJcbiBcdFx0XHQgICAgIDogW3JldF1cIj1cdTAwMjZhXCIocmV0KVxuIFx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCJyXCJcbiBcdFx0XHQgICAgICAgKCh1NjQpXHUwMDI2Y3VycmVudF9ldm1jcy1cdTAwM2Vob3N0X3JzcCksXG4gXHRcdFx0ICAgICAgIFtob3N0X3JpcF1cInJcIlxuLVx0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcmlwKVxuLVx0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIsIFwicmJ4XCIsIFwicjhcIiwgXCJyOVwiLCBcInIxMFwiLFxuLVx0XHRcdCAgICAgICBcInIxMVwiLCBcInIxMlwiLCBcInIxM1wiLCBcInIxNFwiLCBcInIxNVwiKTtcbitcdFx0XHQgICAgICAgKCh1NjQpXHUwMDI2Y3VycmVudF9ldm1jcy1cdTAwM2Vob3N0X3JpcCksXG4rXHRcdFx0ICAgICAgIEdVRVNUX1JFR1NfT0ZGU0VUU1xuK1x0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTI0NiwzMCArMTIzOSwyMyBAQCBzdGF0aWMgaW5saW5lIGludCBldm1jc192bXJlc3VtZSh2b2lkKVxuIFx0LyogSE9TVF9SU1AgKi9cbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlaHZfY2xlYW5fZmllbGRzIFx1MDAyNj0gfkhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9IT1NUX1BPSU5URVI7XG4gXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJSVyYnA7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJjeDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcmR4O1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyc2k7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJkaTtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICQwO1wiXG4rXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJDA7XCJcbiBcdFx0XHQgICAgIFwibW92ICUlcnNwLCAoJVtob3N0X3JzcF0pO1wiXG4gXHRcdFx0ICAgICBcImxlYSAxZiglJXJpcCksICUlcmF4O1wiXG4gXHRcdFx0ICAgICBcIm1vdiAlJXJheCwgKCVbaG9zdF9yaXBdKTtcIlxuK1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuIFx0XHRcdCAgICAgXCJ2bXJlc3VtZTtcIlxuIFx0XHRcdCAgICAgXCJpbmNxICglJXJzcCk7XCJcbi1cdFx0XHQgICAgIFwiMTogcG9wICUlcmF4O1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJkaTtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyc2k7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmR4O1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJjeDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyYnA7XCJcbitcdFx0XHQgICAgIFwiMTogO1wiXG4rXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4rXHRcdFx0ICAgICBcInBvcCAlJXJheDtcIlxuIFx0XHRcdCAgICAgOiBbcmV0XVwiPVx1MDAyNmFcIihyZXQpXG4gXHRcdFx0ICAgICA6IFtob3N0X3JzcF1cInJcIlxuIFx0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcnNwKSxcbiBcdFx0XHQgICAgICAgW2hvc3RfcmlwXVwiclwiXG4tXHRcdFx0ICAgICAgICgodTY0KVx1MDAyNmN1cnJlbnRfZXZtY3MtXHUwMDNlaG9zdF9yaXApXG4tXHRcdFx0ICAgICA6IFwibWVtb3J5XCIsIFwiY2NcIiwgXCJyYnhcIiwgXCJyOFwiLCBcInI5XCIsIFwicjEwXCIsXG4tXHRcdFx0ICAgICAgIFwicjExXCIsIFwicjEyXCIsIFwicjEzXCIsIFwicjE0XCIsIFwicjE1XCIpO1xuK1x0XHRcdCAgICAgICAoKHU2NClcdTAwMjZjdXJyZW50X2V2bWNzLVx1MDAzZWhvc3RfcmlwKSxcbitcdFx0XHQgICAgICAgR1VFU1RfUkVHU19PRkZTRVRTXG4rXHRcdFx0ICAgICA6IFwibWVtb3J5XCIsIFwiY2NcIik7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcbmluZGV4IGIxNjExNzRlY2U0NTMuLjQ2MWM4YWVmN2QzN2IgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcHJvY2Vzc29yLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wcm9jZXNzb3IuaFxuQEAgLTI0LDYgKzI0LDcgQEAgZXh0ZXJuIGJvb2wgaG9zdF9jcHVfaXNfYW1kO1xuIGV4dGVybiBib29sIGhvc3RfY3B1X2lzX2h5Z29uO1xuIGV4dGVybiBib29sIGhvc3RfY3B1X2lzX2FtZF9jb21wYXRpYmxlO1xuIGV4dGVybiB1NjQgZ3Vlc3RfdHNjX2toejtcbitleHRlcm4gc3RydWN0IGt2bV9tbXUgZ3Vlc3RfbW11O1xuIFxuICNpZm5kZWYgTUFYX05SX0NQVUlEX0VOVFJJRVNcbiAjZGVmaW5lIE1BWF9OUl9DUFVJRF9FTlRSSUVTIDEwMFxuQEAgLTM5OCw4ICszOTksNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4ODZfbW9kZWwodW5zaWduZWQgaW50IGVheClcbiAjZGVmaW5lIFBURV9HRVRfUEEocHRlKVx0XHQoKHB0ZSkgXHUwMDI2IFBIWVNJQ0FMX1BBR0VfTUFTSylcbiAjZGVmaW5lIFBURV9HRVRfUEZOKHB0ZSkgICAgICAgIChQVEVfR0VUX1BBKHB0ZSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpXG4gXG4tLyogR2VuZXJhbCBSZWdpc3RlcnMgaW4gNjQtQml0IE1vZGUgKi9cbi1zdHJ1Y3QgZ3ByNjRfcmVncyB7XG4rc3RydWN0IGd1ZXN0X3JlZ3Mge1xuIFx0dTY0IHJheDtcbiBcdHU2NCByY3g7XG4gXHR1NjQgcmR4O1xuQEAgLTQxNiw4ICs0MTYsMzggQEAgc3RydWN0IGdwcjY0X3JlZ3Mge1xuIFx0dTY0IHIxMztcbiBcdHU2NCByMTQ7XG4gXHR1NjQgcjE1O1xuK1x0dTY0IHJmbGFncztcbiB9O1xuIFxuK2V4dGVybiBzdHJ1Y3QgZ3Vlc3RfcmVncyBndWVzdF9yZWdzO1xuK1xuKyNkZWZpbmUgR1VFU1RfUkVHX09GRlNFVChuYW1lKSBcXFxuK1x0W29mZl8jI25hbWVdIFwiaVwiIChvZmZzZXRvZihzdHJ1Y3QgZ3Vlc3RfcmVncywgbmFtZSkpXG4rXG4rI2RlZmluZSBHVUVTVF9SRUdTX09GRlNFVFNcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHJheCksXHRcXFxuK1x0R1VFU1RfUkVHX09GRlNFVChyY3gpLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocmR4KSxcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHJieCksXHRcXFxuK1x0R1VFU1RfUkVHX09GRlNFVChyc3ApLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocmJwKSxcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHJzaSksXHRcXFxuK1x0R1VFU1RfUkVHX09GRlNFVChyZGkpLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocjgpLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocjkpLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocjEwKSxcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHIxMSksXHRcXFxuK1x0R1VFU1RfUkVHX09GRlNFVChyMTIpLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocjEzKSxcdFxcXG4rXHRHVUVTVF9SRUdfT0ZGU0VUKHIxNCksXHRcXFxuK1x0R1VFU1RfUkVHX09GRlNFVChyMTUpLFx0XFxcbitcdEdVRVNUX1JFR19PRkZTRVQocmZsYWdzKVxuK1xuKyNkZWZpbmUgR1VFU1RfUkVHKG5hbWUpIFwiZ3Vlc3RfcmVncyArICVjW29mZl9cIiAjbmFtZSBcIl1cIlxuK1xuKyNkZWZpbmUgR1VFU1RfU1dJVENIX0dQUl9BU00obmFtZSkgXFxcbitcdFwieGNoZyAlJVwiICNuYW1lIFwiLCBcIiBHVUVTVF9SRUcobmFtZSkgXCJcXG5cXHRcIlxuK1xuIHN0cnVjdCBkZXNjNjQge1xuIFx0dTE2IGxpbWl0MDtcbiBcdHUxNiBiYXNlMDtcbkBAIC01ODQsNiArNjE0LDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY3IwKHU2NCB2YWwpXG4gXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcIm1vdiAlMCwgJSVjcjBcIiA6IDogXCJyXCIgKHZhbCkgOiBcIm1lbW9yeVwiKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB1NjQgZ2V0X2NyMih2b2lkKVxuK3tcbitcdHU2NCBjcjI7XG4rXG4rXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcIm1vdiAlJWNyMiwgJVtjcjJdXCJcbitcdFx0XHQgICAgIDogLyogb3V0cHV0ICovIFtjcjJdXCI9clwiKGNyMikpO1xuK1x0cmV0dXJuIGNyMjtcbit9XG4rXG4gc3RhdGljIGlubGluZSB1NjQgZ2V0X2NyMyh2b2lkKVxuIHtcbiBcdHU2NCBjcjM7XG5AQCAtODc5LDYgKzkxOCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfc3NlX3JlZyhpbnQgcmVnLCBjb25zdCBzc2UxMjhfdCAqZGF0YSlcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIGludmxwZyh1NjQgYWRkcilcbit7XG4rXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcImludmxwZyAoJTApXCIgOiA6IFwiclwiKGFkZHIpIDogXCJtZW1vcnlcIik7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVfcmVsYXgodm9pZClcbiB7XG4gXHRhc20gdm9sYXRpbGUoXCJyZXA7IG5vcFwiIDo6OiBcIm1lbW9yeVwiKTtcbkBAIC05MTUsNiArOTU5LDExIEBAIHN0cnVjdCBrdm1feDg2X3N0YXRlICp2Y3B1X3NhdmVfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHZjcHVfbG9hZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSk7XG4gdm9pZCBrdm1feDg2X3N0YXRlX2NsZWFudXAoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKTtcbiBcbitzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3g4Nl9zdGF0ZV9pc19ndWVzdF9tb2RlKHN0cnVjdCBrdm1feDg2X3N0YXRlICpzdGF0ZSlcbit7XG4rXHRyZXR1cm4gc3RhdGUtXHUwMDNlbmVzdGVkLnNpemUgXHUwMDI2XHUwMDI2IChzdGF0ZS1cdTAwM2VuZXN0ZWQuZmxhZ3MgXHUwMDI2IEtWTV9TVEFURV9ORVNURURfR1VFU1RfTU9ERSk7XG4rfVxuK1xuIGNvbnN0IHN0cnVjdCBrdm1fbXNyX2xpc3QgKmt2bV9nZXRfbXNyX2luZGV4X2xpc3Qodm9pZCk7XG4gY29uc3Qgc3RydWN0IGt2bV9tc3JfbGlzdCAqa3ZtX2dldF9mZWF0dXJlX21zcl9pbmRleF9saXN0KHZvaWQpO1xuIGJvb2wga3ZtX21zcl9pc19pbl9zYXZlX3Jlc3RvcmVfbGlzdCh1MzIgbXNyX2luZGV4KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbmluZGV4IDRiY2ZkNjBlM2FlY2IuLjA0ZjVlMzRkZWEzYWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuQEAgLTI5MCw2ICsyOTAsMjMgQEAgc3RydWN0IHZteF9tc3JfZW50cnkge1xuIFx0dTY0IHZhbHVlO1xuIH0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMTYpKSk7XG4gXG4rI2RlZmluZSBWTVhfU1dJVENIX0dQUlNfQVNNIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYXgpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYngpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyY3gpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZHgpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyYnApIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyc2kpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyZGkpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOCkgIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyOSkgIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTApIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTEpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTIpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTMpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTQpIFxcXG4rXHRHVUVTVF9TV0lUQ0hfR1BSX0FTTShyMTUpXG4rXG4gI2luY2x1ZGUgXCJldm1jcy5oXCJcbiBcbiBzdGF0aWMgaW5saW5lIGludCB2bXhvbih1NjQgcGh5cylcbkBAIC0zNjMsOSArMzgwLDYgQEAgc3RhdGljIGlubGluZSB1NjQgdm1wdHJzdHoodm9pZClcbiBcdHJldHVybiB2YWx1ZTtcbiB9XG4gXG4tLypcbi0gKiBObyBndWVzdCBzdGF0ZSAoZS5nLiBHUFJzKSBpcyBlc3RhYmxpc2hlZCBieSB0aGlzIHZtbGF1bmNoLlxuLSAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHZtbGF1bmNoKHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbkBAIC0zNzMsMzQgKzM4NywyNCBAQCBzdGF0aWMgaW5saW5lIGludCB2bWxhdW5jaCh2b2lkKVxuIFx0aWYgKGVuYWJsZV9ldm1jcylcbiBcdFx0cmV0dXJuIGV2bWNzX3ZtbGF1bmNoKCk7XG4gXG4tXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJSVyYnA7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJjeDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcmR4O1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyc2k7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJkaTtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICQwO1wiXG4rXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInB1c2ggJDA7XCJcbiBcdFx0XHQgICAgIFwidm13cml0ZSAlJXJzcCwgJVtob3N0X3JzcF07XCJcbiBcdFx0XHQgICAgIFwibGVhIDFmKCUlcmlwKSwgJSVyYXg7XCJcbiBcdFx0XHQgICAgIFwidm13cml0ZSAlJXJheCwgJVtob3N0X3JpcF07XCJcbitcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbiBcdFx0XHQgICAgIFwidm1sYXVuY2g7XCJcbiBcdFx0XHQgICAgIFwiaW5jcSAoJSVyc3ApO1wiXG4tXHRcdFx0ICAgICBcIjE6IHBvcCAlJXJheDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyZGk7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcnNpO1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJkeDtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyY3g7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmJwO1wiXG4rXHRcdFx0ICAgICBcIjE6IDtcIlxuK1x0XHRcdCAgICAgVk1YX1NXSVRDSF9HUFJTX0FTTVxuK1x0XHRcdCAgICAgXCJwb3AgJSVyYXg7XCJcbiBcdFx0XHQgICAgIDogW3JldF1cIj1cdTAwMjZhXCIocmV0KVxuIFx0XHRcdCAgICAgOiBbaG9zdF9yc3BdXCJyXCIoKHU2NClIT1NUX1JTUCksXG4tXHRcdFx0ICAgICAgIFtob3N0X3JpcF1cInJcIigodTY0KUhPU1RfUklQKVxuLVx0XHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIsIFwicmJ4XCIsIFwicjhcIiwgXCJyOVwiLCBcInIxMFwiLFxuLVx0XHRcdCAgICAgICBcInIxMVwiLCBcInIxMlwiLCBcInIxM1wiLCBcInIxNFwiLCBcInIxNVwiKTtcbitcdFx0XHQgICAgICAgW2hvc3RfcmlwXVwiclwiKCh1NjQpSE9TVF9SSVApLFxuK1x0XHRcdCAgICAgICBHVUVTVF9SRUdTX09GRlNFVFNcbitcdFx0XHQgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLS8qXG4tICogTm8gZ3Vlc3Qgc3RhdGUgKGUuZy4gR1BScykgaXMgZXN0YWJsaXNoZWQgYnkgdGhpcyB2bXJlc3VtZS5cbi0gKi9cbiBzdGF0aWMgaW5saW5lIGludCB2bXJlc3VtZSh2b2lkKVxuIHtcbiBcdGludCByZXQ7XG5AQCAtNDA4LDI4ICs0MTIsMjEgQEAgc3RhdGljIGlubGluZSBpbnQgdm1yZXN1bWUodm9pZClcbiBcdGlmIChlbmFibGVfZXZtY3MpXG4gXHRcdHJldHVybiBldm1jc192bXJlc3VtZSgpO1xuIFxuLVx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJwdXNoICUlcmJwO1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyY3g7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAlJXJkeDtcIlxuLVx0XHRcdCAgICAgXCJwdXNoICUlcnNpO1wiXG4tXHRcdFx0ICAgICBcInB1c2ggJSVyZGk7XCJcbi1cdFx0XHQgICAgIFwicHVzaCAkMDtcIlxuK1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJwdXNoICQwO1wiXG4gXHRcdFx0ICAgICBcInZtd3JpdGUgJSVyc3AsICVbaG9zdF9yc3BdO1wiXG4gXHRcdFx0ICAgICBcImxlYSAxZiglJXJpcCksICUlcmF4O1wiXG4gXHRcdFx0ICAgICBcInZtd3JpdGUgJSVyYXgsICVbaG9zdF9yaXBdO1wiXG4rXHRcdFx0ICAgICBWTVhfU1dJVENIX0dQUlNfQVNNXG4gXHRcdFx0ICAgICBcInZtcmVzdW1lO1wiXG4gXHRcdFx0ICAgICBcImluY3EgKCUlcnNwKTtcIlxuLVx0XHRcdCAgICAgXCIxOiBwb3AgJSVyYXg7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmRpO1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJzaTtcIlxuLVx0XHRcdCAgICAgXCJwb3AgJSVyZHg7XCJcbi1cdFx0XHQgICAgIFwicG9wICUlcmN4O1wiXG4tXHRcdFx0ICAgICBcInBvcCAlJXJicDtcIlxuK1x0XHRcdCAgICAgXCIxOiA7XCJcbitcdFx0XHQgICAgIFZNWF9TV0lUQ0hfR1BSU19BU01cbitcdFx0XHQgICAgIFwicG9wICUlcmF4O1wiXG4gXHRcdFx0ICAgICA6IFtyZXRdXCI9XHUwMDI2YVwiKHJldClcbiBcdFx0XHQgICAgIDogW2hvc3RfcnNwXVwiclwiKCh1NjQpSE9TVF9SU1ApLFxuLVx0XHRcdCAgICAgICBbaG9zdF9yaXBdXCJyXCIoKHU2NClIT1NUX1JJUClcbi1cdFx0XHQgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiLCBcInJieFwiLCBcInI4XCIsIFwicjlcIiwgXCJyMTBcIixcbi1cdFx0XHQgICAgICAgXCJyMTFcIiwgXCJyMTJcIiwgXCJyMTNcIiwgXCJyMTRcIiwgXCJyMTVcIik7XG4rXHRcdFx0ICAgICAgIFtob3N0X3JpcF1cInJcIigodTY0KUhPU1RfUklQKSxcbitcdFx0XHQgICAgICAgR1VFU1RfUkVHU19PRkZTRVRTXG4rXHRcdFx0ICAgICA6IFwibWVtb3J5XCIsIFwiY2NcIik7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuY1xuaW5kZXggMWQ3MmRjZGZjZTNiNi4uM2UzNTNhYzM5ZWViNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNcbkBAIC03NCw3ICs3NCw3IEBAIHRlc3RfYXNzZXJ0KGJvb2wgZXhwLCBjb25zdCBjaGFyICpleHBfc3RyLFxuIFx0aWYgKCEoZXhwKSkge1xuIFx0XHR2YV9zdGFydChhcCwgZm10KTtcbiBcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwiPT09PSBUZXN0IEFzc2VydGlvbiBGYWlsdXJlID09PT1cXG5cIlxuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJcXG49PT09IFRlc3QgQXNzZXJ0aW9uIEZhaWx1cmUgPT09PVxcblwiXG4gXHRcdFx0XCIgICVzOiV1OiAlc1xcblwiXG4gXHRcdFx0XCIgIHBpZD0lZCB0aWQ9JWQgZXJybm89JWQgLSAlc1xcblwiLFxuIFx0XHRcdGZpbGUsIGxpbmUsIGV4cF9zdHIsIGdldHBpZCgpLCBrdm1fZ2V0dGlkKCksXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xuaW5kZXggZWY1NmRjZWZlMDExOS4uZDMxZmE4MWVhMDc1NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xuQEAgLTI4LDYgKzI4LDkgQEAgYm9vbCBob3N0X2NwdV9pc19oeWdvbjtcbiBib29sIGhvc3RfY3B1X2lzX2FtZF9jb21wYXRpYmxlO1xuIGJvb2wgaXNfZm9yY2VkX2VtdWxhdGlvbl9lbmFibGVkO1xuIHU2NCBndWVzdF90c2Nfa2h6O1xuK3N0cnVjdCBrdm1fbW11IGd1ZXN0X21tdTtcbitcbitzdHJ1Y3QgZ3Vlc3RfcmVncyBndWVzdF9yZWdzO1xuIFxuIGNvbnN0IGNoYXIgKmV4X3N0cihpbnQgdmVjdG9yKVxuIHtcbkBAIC04MjksNiArODMyLDE3IEBAIHZvaWQga3ZtX2FyY2hfdm1fcG9zdF9jcmVhdGUoc3RydWN0IGt2bV92bSAqdm0sIHVuc2lnbmVkIGludCBucl92Y3B1cylcbiBcdFRFU1RfQVNTRVJUKHIgXHUwMDNlIDAsIFwiS1ZNX0dFVF9UU0NfS0haIGRpZCBub3QgcHJvdmlkZSBhIHZhbGlkIFRTQyBmcmVxdWVuY3kuXCIpO1xuIFx0Z3Vlc3RfdHNjX2toeiA9IHI7XG4gXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgZ3Vlc3RfdHNjX2toeik7XG4rXG4rXHQvKlxuK1x0ICogVGhlIGd1ZXN0IE1NVSBpcyBqdXN0IGEgcGxhY2Vob2xkZXIgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gUFRFIG1hc2tzXG4rXHQgKiAoZm9yIG5vdykuIFRoZSBndWVzdCBkb2VzIG5vdCBoYXZlIG1hcHBpbmdzIGZvciBpdHMgb3duIHBhZ2UgdGFibGVzXG4rXHQgKiBieSBkZWZhdWx0LCBzbyBhbnkgbWVhbmluZ2Z1bCB1c2Ugb2YgZ3Vlc3QgcGFnZSB0YWJsZXMgcmVxdWlyZXNcbitcdCAqIGV4cGxpY2l0IHNldHVwIGJ5IHRoZSB0ZXN0LiBaZXJvIHRoZSBQR0QgdG8gbWFrZSBpdCBvYnZpb3VzIHRoZSBndWVzdFxuK1x0ICogcGFnZSB0YWJsZXMgYXJlIG5vdCBpbW1lZGlhdGVseSB1c2FibGUgYnkgZ3Vlc3QgY29kZS5cbitcdCAqL1xuK1x0Z3Vlc3RfbW11ID0gdm0tXHUwMDNlbW11O1xuK1x0Z3Vlc3RfbW11LnBnZCA9IDA7XG4rXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgZ3Vlc3RfbW11KTtcbiB9XG4gXG4gdm9pZCB2Y3B1X2FyY2hfc2V0X2VudHJ5X3BvaW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqZ3Vlc3RfY29kZSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zdm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jXG5pbmRleCAxNDQ1Yjg5MDk4NmZkLi5iMDViZTUwZjA3NWQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc3ZtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3N2bS5jXG5AQCAtMTMsOSArMTMsNiBAQFxuIFxuICNkZWZpbmUgU0VWX0RFVl9QQVRIIFwiL2Rldi9zZXZcIlxuIFxuLXN0cnVjdCBncHI2NF9yZWdzIGd1ZXN0X3JlZ3M7XG4tdTY0IHJmbGFncztcbi1cbiAvKiBBbGxvY2F0ZSBtZW1vcnkgcmVnaW9ucyBmb3IgbmVzdGVkIFNWTSB0ZXN0cy5cbiAgKlxuICAqIElucHV0IEFyZ3M6XG5AQCAtMTM3LDQ2ICsxMzQsNDcgQEAgdm9pZCBnZW5lcmljX3N2bV9zZXR1cChzdHJ1Y3Qgc3ZtX3Rlc3RfZGF0YSAqc3ZtLCB2b2lkICpndWVzdF9yaXApXG4gICogc2F2ZS9yZXN0b3JlIDY0LWJpdCBnZW5lcmFsIHJlZ2lzdGVycyBleGNlcHQgcmF4LCByaXAsIHJzcFxuICAqIHdoaWNoIGFyZSBkaXJlY3RseSBoYW5kZWQgdGhyb3VnaCB0aGUgVk1DQiBndWVzdCBwcm9jZXNzb3Igc3RhdGVcbiAgKi9cbi0jZGVmaW5lIFNBVkVfR1BSX0NcdFx0XHRcdFxcXG4tXHRcInhjaGcgJSVyYngsIGd1ZXN0X3JlZ3MrMHgyMFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcmN4LCBndWVzdF9yZWdzKzB4MTBcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXJkeCwgZ3Vlc3RfcmVncysweDE4XFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyYnAsIGd1ZXN0X3JlZ3MrMHgzMFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcnNpLCBndWVzdF9yZWdzKzB4MzhcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXJkaSwgZ3Vlc3RfcmVncysweDQwXFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyOCwgIGd1ZXN0X3JlZ3MrMHg0OFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcjksICBndWVzdF9yZWdzKzB4NTBcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXIxMCwgZ3Vlc3RfcmVncysweDU4XFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyMTEsIGd1ZXN0X3JlZ3MrMHg2MFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcjEyLCBndWVzdF9yZWdzKzB4NjhcXG5cXHRcIlx0XFxcbi1cdFwieGNoZyAlJXIxMywgZ3Vlc3RfcmVncysweDcwXFxuXFx0XCJcdFxcXG4tXHRcInhjaGcgJSVyMTQsIGd1ZXN0X3JlZ3MrMHg3OFxcblxcdFwiXHRcXFxuLVx0XCJ4Y2hnICUlcjE1LCBndWVzdF9yZWdzKzB4ODBcXG5cXHRcIlxuLVxuLSNkZWZpbmUgTE9BRF9HUFJfQyAgICAgIFNBVkVfR1BSX0NcbisjZGVmaW5lIFNWTV9TV0lUQ0hfR1BSU19BU00gXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJieCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJjeCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkeCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJicCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJzaSkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHJkaSkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI4KSAgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHI5KSAgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMSkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMikgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxMykgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNCkgXFxcbitcdEdVRVNUX1NXSVRDSF9HUFJfQVNNKHIxNSlcbiBcbiAvKlxuICAqIHNlbGZ0ZXN0cyBkbyBub3QgdXNlIGludGVycnVwdHMgc28gd2UgZHJvcHBlZCBjbGdpL3N0aS9jbGkvc3RnaVxuLSAqIGZvciBub3cuIHJlZ2lzdGVycyBpbnZvbHZlZCBpbiBMT0FEL1NBVkVfR1BSX0MgYXJlIGV2ZW50dWFsbHlcbisgKiBmb3Igbm93LiBSZWdpc3RlcnMgaW52b2x2ZWQgaW4gU1ZNX1NXSVRDSF9HUFJTX0FTTSBhcmUgZXZlbnR1YWxseVxuICAqIHVubW9kaWZpZWQgc28gdGhleSBkbyBub3QgbmVlZCB0byBiZSBpbiB0aGUgY2xvYmJlciBsaXN0LlxuICAqL1xuIHZvaWQgcnVuX2d1ZXN0KHN0cnVjdCB2bWNiICp2bWNiLCB1NjQgdm1jYl9ncGEpXG4ge1xuIFx0YXNtIHZvbGF0aWxlIChcbiBcdFx0XCJ2bWxvYWQgJVt2bWNiX2dwYV1cXG5cXHRcIlxuLVx0XHRcIm1vdiByZmxhZ3MsICUlcjE1XFxuXFx0XCJcdC8vIHJmbGFnc1xuLVx0XHRcIm1vdiAlJXIxNSwgMHgxNzAoJVt2bWNiXSlcXG5cXHRcIlxuLVx0XHRcIm1vdiBndWVzdF9yZWdzLCAlJXIxNVxcblxcdFwiXHQvLyByYXhcbi1cdFx0XCJtb3YgJSVyMTUsIDB4MWY4KCVbdm1jYl0pXFxuXFx0XCJcbi1cdFx0TE9BRF9HUFJfQ1xuK1x0XHRcIm1vdiBcIiBHVUVTVF9SRUcocmZsYWdzKSBcIiwgJSVyMTVcXG5cXHRcIlxuK1x0XHRcIm1vdiAlJXIxNSwgJVt2bWNiX3JmbGFnc11cXG5cXHRcIlxuK1x0XHRcIm1vdiBcIiBHVUVTVF9SRUcocmF4KSBcIiwgJSVyMTVcXG5cXHRcIlxuK1x0XHRcIm1vdiAlJXIxNSwgJVt2bWNiX3JheF1cXG5cXHRcIlxuK1x0XHRTVk1fU1dJVENIX0dQUlNfQVNNXG4gXHRcdFwidm1ydW4gJVt2bWNiX2dwYV1cXG5cXHRcIlxuLVx0XHRTQVZFX0dQUl9DXG4tXHRcdFwibW92IDB4MTcwKCVbdm1jYl0pLCAlJXIxNVxcblxcdFwiXHQvLyByZmxhZ3Ncbi1cdFx0XCJtb3YgJSVyMTUsIHJmbGFnc1xcblxcdFwiXG4tXHRcdFwibW92IDB4MWY4KCVbdm1jYl0pLCAlJXIxNVxcblxcdFwiXHQvLyByYXhcbi1cdFx0XCJtb3YgJSVyMTUsIGd1ZXN0X3JlZ3NcXG5cXHRcIlxuK1x0XHRTVk1fU1dJVENIX0dQUlNfQVNNXG4rXHRcdFwibW92ICVbdm1jYl9yZmxhZ3NdLCAlJXIxNVxcblxcdFwiXG4rXHRcdFwibW92ICUlcjE1LCBcIiBHVUVTVF9SRUcocmZsYWdzKSBcIlxcblxcdFwiXG4rXHRcdFwibW92ICVbdm1jYl9yYXhdLCAlJXIxNVxcblxcdFwiXHQvLyByYXhcbitcdFx0XCJtb3YgJSVyMTUsIFwiIEdVRVNUX1JFRyhyYXgpIFwiXFxuXFx0XCJcbiBcdFx0XCJ2bXNhdmUgJVt2bWNiX2dwYV1cXG5cXHRcIlxuLVx0XHQ6IDogW3ZtY2JdIFwiclwiICh2bWNiKSwgW3ZtY2JfZ3BhXSBcImFcIiAodm1jYl9ncGEpXG4rXHRcdDogW3ZtY2JfcmZsYWdzXSBcIittXCIgKHZtY2ItXHUwMDNlc2F2ZS5yZmxhZ3MpLFxuK1x0XHQgIFt2bWNiX3JheF0gXCIrbVwiICh2bWNiLVx1MDAzZXNhdmUucmF4KVxuK1x0XHQ6IFt2bWNiX2dwYV0gXCJhXCIgKHZtY2JfZ3BhKSxcbitcdFx0ICBHVUVTVF9SRUdTX09GRlNFVFNcbiBcdFx0OiBcInIxNVwiLCBcIm1lbW9yeVwiKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvdWNhbGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3VjYWxsLmNcbmluZGV4IGU3ZGQ1NzkxOTU5YmEuLjM4MDUwYzYwYTA2NzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni91Y2FsbC5jXG5AQCAtMTAsMzYgKzEwLDggQEBcbiBcbiB2b2lkIHVjYWxsX2FyY2hfZG9fdWNhbGwoZ3ZhX3QgdWMpXG4ge1xuLVx0Lypcbi1cdCAqIEZJWE1FOiBSZXZlcnQgdGhpcyBoYWNrICh0aGUgZW50aXJlIGNvbW1pdCB0aGF0IGFkZGVkIGl0KSBvbmNlIG5WTVhcbi1cdCAqIHByZXNlcnZlcyBMMiBHUFJzIGFjcm9zcyBhIG5lc3RlZCBWTS1FeGl0LiAgSWYgYSB1Y2FsbCBmcm9tIEwyLCBlLmcuXG4tXHQgKiB0byBkbyBhIEdVRVNUX1NZTkMoKSwgbGFuZHMgdGhlIHZDUFUgaW4gTDEsIGFueSBhbmQgYWxsIEdQUnMgY2FuIGJlXG4tXHQgKiBjbG9iYmVyZWQgYnkgTDEuICBTYXZlIGFuZCByZXN0b3JlIG5vbi12b2xhdGlsZSBHUFJzIChjbG9iYmVyaW5nIFJCUFxuLVx0ICogaW4gcGFydGljdWxhciBpcyBwcm9ibGVtYXRpYykgYWxvbmcgd2l0aCBSRFggYW5kIFJESSAod2hpY2ggYXJlXG4tXHQgKiBpbnB1dHMpLCBhbmQgY2xvYmJlciB2b2xhdGlsZSBHUFJzLiAqc2lnaCpcbi1cdCAqL1xuLSNkZWZpbmUgSE9SUklGSUNfTDJfVUNBTExfQ0xPQkJFUl9IQUNLXHRcXFxuLVx0XCJyY3hcIiwgXCJyc2lcIiwgXCJyOFwiLCBcInI5XCIsIFwicjEwXCIsIFwicjExXCJcbi1cbi1cdGFzbSB2b2xhdGlsZShcInB1c2ggJSVyYnBcXG5cXHRcIlxuLVx0XHQgICAgIFwicHVzaCAlJXIxNVxcblxcdFwiXG4tXHRcdCAgICAgXCJwdXNoICUlcjE0XFxuXFx0XCJcbi1cdFx0ICAgICBcInB1c2ggJSVyMTNcXG5cXHRcIlxuLVx0XHQgICAgIFwicHVzaCAlJXIxMlxcblxcdFwiXG4tXHRcdCAgICAgXCJwdXNoICUlcmJ4XFxuXFx0XCJcbi1cdFx0ICAgICBcInB1c2ggJSVyZHhcXG5cXHRcIlxuLVx0XHQgICAgIFwicHVzaCAlJXJkaVxcblxcdFwiXG4tXHRcdCAgICAgXCJpbiAlW3BvcnRdLCAlJWFsXFxuXFx0XCJcbi1cdFx0ICAgICBcInBvcCAlJXJkaVxcblxcdFwiXG4tXHRcdCAgICAgXCJwb3AgJSVyZHhcXG5cXHRcIlxuLVx0XHQgICAgIFwicG9wICUlcmJ4XFxuXFx0XCJcbi1cdFx0ICAgICBcInBvcCAlJXIxMlxcblxcdFwiXG4tXHRcdCAgICAgXCJwb3AgJSVyMTNcXG5cXHRcIlxuLVx0XHQgICAgIFwicG9wICUlcjE0XFxuXFx0XCJcbi1cdFx0ICAgICBcInBvcCAlJXIxNVxcblxcdFwiXG4tXHRcdCAgICAgXCJwb3AgJSVyYnBcXG5cXHRcIlxuLVx0XHQ6IDogW3BvcnRdIFwiZFwiIChVQ0FMTF9QSU9fUE9SVCksIFwiRFwiICh1YykgOiBcInJheFwiLCBcIm1lbW9yeVwiLFxuLVx0XHQgICAgIEhPUlJJRklDX0wyX1VDQUxMX0NMT0JCRVJfSEFDSyk7XG4rXHRhc20gdm9sYXRpbGUoXCJpbiAlW3BvcnRdLCAlJWFsXCJcbitcdFx0OiA6IFtwb3J0XSBcImRcIiAoVUNBTExfUElPX1BPUlQpLCBcIkRcIiAodWMpIDogXCJyYXhcIiwgXCJtZW1vcnlcIik7XG4gfVxuIFxuIHZvaWQgKnVjYWxsX2FyY2hfZ2V0X3VjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcbmluZGV4IDc3Y2U4N2M0MWE4NjguLmFhN2YzYjQwNWZkMzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2V2bWNzX3NtbV9jb250cm9sc190ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZXZtY3Nfc21tX2NvbnRyb2xzX3Rlc3QuY1xuQEAgLTIyLDkgKzIyLDYgQEBcbiBcbiAjZGVmaW5lIFNZTkNfUE9SVFx0MHhlXG4gXG4tI2RlZmluZSBTVFIoeCkgI3hcbi0jZGVmaW5lIFhTVFIocykgU1RSKHMpXG4tXG4gLypcbiAgKiBTTUkgaGFuZGxlcjogcnVucyBpbiByZWFsLWFkZHJlc3MgbW9kZS5cbiAgKiBSZXBvcnRzIFNNUkFNX1NUQUdFIHZpYSBwb3J0IElPLCB0aGVuIGRvZXMgUlNNLlxuQEAgLTM3LDcgKzM0LDcgQEAgc3RhdGljIHU4IHNtaV9oYW5kbGVyW10gPSB7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHN5bmNfd2l0aF9ob3N0KHU2NCBwaGFzZSlcbiB7XG4tXHRhc20gdm9sYXRpbGUoXCJpbiAkXCIgWFNUUihTWU5DX1BPUlQpIFwiLCAlJWFsIFxcblwiXG4rXHRhc20gdm9sYXRpbGUoXCJpbiAkXCIgX19zdHJpbmdpZnkoU1lOQ19QT1JUKSBcIiwgJSVhbCBcXG5cIlxuIFx0XHQgICAgIDogXCIrYVwiIChwaGFzZSkpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2ZpeF9oeXBlcmNhbGxfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9maXhfaHlwZXJjYWxsX3Rlc3QuY1xuaW5kZXggNzUzYTBlNzMwZWE4ZC4uNDkzMWVjMjI3NjhlZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZml4X2h5cGVyY2FsbF90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvZml4X2h5cGVyY2FsbF90ZXN0LmNcbkBAIC02LDcgKzYsNiBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGFyYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX3BhcmEuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImt2bV90ZXN0X2hhcm5lc3MuaFwiXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iYTFkNzIzMDAxZTk0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NhdmVfcmVzdG9yZV9wZl9zdHJlc3NfdGVzdC5jXG5AQCAtMCwwICsxLDI5MSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NnZXRvcHQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwidGVzdF91dGlsLmhcIlxuKyNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJwcm9jZXNzb3IuaFwiXG4rI2luY2x1ZGUgXCJzdm1fdXRpbC5oXCJcbisjaW5jbHVkZSBcInZteC5oXCJcbitcbisjZGVmaW5lIE5SX0lURVJBVElPTlNcdFx0NTAwXG4rXG4rI2RlZmluZSBQVFJTX1BFUl9QVEVcdFx0NTEyXG4rI2RlZmluZSBQWERfSU5ERVgodmFkZHIsIGxldmVsKVx0KCgodmFkZHIpIFx1MDAzZVx1MDAzZSBQR19MRVZFTF9TSElGVChsZXZlbCkpIFx1MDAyNiAoUFRSU19QRVJfUFRFIC0gMSkpXG4rXG4rI2RlZmluZSBURVNUX01FTV9CQVNFX0dWQVx0MHhjMDAwMDAwMFVMTFxuKyNkZWZpbmUgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVRcdDB4ZDAwMDAwMDBVTExcbisjZGVmaW5lIFBBVFRFUk5cdFx0XHQweGFiY2RlZmFiY2RlZmFiY2RVTExcbitcbitzdGF0aWMgdTY0IGV4cGVjdGVkX3ZhZGRyO1xuK3N0YXRpYyB1NjQgZ3Vlc3RfZmF1bHRzO1xuK1xuK3N0YXRpYyB1NjQgKmd1ZXN0X2dldF9wdGUodTY0IHZhZGRyKVxuK3tcbitcdHU2NCBwZ3RhYmxlX3BhLCBwdGU7XG4rXHR1NjQgKnBndGFibGU7XG4rXHRpbnQgbGV2ZWw7XG4rXG4rXHRsZXZlbCA9IChnZXRfY3I0KCkgXHUwMDI2IFg4Nl9DUjRfTEE1NykgPyBQR19MRVZFTF8yNTZUIDogUEdfTEVWRUxfNTEyRztcbitcbitcdHBndGFibGVfcGEgPSBnZXRfY3IzKCkgXHUwMDI2IFBIWVNJQ0FMX1BBR0VfTUFTSztcbitcdGZvciAoOyBsZXZlbCBcdTAwM2UgUEdfTEVWRUxfNEs7IGxldmVsLS0pIHtcbitcdFx0cGd0YWJsZSA9ICh1NjQgKikocGd0YWJsZV9wYSArIFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VUKTtcbitcdFx0cHRlID0gcGd0YWJsZVtQWERfSU5ERVgodmFkZHIsIGxldmVsKV07XG4rXHRcdEdVRVNUX0FTU0VSVChwdGUgXHUwMDI2IFBURV9QUkVTRU5UX01BU0soXHUwMDI2Z3Vlc3RfbW11KSk7XG4rXHRcdEdVRVNUX0FTU0VSVCghKHB0ZSBcdTAwMjYgUFRFX0hVR0VfTUFTSyhcdTAwMjZndWVzdF9tbXUpKSk7XG4rXHRcdHBndGFibGVfcGEgPSBQVEVfR0VUX1BBKHB0ZSk7XG4rXHR9XG4rXG4rXHRwZ3RhYmxlID0gKHU2NCAqKShwZ3RhYmxlX3BhICsgVEVTVF9QR1RBQkxFX0dWQV9PRkZTRVQpO1xuK1x0cmV0dXJuIFx1MDAyNnBndGFibGVbUFhEX0lOREVYKHZhZGRyLCBQR19MRVZFTF80SyldO1xuK31cbitcbitzdGF0aWMgdm9pZCBndWVzdF9wZl9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKVxuK3tcbitcdHU2NCBmYXVsdF9hZGRyO1xuK1x0dTY0ICpwdGVwO1xuK1xuK1x0ZmF1bHRfYWRkciA9IGdldF9jcjIoKTtcbitcdEdVRVNUX0FTU0VSVF9FUShmYXVsdF9hZGRyLCBSRUFEX09OQ0UoZXhwZWN0ZWRfdmFkZHIpKTtcbitcbitcdHB0ZXAgPSBndWVzdF9nZXRfcHRlKGZhdWx0X2FkZHIpO1xuK1x0R1VFU1RfQVNTRVJUKHB0ZXApO1xuK1x0R1VFU1RfQVNTRVJUKCEoKnB0ZXAgXHUwMDI2IFBURV9QUkVTRU5UX01BU0soXHUwMDI2Z3Vlc3RfbW11KSkpO1xuK1xuK1x0KnB0ZXAgfD0gUFRFX1BSRVNFTlRfTUFTSyhcdTAwMjZndWVzdF9tbXUpO1xuK1x0Z3Vlc3RfZmF1bHRzKys7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGd1ZXN0X2FjY2Vzc19tZW1vcnkodm9pZCAqYXJnKVxuK3tcbitcdHU2NCB2YWRkciwgdmFsO1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyA7IGkrKykge1xuK1x0XHR2YWRkciA9IFRFU1RfTUVNX0JBU0VfR1ZBICsgKGkgJSBQVFJTX1BFUl9QVEUpICogUEFHRV9TSVpFO1xuK1x0XHRXUklURV9PTkNFKGV4cGVjdGVkX3ZhZGRyLCB2YWRkcik7XG4rXG4rXHRcdC8qIFJlYWQgdG8gdHJpZ2dlciAjUEYgKi9cbitcdFx0dmFsID0gUkVBRF9PTkNFKCoodTY0ICopdmFkZHIpO1xuK1x0XHRHVUVTVF9BU1NFUlRfRVEodmFsLCBQQVRURVJOKTtcbitcbitcdFx0LyogQ2xlYXIgdGhlIHByZXNlbnQgYml0IGFnYWluIHNvIGl0IGZhdWx0cyBuZXh0IHRpbWUgKi9cbitcdFx0Kmd1ZXN0X2dldF9wdGUodmFkZHIpIFx1MDAyNj0gflBURV9QUkVTRU5UX01BU0soXHUwMDI2Z3Vlc3RfbW11KTtcbitcdFx0aW52bHBnKHZhZGRyKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgbDFfc3ZtX2NvZGUoc3RydWN0IHN2bV90ZXN0X2RhdGEgKnN2bSlcbit7XG4rXHRnZW5lcmljX3N2bV9zZXR1cChzdm0sIGd1ZXN0X2FjY2Vzc19tZW1vcnkpO1xuK1x0c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyB8PSBCSVQoVURfVkVDVE9SKTtcbitcbitcdHdoaWxlICgxKSB7XG4rXHRcdHJ1bl9ndWVzdChzdm0tXHUwMDNldm1jYiwgc3ZtLVx1MDAzZXZtY2JfZ3BhKTtcbitcdFx0R1VFU1RfQVNTRVJUX0VRKHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9jb2RlLFxuK1x0XHRcdFx0KFNWTV9FWElUX0VYQ1BfQkFTRSArIFVEX1ZFQ1RPUikpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBsMV92bXhfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXgpXG4re1xuK1x0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14KSk7XG4rXHRHVUVTVF9BU1NFUlQobG9hZF92bWNzKHZteCkpO1xuK1x0cHJlcGFyZV92bWNzKHZteCwgZ3Vlc3RfYWNjZXNzX21lbW9yeSk7XG4rXG4rXHQvKiBJbnRlcmNlcHQgVUQsIGlnbm9yZSBhbnkgI1BGICovXG4rXHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoRVhDRVBUSU9OX0JJVE1BUCwgQklUKFVEX1ZFQ1RPUikgfCBCSVQoUEZfVkVDVE9SKSkpO1xuK1x0R1VFU1RfQVNTRVJUKCF2bXdyaXRlKFBBR0VfRkFVTFRfRVJST1JfQ09ERV9NQVNLLCAwKSk7XG4rXHRHVUVTVF9BU1NFUlQoIXZtd3JpdGUoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BVENILCAtMSkpO1xuK1xuK1x0R1VFU1RfQVNTRVJUKCF2bWxhdW5jaCgpKTtcbitcdHdoaWxlICgxKSB7XG4rXHRcdEdVRVNUX0FTU0VSVF9FUSh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSwgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSk7XG4rXHRcdEdVRVNUX0FTU0VSVF9FUSh2bXJlYWR6KFZNX0VYSVRfSU5UUl9JTkZPKSBcdTAwMjYgMHhmZiwgVURfVkVDVE9SKTtcbitcdFx0R1VFU1RfQVNTRVJUKCF2bXJlc3VtZSgpKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZSh2b2lkICp0ZXN0X2RhdGEpXG4re1xuK1x0aWYgKHRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9TVk0pKVxuK1x0XHRsMV9zdm1fY29kZSh0ZXN0X2RhdGEpO1xuK1x0ZWxzZVxuK1x0XHRsMV92bXhfY29kZSh0ZXN0X2RhdGEpO1xuK31cbitcbitzdGF0aWMgdm9pZCAqc2lndXNyX3RocmVhZF9mbih2b2lkICphcmcpXG4re1xuK1x0cHRocmVhZF90IHZjcHVfdGhyZWFkID0gKHB0aHJlYWRfdClhcmc7XG4rXG4rXHRmb3IgKDs7KSB7XG4rXHRcdHB0aHJlYWRfdGVzdGNhbmNlbCgpO1xuK1x0XHRwdGhyZWFkX2tpbGwodmNwdV90aHJlYWQsIFNJR1VTUjEpO1xuK1x0XHR1c2xlZXAobXNlY3NfdG9fdXNlY3MoMSkpO1xuK1x0fVxuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGR1bW15X3NpZ25hbF9oYW5kbGVyKGludCBzaWdubykge31cbitzdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBzYTtcbitcbitzdGF0aWMgdm9pZCB2Y3B1X3NpZ3Vzcl9saXN0ZW4odm9pZClcbit7XG4rXHRzYS5zYV9oYW5kbGVyID0gZHVtbXlfc2lnbmFsX2hhbmRsZXI7XG4rXHRzaWdhY3Rpb24oU0lHVVNSMSwgXHUwMDI2c2EsIE5VTEwpO1xuK31cbitcbitzdGF0aWMgdm9pZCB2Y3B1X3NpZ3Vzcl9pZ25vcmUodm9pZClcbit7XG4rXHRzYS5zYV9oYW5kbGVyID0gU0lHX0lHTjtcbitcdHNpZ2FjdGlvbihTSUdVU1IxLCBcdTAwMjZzYSwgTlVMTCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGt2bV94ODZfc3RhdGVfcXVldWVfdWQoc3RydWN0IGt2bV94ODZfc3RhdGUgKnN0YXRlKVxuK3tcbitcdGlmIChzdGF0ZS1cdTAwM2VldmVudHMuZXhjZXB0aW9uLnBlbmRpbmcgfHwgc3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5pbmplY3RlZClcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3RhdGUtXHUwMDNlZXZlbnRzLmZsYWdzIHw9IEtWTV9WQ1BVRVZFTlRfVkFMSURfUEFZTE9BRDtcbitcdHN0YXRlLVx1MDAzZWV2ZW50cy5leGNlcHRpb24ucGVuZGluZyA9IHRydWU7XG4rXHRzdGF0ZS1cdTAwM2VldmVudHMuZXhjZXB0aW9uLmluamVjdGVkID0gZmFsc2U7XG4rXHRzdGF0ZS1cdTAwM2VldmVudHMuZXhjZXB0aW9uLm5yID0gVURfVkVDVE9SO1xuK1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbi5oYXNfZXJyb3JfY29kZSA9IGZhbHNlO1xuK1x0c3RhdGUtXHUwMDNlZXZlbnRzLmV4Y2VwdGlvbl9oYXNfcGF5bG9hZCA9IGZhbHNlO1xuK31cbitcbitzdGF0aWMgdm9pZCBydW5fdGVzdChib29sIG5lc3RlZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3g4Nl9zdGF0ZSAqc3RhdGU7XG4rXHRpbnQgciwgaSwgbGV2ZWw7XG4rXHRwdGhyZWFkX3Qgc2lndXNyX3RocmVhZDtcbitcdGdwYV90IGdwYSwgcGd0YWJsZV9ncGE7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdHN0cnVjdCB1Y2FsbCB1YztcbitcdHU2NCAqcGd0YWJsZTtcbitcdGd2YV90IGd2YTtcbitcdHU2NCBwdGU7XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIG5lc3RlZCA/IGwxX2d1ZXN0X2NvZGUgOiBndWVzdF9hY2Nlc3NfbWVtb3J5KTtcbitcdHZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIodm0sIFBGX1ZFQ1RPUiwgZ3Vlc3RfcGZfaGFuZGxlcik7XG4rXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FELCAtMnVsKTtcbitcbitcdGlmIChuZXN0ZWQpIHtcbitcdFx0aWYgKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkpXG4rXHRcdFx0dmNwdV9hbGxvY19zdm0odm0sIFx1MDAyNmd2YSk7XG4rXHRcdGVsc2VcbitcdFx0XHR2Y3B1X2FsbG9jX3ZteCh2bSwgXHUwMDI2Z3ZhKTtcbitcdFx0dmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBndmEpO1xuK1x0fVxuK1xuK1x0LyogQWxsb2NhdGUgYSBwYWdlIGFuZCB3cml0ZSB0aGUgcGF0dGVybiB0byBpdCAqL1xuK1x0Z3ZhID0gdm1fYWxsb2NfcGFnZSh2bSk7XG4rXHQqKHU2NCAqKWFkZHJfZ3ZhMmh2YSh2bSwgZ3ZhKSA9IFBBVFRFUk47XG4rXHRncGEgPSBhZGRyX2d2YTJncGEodm0sIGd2YSk7XG4rXG4rXHQvKlxuK1x0ICogTWFwIGFsbCB2aXJ0dWFsIGFkZHJlc3NlcyB0byB0aGUgcGF0dGVybiBwYWdlIGFuZCBjbGVhciB0aGUgcHJlc2VudFxuK1x0ICogYml0IHN1Y2ggdGhhdCBndWVzdCBhY2Nlc3NlcyB3aWxsIGNhdXNlIGEgI1BGLlxuK1x0ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBQVFJTX1BFUl9QVEU7IGkrKykge1xuK1x0XHRndmEgPSBURVNUX01FTV9CQVNFX0dWQSArIGkgKiBnZXRwYWdlc2l6ZSgpO1xuK1x0XHR2aXJ0X3BnX21hcCh2bSwgZ3ZhLCBncGEpO1xuK1x0XHQqdm1fZ2V0X3B0ZSh2bSwgZ3ZhKSBcdTAwMjY9IH5QVEVfUFJFU0VOVF9NQVNLKFx1MDAyNnZtLVx1MDAzZW1tdSk7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogTm93IGNyZWF0ZSBtYXBwaW5ncyBmb3IgdGhlIHBhZ2UgdGFibGVzIGNyZWF0ZWQgYWJvdmUgc28gdGhhdCB0aGVcbitcdCAqIGd1ZXN0ICNQRiBoYW5kbGVyIGNhbiB3YWxrIHRoZW0uIEFsbCBQVEVzIGZvciB0ZXN0IHZpcnR1YWwgYWRkcmVzc2VzXG4rXHQgKiBzaG91bGQgbGllIG9uIHRoZSBzYW1lIFBURSBwYWdlLCBzbyBvbmUgcGFnZSBpcyBtYXBwZWQgZm9yIGVhY2ggcGFnZVxuK1x0ICogdGFibGUgbGV2ZWwuXG4rXHQgKlxuK1x0ICogVXNlIGFuIG9mZnNldCBmb3IgdGhlIEdWQSBpbnN0ZWFkIG9mIGNyZWF0aW5nIGlkZW50aXR5IG1hcHBpbmdzIHRvXG4rXHQgKiBhdm9pZCBjb2xsaXNpb24gd2l0aCBleGlzdGluZyBtYXBwaW5ncyBhdCBsb3cgR1ZBcyAoZS5nLiBFTEYpLlxuK1x0ICovXG4rXHRwZ3RhYmxlX2dwYSA9IHZtLVx1MDAzZW1tdS5wZ2Q7XG4rXHRmb3IgKGxldmVsID0gdm0tXHUwMDNlbW11LnBndGFibGVfbGV2ZWxzOyBsZXZlbCBcdTAwM2U9IFBHX0xFVkVMXzRLOyBsZXZlbC0tKSB7XG4rXHRcdHZpcnRfbWFwKHZtLCBwZ3RhYmxlX2dwYSArIFRFU1RfUEdUQUJMRV9HVkFfT0ZGU0VULCBwZ3RhYmxlX2dwYSwgMSk7XG4rXHRcdHBndGFibGUgPSBhZGRyX2dwYTJodmEodm0sIHBndGFibGVfZ3BhKTtcbitcdFx0cHRlID0gcGd0YWJsZVtQWERfSU5ERVgoVEVTVF9NRU1fQkFTRV9HVkEsIGxldmVsKV07XG4rXHRcdHBndGFibGVfZ3BhID0gUFRFX0dFVF9QQShwdGUpO1xuK1x0fVxuK1xuK1x0LyogSW5pdGlhbGl6ZSB0aGUgdGhyZWFkIHNlbmRpbmcgU0lHVVNSIGFuZCBpbnN0YWxsIHRoZSBoYW5kbGVyICovXG4rXHR2Y3B1X3NpZ3Vzcl9pZ25vcmUoKTtcbitcdHIgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZzaWd1c3JfdGhyZWFkLCBOVUxMLCBzaWd1c3JfdGhyZWFkX2ZuLFxuK1x0XHRcdCAgICh2b2lkICopcHRocmVhZF9zZWxmKCkpO1xuK1x0VEVTVF9BU1NFUlQoIXIsIFwicHRocmVhZF9jcmVhdGUoKSBmYWlsZWQ6ICVkXCIsIHIpO1xuK1xuK1x0Zm9yIChpID0gMTsgaSBcdTAwM2M9IE5SX0lURVJBVElPTlM7IGkrKykge1xuK1x0XHQvKlxuK1x0XHQgKiBPbmx5IGhhbmRsZSBTSUdVU1Igd2hpbGUgdGhlIHZDUFUgaXMgcnVubmluZywgb3RoZXJ3aXNlXG4rXHRcdCAqIGlnbm9yZSBpdCB0byBhdm9pZCBpbnRlcnJ1cHRpbmcgb3RoZXIgaW9jdGxzL3N5c2NhbGxzLlxuK1x0XHQgKi9cbitcdFx0dmNwdV9zaWd1c3JfbGlzdGVuKCk7XG4rXHRcdHIgPSBfX3ZjcHVfcnVuKHZjcHUpO1xuK1x0XHRpZiAociA9PSAtMSlcbitcdFx0XHRURVNUX0FTU0VSVF9FUShlcnJubywgRUlOVFIpO1xuK1x0XHR2Y3B1X3NpZ3Vzcl9pZ25vcmUoKTtcbitcbitcdFx0LyogVGhlIGd1ZXN0IG9ubHkgZXhpdHMgZHVlIHRvIGEgc2lnbmFsIG9yIGZhaWxlZCBhc3NlcnRpb24gKi9cbitcdFx0aWYgKCFyKSB7XG4rXHRcdFx0VEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX0lPKTtcbitcdFx0XHRURVNUX0FTU0VSVF9FUShnZXRfdWNhbGwodmNwdSwgXHUwMDI2dWMpLCBVQ0FMTF9BQk9SVCk7XG4rXHRcdFx0UkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0c3RhdGUgPSB2Y3B1X3NhdmVfc3RhdGUodmNwdSk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIElmIHRoZSB2Q1BVIGlzIGluIGd1ZXN0IG1vZGUsIGluamVjdCBhICNVRCB0byB0cmlnZ2VyIGFuXG4rXHRcdCAqIEwyLVx1MDAzZUwxIFZNLUV4aXQgZXZlcnkgb3RoZXIgaXRlcmF0aW9uLlxuK1x0XHQgKi9cbitcdFx0aWYgKGt2bV94ODZfc3RhdGVfaXNfZ3Vlc3RfbW9kZShzdGF0ZSkgXHUwMDI2XHUwMDI2IGkgJSAyID09IDApXG4rXHRcdFx0a3ZtX3g4Nl9zdGF0ZV9xdWV1ZV91ZChzdGF0ZSk7XG4rXG4rXHRcdGt2bV92bV9yZWxlYXNlKHZtKTtcbitcdFx0dmNwdSA9IHZtX3JlY3JlYXRlX3dpdGhfb25lX3ZjcHUodm0pO1xuK1x0XHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FELCAtMnVsKTtcbitcdFx0dmNwdV9sb2FkX3N0YXRlKHZjcHUsIHN0YXRlKTtcbitcdFx0a3ZtX3g4Nl9zdGF0ZV9jbGVhbnVwKHN0YXRlKTtcbitcbitcdFx0cHJfaW5mbyhcIlxcclNhdmUrcmVzdG9yZSBpdGVyYXRpb25zOiAlZFwiLCBpKTtcbitcdH1cbitcdHByX2luZm8oXCJcXG5cIik7XG4rXG4rXHRzeW5jX2dsb2JhbF9mcm9tX2d1ZXN0KHZtLCBndWVzdF9mYXVsdHMpO1xuK1x0VEVTVF9BU1NFUlQoZ3Vlc3RfZmF1bHRzIFx1MDAzZSAwLCBcIk5vIGd1ZXN0IHBhZ2UgZmF1bHRzIHRyaWdnZXJlZFwiKTtcbitcdHByX2luZm8oXCJHdWVzdCBwYWdlIGZhdWx0cyVzOiAlbHVcXG5cIiwgbmVzdGVkID8gXCIgKGluIEwyKVwiIDogXCJcIiwgZ3Vlc3RfZmF1bHRzKTtcbitcbitcdHB0aHJlYWRfY2FuY2VsKHNpZ3Vzcl90aHJlYWQpO1xuK1x0cHRocmVhZF9qb2luKHNpZ3Vzcl90aHJlYWQsIE5VTEwpO1xuK1x0a3ZtX3ZtX2ZyZWUodm0pO1xuK31cbitcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuK3tcbitcdHByX2luZm8oXCJSdW5uaW5nIHNhdmUrcmVzdG9yZSBzdHJlc3MgdGVzdC4uLlxcblwiKTtcbitcdHJ1bl90ZXN0KC8qbmVzdGVkPSovZmFsc2UpO1xuK1xuK1x0aWYgKCFrdm1faGFzX2NhcChLVk1fQ0FQX0VYQ0VQVElPTl9QQVlMT0FEKSB8fFxuK1x0ICAgICFrdm1faGFzX2NhcChLVk1fQ0FQX05FU1RFRF9TVEFURSkgfHxcbitcdCAgICAoIWt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NWTSkgXHUwMDI2XHUwMDI2ICFrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKSkge1xuK1x0XHRwcl9pbmZvKFwiTmVzdGVkIHZpcnR1YWxpemF0aW9uIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nIG5lc3RlZCB0ZXN0XFxuXCIpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHByX2luZm8oXCJSdW5uaW5nIHNhdmUrcmVzdG9yZSBzdHJlc3MgdGVzdCB3aXRoIGEgbmVzdGVkIGd1ZXN0Li4uXFxuXCIpO1xuK1x0cnVuX3Rlc3QoLypuZXN0ZWQ9Ki90cnVlKTtcbitcdHJldHVybiAwO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmNcbmluZGV4IGUyNTQyZjRjZWQ2MDUuLmQxZWRhZmQ1YWY3NTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtbV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21tX3Rlc3QuY1xuQEAgLTIyLDkgKzIyLDYgQEBcbiAjZGVmaW5lIFNNUkFNX0dQQSAweDEwMDAwMDBcbiAjZGVmaW5lIFNNUkFNX1NUQUdFIDB4ZmVcbiBcbi0jZGVmaW5lIFNUUih4KSAjeFxuLSNkZWZpbmUgWFNUUihzKSBTVFIocylcbi1cbiAjZGVmaW5lIFNZTkNfUE9SVCAweGVcbiAjZGVmaW5lIERPTkUgMHhmZlxuIFxuQEAgLTQyLDcgKzM5LDcgQEAgdTggc21pX2hhbmRsZXJbXSA9IHtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc3luY193aXRoX2hvc3QodTY0IHBoYXNlKVxuIHtcbi1cdGFzbSB2b2xhdGlsZShcImluICRcIiBYU1RSKFNZTkNfUE9SVClcIiwgJSVhbCBcXG5cIlxuK1x0YXNtIHZvbGF0aWxlKFwiaW4gJFwiIF9fc3RyaW5naWZ5KFNZTkNfUE9SVClcIiwgJSVhbCBcXG5cIlxuIFx0XHQgICAgIDogXCIrYVwiIChwaGFzZSkpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE5OjM5OjQzLjg1NTE4MTIxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTY5MTI3NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBTZWxmdGVzdCBQYXRjaCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgS1ZNIHNlbGZ0ZXN0cy4gSXQgbG9va3MgbGlrZSBpdCdzIGludHJvZHVjaW5nIGEgbmV3IHRlc3QsIGBzYXZlX3Jlc3RvcmVfcGZfc3RyZXNzX3Rlc3QuY2AsIGFuZCB0b3VjaGluZyB1cCBzb21lIGV4aXN0aW5nIHRlc3RzIGFuZCBoZWFkZXJzLiBDcnVjaWFsbHksIHRob3VnaCwgaXQncyBhbGwgY29udGFpbmVkIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AuICBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdW5kZXJzdG9vZC5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhlIGZpbGUgbGlzdCBhZ2FpbiB0byBiZSBhYnNvbHV0ZWx5IHN1cmU6IGBNYWtlZmlsZS5rdm1gLCBgdGVzdF91dGlsLmhgLCBgZXZtY3MuaGAsIGBwcm9jZXNzb3IuaGAsIGB2bXguaGAsIGBhc3NlcnQuY2AsIGBwcm9jZXNzb3IuY2AsIGBzdm0uY2AsIGB1Y2FsbC5jYCwgYGV2bWNzX3NtbV9jb250cm9sc190ZXN0LmNgLCBgZml4X2h5cGVyY2FsbF90ZXN0LmNgLCBgc2F2ZV9yZXN0b3JlX3BmX3N0cmVzc190ZXN0LmNgLCBhbmQgYHNtbV90ZXN0LmNgLiBZZXAsIGFsbCB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYCBkaXJlY3RvcnkuXG5cblRoZSBrZXkgdGhpbmcgaXMsIHRoaXMgaXMgKnB1cmVseSogYSBzZWxmdGVzdCBtb2RpZmljYXRpb24uIEl0IGRvZXNuJ3QgbW9kaWZ5IGFueSBrZXJuZWwgY29kZSBhdCBhbGwuIE5vIGNoYW5nZXMgdG8gYGFyY2gveDg2L2t2bS9gLCBgdmlydC9rdm0vYCwgb3IgYW55d2hlcmUgZWxzZSBpbiB0aGUga2VybmVsIHByb3Blci4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBzeXprYWxsZXIgZnV6emVzIHRoZSBrZXJuZWwgaXRzZWxmLCBub3QgdGhlIHVzZXJzcGFjZSB0b29scyB0aGF0IHRlc3QgaXQuXG5cbkxldCBtZSBzZWUgd2hhdCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSBhYm91dCB0aGlzIHNjZW5hcmlvLiAgVGhlIGluc3RydWN0aW9ucyBzcGVjaWZ5IHRoYXQgY2hhbmdlcyB0byBgdG9vbHMvYCBhbmQgc2VsZnRlc3RzIHNob3VsZCBiZSBgV29ydGhGdXp6aW5nPWZhbHNlYCB1bmRlciB0aGVzZSBjaXJjdW1zdGFuY2VzLlxuXG5SaWdodCwgc28gdGhpcyBmYWxscyBzcXVhcmVseSB3aXRoaW4gdGhlIGNyaXRlcmlhIGZvciBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQncyBhIHNlbGZ0ZXN0LCBhbmQgaXQncyBub3QgY2hhbmdpbmcgdGhlIGtlcm5lbCdzIGJlaGF2aW9yLiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgY29kZSwgbm8gbmV3IGZ1bmN0aW9uYWxpdHksIG5vdGhpbmcgdGhhdCB3b3VsZCBiZSByZWFjaGVkIGR1cmluZyBmdXp6aW5nLlxuXG5UaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3Qgd2FycmFudCBmdXp6aW5nLiAgSSdtIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgY2xlYXI6IHRoZSBwYXRjaCBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnksIHdoaWNoIGRvIG5vdCBtb2RpZnkgdGhlIGtlcm5lbCBjb2RlIHRoYXQgc3l6a2FsbGVyIGZ1enplciBpcyBkZXNpZ25lZCB0byB0ZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk2OSwiT3V0cHV0VG9rZW5zIjo4OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE5OjM5OjU1LjAyNDMxMjUwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGFuZCBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8uIEl0IGRvZXMgbm90IG1vZGlmeSBhbnkgY29yZSBrZXJuZWwgY29kZSBvciBkcml2ZXJzLiBTaW5jZSB0aGUgZnV6emluZyB0YXJnZXRzIHRoZSBrZXJuZWwgYW5kIG5vdCB1c2Vyc3BhY2UgdGVzdGluZyB0b29scywgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwga2VybmVsIGNoYW5nZXMgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhbmQgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGNvZGUgb3IgZHJpdmVycy4gU2luY2UgdGhlIGZ1enppbmcgdGFyZ2V0cyB0aGUga2VybmVsIGFuZCBub3QgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbHMsIHRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGtlcm5lbCBjaGFuZ2VzIHRvIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow77r52[1] Phase: Running StartedAt: 2026-07-28 19:40:07 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77r52[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-28 19:40:07 +0000 UTC FinishedAt: 2026-07-28 19:40:26 +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,}