Name: series-workflow5484k Phase: Failed StartedAt: 2026-08-28 21:59:49 +0000 UTC FinishedAt: 2026-08-28 22:43:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5484k[0] Phase: Succeeded StartedAt: 2026-08-28 21:59:49 +0000 UTC FinishedAt: 2026-08-28 22:43:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5484k[0].run-triage Phase: Succeeded StartedAt: 2026-08-28 21:59:49 +0000 UTC FinishedAt: 2026-08-28 22:43:13 +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+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbGluZyAoYnBmdG9vbCkgYW5kIEJQRiBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvLCB3aXRoIG5vIGNoYW5nZXMgdG8ga2VybmVsIGNvZGUgb3IgcnVudGltZSBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1NGMxMjk1NDZmOTkwNDA4NDZkOGQ5MWM5NGE4OGMxZTgzMWFhNTVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMjI6NDI6NTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmMgYi90b29scy9icGYvYnBmdG9vbC9idGYuY1xuaW5kZXggYzk1ODkwMjZkYThkNi4uYmNhMGEzOTgyZjA5YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2J0Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9idGYuY1xuQEAgLTgwNSw5ICYjNDM7ODA1LDEzIEBAIHN0YXRpYyBpbnQgZHVtcF9idGZfYyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4gXG4gXHRcdGlmIChzb3J0X2R1bXApXG4gXHRcdFx0ZGF0dW1zID0gc29ydF9idGZfYyhidGYpO1xuLVx0XHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBjbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdFx0aW50IGlkeCA9IGRhdHVtcyA/IGRhdHVtc1tpXS5pbmRleCA6IGk7XG4gXG4mIzQzO1x0XHRcdC8qIHR5cGUgSUQgMCBpcyB2b2lkLCBza2lwIGl0ICovXG4mIzQzO1x0XHRcdGlmIChpZHggPT0gMClcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdFx0ZXJyID0gYnRmX2R1bXBfX2R1bXBfdHlwZShkLCBpZHgpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRnb3RvIGRvbmU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG5pbmRleCA1ZjFhM2JmYzA1NjlmLi5kOTk1ODEyNTdlNTRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbkBAIC0xMTksNyAmIzQzOzExOSw5IEBAIFRFU1RfR0VOX1BST0dTICYjNDM7PSB0ZXN0X3Byb2dzLWNwdXY0XG4gVEVTVF9JTlNUX1NVQkRJUlMgJiM0Mzs9IGNwdXY0XG4gZW5kaWZcbiBcbi1URVNUX0ZJTEVTID0geHNrX3ByZXJlcXMuc2ggJCh3aWxkY2FyZCBwcm9ncy9idGZfZHVtcF90ZXN0X2Nhc2VfKi5jKVxuJiM0MztURVNUX0ZJTEVTID0geHNrX3ByZXJlcXMuc2ggJCh3aWxkY2FyZCBwcm9ncy9idGZfZHVtcF90ZXN0X2Nhc2VfKi5jKVx0XFxcbiYjNDM7XHQgICAgIGJwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkXHRcdFx0XHRcdFxcXG4mIzQzO1x0ICAgICBicGZ0b29sX2J0Zl9kdW1wX3Vuc29ydGVkLmV4cGVjdGVkXG4gXG4gIyBPcmRlciBjb3JyZXNwb25kIHRvICYjMzk7bWFrZSBydW5fdGVzdHMmIzM5OyBvcmRlclxuIFRFU1RfUFJPR1MgOj0gdGVzdF9rbW9kLnNoIFxcXG5AQCAtODg3LDcgJiM0Mzs4ODksOSBAQCBUUlVOTkVSX0VYVFJBX0ZJTEVTIDo9ICQoT1VUUFVUKS91cmFuZG9tX3JlYWRcdFx0XHRcdFxcXG4gXHRcdCAgICAgICBpbWFfc2V0dXAuc2ggXHRcdFx0XHRcdFxcXG4gXHRcdCAgICAgICAkKFZFUklGWV9TSUdfU0VUVVApXHRcdFx0XHRcXFxuIFx0XHQgICAgICAgJCh3aWxkY2FyZCBwcm9ncy9idGZfZHVtcF90ZXN0X2Nhc2VfKi5jKVx0XHRcXFxuLVx0XHQgICAgICAgJCh3aWxkY2FyZCBwcm9ncy8qLmJwZi5vKVxuJiM0MztcdFx0ICAgICAgICQod2lsZGNhcmQgcHJvZ3MvKi5icGYubylcdFx0XHRcXFxuJiM0MztcdFx0ICAgICAgIGJwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkXHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgICBicGZ0b29sX2J0Zl9kdW1wX3Vuc29ydGVkLmV4cGVjdGVkXG4gVFJVTk5FUl9CUEZfQlVJTERfUlVMRSA6PSBDTEFOR19CUEZfQlVJTERfUlVMRVxuIFRSVU5ORVJfQlBGX0NGTEFHUyA6PSAkKEJQRl9DRkxBR1MpICQoQ0xBTkdfQ0ZMQUdTKSAtREVOQUJMRV9BVE9NSUNTX1RFU1RTXG4gJChldmFsICQoY2FsbCBERUZJTkVfVEVTVF9SVU5ORVIsdGVzdF9wcm9ncykpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTQ3MGIyYjQzMjI5MVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkXG5AQCAtMCwwICYjNDM7MSw0OCBAQFxuJiM0MzsjaWZuZGVmIF9fVk1MSU5VWF9IX19cbiYjNDM7I2RlZmluZSBfX1ZNTElOVVhfSF9fXG4mIzQzO1xuJiM0MzsjaWZuZGVmIEJQRl9OT19QUkVTRVJWRV9BQ0NFU1NfSU5ERVhcbiYjNDM7I3ByYWdtYSBjbGFuZyBhdHRyaWJ1dGUgcHVzaCAoX19hdHRyaWJ1dGVfXygocHJlc2VydmVfYWNjZXNzX2luZGV4KSksIGFwcGx5X3RvID0gcmVjb3JkKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19rc3ltXG4mIzQzOyNkZWZpbmUgX19rc3ltIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oXCYjMzQ7LmtzeW1zXCYjMzQ7KSkpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmbmRlZiBfX3dlYWtcbiYjNDM7I2RlZmluZSBfX3dlYWsgX19hdHRyaWJ1dGVfXygod2VhaykpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmbmRlZiBfX2JwZl9mYXN0Y2FsbFxuJiM0MzsjaWYgX19oYXNfYXR0cmlidXRlKGJwZl9mYXN0Y2FsbClcbiYjNDM7I2RlZmluZSBfX2JwZl9mYXN0Y2FsbCBfX2F0dHJpYnV0ZV9fKChicGZfZmFzdGNhbGwpKVxuJiM0MzsjZWxzZVxuJiM0MzsjZGVmaW5lIF9fYnBmX2Zhc3RjYWxsXG4mIzQzOyNlbmRpZlxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO2VudW0ge1xuJiM0MztcdEUwID0gMSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBob2xleSB7XG4mIzQzO1x0aW50IGM7XG4mIzQzO1x0bG9uZzogMzI7XG4mIzQzO1x0bG9uZzogMzI7XG4mIzQzO1x0aW50IHRhaWw7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcyB7XG4mIzQzO1x0aW50IGY7XG4mIzQzO307XG4mIzQzO1xuJiM0MztcbiYjNDM7LyogQlBGIGtmdW5jcyAqL1xuJiM0MzsjaWZuZGVmIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmbmRlZiBCUEZfTk9fUFJFU0VSVkVfQUNDRVNTX0lOREVYXG4mIzQzOyNwcmFnbWEgY2xhbmcgYXR0cmlidXRlIHBvcFxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX1ZNTElOVVhfSF9fICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfYnRmX2R1bXBfdW5zb3J0ZWQuZXhwZWN0ZWQgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9idGZfZHVtcF91bnNvcnRlZC5leHBlY3RlZFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjQzMTBhZGMyZWQ1MTRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2J0Zl9kdW1wX3Vuc29ydGVkLmV4cGVjdGVkXG5AQCAtMCwwICYjNDM7MSw0OCBAQFxuJiM0MzsjaWZuZGVmIF9fVk1MSU5VWF9IX19cbiYjNDM7I2RlZmluZSBfX1ZNTElOVVhfSF9fXG4mIzQzO1xuJiM0MzsjaWZuZGVmIEJQRl9OT19QUkVTRVJWRV9BQ0NFU1NfSU5ERVhcbiYjNDM7I3ByYWdtYSBjbGFuZyBhdHRyaWJ1dGUgcHVzaCAoX19hdHRyaWJ1dGVfXygocHJlc2VydmVfYWNjZXNzX2luZGV4KSksIGFwcGx5X3RvID0gcmVjb3JkKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19rc3ltXG4mIzQzOyNkZWZpbmUgX19rc3ltIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oXCYjMzQ7LmtzeW1zXCYjMzQ7KSkpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmbmRlZiBfX3dlYWtcbiYjNDM7I2RlZmluZSBfX3dlYWsgX19hdHRyaWJ1dGVfXygod2VhaykpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmbmRlZiBfX2JwZl9mYXN0Y2FsbFxuJiM0MzsjaWYgX19oYXNfYXR0cmlidXRlKGJwZl9mYXN0Y2FsbClcbiYjNDM7I2RlZmluZSBfX2JwZl9mYXN0Y2FsbCBfX2F0dHJpYnV0ZV9fKChicGZfZmFzdGNhbGwpKVxuJiM0MzsjZWxzZVxuJiM0MzsjZGVmaW5lIF9fYnBmX2Zhc3RjYWxsXG4mIzQzOyNlbmRpZlxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO3N0cnVjdCBob2xleSB7XG4mIzQzO1x0aW50IGM7XG4mIzQzO1x0bG9uZzogMzI7XG4mIzQzO1x0bG9uZzogMzI7XG4mIzQzO1x0aW50IHRhaWw7XG4mIzQzO307XG4mIzQzO1xuJiM0MztlbnVtIHtcbiYjNDM7XHRFMCA9IDEsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcyB7XG4mIzQzO1x0aW50IGY7XG4mIzQzO307XG4mIzQzO1xuJiM0MztcbiYjNDM7LyogQlBGIGtmdW5jcyAqL1xuJiM0MzsjaWZuZGVmIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmbmRlZiBCUEZfTk9fUFJFU0VSVkVfQUNDRVNTX0lOREVYXG4mIzQzOyNwcmFnbWEgY2xhbmcgYXR0cmlidXRlIHBvcFxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX1ZNTElOVVhfSF9fICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jXG5pbmRleCAwYTJhNGYwYTI3OTRiLi5jNDlmZGQ5MGViMDMzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9oZWxwZXJzLmNcbkBAIC01Myw2ICYjNDM7NTMsNyBAQCBzdGF0aWMgaW50IHJ1bl9jb21tYW5kKGNoYXIgKmFyZ3MsIGNoYXIgKm91dHB1dF9idWYsIHNpemVfdCBvdXRwdXRfbWF4X2xlbilcbiBcdHN0YXRpYyBjaGFyIGJwZnRvb2xfcGF0aFtQQVRIX01BWF0gPSB7fTtcbiBcdGJvb2wgc3VwcHJlc3Nfb3V0cHV0ID0gIShvdXRwdXRfYnVmIFx1MDAyNlx1MDAyNiBvdXRwdXRfbWF4X2xlbik7XG4gXHRjaGFyIGNvbW1hbmRbQlBGVE9PTF9GVUxMX0NNRF9NQVhfTEVOXTtcbiYjNDM7XHRzaXplX3QgbjtcbiBcdEZJTEUgKmY7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTY4LDggJiM0Mzs2OSwxMCBAQCBzdGF0aWMgaW50IHJ1bl9jb21tYW5kKGNoYXIgKmFyZ3MsIGNoYXIgKm91dHB1dF9idWYsIHNpemVfdCBvdXRwdXRfbWF4X2xlbilcbiBcdGlmICghZilcbiBcdFx0cmV0dXJuIDE7XG4gXG4tXHRpZiAoIXN1cHByZXNzX291dHB1dClcbi1cdFx0ZnJlYWQob3V0cHV0X2J1ZiwgMSwgb3V0cHV0X21heF9sZW4sIGYpO1xuJiM0MztcdGlmICghc3VwcHJlc3Nfb3V0cHV0KSB7XG4mIzQzO1x0XHRuID0gZnJlYWQob3V0cHV0X2J1ZiwgMSwgb3V0cHV0X21heF9sZW4gLSAxLCBmKTtcbiYjNDM7XHRcdG91dHB1dF9idWZbbl0gPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcdH1cbiBcdHJldCA9IHBjbG9zZShmKTtcbiBcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9idGZfZHVtcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9idGZfZHVtcC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDViMjUzMDJiMGM4OVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9idGZfZHVtcC5jXG5AQCAtMCwwICYjNDM7MSwxNzggQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZnRvb2xfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtidGZfaGVscGVycy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RpbmdfaGVscGVycy5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIERVTVBfQlVGX1NaXHRcdCgxNiAqIDEwMjQpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEVYUEVDVEVEX1NPUlRFRFx0XHRcJiMzNDticGZ0b29sX2J0Zl9kdW1wX3NvcnRlZC5leHBlY3RlZFwmIzM0O1xuJiM0MzsjZGVmaW5lIEVYUEVDVEVEX1VOU09SVEVEXHRcJiMzNDticGZ0b29sX2J0Zl9kdW1wX3Vuc29ydGVkLmV4cGVjdGVkXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKlx0c3RydWN0IGhvbGV5IHtcbiYjNDM7ICpcdFx0aW50IGM7XG4mIzQzOyAqXHRcdFx1MDAzYzY0LWJpdCBob2xlXHUwMDNlXG4mIzQzOyAqXHRcdGludCB0YWlsO1xuJiM0MzsgKlx0fTtcbiYjNDM7ICpcdGVudW0geyBFMCA9IDEgfTtcbiYjNDM7ICpcdHN0cnVjdCBzIHsgaW50IGY7IH07XG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3RydWN0IGJ0ZiAqbWtfYnRmKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnRmICpidGY7XG4mIzQzO1xuJiM0MztcdGJ0ZiA9IGJ0Zl9fbmV3X2VtcHR5KCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgXCYjMzQ7bmV3X2VtcHR5XCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRidGZfX2FkZF9pbnQoYnRmLCBcJiMzNDtpbnRcJiMzNDssIDQsIEJURl9JTlRfU0lHTkVEKTtcbiYjNDM7XHRidGZfX2FkZF9pbnQoYnRmLCBcJiMzNDtsb25nIGludFwmIzM0OywgNCwgQlRGX0lOVF9TSUdORUQpO1xuJiM0MztcbiYjNDM7XHRidGZfX2FkZF9zdHJ1Y3QoYnRmLCBcJiMzNDtob2xleVwmIzM0OywgMTYpO1xuJiM0MztcdGJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgXCYjMzQ7Y1wmIzM0OywgMSwgMCwgMCk7XG4mIzQzO1x0YnRmX19hZGRfZmllbGQoYnRmLCBcJiMzNDt0YWlsXCYjMzQ7LCAxLCA5NiwgMCk7XG4mIzQzO1xuJiM0MztcdGJ0Zl9fYWRkX2VudW0oYnRmLCBOVUxMLCA0KTtcbiYjNDM7XHRidGZfX2FkZF9lbnVtX3ZhbHVlKGJ0ZiwgXCYjMzQ7RTBcJiMzNDssIDEpO1xuJiM0MztcbiYjNDM7XHRidGZfX2FkZF9zdHJ1Y3QoYnRmLCBcJiMzNDtzXCYjMzQ7LCA0KTtcbiYjNDM7XHRidGZfX2FkZF9maWVsZChidGYsIFwmIzM0O2ZcJiMzNDssIDEsIDAsIDApO1xuJiM0MztcbiYjNDM7XHRWQUxJREFURV9SQVdfQlRGKFxuJiM0MztcdFx0YnRmLFxuJiM0MztcdFx0XCYjMzQ7WzFdIElOVCAmIzM5O2ludCYjMzk7IHNpemU9NCBiaXRzX29mZnNldD0wIG5yX2JpdHM9MzIgZW5jb2Rpbmc9U0lHTkVEXCYjMzQ7LFxuJiM0MztcdFx0XCYjMzQ7WzJdIElOVCAmIzM5O2xvbmcgaW50JiMzOTsgc2l6ZT00IGJpdHNfb2Zmc2V0PTAgbnJfYml0cz0zMiBlbmNvZGluZz1TSUdORURcJiMzNDssXG4mIzQzO1x0XHRcJiMzNDtbM10gU1RSVUNUICYjMzk7aG9sZXkmIzM5OyBzaXplPTE2IHZsZW49MlxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7XFx0JiMzOTtjJiMzOTsgdHlwZV9pZD0xIGJpdHNfb2Zmc2V0PTBcXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0O1xcdCYjMzk7dGFpbCYjMzk7IHR5cGVfaWQ9MSBiaXRzX29mZnNldD05NlwmIzM0OyxcbiYjNDM7XHRcdFwmIzM0O1s0XSBFTlVNICYjMzk7KGFub24pJiMzOTsgZW5jb2Rpbmc9VU5TSUdORUQgc2l6ZT00IHZsZW49MVxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7XFx0JiMzOTtFMCYjMzk7IHZhbD0xXCYjMzQ7LFxuJiM0MztcdFx0XCYjMzQ7WzVdIFNUUlVDVCAmIzM5O3MmIzM5OyBzaXplPTQgdmxlbj0xXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHQmIzM5O2YmIzM5OyB0eXBlX2lkPTEgYml0c19vZmZzZXQ9MFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBidGY7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnRmX3RvX3RtcGZpbGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjaGFyICpwYXRoKVxuJiM0Mzt7XG4mIzQzO1x0c3NpemVfdCB3cml0dGVuO1xuJiM0MztcdGNvbnN0IHZvaWQgKnJhdztcbiYjNDM7XHRfX3UzMiBzejtcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1xuJiM0MztcdHJhdyA9IGJ0Zl9fcmF3X2RhdGEoYnRmLCBcdTAwMjZzeik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHJhdywgXCYjMzQ7cmF3X2RhdGFcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgXCYjMzQ7L3RtcC9icGZ0b29sX2J0Zl9kdW1wLlhYWFhYWFwmIzM0Oyk7XG4mIzQzO1x0ZmQgPSBta3N0ZW1wKHBhdGgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX0ZEKGZkLCBcJiMzNDtta3N0ZW1wX2J0ZlwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdHdyaXR0ZW4gPSB3cml0ZShmZCwgcmF3LCBzeik7XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHdyaXR0ZW4sIHN6LCBcJiMzNDt3cml0ZV9idGZcJiMzNDspKSB7XG4mIzQzO1x0XHR1bmxpbmsocGF0aCk7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNoYXIgKmR1bXBfYyhjb25zdCBjaGFyICpidGZfcGF0aCwgYm9vbCBzb3J0ZWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGFyZ3NbTUFYX0JQRlRPT0xfQ01EX0xFTl07XG4mIzQzO1x0Y2hhciAqYnVmO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGJ1ZiA9IG1hbGxvYyhEVU1QX0JVRl9TWik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJ1ZiwgXCYjMzQ7YWxsb2NfZHVtcFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYoYXJncywgc2l6ZW9mKGFyZ3MpLCBcJiMzNDtidGYgZHVtcCBmaWxlICVzIGZvcm1hdCBjJXNcJiMzNDssXG4mIzQzO1x0XHQgYnRmX3BhdGgsIHNvcnRlZCA/IFwmIzM0O1wmIzM0OyA6IFwmIzM0OyB1bnNvcnRlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGdldF9icGZ0b29sX2NvbW1hbmRfb3V0cHV0KGFyZ3MsIGJ1ZiwgRFVNUF9CVUZfU1opO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YnRmX2R1bXBfZm9ybWF0X2NcJiMzNDspKSB7XG4mIzQzO1x0XHRmcmVlKGJ1Zik7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBidWY7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjaGFyICpyZWFkX2V4cGVjdGVkKGNvbnN0IGNoYXIgKnBhdGgpXG4mIzQzO3tcbiYjNDM7XHRjaGFyICpidWYgPSBOVUxMO1xuJiM0MztcdHNpemVfdCBjYXAgPSAwO1xuJiM0MztcdEZJTEUgKmY7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZiA9IGZvcGVuKHBhdGgsIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGlmICghZikge1xuJiM0MztcdFx0ZXJyID0gZXJybm87XG4mIzQzO1x0XHRQUklOVF9GQUlMKFwmIzM0O2NhbiYjMzk7dCBvcGVuIGV4cGVjdGVkIG91dHB1dCAmIzM5OyVzJiMzOTs6IGVycm5vICVkXFxuXCYjMzQ7LCBwYXRoLCBlcnIpO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBubyBOVUwgaW4gYSBnZW5lcmF0ZWQgaGVhZGVyLCBzbyB0aGlzIHJlYWRzIHRvIHRoZSBlbmQgKi9cbiYjNDM7XHRpZiAoZ2V0ZGVsaW0oXHUwMDI2YnVmLCBcdTAwMjZjYXAsICYjMzk7XFwwJiMzOTssIGYpIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRlcnIgPSBlcnJubztcbiYjNDM7XHRcdFBSSU5UX0ZBSUwoXCYjMzQ7Y2FuJiMzOTt0IHJlYWQgZXhwZWN0ZWQgb3V0cHV0ICYjMzk7JXMmIzM5OzogZXJybm8gJWRcXG5cJiMzNDssIHBhdGgsIGVycik7XG4mIzQzO1x0XHRmcmVlKGJ1Zik7XG4mIzQzO1x0XHRidWYgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZmNsb3NlKGYpO1xuJiM0MztcdHJldHVybiBidWY7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZHVtcChjb25zdCBjaGFyICpidGZfcGF0aCwgYm9vbCBzb3J0ZWQpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBjaGFyICpleHBfcGF0aDtcbiYjNDM7XHRjaGFyICpkdW1wLCAqZXhwO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGV4cF9wYXRoID0gc29ydGVkID8gRVhQRUNURURfU09SVEVEIDogRVhQRUNURURfVU5TT1JURUQ7XG4mIzQzO1xuJiM0MztcdGR1bXAgPSBkdW1wX2MoYnRmX3BhdGgsIHNvcnRlZCk7XG4mIzQzO1x0aWYgKCFkdW1wKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRleHAgPSByZWFkX2V4cGVjdGVkKGV4cF9wYXRoKTtcbiYjNDM7XHRpZiAoIWV4cClcbiYjNDM7XHRcdGdvdG8gb3V0X2R1bXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChkdW1wLCBleHApO1xuJiM0MztcdEFTU0VSVF9PSyhlcnIsIHNvcnRlZCA/IFwmIzM0O2NtcF9zb3J0ZWRcJiMzNDsgOiBcJiMzNDtjbXBfdW5zb3J0ZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmcmVlKGV4cCk7XG4mIzQzO291dF9kdW1wOlxuJiM0MztcdGZyZWUoZHVtcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9icGZ0b29sX2J0Zl9kdW1wKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuJiM0MztcdHN0cnVjdCBidGYgKmJ0ZjtcbiYjNDM7XG4mIzQzO1x0YnRmID0gbWtfYnRmKCk7XG4mIzQzO1x0aWYgKCFidGYpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChidGZfdG9fdG1wZmlsZShidGYsIHBhdGgpKVxuJiM0MztcdFx0Z290byBvdXRfYnRmO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtjX3NvcnRlZFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X2R1bXAocGF0aCwgdHJ1ZSk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7Y191bnNvcnRlZFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X2R1bXAocGF0aCwgZmFsc2UpO1xuJiM0MztcbiYjNDM7XHR1bmxpbmsocGF0aCk7XG4mIzQzO291dF9idGY6XG4mIzQzO1x0YnRmX19mcmVlKGJ0Zik7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfZHVtcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX2R1bXAuY1xuaW5kZXggOWYxYjUwZTA3YTI5OC4uZmUwNGE5NTVkNDZjYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9kdW1wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9kdW1wLmNcbkBAIC0xLDggJiM0MzsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuLVxuLXN0YXRpYyBpbnQgZHVyYXRpb24gPSAwO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt0ZXN0aW5nX2hlbHBlcnMuaFwmIzM0O1xuIFxuIHZvaWQgYnRmX2R1bXBfcHJpbnRmKHZvaWQgKmN0eCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpXG4ge1xuQEAgLTQ1LDEyICYjNDM7NDQsNzUgQEAgc3RhdGljIGludCBidGZfZHVtcF9hbGxfdHlwZXMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB2b2lkICpjdHgpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogRXhwZWN0ZWQgb3V0cHV0IGlzIGVtYmVkZGVkIGluIHRoZSB0ZXN0IGNhc2Ugc291cmNlLCBiZXR3ZWVuXG4mIzQzOyAqIFNUQVJULUVYUEVDVEVELU9VVFBVVCBhbmQgRU5ELUVYUEVDVEVELU9VVFBVVCBtYXJrZXJzLiBBIHJlZ2lvbiBpcyBlaXRoZXJcbiYjNDM7ICogcGxhaW4gQywgd2hlcmUgYSBkZWNsYXJhdGlvbiBkb3VibGVzIGFzIGl0cyBvd24gZXhwZWN0YXRpb24sIG9yIEMgd3JhcHBlZCBpblxuJiM0MzsgKiBhIGJsb2NrIGNvbW1lbnQsIHdoZXJlIHRoZSByZW5kZXJlZCBmb3JtIGRpZmZlcnMgZnJvbSB0aGUgc291cmNlLiBBbGxcbiYjNDM7ICogcmVnaW9ucyBvZiBhIGZpbGUgY29uY2F0ZW5hdGUgaW50byBvbmUgZXhwZWN0YXRpb24sIGNvbXBhcmVkIGFnYWluc3Qgb25lXG4mIzQzOyAqIHdob2xlLWZpbGUgZHVtcC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJucyBhIG1hbGxvYyYjMzk7ZCBidWZmZXIgZm9yIHRoZSBjYWxsZXIgdG8gZnJlZSwgb3IgTlVMTCBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGNoYXIgKnJlYWRfZXhwZWN0ZWRfb3V0cHV0KGNvbnN0IGNoYXIgKnBhdGgpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3Qgb3V0X3N6ID0gMCwgbGluZV9jYXAgPSAwO1xuJiM0MztcdGNoYXIgKm91dCA9IE5VTEwsICpsaW5lID0gTlVMTDtcbiYjNDM7XHRib29sIGluX3JlZ2lvbiA9IGZhbHNlO1xuJiM0MztcdEZJTEUgKmYsICpvdXRfZmlsZTtcbiYjNDM7XG4mIzQzO1x0ZiA9IGZvcGVuKHBhdGgsIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGlmICghZilcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRvdXRfZmlsZSA9IG9wZW5fbWVtc3RyZWFtKFx1MDAyNm91dCwgXHUwMDI2b3V0X3N6KTtcbiYjNDM7XHRpZiAoIW91dF9maWxlKSB7XG4mIzQzO1x0XHRmY2xvc2UoZik7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHdoaWxlIChnZXRsaW5lKFx1MDAyNmxpbmUsIFx1MDAyNmxpbmVfY2FwLCBmKSBcdTAwM2UgMCkge1xuJiM0MztcdFx0Y29uc3QgY2hhciAqcDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3Ryc3RyKGxpbmUsIFwmIzM0O1NUQVJULUVYUEVDVEVELU9VVFBVVFwmIzM0OykpIHtcbiYjNDM7XHRcdFx0aW5fcmVnaW9uID0gdHJ1ZTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoc3Ryc3RyKGxpbmUsIFwmIzM0O0VORC1FWFBFQ1RFRC1PVVRQVVRcJiMzNDspKVxuJiM0MztcdFx0XHRpbl9yZWdpb24gPSBmYWxzZTtcbiYjNDM7XHRcdGlmICghaW5fcmVnaW9uKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRwID0gbGluZSAmIzQzOyBzdHJzcG4obGluZSwgXCYjMzQ7IFxcdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0Lyogb3BlbmluZyBvciBjbG9zaW5nIGxpbmUgb2YgYSBjb21tZW50ZWQgb3V0IHJlZ2lvbiAqL1xuJiM0MztcdFx0aWYgKCFzdHJuY21wKHAsIFwmIzM0Oy8qXCYjMzQ7LCAyKSB8fCAhc3RybmNtcChwLCBcJiMzNDsqL1wmIzM0OywgMikpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBPbmx5IGEgJiMzOTsqJiMzOTsgZGlyZWN0bHkgYWZ0ZXIgdGhlIGluZGVudGF0aW9uIGlzIGEgY29tbWVudFxuJiM0MztcdFx0ICogcHJlZml4LiBXaXRob3V0IG9uZSB0aGUgbGluZSBpcyB0YWtlbiBhcyBpdCBpcywgbGVhZGluZ1xuJiM0MztcdFx0ICogd2hpdGVzcGFjZSBpbmNsdWRlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cCA9ICpwID09ICYjMzk7KiYjMzk7ID8gcCAmIzQzOyAxIDogbGluZTtcbiYjNDM7XG4mIzQzO1x0XHRmcHV0cyhwLCBvdXRfZmlsZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmcmVlKGxpbmUpO1xuJiM0MztcdGZjbG9zZShmKTtcbiYjNDM7XHRmY2xvc2Uob3V0X2ZpbGUpO1xuJiM0MztcdHJldHVybiBvdXQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCB0ZXN0X2J0Zl9kdW1wX2Nhc2UoaW50IG4sIHN0cnVjdCBidGZfZHVtcF90ZXN0X2Nhc2UgKnQpXG4ge1xuLVx0Y2hhciB0ZXN0X2ZpbGVbMjU2XSwgb3V0X2ZpbGVbMjU2XSwgZGlmZl9jbWRbMTAyNF07XG4mIzQzO1x0Y2hhciAqZHVtcCA9IE5VTEwsICpleHBlY3RlZCA9IE5VTEw7XG4gXHRzdHJ1Y3QgYnRmICpidGYgPSBOVUxMO1xuLVx0aW50IGVyciA9IDAsIGZkID0gLTE7XG4tXHRGSUxFICpmID0gTlVMTDtcbiYjNDM7XHRjaGFyIHRlc3RfZmlsZVsyNTZdO1xuJiM0MztcdHNpemVfdCBkdW1wX3N6ID0gMDtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XHRGSUxFICpmO1xuIFxuIFx0c25wcmludGYodGVzdF9maWxlLCBzaXplb2YodGVzdF9maWxlKSwgXCYjMzQ7JXMuYnBmLm9cJiMzNDssIHQtXHUwMDNlZmlsZSk7XG4gXG5AQCAtNjksMjkgJiM0MzsxMzEsMjEgQEAgc3RhdGljIGludCB0ZXN0X2J0Zl9kdW1wX2Nhc2UoaW50IG4sIHN0cnVjdCBidGZfZHVtcF90ZXN0X2Nhc2UgKnQpXG4gXHRpZiAoIXQtXHUwMDNla25vd25fcHRyX3N6KSB7XG4gXHRcdGJ0Zl9fc2V0X3BvaW50ZXJfc2l6ZShidGYsIDgpO1xuIFx0fSBlbHNlIHtcbi1cdFx0Q0hFQ0soYnRmX19wb2ludGVyX3NpemUoYnRmKSAhPSA4LCBcJiMzNDtwdHJfc3pcJiMzNDssIFwmIzM0O2V4cCAlZCwgZ290ICV6dVxcblwmIzM0Oyxcbi1cdFx0ICAgICAgOCwgYnRmX19wb2ludGVyX3NpemUoYnRmKSk7XG4tXHR9XG4mIzQzO1x0XHRzaXplX3QgcHRyX3N6ID0gYnRmX19wb2ludGVyX3NpemUoYnRmKTtcbiBcbi1cdHNucHJpbnRmKG91dF9maWxlLCBzaXplb2Yob3V0X2ZpbGUpLCBcJiMzNDsvdG1wLyVzLm91dHB1dC5YWFhYWFhcJiMzNDssIHQtXHUwMDNlZmlsZSk7XG4tXHRmZCA9IG1rc3RlbXAob3V0X2ZpbGUpO1xuLVx0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFwmIzM0O2NyZWF0ZV90bXBcJiMzNDspKSB7XG4tXHRcdGVyciA9IGZkO1xuLVx0XHRnb3RvIGRvbmU7XG4mIzQzO1x0XHRBU1NFUlRfRVEocHRyX3N6LCAoc2l6ZV90KTgsIFwmIzM0O3B0cl9zelwmIzM0Oyk7XG4gXHR9XG4tXHRmID0gZmRvcGVuKGZkLCBcJiMzNDt3XCYjMzQ7KTtcbi1cdGlmIChDSEVDSyhmID09IE5VTEwsIFwmIzM0O29wZW5fdG1wXCYjMzQ7LCAgXCYjMzQ7ZmFpbGVkIHRvIG9wZW4gZmlsZTogJXMoJWQpXFxuXCYjMzQ7LFxuLVx0XHQgIHN0cmVycm9yKGVycm5vKSwgZXJybm8pKSB7XG4tXHRcdGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzO1x0ZiA9IG9wZW5fbWVtc3RyZWFtKFx1MDAyNmR1bXAsIFx1MDAyNmR1bXBfc3opO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihmLCBcJiMzNDtvcGVuX21lbXN0cmVhbVwmIzM0OykpIHtcbiYjNDM7XHRcdGVyciA9IC1lcnJubztcbiBcdFx0Z290byBkb25lO1xuIFx0fVxuIFxuIFx0ZXJyID0gYnRmX2R1bXBfYWxsX3R5cGVzKGJ0ZiwgZik7XG4gXHRmY2xvc2UoZik7XG4tXHRjbG9zZShmZCk7XG4tXHRpZiAoQ0hFQ0soZXJyLCBcJiMzNDtidGZfZHVtcFwmIzM0OywgXCYjMzQ7ZmFpbHVyZSBkdXJpbmcgQyBkdW1waW5nOiAlZFxcblwmIzM0OywgZXJyKSkge1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YnRmX2R1bXBcJiMzNDspKVxuIFx0XHRnb3RvIGRvbmU7XG4tXHR9XG4gXG4gXHRzbnByaW50Zih0ZXN0X2ZpbGUsIHNpemVvZih0ZXN0X2ZpbGUpLCBcJiMzNDtwcm9ncy8lcy5jXCYjMzQ7LCB0LVx1MDAzZWZpbGUpO1xuIFx0aWYgKGFjY2Vzcyh0ZXN0X2ZpbGUsIFJfT0spID09IC0xKVxuQEAgLTEwMCwyOCAmIzQzOzE1NCwyMyBAQCBzdGF0aWMgaW50IHRlc3RfYnRmX2R1bXBfY2FzZShpbnQgbiwgc3RydWN0IGJ0Zl9kdW1wX3Rlc3RfY2FzZSAqdClcbiBcdFx0ICogd2l0aG91dCBwcmVzZXJ2aW5nIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlLlxuIFx0XHQgKi9cbiBcdFx0c25wcmludGYodGVzdF9maWxlLCBzaXplb2YodGVzdF9maWxlKSwgXCYjMzQ7JXMuY1wmIzM0OywgdC1cdTAwM2VmaWxlKTtcbi1cdC8qXG4tXHQgKiBEaWZmIHRlc3Qgb3V0cHV0IGFuZCBleHBlY3RlZCB0ZXN0IG91dHB1dCwgY29udGFpbmVkIGJldHdlZW5cbi1cdCAqIFNUQVJULUVYUEVDVEVELU9VVFBVVCBhbmQgRU5ELUVYUEVDVEVELU9VVFBVVCBsaW5lcyBpbiB0ZXN0IGNhc2UuXG4tXHQgKiBGb3IgZXhwZWN0ZWQgb3V0cHV0IGxpbmVzLCBldmVyeXRoaW5nIGJlZm9yZSAmIzM5OyomIzM5OyBpcyBzdHJpcHBlZCBvdXQuXG4tXHQgKiBBbHNvIGxpbmVzIGNvbnRhaW5pbmcgY29tbWVudCBzdGFydCBhbmQgY29tbWVudCBlbmQgbWFya2VycyBhcmVcbi1cdCAqIGlnbm9yZWQuIFxuLVx0ICovXG4tXHRzbnByaW50ZihkaWZmX2NtZCwgc2l6ZW9mKGRpZmZfY21kKSxcbi1cdFx0IFwmIzM0O2F3ayAmIzM5Oy9TVEFSVC1FWFBFQ1RFRC1PVVRQVVQve291dD0xO25leHR9IFwmIzM0O1xuLVx0XHQgXCYjMzQ7L0VORC1FWFBFQ1RFRC1PVVRQVVQve291dD0wfSBcJiMzNDtcbi1cdFx0IFwmIzM0Oy9cXFxcL1xcXFwqfFxcXFwqXFxcXC8ve25leHR9IFwmIzM0OyAvKiBpZ25vcmUgY29tbWVudCBzdGFydC9lbmQgbGluZXMgKi9cbi1cdFx0IFwmIzM0O291dCB7c3ViKC9eWyBcXFxcdF0qXFxcXCovLCBcXFwmIzM0O1xcXCYjMzQ7KTsgcHJpbnR9JiMzOTsgJiMzOTslcyYjMzk7IHwgZGlmZiAtdSAtICYjMzk7JXMmIzM5O1wmIzM0Oyxcbi1cdFx0IHRlc3RfZmlsZSwgb3V0X2ZpbGUpO1xuLVx0ZXJyID0gc3lzdGVtKGRpZmZfY21kKTtcbi1cdGlmIChDSEVDSyhlcnIsIFwmIzM0O2RpZmZcJiMzNDssXG4tXHRcdCAgXCYjMzQ7ZGlmZmVyaW5nIHRlc3Qgb3V0cHV0LCBvdXRwdXQ9JXMsIGVycj0lZCwgZGlmZiBjbWQ6XFxuJXNcXG5cJiMzNDssXG4tXHRcdCAgb3V0X2ZpbGUsIGVyciwgZGlmZl9jbWQpKVxuJiM0MztcbiYjNDM7XHRleHBlY3RlZCA9IHJlYWRfZXhwZWN0ZWRfb3V0cHV0KHRlc3RfZmlsZSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGV4cGVjdGVkLCBcJiMzNDtyZWFkX2V4cGVjdGVkX291dHB1dFwmIzM0OykpIHtcbiYjNDM7XHRcdGVyciA9IC1lcnJubztcbiBcdFx0Z290byBkb25lO1xuJiM0MztcdH1cbiBcbi1cdHJlbW92ZShvdXRfZmlsZSk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgbWlzbWF0Y2ggaGFzIGFscmVhZHkgYmVlbiByZXBvcnRlZCwgc28gdGhpcyBvbmx5IGhhcyB0b1xuJiM0MztcdCAqIHJlZ2lzdGVyIHRoZSBmYWlsdXJlLiBBU1NFUlRfT0soKSB3b3VsZCBhcHBlbmQgYSBzdGFsZSBlcnJubyB0byBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSBjb21wYXJlX3RleHRfdG9fZXhwZWN0ZWQoZHVtcCwgZXhwZWN0ZWQpO1xuJiM0MztcdEFTU0VSVF9FUShlcnIsIDAsIFwmIzM0O2NvbXBhcmVfdGV4dF90b19leHBlY3RlZFwmIzM0Oyk7XG4gXG4gZG9uZTpcbiYjNDM7XHRmcmVlKGV4cGVjdGVkKTtcbiYjNDM7XHRmcmVlKGR1bXApO1xuIFx0YnRmX19mcmVlKGJ0Zik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wcm9nX3Rlc3RzX2ZyYW1ld29yay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ190ZXN0c19mcmFtZXdvcmsuY1xuaW5kZXggNzYwN2NmYzI0MDhjMi4uZDExMWZlMTA1NDQ3NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Byb2dfdGVzdHNfZnJhbWV3b3JrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Byb2dfdGVzdHNfZnJhbWV3b3JrLmNcbkBAIC0xNzksMyAmIzQzOzE3OSwyNiBAQCB2b2lkIHRlc3RfcHJvZ190ZXN0c19mcmFtZXdvcmtfZXhwZWN0ZWRfbXNncyh2b2lkKVxuIFx0XHR9XG4gXHR9XG4gfVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X3Byb2dfdGVzdHNfZnJhbWV3b3JrX2NvbXBhcmVfdGV4dCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7Y29tcGFyZV90ZXh0X21hdGNoXCYjMzQ7KSkge1xuJiM0MztcdFx0ZXJyID0gY29tcGFyZV90ZXh0X3RvX2V4cGVjdGVkKFwmIzM0O3NhbWVcXG5cJiMzNDssIFwmIzM0O3NhbWVcXG5cJiMzNDspO1xuJiM0MztcdFx0QVNTRVJUX0VRKGVyciwgMCwgXCYjMzQ7bWF0Y2hfcmNcJiMzNDspO1xuJiM0MztcdFx0dGVzdF9fZW5kX3N1YnRlc3QoKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2NvbXBhcmVfdGV4dF9taXNtYXRjaFwmIzM0OykpIHtcbiYjNDM7XHRcdGVyciA9IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChcJiMzNDtsaW5lIHR3b1xcblwmIzM0OywgXCYjMzQ7bGluZSBvbmVcXG5cJiMzNDspO1xuJiM0MztcdFx0ZmZsdXNoKHN0ZG91dCk7XG4mIzQzO1xuJiM0MztcdFx0QVNTRVJUX0VRKGVyciwgLTEsIFwmIzM0O21pc21hdGNoX3JjXCYjMzQ7KTtcbiYjNDM7XHRcdEFTU0VSVF9IQVNfU1VCU1RSKGVudi5zdWJ0ZXN0X3N0YXRlLVx1MDAzZWxvZ19idWYsIFwmIzM0Oy1saW5lIG9uZVwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgIFwmIzM0O2RpZmZfaGFzX2V4cGVjdGVkXCYjMzQ7KTtcbiYjNDM7XHRcdEFTU0VSVF9IQVNfU1VCU1RSKGVudi5zdWJ0ZXN0X3N0YXRlLVx1MDAzZWxvZ19idWYsIFwmIzM0OyYjNDM7bGluZSB0d29cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDtkaWZmX2hhc19hY3R1YWxcJiMzNDspO1xuJiM0MztcdFx0dGVzdF9fZW5kX3N1YnRlc3QoKTtcbiYjNDM7XHR9XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmNcbmluZGV4IGM5NzBlNzc5M2RmY2IuLjNmMDM3OTQ5ZTk3ODkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuY1xuQEAgLTUzNCwzICYjNDM7NTM0LDQ2IEBAIGludCBzdGFja19tcHJvdGVjdCh2b2lkKVxuIFx0XHQgICAgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSB8IFBST1RfRVhFQyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiYjNDM7XG4mIzQzO2ludCBjb21wYXJlX3RleHRfdG9fZXhwZWN0ZWQoY29uc3QgY2hhciAqYWN0dWFsLCBjb25zdCBjaGFyICpleHBlY3RlZClcbiYjNDM7e1xuJiM0MztcdGNoYXIgZXhwX3BhdGhbXSA9IFwmIzM0Oy90bXAvc2VsZnRlc3RfZXhwZWN0ZWQuWFhYWFhYXCYjMzQ7O1xuJiM0MztcdGNoYXIgYWN0X3BhdGhbXSA9IFwmIzM0Oy90bXAvc2VsZnRlc3RfYWN0dWFsLlhYWFhYWFwmIzM0OztcbiYjNDM7XHRjaGFyIGJ1Zls1MTJdLCBjbWRbMTI4XTtcbiYjNDM7XHRpbnQgZXhwX2ZkLCBhY3RfZmQ7XG4mIzQzO1x0RklMRSAqcDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0ZXhwX2ZkID0gbWtzdGVtcChleHBfcGF0aCk7XG4mIzQzO1x0YWN0X2ZkID0gbWtzdGVtcChhY3RfcGF0aCk7XG4mIzQzO1x0aWYgKGV4cF9mZCBcdTAwM2MgMCB8fCBhY3RfZmQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGZwcmludGYoc3Rkb3V0LCBcJiMzNDtvdXRwdXQgZGlmZmVycywgbm8gdGVtcCBmaWxlIGZvciBhIGRpZmZcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkcHJpbnRmKGV4cF9mZCwgXCYjMzQ7JXNcJiMzNDssIGV4cGVjdGVkKTtcbiYjNDM7XHRkcHJpbnRmKGFjdF9mZCwgXCYjMzQ7JXNcJiMzNDssIGFjdHVhbCk7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGNtZCwgc2l6ZW9mKGNtZCksIFwmIzM0O2RpZmYgLXUgJiMzOTslcyYjMzk7ICYjMzk7JXMmIzM5O1wmIzM0OywgZXhwX3BhdGgsIGFjdF9wYXRoKTtcbiYjNDM7XHRwID0gcG9wZW4oY21kLCBcJiMzNDtyXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIXApIHtcbiYjNDM7XHRcdGZwcmludGYoc3Rkb3V0LCBcJiMzNDtvdXRwdXQgZGlmZmVycywgJiMzOTslcyYjMzk7IGRpZCBub3QgcnVuXFxuXCYjMzQ7LCBjbWQpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdHdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBwKSlcbiYjNDM7XHRcdGZwdXRzKGJ1Ziwgc3Rkb3V0KTtcbiYjNDM7XHRwY2xvc2UocCk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0aWYgKGV4cF9mZCBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdGNsb3NlKGV4cF9mZCk7XG4mIzQzO1x0XHR1bmxpbmsoZXhwX3BhdGgpO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoYWN0X2ZkIFx1MDAzZT0gMCkge1xuJiM0MztcdFx0Y2xvc2UoYWN0X2ZkKTtcbiYjNDM7XHRcdHVubGluayhhY3RfcGF0aCk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAtMTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaFxuaW5kZXggMmVkYzZmYjdmYzUyMS4uMWM1OGEyZjA4YjY0NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oXG5AQCAtNjEsNCAmIzQzOzYxLDcgQEAgaW50IHRlc3RpbmdfcHJvZ19mbGFncyh2b2lkKTtcbiBib29sIGlzX2ppdF9lbmFibGVkKHZvaWQpO1xuIGludCBzdGFja19tcHJvdGVjdCh2b2lkKTtcbiBcbiYjNDM7LyogUnVucyBkaWZmKDEpIG9uIG1pc21hdGNoICovXG4mIzQzO2ludCBjb21wYXJlX3RleHRfdG9fZXhwZWN0ZWQoY29uc3QgY2hhciAqYWN0dWFsLCBjb25zdCBjaGFyICpleHBlY3RlZCk7XG4mIzQzO1xuICNlbmRpZiAvKiBfX1RFU1RJTkdfSEVMUEVSU19IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbGluZyAoYnBmdG9vbCkgYW5kIEJQRiBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvLCB3aXRoIG5vIGNoYW5nZXMgdG8ga2VybmVsIGNvZGUgb3IgcnVudGltZSBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NGMxMjk1NDZmOTkwNDA4NDZkOGQ5MWM5NGE4OGMxZTgzMWFhNTVlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjggMjI6NDI6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9idGYuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL2J0Zi5jCmluZGV4IGM5NTg5MDI2ZGE4ZDYuLmJjYTBhMzk4MmYwOWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2J0Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2JwZi9icGZ0b29sL2J0Zi5jCkBAIC04MDUsOSAmIzQzOzgwNSwxMyBAQCBzdGF0aWMgaW50IGR1bXBfYnRmX2MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAogCiAJCWlmIChzb3J0X2R1bXApCiAJCQlkYXR1bXMgPSBzb3J0X2J0Zl9jKGJ0Zik7Ci0JCWZvciAoaSA9IDE7IGkgJmx0OyBjbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgY250OyBpJiM0MzsmIzQzOykgewogCQkJaW50IGlkeCA9IGRhdHVtcyA/IGRhdHVtc1tpXS5pbmRleCA6IGk7CiAKJiM0MzsJCQkvKiB0eXBlIElEIDAgaXMgdm9pZCwgc2tpcCBpdCAqLwomIzQzOwkJCWlmIChpZHggPT0gMCkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiAJCQllcnIgPSBidGZfZHVtcF9fZHVtcF90eXBlKGQsIGlkeCk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gZG9uZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQppbmRleCA1ZjFhM2JmYzA1NjlmLi5kOTk1ODEyNTdlNTRmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlCkBAIC0xMTksNyAmIzQzOzExOSw5IEBAIFRFU1RfR0VOX1BST0dTICYjNDM7PSB0ZXN0X3Byb2dzLWNwdXY0CiBURVNUX0lOU1RfU1VCRElSUyAmIzQzOz0gY3B1djQKIGVuZGlmCiAKLVRFU1RfRklMRVMgPSB4c2tfcHJlcmVxcy5zaCAkKHdpbGRjYXJkIHByb2dzL2J0Zl9kdW1wX3Rlc3RfY2FzZV8qLmMpCiYjNDM7VEVTVF9GSUxFUyA9IHhza19wcmVyZXFzLnNoICQod2lsZGNhcmQgcHJvZ3MvYnRmX2R1bXBfdGVzdF9jYXNlXyouYykJXAomIzQzOwkgICAgIGJwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkCQkJCQlcCiYjNDM7CSAgICAgYnBmdG9vbF9idGZfZHVtcF91bnNvcnRlZC5leHBlY3RlZAogCiAjIE9yZGVyIGNvcnJlc3BvbmQgdG8gJiMzOTttYWtlIHJ1bl90ZXN0cyYjMzk7IG9yZGVyCiBURVNUX1BST0dTIDo9IHRlc3Rfa21vZC5zaCBcCkBAIC04ODcsNyAmIzQzOzg4OSw5IEBAIFRSVU5ORVJfRVhUUkFfRklMRVMgOj0gJChPVVRQVVQpL3VyYW5kb21fcmVhZAkJCQlcCiAJCSAgICAgICBpbWFfc2V0dXAuc2ggCQkJCQlcCiAJCSAgICAgICAkKFZFUklGWV9TSUdfU0VUVVApCQkJCVwKIAkJICAgICAgICQod2lsZGNhcmQgcHJvZ3MvYnRmX2R1bXBfdGVzdF9jYXNlXyouYykJCVwKLQkJICAgICAgICQod2lsZGNhcmQgcHJvZ3MvKi5icGYubykKJiM0MzsJCSAgICAgICAkKHdpbGRjYXJkIHByb2dzLyouYnBmLm8pCQkJXAomIzQzOwkJICAgICAgIGJwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkCQkJXAomIzQzOwkJICAgICAgIGJwZnRvb2xfYnRmX2R1bXBfdW5zb3J0ZWQuZXhwZWN0ZWQKIFRSVU5ORVJfQlBGX0JVSUxEX1JVTEUgOj0gQ0xBTkdfQlBGX0JVSUxEX1JVTEUKIFRSVU5ORVJfQlBGX0NGTEFHUyA6PSAkKEJQRl9DRkxBR1MpICQoQ0xBTkdfQ0ZMQUdTKSAtREVOQUJMRV9BVE9NSUNTX1RFU1RTCiAkKGV2YWwgJChjYWxsIERFRklORV9URVNUX1JVTk5FUix0ZXN0X3Byb2dzKSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2J0Zl9kdW1wX3NvcnRlZC5leHBlY3RlZCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2J0Zl9kdW1wX3NvcnRlZC5leHBlY3RlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi41NDcwYjJiNDMyMjkxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkCkBAIC0wLDAgJiM0MzsxLDQ4IEBACiYjNDM7I2lmbmRlZiBfX1ZNTElOVVhfSF9fCiYjNDM7I2RlZmluZSBfX1ZNTElOVVhfSF9fCiYjNDM7CiYjNDM7I2lmbmRlZiBCUEZfTk9fUFJFU0VSVkVfQUNDRVNTX0lOREVYCiYjNDM7I3ByYWdtYSBjbGFuZyBhdHRyaWJ1dGUgcHVzaCAoX19hdHRyaWJ1dGVfXygocHJlc2VydmVfYWNjZXNzX2luZGV4KSksIGFwcGx5X3RvID0gcmVjb3JkKQomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNpZm5kZWYgX19rc3ltCiYjNDM7I2RlZmluZSBfX2tzeW0gX19hdHRyaWJ1dGVfXygoc2VjdGlvbigmIzM0Oy5rc3ltcyYjMzQ7KSkpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmbmRlZiBfX3dlYWsKJiM0MzsjZGVmaW5lIF9fd2VhayBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjaWZuZGVmIF9fYnBmX2Zhc3RjYWxsCiYjNDM7I2lmIF9faGFzX2F0dHJpYnV0ZShicGZfZmFzdGNhbGwpCiYjNDM7I2RlZmluZSBfX2JwZl9mYXN0Y2FsbCBfX2F0dHJpYnV0ZV9fKChicGZfZmFzdGNhbGwpKQomIzQzOyNlbHNlCiYjNDM7I2RlZmluZSBfX2JwZl9mYXN0Y2FsbAomIzQzOyNlbmRpZgomIzQzOyNlbmRpZgomIzQzOwomIzQzO2VudW0gewomIzQzOwlFMCA9IDEsCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgaG9sZXkgewomIzQzOwlpbnQgYzsKJiM0MzsJbG9uZzogMzI7CiYjNDM7CWxvbmc6IDMyOwomIzQzOwlpbnQgdGFpbDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBzIHsKJiM0MzsJaW50IGY7CiYjNDM7fTsKJiM0MzsKJiM0MzsKJiM0MzsvKiBCUEYga2Z1bmNzICovCiYjNDM7I2lmbmRlZiBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFUwomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNpZm5kZWYgQlBGX05PX1BSRVNFUlZFX0FDQ0VTU19JTkRFWAomIzQzOyNwcmFnbWEgY2xhbmcgYXR0cmlidXRlIHBvcAomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNlbmRpZiAvKiBfX1ZNTElOVVhfSF9fICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9idGZfZHVtcF91bnNvcnRlZC5leHBlY3RlZCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2J0Zl9kdW1wX3Vuc29ydGVkLmV4cGVjdGVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjQzMTBhZGMyZWQ1MTQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9idGZfZHVtcF91bnNvcnRlZC5leHBlY3RlZApAQCAtMCwwICYjNDM7MSw0OCBAQAomIzQzOyNpZm5kZWYgX19WTUxJTlVYX0hfXwomIzQzOyNkZWZpbmUgX19WTUxJTlVYX0hfXwomIzQzOwomIzQzOyNpZm5kZWYgQlBGX05PX1BSRVNFUlZFX0FDQ0VTU19JTkRFWAomIzQzOyNwcmFnbWEgY2xhbmcgYXR0cmlidXRlIHB1c2ggKF9fYXR0cmlidXRlX18oKHByZXNlcnZlX2FjY2Vzc19pbmRleCkpLCBhcHBseV90byA9IHJlY29yZCkKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjaWZuZGVmIF9fa3N5bQomIzQzOyNkZWZpbmUgX19rc3ltIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oJiMzNDsua3N5bXMmIzM0OykpKQomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNpZm5kZWYgX193ZWFrCiYjNDM7I2RlZmluZSBfX3dlYWsgX19hdHRyaWJ1dGVfXygod2VhaykpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmbmRlZiBfX2JwZl9mYXN0Y2FsbAomIzQzOyNpZiBfX2hhc19hdHRyaWJ1dGUoYnBmX2Zhc3RjYWxsKQomIzQzOyNkZWZpbmUgX19icGZfZmFzdGNhbGwgX19hdHRyaWJ1dGVfXygoYnBmX2Zhc3RjYWxsKSkKJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgX19icGZfZmFzdGNhbGwKJiM0MzsjZW5kaWYKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MztzdHJ1Y3QgaG9sZXkgewomIzQzOwlpbnQgYzsKJiM0MzsJbG9uZzogMzI7CiYjNDM7CWxvbmc6IDMyOwomIzQzOwlpbnQgdGFpbDsKJiM0Mzt9OwomIzQzOwomIzQzO2VudW0gewomIzQzOwlFMCA9IDEsCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcyB7CiYjNDM7CWludCBmOwomIzQzO307CiYjNDM7CiYjNDM7CiYjNDM7LyogQlBGIGtmdW5jcyAqLwomIzQzOyNpZm5kZWYgQlBGX05PX0tGVU5DX1BST1RPVFlQRVMKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjaWZuZGVmIEJQRl9OT19QUkVTRVJWRV9BQ0NFU1NfSU5ERVgKJiM0MzsjcHJhZ21hIGNsYW5nIGF0dHJpYnV0ZSBwb3AKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjZW5kaWYgLyogX19WTUxJTlVYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jCmluZGV4IDBhMmE0ZjBhMjc5NGIuLmM0OWZkZDkwZWIwMzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9oZWxwZXJzLmMKQEAgLTUzLDYgJiM0Mzs1Myw3IEBAIHN0YXRpYyBpbnQgcnVuX2NvbW1hbmQoY2hhciAqYXJncywgY2hhciAqb3V0cHV0X2J1Ziwgc2l6ZV90IG91dHB1dF9tYXhfbGVuKQogCXN0YXRpYyBjaGFyIGJwZnRvb2xfcGF0aFtQQVRIX01BWF0gPSB7fTsKIAlib29sIHN1cHByZXNzX291dHB1dCA9ICEob3V0cHV0X2J1ZiAmYW1wOyZhbXA7IG91dHB1dF9tYXhfbGVuKTsKIAljaGFyIGNvbW1hbmRbQlBGVE9PTF9GVUxMX0NNRF9NQVhfTEVOXTsKJiM0MzsJc2l6ZV90IG47CiAJRklMRSAqZjsKIAlpbnQgcmV0OwogCkBAIC02OCw4ICYjNDM7NjksMTAgQEAgc3RhdGljIGludCBydW5fY29tbWFuZChjaGFyICphcmdzLCBjaGFyICpvdXRwdXRfYnVmLCBzaXplX3Qgb3V0cHV0X21heF9sZW4pCiAJaWYgKCFmKQogCQlyZXR1cm4gMTsKIAotCWlmICghc3VwcHJlc3Nfb3V0cHV0KQotCQlmcmVhZChvdXRwdXRfYnVmLCAxLCBvdXRwdXRfbWF4X2xlbiwgZik7CiYjNDM7CWlmICghc3VwcHJlc3Nfb3V0cHV0KSB7CiYjNDM7CQluID0gZnJlYWQob3V0cHV0X2J1ZiwgMSwgb3V0cHV0X21heF9sZW4gLSAxLCBmKTsKJiM0MzsJCW91dHB1dF9idWZbbl0gPSAmIzM5O1wwJiMzOTs7CiYjNDM7CX0KIAlyZXQgPSBwY2xvc2UoZik7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9idGZfZHVtcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9idGZfZHVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ1YjI1MzAyYjBjODkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmMKQEAgLTAsMCAmIzQzOzEsMTc4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGZ0b29sX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2J0Zi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW1pdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtidGZfaGVscGVycy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RpbmdfaGVscGVycy5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIERVTVBfQlVGX1NaCQkoMTYgKiAxMDI0KQomIzQzOwomIzQzOyNkZWZpbmUgRVhQRUNURURfU09SVEVECQkmIzM0O2JwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkJiMzNDsKJiM0MzsjZGVmaW5lIEVYUEVDVEVEX1VOU09SVEVECSYjMzQ7YnBmdG9vbF9idGZfZHVtcF91bnNvcnRlZC5leHBlY3RlZCYjMzQ7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKglzdHJ1Y3QgaG9sZXkgewomIzQzOyAqCQlpbnQgYzsKJiM0MzsgKgkJJmx0OzY0LWJpdCBob2xlJmd0OwomIzQzOyAqCQlpbnQgdGFpbDsKJiM0MzsgKgl9OwomIzQzOyAqCWVudW0geyBFMCA9IDEgfTsKJiM0MzsgKglzdHJ1Y3QgcyB7IGludCBmOyB9OwomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgYnRmICpta19idGYodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBidGYgKmJ0ZjsKJiM0MzsKJiM0MzsJYnRmID0gYnRmX19uZXdfZW1wdHkoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgJiMzNDtuZXdfZW1wdHkmIzM0OykpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJYnRmX19hZGRfaW50KGJ0ZiwgJiMzNDtpbnQmIzM0OywgNCwgQlRGX0lOVF9TSUdORUQpOwomIzQzOwlidGZfX2FkZF9pbnQoYnRmLCAmIzM0O2xvbmcgaW50JiMzNDssIDQsIEJURl9JTlRfU0lHTkVEKTsKJiM0MzsKJiM0MzsJYnRmX19hZGRfc3RydWN0KGJ0ZiwgJiMzNDtob2xleSYjMzQ7LCAxNik7CiYjNDM7CWJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgJiMzNDtjJiMzNDssIDEsIDAsIDApOwomIzQzOwlidGZfX2FkZF9maWVsZChidGYsICYjMzQ7dGFpbCYjMzQ7LCAxLCA5NiwgMCk7CiYjNDM7CiYjNDM7CWJ0Zl9fYWRkX2VudW0oYnRmLCBOVUxMLCA0KTsKJiM0MzsJYnRmX19hZGRfZW51bV92YWx1ZShidGYsICYjMzQ7RTAmIzM0OywgMSk7CiYjNDM7CiYjNDM7CWJ0Zl9fYWRkX3N0cnVjdChidGYsICYjMzQ7cyYjMzQ7LCA0KTsKJiM0MzsJYnRmX19hZGRfZmllbGQoYnRmLCAmIzM0O2YmIzM0OywgMSwgMCwgMCk7CiYjNDM7CiYjNDM7CVZBTElEQVRFX1JBV19CVEYoCiYjNDM7CQlidGYsCiYjNDM7CQkmIzM0O1sxXSBJTlQgJiMzOTtpbnQmIzM5OyBzaXplPTQgYml0c19vZmZzZXQ9MCBucl9iaXRzPTMyIGVuY29kaW5nPVNJR05FRCYjMzQ7LAomIzQzOwkJJiMzNDtbMl0gSU5UICYjMzk7bG9uZyBpbnQmIzM5OyBzaXplPTQgYml0c19vZmZzZXQ9MCBucl9iaXRzPTMyIGVuY29kaW5nPVNJR05FRCYjMzQ7LAomIzQzOwkJJiMzNDtbM10gU1RSVUNUICYjMzk7aG9sZXkmIzM5OyBzaXplPTE2IHZsZW49MlxuJiMzNDsKJiM0MzsJCSYjMzQ7XHQmIzM5O2MmIzM5OyB0eXBlX2lkPTEgYml0c19vZmZzZXQ9MFxuJiMzNDsKJiM0MzsJCSYjMzQ7XHQmIzM5O3RhaWwmIzM5OyB0eXBlX2lkPTEgYml0c19vZmZzZXQ9OTYmIzM0OywKJiM0MzsJCSYjMzQ7WzRdIEVOVU0gJiMzOTsoYW5vbikmIzM5OyBlbmNvZGluZz1VTlNJR05FRCBzaXplPTQgdmxlbj0xXG4mIzM0OwomIzQzOwkJJiMzNDtcdCYjMzk7RTAmIzM5OyB2YWw9MSYjMzQ7LAomIzQzOwkJJiMzNDtbNV0gU1RSVUNUICYjMzk7cyYjMzk7IHNpemU9NCB2bGVuPTFcbiYjMzQ7CiYjNDM7CQkmIzM0O1x0JiMzOTtmJiMzOTsgdHlwZV9pZD0xIGJpdHNfb2Zmc2V0PTAmIzM0Oyk7CiYjNDM7CiYjNDM7CXJldHVybiBidGY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnRmX3RvX3RtcGZpbGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjaGFyICpwYXRoKQomIzQzO3sKJiM0MzsJc3NpemVfdCB3cml0dGVuOwomIzQzOwljb25zdCB2b2lkICpyYXc7CiYjNDM7CV9fdTMyIHN6OwomIzQzOwlpbnQgZmQ7CiYjNDM7CiYjNDM7CXJhdyA9IGJ0Zl9fcmF3X2RhdGEoYnRmLCAmYW1wO3N6KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHJhdywgJiMzNDtyYXdfZGF0YSYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJc25wcmludGYocGF0aCwgUEFUSF9NQVgsICYjMzQ7L3RtcC9icGZ0b29sX2J0Zl9kdW1wLlhYWFhYWCYjMzQ7KTsKJiM0MzsJZmQgPSBta3N0ZW1wKHBhdGgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChmZCwgJiMzNDtta3N0ZW1wX2J0ZiYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJd3JpdHRlbiA9IHdyaXRlKGZkLCByYXcsIHN6KTsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlpZiAoIUFTU0VSVF9FUSh3cml0dGVuLCBzeiwgJiMzNDt3cml0ZV9idGYmIzM0OykpIHsKJiM0MzsJCXVubGluayhwYXRoKTsKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNoYXIgKmR1bXBfYyhjb25zdCBjaGFyICpidGZfcGF0aCwgYm9vbCBzb3J0ZWQpCiYjNDM7ewomIzQzOwljaGFyIGFyZ3NbTUFYX0JQRlRPT0xfQ01EX0xFTl07CiYjNDM7CWNoYXIgKmJ1ZjsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJYnVmID0gbWFsbG9jKERVTVBfQlVGX1NaKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGJ1ZiwgJiMzNDthbGxvY19kdW1wJiMzNDspKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXNucHJpbnRmKGFyZ3MsIHNpemVvZihhcmdzKSwgJiMzNDtidGYgZHVtcCBmaWxlICVzIGZvcm1hdCBjJXMmIzM0OywKJiM0MzsJCSBidGZfcGF0aCwgc29ydGVkID8gJiMzNDsmIzM0OyA6ICYjMzQ7IHVuc29ydGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBnZXRfYnBmdG9vbF9jb21tYW5kX291dHB1dChhcmdzLCBidWYsIERVTVBfQlVGX1NaKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2J0Zl9kdW1wX2Zvcm1hdF9jJiMzNDspKSB7CiYjNDM7CQlmcmVlKGJ1Zik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gYnVmOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY2hhciAqcmVhZF9leHBlY3RlZChjb25zdCBjaGFyICpwYXRoKQomIzQzO3sKJiM0MzsJY2hhciAqYnVmID0gTlVMTDsKJiM0MzsJc2l6ZV90IGNhcCA9IDA7CiYjNDM7CUZJTEUgKmY7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWYgPSBmb3BlbihwYXRoLCAmIzM0O3ImIzM0Oyk7CiYjNDM7CWlmICghZikgewomIzQzOwkJZXJyID0gZXJybm87CiYjNDM7CQlQUklOVF9GQUlMKCYjMzQ7Y2FuJiMzOTt0IG9wZW4gZXhwZWN0ZWQgb3V0cHV0ICYjMzk7JXMmIzM5OzogZXJybm8gJWRcbiYjMzQ7LCBwYXRoLCBlcnIpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogbm8gTlVMIGluIGEgZ2VuZXJhdGVkIGhlYWRlciwgc28gdGhpcyByZWFkcyB0byB0aGUgZW5kICovCiYjNDM7CWlmIChnZXRkZWxpbSgmYW1wO2J1ZiwgJmFtcDtjYXAsICYjMzk7XDAmIzM5OywgZikgJmx0OyAwKSB7CiYjNDM7CQllcnIgPSBlcnJubzsKJiM0MzsJCVBSSU5UX0ZBSUwoJiMzNDtjYW4mIzM5O3QgcmVhZCBleHBlY3RlZCBvdXRwdXQgJiMzOTslcyYjMzk7OiBlcnJubyAlZFxuJiMzNDssIHBhdGgsIGVycik7CiYjNDM7CQlmcmVlKGJ1Zik7CiYjNDM7CQlidWYgPSBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZjbG9zZShmKTsKJiM0MzsJcmV0dXJuIGJ1ZjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9kdW1wKGNvbnN0IGNoYXIgKmJ0Zl9wYXRoLCBib29sIHNvcnRlZCkKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKmV4cF9wYXRoOwomIzQzOwljaGFyICpkdW1wLCAqZXhwOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlleHBfcGF0aCA9IHNvcnRlZCA/IEVYUEVDVEVEX1NPUlRFRCA6IEVYUEVDVEVEX1VOU09SVEVEOwomIzQzOwomIzQzOwlkdW1wID0gZHVtcF9jKGJ0Zl9wYXRoLCBzb3J0ZWQpOwomIzQzOwlpZiAoIWR1bXApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWV4cCA9IHJlYWRfZXhwZWN0ZWQoZXhwX3BhdGgpOwomIzQzOwlpZiAoIWV4cCkKJiM0MzsJCWdvdG8gb3V0X2R1bXA7CiYjNDM7CiYjNDM7CWVyciA9IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChkdW1wLCBleHApOwomIzQzOwlBU1NFUlRfT0soZXJyLCBzb3J0ZWQgPyAmIzM0O2NtcF9zb3J0ZWQmIzM0OyA6ICYjMzQ7Y21wX3Vuc29ydGVkJiMzNDspOwomIzQzOwomIzQzOwlmcmVlKGV4cCk7CiYjNDM7b3V0X2R1bXA6CiYjNDM7CWZyZWUoZHVtcCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9icGZ0b29sX2J0Zl9kdW1wKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwlzdHJ1Y3QgYnRmICpidGY7CiYjNDM7CiYjNDM7CWJ0ZiA9IG1rX2J0ZigpOwomIzQzOwlpZiAoIWJ0ZikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKGJ0Zl90b190bXBmaWxlKGJ0ZiwgcGF0aCkpCiYjNDM7CQlnb3RvIG91dF9idGY7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7Y19zb3J0ZWQmIzM0OykpCiYjNDM7CQl0ZXN0X2R1bXAocGF0aCwgdHJ1ZSk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7Y191bnNvcnRlZCYjMzQ7KSkKJiM0MzsJCXRlc3RfZHVtcChwYXRoLCBmYWxzZSk7CiYjNDM7CiYjNDM7CXVubGluayhwYXRoKTsKJiM0MztvdXRfYnRmOgomIzQzOwlidGZfX2ZyZWUoYnRmKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfZHVtcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX2R1bXAuYwppbmRleCA5ZjFiNTBlMDdhMjk4Li5mZTA0YTk1NWQ0NmNjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfZHVtcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9kdW1wLmMKQEAgLTEsOCAmIzQzOzEsNyBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKICNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YnBmL2J0Zi5oJmd0OwotCi1zdGF0aWMgaW50IGR1cmF0aW9uID0gMDsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RpbmdfaGVscGVycy5oJiMzNDsKIAogdm9pZCBidGZfZHVtcF9wcmludGYodm9pZCAqY3R4LCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKIHsKQEAgLTQ1LDEyICYjNDM7NDQsNzUgQEAgc3RhdGljIGludCBidGZfZHVtcF9hbGxfdHlwZXMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB2b2lkICpjdHgpCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzOy8qCiYjNDM7ICogRXhwZWN0ZWQgb3V0cHV0IGlzIGVtYmVkZGVkIGluIHRoZSB0ZXN0IGNhc2Ugc291cmNlLCBiZXR3ZWVuCiYjNDM7ICogU1RBUlQtRVhQRUNURUQtT1VUUFVUIGFuZCBFTkQtRVhQRUNURUQtT1VUUFVUIG1hcmtlcnMuIEEgcmVnaW9uIGlzIGVpdGhlcgomIzQzOyAqIHBsYWluIEMsIHdoZXJlIGEgZGVjbGFyYXRpb24gZG91YmxlcyBhcyBpdHMgb3duIGV4cGVjdGF0aW9uLCBvciBDIHdyYXBwZWQgaW4KJiM0MzsgKiBhIGJsb2NrIGNvbW1lbnQsIHdoZXJlIHRoZSByZW5kZXJlZCBmb3JtIGRpZmZlcnMgZnJvbSB0aGUgc291cmNlLiBBbGwKJiM0MzsgKiByZWdpb25zIG9mIGEgZmlsZSBjb25jYXRlbmF0ZSBpbnRvIG9uZSBleHBlY3RhdGlvbiwgY29tcGFyZWQgYWdhaW5zdCBvbmUKJiM0MzsgKiB3aG9sZS1maWxlIGR1bXAuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIGEgbWFsbG9jJiMzOTtkIGJ1ZmZlciBmb3IgdGhlIGNhbGxlciB0byBmcmVlLCBvciBOVUxMIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGNoYXIgKnJlYWRfZXhwZWN0ZWRfb3V0cHV0KGNvbnN0IGNoYXIgKnBhdGgpCiYjNDM7ewomIzQzOwlzaXplX3Qgb3V0X3N6ID0gMCwgbGluZV9jYXAgPSAwOwomIzQzOwljaGFyICpvdXQgPSBOVUxMLCAqbGluZSA9IE5VTEw7CiYjNDM7CWJvb2wgaW5fcmVnaW9uID0gZmFsc2U7CiYjNDM7CUZJTEUgKmYsICpvdXRfZmlsZTsKJiM0MzsKJiM0MzsJZiA9IGZvcGVuKHBhdGgsICYjMzQ7ciYjMzQ7KTsKJiM0MzsJaWYgKCFmKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CW91dF9maWxlID0gb3Blbl9tZW1zdHJlYW0oJmFtcDtvdXQsICZhbXA7b3V0X3N6KTsKJiM0MzsJaWYgKCFvdXRfZmlsZSkgewomIzQzOwkJZmNsb3NlKGYpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJd2hpbGUgKGdldGxpbmUoJmFtcDtsaW5lLCAmYW1wO2xpbmVfY2FwLCBmKSAmZ3Q7IDApIHsKJiM0MzsJCWNvbnN0IGNoYXIgKnA7CiYjNDM7CiYjNDM7CQlpZiAoc3Ryc3RyKGxpbmUsICYjMzQ7U1RBUlQtRVhQRUNURUQtT1VUUFVUJiMzNDspKSB7CiYjNDM7CQkJaW5fcmVnaW9uID0gdHJ1ZTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCWlmIChzdHJzdHIobGluZSwgJiMzNDtFTkQtRVhQRUNURUQtT1VUUFVUJiMzNDspKQomIzQzOwkJCWluX3JlZ2lvbiA9IGZhbHNlOwomIzQzOwkJaWYgKCFpbl9yZWdpb24pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlwID0gbGluZSAmIzQzOyBzdHJzcG4obGluZSwgJiMzNDsgXHQmIzM0Oyk7CiYjNDM7CiYjNDM7CQkvKiBvcGVuaW5nIG9yIGNsb3NpbmcgbGluZSBvZiBhIGNvbW1lbnRlZCBvdXQgcmVnaW9uICovCiYjNDM7CQlpZiAoIXN0cm5jbXAocCwgJiMzNDsvKiYjMzQ7LCAyKSB8fCAhc3RybmNtcChwLCAmIzM0OyovJiMzNDssIDIpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIE9ubHkgYSAmIzM5OyomIzM5OyBkaXJlY3RseSBhZnRlciB0aGUgaW5kZW50YXRpb24gaXMgYSBjb21tZW50CiYjNDM7CQkgKiBwcmVmaXguIFdpdGhvdXQgb25lIHRoZSBsaW5lIGlzIHRha2VuIGFzIGl0IGlzLCBsZWFkaW5nCiYjNDM7CQkgKiB3aGl0ZXNwYWNlIGluY2x1ZGVkLgomIzQzOwkJICovCiYjNDM7CQlwID0gKnAgPT0gJiMzOTsqJiMzOTsgPyBwICYjNDM7IDEgOiBsaW5lOwomIzQzOwomIzQzOwkJZnB1dHMocCwgb3V0X2ZpbGUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZyZWUobGluZSk7CiYjNDM7CWZjbG9zZShmKTsKJiM0MzsJZmNsb3NlKG91dF9maWxlKTsKJiM0MzsJcmV0dXJuIG91dDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHRlc3RfYnRmX2R1bXBfY2FzZShpbnQgbiwgc3RydWN0IGJ0Zl9kdW1wX3Rlc3RfY2FzZSAqdCkKIHsKLQljaGFyIHRlc3RfZmlsZVsyNTZdLCBvdXRfZmlsZVsyNTZdLCBkaWZmX2NtZFsxMDI0XTsKJiM0MzsJY2hhciAqZHVtcCA9IE5VTEwsICpleHBlY3RlZCA9IE5VTEw7CiAJc3RydWN0IGJ0ZiAqYnRmID0gTlVMTDsKLQlpbnQgZXJyID0gMCwgZmQgPSAtMTsKLQlGSUxFICpmID0gTlVMTDsKJiM0MzsJY2hhciB0ZXN0X2ZpbGVbMjU2XTsKJiM0MzsJc2l6ZV90IGR1bXBfc3ogPSAwOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsJRklMRSAqZjsKIAogCXNucHJpbnRmKHRlc3RfZmlsZSwgc2l6ZW9mKHRlc3RfZmlsZSksICYjMzQ7JXMuYnBmLm8mIzM0OywgdC0mZ3Q7ZmlsZSk7CiAKQEAgLTY5LDI5ICYjNDM7MTMxLDIxIEBAIHN0YXRpYyBpbnQgdGVzdF9idGZfZHVtcF9jYXNlKGludCBuLCBzdHJ1Y3QgYnRmX2R1bXBfdGVzdF9jYXNlICp0KQogCWlmICghdC0mZ3Q7a25vd25fcHRyX3N6KSB7CiAJCWJ0Zl9fc2V0X3BvaW50ZXJfc2l6ZShidGYsIDgpOwogCX0gZWxzZSB7Ci0JCUNIRUNLKGJ0Zl9fcG9pbnRlcl9zaXplKGJ0ZikgIT0gOCwgJiMzNDtwdHJfc3omIzM0OywgJiMzNDtleHAgJWQsIGdvdCAlenVcbiYjMzQ7LAotCQkgICAgICA4LCBidGZfX3BvaW50ZXJfc2l6ZShidGYpKTsKLQl9CiYjNDM7CQlzaXplX3QgcHRyX3N6ID0gYnRmX19wb2ludGVyX3NpemUoYnRmKTsKIAotCXNucHJpbnRmKG91dF9maWxlLCBzaXplb2Yob3V0X2ZpbGUpLCAmIzM0Oy90bXAvJXMub3V0cHV0LlhYWFhYWCYjMzQ7LCB0LSZndDtmaWxlKTsKLQlmZCA9IG1rc3RlbXAob3V0X2ZpbGUpOwotCWlmICghQVNTRVJUX0dFKGZkLCAwLCAmIzM0O2NyZWF0ZV90bXAmIzM0OykpIHsKLQkJZXJyID0gZmQ7Ci0JCWdvdG8gZG9uZTsKJiM0MzsJCUFTU0VSVF9FUShwdHJfc3osIChzaXplX3QpOCwgJiMzNDtwdHJfc3omIzM0Oyk7CiAJfQotCWYgPSBmZG9wZW4oZmQsICYjMzQ7dyYjMzQ7KTsKLQlpZiAoQ0hFQ0soZiA9PSBOVUxMLCAmIzM0O29wZW5fdG1wJiMzNDssICAmIzM0O2ZhaWxlZCB0byBvcGVuIGZpbGU6ICVzKCVkKVxuJiMzNDssCi0JCSAgc3RyZXJyb3IoZXJybm8pLCBlcnJubykpIHsKLQkJY2xvc2UoZmQpOwomIzQzOwomIzQzOwlmID0gb3Blbl9tZW1zdHJlYW0oJmFtcDtkdW1wLCAmYW1wO2R1bXBfc3opOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoZiwgJiMzNDtvcGVuX21lbXN0cmVhbSYjMzQ7KSkgewomIzQzOwkJZXJyID0gLWVycm5vOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJZXJyID0gYnRmX2R1bXBfYWxsX3R5cGVzKGJ0ZiwgZik7CiAJZmNsb3NlKGYpOwotCWNsb3NlKGZkKTsKLQlpZiAoQ0hFQ0soZXJyLCAmIzM0O2J0Zl9kdW1wJiMzNDssICYjMzQ7ZmFpbHVyZSBkdXJpbmcgQyBkdW1waW5nOiAlZFxuJiMzNDssIGVycikpIHsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2J0Zl9kdW1wJiMzNDspKQogCQlnb3RvIGRvbmU7Ci0JfQogCiAJc25wcmludGYodGVzdF9maWxlLCBzaXplb2YodGVzdF9maWxlKSwgJiMzNDtwcm9ncy8lcy5jJiMzNDssIHQtJmd0O2ZpbGUpOwogCWlmIChhY2Nlc3ModGVzdF9maWxlLCBSX09LKSA9PSAtMSkKQEAgLTEwMCwyOCAmIzQzOzE1NCwyMyBAQCBzdGF0aWMgaW50IHRlc3RfYnRmX2R1bXBfY2FzZShpbnQgbiwgc3RydWN0IGJ0Zl9kdW1wX3Rlc3RfY2FzZSAqdCkKIAkJICogd2l0aG91dCBwcmVzZXJ2aW5nIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlLgogCQkgKi8KIAkJc25wcmludGYodGVzdF9maWxlLCBzaXplb2YodGVzdF9maWxlKSwgJiMzNDslcy5jJiMzNDssIHQtJmd0O2ZpbGUpOwotCS8qCi0JICogRGlmZiB0ZXN0IG91dHB1dCBhbmQgZXhwZWN0ZWQgdGVzdCBvdXRwdXQsIGNvbnRhaW5lZCBiZXR3ZWVuCi0JICogU1RBUlQtRVhQRUNURUQtT1VUUFVUIGFuZCBFTkQtRVhQRUNURUQtT1VUUFVUIGxpbmVzIGluIHRlc3QgY2FzZS4KLQkgKiBGb3IgZXhwZWN0ZWQgb3V0cHV0IGxpbmVzLCBldmVyeXRoaW5nIGJlZm9yZSAmIzM5OyomIzM5OyBpcyBzdHJpcHBlZCBvdXQuCi0JICogQWxzbyBsaW5lcyBjb250YWluaW5nIGNvbW1lbnQgc3RhcnQgYW5kIGNvbW1lbnQgZW5kIG1hcmtlcnMgYXJlCi0JICogaWdub3JlZC4gCi0JICovCi0Jc25wcmludGYoZGlmZl9jbWQsIHNpemVvZihkaWZmX2NtZCksCi0JCSAmIzM0O2F3ayAmIzM5Oy9TVEFSVC1FWFBFQ1RFRC1PVVRQVVQve291dD0xO25leHR9ICYjMzQ7Ci0JCSAmIzM0Oy9FTkQtRVhQRUNURUQtT1VUUFVUL3tvdXQ9MH0gJiMzNDsKLQkJICYjMzQ7L1xcL1xcKnxcXCpcXC8ve25leHR9ICYjMzQ7IC8qIGlnbm9yZSBjb21tZW50IHN0YXJ0L2VuZCBsaW5lcyAqLwotCQkgJiMzNDtvdXQge3N1YigvXlsgXFx0XSpcXCovLCBcJiMzNDtcJiMzNDspOyBwcmludH0mIzM5OyAmIzM5OyVzJiMzOTsgfCBkaWZmIC11IC0gJiMzOTslcyYjMzk7JiMzNDssCi0JCSB0ZXN0X2ZpbGUsIG91dF9maWxlKTsKLQllcnIgPSBzeXN0ZW0oZGlmZl9jbWQpOwotCWlmIChDSEVDSyhlcnIsICYjMzQ7ZGlmZiYjMzQ7LAotCQkgICYjMzQ7ZGlmZmVyaW5nIHRlc3Qgb3V0cHV0LCBvdXRwdXQ9JXMsIGVycj0lZCwgZGlmZiBjbWQ6XG4lc1xuJiMzNDssCi0JCSAgb3V0X2ZpbGUsIGVyciwgZGlmZl9jbWQpKQomIzQzOwomIzQzOwlleHBlY3RlZCA9IHJlYWRfZXhwZWN0ZWRfb3V0cHV0KHRlc3RfZmlsZSk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihleHBlY3RlZCwgJiMzNDtyZWFkX2V4cGVjdGVkX291dHB1dCYjMzQ7KSkgewomIzQzOwkJZXJyID0gLWVycm5vOwogCQlnb3RvIGRvbmU7CiYjNDM7CX0KIAotCXJlbW92ZShvdXRfZmlsZSk7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBtaXNtYXRjaCBoYXMgYWxyZWFkeSBiZWVuIHJlcG9ydGVkLCBzbyB0aGlzIG9ubHkgaGFzIHRvCiYjNDM7CSAqIHJlZ2lzdGVyIHRoZSBmYWlsdXJlLiBBU1NFUlRfT0soKSB3b3VsZCBhcHBlbmQgYSBzdGFsZSBlcnJubyB0byBpdC4KJiM0MzsJICovCiYjNDM7CWVyciA9IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChkdW1wLCBleHBlY3RlZCk7CiYjNDM7CUFTU0VSVF9FUShlcnIsIDAsICYjMzQ7Y29tcGFyZV90ZXh0X3RvX2V4cGVjdGVkJiMzNDspOwogCiBkb25lOgomIzQzOwlmcmVlKGV4cGVjdGVkKTsKJiM0MzsJZnJlZShkdW1wKTsKIAlidGZfX2ZyZWUoYnRmKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ190ZXN0c19mcmFtZXdvcmsuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Byb2dfdGVzdHNfZnJhbWV3b3JrLmMKaW5kZXggNzYwN2NmYzI0MDhjMi4uZDExMWZlMTA1NDQ3NiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ190ZXN0c19mcmFtZXdvcmsuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wcm9nX3Rlc3RzX2ZyYW1ld29yay5jCkBAIC0xNzksMyAmIzQzOzE3OSwyNiBAQCB2b2lkIHRlc3RfcHJvZ190ZXN0c19mcmFtZXdvcmtfZXhwZWN0ZWRfbXNncyh2b2lkKQogCQl9CiAJfQogfQomIzQzOwomIzQzO3ZvaWQgdGVzdF9wcm9nX3Rlc3RzX2ZyYW1ld29ya19jb21wYXJlX3RleHQodm9pZCkKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7Y29tcGFyZV90ZXh0X21hdGNoJiMzNDspKSB7CiYjNDM7CQllcnIgPSBjb21wYXJlX3RleHRfdG9fZXhwZWN0ZWQoJiMzNDtzYW1lXG4mIzM0OywgJiMzNDtzYW1lXG4mIzM0Oyk7CiYjNDM7CQlBU1NFUlRfRVEoZXJyLCAwLCAmIzM0O21hdGNoX3JjJiMzNDspOwomIzQzOwkJdGVzdF9fZW5kX3N1YnRlc3QoKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2NvbXBhcmVfdGV4dF9taXNtYXRjaCYjMzQ7KSkgewomIzQzOwkJZXJyID0gY29tcGFyZV90ZXh0X3RvX2V4cGVjdGVkKCYjMzQ7bGluZSB0d29cbiYjMzQ7LCAmIzM0O2xpbmUgb25lXG4mIzM0Oyk7CiYjNDM7CQlmZmx1c2goc3Rkb3V0KTsKJiM0MzsKJiM0MzsJCUFTU0VSVF9FUShlcnIsIC0xLCAmIzM0O21pc21hdGNoX3JjJiMzNDspOwomIzQzOwkJQVNTRVJUX0hBU19TVUJTVFIoZW52LnN1YnRlc3Rfc3RhdGUtJmd0O2xvZ19idWYsICYjMzQ7LWxpbmUgb25lJiMzNDssCiYjNDM7CQkJCSAgJiMzNDtkaWZmX2hhc19leHBlY3RlZCYjMzQ7KTsKJiM0MzsJCUFTU0VSVF9IQVNfU1VCU1RSKGVudi5zdWJ0ZXN0X3N0YXRlLSZndDtsb2dfYnVmLCAmIzM0OyYjNDM7bGluZSB0d28mIzM0OywKJiM0MzsJCQkJICAmIzM0O2RpZmZfaGFzX2FjdHVhbCYjMzQ7KTsKJiM0MzsJCXRlc3RfX2VuZF9zdWJ0ZXN0KCk7CiYjNDM7CX0KJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmMKaW5kZXggYzk3MGU3NzkzZGZjYi4uM2YwMzc5NDllOTc4OSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuYwpAQCAtNTM0LDMgJiM0Mzs1MzQsNDYgQEAgaW50IHN0YWNrX21wcm90ZWN0KHZvaWQpCiAJCSAgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVDKTsKIAlyZXR1cm4gcmV0OwogfQomIzQzOwomIzQzO2ludCBjb21wYXJlX3RleHRfdG9fZXhwZWN0ZWQoY29uc3QgY2hhciAqYWN0dWFsLCBjb25zdCBjaGFyICpleHBlY3RlZCkKJiM0Mzt7CiYjNDM7CWNoYXIgZXhwX3BhdGhbXSA9ICYjMzQ7L3RtcC9zZWxmdGVzdF9leHBlY3RlZC5YWFhYWFgmIzM0OzsKJiM0MzsJY2hhciBhY3RfcGF0aFtdID0gJiMzNDsvdG1wL3NlbGZ0ZXN0X2FjdHVhbC5YWFhYWFgmIzM0OzsKJiM0MzsJY2hhciBidWZbNTEyXSwgY21kWzEyOF07CiYjNDM7CWludCBleHBfZmQsIGFjdF9mZDsKJiM0MzsJRklMRSAqcDsKJiM0MzsKJiM0MzsJaWYgKCFzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZXhwX2ZkID0gbWtzdGVtcChleHBfcGF0aCk7CiYjNDM7CWFjdF9mZCA9IG1rc3RlbXAoYWN0X3BhdGgpOwomIzQzOwlpZiAoZXhwX2ZkICZsdDsgMCB8fCBhY3RfZmQgJmx0OyAwKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZG91dCwgJiMzNDtvdXRwdXQgZGlmZmVycywgbm8gdGVtcCBmaWxlIGZvciBhIGRpZmZcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWRwcmludGYoZXhwX2ZkLCAmIzM0OyVzJiMzNDssIGV4cGVjdGVkKTsKJiM0MzsJZHByaW50ZihhY3RfZmQsICYjMzQ7JXMmIzM0OywgYWN0dWFsKTsKJiM0MzsKJiM0MzsJc25wcmludGYoY21kLCBzaXplb2YoY21kKSwgJiMzNDtkaWZmIC11ICYjMzk7JXMmIzM5OyAmIzM5OyVzJiMzOTsmIzM0OywgZXhwX3BhdGgsIGFjdF9wYXRoKTsKJiM0MzsJcCA9IHBvcGVuKGNtZCwgJiMzNDtyJiMzNDspOwomIzQzOwlpZiAoIXApIHsKJiM0MzsJCWZwcmludGYoc3Rkb3V0LCAmIzM0O291dHB1dCBkaWZmZXJzLCAmIzM5OyVzJiMzOTsgZGlkIG5vdCBydW5cbiYjMzQ7LCBjbWQpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHApKQomIzQzOwkJZnB1dHMoYnVmLCBzdGRvdXQpOwomIzQzOwlwY2xvc2UocCk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlpZiAoZXhwX2ZkICZndDs9IDApIHsKJiM0MzsJCWNsb3NlKGV4cF9mZCk7CiYjNDM7CQl1bmxpbmsoZXhwX3BhdGgpOwomIzQzOwl9CiYjNDM7CWlmIChhY3RfZmQgJmd0Oz0gMCkgewomIzQzOwkJY2xvc2UoYWN0X2ZkKTsKJiM0MzsJCXVubGluayhhY3RfcGF0aCk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIC0xOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaAppbmRleCAyZWRjNmZiN2ZjNTIxLi4xYzU4YTJmMDhiNjQ1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oCkBAIC02MSw0ICYjNDM7NjEsNyBAQCBpbnQgdGVzdGluZ19wcm9nX2ZsYWdzKHZvaWQpOwogYm9vbCBpc19qaXRfZW5hYmxlZCh2b2lkKTsKIGludCBzdGFja19tcHJvdGVjdCh2b2lkKTsKIAomIzQzOy8qIFJ1bnMgZGlmZigxKSBvbiBtaXNtYXRjaCAqLwomIzQzO2ludCBjb21wYXJlX3RleHRfdG9fZXhwZWN0ZWQoY29uc3QgY2hhciAqYWN0dWFsLCBjb25zdCBjaGFyICpleHBlY3RlZCk7CiYjNDM7CiAjZW5kaWYgLyogX19URVNUSU5HX0hFTFBFUlNfSCAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjMxCgkJCQkJCQlvdXRwdXQ6IDYyCgkJCQkJCQl0aG91Z2h0czogNzQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGV2ZW4gZG9pbmcuIFRoZSBtb2RpZmllZCBmaWxlcyBhcmUgYWxsIGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBgdG9vbHMvYnBmL2JwZnRvb2wvYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiAqQ3J1Y2lhbGx5Kiwgbm90aGluZyBpcyB0b3VjaGluZyB0aGUga2VybmVsIHNvdXJjZSBkaXJlY3RseSDigJMgbm8gYGtlcm5lbC9gLCBgbmV0L2AsIGBkcml2ZXJzL2AsIGV0Yy4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHVzZXJzcGFjZSB0b29scywgYGJwZnRvb2xgLCBhbmQgaXRzIHNlbGZ0ZXN0cy4gVGhhdCYjMzk7cyBhIGh1Z2UgY2x1ZS4KCk5vdywgSSBoYXZlIHRvIGFwcGx5IHRoZSBjcml0ZXJpYS4gV2UmIzM5O3JlIGxvb2tpbmcgZm9yIHdoZXRoZXIgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGtlcm5lbCB2dWxuZXJhYmlsaXR5IGRpc2NvdmVyeSB1c2luZyBzeXprYWxsZXIuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBpdCBvbmx5IG1vZGlmaWVzIGNlcnRhaW4gdHlwZXMgb2YgdGhpbmdzOiBkb2N1bWVudGF0aW9uLCBLY29uZmlnIGZpbGVzLCBjb21tZW50cywgZGVjb3JhdGl2ZSBjaGFuZ2VzIGxpa2UgbG9nZ2luZywgY29uc3RhbnRzIHRoYXQgZG9uJiMzOTt0IGNoYW5nZSBleGVjdXRpb24sIHVucmVhY2hhYmxlIGNvZGUsIG9yIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUtZGVwZW5kZW50IGRyaXZlcnMgb3IgdGVhcmRvd24gY2FsbGJhY2tzLiBJJiMzOTt2ZSBzZWVuIHRoZXNlIGJlZm9yZSwgc28gSSBoYXZlIGEgbWVudGFsIGNoZWNrbGlzdC4KCkxvb2tpbmcgYXQgdGhlIGZpbGVzIGFnYWluLCBJIHNlZToKCiogICBgdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmNgOiBicGZ0b29sLCBhIHVzZXJzcGFjZSB0b29sCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4uLmA6IE11bHRpcGxlIHNlbGZ0ZXN0IGZpbGVzIHJlbGF0ZWQgdG8gYnBmdG9vbC4KCkV2ZXJ5dGhpbmcgaXMgZmlybWx5IGluIHRoZSBgdG9vbHMvYCByZWFsbS4gVGhlc2UgYXJlICpub3QqIGtlcm5lbCBtb2RpZmljYXRpb25zLiBTeXprYWxsZXIgdGFyZ2V0cyB0aGUga2VybmVsIGl0c2VsZiwgYW5kIGNoYW5nZXMgaW4gdGhlc2UgbG9jYXRpb25zIGRvbiYjMzk7dCB0b3VjaCB0aGUga2VybmVsIGJpbmFyeSBvciBjaGFuZ2UgaXRzIGV4ZWN1dGlvbiBsb2dpYy4gCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuIEkgZG9uJiMzOTt0IHNlZSBhbnkgb3RoZXIgZmFjdG9ycyB0aGF0IHdvdWxkIGNoYW5nZSB0aGF0IGNvbmNsdXNpb24uIE5vIG5lZWQgdG8gbG9vayBmb3IgYW55IG90aGVyIGNvbmZpZyBvciB0b29scyB0byB2ZXJpZnkuIEl0IGlzIHZlcnkgdW5hbWJpZ3VvdXMuCgpUaW1lIHRvIGV4ZWN1dGUgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xpbmcgKGJwZnRvb2wpIGFuZCBCUEYgc2VsZnRlc3RzIHVuZGVyIHRvb2xzLywgd2l0aCBubyBjaGFuZ2VzIHRvIGtlcm5lbCBjb2RlIG9yIHJ1bnRpbWUgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0b29saW5nIChicGZ0b29sKSBhbmQgQlBGIHNlbGZ0ZXN0cyB1bmRlciB0b29scy8sIHdpdGggbm8gY2hhbmdlcyB0byBrZXJuZWwgY29kZSBvciBydW50aW1lIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDI6NTUuMzQ0NzA3Njk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcwMTQ5NDMxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xpbmcgKGJwZnRvb2wpIGFuZCBCUEYgc2VsZnRlc3RzIHVuZGVyIHRvb2xzLywgd2l0aCBubyBjaGFuZ2VzIHRvIGtlcm5lbCBjb2RlIG9yIHJ1bnRpbWUgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0Mjo1NS4zNDQ3MjMyNzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzM3NzcxMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NGMxMjk1NDZmOTkwNDA4NDZkOGQ5MWM5NGE4OGMxZTgzMWFhNTVlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDI4IDIyOjQyOjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2J0Zi5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmNcXG5pbmRleCBjOTU4OTAyNmRhOGQ2Li5iY2EwYTM5ODJmMDliIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2J0Zi5jXFxuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmNcXG5AQCAtODA1LDkgKzgwNSwxMyBAQCBzdGF0aWMgaW50IGR1bXBfYnRmX2MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbiBcXG4gXFx0XFx0aWYgKHNvcnRfZHVtcClcXG4gXFx0XFx0XFx0ZGF0dW1zID0gc29ydF9idGZfYyhidGYpO1xcbi1cXHRcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgY250OyBpKyspIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuIFxcdFxcdFxcdGludCBpZHggPSBkYXR1bXMgPyBkYXR1bXNbaV0uaW5kZXggOiBpO1xcbiBcXG4rXFx0XFx0XFx0LyogdHlwZSBJRCAwIGlzIHZvaWQsIHNraXAgaXQgKi9cXG4rXFx0XFx0XFx0aWYgKGlkeCA9PSAwKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuIFxcdFxcdFxcdGVyciA9IGJ0Zl9kdW1wX19kdW1wX3R5cGUoZCwgaWR4KTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0Z290byBkb25lO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcXG5pbmRleCA1ZjFhM2JmYzA1NjlmLi5kOTk1ODEyNTdlNTRmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxcbkBAIC0xMTksNyArMTE5LDkgQEAgVEVTVF9HRU5fUFJPR1MgKz0gdGVzdF9wcm9ncy1jcHV2NFxcbiBURVNUX0lOU1RfU1VCRElSUyArPSBjcHV2NFxcbiBlbmRpZlxcbiBcXG4tVEVTVF9GSUxFUyA9IHhza19wcmVyZXFzLnNoICQod2lsZGNhcmQgcHJvZ3MvYnRmX2R1bXBfdGVzdF9jYXNlXyouYylcXG4rVEVTVF9GSUxFUyA9IHhza19wcmVyZXFzLnNoICQod2lsZGNhcmQgcHJvZ3MvYnRmX2R1bXBfdGVzdF9jYXNlXyouYylcXHRcXFxcXFxuK1xcdCAgICAgYnBmdG9vbF9idGZfZHVtcF9zb3J0ZWQuZXhwZWN0ZWRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCAgICAgYnBmdG9vbF9idGZfZHVtcF91bnNvcnRlZC5leHBlY3RlZFxcbiBcXG4gIyBPcmRlciBjb3JyZXNwb25kIHRvICdtYWtlIHJ1bl90ZXN0cycgb3JkZXJcXG4gVEVTVF9QUk9HUyA6PSB0ZXN0X2ttb2Quc2ggXFxcXFxcbkBAIC04ODcsNyArODg5LDkgQEAgVFJVTk5FUl9FWFRSQV9GSUxFUyA6PSAkKE9VVFBVVCkvdXJhbmRvbV9yZWFkXFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHQgICAgICAgaW1hX3NldHVwLnNoIFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0ICAgICAgICQoVkVSSUZZX1NJR19TRVRVUClcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdCAgICAgICAkKHdpbGRjYXJkIHByb2dzL2J0Zl9kdW1wX3Rlc3RfY2FzZV8qLmMpXFx0XFx0XFxcXFxcbi1cXHRcXHQgICAgICAgJCh3aWxkY2FyZCBwcm9ncy8qLmJwZi5vKVxcbitcXHRcXHQgICAgICAgJCh3aWxkY2FyZCBwcm9ncy8qLmJwZi5vKVxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICAgIGJwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkXFx0XFx0XFx0XFxcXFxcbitcXHRcXHQgICAgICAgYnBmdG9vbF9idGZfZHVtcF91bnNvcnRlZC5leHBlY3RlZFxcbiBUUlVOTkVSX0JQRl9CVUlMRF9SVUxFIDo9IENMQU5HX0JQRl9CVUlMRF9SVUxFXFxuIFRSVU5ORVJfQlBGX0NGTEFHUyA6PSAkKEJQRl9DRkxBR1MpICQoQ0xBTkdfQ0ZMQUdTKSAtREVOQUJMRV9BVE9NSUNTX1RFU1RTXFxuICQoZXZhbCAkKGNhbGwgREVGSU5FX1RFU1RfUlVOTkVSLHRlc3RfcHJvZ3MpKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9idGZfZHVtcF9zb3J0ZWQuZXhwZWN0ZWQgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9idGZfZHVtcF9zb3J0ZWQuZXhwZWN0ZWRcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjU0NzBiMmI0MzIyOTFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkXFxuQEAgLTAsMCArMSw0OCBAQFxcbisjaWZuZGVmIF9fVk1MSU5VWF9IX19cXG4rI2RlZmluZSBfX1ZNTElOVVhfSF9fXFxuK1xcbisjaWZuZGVmIEJQRl9OT19QUkVTRVJWRV9BQ0NFU1NfSU5ERVhcXG4rI3ByYWdtYSBjbGFuZyBhdHRyaWJ1dGUgcHVzaCAoX19hdHRyaWJ1dGVfXygocHJlc2VydmVfYWNjZXNzX2luZGV4KSksIGFwcGx5X3RvID0gcmVjb3JkKVxcbisjZW5kaWZcXG4rXFxuKyNpZm5kZWYgX19rc3ltXFxuKyNkZWZpbmUgX19rc3ltIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oXFxcIi5rc3ltc1xcXCIpKSlcXG4rI2VuZGlmXFxuK1xcbisjaWZuZGVmIF9fd2Vha1xcbisjZGVmaW5lIF9fd2VhayBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSlcXG4rI2VuZGlmXFxuK1xcbisjaWZuZGVmIF9fYnBmX2Zhc3RjYWxsXFxuKyNpZiBfX2hhc19hdHRyaWJ1dGUoYnBmX2Zhc3RjYWxsKVxcbisjZGVmaW5lIF9fYnBmX2Zhc3RjYWxsIF9fYXR0cmlidXRlX18oKGJwZl9mYXN0Y2FsbCkpXFxuKyNlbHNlXFxuKyNkZWZpbmUgX19icGZfZmFzdGNhbGxcXG4rI2VuZGlmXFxuKyNlbmRpZlxcbitcXG4rZW51bSB7XFxuK1xcdEUwID0gMSxcXG4rfTtcXG4rXFxuK3N0cnVjdCBob2xleSB7XFxuK1xcdGludCBjO1xcbitcXHRsb25nOiAzMjtcXG4rXFx0bG9uZzogMzI7XFxuK1xcdGludCB0YWlsO1xcbit9O1xcbitcXG4rc3RydWN0IHMge1xcbitcXHRpbnQgZjtcXG4rfTtcXG4rXFxuK1xcbisvKiBCUEYga2Z1bmNzICovXFxuKyNpZm5kZWYgQlBGX05PX0tGVU5DX1BST1RPVFlQRVNcXG4rI2VuZGlmXFxuK1xcbisjaWZuZGVmIEJQRl9OT19QUkVTRVJWRV9BQ0NFU1NfSU5ERVhcXG4rI3ByYWdtYSBjbGFuZyBhdHRyaWJ1dGUgcG9wXFxuKyNlbmRpZlxcbitcXG4rI2VuZGlmIC8qIF9fVk1MSU5VWF9IX18gKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfYnRmX2R1bXBfdW5zb3J0ZWQuZXhwZWN0ZWQgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9idGZfZHVtcF91bnNvcnRlZC5leHBlY3RlZFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDMxMGFkYzJlZDUxNFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9idGZfZHVtcF91bnNvcnRlZC5leHBlY3RlZFxcbkBAIC0wLDAgKzEsNDggQEBcXG4rI2lmbmRlZiBfX1ZNTElOVVhfSF9fXFxuKyNkZWZpbmUgX19WTUxJTlVYX0hfX1xcbitcXG4rI2lmbmRlZiBCUEZfTk9fUFJFU0VSVkVfQUNDRVNTX0lOREVYXFxuKyNwcmFnbWEgY2xhbmcgYXR0cmlidXRlIHB1c2ggKF9fYXR0cmlidXRlX18oKHByZXNlcnZlX2FjY2Vzc19pbmRleCkpLCBhcHBseV90byA9IHJlY29yZClcXG4rI2VuZGlmXFxuK1xcbisjaWZuZGVmIF9fa3N5bVxcbisjZGVmaW5lIF9fa3N5bSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKFxcXCIua3N5bXNcXFwiKSkpXFxuKyNlbmRpZlxcbitcXG4rI2lmbmRlZiBfX3dlYWtcXG4rI2RlZmluZSBfX3dlYWsgX19hdHRyaWJ1dGVfXygod2VhaykpXFxuKyNlbmRpZlxcbitcXG4rI2lmbmRlZiBfX2JwZl9mYXN0Y2FsbFxcbisjaWYgX19oYXNfYXR0cmlidXRlKGJwZl9mYXN0Y2FsbClcXG4rI2RlZmluZSBfX2JwZl9mYXN0Y2FsbCBfX2F0dHJpYnV0ZV9fKChicGZfZmFzdGNhbGwpKVxcbisjZWxzZVxcbisjZGVmaW5lIF9fYnBmX2Zhc3RjYWxsXFxuKyNlbmRpZlxcbisjZW5kaWZcXG4rXFxuK3N0cnVjdCBob2xleSB7XFxuK1xcdGludCBjO1xcbitcXHRsb25nOiAzMjtcXG4rXFx0bG9uZzogMzI7XFxuK1xcdGludCB0YWlsO1xcbit9O1xcbitcXG4rZW51bSB7XFxuK1xcdEUwID0gMSxcXG4rfTtcXG4rXFxuK3N0cnVjdCBzIHtcXG4rXFx0aW50IGY7XFxuK307XFxuK1xcbitcXG4rLyogQlBGIGtmdW5jcyAqL1xcbisjaWZuZGVmIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTXFxuKyNlbmRpZlxcbitcXG4rI2lmbmRlZiBCUEZfTk9fUFJFU0VSVkVfQUNDRVNTX0lOREVYXFxuKyNwcmFnbWEgY2xhbmcgYXR0cmlidXRlIHBvcFxcbisjZW5kaWZcXG4rXFxuKyNlbmRpZiAvKiBfX1ZNTElOVVhfSF9fICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuY1xcbmluZGV4IDBhMmE0ZjBhMjc5NGIuLmM0OWZkZDkwZWIwMzMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jXFxuQEAgLTUzLDYgKzUzLDcgQEAgc3RhdGljIGludCBydW5fY29tbWFuZChjaGFyICphcmdzLCBjaGFyICpvdXRwdXRfYnVmLCBzaXplX3Qgb3V0cHV0X21heF9sZW4pXFxuIFxcdHN0YXRpYyBjaGFyIGJwZnRvb2xfcGF0aFtQQVRIX01BWF0gPSB7fTtcXG4gXFx0Ym9vbCBzdXBwcmVzc19vdXRwdXQgPSAhKG91dHB1dF9idWYgXFx1MDAyNlxcdTAwMjYgb3V0cHV0X21heF9sZW4pO1xcbiBcXHRjaGFyIGNvbW1hbmRbQlBGVE9PTF9GVUxMX0NNRF9NQVhfTEVOXTtcXG4rXFx0c2l6ZV90IG47XFxuIFxcdEZJTEUgKmY7XFxuIFxcdGludCByZXQ7XFxuIFxcbkBAIC02OCw4ICs2OSwxMCBAQCBzdGF0aWMgaW50IHJ1bl9jb21tYW5kKGNoYXIgKmFyZ3MsIGNoYXIgKm91dHB1dF9idWYsIHNpemVfdCBvdXRwdXRfbWF4X2xlbilcXG4gXFx0aWYgKCFmKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFxuLVxcdGlmICghc3VwcHJlc3Nfb3V0cHV0KVxcbi1cXHRcXHRmcmVhZChvdXRwdXRfYnVmLCAxLCBvdXRwdXRfbWF4X2xlbiwgZik7XFxuK1xcdGlmICghc3VwcHJlc3Nfb3V0cHV0KSB7XFxuK1xcdFxcdG4gPSBmcmVhZChvdXRwdXRfYnVmLCAxLCBvdXRwdXRfbWF4X2xlbiAtIDEsIGYpO1xcbitcXHRcXHRvdXRwdXRfYnVmW25dID0gJ1xcXFwwJztcXG4rXFx0fVxcbiBcXHRyZXQgPSBwY2xvc2UoZik7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ1YjI1MzAyYjBjODlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9idGZfZHVtcC5jXFxuQEAgLTAsMCArMSwxNzggQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZnRvb2xfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2J0Zi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGltaXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJ0Zl9oZWxwZXJzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ0ZXN0aW5nX2hlbHBlcnMuaFxcXCJcXG4rXFxuKyNkZWZpbmUgRFVNUF9CVUZfU1pcXHRcXHQoMTYgKiAxMDI0KVxcbitcXG4rI2RlZmluZSBFWFBFQ1RFRF9TT1JURURcXHRcXHRcXFwiYnBmdG9vbF9idGZfZHVtcF9zb3J0ZWQuZXhwZWN0ZWRcXFwiXFxuKyNkZWZpbmUgRVhQRUNURURfVU5TT1JURURcXHRcXFwiYnBmdG9vbF9idGZfZHVtcF91bnNvcnRlZC5leHBlY3RlZFxcXCJcXG4rXFxuKy8qXFxuKyAqXFx0c3RydWN0IGhvbGV5IHtcXG4rICpcXHRcXHRpbnQgYztcXG4rICpcXHRcXHRcXHUwMDNjNjQtYml0IGhvbGVcXHUwMDNlXFxuKyAqXFx0XFx0aW50IHRhaWw7XFxuKyAqXFx0fTtcXG4rICpcXHRlbnVtIHsgRTAgPSAxIH07XFxuKyAqXFx0c3RydWN0IHMgeyBpbnQgZjsgfTtcXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgYnRmICpta19idGYodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnRmICpidGY7XFxuK1xcbitcXHRidGYgPSBidGZfX25ld19lbXB0eSgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoYnRmLCBcXFwibmV3X2VtcHR5XFxcIikpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0YnRmX19hZGRfaW50KGJ0ZiwgXFxcImludFxcXCIsIDQsIEJURl9JTlRfU0lHTkVEKTtcXG4rXFx0YnRmX19hZGRfaW50KGJ0ZiwgXFxcImxvbmcgaW50XFxcIiwgNCwgQlRGX0lOVF9TSUdORUQpO1xcbitcXG4rXFx0YnRmX19hZGRfc3RydWN0KGJ0ZiwgXFxcImhvbGV5XFxcIiwgMTYpO1xcbitcXHRidGZfX2FkZF9maWVsZChidGYsIFxcXCJjXFxcIiwgMSwgMCwgMCk7XFxuK1xcdGJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgXFxcInRhaWxcXFwiLCAxLCA5NiwgMCk7XFxuK1xcbitcXHRidGZfX2FkZF9lbnVtKGJ0ZiwgTlVMTCwgNCk7XFxuK1xcdGJ0Zl9fYWRkX2VudW1fdmFsdWUoYnRmLCBcXFwiRTBcXFwiLCAxKTtcXG4rXFxuK1xcdGJ0Zl9fYWRkX3N0cnVjdChidGYsIFxcXCJzXFxcIiwgNCk7XFxuK1xcdGJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgXFxcImZcXFwiLCAxLCAwLCAwKTtcXG4rXFxuK1xcdFZBTElEQVRFX1JBV19CVEYoXFxuK1xcdFxcdGJ0ZixcXG4rXFx0XFx0XFxcIlsxXSBJTlQgJ2ludCcgc2l6ZT00IGJpdHNfb2Zmc2V0PTAgbnJfYml0cz0zMiBlbmNvZGluZz1TSUdORURcXFwiLFxcbitcXHRcXHRcXFwiWzJdIElOVCAnbG9uZyBpbnQnIHNpemU9NCBiaXRzX29mZnNldD0wIG5yX2JpdHM9MzIgZW5jb2Rpbmc9U0lHTkVEXFxcIixcXG4rXFx0XFx0XFxcIlszXSBTVFJVQ1QgJ2hvbGV5JyBzaXplPTE2IHZsZW49MlxcXFxuXFxcIlxcbitcXHRcXHRcXFwiXFxcXHQnYycgdHlwZV9pZD0xIGJpdHNfb2Zmc2V0PTBcXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcXFx0J3RhaWwnIHR5cGVfaWQ9MSBiaXRzX29mZnNldD05NlxcXCIsXFxuK1xcdFxcdFxcXCJbNF0gRU5VTSAnKGFub24pJyBlbmNvZGluZz1VTlNJR05FRCBzaXplPTQgdmxlbj0xXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCJcXFxcdCdFMCcgdmFsPTFcXFwiLFxcbitcXHRcXHRcXFwiWzVdIFNUUlVDVCAncycgc2l6ZT00IHZsZW49MVxcXFxuXFxcIlxcbitcXHRcXHRcXFwiXFxcXHQnZicgdHlwZV9pZD0xIGJpdHNfb2Zmc2V0PTBcXFwiKTtcXG4rXFxuK1xcdHJldHVybiBidGY7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnRmX3RvX3RtcGZpbGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjaGFyICpwYXRoKVxcbit7XFxuK1xcdHNzaXplX3Qgd3JpdHRlbjtcXG4rXFx0Y29uc3Qgdm9pZCAqcmF3O1xcbitcXHRfX3UzMiBzejtcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0cmF3ID0gYnRmX19yYXdfZGF0YShidGYsIFxcdTAwMjZzeik7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihyYXcsIFxcXCJyYXdfZGF0YVxcXCIpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgXFxcIi90bXAvYnBmdG9vbF9idGZfZHVtcC5YWFhYWFhcXFwiKTtcXG4rXFx0ZmQgPSBta3N0ZW1wKHBhdGgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19GRChmZCwgXFxcIm1rc3RlbXBfYnRmXFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdHdyaXR0ZW4gPSB3cml0ZShmZCwgcmF3LCBzeik7XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVEod3JpdHRlbiwgc3osIFxcXCJ3cml0ZV9idGZcXFwiKSkge1xcbitcXHRcXHR1bmxpbmsocGF0aCk7XFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjaGFyICpkdW1wX2MoY29uc3QgY2hhciAqYnRmX3BhdGgsIGJvb2wgc29ydGVkKVxcbit7XFxuK1xcdGNoYXIgYXJnc1tNQVhfQlBGVE9PTF9DTURfTEVOXTtcXG4rXFx0Y2hhciAqYnVmO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0YnVmID0gbWFsbG9jKERVTVBfQlVGX1NaKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGJ1ZiwgXFxcImFsbG9jX2R1bXBcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRzbnByaW50ZihhcmdzLCBzaXplb2YoYXJncyksIFxcXCJidGYgZHVtcCBmaWxlICVzIGZvcm1hdCBjJXNcXFwiLFxcbitcXHRcXHQgYnRmX3BhdGgsIHNvcnRlZCA/IFxcXCJcXFwiIDogXFxcIiB1bnNvcnRlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZ2V0X2JwZnRvb2xfY29tbWFuZF9vdXRwdXQoYXJncywgYnVmLCBEVU1QX0JVRl9TWik7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImJ0Zl9kdW1wX2Zvcm1hdF9jXFxcIikpIHtcXG4rXFx0XFx0ZnJlZShidWYpO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGJ1ZjtcXG4rfVxcbitcXG4rc3RhdGljIGNoYXIgKnJlYWRfZXhwZWN0ZWQoY29uc3QgY2hhciAqcGF0aClcXG4re1xcbitcXHRjaGFyICpidWYgPSBOVUxMO1xcbitcXHRzaXplX3QgY2FwID0gMDtcXG4rXFx0RklMRSAqZjtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGYgPSBmb3BlbihwYXRoLCBcXFwiclxcXCIpO1xcbitcXHRpZiAoIWYpIHtcXG4rXFx0XFx0ZXJyID0gZXJybm87XFxuK1xcdFxcdFBSSU5UX0ZBSUwoXFxcImNhbid0IG9wZW4gZXhwZWN0ZWQgb3V0cHV0ICclcyc6IGVycm5vICVkXFxcXG5cXFwiLCBwYXRoLCBlcnIpO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0Lyogbm8gTlVMIGluIGEgZ2VuZXJhdGVkIGhlYWRlciwgc28gdGhpcyByZWFkcyB0byB0aGUgZW5kICovXFxuK1xcdGlmIChnZXRkZWxpbShcXHUwMDI2YnVmLCBcXHUwMDI2Y2FwLCAnXFxcXDAnLCBmKSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZXJyID0gZXJybm87XFxuK1xcdFxcdFBSSU5UX0ZBSUwoXFxcImNhbid0IHJlYWQgZXhwZWN0ZWQgb3V0cHV0ICclcyc6IGVycm5vICVkXFxcXG5cXFwiLCBwYXRoLCBlcnIpO1xcbitcXHRcXHRmcmVlKGJ1Zik7XFxuK1xcdFxcdGJ1ZiA9IE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGZjbG9zZShmKTtcXG4rXFx0cmV0dXJuIGJ1ZjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9kdW1wKGNvbnN0IGNoYXIgKmJ0Zl9wYXRoLCBib29sIHNvcnRlZClcXG4re1xcbitcXHRjb25zdCBjaGFyICpleHBfcGF0aDtcXG4rXFx0Y2hhciAqZHVtcCwgKmV4cDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGV4cF9wYXRoID0gc29ydGVkID8gRVhQRUNURURfU09SVEVEIDogRVhQRUNURURfVU5TT1JURUQ7XFxuK1xcbitcXHRkdW1wID0gZHVtcF9jKGJ0Zl9wYXRoLCBzb3J0ZWQpO1xcbitcXHRpZiAoIWR1bXApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGV4cCA9IHJlYWRfZXhwZWN0ZWQoZXhwX3BhdGgpO1xcbitcXHRpZiAoIWV4cClcXG4rXFx0XFx0Z290byBvdXRfZHVtcDtcXG4rXFxuK1xcdGVyciA9IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChkdW1wLCBleHApO1xcbitcXHRBU1NFUlRfT0soZXJyLCBzb3J0ZWQgPyBcXFwiY21wX3NvcnRlZFxcXCIgOiBcXFwiY21wX3Vuc29ydGVkXFxcIik7XFxuK1xcbitcXHRmcmVlKGV4cCk7XFxuK291dF9kdW1wOlxcbitcXHRmcmVlKGR1bXApO1xcbit9XFxuK1xcbit2b2lkIHRlc3RfYnBmdG9vbF9idGZfZHVtcCh2b2lkKVxcbit7XFxuK1xcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuK1xcdHN0cnVjdCBidGYgKmJ0ZjtcXG4rXFxuK1xcdGJ0ZiA9IG1rX2J0ZigpO1xcbitcXHRpZiAoIWJ0ZilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKGJ0Zl90b190bXBmaWxlKGJ0ZiwgcGF0aCkpXFxuK1xcdFxcdGdvdG8gb3V0X2J0ZjtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJjX3NvcnRlZFxcXCIpKVxcbitcXHRcXHR0ZXN0X2R1bXAocGF0aCwgdHJ1ZSk7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJjX3Vuc29ydGVkXFxcIikpXFxuK1xcdFxcdHRlc3RfZHVtcChwYXRoLCBmYWxzZSk7XFxuK1xcbitcXHR1bmxpbmsocGF0aCk7XFxuK291dF9idGY6XFxuK1xcdGJ0Zl9fZnJlZShidGYpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9kdW1wLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfZHVtcC5jXFxuaW5kZXggOWYxYjUwZTA3YTI5OC4uZmUwNGE5NTVkNDZjYyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfZHVtcC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX2R1bXAuY1xcbkBAIC0xLDggKzEsNyBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYnBmL2J0Zi5oXFx1MDAzZVxcbi1cXG4tc3RhdGljIGludCBkdXJhdGlvbiA9IDA7XFxuKyNpbmNsdWRlIFxcXCJ0ZXN0aW5nX2hlbHBlcnMuaFxcXCJcXG4gXFxuIHZvaWQgYnRmX2R1bXBfcHJpbnRmKHZvaWQgKmN0eCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpXFxuIHtcXG5AQCAtNDUsMTIgKzQ0LDc1IEBAIHN0YXRpYyBpbnQgYnRmX2R1bXBfYWxsX3R5cGVzKGNvbnN0IHN0cnVjdCBidGYgKmJ0Ziwgdm9pZCAqY3R4KVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbisvKlxcbisgKiBFeHBlY3RlZCBvdXRwdXQgaXMgZW1iZWRkZWQgaW4gdGhlIHRlc3QgY2FzZSBzb3VyY2UsIGJldHdlZW5cXG4rICogU1RBUlQtRVhQRUNURUQtT1VUUFVUIGFuZCBFTkQtRVhQRUNURUQtT1VUUFVUIG1hcmtlcnMuIEEgcmVnaW9uIGlzIGVpdGhlclxcbisgKiBwbGFpbiBDLCB3aGVyZSBhIGRlY2xhcmF0aW9uIGRvdWJsZXMgYXMgaXRzIG93biBleHBlY3RhdGlvbiwgb3IgQyB3cmFwcGVkIGluXFxuKyAqIGEgYmxvY2sgY29tbWVudCwgd2hlcmUgdGhlIHJlbmRlcmVkIGZvcm0gZGlmZmVycyBmcm9tIHRoZSBzb3VyY2UuIEFsbFxcbisgKiByZWdpb25zIG9mIGEgZmlsZSBjb25jYXRlbmF0ZSBpbnRvIG9uZSBleHBlY3RhdGlvbiwgY29tcGFyZWQgYWdhaW5zdCBvbmVcXG4rICogd2hvbGUtZmlsZSBkdW1wLlxcbisgKlxcbisgKiBSZXR1cm5zIGEgbWFsbG9jJ2QgYnVmZmVyIGZvciB0aGUgY2FsbGVyIHRvIGZyZWUsIG9yIE5VTEwgb24gZmFpbHVyZS5cXG4rICovXFxuK3N0YXRpYyBjaGFyICpyZWFkX2V4cGVjdGVkX291dHB1dChjb25zdCBjaGFyICpwYXRoKVxcbit7XFxuK1xcdHNpemVfdCBvdXRfc3ogPSAwLCBsaW5lX2NhcCA9IDA7XFxuK1xcdGNoYXIgKm91dCA9IE5VTEwsICpsaW5lID0gTlVMTDtcXG4rXFx0Ym9vbCBpbl9yZWdpb24gPSBmYWxzZTtcXG4rXFx0RklMRSAqZiwgKm91dF9maWxlO1xcbitcXG4rXFx0ZiA9IGZvcGVuKHBhdGgsIFxcXCJyXFxcIik7XFxuK1xcdGlmICghZilcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRvdXRfZmlsZSA9IG9wZW5fbWVtc3RyZWFtKFxcdTAwMjZvdXQsIFxcdTAwMjZvdXRfc3opO1xcbitcXHRpZiAoIW91dF9maWxlKSB7XFxuK1xcdFxcdGZjbG9zZShmKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdHdoaWxlIChnZXRsaW5lKFxcdTAwMjZsaW5lLCBcXHUwMDI2bGluZV9jYXAsIGYpIFxcdTAwM2UgMCkge1xcbitcXHRcXHRjb25zdCBjaGFyICpwO1xcbitcXG4rXFx0XFx0aWYgKHN0cnN0cihsaW5lLCBcXFwiU1RBUlQtRVhQRUNURUQtT1VUUFVUXFxcIikpIHtcXG4rXFx0XFx0XFx0aW5fcmVnaW9uID0gdHJ1ZTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKHN0cnN0cihsaW5lLCBcXFwiRU5ELUVYUEVDVEVELU9VVFBVVFxcXCIpKVxcbitcXHRcXHRcXHRpbl9yZWdpb24gPSBmYWxzZTtcXG4rXFx0XFx0aWYgKCFpbl9yZWdpb24pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0cCA9IGxpbmUgKyBzdHJzcG4obGluZSwgXFxcIiBcXFxcdFxcXCIpO1xcbitcXG4rXFx0XFx0Lyogb3BlbmluZyBvciBjbG9zaW5nIGxpbmUgb2YgYSBjb21tZW50ZWQgb3V0IHJlZ2lvbiAqL1xcbitcXHRcXHRpZiAoIXN0cm5jbXAocCwgXFxcIi8qXFxcIiwgMikgfHwgIXN0cm5jbXAocCwgXFxcIiovXFxcIiwgMikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogT25seSBhICcqJyBkaXJlY3RseSBhZnRlciB0aGUgaW5kZW50YXRpb24gaXMgYSBjb21tZW50XFxuK1xcdFxcdCAqIHByZWZpeC4gV2l0aG91dCBvbmUgdGhlIGxpbmUgaXMgdGFrZW4gYXMgaXQgaXMsIGxlYWRpbmdcXG4rXFx0XFx0ICogd2hpdGVzcGFjZSBpbmNsdWRlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHAgPSAqcCA9PSAnKicgPyBwICsgMSA6IGxpbmU7XFxuK1xcbitcXHRcXHRmcHV0cyhwLCBvdXRfZmlsZSk7XFxuK1xcdH1cXG4rXFxuK1xcdGZyZWUobGluZSk7XFxuK1xcdGZjbG9zZShmKTtcXG4rXFx0ZmNsb3NlKG91dF9maWxlKTtcXG4rXFx0cmV0dXJuIG91dDtcXG4rfVxcbitcXG4gc3RhdGljIGludCB0ZXN0X2J0Zl9kdW1wX2Nhc2UoaW50IG4sIHN0cnVjdCBidGZfZHVtcF90ZXN0X2Nhc2UgKnQpXFxuIHtcXG4tXFx0Y2hhciB0ZXN0X2ZpbGVbMjU2XSwgb3V0X2ZpbGVbMjU2XSwgZGlmZl9jbWRbMTAyNF07XFxuK1xcdGNoYXIgKmR1bXAgPSBOVUxMLCAqZXhwZWN0ZWQgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgYnRmICpidGYgPSBOVUxMO1xcbi1cXHRpbnQgZXJyID0gMCwgZmQgPSAtMTtcXG4tXFx0RklMRSAqZiA9IE5VTEw7XFxuK1xcdGNoYXIgdGVzdF9maWxlWzI1Nl07XFxuK1xcdHNpemVfdCBkdW1wX3N6ID0gMDtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcdEZJTEUgKmY7XFxuIFxcbiBcXHRzbnByaW50Zih0ZXN0X2ZpbGUsIHNpemVvZih0ZXN0X2ZpbGUpLCBcXFwiJXMuYnBmLm9cXFwiLCB0LVxcdTAwM2VmaWxlKTtcXG4gXFxuQEAgLTY5LDI5ICsxMzEsMjEgQEAgc3RhdGljIGludCB0ZXN0X2J0Zl9kdW1wX2Nhc2UoaW50IG4sIHN0cnVjdCBidGZfZHVtcF90ZXN0X2Nhc2UgKnQpXFxuIFxcdGlmICghdC1cXHUwMDNla25vd25fcHRyX3N6KSB7XFxuIFxcdFxcdGJ0Zl9fc2V0X3BvaW50ZXJfc2l6ZShidGYsIDgpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRDSEVDSyhidGZfX3BvaW50ZXJfc2l6ZShidGYpICE9IDgsIFxcXCJwdHJfc3pcXFwiLCBcXFwiZXhwICVkLCBnb3QgJXp1XFxcXG5cXFwiLFxcbi1cXHRcXHQgICAgICA4LCBidGZfX3BvaW50ZXJfc2l6ZShidGYpKTtcXG4tXFx0fVxcbitcXHRcXHRzaXplX3QgcHRyX3N6ID0gYnRmX19wb2ludGVyX3NpemUoYnRmKTtcXG4gXFxuLVxcdHNucHJpbnRmKG91dF9maWxlLCBzaXplb2Yob3V0X2ZpbGUpLCBcXFwiL3RtcC8lcy5vdXRwdXQuWFhYWFhYXFxcIiwgdC1cXHUwMDNlZmlsZSk7XFxuLVxcdGZkID0gbWtzdGVtcChvdXRfZmlsZSk7XFxuLVxcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcXFwiY3JlYXRlX3RtcFxcXCIpKSB7XFxuLVxcdFxcdGVyciA9IGZkO1xcbi1cXHRcXHRnb3RvIGRvbmU7XFxuK1xcdFxcdEFTU0VSVF9FUShwdHJfc3osIChzaXplX3QpOCwgXFxcInB0cl9zelxcXCIpO1xcbiBcXHR9XFxuLVxcdGYgPSBmZG9wZW4oZmQsIFxcXCJ3XFxcIik7XFxuLVxcdGlmIChDSEVDSyhmID09IE5VTEwsIFxcXCJvcGVuX3RtcFxcXCIsICBcXFwiZmFpbGVkIHRvIG9wZW4gZmlsZTogJXMoJWQpXFxcXG5cXFwiLFxcbi1cXHRcXHQgIHN0cmVycm9yKGVycm5vKSwgZXJybm8pKSB7XFxuLVxcdFxcdGNsb3NlKGZkKTtcXG4rXFxuK1xcdGYgPSBvcGVuX21lbXN0cmVhbShcXHUwMDI2ZHVtcCwgXFx1MDAyNmR1bXBfc3opO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoZiwgXFxcIm9wZW5fbWVtc3RyZWFtXFxcIikpIHtcXG4rXFx0XFx0ZXJyID0gLWVycm5vO1xcbiBcXHRcXHRnb3RvIGRvbmU7XFxuIFxcdH1cXG4gXFxuIFxcdGVyciA9IGJ0Zl9kdW1wX2FsbF90eXBlcyhidGYsIGYpO1xcbiBcXHRmY2xvc2UoZik7XFxuLVxcdGNsb3NlKGZkKTtcXG4tXFx0aWYgKENIRUNLKGVyciwgXFxcImJ0Zl9kdW1wXFxcIiwgXFxcImZhaWx1cmUgZHVyaW5nIEMgZHVtcGluZzogJWRcXFxcblxcXCIsIGVycikpIHtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYnRmX2R1bXBcXFwiKSlcXG4gXFx0XFx0Z290byBkb25lO1xcbi1cXHR9XFxuIFxcbiBcXHRzbnByaW50Zih0ZXN0X2ZpbGUsIHNpemVvZih0ZXN0X2ZpbGUpLCBcXFwicHJvZ3MvJXMuY1xcXCIsIHQtXFx1MDAzZWZpbGUpO1xcbiBcXHRpZiAoYWNjZXNzKHRlc3RfZmlsZSwgUl9PSykgPT0gLTEpXFxuQEAgLTEwMCwyOCArMTU0LDIzIEBAIHN0YXRpYyBpbnQgdGVzdF9idGZfZHVtcF9jYXNlKGludCBuLCBzdHJ1Y3QgYnRmX2R1bXBfdGVzdF9jYXNlICp0KVxcbiBcXHRcXHQgKiB3aXRob3V0IHByZXNlcnZpbmcgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRzbnByaW50Zih0ZXN0X2ZpbGUsIHNpemVvZih0ZXN0X2ZpbGUpLCBcXFwiJXMuY1xcXCIsIHQtXFx1MDAzZWZpbGUpO1xcbi1cXHQvKlxcbi1cXHQgKiBEaWZmIHRlc3Qgb3V0cHV0IGFuZCBleHBlY3RlZCB0ZXN0IG91dHB1dCwgY29udGFpbmVkIGJldHdlZW5cXG4tXFx0ICogU1RBUlQtRVhQRUNURUQtT1VUUFVUIGFuZCBFTkQtRVhQRUNURUQtT1VUUFVUIGxpbmVzIGluIHRlc3QgY2FzZS5cXG4tXFx0ICogRm9yIGV4cGVjdGVkIG91dHB1dCBsaW5lcywgZXZlcnl0aGluZyBiZWZvcmUgJyonIGlzIHN0cmlwcGVkIG91dC5cXG4tXFx0ICogQWxzbyBsaW5lcyBjb250YWluaW5nIGNvbW1lbnQgc3RhcnQgYW5kIGNvbW1lbnQgZW5kIG1hcmtlcnMgYXJlXFxuLVxcdCAqIGlnbm9yZWQuIFxcbi1cXHQgKi9cXG4tXFx0c25wcmludGYoZGlmZl9jbWQsIHNpemVvZihkaWZmX2NtZCksXFxuLVxcdFxcdCBcXFwiYXdrICcvU1RBUlQtRVhQRUNURUQtT1VUUFVUL3tvdXQ9MTtuZXh0fSBcXFwiXFxuLVxcdFxcdCBcXFwiL0VORC1FWFBFQ1RFRC1PVVRQVVQve291dD0wfSBcXFwiXFxuLVxcdFxcdCBcXFwiL1xcXFxcXFxcL1xcXFxcXFxcKnxcXFxcXFxcXCpcXFxcXFxcXC8ve25leHR9IFxcXCIgLyogaWdub3JlIGNvbW1lbnQgc3RhcnQvZW5kIGxpbmVzICovXFxuLVxcdFxcdCBcXFwib3V0IHtzdWIoL15bIFxcXFxcXFxcdF0qXFxcXFxcXFwqLywgXFxcXFxcXCJcXFxcXFxcIik7IHByaW50fScgJyVzJyB8IGRpZmYgLXUgLSAnJXMnXFxcIixcXG4tXFx0XFx0IHRlc3RfZmlsZSwgb3V0X2ZpbGUpO1xcbi1cXHRlcnIgPSBzeXN0ZW0oZGlmZl9jbWQpO1xcbi1cXHRpZiAoQ0hFQ0soZXJyLCBcXFwiZGlmZlxcXCIsXFxuLVxcdFxcdCAgXFxcImRpZmZlcmluZyB0ZXN0IG91dHB1dCwgb3V0cHV0PSVzLCBlcnI9JWQsIGRpZmYgY21kOlxcXFxuJXNcXFxcblxcXCIsXFxuLVxcdFxcdCAgb3V0X2ZpbGUsIGVyciwgZGlmZl9jbWQpKVxcbitcXG4rXFx0ZXhwZWN0ZWQgPSByZWFkX2V4cGVjdGVkX291dHB1dCh0ZXN0X2ZpbGUpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoZXhwZWN0ZWQsIFxcXCJyZWFkX2V4cGVjdGVkX291dHB1dFxcXCIpKSB7XFxuK1xcdFxcdGVyciA9IC1lcnJubztcXG4gXFx0XFx0Z290byBkb25lO1xcbitcXHR9XFxuIFxcbi1cXHRyZW1vdmUob3V0X2ZpbGUpO1xcbitcXHQvKlxcbitcXHQgKiBUaGUgbWlzbWF0Y2ggaGFzIGFscmVhZHkgYmVlbiByZXBvcnRlZCwgc28gdGhpcyBvbmx5IGhhcyB0b1xcbitcXHQgKiByZWdpc3RlciB0aGUgZmFpbHVyZS4gQVNTRVJUX09LKCkgd291bGQgYXBwZW5kIGEgc3RhbGUgZXJybm8gdG8gaXQuXFxuK1xcdCAqL1xcbitcXHRlcnIgPSBjb21wYXJlX3RleHRfdG9fZXhwZWN0ZWQoZHVtcCwgZXhwZWN0ZWQpO1xcbitcXHRBU1NFUlRfRVEoZXJyLCAwLCBcXFwiY29tcGFyZV90ZXh0X3RvX2V4cGVjdGVkXFxcIik7XFxuIFxcbiBkb25lOlxcbitcXHRmcmVlKGV4cGVjdGVkKTtcXG4rXFx0ZnJlZShkdW1wKTtcXG4gXFx0YnRmX19mcmVlKGJ0Zik7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ190ZXN0c19mcmFtZXdvcmsuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Byb2dfdGVzdHNfZnJhbWV3b3JrLmNcXG5pbmRleCA3NjA3Y2ZjMjQwOGMyLi5kMTExZmUxMDU0NDc2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Byb2dfdGVzdHNfZnJhbWV3b3JrLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wcm9nX3Rlc3RzX2ZyYW1ld29yay5jXFxuQEAgLTE3OSwzICsxNzksMjYgQEAgdm9pZCB0ZXN0X3Byb2dfdGVzdHNfZnJhbWV3b3JrX2V4cGVjdGVkX21zZ3Modm9pZClcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIH1cXG4rXFxuK3ZvaWQgdGVzdF9wcm9nX3Rlc3RzX2ZyYW1ld29ya19jb21wYXJlX3RleHQodm9pZClcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImNvbXBhcmVfdGV4dF9tYXRjaFxcXCIpKSB7XFxuK1xcdFxcdGVyciA9IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChcXFwic2FtZVxcXFxuXFxcIiwgXFxcInNhbWVcXFxcblxcXCIpO1xcbitcXHRcXHRBU1NFUlRfRVEoZXJyLCAwLCBcXFwibWF0Y2hfcmNcXFwiKTtcXG4rXFx0XFx0dGVzdF9fZW5kX3N1YnRlc3QoKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImNvbXBhcmVfdGV4dF9taXNtYXRjaFxcXCIpKSB7XFxuK1xcdFxcdGVyciA9IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChcXFwibGluZSB0d29cXFxcblxcXCIsIFxcXCJsaW5lIG9uZVxcXFxuXFxcIik7XFxuK1xcdFxcdGZmbHVzaChzdGRvdXQpO1xcbitcXG4rXFx0XFx0QVNTRVJUX0VRKGVyciwgLTEsIFxcXCJtaXNtYXRjaF9yY1xcXCIpO1xcbitcXHRcXHRBU1NFUlRfSEFTX1NVQlNUUihlbnYuc3VidGVzdF9zdGF0ZS1cXHUwMDNlbG9nX2J1ZiwgXFxcIi1saW5lIG9uZVxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgXFxcImRpZmZfaGFzX2V4cGVjdGVkXFxcIik7XFxuK1xcdFxcdEFTU0VSVF9IQVNfU1VCU1RSKGVudi5zdWJ0ZXN0X3N0YXRlLVxcdTAwM2Vsb2dfYnVmLCBcXFwiK2xpbmUgdHdvXFxcIixcXG4rXFx0XFx0XFx0XFx0ICBcXFwiZGlmZl9oYXNfYWN0dWFsXFxcIik7XFxuK1xcdFxcdHRlc3RfX2VuZF9zdWJ0ZXN0KCk7XFxuK1xcdH1cXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmNcXG5pbmRleCBjOTcwZTc3OTNkZmNiLi4zZjAzNzk0OWU5Nzg5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuY1xcbkBAIC01MzQsMyArNTM0LDQ2IEBAIGludCBzdGFja19tcHJvdGVjdCh2b2lkKVxcbiBcXHRcXHQgICAgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSB8IFBST1RfRVhFQyk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4rXFxuK2ludCBjb21wYXJlX3RleHRfdG9fZXhwZWN0ZWQoY29uc3QgY2hhciAqYWN0dWFsLCBjb25zdCBjaGFyICpleHBlY3RlZClcXG4re1xcbitcXHRjaGFyIGV4cF9wYXRoW10gPSBcXFwiL3RtcC9zZWxmdGVzdF9leHBlY3RlZC5YWFhYWFhcXFwiO1xcbitcXHRjaGFyIGFjdF9wYXRoW10gPSBcXFwiL3RtcC9zZWxmdGVzdF9hY3R1YWwuWFhYWFhYXFxcIjtcXG4rXFx0Y2hhciBidWZbNTEyXSwgY21kWzEyOF07XFxuK1xcdGludCBleHBfZmQsIGFjdF9mZDtcXG4rXFx0RklMRSAqcDtcXG4rXFxuK1xcdGlmICghc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGV4cF9mZCA9IG1rc3RlbXAoZXhwX3BhdGgpO1xcbitcXHRhY3RfZmQgPSBta3N0ZW1wKGFjdF9wYXRoKTtcXG4rXFx0aWYgKGV4cF9mZCBcXHUwMDNjIDAgfHwgYWN0X2ZkIFxcdTAwM2MgMCkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZG91dCwgXFxcIm91dHB1dCBkaWZmZXJzLCBubyB0ZW1wIGZpbGUgZm9yIGEgZGlmZlxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRkcHJpbnRmKGV4cF9mZCwgXFxcIiVzXFxcIiwgZXhwZWN0ZWQpO1xcbitcXHRkcHJpbnRmKGFjdF9mZCwgXFxcIiVzXFxcIiwgYWN0dWFsKTtcXG4rXFxuK1xcdHNucHJpbnRmKGNtZCwgc2l6ZW9mKGNtZCksIFxcXCJkaWZmIC11ICclcycgJyVzJ1xcXCIsIGV4cF9wYXRoLCBhY3RfcGF0aCk7XFxuK1xcdHAgPSBwb3BlbihjbWQsIFxcXCJyXFxcIik7XFxuK1xcdGlmICghcCkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZG91dCwgXFxcIm91dHB1dCBkaWZmZXJzLCAnJXMnIGRpZCBub3QgcnVuXFxcXG5cXFwiLCBjbWQpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXHR3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgcCkpXFxuK1xcdFxcdGZwdXRzKGJ1Ziwgc3Rkb3V0KTtcXG4rXFx0cGNsb3NlKHApO1xcbitcXG4rb3V0OlxcbitcXHRpZiAoZXhwX2ZkIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0Y2xvc2UoZXhwX2ZkKTtcXG4rXFx0XFx0dW5saW5rKGV4cF9wYXRoKTtcXG4rXFx0fVxcbitcXHRpZiAoYWN0X2ZkIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0Y2xvc2UoYWN0X2ZkKTtcXG4rXFx0XFx0dW5saW5rKGFjdF9wYXRoKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gLTE7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oXFxuaW5kZXggMmVkYzZmYjdmYzUyMS4uMWM1OGEyZjA4YjY0NSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmhcXG5AQCAtNjEsNCArNjEsNyBAQCBpbnQgdGVzdGluZ19wcm9nX2ZsYWdzKHZvaWQpO1xcbiBib29sIGlzX2ppdF9lbmFibGVkKHZvaWQpO1xcbiBpbnQgc3RhY2tfbXByb3RlY3Qodm9pZCk7XFxuIFxcbisvKiBSdW5zIGRpZmYoMSkgb24gbWlzbWF0Y2ggKi9cXG4raW50IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChjb25zdCBjaGFyICphY3R1YWwsIGNvbnN0IGNoYXIgKmV4cGVjdGVkKTtcXG4rXFxuICNlbmRpZiAvKiBfX1RFU1RJTkdfSEVMUEVSU19IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQyOjU2LjkxOTE3NDczWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MTI3MDAwMTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0b29saW5nIChicGZ0b29sKSBhbmQgQlBGIHNlbGZ0ZXN0cyB1bmRlciB0b29scy8sIHdpdGggbm8gY2hhbmdlcyB0byBrZXJuZWwgY29kZSBvciBydW50aW1lIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTRjMTI5NTQ2Zjk5MDQwODQ2ZDhkOTFjOTRhODhjMWU4MzFhYTU1ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDI4IDIyOjQyOjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmMgYi90b29scy9icGYvYnBmdG9vbC9idGYuY1xuaW5kZXggYzk1ODkwMjZkYThkNi4uYmNhMGEzOTgyZjA5YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2J0Zi5jXG4rKysgYi90b29scy9icGYvYnBmdG9vbC9idGYuY1xuQEAgLTgwNSw5ICs4MDUsMTMgQEAgc3RhdGljIGludCBkdW1wX2J0Zl9jKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiBcbiBcdFx0aWYgKHNvcnRfZHVtcClcbiBcdFx0XHRkYXR1bXMgPSBzb3J0X2J0Zl9jKGJ0Zik7XG4tXHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjIGNudDsgaSsrKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSsrKSB7XG4gXHRcdFx0aW50IGlkeCA9IGRhdHVtcyA/IGRhdHVtc1tpXS5pbmRleCA6IGk7XG4gXG4rXHRcdFx0LyogdHlwZSBJRCAwIGlzIHZvaWQsIHNraXAgaXQgKi9cbitcdFx0XHRpZiAoaWR4ID09IDApXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0XHRlcnIgPSBidGZfZHVtcF9fZHVtcF90eXBlKGQsIGlkeCk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdGdvdG8gZG9uZTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbmluZGV4IDVmMWEzYmZjMDU2OWYuLmQ5OTU4MTI1N2U1NGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuQEAgLTExOSw3ICsxMTksOSBAQCBURVNUX0dFTl9QUk9HUyArPSB0ZXN0X3Byb2dzLWNwdXY0XG4gVEVTVF9JTlNUX1NVQkRJUlMgKz0gY3B1djRcbiBlbmRpZlxuIFxuLVRFU1RfRklMRVMgPSB4c2tfcHJlcmVxcy5zaCAkKHdpbGRjYXJkIHByb2dzL2J0Zl9kdW1wX3Rlc3RfY2FzZV8qLmMpXG4rVEVTVF9GSUxFUyA9IHhza19wcmVyZXFzLnNoICQod2lsZGNhcmQgcHJvZ3MvYnRmX2R1bXBfdGVzdF9jYXNlXyouYylcdFxcXG4rXHQgICAgIGJwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkXHRcdFx0XHRcdFxcXG4rXHQgICAgIGJwZnRvb2xfYnRmX2R1bXBfdW5zb3J0ZWQuZXhwZWN0ZWRcbiBcbiAjIE9yZGVyIGNvcnJlc3BvbmQgdG8gJ21ha2UgcnVuX3Rlc3RzJyBvcmRlclxuIFRFU1RfUFJPR1MgOj0gdGVzdF9rbW9kLnNoIFxcXG5AQCAtODg3LDcgKzg4OSw5IEBAIFRSVU5ORVJfRVhUUkFfRklMRVMgOj0gJChPVVRQVVQpL3VyYW5kb21fcmVhZFx0XHRcdFx0XFxcbiBcdFx0ICAgICAgIGltYV9zZXR1cC5zaCBcdFx0XHRcdFx0XFxcbiBcdFx0ICAgICAgICQoVkVSSUZZX1NJR19TRVRVUClcdFx0XHRcdFxcXG4gXHRcdCAgICAgICAkKHdpbGRjYXJkIHByb2dzL2J0Zl9kdW1wX3Rlc3RfY2FzZV8qLmMpXHRcdFxcXG4tXHRcdCAgICAgICAkKHdpbGRjYXJkIHByb2dzLyouYnBmLm8pXG4rXHRcdCAgICAgICAkKHdpbGRjYXJkIHByb2dzLyouYnBmLm8pXHRcdFx0XFxcbitcdFx0ICAgICAgIGJwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkXHRcdFx0XFxcbitcdFx0ICAgICAgIGJwZnRvb2xfYnRmX2R1bXBfdW5zb3J0ZWQuZXhwZWN0ZWRcbiBUUlVOTkVSX0JQRl9CVUlMRF9SVUxFIDo9IENMQU5HX0JQRl9CVUlMRF9SVUxFXG4gVFJVTk5FUl9CUEZfQ0ZMQUdTIDo9ICQoQlBGX0NGTEFHUykgJChDTEFOR19DRkxBR1MpIC1ERU5BQkxFX0FUT01JQ1NfVEVTVFNcbiAkKGV2YWwgJChjYWxsIERFRklORV9URVNUX1JVTk5FUix0ZXN0X3Byb2dzKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9idGZfZHVtcF9zb3J0ZWQuZXhwZWN0ZWQgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9idGZfZHVtcF9zb3J0ZWQuZXhwZWN0ZWRcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41NDcwYjJiNDMyMjkxXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9idGZfZHVtcF9zb3J0ZWQuZXhwZWN0ZWRcbkBAIC0wLDAgKzEsNDggQEBcbisjaWZuZGVmIF9fVk1MSU5VWF9IX19cbisjZGVmaW5lIF9fVk1MSU5VWF9IX19cbitcbisjaWZuZGVmIEJQRl9OT19QUkVTRVJWRV9BQ0NFU1NfSU5ERVhcbisjcHJhZ21hIGNsYW5nIGF0dHJpYnV0ZSBwdXNoIChfX2F0dHJpYnV0ZV9fKChwcmVzZXJ2ZV9hY2Nlc3NfaW5kZXgpKSwgYXBwbHlfdG8gPSByZWNvcmQpXG4rI2VuZGlmXG4rXG4rI2lmbmRlZiBfX2tzeW1cbisjZGVmaW5lIF9fa3N5bSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKFwiLmtzeW1zXCIpKSlcbisjZW5kaWZcbitcbisjaWZuZGVmIF9fd2Vha1xuKyNkZWZpbmUgX193ZWFrIF9fYXR0cmlidXRlX18oKHdlYWspKVxuKyNlbmRpZlxuK1xuKyNpZm5kZWYgX19icGZfZmFzdGNhbGxcbisjaWYgX19oYXNfYXR0cmlidXRlKGJwZl9mYXN0Y2FsbClcbisjZGVmaW5lIF9fYnBmX2Zhc3RjYWxsIF9fYXR0cmlidXRlX18oKGJwZl9mYXN0Y2FsbCkpXG4rI2Vsc2VcbisjZGVmaW5lIF9fYnBmX2Zhc3RjYWxsXG4rI2VuZGlmXG4rI2VuZGlmXG4rXG4rZW51bSB7XG4rXHRFMCA9IDEsXG4rfTtcbitcbitzdHJ1Y3QgaG9sZXkge1xuK1x0aW50IGM7XG4rXHRsb25nOiAzMjtcbitcdGxvbmc6IDMyO1xuK1x0aW50IHRhaWw7XG4rfTtcbitcbitzdHJ1Y3QgcyB7XG4rXHRpbnQgZjtcbit9O1xuK1xuK1xuKy8qIEJQRiBrZnVuY3MgKi9cbisjaWZuZGVmIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTXG4rI2VuZGlmXG4rXG4rI2lmbmRlZiBCUEZfTk9fUFJFU0VSVkVfQUNDRVNTX0lOREVYXG4rI3ByYWdtYSBjbGFuZyBhdHRyaWJ1dGUgcG9wXG4rI2VuZGlmXG4rXG4rI2VuZGlmIC8qIF9fVk1MSU5VWF9IX18gKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9idGZfZHVtcF91bnNvcnRlZC5leHBlY3RlZCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2J0Zl9kdW1wX3Vuc29ydGVkLmV4cGVjdGVkXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDMxMGFkYzJlZDUxNFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfYnRmX2R1bXBfdW5zb3J0ZWQuZXhwZWN0ZWRcbkBAIC0wLDAgKzEsNDggQEBcbisjaWZuZGVmIF9fVk1MSU5VWF9IX19cbisjZGVmaW5lIF9fVk1MSU5VWF9IX19cbitcbisjaWZuZGVmIEJQRl9OT19QUkVTRVJWRV9BQ0NFU1NfSU5ERVhcbisjcHJhZ21hIGNsYW5nIGF0dHJpYnV0ZSBwdXNoIChfX2F0dHJpYnV0ZV9fKChwcmVzZXJ2ZV9hY2Nlc3NfaW5kZXgpKSwgYXBwbHlfdG8gPSByZWNvcmQpXG4rI2VuZGlmXG4rXG4rI2lmbmRlZiBfX2tzeW1cbisjZGVmaW5lIF9fa3N5bSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKFwiLmtzeW1zXCIpKSlcbisjZW5kaWZcbitcbisjaWZuZGVmIF9fd2Vha1xuKyNkZWZpbmUgX193ZWFrIF9fYXR0cmlidXRlX18oKHdlYWspKVxuKyNlbmRpZlxuK1xuKyNpZm5kZWYgX19icGZfZmFzdGNhbGxcbisjaWYgX19oYXNfYXR0cmlidXRlKGJwZl9mYXN0Y2FsbClcbisjZGVmaW5lIF9fYnBmX2Zhc3RjYWxsIF9fYXR0cmlidXRlX18oKGJwZl9mYXN0Y2FsbCkpXG4rI2Vsc2VcbisjZGVmaW5lIF9fYnBmX2Zhc3RjYWxsXG4rI2VuZGlmXG4rI2VuZGlmXG4rXG4rc3RydWN0IGhvbGV5IHtcbitcdGludCBjO1xuK1x0bG9uZzogMzI7XG4rXHRsb25nOiAzMjtcbitcdGludCB0YWlsO1xuK307XG4rXG4rZW51bSB7XG4rXHRFMCA9IDEsXG4rfTtcbitcbitzdHJ1Y3QgcyB7XG4rXHRpbnQgZjtcbit9O1xuK1xuK1xuKy8qIEJQRiBrZnVuY3MgKi9cbisjaWZuZGVmIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTXG4rI2VuZGlmXG4rXG4rI2lmbmRlZiBCUEZfTk9fUFJFU0VSVkVfQUNDRVNTX0lOREVYXG4rI3ByYWdtYSBjbGFuZyBhdHRyaWJ1dGUgcG9wXG4rI2VuZGlmXG4rXG4rI2VuZGlmIC8qIF9fVk1MSU5VWF9IX18gKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9oZWxwZXJzLmNcbmluZGV4IDBhMmE0ZjBhMjc5NGIuLmM0OWZkZDkwZWIwMzMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9oZWxwZXJzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuY1xuQEAgLTUzLDYgKzUzLDcgQEAgc3RhdGljIGludCBydW5fY29tbWFuZChjaGFyICphcmdzLCBjaGFyICpvdXRwdXRfYnVmLCBzaXplX3Qgb3V0cHV0X21heF9sZW4pXG4gXHRzdGF0aWMgY2hhciBicGZ0b29sX3BhdGhbUEFUSF9NQVhdID0ge307XG4gXHRib29sIHN1cHByZXNzX291dHB1dCA9ICEob3V0cHV0X2J1ZiBcdTAwMjZcdTAwMjYgb3V0cHV0X21heF9sZW4pO1xuIFx0Y2hhciBjb21tYW5kW0JQRlRPT0xfRlVMTF9DTURfTUFYX0xFTl07XG4rXHRzaXplX3QgbjtcbiBcdEZJTEUgKmY7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTY4LDggKzY5LDEwIEBAIHN0YXRpYyBpbnQgcnVuX2NvbW1hbmQoY2hhciAqYXJncywgY2hhciAqb3V0cHV0X2J1Ziwgc2l6ZV90IG91dHB1dF9tYXhfbGVuKVxuIFx0aWYgKCFmKVxuIFx0XHRyZXR1cm4gMTtcbiBcbi1cdGlmICghc3VwcHJlc3Nfb3V0cHV0KVxuLVx0XHRmcmVhZChvdXRwdXRfYnVmLCAxLCBvdXRwdXRfbWF4X2xlbiwgZik7XG4rXHRpZiAoIXN1cHByZXNzX291dHB1dCkge1xuK1x0XHRuID0gZnJlYWQob3V0cHV0X2J1ZiwgMSwgb3V0cHV0X21heF9sZW4gLSAxLCBmKTtcbitcdFx0b3V0cHV0X2J1ZltuXSA9ICdcXDAnO1xuK1x0fVxuIFx0cmV0ID0gcGNsb3NlKGYpO1xuIFxuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kNWIyNTMwMmIwYzg5XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmNcbkBAIC0wLDAgKzEsMTc4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGZ0b29sX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcImJ0Zl9oZWxwZXJzLmhcIlxuKyNpbmNsdWRlIFwidGVzdGluZ19oZWxwZXJzLmhcIlxuK1xuKyNkZWZpbmUgRFVNUF9CVUZfU1pcdFx0KDE2ICogMTAyNClcbitcbisjZGVmaW5lIEVYUEVDVEVEX1NPUlRFRFx0XHRcImJwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkXCJcbisjZGVmaW5lIEVYUEVDVEVEX1VOU09SVEVEXHRcImJwZnRvb2xfYnRmX2R1bXBfdW5zb3J0ZWQuZXhwZWN0ZWRcIlxuK1xuKy8qXG4rICpcdHN0cnVjdCBob2xleSB7XG4rICpcdFx0aW50IGM7XG4rICpcdFx0XHUwMDNjNjQtYml0IGhvbGVcdTAwM2VcbisgKlx0XHRpbnQgdGFpbDtcbisgKlx0fTtcbisgKlx0ZW51bSB7IEUwID0gMSB9O1xuKyAqXHRzdHJ1Y3QgcyB7IGludCBmOyB9O1xuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgYnRmICpta19idGYodm9pZClcbit7XG4rXHRzdHJ1Y3QgYnRmICpidGY7XG4rXG4rXHRidGYgPSBidGZfX25ld19lbXB0eSgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgXCJuZXdfZW1wdHlcIikpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0YnRmX19hZGRfaW50KGJ0ZiwgXCJpbnRcIiwgNCwgQlRGX0lOVF9TSUdORUQpO1xuK1x0YnRmX19hZGRfaW50KGJ0ZiwgXCJsb25nIGludFwiLCA0LCBCVEZfSU5UX1NJR05FRCk7XG4rXG4rXHRidGZfX2FkZF9zdHJ1Y3QoYnRmLCBcImhvbGV5XCIsIDE2KTtcbitcdGJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgXCJjXCIsIDEsIDAsIDApO1xuK1x0YnRmX19hZGRfZmllbGQoYnRmLCBcInRhaWxcIiwgMSwgOTYsIDApO1xuK1xuK1x0YnRmX19hZGRfZW51bShidGYsIE5VTEwsIDQpO1xuK1x0YnRmX19hZGRfZW51bV92YWx1ZShidGYsIFwiRTBcIiwgMSk7XG4rXG4rXHRidGZfX2FkZF9zdHJ1Y3QoYnRmLCBcInNcIiwgNCk7XG4rXHRidGZfX2FkZF9maWVsZChidGYsIFwiZlwiLCAxLCAwLCAwKTtcbitcbitcdFZBTElEQVRFX1JBV19CVEYoXG4rXHRcdGJ0ZixcbitcdFx0XCJbMV0gSU5UICdpbnQnIHNpemU9NCBiaXRzX29mZnNldD0wIG5yX2JpdHM9MzIgZW5jb2Rpbmc9U0lHTkVEXCIsXG4rXHRcdFwiWzJdIElOVCAnbG9uZyBpbnQnIHNpemU9NCBiaXRzX29mZnNldD0wIG5yX2JpdHM9MzIgZW5jb2Rpbmc9U0lHTkVEXCIsXG4rXHRcdFwiWzNdIFNUUlVDVCAnaG9sZXknIHNpemU9MTYgdmxlbj0yXFxuXCJcbitcdFx0XCJcXHQnYycgdHlwZV9pZD0xIGJpdHNfb2Zmc2V0PTBcXG5cIlxuK1x0XHRcIlxcdCd0YWlsJyB0eXBlX2lkPTEgYml0c19vZmZzZXQ9OTZcIixcbitcdFx0XCJbNF0gRU5VTSAnKGFub24pJyBlbmNvZGluZz1VTlNJR05FRCBzaXplPTQgdmxlbj0xXFxuXCJcbitcdFx0XCJcXHQnRTAnIHZhbD0xXCIsXG4rXHRcdFwiWzVdIFNUUlVDVCAncycgc2l6ZT00IHZsZW49MVxcblwiXG4rXHRcdFwiXFx0J2YnIHR5cGVfaWQ9MSBiaXRzX29mZnNldD0wXCIpO1xuK1xuK1x0cmV0dXJuIGJ0Zjtcbit9XG4rXG4rc3RhdGljIGludCBidGZfdG9fdG1wZmlsZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNoYXIgKnBhdGgpXG4re1xuK1x0c3NpemVfdCB3cml0dGVuO1xuK1x0Y29uc3Qgdm9pZCAqcmF3O1xuK1x0X191MzIgc3o7XG4rXHRpbnQgZmQ7XG4rXG4rXHRyYXcgPSBidGZfX3Jhd19kYXRhKGJ0ZiwgXHUwMDI2c3opO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHJhdywgXCJyYXdfZGF0YVwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0c25wcmludGYocGF0aCwgUEFUSF9NQVgsIFwiL3RtcC9icGZ0b29sX2J0Zl9kdW1wLlhYWFhYWFwiKTtcbitcdGZkID0gbWtzdGVtcChwYXRoKTtcbitcdGlmICghQVNTRVJUX09LX0ZEKGZkLCBcIm1rc3RlbXBfYnRmXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHR3cml0dGVuID0gd3JpdGUoZmQsIHJhdywgc3opO1xuK1x0Y2xvc2UoZmQpO1xuK1x0aWYgKCFBU1NFUlRfRVEod3JpdHRlbiwgc3osIFwid3JpdGVfYnRmXCIpKSB7XG4rXHRcdHVubGluayhwYXRoKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBjaGFyICpkdW1wX2MoY29uc3QgY2hhciAqYnRmX3BhdGgsIGJvb2wgc29ydGVkKVxuK3tcbitcdGNoYXIgYXJnc1tNQVhfQlBGVE9PTF9DTURfTEVOXTtcbitcdGNoYXIgKmJ1ZjtcbitcdGludCBlcnI7XG4rXG4rXHRidWYgPSBtYWxsb2MoRFVNUF9CVUZfU1opO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJ1ZiwgXCJhbGxvY19kdW1wXCIpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHNucHJpbnRmKGFyZ3MsIHNpemVvZihhcmdzKSwgXCJidGYgZHVtcCBmaWxlICVzIGZvcm1hdCBjJXNcIixcbitcdFx0IGJ0Zl9wYXRoLCBzb3J0ZWQgPyBcIlwiIDogXCIgdW5zb3J0ZWRcIik7XG4rXG4rXHRlcnIgPSBnZXRfYnBmdG9vbF9jb21tYW5kX291dHB1dChhcmdzLCBidWYsIERVTVBfQlVGX1NaKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJidGZfZHVtcF9mb3JtYXRfY1wiKSkge1xuK1x0XHRmcmVlKGJ1Zik7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGJ1Zjtcbit9XG4rXG4rc3RhdGljIGNoYXIgKnJlYWRfZXhwZWN0ZWQoY29uc3QgY2hhciAqcGF0aClcbit7XG4rXHRjaGFyICpidWYgPSBOVUxMO1xuK1x0c2l6ZV90IGNhcCA9IDA7XG4rXHRGSUxFICpmO1xuK1x0aW50IGVycjtcbitcbitcdGYgPSBmb3BlbihwYXRoLCBcInJcIik7XG4rXHRpZiAoIWYpIHtcbitcdFx0ZXJyID0gZXJybm87XG4rXHRcdFBSSU5UX0ZBSUwoXCJjYW4ndCBvcGVuIGV4cGVjdGVkIG91dHB1dCAnJXMnOiBlcnJubyAlZFxcblwiLCBwYXRoLCBlcnIpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdC8qIG5vIE5VTCBpbiBhIGdlbmVyYXRlZCBoZWFkZXIsIHNvIHRoaXMgcmVhZHMgdG8gdGhlIGVuZCAqL1xuK1x0aWYgKGdldGRlbGltKFx1MDAyNmJ1ZiwgXHUwMDI2Y2FwLCAnXFwwJywgZikgXHUwMDNjIDApIHtcbitcdFx0ZXJyID0gZXJybm87XG4rXHRcdFBSSU5UX0ZBSUwoXCJjYW4ndCByZWFkIGV4cGVjdGVkIG91dHB1dCAnJXMnOiBlcnJubyAlZFxcblwiLCBwYXRoLCBlcnIpO1xuK1x0XHRmcmVlKGJ1Zik7XG4rXHRcdGJ1ZiA9IE5VTEw7XG4rXHR9XG4rXG4rXHRmY2xvc2UoZik7XG4rXHRyZXR1cm4gYnVmO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X2R1bXAoY29uc3QgY2hhciAqYnRmX3BhdGgsIGJvb2wgc29ydGVkKVxuK3tcbitcdGNvbnN0IGNoYXIgKmV4cF9wYXRoO1xuK1x0Y2hhciAqZHVtcCwgKmV4cDtcbitcdGludCBlcnI7XG4rXG4rXHRleHBfcGF0aCA9IHNvcnRlZCA/IEVYUEVDVEVEX1NPUlRFRCA6IEVYUEVDVEVEX1VOU09SVEVEO1xuK1xuK1x0ZHVtcCA9IGR1bXBfYyhidGZfcGF0aCwgc29ydGVkKTtcbitcdGlmICghZHVtcClcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZXhwID0gcmVhZF9leHBlY3RlZChleHBfcGF0aCk7XG4rXHRpZiAoIWV4cClcbitcdFx0Z290byBvdXRfZHVtcDtcbitcbitcdGVyciA9IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChkdW1wLCBleHApO1xuK1x0QVNTRVJUX09LKGVyciwgc29ydGVkID8gXCJjbXBfc29ydGVkXCIgOiBcImNtcF91bnNvcnRlZFwiKTtcbitcbitcdGZyZWUoZXhwKTtcbitvdXRfZHVtcDpcbitcdGZyZWUoZHVtcCk7XG4rfVxuK1xuK3ZvaWQgdGVzdF9icGZ0b29sX2J0Zl9kdW1wKHZvaWQpXG4re1xuK1x0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbitcdHN0cnVjdCBidGYgKmJ0ZjtcbitcbitcdGJ0ZiA9IG1rX2J0ZigpO1xuK1x0aWYgKCFidGYpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChidGZfdG9fdG1wZmlsZShidGYsIHBhdGgpKVxuK1x0XHRnb3RvIG91dF9idGY7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImNfc29ydGVkXCIpKVxuK1x0XHR0ZXN0X2R1bXAocGF0aCwgdHJ1ZSk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImNfdW5zb3J0ZWRcIikpXG4rXHRcdHRlc3RfZHVtcChwYXRoLCBmYWxzZSk7XG4rXG4rXHR1bmxpbmsocGF0aCk7XG4rb3V0X2J0ZjpcbitcdGJ0Zl9fZnJlZShidGYpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfZHVtcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX2R1bXAuY1xuaW5kZXggOWYxYjUwZTA3YTI5OC4uZmUwNGE5NTVkNDZjYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9kdW1wLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9kdW1wLmNcbkBAIC0xLDggKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2J0Zi5oXHUwMDNlXG4tXG4tc3RhdGljIGludCBkdXJhdGlvbiA9IDA7XG4rI2luY2x1ZGUgXCJ0ZXN0aW5nX2hlbHBlcnMuaFwiXG4gXG4gdm9pZCBidGZfZHVtcF9wcmludGYodm9pZCAqY3R4LCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncylcbiB7XG5AQCAtNDUsMTIgKzQ0LDc1IEBAIHN0YXRpYyBpbnQgYnRmX2R1bXBfYWxsX3R5cGVzKGNvbnN0IHN0cnVjdCBidGYgKmJ0Ziwgdm9pZCAqY3R4KVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4rLypcbisgKiBFeHBlY3RlZCBvdXRwdXQgaXMgZW1iZWRkZWQgaW4gdGhlIHRlc3QgY2FzZSBzb3VyY2UsIGJldHdlZW5cbisgKiBTVEFSVC1FWFBFQ1RFRC1PVVRQVVQgYW5kIEVORC1FWFBFQ1RFRC1PVVRQVVQgbWFya2Vycy4gQSByZWdpb24gaXMgZWl0aGVyXG4rICogcGxhaW4gQywgd2hlcmUgYSBkZWNsYXJhdGlvbiBkb3VibGVzIGFzIGl0cyBvd24gZXhwZWN0YXRpb24sIG9yIEMgd3JhcHBlZCBpblxuKyAqIGEgYmxvY2sgY29tbWVudCwgd2hlcmUgdGhlIHJlbmRlcmVkIGZvcm0gZGlmZmVycyBmcm9tIHRoZSBzb3VyY2UuIEFsbFxuKyAqIHJlZ2lvbnMgb2YgYSBmaWxlIGNvbmNhdGVuYXRlIGludG8gb25lIGV4cGVjdGF0aW9uLCBjb21wYXJlZCBhZ2FpbnN0IG9uZVxuKyAqIHdob2xlLWZpbGUgZHVtcC5cbisgKlxuKyAqIFJldHVybnMgYSBtYWxsb2MnZCBidWZmZXIgZm9yIHRoZSBjYWxsZXIgdG8gZnJlZSwgb3IgTlVMTCBvbiBmYWlsdXJlLlxuKyAqL1xuK3N0YXRpYyBjaGFyICpyZWFkX2V4cGVjdGVkX291dHB1dChjb25zdCBjaGFyICpwYXRoKVxuK3tcbitcdHNpemVfdCBvdXRfc3ogPSAwLCBsaW5lX2NhcCA9IDA7XG4rXHRjaGFyICpvdXQgPSBOVUxMLCAqbGluZSA9IE5VTEw7XG4rXHRib29sIGluX3JlZ2lvbiA9IGZhbHNlO1xuK1x0RklMRSAqZiwgKm91dF9maWxlO1xuK1xuK1x0ZiA9IGZvcGVuKHBhdGgsIFwiclwiKTtcbitcdGlmICghZilcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRvdXRfZmlsZSA9IG9wZW5fbWVtc3RyZWFtKFx1MDAyNm91dCwgXHUwMDI2b3V0X3N6KTtcbitcdGlmICghb3V0X2ZpbGUpIHtcbitcdFx0ZmNsb3NlKGYpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdHdoaWxlIChnZXRsaW5lKFx1MDAyNmxpbmUsIFx1MDAyNmxpbmVfY2FwLCBmKSBcdTAwM2UgMCkge1xuK1x0XHRjb25zdCBjaGFyICpwO1xuK1xuK1x0XHRpZiAoc3Ryc3RyKGxpbmUsIFwiU1RBUlQtRVhQRUNURUQtT1VUUFVUXCIpKSB7XG4rXHRcdFx0aW5fcmVnaW9uID0gdHJ1ZTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1x0XHRpZiAoc3Ryc3RyKGxpbmUsIFwiRU5ELUVYUEVDVEVELU9VVFBVVFwiKSlcbitcdFx0XHRpbl9yZWdpb24gPSBmYWxzZTtcbitcdFx0aWYgKCFpbl9yZWdpb24pXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHAgPSBsaW5lICsgc3Ryc3BuKGxpbmUsIFwiIFxcdFwiKTtcbitcbitcdFx0Lyogb3BlbmluZyBvciBjbG9zaW5nIGxpbmUgb2YgYSBjb21tZW50ZWQgb3V0IHJlZ2lvbiAqL1xuK1x0XHRpZiAoIXN0cm5jbXAocCwgXCIvKlwiLCAyKSB8fCAhc3RybmNtcChwLCBcIiovXCIsIDIpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBPbmx5IGEgJyonIGRpcmVjdGx5IGFmdGVyIHRoZSBpbmRlbnRhdGlvbiBpcyBhIGNvbW1lbnRcbitcdFx0ICogcHJlZml4LiBXaXRob3V0IG9uZSB0aGUgbGluZSBpcyB0YWtlbiBhcyBpdCBpcywgbGVhZGluZ1xuK1x0XHQgKiB3aGl0ZXNwYWNlIGluY2x1ZGVkLlxuK1x0XHQgKi9cbitcdFx0cCA9ICpwID09ICcqJyA/IHAgKyAxIDogbGluZTtcbitcbitcdFx0ZnB1dHMocCwgb3V0X2ZpbGUpO1xuK1x0fVxuK1xuK1x0ZnJlZShsaW5lKTtcbitcdGZjbG9zZShmKTtcbitcdGZjbG9zZShvdXRfZmlsZSk7XG4rXHRyZXR1cm4gb3V0O1xuK31cbitcbiBzdGF0aWMgaW50IHRlc3RfYnRmX2R1bXBfY2FzZShpbnQgbiwgc3RydWN0IGJ0Zl9kdW1wX3Rlc3RfY2FzZSAqdClcbiB7XG4tXHRjaGFyIHRlc3RfZmlsZVsyNTZdLCBvdXRfZmlsZVsyNTZdLCBkaWZmX2NtZFsxMDI0XTtcbitcdGNoYXIgKmR1bXAgPSBOVUxMLCAqZXhwZWN0ZWQgPSBOVUxMO1xuIFx0c3RydWN0IGJ0ZiAqYnRmID0gTlVMTDtcbi1cdGludCBlcnIgPSAwLCBmZCA9IC0xO1xuLVx0RklMRSAqZiA9IE5VTEw7XG4rXHRjaGFyIHRlc3RfZmlsZVsyNTZdO1xuK1x0c2l6ZV90IGR1bXBfc3ogPSAwO1xuK1x0aW50IGVyciA9IDA7XG4rXHRGSUxFICpmO1xuIFxuIFx0c25wcmludGYodGVzdF9maWxlLCBzaXplb2YodGVzdF9maWxlKSwgXCIlcy5icGYub1wiLCB0LVx1MDAzZWZpbGUpO1xuIFxuQEAgLTY5LDI5ICsxMzEsMjEgQEAgc3RhdGljIGludCB0ZXN0X2J0Zl9kdW1wX2Nhc2UoaW50IG4sIHN0cnVjdCBidGZfZHVtcF90ZXN0X2Nhc2UgKnQpXG4gXHRpZiAoIXQtXHUwMDNla25vd25fcHRyX3N6KSB7XG4gXHRcdGJ0Zl9fc2V0X3BvaW50ZXJfc2l6ZShidGYsIDgpO1xuIFx0fSBlbHNlIHtcbi1cdFx0Q0hFQ0soYnRmX19wb2ludGVyX3NpemUoYnRmKSAhPSA4LCBcInB0cl9zelwiLCBcImV4cCAlZCwgZ290ICV6dVxcblwiLFxuLVx0XHQgICAgICA4LCBidGZfX3BvaW50ZXJfc2l6ZShidGYpKTtcbi1cdH1cbitcdFx0c2l6ZV90IHB0cl9zeiA9IGJ0Zl9fcG9pbnRlcl9zaXplKGJ0Zik7XG4gXG4tXHRzbnByaW50ZihvdXRfZmlsZSwgc2l6ZW9mKG91dF9maWxlKSwgXCIvdG1wLyVzLm91dHB1dC5YWFhYWFhcIiwgdC1cdTAwM2VmaWxlKTtcbi1cdGZkID0gbWtzdGVtcChvdXRfZmlsZSk7XG4tXHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXCJjcmVhdGVfdG1wXCIpKSB7XG4tXHRcdGVyciA9IGZkO1xuLVx0XHRnb3RvIGRvbmU7XG4rXHRcdEFTU0VSVF9FUShwdHJfc3osIChzaXplX3QpOCwgXCJwdHJfc3pcIik7XG4gXHR9XG4tXHRmID0gZmRvcGVuKGZkLCBcIndcIik7XG4tXHRpZiAoQ0hFQ0soZiA9PSBOVUxMLCBcIm9wZW5fdG1wXCIsICBcImZhaWxlZCB0byBvcGVuIGZpbGU6ICVzKCVkKVxcblwiLFxuLVx0XHQgIHN0cmVycm9yKGVycm5vKSwgZXJybm8pKSB7XG4tXHRcdGNsb3NlKGZkKTtcbitcbitcdGYgPSBvcGVuX21lbXN0cmVhbShcdTAwMjZkdW1wLCBcdTAwMjZkdW1wX3N6KTtcbitcdGlmICghQVNTRVJUX09LX1BUUihmLCBcIm9wZW5fbWVtc3RyZWFtXCIpKSB7XG4rXHRcdGVyciA9IC1lcnJubztcbiBcdFx0Z290byBkb25lO1xuIFx0fVxuIFxuIFx0ZXJyID0gYnRmX2R1bXBfYWxsX3R5cGVzKGJ0ZiwgZik7XG4gXHRmY2xvc2UoZik7XG4tXHRjbG9zZShmZCk7XG4tXHRpZiAoQ0hFQ0soZXJyLCBcImJ0Zl9kdW1wXCIsIFwiZmFpbHVyZSBkdXJpbmcgQyBkdW1waW5nOiAlZFxcblwiLCBlcnIpKSB7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiYnRmX2R1bXBcIikpXG4gXHRcdGdvdG8gZG9uZTtcbi1cdH1cbiBcbiBcdHNucHJpbnRmKHRlc3RfZmlsZSwgc2l6ZW9mKHRlc3RfZmlsZSksIFwicHJvZ3MvJXMuY1wiLCB0LVx1MDAzZWZpbGUpO1xuIFx0aWYgKGFjY2Vzcyh0ZXN0X2ZpbGUsIFJfT0spID09IC0xKVxuQEAgLTEwMCwyOCArMTU0LDIzIEBAIHN0YXRpYyBpbnQgdGVzdF9idGZfZHVtcF9jYXNlKGludCBuLCBzdHJ1Y3QgYnRmX2R1bXBfdGVzdF9jYXNlICp0KVxuIFx0XHQgKiB3aXRob3V0IHByZXNlcnZpbmcgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuXG4gXHRcdCAqL1xuIFx0XHRzbnByaW50Zih0ZXN0X2ZpbGUsIHNpemVvZih0ZXN0X2ZpbGUpLCBcIiVzLmNcIiwgdC1cdTAwM2VmaWxlKTtcbi1cdC8qXG4tXHQgKiBEaWZmIHRlc3Qgb3V0cHV0IGFuZCBleHBlY3RlZCB0ZXN0IG91dHB1dCwgY29udGFpbmVkIGJldHdlZW5cbi1cdCAqIFNUQVJULUVYUEVDVEVELU9VVFBVVCBhbmQgRU5ELUVYUEVDVEVELU9VVFBVVCBsaW5lcyBpbiB0ZXN0IGNhc2UuXG4tXHQgKiBGb3IgZXhwZWN0ZWQgb3V0cHV0IGxpbmVzLCBldmVyeXRoaW5nIGJlZm9yZSAnKicgaXMgc3RyaXBwZWQgb3V0LlxuLVx0ICogQWxzbyBsaW5lcyBjb250YWluaW5nIGNvbW1lbnQgc3RhcnQgYW5kIGNvbW1lbnQgZW5kIG1hcmtlcnMgYXJlXG4tXHQgKiBpZ25vcmVkLiBcbi1cdCAqL1xuLVx0c25wcmludGYoZGlmZl9jbWQsIHNpemVvZihkaWZmX2NtZCksXG4tXHRcdCBcImF3ayAnL1NUQVJULUVYUEVDVEVELU9VVFBVVC97b3V0PTE7bmV4dH0gXCJcbi1cdFx0IFwiL0VORC1FWFBFQ1RFRC1PVVRQVVQve291dD0wfSBcIlxuLVx0XHQgXCIvXFxcXC9cXFxcKnxcXFxcKlxcXFwvL3tuZXh0fSBcIiAvKiBpZ25vcmUgY29tbWVudCBzdGFydC9lbmQgbGluZXMgKi9cbi1cdFx0IFwib3V0IHtzdWIoL15bIFxcXFx0XSpcXFxcKi8sIFxcXCJcXFwiKTsgcHJpbnR9JyAnJXMnIHwgZGlmZiAtdSAtICclcydcIixcbi1cdFx0IHRlc3RfZmlsZSwgb3V0X2ZpbGUpO1xuLVx0ZXJyID0gc3lzdGVtKGRpZmZfY21kKTtcbi1cdGlmIChDSEVDSyhlcnIsIFwiZGlmZlwiLFxuLVx0XHQgIFwiZGlmZmVyaW5nIHRlc3Qgb3V0cHV0LCBvdXRwdXQ9JXMsIGVycj0lZCwgZGlmZiBjbWQ6XFxuJXNcXG5cIixcbi1cdFx0ICBvdXRfZmlsZSwgZXJyLCBkaWZmX2NtZCkpXG4rXG4rXHRleHBlY3RlZCA9IHJlYWRfZXhwZWN0ZWRfb3V0cHV0KHRlc3RfZmlsZSk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoZXhwZWN0ZWQsIFwicmVhZF9leHBlY3RlZF9vdXRwdXRcIikpIHtcbitcdFx0ZXJyID0gLWVycm5vO1xuIFx0XHRnb3RvIGRvbmU7XG4rXHR9XG4gXG4tXHRyZW1vdmUob3V0X2ZpbGUpO1xuK1x0LypcbitcdCAqIFRoZSBtaXNtYXRjaCBoYXMgYWxyZWFkeSBiZWVuIHJlcG9ydGVkLCBzbyB0aGlzIG9ubHkgaGFzIHRvXG4rXHQgKiByZWdpc3RlciB0aGUgZmFpbHVyZS4gQVNTRVJUX09LKCkgd291bGQgYXBwZW5kIGEgc3RhbGUgZXJybm8gdG8gaXQuXG4rXHQgKi9cbitcdGVyciA9IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChkdW1wLCBleHBlY3RlZCk7XG4rXHRBU1NFUlRfRVEoZXJyLCAwLCBcImNvbXBhcmVfdGV4dF90b19leHBlY3RlZFwiKTtcbiBcbiBkb25lOlxuK1x0ZnJlZShleHBlY3RlZCk7XG4rXHRmcmVlKGR1bXApO1xuIFx0YnRmX19mcmVlKGJ0Zik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wcm9nX3Rlc3RzX2ZyYW1ld29yay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ190ZXN0c19mcmFtZXdvcmsuY1xuaW5kZXggNzYwN2NmYzI0MDhjMi4uZDExMWZlMTA1NDQ3NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Byb2dfdGVzdHNfZnJhbWV3b3JrLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Byb2dfdGVzdHNfZnJhbWV3b3JrLmNcbkBAIC0xNzksMyArMTc5LDI2IEBAIHZvaWQgdGVzdF9wcm9nX3Rlc3RzX2ZyYW1ld29ya19leHBlY3RlZF9tc2dzKHZvaWQpXG4gXHRcdH1cbiBcdH1cbiB9XG4rXG4rdm9pZCB0ZXN0X3Byb2dfdGVzdHNfZnJhbWV3b3JrX2NvbXBhcmVfdGV4dCh2b2lkKVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImNvbXBhcmVfdGV4dF9tYXRjaFwiKSkge1xuK1x0XHRlcnIgPSBjb21wYXJlX3RleHRfdG9fZXhwZWN0ZWQoXCJzYW1lXFxuXCIsIFwic2FtZVxcblwiKTtcbitcdFx0QVNTRVJUX0VRKGVyciwgMCwgXCJtYXRjaF9yY1wiKTtcbitcdFx0dGVzdF9fZW5kX3N1YnRlc3QoKTtcbitcdH1cbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiY29tcGFyZV90ZXh0X21pc21hdGNoXCIpKSB7XG4rXHRcdGVyciA9IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChcImxpbmUgdHdvXFxuXCIsIFwibGluZSBvbmVcXG5cIik7XG4rXHRcdGZmbHVzaChzdGRvdXQpO1xuK1xuK1x0XHRBU1NFUlRfRVEoZXJyLCAtMSwgXCJtaXNtYXRjaF9yY1wiKTtcbitcdFx0QVNTRVJUX0hBU19TVUJTVFIoZW52LnN1YnRlc3Rfc3RhdGUtXHUwMDNlbG9nX2J1ZiwgXCItbGluZSBvbmVcIixcbitcdFx0XHRcdCAgXCJkaWZmX2hhc19leHBlY3RlZFwiKTtcbitcdFx0QVNTRVJUX0hBU19TVUJTVFIoZW52LnN1YnRlc3Rfc3RhdGUtXHUwMDNlbG9nX2J1ZiwgXCIrbGluZSB0d29cIixcbitcdFx0XHRcdCAgXCJkaWZmX2hhc19hY3R1YWxcIik7XG4rXHRcdHRlc3RfX2VuZF9zdWJ0ZXN0KCk7XG4rXHR9XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuY1xuaW5kZXggYzk3MGU3NzkzZGZjYi4uM2YwMzc5NDllOTc4OSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jXG5AQCAtNTM0LDMgKzUzNCw0NiBAQCBpbnQgc3RhY2tfbXByb3RlY3Qodm9pZClcbiBcdFx0ICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUgfCBQUk9UX0VYRUMpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4rXG4raW50IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChjb25zdCBjaGFyICphY3R1YWwsIGNvbnN0IGNoYXIgKmV4cGVjdGVkKVxuK3tcbitcdGNoYXIgZXhwX3BhdGhbXSA9IFwiL3RtcC9zZWxmdGVzdF9leHBlY3RlZC5YWFhYWFhcIjtcbitcdGNoYXIgYWN0X3BhdGhbXSA9IFwiL3RtcC9zZWxmdGVzdF9hY3R1YWwuWFhYWFhYXCI7XG4rXHRjaGFyIGJ1Zls1MTJdLCBjbWRbMTI4XTtcbitcdGludCBleHBfZmQsIGFjdF9mZDtcbitcdEZJTEUgKnA7XG4rXG4rXHRpZiAoIXN0cmNtcChhY3R1YWwsIGV4cGVjdGVkKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRleHBfZmQgPSBta3N0ZW1wKGV4cF9wYXRoKTtcbitcdGFjdF9mZCA9IG1rc3RlbXAoYWN0X3BhdGgpO1xuK1x0aWYgKGV4cF9mZCBcdTAwM2MgMCB8fCBhY3RfZmQgXHUwMDNjIDApIHtcbitcdFx0ZnByaW50ZihzdGRvdXQsIFwib3V0cHV0IGRpZmZlcnMsIG5vIHRlbXAgZmlsZSBmb3IgYSBkaWZmXFxuXCIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGRwcmludGYoZXhwX2ZkLCBcIiVzXCIsIGV4cGVjdGVkKTtcbitcdGRwcmludGYoYWN0X2ZkLCBcIiVzXCIsIGFjdHVhbCk7XG4rXG4rXHRzbnByaW50ZihjbWQsIHNpemVvZihjbWQpLCBcImRpZmYgLXUgJyVzJyAnJXMnXCIsIGV4cF9wYXRoLCBhY3RfcGF0aCk7XG4rXHRwID0gcG9wZW4oY21kLCBcInJcIik7XG4rXHRpZiAoIXApIHtcbitcdFx0ZnByaW50ZihzdGRvdXQsIFwib3V0cHV0IGRpZmZlcnMsICclcycgZGlkIG5vdCBydW5cXG5cIiwgY21kKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHR3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgcCkpXG4rXHRcdGZwdXRzKGJ1Ziwgc3Rkb3V0KTtcbitcdHBjbG9zZShwKTtcbitcbitvdXQ6XG4rXHRpZiAoZXhwX2ZkIFx1MDAzZT0gMCkge1xuK1x0XHRjbG9zZShleHBfZmQpO1xuK1x0XHR1bmxpbmsoZXhwX3BhdGgpO1xuK1x0fVxuK1x0aWYgKGFjdF9mZCBcdTAwM2U9IDApIHtcbitcdFx0Y2xvc2UoYWN0X2ZkKTtcbitcdFx0dW5saW5rKGFjdF9wYXRoKTtcbitcdH1cbitcdHJldHVybiAtMTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oXG5pbmRleCAyZWRjNmZiN2ZjNTIxLi4xYzU4YTJmMDhiNjQ1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmhcbkBAIC02MSw0ICs2MSw3IEBAIGludCB0ZXN0aW5nX3Byb2dfZmxhZ3Modm9pZCk7XG4gYm9vbCBpc19qaXRfZW5hYmxlZCh2b2lkKTtcbiBpbnQgc3RhY2tfbXByb3RlY3Qodm9pZCk7XG4gXG4rLyogUnVucyBkaWZmKDEpIG9uIG1pc21hdGNoICovXG4raW50IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChjb25zdCBjaGFyICphY3R1YWwsIGNvbnN0IGNoYXIgKmV4cGVjdGVkKTtcbitcbiAjZW5kaWYgLyogX19URVNUSU5HX0hFTFBFUlNfSCAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDI6NTYuOTE5MTc1ODZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTI2OTU4NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBldmVuIGRvaW5nLiBUaGUgbW9kaWZpZWQgZmlsZXMgYXJlIGFsbCBpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgYHRvb2xzL2JwZi9icGZ0b29sL2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gKkNydWNpYWxseSosIG5vdGhpbmcgaXMgdG91Y2hpbmcgdGhlIGtlcm5lbCBzb3VyY2UgZGlyZWN0bHkg4oCTIG5vIGBrZXJuZWwvYCwgYG5ldC9gLCBgZHJpdmVycy9gLCBldGMuIFRoaXMgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIHVzZXJzcGFjZSB0b29scywgYGJwZnRvb2xgLCBhbmQgaXRzIHNlbGZ0ZXN0cy4gVGhhdCdzIGEgaHVnZSBjbHVlLlxuXG5Ob3csIEkgaGF2ZSB0byBhcHBseSB0aGUgY3JpdGVyaWEuIFdlJ3JlIGxvb2tpbmcgZm9yIHdoZXRoZXIgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGtlcm5lbCB2dWxuZXJhYmlsaXR5IGRpc2NvdmVyeSB1c2luZyBzeXprYWxsZXIuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBpdCBvbmx5IG1vZGlmaWVzIGNlcnRhaW4gdHlwZXMgb2YgdGhpbmdzOiBkb2N1bWVudGF0aW9uLCBLY29uZmlnIGZpbGVzLCBjb21tZW50cywgZGVjb3JhdGl2ZSBjaGFuZ2VzIGxpa2UgbG9nZ2luZywgY29uc3RhbnRzIHRoYXQgZG9uJ3QgY2hhbmdlIGV4ZWN1dGlvbiwgdW5yZWFjaGFibGUgY29kZSwgb3IgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZS1kZXBlbmRlbnQgZHJpdmVycyBvciB0ZWFyZG93biBjYWxsYmFja3MuIEkndmUgc2VlbiB0aGVzZSBiZWZvcmUsIHNvIEkgaGF2ZSBhIG1lbnRhbCBjaGVja2xpc3QuXG5cbkxvb2tpbmcgYXQgdGhlIGZpbGVzIGFnYWluLCBJIHNlZTpcblxuKiAgIGB0b29scy9icGYvYnBmdG9vbC9idGYuY2A6IGJwZnRvb2wsIGEgdXNlcnNwYWNlIHRvb2xcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4uLmA6IE11bHRpcGxlIHNlbGZ0ZXN0IGZpbGVzIHJlbGF0ZWQgdG8gYnBmdG9vbC5cblxuRXZlcnl0aGluZyBpcyBmaXJtbHkgaW4gdGhlIGB0b29scy9gIHJlYWxtLiBUaGVzZSBhcmUgKm5vdCoga2VybmVsIG1vZGlmaWNhdGlvbnMuIFN5emthbGxlciB0YXJnZXRzIHRoZSBrZXJuZWwgaXRzZWxmLCBhbmQgY2hhbmdlcyBpbiB0aGVzZSBsb2NhdGlvbnMgZG9uJ3QgdG91Y2ggdGhlIGtlcm5lbCBiaW5hcnkgb3IgY2hhbmdlIGl0cyBleGVjdXRpb24gbG9naWMuIFxuXG5UaGVyZWZvcmUsIEknbSBjb25maWRlbnQgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gSSBkb24ndCBzZWUgYW55IG90aGVyIGZhY3RvcnMgdGhhdCB3b3VsZCBjaGFuZ2UgdGhhdCBjb25jbHVzaW9uLiBObyBuZWVkIHRvIGxvb2sgZm9yIGFueSBvdGhlciBjb25maWcgb3IgdG9vbHMgdG8gdmVyaWZ5LiBJdCBpcyB2ZXJ5IHVuYW1iaWd1b3VzLlxuXG5UaW1lIHRvIGV4ZWN1dGUgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIzMSwiT3V0cHV0VG9rZW5zIjo2MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQzOjAzLjA0NjE0NTQyN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbGluZyAoYnBmdG9vbCkgYW5kIEJQRiBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvLCB3aXRoIG5vIGNoYW5nZXMgdG8ga2VybmVsIGNvZGUgb3IgcnVudGltZSBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xpbmcgKGJwZnRvb2wpIGFuZCBCUEYgc2VsZnRlc3RzIHVuZGVyIHRvb2xzLywgd2l0aCBubyBjaGFuZ2VzIHRvIGtlcm5lbCBjb2RlIG9yIHJ1bnRpbWUgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0MzowMy4wNDYxNzcyODdaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow5484k[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-28 21:59:49 +0000 UTC FinishedAt: 2026-08-28 22:43:03 +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+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbGluZyAoYnBmdG9vbCkgYW5kIEJQRiBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvLCB3aXRoIG5vIGNoYW5nZXMgdG8ga2VybmVsIGNvZGUgb3IgcnVudGltZSBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1NGMxMjk1NDZmOTkwNDA4NDZkOGQ5MWM5NGE4OGMxZTgzMWFhNTVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMjI6NDI6NTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmMgYi90b29scy9icGYvYnBmdG9vbC9idGYuY1xuaW5kZXggYzk1ODkwMjZkYThkNi4uYmNhMGEzOTgyZjA5YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2J0Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9idGYuY1xuQEAgLTgwNSw5ICYjNDM7ODA1LDEzIEBAIHN0YXRpYyBpbnQgZHVtcF9idGZfYyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4gXG4gXHRcdGlmIChzb3J0X2R1bXApXG4gXHRcdFx0ZGF0dW1zID0gc29ydF9idGZfYyhidGYpO1xuLVx0XHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBjbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdFx0aW50IGlkeCA9IGRhdHVtcyA/IGRhdHVtc1tpXS5pbmRleCA6IGk7XG4gXG4mIzQzO1x0XHRcdC8qIHR5cGUgSUQgMCBpcyB2b2lkLCBza2lwIGl0ICovXG4mIzQzO1x0XHRcdGlmIChpZHggPT0gMClcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdFx0ZXJyID0gYnRmX2R1bXBfX2R1bXBfdHlwZShkLCBpZHgpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRnb3RvIGRvbmU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG5pbmRleCA1ZjFhM2JmYzA1NjlmLi5kOTk1ODEyNTdlNTRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbkBAIC0xMTksNyAmIzQzOzExOSw5IEBAIFRFU1RfR0VOX1BST0dTICYjNDM7PSB0ZXN0X3Byb2dzLWNwdXY0XG4gVEVTVF9JTlNUX1NVQkRJUlMgJiM0Mzs9IGNwdXY0XG4gZW5kaWZcbiBcbi1URVNUX0ZJTEVTID0geHNrX3ByZXJlcXMuc2ggJCh3aWxkY2FyZCBwcm9ncy9idGZfZHVtcF90ZXN0X2Nhc2VfKi5jKVxuJiM0MztURVNUX0ZJTEVTID0geHNrX3ByZXJlcXMuc2ggJCh3aWxkY2FyZCBwcm9ncy9idGZfZHVtcF90ZXN0X2Nhc2VfKi5jKVx0XFxcbiYjNDM7XHQgICAgIGJwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkXHRcdFx0XHRcdFxcXG4mIzQzO1x0ICAgICBicGZ0b29sX2J0Zl9kdW1wX3Vuc29ydGVkLmV4cGVjdGVkXG4gXG4gIyBPcmRlciBjb3JyZXNwb25kIHRvICYjMzk7bWFrZSBydW5fdGVzdHMmIzM5OyBvcmRlclxuIFRFU1RfUFJPR1MgOj0gdGVzdF9rbW9kLnNoIFxcXG5AQCAtODg3LDcgJiM0Mzs4ODksOSBAQCBUUlVOTkVSX0VYVFJBX0ZJTEVTIDo9ICQoT1VUUFVUKS91cmFuZG9tX3JlYWRcdFx0XHRcdFxcXG4gXHRcdCAgICAgICBpbWFfc2V0dXAuc2ggXHRcdFx0XHRcdFxcXG4gXHRcdCAgICAgICAkKFZFUklGWV9TSUdfU0VUVVApXHRcdFx0XHRcXFxuIFx0XHQgICAgICAgJCh3aWxkY2FyZCBwcm9ncy9idGZfZHVtcF90ZXN0X2Nhc2VfKi5jKVx0XHRcXFxuLVx0XHQgICAgICAgJCh3aWxkY2FyZCBwcm9ncy8qLmJwZi5vKVxuJiM0MztcdFx0ICAgICAgICQod2lsZGNhcmQgcHJvZ3MvKi5icGYubylcdFx0XHRcXFxuJiM0MztcdFx0ICAgICAgIGJwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkXHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgICBicGZ0b29sX2J0Zl9kdW1wX3Vuc29ydGVkLmV4cGVjdGVkXG4gVFJVTk5FUl9CUEZfQlVJTERfUlVMRSA6PSBDTEFOR19CUEZfQlVJTERfUlVMRVxuIFRSVU5ORVJfQlBGX0NGTEFHUyA6PSAkKEJQRl9DRkxBR1MpICQoQ0xBTkdfQ0ZMQUdTKSAtREVOQUJMRV9BVE9NSUNTX1RFU1RTXG4gJChldmFsICQoY2FsbCBERUZJTkVfVEVTVF9SVU5ORVIsdGVzdF9wcm9ncykpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTQ3MGIyYjQzMjI5MVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkXG5AQCAtMCwwICYjNDM7MSw0OCBAQFxuJiM0MzsjaWZuZGVmIF9fVk1MSU5VWF9IX19cbiYjNDM7I2RlZmluZSBfX1ZNTElOVVhfSF9fXG4mIzQzO1xuJiM0MzsjaWZuZGVmIEJQRl9OT19QUkVTRVJWRV9BQ0NFU1NfSU5ERVhcbiYjNDM7I3ByYWdtYSBjbGFuZyBhdHRyaWJ1dGUgcHVzaCAoX19hdHRyaWJ1dGVfXygocHJlc2VydmVfYWNjZXNzX2luZGV4KSksIGFwcGx5X3RvID0gcmVjb3JkKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19rc3ltXG4mIzQzOyNkZWZpbmUgX19rc3ltIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oXCYjMzQ7LmtzeW1zXCYjMzQ7KSkpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmbmRlZiBfX3dlYWtcbiYjNDM7I2RlZmluZSBfX3dlYWsgX19hdHRyaWJ1dGVfXygod2VhaykpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmbmRlZiBfX2JwZl9mYXN0Y2FsbFxuJiM0MzsjaWYgX19oYXNfYXR0cmlidXRlKGJwZl9mYXN0Y2FsbClcbiYjNDM7I2RlZmluZSBfX2JwZl9mYXN0Y2FsbCBfX2F0dHJpYnV0ZV9fKChicGZfZmFzdGNhbGwpKVxuJiM0MzsjZWxzZVxuJiM0MzsjZGVmaW5lIF9fYnBmX2Zhc3RjYWxsXG4mIzQzOyNlbmRpZlxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO2VudW0ge1xuJiM0MztcdEUwID0gMSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBob2xleSB7XG4mIzQzO1x0aW50IGM7XG4mIzQzO1x0bG9uZzogMzI7XG4mIzQzO1x0bG9uZzogMzI7XG4mIzQzO1x0aW50IHRhaWw7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcyB7XG4mIzQzO1x0aW50IGY7XG4mIzQzO307XG4mIzQzO1xuJiM0MztcbiYjNDM7LyogQlBGIGtmdW5jcyAqL1xuJiM0MzsjaWZuZGVmIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmbmRlZiBCUEZfTk9fUFJFU0VSVkVfQUNDRVNTX0lOREVYXG4mIzQzOyNwcmFnbWEgY2xhbmcgYXR0cmlidXRlIHBvcFxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX1ZNTElOVVhfSF9fICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfYnRmX2R1bXBfdW5zb3J0ZWQuZXhwZWN0ZWQgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9idGZfZHVtcF91bnNvcnRlZC5leHBlY3RlZFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjQzMTBhZGMyZWQ1MTRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2J0Zl9kdW1wX3Vuc29ydGVkLmV4cGVjdGVkXG5AQCAtMCwwICYjNDM7MSw0OCBAQFxuJiM0MzsjaWZuZGVmIF9fVk1MSU5VWF9IX19cbiYjNDM7I2RlZmluZSBfX1ZNTElOVVhfSF9fXG4mIzQzO1xuJiM0MzsjaWZuZGVmIEJQRl9OT19QUkVTRVJWRV9BQ0NFU1NfSU5ERVhcbiYjNDM7I3ByYWdtYSBjbGFuZyBhdHRyaWJ1dGUgcHVzaCAoX19hdHRyaWJ1dGVfXygocHJlc2VydmVfYWNjZXNzX2luZGV4KSksIGFwcGx5X3RvID0gcmVjb3JkKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19rc3ltXG4mIzQzOyNkZWZpbmUgX19rc3ltIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oXCYjMzQ7LmtzeW1zXCYjMzQ7KSkpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmbmRlZiBfX3dlYWtcbiYjNDM7I2RlZmluZSBfX3dlYWsgX19hdHRyaWJ1dGVfXygod2VhaykpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmbmRlZiBfX2JwZl9mYXN0Y2FsbFxuJiM0MzsjaWYgX19oYXNfYXR0cmlidXRlKGJwZl9mYXN0Y2FsbClcbiYjNDM7I2RlZmluZSBfX2JwZl9mYXN0Y2FsbCBfX2F0dHJpYnV0ZV9fKChicGZfZmFzdGNhbGwpKVxuJiM0MzsjZWxzZVxuJiM0MzsjZGVmaW5lIF9fYnBmX2Zhc3RjYWxsXG4mIzQzOyNlbmRpZlxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO3N0cnVjdCBob2xleSB7XG4mIzQzO1x0aW50IGM7XG4mIzQzO1x0bG9uZzogMzI7XG4mIzQzO1x0bG9uZzogMzI7XG4mIzQzO1x0aW50IHRhaWw7XG4mIzQzO307XG4mIzQzO1xuJiM0MztlbnVtIHtcbiYjNDM7XHRFMCA9IDEsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcyB7XG4mIzQzO1x0aW50IGY7XG4mIzQzO307XG4mIzQzO1xuJiM0MztcbiYjNDM7LyogQlBGIGtmdW5jcyAqL1xuJiM0MzsjaWZuZGVmIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmbmRlZiBCUEZfTk9fUFJFU0VSVkVfQUNDRVNTX0lOREVYXG4mIzQzOyNwcmFnbWEgY2xhbmcgYXR0cmlidXRlIHBvcFxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX1ZNTElOVVhfSF9fICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jXG5pbmRleCAwYTJhNGYwYTI3OTRiLi5jNDlmZGQ5MGViMDMzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9oZWxwZXJzLmNcbkBAIC01Myw2ICYjNDM7NTMsNyBAQCBzdGF0aWMgaW50IHJ1bl9jb21tYW5kKGNoYXIgKmFyZ3MsIGNoYXIgKm91dHB1dF9idWYsIHNpemVfdCBvdXRwdXRfbWF4X2xlbilcbiBcdHN0YXRpYyBjaGFyIGJwZnRvb2xfcGF0aFtQQVRIX01BWF0gPSB7fTtcbiBcdGJvb2wgc3VwcHJlc3Nfb3V0cHV0ID0gIShvdXRwdXRfYnVmIFx1MDAyNlx1MDAyNiBvdXRwdXRfbWF4X2xlbik7XG4gXHRjaGFyIGNvbW1hbmRbQlBGVE9PTF9GVUxMX0NNRF9NQVhfTEVOXTtcbiYjNDM7XHRzaXplX3QgbjtcbiBcdEZJTEUgKmY7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTY4LDggJiM0Mzs2OSwxMCBAQCBzdGF0aWMgaW50IHJ1bl9jb21tYW5kKGNoYXIgKmFyZ3MsIGNoYXIgKm91dHB1dF9idWYsIHNpemVfdCBvdXRwdXRfbWF4X2xlbilcbiBcdGlmICghZilcbiBcdFx0cmV0dXJuIDE7XG4gXG4tXHRpZiAoIXN1cHByZXNzX291dHB1dClcbi1cdFx0ZnJlYWQob3V0cHV0X2J1ZiwgMSwgb3V0cHV0X21heF9sZW4sIGYpO1xuJiM0MztcdGlmICghc3VwcHJlc3Nfb3V0cHV0KSB7XG4mIzQzO1x0XHRuID0gZnJlYWQob3V0cHV0X2J1ZiwgMSwgb3V0cHV0X21heF9sZW4gLSAxLCBmKTtcbiYjNDM7XHRcdG91dHB1dF9idWZbbl0gPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcdH1cbiBcdHJldCA9IHBjbG9zZShmKTtcbiBcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9idGZfZHVtcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9idGZfZHVtcC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDViMjUzMDJiMGM4OVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9idGZfZHVtcC5jXG5AQCAtMCwwICYjNDM7MSwxNzggQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZnRvb2xfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtidGZfaGVscGVycy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RpbmdfaGVscGVycy5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIERVTVBfQlVGX1NaXHRcdCgxNiAqIDEwMjQpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEVYUEVDVEVEX1NPUlRFRFx0XHRcJiMzNDticGZ0b29sX2J0Zl9kdW1wX3NvcnRlZC5leHBlY3RlZFwmIzM0O1xuJiM0MzsjZGVmaW5lIEVYUEVDVEVEX1VOU09SVEVEXHRcJiMzNDticGZ0b29sX2J0Zl9kdW1wX3Vuc29ydGVkLmV4cGVjdGVkXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKlx0c3RydWN0IGhvbGV5IHtcbiYjNDM7ICpcdFx0aW50IGM7XG4mIzQzOyAqXHRcdFx1MDAzYzY0LWJpdCBob2xlXHUwMDNlXG4mIzQzOyAqXHRcdGludCB0YWlsO1xuJiM0MzsgKlx0fTtcbiYjNDM7ICpcdGVudW0geyBFMCA9IDEgfTtcbiYjNDM7ICpcdHN0cnVjdCBzIHsgaW50IGY7IH07XG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3RydWN0IGJ0ZiAqbWtfYnRmKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnRmICpidGY7XG4mIzQzO1xuJiM0MztcdGJ0ZiA9IGJ0Zl9fbmV3X2VtcHR5KCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgXCYjMzQ7bmV3X2VtcHR5XCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRidGZfX2FkZF9pbnQoYnRmLCBcJiMzNDtpbnRcJiMzNDssIDQsIEJURl9JTlRfU0lHTkVEKTtcbiYjNDM7XHRidGZfX2FkZF9pbnQoYnRmLCBcJiMzNDtsb25nIGludFwmIzM0OywgNCwgQlRGX0lOVF9TSUdORUQpO1xuJiM0MztcbiYjNDM7XHRidGZfX2FkZF9zdHJ1Y3QoYnRmLCBcJiMzNDtob2xleVwmIzM0OywgMTYpO1xuJiM0MztcdGJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgXCYjMzQ7Y1wmIzM0OywgMSwgMCwgMCk7XG4mIzQzO1x0YnRmX19hZGRfZmllbGQoYnRmLCBcJiMzNDt0YWlsXCYjMzQ7LCAxLCA5NiwgMCk7XG4mIzQzO1xuJiM0MztcdGJ0Zl9fYWRkX2VudW0oYnRmLCBOVUxMLCA0KTtcbiYjNDM7XHRidGZfX2FkZF9lbnVtX3ZhbHVlKGJ0ZiwgXCYjMzQ7RTBcJiMzNDssIDEpO1xuJiM0MztcbiYjNDM7XHRidGZfX2FkZF9zdHJ1Y3QoYnRmLCBcJiMzNDtzXCYjMzQ7LCA0KTtcbiYjNDM7XHRidGZfX2FkZF9maWVsZChidGYsIFwmIzM0O2ZcJiMzNDssIDEsIDAsIDApO1xuJiM0MztcbiYjNDM7XHRWQUxJREFURV9SQVdfQlRGKFxuJiM0MztcdFx0YnRmLFxuJiM0MztcdFx0XCYjMzQ7WzFdIElOVCAmIzM5O2ludCYjMzk7IHNpemU9NCBiaXRzX29mZnNldD0wIG5yX2JpdHM9MzIgZW5jb2Rpbmc9U0lHTkVEXCYjMzQ7LFxuJiM0MztcdFx0XCYjMzQ7WzJdIElOVCAmIzM5O2xvbmcgaW50JiMzOTsgc2l6ZT00IGJpdHNfb2Zmc2V0PTAgbnJfYml0cz0zMiBlbmNvZGluZz1TSUdORURcJiMzNDssXG4mIzQzO1x0XHRcJiMzNDtbM10gU1RSVUNUICYjMzk7aG9sZXkmIzM5OyBzaXplPTE2IHZsZW49MlxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7XFx0JiMzOTtjJiMzOTsgdHlwZV9pZD0xIGJpdHNfb2Zmc2V0PTBcXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0O1xcdCYjMzk7dGFpbCYjMzk7IHR5cGVfaWQ9MSBiaXRzX29mZnNldD05NlwmIzM0OyxcbiYjNDM7XHRcdFwmIzM0O1s0XSBFTlVNICYjMzk7KGFub24pJiMzOTsgZW5jb2Rpbmc9VU5TSUdORUQgc2l6ZT00IHZsZW49MVxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7XFx0JiMzOTtFMCYjMzk7IHZhbD0xXCYjMzQ7LFxuJiM0MztcdFx0XCYjMzQ7WzVdIFNUUlVDVCAmIzM5O3MmIzM5OyBzaXplPTQgdmxlbj0xXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHQmIzM5O2YmIzM5OyB0eXBlX2lkPTEgYml0c19vZmZzZXQ9MFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBidGY7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnRmX3RvX3RtcGZpbGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjaGFyICpwYXRoKVxuJiM0Mzt7XG4mIzQzO1x0c3NpemVfdCB3cml0dGVuO1xuJiM0MztcdGNvbnN0IHZvaWQgKnJhdztcbiYjNDM7XHRfX3UzMiBzejtcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1xuJiM0MztcdHJhdyA9IGJ0Zl9fcmF3X2RhdGEoYnRmLCBcdTAwMjZzeik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHJhdywgXCYjMzQ7cmF3X2RhdGFcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgXCYjMzQ7L3RtcC9icGZ0b29sX2J0Zl9kdW1wLlhYWFhYWFwmIzM0Oyk7XG4mIzQzO1x0ZmQgPSBta3N0ZW1wKHBhdGgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX0ZEKGZkLCBcJiMzNDtta3N0ZW1wX2J0ZlwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdHdyaXR0ZW4gPSB3cml0ZShmZCwgcmF3LCBzeik7XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHdyaXR0ZW4sIHN6LCBcJiMzNDt3cml0ZV9idGZcJiMzNDspKSB7XG4mIzQzO1x0XHR1bmxpbmsocGF0aCk7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNoYXIgKmR1bXBfYyhjb25zdCBjaGFyICpidGZfcGF0aCwgYm9vbCBzb3J0ZWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGFyZ3NbTUFYX0JQRlRPT0xfQ01EX0xFTl07XG4mIzQzO1x0Y2hhciAqYnVmO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGJ1ZiA9IG1hbGxvYyhEVU1QX0JVRl9TWik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJ1ZiwgXCYjMzQ7YWxsb2NfZHVtcFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYoYXJncywgc2l6ZW9mKGFyZ3MpLCBcJiMzNDtidGYgZHVtcCBmaWxlICVzIGZvcm1hdCBjJXNcJiMzNDssXG4mIzQzO1x0XHQgYnRmX3BhdGgsIHNvcnRlZCA/IFwmIzM0O1wmIzM0OyA6IFwmIzM0OyB1bnNvcnRlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGdldF9icGZ0b29sX2NvbW1hbmRfb3V0cHV0KGFyZ3MsIGJ1ZiwgRFVNUF9CVUZfU1opO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YnRmX2R1bXBfZm9ybWF0X2NcJiMzNDspKSB7XG4mIzQzO1x0XHRmcmVlKGJ1Zik7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBidWY7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjaGFyICpyZWFkX2V4cGVjdGVkKGNvbnN0IGNoYXIgKnBhdGgpXG4mIzQzO3tcbiYjNDM7XHRjaGFyICpidWYgPSBOVUxMO1xuJiM0MztcdHNpemVfdCBjYXAgPSAwO1xuJiM0MztcdEZJTEUgKmY7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZiA9IGZvcGVuKHBhdGgsIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGlmICghZikge1xuJiM0MztcdFx0ZXJyID0gZXJybm87XG4mIzQzO1x0XHRQUklOVF9GQUlMKFwmIzM0O2NhbiYjMzk7dCBvcGVuIGV4cGVjdGVkIG91dHB1dCAmIzM5OyVzJiMzOTs6IGVycm5vICVkXFxuXCYjMzQ7LCBwYXRoLCBlcnIpO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBubyBOVUwgaW4gYSBnZW5lcmF0ZWQgaGVhZGVyLCBzbyB0aGlzIHJlYWRzIHRvIHRoZSBlbmQgKi9cbiYjNDM7XHRpZiAoZ2V0ZGVsaW0oXHUwMDI2YnVmLCBcdTAwMjZjYXAsICYjMzk7XFwwJiMzOTssIGYpIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRlcnIgPSBlcnJubztcbiYjNDM7XHRcdFBSSU5UX0ZBSUwoXCYjMzQ7Y2FuJiMzOTt0IHJlYWQgZXhwZWN0ZWQgb3V0cHV0ICYjMzk7JXMmIzM5OzogZXJybm8gJWRcXG5cJiMzNDssIHBhdGgsIGVycik7XG4mIzQzO1x0XHRmcmVlKGJ1Zik7XG4mIzQzO1x0XHRidWYgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZmNsb3NlKGYpO1xuJiM0MztcdHJldHVybiBidWY7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZHVtcChjb25zdCBjaGFyICpidGZfcGF0aCwgYm9vbCBzb3J0ZWQpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBjaGFyICpleHBfcGF0aDtcbiYjNDM7XHRjaGFyICpkdW1wLCAqZXhwO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGV4cF9wYXRoID0gc29ydGVkID8gRVhQRUNURURfU09SVEVEIDogRVhQRUNURURfVU5TT1JURUQ7XG4mIzQzO1xuJiM0MztcdGR1bXAgPSBkdW1wX2MoYnRmX3BhdGgsIHNvcnRlZCk7XG4mIzQzO1x0aWYgKCFkdW1wKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRleHAgPSByZWFkX2V4cGVjdGVkKGV4cF9wYXRoKTtcbiYjNDM7XHRpZiAoIWV4cClcbiYjNDM7XHRcdGdvdG8gb3V0X2R1bXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChkdW1wLCBleHApO1xuJiM0MztcdEFTU0VSVF9PSyhlcnIsIHNvcnRlZCA/IFwmIzM0O2NtcF9zb3J0ZWRcJiMzNDsgOiBcJiMzNDtjbXBfdW5zb3J0ZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmcmVlKGV4cCk7XG4mIzQzO291dF9kdW1wOlxuJiM0MztcdGZyZWUoZHVtcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9icGZ0b29sX2J0Zl9kdW1wKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuJiM0MztcdHN0cnVjdCBidGYgKmJ0ZjtcbiYjNDM7XG4mIzQzO1x0YnRmID0gbWtfYnRmKCk7XG4mIzQzO1x0aWYgKCFidGYpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChidGZfdG9fdG1wZmlsZShidGYsIHBhdGgpKVxuJiM0MztcdFx0Z290byBvdXRfYnRmO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtjX3NvcnRlZFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X2R1bXAocGF0aCwgdHJ1ZSk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7Y191bnNvcnRlZFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X2R1bXAocGF0aCwgZmFsc2UpO1xuJiM0MztcbiYjNDM7XHR1bmxpbmsocGF0aCk7XG4mIzQzO291dF9idGY6XG4mIzQzO1x0YnRmX19mcmVlKGJ0Zik7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfZHVtcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX2R1bXAuY1xuaW5kZXggOWYxYjUwZTA3YTI5OC4uZmUwNGE5NTVkNDZjYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9kdW1wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9kdW1wLmNcbkBAIC0xLDggJiM0MzsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuLVxuLXN0YXRpYyBpbnQgZHVyYXRpb24gPSAwO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt0ZXN0aW5nX2hlbHBlcnMuaFwmIzM0O1xuIFxuIHZvaWQgYnRmX2R1bXBfcHJpbnRmKHZvaWQgKmN0eCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpXG4ge1xuQEAgLTQ1LDEyICYjNDM7NDQsNzUgQEAgc3RhdGljIGludCBidGZfZHVtcF9hbGxfdHlwZXMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB2b2lkICpjdHgpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogRXhwZWN0ZWQgb3V0cHV0IGlzIGVtYmVkZGVkIGluIHRoZSB0ZXN0IGNhc2Ugc291cmNlLCBiZXR3ZWVuXG4mIzQzOyAqIFNUQVJULUVYUEVDVEVELU9VVFBVVCBhbmQgRU5ELUVYUEVDVEVELU9VVFBVVCBtYXJrZXJzLiBBIHJlZ2lvbiBpcyBlaXRoZXJcbiYjNDM7ICogcGxhaW4gQywgd2hlcmUgYSBkZWNsYXJhdGlvbiBkb3VibGVzIGFzIGl0cyBvd24gZXhwZWN0YXRpb24sIG9yIEMgd3JhcHBlZCBpblxuJiM0MzsgKiBhIGJsb2NrIGNvbW1lbnQsIHdoZXJlIHRoZSByZW5kZXJlZCBmb3JtIGRpZmZlcnMgZnJvbSB0aGUgc291cmNlLiBBbGxcbiYjNDM7ICogcmVnaW9ucyBvZiBhIGZpbGUgY29uY2F0ZW5hdGUgaW50byBvbmUgZXhwZWN0YXRpb24sIGNvbXBhcmVkIGFnYWluc3Qgb25lXG4mIzQzOyAqIHdob2xlLWZpbGUgZHVtcC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJucyBhIG1hbGxvYyYjMzk7ZCBidWZmZXIgZm9yIHRoZSBjYWxsZXIgdG8gZnJlZSwgb3IgTlVMTCBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGNoYXIgKnJlYWRfZXhwZWN0ZWRfb3V0cHV0KGNvbnN0IGNoYXIgKnBhdGgpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3Qgb3V0X3N6ID0gMCwgbGluZV9jYXAgPSAwO1xuJiM0MztcdGNoYXIgKm91dCA9IE5VTEwsICpsaW5lID0gTlVMTDtcbiYjNDM7XHRib29sIGluX3JlZ2lvbiA9IGZhbHNlO1xuJiM0MztcdEZJTEUgKmYsICpvdXRfZmlsZTtcbiYjNDM7XG4mIzQzO1x0ZiA9IGZvcGVuKHBhdGgsIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGlmICghZilcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRvdXRfZmlsZSA9IG9wZW5fbWVtc3RyZWFtKFx1MDAyNm91dCwgXHUwMDI2b3V0X3N6KTtcbiYjNDM7XHRpZiAoIW91dF9maWxlKSB7XG4mIzQzO1x0XHRmY2xvc2UoZik7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHdoaWxlIChnZXRsaW5lKFx1MDAyNmxpbmUsIFx1MDAyNmxpbmVfY2FwLCBmKSBcdTAwM2UgMCkge1xuJiM0MztcdFx0Y29uc3QgY2hhciAqcDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3Ryc3RyKGxpbmUsIFwmIzM0O1NUQVJULUVYUEVDVEVELU9VVFBVVFwmIzM0OykpIHtcbiYjNDM7XHRcdFx0aW5fcmVnaW9uID0gdHJ1ZTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoc3Ryc3RyKGxpbmUsIFwmIzM0O0VORC1FWFBFQ1RFRC1PVVRQVVRcJiMzNDspKVxuJiM0MztcdFx0XHRpbl9yZWdpb24gPSBmYWxzZTtcbiYjNDM7XHRcdGlmICghaW5fcmVnaW9uKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRwID0gbGluZSAmIzQzOyBzdHJzcG4obGluZSwgXCYjMzQ7IFxcdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0Lyogb3BlbmluZyBvciBjbG9zaW5nIGxpbmUgb2YgYSBjb21tZW50ZWQgb3V0IHJlZ2lvbiAqL1xuJiM0MztcdFx0aWYgKCFzdHJuY21wKHAsIFwmIzM0Oy8qXCYjMzQ7LCAyKSB8fCAhc3RybmNtcChwLCBcJiMzNDsqL1wmIzM0OywgMikpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBPbmx5IGEgJiMzOTsqJiMzOTsgZGlyZWN0bHkgYWZ0ZXIgdGhlIGluZGVudGF0aW9uIGlzIGEgY29tbWVudFxuJiM0MztcdFx0ICogcHJlZml4LiBXaXRob3V0IG9uZSB0aGUgbGluZSBpcyB0YWtlbiBhcyBpdCBpcywgbGVhZGluZ1xuJiM0MztcdFx0ICogd2hpdGVzcGFjZSBpbmNsdWRlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cCA9ICpwID09ICYjMzk7KiYjMzk7ID8gcCAmIzQzOyAxIDogbGluZTtcbiYjNDM7XG4mIzQzO1x0XHRmcHV0cyhwLCBvdXRfZmlsZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmcmVlKGxpbmUpO1xuJiM0MztcdGZjbG9zZShmKTtcbiYjNDM7XHRmY2xvc2Uob3V0X2ZpbGUpO1xuJiM0MztcdHJldHVybiBvdXQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCB0ZXN0X2J0Zl9kdW1wX2Nhc2UoaW50IG4sIHN0cnVjdCBidGZfZHVtcF90ZXN0X2Nhc2UgKnQpXG4ge1xuLVx0Y2hhciB0ZXN0X2ZpbGVbMjU2XSwgb3V0X2ZpbGVbMjU2XSwgZGlmZl9jbWRbMTAyNF07XG4mIzQzO1x0Y2hhciAqZHVtcCA9IE5VTEwsICpleHBlY3RlZCA9IE5VTEw7XG4gXHRzdHJ1Y3QgYnRmICpidGYgPSBOVUxMO1xuLVx0aW50IGVyciA9IDAsIGZkID0gLTE7XG4tXHRGSUxFICpmID0gTlVMTDtcbiYjNDM7XHRjaGFyIHRlc3RfZmlsZVsyNTZdO1xuJiM0MztcdHNpemVfdCBkdW1wX3N6ID0gMDtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XHRGSUxFICpmO1xuIFxuIFx0c25wcmludGYodGVzdF9maWxlLCBzaXplb2YodGVzdF9maWxlKSwgXCYjMzQ7JXMuYnBmLm9cJiMzNDssIHQtXHUwMDNlZmlsZSk7XG4gXG5AQCAtNjksMjkgJiM0MzsxMzEsMjEgQEAgc3RhdGljIGludCB0ZXN0X2J0Zl9kdW1wX2Nhc2UoaW50IG4sIHN0cnVjdCBidGZfZHVtcF90ZXN0X2Nhc2UgKnQpXG4gXHRpZiAoIXQtXHUwMDNla25vd25fcHRyX3N6KSB7XG4gXHRcdGJ0Zl9fc2V0X3BvaW50ZXJfc2l6ZShidGYsIDgpO1xuIFx0fSBlbHNlIHtcbi1cdFx0Q0hFQ0soYnRmX19wb2ludGVyX3NpemUoYnRmKSAhPSA4LCBcJiMzNDtwdHJfc3pcJiMzNDssIFwmIzM0O2V4cCAlZCwgZ290ICV6dVxcblwmIzM0Oyxcbi1cdFx0ICAgICAgOCwgYnRmX19wb2ludGVyX3NpemUoYnRmKSk7XG4tXHR9XG4mIzQzO1x0XHRzaXplX3QgcHRyX3N6ID0gYnRmX19wb2ludGVyX3NpemUoYnRmKTtcbiBcbi1cdHNucHJpbnRmKG91dF9maWxlLCBzaXplb2Yob3V0X2ZpbGUpLCBcJiMzNDsvdG1wLyVzLm91dHB1dC5YWFhYWFhcJiMzNDssIHQtXHUwMDNlZmlsZSk7XG4tXHRmZCA9IG1rc3RlbXAob3V0X2ZpbGUpO1xuLVx0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFwmIzM0O2NyZWF0ZV90bXBcJiMzNDspKSB7XG4tXHRcdGVyciA9IGZkO1xuLVx0XHRnb3RvIGRvbmU7XG4mIzQzO1x0XHRBU1NFUlRfRVEocHRyX3N6LCAoc2l6ZV90KTgsIFwmIzM0O3B0cl9zelwmIzM0Oyk7XG4gXHR9XG4tXHRmID0gZmRvcGVuKGZkLCBcJiMzNDt3XCYjMzQ7KTtcbi1cdGlmIChDSEVDSyhmID09IE5VTEwsIFwmIzM0O29wZW5fdG1wXCYjMzQ7LCAgXCYjMzQ7ZmFpbGVkIHRvIG9wZW4gZmlsZTogJXMoJWQpXFxuXCYjMzQ7LFxuLVx0XHQgIHN0cmVycm9yKGVycm5vKSwgZXJybm8pKSB7XG4tXHRcdGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzO1x0ZiA9IG9wZW5fbWVtc3RyZWFtKFx1MDAyNmR1bXAsIFx1MDAyNmR1bXBfc3opO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihmLCBcJiMzNDtvcGVuX21lbXN0cmVhbVwmIzM0OykpIHtcbiYjNDM7XHRcdGVyciA9IC1lcnJubztcbiBcdFx0Z290byBkb25lO1xuIFx0fVxuIFxuIFx0ZXJyID0gYnRmX2R1bXBfYWxsX3R5cGVzKGJ0ZiwgZik7XG4gXHRmY2xvc2UoZik7XG4tXHRjbG9zZShmZCk7XG4tXHRpZiAoQ0hFQ0soZXJyLCBcJiMzNDtidGZfZHVtcFwmIzM0OywgXCYjMzQ7ZmFpbHVyZSBkdXJpbmcgQyBkdW1waW5nOiAlZFxcblwmIzM0OywgZXJyKSkge1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YnRmX2R1bXBcJiMzNDspKVxuIFx0XHRnb3RvIGRvbmU7XG4tXHR9XG4gXG4gXHRzbnByaW50Zih0ZXN0X2ZpbGUsIHNpemVvZih0ZXN0X2ZpbGUpLCBcJiMzNDtwcm9ncy8lcy5jXCYjMzQ7LCB0LVx1MDAzZWZpbGUpO1xuIFx0aWYgKGFjY2Vzcyh0ZXN0X2ZpbGUsIFJfT0spID09IC0xKVxuQEAgLTEwMCwyOCAmIzQzOzE1NCwyMyBAQCBzdGF0aWMgaW50IHRlc3RfYnRmX2R1bXBfY2FzZShpbnQgbiwgc3RydWN0IGJ0Zl9kdW1wX3Rlc3RfY2FzZSAqdClcbiBcdFx0ICogd2l0aG91dCBwcmVzZXJ2aW5nIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlLlxuIFx0XHQgKi9cbiBcdFx0c25wcmludGYodGVzdF9maWxlLCBzaXplb2YodGVzdF9maWxlKSwgXCYjMzQ7JXMuY1wmIzM0OywgdC1cdTAwM2VmaWxlKTtcbi1cdC8qXG4tXHQgKiBEaWZmIHRlc3Qgb3V0cHV0IGFuZCBleHBlY3RlZCB0ZXN0IG91dHB1dCwgY29udGFpbmVkIGJldHdlZW5cbi1cdCAqIFNUQVJULUVYUEVDVEVELU9VVFBVVCBhbmQgRU5ELUVYUEVDVEVELU9VVFBVVCBsaW5lcyBpbiB0ZXN0IGNhc2UuXG4tXHQgKiBGb3IgZXhwZWN0ZWQgb3V0cHV0IGxpbmVzLCBldmVyeXRoaW5nIGJlZm9yZSAmIzM5OyomIzM5OyBpcyBzdHJpcHBlZCBvdXQuXG4tXHQgKiBBbHNvIGxpbmVzIGNvbnRhaW5pbmcgY29tbWVudCBzdGFydCBhbmQgY29tbWVudCBlbmQgbWFya2VycyBhcmVcbi1cdCAqIGlnbm9yZWQuIFxuLVx0ICovXG4tXHRzbnByaW50ZihkaWZmX2NtZCwgc2l6ZW9mKGRpZmZfY21kKSxcbi1cdFx0IFwmIzM0O2F3ayAmIzM5Oy9TVEFSVC1FWFBFQ1RFRC1PVVRQVVQve291dD0xO25leHR9IFwmIzM0O1xuLVx0XHQgXCYjMzQ7L0VORC1FWFBFQ1RFRC1PVVRQVVQve291dD0wfSBcJiMzNDtcbi1cdFx0IFwmIzM0Oy9cXFxcL1xcXFwqfFxcXFwqXFxcXC8ve25leHR9IFwmIzM0OyAvKiBpZ25vcmUgY29tbWVudCBzdGFydC9lbmQgbGluZXMgKi9cbi1cdFx0IFwmIzM0O291dCB7c3ViKC9eWyBcXFxcdF0qXFxcXCovLCBcXFwmIzM0O1xcXCYjMzQ7KTsgcHJpbnR9JiMzOTsgJiMzOTslcyYjMzk7IHwgZGlmZiAtdSAtICYjMzk7JXMmIzM5O1wmIzM0Oyxcbi1cdFx0IHRlc3RfZmlsZSwgb3V0X2ZpbGUpO1xuLVx0ZXJyID0gc3lzdGVtKGRpZmZfY21kKTtcbi1cdGlmIChDSEVDSyhlcnIsIFwmIzM0O2RpZmZcJiMzNDssXG4tXHRcdCAgXCYjMzQ7ZGlmZmVyaW5nIHRlc3Qgb3V0cHV0LCBvdXRwdXQ9JXMsIGVycj0lZCwgZGlmZiBjbWQ6XFxuJXNcXG5cJiMzNDssXG4tXHRcdCAgb3V0X2ZpbGUsIGVyciwgZGlmZl9jbWQpKVxuJiM0MztcbiYjNDM7XHRleHBlY3RlZCA9IHJlYWRfZXhwZWN0ZWRfb3V0cHV0KHRlc3RfZmlsZSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGV4cGVjdGVkLCBcJiMzNDtyZWFkX2V4cGVjdGVkX291dHB1dFwmIzM0OykpIHtcbiYjNDM7XHRcdGVyciA9IC1lcnJubztcbiBcdFx0Z290byBkb25lO1xuJiM0MztcdH1cbiBcbi1cdHJlbW92ZShvdXRfZmlsZSk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgbWlzbWF0Y2ggaGFzIGFscmVhZHkgYmVlbiByZXBvcnRlZCwgc28gdGhpcyBvbmx5IGhhcyB0b1xuJiM0MztcdCAqIHJlZ2lzdGVyIHRoZSBmYWlsdXJlLiBBU1NFUlRfT0soKSB3b3VsZCBhcHBlbmQgYSBzdGFsZSBlcnJubyB0byBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSBjb21wYXJlX3RleHRfdG9fZXhwZWN0ZWQoZHVtcCwgZXhwZWN0ZWQpO1xuJiM0MztcdEFTU0VSVF9FUShlcnIsIDAsIFwmIzM0O2NvbXBhcmVfdGV4dF90b19leHBlY3RlZFwmIzM0Oyk7XG4gXG4gZG9uZTpcbiYjNDM7XHRmcmVlKGV4cGVjdGVkKTtcbiYjNDM7XHRmcmVlKGR1bXApO1xuIFx0YnRmX19mcmVlKGJ0Zik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wcm9nX3Rlc3RzX2ZyYW1ld29yay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ190ZXN0c19mcmFtZXdvcmsuY1xuaW5kZXggNzYwN2NmYzI0MDhjMi4uZDExMWZlMTA1NDQ3NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Byb2dfdGVzdHNfZnJhbWV3b3JrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Byb2dfdGVzdHNfZnJhbWV3b3JrLmNcbkBAIC0xNzksMyAmIzQzOzE3OSwyNiBAQCB2b2lkIHRlc3RfcHJvZ190ZXN0c19mcmFtZXdvcmtfZXhwZWN0ZWRfbXNncyh2b2lkKVxuIFx0XHR9XG4gXHR9XG4gfVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X3Byb2dfdGVzdHNfZnJhbWV3b3JrX2NvbXBhcmVfdGV4dCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7Y29tcGFyZV90ZXh0X21hdGNoXCYjMzQ7KSkge1xuJiM0MztcdFx0ZXJyID0gY29tcGFyZV90ZXh0X3RvX2V4cGVjdGVkKFwmIzM0O3NhbWVcXG5cJiMzNDssIFwmIzM0O3NhbWVcXG5cJiMzNDspO1xuJiM0MztcdFx0QVNTRVJUX0VRKGVyciwgMCwgXCYjMzQ7bWF0Y2hfcmNcJiMzNDspO1xuJiM0MztcdFx0dGVzdF9fZW5kX3N1YnRlc3QoKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2NvbXBhcmVfdGV4dF9taXNtYXRjaFwmIzM0OykpIHtcbiYjNDM7XHRcdGVyciA9IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChcJiMzNDtsaW5lIHR3b1xcblwmIzM0OywgXCYjMzQ7bGluZSBvbmVcXG5cJiMzNDspO1xuJiM0MztcdFx0ZmZsdXNoKHN0ZG91dCk7XG4mIzQzO1xuJiM0MztcdFx0QVNTRVJUX0VRKGVyciwgLTEsIFwmIzM0O21pc21hdGNoX3JjXCYjMzQ7KTtcbiYjNDM7XHRcdEFTU0VSVF9IQVNfU1VCU1RSKGVudi5zdWJ0ZXN0X3N0YXRlLVx1MDAzZWxvZ19idWYsIFwmIzM0Oy1saW5lIG9uZVwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgIFwmIzM0O2RpZmZfaGFzX2V4cGVjdGVkXCYjMzQ7KTtcbiYjNDM7XHRcdEFTU0VSVF9IQVNfU1VCU1RSKGVudi5zdWJ0ZXN0X3N0YXRlLVx1MDAzZWxvZ19idWYsIFwmIzM0OyYjNDM7bGluZSB0d29cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDtkaWZmX2hhc19hY3R1YWxcJiMzNDspO1xuJiM0MztcdFx0dGVzdF9fZW5kX3N1YnRlc3QoKTtcbiYjNDM7XHR9XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmNcbmluZGV4IGM5NzBlNzc5M2RmY2IuLjNmMDM3OTQ5ZTk3ODkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuY1xuQEAgLTUzNCwzICYjNDM7NTM0LDQ2IEBAIGludCBzdGFja19tcHJvdGVjdCh2b2lkKVxuIFx0XHQgICAgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSB8IFBST1RfRVhFQyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiYjNDM7XG4mIzQzO2ludCBjb21wYXJlX3RleHRfdG9fZXhwZWN0ZWQoY29uc3QgY2hhciAqYWN0dWFsLCBjb25zdCBjaGFyICpleHBlY3RlZClcbiYjNDM7e1xuJiM0MztcdGNoYXIgZXhwX3BhdGhbXSA9IFwmIzM0Oy90bXAvc2VsZnRlc3RfZXhwZWN0ZWQuWFhYWFhYXCYjMzQ7O1xuJiM0MztcdGNoYXIgYWN0X3BhdGhbXSA9IFwmIzM0Oy90bXAvc2VsZnRlc3RfYWN0dWFsLlhYWFhYWFwmIzM0OztcbiYjNDM7XHRjaGFyIGJ1Zls1MTJdLCBjbWRbMTI4XTtcbiYjNDM7XHRpbnQgZXhwX2ZkLCBhY3RfZmQ7XG4mIzQzO1x0RklMRSAqcDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0ZXhwX2ZkID0gbWtzdGVtcChleHBfcGF0aCk7XG4mIzQzO1x0YWN0X2ZkID0gbWtzdGVtcChhY3RfcGF0aCk7XG4mIzQzO1x0aWYgKGV4cF9mZCBcdTAwM2MgMCB8fCBhY3RfZmQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGZwcmludGYoc3Rkb3V0LCBcJiMzNDtvdXRwdXQgZGlmZmVycywgbm8gdGVtcCBmaWxlIGZvciBhIGRpZmZcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkcHJpbnRmKGV4cF9mZCwgXCYjMzQ7JXNcJiMzNDssIGV4cGVjdGVkKTtcbiYjNDM7XHRkcHJpbnRmKGFjdF9mZCwgXCYjMzQ7JXNcJiMzNDssIGFjdHVhbCk7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGNtZCwgc2l6ZW9mKGNtZCksIFwmIzM0O2RpZmYgLXUgJiMzOTslcyYjMzk7ICYjMzk7JXMmIzM5O1wmIzM0OywgZXhwX3BhdGgsIGFjdF9wYXRoKTtcbiYjNDM7XHRwID0gcG9wZW4oY21kLCBcJiMzNDtyXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIXApIHtcbiYjNDM7XHRcdGZwcmludGYoc3Rkb3V0LCBcJiMzNDtvdXRwdXQgZGlmZmVycywgJiMzOTslcyYjMzk7IGRpZCBub3QgcnVuXFxuXCYjMzQ7LCBjbWQpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdHdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBwKSlcbiYjNDM7XHRcdGZwdXRzKGJ1Ziwgc3Rkb3V0KTtcbiYjNDM7XHRwY2xvc2UocCk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0aWYgKGV4cF9mZCBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdGNsb3NlKGV4cF9mZCk7XG4mIzQzO1x0XHR1bmxpbmsoZXhwX3BhdGgpO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoYWN0X2ZkIFx1MDAzZT0gMCkge1xuJiM0MztcdFx0Y2xvc2UoYWN0X2ZkKTtcbiYjNDM7XHRcdHVubGluayhhY3RfcGF0aCk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAtMTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaFxuaW5kZXggMmVkYzZmYjdmYzUyMS4uMWM1OGEyZjA4YjY0NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oXG5AQCAtNjEsNCAmIzQzOzYxLDcgQEAgaW50IHRlc3RpbmdfcHJvZ19mbGFncyh2b2lkKTtcbiBib29sIGlzX2ppdF9lbmFibGVkKHZvaWQpO1xuIGludCBzdGFja19tcHJvdGVjdCh2b2lkKTtcbiBcbiYjNDM7LyogUnVucyBkaWZmKDEpIG9uIG1pc21hdGNoICovXG4mIzQzO2ludCBjb21wYXJlX3RleHRfdG9fZXhwZWN0ZWQoY29uc3QgY2hhciAqYWN0dWFsLCBjb25zdCBjaGFyICpleHBlY3RlZCk7XG4mIzQzO1xuICNlbmRpZiAvKiBfX1RFU1RJTkdfSEVMUEVSU19IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbGluZyAoYnBmdG9vbCkgYW5kIEJQRiBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvLCB3aXRoIG5vIGNoYW5nZXMgdG8ga2VybmVsIGNvZGUgb3IgcnVudGltZSBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NGMxMjk1NDZmOTkwNDA4NDZkOGQ5MWM5NGE4OGMxZTgzMWFhNTVlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjggMjI6NDI6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9idGYuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL2J0Zi5jCmluZGV4IGM5NTg5MDI2ZGE4ZDYuLmJjYTBhMzk4MmYwOWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2J0Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2JwZi9icGZ0b29sL2J0Zi5jCkBAIC04MDUsOSAmIzQzOzgwNSwxMyBAQCBzdGF0aWMgaW50IGR1bXBfYnRmX2MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAogCiAJCWlmIChzb3J0X2R1bXApCiAJCQlkYXR1bXMgPSBzb3J0X2J0Zl9jKGJ0Zik7Ci0JCWZvciAoaSA9IDE7IGkgJmx0OyBjbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgY250OyBpJiM0MzsmIzQzOykgewogCQkJaW50IGlkeCA9IGRhdHVtcyA/IGRhdHVtc1tpXS5pbmRleCA6IGk7CiAKJiM0MzsJCQkvKiB0eXBlIElEIDAgaXMgdm9pZCwgc2tpcCBpdCAqLwomIzQzOwkJCWlmIChpZHggPT0gMCkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiAJCQllcnIgPSBidGZfZHVtcF9fZHVtcF90eXBlKGQsIGlkeCk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gZG9uZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQppbmRleCA1ZjFhM2JmYzA1NjlmLi5kOTk1ODEyNTdlNTRmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlCkBAIC0xMTksNyAmIzQzOzExOSw5IEBAIFRFU1RfR0VOX1BST0dTICYjNDM7PSB0ZXN0X3Byb2dzLWNwdXY0CiBURVNUX0lOU1RfU1VCRElSUyAmIzQzOz0gY3B1djQKIGVuZGlmCiAKLVRFU1RfRklMRVMgPSB4c2tfcHJlcmVxcy5zaCAkKHdpbGRjYXJkIHByb2dzL2J0Zl9kdW1wX3Rlc3RfY2FzZV8qLmMpCiYjNDM7VEVTVF9GSUxFUyA9IHhza19wcmVyZXFzLnNoICQod2lsZGNhcmQgcHJvZ3MvYnRmX2R1bXBfdGVzdF9jYXNlXyouYykJXAomIzQzOwkgICAgIGJwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkCQkJCQlcCiYjNDM7CSAgICAgYnBmdG9vbF9idGZfZHVtcF91bnNvcnRlZC5leHBlY3RlZAogCiAjIE9yZGVyIGNvcnJlc3BvbmQgdG8gJiMzOTttYWtlIHJ1bl90ZXN0cyYjMzk7IG9yZGVyCiBURVNUX1BST0dTIDo9IHRlc3Rfa21vZC5zaCBcCkBAIC04ODcsNyAmIzQzOzg4OSw5IEBAIFRSVU5ORVJfRVhUUkFfRklMRVMgOj0gJChPVVRQVVQpL3VyYW5kb21fcmVhZAkJCQlcCiAJCSAgICAgICBpbWFfc2V0dXAuc2ggCQkJCQlcCiAJCSAgICAgICAkKFZFUklGWV9TSUdfU0VUVVApCQkJCVwKIAkJICAgICAgICQod2lsZGNhcmQgcHJvZ3MvYnRmX2R1bXBfdGVzdF9jYXNlXyouYykJCVwKLQkJICAgICAgICQod2lsZGNhcmQgcHJvZ3MvKi5icGYubykKJiM0MzsJCSAgICAgICAkKHdpbGRjYXJkIHByb2dzLyouYnBmLm8pCQkJXAomIzQzOwkJICAgICAgIGJwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkCQkJXAomIzQzOwkJICAgICAgIGJwZnRvb2xfYnRmX2R1bXBfdW5zb3J0ZWQuZXhwZWN0ZWQKIFRSVU5ORVJfQlBGX0JVSUxEX1JVTEUgOj0gQ0xBTkdfQlBGX0JVSUxEX1JVTEUKIFRSVU5ORVJfQlBGX0NGTEFHUyA6PSAkKEJQRl9DRkxBR1MpICQoQ0xBTkdfQ0ZMQUdTKSAtREVOQUJMRV9BVE9NSUNTX1RFU1RTCiAkKGV2YWwgJChjYWxsIERFRklORV9URVNUX1JVTk5FUix0ZXN0X3Byb2dzKSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2J0Zl9kdW1wX3NvcnRlZC5leHBlY3RlZCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2J0Zl9kdW1wX3NvcnRlZC5leHBlY3RlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi41NDcwYjJiNDMyMjkxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkCkBAIC0wLDAgJiM0MzsxLDQ4IEBACiYjNDM7I2lmbmRlZiBfX1ZNTElOVVhfSF9fCiYjNDM7I2RlZmluZSBfX1ZNTElOVVhfSF9fCiYjNDM7CiYjNDM7I2lmbmRlZiBCUEZfTk9fUFJFU0VSVkVfQUNDRVNTX0lOREVYCiYjNDM7I3ByYWdtYSBjbGFuZyBhdHRyaWJ1dGUgcHVzaCAoX19hdHRyaWJ1dGVfXygocHJlc2VydmVfYWNjZXNzX2luZGV4KSksIGFwcGx5X3RvID0gcmVjb3JkKQomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNpZm5kZWYgX19rc3ltCiYjNDM7I2RlZmluZSBfX2tzeW0gX19hdHRyaWJ1dGVfXygoc2VjdGlvbigmIzM0Oy5rc3ltcyYjMzQ7KSkpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmbmRlZiBfX3dlYWsKJiM0MzsjZGVmaW5lIF9fd2VhayBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjaWZuZGVmIF9fYnBmX2Zhc3RjYWxsCiYjNDM7I2lmIF9faGFzX2F0dHJpYnV0ZShicGZfZmFzdGNhbGwpCiYjNDM7I2RlZmluZSBfX2JwZl9mYXN0Y2FsbCBfX2F0dHJpYnV0ZV9fKChicGZfZmFzdGNhbGwpKQomIzQzOyNlbHNlCiYjNDM7I2RlZmluZSBfX2JwZl9mYXN0Y2FsbAomIzQzOyNlbmRpZgomIzQzOyNlbmRpZgomIzQzOwomIzQzO2VudW0gewomIzQzOwlFMCA9IDEsCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgaG9sZXkgewomIzQzOwlpbnQgYzsKJiM0MzsJbG9uZzogMzI7CiYjNDM7CWxvbmc6IDMyOwomIzQzOwlpbnQgdGFpbDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBzIHsKJiM0MzsJaW50IGY7CiYjNDM7fTsKJiM0MzsKJiM0MzsKJiM0MzsvKiBCUEYga2Z1bmNzICovCiYjNDM7I2lmbmRlZiBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFUwomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNpZm5kZWYgQlBGX05PX1BSRVNFUlZFX0FDQ0VTU19JTkRFWAomIzQzOyNwcmFnbWEgY2xhbmcgYXR0cmlidXRlIHBvcAomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNlbmRpZiAvKiBfX1ZNTElOVVhfSF9fICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9idGZfZHVtcF91bnNvcnRlZC5leHBlY3RlZCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2J0Zl9kdW1wX3Vuc29ydGVkLmV4cGVjdGVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjQzMTBhZGMyZWQ1MTQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9idGZfZHVtcF91bnNvcnRlZC5leHBlY3RlZApAQCAtMCwwICYjNDM7MSw0OCBAQAomIzQzOyNpZm5kZWYgX19WTUxJTlVYX0hfXwomIzQzOyNkZWZpbmUgX19WTUxJTlVYX0hfXwomIzQzOwomIzQzOyNpZm5kZWYgQlBGX05PX1BSRVNFUlZFX0FDQ0VTU19JTkRFWAomIzQzOyNwcmFnbWEgY2xhbmcgYXR0cmlidXRlIHB1c2ggKF9fYXR0cmlidXRlX18oKHByZXNlcnZlX2FjY2Vzc19pbmRleCkpLCBhcHBseV90byA9IHJlY29yZCkKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjaWZuZGVmIF9fa3N5bQomIzQzOyNkZWZpbmUgX19rc3ltIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oJiMzNDsua3N5bXMmIzM0OykpKQomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNpZm5kZWYgX193ZWFrCiYjNDM7I2RlZmluZSBfX3dlYWsgX19hdHRyaWJ1dGVfXygod2VhaykpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmbmRlZiBfX2JwZl9mYXN0Y2FsbAomIzQzOyNpZiBfX2hhc19hdHRyaWJ1dGUoYnBmX2Zhc3RjYWxsKQomIzQzOyNkZWZpbmUgX19icGZfZmFzdGNhbGwgX19hdHRyaWJ1dGVfXygoYnBmX2Zhc3RjYWxsKSkKJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgX19icGZfZmFzdGNhbGwKJiM0MzsjZW5kaWYKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MztzdHJ1Y3QgaG9sZXkgewomIzQzOwlpbnQgYzsKJiM0MzsJbG9uZzogMzI7CiYjNDM7CWxvbmc6IDMyOwomIzQzOwlpbnQgdGFpbDsKJiM0Mzt9OwomIzQzOwomIzQzO2VudW0gewomIzQzOwlFMCA9IDEsCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcyB7CiYjNDM7CWludCBmOwomIzQzO307CiYjNDM7CiYjNDM7CiYjNDM7LyogQlBGIGtmdW5jcyAqLwomIzQzOyNpZm5kZWYgQlBGX05PX0tGVU5DX1BST1RPVFlQRVMKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjaWZuZGVmIEJQRl9OT19QUkVTRVJWRV9BQ0NFU1NfSU5ERVgKJiM0MzsjcHJhZ21hIGNsYW5nIGF0dHJpYnV0ZSBwb3AKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjZW5kaWYgLyogX19WTUxJTlVYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jCmluZGV4IDBhMmE0ZjBhMjc5NGIuLmM0OWZkZDkwZWIwMzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9oZWxwZXJzLmMKQEAgLTUzLDYgJiM0Mzs1Myw3IEBAIHN0YXRpYyBpbnQgcnVuX2NvbW1hbmQoY2hhciAqYXJncywgY2hhciAqb3V0cHV0X2J1Ziwgc2l6ZV90IG91dHB1dF9tYXhfbGVuKQogCXN0YXRpYyBjaGFyIGJwZnRvb2xfcGF0aFtQQVRIX01BWF0gPSB7fTsKIAlib29sIHN1cHByZXNzX291dHB1dCA9ICEob3V0cHV0X2J1ZiAmYW1wOyZhbXA7IG91dHB1dF9tYXhfbGVuKTsKIAljaGFyIGNvbW1hbmRbQlBGVE9PTF9GVUxMX0NNRF9NQVhfTEVOXTsKJiM0MzsJc2l6ZV90IG47CiAJRklMRSAqZjsKIAlpbnQgcmV0OwogCkBAIC02OCw4ICYjNDM7NjksMTAgQEAgc3RhdGljIGludCBydW5fY29tbWFuZChjaGFyICphcmdzLCBjaGFyICpvdXRwdXRfYnVmLCBzaXplX3Qgb3V0cHV0X21heF9sZW4pCiAJaWYgKCFmKQogCQlyZXR1cm4gMTsKIAotCWlmICghc3VwcHJlc3Nfb3V0cHV0KQotCQlmcmVhZChvdXRwdXRfYnVmLCAxLCBvdXRwdXRfbWF4X2xlbiwgZik7CiYjNDM7CWlmICghc3VwcHJlc3Nfb3V0cHV0KSB7CiYjNDM7CQluID0gZnJlYWQob3V0cHV0X2J1ZiwgMSwgb3V0cHV0X21heF9sZW4gLSAxLCBmKTsKJiM0MzsJCW91dHB1dF9idWZbbl0gPSAmIzM5O1wwJiMzOTs7CiYjNDM7CX0KIAlyZXQgPSBwY2xvc2UoZik7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9idGZfZHVtcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9idGZfZHVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ1YjI1MzAyYjBjODkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmMKQEAgLTAsMCAmIzQzOzEsMTc4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGZ0b29sX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2J0Zi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW1pdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtidGZfaGVscGVycy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RpbmdfaGVscGVycy5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIERVTVBfQlVGX1NaCQkoMTYgKiAxMDI0KQomIzQzOwomIzQzOyNkZWZpbmUgRVhQRUNURURfU09SVEVECQkmIzM0O2JwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkJiMzNDsKJiM0MzsjZGVmaW5lIEVYUEVDVEVEX1VOU09SVEVECSYjMzQ7YnBmdG9vbF9idGZfZHVtcF91bnNvcnRlZC5leHBlY3RlZCYjMzQ7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKglzdHJ1Y3QgaG9sZXkgewomIzQzOyAqCQlpbnQgYzsKJiM0MzsgKgkJJmx0OzY0LWJpdCBob2xlJmd0OwomIzQzOyAqCQlpbnQgdGFpbDsKJiM0MzsgKgl9OwomIzQzOyAqCWVudW0geyBFMCA9IDEgfTsKJiM0MzsgKglzdHJ1Y3QgcyB7IGludCBmOyB9OwomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgYnRmICpta19idGYodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBidGYgKmJ0ZjsKJiM0MzsKJiM0MzsJYnRmID0gYnRmX19uZXdfZW1wdHkoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgJiMzNDtuZXdfZW1wdHkmIzM0OykpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJYnRmX19hZGRfaW50KGJ0ZiwgJiMzNDtpbnQmIzM0OywgNCwgQlRGX0lOVF9TSUdORUQpOwomIzQzOwlidGZfX2FkZF9pbnQoYnRmLCAmIzM0O2xvbmcgaW50JiMzNDssIDQsIEJURl9JTlRfU0lHTkVEKTsKJiM0MzsKJiM0MzsJYnRmX19hZGRfc3RydWN0KGJ0ZiwgJiMzNDtob2xleSYjMzQ7LCAxNik7CiYjNDM7CWJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgJiMzNDtjJiMzNDssIDEsIDAsIDApOwomIzQzOwlidGZfX2FkZF9maWVsZChidGYsICYjMzQ7dGFpbCYjMzQ7LCAxLCA5NiwgMCk7CiYjNDM7CiYjNDM7CWJ0Zl9fYWRkX2VudW0oYnRmLCBOVUxMLCA0KTsKJiM0MzsJYnRmX19hZGRfZW51bV92YWx1ZShidGYsICYjMzQ7RTAmIzM0OywgMSk7CiYjNDM7CiYjNDM7CWJ0Zl9fYWRkX3N0cnVjdChidGYsICYjMzQ7cyYjMzQ7LCA0KTsKJiM0MzsJYnRmX19hZGRfZmllbGQoYnRmLCAmIzM0O2YmIzM0OywgMSwgMCwgMCk7CiYjNDM7CiYjNDM7CVZBTElEQVRFX1JBV19CVEYoCiYjNDM7CQlidGYsCiYjNDM7CQkmIzM0O1sxXSBJTlQgJiMzOTtpbnQmIzM5OyBzaXplPTQgYml0c19vZmZzZXQ9MCBucl9iaXRzPTMyIGVuY29kaW5nPVNJR05FRCYjMzQ7LAomIzQzOwkJJiMzNDtbMl0gSU5UICYjMzk7bG9uZyBpbnQmIzM5OyBzaXplPTQgYml0c19vZmZzZXQ9MCBucl9iaXRzPTMyIGVuY29kaW5nPVNJR05FRCYjMzQ7LAomIzQzOwkJJiMzNDtbM10gU1RSVUNUICYjMzk7aG9sZXkmIzM5OyBzaXplPTE2IHZsZW49MlxuJiMzNDsKJiM0MzsJCSYjMzQ7XHQmIzM5O2MmIzM5OyB0eXBlX2lkPTEgYml0c19vZmZzZXQ9MFxuJiMzNDsKJiM0MzsJCSYjMzQ7XHQmIzM5O3RhaWwmIzM5OyB0eXBlX2lkPTEgYml0c19vZmZzZXQ9OTYmIzM0OywKJiM0MzsJCSYjMzQ7WzRdIEVOVU0gJiMzOTsoYW5vbikmIzM5OyBlbmNvZGluZz1VTlNJR05FRCBzaXplPTQgdmxlbj0xXG4mIzM0OwomIzQzOwkJJiMzNDtcdCYjMzk7RTAmIzM5OyB2YWw9MSYjMzQ7LAomIzQzOwkJJiMzNDtbNV0gU1RSVUNUICYjMzk7cyYjMzk7IHNpemU9NCB2bGVuPTFcbiYjMzQ7CiYjNDM7CQkmIzM0O1x0JiMzOTtmJiMzOTsgdHlwZV9pZD0xIGJpdHNfb2Zmc2V0PTAmIzM0Oyk7CiYjNDM7CiYjNDM7CXJldHVybiBidGY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnRmX3RvX3RtcGZpbGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjaGFyICpwYXRoKQomIzQzO3sKJiM0MzsJc3NpemVfdCB3cml0dGVuOwomIzQzOwljb25zdCB2b2lkICpyYXc7CiYjNDM7CV9fdTMyIHN6OwomIzQzOwlpbnQgZmQ7CiYjNDM7CiYjNDM7CXJhdyA9IGJ0Zl9fcmF3X2RhdGEoYnRmLCAmYW1wO3N6KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHJhdywgJiMzNDtyYXdfZGF0YSYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJc25wcmludGYocGF0aCwgUEFUSF9NQVgsICYjMzQ7L3RtcC9icGZ0b29sX2J0Zl9kdW1wLlhYWFhYWCYjMzQ7KTsKJiM0MzsJZmQgPSBta3N0ZW1wKHBhdGgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChmZCwgJiMzNDtta3N0ZW1wX2J0ZiYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJd3JpdHRlbiA9IHdyaXRlKGZkLCByYXcsIHN6KTsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlpZiAoIUFTU0VSVF9FUSh3cml0dGVuLCBzeiwgJiMzNDt3cml0ZV9idGYmIzM0OykpIHsKJiM0MzsJCXVubGluayhwYXRoKTsKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNoYXIgKmR1bXBfYyhjb25zdCBjaGFyICpidGZfcGF0aCwgYm9vbCBzb3J0ZWQpCiYjNDM7ewomIzQzOwljaGFyIGFyZ3NbTUFYX0JQRlRPT0xfQ01EX0xFTl07CiYjNDM7CWNoYXIgKmJ1ZjsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJYnVmID0gbWFsbG9jKERVTVBfQlVGX1NaKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGJ1ZiwgJiMzNDthbGxvY19kdW1wJiMzNDspKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXNucHJpbnRmKGFyZ3MsIHNpemVvZihhcmdzKSwgJiMzNDtidGYgZHVtcCBmaWxlICVzIGZvcm1hdCBjJXMmIzM0OywKJiM0MzsJCSBidGZfcGF0aCwgc29ydGVkID8gJiMzNDsmIzM0OyA6ICYjMzQ7IHVuc29ydGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBnZXRfYnBmdG9vbF9jb21tYW5kX291dHB1dChhcmdzLCBidWYsIERVTVBfQlVGX1NaKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2J0Zl9kdW1wX2Zvcm1hdF9jJiMzNDspKSB7CiYjNDM7CQlmcmVlKGJ1Zik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gYnVmOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY2hhciAqcmVhZF9leHBlY3RlZChjb25zdCBjaGFyICpwYXRoKQomIzQzO3sKJiM0MzsJY2hhciAqYnVmID0gTlVMTDsKJiM0MzsJc2l6ZV90IGNhcCA9IDA7CiYjNDM7CUZJTEUgKmY7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWYgPSBmb3BlbihwYXRoLCAmIzM0O3ImIzM0Oyk7CiYjNDM7CWlmICghZikgewomIzQzOwkJZXJyID0gZXJybm87CiYjNDM7CQlQUklOVF9GQUlMKCYjMzQ7Y2FuJiMzOTt0IG9wZW4gZXhwZWN0ZWQgb3V0cHV0ICYjMzk7JXMmIzM5OzogZXJybm8gJWRcbiYjMzQ7LCBwYXRoLCBlcnIpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogbm8gTlVMIGluIGEgZ2VuZXJhdGVkIGhlYWRlciwgc28gdGhpcyByZWFkcyB0byB0aGUgZW5kICovCiYjNDM7CWlmIChnZXRkZWxpbSgmYW1wO2J1ZiwgJmFtcDtjYXAsICYjMzk7XDAmIzM5OywgZikgJmx0OyAwKSB7CiYjNDM7CQllcnIgPSBlcnJubzsKJiM0MzsJCVBSSU5UX0ZBSUwoJiMzNDtjYW4mIzM5O3QgcmVhZCBleHBlY3RlZCBvdXRwdXQgJiMzOTslcyYjMzk7OiBlcnJubyAlZFxuJiMzNDssIHBhdGgsIGVycik7CiYjNDM7CQlmcmVlKGJ1Zik7CiYjNDM7CQlidWYgPSBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZjbG9zZShmKTsKJiM0MzsJcmV0dXJuIGJ1ZjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9kdW1wKGNvbnN0IGNoYXIgKmJ0Zl9wYXRoLCBib29sIHNvcnRlZCkKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKmV4cF9wYXRoOwomIzQzOwljaGFyICpkdW1wLCAqZXhwOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlleHBfcGF0aCA9IHNvcnRlZCA/IEVYUEVDVEVEX1NPUlRFRCA6IEVYUEVDVEVEX1VOU09SVEVEOwomIzQzOwomIzQzOwlkdW1wID0gZHVtcF9jKGJ0Zl9wYXRoLCBzb3J0ZWQpOwomIzQzOwlpZiAoIWR1bXApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWV4cCA9IHJlYWRfZXhwZWN0ZWQoZXhwX3BhdGgpOwomIzQzOwlpZiAoIWV4cCkKJiM0MzsJCWdvdG8gb3V0X2R1bXA7CiYjNDM7CiYjNDM7CWVyciA9IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChkdW1wLCBleHApOwomIzQzOwlBU1NFUlRfT0soZXJyLCBzb3J0ZWQgPyAmIzM0O2NtcF9zb3J0ZWQmIzM0OyA6ICYjMzQ7Y21wX3Vuc29ydGVkJiMzNDspOwomIzQzOwomIzQzOwlmcmVlKGV4cCk7CiYjNDM7b3V0X2R1bXA6CiYjNDM7CWZyZWUoZHVtcCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9icGZ0b29sX2J0Zl9kdW1wKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwlzdHJ1Y3QgYnRmICpidGY7CiYjNDM7CiYjNDM7CWJ0ZiA9IG1rX2J0ZigpOwomIzQzOwlpZiAoIWJ0ZikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKGJ0Zl90b190bXBmaWxlKGJ0ZiwgcGF0aCkpCiYjNDM7CQlnb3RvIG91dF9idGY7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7Y19zb3J0ZWQmIzM0OykpCiYjNDM7CQl0ZXN0X2R1bXAocGF0aCwgdHJ1ZSk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7Y191bnNvcnRlZCYjMzQ7KSkKJiM0MzsJCXRlc3RfZHVtcChwYXRoLCBmYWxzZSk7CiYjNDM7CiYjNDM7CXVubGluayhwYXRoKTsKJiM0MztvdXRfYnRmOgomIzQzOwlidGZfX2ZyZWUoYnRmKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfZHVtcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX2R1bXAuYwppbmRleCA5ZjFiNTBlMDdhMjk4Li5mZTA0YTk1NWQ0NmNjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfZHVtcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9kdW1wLmMKQEAgLTEsOCAmIzQzOzEsNyBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKICNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YnBmL2J0Zi5oJmd0OwotCi1zdGF0aWMgaW50IGR1cmF0aW9uID0gMDsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RpbmdfaGVscGVycy5oJiMzNDsKIAogdm9pZCBidGZfZHVtcF9wcmludGYodm9pZCAqY3R4LCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKIHsKQEAgLTQ1LDEyICYjNDM7NDQsNzUgQEAgc3RhdGljIGludCBidGZfZHVtcF9hbGxfdHlwZXMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB2b2lkICpjdHgpCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzOy8qCiYjNDM7ICogRXhwZWN0ZWQgb3V0cHV0IGlzIGVtYmVkZGVkIGluIHRoZSB0ZXN0IGNhc2Ugc291cmNlLCBiZXR3ZWVuCiYjNDM7ICogU1RBUlQtRVhQRUNURUQtT1VUUFVUIGFuZCBFTkQtRVhQRUNURUQtT1VUUFVUIG1hcmtlcnMuIEEgcmVnaW9uIGlzIGVpdGhlcgomIzQzOyAqIHBsYWluIEMsIHdoZXJlIGEgZGVjbGFyYXRpb24gZG91YmxlcyBhcyBpdHMgb3duIGV4cGVjdGF0aW9uLCBvciBDIHdyYXBwZWQgaW4KJiM0MzsgKiBhIGJsb2NrIGNvbW1lbnQsIHdoZXJlIHRoZSByZW5kZXJlZCBmb3JtIGRpZmZlcnMgZnJvbSB0aGUgc291cmNlLiBBbGwKJiM0MzsgKiByZWdpb25zIG9mIGEgZmlsZSBjb25jYXRlbmF0ZSBpbnRvIG9uZSBleHBlY3RhdGlvbiwgY29tcGFyZWQgYWdhaW5zdCBvbmUKJiM0MzsgKiB3aG9sZS1maWxlIGR1bXAuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIGEgbWFsbG9jJiMzOTtkIGJ1ZmZlciBmb3IgdGhlIGNhbGxlciB0byBmcmVlLCBvciBOVUxMIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGNoYXIgKnJlYWRfZXhwZWN0ZWRfb3V0cHV0KGNvbnN0IGNoYXIgKnBhdGgpCiYjNDM7ewomIzQzOwlzaXplX3Qgb3V0X3N6ID0gMCwgbGluZV9jYXAgPSAwOwomIzQzOwljaGFyICpvdXQgPSBOVUxMLCAqbGluZSA9IE5VTEw7CiYjNDM7CWJvb2wgaW5fcmVnaW9uID0gZmFsc2U7CiYjNDM7CUZJTEUgKmYsICpvdXRfZmlsZTsKJiM0MzsKJiM0MzsJZiA9IGZvcGVuKHBhdGgsICYjMzQ7ciYjMzQ7KTsKJiM0MzsJaWYgKCFmKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CW91dF9maWxlID0gb3Blbl9tZW1zdHJlYW0oJmFtcDtvdXQsICZhbXA7b3V0X3N6KTsKJiM0MzsJaWYgKCFvdXRfZmlsZSkgewomIzQzOwkJZmNsb3NlKGYpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJd2hpbGUgKGdldGxpbmUoJmFtcDtsaW5lLCAmYW1wO2xpbmVfY2FwLCBmKSAmZ3Q7IDApIHsKJiM0MzsJCWNvbnN0IGNoYXIgKnA7CiYjNDM7CiYjNDM7CQlpZiAoc3Ryc3RyKGxpbmUsICYjMzQ7U1RBUlQtRVhQRUNURUQtT1VUUFVUJiMzNDspKSB7CiYjNDM7CQkJaW5fcmVnaW9uID0gdHJ1ZTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCWlmIChzdHJzdHIobGluZSwgJiMzNDtFTkQtRVhQRUNURUQtT1VUUFVUJiMzNDspKQomIzQzOwkJCWluX3JlZ2lvbiA9IGZhbHNlOwomIzQzOwkJaWYgKCFpbl9yZWdpb24pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlwID0gbGluZSAmIzQzOyBzdHJzcG4obGluZSwgJiMzNDsgXHQmIzM0Oyk7CiYjNDM7CiYjNDM7CQkvKiBvcGVuaW5nIG9yIGNsb3NpbmcgbGluZSBvZiBhIGNvbW1lbnRlZCBvdXQgcmVnaW9uICovCiYjNDM7CQlpZiAoIXN0cm5jbXAocCwgJiMzNDsvKiYjMzQ7LCAyKSB8fCAhc3RybmNtcChwLCAmIzM0OyovJiMzNDssIDIpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIE9ubHkgYSAmIzM5OyomIzM5OyBkaXJlY3RseSBhZnRlciB0aGUgaW5kZW50YXRpb24gaXMgYSBjb21tZW50CiYjNDM7CQkgKiBwcmVmaXguIFdpdGhvdXQgb25lIHRoZSBsaW5lIGlzIHRha2VuIGFzIGl0IGlzLCBsZWFkaW5nCiYjNDM7CQkgKiB3aGl0ZXNwYWNlIGluY2x1ZGVkLgomIzQzOwkJICovCiYjNDM7CQlwID0gKnAgPT0gJiMzOTsqJiMzOTsgPyBwICYjNDM7IDEgOiBsaW5lOwomIzQzOwomIzQzOwkJZnB1dHMocCwgb3V0X2ZpbGUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZyZWUobGluZSk7CiYjNDM7CWZjbG9zZShmKTsKJiM0MzsJZmNsb3NlKG91dF9maWxlKTsKJiM0MzsJcmV0dXJuIG91dDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHRlc3RfYnRmX2R1bXBfY2FzZShpbnQgbiwgc3RydWN0IGJ0Zl9kdW1wX3Rlc3RfY2FzZSAqdCkKIHsKLQljaGFyIHRlc3RfZmlsZVsyNTZdLCBvdXRfZmlsZVsyNTZdLCBkaWZmX2NtZFsxMDI0XTsKJiM0MzsJY2hhciAqZHVtcCA9IE5VTEwsICpleHBlY3RlZCA9IE5VTEw7CiAJc3RydWN0IGJ0ZiAqYnRmID0gTlVMTDsKLQlpbnQgZXJyID0gMCwgZmQgPSAtMTsKLQlGSUxFICpmID0gTlVMTDsKJiM0MzsJY2hhciB0ZXN0X2ZpbGVbMjU2XTsKJiM0MzsJc2l6ZV90IGR1bXBfc3ogPSAwOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsJRklMRSAqZjsKIAogCXNucHJpbnRmKHRlc3RfZmlsZSwgc2l6ZW9mKHRlc3RfZmlsZSksICYjMzQ7JXMuYnBmLm8mIzM0OywgdC0mZ3Q7ZmlsZSk7CiAKQEAgLTY5LDI5ICYjNDM7MTMxLDIxIEBAIHN0YXRpYyBpbnQgdGVzdF9idGZfZHVtcF9jYXNlKGludCBuLCBzdHJ1Y3QgYnRmX2R1bXBfdGVzdF9jYXNlICp0KQogCWlmICghdC0mZ3Q7a25vd25fcHRyX3N6KSB7CiAJCWJ0Zl9fc2V0X3BvaW50ZXJfc2l6ZShidGYsIDgpOwogCX0gZWxzZSB7Ci0JCUNIRUNLKGJ0Zl9fcG9pbnRlcl9zaXplKGJ0ZikgIT0gOCwgJiMzNDtwdHJfc3omIzM0OywgJiMzNDtleHAgJWQsIGdvdCAlenVcbiYjMzQ7LAotCQkgICAgICA4LCBidGZfX3BvaW50ZXJfc2l6ZShidGYpKTsKLQl9CiYjNDM7CQlzaXplX3QgcHRyX3N6ID0gYnRmX19wb2ludGVyX3NpemUoYnRmKTsKIAotCXNucHJpbnRmKG91dF9maWxlLCBzaXplb2Yob3V0X2ZpbGUpLCAmIzM0Oy90bXAvJXMub3V0cHV0LlhYWFhYWCYjMzQ7LCB0LSZndDtmaWxlKTsKLQlmZCA9IG1rc3RlbXAob3V0X2ZpbGUpOwotCWlmICghQVNTRVJUX0dFKGZkLCAwLCAmIzM0O2NyZWF0ZV90bXAmIzM0OykpIHsKLQkJZXJyID0gZmQ7Ci0JCWdvdG8gZG9uZTsKJiM0MzsJCUFTU0VSVF9FUShwdHJfc3osIChzaXplX3QpOCwgJiMzNDtwdHJfc3omIzM0Oyk7CiAJfQotCWYgPSBmZG9wZW4oZmQsICYjMzQ7dyYjMzQ7KTsKLQlpZiAoQ0hFQ0soZiA9PSBOVUxMLCAmIzM0O29wZW5fdG1wJiMzNDssICAmIzM0O2ZhaWxlZCB0byBvcGVuIGZpbGU6ICVzKCVkKVxuJiMzNDssCi0JCSAgc3RyZXJyb3IoZXJybm8pLCBlcnJubykpIHsKLQkJY2xvc2UoZmQpOwomIzQzOwomIzQzOwlmID0gb3Blbl9tZW1zdHJlYW0oJmFtcDtkdW1wLCAmYW1wO2R1bXBfc3opOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoZiwgJiMzNDtvcGVuX21lbXN0cmVhbSYjMzQ7KSkgewomIzQzOwkJZXJyID0gLWVycm5vOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJZXJyID0gYnRmX2R1bXBfYWxsX3R5cGVzKGJ0ZiwgZik7CiAJZmNsb3NlKGYpOwotCWNsb3NlKGZkKTsKLQlpZiAoQ0hFQ0soZXJyLCAmIzM0O2J0Zl9kdW1wJiMzNDssICYjMzQ7ZmFpbHVyZSBkdXJpbmcgQyBkdW1waW5nOiAlZFxuJiMzNDssIGVycikpIHsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2J0Zl9kdW1wJiMzNDspKQogCQlnb3RvIGRvbmU7Ci0JfQogCiAJc25wcmludGYodGVzdF9maWxlLCBzaXplb2YodGVzdF9maWxlKSwgJiMzNDtwcm9ncy8lcy5jJiMzNDssIHQtJmd0O2ZpbGUpOwogCWlmIChhY2Nlc3ModGVzdF9maWxlLCBSX09LKSA9PSAtMSkKQEAgLTEwMCwyOCAmIzQzOzE1NCwyMyBAQCBzdGF0aWMgaW50IHRlc3RfYnRmX2R1bXBfY2FzZShpbnQgbiwgc3RydWN0IGJ0Zl9kdW1wX3Rlc3RfY2FzZSAqdCkKIAkJICogd2l0aG91dCBwcmVzZXJ2aW5nIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlLgogCQkgKi8KIAkJc25wcmludGYodGVzdF9maWxlLCBzaXplb2YodGVzdF9maWxlKSwgJiMzNDslcy5jJiMzNDssIHQtJmd0O2ZpbGUpOwotCS8qCi0JICogRGlmZiB0ZXN0IG91dHB1dCBhbmQgZXhwZWN0ZWQgdGVzdCBvdXRwdXQsIGNvbnRhaW5lZCBiZXR3ZWVuCi0JICogU1RBUlQtRVhQRUNURUQtT1VUUFVUIGFuZCBFTkQtRVhQRUNURUQtT1VUUFVUIGxpbmVzIGluIHRlc3QgY2FzZS4KLQkgKiBGb3IgZXhwZWN0ZWQgb3V0cHV0IGxpbmVzLCBldmVyeXRoaW5nIGJlZm9yZSAmIzM5OyomIzM5OyBpcyBzdHJpcHBlZCBvdXQuCi0JICogQWxzbyBsaW5lcyBjb250YWluaW5nIGNvbW1lbnQgc3RhcnQgYW5kIGNvbW1lbnQgZW5kIG1hcmtlcnMgYXJlCi0JICogaWdub3JlZC4gCi0JICovCi0Jc25wcmludGYoZGlmZl9jbWQsIHNpemVvZihkaWZmX2NtZCksCi0JCSAmIzM0O2F3ayAmIzM5Oy9TVEFSVC1FWFBFQ1RFRC1PVVRQVVQve291dD0xO25leHR9ICYjMzQ7Ci0JCSAmIzM0Oy9FTkQtRVhQRUNURUQtT1VUUFVUL3tvdXQ9MH0gJiMzNDsKLQkJICYjMzQ7L1xcL1xcKnxcXCpcXC8ve25leHR9ICYjMzQ7IC8qIGlnbm9yZSBjb21tZW50IHN0YXJ0L2VuZCBsaW5lcyAqLwotCQkgJiMzNDtvdXQge3N1YigvXlsgXFx0XSpcXCovLCBcJiMzNDtcJiMzNDspOyBwcmludH0mIzM5OyAmIzM5OyVzJiMzOTsgfCBkaWZmIC11IC0gJiMzOTslcyYjMzk7JiMzNDssCi0JCSB0ZXN0X2ZpbGUsIG91dF9maWxlKTsKLQllcnIgPSBzeXN0ZW0oZGlmZl9jbWQpOwotCWlmIChDSEVDSyhlcnIsICYjMzQ7ZGlmZiYjMzQ7LAotCQkgICYjMzQ7ZGlmZmVyaW5nIHRlc3Qgb3V0cHV0LCBvdXRwdXQ9JXMsIGVycj0lZCwgZGlmZiBjbWQ6XG4lc1xuJiMzNDssCi0JCSAgb3V0X2ZpbGUsIGVyciwgZGlmZl9jbWQpKQomIzQzOwomIzQzOwlleHBlY3RlZCA9IHJlYWRfZXhwZWN0ZWRfb3V0cHV0KHRlc3RfZmlsZSk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihleHBlY3RlZCwgJiMzNDtyZWFkX2V4cGVjdGVkX291dHB1dCYjMzQ7KSkgewomIzQzOwkJZXJyID0gLWVycm5vOwogCQlnb3RvIGRvbmU7CiYjNDM7CX0KIAotCXJlbW92ZShvdXRfZmlsZSk7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBtaXNtYXRjaCBoYXMgYWxyZWFkeSBiZWVuIHJlcG9ydGVkLCBzbyB0aGlzIG9ubHkgaGFzIHRvCiYjNDM7CSAqIHJlZ2lzdGVyIHRoZSBmYWlsdXJlLiBBU1NFUlRfT0soKSB3b3VsZCBhcHBlbmQgYSBzdGFsZSBlcnJubyB0byBpdC4KJiM0MzsJICovCiYjNDM7CWVyciA9IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChkdW1wLCBleHBlY3RlZCk7CiYjNDM7CUFTU0VSVF9FUShlcnIsIDAsICYjMzQ7Y29tcGFyZV90ZXh0X3RvX2V4cGVjdGVkJiMzNDspOwogCiBkb25lOgomIzQzOwlmcmVlKGV4cGVjdGVkKTsKJiM0MzsJZnJlZShkdW1wKTsKIAlidGZfX2ZyZWUoYnRmKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ190ZXN0c19mcmFtZXdvcmsuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Byb2dfdGVzdHNfZnJhbWV3b3JrLmMKaW5kZXggNzYwN2NmYzI0MDhjMi4uZDExMWZlMTA1NDQ3NiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ190ZXN0c19mcmFtZXdvcmsuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wcm9nX3Rlc3RzX2ZyYW1ld29yay5jCkBAIC0xNzksMyAmIzQzOzE3OSwyNiBAQCB2b2lkIHRlc3RfcHJvZ190ZXN0c19mcmFtZXdvcmtfZXhwZWN0ZWRfbXNncyh2b2lkKQogCQl9CiAJfQogfQomIzQzOwomIzQzO3ZvaWQgdGVzdF9wcm9nX3Rlc3RzX2ZyYW1ld29ya19jb21wYXJlX3RleHQodm9pZCkKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7Y29tcGFyZV90ZXh0X21hdGNoJiMzNDspKSB7CiYjNDM7CQllcnIgPSBjb21wYXJlX3RleHRfdG9fZXhwZWN0ZWQoJiMzNDtzYW1lXG4mIzM0OywgJiMzNDtzYW1lXG4mIzM0Oyk7CiYjNDM7CQlBU1NFUlRfRVEoZXJyLCAwLCAmIzM0O21hdGNoX3JjJiMzNDspOwomIzQzOwkJdGVzdF9fZW5kX3N1YnRlc3QoKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2NvbXBhcmVfdGV4dF9taXNtYXRjaCYjMzQ7KSkgewomIzQzOwkJZXJyID0gY29tcGFyZV90ZXh0X3RvX2V4cGVjdGVkKCYjMzQ7bGluZSB0d29cbiYjMzQ7LCAmIzM0O2xpbmUgb25lXG4mIzM0Oyk7CiYjNDM7CQlmZmx1c2goc3Rkb3V0KTsKJiM0MzsKJiM0MzsJCUFTU0VSVF9FUShlcnIsIC0xLCAmIzM0O21pc21hdGNoX3JjJiMzNDspOwomIzQzOwkJQVNTRVJUX0hBU19TVUJTVFIoZW52LnN1YnRlc3Rfc3RhdGUtJmd0O2xvZ19idWYsICYjMzQ7LWxpbmUgb25lJiMzNDssCiYjNDM7CQkJCSAgJiMzNDtkaWZmX2hhc19leHBlY3RlZCYjMzQ7KTsKJiM0MzsJCUFTU0VSVF9IQVNfU1VCU1RSKGVudi5zdWJ0ZXN0X3N0YXRlLSZndDtsb2dfYnVmLCAmIzM0OyYjNDM7bGluZSB0d28mIzM0OywKJiM0MzsJCQkJICAmIzM0O2RpZmZfaGFzX2FjdHVhbCYjMzQ7KTsKJiM0MzsJCXRlc3RfX2VuZF9zdWJ0ZXN0KCk7CiYjNDM7CX0KJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmMKaW5kZXggYzk3MGU3NzkzZGZjYi4uM2YwMzc5NDllOTc4OSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuYwpAQCAtNTM0LDMgJiM0Mzs1MzQsNDYgQEAgaW50IHN0YWNrX21wcm90ZWN0KHZvaWQpCiAJCSAgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVDKTsKIAlyZXR1cm4gcmV0OwogfQomIzQzOwomIzQzO2ludCBjb21wYXJlX3RleHRfdG9fZXhwZWN0ZWQoY29uc3QgY2hhciAqYWN0dWFsLCBjb25zdCBjaGFyICpleHBlY3RlZCkKJiM0Mzt7CiYjNDM7CWNoYXIgZXhwX3BhdGhbXSA9ICYjMzQ7L3RtcC9zZWxmdGVzdF9leHBlY3RlZC5YWFhYWFgmIzM0OzsKJiM0MzsJY2hhciBhY3RfcGF0aFtdID0gJiMzNDsvdG1wL3NlbGZ0ZXN0X2FjdHVhbC5YWFhYWFgmIzM0OzsKJiM0MzsJY2hhciBidWZbNTEyXSwgY21kWzEyOF07CiYjNDM7CWludCBleHBfZmQsIGFjdF9mZDsKJiM0MzsJRklMRSAqcDsKJiM0MzsKJiM0MzsJaWYgKCFzdHJjbXAoYWN0dWFsLCBleHBlY3RlZCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZXhwX2ZkID0gbWtzdGVtcChleHBfcGF0aCk7CiYjNDM7CWFjdF9mZCA9IG1rc3RlbXAoYWN0X3BhdGgpOwomIzQzOwlpZiAoZXhwX2ZkICZsdDsgMCB8fCBhY3RfZmQgJmx0OyAwKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZG91dCwgJiMzNDtvdXRwdXQgZGlmZmVycywgbm8gdGVtcCBmaWxlIGZvciBhIGRpZmZcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWRwcmludGYoZXhwX2ZkLCAmIzM0OyVzJiMzNDssIGV4cGVjdGVkKTsKJiM0MzsJZHByaW50ZihhY3RfZmQsICYjMzQ7JXMmIzM0OywgYWN0dWFsKTsKJiM0MzsKJiM0MzsJc25wcmludGYoY21kLCBzaXplb2YoY21kKSwgJiMzNDtkaWZmIC11ICYjMzk7JXMmIzM5OyAmIzM5OyVzJiMzOTsmIzM0OywgZXhwX3BhdGgsIGFjdF9wYXRoKTsKJiM0MzsJcCA9IHBvcGVuKGNtZCwgJiMzNDtyJiMzNDspOwomIzQzOwlpZiAoIXApIHsKJiM0MzsJCWZwcmludGYoc3Rkb3V0LCAmIzM0O291dHB1dCBkaWZmZXJzLCAmIzM5OyVzJiMzOTsgZGlkIG5vdCBydW5cbiYjMzQ7LCBjbWQpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHApKQomIzQzOwkJZnB1dHMoYnVmLCBzdGRvdXQpOwomIzQzOwlwY2xvc2UocCk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlpZiAoZXhwX2ZkICZndDs9IDApIHsKJiM0MzsJCWNsb3NlKGV4cF9mZCk7CiYjNDM7CQl1bmxpbmsoZXhwX3BhdGgpOwomIzQzOwl9CiYjNDM7CWlmIChhY3RfZmQgJmd0Oz0gMCkgewomIzQzOwkJY2xvc2UoYWN0X2ZkKTsKJiM0MzsJCXVubGluayhhY3RfcGF0aCk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIC0xOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaAppbmRleCAyZWRjNmZiN2ZjNTIxLi4xYzU4YTJmMDhiNjQ1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oCkBAIC02MSw0ICYjNDM7NjEsNyBAQCBpbnQgdGVzdGluZ19wcm9nX2ZsYWdzKHZvaWQpOwogYm9vbCBpc19qaXRfZW5hYmxlZCh2b2lkKTsKIGludCBzdGFja19tcHJvdGVjdCh2b2lkKTsKIAomIzQzOy8qIFJ1bnMgZGlmZigxKSBvbiBtaXNtYXRjaCAqLwomIzQzO2ludCBjb21wYXJlX3RleHRfdG9fZXhwZWN0ZWQoY29uc3QgY2hhciAqYWN0dWFsLCBjb25zdCBjaGFyICpleHBlY3RlZCk7CiYjNDM7CiAjZW5kaWYgLyogX19URVNUSU5HX0hFTFBFUlNfSCAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjMxCgkJCQkJCQlvdXRwdXQ6IDYyCgkJCQkJCQl0aG91Z2h0czogNzQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGV2ZW4gZG9pbmcuIFRoZSBtb2RpZmllZCBmaWxlcyBhcmUgYWxsIGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBgdG9vbHMvYnBmL2JwZnRvb2wvYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiAqQ3J1Y2lhbGx5Kiwgbm90aGluZyBpcyB0b3VjaGluZyB0aGUga2VybmVsIHNvdXJjZSBkaXJlY3RseSDigJMgbm8gYGtlcm5lbC9gLCBgbmV0L2AsIGBkcml2ZXJzL2AsIGV0Yy4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHVzZXJzcGFjZSB0b29scywgYGJwZnRvb2xgLCBhbmQgaXRzIHNlbGZ0ZXN0cy4gVGhhdCYjMzk7cyBhIGh1Z2UgY2x1ZS4KCk5vdywgSSBoYXZlIHRvIGFwcGx5IHRoZSBjcml0ZXJpYS4gV2UmIzM5O3JlIGxvb2tpbmcgZm9yIHdoZXRoZXIgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGtlcm5lbCB2dWxuZXJhYmlsaXR5IGRpc2NvdmVyeSB1c2luZyBzeXprYWxsZXIuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBpdCBvbmx5IG1vZGlmaWVzIGNlcnRhaW4gdHlwZXMgb2YgdGhpbmdzOiBkb2N1bWVudGF0aW9uLCBLY29uZmlnIGZpbGVzLCBjb21tZW50cywgZGVjb3JhdGl2ZSBjaGFuZ2VzIGxpa2UgbG9nZ2luZywgY29uc3RhbnRzIHRoYXQgZG9uJiMzOTt0IGNoYW5nZSBleGVjdXRpb24sIHVucmVhY2hhYmxlIGNvZGUsIG9yIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUtZGVwZW5kZW50IGRyaXZlcnMgb3IgdGVhcmRvd24gY2FsbGJhY2tzLiBJJiMzOTt2ZSBzZWVuIHRoZXNlIGJlZm9yZSwgc28gSSBoYXZlIGEgbWVudGFsIGNoZWNrbGlzdC4KCkxvb2tpbmcgYXQgdGhlIGZpbGVzIGFnYWluLCBJIHNlZToKCiogICBgdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmNgOiBicGZ0b29sLCBhIHVzZXJzcGFjZSB0b29sCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4uLmA6IE11bHRpcGxlIHNlbGZ0ZXN0IGZpbGVzIHJlbGF0ZWQgdG8gYnBmdG9vbC4KCkV2ZXJ5dGhpbmcgaXMgZmlybWx5IGluIHRoZSBgdG9vbHMvYCByZWFsbS4gVGhlc2UgYXJlICpub3QqIGtlcm5lbCBtb2RpZmljYXRpb25zLiBTeXprYWxsZXIgdGFyZ2V0cyB0aGUga2VybmVsIGl0c2VsZiwgYW5kIGNoYW5nZXMgaW4gdGhlc2UgbG9jYXRpb25zIGRvbiYjMzk7dCB0b3VjaCB0aGUga2VybmVsIGJpbmFyeSBvciBjaGFuZ2UgaXRzIGV4ZWN1dGlvbiBsb2dpYy4gCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuIEkgZG9uJiMzOTt0IHNlZSBhbnkgb3RoZXIgZmFjdG9ycyB0aGF0IHdvdWxkIGNoYW5nZSB0aGF0IGNvbmNsdXNpb24uIE5vIG5lZWQgdG8gbG9vayBmb3IgYW55IG90aGVyIGNvbmZpZyBvciB0b29scyB0byB2ZXJpZnkuIEl0IGlzIHZlcnkgdW5hbWJpZ3VvdXMuCgpUaW1lIHRvIGV4ZWN1dGUgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xpbmcgKGJwZnRvb2wpIGFuZCBCUEYgc2VsZnRlc3RzIHVuZGVyIHRvb2xzLywgd2l0aCBubyBjaGFuZ2VzIHRvIGtlcm5lbCBjb2RlIG9yIHJ1bnRpbWUgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0b29saW5nIChicGZ0b29sKSBhbmQgQlBGIHNlbGZ0ZXN0cyB1bmRlciB0b29scy8sIHdpdGggbm8gY2hhbmdlcyB0byBrZXJuZWwgY29kZSBvciBydW50aW1lIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDI6NTUuMzQ0NzA3Njk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcwMTQ5NDMxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xpbmcgKGJwZnRvb2wpIGFuZCBCUEYgc2VsZnRlc3RzIHVuZGVyIHRvb2xzLywgd2l0aCBubyBjaGFuZ2VzIHRvIGtlcm5lbCBjb2RlIG9yIHJ1bnRpbWUgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0Mjo1NS4zNDQ3MjMyNzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzM3NzcxMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NGMxMjk1NDZmOTkwNDA4NDZkOGQ5MWM5NGE4OGMxZTgzMWFhNTVlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDI4IDIyOjQyOjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2J0Zi5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmNcXG5pbmRleCBjOTU4OTAyNmRhOGQ2Li5iY2EwYTM5ODJmMDliIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2J0Zi5jXFxuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmNcXG5AQCAtODA1LDkgKzgwNSwxMyBAQCBzdGF0aWMgaW50IGR1bXBfYnRmX2MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbiBcXG4gXFx0XFx0aWYgKHNvcnRfZHVtcClcXG4gXFx0XFx0XFx0ZGF0dW1zID0gc29ydF9idGZfYyhidGYpO1xcbi1cXHRcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgY250OyBpKyspIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuIFxcdFxcdFxcdGludCBpZHggPSBkYXR1bXMgPyBkYXR1bXNbaV0uaW5kZXggOiBpO1xcbiBcXG4rXFx0XFx0XFx0LyogdHlwZSBJRCAwIGlzIHZvaWQsIHNraXAgaXQgKi9cXG4rXFx0XFx0XFx0aWYgKGlkeCA9PSAwKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuIFxcdFxcdFxcdGVyciA9IGJ0Zl9kdW1wX19kdW1wX3R5cGUoZCwgaWR4KTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0Z290byBkb25lO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcXG5pbmRleCA1ZjFhM2JmYzA1NjlmLi5kOTk1ODEyNTdlNTRmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxcbkBAIC0xMTksNyArMTE5LDkgQEAgVEVTVF9HRU5fUFJPR1MgKz0gdGVzdF9wcm9ncy1jcHV2NFxcbiBURVNUX0lOU1RfU1VCRElSUyArPSBjcHV2NFxcbiBlbmRpZlxcbiBcXG4tVEVTVF9GSUxFUyA9IHhza19wcmVyZXFzLnNoICQod2lsZGNhcmQgcHJvZ3MvYnRmX2R1bXBfdGVzdF9jYXNlXyouYylcXG4rVEVTVF9GSUxFUyA9IHhza19wcmVyZXFzLnNoICQod2lsZGNhcmQgcHJvZ3MvYnRmX2R1bXBfdGVzdF9jYXNlXyouYylcXHRcXFxcXFxuK1xcdCAgICAgYnBmdG9vbF9idGZfZHVtcF9zb3J0ZWQuZXhwZWN0ZWRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCAgICAgYnBmdG9vbF9idGZfZHVtcF91bnNvcnRlZC5leHBlY3RlZFxcbiBcXG4gIyBPcmRlciBjb3JyZXNwb25kIHRvICdtYWtlIHJ1bl90ZXN0cycgb3JkZXJcXG4gVEVTVF9QUk9HUyA6PSB0ZXN0X2ttb2Quc2ggXFxcXFxcbkBAIC04ODcsNyArODg5LDkgQEAgVFJVTk5FUl9FWFRSQV9GSUxFUyA6PSAkKE9VVFBVVCkvdXJhbmRvbV9yZWFkXFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHQgICAgICAgaW1hX3NldHVwLnNoIFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0ICAgICAgICQoVkVSSUZZX1NJR19TRVRVUClcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdCAgICAgICAkKHdpbGRjYXJkIHByb2dzL2J0Zl9kdW1wX3Rlc3RfY2FzZV8qLmMpXFx0XFx0XFxcXFxcbi1cXHRcXHQgICAgICAgJCh3aWxkY2FyZCBwcm9ncy8qLmJwZi5vKVxcbitcXHRcXHQgICAgICAgJCh3aWxkY2FyZCBwcm9ncy8qLmJwZi5vKVxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICAgIGJwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkXFx0XFx0XFx0XFxcXFxcbitcXHRcXHQgICAgICAgYnBmdG9vbF9idGZfZHVtcF91bnNvcnRlZC5leHBlY3RlZFxcbiBUUlVOTkVSX0JQRl9CVUlMRF9SVUxFIDo9IENMQU5HX0JQRl9CVUlMRF9SVUxFXFxuIFRSVU5ORVJfQlBGX0NGTEFHUyA6PSAkKEJQRl9DRkxBR1MpICQoQ0xBTkdfQ0ZMQUdTKSAtREVOQUJMRV9BVE9NSUNTX1RFU1RTXFxuICQoZXZhbCAkKGNhbGwgREVGSU5FX1RFU1RfUlVOTkVSLHRlc3RfcHJvZ3MpKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9idGZfZHVtcF9zb3J0ZWQuZXhwZWN0ZWQgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9idGZfZHVtcF9zb3J0ZWQuZXhwZWN0ZWRcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjU0NzBiMmI0MzIyOTFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkXFxuQEAgLTAsMCArMSw0OCBAQFxcbisjaWZuZGVmIF9fVk1MSU5VWF9IX19cXG4rI2RlZmluZSBfX1ZNTElOVVhfSF9fXFxuK1xcbisjaWZuZGVmIEJQRl9OT19QUkVTRVJWRV9BQ0NFU1NfSU5ERVhcXG4rI3ByYWdtYSBjbGFuZyBhdHRyaWJ1dGUgcHVzaCAoX19hdHRyaWJ1dGVfXygocHJlc2VydmVfYWNjZXNzX2luZGV4KSksIGFwcGx5X3RvID0gcmVjb3JkKVxcbisjZW5kaWZcXG4rXFxuKyNpZm5kZWYgX19rc3ltXFxuKyNkZWZpbmUgX19rc3ltIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oXFxcIi5rc3ltc1xcXCIpKSlcXG4rI2VuZGlmXFxuK1xcbisjaWZuZGVmIF9fd2Vha1xcbisjZGVmaW5lIF9fd2VhayBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSlcXG4rI2VuZGlmXFxuK1xcbisjaWZuZGVmIF9fYnBmX2Zhc3RjYWxsXFxuKyNpZiBfX2hhc19hdHRyaWJ1dGUoYnBmX2Zhc3RjYWxsKVxcbisjZGVmaW5lIF9fYnBmX2Zhc3RjYWxsIF9fYXR0cmlidXRlX18oKGJwZl9mYXN0Y2FsbCkpXFxuKyNlbHNlXFxuKyNkZWZpbmUgX19icGZfZmFzdGNhbGxcXG4rI2VuZGlmXFxuKyNlbmRpZlxcbitcXG4rZW51bSB7XFxuK1xcdEUwID0gMSxcXG4rfTtcXG4rXFxuK3N0cnVjdCBob2xleSB7XFxuK1xcdGludCBjO1xcbitcXHRsb25nOiAzMjtcXG4rXFx0bG9uZzogMzI7XFxuK1xcdGludCB0YWlsO1xcbit9O1xcbitcXG4rc3RydWN0IHMge1xcbitcXHRpbnQgZjtcXG4rfTtcXG4rXFxuK1xcbisvKiBCUEYga2Z1bmNzICovXFxuKyNpZm5kZWYgQlBGX05PX0tGVU5DX1BST1RPVFlQRVNcXG4rI2VuZGlmXFxuK1xcbisjaWZuZGVmIEJQRl9OT19QUkVTRVJWRV9BQ0NFU1NfSU5ERVhcXG4rI3ByYWdtYSBjbGFuZyBhdHRyaWJ1dGUgcG9wXFxuKyNlbmRpZlxcbitcXG4rI2VuZGlmIC8qIF9fVk1MSU5VWF9IX18gKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfYnRmX2R1bXBfdW5zb3J0ZWQuZXhwZWN0ZWQgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9idGZfZHVtcF91bnNvcnRlZC5leHBlY3RlZFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDMxMGFkYzJlZDUxNFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9idGZfZHVtcF91bnNvcnRlZC5leHBlY3RlZFxcbkBAIC0wLDAgKzEsNDggQEBcXG4rI2lmbmRlZiBfX1ZNTElOVVhfSF9fXFxuKyNkZWZpbmUgX19WTUxJTlVYX0hfX1xcbitcXG4rI2lmbmRlZiBCUEZfTk9fUFJFU0VSVkVfQUNDRVNTX0lOREVYXFxuKyNwcmFnbWEgY2xhbmcgYXR0cmlidXRlIHB1c2ggKF9fYXR0cmlidXRlX18oKHByZXNlcnZlX2FjY2Vzc19pbmRleCkpLCBhcHBseV90byA9IHJlY29yZClcXG4rI2VuZGlmXFxuK1xcbisjaWZuZGVmIF9fa3N5bVxcbisjZGVmaW5lIF9fa3N5bSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKFxcXCIua3N5bXNcXFwiKSkpXFxuKyNlbmRpZlxcbitcXG4rI2lmbmRlZiBfX3dlYWtcXG4rI2RlZmluZSBfX3dlYWsgX19hdHRyaWJ1dGVfXygod2VhaykpXFxuKyNlbmRpZlxcbitcXG4rI2lmbmRlZiBfX2JwZl9mYXN0Y2FsbFxcbisjaWYgX19oYXNfYXR0cmlidXRlKGJwZl9mYXN0Y2FsbClcXG4rI2RlZmluZSBfX2JwZl9mYXN0Y2FsbCBfX2F0dHJpYnV0ZV9fKChicGZfZmFzdGNhbGwpKVxcbisjZWxzZVxcbisjZGVmaW5lIF9fYnBmX2Zhc3RjYWxsXFxuKyNlbmRpZlxcbisjZW5kaWZcXG4rXFxuK3N0cnVjdCBob2xleSB7XFxuK1xcdGludCBjO1xcbitcXHRsb25nOiAzMjtcXG4rXFx0bG9uZzogMzI7XFxuK1xcdGludCB0YWlsO1xcbit9O1xcbitcXG4rZW51bSB7XFxuK1xcdEUwID0gMSxcXG4rfTtcXG4rXFxuK3N0cnVjdCBzIHtcXG4rXFx0aW50IGY7XFxuK307XFxuK1xcbitcXG4rLyogQlBGIGtmdW5jcyAqL1xcbisjaWZuZGVmIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTXFxuKyNlbmRpZlxcbitcXG4rI2lmbmRlZiBCUEZfTk9fUFJFU0VSVkVfQUNDRVNTX0lOREVYXFxuKyNwcmFnbWEgY2xhbmcgYXR0cmlidXRlIHBvcFxcbisjZW5kaWZcXG4rXFxuKyNlbmRpZiAvKiBfX1ZNTElOVVhfSF9fICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuY1xcbmluZGV4IDBhMmE0ZjBhMjc5NGIuLmM0OWZkZDkwZWIwMzMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jXFxuQEAgLTUzLDYgKzUzLDcgQEAgc3RhdGljIGludCBydW5fY29tbWFuZChjaGFyICphcmdzLCBjaGFyICpvdXRwdXRfYnVmLCBzaXplX3Qgb3V0cHV0X21heF9sZW4pXFxuIFxcdHN0YXRpYyBjaGFyIGJwZnRvb2xfcGF0aFtQQVRIX01BWF0gPSB7fTtcXG4gXFx0Ym9vbCBzdXBwcmVzc19vdXRwdXQgPSAhKG91dHB1dF9idWYgXFx1MDAyNlxcdTAwMjYgb3V0cHV0X21heF9sZW4pO1xcbiBcXHRjaGFyIGNvbW1hbmRbQlBGVE9PTF9GVUxMX0NNRF9NQVhfTEVOXTtcXG4rXFx0c2l6ZV90IG47XFxuIFxcdEZJTEUgKmY7XFxuIFxcdGludCByZXQ7XFxuIFxcbkBAIC02OCw4ICs2OSwxMCBAQCBzdGF0aWMgaW50IHJ1bl9jb21tYW5kKGNoYXIgKmFyZ3MsIGNoYXIgKm91dHB1dF9idWYsIHNpemVfdCBvdXRwdXRfbWF4X2xlbilcXG4gXFx0aWYgKCFmKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFxuLVxcdGlmICghc3VwcHJlc3Nfb3V0cHV0KVxcbi1cXHRcXHRmcmVhZChvdXRwdXRfYnVmLCAxLCBvdXRwdXRfbWF4X2xlbiwgZik7XFxuK1xcdGlmICghc3VwcHJlc3Nfb3V0cHV0KSB7XFxuK1xcdFxcdG4gPSBmcmVhZChvdXRwdXRfYnVmLCAxLCBvdXRwdXRfbWF4X2xlbiAtIDEsIGYpO1xcbitcXHRcXHRvdXRwdXRfYnVmW25dID0gJ1xcXFwwJztcXG4rXFx0fVxcbiBcXHRyZXQgPSBwY2xvc2UoZik7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ1YjI1MzAyYjBjODlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9idGZfZHVtcC5jXFxuQEAgLTAsMCArMSwxNzggQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZnRvb2xfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2J0Zi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGltaXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJ0Zl9oZWxwZXJzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ0ZXN0aW5nX2hlbHBlcnMuaFxcXCJcXG4rXFxuKyNkZWZpbmUgRFVNUF9CVUZfU1pcXHRcXHQoMTYgKiAxMDI0KVxcbitcXG4rI2RlZmluZSBFWFBFQ1RFRF9TT1JURURcXHRcXHRcXFwiYnBmdG9vbF9idGZfZHVtcF9zb3J0ZWQuZXhwZWN0ZWRcXFwiXFxuKyNkZWZpbmUgRVhQRUNURURfVU5TT1JURURcXHRcXFwiYnBmdG9vbF9idGZfZHVtcF91bnNvcnRlZC5leHBlY3RlZFxcXCJcXG4rXFxuKy8qXFxuKyAqXFx0c3RydWN0IGhvbGV5IHtcXG4rICpcXHRcXHRpbnQgYztcXG4rICpcXHRcXHRcXHUwMDNjNjQtYml0IGhvbGVcXHUwMDNlXFxuKyAqXFx0XFx0aW50IHRhaWw7XFxuKyAqXFx0fTtcXG4rICpcXHRlbnVtIHsgRTAgPSAxIH07XFxuKyAqXFx0c3RydWN0IHMgeyBpbnQgZjsgfTtcXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgYnRmICpta19idGYodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnRmICpidGY7XFxuK1xcbitcXHRidGYgPSBidGZfX25ld19lbXB0eSgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoYnRmLCBcXFwibmV3X2VtcHR5XFxcIikpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0YnRmX19hZGRfaW50KGJ0ZiwgXFxcImludFxcXCIsIDQsIEJURl9JTlRfU0lHTkVEKTtcXG4rXFx0YnRmX19hZGRfaW50KGJ0ZiwgXFxcImxvbmcgaW50XFxcIiwgNCwgQlRGX0lOVF9TSUdORUQpO1xcbitcXG4rXFx0YnRmX19hZGRfc3RydWN0KGJ0ZiwgXFxcImhvbGV5XFxcIiwgMTYpO1xcbitcXHRidGZfX2FkZF9maWVsZChidGYsIFxcXCJjXFxcIiwgMSwgMCwgMCk7XFxuK1xcdGJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgXFxcInRhaWxcXFwiLCAxLCA5NiwgMCk7XFxuK1xcbitcXHRidGZfX2FkZF9lbnVtKGJ0ZiwgTlVMTCwgNCk7XFxuK1xcdGJ0Zl9fYWRkX2VudW1fdmFsdWUoYnRmLCBcXFwiRTBcXFwiLCAxKTtcXG4rXFxuK1xcdGJ0Zl9fYWRkX3N0cnVjdChidGYsIFxcXCJzXFxcIiwgNCk7XFxuK1xcdGJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgXFxcImZcXFwiLCAxLCAwLCAwKTtcXG4rXFxuK1xcdFZBTElEQVRFX1JBV19CVEYoXFxuK1xcdFxcdGJ0ZixcXG4rXFx0XFx0XFxcIlsxXSBJTlQgJ2ludCcgc2l6ZT00IGJpdHNfb2Zmc2V0PTAgbnJfYml0cz0zMiBlbmNvZGluZz1TSUdORURcXFwiLFxcbitcXHRcXHRcXFwiWzJdIElOVCAnbG9uZyBpbnQnIHNpemU9NCBiaXRzX29mZnNldD0wIG5yX2JpdHM9MzIgZW5jb2Rpbmc9U0lHTkVEXFxcIixcXG4rXFx0XFx0XFxcIlszXSBTVFJVQ1QgJ2hvbGV5JyBzaXplPTE2IHZsZW49MlxcXFxuXFxcIlxcbitcXHRcXHRcXFwiXFxcXHQnYycgdHlwZV9pZD0xIGJpdHNfb2Zmc2V0PTBcXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcXFx0J3RhaWwnIHR5cGVfaWQ9MSBiaXRzX29mZnNldD05NlxcXCIsXFxuK1xcdFxcdFxcXCJbNF0gRU5VTSAnKGFub24pJyBlbmNvZGluZz1VTlNJR05FRCBzaXplPTQgdmxlbj0xXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCJcXFxcdCdFMCcgdmFsPTFcXFwiLFxcbitcXHRcXHRcXFwiWzVdIFNUUlVDVCAncycgc2l6ZT00IHZsZW49MVxcXFxuXFxcIlxcbitcXHRcXHRcXFwiXFxcXHQnZicgdHlwZV9pZD0xIGJpdHNfb2Zmc2V0PTBcXFwiKTtcXG4rXFxuK1xcdHJldHVybiBidGY7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnRmX3RvX3RtcGZpbGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjaGFyICpwYXRoKVxcbit7XFxuK1xcdHNzaXplX3Qgd3JpdHRlbjtcXG4rXFx0Y29uc3Qgdm9pZCAqcmF3O1xcbitcXHRfX3UzMiBzejtcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0cmF3ID0gYnRmX19yYXdfZGF0YShidGYsIFxcdTAwMjZzeik7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihyYXcsIFxcXCJyYXdfZGF0YVxcXCIpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgXFxcIi90bXAvYnBmdG9vbF9idGZfZHVtcC5YWFhYWFhcXFwiKTtcXG4rXFx0ZmQgPSBta3N0ZW1wKHBhdGgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19GRChmZCwgXFxcIm1rc3RlbXBfYnRmXFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdHdyaXR0ZW4gPSB3cml0ZShmZCwgcmF3LCBzeik7XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVEod3JpdHRlbiwgc3osIFxcXCJ3cml0ZV9idGZcXFwiKSkge1xcbitcXHRcXHR1bmxpbmsocGF0aCk7XFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjaGFyICpkdW1wX2MoY29uc3QgY2hhciAqYnRmX3BhdGgsIGJvb2wgc29ydGVkKVxcbit7XFxuK1xcdGNoYXIgYXJnc1tNQVhfQlBGVE9PTF9DTURfTEVOXTtcXG4rXFx0Y2hhciAqYnVmO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0YnVmID0gbWFsbG9jKERVTVBfQlVGX1NaKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGJ1ZiwgXFxcImFsbG9jX2R1bXBcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRzbnByaW50ZihhcmdzLCBzaXplb2YoYXJncyksIFxcXCJidGYgZHVtcCBmaWxlICVzIGZvcm1hdCBjJXNcXFwiLFxcbitcXHRcXHQgYnRmX3BhdGgsIHNvcnRlZCA/IFxcXCJcXFwiIDogXFxcIiB1bnNvcnRlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZ2V0X2JwZnRvb2xfY29tbWFuZF9vdXRwdXQoYXJncywgYnVmLCBEVU1QX0JVRl9TWik7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImJ0Zl9kdW1wX2Zvcm1hdF9jXFxcIikpIHtcXG4rXFx0XFx0ZnJlZShidWYpO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGJ1ZjtcXG4rfVxcbitcXG4rc3RhdGljIGNoYXIgKnJlYWRfZXhwZWN0ZWQoY29uc3QgY2hhciAqcGF0aClcXG4re1xcbitcXHRjaGFyICpidWYgPSBOVUxMO1xcbitcXHRzaXplX3QgY2FwID0gMDtcXG4rXFx0RklMRSAqZjtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGYgPSBmb3BlbihwYXRoLCBcXFwiclxcXCIpO1xcbitcXHRpZiAoIWYpIHtcXG4rXFx0XFx0ZXJyID0gZXJybm87XFxuK1xcdFxcdFBSSU5UX0ZBSUwoXFxcImNhbid0IG9wZW4gZXhwZWN0ZWQgb3V0cHV0ICclcyc6IGVycm5vICVkXFxcXG5cXFwiLCBwYXRoLCBlcnIpO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0Lyogbm8gTlVMIGluIGEgZ2VuZXJhdGVkIGhlYWRlciwgc28gdGhpcyByZWFkcyB0byB0aGUgZW5kICovXFxuK1xcdGlmIChnZXRkZWxpbShcXHUwMDI2YnVmLCBcXHUwMDI2Y2FwLCAnXFxcXDAnLCBmKSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZXJyID0gZXJybm87XFxuK1xcdFxcdFBSSU5UX0ZBSUwoXFxcImNhbid0IHJlYWQgZXhwZWN0ZWQgb3V0cHV0ICclcyc6IGVycm5vICVkXFxcXG5cXFwiLCBwYXRoLCBlcnIpO1xcbitcXHRcXHRmcmVlKGJ1Zik7XFxuK1xcdFxcdGJ1ZiA9IE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGZjbG9zZShmKTtcXG4rXFx0cmV0dXJuIGJ1ZjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9kdW1wKGNvbnN0IGNoYXIgKmJ0Zl9wYXRoLCBib29sIHNvcnRlZClcXG4re1xcbitcXHRjb25zdCBjaGFyICpleHBfcGF0aDtcXG4rXFx0Y2hhciAqZHVtcCwgKmV4cDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGV4cF9wYXRoID0gc29ydGVkID8gRVhQRUNURURfU09SVEVEIDogRVhQRUNURURfVU5TT1JURUQ7XFxuK1xcbitcXHRkdW1wID0gZHVtcF9jKGJ0Zl9wYXRoLCBzb3J0ZWQpO1xcbitcXHRpZiAoIWR1bXApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGV4cCA9IHJlYWRfZXhwZWN0ZWQoZXhwX3BhdGgpO1xcbitcXHRpZiAoIWV4cClcXG4rXFx0XFx0Z290byBvdXRfZHVtcDtcXG4rXFxuK1xcdGVyciA9IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChkdW1wLCBleHApO1xcbitcXHRBU1NFUlRfT0soZXJyLCBzb3J0ZWQgPyBcXFwiY21wX3NvcnRlZFxcXCIgOiBcXFwiY21wX3Vuc29ydGVkXFxcIik7XFxuK1xcbitcXHRmcmVlKGV4cCk7XFxuK291dF9kdW1wOlxcbitcXHRmcmVlKGR1bXApO1xcbit9XFxuK1xcbit2b2lkIHRlc3RfYnBmdG9vbF9idGZfZHVtcCh2b2lkKVxcbit7XFxuK1xcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuK1xcdHN0cnVjdCBidGYgKmJ0ZjtcXG4rXFxuK1xcdGJ0ZiA9IG1rX2J0ZigpO1xcbitcXHRpZiAoIWJ0ZilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKGJ0Zl90b190bXBmaWxlKGJ0ZiwgcGF0aCkpXFxuK1xcdFxcdGdvdG8gb3V0X2J0ZjtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJjX3NvcnRlZFxcXCIpKVxcbitcXHRcXHR0ZXN0X2R1bXAocGF0aCwgdHJ1ZSk7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJjX3Vuc29ydGVkXFxcIikpXFxuK1xcdFxcdHRlc3RfZHVtcChwYXRoLCBmYWxzZSk7XFxuK1xcbitcXHR1bmxpbmsocGF0aCk7XFxuK291dF9idGY6XFxuK1xcdGJ0Zl9fZnJlZShidGYpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9kdW1wLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfZHVtcC5jXFxuaW5kZXggOWYxYjUwZTA3YTI5OC4uZmUwNGE5NTVkNDZjYyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfZHVtcC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX2R1bXAuY1xcbkBAIC0xLDggKzEsNyBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYnBmL2J0Zi5oXFx1MDAzZVxcbi1cXG4tc3RhdGljIGludCBkdXJhdGlvbiA9IDA7XFxuKyNpbmNsdWRlIFxcXCJ0ZXN0aW5nX2hlbHBlcnMuaFxcXCJcXG4gXFxuIHZvaWQgYnRmX2R1bXBfcHJpbnRmKHZvaWQgKmN0eCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpXFxuIHtcXG5AQCAtNDUsMTIgKzQ0LDc1IEBAIHN0YXRpYyBpbnQgYnRmX2R1bXBfYWxsX3R5cGVzKGNvbnN0IHN0cnVjdCBidGYgKmJ0Ziwgdm9pZCAqY3R4KVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbisvKlxcbisgKiBFeHBlY3RlZCBvdXRwdXQgaXMgZW1iZWRkZWQgaW4gdGhlIHRlc3QgY2FzZSBzb3VyY2UsIGJldHdlZW5cXG4rICogU1RBUlQtRVhQRUNURUQtT1VUUFVUIGFuZCBFTkQtRVhQRUNURUQtT1VUUFVUIG1hcmtlcnMuIEEgcmVnaW9uIGlzIGVpdGhlclxcbisgKiBwbGFpbiBDLCB3aGVyZSBhIGRlY2xhcmF0aW9uIGRvdWJsZXMgYXMgaXRzIG93biBleHBlY3RhdGlvbiwgb3IgQyB3cmFwcGVkIGluXFxuKyAqIGEgYmxvY2sgY29tbWVudCwgd2hlcmUgdGhlIHJlbmRlcmVkIGZvcm0gZGlmZmVycyBmcm9tIHRoZSBzb3VyY2UuIEFsbFxcbisgKiByZWdpb25zIG9mIGEgZmlsZSBjb25jYXRlbmF0ZSBpbnRvIG9uZSBleHBlY3RhdGlvbiwgY29tcGFyZWQgYWdhaW5zdCBvbmVcXG4rICogd2hvbGUtZmlsZSBkdW1wLlxcbisgKlxcbisgKiBSZXR1cm5zIGEgbWFsbG9jJ2QgYnVmZmVyIGZvciB0aGUgY2FsbGVyIHRvIGZyZWUsIG9yIE5VTEwgb24gZmFpbHVyZS5cXG4rICovXFxuK3N0YXRpYyBjaGFyICpyZWFkX2V4cGVjdGVkX291dHB1dChjb25zdCBjaGFyICpwYXRoKVxcbit7XFxuK1xcdHNpemVfdCBvdXRfc3ogPSAwLCBsaW5lX2NhcCA9IDA7XFxuK1xcdGNoYXIgKm91dCA9IE5VTEwsICpsaW5lID0gTlVMTDtcXG4rXFx0Ym9vbCBpbl9yZWdpb24gPSBmYWxzZTtcXG4rXFx0RklMRSAqZiwgKm91dF9maWxlO1xcbitcXG4rXFx0ZiA9IGZvcGVuKHBhdGgsIFxcXCJyXFxcIik7XFxuK1xcdGlmICghZilcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRvdXRfZmlsZSA9IG9wZW5fbWVtc3RyZWFtKFxcdTAwMjZvdXQsIFxcdTAwMjZvdXRfc3opO1xcbitcXHRpZiAoIW91dF9maWxlKSB7XFxuK1xcdFxcdGZjbG9zZShmKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdHdoaWxlIChnZXRsaW5lKFxcdTAwMjZsaW5lLCBcXHUwMDI2bGluZV9jYXAsIGYpIFxcdTAwM2UgMCkge1xcbitcXHRcXHRjb25zdCBjaGFyICpwO1xcbitcXG4rXFx0XFx0aWYgKHN0cnN0cihsaW5lLCBcXFwiU1RBUlQtRVhQRUNURUQtT1VUUFVUXFxcIikpIHtcXG4rXFx0XFx0XFx0aW5fcmVnaW9uID0gdHJ1ZTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKHN0cnN0cihsaW5lLCBcXFwiRU5ELUVYUEVDVEVELU9VVFBVVFxcXCIpKVxcbitcXHRcXHRcXHRpbl9yZWdpb24gPSBmYWxzZTtcXG4rXFx0XFx0aWYgKCFpbl9yZWdpb24pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0cCA9IGxpbmUgKyBzdHJzcG4obGluZSwgXFxcIiBcXFxcdFxcXCIpO1xcbitcXG4rXFx0XFx0Lyogb3BlbmluZyBvciBjbG9zaW5nIGxpbmUgb2YgYSBjb21tZW50ZWQgb3V0IHJlZ2lvbiAqL1xcbitcXHRcXHRpZiAoIXN0cm5jbXAocCwgXFxcIi8qXFxcIiwgMikgfHwgIXN0cm5jbXAocCwgXFxcIiovXFxcIiwgMikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogT25seSBhICcqJyBkaXJlY3RseSBhZnRlciB0aGUgaW5kZW50YXRpb24gaXMgYSBjb21tZW50XFxuK1xcdFxcdCAqIHByZWZpeC4gV2l0aG91dCBvbmUgdGhlIGxpbmUgaXMgdGFrZW4gYXMgaXQgaXMsIGxlYWRpbmdcXG4rXFx0XFx0ICogd2hpdGVzcGFjZSBpbmNsdWRlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHAgPSAqcCA9PSAnKicgPyBwICsgMSA6IGxpbmU7XFxuK1xcbitcXHRcXHRmcHV0cyhwLCBvdXRfZmlsZSk7XFxuK1xcdH1cXG4rXFxuK1xcdGZyZWUobGluZSk7XFxuK1xcdGZjbG9zZShmKTtcXG4rXFx0ZmNsb3NlKG91dF9maWxlKTtcXG4rXFx0cmV0dXJuIG91dDtcXG4rfVxcbitcXG4gc3RhdGljIGludCB0ZXN0X2J0Zl9kdW1wX2Nhc2UoaW50IG4sIHN0cnVjdCBidGZfZHVtcF90ZXN0X2Nhc2UgKnQpXFxuIHtcXG4tXFx0Y2hhciB0ZXN0X2ZpbGVbMjU2XSwgb3V0X2ZpbGVbMjU2XSwgZGlmZl9jbWRbMTAyNF07XFxuK1xcdGNoYXIgKmR1bXAgPSBOVUxMLCAqZXhwZWN0ZWQgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgYnRmICpidGYgPSBOVUxMO1xcbi1cXHRpbnQgZXJyID0gMCwgZmQgPSAtMTtcXG4tXFx0RklMRSAqZiA9IE5VTEw7XFxuK1xcdGNoYXIgdGVzdF9maWxlWzI1Nl07XFxuK1xcdHNpemVfdCBkdW1wX3N6ID0gMDtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcdEZJTEUgKmY7XFxuIFxcbiBcXHRzbnByaW50Zih0ZXN0X2ZpbGUsIHNpemVvZih0ZXN0X2ZpbGUpLCBcXFwiJXMuYnBmLm9cXFwiLCB0LVxcdTAwM2VmaWxlKTtcXG4gXFxuQEAgLTY5LDI5ICsxMzEsMjEgQEAgc3RhdGljIGludCB0ZXN0X2J0Zl9kdW1wX2Nhc2UoaW50IG4sIHN0cnVjdCBidGZfZHVtcF90ZXN0X2Nhc2UgKnQpXFxuIFxcdGlmICghdC1cXHUwMDNla25vd25fcHRyX3N6KSB7XFxuIFxcdFxcdGJ0Zl9fc2V0X3BvaW50ZXJfc2l6ZShidGYsIDgpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRDSEVDSyhidGZfX3BvaW50ZXJfc2l6ZShidGYpICE9IDgsIFxcXCJwdHJfc3pcXFwiLCBcXFwiZXhwICVkLCBnb3QgJXp1XFxcXG5cXFwiLFxcbi1cXHRcXHQgICAgICA4LCBidGZfX3BvaW50ZXJfc2l6ZShidGYpKTtcXG4tXFx0fVxcbitcXHRcXHRzaXplX3QgcHRyX3N6ID0gYnRmX19wb2ludGVyX3NpemUoYnRmKTtcXG4gXFxuLVxcdHNucHJpbnRmKG91dF9maWxlLCBzaXplb2Yob3V0X2ZpbGUpLCBcXFwiL3RtcC8lcy5vdXRwdXQuWFhYWFhYXFxcIiwgdC1cXHUwMDNlZmlsZSk7XFxuLVxcdGZkID0gbWtzdGVtcChvdXRfZmlsZSk7XFxuLVxcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcXFwiY3JlYXRlX3RtcFxcXCIpKSB7XFxuLVxcdFxcdGVyciA9IGZkO1xcbi1cXHRcXHRnb3RvIGRvbmU7XFxuK1xcdFxcdEFTU0VSVF9FUShwdHJfc3osIChzaXplX3QpOCwgXFxcInB0cl9zelxcXCIpO1xcbiBcXHR9XFxuLVxcdGYgPSBmZG9wZW4oZmQsIFxcXCJ3XFxcIik7XFxuLVxcdGlmIChDSEVDSyhmID09IE5VTEwsIFxcXCJvcGVuX3RtcFxcXCIsICBcXFwiZmFpbGVkIHRvIG9wZW4gZmlsZTogJXMoJWQpXFxcXG5cXFwiLFxcbi1cXHRcXHQgIHN0cmVycm9yKGVycm5vKSwgZXJybm8pKSB7XFxuLVxcdFxcdGNsb3NlKGZkKTtcXG4rXFxuK1xcdGYgPSBvcGVuX21lbXN0cmVhbShcXHUwMDI2ZHVtcCwgXFx1MDAyNmR1bXBfc3opO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoZiwgXFxcIm9wZW5fbWVtc3RyZWFtXFxcIikpIHtcXG4rXFx0XFx0ZXJyID0gLWVycm5vO1xcbiBcXHRcXHRnb3RvIGRvbmU7XFxuIFxcdH1cXG4gXFxuIFxcdGVyciA9IGJ0Zl9kdW1wX2FsbF90eXBlcyhidGYsIGYpO1xcbiBcXHRmY2xvc2UoZik7XFxuLVxcdGNsb3NlKGZkKTtcXG4tXFx0aWYgKENIRUNLKGVyciwgXFxcImJ0Zl9kdW1wXFxcIiwgXFxcImZhaWx1cmUgZHVyaW5nIEMgZHVtcGluZzogJWRcXFxcblxcXCIsIGVycikpIHtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYnRmX2R1bXBcXFwiKSlcXG4gXFx0XFx0Z290byBkb25lO1xcbi1cXHR9XFxuIFxcbiBcXHRzbnByaW50Zih0ZXN0X2ZpbGUsIHNpemVvZih0ZXN0X2ZpbGUpLCBcXFwicHJvZ3MvJXMuY1xcXCIsIHQtXFx1MDAzZWZpbGUpO1xcbiBcXHRpZiAoYWNjZXNzKHRlc3RfZmlsZSwgUl9PSykgPT0gLTEpXFxuQEAgLTEwMCwyOCArMTU0LDIzIEBAIHN0YXRpYyBpbnQgdGVzdF9idGZfZHVtcF9jYXNlKGludCBuLCBzdHJ1Y3QgYnRmX2R1bXBfdGVzdF9jYXNlICp0KVxcbiBcXHRcXHQgKiB3aXRob3V0IHByZXNlcnZpbmcgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRzbnByaW50Zih0ZXN0X2ZpbGUsIHNpemVvZih0ZXN0X2ZpbGUpLCBcXFwiJXMuY1xcXCIsIHQtXFx1MDAzZWZpbGUpO1xcbi1cXHQvKlxcbi1cXHQgKiBEaWZmIHRlc3Qgb3V0cHV0IGFuZCBleHBlY3RlZCB0ZXN0IG91dHB1dCwgY29udGFpbmVkIGJldHdlZW5cXG4tXFx0ICogU1RBUlQtRVhQRUNURUQtT1VUUFVUIGFuZCBFTkQtRVhQRUNURUQtT1VUUFVUIGxpbmVzIGluIHRlc3QgY2FzZS5cXG4tXFx0ICogRm9yIGV4cGVjdGVkIG91dHB1dCBsaW5lcywgZXZlcnl0aGluZyBiZWZvcmUgJyonIGlzIHN0cmlwcGVkIG91dC5cXG4tXFx0ICogQWxzbyBsaW5lcyBjb250YWluaW5nIGNvbW1lbnQgc3RhcnQgYW5kIGNvbW1lbnQgZW5kIG1hcmtlcnMgYXJlXFxuLVxcdCAqIGlnbm9yZWQuIFxcbi1cXHQgKi9cXG4tXFx0c25wcmludGYoZGlmZl9jbWQsIHNpemVvZihkaWZmX2NtZCksXFxuLVxcdFxcdCBcXFwiYXdrICcvU1RBUlQtRVhQRUNURUQtT1VUUFVUL3tvdXQ9MTtuZXh0fSBcXFwiXFxuLVxcdFxcdCBcXFwiL0VORC1FWFBFQ1RFRC1PVVRQVVQve291dD0wfSBcXFwiXFxuLVxcdFxcdCBcXFwiL1xcXFxcXFxcL1xcXFxcXFxcKnxcXFxcXFxcXCpcXFxcXFxcXC8ve25leHR9IFxcXCIgLyogaWdub3JlIGNvbW1lbnQgc3RhcnQvZW5kIGxpbmVzICovXFxuLVxcdFxcdCBcXFwib3V0IHtzdWIoL15bIFxcXFxcXFxcdF0qXFxcXFxcXFwqLywgXFxcXFxcXCJcXFxcXFxcIik7IHByaW50fScgJyVzJyB8IGRpZmYgLXUgLSAnJXMnXFxcIixcXG4tXFx0XFx0IHRlc3RfZmlsZSwgb3V0X2ZpbGUpO1xcbi1cXHRlcnIgPSBzeXN0ZW0oZGlmZl9jbWQpO1xcbi1cXHRpZiAoQ0hFQ0soZXJyLCBcXFwiZGlmZlxcXCIsXFxuLVxcdFxcdCAgXFxcImRpZmZlcmluZyB0ZXN0IG91dHB1dCwgb3V0cHV0PSVzLCBlcnI9JWQsIGRpZmYgY21kOlxcXFxuJXNcXFxcblxcXCIsXFxuLVxcdFxcdCAgb3V0X2ZpbGUsIGVyciwgZGlmZl9jbWQpKVxcbitcXG4rXFx0ZXhwZWN0ZWQgPSByZWFkX2V4cGVjdGVkX291dHB1dCh0ZXN0X2ZpbGUpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoZXhwZWN0ZWQsIFxcXCJyZWFkX2V4cGVjdGVkX291dHB1dFxcXCIpKSB7XFxuK1xcdFxcdGVyciA9IC1lcnJubztcXG4gXFx0XFx0Z290byBkb25lO1xcbitcXHR9XFxuIFxcbi1cXHRyZW1vdmUob3V0X2ZpbGUpO1xcbitcXHQvKlxcbitcXHQgKiBUaGUgbWlzbWF0Y2ggaGFzIGFscmVhZHkgYmVlbiByZXBvcnRlZCwgc28gdGhpcyBvbmx5IGhhcyB0b1xcbitcXHQgKiByZWdpc3RlciB0aGUgZmFpbHVyZS4gQVNTRVJUX09LKCkgd291bGQgYXBwZW5kIGEgc3RhbGUgZXJybm8gdG8gaXQuXFxuK1xcdCAqL1xcbitcXHRlcnIgPSBjb21wYXJlX3RleHRfdG9fZXhwZWN0ZWQoZHVtcCwgZXhwZWN0ZWQpO1xcbitcXHRBU1NFUlRfRVEoZXJyLCAwLCBcXFwiY29tcGFyZV90ZXh0X3RvX2V4cGVjdGVkXFxcIik7XFxuIFxcbiBkb25lOlxcbitcXHRmcmVlKGV4cGVjdGVkKTtcXG4rXFx0ZnJlZShkdW1wKTtcXG4gXFx0YnRmX19mcmVlKGJ0Zik7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ190ZXN0c19mcmFtZXdvcmsuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Byb2dfdGVzdHNfZnJhbWV3b3JrLmNcXG5pbmRleCA3NjA3Y2ZjMjQwOGMyLi5kMTExZmUxMDU0NDc2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Byb2dfdGVzdHNfZnJhbWV3b3JrLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wcm9nX3Rlc3RzX2ZyYW1ld29yay5jXFxuQEAgLTE3OSwzICsxNzksMjYgQEAgdm9pZCB0ZXN0X3Byb2dfdGVzdHNfZnJhbWV3b3JrX2V4cGVjdGVkX21zZ3Modm9pZClcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIH1cXG4rXFxuK3ZvaWQgdGVzdF9wcm9nX3Rlc3RzX2ZyYW1ld29ya19jb21wYXJlX3RleHQodm9pZClcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImNvbXBhcmVfdGV4dF9tYXRjaFxcXCIpKSB7XFxuK1xcdFxcdGVyciA9IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChcXFwic2FtZVxcXFxuXFxcIiwgXFxcInNhbWVcXFxcblxcXCIpO1xcbitcXHRcXHRBU1NFUlRfRVEoZXJyLCAwLCBcXFwibWF0Y2hfcmNcXFwiKTtcXG4rXFx0XFx0dGVzdF9fZW5kX3N1YnRlc3QoKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImNvbXBhcmVfdGV4dF9taXNtYXRjaFxcXCIpKSB7XFxuK1xcdFxcdGVyciA9IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChcXFwibGluZSB0d29cXFxcblxcXCIsIFxcXCJsaW5lIG9uZVxcXFxuXFxcIik7XFxuK1xcdFxcdGZmbHVzaChzdGRvdXQpO1xcbitcXG4rXFx0XFx0QVNTRVJUX0VRKGVyciwgLTEsIFxcXCJtaXNtYXRjaF9yY1xcXCIpO1xcbitcXHRcXHRBU1NFUlRfSEFTX1NVQlNUUihlbnYuc3VidGVzdF9zdGF0ZS1cXHUwMDNlbG9nX2J1ZiwgXFxcIi1saW5lIG9uZVxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgXFxcImRpZmZfaGFzX2V4cGVjdGVkXFxcIik7XFxuK1xcdFxcdEFTU0VSVF9IQVNfU1VCU1RSKGVudi5zdWJ0ZXN0X3N0YXRlLVxcdTAwM2Vsb2dfYnVmLCBcXFwiK2xpbmUgdHdvXFxcIixcXG4rXFx0XFx0XFx0XFx0ICBcXFwiZGlmZl9oYXNfYWN0dWFsXFxcIik7XFxuK1xcdFxcdHRlc3RfX2VuZF9zdWJ0ZXN0KCk7XFxuK1xcdH1cXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmNcXG5pbmRleCBjOTcwZTc3OTNkZmNiLi4zZjAzNzk0OWU5Nzg5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuY1xcbkBAIC01MzQsMyArNTM0LDQ2IEBAIGludCBzdGFja19tcHJvdGVjdCh2b2lkKVxcbiBcXHRcXHQgICAgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSB8IFBST1RfRVhFQyk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4rXFxuK2ludCBjb21wYXJlX3RleHRfdG9fZXhwZWN0ZWQoY29uc3QgY2hhciAqYWN0dWFsLCBjb25zdCBjaGFyICpleHBlY3RlZClcXG4re1xcbitcXHRjaGFyIGV4cF9wYXRoW10gPSBcXFwiL3RtcC9zZWxmdGVzdF9leHBlY3RlZC5YWFhYWFhcXFwiO1xcbitcXHRjaGFyIGFjdF9wYXRoW10gPSBcXFwiL3RtcC9zZWxmdGVzdF9hY3R1YWwuWFhYWFhYXFxcIjtcXG4rXFx0Y2hhciBidWZbNTEyXSwgY21kWzEyOF07XFxuK1xcdGludCBleHBfZmQsIGFjdF9mZDtcXG4rXFx0RklMRSAqcDtcXG4rXFxuK1xcdGlmICghc3RyY21wKGFjdHVhbCwgZXhwZWN0ZWQpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGV4cF9mZCA9IG1rc3RlbXAoZXhwX3BhdGgpO1xcbitcXHRhY3RfZmQgPSBta3N0ZW1wKGFjdF9wYXRoKTtcXG4rXFx0aWYgKGV4cF9mZCBcXHUwMDNjIDAgfHwgYWN0X2ZkIFxcdTAwM2MgMCkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZG91dCwgXFxcIm91dHB1dCBkaWZmZXJzLCBubyB0ZW1wIGZpbGUgZm9yIGEgZGlmZlxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRkcHJpbnRmKGV4cF9mZCwgXFxcIiVzXFxcIiwgZXhwZWN0ZWQpO1xcbitcXHRkcHJpbnRmKGFjdF9mZCwgXFxcIiVzXFxcIiwgYWN0dWFsKTtcXG4rXFxuK1xcdHNucHJpbnRmKGNtZCwgc2l6ZW9mKGNtZCksIFxcXCJkaWZmIC11ICclcycgJyVzJ1xcXCIsIGV4cF9wYXRoLCBhY3RfcGF0aCk7XFxuK1xcdHAgPSBwb3BlbihjbWQsIFxcXCJyXFxcIik7XFxuK1xcdGlmICghcCkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZG91dCwgXFxcIm91dHB1dCBkaWZmZXJzLCAnJXMnIGRpZCBub3QgcnVuXFxcXG5cXFwiLCBjbWQpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXHR3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgcCkpXFxuK1xcdFxcdGZwdXRzKGJ1Ziwgc3Rkb3V0KTtcXG4rXFx0cGNsb3NlKHApO1xcbitcXG4rb3V0OlxcbitcXHRpZiAoZXhwX2ZkIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0Y2xvc2UoZXhwX2ZkKTtcXG4rXFx0XFx0dW5saW5rKGV4cF9wYXRoKTtcXG4rXFx0fVxcbitcXHRpZiAoYWN0X2ZkIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0Y2xvc2UoYWN0X2ZkKTtcXG4rXFx0XFx0dW5saW5rKGFjdF9wYXRoKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gLTE7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oXFxuaW5kZXggMmVkYzZmYjdmYzUyMS4uMWM1OGEyZjA4YjY0NSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmhcXG5AQCAtNjEsNCArNjEsNyBAQCBpbnQgdGVzdGluZ19wcm9nX2ZsYWdzKHZvaWQpO1xcbiBib29sIGlzX2ppdF9lbmFibGVkKHZvaWQpO1xcbiBpbnQgc3RhY2tfbXByb3RlY3Qodm9pZCk7XFxuIFxcbisvKiBSdW5zIGRpZmYoMSkgb24gbWlzbWF0Y2ggKi9cXG4raW50IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChjb25zdCBjaGFyICphY3R1YWwsIGNvbnN0IGNoYXIgKmV4cGVjdGVkKTtcXG4rXFxuICNlbmRpZiAvKiBfX1RFU1RJTkdfSEVMUEVSU19IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQyOjU2LjkxOTE3NDczWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MTI3MDAwMTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0b29saW5nIChicGZ0b29sKSBhbmQgQlBGIHNlbGZ0ZXN0cyB1bmRlciB0b29scy8sIHdpdGggbm8gY2hhbmdlcyB0byBrZXJuZWwgY29kZSBvciBydW50aW1lIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTRjMTI5NTQ2Zjk5MDQwODQ2ZDhkOTFjOTRhODhjMWU4MzFhYTU1ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDI4IDIyOjQyOjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmMgYi90b29scy9icGYvYnBmdG9vbC9idGYuY1xuaW5kZXggYzk1ODkwMjZkYThkNi4uYmNhMGEzOTgyZjA5YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2J0Zi5jXG4rKysgYi90b29scy9icGYvYnBmdG9vbC9idGYuY1xuQEAgLTgwNSw5ICs4MDUsMTMgQEAgc3RhdGljIGludCBkdW1wX2J0Zl9jKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiBcbiBcdFx0aWYgKHNvcnRfZHVtcClcbiBcdFx0XHRkYXR1bXMgPSBzb3J0X2J0Zl9jKGJ0Zik7XG4tXHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjIGNudDsgaSsrKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSsrKSB7XG4gXHRcdFx0aW50IGlkeCA9IGRhdHVtcyA/IGRhdHVtc1tpXS5pbmRleCA6IGk7XG4gXG4rXHRcdFx0LyogdHlwZSBJRCAwIGlzIHZvaWQsIHNraXAgaXQgKi9cbitcdFx0XHRpZiAoaWR4ID09IDApXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0XHRlcnIgPSBidGZfZHVtcF9fZHVtcF90eXBlKGQsIGlkeCk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdGdvdG8gZG9uZTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbmluZGV4IDVmMWEzYmZjMDU2OWYuLmQ5OTU4MTI1N2U1NGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuQEAgLTExOSw3ICsxMTksOSBAQCBURVNUX0dFTl9QUk9HUyArPSB0ZXN0X3Byb2dzLWNwdXY0XG4gVEVTVF9JTlNUX1NVQkRJUlMgKz0gY3B1djRcbiBlbmRpZlxuIFxuLVRFU1RfRklMRVMgPSB4c2tfcHJlcmVxcy5zaCAkKHdpbGRjYXJkIHByb2dzL2J0Zl9kdW1wX3Rlc3RfY2FzZV8qLmMpXG4rVEVTVF9GSUxFUyA9IHhza19wcmVyZXFzLnNoICQod2lsZGNhcmQgcHJvZ3MvYnRmX2R1bXBfdGVzdF9jYXNlXyouYylcdFxcXG4rXHQgICAgIGJwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkXHRcdFx0XHRcdFxcXG4rXHQgICAgIGJwZnRvb2xfYnRmX2R1bXBfdW5zb3J0ZWQuZXhwZWN0ZWRcbiBcbiAjIE9yZGVyIGNvcnJlc3BvbmQgdG8gJ21ha2UgcnVuX3Rlc3RzJyBvcmRlclxuIFRFU1RfUFJPR1MgOj0gdGVzdF9rbW9kLnNoIFxcXG5AQCAtODg3LDcgKzg4OSw5IEBAIFRSVU5ORVJfRVhUUkFfRklMRVMgOj0gJChPVVRQVVQpL3VyYW5kb21fcmVhZFx0XHRcdFx0XFxcbiBcdFx0ICAgICAgIGltYV9zZXR1cC5zaCBcdFx0XHRcdFx0XFxcbiBcdFx0ICAgICAgICQoVkVSSUZZX1NJR19TRVRVUClcdFx0XHRcdFxcXG4gXHRcdCAgICAgICAkKHdpbGRjYXJkIHByb2dzL2J0Zl9kdW1wX3Rlc3RfY2FzZV8qLmMpXHRcdFxcXG4tXHRcdCAgICAgICAkKHdpbGRjYXJkIHByb2dzLyouYnBmLm8pXG4rXHRcdCAgICAgICAkKHdpbGRjYXJkIHByb2dzLyouYnBmLm8pXHRcdFx0XFxcbitcdFx0ICAgICAgIGJwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkXHRcdFx0XFxcbitcdFx0ICAgICAgIGJwZnRvb2xfYnRmX2R1bXBfdW5zb3J0ZWQuZXhwZWN0ZWRcbiBUUlVOTkVSX0JQRl9CVUlMRF9SVUxFIDo9IENMQU5HX0JQRl9CVUlMRF9SVUxFXG4gVFJVTk5FUl9CUEZfQ0ZMQUdTIDo9ICQoQlBGX0NGTEFHUykgJChDTEFOR19DRkxBR1MpIC1ERU5BQkxFX0FUT01JQ1NfVEVTVFNcbiAkKGV2YWwgJChjYWxsIERFRklORV9URVNUX1JVTk5FUix0ZXN0X3Byb2dzKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9idGZfZHVtcF9zb3J0ZWQuZXhwZWN0ZWQgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9idGZfZHVtcF9zb3J0ZWQuZXhwZWN0ZWRcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41NDcwYjJiNDMyMjkxXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9idGZfZHVtcF9zb3J0ZWQuZXhwZWN0ZWRcbkBAIC0wLDAgKzEsNDggQEBcbisjaWZuZGVmIF9fVk1MSU5VWF9IX19cbisjZGVmaW5lIF9fVk1MSU5VWF9IX19cbitcbisjaWZuZGVmIEJQRl9OT19QUkVTRVJWRV9BQ0NFU1NfSU5ERVhcbisjcHJhZ21hIGNsYW5nIGF0dHJpYnV0ZSBwdXNoIChfX2F0dHJpYnV0ZV9fKChwcmVzZXJ2ZV9hY2Nlc3NfaW5kZXgpKSwgYXBwbHlfdG8gPSByZWNvcmQpXG4rI2VuZGlmXG4rXG4rI2lmbmRlZiBfX2tzeW1cbisjZGVmaW5lIF9fa3N5bSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKFwiLmtzeW1zXCIpKSlcbisjZW5kaWZcbitcbisjaWZuZGVmIF9fd2Vha1xuKyNkZWZpbmUgX193ZWFrIF9fYXR0cmlidXRlX18oKHdlYWspKVxuKyNlbmRpZlxuK1xuKyNpZm5kZWYgX19icGZfZmFzdGNhbGxcbisjaWYgX19oYXNfYXR0cmlidXRlKGJwZl9mYXN0Y2FsbClcbisjZGVmaW5lIF9fYnBmX2Zhc3RjYWxsIF9fYXR0cmlidXRlX18oKGJwZl9mYXN0Y2FsbCkpXG4rI2Vsc2VcbisjZGVmaW5lIF9fYnBmX2Zhc3RjYWxsXG4rI2VuZGlmXG4rI2VuZGlmXG4rXG4rZW51bSB7XG4rXHRFMCA9IDEsXG4rfTtcbitcbitzdHJ1Y3QgaG9sZXkge1xuK1x0aW50IGM7XG4rXHRsb25nOiAzMjtcbitcdGxvbmc6IDMyO1xuK1x0aW50IHRhaWw7XG4rfTtcbitcbitzdHJ1Y3QgcyB7XG4rXHRpbnQgZjtcbit9O1xuK1xuK1xuKy8qIEJQRiBrZnVuY3MgKi9cbisjaWZuZGVmIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTXG4rI2VuZGlmXG4rXG4rI2lmbmRlZiBCUEZfTk9fUFJFU0VSVkVfQUNDRVNTX0lOREVYXG4rI3ByYWdtYSBjbGFuZyBhdHRyaWJ1dGUgcG9wXG4rI2VuZGlmXG4rXG4rI2VuZGlmIC8qIF9fVk1MSU5VWF9IX18gKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9idGZfZHVtcF91bnNvcnRlZC5leHBlY3RlZCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2J0Zl9kdW1wX3Vuc29ydGVkLmV4cGVjdGVkXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDMxMGFkYzJlZDUxNFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfYnRmX2R1bXBfdW5zb3J0ZWQuZXhwZWN0ZWRcbkBAIC0wLDAgKzEsNDggQEBcbisjaWZuZGVmIF9fVk1MSU5VWF9IX19cbisjZGVmaW5lIF9fVk1MSU5VWF9IX19cbitcbisjaWZuZGVmIEJQRl9OT19QUkVTRVJWRV9BQ0NFU1NfSU5ERVhcbisjcHJhZ21hIGNsYW5nIGF0dHJpYnV0ZSBwdXNoIChfX2F0dHJpYnV0ZV9fKChwcmVzZXJ2ZV9hY2Nlc3NfaW5kZXgpKSwgYXBwbHlfdG8gPSByZWNvcmQpXG4rI2VuZGlmXG4rXG4rI2lmbmRlZiBfX2tzeW1cbisjZGVmaW5lIF9fa3N5bSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKFwiLmtzeW1zXCIpKSlcbisjZW5kaWZcbitcbisjaWZuZGVmIF9fd2Vha1xuKyNkZWZpbmUgX193ZWFrIF9fYXR0cmlidXRlX18oKHdlYWspKVxuKyNlbmRpZlxuK1xuKyNpZm5kZWYgX19icGZfZmFzdGNhbGxcbisjaWYgX19oYXNfYXR0cmlidXRlKGJwZl9mYXN0Y2FsbClcbisjZGVmaW5lIF9fYnBmX2Zhc3RjYWxsIF9fYXR0cmlidXRlX18oKGJwZl9mYXN0Y2FsbCkpXG4rI2Vsc2VcbisjZGVmaW5lIF9fYnBmX2Zhc3RjYWxsXG4rI2VuZGlmXG4rI2VuZGlmXG4rXG4rc3RydWN0IGhvbGV5IHtcbitcdGludCBjO1xuK1x0bG9uZzogMzI7XG4rXHRsb25nOiAzMjtcbitcdGludCB0YWlsO1xuK307XG4rXG4rZW51bSB7XG4rXHRFMCA9IDEsXG4rfTtcbitcbitzdHJ1Y3QgcyB7XG4rXHRpbnQgZjtcbit9O1xuK1xuK1xuKy8qIEJQRiBrZnVuY3MgKi9cbisjaWZuZGVmIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTXG4rI2VuZGlmXG4rXG4rI2lmbmRlZiBCUEZfTk9fUFJFU0VSVkVfQUNDRVNTX0lOREVYXG4rI3ByYWdtYSBjbGFuZyBhdHRyaWJ1dGUgcG9wXG4rI2VuZGlmXG4rXG4rI2VuZGlmIC8qIF9fVk1MSU5VWF9IX18gKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9oZWxwZXJzLmNcbmluZGV4IDBhMmE0ZjBhMjc5NGIuLmM0OWZkZDkwZWIwMzMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9oZWxwZXJzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuY1xuQEAgLTUzLDYgKzUzLDcgQEAgc3RhdGljIGludCBydW5fY29tbWFuZChjaGFyICphcmdzLCBjaGFyICpvdXRwdXRfYnVmLCBzaXplX3Qgb3V0cHV0X21heF9sZW4pXG4gXHRzdGF0aWMgY2hhciBicGZ0b29sX3BhdGhbUEFUSF9NQVhdID0ge307XG4gXHRib29sIHN1cHByZXNzX291dHB1dCA9ICEob3V0cHV0X2J1ZiBcdTAwMjZcdTAwMjYgb3V0cHV0X21heF9sZW4pO1xuIFx0Y2hhciBjb21tYW5kW0JQRlRPT0xfRlVMTF9DTURfTUFYX0xFTl07XG4rXHRzaXplX3QgbjtcbiBcdEZJTEUgKmY7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTY4LDggKzY5LDEwIEBAIHN0YXRpYyBpbnQgcnVuX2NvbW1hbmQoY2hhciAqYXJncywgY2hhciAqb3V0cHV0X2J1Ziwgc2l6ZV90IG91dHB1dF9tYXhfbGVuKVxuIFx0aWYgKCFmKVxuIFx0XHRyZXR1cm4gMTtcbiBcbi1cdGlmICghc3VwcHJlc3Nfb3V0cHV0KVxuLVx0XHRmcmVhZChvdXRwdXRfYnVmLCAxLCBvdXRwdXRfbWF4X2xlbiwgZik7XG4rXHRpZiAoIXN1cHByZXNzX291dHB1dCkge1xuK1x0XHRuID0gZnJlYWQob3V0cHV0X2J1ZiwgMSwgb3V0cHV0X21heF9sZW4gLSAxLCBmKTtcbitcdFx0b3V0cHV0X2J1ZltuXSA9ICdcXDAnO1xuK1x0fVxuIFx0cmV0ID0gcGNsb3NlKGYpO1xuIFxuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kNWIyNTMwMmIwYzg5XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmNcbkBAIC0wLDAgKzEsMTc4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGZ0b29sX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcImJ0Zl9oZWxwZXJzLmhcIlxuKyNpbmNsdWRlIFwidGVzdGluZ19oZWxwZXJzLmhcIlxuK1xuKyNkZWZpbmUgRFVNUF9CVUZfU1pcdFx0KDE2ICogMTAyNClcbitcbisjZGVmaW5lIEVYUEVDVEVEX1NPUlRFRFx0XHRcImJwZnRvb2xfYnRmX2R1bXBfc29ydGVkLmV4cGVjdGVkXCJcbisjZGVmaW5lIEVYUEVDVEVEX1VOU09SVEVEXHRcImJwZnRvb2xfYnRmX2R1bXBfdW5zb3J0ZWQuZXhwZWN0ZWRcIlxuK1xuKy8qXG4rICpcdHN0cnVjdCBob2xleSB7XG4rICpcdFx0aW50IGM7XG4rICpcdFx0XHUwMDNjNjQtYml0IGhvbGVcdTAwM2VcbisgKlx0XHRpbnQgdGFpbDtcbisgKlx0fTtcbisgKlx0ZW51bSB7IEUwID0gMSB9O1xuKyAqXHRzdHJ1Y3QgcyB7IGludCBmOyB9O1xuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgYnRmICpta19idGYodm9pZClcbit7XG4rXHRzdHJ1Y3QgYnRmICpidGY7XG4rXG4rXHRidGYgPSBidGZfX25ld19lbXB0eSgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgXCJuZXdfZW1wdHlcIikpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0YnRmX19hZGRfaW50KGJ0ZiwgXCJpbnRcIiwgNCwgQlRGX0lOVF9TSUdORUQpO1xuK1x0YnRmX19hZGRfaW50KGJ0ZiwgXCJsb25nIGludFwiLCA0LCBCVEZfSU5UX1NJR05FRCk7XG4rXG4rXHRidGZfX2FkZF9zdHJ1Y3QoYnRmLCBcImhvbGV5XCIsIDE2KTtcbitcdGJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgXCJjXCIsIDEsIDAsIDApO1xuK1x0YnRmX19hZGRfZmllbGQoYnRmLCBcInRhaWxcIiwgMSwgOTYsIDApO1xuK1xuK1x0YnRmX19hZGRfZW51bShidGYsIE5VTEwsIDQpO1xuK1x0YnRmX19hZGRfZW51bV92YWx1ZShidGYsIFwiRTBcIiwgMSk7XG4rXG4rXHRidGZfX2FkZF9zdHJ1Y3QoYnRmLCBcInNcIiwgNCk7XG4rXHRidGZfX2FkZF9maWVsZChidGYsIFwiZlwiLCAxLCAwLCAwKTtcbitcbitcdFZBTElEQVRFX1JBV19CVEYoXG4rXHRcdGJ0ZixcbitcdFx0XCJbMV0gSU5UICdpbnQnIHNpemU9NCBiaXRzX29mZnNldD0wIG5yX2JpdHM9MzIgZW5jb2Rpbmc9U0lHTkVEXCIsXG4rXHRcdFwiWzJdIElOVCAnbG9uZyBpbnQnIHNpemU9NCBiaXRzX29mZnNldD0wIG5yX2JpdHM9MzIgZW5jb2Rpbmc9U0lHTkVEXCIsXG4rXHRcdFwiWzNdIFNUUlVDVCAnaG9sZXknIHNpemU9MTYgdmxlbj0yXFxuXCJcbitcdFx0XCJcXHQnYycgdHlwZV9pZD0xIGJpdHNfb2Zmc2V0PTBcXG5cIlxuK1x0XHRcIlxcdCd0YWlsJyB0eXBlX2lkPTEgYml0c19vZmZzZXQ9OTZcIixcbitcdFx0XCJbNF0gRU5VTSAnKGFub24pJyBlbmNvZGluZz1VTlNJR05FRCBzaXplPTQgdmxlbj0xXFxuXCJcbitcdFx0XCJcXHQnRTAnIHZhbD0xXCIsXG4rXHRcdFwiWzVdIFNUUlVDVCAncycgc2l6ZT00IHZsZW49MVxcblwiXG4rXHRcdFwiXFx0J2YnIHR5cGVfaWQ9MSBiaXRzX29mZnNldD0wXCIpO1xuK1xuK1x0cmV0dXJuIGJ0Zjtcbit9XG4rXG4rc3RhdGljIGludCBidGZfdG9fdG1wZmlsZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNoYXIgKnBhdGgpXG4re1xuK1x0c3NpemVfdCB3cml0dGVuO1xuK1x0Y29uc3Qgdm9pZCAqcmF3O1xuK1x0X191MzIgc3o7XG4rXHRpbnQgZmQ7XG4rXG4rXHRyYXcgPSBidGZfX3Jhd19kYXRhKGJ0ZiwgXHUwMDI2c3opO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHJhdywgXCJyYXdfZGF0YVwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0c25wcmludGYocGF0aCwgUEFUSF9NQVgsIFwiL3RtcC9icGZ0b29sX2J0Zl9kdW1wLlhYWFhYWFwiKTtcbitcdGZkID0gbWtzdGVtcChwYXRoKTtcbitcdGlmICghQVNTRVJUX09LX0ZEKGZkLCBcIm1rc3RlbXBfYnRmXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHR3cml0dGVuID0gd3JpdGUoZmQsIHJhdywgc3opO1xuK1x0Y2xvc2UoZmQpO1xuK1x0aWYgKCFBU1NFUlRfRVEod3JpdHRlbiwgc3osIFwid3JpdGVfYnRmXCIpKSB7XG4rXHRcdHVubGluayhwYXRoKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBjaGFyICpkdW1wX2MoY29uc3QgY2hhciAqYnRmX3BhdGgsIGJvb2wgc29ydGVkKVxuK3tcbitcdGNoYXIgYXJnc1tNQVhfQlBGVE9PTF9DTURfTEVOXTtcbitcdGNoYXIgKmJ1ZjtcbitcdGludCBlcnI7XG4rXG4rXHRidWYgPSBtYWxsb2MoRFVNUF9CVUZfU1opO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJ1ZiwgXCJhbGxvY19kdW1wXCIpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHNucHJpbnRmKGFyZ3MsIHNpemVvZihhcmdzKSwgXCJidGYgZHVtcCBmaWxlICVzIGZvcm1hdCBjJXNcIixcbitcdFx0IGJ0Zl9wYXRoLCBzb3J0ZWQgPyBcIlwiIDogXCIgdW5zb3J0ZWRcIik7XG4rXG4rXHRlcnIgPSBnZXRfYnBmdG9vbF9jb21tYW5kX291dHB1dChhcmdzLCBidWYsIERVTVBfQlVGX1NaKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJidGZfZHVtcF9mb3JtYXRfY1wiKSkge1xuK1x0XHRmcmVlKGJ1Zik7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGJ1Zjtcbit9XG4rXG4rc3RhdGljIGNoYXIgKnJlYWRfZXhwZWN0ZWQoY29uc3QgY2hhciAqcGF0aClcbit7XG4rXHRjaGFyICpidWYgPSBOVUxMO1xuK1x0c2l6ZV90IGNhcCA9IDA7XG4rXHRGSUxFICpmO1xuK1x0aW50IGVycjtcbitcbitcdGYgPSBmb3BlbihwYXRoLCBcInJcIik7XG4rXHRpZiAoIWYpIHtcbitcdFx0ZXJyID0gZXJybm87XG4rXHRcdFBSSU5UX0ZBSUwoXCJjYW4ndCBvcGVuIGV4cGVjdGVkIG91dHB1dCAnJXMnOiBlcnJubyAlZFxcblwiLCBwYXRoLCBlcnIpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdC8qIG5vIE5VTCBpbiBhIGdlbmVyYXRlZCBoZWFkZXIsIHNvIHRoaXMgcmVhZHMgdG8gdGhlIGVuZCAqL1xuK1x0aWYgKGdldGRlbGltKFx1MDAyNmJ1ZiwgXHUwMDI2Y2FwLCAnXFwwJywgZikgXHUwMDNjIDApIHtcbitcdFx0ZXJyID0gZXJybm87XG4rXHRcdFBSSU5UX0ZBSUwoXCJjYW4ndCByZWFkIGV4cGVjdGVkIG91dHB1dCAnJXMnOiBlcnJubyAlZFxcblwiLCBwYXRoLCBlcnIpO1xuK1x0XHRmcmVlKGJ1Zik7XG4rXHRcdGJ1ZiA9IE5VTEw7XG4rXHR9XG4rXG4rXHRmY2xvc2UoZik7XG4rXHRyZXR1cm4gYnVmO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X2R1bXAoY29uc3QgY2hhciAqYnRmX3BhdGgsIGJvb2wgc29ydGVkKVxuK3tcbitcdGNvbnN0IGNoYXIgKmV4cF9wYXRoO1xuK1x0Y2hhciAqZHVtcCwgKmV4cDtcbitcdGludCBlcnI7XG4rXG4rXHRleHBfcGF0aCA9IHNvcnRlZCA/IEVYUEVDVEVEX1NPUlRFRCA6IEVYUEVDVEVEX1VOU09SVEVEO1xuK1xuK1x0ZHVtcCA9IGR1bXBfYyhidGZfcGF0aCwgc29ydGVkKTtcbitcdGlmICghZHVtcClcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZXhwID0gcmVhZF9leHBlY3RlZChleHBfcGF0aCk7XG4rXHRpZiAoIWV4cClcbitcdFx0Z290byBvdXRfZHVtcDtcbitcbitcdGVyciA9IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChkdW1wLCBleHApO1xuK1x0QVNTRVJUX09LKGVyciwgc29ydGVkID8gXCJjbXBfc29ydGVkXCIgOiBcImNtcF91bnNvcnRlZFwiKTtcbitcbitcdGZyZWUoZXhwKTtcbitvdXRfZHVtcDpcbitcdGZyZWUoZHVtcCk7XG4rfVxuK1xuK3ZvaWQgdGVzdF9icGZ0b29sX2J0Zl9kdW1wKHZvaWQpXG4re1xuK1x0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbitcdHN0cnVjdCBidGYgKmJ0ZjtcbitcbitcdGJ0ZiA9IG1rX2J0ZigpO1xuK1x0aWYgKCFidGYpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChidGZfdG9fdG1wZmlsZShidGYsIHBhdGgpKVxuK1x0XHRnb3RvIG91dF9idGY7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImNfc29ydGVkXCIpKVxuK1x0XHR0ZXN0X2R1bXAocGF0aCwgdHJ1ZSk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImNfdW5zb3J0ZWRcIikpXG4rXHRcdHRlc3RfZHVtcChwYXRoLCBmYWxzZSk7XG4rXG4rXHR1bmxpbmsocGF0aCk7XG4rb3V0X2J0ZjpcbitcdGJ0Zl9fZnJlZShidGYpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfZHVtcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX2R1bXAuY1xuaW5kZXggOWYxYjUwZTA3YTI5OC4uZmUwNGE5NTVkNDZjYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9kdW1wLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9kdW1wLmNcbkBAIC0xLDggKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2J0Zi5oXHUwMDNlXG4tXG4tc3RhdGljIGludCBkdXJhdGlvbiA9IDA7XG4rI2luY2x1ZGUgXCJ0ZXN0aW5nX2hlbHBlcnMuaFwiXG4gXG4gdm9pZCBidGZfZHVtcF9wcmludGYodm9pZCAqY3R4LCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncylcbiB7XG5AQCAtNDUsMTIgKzQ0LDc1IEBAIHN0YXRpYyBpbnQgYnRmX2R1bXBfYWxsX3R5cGVzKGNvbnN0IHN0cnVjdCBidGYgKmJ0Ziwgdm9pZCAqY3R4KVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4rLypcbisgKiBFeHBlY3RlZCBvdXRwdXQgaXMgZW1iZWRkZWQgaW4gdGhlIHRlc3QgY2FzZSBzb3VyY2UsIGJldHdlZW5cbisgKiBTVEFSVC1FWFBFQ1RFRC1PVVRQVVQgYW5kIEVORC1FWFBFQ1RFRC1PVVRQVVQgbWFya2Vycy4gQSByZWdpb24gaXMgZWl0aGVyXG4rICogcGxhaW4gQywgd2hlcmUgYSBkZWNsYXJhdGlvbiBkb3VibGVzIGFzIGl0cyBvd24gZXhwZWN0YXRpb24sIG9yIEMgd3JhcHBlZCBpblxuKyAqIGEgYmxvY2sgY29tbWVudCwgd2hlcmUgdGhlIHJlbmRlcmVkIGZvcm0gZGlmZmVycyBmcm9tIHRoZSBzb3VyY2UuIEFsbFxuKyAqIHJlZ2lvbnMgb2YgYSBmaWxlIGNvbmNhdGVuYXRlIGludG8gb25lIGV4cGVjdGF0aW9uLCBjb21wYXJlZCBhZ2FpbnN0IG9uZVxuKyAqIHdob2xlLWZpbGUgZHVtcC5cbisgKlxuKyAqIFJldHVybnMgYSBtYWxsb2MnZCBidWZmZXIgZm9yIHRoZSBjYWxsZXIgdG8gZnJlZSwgb3IgTlVMTCBvbiBmYWlsdXJlLlxuKyAqL1xuK3N0YXRpYyBjaGFyICpyZWFkX2V4cGVjdGVkX291dHB1dChjb25zdCBjaGFyICpwYXRoKVxuK3tcbitcdHNpemVfdCBvdXRfc3ogPSAwLCBsaW5lX2NhcCA9IDA7XG4rXHRjaGFyICpvdXQgPSBOVUxMLCAqbGluZSA9IE5VTEw7XG4rXHRib29sIGluX3JlZ2lvbiA9IGZhbHNlO1xuK1x0RklMRSAqZiwgKm91dF9maWxlO1xuK1xuK1x0ZiA9IGZvcGVuKHBhdGgsIFwiclwiKTtcbitcdGlmICghZilcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRvdXRfZmlsZSA9IG9wZW5fbWVtc3RyZWFtKFx1MDAyNm91dCwgXHUwMDI2b3V0X3N6KTtcbitcdGlmICghb3V0X2ZpbGUpIHtcbitcdFx0ZmNsb3NlKGYpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdHdoaWxlIChnZXRsaW5lKFx1MDAyNmxpbmUsIFx1MDAyNmxpbmVfY2FwLCBmKSBcdTAwM2UgMCkge1xuK1x0XHRjb25zdCBjaGFyICpwO1xuK1xuK1x0XHRpZiAoc3Ryc3RyKGxpbmUsIFwiU1RBUlQtRVhQRUNURUQtT1VUUFVUXCIpKSB7XG4rXHRcdFx0aW5fcmVnaW9uID0gdHJ1ZTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1x0XHRpZiAoc3Ryc3RyKGxpbmUsIFwiRU5ELUVYUEVDVEVELU9VVFBVVFwiKSlcbitcdFx0XHRpbl9yZWdpb24gPSBmYWxzZTtcbitcdFx0aWYgKCFpbl9yZWdpb24pXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHAgPSBsaW5lICsgc3Ryc3BuKGxpbmUsIFwiIFxcdFwiKTtcbitcbitcdFx0Lyogb3BlbmluZyBvciBjbG9zaW5nIGxpbmUgb2YgYSBjb21tZW50ZWQgb3V0IHJlZ2lvbiAqL1xuK1x0XHRpZiAoIXN0cm5jbXAocCwgXCIvKlwiLCAyKSB8fCAhc3RybmNtcChwLCBcIiovXCIsIDIpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBPbmx5IGEgJyonIGRpcmVjdGx5IGFmdGVyIHRoZSBpbmRlbnRhdGlvbiBpcyBhIGNvbW1lbnRcbitcdFx0ICogcHJlZml4LiBXaXRob3V0IG9uZSB0aGUgbGluZSBpcyB0YWtlbiBhcyBpdCBpcywgbGVhZGluZ1xuK1x0XHQgKiB3aGl0ZXNwYWNlIGluY2x1ZGVkLlxuK1x0XHQgKi9cbitcdFx0cCA9ICpwID09ICcqJyA/IHAgKyAxIDogbGluZTtcbitcbitcdFx0ZnB1dHMocCwgb3V0X2ZpbGUpO1xuK1x0fVxuK1xuK1x0ZnJlZShsaW5lKTtcbitcdGZjbG9zZShmKTtcbitcdGZjbG9zZShvdXRfZmlsZSk7XG4rXHRyZXR1cm4gb3V0O1xuK31cbitcbiBzdGF0aWMgaW50IHRlc3RfYnRmX2R1bXBfY2FzZShpbnQgbiwgc3RydWN0IGJ0Zl9kdW1wX3Rlc3RfY2FzZSAqdClcbiB7XG4tXHRjaGFyIHRlc3RfZmlsZVsyNTZdLCBvdXRfZmlsZVsyNTZdLCBkaWZmX2NtZFsxMDI0XTtcbitcdGNoYXIgKmR1bXAgPSBOVUxMLCAqZXhwZWN0ZWQgPSBOVUxMO1xuIFx0c3RydWN0IGJ0ZiAqYnRmID0gTlVMTDtcbi1cdGludCBlcnIgPSAwLCBmZCA9IC0xO1xuLVx0RklMRSAqZiA9IE5VTEw7XG4rXHRjaGFyIHRlc3RfZmlsZVsyNTZdO1xuK1x0c2l6ZV90IGR1bXBfc3ogPSAwO1xuK1x0aW50IGVyciA9IDA7XG4rXHRGSUxFICpmO1xuIFxuIFx0c25wcmludGYodGVzdF9maWxlLCBzaXplb2YodGVzdF9maWxlKSwgXCIlcy5icGYub1wiLCB0LVx1MDAzZWZpbGUpO1xuIFxuQEAgLTY5LDI5ICsxMzEsMjEgQEAgc3RhdGljIGludCB0ZXN0X2J0Zl9kdW1wX2Nhc2UoaW50IG4sIHN0cnVjdCBidGZfZHVtcF90ZXN0X2Nhc2UgKnQpXG4gXHRpZiAoIXQtXHUwMDNla25vd25fcHRyX3N6KSB7XG4gXHRcdGJ0Zl9fc2V0X3BvaW50ZXJfc2l6ZShidGYsIDgpO1xuIFx0fSBlbHNlIHtcbi1cdFx0Q0hFQ0soYnRmX19wb2ludGVyX3NpemUoYnRmKSAhPSA4LCBcInB0cl9zelwiLCBcImV4cCAlZCwgZ290ICV6dVxcblwiLFxuLVx0XHQgICAgICA4LCBidGZfX3BvaW50ZXJfc2l6ZShidGYpKTtcbi1cdH1cbitcdFx0c2l6ZV90IHB0cl9zeiA9IGJ0Zl9fcG9pbnRlcl9zaXplKGJ0Zik7XG4gXG4tXHRzbnByaW50ZihvdXRfZmlsZSwgc2l6ZW9mKG91dF9maWxlKSwgXCIvdG1wLyVzLm91dHB1dC5YWFhYWFhcIiwgdC1cdTAwM2VmaWxlKTtcbi1cdGZkID0gbWtzdGVtcChvdXRfZmlsZSk7XG4tXHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXCJjcmVhdGVfdG1wXCIpKSB7XG4tXHRcdGVyciA9IGZkO1xuLVx0XHRnb3RvIGRvbmU7XG4rXHRcdEFTU0VSVF9FUShwdHJfc3osIChzaXplX3QpOCwgXCJwdHJfc3pcIik7XG4gXHR9XG4tXHRmID0gZmRvcGVuKGZkLCBcIndcIik7XG4tXHRpZiAoQ0hFQ0soZiA9PSBOVUxMLCBcIm9wZW5fdG1wXCIsICBcImZhaWxlZCB0byBvcGVuIGZpbGU6ICVzKCVkKVxcblwiLFxuLVx0XHQgIHN0cmVycm9yKGVycm5vKSwgZXJybm8pKSB7XG4tXHRcdGNsb3NlKGZkKTtcbitcbitcdGYgPSBvcGVuX21lbXN0cmVhbShcdTAwMjZkdW1wLCBcdTAwMjZkdW1wX3N6KTtcbitcdGlmICghQVNTRVJUX09LX1BUUihmLCBcIm9wZW5fbWVtc3RyZWFtXCIpKSB7XG4rXHRcdGVyciA9IC1lcnJubztcbiBcdFx0Z290byBkb25lO1xuIFx0fVxuIFxuIFx0ZXJyID0gYnRmX2R1bXBfYWxsX3R5cGVzKGJ0ZiwgZik7XG4gXHRmY2xvc2UoZik7XG4tXHRjbG9zZShmZCk7XG4tXHRpZiAoQ0hFQ0soZXJyLCBcImJ0Zl9kdW1wXCIsIFwiZmFpbHVyZSBkdXJpbmcgQyBkdW1waW5nOiAlZFxcblwiLCBlcnIpKSB7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiYnRmX2R1bXBcIikpXG4gXHRcdGdvdG8gZG9uZTtcbi1cdH1cbiBcbiBcdHNucHJpbnRmKHRlc3RfZmlsZSwgc2l6ZW9mKHRlc3RfZmlsZSksIFwicHJvZ3MvJXMuY1wiLCB0LVx1MDAzZWZpbGUpO1xuIFx0aWYgKGFjY2Vzcyh0ZXN0X2ZpbGUsIFJfT0spID09IC0xKVxuQEAgLTEwMCwyOCArMTU0LDIzIEBAIHN0YXRpYyBpbnQgdGVzdF9idGZfZHVtcF9jYXNlKGludCBuLCBzdHJ1Y3QgYnRmX2R1bXBfdGVzdF9jYXNlICp0KVxuIFx0XHQgKiB3aXRob3V0IHByZXNlcnZpbmcgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuXG4gXHRcdCAqL1xuIFx0XHRzbnByaW50Zih0ZXN0X2ZpbGUsIHNpemVvZih0ZXN0X2ZpbGUpLCBcIiVzLmNcIiwgdC1cdTAwM2VmaWxlKTtcbi1cdC8qXG4tXHQgKiBEaWZmIHRlc3Qgb3V0cHV0IGFuZCBleHBlY3RlZCB0ZXN0IG91dHB1dCwgY29udGFpbmVkIGJldHdlZW5cbi1cdCAqIFNUQVJULUVYUEVDVEVELU9VVFBVVCBhbmQgRU5ELUVYUEVDVEVELU9VVFBVVCBsaW5lcyBpbiB0ZXN0IGNhc2UuXG4tXHQgKiBGb3IgZXhwZWN0ZWQgb3V0cHV0IGxpbmVzLCBldmVyeXRoaW5nIGJlZm9yZSAnKicgaXMgc3RyaXBwZWQgb3V0LlxuLVx0ICogQWxzbyBsaW5lcyBjb250YWluaW5nIGNvbW1lbnQgc3RhcnQgYW5kIGNvbW1lbnQgZW5kIG1hcmtlcnMgYXJlXG4tXHQgKiBpZ25vcmVkLiBcbi1cdCAqL1xuLVx0c25wcmludGYoZGlmZl9jbWQsIHNpemVvZihkaWZmX2NtZCksXG4tXHRcdCBcImF3ayAnL1NUQVJULUVYUEVDVEVELU9VVFBVVC97b3V0PTE7bmV4dH0gXCJcbi1cdFx0IFwiL0VORC1FWFBFQ1RFRC1PVVRQVVQve291dD0wfSBcIlxuLVx0XHQgXCIvXFxcXC9cXFxcKnxcXFxcKlxcXFwvL3tuZXh0fSBcIiAvKiBpZ25vcmUgY29tbWVudCBzdGFydC9lbmQgbGluZXMgKi9cbi1cdFx0IFwib3V0IHtzdWIoL15bIFxcXFx0XSpcXFxcKi8sIFxcXCJcXFwiKTsgcHJpbnR9JyAnJXMnIHwgZGlmZiAtdSAtICclcydcIixcbi1cdFx0IHRlc3RfZmlsZSwgb3V0X2ZpbGUpO1xuLVx0ZXJyID0gc3lzdGVtKGRpZmZfY21kKTtcbi1cdGlmIChDSEVDSyhlcnIsIFwiZGlmZlwiLFxuLVx0XHQgIFwiZGlmZmVyaW5nIHRlc3Qgb3V0cHV0LCBvdXRwdXQ9JXMsIGVycj0lZCwgZGlmZiBjbWQ6XFxuJXNcXG5cIixcbi1cdFx0ICBvdXRfZmlsZSwgZXJyLCBkaWZmX2NtZCkpXG4rXG4rXHRleHBlY3RlZCA9IHJlYWRfZXhwZWN0ZWRfb3V0cHV0KHRlc3RfZmlsZSk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoZXhwZWN0ZWQsIFwicmVhZF9leHBlY3RlZF9vdXRwdXRcIikpIHtcbitcdFx0ZXJyID0gLWVycm5vO1xuIFx0XHRnb3RvIGRvbmU7XG4rXHR9XG4gXG4tXHRyZW1vdmUob3V0X2ZpbGUpO1xuK1x0LypcbitcdCAqIFRoZSBtaXNtYXRjaCBoYXMgYWxyZWFkeSBiZWVuIHJlcG9ydGVkLCBzbyB0aGlzIG9ubHkgaGFzIHRvXG4rXHQgKiByZWdpc3RlciB0aGUgZmFpbHVyZS4gQVNTRVJUX09LKCkgd291bGQgYXBwZW5kIGEgc3RhbGUgZXJybm8gdG8gaXQuXG4rXHQgKi9cbitcdGVyciA9IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChkdW1wLCBleHBlY3RlZCk7XG4rXHRBU1NFUlRfRVEoZXJyLCAwLCBcImNvbXBhcmVfdGV4dF90b19leHBlY3RlZFwiKTtcbiBcbiBkb25lOlxuK1x0ZnJlZShleHBlY3RlZCk7XG4rXHRmcmVlKGR1bXApO1xuIFx0YnRmX19mcmVlKGJ0Zik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9wcm9nX3Rlc3RzX2ZyYW1ld29yay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcHJvZ190ZXN0c19mcmFtZXdvcmsuY1xuaW5kZXggNzYwN2NmYzI0MDhjMi4uZDExMWZlMTA1NDQ3NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Byb2dfdGVzdHNfZnJhbWV3b3JrLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Byb2dfdGVzdHNfZnJhbWV3b3JrLmNcbkBAIC0xNzksMyArMTc5LDI2IEBAIHZvaWQgdGVzdF9wcm9nX3Rlc3RzX2ZyYW1ld29ya19leHBlY3RlZF9tc2dzKHZvaWQpXG4gXHRcdH1cbiBcdH1cbiB9XG4rXG4rdm9pZCB0ZXN0X3Byb2dfdGVzdHNfZnJhbWV3b3JrX2NvbXBhcmVfdGV4dCh2b2lkKVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImNvbXBhcmVfdGV4dF9tYXRjaFwiKSkge1xuK1x0XHRlcnIgPSBjb21wYXJlX3RleHRfdG9fZXhwZWN0ZWQoXCJzYW1lXFxuXCIsIFwic2FtZVxcblwiKTtcbitcdFx0QVNTRVJUX0VRKGVyciwgMCwgXCJtYXRjaF9yY1wiKTtcbitcdFx0dGVzdF9fZW5kX3N1YnRlc3QoKTtcbitcdH1cbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiY29tcGFyZV90ZXh0X21pc21hdGNoXCIpKSB7XG4rXHRcdGVyciA9IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChcImxpbmUgdHdvXFxuXCIsIFwibGluZSBvbmVcXG5cIik7XG4rXHRcdGZmbHVzaChzdGRvdXQpO1xuK1xuK1x0XHRBU1NFUlRfRVEoZXJyLCAtMSwgXCJtaXNtYXRjaF9yY1wiKTtcbitcdFx0QVNTRVJUX0hBU19TVUJTVFIoZW52LnN1YnRlc3Rfc3RhdGUtXHUwMDNlbG9nX2J1ZiwgXCItbGluZSBvbmVcIixcbitcdFx0XHRcdCAgXCJkaWZmX2hhc19leHBlY3RlZFwiKTtcbitcdFx0QVNTRVJUX0hBU19TVUJTVFIoZW52LnN1YnRlc3Rfc3RhdGUtXHUwMDNlbG9nX2J1ZiwgXCIrbGluZSB0d29cIixcbitcdFx0XHRcdCAgXCJkaWZmX2hhc19hY3R1YWxcIik7XG4rXHRcdHRlc3RfX2VuZF9zdWJ0ZXN0KCk7XG4rXHR9XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuY1xuaW5kZXggYzk3MGU3NzkzZGZjYi4uM2YwMzc5NDllOTc4OSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jXG5AQCAtNTM0LDMgKzUzNCw0NiBAQCBpbnQgc3RhY2tfbXByb3RlY3Qodm9pZClcbiBcdFx0ICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUgfCBQUk9UX0VYRUMpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4rXG4raW50IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChjb25zdCBjaGFyICphY3R1YWwsIGNvbnN0IGNoYXIgKmV4cGVjdGVkKVxuK3tcbitcdGNoYXIgZXhwX3BhdGhbXSA9IFwiL3RtcC9zZWxmdGVzdF9leHBlY3RlZC5YWFhYWFhcIjtcbitcdGNoYXIgYWN0X3BhdGhbXSA9IFwiL3RtcC9zZWxmdGVzdF9hY3R1YWwuWFhYWFhYXCI7XG4rXHRjaGFyIGJ1Zls1MTJdLCBjbWRbMTI4XTtcbitcdGludCBleHBfZmQsIGFjdF9mZDtcbitcdEZJTEUgKnA7XG4rXG4rXHRpZiAoIXN0cmNtcChhY3R1YWwsIGV4cGVjdGVkKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRleHBfZmQgPSBta3N0ZW1wKGV4cF9wYXRoKTtcbitcdGFjdF9mZCA9IG1rc3RlbXAoYWN0X3BhdGgpO1xuK1x0aWYgKGV4cF9mZCBcdTAwM2MgMCB8fCBhY3RfZmQgXHUwMDNjIDApIHtcbitcdFx0ZnByaW50ZihzdGRvdXQsIFwib3V0cHV0IGRpZmZlcnMsIG5vIHRlbXAgZmlsZSBmb3IgYSBkaWZmXFxuXCIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGRwcmludGYoZXhwX2ZkLCBcIiVzXCIsIGV4cGVjdGVkKTtcbitcdGRwcmludGYoYWN0X2ZkLCBcIiVzXCIsIGFjdHVhbCk7XG4rXG4rXHRzbnByaW50ZihjbWQsIHNpemVvZihjbWQpLCBcImRpZmYgLXUgJyVzJyAnJXMnXCIsIGV4cF9wYXRoLCBhY3RfcGF0aCk7XG4rXHRwID0gcG9wZW4oY21kLCBcInJcIik7XG4rXHRpZiAoIXApIHtcbitcdFx0ZnByaW50ZihzdGRvdXQsIFwib3V0cHV0IGRpZmZlcnMsICclcycgZGlkIG5vdCBydW5cXG5cIiwgY21kKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHR3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgcCkpXG4rXHRcdGZwdXRzKGJ1Ziwgc3Rkb3V0KTtcbitcdHBjbG9zZShwKTtcbitcbitvdXQ6XG4rXHRpZiAoZXhwX2ZkIFx1MDAzZT0gMCkge1xuK1x0XHRjbG9zZShleHBfZmQpO1xuK1x0XHR1bmxpbmsoZXhwX3BhdGgpO1xuK1x0fVxuK1x0aWYgKGFjdF9mZCBcdTAwM2U9IDApIHtcbitcdFx0Y2xvc2UoYWN0X2ZkKTtcbitcdFx0dW5saW5rKGFjdF9wYXRoKTtcbitcdH1cbitcdHJldHVybiAtMTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oXG5pbmRleCAyZWRjNmZiN2ZjNTIxLi4xYzU4YTJmMDhiNjQ1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmhcbkBAIC02MSw0ICs2MSw3IEBAIGludCB0ZXN0aW5nX3Byb2dfZmxhZ3Modm9pZCk7XG4gYm9vbCBpc19qaXRfZW5hYmxlZCh2b2lkKTtcbiBpbnQgc3RhY2tfbXByb3RlY3Qodm9pZCk7XG4gXG4rLyogUnVucyBkaWZmKDEpIG9uIG1pc21hdGNoICovXG4raW50IGNvbXBhcmVfdGV4dF90b19leHBlY3RlZChjb25zdCBjaGFyICphY3R1YWwsIGNvbnN0IGNoYXIgKmV4cGVjdGVkKTtcbitcbiAjZW5kaWYgLyogX19URVNUSU5HX0hFTFBFUlNfSCAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDI6NTYuOTE5MTc1ODZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTI2OTU4NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBldmVuIGRvaW5nLiBUaGUgbW9kaWZpZWQgZmlsZXMgYXJlIGFsbCBpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgYHRvb2xzL2JwZi9icGZ0b29sL2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gKkNydWNpYWxseSosIG5vdGhpbmcgaXMgdG91Y2hpbmcgdGhlIGtlcm5lbCBzb3VyY2UgZGlyZWN0bHkg4oCTIG5vIGBrZXJuZWwvYCwgYG5ldC9gLCBgZHJpdmVycy9gLCBldGMuIFRoaXMgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIHVzZXJzcGFjZSB0b29scywgYGJwZnRvb2xgLCBhbmQgaXRzIHNlbGZ0ZXN0cy4gVGhhdCdzIGEgaHVnZSBjbHVlLlxuXG5Ob3csIEkgaGF2ZSB0byBhcHBseSB0aGUgY3JpdGVyaWEuIFdlJ3JlIGxvb2tpbmcgZm9yIHdoZXRoZXIgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGtlcm5lbCB2dWxuZXJhYmlsaXR5IGRpc2NvdmVyeSB1c2luZyBzeXprYWxsZXIuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBpdCBvbmx5IG1vZGlmaWVzIGNlcnRhaW4gdHlwZXMgb2YgdGhpbmdzOiBkb2N1bWVudGF0aW9uLCBLY29uZmlnIGZpbGVzLCBjb21tZW50cywgZGVjb3JhdGl2ZSBjaGFuZ2VzIGxpa2UgbG9nZ2luZywgY29uc3RhbnRzIHRoYXQgZG9uJ3QgY2hhbmdlIGV4ZWN1dGlvbiwgdW5yZWFjaGFibGUgY29kZSwgb3IgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZS1kZXBlbmRlbnQgZHJpdmVycyBvciB0ZWFyZG93biBjYWxsYmFja3MuIEkndmUgc2VlbiB0aGVzZSBiZWZvcmUsIHNvIEkgaGF2ZSBhIG1lbnRhbCBjaGVja2xpc3QuXG5cbkxvb2tpbmcgYXQgdGhlIGZpbGVzIGFnYWluLCBJIHNlZTpcblxuKiAgIGB0b29scy9icGYvYnBmdG9vbC9idGYuY2A6IGJwZnRvb2wsIGEgdXNlcnNwYWNlIHRvb2xcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4uLmA6IE11bHRpcGxlIHNlbGZ0ZXN0IGZpbGVzIHJlbGF0ZWQgdG8gYnBmdG9vbC5cblxuRXZlcnl0aGluZyBpcyBmaXJtbHkgaW4gdGhlIGB0b29scy9gIHJlYWxtLiBUaGVzZSBhcmUgKm5vdCoga2VybmVsIG1vZGlmaWNhdGlvbnMuIFN5emthbGxlciB0YXJnZXRzIHRoZSBrZXJuZWwgaXRzZWxmLCBhbmQgY2hhbmdlcyBpbiB0aGVzZSBsb2NhdGlvbnMgZG9uJ3QgdG91Y2ggdGhlIGtlcm5lbCBiaW5hcnkgb3IgY2hhbmdlIGl0cyBleGVjdXRpb24gbG9naWMuIFxuXG5UaGVyZWZvcmUsIEknbSBjb25maWRlbnQgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gSSBkb24ndCBzZWUgYW55IG90aGVyIGZhY3RvcnMgdGhhdCB3b3VsZCBjaGFuZ2UgdGhhdCBjb25jbHVzaW9uLiBObyBuZWVkIHRvIGxvb2sgZm9yIGFueSBvdGhlciBjb25maWcgb3IgdG9vbHMgdG8gdmVyaWZ5LiBJdCBpcyB2ZXJ5IHVuYW1iaWd1b3VzLlxuXG5UaW1lIHRvIGV4ZWN1dGUgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIzMSwiT3V0cHV0VG9rZW5zIjo2MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQzOjAzLjA0NjE0NTQyN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbGluZyAoYnBmdG9vbCkgYW5kIEJQRiBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvLCB3aXRoIG5vIGNoYW5nZXMgdG8ga2VybmVsIGNvZGUgb3IgcnVudGltZSBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xpbmcgKGJwZnRvb2wpIGFuZCBCUEYgc2VsZnRlc3RzIHVuZGVyIHRvb2xzLywgd2l0aCBubyBjaGFuZ2VzIHRvIGtlcm5lbCBjb2RlIG9yIHJ1bnRpbWUgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0MzowMy4wNDYxNzcyODdaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow5484k[1] Phase: Running StartedAt: 2026-08-28 22:43:13 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5484k[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-28 22:43:13 +0000 UTC FinishedAt: 2026-08-28 22:43:18 +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,}