Name: series-workflow8sth4 Phase: Failed StartedAt: 2026-07-27 15:24:29 +0000 UTC FinishedAt: 2026-07-27 16:16:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8sth4[0] Phase: Succeeded StartedAt: 2026-07-27 15:24:29 +0000 UTC FinishedAt: 2026-07-27 16:16:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8sth4[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 15:24:29 +0000 UTC FinishedAt: 2026-07-27 16:16:18 +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+CgkJCTx0ZD4yMDI2LzA3LzI3IDE2OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSB1c2VyLXNwYWNlIHNlbGZ0ZXN0ICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMpIGFuZCBtYWtlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTY6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0ZWE1NDZiOTM3OTQxMTE1YTAzYWZjY2Q3NjYxMjE5YTFmYjYxNGVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMTY6MTU6NTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jXG5pbmRleCBhZjk1YjQ4YWNlYTkwYi4uOWFhNWM4MTQ2ZjE3MTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuY1xuQEAgLTYsNiAmIzQzOzYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZXJyb3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbkBAIC0xOSwzMSAmIzQzOzIwLDI1IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuIFxuIC8qIHVhcGkvZ2xpYmMgd2VpcmRuZXNzIG1heSBsZWF2ZSB0aGlzIHVuZGVmaW5lZCAqL1xuICNpZm5kZWYgSVBWNl9GTE9XTEFCRUxfTUdSXG4gI2RlZmluZSBJUFY2X0ZMT1dMQUJFTF9NR1JcdDMyXG4gI2VuZGlmXG4mIzQzOyNpZm5kZWYgSVBWNl9GTE9XSU5GT19TRU5EXG4mIzQzOyNkZWZpbmUgSVBWNl9GTE9XSU5GT19TRU5EXHQzM1xuJiM0MzsjZW5kaWZcbiBcbiAvKiBmcm9tIG5ldC9pcHY2L2lwNl9mbG93bGFiZWwuYyAqL1xuICNkZWZpbmUgRkxfTUlOX0xJTkdFUlx0XHQ2XG4gXG4tI2RlZmluZSBleHBsYWluKHgpXHRcdFx0XHRcdFx0XHRcXFxuLVx0ZG8geyBpZiAoY2ZnX3ZlcmJvc2UpIGZwcmludGYoc3RkZXJyLCBcJiMzNDsgICAgICAgXCYjMzQ7IHggXCYjMzQ7XFxuXCYjMzQ7KTsgfSB3aGlsZSAoMClcbi1cbi0jZGVmaW5lIF9fZXhwZWN0KHgpXHRcdFx0XHRcdFx0XHRcXFxuLVx0ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuLVx0XHRpZiAoISh4KSlcdFx0XHRcdFx0XHRcXFxuLVx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtbT0tdICAgXCYjMzQ7ICN4IFwmIzM0O1xcblwmIzM0Oyk7XHRcdFxcXG4tXHRcdGVsc2VcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7W0VSUl0gIFwmIzM0OyAjeCBcJiMzNDsgKGxpbmUgJWQpXCYjMzQ7LCBfX0xJTkVfXyk7IFxcXG4tXHR9IHdoaWxlICgwKVxuLVxuLSNkZWZpbmUgZXhwZWN0X3Bhc3MoeClcdF9fZXhwZWN0KHgpXG4tI2RlZmluZSBleHBlY3RfZmFpbCh4KVx0X19leHBlY3QoISh4KSlcbi1cbi1zdGF0aWMgYm9vbCBjZmdfbG9uZ19ydW5uaW5nO1xuLXN0YXRpYyBib29sIGNmZ192ZXJib3NlO1xuJiM0MzsjZGVmaW5lIElOSVRfU0lONl9MT09QQkFDSyhuYW1lKVx0XHRcdFx0XHRcXFxuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbjYgbmFtZSA9IHtcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdC5zaW42X2ZhbWlseVx0PSBBRl9JTkVUNixcdFx0XHRcdFxcXG4mIzQzO1x0XHQuc2luNl9hZGRyXHQ9IElONkFERFJfTE9PUEJBQ0tfSU5JVCxcdFx0XFxcbiYjNDM7XHRcdC5zaW42X3BvcnRcdD0gaHRvbnMoODg4OCksXHRcdFx0XHRcXFxuJiM0MztcdH1cbiBcbiBzdGF0aWMgaW50IGZsb3dsYWJlbF9nZXQoaW50IGZkLCB1aW50MzJfdCBsYWJlbCwgdWludDhfdCBzaGFyZSwgdWludDE2X3QgZmxhZ3MpXG4ge1xuQEAgLTcxLDEyOSAmIzQzOzY2LDM0NCBAQCBzdGF0aWMgaW50IGZsb3dsYWJlbF9wdXQoaW50IGZkLCB1aW50MzJfdCBsYWJlbClcbiBcdHJldHVybiBzZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZyZXEsIHNpemVvZihyZXEpKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnVuX3Rlc3RzKGludCBmZClcbiYjNDM7c3RhdGljIGludCBmbG93bGFiZWxfcmVuZXcoaW50IGZkLCB1aW50MzJfdCBsYWJlbCwgdWludDE2X3QgbGluZ2VyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlcSA9IHtcbiYjNDM7XHRcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX1JFTkVXLFxuJiM0MztcdFx0LmZscl9sYWJlbCA9IGh0b25sKGxhYmVsKSxcbiYjNDM7XHRcdC5mbHJfbGluZ2VyID0gbGluZ2VyLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBzZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZyZXEsIHNpemVvZihyZXEpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0Y3BfbGlzdGVuKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRJTklUX1NJTjZfTE9PUEJBQ0soYWRkcik7XG4mIzQzO1x0Y29uc3QgaW50IG9uZSA9IDE7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19TVFJFQU0sIDApO1xuJiM0MztcdGlmIChmZCA9PSAtMSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtzb2NrZXQgbGlzdGVuZXJcJiMzNDspO1xuJiM0MztcdGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFx1MDAyNm9uZSwgc2l6ZW9mKG9uZSkpKVxuJiM0MztcdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O3NldHNvY2tvcHQgU09fUkVVU0VBRERSXCYjMzQ7KTtcbiYjNDM7XHRpZiAoYmluZChmZCwgKHZvaWQgKilcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpKVxuJiM0MztcdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O2JpbmRcJiMzNDspO1xuJiM0MztcdGlmIChsaXN0ZW4oZmQsIDEpKVxuJiM0MztcdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O2xpc3RlblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGNwX2Nvbm5lY3QoaW50IGxpc3RlbmVyLCB1aW50MzJfdCBmbG93bGFiZWwsIGludCAqY2xpZW50LCBpbnQgKmFjY2VwdGVkKVxuJiM0Mzt7XG4mIzQzO1x0SU5JVF9TSU42X0xPT1BCQUNLKGFkZHIpO1xuJiM0MztcdGNvbnN0IGludCBvbmUgPSAxO1xuJiM0MztcdGludCBjZmQsIGFmZDtcbiYjNDM7XG4mIzQzO1x0Y2ZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX1NUUkVBTSwgMCk7XG4mIzQzO1x0aWYgKGNmZCA9PSAtMSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtzb2NrZXQgY2xpZW50XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZsb3dsYWJlbF9nZXQoY2ZkLCBmbG93bGFiZWwsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtmbG93bGFiZWxfZ2V0XCYjMzQ7KTtcbiYjNDM7XHRpZiAoc2V0c29ja29wdChjZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dJTkZPX1NFTkQsIFx1MDAyNm9uZSwgc2l6ZW9mKG9uZSkpKVxuJiM0MztcdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O3NldHNvY2tvcHQgZmxvd2luZm9fc2VuZFwmIzM0Oyk7XG4mIzQzO1x0YWRkci5zaW42X2Zsb3dpbmZvID0gaHRvbmwoZmxvd2xhYmVsKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNvbm5lY3QoY2ZkLCAodm9pZCAqKVx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSkpXG4mIzQzO1x0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7Y29ubmVjdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGFmZCA9IGFjY2VwdChsaXN0ZW5lciwgTlVMTCwgTlVMTCk7XG4mIzQzO1x0aWYgKGFmZCA9PSAtMSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDthY2NlcHRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQqY2xpZW50ID0gY2ZkO1xuJiM0MztcdCphY2NlcHRlZCA9IGFmZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2V0X2Zsb3dsYWJlbF9jb25zaXN0ZW5jeShib29sIGVuYWJsZSlcbiYjNDM7e1xuJiM0MztcdC8qIGZsb3dsYWJlbF9jb25zaXN0ZW5jeSBtdXN0IGJlIGRpc2FibGUgdG8gdXNlIHRoZSBJUFY2X0ZMX0ZfUkVGTEVDVFxuJiM0MztcdCAqIGZsYWcuIFRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHJlcXVpcmVkIGZvciBzZXR0aW5nIHVwIGFuZCB0ZWFyaW5nXG4mIzQzO1x0ICogZG93biB0ZXN0IGNhc2VzIGZvciB0aGlzIGZsYWcuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4oXCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY2L2Zsb3dsYWJlbF9jb25zaXN0ZW5jeVwmIzM0OywgT19XUk9OTFkpO1xuJiM0MztcdGlmIChmZCA9PSAtMSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtvcGVuIGZsb3dsYWJlbF9jb25zaXN0ZW5jeVwmIzM0Oyk7XG4mIzQzO1x0aWYgKHdyaXRlKGZkLCBlbmFibGUgPyBcJiMzNDsxXCYjMzQ7IDogXCYjMzQ7MFwmIzM0OywgMSkgIT0gMSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDt3cml0ZSBmbG93bGFiZWxfY29uc2lzdGVuY3lcJiMzNDspO1xuJiM0MztcdGlmIChjbG9zZShmZCkpXG4mIzQzO1x0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7Y2xvc2UgZmxvd2xhYmVsX2NvbnNpc3RlbmN5XCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChjYW5ub3RfZ2V0X25vbl9leGlzdGVudF9sYWJlbClcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgZXJyO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCYjMzQ7c29ja2V0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApO1xuJiM0MztcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIGdldCBvZiBhIG5vbi1leGlzdGVudCBsYWJlbCB0byBmYWlsXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1QoY2Fubm90X3B1dF9ub25fZXhpc3RlbnRfbGFiZWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIGVycjtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwmIzM0O3NvY2tldCBmYWlsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcbiYjNDM7XHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBwdXQgb2YgYSBub24tZXhpc3RlbnQgbGFiZWwgdG8gZmFpbFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKGNhbm5vdF9jcmVhdGVfbGFiZWxfZ3JlYXRlcl90aGFuXzIwX2JpdHMpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIGVycjtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwmIzM0O3NvY2tldCBmYWlsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAweDFGRkZGRiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgbGFiZWwgXHUwMDNlIDIwIGJpdHMgdG8gYmUgcmVqZWN0ZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChjYW5fY3JlYXRlX2FuZF9nZXRfYW5kX3B1dF9sYWJlbHMpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIGVycjtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwmIzM0O3NvY2tldCBmYWlsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBsYWJlbCAoRkxfRl9DUkVBVEUpXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgMCk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBnZXQgdGhlIGxhYmVsIHdpdGhvdXQgRkxfRl9DUkVBVEVcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSB8IElQVjZfRkxfRl9FWENMKTtcbiYjNDM7XHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBGTF9GX0VYQ0wgdG8gcmVqZWN0IGFuIGFscmVhZHktZXhpc3RpbmcgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHB1dCBmaXJzdCByZWZlcmVuY2VcJiMzNDspO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gcHV0IHNlY29uZCByZWZlcmVuY2VcJiMzNDspO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gcHV0IHRoaXJkIHJlZmVyZW5jZVwmIzM0Oyk7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgZm91cnRoIHB1dCB0byBmYWlsLCBubyByZWZlcmVuY2VzIGxlZnRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChleGNsdXNpdmVfbGFiZWxfc2hhcmUpXG4ge1xuLVx0aW50IHdzdGF0dXM7XG4mIzQzO1x0aW50IGZkLCBlcnI7XG4mIzQzO1xuJiM0MztcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcJiMzNDtzb2NrZXQgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGV4Y2x1c2l2ZSBsYWJlbCAoRkxfU19FWENMKVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIHJldXNlIGluIG5vbi1leGNsdXNpdmUgbW9kZSB0byBmYWlsXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIHJldXNlIGluIGV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWwgdG9vXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMik7XG4mIzQzO1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBwdXQgdGhlIGV4Y2x1c2l2ZSBsYWJlbFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIHJldXNlIHRvIGZhaWwsIGR1ZSB0byBsaW5nZXJcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzbGVlcChGTF9NSU5fTElOR0VSICogMiAmIzQzOyAxKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIHJldXNlIHRvIHN1Y2NlZWQgYWZ0ZXIgbGluZ2VyXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1QodXNlcl9wcml2YXRlX2xhYmVsX3NoYXJlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkLCBlcnIsIHdzdGF0dXM7XG4gXHRwaWRfdCBwaWQ7XG4gXG4tXHRleHBsYWluKFwmIzM0O2Nhbm5vdCBnZXQgbm9uLWV4aXN0ZW50IGxhYmVsXCYjMzQ7KTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApKTtcbi1cbi1cdGV4cGxhaW4oXCYjMzQ7Y2Fubm90IHB1dCBub24tZXhpc3RlbnQgbGFiZWxcJiMzNDspO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVxuLVx0ZXhwbGFpbihcJiMzNDtjYW5ub3QgY3JlYXRlIGxhYmVsIGdyZWF0ZXIgdGhhbiAyMCBiaXRzXCYjMzQ7KTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDB4MUZGRkZGLCBJUFY2X0ZMX1NfQU5ZLFxuLVx0XHRcdFx0ICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXG4tXHRleHBsYWluKFwmIzM0O2NyZWF0ZSBhIG5ldyBsYWJlbCAoRkxfRl9DUkVBVEUpXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2FuIGdldCB0aGUgbGFiZWwgKHdpdGhvdXQgRkxfRl9DUkVBVEUpXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2FuIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2Fubm90IGdldCBpdCBhZ2FpbiB3aXRoIHRoZSBleGNsdXNpdmUgKEZMX0ZMX0VYQ0wpIGZsYWdcJiMzNDspO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSxcbi1cdFx0XHRcdFx0IElQVjZfRkxfRl9DUkVBVEUgfCBJUFY2X0ZMX0ZfRVhDTCkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjYW4gbm93IHB1dCBleGFjdGx5IHRocmVlIHJlZmVyZW5jZXNcJiMzNDspO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVxuLVx0ZXhwbGFpbihcJiMzNDtjcmVhdGUgYSBuZXcgZXhjbHVzaXZlIGxhYmVsIChGTF9TX0VYQ0wpXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlXCYjMzQ7KTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gZXhjbHVzaXZlIG1vZGUgZWl0aGVyXCYjMzQ7KTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAyKSk7XG4tXG4tXHRpZiAoY2ZnX2xvbmdfcnVubmluZykge1xuLVx0XHRleHBsYWluKFwmIzM0O2Nhbm5vdCByZXVzZSB0aGUgbGFiZWwsIGR1ZSB0byBsaW5nZXJcJiMzNDspO1xuLVx0XHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLFxuLVx0XHRcdFx0XHQgIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdFx0ZXhwbGFpbihcJiMzNDthZnRlciBzbGVlcCwgY2FuIHJldXNlXCYjMzQ7KTtcbi1cdFx0c2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSk7XG4tXHRcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksXG4tXHRcdFx0XHRcdCAgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0fVxuJiM0MztcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcJiMzNDtzb2NrZXQgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IHVzZXItcHJpdmF0ZSBsYWJlbCAoRkxfU19VU0VSKVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19BTlksIDApO1xuJiM0MztcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIGdldCBpbiBub24tZXhjbHVzaXZlIG1vZGUgdG8gZmFpbFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19FWENMLCAwKTtcbiYjNDM7XHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBnZXQgaW4gZXhjbHVzaXZlIG1vZGUgdG8gZmFpbFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiBpbiB1c2VyIG1vZGVcJiMzNDspO1xuIFxuLVx0ZXhwbGFpbihcJiMzNDtjcmVhdGUgYSBuZXcgdXNlci1wcml2YXRlIGxhYmVsIChGTF9TX1VTRVIpXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlXCYjMzQ7KTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19BTlksIDApKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2Fubm90IGdldCBpdCBhZ2FpbiBpbiBleGNsdXNpdmUgbW9kZVwmIzM0Oyk7XG4tXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfRVhDTCwgMCkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjYW4gZ2V0IGl0IGFnYWluIGluIHVzZXIgbW9kZVwmIzM0Oyk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjaGlsZCBwcm9jZXNzIGNhbiBnZXQgaXQgdG9vLCBidXQgbm90IGFmdGVyIHNldHVpZChub2JvZHkpXCYjMzQ7KTtcbiBcdHBpZCA9IGZvcmsoKTtcbi1cdGlmIChwaWQgPT0gLTEpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtmb3JrXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfTkUoLTEsIHBpZCkgVEhfTE9HKFwmIzM0O2ZvcmsgZmFpbGVkXCYjMzQ7KTtcbiBcdGlmICghcGlkKSB7XG4tXHRcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7XG4tXHRcdGlmIChzZXR1aWQoVVNIUlRfTUFYKSlcbiYjNDM7XHRcdGlmIChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpXG4mIzQzO1x0XHRcdGV4aXQoMSk7XG4mIzQzO1x0XHRpZiAoc2V0dWlkKFVTSFJUX01BWCkpIHtcbiBcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7W0lORk9dIHNraXAgc2V0dWlkIGNoaWxkIHRlc3RcXG5cJiMzNDspO1xuLVx0XHRlbHNlXG4tXHRcdFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKTtcbiYjNDM7XHRcdFx0ZXhpdCgwKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmICghZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKVxuJiM0MztcdFx0XHRleGl0KDEpO1xuIFx0XHRleGl0KDApO1xuIFx0fVxuLVx0aWYgKHdhaXQoXHUwMDI2d3N0YXR1cykgPT0gLTEpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDt3YWl0XCYjMzQ7KTtcbi1cdGlmICghV0lGRVhJVEVEKHdzdGF0dXMpIHx8IFdFWElUU1RBVFVTKHdzdGF0dXMpICE9IDApXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDt3YWl0OiB1bmV4cGVjdGVkIGNoaWxkIHJlc3VsdFwmIzM0Oyk7XG4tXG4tXHRleHBsYWluKFwmIzM0O2NyZWF0ZSBhIG5ldyBwcm9jZXNzLXByaXZhdGUgbGFiZWwgKEZMX1NfUFJPQ0VTUylcJiMzNDspO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2FuIGdldCBpdCBhZ2FpblwmIzM0Oyk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjaGlsZCBwcm9jZXNzIGNhbm5vdCBjYW4gZ2V0IGl0XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEocGlkLCB3YWl0KFx1MDAyNndzdGF0dXMpKSBUSF9MT0coXCYjMzQ7d2FpdCBmYWlsZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9UUlVFKFdJRkVYSVRFRCh3c3RhdHVzKSkgVEhfTE9HKFwmIzM0O2NoaWxkIGRpZCBub3QgZXhpdCBub3JtYWxseVwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIFdFWElUU1RBVFVTKHdzdGF0dXMpKSBUSF9MT0coXCYjMzQ7Y2hpbGQgcmVwb3J0ZWQgdW5leHBlY3RlZCByZXN1bHRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChwcm9jZXNzX3ByaXZhdGVfbGFiZWxfc2hhcmUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIGVyciwgd3N0YXR1cztcbiYjNDM7XHRwaWRfdCBwaWQ7XG4mIzQzO1xuJiM0MztcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcJiMzNDtzb2NrZXQgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbCAoRkxfU19QUk9DRVNTKVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGdldCBpdCBhZ2FpblwmIzM0Oyk7XG4mIzQzO1xuIFx0cGlkID0gZm9yaygpO1xuLVx0aWYgKHBpZCA9PSAtMSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O2ZvcmtcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9ORSgtMSwgcGlkKSBUSF9MT0coXCYjMzQ7Zm9yayBmYWlsZWRcJiMzNDspO1xuIFx0aWYgKCFwaWQpIHtcbi1cdFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApKTtcbiYjNDM7XHRcdGlmICghZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApKVxuJiM0MztcdFx0XHRleGl0KDEpO1xuIFx0XHRleGl0KDApO1xuIFx0fVxuLVx0aWYgKHdhaXQoXHUwMDI2d3N0YXR1cykgPT0gLTEpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDt3YWl0XCYjMzQ7KTtcbi1cdGlmICghV0lGRVhJVEVEKHdzdGF0dXMpIHx8IFdFWElUU1RBVFVTKHdzdGF0dXMpICE9IDApXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDt3YWl0OiB1bmV4cGVjdGVkIGNoaWxkIHJlc3VsdFwmIzM0Oyk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuLXtcbi1cdGludCBjO1xuLVxuLVx0d2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0O2x2XCYjMzQ7KSkgIT0gLTEpIHtcbi1cdFx0c3dpdGNoIChjKSB7XG4tXHRcdGNhc2UgJiMzOTtsJiMzOTs6XG4tXHRcdFx0Y2ZnX2xvbmdfcnVubmluZyA9IHRydWU7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJiMzOTt2JiMzOTs6XG4tXHRcdFx0Y2ZnX3ZlcmJvc2UgPSB0cnVlO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdGVycm9yKDEsIDAsIFwmIzM0OyVzOiBwYXJzZSBlcnJvclwmIzM0OywgYXJndlswXSk7XG4tXHRcdH1cbi1cdH1cbiYjNDM7XHRBU1NFUlRfRVEocGlkLCB3YWl0KFx1MDAyNndzdGF0dXMpKSBUSF9MT0coXCYjMzQ7d2FpdCBmYWlsZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9UUlVFKFdJRkVYSVRFRCh3c3RhdHVzKSkgVEhfTE9HKFwmIzM0O2NoaWxkIGRpZCBub3QgZXhpdCBub3JtYWxseVwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIFdFWElUU1RBVFVTKHdzdGF0dXMpKSBUSF9MT0coXCYjMzQ7Y2hpbGQgcmVwb3J0ZWQgdW5leHBlY3RlZCByZXN1bHRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbiB9XG4gXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuJiM0MztURVNUKHJlbmV3X2xhYmVsX2xpbmdlcilcbiB7XG4tXHRpbnQgZmQ7XG4tXG4tXHRwYXJzZV9vcHRzKGFyZ2MsIGFyZ3YpO1xuJiM0MztcdC8qIEFmdGVyIGEgbGFiZWwgd2l0aCBFWENMIHNoYXJlIGlzIHB1dCBhbmQgbGluZ2VyZWQsIGl0IG11c3QgYmVcbiYjNDM7XHQgKiBwb3NzaWJsZSB0byBjcmVhdGUgYSBuZXcgb25lLiBDaGVjayBpZiBSRU5FVyBhY3Rpb24gZXh0ZW5kc1xuJiM0MztcdCAqIHRoZSBsaW5nZXIgcGVyaW9kIG9mIHB1dCBsYWJlbCwgYmxvY2tpbmcgY3JlYXRpb24gYWZ0ZXIgcHJldmlvdXNcbiYjNDM7XHQgKiBsaW5nZXIgdGltZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpbnQgZmQsIGVycjtcbiBcbiBcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbi1cdGlmIChmZCA9PSAtMSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O3NvY2tldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCYjMzQ7c29ja2V0IGZhaWxlZFwmIzM0Oyk7XG4gXG4tXHRydW5fdGVzdHMoZmQpO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDUsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBsYWJlbCB3aXRoIEZMX01JTl9MSU5HRVIgbGluZ2VyIHRpbWVcJiMzNDspO1xuIFxuLVx0aWYgKGNsb3NlKGZkKSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O2Nsb3NlXCYjMzQ7KTtcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcmVuZXcoZmQsIDUsIDIgKiAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSkpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gcmVuZXcgdGhlIGxhYmVsIHRvIGluY3JlYXNlIGl0cyBsaW5nZXIgdGltZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gcHV0IHRoZSBsYWJlbFwmIzM0Oyk7XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRzbGVlcChGTF9NSU5fTElOR0VSICogMiAmIzQzOyAxKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgbmV3IGxpbmdlciB0aW1lIG5vdCBvdmVyIHlldFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuIH1cbiYjNDM7XG4mIzQzO1RFU1QocmVtb3RlX2ZsYWcpXG4mIzQzO3tcbiYjNDM7XHQvKiBUaGUgUkVNT1RFIGZsYWcsIHVzZWQgZm9yIGdldHNvY2tvcHQsIGlzIGV4cGVjdGVkIHRvIHJldHJpZXZlIHRoZVxuJiM0MztcdCAqIGxhYmVsIGZyb20gdGhlIGxhdGVzdCByZWNlaXZlZCBoZWFkZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIGZyZXEgPSB7XG4mIzQzO1x0XHQuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsXG4mIzQzO1x0XHQuZmxyX2ZsYWdzID0gSVBWNl9GTF9GX1JFTU9URSxcbiYjNDM7XHR9O1xuJiM0MztcdHNvY2tsZW5fdCBmcmVxX2xlbiA9IHNpemVvZihmcmVxKTtcbiYjNDM7XHRpbnQgbGlzdGVuZXIsIGNmZCwgYWZkLCBlcnI7XG4mIzQzO1xuJiM0MztcdGxpc3RlbmVyID0gdGNwX2xpc3RlbigpO1xuJiM0MztcdHRjcF9jb25uZWN0KGxpc3RlbmVyLCA2LCBcdTAwMjZjZmQsIFx1MDAyNmFmZCk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZmcmVxLCBcdTAwMjZmcmVxX2xlbik7XG4mIzQzO1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2dldHNvY2tvcHQgd2l0aCBJUFY2X0ZMX0ZfUkVNT1RFIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKDYsIG50b2hsKGZyZXEuZmxyX2xhYmVsKSkgVEhfTE9HKFwmIzM0O3VuZXhwZWN0ZWQgcmVtb3RlIGZsb3cgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgY2xvc2UoYWZkKSk7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGNsb3NlKGNmZCkpO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShsaXN0ZW5lcikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKHJlZmxlY3RfZmxhZylcbiYjNDM7e1xuJiM0MztcdC8qIFRoZSBSRUZMRUNUIGZsYWcgYWN0cyBhcyBhIHRyaWdnZXIgdG8gdGhlIFJFUEZMT1cgYml0LiBXaGVuIFJFUEZMT1dcbiYjNDM7XHQgKiBpcyB0cmlnZ2VyZWQgZm9yIGEgc29ja2V0LCBpdCBhZG9wdHMgdGhlIGxhYmVsIHJlY2VpdmVkIGZyb20gdGhlXG4mIzQzO1x0ICogY29ubmVjdGVkIHNvY2tldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9vbiA9IHtcbiYjNDM7XHRcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCxcbiYjNDM7XHRcdC5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVGTEVDVCxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZWZsZWN0X3F1ZXJ5ID0ge1xuJiM0MztcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfR0VULFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlZmxlY3Rfb2ZmID0ge1xuJiM0MztcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUFVULFxuJiM0MztcdFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRUZMRUNULFxuJiM0MztcdH07XG4mIzQzO1x0c29ja2xlbl90IHJlZmxlY3RfcXVlcnlfbGVuID0gc2l6ZW9mKHJlZmxlY3RfcXVlcnkpO1xuJiM0MztcdGludCBsaXN0ZW5lciwgY2ZkLCBhZmQsIGVycjtcbiYjNDM7XG4mIzQzO1x0c2V0X2Zsb3dsYWJlbF9jb25zaXN0ZW5jeShmYWxzZSk7XG4mIzQzO1xuJiM0MztcdGxpc3RlbmVyID0gdGNwX2xpc3RlbigpO1xuJiM0MztcdGVyciA9IHNldHNvY2tvcHQobGlzdGVuZXIsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlZmxlY3Rfb24sIHNpemVvZihyZWZsZWN0X29uKSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBlbmFibGUgUkVGTEVDVCBvbiB0aGUgbGlzdGVuZXJcJiMzNDspO1xuJiM0MztcbiYjNDM7XHR0Y3BfY29ubmVjdChsaXN0ZW5lciwgNywgXHUwMDI2Y2ZkLCBcdTAwMjZhZmQpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBnZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXHUwMDI2cmVmbGVjdF9xdWVyeSwgXHUwMDI2cmVmbGVjdF9xdWVyeV9sZW4pO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gcXVlcnkgdGhlIGFjY2VwdGVkIHNvY2tldCYjMzk7cyBvdXRnb2luZyBsYWJlbFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKDcsIG50b2hsKHJlZmxlY3RfcXVlcnkuZmxyX2xhYmVsKSkgVEhfTE9HKFwmIzM0O2FjY2VwdGVkIHNvY2tldCBkaWQgbm90IHJlZmxlY3QgY2xpZW50JiMzOTtzIGxhYmVsXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gc2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlZmxlY3Rfb2ZmLCBzaXplb2YocmVmbGVjdF9vZmYpKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGRpc2FibGUgUkVGTEVDVCBvbiB0aGUgYWNjZXB0ZWQgc29ja2V0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gc2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlZmxlY3Rfb2ZmLCBzaXplb2YocmVmbGVjdF9vZmYpKTtcbiYjNDM7XHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBkaXNhYmxpbmcgUkVGTEVDVCB0d2ljZSB0byBmYWlsXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0c2V0X2Zsb3dsYWJlbF9jb25zaXN0ZW5jeSh0cnVlKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGNsb3NlKGFmZCkpO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShjZmQpKTtcbiYjNDM7XHRBU1NFUlRfRVEoMCwgY2xvc2UobGlzdGVuZXIpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9IQVJORVNTX01BSU5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNjoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBhIHVzZXItc3BhY2Ugc2VsZnRlc3QgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYykgYW5kIG1ha2VzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRlYTU0NmI5Mzc5NDExMTVhMDNhZmNjZDc2NjEyMTlhMWZiNjE0ZWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAxNjoxNTo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYwppbmRleCBhZjk1YjQ4YWNlYTkwYi4uOWFhNWM4MTQ2ZjE3MTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMKQEAgLTYsNiAmIzQzOzYsNyBAQAogI2luY2x1ZGUgJmx0O2FycGEvaW5ldC5oJmd0OwogI2luY2x1ZGUgJmx0O2Vycm9yLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW1pdHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbjYuaCZndDsKICNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CkBAIC0xOSwzMSAmIzQzOzIwLDI1IEBACiAjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3dhaXQuaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmgmIzM0OwogCiAvKiB1YXBpL2dsaWJjIHdlaXJkbmVzcyBtYXkgbGVhdmUgdGhpcyB1bmRlZmluZWQgKi8KICNpZm5kZWYgSVBWNl9GTE9XTEFCRUxfTUdSCiAjZGVmaW5lIElQVjZfRkxPV0xBQkVMX01HUgkzMgogI2VuZGlmCiYjNDM7I2lmbmRlZiBJUFY2X0ZMT1dJTkZPX1NFTkQKJiM0MzsjZGVmaW5lIElQVjZfRkxPV0lORk9fU0VORAkzMwomIzQzOyNlbmRpZgogCiAvKiBmcm9tIG5ldC9pcHY2L2lwNl9mbG93bGFiZWwuYyAqLwogI2RlZmluZSBGTF9NSU5fTElOR0VSCQk2CiAKLSNkZWZpbmUgZXhwbGFpbih4KQkJCQkJCQlcCi0JZG8geyBpZiAoY2ZnX3ZlcmJvc2UpIGZwcmludGYoc3RkZXJyLCAmIzM0OyAgICAgICAmIzM0OyB4ICYjMzQ7XG4mIzM0Oyk7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX19leHBlY3QoeCkJCQkJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJaWYgKCEoeCkpCQkJCQkJXAotCQkJZnByaW50ZihzdGRlcnIsICYjMzQ7W09LXSAgICYjMzQ7ICN4ICYjMzQ7XG4mIzM0Oyk7CQlcCi0JCWVsc2UJCQkJCQkJXAotCQkJZXJyb3IoMSwgMCwgJiMzNDtbRVJSXSAgJiMzNDsgI3ggJiMzNDsgKGxpbmUgJWQpJiMzNDssIF9fTElORV9fKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgZXhwZWN0X3Bhc3MoeCkJX19leHBlY3QoeCkKLSNkZWZpbmUgZXhwZWN0X2ZhaWwoeCkJX19leHBlY3QoISh4KSkKLQotc3RhdGljIGJvb2wgY2ZnX2xvbmdfcnVubmluZzsKLXN0YXRpYyBib29sIGNmZ192ZXJib3NlOwomIzQzOyNkZWZpbmUgSU5JVF9TSU42X0xPT1BCQUNLKG5hbWUpCQkJCQlcCiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9pbjYgbmFtZSA9IHsJCQkJCVwKJiM0MzsJCS5zaW42X2ZhbWlseQk9IEFGX0lORVQ2LAkJCQlcCiYjNDM7CQkuc2luNl9hZGRyCT0gSU42QUREUl9MT09QQkFDS19JTklULAkJXAomIzQzOwkJLnNpbjZfcG9ydAk9IGh0b25zKDg4ODgpLAkJCQlcCiYjNDM7CX0KIAogc3RhdGljIGludCBmbG93bGFiZWxfZ2V0KGludCBmZCwgdWludDMyX3QgbGFiZWwsIHVpbnQ4X3Qgc2hhcmUsIHVpbnQxNl90IGZsYWdzKQogewpAQCAtNzEsMTI5ICYjNDM7NjYsMzQ0IEBAIHN0YXRpYyBpbnQgZmxvd2xhYmVsX3B1dChpbnQgZmQsIHVpbnQzMl90IGxhYmVsKQogCXJldHVybiBzZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCAmYW1wO3JlcSwgc2l6ZW9mKHJlcSkpOwogfQogCi1zdGF0aWMgdm9pZCBydW5fdGVzdHMoaW50IGZkKQomIzQzO3N0YXRpYyBpbnQgZmxvd2xhYmVsX3JlbmV3KGludCBmZCwgdWludDMyX3QgbGFiZWwsIHVpbnQxNl90IGxpbmdlcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZXEgPSB7CiYjNDM7CQkuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9SRU5FVywKJiM0MzsJCS5mbHJfbGFiZWwgPSBodG9ubChsYWJlbCksCiYjNDM7CQkuZmxyX2xpbmdlciA9IGxpbmdlciwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsICZhbXA7cmVxLCBzaXplb2YocmVxKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdGNwX2xpc3Rlbih2b2lkKQomIzQzO3sKJiM0MzsJSU5JVF9TSU42X0xPT1BCQUNLKGFkZHIpOwomIzQzOwljb25zdCBpbnQgb25lID0gMTsKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19TVFJFQU0sIDApOwomIzQzOwlpZiAoZmQgPT0gLTEpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtzb2NrZXQgbGlzdGVuZXImIzM0Oyk7CiYjNDM7CWlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsICZhbXA7b25lLCBzaXplb2Yob25lKSkpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtzZXRzb2Nrb3B0IFNPX1JFVVNFQUREUiYjMzQ7KTsKJiM0MzsJaWYgKGJpbmQoZmQsICh2b2lkICopJmFtcDthZGRyLCBzaXplb2YoYWRkcikpKQomIzQzOwkJZXJyb3IoMSwgZXJybm8sICYjMzQ7YmluZCYjMzQ7KTsKJiM0MzsJaWYgKGxpc3RlbihmZCwgMSkpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtsaXN0ZW4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldHVybiBmZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGNwX2Nvbm5lY3QoaW50IGxpc3RlbmVyLCB1aW50MzJfdCBmbG93bGFiZWwsIGludCAqY2xpZW50LCBpbnQgKmFjY2VwdGVkKQomIzQzO3sKJiM0MzsJSU5JVF9TSU42X0xPT1BCQUNLKGFkZHIpOwomIzQzOwljb25zdCBpbnQgb25lID0gMTsKJiM0MzsJaW50IGNmZCwgYWZkOwomIzQzOwomIzQzOwljZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfU1RSRUFNLCAwKTsKJiM0MzsJaWYgKGNmZCA9PSAtMSkKJiM0MzsJCWVycm9yKDEsIGVycm5vLCAmIzM0O3NvY2tldCBjbGllbnQmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChmbG93bGFiZWxfZ2V0KGNmZCwgZmxvd2xhYmVsLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtmbG93bGFiZWxfZ2V0JiMzNDspOwomIzQzOwlpZiAoc2V0c29ja29wdChjZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dJTkZPX1NFTkQsICZhbXA7b25lLCBzaXplb2Yob25lKSkpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtzZXRzb2Nrb3B0IGZsb3dpbmZvX3NlbmQmIzM0Oyk7CiYjNDM7CWFkZHIuc2luNl9mbG93aW5mbyA9IGh0b25sKGZsb3dsYWJlbCk7CiYjNDM7CiYjNDM7CWlmIChjb25uZWN0KGNmZCwgKHZvaWQgKikmYW1wO2FkZHIsIHNpemVvZihhZGRyKSkpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtjb25uZWN0JiMzNDspOwomIzQzOwomIzQzOwlhZmQgPSBhY2NlcHQobGlzdGVuZXIsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoYWZkID09IC0xKQomIzQzOwkJZXJyb3IoMSwgZXJybm8sICYjMzQ7YWNjZXB0JiMzNDspOwomIzQzOwomIzQzOwkqY2xpZW50ID0gY2ZkOwomIzQzOwkqYWNjZXB0ZWQgPSBhZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldF9mbG93bGFiZWxfY29uc2lzdGVuY3koYm9vbCBlbmFibGUpCiYjNDM7ewomIzQzOwkvKiBmbG93bGFiZWxfY29uc2lzdGVuY3kgbXVzdCBiZSBkaXNhYmxlIHRvIHVzZSB0aGUgSVBWNl9GTF9GX1JFRkxFQ1QKJiM0MzsJICogZmxhZy4gVGhpcyBoZWxwZXIgZnVuY3Rpb24gaXMgcmVxdWlyZWQgZm9yIHNldHRpbmcgdXAgYW5kIHRlYXJpbmcKJiM0MzsJICogZG93biB0ZXN0IGNhc2VzIGZvciB0aGlzIGZsYWcuCiYjNDM7CSAqLwomIzQzOwlpbnQgZmQ7CiYjNDM7CiYjNDM7CWZkID0gb3BlbigmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2Ni9mbG93bGFiZWxfY29uc2lzdGVuY3kmIzM0OywgT19XUk9OTFkpOwomIzQzOwlpZiAoZmQgPT0gLTEpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtvcGVuIGZsb3dsYWJlbF9jb25zaXN0ZW5jeSYjMzQ7KTsKJiM0MzsJaWYgKHdyaXRlKGZkLCBlbmFibGUgPyAmIzM0OzEmIzM0OyA6ICYjMzQ7MCYjMzQ7LCAxKSAhPSAxKQomIzQzOwkJZXJyb3IoMSwgZXJybm8sICYjMzQ7d3JpdGUgZmxvd2xhYmVsX2NvbnNpc3RlbmN5JiMzNDspOwomIzQzOwlpZiAoY2xvc2UoZmQpKQomIzQzOwkJZXJyb3IoMSwgZXJybm8sICYjMzQ7Y2xvc2UgZmxvd2xhYmVsX2NvbnNpc3RlbmN5JiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGNhbm5vdF9nZXRfbm9uX2V4aXN0ZW50X2xhYmVsKQomIzQzO3sKJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKTsKJiM0MzsJQVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coJiMzNDtleHBlY3RlZCBnZXQgb2YgYSBub24tZXhpc3RlbnQgbGFiZWwgdG8gZmFpbCYjMzQ7KTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1QoY2Fubm90X3B1dF9ub25fZXhpc3RlbnRfbGFiZWwpCiYjNDM7ewomIzQzOwlpbnQgZmQsIGVycjsKJiM0MzsKJiM0MzsJZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApIFRIX0xPRygmIzM0O3NvY2tldCBmYWlsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpOwomIzQzOwlBU1NFUlRfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIHB1dCBvZiBhIG5vbi1leGlzdGVudCBsYWJlbCB0byBmYWlsJiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChjYW5ub3RfY3JlYXRlX2xhYmVsX2dyZWF0ZXJfdGhhbl8yMF9iaXRzKQomIzQzO3sKJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAweDFGRkZGRiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUFTU0VSVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgbGFiZWwgJmd0OyAyMCBiaXRzIHRvIGJlIHJlamVjdGVkJiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChjYW5fY3JlYXRlX2FuZF9nZXRfYW5kX3B1dF9sYWJlbHMpCiYjNDM7ewomIzQzOwlpbnQgZmQsIGVycjsKJiM0MzsKJiM0MzsJZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApIFRIX0xPRygmIzM0O3NvY2tldCBmYWlsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGxhYmVsIChGTF9GX0NSRUFURSkmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gZ2V0IHRoZSBsYWJlbCB3aXRob3V0IEZMX0ZfQ1JFQVRFJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFIHwgSVBWNl9GTF9GX0VYQ0wpOwomIzQzOwlBU1NFUlRfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIEZMX0ZfRVhDTCB0byByZWplY3QgYW4gYWxyZWFkeS1leGlzdGluZyBsYWJlbCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBwdXQgZmlyc3QgcmVmZXJlbmNlJiMzNDspOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIHB1dCBzZWNvbmQgcmVmZXJlbmNlJiMzNDspOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIHB1dCB0aGlyZCByZWZlcmVuY2UmIzM0Oyk7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpOwomIzQzOwlBU1NFUlRfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIGZvdXJ0aCBwdXQgdG8gZmFpbCwgbm8gcmVmZXJlbmNlcyBsZWZ0JiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChleGNsdXNpdmVfbGFiZWxfc2hhcmUpCiB7Ci0JaW50IHdzdGF0dXM7CiYjNDM7CWludCBmZCwgZXJyOwomIzQzOwomIzQzOwlmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CiYjNDM7CUFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKCYjMzQ7c29ja2V0IGZhaWxlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGV4Y2x1c2l2ZSBsYWJlbCAoRkxfU19FWENMKSYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUFTU0VSVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgcmV1c2UgaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWwmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKTsKJiM0MzsJQVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coJiMzNDtleHBlY3RlZCByZXVzZSBpbiBleGNsdXNpdmUgbW9kZSB0byBmYWlsIHRvbyYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMik7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBwdXQgdGhlIGV4Y2x1c2l2ZSBsYWJlbCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUFTU0VSVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgZHVlIHRvIGxpbmdlciYjMzQ7KTsKJiM0MzsKJiM0MzsJc2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtleHBlY3RlZCByZXVzZSB0byBzdWNjZWVkIGFmdGVyIGxpbmdlciYjMzQ7KTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1QodXNlcl9wcml2YXRlX2xhYmVsX3NoYXJlKQomIzQzO3sKJiM0MzsJaW50IGZkLCBlcnIsIHdzdGF0dXM7CiAJcGlkX3QgcGlkOwogCi0JZXhwbGFpbigmIzM0O2Nhbm5vdCBnZXQgbm9uLWV4aXN0ZW50IGxhYmVsJiMzNDspOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApKTsKLQotCWV4cGxhaW4oJiMzNDtjYW5ub3QgcHV0IG5vbi1leGlzdGVudCBsYWJlbCYjMzQ7KTsKLQlleHBlY3RfZmFpbChmbG93bGFiZWxfcHV0KGZkLCAxKSk7Ci0KLQlleHBsYWluKCYjMzQ7Y2Fubm90IGNyZWF0ZSBsYWJlbCBncmVhdGVyIHRoYW4gMjAgYml0cyYjMzQ7KTsKLQlleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAweDFGRkZGRiwgSVBWNl9GTF9TX0FOWSwKLQkJCQkgIElQVjZfRkxfRl9DUkVBVEUpKTsKLQotCWV4cGxhaW4oJiMzNDtjcmVhdGUgYSBuZXcgbGFiZWwgKEZMX0ZfQ1JFQVRFKSYjMzQ7KTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0JZXhwbGFpbigmIzM0O2NhbiBnZXQgdGhlIGxhYmVsICh3aXRob3V0IEZMX0ZfQ1JFQVRFKSYjMzQ7KTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKSk7Ci0JZXhwbGFpbigmIzM0O2NhbiBnZXQgaXQgYWdhaW4gd2l0aCBjcmVhdGUgZmxhZyBzZXQsIHRvbyYjMzQ7KTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0JZXhwbGFpbigmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gd2l0aCB0aGUgZXhjbHVzaXZlIChGTF9GTF9FWENMKSBmbGFnJiMzNDspOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksCi0JCQkJCSBJUFY2X0ZMX0ZfQ1JFQVRFIHwgSVBWNl9GTF9GX0VYQ0wpKTsKLQlleHBsYWluKCYjMzQ7Y2FuIG5vdyBwdXQgZXhhY3RseSB0aHJlZSByZWZlcmVuY2VzJiMzNDspOwotCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAxKSk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTsKLQotCWV4cGxhaW4oJiMzNDtjcmVhdGUgYSBuZXcgZXhjbHVzaXZlIGxhYmVsIChGTF9TX0VYQ0wpJiMzNDspOwotCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0JZXhwbGFpbigmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlJiMzNDspOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0JZXhwbGFpbigmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gZXhjbHVzaXZlIG1vZGUgZWl0aGVyJiMzNDspOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMikpOwotCi0JaWYgKGNmZ19sb25nX3J1bm5pbmcpIHsKLQkJZXhwbGFpbigmIzM0O2Nhbm5vdCByZXVzZSB0aGUgbGFiZWwsIGR1ZSB0byBsaW5nZXImIzM0Oyk7Ci0JCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksCi0JCQkJCSAgSVBWNl9GTF9GX0NSRUFURSkpOwotCQlleHBsYWluKCYjMzQ7YWZ0ZXIgc2xlZXAsIGNhbiByZXVzZSYjMzQ7KTsKLQkJc2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSk7Ci0JCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksCi0JCQkJCSAgSVBWNl9GTF9GX0NSRUFURSkpOwotCX0KJiM0MzsJZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApIFRIX0xPRygmIzM0O3NvY2tldCBmYWlsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCBJUFY2X0ZMX0ZfQ1JFQVRFKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyB1c2VyLXByaXZhdGUgbGFiZWwgKEZMX1NfVVNFUikmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19BTlksIDApOwomIzQzOwlBU1NFUlRfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIGdldCBpbiBub24tZXhjbHVzaXZlIG1vZGUgdG8gZmFpbCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0VYQ0wsIDApOwomIzQzOwlBU1NFUlRfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIGdldCBpbiBleGNsdXNpdmUgbW9kZSB0byBmYWlsJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBnZXQgaXQgYWdhaW4gaW4gdXNlciBtb2RlJiMzNDspOwogCi0JZXhwbGFpbigmIzM0O2NyZWF0ZSBhIG5ldyB1c2VyLXByaXZhdGUgbGFiZWwgKEZMX1NfVVNFUikmIzM0Oyk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIElQVjZfRkxfRl9DUkVBVEUpKTsKLQlleHBsYWluKCYjMzQ7Y2Fubm90IGdldCBpdCBhZ2FpbiBpbiBub24tZXhjbHVzaXZlIG1vZGUmIzM0Oyk7Ci0JZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0FOWSwgMCkpOwotCWV4cGxhaW4oJiMzNDtjYW5ub3QgZ2V0IGl0IGFnYWluIGluIGV4Y2x1c2l2ZSBtb2RlJiMzNDspOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19FWENMLCAwKSk7Ci0JZXhwbGFpbigmIzM0O2NhbiBnZXQgaXQgYWdhaW4gaW4gdXNlciBtb2RlJiMzNDspOwotCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7Ci0JZXhwbGFpbigmIzM0O2NoaWxkIHByb2Nlc3MgY2FuIGdldCBpdCB0b28sIGJ1dCBub3QgYWZ0ZXIgc2V0dWlkKG5vYm9keSkmIzM0Oyk7CiAJcGlkID0gZm9yaygpOwotCWlmIChwaWQgPT0gLTEpCi0JCWVycm9yKDEsIGVycm5vLCAmIzM0O2ZvcmsmIzM0Oyk7CiYjNDM7CUFTU0VSVF9ORSgtMSwgcGlkKSBUSF9MT0coJiMzNDtmb3JrIGZhaWxlZCYjMzQ7KTsKIAlpZiAoIXBpZCkgewotCQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpOwotCQlpZiAoc2V0dWlkKFVTSFJUX01BWCkpCiYjNDM7CQlpZiAoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKQomIzQzOwkJCWV4aXQoMSk7CiYjNDM7CQlpZiAoc2V0dWlkKFVTSFJUX01BWCkpIHsKIAkJCWZwcmludGYoc3RkZXJyLCAmIzM0O1tJTkZPXSBza2lwIHNldHVpZCBjaGlsZCB0ZXN0XG4mIzM0Oyk7Ci0JCWVsc2UKLQkJCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7CiYjNDM7CQkJZXhpdCgwKTsKJiM0MzsJCX0KJiM0MzsJCWlmICghZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKQomIzQzOwkJCWV4aXQoMSk7CiAJCWV4aXQoMCk7CiAJfQotCWlmICh3YWl0KCZhbXA7d3N0YXR1cykgPT0gLTEpCi0JCWVycm9yKDEsIGVycm5vLCAmIzM0O3dhaXQmIzM0Oyk7Ci0JaWYgKCFXSUZFWElURUQod3N0YXR1cykgfHwgV0VYSVRTVEFUVVMod3N0YXR1cykgIT0gMCkKLQkJZXJyb3IoMSwgZXJybm8sICYjMzQ7d2FpdDogdW5leHBlY3RlZCBjaGlsZCByZXN1bHQmIzM0Oyk7Ci0KLQlleHBsYWluKCYjMzQ7Y3JlYXRlIGEgbmV3IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbCAoRkxfU19QUk9DRVNTKSYjMzQ7KTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgSVBWNl9GTF9GX0NSRUFURSkpOwotCWV4cGxhaW4oJiMzNDtjYW4gZ2V0IGl0IGFnYWluJiMzNDspOwotCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7Ci0JZXhwbGFpbigmIzM0O2NoaWxkIHByb2Nlc3MgY2Fubm90IGNhbiBnZXQgaXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShwaWQsIHdhaXQoJmFtcDt3c3RhdHVzKSkgVEhfTE9HKCYjMzQ7d2FpdCBmYWlsZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9UUlVFKFdJRkVYSVRFRCh3c3RhdHVzKSkgVEhfTE9HKCYjMzQ7Y2hpbGQgZGlkIG5vdCBleGl0IG5vcm1hbGx5JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoMCwgV0VYSVRTVEFUVVMod3N0YXR1cykpIFRIX0xPRygmIzM0O2NoaWxkIHJlcG9ydGVkIHVuZXhwZWN0ZWQgcmVzdWx0JiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChwcm9jZXNzX3ByaXZhdGVfbGFiZWxfc2hhcmUpCiYjNDM7ewomIzQzOwlpbnQgZmQsIGVyciwgd3N0YXR1czsKJiM0MzsJcGlkX3QgcGlkOwomIzQzOwomIzQzOwlmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CiYjNDM7CUFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKCYjMzQ7c29ja2V0IGZhaWxlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbCAoRkxfU19QUk9DRVNTKSYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gZ2V0IGl0IGFnYWluJiMzNDspOwomIzQzOwogCXBpZCA9IGZvcmsoKTsKLQlpZiAocGlkID09IC0xKQotCQllcnJvcigxLCBlcnJubywgJiMzNDtmb3JrJiMzNDspOwomIzQzOwlBU1NFUlRfTkUoLTEsIHBpZCkgVEhfTE9HKCYjMzQ7Zm9yayBmYWlsZWQmIzM0Oyk7CiAJaWYgKCFwaWQpIHsKLQkJZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApKTsKJiM0MzsJCWlmICghZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApKQomIzQzOwkJCWV4aXQoMSk7CiAJCWV4aXQoMCk7CiAJfQotCWlmICh3YWl0KCZhbXA7d3N0YXR1cykgPT0gLTEpCi0JCWVycm9yKDEsIGVycm5vLCAmIzM0O3dhaXQmIzM0Oyk7Ci0JaWYgKCFXSUZFWElURUQod3N0YXR1cykgfHwgV0VYSVRTVEFUVVMod3N0YXR1cykgIT0gMCkKLQkJZXJyb3IoMSwgZXJybm8sICYjMzQ7d2FpdDogdW5leHBlY3RlZCBjaGlsZCByZXN1bHQmIzM0Oyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotCWludCBjOwotCi0Jd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICYjMzQ7bHYmIzM0OykpICE9IC0xKSB7Ci0JCXN3aXRjaCAoYykgewotCQljYXNlICYjMzk7bCYjMzk7OgotCQkJY2ZnX2xvbmdfcnVubmluZyA9IHRydWU7Ci0JCQlicmVhazsKLQkJY2FzZSAmIzM5O3YmIzM5OzoKLQkJCWNmZ192ZXJib3NlID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZXJyb3IoMSwgMCwgJiMzNDslczogcGFyc2UgZXJyb3ImIzM0OywgYXJndlswXSk7Ci0JCX0KLQl9CiYjNDM7CUFTU0VSVF9FUShwaWQsIHdhaXQoJmFtcDt3c3RhdHVzKSkgVEhfTE9HKCYjMzQ7d2FpdCBmYWlsZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9UUlVFKFdJRkVYSVRFRCh3c3RhdHVzKSkgVEhfTE9HKCYjMzQ7Y2hpbGQgZGlkIG5vdCBleGl0IG5vcm1hbGx5JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoMCwgV0VYSVRTVEFUVVMod3N0YXR1cykpIFRIX0xPRygmIzM0O2NoaWxkIHJlcG9ydGVkIHVuZXhwZWN0ZWQgcmVzdWx0JiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQomIzQzO1RFU1QocmVuZXdfbGFiZWxfbGluZ2VyKQogewotCWludCBmZDsKLQotCXBhcnNlX29wdHMoYXJnYywgYXJndik7CiYjNDM7CS8qIEFmdGVyIGEgbGFiZWwgd2l0aCBFWENMIHNoYXJlIGlzIHB1dCBhbmQgbGluZ2VyZWQsIGl0IG11c3QgYmUKJiM0MzsJICogcG9zc2libGUgdG8gY3JlYXRlIGEgbmV3IG9uZS4gQ2hlY2sgaWYgUkVORVcgYWN0aW9uIGV4dGVuZHMKJiM0MzsJICogdGhlIGxpbmdlciBwZXJpb2Qgb2YgcHV0IGxhYmVsLCBibG9ja2luZyBjcmVhdGlvbiBhZnRlciBwcmV2aW91cwomIzQzOwkgKiBsaW5nZXIgdGltZS4KJiM0MzsJICovCiYjNDM7CWludCBmZCwgZXJyOwogCiAJZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApOwotCWlmIChmZCA9PSAtMSkKLQkJZXJyb3IoMSwgZXJybm8sICYjMzQ7c29ja2V0JiMzNDspOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApIFRIX0xPRygmIzM0O3NvY2tldCBmYWlsZWQmIzM0Oyk7CiAKLQlydW5fdGVzdHMoZmQpOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA1LCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgbGFiZWwgd2l0aCBGTF9NSU5fTElOR0VSIGxpbmdlciB0aW1lJiMzNDspOwogCi0JaWYgKGNsb3NlKGZkKSkKLQkJZXJyb3IoMSwgZXJybm8sICYjMzQ7Y2xvc2UmIzM0Oyk7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNSwgMiAqIChGTF9NSU5fTElOR0VSICogMiAmIzQzOyAxKSk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byByZW5ldyB0aGUgbGFiZWwgdG8gaW5jcmVhc2UgaXRzIGxpbmdlciB0aW1lJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcHV0KGZkLCA1KTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIHB1dCB0aGUgbGFiZWwmIzM0Oyk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJc2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDUsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlBU1NFUlRfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIHJldXNlIHRvIGZhaWwsIG5ldyBsaW5nZXIgdGltZSBub3Qgb3ZlciB5ZXQmIzM0Oyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBjbG9zZShmZCkpOwogfQomIzQzOwomIzQzO1RFU1QocmVtb3RlX2ZsYWcpCiYjNDM7ewomIzQzOwkvKiBUaGUgUkVNT1RFIGZsYWcsIHVzZWQgZm9yIGdldHNvY2tvcHQsIGlzIGV4cGVjdGVkIHRvIHJldHJpZXZlIHRoZQomIzQzOwkgKiBsYWJlbCBmcm9tIHRoZSBsYXRlc3QgcmVjZWl2ZWQgaGVhZGVyLgomIzQzOwkgKi8KJiM0MzsJc3RydWN0IGluNl9mbG93bGFiZWxfcmVxIGZyZXEgPSB7CiYjNDM7CQkuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsCiYjNDM7CQkuZmxyX2ZsYWdzID0gSVBWNl9GTF9GX1JFTU9URSwKJiM0MzsJfTsKJiM0MzsJc29ja2xlbl90IGZyZXFfbGVuID0gc2l6ZW9mKGZyZXEpOwomIzQzOwlpbnQgbGlzdGVuZXIsIGNmZCwgYWZkLCBlcnI7CiYjNDM7CiYjNDM7CWxpc3RlbmVyID0gdGNwX2xpc3RlbigpOwomIzQzOwl0Y3BfY29ubmVjdChsaXN0ZW5lciwgNiwgJmFtcDtjZmQsICZhbXA7YWZkKTsKJiM0MzsKJiM0MzsJZXJyID0gZ2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsICZhbXA7ZnJlcSwgJmFtcDtmcmVxX2xlbik7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2dldHNvY2tvcHQgd2l0aCBJUFY2X0ZMX0ZfUkVNT1RFIGZhaWxlZCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKDYsIG50b2hsKGZyZXEuZmxyX2xhYmVsKSkgVEhfTE9HKCYjMzQ7dW5leHBlY3RlZCByZW1vdGUgZmxvdyBsYWJlbCYjMzQ7KTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGNsb3NlKGFmZCkpOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoY2ZkKSk7CiYjNDM7CUFTU0VSVF9FUSgwLCBjbG9zZShsaXN0ZW5lcikpOwomIzQzO30KJiM0MzsKJiM0MztURVNUKHJlZmxlY3RfZmxhZykKJiM0Mzt7CiYjNDM7CS8qIFRoZSBSRUZMRUNUIGZsYWcgYWN0cyBhcyBhIHRyaWdnZXIgdG8gdGhlIFJFUEZMT1cgYml0LiBXaGVuIFJFUEZMT1cKJiM0MzsJICogaXMgdHJpZ2dlcmVkIGZvciBhIHNvY2tldCwgaXQgYWRvcHRzIHRoZSBsYWJlbCByZWNlaXZlZCBmcm9tIHRoZQomIzQzOwkgKiBjb25uZWN0ZWQgc29ja2V0LgomIzQzOwkgKi8KJiM0MzsJc3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlZmxlY3Rfb24gPSB7CiYjNDM7CQkuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsCiYjNDM7CQkuZmxyX2ZsYWdzID0gSVBWNl9GTF9GX1JFRkxFQ1QsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZWZsZWN0X3F1ZXJ5ID0gewomIzQzOwkJLmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfR0VULAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9vZmYgPSB7CiYjNDM7CQkuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9QVVQsCiYjNDM7CQkuZmxyX2ZsYWdzID0gSVBWNl9GTF9GX1JFRkxFQ1QsCiYjNDM7CX07CiYjNDM7CXNvY2tsZW5fdCByZWZsZWN0X3F1ZXJ5X2xlbiA9IHNpemVvZihyZWZsZWN0X3F1ZXJ5KTsKJiM0MzsJaW50IGxpc3RlbmVyLCBjZmQsIGFmZCwgZXJyOwomIzQzOwomIzQzOwlzZXRfZmxvd2xhYmVsX2NvbnNpc3RlbmN5KGZhbHNlKTsKJiM0MzsKJiM0MzsJbGlzdGVuZXIgPSB0Y3BfbGlzdGVuKCk7CiYjNDM7CWVyciA9IHNldHNvY2tvcHQobGlzdGVuZXIsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsICZhbXA7cmVmbGVjdF9vbiwgc2l6ZW9mKHJlZmxlY3Rfb24pKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBSRUZMRUNUIG9uIHRoZSBsaXN0ZW5lciYjMzQ7KTsKJiM0MzsKJiM0MzsJdGNwX2Nvbm5lY3QobGlzdGVuZXIsIDcsICZhbXA7Y2ZkLCAmYW1wO2FmZCk7CiYjNDM7CiYjNDM7CWVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCAmYW1wO3JlZmxlY3RfcXVlcnksICZhbXA7cmVmbGVjdF9xdWVyeV9sZW4pOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gcXVlcnkgdGhlIGFjY2VwdGVkIHNvY2tldCYjMzk7cyBvdXRnb2luZyBsYWJlbCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKDcsIG50b2hsKHJlZmxlY3RfcXVlcnkuZmxyX2xhYmVsKSkgVEhfTE9HKCYjMzQ7YWNjZXB0ZWQgc29ja2V0IGRpZCBub3QgcmVmbGVjdCBjbGllbnQmIzM5O3MgbGFiZWwmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IHNldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCAmYW1wO3JlZmxlY3Rfb2ZmLCBzaXplb2YocmVmbGVjdF9vZmYpKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGRpc2FibGUgUkVGTEVDVCBvbiB0aGUgYWNjZXB0ZWQgc29ja2V0JiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBzZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgJmFtcDtyZWZsZWN0X29mZiwgc2l6ZW9mKHJlZmxlY3Rfb2ZmKSk7CiYjNDM7CUFTU0VSVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgZGlzYWJsaW5nIFJFRkxFQ1QgdHdpY2UgdG8gZmFpbCYjMzQ7KTsKJiM0MzsKJiM0MzsJc2V0X2Zsb3dsYWJlbF9jb25zaXN0ZW5jeSh0cnVlKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGNsb3NlKGFmZCkpOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoY2ZkKSk7CiYjNDM7CUFTU0VSVF9FUSgwLCBjbG9zZShsaXN0ZW5lcikpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0hBUk5FU1NfTUFJTgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjAzCgkJCQkJCQlvdXRwdXQ6IDczCgkJCQkJCQl0aG91Z2h0czogNTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZz1mYWxzZTogSVB2NiBGbG93IExhYmVsIFNlbGZ0ZXN0IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIFRoaXMgcGF0Y2ggdG91Y2hlcyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jYC4gUmlnaHQsIGl0JiMzOTtzIGNvbnZlcnRpbmcgYW4gZXhpc3RpbmcgdGVzdCBhbmQgYWRkaW5nIG5ldyBvbmVzLCBhbGwgcmVsYXRlZCB0byBJUHY2IGZsb3cgbGFiZWxzLCBidXQgY3J1Y2lhbGx5LCBpdCYjMzk7cyAqb25seSogaW4gdGhlIHNlbGZ0ZXN0cy4gTm8ga2VybmVsIGNvZGUgaXMgYmVpbmcgbW9kaWZpZWQgaGVyZS4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkaWZm4oCmIFllcCwganVzdCB0aGF0IG9uZSBmaWxlLgoKU2luY2UgdGhpcyBpcyBwdXJlbHkgYSBzZWxmdGVzdCB1cGRhdGUsIHRoZXJlJiMzOTtzIHplcm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIGtlcm5lbCBpdHNlbGYgdGhhdCB3YXJyYW50cyBmdXp6aW5nLiBJdCYjMzk7cyB1c2VyLXNwYWNlIHRlc3RpbmcsIG5vdCBrZXJuZWwgYmVoYXZpb3IuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhlIHJ1bGVzIGNvcnJlY3RseS4gTGV0IG1lIHJlcmVhZCB0aGUgY3JpdGVyaWEuLi4KCkhtbSwgc2VsZnRlc3RzIGFyZW4mIzM5O3QgZXhwbGljaXRseSAqbGlzdGVkKiBpbiB0aGUgJiMzNDtXb3J0aEZ1enppbmc9ZmFsc2UmIzM0OyBsaXN0LCBidXQgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhleSBmYWxsIHVuZGVyIHRoZSBzcGlyaXQgb2YgdGhlIHJlc3RyaWN0aW9ucy4gVGhlc2UgYXJlIGlzb2xhdGVkIHVzZXItc3BhY2UgdGVzdHM7IGZ1enppbmcgdGhlIGtlcm5lbCBiYXNlZCBvbiBjaGFuZ2VzICp3aXRoaW4qIHRoZW0gbWFrZXMgbm8gc2Vuc2Ugc2luY2UgdGhlIGtlcm5lbCBpdHNlbGYgaGFzbiYjMzk7dCBiZWVuIG1vZGlmaWVkLiBBaCwgdGhlIGluc3RydWN0aW9ucyBzYXkgbXkgam9iIGlzIHRvIGRldGVybWluZSBpZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbC4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHBhdGNoIHNvbGVseSBjb25jZXJucyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBpdCBkb2VzICpub3QqIHdhcnJhbnQgZnV6emluZy4gSSYjMzk7bGwgcmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSB1c2VyLXNwYWNlIHNlbGZ0ZXN0ICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMpIGFuZCBtYWtlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSB1c2VyLXNwYWNlIHNlbGZ0ZXN0ICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMpIGFuZCBtYWtlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNjoxNTo1OS45MjI3ODUxNDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjQ0Njg2ODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgdXNlci1zcGFjZSBzZWxmdGVzdCAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jKSBhbmQgbWFrZXMgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNjoxNTo1OS45MjI3OTIxMjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTE3OTkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRlYTU0NmI5Mzc5NDExMTVhMDNhZmNjZDc2NjEyMTlhMWZiNjE0ZWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjcgMTY6MTU6NTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jXFxuaW5kZXggYWY5NWI0OGFjZWE5MGIuLjlhYTVjODE0NmYxNzE5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuY1xcbkBAIC02LDYgKzYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYXJwYS9pbmV0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NlcnJvci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW1pdHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luNi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbkBAIC0xOSwzMSArMjAsMjUgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy90eXBlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3dhaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4gXFxuIC8qIHVhcGkvZ2xpYmMgd2VpcmRuZXNzIG1heSBsZWF2ZSB0aGlzIHVuZGVmaW5lZCAqL1xcbiAjaWZuZGVmIElQVjZfRkxPV0xBQkVMX01HUlxcbiAjZGVmaW5lIElQVjZfRkxPV0xBQkVMX01HUlxcdDMyXFxuICNlbmRpZlxcbisjaWZuZGVmIElQVjZfRkxPV0lORk9fU0VORFxcbisjZGVmaW5lIElQVjZfRkxPV0lORk9fU0VORFxcdDMzXFxuKyNlbmRpZlxcbiBcXG4gLyogZnJvbSBuZXQvaXB2Ni9pcDZfZmxvd2xhYmVsLmMgKi9cXG4gI2RlZmluZSBGTF9NSU5fTElOR0VSXFx0XFx0NlxcbiBcXG4tI2RlZmluZSBleHBsYWluKHgpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRkbyB7IGlmIChjZmdfdmVyYm9zZSkgZnByaW50ZihzdGRlcnIsIFxcXCIgICAgICAgXFxcIiB4IFxcXCJcXFxcblxcXCIpOyB9IHdoaWxlICgwKVxcbi1cXG4tI2RlZmluZSBfX2V4cGVjdCh4KVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0aWYgKCEoeCkpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIltPS10gICBcXFwiICN4IFxcXCJcXFxcblxcXCIpO1xcdFxcdFxcXFxcXG4tXFx0XFx0ZWxzZVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0XFx0ZXJyb3IoMSwgMCwgXFxcIltFUlJdICBcXFwiICN4IFxcXCIgKGxpbmUgJWQpXFxcIiwgX19MSU5FX18pOyBcXFxcXFxuLVxcdH0gd2hpbGUgKDApXFxuLVxcbi0jZGVmaW5lIGV4cGVjdF9wYXNzKHgpXFx0X19leHBlY3QoeClcXG4tI2RlZmluZSBleHBlY3RfZmFpbCh4KVxcdF9fZXhwZWN0KCEoeCkpXFxuLVxcbi1zdGF0aWMgYm9vbCBjZmdfbG9uZ19ydW5uaW5nO1xcbi1zdGF0aWMgYm9vbCBjZmdfdmVyYm9zZTtcXG4rI2RlZmluZSBJTklUX1NJTjZfTE9PUEJBQ0sobmFtZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbjYgbmFtZSA9IHtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdC5zaW42X2ZhbWlseVxcdD0gQUZfSU5FVDYsXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHQuc2luNl9hZGRyXFx0PSBJTjZBRERSX0xPT1BCQUNLX0lOSVQsXFx0XFx0XFxcXFxcbitcXHRcXHQuc2luNl9wb3J0XFx0PSBodG9ucyg4ODg4KSxcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdH1cXG4gXFxuIHN0YXRpYyBpbnQgZmxvd2xhYmVsX2dldChpbnQgZmQsIHVpbnQzMl90IGxhYmVsLCB1aW50OF90IHNoYXJlLCB1aW50MTZfdCBmbGFncylcXG4ge1xcbkBAIC03MSwxMjkgKzY2LDM0NCBAQCBzdGF0aWMgaW50IGZsb3dsYWJlbF9wdXQoaW50IGZkLCB1aW50MzJfdCBsYWJlbClcXG4gXFx0cmV0dXJuIHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFxcdTAwMjZyZXEsIHNpemVvZihyZXEpKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcnVuX3Rlc3RzKGludCBmZClcXG4rc3RhdGljIGludCBmbG93bGFiZWxfcmVuZXcoaW50IGZkLCB1aW50MzJfdCBsYWJlbCwgdWludDE2X3QgbGluZ2VyKVxcbit7XFxuK1xcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZXEgPSB7XFxuK1xcdFxcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX1JFTkVXLFxcbitcXHRcXHQuZmxyX2xhYmVsID0gaHRvbmwobGFiZWwpLFxcbitcXHRcXHQuZmxyX2xpbmdlciA9IGxpbmdlcixcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBzZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcXHUwMDI2cmVxLCBzaXplb2YocmVxKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGNwX2xpc3Rlbih2b2lkKVxcbit7XFxuK1xcdElOSVRfU0lONl9MT09QQkFDSyhhZGRyKTtcXG4rXFx0Y29uc3QgaW50IG9uZSA9IDE7XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX1NUUkVBTSwgMCk7XFxuK1xcdGlmIChmZCA9PSAtMSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJzb2NrZXQgbGlzdGVuZXJcXFwiKTtcXG4rXFx0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgXFx1MDAyNm9uZSwgc2l6ZW9mKG9uZSkpKVxcbitcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcInNldHNvY2tvcHQgU09fUkVVU0VBRERSXFxcIik7XFxuK1xcdGlmIChiaW5kKGZkLCAodm9pZCAqKVxcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpKVxcbitcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcImJpbmRcXFwiKTtcXG4rXFx0aWYgKGxpc3RlbihmZCwgMSkpXFxuK1xcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwibGlzdGVuXFxcIik7XFxuK1xcbitcXHRyZXR1cm4gZmQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRjcF9jb25uZWN0KGludCBsaXN0ZW5lciwgdWludDMyX3QgZmxvd2xhYmVsLCBpbnQgKmNsaWVudCwgaW50ICphY2NlcHRlZClcXG4re1xcbitcXHRJTklUX1NJTjZfTE9PUEJBQ0soYWRkcik7XFxuK1xcdGNvbnN0IGludCBvbmUgPSAxO1xcbitcXHRpbnQgY2ZkLCBhZmQ7XFxuK1xcbitcXHRjZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfU1RSRUFNLCAwKTtcXG4rXFx0aWYgKGNmZCA9PSAtMSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJzb2NrZXQgY2xpZW50XFxcIik7XFxuK1xcbitcXHRpZiAoZmxvd2xhYmVsX2dldChjZmQsIGZsb3dsYWJlbCwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpKVxcbitcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcImZsb3dsYWJlbF9nZXRcXFwiKTtcXG4rXFx0aWYgKHNldHNvY2tvcHQoY2ZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XSU5GT19TRU5ELCBcXHUwMDI2b25lLCBzaXplb2Yob25lKSkpXFxuK1xcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwic2V0c29ja29wdCBmbG93aW5mb19zZW5kXFxcIik7XFxuK1xcdGFkZHIuc2luNl9mbG93aW5mbyA9IGh0b25sKGZsb3dsYWJlbCk7XFxuK1xcbitcXHRpZiAoY29ubmVjdChjZmQsICh2b2lkICopXFx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSkpXFxuK1xcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwiY29ubmVjdFxcXCIpO1xcbitcXG4rXFx0YWZkID0gYWNjZXB0KGxpc3RlbmVyLCBOVUxMLCBOVUxMKTtcXG4rXFx0aWYgKGFmZCA9PSAtMSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJhY2NlcHRcXFwiKTtcXG4rXFxuK1xcdCpjbGllbnQgPSBjZmQ7XFxuK1xcdCphY2NlcHRlZCA9IGFmZDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc2V0X2Zsb3dsYWJlbF9jb25zaXN0ZW5jeShib29sIGVuYWJsZSlcXG4re1xcbitcXHQvKiBmbG93bGFiZWxfY29uc2lzdGVuY3kgbXVzdCBiZSBkaXNhYmxlIHRvIHVzZSB0aGUgSVBWNl9GTF9GX1JFRkxFQ1RcXG4rXFx0ICogZmxhZy4gVGhpcyBoZWxwZXIgZnVuY3Rpb24gaXMgcmVxdWlyZWQgZm9yIHNldHRpbmcgdXAgYW5kIHRlYXJpbmdcXG4rXFx0ICogZG93biB0ZXN0IGNhc2VzIGZvciB0aGlzIGZsYWcuXFxuK1xcdCAqL1xcbitcXHRpbnQgZmQ7XFxuK1xcbitcXHRmZCA9IG9wZW4oXFxcIi9wcm9jL3N5cy9uZXQvaXB2Ni9mbG93bGFiZWxfY29uc2lzdGVuY3lcXFwiLCBPX1dST05MWSk7XFxuK1xcdGlmIChmZCA9PSAtMSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJvcGVuIGZsb3dsYWJlbF9jb25zaXN0ZW5jeVxcXCIpO1xcbitcXHRpZiAod3JpdGUoZmQsIGVuYWJsZSA/IFxcXCIxXFxcIiA6IFxcXCIwXFxcIiwgMSkgIT0gMSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJ3cml0ZSBmbG93bGFiZWxfY29uc2lzdGVuY3lcXFwiKTtcXG4rXFx0aWYgKGNsb3NlKGZkKSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJjbG9zZSBmbG93bGFiZWxfY29uc2lzdGVuY3lcXFwiKTtcXG4rfVxcbitcXG4rVEVTVChjYW5ub3RfZ2V0X25vbl9leGlzdGVudF9sYWJlbClcXG4re1xcbitcXHRpbnQgZmQsIGVycjtcXG4rXFxuK1xcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcXG4rXFx0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXFxcInNvY2tldCBmYWlsZWRcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApO1xcbitcXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcXFwiZXhwZWN0ZWQgZ2V0IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWxcXFwiKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xcbit9XFxuK1xcbitURVNUKGNhbm5vdF9wdXRfbm9uX2V4aXN0ZW50X2xhYmVsKVxcbit7XFxuK1xcdGludCBmZCwgZXJyO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XFxuK1xcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFxcXCJleHBlY3RlZCBwdXQgb2YgYSBub24tZXhpc3RlbnQgbGFiZWwgdG8gZmFpbFxcXCIpO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XFxuK31cXG4rXFxuK1RFU1QoY2Fubm90X2NyZWF0ZV9sYWJlbF9ncmVhdGVyX3RoYW5fMjBfYml0cylcXG4re1xcbitcXHRpbnQgZmQsIGVycjtcXG4rXFxuK1xcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcXG4rXFx0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXFxcInNvY2tldCBmYWlsZWRcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDB4MUZGRkZGLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIGxhYmVsIFxcdTAwM2UgMjAgYml0cyB0byBiZSByZWplY3RlZFxcXCIpO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XFxuK31cXG4rXFxuK1RFU1QoY2FuX2NyZWF0ZV9hbmRfZ2V0X2FuZF9wdXRfbGFiZWxzKVxcbit7XFxuK1xcdGludCBmZCwgZXJyO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIGNyZWF0ZSBsYWJlbCAoRkxfRl9DUkVBVEUpXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gZ2V0IHRoZSBsYWJlbCB3aXRob3V0IEZMX0ZfQ1JFQVRFXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gZ2V0IGl0IGFnYWluIHdpdGggY3JlYXRlIGZsYWcgc2V0LCB0b29cXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUgfCBJUFY2X0ZMX0ZfRVhDTCk7XFxuK1xcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFxcXCJleHBlY3RlZCBGTF9GX0VYQ0wgdG8gcmVqZWN0IGFuIGFscmVhZHktZXhpc3RpbmcgbGFiZWxcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBwdXQgZmlyc3QgcmVmZXJlbmNlXFxcIik7XFxuK1xcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBwdXQgc2Vjb25kIHJlZmVyZW5jZVxcXCIpO1xcbitcXHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gcHV0IHRoaXJkIHJlZmVyZW5jZVxcXCIpO1xcbitcXHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcXG4rXFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIGZvdXJ0aCBwdXQgdG8gZmFpbCwgbm8gcmVmZXJlbmNlcyBsZWZ0XFxcIik7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcXG4rfVxcbitcXG4rVEVTVChleGNsdXNpdmVfbGFiZWxfc2hhcmUpXFxuIHtcXG4tXFx0aW50IHdzdGF0dXM7XFxuK1xcdGludCBmZCwgZXJyO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZXhjbHVzaXZlIGxhYmVsIChGTF9TX0VYQ0wpXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIHJldXNlIGluIG5vbi1leGNsdXNpdmUgbW9kZSB0byBmYWlsXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7XFxuK1xcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFxcXCJleHBlY3RlZCByZXVzZSBpbiBleGNsdXNpdmUgbW9kZSB0byBmYWlsIHRvb1xcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMik7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIHB1dCB0aGUgZXhjbHVzaXZlIGxhYmVsXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIHJldXNlIHRvIGZhaWwsIGR1ZSB0byBsaW5nZXJcXFwiKTtcXG4rXFxuK1xcdHNsZWVwKEZMX01JTl9MSU5HRVIgKiAyICsgMSk7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJleHBlY3RlZCByZXVzZSB0byBzdWNjZWVkIGFmdGVyIGxpbmdlclxcXCIpO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XFxuK31cXG4rXFxuK1RFU1QodXNlcl9wcml2YXRlX2xhYmVsX3NoYXJlKVxcbit7XFxuK1xcdGludCBmZCwgZXJyLCB3c3RhdHVzO1xcbiBcXHRwaWRfdCBwaWQ7XFxuIFxcbi1cXHRleHBsYWluKFxcXCJjYW5ub3QgZ2V0IG5vbi1leGlzdGVudCBsYWJlbFxcXCIpO1xcbi1cXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKSk7XFxuLVxcbi1cXHRleHBsYWluKFxcXCJjYW5ub3QgcHV0IG5vbi1leGlzdGVudCBsYWJlbFxcXCIpO1xcbi1cXHRleHBlY3RfZmFpbChmbG93bGFiZWxfcHV0KGZkLCAxKSk7XFxuLVxcbi1cXHRleHBsYWluKFxcXCJjYW5ub3QgY3JlYXRlIGxhYmVsIGdyZWF0ZXIgdGhhbiAyMCBiaXRzXFxcIik7XFxuLVxcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDB4MUZGRkZGLCBJUFY2X0ZMX1NfQU5ZLFxcbi1cXHRcXHRcXHRcXHQgIElQVjZfRkxfRl9DUkVBVEUpKTtcXG4tXFxuLVxcdGV4cGxhaW4oXFxcImNyZWF0ZSBhIG5ldyBsYWJlbCAoRkxfRl9DUkVBVEUpXFxcIik7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpKTtcXG4tXFx0ZXhwbGFpbihcXFwiY2FuIGdldCB0aGUgbGFiZWwgKHdpdGhvdXQgRkxfRl9DUkVBVEUpXFxcIik7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApKTtcXG4tXFx0ZXhwbGFpbihcXFwiY2FuIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vXFxcIik7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpKTtcXG4tXFx0ZXhwbGFpbihcXFwiY2Fubm90IGdldCBpdCBhZ2FpbiB3aXRoIHRoZSBleGNsdXNpdmUgKEZMX0ZMX0VYQ0wpIGZsYWdcXFwiKTtcXG4tXFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSxcXG4tXFx0XFx0XFx0XFx0XFx0IElQVjZfRkxfRl9DUkVBVEUgfCBJUFY2X0ZMX0ZfRVhDTCkpO1xcbi1cXHRleHBsYWluKFxcXCJjYW4gbm93IHB1dCBleGFjdGx5IHRocmVlIHJlZmVyZW5jZXNcXFwiKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xcbi1cXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAxKSk7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcXG4tXFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xcbi1cXG4tXFx0ZXhwbGFpbihcXFwiY3JlYXRlIGEgbmV3IGV4Y2x1c2l2ZSBsYWJlbCAoRkxfU19FWENMKVxcXCIpO1xcbi1cXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpO1xcbi1cXHRleHBsYWluKFxcXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIG5vbi1leGNsdXNpdmUgbW9kZVxcXCIpO1xcbi1cXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCAgSVBWNl9GTF9GX0NSRUFURSkpO1xcbi1cXHRleHBsYWluKFxcXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIGV4Y2x1c2l2ZSBtb2RlIGVpdGhlclxcXCIpO1xcbi1cXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpO1xcbi1cXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAyKSk7XFxuLVxcbi1cXHRpZiAoY2ZnX2xvbmdfcnVubmluZykge1xcbi1cXHRcXHRleHBsYWluKFxcXCJjYW5ub3QgcmV1c2UgdGhlIGxhYmVsLCBkdWUgdG8gbGluZ2VyXFxcIik7XFxuLVxcdFxcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksXFxuLVxcdFxcdFxcdFxcdFxcdCAgSVBWNl9GTF9GX0NSRUFURSkpO1xcbi1cXHRcXHRleHBsYWluKFxcXCJhZnRlciBzbGVlcCwgY2FuIHJldXNlXFxcIik7XFxuLVxcdFxcdHNsZWVwKEZMX01JTl9MSU5HRVIgKiAyICsgMSk7XFxuLVxcdFxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksXFxuLVxcdFxcdFxcdFxcdFxcdCAgSVBWNl9GTF9GX0NSRUFURSkpO1xcbi1cXHR9XFxuK1xcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcXG4rXFx0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXFxcInNvY2tldCBmYWlsZWRcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IHVzZXItcHJpdmF0ZSBsYWJlbCAoRkxfU19VU0VSKVxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0FOWSwgMCk7XFxuK1xcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFxcXCJleHBlY3RlZCBnZXQgaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWxcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19FWENMLCAwKTtcXG4rXFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIGdldCBpbiBleGNsdXNpdmUgbW9kZSB0byBmYWlsXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCk7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiBpbiB1c2VyIG1vZGVcXFwiKTtcXG4gXFxuLVxcdGV4cGxhaW4oXFxcImNyZWF0ZSBhIG5ldyB1c2VyLXByaXZhdGUgbGFiZWwgKEZMX1NfVVNFUilcXFwiKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIElQVjZfRkxfRl9DUkVBVEUpKTtcXG4tXFx0ZXhwbGFpbihcXFwiY2Fubm90IGdldCBpdCBhZ2FpbiBpbiBub24tZXhjbHVzaXZlIG1vZGVcXFwiKTtcXG4tXFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0FOWSwgMCkpO1xcbi1cXHRleHBsYWluKFxcXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIGV4Y2x1c2l2ZSBtb2RlXFxcIik7XFxuLVxcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19FWENMLCAwKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNhbiBnZXQgaXQgYWdhaW4gaW4gdXNlciBtb2RlXFxcIik7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNoaWxkIHByb2Nlc3MgY2FuIGdldCBpdCB0b28sIGJ1dCBub3QgYWZ0ZXIgc2V0dWlkKG5vYm9keSlcXFwiKTtcXG4gXFx0cGlkID0gZm9yaygpO1xcbi1cXHRpZiAocGlkID09IC0xKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcImZvcmtcXFwiKTtcXG4rXFx0QVNTRVJUX05FKC0xLCBwaWQpIFRIX0xPRyhcXFwiZm9yayBmYWlsZWRcXFwiKTtcXG4gXFx0aWYgKCFwaWQpIHtcXG4tXFx0XFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKTtcXG4tXFx0XFx0aWYgKHNldHVpZChVU0hSVF9NQVgpKVxcbitcXHRcXHRpZiAoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKVxcbitcXHRcXHRcXHRleGl0KDEpO1xcbitcXHRcXHRpZiAoc2V0dWlkKFVTSFJUX01BWCkpIHtcXG4gXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJbSU5GT10gc2tpcCBzZXR1aWQgY2hpbGQgdGVzdFxcXFxuXFxcIik7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKTtcXG4rXFx0XFx0XFx0ZXhpdCgwKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoIWZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSlcXG4rXFx0XFx0XFx0ZXhpdCgxKTtcXG4gXFx0XFx0ZXhpdCgwKTtcXG4gXFx0fVxcbi1cXHRpZiAod2FpdChcXHUwMDI2d3N0YXR1cykgPT0gLTEpXFxuLVxcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwid2FpdFxcXCIpO1xcbi1cXHRpZiAoIVdJRkVYSVRFRCh3c3RhdHVzKSB8fCBXRVhJVFNUQVRVUyh3c3RhdHVzKSAhPSAwKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcIndhaXQ6IHVuZXhwZWN0ZWQgY2hpbGQgcmVzdWx0XFxcIik7XFxuLVxcbi1cXHRleHBsYWluKFxcXCJjcmVhdGUgYSBuZXcgcHJvY2Vzcy1wcml2YXRlIGxhYmVsIChGTF9TX1BST0NFU1MpXFxcIik7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNhbiBnZXQgaXQgYWdhaW5cXFwiKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApKTtcXG4tXFx0ZXhwbGFpbihcXFwiY2hpbGQgcHJvY2VzcyBjYW5ub3QgY2FuIGdldCBpdFxcXCIpO1xcbitcXHRBU1NFUlRfRVEocGlkLCB3YWl0KFxcdTAwMjZ3c3RhdHVzKSkgVEhfTE9HKFxcXCJ3YWl0IGZhaWxlZFxcXCIpO1xcbitcXHRBU1NFUlRfVFJVRShXSUZFWElURUQod3N0YXR1cykpIFRIX0xPRyhcXFwiY2hpbGQgZGlkIG5vdCBleGl0IG5vcm1hbGx5XFxcIik7XFxuK1xcdEFTU0VSVF9FUSgwLCBXRVhJVFNUQVRVUyh3c3RhdHVzKSkgVEhfTE9HKFxcXCJjaGlsZCByZXBvcnRlZCB1bmV4cGVjdGVkIHJlc3VsdFxcXCIpO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XFxuK31cXG4rXFxuK1RFU1QocHJvY2Vzc19wcml2YXRlX2xhYmVsX3NoYXJlKVxcbit7XFxuK1xcdGludCBmZCwgZXJyLCB3c3RhdHVzO1xcbitcXHRwaWRfdCBwaWQ7XFxuK1xcbitcXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFxcXCJzb2NrZXQgZmFpbGVkXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgSVBWNl9GTF9GX0NSRUFURSk7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBwcm9jZXNzLXByaXZhdGUgbGFiZWwgKEZMX1NfUFJPQ0VTUylcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gZ2V0IGl0IGFnYWluXFxcIik7XFxuK1xcbiBcXHRwaWQgPSBmb3JrKCk7XFxuLVxcdGlmIChwaWQgPT0gLTEpXFxuLVxcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwiZm9ya1xcXCIpO1xcbitcXHRBU1NFUlRfTkUoLTEsIHBpZCkgVEhfTE9HKFxcXCJmb3JrIGZhaWxlZFxcXCIpO1xcbiBcXHRpZiAoIXBpZCkge1xcbi1cXHRcXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCkpO1xcbitcXHRcXHRpZiAoIWZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSlcXG4rXFx0XFx0XFx0ZXhpdCgxKTtcXG4gXFx0XFx0ZXhpdCgwKTtcXG4gXFx0fVxcbi1cXHRpZiAod2FpdChcXHUwMDI2d3N0YXR1cykgPT0gLTEpXFxuLVxcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwid2FpdFxcXCIpO1xcbi1cXHRpZiAoIVdJRkVYSVRFRCh3c3RhdHVzKSB8fCBXRVhJVFNUQVRVUyh3c3RhdHVzKSAhPSAwKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcIndhaXQ6IHVuZXhwZWN0ZWQgY2hpbGQgcmVzdWx0XFxcIik7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbi17XFxuLVxcdGludCBjO1xcbi1cXG4tXFx0d2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFxcXCJsdlxcXCIpKSAhPSAtMSkge1xcbi1cXHRcXHRzd2l0Y2ggKGMpIHtcXG4tXFx0XFx0Y2FzZSAnbCc6XFxuLVxcdFxcdFxcdGNmZ19sb25nX3J1bm5pbmcgPSB0cnVlO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAndic6XFxuLVxcdFxcdFxcdGNmZ192ZXJib3NlID0gdHJ1ZTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdGVycm9yKDEsIDAsIFxcXCIlczogcGFyc2UgZXJyb3JcXFwiLCBhcmd2WzBdKTtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdEFTU0VSVF9FUShwaWQsIHdhaXQoXFx1MDAyNndzdGF0dXMpKSBUSF9MT0coXFxcIndhaXQgZmFpbGVkXFxcIik7XFxuK1xcdEFTU0VSVF9UUlVFKFdJRkVYSVRFRCh3c3RhdHVzKSkgVEhfTE9HKFxcXCJjaGlsZCBkaWQgbm90IGV4aXQgbm9ybWFsbHlcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKDAsIFdFWElUU1RBVFVTKHdzdGF0dXMpKSBUSF9MT0coXFxcImNoaWxkIHJlcG9ydGVkIHVuZXhwZWN0ZWQgcmVzdWx0XFxcIik7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcXG4gfVxcbiBcXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbitURVNUKHJlbmV3X2xhYmVsX2xpbmdlcilcXG4ge1xcbi1cXHRpbnQgZmQ7XFxuLVxcbi1cXHRwYXJzZV9vcHRzKGFyZ2MsIGFyZ3YpO1xcbitcXHQvKiBBZnRlciBhIGxhYmVsIHdpdGggRVhDTCBzaGFyZSBpcyBwdXQgYW5kIGxpbmdlcmVkLCBpdCBtdXN0IGJlXFxuK1xcdCAqIHBvc3NpYmxlIHRvIGNyZWF0ZSBhIG5ldyBvbmUuIENoZWNrIGlmIFJFTkVXIGFjdGlvbiBleHRlbmRzXFxuK1xcdCAqIHRoZSBsaW5nZXIgcGVyaW9kIG9mIHB1dCBsYWJlbCwgYmxvY2tpbmcgY3JlYXRpb24gYWZ0ZXIgcHJldmlvdXNcXG4rXFx0ICogbGluZ2VyIHRpbWUuXFxuK1xcdCAqL1xcbitcXHRpbnQgZmQsIGVycjtcXG4gXFxuIFxcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcXG4tXFx0aWYgKGZkID09IC0xKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcInNvY2tldFxcXCIpO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbiBcXG4tXFx0cnVuX3Rlc3RzKGZkKTtcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNSwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgbGFiZWwgd2l0aCBGTF9NSU5fTElOR0VSIGxpbmdlciB0aW1lXFxcIik7XFxuIFxcbi1cXHRpZiAoY2xvc2UoZmQpKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcImNsb3NlXFxcIik7XFxuK1xcdGVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNSwgMiAqIChGTF9NSU5fTElOR0VSICogMiArIDEpKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gcmVuZXcgdGhlIGxhYmVsIHRvIGluY3JlYXNlIGl0cyBsaW5nZXIgdGltZVxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgNSk7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIHB1dCB0aGUgbGFiZWxcXFwiKTtcXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRzbGVlcChGTF9NSU5fTElOR0VSICogMiArIDEpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XFxuK1xcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFxcXCJleHBlY3RlZCByZXVzZSB0byBmYWlsLCBuZXcgbGluZ2VyIHRpbWUgbm90IG92ZXIgeWV0XFxcIik7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcXG4gfVxcbitcXG4rVEVTVChyZW1vdGVfZmxhZylcXG4re1xcbitcXHQvKiBUaGUgUkVNT1RFIGZsYWcsIHVzZWQgZm9yIGdldHNvY2tvcHQsIGlzIGV4cGVjdGVkIHRvIHJldHJpZXZlIHRoZVxcbitcXHQgKiBsYWJlbCBmcm9tIHRoZSBsYXRlc3QgcmVjZWl2ZWQgaGVhZGVyLlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIGZyZXEgPSB7XFxuK1xcdFxcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCxcXG4rXFx0XFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRU1PVEUsXFxuK1xcdH07XFxuK1xcdHNvY2tsZW5fdCBmcmVxX2xlbiA9IHNpemVvZihmcmVxKTtcXG4rXFx0aW50IGxpc3RlbmVyLCBjZmQsIGFmZCwgZXJyO1xcbitcXG4rXFx0bGlzdGVuZXIgPSB0Y3BfbGlzdGVuKCk7XFxuK1xcdHRjcF9jb25uZWN0KGxpc3RlbmVyLCA2LCBcXHUwMDI2Y2ZkLCBcXHUwMDI2YWZkKTtcXG4rXFxuK1xcdGVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcXHUwMDI2ZnJlcSwgXFx1MDAyNmZyZXFfbGVuKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJnZXRzb2Nrb3B0IHdpdGggSVBWNl9GTF9GX1JFTU9URSBmYWlsZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKDYsIG50b2hsKGZyZXEuZmxyX2xhYmVsKSkgVEhfTE9HKFxcXCJ1bmV4cGVjdGVkIHJlbW90ZSBmbG93IGxhYmVsXFxcIik7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgY2xvc2UoYWZkKSk7XFxuK1xcdEFTU0VSVF9FUSgwLCBjbG9zZShjZmQpKTtcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGxpc3RlbmVyKSk7XFxuK31cXG4rXFxuK1RFU1QocmVmbGVjdF9mbGFnKVxcbit7XFxuK1xcdC8qIFRoZSBSRUZMRUNUIGZsYWcgYWN0cyBhcyBhIHRyaWdnZXIgdG8gdGhlIFJFUEZMT1cgYml0LiBXaGVuIFJFUEZMT1dcXG4rXFx0ICogaXMgdHJpZ2dlcmVkIGZvciBhIHNvY2tldCwgaXQgYWRvcHRzIHRoZSBsYWJlbCByZWNlaXZlZCBmcm9tIHRoZVxcbitcXHQgKiBjb25uZWN0ZWQgc29ja2V0LlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlZmxlY3Rfb24gPSB7XFxuK1xcdFxcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCxcXG4rXFx0XFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRUZMRUNULFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9xdWVyeSA9IHtcXG4rXFx0XFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfR0VULFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9vZmYgPSB7XFxuK1xcdFxcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX1BVVCxcXG4rXFx0XFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRUZMRUNULFxcbitcXHR9O1xcbitcXHRzb2NrbGVuX3QgcmVmbGVjdF9xdWVyeV9sZW4gPSBzaXplb2YocmVmbGVjdF9xdWVyeSk7XFxuK1xcdGludCBsaXN0ZW5lciwgY2ZkLCBhZmQsIGVycjtcXG4rXFxuK1xcdHNldF9mbG93bGFiZWxfY29uc2lzdGVuY3koZmFsc2UpO1xcbitcXG4rXFx0bGlzdGVuZXIgPSB0Y3BfbGlzdGVuKCk7XFxuK1xcdGVyciA9IHNldHNvY2tvcHQobGlzdGVuZXIsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFxcdTAwMjZyZWZsZWN0X29uLCBzaXplb2YocmVmbGVjdF9vbikpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBlbmFibGUgUkVGTEVDVCBvbiB0aGUgbGlzdGVuZXJcXFwiKTtcXG4rXFxuK1xcdHRjcF9jb25uZWN0KGxpc3RlbmVyLCA3LCBcXHUwMDI2Y2ZkLCBcXHUwMDI2YWZkKTtcXG4rXFxuK1xcdGVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcXHUwMDI2cmVmbGVjdF9xdWVyeSwgXFx1MDAyNnJlZmxlY3RfcXVlcnlfbGVuKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gcXVlcnkgdGhlIGFjY2VwdGVkIHNvY2tldCdzIG91dGdvaW5nIGxhYmVsXFxcIik7XFxuK1xcdEFTU0VSVF9FUSg3LCBudG9obChyZWZsZWN0X3F1ZXJ5LmZscl9sYWJlbCkpIFRIX0xPRyhcXFwiYWNjZXB0ZWQgc29ja2V0IGRpZCBub3QgcmVmbGVjdCBjbGllbnQncyBsYWJlbFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gc2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFxcdTAwMjZyZWZsZWN0X29mZiwgc2l6ZW9mKHJlZmxlY3Rfb2ZmKSk7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIGRpc2FibGUgUkVGTEVDVCBvbiB0aGUgYWNjZXB0ZWQgc29ja2V0XFxcIik7XFxuK1xcbitcXHRlcnIgPSBzZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXFx1MDAyNnJlZmxlY3Rfb2ZmLCBzaXplb2YocmVmbGVjdF9vZmYpKTtcXG4rXFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIGRpc2FibGluZyBSRUZMRUNUIHR3aWNlIHRvIGZhaWxcXFwiKTtcXG4rXFxuK1xcdHNldF9mbG93bGFiZWxfY29uc2lzdGVuY3kodHJ1ZSk7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgY2xvc2UoYWZkKSk7XFxuK1xcdEFTU0VSVF9FUSgwLCBjbG9zZShjZmQpKTtcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGxpc3RlbmVyKSk7XFxuK31cXG4rXFxuK1RFU1RfSEFSTkVTU19NQUlOXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE2OjE2OjAwLjUyMzA4MzkzN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYwNDQzNzc2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSB1c2VyLXNwYWNlIHNlbGZ0ZXN0ICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMpIGFuZCBtYWtlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRlYTU0NmI5Mzc5NDExMTVhMDNhZmNjZDc2NjEyMTlhMWZiNjE0ZWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxNjoxNTo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuY1xuaW5kZXggYWY5NWI0OGFjZWE5MGIuLjlhYTVjODE0NmYxNzE5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNcbkBAIC02LDYgKzYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZXJyb3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbjYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuQEAgLTE5LDMxICsyMCwyNSBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXCJrc2VsZnRlc3RfaGFybmVzcy5oXCJcbiBcbiAvKiB1YXBpL2dsaWJjIHdlaXJkbmVzcyBtYXkgbGVhdmUgdGhpcyB1bmRlZmluZWQgKi9cbiAjaWZuZGVmIElQVjZfRkxPV0xBQkVMX01HUlxuICNkZWZpbmUgSVBWNl9GTE9XTEFCRUxfTUdSXHQzMlxuICNlbmRpZlxuKyNpZm5kZWYgSVBWNl9GTE9XSU5GT19TRU5EXG4rI2RlZmluZSBJUFY2X0ZMT1dJTkZPX1NFTkRcdDMzXG4rI2VuZGlmXG4gXG4gLyogZnJvbSBuZXQvaXB2Ni9pcDZfZmxvd2xhYmVsLmMgKi9cbiAjZGVmaW5lIEZMX01JTl9MSU5HRVJcdFx0NlxuIFxuLSNkZWZpbmUgZXhwbGFpbih4KVx0XHRcdFx0XHRcdFx0XFxcbi1cdGRvIHsgaWYgKGNmZ192ZXJib3NlKSBmcHJpbnRmKHN0ZGVyciwgXCIgICAgICAgXCIgeCBcIlxcblwiKTsgfSB3aGlsZSAoMClcbi1cbi0jZGVmaW5lIF9fZXhwZWN0KHgpXHRcdFx0XHRcdFx0XHRcXFxuLVx0ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuLVx0XHRpZiAoISh4KSlcdFx0XHRcdFx0XHRcXFxuLVx0XHRcdGZwcmludGYoc3RkZXJyLCBcIltPS10gICBcIiAjeCBcIlxcblwiKTtcdFx0XFxcbi1cdFx0ZWxzZVx0XHRcdFx0XHRcdFx0XFxcbi1cdFx0XHRlcnJvcigxLCAwLCBcIltFUlJdICBcIiAjeCBcIiAobGluZSAlZClcIiwgX19MSU5FX18pOyBcXFxuLVx0fSB3aGlsZSAoMClcbi1cbi0jZGVmaW5lIGV4cGVjdF9wYXNzKHgpXHRfX2V4cGVjdCh4KVxuLSNkZWZpbmUgZXhwZWN0X2ZhaWwoeClcdF9fZXhwZWN0KCEoeCkpXG4tXG4tc3RhdGljIGJvb2wgY2ZnX2xvbmdfcnVubmluZztcbi1zdGF0aWMgYm9vbCBjZmdfdmVyYm9zZTtcbisjZGVmaW5lIElOSVRfU0lONl9MT09QQkFDSyhuYW1lKVx0XHRcdFx0XHRcXFxuK1x0c3RydWN0IHNvY2thZGRyX2luNiBuYW1lID0ge1x0XHRcdFx0XHRcXFxuK1x0XHQuc2luNl9mYW1pbHlcdD0gQUZfSU5FVDYsXHRcdFx0XHRcXFxuK1x0XHQuc2luNl9hZGRyXHQ9IElONkFERFJfTE9PUEJBQ0tfSU5JVCxcdFx0XFxcbitcdFx0LnNpbjZfcG9ydFx0PSBodG9ucyg4ODg4KSxcdFx0XHRcdFxcXG4rXHR9XG4gXG4gc3RhdGljIGludCBmbG93bGFiZWxfZ2V0KGludCBmZCwgdWludDMyX3QgbGFiZWwsIHVpbnQ4X3Qgc2hhcmUsIHVpbnQxNl90IGZsYWdzKVxuIHtcbkBAIC03MSwxMjkgKzY2LDM0NCBAQCBzdGF0aWMgaW50IGZsb3dsYWJlbF9wdXQoaW50IGZkLCB1aW50MzJfdCBsYWJlbClcbiBcdHJldHVybiBzZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZyZXEsIHNpemVvZihyZXEpKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnVuX3Rlc3RzKGludCBmZClcbitzdGF0aWMgaW50IGZsb3dsYWJlbF9yZW5ldyhpbnQgZmQsIHVpbnQzMl90IGxhYmVsLCB1aW50MTZfdCBsaW5nZXIpXG4re1xuK1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlcSA9IHtcbitcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUkVORVcsXG4rXHRcdC5mbHJfbGFiZWwgPSBodG9ubChsYWJlbCksXG4rXHRcdC5mbHJfbGluZ2VyID0gbGluZ2VyLFxuK1x0fTtcbitcbitcdHJldHVybiBzZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZyZXEsIHNpemVvZihyZXEpKTtcbit9XG4rXG4rc3RhdGljIGludCB0Y3BfbGlzdGVuKHZvaWQpXG4re1xuK1x0SU5JVF9TSU42X0xPT1BCQUNLKGFkZHIpO1xuK1x0Y29uc3QgaW50IG9uZSA9IDE7XG4rXHRpbnQgZmQ7XG4rXG4rXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19TVFJFQU0sIDApO1xuK1x0aWYgKGZkID09IC0xKVxuK1x0XHRlcnJvcigxLCBlcnJubywgXCJzb2NrZXQgbGlzdGVuZXJcIik7XG4rXHRpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBcdTAwMjZvbmUsIHNpemVvZihvbmUpKSlcbitcdFx0ZXJyb3IoMSwgZXJybm8sIFwic2V0c29ja29wdCBTT19SRVVTRUFERFJcIik7XG4rXHRpZiAoYmluZChmZCwgKHZvaWQgKilcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpKVxuK1x0XHRlcnJvcigxLCBlcnJubywgXCJiaW5kXCIpO1xuK1x0aWYgKGxpc3RlbihmZCwgMSkpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcImxpc3RlblwiKTtcbitcbitcdHJldHVybiBmZDtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGNwX2Nvbm5lY3QoaW50IGxpc3RlbmVyLCB1aW50MzJfdCBmbG93bGFiZWwsIGludCAqY2xpZW50LCBpbnQgKmFjY2VwdGVkKVxuK3tcbitcdElOSVRfU0lONl9MT09QQkFDSyhhZGRyKTtcbitcdGNvbnN0IGludCBvbmUgPSAxO1xuK1x0aW50IGNmZCwgYWZkO1xuK1xuK1x0Y2ZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX1NUUkVBTSwgMCk7XG4rXHRpZiAoY2ZkID09IC0xKVxuK1x0XHRlcnJvcigxLCBlcnJubywgXCJzb2NrZXQgY2xpZW50XCIpO1xuK1xuK1x0aWYgKGZsb3dsYWJlbF9nZXQoY2ZkLCBmbG93bGFiZWwsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSlcbitcdFx0ZXJyb3IoMSwgZXJybm8sIFwiZmxvd2xhYmVsX2dldFwiKTtcbitcdGlmIChzZXRzb2Nrb3B0KGNmZCwgU09MX0lQVjYsIElQVjZfRkxPV0lORk9fU0VORCwgXHUwMDI2b25lLCBzaXplb2Yob25lKSkpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcInNldHNvY2tvcHQgZmxvd2luZm9fc2VuZFwiKTtcbitcdGFkZHIuc2luNl9mbG93aW5mbyA9IGh0b25sKGZsb3dsYWJlbCk7XG4rXG4rXHRpZiAoY29ubmVjdChjZmQsICh2b2lkICopXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpKSlcbitcdFx0ZXJyb3IoMSwgZXJybm8sIFwiY29ubmVjdFwiKTtcbitcbitcdGFmZCA9IGFjY2VwdChsaXN0ZW5lciwgTlVMTCwgTlVMTCk7XG4rXHRpZiAoYWZkID09IC0xKVxuK1x0XHRlcnJvcigxLCBlcnJubywgXCJhY2NlcHRcIik7XG4rXG4rXHQqY2xpZW50ID0gY2ZkO1xuK1x0KmFjY2VwdGVkID0gYWZkO1xuK31cbitcbitzdGF0aWMgdm9pZCBzZXRfZmxvd2xhYmVsX2NvbnNpc3RlbmN5KGJvb2wgZW5hYmxlKVxuK3tcbitcdC8qIGZsb3dsYWJlbF9jb25zaXN0ZW5jeSBtdXN0IGJlIGRpc2FibGUgdG8gdXNlIHRoZSBJUFY2X0ZMX0ZfUkVGTEVDVFxuK1x0ICogZmxhZy4gVGhpcyBoZWxwZXIgZnVuY3Rpb24gaXMgcmVxdWlyZWQgZm9yIHNldHRpbmcgdXAgYW5kIHRlYXJpbmdcbitcdCAqIGRvd24gdGVzdCBjYXNlcyBmb3IgdGhpcyBmbGFnLlxuK1x0ICovXG4rXHRpbnQgZmQ7XG4rXG4rXHRmZCA9IG9wZW4oXCIvcHJvYy9zeXMvbmV0L2lwdjYvZmxvd2xhYmVsX2NvbnNpc3RlbmN5XCIsIE9fV1JPTkxZKTtcbitcdGlmIChmZCA9PSAtMSlcbitcdFx0ZXJyb3IoMSwgZXJybm8sIFwib3BlbiBmbG93bGFiZWxfY29uc2lzdGVuY3lcIik7XG4rXHRpZiAod3JpdGUoZmQsIGVuYWJsZSA/IFwiMVwiIDogXCIwXCIsIDEpICE9IDEpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcIndyaXRlIGZsb3dsYWJlbF9jb25zaXN0ZW5jeVwiKTtcbitcdGlmIChjbG9zZShmZCkpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcImNsb3NlIGZsb3dsYWJlbF9jb25zaXN0ZW5jeVwiKTtcbit9XG4rXG4rVEVTVChjYW5ub3RfZ2V0X25vbl9leGlzdGVudF9sYWJlbClcbit7XG4rXHRpbnQgZmQsIGVycjtcbitcbitcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbitcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwic29ja2V0IGZhaWxlZFwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApO1xuK1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCJleHBlY3RlZCBnZXQgb2YgYSBub24tZXhpc3RlbnQgbGFiZWwgdG8gZmFpbFwiKTtcbitcbitcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuK31cbitcbitURVNUKGNhbm5vdF9wdXRfbm9uX2V4aXN0ZW50X2xhYmVsKVxuK3tcbitcdGludCBmZCwgZXJyO1xuK1xuK1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuK1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCJzb2NrZXQgZmFpbGVkXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XG4rXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcImV4cGVjdGVkIHB1dCBvZiBhIG5vbi1leGlzdGVudCBsYWJlbCB0byBmYWlsXCIpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XG4rfVxuK1xuK1RFU1QoY2Fubm90X2NyZWF0ZV9sYWJlbF9ncmVhdGVyX3RoYW5fMjBfYml0cylcbit7XG4rXHRpbnQgZmQsIGVycjtcbitcbitcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbitcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwic29ja2V0IGZhaWxlZFwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDB4MUZGRkZGLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgbGFiZWwgXHUwMDNlIDIwIGJpdHMgdG8gYmUgcmVqZWN0ZWRcIik7XG4rXG4rXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbit9XG4rXG4rVEVTVChjYW5fY3JlYXRlX2FuZF9nZXRfYW5kX3B1dF9sYWJlbHMpXG4re1xuK1x0aW50IGZkLCBlcnI7XG4rXG4rXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4rXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcInNvY2tldCBmYWlsZWRcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBjcmVhdGUgbGFiZWwgKEZMX0ZfQ1JFQVRFKVwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApO1xuK1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIGdldCB0aGUgbGFiZWwgd2l0aG91dCBGTF9GX0NSRUFURVwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSB8IElQVjZfRkxfRl9FWENMKTtcbitcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgRkxfRl9FWENMIHRvIHJlamVjdCBhbiBhbHJlYWR5LWV4aXN0aW5nIGxhYmVsXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gcHV0IGZpcnN0IHJlZmVyZW5jZVwiKTtcbitcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xuK1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIHB1dCBzZWNvbmQgcmVmZXJlbmNlXCIpO1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gcHV0IHRoaXJkIHJlZmVyZW5jZVwiKTtcbitcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xuK1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCJleHBlY3RlZCBmb3VydGggcHV0IHRvIGZhaWwsIG5vIHJlZmVyZW5jZXMgbGVmdFwiKTtcbitcbitcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuK31cbitcbitURVNUKGV4Y2x1c2l2ZV9sYWJlbF9zaGFyZSlcbiB7XG4tXHRpbnQgd3N0YXR1cztcbitcdGludCBmZCwgZXJyO1xuK1xuK1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuK1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCJzb2NrZXQgZmFpbGVkXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBleGNsdXNpdmUgbGFiZWwgKEZMX1NfRVhDTClcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgcmV1c2UgaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWxcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7XG4rXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcImV4cGVjdGVkIHJldXNlIGluIGV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWwgdG9vXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMik7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gcHV0IHRoZSBleGNsdXNpdmUgbGFiZWxcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgZHVlIHRvIGxpbmdlclwiKTtcbitcbitcdHNsZWVwKEZMX01JTl9MSU5HRVIgKiAyICsgMSk7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImV4cGVjdGVkIHJldXNlIHRvIHN1Y2NlZWQgYWZ0ZXIgbGluZ2VyXCIpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XG4rfVxuK1xuK1RFU1QodXNlcl9wcml2YXRlX2xhYmVsX3NoYXJlKVxuK3tcbitcdGludCBmZCwgZXJyLCB3c3RhdHVzO1xuIFx0cGlkX3QgcGlkO1xuIFxuLVx0ZXhwbGFpbihcImNhbm5vdCBnZXQgbm9uLWV4aXN0ZW50IGxhYmVsXCIpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgMCkpO1xuLVxuLVx0ZXhwbGFpbihcImNhbm5vdCBwdXQgbm9uLWV4aXN0ZW50IGxhYmVsXCIpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVxuLVx0ZXhwbGFpbihcImNhbm5vdCBjcmVhdGUgbGFiZWwgZ3JlYXRlciB0aGFuIDIwIGJpdHNcIik7XG4tXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAweDFGRkZGRiwgSVBWNl9GTF9TX0FOWSxcbi1cdFx0XHRcdCAgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVxuLVx0ZXhwbGFpbihcImNyZWF0ZSBhIG5ldyBsYWJlbCAoRkxfRl9DUkVBVEUpXCIpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwbGFpbihcImNhbiBnZXQgdGhlIGxhYmVsICh3aXRob3V0IEZMX0ZfQ1JFQVRFKVwiKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApKTtcbi1cdGV4cGxhaW4oXCJjYW4gZ2V0IGl0IGFnYWluIHdpdGggY3JlYXRlIGZsYWcgc2V0LCB0b29cIik7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwiY2Fubm90IGdldCBpdCBhZ2FpbiB3aXRoIHRoZSBleGNsdXNpdmUgKEZMX0ZMX0VYQ0wpIGZsYWdcIik7XG4tXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLFxuLVx0XHRcdFx0XHQgSVBWNl9GTF9GX0NSRUFURSB8IElQVjZfRkxfRl9FWENMKSk7XG4tXHRleHBsYWluKFwiY2FuIG5vdyBwdXQgZXhhY3RseSB0aHJlZSByZWZlcmVuY2VzXCIpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVxuLVx0ZXhwbGFpbihcImNyZWF0ZSBhIG5ldyBleGNsdXNpdmUgbGFiZWwgKEZMX1NfRVhDTClcIik7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwbGFpbihcImNhbm5vdCBnZXQgaXQgYWdhaW4gaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlXCIpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIGV4Y2x1c2l2ZSBtb2RlIGVpdGhlclwiKTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAyKSk7XG4tXG4tXHRpZiAoY2ZnX2xvbmdfcnVubmluZykge1xuLVx0XHRleHBsYWluKFwiY2Fubm90IHJldXNlIHRoZSBsYWJlbCwgZHVlIHRvIGxpbmdlclwiKTtcbi1cdFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSxcbi1cdFx0XHRcdFx0ICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRcdGV4cGxhaW4oXCJhZnRlciBzbGVlcCwgY2FuIHJldXNlXCIpO1xuLVx0XHRzbGVlcChGTF9NSU5fTElOR0VSICogMiArIDEpO1xuLVx0XHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLFxuLVx0XHRcdFx0XHQgIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdH1cbitcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbitcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwic29ja2V0IGZhaWxlZFwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgdXNlci1wcml2YXRlIGxhYmVsIChGTF9TX1VTRVIpXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0FOWSwgMCk7XG4rXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcImV4cGVjdGVkIGdldCBpbiBub24tZXhjbHVzaXZlIG1vZGUgdG8gZmFpbFwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19FWENMLCAwKTtcbitcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgZ2V0IGluIGV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWxcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gZ2V0IGl0IGFnYWluIGluIHVzZXIgbW9kZVwiKTtcbiBcbi1cdGV4cGxhaW4oXCJjcmVhdGUgYSBuZXcgdXNlci1wcml2YXRlIGxhYmVsIChGTF9TX1VTRVIpXCIpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIG5vbi1leGNsdXNpdmUgbW9kZVwiKTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19BTlksIDApKTtcbi1cdGV4cGxhaW4oXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIGV4Y2x1c2l2ZSBtb2RlXCIpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0VYQ0wsIDApKTtcbi1cdGV4cGxhaW4oXCJjYW4gZ2V0IGl0IGFnYWluIGluIHVzZXIgbW9kZVwiKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7XG4tXHRleHBsYWluKFwiY2hpbGQgcHJvY2VzcyBjYW4gZ2V0IGl0IHRvbywgYnV0IG5vdCBhZnRlciBzZXR1aWQobm9ib2R5KVwiKTtcbiBcdHBpZCA9IGZvcmsoKTtcbi1cdGlmIChwaWQgPT0gLTEpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcImZvcmtcIik7XG4rXHRBU1NFUlRfTkUoLTEsIHBpZCkgVEhfTE9HKFwiZm9yayBmYWlsZWRcIik7XG4gXHRpZiAoIXBpZCkge1xuLVx0XHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpO1xuLVx0XHRpZiAoc2V0dWlkKFVTSFJUX01BWCkpXG4rXHRcdGlmIChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpXG4rXHRcdFx0ZXhpdCgxKTtcbitcdFx0aWYgKHNldHVpZChVU0hSVF9NQVgpKSB7XG4gXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiW0lORk9dIHNraXAgc2V0dWlkIGNoaWxkIHRlc3RcXG5cIik7XG4tXHRcdGVsc2Vcbi1cdFx0XHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpO1xuK1x0XHRcdGV4aXQoMCk7XG4rXHRcdH1cbitcdFx0aWYgKCFmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpXG4rXHRcdFx0ZXhpdCgxKTtcbiBcdFx0ZXhpdCgwKTtcbiBcdH1cbi1cdGlmICh3YWl0KFx1MDAyNndzdGF0dXMpID09IC0xKVxuLVx0XHRlcnJvcigxLCBlcnJubywgXCJ3YWl0XCIpO1xuLVx0aWYgKCFXSUZFWElURUQod3N0YXR1cykgfHwgV0VYSVRTVEFUVVMod3N0YXR1cykgIT0gMClcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwid2FpdDogdW5leHBlY3RlZCBjaGlsZCByZXN1bHRcIik7XG4tXG4tXHRleHBsYWluKFwiY3JlYXRlIGEgbmV3IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbCAoRkxfU19QUk9DRVNTKVwiKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwiY2FuIGdldCBpdCBhZ2FpblwiKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7XG4tXHRleHBsYWluKFwiY2hpbGQgcHJvY2VzcyBjYW5ub3QgY2FuIGdldCBpdFwiKTtcbitcdEFTU0VSVF9FUShwaWQsIHdhaXQoXHUwMDI2d3N0YXR1cykpIFRIX0xPRyhcIndhaXQgZmFpbGVkXCIpO1xuK1x0QVNTRVJUX1RSVUUoV0lGRVhJVEVEKHdzdGF0dXMpKSBUSF9MT0coXCJjaGlsZCBkaWQgbm90IGV4aXQgbm9ybWFsbHlcIik7XG4rXHRBU1NFUlRfRVEoMCwgV0VYSVRTVEFUVVMod3N0YXR1cykpIFRIX0xPRyhcImNoaWxkIHJlcG9ydGVkIHVuZXhwZWN0ZWQgcmVzdWx0XCIpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XG4rfVxuK1xuK1RFU1QocHJvY2Vzc19wcml2YXRlX2xhYmVsX3NoYXJlKVxuK3tcbitcdGludCBmZCwgZXJyLCB3c3RhdHVzO1xuK1x0cGlkX3QgcGlkO1xuK1xuK1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuK1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCJzb2NrZXQgZmFpbGVkXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBwcm9jZXNzLXByaXZhdGUgbGFiZWwgKEZMX1NfUFJPQ0VTUylcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gZ2V0IGl0IGFnYWluXCIpO1xuK1xuIFx0cGlkID0gZm9yaygpO1xuLVx0aWYgKHBpZCA9PSAtMSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwiZm9ya1wiKTtcbitcdEFTU0VSVF9ORSgtMSwgcGlkKSBUSF9MT0coXCJmb3JrIGZhaWxlZFwiKTtcbiBcdGlmICghcGlkKSB7XG4tXHRcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7XG4rXHRcdGlmICghZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApKVxuK1x0XHRcdGV4aXQoMSk7XG4gXHRcdGV4aXQoMCk7XG4gXHR9XG4tXHRpZiAod2FpdChcdTAwMjZ3c3RhdHVzKSA9PSAtMSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwid2FpdFwiKTtcbi1cdGlmICghV0lGRVhJVEVEKHdzdGF0dXMpIHx8IFdFWElUU1RBVFVTKHdzdGF0dXMpICE9IDApXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcIndhaXQ6IHVuZXhwZWN0ZWQgY2hpbGQgcmVzdWx0XCIpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBwYXJzZV9vcHRzKGludCBhcmdjLCBjaGFyICoqYXJndilcbi17XG4tXHRpbnQgYztcbi1cbi1cdHdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCBcImx2XCIpKSAhPSAtMSkge1xuLVx0XHRzd2l0Y2ggKGMpIHtcbi1cdFx0Y2FzZSAnbCc6XG4tXHRcdFx0Y2ZnX2xvbmdfcnVubmluZyA9IHRydWU7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJ3YnOlxuLVx0XHRcdGNmZ192ZXJib3NlID0gdHJ1ZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRlcnJvcigxLCAwLCBcIiVzOiBwYXJzZSBlcnJvclwiLCBhcmd2WzBdKTtcbi1cdFx0fVxuLVx0fVxuK1x0QVNTRVJUX0VRKHBpZCwgd2FpdChcdTAwMjZ3c3RhdHVzKSkgVEhfTE9HKFwid2FpdCBmYWlsZWRcIik7XG4rXHRBU1NFUlRfVFJVRShXSUZFWElURUQod3N0YXR1cykpIFRIX0xPRyhcImNoaWxkIGRpZCBub3QgZXhpdCBub3JtYWxseVwiKTtcbitcdEFTU0VSVF9FUSgwLCBXRVhJVFNUQVRVUyh3c3RhdHVzKSkgVEhfTE9HKFwiY2hpbGQgcmVwb3J0ZWQgdW5leHBlY3RlZCByZXN1bHRcIik7XG4rXG4rXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbiB9XG4gXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuK1RFU1QocmVuZXdfbGFiZWxfbGluZ2VyKVxuIHtcbi1cdGludCBmZDtcbi1cbi1cdHBhcnNlX29wdHMoYXJnYywgYXJndik7XG4rXHQvKiBBZnRlciBhIGxhYmVsIHdpdGggRVhDTCBzaGFyZSBpcyBwdXQgYW5kIGxpbmdlcmVkLCBpdCBtdXN0IGJlXG4rXHQgKiBwb3NzaWJsZSB0byBjcmVhdGUgYSBuZXcgb25lLiBDaGVjayBpZiBSRU5FVyBhY3Rpb24gZXh0ZW5kc1xuK1x0ICogdGhlIGxpbmdlciBwZXJpb2Qgb2YgcHV0IGxhYmVsLCBibG9ja2luZyBjcmVhdGlvbiBhZnRlciBwcmV2aW91c1xuK1x0ICogbGluZ2VyIHRpbWUuXG4rXHQgKi9cbitcdGludCBmZCwgZXJyO1xuIFxuIFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuLVx0aWYgKGZkID09IC0xKVxuLVx0XHRlcnJvcigxLCBlcnJubywgXCJzb2NrZXRcIik7XG4rXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcInNvY2tldCBmYWlsZWRcIik7XG4gXG4tXHRydW5fdGVzdHMoZmQpO1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNSwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBsYWJlbCB3aXRoIEZMX01JTl9MSU5HRVIgbGluZ2VyIHRpbWVcIik7XG4gXG4tXHRpZiAoY2xvc2UoZmQpKVxuLVx0XHRlcnJvcigxLCBlcnJubywgXCJjbG9zZVwiKTtcbitcdGVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNSwgMiAqIChGTF9NSU5fTElOR0VSICogMiArIDEpKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byByZW5ldyB0aGUgbGFiZWwgdG8gaW5jcmVhc2UgaXRzIGxpbmdlciB0aW1lXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgNSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gcHV0IHRoZSBsYWJlbFwiKTtcbiBcbi1cdHJldHVybiAwO1xuK1x0c2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgKyAxKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDUsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCJleHBlY3RlZCByZXVzZSB0byBmYWlsLCBuZXcgbGluZ2VyIHRpbWUgbm90IG92ZXIgeWV0XCIpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XG4gfVxuK1xuK1RFU1QocmVtb3RlX2ZsYWcpXG4re1xuK1x0LyogVGhlIFJFTU9URSBmbGFnLCB1c2VkIGZvciBnZXRzb2Nrb3B0LCBpcyBleHBlY3RlZCB0byByZXRyaWV2ZSB0aGVcbitcdCAqIGxhYmVsIGZyb20gdGhlIGxhdGVzdCByZWNlaXZlZCBoZWFkZXIuXG4rXHQgKi9cbitcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSBmcmVxID0ge1xuK1x0XHQuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsXG4rXHRcdC5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVNT1RFLFxuK1x0fTtcbitcdHNvY2tsZW5fdCBmcmVxX2xlbiA9IHNpemVvZihmcmVxKTtcbitcdGludCBsaXN0ZW5lciwgY2ZkLCBhZmQsIGVycjtcbitcbitcdGxpc3RlbmVyID0gdGNwX2xpc3RlbigpO1xuK1x0dGNwX2Nvbm5lY3QobGlzdGVuZXIsIDYsIFx1MDAyNmNmZCwgXHUwMDI2YWZkKTtcbitcbitcdGVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZmcmVxLCBcdTAwMjZmcmVxX2xlbik7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJnZXRzb2Nrb3B0IHdpdGggSVBWNl9GTF9GX1JFTU9URSBmYWlsZWRcIik7XG4rXHRBU1NFUlRfRVEoNiwgbnRvaGwoZnJlcS5mbHJfbGFiZWwpKSBUSF9MT0coXCJ1bmV4cGVjdGVkIHJlbW90ZSBmbG93IGxhYmVsXCIpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGFmZCkpO1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGNmZCkpO1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGxpc3RlbmVyKSk7XG4rfVxuK1xuK1RFU1QocmVmbGVjdF9mbGFnKVxuK3tcbitcdC8qIFRoZSBSRUZMRUNUIGZsYWcgYWN0cyBhcyBhIHRyaWdnZXIgdG8gdGhlIFJFUEZMT1cgYml0LiBXaGVuIFJFUEZMT1dcbitcdCAqIGlzIHRyaWdnZXJlZCBmb3IgYSBzb2NrZXQsIGl0IGFkb3B0cyB0aGUgbGFiZWwgcmVjZWl2ZWQgZnJvbSB0aGVcbitcdCAqIGNvbm5lY3RlZCBzb2NrZXQuXG4rXHQgKi9cbitcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZWZsZWN0X29uID0ge1xuK1x0XHQuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsXG4rXHRcdC5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVGTEVDVCxcbitcdH07XG4rXHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9xdWVyeSA9IHtcbitcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfR0VULFxuK1x0fTtcbitcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZWZsZWN0X29mZiA9IHtcbitcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUFVULFxuK1x0XHQuZmxyX2ZsYWdzID0gSVBWNl9GTF9GX1JFRkxFQ1QsXG4rXHR9O1xuK1x0c29ja2xlbl90IHJlZmxlY3RfcXVlcnlfbGVuID0gc2l6ZW9mKHJlZmxlY3RfcXVlcnkpO1xuK1x0aW50IGxpc3RlbmVyLCBjZmQsIGFmZCwgZXJyO1xuK1xuK1x0c2V0X2Zsb3dsYWJlbF9jb25zaXN0ZW5jeShmYWxzZSk7XG4rXG4rXHRsaXN0ZW5lciA9IHRjcF9saXN0ZW4oKTtcbitcdGVyciA9IHNldHNvY2tvcHQobGlzdGVuZXIsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlZmxlY3Rfb24sIHNpemVvZihyZWZsZWN0X29uKSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gZW5hYmxlIFJFRkxFQ1Qgb24gdGhlIGxpc3RlbmVyXCIpO1xuK1xuK1x0dGNwX2Nvbm5lY3QobGlzdGVuZXIsIDcsIFx1MDAyNmNmZCwgXHUwMDI2YWZkKTtcbitcbitcdGVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZyZWZsZWN0X3F1ZXJ5LCBcdTAwMjZyZWZsZWN0X3F1ZXJ5X2xlbik7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gcXVlcnkgdGhlIGFjY2VwdGVkIHNvY2tldCdzIG91dGdvaW5nIGxhYmVsXCIpO1xuK1x0QVNTRVJUX0VRKDcsIG50b2hsKHJlZmxlY3RfcXVlcnkuZmxyX2xhYmVsKSkgVEhfTE9HKFwiYWNjZXB0ZWQgc29ja2V0IGRpZCBub3QgcmVmbGVjdCBjbGllbnQncyBsYWJlbFwiKTtcbitcbitcdGVyciA9IHNldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZyZWZsZWN0X29mZiwgc2l6ZW9mKHJlZmxlY3Rfb2ZmKSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gZGlzYWJsZSBSRUZMRUNUIG9uIHRoZSBhY2NlcHRlZCBzb2NrZXRcIik7XG4rXG4rXHRlcnIgPSBzZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXHUwMDI2cmVmbGVjdF9vZmYsIHNpemVvZihyZWZsZWN0X29mZikpO1xuK1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCJleHBlY3RlZCBkaXNhYmxpbmcgUkVGTEVDVCB0d2ljZSB0byBmYWlsXCIpO1xuK1xuK1x0c2V0X2Zsb3dsYWJlbF9jb25zaXN0ZW5jeSh0cnVlKTtcbitcbitcdEFTU0VSVF9FUSgwLCBjbG9zZShhZmQpKTtcbitcdEFTU0VSVF9FUSgwLCBjbG9zZShjZmQpKTtcbitcdEFTU0VSVF9FUSgwLCBjbG9zZShsaXN0ZW5lcikpO1xuK31cbitcbitURVNUX0hBUk5FU1NfTUFJTlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTY6MTY6MDAuNTIzMDg1NDI4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA0NDM0MzMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IElQdjYgRmxvdyBMYWJlbCBTZWxmdGVzdCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIHNlZS4gVGhpcyBwYXRjaCB0b3VjaGVzIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNgLiBSaWdodCwgaXQncyBjb252ZXJ0aW5nIGFuIGV4aXN0aW5nIHRlc3QgYW5kIGFkZGluZyBuZXcgb25lcywgYWxsIHJlbGF0ZWQgdG8gSVB2NiBmbG93IGxhYmVscywgYnV0IGNydWNpYWxseSwgaXQncyAqb25seSogaW4gdGhlIHNlbGZ0ZXN0cy4gTm8ga2VybmVsIGNvZGUgaXMgYmVpbmcgbW9kaWZpZWQgaGVyZS4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkaWZm4oCmIFllcCwganVzdCB0aGF0IG9uZSBmaWxlLlxuXG5TaW5jZSB0aGlzIGlzIHB1cmVseSBhIHNlbGZ0ZXN0IHVwZGF0ZSwgdGhlcmUncyB6ZXJvIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHRoZSBrZXJuZWwgaXRzZWxmIHRoYXQgd2FycmFudHMgZnV6emluZy4gSXQncyB1c2VyLXNwYWNlIHRlc3RpbmcsIG5vdCBrZXJuZWwgYmVoYXZpb3IuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGZvbGxvd2luZyB0aGUgcnVsZXMgY29ycmVjdGx5LiBMZXQgbWUgcmVyZWFkIHRoZSBjcml0ZXJpYS4uLlxuXG5IbW0sIHNlbGZ0ZXN0cyBhcmVuJ3QgZXhwbGljaXRseSAqbGlzdGVkKiBpbiB0aGUgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBsaXN0LCBidXQgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGV5IGZhbGwgdW5kZXIgdGhlIHNwaXJpdCBvZiB0aGUgcmVzdHJpY3Rpb25zLiBUaGVzZSBhcmUgaXNvbGF0ZWQgdXNlci1zcGFjZSB0ZXN0czsgZnV6emluZyB0aGUga2VybmVsIGJhc2VkIG9uIGNoYW5nZXMgKndpdGhpbiogdGhlbSBtYWtlcyBubyBzZW5zZSBzaW5jZSB0aGUga2VybmVsIGl0c2VsZiBoYXNuJ3QgYmVlbiBtb2RpZmllZC4gQWgsIHRoZSBpbnN0cnVjdGlvbnMgc2F5IG15IGpvYiBpcyB0byBkZXRlcm1pbmUgaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHBhdGNoIHNvbGVseSBjb25jZXJucyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cywgSSdtIGNvbmZpZGVudCB0aGF0IGl0IGRvZXMgKm5vdCogd2FycmFudCBmdXp6aW5nLiBJJ2xsIHJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MDMsIk91dHB1dFRva2VucyI6NzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNjoxNjowNi41Njc0MzE0NTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSB1c2VyLXNwYWNlIHNlbGZ0ZXN0ICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMpIGFuZCBtYWtlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSB1c2VyLXNwYWNlIHNlbGZ0ZXN0ICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMpIGFuZCBtYWtlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow8sth4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 15:24:29 +0000 UTC FinishedAt: 2026-07-27 16:16:08 +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+CgkJCTx0ZD4yMDI2LzA3LzI3IDE2OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSB1c2VyLXNwYWNlIHNlbGZ0ZXN0ICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMpIGFuZCBtYWtlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTY6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0ZWE1NDZiOTM3OTQxMTE1YTAzYWZjY2Q3NjYxMjE5YTFmYjYxNGVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMTY6MTU6NTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jXG5pbmRleCBhZjk1YjQ4YWNlYTkwYi4uOWFhNWM4MTQ2ZjE3MTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuY1xuQEAgLTYsNiAmIzQzOzYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZXJyb3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbkBAIC0xOSwzMSAmIzQzOzIwLDI1IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuIFxuIC8qIHVhcGkvZ2xpYmMgd2VpcmRuZXNzIG1heSBsZWF2ZSB0aGlzIHVuZGVmaW5lZCAqL1xuICNpZm5kZWYgSVBWNl9GTE9XTEFCRUxfTUdSXG4gI2RlZmluZSBJUFY2X0ZMT1dMQUJFTF9NR1JcdDMyXG4gI2VuZGlmXG4mIzQzOyNpZm5kZWYgSVBWNl9GTE9XSU5GT19TRU5EXG4mIzQzOyNkZWZpbmUgSVBWNl9GTE9XSU5GT19TRU5EXHQzM1xuJiM0MzsjZW5kaWZcbiBcbiAvKiBmcm9tIG5ldC9pcHY2L2lwNl9mbG93bGFiZWwuYyAqL1xuICNkZWZpbmUgRkxfTUlOX0xJTkdFUlx0XHQ2XG4gXG4tI2RlZmluZSBleHBsYWluKHgpXHRcdFx0XHRcdFx0XHRcXFxuLVx0ZG8geyBpZiAoY2ZnX3ZlcmJvc2UpIGZwcmludGYoc3RkZXJyLCBcJiMzNDsgICAgICAgXCYjMzQ7IHggXCYjMzQ7XFxuXCYjMzQ7KTsgfSB3aGlsZSAoMClcbi1cbi0jZGVmaW5lIF9fZXhwZWN0KHgpXHRcdFx0XHRcdFx0XHRcXFxuLVx0ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuLVx0XHRpZiAoISh4KSlcdFx0XHRcdFx0XHRcXFxuLVx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtbT0tdICAgXCYjMzQ7ICN4IFwmIzM0O1xcblwmIzM0Oyk7XHRcdFxcXG4tXHRcdGVsc2VcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7W0VSUl0gIFwmIzM0OyAjeCBcJiMzNDsgKGxpbmUgJWQpXCYjMzQ7LCBfX0xJTkVfXyk7IFxcXG4tXHR9IHdoaWxlICgwKVxuLVxuLSNkZWZpbmUgZXhwZWN0X3Bhc3MoeClcdF9fZXhwZWN0KHgpXG4tI2RlZmluZSBleHBlY3RfZmFpbCh4KVx0X19leHBlY3QoISh4KSlcbi1cbi1zdGF0aWMgYm9vbCBjZmdfbG9uZ19ydW5uaW5nO1xuLXN0YXRpYyBib29sIGNmZ192ZXJib3NlO1xuJiM0MzsjZGVmaW5lIElOSVRfU0lONl9MT09QQkFDSyhuYW1lKVx0XHRcdFx0XHRcXFxuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbjYgbmFtZSA9IHtcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdC5zaW42X2ZhbWlseVx0PSBBRl9JTkVUNixcdFx0XHRcdFxcXG4mIzQzO1x0XHQuc2luNl9hZGRyXHQ9IElONkFERFJfTE9PUEJBQ0tfSU5JVCxcdFx0XFxcbiYjNDM7XHRcdC5zaW42X3BvcnRcdD0gaHRvbnMoODg4OCksXHRcdFx0XHRcXFxuJiM0MztcdH1cbiBcbiBzdGF0aWMgaW50IGZsb3dsYWJlbF9nZXQoaW50IGZkLCB1aW50MzJfdCBsYWJlbCwgdWludDhfdCBzaGFyZSwgdWludDE2X3QgZmxhZ3MpXG4ge1xuQEAgLTcxLDEyOSAmIzQzOzY2LDM0NCBAQCBzdGF0aWMgaW50IGZsb3dsYWJlbF9wdXQoaW50IGZkLCB1aW50MzJfdCBsYWJlbClcbiBcdHJldHVybiBzZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZyZXEsIHNpemVvZihyZXEpKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnVuX3Rlc3RzKGludCBmZClcbiYjNDM7c3RhdGljIGludCBmbG93bGFiZWxfcmVuZXcoaW50IGZkLCB1aW50MzJfdCBsYWJlbCwgdWludDE2X3QgbGluZ2VyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlcSA9IHtcbiYjNDM7XHRcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX1JFTkVXLFxuJiM0MztcdFx0LmZscl9sYWJlbCA9IGh0b25sKGxhYmVsKSxcbiYjNDM7XHRcdC5mbHJfbGluZ2VyID0gbGluZ2VyLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBzZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZyZXEsIHNpemVvZihyZXEpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0Y3BfbGlzdGVuKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRJTklUX1NJTjZfTE9PUEJBQ0soYWRkcik7XG4mIzQzO1x0Y29uc3QgaW50IG9uZSA9IDE7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19TVFJFQU0sIDApO1xuJiM0MztcdGlmIChmZCA9PSAtMSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtzb2NrZXQgbGlzdGVuZXJcJiMzNDspO1xuJiM0MztcdGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFx1MDAyNm9uZSwgc2l6ZW9mKG9uZSkpKVxuJiM0MztcdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O3NldHNvY2tvcHQgU09fUkVVU0VBRERSXCYjMzQ7KTtcbiYjNDM7XHRpZiAoYmluZChmZCwgKHZvaWQgKilcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpKVxuJiM0MztcdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O2JpbmRcJiMzNDspO1xuJiM0MztcdGlmIChsaXN0ZW4oZmQsIDEpKVxuJiM0MztcdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O2xpc3RlblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGNwX2Nvbm5lY3QoaW50IGxpc3RlbmVyLCB1aW50MzJfdCBmbG93bGFiZWwsIGludCAqY2xpZW50LCBpbnQgKmFjY2VwdGVkKVxuJiM0Mzt7XG4mIzQzO1x0SU5JVF9TSU42X0xPT1BCQUNLKGFkZHIpO1xuJiM0MztcdGNvbnN0IGludCBvbmUgPSAxO1xuJiM0MztcdGludCBjZmQsIGFmZDtcbiYjNDM7XG4mIzQzO1x0Y2ZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX1NUUkVBTSwgMCk7XG4mIzQzO1x0aWYgKGNmZCA9PSAtMSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtzb2NrZXQgY2xpZW50XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZsb3dsYWJlbF9nZXQoY2ZkLCBmbG93bGFiZWwsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtmbG93bGFiZWxfZ2V0XCYjMzQ7KTtcbiYjNDM7XHRpZiAoc2V0c29ja29wdChjZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dJTkZPX1NFTkQsIFx1MDAyNm9uZSwgc2l6ZW9mKG9uZSkpKVxuJiM0MztcdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O3NldHNvY2tvcHQgZmxvd2luZm9fc2VuZFwmIzM0Oyk7XG4mIzQzO1x0YWRkci5zaW42X2Zsb3dpbmZvID0gaHRvbmwoZmxvd2xhYmVsKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNvbm5lY3QoY2ZkLCAodm9pZCAqKVx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSkpXG4mIzQzO1x0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7Y29ubmVjdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGFmZCA9IGFjY2VwdChsaXN0ZW5lciwgTlVMTCwgTlVMTCk7XG4mIzQzO1x0aWYgKGFmZCA9PSAtMSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDthY2NlcHRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQqY2xpZW50ID0gY2ZkO1xuJiM0MztcdCphY2NlcHRlZCA9IGFmZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2V0X2Zsb3dsYWJlbF9jb25zaXN0ZW5jeShib29sIGVuYWJsZSlcbiYjNDM7e1xuJiM0MztcdC8qIGZsb3dsYWJlbF9jb25zaXN0ZW5jeSBtdXN0IGJlIGRpc2FibGUgdG8gdXNlIHRoZSBJUFY2X0ZMX0ZfUkVGTEVDVFxuJiM0MztcdCAqIGZsYWcuIFRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHJlcXVpcmVkIGZvciBzZXR0aW5nIHVwIGFuZCB0ZWFyaW5nXG4mIzQzO1x0ICogZG93biB0ZXN0IGNhc2VzIGZvciB0aGlzIGZsYWcuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4oXCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY2L2Zsb3dsYWJlbF9jb25zaXN0ZW5jeVwmIzM0OywgT19XUk9OTFkpO1xuJiM0MztcdGlmIChmZCA9PSAtMSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtvcGVuIGZsb3dsYWJlbF9jb25zaXN0ZW5jeVwmIzM0Oyk7XG4mIzQzO1x0aWYgKHdyaXRlKGZkLCBlbmFibGUgPyBcJiMzNDsxXCYjMzQ7IDogXCYjMzQ7MFwmIzM0OywgMSkgIT0gMSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDt3cml0ZSBmbG93bGFiZWxfY29uc2lzdGVuY3lcJiMzNDspO1xuJiM0MztcdGlmIChjbG9zZShmZCkpXG4mIzQzO1x0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7Y2xvc2UgZmxvd2xhYmVsX2NvbnNpc3RlbmN5XCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChjYW5ub3RfZ2V0X25vbl9leGlzdGVudF9sYWJlbClcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgZXJyO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCYjMzQ7c29ja2V0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApO1xuJiM0MztcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIGdldCBvZiBhIG5vbi1leGlzdGVudCBsYWJlbCB0byBmYWlsXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1QoY2Fubm90X3B1dF9ub25fZXhpc3RlbnRfbGFiZWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIGVycjtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwmIzM0O3NvY2tldCBmYWlsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcbiYjNDM7XHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBwdXQgb2YgYSBub24tZXhpc3RlbnQgbGFiZWwgdG8gZmFpbFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKGNhbm5vdF9jcmVhdGVfbGFiZWxfZ3JlYXRlcl90aGFuXzIwX2JpdHMpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIGVycjtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwmIzM0O3NvY2tldCBmYWlsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAweDFGRkZGRiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgbGFiZWwgXHUwMDNlIDIwIGJpdHMgdG8gYmUgcmVqZWN0ZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChjYW5fY3JlYXRlX2FuZF9nZXRfYW5kX3B1dF9sYWJlbHMpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIGVycjtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwmIzM0O3NvY2tldCBmYWlsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBsYWJlbCAoRkxfRl9DUkVBVEUpXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgMCk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBnZXQgdGhlIGxhYmVsIHdpdGhvdXQgRkxfRl9DUkVBVEVcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSB8IElQVjZfRkxfRl9FWENMKTtcbiYjNDM7XHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBGTF9GX0VYQ0wgdG8gcmVqZWN0IGFuIGFscmVhZHktZXhpc3RpbmcgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHB1dCBmaXJzdCByZWZlcmVuY2VcJiMzNDspO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gcHV0IHNlY29uZCByZWZlcmVuY2VcJiMzNDspO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gcHV0IHRoaXJkIHJlZmVyZW5jZVwmIzM0Oyk7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgZm91cnRoIHB1dCB0byBmYWlsLCBubyByZWZlcmVuY2VzIGxlZnRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChleGNsdXNpdmVfbGFiZWxfc2hhcmUpXG4ge1xuLVx0aW50IHdzdGF0dXM7XG4mIzQzO1x0aW50IGZkLCBlcnI7XG4mIzQzO1xuJiM0MztcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcJiMzNDtzb2NrZXQgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGV4Y2x1c2l2ZSBsYWJlbCAoRkxfU19FWENMKVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIHJldXNlIGluIG5vbi1leGNsdXNpdmUgbW9kZSB0byBmYWlsXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIHJldXNlIGluIGV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWwgdG9vXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMik7XG4mIzQzO1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBwdXQgdGhlIGV4Y2x1c2l2ZSBsYWJlbFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIHJldXNlIHRvIGZhaWwsIGR1ZSB0byBsaW5nZXJcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzbGVlcChGTF9NSU5fTElOR0VSICogMiAmIzQzOyAxKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIHJldXNlIHRvIHN1Y2NlZWQgYWZ0ZXIgbGluZ2VyXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1QodXNlcl9wcml2YXRlX2xhYmVsX3NoYXJlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkLCBlcnIsIHdzdGF0dXM7XG4gXHRwaWRfdCBwaWQ7XG4gXG4tXHRleHBsYWluKFwmIzM0O2Nhbm5vdCBnZXQgbm9uLWV4aXN0ZW50IGxhYmVsXCYjMzQ7KTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApKTtcbi1cbi1cdGV4cGxhaW4oXCYjMzQ7Y2Fubm90IHB1dCBub24tZXhpc3RlbnQgbGFiZWxcJiMzNDspO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVxuLVx0ZXhwbGFpbihcJiMzNDtjYW5ub3QgY3JlYXRlIGxhYmVsIGdyZWF0ZXIgdGhhbiAyMCBiaXRzXCYjMzQ7KTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDB4MUZGRkZGLCBJUFY2X0ZMX1NfQU5ZLFxuLVx0XHRcdFx0ICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXG4tXHRleHBsYWluKFwmIzM0O2NyZWF0ZSBhIG5ldyBsYWJlbCAoRkxfRl9DUkVBVEUpXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2FuIGdldCB0aGUgbGFiZWwgKHdpdGhvdXQgRkxfRl9DUkVBVEUpXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2FuIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2Fubm90IGdldCBpdCBhZ2FpbiB3aXRoIHRoZSBleGNsdXNpdmUgKEZMX0ZMX0VYQ0wpIGZsYWdcJiMzNDspO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSxcbi1cdFx0XHRcdFx0IElQVjZfRkxfRl9DUkVBVEUgfCBJUFY2X0ZMX0ZfRVhDTCkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjYW4gbm93IHB1dCBleGFjdGx5IHRocmVlIHJlZmVyZW5jZXNcJiMzNDspO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVxuLVx0ZXhwbGFpbihcJiMzNDtjcmVhdGUgYSBuZXcgZXhjbHVzaXZlIGxhYmVsIChGTF9TX0VYQ0wpXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlXCYjMzQ7KTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gZXhjbHVzaXZlIG1vZGUgZWl0aGVyXCYjMzQ7KTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAyKSk7XG4tXG4tXHRpZiAoY2ZnX2xvbmdfcnVubmluZykge1xuLVx0XHRleHBsYWluKFwmIzM0O2Nhbm5vdCByZXVzZSB0aGUgbGFiZWwsIGR1ZSB0byBsaW5nZXJcJiMzNDspO1xuLVx0XHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLFxuLVx0XHRcdFx0XHQgIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdFx0ZXhwbGFpbihcJiMzNDthZnRlciBzbGVlcCwgY2FuIHJldXNlXCYjMzQ7KTtcbi1cdFx0c2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSk7XG4tXHRcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksXG4tXHRcdFx0XHRcdCAgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0fVxuJiM0MztcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcJiMzNDtzb2NrZXQgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IHVzZXItcHJpdmF0ZSBsYWJlbCAoRkxfU19VU0VSKVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19BTlksIDApO1xuJiM0MztcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIGdldCBpbiBub24tZXhjbHVzaXZlIG1vZGUgdG8gZmFpbFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19FWENMLCAwKTtcbiYjNDM7XHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBnZXQgaW4gZXhjbHVzaXZlIG1vZGUgdG8gZmFpbFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiBpbiB1c2VyIG1vZGVcJiMzNDspO1xuIFxuLVx0ZXhwbGFpbihcJiMzNDtjcmVhdGUgYSBuZXcgdXNlci1wcml2YXRlIGxhYmVsIChGTF9TX1VTRVIpXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlXCYjMzQ7KTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19BTlksIDApKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2Fubm90IGdldCBpdCBhZ2FpbiBpbiBleGNsdXNpdmUgbW9kZVwmIzM0Oyk7XG4tXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfRVhDTCwgMCkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjYW4gZ2V0IGl0IGFnYWluIGluIHVzZXIgbW9kZVwmIzM0Oyk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjaGlsZCBwcm9jZXNzIGNhbiBnZXQgaXQgdG9vLCBidXQgbm90IGFmdGVyIHNldHVpZChub2JvZHkpXCYjMzQ7KTtcbiBcdHBpZCA9IGZvcmsoKTtcbi1cdGlmIChwaWQgPT0gLTEpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtmb3JrXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfTkUoLTEsIHBpZCkgVEhfTE9HKFwmIzM0O2ZvcmsgZmFpbGVkXCYjMzQ7KTtcbiBcdGlmICghcGlkKSB7XG4tXHRcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7XG4tXHRcdGlmIChzZXR1aWQoVVNIUlRfTUFYKSlcbiYjNDM7XHRcdGlmIChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpXG4mIzQzO1x0XHRcdGV4aXQoMSk7XG4mIzQzO1x0XHRpZiAoc2V0dWlkKFVTSFJUX01BWCkpIHtcbiBcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7W0lORk9dIHNraXAgc2V0dWlkIGNoaWxkIHRlc3RcXG5cJiMzNDspO1xuLVx0XHRlbHNlXG4tXHRcdFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKTtcbiYjNDM7XHRcdFx0ZXhpdCgwKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmICghZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKVxuJiM0MztcdFx0XHRleGl0KDEpO1xuIFx0XHRleGl0KDApO1xuIFx0fVxuLVx0aWYgKHdhaXQoXHUwMDI2d3N0YXR1cykgPT0gLTEpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDt3YWl0XCYjMzQ7KTtcbi1cdGlmICghV0lGRVhJVEVEKHdzdGF0dXMpIHx8IFdFWElUU1RBVFVTKHdzdGF0dXMpICE9IDApXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDt3YWl0OiB1bmV4cGVjdGVkIGNoaWxkIHJlc3VsdFwmIzM0Oyk7XG4tXG4tXHRleHBsYWluKFwmIzM0O2NyZWF0ZSBhIG5ldyBwcm9jZXNzLXByaXZhdGUgbGFiZWwgKEZMX1NfUFJPQ0VTUylcJiMzNDspO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2FuIGdldCBpdCBhZ2FpblwmIzM0Oyk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjaGlsZCBwcm9jZXNzIGNhbm5vdCBjYW4gZ2V0IGl0XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEocGlkLCB3YWl0KFx1MDAyNndzdGF0dXMpKSBUSF9MT0coXCYjMzQ7d2FpdCBmYWlsZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9UUlVFKFdJRkVYSVRFRCh3c3RhdHVzKSkgVEhfTE9HKFwmIzM0O2NoaWxkIGRpZCBub3QgZXhpdCBub3JtYWxseVwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIFdFWElUU1RBVFVTKHdzdGF0dXMpKSBUSF9MT0coXCYjMzQ7Y2hpbGQgcmVwb3J0ZWQgdW5leHBlY3RlZCByZXN1bHRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChwcm9jZXNzX3ByaXZhdGVfbGFiZWxfc2hhcmUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIGVyciwgd3N0YXR1cztcbiYjNDM7XHRwaWRfdCBwaWQ7XG4mIzQzO1xuJiM0MztcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcJiMzNDtzb2NrZXQgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbCAoRkxfU19QUk9DRVNTKVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGdldCBpdCBhZ2FpblwmIzM0Oyk7XG4mIzQzO1xuIFx0cGlkID0gZm9yaygpO1xuLVx0aWYgKHBpZCA9PSAtMSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O2ZvcmtcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9ORSgtMSwgcGlkKSBUSF9MT0coXCYjMzQ7Zm9yayBmYWlsZWRcJiMzNDspO1xuIFx0aWYgKCFwaWQpIHtcbi1cdFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApKTtcbiYjNDM7XHRcdGlmICghZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApKVxuJiM0MztcdFx0XHRleGl0KDEpO1xuIFx0XHRleGl0KDApO1xuIFx0fVxuLVx0aWYgKHdhaXQoXHUwMDI2d3N0YXR1cykgPT0gLTEpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDt3YWl0XCYjMzQ7KTtcbi1cdGlmICghV0lGRVhJVEVEKHdzdGF0dXMpIHx8IFdFWElUU1RBVFVTKHdzdGF0dXMpICE9IDApXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDt3YWl0OiB1bmV4cGVjdGVkIGNoaWxkIHJlc3VsdFwmIzM0Oyk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuLXtcbi1cdGludCBjO1xuLVxuLVx0d2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0O2x2XCYjMzQ7KSkgIT0gLTEpIHtcbi1cdFx0c3dpdGNoIChjKSB7XG4tXHRcdGNhc2UgJiMzOTtsJiMzOTs6XG4tXHRcdFx0Y2ZnX2xvbmdfcnVubmluZyA9IHRydWU7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJiMzOTt2JiMzOTs6XG4tXHRcdFx0Y2ZnX3ZlcmJvc2UgPSB0cnVlO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdGVycm9yKDEsIDAsIFwmIzM0OyVzOiBwYXJzZSBlcnJvclwmIzM0OywgYXJndlswXSk7XG4tXHRcdH1cbi1cdH1cbiYjNDM7XHRBU1NFUlRfRVEocGlkLCB3YWl0KFx1MDAyNndzdGF0dXMpKSBUSF9MT0coXCYjMzQ7d2FpdCBmYWlsZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9UUlVFKFdJRkVYSVRFRCh3c3RhdHVzKSkgVEhfTE9HKFwmIzM0O2NoaWxkIGRpZCBub3QgZXhpdCBub3JtYWxseVwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIFdFWElUU1RBVFVTKHdzdGF0dXMpKSBUSF9MT0coXCYjMzQ7Y2hpbGQgcmVwb3J0ZWQgdW5leHBlY3RlZCByZXN1bHRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbiB9XG4gXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuJiM0MztURVNUKHJlbmV3X2xhYmVsX2xpbmdlcilcbiB7XG4tXHRpbnQgZmQ7XG4tXG4tXHRwYXJzZV9vcHRzKGFyZ2MsIGFyZ3YpO1xuJiM0MztcdC8qIEFmdGVyIGEgbGFiZWwgd2l0aCBFWENMIHNoYXJlIGlzIHB1dCBhbmQgbGluZ2VyZWQsIGl0IG11c3QgYmVcbiYjNDM7XHQgKiBwb3NzaWJsZSB0byBjcmVhdGUgYSBuZXcgb25lLiBDaGVjayBpZiBSRU5FVyBhY3Rpb24gZXh0ZW5kc1xuJiM0MztcdCAqIHRoZSBsaW5nZXIgcGVyaW9kIG9mIHB1dCBsYWJlbCwgYmxvY2tpbmcgY3JlYXRpb24gYWZ0ZXIgcHJldmlvdXNcbiYjNDM7XHQgKiBsaW5nZXIgdGltZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpbnQgZmQsIGVycjtcbiBcbiBcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbi1cdGlmIChmZCA9PSAtMSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O3NvY2tldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCYjMzQ7c29ja2V0IGZhaWxlZFwmIzM0Oyk7XG4gXG4tXHRydW5fdGVzdHMoZmQpO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDUsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBsYWJlbCB3aXRoIEZMX01JTl9MSU5HRVIgbGluZ2VyIHRpbWVcJiMzNDspO1xuIFxuLVx0aWYgKGNsb3NlKGZkKSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O2Nsb3NlXCYjMzQ7KTtcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcmVuZXcoZmQsIDUsIDIgKiAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSkpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gcmVuZXcgdGhlIGxhYmVsIHRvIGluY3JlYXNlIGl0cyBsaW5nZXIgdGltZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDUpO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gcHV0IHRoZSBsYWJlbFwmIzM0Oyk7XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRzbGVlcChGTF9NSU5fTElOR0VSICogMiAmIzQzOyAxKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgbmV3IGxpbmdlciB0aW1lIG5vdCBvdmVyIHlldFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuIH1cbiYjNDM7XG4mIzQzO1RFU1QocmVtb3RlX2ZsYWcpXG4mIzQzO3tcbiYjNDM7XHQvKiBUaGUgUkVNT1RFIGZsYWcsIHVzZWQgZm9yIGdldHNvY2tvcHQsIGlzIGV4cGVjdGVkIHRvIHJldHJpZXZlIHRoZVxuJiM0MztcdCAqIGxhYmVsIGZyb20gdGhlIGxhdGVzdCByZWNlaXZlZCBoZWFkZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIGZyZXEgPSB7XG4mIzQzO1x0XHQuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsXG4mIzQzO1x0XHQuZmxyX2ZsYWdzID0gSVBWNl9GTF9GX1JFTU9URSxcbiYjNDM7XHR9O1xuJiM0MztcdHNvY2tsZW5fdCBmcmVxX2xlbiA9IHNpemVvZihmcmVxKTtcbiYjNDM7XHRpbnQgbGlzdGVuZXIsIGNmZCwgYWZkLCBlcnI7XG4mIzQzO1xuJiM0MztcdGxpc3RlbmVyID0gdGNwX2xpc3RlbigpO1xuJiM0MztcdHRjcF9jb25uZWN0KGxpc3RlbmVyLCA2LCBcdTAwMjZjZmQsIFx1MDAyNmFmZCk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZmcmVxLCBcdTAwMjZmcmVxX2xlbik7XG4mIzQzO1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2dldHNvY2tvcHQgd2l0aCBJUFY2X0ZMX0ZfUkVNT1RFIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKDYsIG50b2hsKGZyZXEuZmxyX2xhYmVsKSkgVEhfTE9HKFwmIzM0O3VuZXhwZWN0ZWQgcmVtb3RlIGZsb3cgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoMCwgY2xvc2UoYWZkKSk7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGNsb3NlKGNmZCkpO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShsaXN0ZW5lcikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUKHJlZmxlY3RfZmxhZylcbiYjNDM7e1xuJiM0MztcdC8qIFRoZSBSRUZMRUNUIGZsYWcgYWN0cyBhcyBhIHRyaWdnZXIgdG8gdGhlIFJFUEZMT1cgYml0LiBXaGVuIFJFUEZMT1dcbiYjNDM7XHQgKiBpcyB0cmlnZ2VyZWQgZm9yIGEgc29ja2V0LCBpdCBhZG9wdHMgdGhlIGxhYmVsIHJlY2VpdmVkIGZyb20gdGhlXG4mIzQzO1x0ICogY29ubmVjdGVkIHNvY2tldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9vbiA9IHtcbiYjNDM7XHRcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCxcbiYjNDM7XHRcdC5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVGTEVDVCxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZWZsZWN0X3F1ZXJ5ID0ge1xuJiM0MztcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfR0VULFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlZmxlY3Rfb2ZmID0ge1xuJiM0MztcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUFVULFxuJiM0MztcdFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRUZMRUNULFxuJiM0MztcdH07XG4mIzQzO1x0c29ja2xlbl90IHJlZmxlY3RfcXVlcnlfbGVuID0gc2l6ZW9mKHJlZmxlY3RfcXVlcnkpO1xuJiM0MztcdGludCBsaXN0ZW5lciwgY2ZkLCBhZmQsIGVycjtcbiYjNDM7XG4mIzQzO1x0c2V0X2Zsb3dsYWJlbF9jb25zaXN0ZW5jeShmYWxzZSk7XG4mIzQzO1xuJiM0MztcdGxpc3RlbmVyID0gdGNwX2xpc3RlbigpO1xuJiM0MztcdGVyciA9IHNldHNvY2tvcHQobGlzdGVuZXIsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlZmxlY3Rfb24sIHNpemVvZihyZWZsZWN0X29uKSk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBlbmFibGUgUkVGTEVDVCBvbiB0aGUgbGlzdGVuZXJcJiMzNDspO1xuJiM0MztcbiYjNDM7XHR0Y3BfY29ubmVjdChsaXN0ZW5lciwgNywgXHUwMDI2Y2ZkLCBcdTAwMjZhZmQpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBnZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXHUwMDI2cmVmbGVjdF9xdWVyeSwgXHUwMDI2cmVmbGVjdF9xdWVyeV9sZW4pO1xuJiM0MztcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gcXVlcnkgdGhlIGFjY2VwdGVkIHNvY2tldCYjMzk7cyBvdXRnb2luZyBsYWJlbFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKDcsIG50b2hsKHJlZmxlY3RfcXVlcnkuZmxyX2xhYmVsKSkgVEhfTE9HKFwmIzM0O2FjY2VwdGVkIHNvY2tldCBkaWQgbm90IHJlZmxlY3QgY2xpZW50JiMzOTtzIGxhYmVsXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gc2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlZmxlY3Rfb2ZmLCBzaXplb2YocmVmbGVjdF9vZmYpKTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGRpc2FibGUgUkVGTEVDVCBvbiB0aGUgYWNjZXB0ZWQgc29ja2V0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gc2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlZmxlY3Rfb2ZmLCBzaXplb2YocmVmbGVjdF9vZmYpKTtcbiYjNDM7XHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBkaXNhYmxpbmcgUkVGTEVDVCB0d2ljZSB0byBmYWlsXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0c2V0X2Zsb3dsYWJlbF9jb25zaXN0ZW5jeSh0cnVlKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKDAsIGNsb3NlKGFmZCkpO1xuJiM0MztcdEFTU0VSVF9FUSgwLCBjbG9zZShjZmQpKTtcbiYjNDM7XHRBU1NFUlRfRVEoMCwgY2xvc2UobGlzdGVuZXIpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9IQVJORVNTX01BSU5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNjoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBhIHVzZXItc3BhY2Ugc2VsZnRlc3QgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYykgYW5kIG1ha2VzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRlYTU0NmI5Mzc5NDExMTVhMDNhZmNjZDc2NjEyMTlhMWZiNjE0ZWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAxNjoxNTo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYwppbmRleCBhZjk1YjQ4YWNlYTkwYi4uOWFhNWM4MTQ2ZjE3MTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMKQEAgLTYsNiAmIzQzOzYsNyBAQAogI2luY2x1ZGUgJmx0O2FycGEvaW5ldC5oJmd0OwogI2luY2x1ZGUgJmx0O2Vycm9yLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW1pdHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbjYuaCZndDsKICNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CkBAIC0xOSwzMSAmIzQzOzIwLDI1IEBACiAjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3dhaXQuaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmgmIzM0OwogCiAvKiB1YXBpL2dsaWJjIHdlaXJkbmVzcyBtYXkgbGVhdmUgdGhpcyB1bmRlZmluZWQgKi8KICNpZm5kZWYgSVBWNl9GTE9XTEFCRUxfTUdSCiAjZGVmaW5lIElQVjZfRkxPV0xBQkVMX01HUgkzMgogI2VuZGlmCiYjNDM7I2lmbmRlZiBJUFY2X0ZMT1dJTkZPX1NFTkQKJiM0MzsjZGVmaW5lIElQVjZfRkxPV0lORk9fU0VORAkzMwomIzQzOyNlbmRpZgogCiAvKiBmcm9tIG5ldC9pcHY2L2lwNl9mbG93bGFiZWwuYyAqLwogI2RlZmluZSBGTF9NSU5fTElOR0VSCQk2CiAKLSNkZWZpbmUgZXhwbGFpbih4KQkJCQkJCQlcCi0JZG8geyBpZiAoY2ZnX3ZlcmJvc2UpIGZwcmludGYoc3RkZXJyLCAmIzM0OyAgICAgICAmIzM0OyB4ICYjMzQ7XG4mIzM0Oyk7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX19leHBlY3QoeCkJCQkJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJaWYgKCEoeCkpCQkJCQkJXAotCQkJZnByaW50ZihzdGRlcnIsICYjMzQ7W09LXSAgICYjMzQ7ICN4ICYjMzQ7XG4mIzM0Oyk7CQlcCi0JCWVsc2UJCQkJCQkJXAotCQkJZXJyb3IoMSwgMCwgJiMzNDtbRVJSXSAgJiMzNDsgI3ggJiMzNDsgKGxpbmUgJWQpJiMzNDssIF9fTElORV9fKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgZXhwZWN0X3Bhc3MoeCkJX19leHBlY3QoeCkKLSNkZWZpbmUgZXhwZWN0X2ZhaWwoeCkJX19leHBlY3QoISh4KSkKLQotc3RhdGljIGJvb2wgY2ZnX2xvbmdfcnVubmluZzsKLXN0YXRpYyBib29sIGNmZ192ZXJib3NlOwomIzQzOyNkZWZpbmUgSU5JVF9TSU42X0xPT1BCQUNLKG5hbWUpCQkJCQlcCiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9pbjYgbmFtZSA9IHsJCQkJCVwKJiM0MzsJCS5zaW42X2ZhbWlseQk9IEFGX0lORVQ2LAkJCQlcCiYjNDM7CQkuc2luNl9hZGRyCT0gSU42QUREUl9MT09QQkFDS19JTklULAkJXAomIzQzOwkJLnNpbjZfcG9ydAk9IGh0b25zKDg4ODgpLAkJCQlcCiYjNDM7CX0KIAogc3RhdGljIGludCBmbG93bGFiZWxfZ2V0KGludCBmZCwgdWludDMyX3QgbGFiZWwsIHVpbnQ4X3Qgc2hhcmUsIHVpbnQxNl90IGZsYWdzKQogewpAQCAtNzEsMTI5ICYjNDM7NjYsMzQ0IEBAIHN0YXRpYyBpbnQgZmxvd2xhYmVsX3B1dChpbnQgZmQsIHVpbnQzMl90IGxhYmVsKQogCXJldHVybiBzZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCAmYW1wO3JlcSwgc2l6ZW9mKHJlcSkpOwogfQogCi1zdGF0aWMgdm9pZCBydW5fdGVzdHMoaW50IGZkKQomIzQzO3N0YXRpYyBpbnQgZmxvd2xhYmVsX3JlbmV3KGludCBmZCwgdWludDMyX3QgbGFiZWwsIHVpbnQxNl90IGxpbmdlcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZXEgPSB7CiYjNDM7CQkuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9SRU5FVywKJiM0MzsJCS5mbHJfbGFiZWwgPSBodG9ubChsYWJlbCksCiYjNDM7CQkuZmxyX2xpbmdlciA9IGxpbmdlciwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsICZhbXA7cmVxLCBzaXplb2YocmVxKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdGNwX2xpc3Rlbih2b2lkKQomIzQzO3sKJiM0MzsJSU5JVF9TSU42X0xPT1BCQUNLKGFkZHIpOwomIzQzOwljb25zdCBpbnQgb25lID0gMTsKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19TVFJFQU0sIDApOwomIzQzOwlpZiAoZmQgPT0gLTEpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtzb2NrZXQgbGlzdGVuZXImIzM0Oyk7CiYjNDM7CWlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsICZhbXA7b25lLCBzaXplb2Yob25lKSkpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtzZXRzb2Nrb3B0IFNPX1JFVVNFQUREUiYjMzQ7KTsKJiM0MzsJaWYgKGJpbmQoZmQsICh2b2lkICopJmFtcDthZGRyLCBzaXplb2YoYWRkcikpKQomIzQzOwkJZXJyb3IoMSwgZXJybm8sICYjMzQ7YmluZCYjMzQ7KTsKJiM0MzsJaWYgKGxpc3RlbihmZCwgMSkpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtsaXN0ZW4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldHVybiBmZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGNwX2Nvbm5lY3QoaW50IGxpc3RlbmVyLCB1aW50MzJfdCBmbG93bGFiZWwsIGludCAqY2xpZW50LCBpbnQgKmFjY2VwdGVkKQomIzQzO3sKJiM0MzsJSU5JVF9TSU42X0xPT1BCQUNLKGFkZHIpOwomIzQzOwljb25zdCBpbnQgb25lID0gMTsKJiM0MzsJaW50IGNmZCwgYWZkOwomIzQzOwomIzQzOwljZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfU1RSRUFNLCAwKTsKJiM0MzsJaWYgKGNmZCA9PSAtMSkKJiM0MzsJCWVycm9yKDEsIGVycm5vLCAmIzM0O3NvY2tldCBjbGllbnQmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChmbG93bGFiZWxfZ2V0KGNmZCwgZmxvd2xhYmVsLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtmbG93bGFiZWxfZ2V0JiMzNDspOwomIzQzOwlpZiAoc2V0c29ja29wdChjZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dJTkZPX1NFTkQsICZhbXA7b25lLCBzaXplb2Yob25lKSkpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtzZXRzb2Nrb3B0IGZsb3dpbmZvX3NlbmQmIzM0Oyk7CiYjNDM7CWFkZHIuc2luNl9mbG93aW5mbyA9IGh0b25sKGZsb3dsYWJlbCk7CiYjNDM7CiYjNDM7CWlmIChjb25uZWN0KGNmZCwgKHZvaWQgKikmYW1wO2FkZHIsIHNpemVvZihhZGRyKSkpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtjb25uZWN0JiMzNDspOwomIzQzOwomIzQzOwlhZmQgPSBhY2NlcHQobGlzdGVuZXIsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoYWZkID09IC0xKQomIzQzOwkJZXJyb3IoMSwgZXJybm8sICYjMzQ7YWNjZXB0JiMzNDspOwomIzQzOwomIzQzOwkqY2xpZW50ID0gY2ZkOwomIzQzOwkqYWNjZXB0ZWQgPSBhZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldF9mbG93bGFiZWxfY29uc2lzdGVuY3koYm9vbCBlbmFibGUpCiYjNDM7ewomIzQzOwkvKiBmbG93bGFiZWxfY29uc2lzdGVuY3kgbXVzdCBiZSBkaXNhYmxlIHRvIHVzZSB0aGUgSVBWNl9GTF9GX1JFRkxFQ1QKJiM0MzsJICogZmxhZy4gVGhpcyBoZWxwZXIgZnVuY3Rpb24gaXMgcmVxdWlyZWQgZm9yIHNldHRpbmcgdXAgYW5kIHRlYXJpbmcKJiM0MzsJICogZG93biB0ZXN0IGNhc2VzIGZvciB0aGlzIGZsYWcuCiYjNDM7CSAqLwomIzQzOwlpbnQgZmQ7CiYjNDM7CiYjNDM7CWZkID0gb3BlbigmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2Ni9mbG93bGFiZWxfY29uc2lzdGVuY3kmIzM0OywgT19XUk9OTFkpOwomIzQzOwlpZiAoZmQgPT0gLTEpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtvcGVuIGZsb3dsYWJlbF9jb25zaXN0ZW5jeSYjMzQ7KTsKJiM0MzsJaWYgKHdyaXRlKGZkLCBlbmFibGUgPyAmIzM0OzEmIzM0OyA6ICYjMzQ7MCYjMzQ7LCAxKSAhPSAxKQomIzQzOwkJZXJyb3IoMSwgZXJybm8sICYjMzQ7d3JpdGUgZmxvd2xhYmVsX2NvbnNpc3RlbmN5JiMzNDspOwomIzQzOwlpZiAoY2xvc2UoZmQpKQomIzQzOwkJZXJyb3IoMSwgZXJybm8sICYjMzQ7Y2xvc2UgZmxvd2xhYmVsX2NvbnNpc3RlbmN5JiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGNhbm5vdF9nZXRfbm9uX2V4aXN0ZW50X2xhYmVsKQomIzQzO3sKJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKTsKJiM0MzsJQVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coJiMzNDtleHBlY3RlZCBnZXQgb2YgYSBub24tZXhpc3RlbnQgbGFiZWwgdG8gZmFpbCYjMzQ7KTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1QoY2Fubm90X3B1dF9ub25fZXhpc3RlbnRfbGFiZWwpCiYjNDM7ewomIzQzOwlpbnQgZmQsIGVycjsKJiM0MzsKJiM0MzsJZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApIFRIX0xPRygmIzM0O3NvY2tldCBmYWlsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpOwomIzQzOwlBU1NFUlRfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIHB1dCBvZiBhIG5vbi1leGlzdGVudCBsYWJlbCB0byBmYWlsJiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChjYW5ub3RfY3JlYXRlX2xhYmVsX2dyZWF0ZXJfdGhhbl8yMF9iaXRzKQomIzQzO3sKJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAweDFGRkZGRiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUFTU0VSVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgbGFiZWwgJmd0OyAyMCBiaXRzIHRvIGJlIHJlamVjdGVkJiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChjYW5fY3JlYXRlX2FuZF9nZXRfYW5kX3B1dF9sYWJlbHMpCiYjNDM7ewomIzQzOwlpbnQgZmQsIGVycjsKJiM0MzsKJiM0MzsJZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApIFRIX0xPRygmIzM0O3NvY2tldCBmYWlsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGxhYmVsIChGTF9GX0NSRUFURSkmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gZ2V0IHRoZSBsYWJlbCB3aXRob3V0IEZMX0ZfQ1JFQVRFJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFIHwgSVBWNl9GTF9GX0VYQ0wpOwomIzQzOwlBU1NFUlRfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIEZMX0ZfRVhDTCB0byByZWplY3QgYW4gYWxyZWFkeS1leGlzdGluZyBsYWJlbCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBwdXQgZmlyc3QgcmVmZXJlbmNlJiMzNDspOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIHB1dCBzZWNvbmQgcmVmZXJlbmNlJiMzNDspOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIHB1dCB0aGlyZCByZWZlcmVuY2UmIzM0Oyk7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpOwomIzQzOwlBU1NFUlRfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIGZvdXJ0aCBwdXQgdG8gZmFpbCwgbm8gcmVmZXJlbmNlcyBsZWZ0JiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChleGNsdXNpdmVfbGFiZWxfc2hhcmUpCiB7Ci0JaW50IHdzdGF0dXM7CiYjNDM7CWludCBmZCwgZXJyOwomIzQzOwomIzQzOwlmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CiYjNDM7CUFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKCYjMzQ7c29ja2V0IGZhaWxlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGV4Y2x1c2l2ZSBsYWJlbCAoRkxfU19FWENMKSYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUFTU0VSVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgcmV1c2UgaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWwmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKTsKJiM0MzsJQVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coJiMzNDtleHBlY3RlZCByZXVzZSBpbiBleGNsdXNpdmUgbW9kZSB0byBmYWlsIHRvbyYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMik7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBwdXQgdGhlIGV4Y2x1c2l2ZSBsYWJlbCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUFTU0VSVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgZHVlIHRvIGxpbmdlciYjMzQ7KTsKJiM0MzsKJiM0MzsJc2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtleHBlY3RlZCByZXVzZSB0byBzdWNjZWVkIGFmdGVyIGxpbmdlciYjMzQ7KTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1QodXNlcl9wcml2YXRlX2xhYmVsX3NoYXJlKQomIzQzO3sKJiM0MzsJaW50IGZkLCBlcnIsIHdzdGF0dXM7CiAJcGlkX3QgcGlkOwogCi0JZXhwbGFpbigmIzM0O2Nhbm5vdCBnZXQgbm9uLWV4aXN0ZW50IGxhYmVsJiMzNDspOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApKTsKLQotCWV4cGxhaW4oJiMzNDtjYW5ub3QgcHV0IG5vbi1leGlzdGVudCBsYWJlbCYjMzQ7KTsKLQlleHBlY3RfZmFpbChmbG93bGFiZWxfcHV0KGZkLCAxKSk7Ci0KLQlleHBsYWluKCYjMzQ7Y2Fubm90IGNyZWF0ZSBsYWJlbCBncmVhdGVyIHRoYW4gMjAgYml0cyYjMzQ7KTsKLQlleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAweDFGRkZGRiwgSVBWNl9GTF9TX0FOWSwKLQkJCQkgIElQVjZfRkxfRl9DUkVBVEUpKTsKLQotCWV4cGxhaW4oJiMzNDtjcmVhdGUgYSBuZXcgbGFiZWwgKEZMX0ZfQ1JFQVRFKSYjMzQ7KTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0JZXhwbGFpbigmIzM0O2NhbiBnZXQgdGhlIGxhYmVsICh3aXRob3V0IEZMX0ZfQ1JFQVRFKSYjMzQ7KTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKSk7Ci0JZXhwbGFpbigmIzM0O2NhbiBnZXQgaXQgYWdhaW4gd2l0aCBjcmVhdGUgZmxhZyBzZXQsIHRvbyYjMzQ7KTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0JZXhwbGFpbigmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gd2l0aCB0aGUgZXhjbHVzaXZlIChGTF9GTF9FWENMKSBmbGFnJiMzNDspOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksCi0JCQkJCSBJUFY2X0ZMX0ZfQ1JFQVRFIHwgSVBWNl9GTF9GX0VYQ0wpKTsKLQlleHBsYWluKCYjMzQ7Y2FuIG5vdyBwdXQgZXhhY3RseSB0aHJlZSByZWZlcmVuY2VzJiMzNDspOwotCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAxKSk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTsKLQotCWV4cGxhaW4oJiMzNDtjcmVhdGUgYSBuZXcgZXhjbHVzaXZlIGxhYmVsIChGTF9TX0VYQ0wpJiMzNDspOwotCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0JZXhwbGFpbigmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlJiMzNDspOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0JZXhwbGFpbigmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gZXhjbHVzaXZlIG1vZGUgZWl0aGVyJiMzNDspOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMikpOwotCi0JaWYgKGNmZ19sb25nX3J1bm5pbmcpIHsKLQkJZXhwbGFpbigmIzM0O2Nhbm5vdCByZXVzZSB0aGUgbGFiZWwsIGR1ZSB0byBsaW5nZXImIzM0Oyk7Ci0JCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksCi0JCQkJCSAgSVBWNl9GTF9GX0NSRUFURSkpOwotCQlleHBsYWluKCYjMzQ7YWZ0ZXIgc2xlZXAsIGNhbiByZXVzZSYjMzQ7KTsKLQkJc2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSk7Ci0JCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksCi0JCQkJCSAgSVBWNl9GTF9GX0NSRUFURSkpOwotCX0KJiM0MzsJZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApIFRIX0xPRygmIzM0O3NvY2tldCBmYWlsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCBJUFY2X0ZMX0ZfQ1JFQVRFKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyB1c2VyLXByaXZhdGUgbGFiZWwgKEZMX1NfVVNFUikmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19BTlksIDApOwomIzQzOwlBU1NFUlRfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIGdldCBpbiBub24tZXhjbHVzaXZlIG1vZGUgdG8gZmFpbCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0VYQ0wsIDApOwomIzQzOwlBU1NFUlRfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIGdldCBpbiBleGNsdXNpdmUgbW9kZSB0byBmYWlsJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBnZXQgaXQgYWdhaW4gaW4gdXNlciBtb2RlJiMzNDspOwogCi0JZXhwbGFpbigmIzM0O2NyZWF0ZSBhIG5ldyB1c2VyLXByaXZhdGUgbGFiZWwgKEZMX1NfVVNFUikmIzM0Oyk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIElQVjZfRkxfRl9DUkVBVEUpKTsKLQlleHBsYWluKCYjMzQ7Y2Fubm90IGdldCBpdCBhZ2FpbiBpbiBub24tZXhjbHVzaXZlIG1vZGUmIzM0Oyk7Ci0JZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0FOWSwgMCkpOwotCWV4cGxhaW4oJiMzNDtjYW5ub3QgZ2V0IGl0IGFnYWluIGluIGV4Y2x1c2l2ZSBtb2RlJiMzNDspOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19FWENMLCAwKSk7Ci0JZXhwbGFpbigmIzM0O2NhbiBnZXQgaXQgYWdhaW4gaW4gdXNlciBtb2RlJiMzNDspOwotCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7Ci0JZXhwbGFpbigmIzM0O2NoaWxkIHByb2Nlc3MgY2FuIGdldCBpdCB0b28sIGJ1dCBub3QgYWZ0ZXIgc2V0dWlkKG5vYm9keSkmIzM0Oyk7CiAJcGlkID0gZm9yaygpOwotCWlmIChwaWQgPT0gLTEpCi0JCWVycm9yKDEsIGVycm5vLCAmIzM0O2ZvcmsmIzM0Oyk7CiYjNDM7CUFTU0VSVF9ORSgtMSwgcGlkKSBUSF9MT0coJiMzNDtmb3JrIGZhaWxlZCYjMzQ7KTsKIAlpZiAoIXBpZCkgewotCQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpOwotCQlpZiAoc2V0dWlkKFVTSFJUX01BWCkpCiYjNDM7CQlpZiAoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKQomIzQzOwkJCWV4aXQoMSk7CiYjNDM7CQlpZiAoc2V0dWlkKFVTSFJUX01BWCkpIHsKIAkJCWZwcmludGYoc3RkZXJyLCAmIzM0O1tJTkZPXSBza2lwIHNldHVpZCBjaGlsZCB0ZXN0XG4mIzM0Oyk7Ci0JCWVsc2UKLQkJCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7CiYjNDM7CQkJZXhpdCgwKTsKJiM0MzsJCX0KJiM0MzsJCWlmICghZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKQomIzQzOwkJCWV4aXQoMSk7CiAJCWV4aXQoMCk7CiAJfQotCWlmICh3YWl0KCZhbXA7d3N0YXR1cykgPT0gLTEpCi0JCWVycm9yKDEsIGVycm5vLCAmIzM0O3dhaXQmIzM0Oyk7Ci0JaWYgKCFXSUZFWElURUQod3N0YXR1cykgfHwgV0VYSVRTVEFUVVMod3N0YXR1cykgIT0gMCkKLQkJZXJyb3IoMSwgZXJybm8sICYjMzQ7d2FpdDogdW5leHBlY3RlZCBjaGlsZCByZXN1bHQmIzM0Oyk7Ci0KLQlleHBsYWluKCYjMzQ7Y3JlYXRlIGEgbmV3IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbCAoRkxfU19QUk9DRVNTKSYjMzQ7KTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgSVBWNl9GTF9GX0NSRUFURSkpOwotCWV4cGxhaW4oJiMzNDtjYW4gZ2V0IGl0IGFnYWluJiMzNDspOwotCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7Ci0JZXhwbGFpbigmIzM0O2NoaWxkIHByb2Nlc3MgY2Fubm90IGNhbiBnZXQgaXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShwaWQsIHdhaXQoJmFtcDt3c3RhdHVzKSkgVEhfTE9HKCYjMzQ7d2FpdCBmYWlsZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9UUlVFKFdJRkVYSVRFRCh3c3RhdHVzKSkgVEhfTE9HKCYjMzQ7Y2hpbGQgZGlkIG5vdCBleGl0IG5vcm1hbGx5JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoMCwgV0VYSVRTVEFUVVMod3N0YXR1cykpIFRIX0xPRygmIzM0O2NoaWxkIHJlcG9ydGVkIHVuZXhwZWN0ZWQgcmVzdWx0JiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVChwcm9jZXNzX3ByaXZhdGVfbGFiZWxfc2hhcmUpCiYjNDM7ewomIzQzOwlpbnQgZmQsIGVyciwgd3N0YXR1czsKJiM0MzsJcGlkX3QgcGlkOwomIzQzOwomIzQzOwlmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CiYjNDM7CUFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKCYjMzQ7c29ja2V0IGZhaWxlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbCAoRkxfU19QUk9DRVNTKSYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gZ2V0IGl0IGFnYWluJiMzNDspOwomIzQzOwogCXBpZCA9IGZvcmsoKTsKLQlpZiAocGlkID09IC0xKQotCQllcnJvcigxLCBlcnJubywgJiMzNDtmb3JrJiMzNDspOwomIzQzOwlBU1NFUlRfTkUoLTEsIHBpZCkgVEhfTE9HKCYjMzQ7Zm9yayBmYWlsZWQmIzM0Oyk7CiAJaWYgKCFwaWQpIHsKLQkJZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApKTsKJiM0MzsJCWlmICghZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApKQomIzQzOwkJCWV4aXQoMSk7CiAJCWV4aXQoMCk7CiAJfQotCWlmICh3YWl0KCZhbXA7d3N0YXR1cykgPT0gLTEpCi0JCWVycm9yKDEsIGVycm5vLCAmIzM0O3dhaXQmIzM0Oyk7Ci0JaWYgKCFXSUZFWElURUQod3N0YXR1cykgfHwgV0VYSVRTVEFUVVMod3N0YXR1cykgIT0gMCkKLQkJZXJyb3IoMSwgZXJybm8sICYjMzQ7d2FpdDogdW5leHBlY3RlZCBjaGlsZCByZXN1bHQmIzM0Oyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotCWludCBjOwotCi0Jd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICYjMzQ7bHYmIzM0OykpICE9IC0xKSB7Ci0JCXN3aXRjaCAoYykgewotCQljYXNlICYjMzk7bCYjMzk7OgotCQkJY2ZnX2xvbmdfcnVubmluZyA9IHRydWU7Ci0JCQlicmVhazsKLQkJY2FzZSAmIzM5O3YmIzM5OzoKLQkJCWNmZ192ZXJib3NlID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZXJyb3IoMSwgMCwgJiMzNDslczogcGFyc2UgZXJyb3ImIzM0OywgYXJndlswXSk7Ci0JCX0KLQl9CiYjNDM7CUFTU0VSVF9FUShwaWQsIHdhaXQoJmFtcDt3c3RhdHVzKSkgVEhfTE9HKCYjMzQ7d2FpdCBmYWlsZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9UUlVFKFdJRkVYSVRFRCh3c3RhdHVzKSkgVEhfTE9HKCYjMzQ7Y2hpbGQgZGlkIG5vdCBleGl0IG5vcm1hbGx5JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoMCwgV0VYSVRTVEFUVVMod3N0YXR1cykpIFRIX0xPRygmIzM0O2NoaWxkIHJlcG9ydGVkIHVuZXhwZWN0ZWQgcmVzdWx0JiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQomIzQzO1RFU1QocmVuZXdfbGFiZWxfbGluZ2VyKQogewotCWludCBmZDsKLQotCXBhcnNlX29wdHMoYXJnYywgYXJndik7CiYjNDM7CS8qIEFmdGVyIGEgbGFiZWwgd2l0aCBFWENMIHNoYXJlIGlzIHB1dCBhbmQgbGluZ2VyZWQsIGl0IG11c3QgYmUKJiM0MzsJICogcG9zc2libGUgdG8gY3JlYXRlIGEgbmV3IG9uZS4gQ2hlY2sgaWYgUkVORVcgYWN0aW9uIGV4dGVuZHMKJiM0MzsJICogdGhlIGxpbmdlciBwZXJpb2Qgb2YgcHV0IGxhYmVsLCBibG9ja2luZyBjcmVhdGlvbiBhZnRlciBwcmV2aW91cwomIzQzOwkgKiBsaW5nZXIgdGltZS4KJiM0MzsJICovCiYjNDM7CWludCBmZCwgZXJyOwogCiAJZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApOwotCWlmIChmZCA9PSAtMSkKLQkJZXJyb3IoMSwgZXJybm8sICYjMzQ7c29ja2V0JiMzNDspOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApIFRIX0xPRygmIzM0O3NvY2tldCBmYWlsZWQmIzM0Oyk7CiAKLQlydW5fdGVzdHMoZmQpOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA1LCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgbGFiZWwgd2l0aCBGTF9NSU5fTElOR0VSIGxpbmdlciB0aW1lJiMzNDspOwogCi0JaWYgKGNsb3NlKGZkKSkKLQkJZXJyb3IoMSwgZXJybm8sICYjMzQ7Y2xvc2UmIzM0Oyk7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNSwgMiAqIChGTF9NSU5fTElOR0VSICogMiAmIzQzOyAxKSk7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byByZW5ldyB0aGUgbGFiZWwgdG8gaW5jcmVhc2UgaXRzIGxpbmdlciB0aW1lJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcHV0KGZkLCA1KTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIHB1dCB0aGUgbGFiZWwmIzM0Oyk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJc2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDUsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlBU1NFUlRfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIHJldXNlIHRvIGZhaWwsIG5ldyBsaW5nZXIgdGltZSBub3Qgb3ZlciB5ZXQmIzM0Oyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSgwLCBjbG9zZShmZCkpOwogfQomIzQzOwomIzQzO1RFU1QocmVtb3RlX2ZsYWcpCiYjNDM7ewomIzQzOwkvKiBUaGUgUkVNT1RFIGZsYWcsIHVzZWQgZm9yIGdldHNvY2tvcHQsIGlzIGV4cGVjdGVkIHRvIHJldHJpZXZlIHRoZQomIzQzOwkgKiBsYWJlbCBmcm9tIHRoZSBsYXRlc3QgcmVjZWl2ZWQgaGVhZGVyLgomIzQzOwkgKi8KJiM0MzsJc3RydWN0IGluNl9mbG93bGFiZWxfcmVxIGZyZXEgPSB7CiYjNDM7CQkuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsCiYjNDM7CQkuZmxyX2ZsYWdzID0gSVBWNl9GTF9GX1JFTU9URSwKJiM0MzsJfTsKJiM0MzsJc29ja2xlbl90IGZyZXFfbGVuID0gc2l6ZW9mKGZyZXEpOwomIzQzOwlpbnQgbGlzdGVuZXIsIGNmZCwgYWZkLCBlcnI7CiYjNDM7CiYjNDM7CWxpc3RlbmVyID0gdGNwX2xpc3RlbigpOwomIzQzOwl0Y3BfY29ubmVjdChsaXN0ZW5lciwgNiwgJmFtcDtjZmQsICZhbXA7YWZkKTsKJiM0MzsKJiM0MzsJZXJyID0gZ2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsICZhbXA7ZnJlcSwgJmFtcDtmcmVxX2xlbik7CiYjNDM7CUFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2dldHNvY2tvcHQgd2l0aCBJUFY2X0ZMX0ZfUkVNT1RFIGZhaWxlZCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKDYsIG50b2hsKGZyZXEuZmxyX2xhYmVsKSkgVEhfTE9HKCYjMzQ7dW5leHBlY3RlZCByZW1vdGUgZmxvdyBsYWJlbCYjMzQ7KTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGNsb3NlKGFmZCkpOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoY2ZkKSk7CiYjNDM7CUFTU0VSVF9FUSgwLCBjbG9zZShsaXN0ZW5lcikpOwomIzQzO30KJiM0MzsKJiM0MztURVNUKHJlZmxlY3RfZmxhZykKJiM0Mzt7CiYjNDM7CS8qIFRoZSBSRUZMRUNUIGZsYWcgYWN0cyBhcyBhIHRyaWdnZXIgdG8gdGhlIFJFUEZMT1cgYml0LiBXaGVuIFJFUEZMT1cKJiM0MzsJICogaXMgdHJpZ2dlcmVkIGZvciBhIHNvY2tldCwgaXQgYWRvcHRzIHRoZSBsYWJlbCByZWNlaXZlZCBmcm9tIHRoZQomIzQzOwkgKiBjb25uZWN0ZWQgc29ja2V0LgomIzQzOwkgKi8KJiM0MzsJc3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlZmxlY3Rfb24gPSB7CiYjNDM7CQkuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsCiYjNDM7CQkuZmxyX2ZsYWdzID0gSVBWNl9GTF9GX1JFRkxFQ1QsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZWZsZWN0X3F1ZXJ5ID0gewomIzQzOwkJLmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfR0VULAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9vZmYgPSB7CiYjNDM7CQkuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9QVVQsCiYjNDM7CQkuZmxyX2ZsYWdzID0gSVBWNl9GTF9GX1JFRkxFQ1QsCiYjNDM7CX07CiYjNDM7CXNvY2tsZW5fdCByZWZsZWN0X3F1ZXJ5X2xlbiA9IHNpemVvZihyZWZsZWN0X3F1ZXJ5KTsKJiM0MzsJaW50IGxpc3RlbmVyLCBjZmQsIGFmZCwgZXJyOwomIzQzOwomIzQzOwlzZXRfZmxvd2xhYmVsX2NvbnNpc3RlbmN5KGZhbHNlKTsKJiM0MzsKJiM0MzsJbGlzdGVuZXIgPSB0Y3BfbGlzdGVuKCk7CiYjNDM7CWVyciA9IHNldHNvY2tvcHQobGlzdGVuZXIsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsICZhbXA7cmVmbGVjdF9vbiwgc2l6ZW9mKHJlZmxlY3Rfb24pKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBSRUZMRUNUIG9uIHRoZSBsaXN0ZW5lciYjMzQ7KTsKJiM0MzsKJiM0MzsJdGNwX2Nvbm5lY3QobGlzdGVuZXIsIDcsICZhbXA7Y2ZkLCAmYW1wO2FmZCk7CiYjNDM7CiYjNDM7CWVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCAmYW1wO3JlZmxlY3RfcXVlcnksICZhbXA7cmVmbGVjdF9xdWVyeV9sZW4pOwomIzQzOwlBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gcXVlcnkgdGhlIGFjY2VwdGVkIHNvY2tldCYjMzk7cyBvdXRnb2luZyBsYWJlbCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKDcsIG50b2hsKHJlZmxlY3RfcXVlcnkuZmxyX2xhYmVsKSkgVEhfTE9HKCYjMzQ7YWNjZXB0ZWQgc29ja2V0IGRpZCBub3QgcmVmbGVjdCBjbGllbnQmIzM5O3MgbGFiZWwmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IHNldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCAmYW1wO3JlZmxlY3Rfb2ZmLCBzaXplb2YocmVmbGVjdF9vZmYpKTsKJiM0MzsJQVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGRpc2FibGUgUkVGTEVDVCBvbiB0aGUgYWNjZXB0ZWQgc29ja2V0JiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBzZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgJmFtcDtyZWZsZWN0X29mZiwgc2l6ZW9mKHJlZmxlY3Rfb2ZmKSk7CiYjNDM7CUFTU0VSVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgZGlzYWJsaW5nIFJFRkxFQ1QgdHdpY2UgdG8gZmFpbCYjMzQ7KTsKJiM0MzsKJiM0MzsJc2V0X2Zsb3dsYWJlbF9jb25zaXN0ZW5jeSh0cnVlKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKDAsIGNsb3NlKGFmZCkpOwomIzQzOwlBU1NFUlRfRVEoMCwgY2xvc2UoY2ZkKSk7CiYjNDM7CUFTU0VSVF9FUSgwLCBjbG9zZShsaXN0ZW5lcikpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0hBUk5FU1NfTUFJTgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjAzCgkJCQkJCQlvdXRwdXQ6IDczCgkJCQkJCQl0aG91Z2h0czogNTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZz1mYWxzZTogSVB2NiBGbG93IExhYmVsIFNlbGZ0ZXN0IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIFRoaXMgcGF0Y2ggdG91Y2hlcyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jYC4gUmlnaHQsIGl0JiMzOTtzIGNvbnZlcnRpbmcgYW4gZXhpc3RpbmcgdGVzdCBhbmQgYWRkaW5nIG5ldyBvbmVzLCBhbGwgcmVsYXRlZCB0byBJUHY2IGZsb3cgbGFiZWxzLCBidXQgY3J1Y2lhbGx5LCBpdCYjMzk7cyAqb25seSogaW4gdGhlIHNlbGZ0ZXN0cy4gTm8ga2VybmVsIGNvZGUgaXMgYmVpbmcgbW9kaWZpZWQgaGVyZS4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkaWZm4oCmIFllcCwganVzdCB0aGF0IG9uZSBmaWxlLgoKU2luY2UgdGhpcyBpcyBwdXJlbHkgYSBzZWxmdGVzdCB1cGRhdGUsIHRoZXJlJiMzOTtzIHplcm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIGtlcm5lbCBpdHNlbGYgdGhhdCB3YXJyYW50cyBmdXp6aW5nLiBJdCYjMzk7cyB1c2VyLXNwYWNlIHRlc3RpbmcsIG5vdCBrZXJuZWwgYmVoYXZpb3IuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhlIHJ1bGVzIGNvcnJlY3RseS4gTGV0IG1lIHJlcmVhZCB0aGUgY3JpdGVyaWEuLi4KCkhtbSwgc2VsZnRlc3RzIGFyZW4mIzM5O3QgZXhwbGljaXRseSAqbGlzdGVkKiBpbiB0aGUgJiMzNDtXb3J0aEZ1enppbmc9ZmFsc2UmIzM0OyBsaXN0LCBidXQgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhleSBmYWxsIHVuZGVyIHRoZSBzcGlyaXQgb2YgdGhlIHJlc3RyaWN0aW9ucy4gVGhlc2UgYXJlIGlzb2xhdGVkIHVzZXItc3BhY2UgdGVzdHM7IGZ1enppbmcgdGhlIGtlcm5lbCBiYXNlZCBvbiBjaGFuZ2VzICp3aXRoaW4qIHRoZW0gbWFrZXMgbm8gc2Vuc2Ugc2luY2UgdGhlIGtlcm5lbCBpdHNlbGYgaGFzbiYjMzk7dCBiZWVuIG1vZGlmaWVkLiBBaCwgdGhlIGluc3RydWN0aW9ucyBzYXkgbXkgam9iIGlzIHRvIGRldGVybWluZSBpZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbC4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHBhdGNoIHNvbGVseSBjb25jZXJucyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBpdCBkb2VzICpub3QqIHdhcnJhbnQgZnV6emluZy4gSSYjMzk7bGwgcmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSB1c2VyLXNwYWNlIHNlbGZ0ZXN0ICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMpIGFuZCBtYWtlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSB1c2VyLXNwYWNlIHNlbGZ0ZXN0ICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMpIGFuZCBtYWtlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNjoxNTo1OS45MjI3ODUxNDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjQ0Njg2ODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgdXNlci1zcGFjZSBzZWxmdGVzdCAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jKSBhbmQgbWFrZXMgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNjoxNTo1OS45MjI3OTIxMjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTE3OTkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRlYTU0NmI5Mzc5NDExMTVhMDNhZmNjZDc2NjEyMTlhMWZiNjE0ZWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjcgMTY6MTU6NTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jXFxuaW5kZXggYWY5NWI0OGFjZWE5MGIuLjlhYTVjODE0NmYxNzE5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuY1xcbkBAIC02LDYgKzYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYXJwYS9pbmV0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NlcnJvci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW1pdHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luNi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbkBAIC0xOSwzMSArMjAsMjUgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy90eXBlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3dhaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4gXFxuIC8qIHVhcGkvZ2xpYmMgd2VpcmRuZXNzIG1heSBsZWF2ZSB0aGlzIHVuZGVmaW5lZCAqL1xcbiAjaWZuZGVmIElQVjZfRkxPV0xBQkVMX01HUlxcbiAjZGVmaW5lIElQVjZfRkxPV0xBQkVMX01HUlxcdDMyXFxuICNlbmRpZlxcbisjaWZuZGVmIElQVjZfRkxPV0lORk9fU0VORFxcbisjZGVmaW5lIElQVjZfRkxPV0lORk9fU0VORFxcdDMzXFxuKyNlbmRpZlxcbiBcXG4gLyogZnJvbSBuZXQvaXB2Ni9pcDZfZmxvd2xhYmVsLmMgKi9cXG4gI2RlZmluZSBGTF9NSU5fTElOR0VSXFx0XFx0NlxcbiBcXG4tI2RlZmluZSBleHBsYWluKHgpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRkbyB7IGlmIChjZmdfdmVyYm9zZSkgZnByaW50ZihzdGRlcnIsIFxcXCIgICAgICAgXFxcIiB4IFxcXCJcXFxcblxcXCIpOyB9IHdoaWxlICgwKVxcbi1cXG4tI2RlZmluZSBfX2V4cGVjdCh4KVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0aWYgKCEoeCkpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIltPS10gICBcXFwiICN4IFxcXCJcXFxcblxcXCIpO1xcdFxcdFxcXFxcXG4tXFx0XFx0ZWxzZVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0XFx0ZXJyb3IoMSwgMCwgXFxcIltFUlJdICBcXFwiICN4IFxcXCIgKGxpbmUgJWQpXFxcIiwgX19MSU5FX18pOyBcXFxcXFxuLVxcdH0gd2hpbGUgKDApXFxuLVxcbi0jZGVmaW5lIGV4cGVjdF9wYXNzKHgpXFx0X19leHBlY3QoeClcXG4tI2RlZmluZSBleHBlY3RfZmFpbCh4KVxcdF9fZXhwZWN0KCEoeCkpXFxuLVxcbi1zdGF0aWMgYm9vbCBjZmdfbG9uZ19ydW5uaW5nO1xcbi1zdGF0aWMgYm9vbCBjZmdfdmVyYm9zZTtcXG4rI2RlZmluZSBJTklUX1NJTjZfTE9PUEJBQ0sobmFtZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbjYgbmFtZSA9IHtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdC5zaW42X2ZhbWlseVxcdD0gQUZfSU5FVDYsXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHQuc2luNl9hZGRyXFx0PSBJTjZBRERSX0xPT1BCQUNLX0lOSVQsXFx0XFx0XFxcXFxcbitcXHRcXHQuc2luNl9wb3J0XFx0PSBodG9ucyg4ODg4KSxcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdH1cXG4gXFxuIHN0YXRpYyBpbnQgZmxvd2xhYmVsX2dldChpbnQgZmQsIHVpbnQzMl90IGxhYmVsLCB1aW50OF90IHNoYXJlLCB1aW50MTZfdCBmbGFncylcXG4ge1xcbkBAIC03MSwxMjkgKzY2LDM0NCBAQCBzdGF0aWMgaW50IGZsb3dsYWJlbF9wdXQoaW50IGZkLCB1aW50MzJfdCBsYWJlbClcXG4gXFx0cmV0dXJuIHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFxcdTAwMjZyZXEsIHNpemVvZihyZXEpKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcnVuX3Rlc3RzKGludCBmZClcXG4rc3RhdGljIGludCBmbG93bGFiZWxfcmVuZXcoaW50IGZkLCB1aW50MzJfdCBsYWJlbCwgdWludDE2X3QgbGluZ2VyKVxcbit7XFxuK1xcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZXEgPSB7XFxuK1xcdFxcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX1JFTkVXLFxcbitcXHRcXHQuZmxyX2xhYmVsID0gaHRvbmwobGFiZWwpLFxcbitcXHRcXHQuZmxyX2xpbmdlciA9IGxpbmdlcixcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBzZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcXHUwMDI2cmVxLCBzaXplb2YocmVxKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGNwX2xpc3Rlbih2b2lkKVxcbit7XFxuK1xcdElOSVRfU0lONl9MT09QQkFDSyhhZGRyKTtcXG4rXFx0Y29uc3QgaW50IG9uZSA9IDE7XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX1NUUkVBTSwgMCk7XFxuK1xcdGlmIChmZCA9PSAtMSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJzb2NrZXQgbGlzdGVuZXJcXFwiKTtcXG4rXFx0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgXFx1MDAyNm9uZSwgc2l6ZW9mKG9uZSkpKVxcbitcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcInNldHNvY2tvcHQgU09fUkVVU0VBRERSXFxcIik7XFxuK1xcdGlmIChiaW5kKGZkLCAodm9pZCAqKVxcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpKVxcbitcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcImJpbmRcXFwiKTtcXG4rXFx0aWYgKGxpc3RlbihmZCwgMSkpXFxuK1xcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwibGlzdGVuXFxcIik7XFxuK1xcbitcXHRyZXR1cm4gZmQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRjcF9jb25uZWN0KGludCBsaXN0ZW5lciwgdWludDMyX3QgZmxvd2xhYmVsLCBpbnQgKmNsaWVudCwgaW50ICphY2NlcHRlZClcXG4re1xcbitcXHRJTklUX1NJTjZfTE9PUEJBQ0soYWRkcik7XFxuK1xcdGNvbnN0IGludCBvbmUgPSAxO1xcbitcXHRpbnQgY2ZkLCBhZmQ7XFxuK1xcbitcXHRjZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfU1RSRUFNLCAwKTtcXG4rXFx0aWYgKGNmZCA9PSAtMSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJzb2NrZXQgY2xpZW50XFxcIik7XFxuK1xcbitcXHRpZiAoZmxvd2xhYmVsX2dldChjZmQsIGZsb3dsYWJlbCwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpKVxcbitcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcImZsb3dsYWJlbF9nZXRcXFwiKTtcXG4rXFx0aWYgKHNldHNvY2tvcHQoY2ZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XSU5GT19TRU5ELCBcXHUwMDI2b25lLCBzaXplb2Yob25lKSkpXFxuK1xcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwic2V0c29ja29wdCBmbG93aW5mb19zZW5kXFxcIik7XFxuK1xcdGFkZHIuc2luNl9mbG93aW5mbyA9IGh0b25sKGZsb3dsYWJlbCk7XFxuK1xcbitcXHRpZiAoY29ubmVjdChjZmQsICh2b2lkICopXFx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSkpXFxuK1xcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwiY29ubmVjdFxcXCIpO1xcbitcXG4rXFx0YWZkID0gYWNjZXB0KGxpc3RlbmVyLCBOVUxMLCBOVUxMKTtcXG4rXFx0aWYgKGFmZCA9PSAtMSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJhY2NlcHRcXFwiKTtcXG4rXFxuK1xcdCpjbGllbnQgPSBjZmQ7XFxuK1xcdCphY2NlcHRlZCA9IGFmZDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc2V0X2Zsb3dsYWJlbF9jb25zaXN0ZW5jeShib29sIGVuYWJsZSlcXG4re1xcbitcXHQvKiBmbG93bGFiZWxfY29uc2lzdGVuY3kgbXVzdCBiZSBkaXNhYmxlIHRvIHVzZSB0aGUgSVBWNl9GTF9GX1JFRkxFQ1RcXG4rXFx0ICogZmxhZy4gVGhpcyBoZWxwZXIgZnVuY3Rpb24gaXMgcmVxdWlyZWQgZm9yIHNldHRpbmcgdXAgYW5kIHRlYXJpbmdcXG4rXFx0ICogZG93biB0ZXN0IGNhc2VzIGZvciB0aGlzIGZsYWcuXFxuK1xcdCAqL1xcbitcXHRpbnQgZmQ7XFxuK1xcbitcXHRmZCA9IG9wZW4oXFxcIi9wcm9jL3N5cy9uZXQvaXB2Ni9mbG93bGFiZWxfY29uc2lzdGVuY3lcXFwiLCBPX1dST05MWSk7XFxuK1xcdGlmIChmZCA9PSAtMSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJvcGVuIGZsb3dsYWJlbF9jb25zaXN0ZW5jeVxcXCIpO1xcbitcXHRpZiAod3JpdGUoZmQsIGVuYWJsZSA/IFxcXCIxXFxcIiA6IFxcXCIwXFxcIiwgMSkgIT0gMSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJ3cml0ZSBmbG93bGFiZWxfY29uc2lzdGVuY3lcXFwiKTtcXG4rXFx0aWYgKGNsb3NlKGZkKSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJjbG9zZSBmbG93bGFiZWxfY29uc2lzdGVuY3lcXFwiKTtcXG4rfVxcbitcXG4rVEVTVChjYW5ub3RfZ2V0X25vbl9leGlzdGVudF9sYWJlbClcXG4re1xcbitcXHRpbnQgZmQsIGVycjtcXG4rXFxuK1xcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcXG4rXFx0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXFxcInNvY2tldCBmYWlsZWRcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApO1xcbitcXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcXFwiZXhwZWN0ZWQgZ2V0IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWxcXFwiKTtcXG4rXFxuK1xcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xcbit9XFxuK1xcbitURVNUKGNhbm5vdF9wdXRfbm9uX2V4aXN0ZW50X2xhYmVsKVxcbit7XFxuK1xcdGludCBmZCwgZXJyO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XFxuK1xcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFxcXCJleHBlY3RlZCBwdXQgb2YgYSBub24tZXhpc3RlbnQgbGFiZWwgdG8gZmFpbFxcXCIpO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XFxuK31cXG4rXFxuK1RFU1QoY2Fubm90X2NyZWF0ZV9sYWJlbF9ncmVhdGVyX3RoYW5fMjBfYml0cylcXG4re1xcbitcXHRpbnQgZmQsIGVycjtcXG4rXFxuK1xcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcXG4rXFx0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXFxcInNvY2tldCBmYWlsZWRcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDB4MUZGRkZGLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIGxhYmVsIFxcdTAwM2UgMjAgYml0cyB0byBiZSByZWplY3RlZFxcXCIpO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XFxuK31cXG4rXFxuK1RFU1QoY2FuX2NyZWF0ZV9hbmRfZ2V0X2FuZF9wdXRfbGFiZWxzKVxcbit7XFxuK1xcdGludCBmZCwgZXJyO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIGNyZWF0ZSBsYWJlbCAoRkxfRl9DUkVBVEUpXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gZ2V0IHRoZSBsYWJlbCB3aXRob3V0IEZMX0ZfQ1JFQVRFXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gZ2V0IGl0IGFnYWluIHdpdGggY3JlYXRlIGZsYWcgc2V0LCB0b29cXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUgfCBJUFY2X0ZMX0ZfRVhDTCk7XFxuK1xcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFxcXCJleHBlY3RlZCBGTF9GX0VYQ0wgdG8gcmVqZWN0IGFuIGFscmVhZHktZXhpc3RpbmcgbGFiZWxcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBwdXQgZmlyc3QgcmVmZXJlbmNlXFxcIik7XFxuK1xcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBwdXQgc2Vjb25kIHJlZmVyZW5jZVxcXCIpO1xcbitcXHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gcHV0IHRoaXJkIHJlZmVyZW5jZVxcXCIpO1xcbitcXHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcXG4rXFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIGZvdXJ0aCBwdXQgdG8gZmFpbCwgbm8gcmVmZXJlbmNlcyBsZWZ0XFxcIik7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcXG4rfVxcbitcXG4rVEVTVChleGNsdXNpdmVfbGFiZWxfc2hhcmUpXFxuIHtcXG4tXFx0aW50IHdzdGF0dXM7XFxuK1xcdGludCBmZCwgZXJyO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZXhjbHVzaXZlIGxhYmVsIChGTF9TX0VYQ0wpXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIHJldXNlIGluIG5vbi1leGNsdXNpdmUgbW9kZSB0byBmYWlsXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7XFxuK1xcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFxcXCJleHBlY3RlZCByZXVzZSBpbiBleGNsdXNpdmUgbW9kZSB0byBmYWlsIHRvb1xcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMik7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIHB1dCB0aGUgZXhjbHVzaXZlIGxhYmVsXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIHJldXNlIHRvIGZhaWwsIGR1ZSB0byBsaW5nZXJcXFwiKTtcXG4rXFxuK1xcdHNsZWVwKEZMX01JTl9MSU5HRVIgKiAyICsgMSk7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJleHBlY3RlZCByZXVzZSB0byBzdWNjZWVkIGFmdGVyIGxpbmdlclxcXCIpO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XFxuK31cXG4rXFxuK1RFU1QodXNlcl9wcml2YXRlX2xhYmVsX3NoYXJlKVxcbit7XFxuK1xcdGludCBmZCwgZXJyLCB3c3RhdHVzO1xcbiBcXHRwaWRfdCBwaWQ7XFxuIFxcbi1cXHRleHBsYWluKFxcXCJjYW5ub3QgZ2V0IG5vbi1leGlzdGVudCBsYWJlbFxcXCIpO1xcbi1cXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKSk7XFxuLVxcbi1cXHRleHBsYWluKFxcXCJjYW5ub3QgcHV0IG5vbi1leGlzdGVudCBsYWJlbFxcXCIpO1xcbi1cXHRleHBlY3RfZmFpbChmbG93bGFiZWxfcHV0KGZkLCAxKSk7XFxuLVxcbi1cXHRleHBsYWluKFxcXCJjYW5ub3QgY3JlYXRlIGxhYmVsIGdyZWF0ZXIgdGhhbiAyMCBiaXRzXFxcIik7XFxuLVxcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDB4MUZGRkZGLCBJUFY2X0ZMX1NfQU5ZLFxcbi1cXHRcXHRcXHRcXHQgIElQVjZfRkxfRl9DUkVBVEUpKTtcXG4tXFxuLVxcdGV4cGxhaW4oXFxcImNyZWF0ZSBhIG5ldyBsYWJlbCAoRkxfRl9DUkVBVEUpXFxcIik7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpKTtcXG4tXFx0ZXhwbGFpbihcXFwiY2FuIGdldCB0aGUgbGFiZWwgKHdpdGhvdXQgRkxfRl9DUkVBVEUpXFxcIik7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApKTtcXG4tXFx0ZXhwbGFpbihcXFwiY2FuIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vXFxcIik7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpKTtcXG4tXFx0ZXhwbGFpbihcXFwiY2Fubm90IGdldCBpdCBhZ2FpbiB3aXRoIHRoZSBleGNsdXNpdmUgKEZMX0ZMX0VYQ0wpIGZsYWdcXFwiKTtcXG4tXFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSxcXG4tXFx0XFx0XFx0XFx0XFx0IElQVjZfRkxfRl9DUkVBVEUgfCBJUFY2X0ZMX0ZfRVhDTCkpO1xcbi1cXHRleHBsYWluKFxcXCJjYW4gbm93IHB1dCBleGFjdGx5IHRocmVlIHJlZmVyZW5jZXNcXFwiKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xcbi1cXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAxKSk7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcXG4tXFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xcbi1cXG4tXFx0ZXhwbGFpbihcXFwiY3JlYXRlIGEgbmV3IGV4Y2x1c2l2ZSBsYWJlbCAoRkxfU19FWENMKVxcXCIpO1xcbi1cXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpO1xcbi1cXHRleHBsYWluKFxcXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIG5vbi1leGNsdXNpdmUgbW9kZVxcXCIpO1xcbi1cXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCAgSVBWNl9GTF9GX0NSRUFURSkpO1xcbi1cXHRleHBsYWluKFxcXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIGV4Y2x1c2l2ZSBtb2RlIGVpdGhlclxcXCIpO1xcbi1cXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpO1xcbi1cXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAyKSk7XFxuLVxcbi1cXHRpZiAoY2ZnX2xvbmdfcnVubmluZykge1xcbi1cXHRcXHRleHBsYWluKFxcXCJjYW5ub3QgcmV1c2UgdGhlIGxhYmVsLCBkdWUgdG8gbGluZ2VyXFxcIik7XFxuLVxcdFxcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksXFxuLVxcdFxcdFxcdFxcdFxcdCAgSVBWNl9GTF9GX0NSRUFURSkpO1xcbi1cXHRcXHRleHBsYWluKFxcXCJhZnRlciBzbGVlcCwgY2FuIHJldXNlXFxcIik7XFxuLVxcdFxcdHNsZWVwKEZMX01JTl9MSU5HRVIgKiAyICsgMSk7XFxuLVxcdFxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksXFxuLVxcdFxcdFxcdFxcdFxcdCAgSVBWNl9GTF9GX0NSRUFURSkpO1xcbi1cXHR9XFxuK1xcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcXG4rXFx0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXFxcInNvY2tldCBmYWlsZWRcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IHVzZXItcHJpdmF0ZSBsYWJlbCAoRkxfU19VU0VSKVxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0FOWSwgMCk7XFxuK1xcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFxcXCJleHBlY3RlZCBnZXQgaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWxcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19FWENMLCAwKTtcXG4rXFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIGdldCBpbiBleGNsdXNpdmUgbW9kZSB0byBmYWlsXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCk7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiBpbiB1c2VyIG1vZGVcXFwiKTtcXG4gXFxuLVxcdGV4cGxhaW4oXFxcImNyZWF0ZSBhIG5ldyB1c2VyLXByaXZhdGUgbGFiZWwgKEZMX1NfVVNFUilcXFwiKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIElQVjZfRkxfRl9DUkVBVEUpKTtcXG4tXFx0ZXhwbGFpbihcXFwiY2Fubm90IGdldCBpdCBhZ2FpbiBpbiBub24tZXhjbHVzaXZlIG1vZGVcXFwiKTtcXG4tXFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0FOWSwgMCkpO1xcbi1cXHRleHBsYWluKFxcXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIGV4Y2x1c2l2ZSBtb2RlXFxcIik7XFxuLVxcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19FWENMLCAwKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNhbiBnZXQgaXQgYWdhaW4gaW4gdXNlciBtb2RlXFxcIik7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNoaWxkIHByb2Nlc3MgY2FuIGdldCBpdCB0b28sIGJ1dCBub3QgYWZ0ZXIgc2V0dWlkKG5vYm9keSlcXFwiKTtcXG4gXFx0cGlkID0gZm9yaygpO1xcbi1cXHRpZiAocGlkID09IC0xKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcImZvcmtcXFwiKTtcXG4rXFx0QVNTRVJUX05FKC0xLCBwaWQpIFRIX0xPRyhcXFwiZm9yayBmYWlsZWRcXFwiKTtcXG4gXFx0aWYgKCFwaWQpIHtcXG4tXFx0XFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKTtcXG4tXFx0XFx0aWYgKHNldHVpZChVU0hSVF9NQVgpKVxcbitcXHRcXHRpZiAoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKVxcbitcXHRcXHRcXHRleGl0KDEpO1xcbitcXHRcXHRpZiAoc2V0dWlkKFVTSFJUX01BWCkpIHtcXG4gXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJbSU5GT10gc2tpcCBzZXR1aWQgY2hpbGQgdGVzdFxcXFxuXFxcIik7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKTtcXG4rXFx0XFx0XFx0ZXhpdCgwKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoIWZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSlcXG4rXFx0XFx0XFx0ZXhpdCgxKTtcXG4gXFx0XFx0ZXhpdCgwKTtcXG4gXFx0fVxcbi1cXHRpZiAod2FpdChcXHUwMDI2d3N0YXR1cykgPT0gLTEpXFxuLVxcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwid2FpdFxcXCIpO1xcbi1cXHRpZiAoIVdJRkVYSVRFRCh3c3RhdHVzKSB8fCBXRVhJVFNUQVRVUyh3c3RhdHVzKSAhPSAwKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcIndhaXQ6IHVuZXhwZWN0ZWQgY2hpbGQgcmVzdWx0XFxcIik7XFxuLVxcbi1cXHRleHBsYWluKFxcXCJjcmVhdGUgYSBuZXcgcHJvY2Vzcy1wcml2YXRlIGxhYmVsIChGTF9TX1BST0NFU1MpXFxcIik7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNhbiBnZXQgaXQgYWdhaW5cXFwiKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApKTtcXG4tXFx0ZXhwbGFpbihcXFwiY2hpbGQgcHJvY2VzcyBjYW5ub3QgY2FuIGdldCBpdFxcXCIpO1xcbitcXHRBU1NFUlRfRVEocGlkLCB3YWl0KFxcdTAwMjZ3c3RhdHVzKSkgVEhfTE9HKFxcXCJ3YWl0IGZhaWxlZFxcXCIpO1xcbitcXHRBU1NFUlRfVFJVRShXSUZFWElURUQod3N0YXR1cykpIFRIX0xPRyhcXFwiY2hpbGQgZGlkIG5vdCBleGl0IG5vcm1hbGx5XFxcIik7XFxuK1xcdEFTU0VSVF9FUSgwLCBXRVhJVFNUQVRVUyh3c3RhdHVzKSkgVEhfTE9HKFxcXCJjaGlsZCByZXBvcnRlZCB1bmV4cGVjdGVkIHJlc3VsdFxcXCIpO1xcbitcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XFxuK31cXG4rXFxuK1RFU1QocHJvY2Vzc19wcml2YXRlX2xhYmVsX3NoYXJlKVxcbit7XFxuK1xcdGludCBmZCwgZXJyLCB3c3RhdHVzO1xcbitcXHRwaWRfdCBwaWQ7XFxuK1xcbitcXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFxcXCJzb2NrZXQgZmFpbGVkXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgSVBWNl9GTF9GX0NSRUFURSk7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBwcm9jZXNzLXByaXZhdGUgbGFiZWwgKEZMX1NfUFJPQ0VTUylcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gZ2V0IGl0IGFnYWluXFxcIik7XFxuK1xcbiBcXHRwaWQgPSBmb3JrKCk7XFxuLVxcdGlmIChwaWQgPT0gLTEpXFxuLVxcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwiZm9ya1xcXCIpO1xcbitcXHRBU1NFUlRfTkUoLTEsIHBpZCkgVEhfTE9HKFxcXCJmb3JrIGZhaWxlZFxcXCIpO1xcbiBcXHRpZiAoIXBpZCkge1xcbi1cXHRcXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCkpO1xcbitcXHRcXHRpZiAoIWZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSlcXG4rXFx0XFx0XFx0ZXhpdCgxKTtcXG4gXFx0XFx0ZXhpdCgwKTtcXG4gXFx0fVxcbi1cXHRpZiAod2FpdChcXHUwMDI2d3N0YXR1cykgPT0gLTEpXFxuLVxcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwid2FpdFxcXCIpO1xcbi1cXHRpZiAoIVdJRkVYSVRFRCh3c3RhdHVzKSB8fCBXRVhJVFNUQVRVUyh3c3RhdHVzKSAhPSAwKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcIndhaXQ6IHVuZXhwZWN0ZWQgY2hpbGQgcmVzdWx0XFxcIik7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbi17XFxuLVxcdGludCBjO1xcbi1cXG4tXFx0d2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFxcXCJsdlxcXCIpKSAhPSAtMSkge1xcbi1cXHRcXHRzd2l0Y2ggKGMpIHtcXG4tXFx0XFx0Y2FzZSAnbCc6XFxuLVxcdFxcdFxcdGNmZ19sb25nX3J1bm5pbmcgPSB0cnVlO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAndic6XFxuLVxcdFxcdFxcdGNmZ192ZXJib3NlID0gdHJ1ZTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdGVycm9yKDEsIDAsIFxcXCIlczogcGFyc2UgZXJyb3JcXFwiLCBhcmd2WzBdKTtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdEFTU0VSVF9FUShwaWQsIHdhaXQoXFx1MDAyNndzdGF0dXMpKSBUSF9MT0coXFxcIndhaXQgZmFpbGVkXFxcIik7XFxuK1xcdEFTU0VSVF9UUlVFKFdJRkVYSVRFRCh3c3RhdHVzKSkgVEhfTE9HKFxcXCJjaGlsZCBkaWQgbm90IGV4aXQgbm9ybWFsbHlcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKDAsIFdFWElUU1RBVFVTKHdzdGF0dXMpKSBUSF9MT0coXFxcImNoaWxkIHJlcG9ydGVkIHVuZXhwZWN0ZWQgcmVzdWx0XFxcIik7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcXG4gfVxcbiBcXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbitURVNUKHJlbmV3X2xhYmVsX2xpbmdlcilcXG4ge1xcbi1cXHRpbnQgZmQ7XFxuLVxcbi1cXHRwYXJzZV9vcHRzKGFyZ2MsIGFyZ3YpO1xcbitcXHQvKiBBZnRlciBhIGxhYmVsIHdpdGggRVhDTCBzaGFyZSBpcyBwdXQgYW5kIGxpbmdlcmVkLCBpdCBtdXN0IGJlXFxuK1xcdCAqIHBvc3NpYmxlIHRvIGNyZWF0ZSBhIG5ldyBvbmUuIENoZWNrIGlmIFJFTkVXIGFjdGlvbiBleHRlbmRzXFxuK1xcdCAqIHRoZSBsaW5nZXIgcGVyaW9kIG9mIHB1dCBsYWJlbCwgYmxvY2tpbmcgY3JlYXRpb24gYWZ0ZXIgcHJldmlvdXNcXG4rXFx0ICogbGluZ2VyIHRpbWUuXFxuK1xcdCAqL1xcbitcXHRpbnQgZmQsIGVycjtcXG4gXFxuIFxcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcXG4tXFx0aWYgKGZkID09IC0xKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcInNvY2tldFxcXCIpO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbiBcXG4tXFx0cnVuX3Rlc3RzKGZkKTtcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNSwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgbGFiZWwgd2l0aCBGTF9NSU5fTElOR0VSIGxpbmdlciB0aW1lXFxcIik7XFxuIFxcbi1cXHRpZiAoY2xvc2UoZmQpKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcImNsb3NlXFxcIik7XFxuK1xcdGVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNSwgMiAqIChGTF9NSU5fTElOR0VSICogMiArIDEpKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gcmVuZXcgdGhlIGxhYmVsIHRvIGluY3JlYXNlIGl0cyBsaW5nZXIgdGltZVxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgNSk7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIHB1dCB0aGUgbGFiZWxcXFwiKTtcXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRzbGVlcChGTF9NSU5fTElOR0VSICogMiArIDEpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XFxuK1xcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFxcXCJleHBlY3RlZCByZXVzZSB0byBmYWlsLCBuZXcgbGluZ2VyIHRpbWUgbm90IG92ZXIgeWV0XFxcIik7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcXG4gfVxcbitcXG4rVEVTVChyZW1vdGVfZmxhZylcXG4re1xcbitcXHQvKiBUaGUgUkVNT1RFIGZsYWcsIHVzZWQgZm9yIGdldHNvY2tvcHQsIGlzIGV4cGVjdGVkIHRvIHJldHJpZXZlIHRoZVxcbitcXHQgKiBsYWJlbCBmcm9tIHRoZSBsYXRlc3QgcmVjZWl2ZWQgaGVhZGVyLlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIGZyZXEgPSB7XFxuK1xcdFxcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCxcXG4rXFx0XFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRU1PVEUsXFxuK1xcdH07XFxuK1xcdHNvY2tsZW5fdCBmcmVxX2xlbiA9IHNpemVvZihmcmVxKTtcXG4rXFx0aW50IGxpc3RlbmVyLCBjZmQsIGFmZCwgZXJyO1xcbitcXG4rXFx0bGlzdGVuZXIgPSB0Y3BfbGlzdGVuKCk7XFxuK1xcdHRjcF9jb25uZWN0KGxpc3RlbmVyLCA2LCBcXHUwMDI2Y2ZkLCBcXHUwMDI2YWZkKTtcXG4rXFxuK1xcdGVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcXHUwMDI2ZnJlcSwgXFx1MDAyNmZyZXFfbGVuKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJnZXRzb2Nrb3B0IHdpdGggSVBWNl9GTF9GX1JFTU9URSBmYWlsZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKDYsIG50b2hsKGZyZXEuZmxyX2xhYmVsKSkgVEhfTE9HKFxcXCJ1bmV4cGVjdGVkIHJlbW90ZSBmbG93IGxhYmVsXFxcIik7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgY2xvc2UoYWZkKSk7XFxuK1xcdEFTU0VSVF9FUSgwLCBjbG9zZShjZmQpKTtcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGxpc3RlbmVyKSk7XFxuK31cXG4rXFxuK1RFU1QocmVmbGVjdF9mbGFnKVxcbit7XFxuK1xcdC8qIFRoZSBSRUZMRUNUIGZsYWcgYWN0cyBhcyBhIHRyaWdnZXIgdG8gdGhlIFJFUEZMT1cgYml0LiBXaGVuIFJFUEZMT1dcXG4rXFx0ICogaXMgdHJpZ2dlcmVkIGZvciBhIHNvY2tldCwgaXQgYWRvcHRzIHRoZSBsYWJlbCByZWNlaXZlZCBmcm9tIHRoZVxcbitcXHQgKiBjb25uZWN0ZWQgc29ja2V0LlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlZmxlY3Rfb24gPSB7XFxuK1xcdFxcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCxcXG4rXFx0XFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRUZMRUNULFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9xdWVyeSA9IHtcXG4rXFx0XFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfR0VULFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9vZmYgPSB7XFxuK1xcdFxcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX1BVVCxcXG4rXFx0XFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRUZMRUNULFxcbitcXHR9O1xcbitcXHRzb2NrbGVuX3QgcmVmbGVjdF9xdWVyeV9sZW4gPSBzaXplb2YocmVmbGVjdF9xdWVyeSk7XFxuK1xcdGludCBsaXN0ZW5lciwgY2ZkLCBhZmQsIGVycjtcXG4rXFxuK1xcdHNldF9mbG93bGFiZWxfY29uc2lzdGVuY3koZmFsc2UpO1xcbitcXG4rXFx0bGlzdGVuZXIgPSB0Y3BfbGlzdGVuKCk7XFxuK1xcdGVyciA9IHNldHNvY2tvcHQobGlzdGVuZXIsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFxcdTAwMjZyZWZsZWN0X29uLCBzaXplb2YocmVmbGVjdF9vbikpO1xcbitcXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBlbmFibGUgUkVGTEVDVCBvbiB0aGUgbGlzdGVuZXJcXFwiKTtcXG4rXFxuK1xcdHRjcF9jb25uZWN0KGxpc3RlbmVyLCA3LCBcXHUwMDI2Y2ZkLCBcXHUwMDI2YWZkKTtcXG4rXFxuK1xcdGVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcXHUwMDI2cmVmbGVjdF9xdWVyeSwgXFx1MDAyNnJlZmxlY3RfcXVlcnlfbGVuKTtcXG4rXFx0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gcXVlcnkgdGhlIGFjY2VwdGVkIHNvY2tldCdzIG91dGdvaW5nIGxhYmVsXFxcIik7XFxuK1xcdEFTU0VSVF9FUSg3LCBudG9obChyZWZsZWN0X3F1ZXJ5LmZscl9sYWJlbCkpIFRIX0xPRyhcXFwiYWNjZXB0ZWQgc29ja2V0IGRpZCBub3QgcmVmbGVjdCBjbGllbnQncyBsYWJlbFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gc2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFxcdTAwMjZyZWZsZWN0X29mZiwgc2l6ZW9mKHJlZmxlY3Rfb2ZmKSk7XFxuK1xcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIGRpc2FibGUgUkVGTEVDVCBvbiB0aGUgYWNjZXB0ZWQgc29ja2V0XFxcIik7XFxuK1xcbitcXHRlcnIgPSBzZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXFx1MDAyNnJlZmxlY3Rfb2ZmLCBzaXplb2YocmVmbGVjdF9vZmYpKTtcXG4rXFx0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIGRpc2FibGluZyBSRUZMRUNUIHR3aWNlIHRvIGZhaWxcXFwiKTtcXG4rXFxuK1xcdHNldF9mbG93bGFiZWxfY29uc2lzdGVuY3kodHJ1ZSk7XFxuK1xcbitcXHRBU1NFUlRfRVEoMCwgY2xvc2UoYWZkKSk7XFxuK1xcdEFTU0VSVF9FUSgwLCBjbG9zZShjZmQpKTtcXG4rXFx0QVNTRVJUX0VRKDAsIGNsb3NlKGxpc3RlbmVyKSk7XFxuK31cXG4rXFxuK1RFU1RfSEFSTkVTU19NQUlOXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE2OjE2OjAwLjUyMzA4MzkzN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYwNDQzNzc2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSB1c2VyLXNwYWNlIHNlbGZ0ZXN0ICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMpIGFuZCBtYWtlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRlYTU0NmI5Mzc5NDExMTVhMDNhZmNjZDc2NjEyMTlhMWZiNjE0ZWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxNjoxNTo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuY1xuaW5kZXggYWY5NWI0OGFjZWE5MGIuLjlhYTVjODE0NmYxNzE5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNcbkBAIC02LDYgKzYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZXJyb3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbjYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuQEAgLTE5LDMxICsyMCwyNSBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXCJrc2VsZnRlc3RfaGFybmVzcy5oXCJcbiBcbiAvKiB1YXBpL2dsaWJjIHdlaXJkbmVzcyBtYXkgbGVhdmUgdGhpcyB1bmRlZmluZWQgKi9cbiAjaWZuZGVmIElQVjZfRkxPV0xBQkVMX01HUlxuICNkZWZpbmUgSVBWNl9GTE9XTEFCRUxfTUdSXHQzMlxuICNlbmRpZlxuKyNpZm5kZWYgSVBWNl9GTE9XSU5GT19TRU5EXG4rI2RlZmluZSBJUFY2X0ZMT1dJTkZPX1NFTkRcdDMzXG4rI2VuZGlmXG4gXG4gLyogZnJvbSBuZXQvaXB2Ni9pcDZfZmxvd2xhYmVsLmMgKi9cbiAjZGVmaW5lIEZMX01JTl9MSU5HRVJcdFx0NlxuIFxuLSNkZWZpbmUgZXhwbGFpbih4KVx0XHRcdFx0XHRcdFx0XFxcbi1cdGRvIHsgaWYgKGNmZ192ZXJib3NlKSBmcHJpbnRmKHN0ZGVyciwgXCIgICAgICAgXCIgeCBcIlxcblwiKTsgfSB3aGlsZSAoMClcbi1cbi0jZGVmaW5lIF9fZXhwZWN0KHgpXHRcdFx0XHRcdFx0XHRcXFxuLVx0ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuLVx0XHRpZiAoISh4KSlcdFx0XHRcdFx0XHRcXFxuLVx0XHRcdGZwcmludGYoc3RkZXJyLCBcIltPS10gICBcIiAjeCBcIlxcblwiKTtcdFx0XFxcbi1cdFx0ZWxzZVx0XHRcdFx0XHRcdFx0XFxcbi1cdFx0XHRlcnJvcigxLCAwLCBcIltFUlJdICBcIiAjeCBcIiAobGluZSAlZClcIiwgX19MSU5FX18pOyBcXFxuLVx0fSB3aGlsZSAoMClcbi1cbi0jZGVmaW5lIGV4cGVjdF9wYXNzKHgpXHRfX2V4cGVjdCh4KVxuLSNkZWZpbmUgZXhwZWN0X2ZhaWwoeClcdF9fZXhwZWN0KCEoeCkpXG4tXG4tc3RhdGljIGJvb2wgY2ZnX2xvbmdfcnVubmluZztcbi1zdGF0aWMgYm9vbCBjZmdfdmVyYm9zZTtcbisjZGVmaW5lIElOSVRfU0lONl9MT09QQkFDSyhuYW1lKVx0XHRcdFx0XHRcXFxuK1x0c3RydWN0IHNvY2thZGRyX2luNiBuYW1lID0ge1x0XHRcdFx0XHRcXFxuK1x0XHQuc2luNl9mYW1pbHlcdD0gQUZfSU5FVDYsXHRcdFx0XHRcXFxuK1x0XHQuc2luNl9hZGRyXHQ9IElONkFERFJfTE9PUEJBQ0tfSU5JVCxcdFx0XFxcbitcdFx0LnNpbjZfcG9ydFx0PSBodG9ucyg4ODg4KSxcdFx0XHRcdFxcXG4rXHR9XG4gXG4gc3RhdGljIGludCBmbG93bGFiZWxfZ2V0KGludCBmZCwgdWludDMyX3QgbGFiZWwsIHVpbnQ4X3Qgc2hhcmUsIHVpbnQxNl90IGZsYWdzKVxuIHtcbkBAIC03MSwxMjkgKzY2LDM0NCBAQCBzdGF0aWMgaW50IGZsb3dsYWJlbF9wdXQoaW50IGZkLCB1aW50MzJfdCBsYWJlbClcbiBcdHJldHVybiBzZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZyZXEsIHNpemVvZihyZXEpKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnVuX3Rlc3RzKGludCBmZClcbitzdGF0aWMgaW50IGZsb3dsYWJlbF9yZW5ldyhpbnQgZmQsIHVpbnQzMl90IGxhYmVsLCB1aW50MTZfdCBsaW5nZXIpXG4re1xuK1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlcSA9IHtcbitcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUkVORVcsXG4rXHRcdC5mbHJfbGFiZWwgPSBodG9ubChsYWJlbCksXG4rXHRcdC5mbHJfbGluZ2VyID0gbGluZ2VyLFxuK1x0fTtcbitcbitcdHJldHVybiBzZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZyZXEsIHNpemVvZihyZXEpKTtcbit9XG4rXG4rc3RhdGljIGludCB0Y3BfbGlzdGVuKHZvaWQpXG4re1xuK1x0SU5JVF9TSU42X0xPT1BCQUNLKGFkZHIpO1xuK1x0Y29uc3QgaW50IG9uZSA9IDE7XG4rXHRpbnQgZmQ7XG4rXG4rXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19TVFJFQU0sIDApO1xuK1x0aWYgKGZkID09IC0xKVxuK1x0XHRlcnJvcigxLCBlcnJubywgXCJzb2NrZXQgbGlzdGVuZXJcIik7XG4rXHRpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBcdTAwMjZvbmUsIHNpemVvZihvbmUpKSlcbitcdFx0ZXJyb3IoMSwgZXJybm8sIFwic2V0c29ja29wdCBTT19SRVVTRUFERFJcIik7XG4rXHRpZiAoYmluZChmZCwgKHZvaWQgKilcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpKVxuK1x0XHRlcnJvcigxLCBlcnJubywgXCJiaW5kXCIpO1xuK1x0aWYgKGxpc3RlbihmZCwgMSkpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcImxpc3RlblwiKTtcbitcbitcdHJldHVybiBmZDtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGNwX2Nvbm5lY3QoaW50IGxpc3RlbmVyLCB1aW50MzJfdCBmbG93bGFiZWwsIGludCAqY2xpZW50LCBpbnQgKmFjY2VwdGVkKVxuK3tcbitcdElOSVRfU0lONl9MT09QQkFDSyhhZGRyKTtcbitcdGNvbnN0IGludCBvbmUgPSAxO1xuK1x0aW50IGNmZCwgYWZkO1xuK1xuK1x0Y2ZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX1NUUkVBTSwgMCk7XG4rXHRpZiAoY2ZkID09IC0xKVxuK1x0XHRlcnJvcigxLCBlcnJubywgXCJzb2NrZXQgY2xpZW50XCIpO1xuK1xuK1x0aWYgKGZsb3dsYWJlbF9nZXQoY2ZkLCBmbG93bGFiZWwsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSlcbitcdFx0ZXJyb3IoMSwgZXJybm8sIFwiZmxvd2xhYmVsX2dldFwiKTtcbitcdGlmIChzZXRzb2Nrb3B0KGNmZCwgU09MX0lQVjYsIElQVjZfRkxPV0lORk9fU0VORCwgXHUwMDI2b25lLCBzaXplb2Yob25lKSkpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcInNldHNvY2tvcHQgZmxvd2luZm9fc2VuZFwiKTtcbitcdGFkZHIuc2luNl9mbG93aW5mbyA9IGh0b25sKGZsb3dsYWJlbCk7XG4rXG4rXHRpZiAoY29ubmVjdChjZmQsICh2b2lkICopXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpKSlcbitcdFx0ZXJyb3IoMSwgZXJybm8sIFwiY29ubmVjdFwiKTtcbitcbitcdGFmZCA9IGFjY2VwdChsaXN0ZW5lciwgTlVMTCwgTlVMTCk7XG4rXHRpZiAoYWZkID09IC0xKVxuK1x0XHRlcnJvcigxLCBlcnJubywgXCJhY2NlcHRcIik7XG4rXG4rXHQqY2xpZW50ID0gY2ZkO1xuK1x0KmFjY2VwdGVkID0gYWZkO1xuK31cbitcbitzdGF0aWMgdm9pZCBzZXRfZmxvd2xhYmVsX2NvbnNpc3RlbmN5KGJvb2wgZW5hYmxlKVxuK3tcbitcdC8qIGZsb3dsYWJlbF9jb25zaXN0ZW5jeSBtdXN0IGJlIGRpc2FibGUgdG8gdXNlIHRoZSBJUFY2X0ZMX0ZfUkVGTEVDVFxuK1x0ICogZmxhZy4gVGhpcyBoZWxwZXIgZnVuY3Rpb24gaXMgcmVxdWlyZWQgZm9yIHNldHRpbmcgdXAgYW5kIHRlYXJpbmdcbitcdCAqIGRvd24gdGVzdCBjYXNlcyBmb3IgdGhpcyBmbGFnLlxuK1x0ICovXG4rXHRpbnQgZmQ7XG4rXG4rXHRmZCA9IG9wZW4oXCIvcHJvYy9zeXMvbmV0L2lwdjYvZmxvd2xhYmVsX2NvbnNpc3RlbmN5XCIsIE9fV1JPTkxZKTtcbitcdGlmIChmZCA9PSAtMSlcbitcdFx0ZXJyb3IoMSwgZXJybm8sIFwib3BlbiBmbG93bGFiZWxfY29uc2lzdGVuY3lcIik7XG4rXHRpZiAod3JpdGUoZmQsIGVuYWJsZSA/IFwiMVwiIDogXCIwXCIsIDEpICE9IDEpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcIndyaXRlIGZsb3dsYWJlbF9jb25zaXN0ZW5jeVwiKTtcbitcdGlmIChjbG9zZShmZCkpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcImNsb3NlIGZsb3dsYWJlbF9jb25zaXN0ZW5jeVwiKTtcbit9XG4rXG4rVEVTVChjYW5ub3RfZ2V0X25vbl9leGlzdGVudF9sYWJlbClcbit7XG4rXHRpbnQgZmQsIGVycjtcbitcbitcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbitcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwic29ja2V0IGZhaWxlZFwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApO1xuK1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCJleHBlY3RlZCBnZXQgb2YgYSBub24tZXhpc3RlbnQgbGFiZWwgdG8gZmFpbFwiKTtcbitcbitcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuK31cbitcbitURVNUKGNhbm5vdF9wdXRfbm9uX2V4aXN0ZW50X2xhYmVsKVxuK3tcbitcdGludCBmZCwgZXJyO1xuK1xuK1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuK1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCJzb2NrZXQgZmFpbGVkXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XG4rXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcImV4cGVjdGVkIHB1dCBvZiBhIG5vbi1leGlzdGVudCBsYWJlbCB0byBmYWlsXCIpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XG4rfVxuK1xuK1RFU1QoY2Fubm90X2NyZWF0ZV9sYWJlbF9ncmVhdGVyX3RoYW5fMjBfYml0cylcbit7XG4rXHRpbnQgZmQsIGVycjtcbitcbitcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbitcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwic29ja2V0IGZhaWxlZFwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDB4MUZGRkZGLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgbGFiZWwgXHUwMDNlIDIwIGJpdHMgdG8gYmUgcmVqZWN0ZWRcIik7XG4rXG4rXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbit9XG4rXG4rVEVTVChjYW5fY3JlYXRlX2FuZF9nZXRfYW5kX3B1dF9sYWJlbHMpXG4re1xuK1x0aW50IGZkLCBlcnI7XG4rXG4rXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4rXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcInNvY2tldCBmYWlsZWRcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBjcmVhdGUgbGFiZWwgKEZMX0ZfQ1JFQVRFKVwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApO1xuK1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIGdldCB0aGUgbGFiZWwgd2l0aG91dCBGTF9GX0NSRUFURVwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSB8IElQVjZfRkxfRl9FWENMKTtcbitcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgRkxfRl9FWENMIHRvIHJlamVjdCBhbiBhbHJlYWR5LWV4aXN0aW5nIGxhYmVsXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gcHV0IGZpcnN0IHJlZmVyZW5jZVwiKTtcbitcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xuK1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIHB1dCBzZWNvbmQgcmVmZXJlbmNlXCIpO1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gcHV0IHRoaXJkIHJlZmVyZW5jZVwiKTtcbitcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xuK1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCJleHBlY3RlZCBmb3VydGggcHV0IHRvIGZhaWwsIG5vIHJlZmVyZW5jZXMgbGVmdFwiKTtcbitcbitcdEFTU0VSVF9FUSgwLCBjbG9zZShmZCkpO1xuK31cbitcbitURVNUKGV4Y2x1c2l2ZV9sYWJlbF9zaGFyZSlcbiB7XG4tXHRpbnQgd3N0YXR1cztcbitcdGludCBmZCwgZXJyO1xuK1xuK1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuK1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCJzb2NrZXQgZmFpbGVkXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBleGNsdXNpdmUgbGFiZWwgKEZMX1NfRVhDTClcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgcmV1c2UgaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWxcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7XG4rXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcImV4cGVjdGVkIHJldXNlIGluIGV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWwgdG9vXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMik7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gcHV0IHRoZSBleGNsdXNpdmUgbGFiZWxcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgZHVlIHRvIGxpbmdlclwiKTtcbitcbitcdHNsZWVwKEZMX01JTl9MSU5HRVIgKiAyICsgMSk7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImV4cGVjdGVkIHJldXNlIHRvIHN1Y2NlZWQgYWZ0ZXIgbGluZ2VyXCIpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XG4rfVxuK1xuK1RFU1QodXNlcl9wcml2YXRlX2xhYmVsX3NoYXJlKVxuK3tcbitcdGludCBmZCwgZXJyLCB3c3RhdHVzO1xuIFx0cGlkX3QgcGlkO1xuIFxuLVx0ZXhwbGFpbihcImNhbm5vdCBnZXQgbm9uLWV4aXN0ZW50IGxhYmVsXCIpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgMCkpO1xuLVxuLVx0ZXhwbGFpbihcImNhbm5vdCBwdXQgbm9uLWV4aXN0ZW50IGxhYmVsXCIpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVxuLVx0ZXhwbGFpbihcImNhbm5vdCBjcmVhdGUgbGFiZWwgZ3JlYXRlciB0aGFuIDIwIGJpdHNcIik7XG4tXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAweDFGRkZGRiwgSVBWNl9GTF9TX0FOWSxcbi1cdFx0XHRcdCAgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVxuLVx0ZXhwbGFpbihcImNyZWF0ZSBhIG5ldyBsYWJlbCAoRkxfRl9DUkVBVEUpXCIpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwbGFpbihcImNhbiBnZXQgdGhlIGxhYmVsICh3aXRob3V0IEZMX0ZfQ1JFQVRFKVwiKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApKTtcbi1cdGV4cGxhaW4oXCJjYW4gZ2V0IGl0IGFnYWluIHdpdGggY3JlYXRlIGZsYWcgc2V0LCB0b29cIik7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwiY2Fubm90IGdldCBpdCBhZ2FpbiB3aXRoIHRoZSBleGNsdXNpdmUgKEZMX0ZMX0VYQ0wpIGZsYWdcIik7XG4tXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLFxuLVx0XHRcdFx0XHQgSVBWNl9GTF9GX0NSRUFURSB8IElQVjZfRkxfRl9FWENMKSk7XG4tXHRleHBsYWluKFwiY2FuIG5vdyBwdXQgZXhhY3RseSB0aHJlZSByZWZlcmVuY2VzXCIpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVxuLVx0ZXhwbGFpbihcImNyZWF0ZSBhIG5ldyBleGNsdXNpdmUgbGFiZWwgKEZMX1NfRVhDTClcIik7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwbGFpbihcImNhbm5vdCBnZXQgaXQgYWdhaW4gaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlXCIpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIGV4Y2x1c2l2ZSBtb2RlIGVpdGhlclwiKTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAyKSk7XG4tXG4tXHRpZiAoY2ZnX2xvbmdfcnVubmluZykge1xuLVx0XHRleHBsYWluKFwiY2Fubm90IHJldXNlIHRoZSBsYWJlbCwgZHVlIHRvIGxpbmdlclwiKTtcbi1cdFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSxcbi1cdFx0XHRcdFx0ICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRcdGV4cGxhaW4oXCJhZnRlciBzbGVlcCwgY2FuIHJldXNlXCIpO1xuLVx0XHRzbGVlcChGTF9NSU5fTElOR0VSICogMiArIDEpO1xuLVx0XHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLFxuLVx0XHRcdFx0XHQgIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdH1cbitcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbitcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwic29ja2V0IGZhaWxlZFwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgdXNlci1wcml2YXRlIGxhYmVsIChGTF9TX1VTRVIpXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0FOWSwgMCk7XG4rXHRBU1NFUlRfVFJVRShlcnIpIFRIX0xPRyhcImV4cGVjdGVkIGdldCBpbiBub24tZXhjbHVzaXZlIG1vZGUgdG8gZmFpbFwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19FWENMLCAwKTtcbitcdEFTU0VSVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgZ2V0IGluIGV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWxcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gZ2V0IGl0IGFnYWluIGluIHVzZXIgbW9kZVwiKTtcbiBcbi1cdGV4cGxhaW4oXCJjcmVhdGUgYSBuZXcgdXNlci1wcml2YXRlIGxhYmVsIChGTF9TX1VTRVIpXCIpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIG5vbi1leGNsdXNpdmUgbW9kZVwiKTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19BTlksIDApKTtcbi1cdGV4cGxhaW4oXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIGV4Y2x1c2l2ZSBtb2RlXCIpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0VYQ0wsIDApKTtcbi1cdGV4cGxhaW4oXCJjYW4gZ2V0IGl0IGFnYWluIGluIHVzZXIgbW9kZVwiKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7XG4tXHRleHBsYWluKFwiY2hpbGQgcHJvY2VzcyBjYW4gZ2V0IGl0IHRvbywgYnV0IG5vdCBhZnRlciBzZXR1aWQobm9ib2R5KVwiKTtcbiBcdHBpZCA9IGZvcmsoKTtcbi1cdGlmIChwaWQgPT0gLTEpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcImZvcmtcIik7XG4rXHRBU1NFUlRfTkUoLTEsIHBpZCkgVEhfTE9HKFwiZm9yayBmYWlsZWRcIik7XG4gXHRpZiAoIXBpZCkge1xuLVx0XHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpO1xuLVx0XHRpZiAoc2V0dWlkKFVTSFJUX01BWCkpXG4rXHRcdGlmIChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpXG4rXHRcdFx0ZXhpdCgxKTtcbitcdFx0aWYgKHNldHVpZChVU0hSVF9NQVgpKSB7XG4gXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiW0lORk9dIHNraXAgc2V0dWlkIGNoaWxkIHRlc3RcXG5cIik7XG4tXHRcdGVsc2Vcbi1cdFx0XHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpO1xuK1x0XHRcdGV4aXQoMCk7XG4rXHRcdH1cbitcdFx0aWYgKCFmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpXG4rXHRcdFx0ZXhpdCgxKTtcbiBcdFx0ZXhpdCgwKTtcbiBcdH1cbi1cdGlmICh3YWl0KFx1MDAyNndzdGF0dXMpID09IC0xKVxuLVx0XHRlcnJvcigxLCBlcnJubywgXCJ3YWl0XCIpO1xuLVx0aWYgKCFXSUZFWElURUQod3N0YXR1cykgfHwgV0VYSVRTVEFUVVMod3N0YXR1cykgIT0gMClcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwid2FpdDogdW5leHBlY3RlZCBjaGlsZCByZXN1bHRcIik7XG4tXG4tXHRleHBsYWluKFwiY3JlYXRlIGEgbmV3IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbCAoRkxfU19QUk9DRVNTKVwiKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwiY2FuIGdldCBpdCBhZ2FpblwiKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7XG4tXHRleHBsYWluKFwiY2hpbGQgcHJvY2VzcyBjYW5ub3QgY2FuIGdldCBpdFwiKTtcbitcdEFTU0VSVF9FUShwaWQsIHdhaXQoXHUwMDI2d3N0YXR1cykpIFRIX0xPRyhcIndhaXQgZmFpbGVkXCIpO1xuK1x0QVNTRVJUX1RSVUUoV0lGRVhJVEVEKHdzdGF0dXMpKSBUSF9MT0coXCJjaGlsZCBkaWQgbm90IGV4aXQgbm9ybWFsbHlcIik7XG4rXHRBU1NFUlRfRVEoMCwgV0VYSVRTVEFUVVMod3N0YXR1cykpIFRIX0xPRyhcImNoaWxkIHJlcG9ydGVkIHVuZXhwZWN0ZWQgcmVzdWx0XCIpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XG4rfVxuK1xuK1RFU1QocHJvY2Vzc19wcml2YXRlX2xhYmVsX3NoYXJlKVxuK3tcbitcdGludCBmZCwgZXJyLCB3c3RhdHVzO1xuK1x0cGlkX3QgcGlkO1xuK1xuK1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuK1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCJzb2NrZXQgZmFpbGVkXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBwcm9jZXNzLXByaXZhdGUgbGFiZWwgKEZMX1NfUFJPQ0VTUylcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gZ2V0IGl0IGFnYWluXCIpO1xuK1xuIFx0cGlkID0gZm9yaygpO1xuLVx0aWYgKHBpZCA9PSAtMSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwiZm9ya1wiKTtcbitcdEFTU0VSVF9ORSgtMSwgcGlkKSBUSF9MT0coXCJmb3JrIGZhaWxlZFwiKTtcbiBcdGlmICghcGlkKSB7XG4tXHRcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7XG4rXHRcdGlmICghZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApKVxuK1x0XHRcdGV4aXQoMSk7XG4gXHRcdGV4aXQoMCk7XG4gXHR9XG4tXHRpZiAod2FpdChcdTAwMjZ3c3RhdHVzKSA9PSAtMSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwid2FpdFwiKTtcbi1cdGlmICghV0lGRVhJVEVEKHdzdGF0dXMpIHx8IFdFWElUU1RBVFVTKHdzdGF0dXMpICE9IDApXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcIndhaXQ6IHVuZXhwZWN0ZWQgY2hpbGQgcmVzdWx0XCIpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBwYXJzZV9vcHRzKGludCBhcmdjLCBjaGFyICoqYXJndilcbi17XG4tXHRpbnQgYztcbi1cbi1cdHdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCBcImx2XCIpKSAhPSAtMSkge1xuLVx0XHRzd2l0Y2ggKGMpIHtcbi1cdFx0Y2FzZSAnbCc6XG4tXHRcdFx0Y2ZnX2xvbmdfcnVubmluZyA9IHRydWU7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJ3YnOlxuLVx0XHRcdGNmZ192ZXJib3NlID0gdHJ1ZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRlcnJvcigxLCAwLCBcIiVzOiBwYXJzZSBlcnJvclwiLCBhcmd2WzBdKTtcbi1cdFx0fVxuLVx0fVxuK1x0QVNTRVJUX0VRKHBpZCwgd2FpdChcdTAwMjZ3c3RhdHVzKSkgVEhfTE9HKFwid2FpdCBmYWlsZWRcIik7XG4rXHRBU1NFUlRfVFJVRShXSUZFWElURUQod3N0YXR1cykpIFRIX0xPRyhcImNoaWxkIGRpZCBub3QgZXhpdCBub3JtYWxseVwiKTtcbitcdEFTU0VSVF9FUSgwLCBXRVhJVFNUQVRVUyh3c3RhdHVzKSkgVEhfTE9HKFwiY2hpbGQgcmVwb3J0ZWQgdW5leHBlY3RlZCByZXN1bHRcIik7XG4rXG4rXHRBU1NFUlRfRVEoMCwgY2xvc2UoZmQpKTtcbiB9XG4gXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuK1RFU1QocmVuZXdfbGFiZWxfbGluZ2VyKVxuIHtcbi1cdGludCBmZDtcbi1cbi1cdHBhcnNlX29wdHMoYXJnYywgYXJndik7XG4rXHQvKiBBZnRlciBhIGxhYmVsIHdpdGggRVhDTCBzaGFyZSBpcyBwdXQgYW5kIGxpbmdlcmVkLCBpdCBtdXN0IGJlXG4rXHQgKiBwb3NzaWJsZSB0byBjcmVhdGUgYSBuZXcgb25lLiBDaGVjayBpZiBSRU5FVyBhY3Rpb24gZXh0ZW5kc1xuK1x0ICogdGhlIGxpbmdlciBwZXJpb2Qgb2YgcHV0IGxhYmVsLCBibG9ja2luZyBjcmVhdGlvbiBhZnRlciBwcmV2aW91c1xuK1x0ICogbGluZ2VyIHRpbWUuXG4rXHQgKi9cbitcdGludCBmZCwgZXJyO1xuIFxuIFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuLVx0aWYgKGZkID09IC0xKVxuLVx0XHRlcnJvcigxLCBlcnJubywgXCJzb2NrZXRcIik7XG4rXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcInNvY2tldCBmYWlsZWRcIik7XG4gXG4tXHRydW5fdGVzdHMoZmQpO1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNSwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0QVNTRVJUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBsYWJlbCB3aXRoIEZMX01JTl9MSU5HRVIgbGluZ2VyIHRpbWVcIik7XG4gXG4tXHRpZiAoY2xvc2UoZmQpKVxuLVx0XHRlcnJvcigxLCBlcnJubywgXCJjbG9zZVwiKTtcbitcdGVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNSwgMiAqIChGTF9NSU5fTElOR0VSICogMiArIDEpKTtcbitcdEFTU0VSVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byByZW5ldyB0aGUgbGFiZWwgdG8gaW5jcmVhc2UgaXRzIGxpbmdlciB0aW1lXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgNSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gcHV0IHRoZSBsYWJlbFwiKTtcbiBcbi1cdHJldHVybiAwO1xuK1x0c2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgKyAxKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDUsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCJleHBlY3RlZCByZXVzZSB0byBmYWlsLCBuZXcgbGluZ2VyIHRpbWUgbm90IG92ZXIgeWV0XCIpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGZkKSk7XG4gfVxuK1xuK1RFU1QocmVtb3RlX2ZsYWcpXG4re1xuK1x0LyogVGhlIFJFTU9URSBmbGFnLCB1c2VkIGZvciBnZXRzb2Nrb3B0LCBpcyBleHBlY3RlZCB0byByZXRyaWV2ZSB0aGVcbitcdCAqIGxhYmVsIGZyb20gdGhlIGxhdGVzdCByZWNlaXZlZCBoZWFkZXIuXG4rXHQgKi9cbitcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSBmcmVxID0ge1xuK1x0XHQuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsXG4rXHRcdC5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVNT1RFLFxuK1x0fTtcbitcdHNvY2tsZW5fdCBmcmVxX2xlbiA9IHNpemVvZihmcmVxKTtcbitcdGludCBsaXN0ZW5lciwgY2ZkLCBhZmQsIGVycjtcbitcbitcdGxpc3RlbmVyID0gdGNwX2xpc3RlbigpO1xuK1x0dGNwX2Nvbm5lY3QobGlzdGVuZXIsIDYsIFx1MDAyNmNmZCwgXHUwMDI2YWZkKTtcbitcbitcdGVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZmcmVxLCBcdTAwMjZmcmVxX2xlbik7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJnZXRzb2Nrb3B0IHdpdGggSVBWNl9GTF9GX1JFTU9URSBmYWlsZWRcIik7XG4rXHRBU1NFUlRfRVEoNiwgbnRvaGwoZnJlcS5mbHJfbGFiZWwpKSBUSF9MT0coXCJ1bmV4cGVjdGVkIHJlbW90ZSBmbG93IGxhYmVsXCIpO1xuK1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGFmZCkpO1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGNmZCkpO1xuK1x0QVNTRVJUX0VRKDAsIGNsb3NlKGxpc3RlbmVyKSk7XG4rfVxuK1xuK1RFU1QocmVmbGVjdF9mbGFnKVxuK3tcbitcdC8qIFRoZSBSRUZMRUNUIGZsYWcgYWN0cyBhcyBhIHRyaWdnZXIgdG8gdGhlIFJFUEZMT1cgYml0LiBXaGVuIFJFUEZMT1dcbitcdCAqIGlzIHRyaWdnZXJlZCBmb3IgYSBzb2NrZXQsIGl0IGFkb3B0cyB0aGUgbGFiZWwgcmVjZWl2ZWQgZnJvbSB0aGVcbitcdCAqIGNvbm5lY3RlZCBzb2NrZXQuXG4rXHQgKi9cbitcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZWZsZWN0X29uID0ge1xuK1x0XHQuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsXG4rXHRcdC5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVGTEVDVCxcbitcdH07XG4rXHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9xdWVyeSA9IHtcbitcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfR0VULFxuK1x0fTtcbitcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZWZsZWN0X29mZiA9IHtcbitcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUFVULFxuK1x0XHQuZmxyX2ZsYWdzID0gSVBWNl9GTF9GX1JFRkxFQ1QsXG4rXHR9O1xuK1x0c29ja2xlbl90IHJlZmxlY3RfcXVlcnlfbGVuID0gc2l6ZW9mKHJlZmxlY3RfcXVlcnkpO1xuK1x0aW50IGxpc3RlbmVyLCBjZmQsIGFmZCwgZXJyO1xuK1xuK1x0c2V0X2Zsb3dsYWJlbF9jb25zaXN0ZW5jeShmYWxzZSk7XG4rXG4rXHRsaXN0ZW5lciA9IHRjcF9saXN0ZW4oKTtcbitcdGVyciA9IHNldHNvY2tvcHQobGlzdGVuZXIsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlZmxlY3Rfb24sIHNpemVvZihyZWZsZWN0X29uKSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gZW5hYmxlIFJFRkxFQ1Qgb24gdGhlIGxpc3RlbmVyXCIpO1xuK1xuK1x0dGNwX2Nvbm5lY3QobGlzdGVuZXIsIDcsIFx1MDAyNmNmZCwgXHUwMDI2YWZkKTtcbitcbitcdGVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZyZWZsZWN0X3F1ZXJ5LCBcdTAwMjZyZWZsZWN0X3F1ZXJ5X2xlbik7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gcXVlcnkgdGhlIGFjY2VwdGVkIHNvY2tldCdzIG91dGdvaW5nIGxhYmVsXCIpO1xuK1x0QVNTRVJUX0VRKDcsIG50b2hsKHJlZmxlY3RfcXVlcnkuZmxyX2xhYmVsKSkgVEhfTE9HKFwiYWNjZXB0ZWQgc29ja2V0IGRpZCBub3QgcmVmbGVjdCBjbGllbnQncyBsYWJlbFwiKTtcbitcbitcdGVyciA9IHNldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCBcdTAwMjZyZWZsZWN0X29mZiwgc2l6ZW9mKHJlZmxlY3Rfb2ZmKSk7XG4rXHRBU1NFUlRfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gZGlzYWJsZSBSRUZMRUNUIG9uIHRoZSBhY2NlcHRlZCBzb2NrZXRcIik7XG4rXG4rXHRlcnIgPSBzZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXHUwMDI2cmVmbGVjdF9vZmYsIHNpemVvZihyZWZsZWN0X29mZikpO1xuK1x0QVNTRVJUX1RSVUUoZXJyKSBUSF9MT0coXCJleHBlY3RlZCBkaXNhYmxpbmcgUkVGTEVDVCB0d2ljZSB0byBmYWlsXCIpO1xuK1xuK1x0c2V0X2Zsb3dsYWJlbF9jb25zaXN0ZW5jeSh0cnVlKTtcbitcbitcdEFTU0VSVF9FUSgwLCBjbG9zZShhZmQpKTtcbitcdEFTU0VSVF9FUSgwLCBjbG9zZShjZmQpKTtcbitcdEFTU0VSVF9FUSgwLCBjbG9zZShsaXN0ZW5lcikpO1xuK31cbitcbitURVNUX0hBUk5FU1NfTUFJTlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTY6MTY6MDAuNTIzMDg1NDI4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA0NDM0MzMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IElQdjYgRmxvdyBMYWJlbCBTZWxmdGVzdCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIHNlZS4gVGhpcyBwYXRjaCB0b3VjaGVzIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNgLiBSaWdodCwgaXQncyBjb252ZXJ0aW5nIGFuIGV4aXN0aW5nIHRlc3QgYW5kIGFkZGluZyBuZXcgb25lcywgYWxsIHJlbGF0ZWQgdG8gSVB2NiBmbG93IGxhYmVscywgYnV0IGNydWNpYWxseSwgaXQncyAqb25seSogaW4gdGhlIHNlbGZ0ZXN0cy4gTm8ga2VybmVsIGNvZGUgaXMgYmVpbmcgbW9kaWZpZWQgaGVyZS4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkaWZm4oCmIFllcCwganVzdCB0aGF0IG9uZSBmaWxlLlxuXG5TaW5jZSB0aGlzIGlzIHB1cmVseSBhIHNlbGZ0ZXN0IHVwZGF0ZSwgdGhlcmUncyB6ZXJvIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHRoZSBrZXJuZWwgaXRzZWxmIHRoYXQgd2FycmFudHMgZnV6emluZy4gSXQncyB1c2VyLXNwYWNlIHRlc3RpbmcsIG5vdCBrZXJuZWwgYmVoYXZpb3IuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGZvbGxvd2luZyB0aGUgcnVsZXMgY29ycmVjdGx5LiBMZXQgbWUgcmVyZWFkIHRoZSBjcml0ZXJpYS4uLlxuXG5IbW0sIHNlbGZ0ZXN0cyBhcmVuJ3QgZXhwbGljaXRseSAqbGlzdGVkKiBpbiB0aGUgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBsaXN0LCBidXQgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGV5IGZhbGwgdW5kZXIgdGhlIHNwaXJpdCBvZiB0aGUgcmVzdHJpY3Rpb25zLiBUaGVzZSBhcmUgaXNvbGF0ZWQgdXNlci1zcGFjZSB0ZXN0czsgZnV6emluZyB0aGUga2VybmVsIGJhc2VkIG9uIGNoYW5nZXMgKndpdGhpbiogdGhlbSBtYWtlcyBubyBzZW5zZSBzaW5jZSB0aGUga2VybmVsIGl0c2VsZiBoYXNuJ3QgYmVlbiBtb2RpZmllZC4gQWgsIHRoZSBpbnN0cnVjdGlvbnMgc2F5IG15IGpvYiBpcyB0byBkZXRlcm1pbmUgaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHBhdGNoIHNvbGVseSBjb25jZXJucyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cywgSSdtIGNvbmZpZGVudCB0aGF0IGl0IGRvZXMgKm5vdCogd2FycmFudCBmdXp6aW5nLiBJJ2xsIHJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MDMsIk91dHB1dFRva2VucyI6NzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNjoxNjowNi41Njc0MzE0NTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSB1c2VyLXNwYWNlIHNlbGZ0ZXN0ICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMpIGFuZCBtYWtlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSB1c2VyLXNwYWNlIHNlbGZ0ZXN0ICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMpIGFuZCBtYWtlcyBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow8sth4[1] Phase: Running StartedAt: 2026-07-27 16:16:18 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8sth4[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-27 16:16:18 +0000 UTC FinishedAt: 2026-07-27 16:16:25 +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,}