Name: series-workflowhf9rp Phase: Failed StartedAt: 2026-08-07 22:33:29 +0000 UTC FinishedAt: 2026-08-07 22:56:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf9rp[0] Phase: Succeeded StartedAt: 2026-08-07 22:33:29 +0000 UTC FinishedAt: 2026-08-07 22:56:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf9rp[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 22:33:29 +0000 UTC FinishedAt: 2026-08-07 22:56:24 +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+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMgYW5kIGlwdjZfZmxvd2xhYmVsLnNoKSBieSByZXdyaXRpbmcgdGhlIHRlc3QgdG8gdXNlIHRoZSBrc2VsZnRlc3QgaGFybmVzcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzE4NjY1NzFmYmJjY2ZiZGEwNmM5OTU0ZWE3YWM5MmQ3OTcwNDE3Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMjI6NTY6MDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsLnNoXG5pbmRleCBjZWU5NWUyNTJiZWU1Li4yZWVkYTM5YmY2NGNiIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWwuc2hcbkBAIC04LDcgJiM0Mzs4LDcgQEBcbiBzZXQgLWVcbiBcbiBlY2hvIFwmIzM0O1RFU1QgbWFuYWdlbWVudFwmIzM0O1xuLS4vaW5fbmV0bnMuc2ggLi9pcHY2X2Zsb3dsYWJlbF9tZ3JcbiYjNDM7Li9pcHY2X2Zsb3dsYWJlbF9tZ3JcbiBcbiBlY2hvIFwmIzM0O1RFU1QgZGF0YXBhdGhcJiMzNDtcbiAuL2luX25ldG5zLnNoIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jXG5pbmRleCBhZjk1YjQ4YWNlYTkwLi4wNzJmYjNhOWIxMjE3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNcbkBAIC02LDQ1ICYjNDM7NiwzNiBAQFxuICNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZXJyb3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2lmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL2lvY3RsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc29ja2V0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3RpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmhcJiMzNDtcbiBcbiAvKiB1YXBpL2dsaWJjIHdlaXJkbmVzcyBtYXkgbGVhdmUgdGhpcyB1bmRlZmluZWQgKi9cbiAjaWZuZGVmIElQVjZfRkxPV0xBQkVMX01HUlxuICNkZWZpbmUgSVBWNl9GTE9XTEFCRUxfTUdSXHQzMlxuICNlbmRpZlxuJiM0MzsjaWZuZGVmIElQVjZfRkxPV0lORk9fU0VORFxuJiM0MzsjZGVmaW5lIElQVjZfRkxPV0lORk9fU0VORFx0MzNcbiYjNDM7I2VuZGlmXG4gXG4gLyogZnJvbSBuZXQvaXB2Ni9pcDZfZmxvd2xhYmVsLmMgKi9cbiAjZGVmaW5lIEZMX01JTl9MSU5HRVJcdFx0NlxuIFxuLSNkZWZpbmUgZXhwbGFpbih4KVx0XHRcdFx0XHRcdFx0XFxcbi1cdGRvIHsgaWYgKGNmZ192ZXJib3NlKSBmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAgICAgIFwmIzM0OyB4IFwmIzM0O1xcblwmIzM0Oyk7IH0gd2hpbGUgKDApXG4tXG4tI2RlZmluZSBfX2V4cGVjdCh4KVx0XHRcdFx0XHRcdFx0XFxcbi1cdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdFx0aWYgKCEoeCkpXHRcdFx0XHRcdFx0XFxcbi1cdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7W09LXSAgIFwmIzM0OyAjeCBcJiMzNDtcXG5cJiMzNDspO1x0XHRcXFxuLVx0XHRlbHNlXHRcdFx0XHRcdFx0XHRcXFxuLVx0XHRcdGVycm9yKDEsIDAsIFwmIzM0O1tFUlJdICBcJiMzNDsgI3ggXCYjMzQ7IChsaW5lICVkKVwmIzM0OywgX19MSU5FX18pOyBcXFxuLVx0fSB3aGlsZSAoMClcbi1cbi0jZGVmaW5lIGV4cGVjdF9wYXNzKHgpXHRfX2V4cGVjdCh4KVxuLSNkZWZpbmUgZXhwZWN0X2ZhaWwoeClcdF9fZXhwZWN0KCEoeCkpXG4tXG4tc3RhdGljIGJvb2wgY2ZnX2xvbmdfcnVubmluZztcbi1zdGF0aWMgYm9vbCBjZmdfdmVyYm9zZTtcbi1cbiBzdGF0aWMgaW50IGZsb3dsYWJlbF9nZXQoaW50IGZkLCB1aW50MzJfdCBsYWJlbCwgdWludDhfdCBzaGFyZSwgdWludDE2X3QgZmxhZ3MpXG4ge1xuIFx0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlcSA9IHtcbkBAIC03MSwxMjkgJiM0Mzs2Miw0ODQgQEAgc3RhdGljIGludCBmbG93bGFiZWxfcHV0KGludCBmZCwgdWludDMyX3QgbGFiZWwpXG4gXHRyZXR1cm4gc2V0c29ja29wdChmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXHUwMDI2cmVxLCBzaXplb2YocmVxKSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ1bl90ZXN0cyhpbnQgZmQpXG4mIzQzO3N0YXRpYyBpbnQgZmxvd2xhYmVsX3JlbmV3KGludCBmZCwgdWludDMyX3QgbGFiZWwsIHVpbnQ4X3Qgc2hhcmUsXG4mIzQzO1x0XHRcdCAgIHVpbnQxNl90IGxpbmdlcilcbiB7XG4tXHRpbnQgd3N0YXR1cztcbi1cdHBpZF90IHBpZDtcbiYjNDM7XHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVxID0ge1xuJiM0MztcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUkVORVcsXG4mIzQzO1x0XHQuZmxyX2xhYmVsID0gaHRvbmwobGFiZWwpLFxuJiM0MztcdFx0LmZscl9zaGFyZSA9IHNoYXJlLFxuJiM0MztcdFx0LmZscl9saW5nZXIgPSBsaW5nZXIsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luNiBsb29wYmFja19hZGRyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHIgPSB7XG4mIzQzO1x0XHQuc2luNl9mYW1pbHlcdD0gQUZfSU5FVDYsXG4mIzQzO1x0XHQuc2luNl9hZGRyXHQ9IElONkFERFJfTE9PUEJBQ0tfSU5JVCxcbiYjNDM7XHRcdC5zaW42X3BvcnRcdD0gaHRvbnMoODg4OCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFkZHI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdGNwX2xpc3Rlbih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX2luNiBhZGRyID0gbG9vcGJhY2tfYWRkcigpO1xuJiM0MztcdGNvbnN0IGludCBvbmUgPSAxO1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfU1RSRUFNLCAwKTtcbiYjNDM7XHRpZiAoZmQgPT0gLTEpXG4mIzQzO1x0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7c29ja2V0IGxpc3RlbmVyXCYjMzQ7KTtcbiYjNDM7XHRpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBcdTAwMjZvbmUsIHNpemVvZihvbmUpKSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtzZXRzb2Nrb3B0IFNPX1JFVVNFQUREUlwmIzM0Oyk7XG4mIzQzO1x0aWYgKGJpbmQoZmQsICh2b2lkICopXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpKSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtiaW5kXCYjMzQ7KTtcbiYjNDM7XHRpZiAobGlzdGVuKGZkLCAxKSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtsaXN0ZW5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRjcF9jb25uZWN0KGludCBsaXN0ZW5lciwgdWludDMyX3QgZmxvd2xhYmVsLFxuJiM0MztcdFx0XHRpbnQgKmNsaWVudCwgaW50ICphY2NlcHRlZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkciA9IGxvb3BiYWNrX2FkZHIoKTtcbiYjNDM7XHRjb25zdCBpbnQgb25lID0gMTtcbiYjNDM7XHRpbnQgY2ZkLCBhZmQ7XG4mIzQzO1xuJiM0MztcdGNmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19TVFJFQU0sIDApO1xuJiM0MztcdGlmIChjZmQgPT0gLTEpXG4mIzQzO1x0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7c29ja2V0IGNsaWVudFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChmbG93bGFiZWxfZ2V0KGNmZCwgZmxvd2xhYmVsLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpXG4mIzQzO1x0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7Zmxvd2xhYmVsX2dldFwmIzM0Oyk7XG4mIzQzO1x0aWYgKHNldHNvY2tvcHQoY2ZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XSU5GT19TRU5ELCBcdTAwMjZvbmUsIHNpemVvZihvbmUpKSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtzZXRzb2Nrb3B0IGZsb3dpbmZvX3NlbmRcJiMzNDspO1xuJiM0MztcdGFkZHIuc2luNl9mbG93aW5mbyA9IGh0b25sKGZsb3dsYWJlbCk7XG4mIzQzO1xuJiM0MztcdGlmIChjb25uZWN0KGNmZCwgKHZvaWQgKilcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpKVxuJiM0MztcdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O2Nvbm5lY3RcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRhZmQgPSBhY2NlcHQobGlzdGVuZXIsIE5VTEwsIE5VTEwpO1xuJiM0MztcdGlmIChhZmQgPT0gLTEpXG4mIzQzO1x0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7YWNjZXB0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZsb3dsYWJlbF9wdXQoY2ZkLCBmbG93bGFiZWwpKVxuJiM0MztcdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O2Zsb3dsYWJlbF9wdXRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQqY2xpZW50ID0gY2ZkO1xuJiM0MztcdCphY2NlcHRlZCA9IGFmZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBicmluZ3VwX2xvb3BiYWNrKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWZyZXEgaWZyID0ge1xuJiM0MztcdFx0Lmlmcl9uYW1lID0gXCYjMzQ7bG9cJiMzNDtcbiYjNDM7XHR9O1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBzb2NrZXQoQUZfTE9DQUwsIFNPQ0tfU1RSRUFNLCAwKTtcbiYjNDM7XHRpZiAoZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdGlmIChpb2N0bChmZCwgU0lPQ0dJRkZMQUdTLCBcdTAwMjZpZnIpIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdGlmci5pZnJfZmxhZ3MgPSBpZnIuaWZyX2ZsYWdzIHwgSUZGX1VQO1xuJiM0MztcbiYjNDM7XHRpZiAoaW9jdGwoZmQsIFNJT0NTSUZGTEFHUywgXHUwMDI2aWZyKSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4gXG4tXHRleHBsYWluKFwmIzM0O2Nhbm5vdCBnZXQgbm9uLWV4aXN0ZW50IGxhYmVsXCYjMzQ7KTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApKTtcbi1cbi1cdGV4cGxhaW4oXCYjMzQ7Y2Fubm90IHB1dCBub24tZXhpc3RlbnQgbGFiZWxcJiMzNDspO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVxuLVx0ZXhwbGFpbihcJiMzNDtjYW5ub3QgY3JlYXRlIGxhYmVsIGdyZWF0ZXIgdGhhbiAyMCBiaXRzXCYjMzQ7KTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDB4MUZGRkZGLCBJUFY2X0ZMX1NfQU5ZLFxuLVx0XHRcdFx0ICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXG4tXHRleHBsYWluKFwmIzM0O2NyZWF0ZSBhIG5ldyBsYWJlbCAoRkxfRl9DUkVBVEUpXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2FuIGdldCB0aGUgbGFiZWwgKHdpdGhvdXQgRkxfRl9DUkVBVEUpXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2FuIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2Fubm90IGdldCBpdCBhZ2FpbiB3aXRoIHRoZSBleGNsdXNpdmUgKEZMX0ZMX0VYQ0wpIGZsYWdcJiMzNDspO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSxcbi1cdFx0XHRcdFx0IElQVjZfRkxfRl9DUkVBVEUgfCBJUFY2X0ZMX0ZfRVhDTCkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjYW4gbm93IHB1dCBleGFjdGx5IHRocmVlIHJlZmVyZW5jZXNcJiMzNDspO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVxuLVx0ZXhwbGFpbihcJiMzNDtjcmVhdGUgYSBuZXcgZXhjbHVzaXZlIGxhYmVsIChGTF9TX0VYQ0wpXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlXCYjMzQ7KTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gZXhjbHVzaXZlIG1vZGUgZWl0aGVyXCYjMzQ7KTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAyKSk7XG4tXG4tXHRpZiAoY2ZnX2xvbmdfcnVubmluZykge1xuLVx0XHRleHBsYWluKFwmIzM0O2Nhbm5vdCByZXVzZSB0aGUgbGFiZWwsIGR1ZSB0byBsaW5nZXJcJiMzNDspO1xuLVx0XHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLFxuLVx0XHRcdFx0XHQgIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdFx0ZXhwbGFpbihcJiMzNDthZnRlciBzbGVlcCwgY2FuIHJldXNlXCYjMzQ7KTtcbi1cdFx0c2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSk7XG4tXHRcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksXG4tXHRcdFx0XHRcdCAgSVBWNl9GTF9GX0NSRUFURSkpO1xuJiM0MztlcnI6XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcdHJldHVybiAtMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRShmbG93bGFiZWwpIHt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9TRVRVUChmbG93bGFiZWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB1bnNoYXJlKENMT05FX05FV05FVCk7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgMCkge1xuJiM0MztcdFx0VEhfTE9HKFwmIzM0O3Vuc2hhcmUoQ0xPTkVfTkVXTkVUKSBmYWlsZWQ6ICVzXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuIFx0fVxuIFxuLVx0ZXhwbGFpbihcJiMzNDtjcmVhdGUgYSBuZXcgdXNlci1wcml2YXRlIGxhYmVsIChGTF9TX1VTRVIpXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlXCYjMzQ7KTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19BTlksIDApKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2Fubm90IGdldCBpdCBhZ2FpbiBpbiBleGNsdXNpdmUgbW9kZVwmIzM0Oyk7XG4tXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfRVhDTCwgMCkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjYW4gZ2V0IGl0IGFnYWluIGluIHVzZXIgbW9kZVwmIzM0Oyk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjaGlsZCBwcm9jZXNzIGNhbiBnZXQgaXQgdG9vLCBidXQgbm90IGFmdGVyIHNldHVpZChub2JvZHkpXCYjMzQ7KTtcbiYjNDM7XHRyZXQgPSBicmluZ3VwX2xvb3BiYWNrKCk7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgMCkgVEhfTE9HKFwmIzM0O0ZhaWxlZCB0byBicmluZyB1cCBsb29wYmFjayBpbnRlcmZhY2VcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFX1RFQVJET1dOKGZsb3dsYWJlbClcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZmxvd2xhYmVsLCBjYW5ub3RfZ2V0X25vbl9leGlzdGVudF9sYWJlbClcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgZXJyO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCYjMzQ7c29ja2V0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDksIElQVjZfRkxfU19BTlksIDApO1xuJiM0MztcdEVYUEVDVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIGdldCBvZiBhIG5vbi1leGlzdGVudCBsYWJlbCB0byBmYWlsXCYjMzQ7KTtcbiYjNDM7XHRFWFBFQ1RfRVEoRU5PRU5ULCBlcnJubykgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIEVOT0VOVCwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUSgwLCBjbG9zZShmZCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZmxvd2xhYmVsLCBjYW5ub3RfcHV0X25vbl9leGlzdGVudF9sYWJlbClcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgZXJyO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCYjMzQ7c29ja2V0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEwKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBwdXQgb2YgYSBub24tZXhpc3RlbnQgbGFiZWwgdG8gZmFpbFwmIzM0Oyk7XG4mIzQzO1x0RVhQRUNUX0VRKEVTUkNILCBlcnJubykgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIEVTUkNILCBnb3QgJWRcJiMzNDssIGVycm5vKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihmbG93bGFiZWwsIGNhbm5vdF9jcmVhdGVfbGFiZWxfZ3JlYXRlcl90aGFuXzIwX2JpdHMpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIGVycjtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwmIzM0O3NvY2tldCBmYWlsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAweDFGRkZGRiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgbGFiZWwgXHUwMDNlIDIwIGJpdHMgdG8gYmUgcmVqZWN0ZWRcJiMzNDspO1xuJiM0MztcdEVYUEVDVF9FUShFSU5WQUwsIGVycm5vKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgRUlOVkFMLCBnb3QgJWRcJiMzNDssIGVycm5vKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihmbG93bGFiZWwsIGNhbl9jcmVhdGVfYW5kX2dldF9hbmRfcHV0X2xhYmVscylcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgZXJyO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCYjMzQ7c29ja2V0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGxhYmVsIChGTF9GX0NSRUFURSlcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGdldCB0aGUgbGFiZWwgd2l0aG91dCBGTF9GX0NSRUFURVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEVYUEVDVF9UUlVFKCFlcnIpXG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSxcbiYjNDM7XHRcdFx0ICAgIElQVjZfRkxfRl9DUkVBVEUgfCBJUFY2X0ZMX0ZfRVhDTCk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoZXJyKVxuJiM0MztcdFx0VEhfTE9HKFwmIzM0O2V4cGVjdGVkIEZMX0ZfRVhDTCB0byByZWplY3QgZXhpc3RpbmcgbGFiZWxcJiMzNDspO1xuJiM0MztcdEVYUEVDVF9FUShFRVhJU1QsIGVycm5vKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgRUVYSVNULCBnb3QgJWRcJiMzNDssIGVycm5vKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBwdXQgZmlyc3QgcmVmZXJlbmNlXCYjMzQ7KTtcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHB1dCBzZWNvbmQgcmVmZXJlbmNlXCYjMzQ7KTtcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHB1dCB0aGlyZCByZWZlcmVuY2VcJiMzNDspO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xuJiM0MztcdEVYUEVDVF9UUlVFKGVycilcbiYjNDM7XHRcdFRIX0xPRyhcJiMzNDtleHBlY3RlZCBmb3VydGggcHV0IHRvIGZhaWwsIG5vIHJlZmVyZW5jZXMgbGVmdFwmIzM0Oyk7XG4mIzQzO1x0RVhQRUNUX0VRKEVTUkNILCBlcnJubykgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIEVTUkNILCBnb3QgJWRcJiMzNDssIGVycm5vKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihmbG93bGFiZWwsIGV4Y2x1c2l2ZV9sYWJlbF9zaGFyZSlcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgZXJyO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCYjMzQ7c29ja2V0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKVxuJiM0MztcdFx0VEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZXhjbHVzaXZlIGxhYmVsIChGTF9TX0VYQ0wpXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgcmV1c2UgaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWxcJiMzNDspO1xuJiM0MztcdEVYUEVDVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRyhcJiMzNDtleHBlY3RlZCByZXVzZSBpbiBleGNsdXNpdmUgbW9kZSB0byBmYWlsIHRvb1wmIzM0Oyk7XG4mIzQzO1x0RVhQRUNUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIEVQRVJNLCBnb3QgJWRcJiMzNDssIGVycm5vKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMik7XG4mIzQzO1x0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBwdXQgdGhlIGV4Y2x1c2l2ZSBsYWJlbFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEVYUEVDVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIHJldXNlIHRvIGZhaWwsIGR1ZSB0byBsaW5nZXJcJiMzNDspO1xuJiM0MztcdEVYUEVDVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4mIzQzO1xuJiM0MztcdHNsZWVwKEZMX01JTl9MSU5HRVIgKiAyICYjNDM7IDEpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgcmV1c2UgdG8gc3VjY2VlZCBhZnRlciBsaW5nZXJcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGZsb3dsYWJlbCwgdXNlcl9wcml2YXRlX2xhYmVsX3NoYXJlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkLCBlcnIsIHdzdGF0dXM7XG4mIzQzO1x0cGlkX3QgcGlkO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCYjMzQ7c29ja2V0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKVxuJiM0MztcdFx0VEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgdXNlci1wcml2YXRlIGxhYmVsIChGTF9TX1VTRVIpXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0FOWSwgMCk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgZ2V0IGluIG5vbi1leGNsdXNpdmUgbW9kZSB0byBmYWlsXCYjMzQ7KTtcbiYjNDM7XHRFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFwmIzM0OywgZXJybm8pO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfRVhDTCwgMCk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgZ2V0IGluIGV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWxcJiMzNDspO1xuJiM0MztcdEVYUEVDVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiBpbiB1c2VyIG1vZGVcJiMzNDspO1xuJiM0MztcbiBcdHBpZCA9IGZvcmsoKTtcbi1cdGlmIChwaWQgPT0gLTEpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtmb3JrXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfTkUoLTEsIHBpZCkgVEhfTE9HKFwmIzM0O2ZvcmsgZmFpbGVkXCYjMzQ7KTtcbiBcdGlmICghcGlkKSB7XG4tXHRcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7XG4mIzQzO1x0XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCk7XG4mIzQzO1x0XHRFWFBFQ1RfVFJVRSghZXJyKVxuJiM0MztcdFx0XHRUSF9MT0coXCYjMzQ7Y2hpbGQgZmFpbGVkIHRvIGdldCB0aGUgdXNlci1wcml2YXRlIGxhYmVsXCYjMzQ7KTtcbiYjNDM7XG4gXHRcdGlmIChzZXR1aWQoVVNIUlRfTUFYKSlcbi1cdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7W0lORk9dIHNraXAgc2V0dWlkIGNoaWxkIHRlc3RcXG5cJiMzNDspO1xuLVx0XHRlbHNlXG4tXHRcdFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKTtcbiYjNDM7XHRcdFx0ZXhpdChLU0ZUX1NLSVApO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcbiYjNDM7XHRcdEVYUEVDVF9UUlVFKGVycilcbiYjNDM7XHRcdFx0VEhfTE9HKFwmIzM0O2NoaWxkIHVuZXhwZWN0ZWRseSBnb3QgbGFiZWwgYWZ0ZXIgc2V0dWlkXCYjMzQ7KTtcbiYjNDM7XHRcdEVYUEVDVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4gXHRcdGV4aXQoMCk7XG4gXHR9XG4tXHRpZiAod2FpdChcdTAwMjZ3c3RhdHVzKSA9PSAtMSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O3dhaXRcJiMzNDspO1xuLVx0aWYgKCFXSUZFWElURUQod3N0YXR1cykgfHwgV0VYSVRTVEFUVVMod3N0YXR1cykgIT0gMClcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O3dhaXQ6IHVuZXhwZWN0ZWQgY2hpbGQgcmVzdWx0XCYjMzQ7KTtcbi1cbi1cdGV4cGxhaW4oXCYjMzQ7Y3JlYXRlIGEgbmV3IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbCAoRkxfU19QUk9DRVNTKVwmIzM0Oyk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjYW4gZ2V0IGl0IGFnYWluXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7XG4tXHRleHBsYWluKFwmIzM0O2NoaWxkIHByb2Nlc3MgY2Fubm90IGNhbiBnZXQgaXRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShwaWQsIHdhaXQoXHUwMDI2d3N0YXR1cykpIFRIX0xPRyhcJiMzNDt3YWl0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoV0lGRVhJVEVEKHdzdGF0dXMpKSBUSF9MT0coXCYjMzQ7Y2hpbGQgZGlkIG5vdCBleGl0IG5vcm1hbGx5XCYjMzQ7KTtcbiYjNDM7XHRpZiAoV0VYSVRTVEFUVVMod3N0YXR1cykgPT0gS1NGVF9TS0lQKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sXG4mIzQzO1x0XHQgICAgIFwmIzM0O3NldHVpZChVU0hSVF9NQVgpIHVuYXZhaWxhYmxlIChubyBDQVBfU0VUVUlEIG9yIHVpZCB1bm1hcHBlZClcJiMzNDspO1xuJiM0MztcdEVYUEVDVF9FUSgwLCBXRVhJVFNUQVRVUyh3c3RhdHVzKSlcbiYjNDM7XHRcdFRIX0xPRyhcJiMzNDtjaGlsZCByZXBvcnRlZCB1bmV4cGVjdGVkIHJlc3VsdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUSgwLCBjbG9zZShmZCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZmxvd2xhYmVsLCBwcm9jZXNzX3ByaXZhdGVfbGFiZWxfc2hhcmUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIGVyciwgd3N0YXR1cztcbiYjNDM7XHRwaWRfdCBwaWQ7XG4mIzQzO1xuJiM0MztcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcJiMzNDtzb2NrZXQgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEVYUEVDVF9UUlVFKCFlcnIpXG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBwcm9jZXNzLXByaXZhdGUgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBnZXQgaXQgYWdhaW5cJiMzNDspO1xuJiM0MztcbiBcdHBpZCA9IGZvcmsoKTtcbi1cdGlmIChwaWQgPT0gLTEpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtmb3JrXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfTkUoLTEsIHBpZCkgVEhfTE9HKFwmIzM0O2ZvcmsgZmFpbGVkXCYjMzQ7KTtcbiBcdGlmICghcGlkKSB7XG4tXHRcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7XG4mIzQzO1x0XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCk7XG4mIzQzO1x0XHRFWFBFQ1RfVFJVRShlcnIpXG4mIzQzO1x0XHRcdFRIX0xPRyhcJiMzNDtjaGlsZCB1bmV4cGVjdGVkbHkgZ290IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbFwmIzM0Oyk7XG4mIzQzO1x0XHRFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFwmIzM0OywgZXJybm8pO1xuIFx0XHRleGl0KDApO1xuIFx0fVxuLVx0aWYgKHdhaXQoXHUwMDI2d3N0YXR1cykgPT0gLTEpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDt3YWl0XCYjMzQ7KTtcbi1cdGlmICghV0lGRVhJVEVEKHdzdGF0dXMpIHx8IFdFWElUU1RBVFVTKHdzdGF0dXMpICE9IDApXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDt3YWl0OiB1bmV4cGVjdGVkIGNoaWxkIHJlc3VsdFwmIzM0Oyk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuLXtcbi1cdGludCBjO1xuLVxuLVx0d2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0O2x2XCYjMzQ7KSkgIT0gLTEpIHtcbi1cdFx0c3dpdGNoIChjKSB7XG4tXHRcdGNhc2UgJiMzOTtsJiMzOTs6XG4tXHRcdFx0Y2ZnX2xvbmdfcnVubmluZyA9IHRydWU7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJiMzOTt2JiMzOTs6XG4tXHRcdFx0Y2ZnX3ZlcmJvc2UgPSB0cnVlO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdGVycm9yKDEsIDAsIFwmIzM0OyVzOiBwYXJzZSBlcnJvclwmIzM0OywgYXJndlswXSk7XG4tXHRcdH1cbi1cdH1cbiYjNDM7XHRBU1NFUlRfRVEocGlkLCB3YWl0KFx1MDAyNndzdGF0dXMpKSBUSF9MT0coXCYjMzQ7d2FpdCBmYWlsZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9UUlVFKFdJRkVYSVRFRCh3c3RhdHVzKSkgVEhfTE9HKFwmIzM0O2NoaWxkIGRpZCBub3QgZXhpdCBub3JtYWxseVwmIzM0Oyk7XG4mIzQzO1x0RVhQRUNUX0VRKDAsIFdFWElUU1RBVFVTKHdzdGF0dXMpKVxuJiM0MztcdFx0VEhfTE9HKFwmIzM0O2NoaWxkIHJlcG9ydGVkIHVuZXhwZWN0ZWQgcmVzdWx0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7XG4gfVxuIFxuLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiYjNDM7VEVTVF9GKGZsb3dsYWJlbCwgY2Fubm90X3JlbmV3X25vbl9leGlzdGVudF9sYWJlbClcbiB7XG4tXHRpbnQgZmQ7XG4mIzQzO1x0aW50IGZkLCBlcnI7XG4mIzQzO1xuJiM0MztcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcJiMzNDtzb2NrZXQgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX3JlbmV3KGZkLCA1LCBJUFY2X0ZMX1NfRVhDTCxcbiYjNDM7XHRcdFx0ICAgICAgMiAqIChGTF9NSU5fTElOR0VSICogMiAmIzQzOyAxKSk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoZXJyKVxuJiM0MztcdFx0VEhfTE9HKFwmIzM0O2V4cGVjdGVkIHJlbmV3IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWxcJiMzNDspO1xuJiM0MztcdEVYUEVDVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFU1JDSCwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4gXG4tXHRwYXJzZV9vcHRzKGFyZ2MsIGFyZ3YpO1xuJiM0MztcdEVYUEVDVF9FUSgwLCBjbG9zZShmZCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZmxvd2xhYmVsLCBjYW5fcmVuZXdfZXhpc3RpbmdfbGFiZWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIGVycjtcbiBcbiBcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcJiMzNDtzb2NrZXQgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNSwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEVYUEVDVF9UUlVFKCFlcnIpXG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBsYWJlbCBmb3IgcmVuZXcgdmFsaWRhdGlvblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNSwgSVBWNl9GTF9TX0VYQ0wsXG4mIzQzO1x0XHRcdCAgICAgIDIgKiAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSkpO1xuJiM0MztcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gcmVuZXcgYW4gZXhpc3RpbmcgdmFsaWQgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCA1KTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHB1dCB0aGUgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGZsb3dsYWJlbCwgcmVuZXdfbGFiZWxfbGluZ2VyKVxuJiM0Mzt7XG4mIzQzO1x0LyogUkVORVcgbXVzdCBleHRlbmQgYSBsYWJlbCYjMzk7cyBsaW5nZXIgcGVyaW9kOiBwdXR0aW5nIGEgcmVuZXdlZFxuJiM0MztcdCAqIGxhYmVsIGFuZCB3YWl0aW5nIG91dCBpdHMgb3JpZ2luYWwgbGluZ2VyIHRpbWUgbXVzdCBub3QgYmVcbiYjNDM7XHQgKiBlbm91Z2ggdG8gYWxsb3cgdGhlIGxhYmVsIHRvIGJlIHJlY3JlYXRlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpbnQgZmQsIGVycjtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwmIzM0O3NvY2tldCBmYWlsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA2LCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoIWVycilcbiYjNDM7XHRcdFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGxhYmVsIHdpdGggRkxfTUlOX0xJTkdFUiBsaW5nZXIgdGltZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNiwgSVBWNl9GTF9TX0VYQ0wsXG4mIzQzO1x0XHRcdCAgICAgIDIgKiAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSkpO1xuJiM0MztcdEVYUEVDVF9UUlVFKCFlcnIpXG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHJlbmV3IHRoZSBsYWJlbCB0byBpbmNyZWFzZSBpdHMgbGluZ2VyIHRpbWVcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCA2KTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHB1dCB0aGUgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzbGVlcChGTF9NSU5fTElOR0VSICogMiAmIzQzOyAxKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoZXJyKVxuJiM0MztcdFx0VEhfTE9HKFwmIzM0O2V4cGVjdGVkIHJldXNlIHRvIGZhaWwsIG5ldyBsaW5nZXIgdGltZSBub3Qgb3ZlciB5ZXRcJiMzNDspO1xuJiM0MztcdEVYUEVDVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUSgwLCBjbG9zZShmZCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZmxvd2xhYmVsLCByZW1vdGVfZmxhZylcbiYjNDM7e1xuJiM0MztcdC8qIFRoZSBSRU1PVEUgZmxhZywgdXNlZCBmb3IgZ2V0c29ja29wdCwgaXMgZXhwZWN0ZWQgdG8gcmV0cmlldmUgdGhlXG4mIzQzO1x0ICogbGFiZWwgZnJvbSB0aGUgbGF0ZXN0IHJlY2VpdmVkIGhlYWRlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgZnJlcSA9IHtcbiYjNDM7XHRcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCxcbiYjNDM7XHRcdC5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVNT1RFLFxuJiM0MztcdH07XG4mIzQzO1x0c29ja2xlbl90IGZyZXFfbGVuID0gc2l6ZW9mKGZyZXEpO1xuJiM0MztcdGludCBsaXN0ZW5lciwgY2ZkLCBhZmQsIGVycjtcbiYjNDM7XG4mIzQzO1x0bGlzdGVuZXIgPSB0Y3BfbGlzdGVuKCk7XG4mIzQzO1x0dGNwX2Nvbm5lY3QobGlzdGVuZXIsIDcsIFx1MDAyNmNmZCwgXHUwMDI2YWZkKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZ2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNmZyZXEsIFx1MDAyNmZyZXFfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7Z2V0c29ja29wdCB3aXRoIElQVjZfRkxfRl9SRU1PVEUgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRFWFBFQ1RfRVEoNywgbnRvaGwoZnJlcS5mbHJfbGFiZWwpKVxuJiM0MztcdFx0VEhfTE9HKFwmIzM0O3VuZXhwZWN0ZWQgcmVtb3RlIGZsb3cgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoMCwgY2xvc2UoYWZkKSk7XG4mIzQzO1x0RVhQRUNUX0VRKDAsIGNsb3NlKGNmZCkpO1xuJiM0MztcdEVYUEVDVF9FUSgwLCBjbG9zZShsaXN0ZW5lcikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBkaXNhYmxlX2Zsb3dsYWJlbF9jb25zaXN0ZW5jeSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4oXCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY2L2Zsb3dsYWJlbF9jb25zaXN0ZW5jeVwmIzM0OywgT19XUk9OTFkpO1xuIFx0aWYgKGZkID09IC0xKVxuLVx0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7c29ja2V0XCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJ1bl90ZXN0cyhmZCk7XG4mIzQzO1x0aWYgKHdyaXRlKGZkLCBcJiMzNDswXCYjMzQ7LCAxKSAhPSAxKSB7XG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcdGNsb3NlKGZkKTtcbiBcbi1cdGlmIChjbG9zZShmZCkpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtjbG9zZVwmIzM0Oyk7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiBcbi1cdHJldHVybiAwO1xuJiM0MztURVNUX0YoZmxvd2xhYmVsLCByZWZsZWN0X2ZsYWcpXG4mIzQzO3tcbiYjNDM7XHQvKiBUaGUgUkVGTEVDVCBmbGFnIGFjdHMgYXMgYSB0cmlnZ2VyIHRvIHRoZSBSRVBGTE9XIGJpdC4gV2hlbiBSRVBGTE9XXG4mIzQzO1x0ICogaXMgdHJpZ2dlcmVkIGZvciBhIHNvY2tldCwgaXQgYWRvcHRzIHRoZSBsYWJlbCByZWNlaXZlZCBmcm9tIHRoZVxuJiM0MztcdCAqIGNvbm5lY3RlZCBzb2NrZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlZmxlY3Rfb24gPSB7XG4mIzQzO1x0XHQuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsXG4mIzQzO1x0XHQuZmxyX2ZsYWdzID0gSVBWNl9GTF9GX1JFRkxFQ1QsXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9xdWVyeSA9IHtcbiYjNDM7XHRcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZWZsZWN0X29mZiA9IHtcbiYjNDM7XHRcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX1BVVCxcbiYjNDM7XHRcdC5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVGTEVDVCxcbiYjNDM7XHR9O1xuJiM0MztcdHNvY2tsZW5fdCByZWZsZWN0X3F1ZXJ5X2xlbiA9IHNpemVvZihyZWZsZWN0X3F1ZXJ5KTtcbiYjNDM7XHRpbnQgbGlzdGVuZXIsIGNmZCwgYWZkLCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghZGlzYWJsZV9mbG93bGFiZWxfY29uc2lzdGVuY3koKSlcbiYjNDM7XHRcdFNLSVAocmV0dXJuLFxuJiM0MztcdFx0ICAgICBcJiMzNDtjYW5ub3QgZGlzYWJsZSBuZXQuaXB2Ni5mbG93bGFiZWxfY29uc2lzdGVuY3lcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRsaXN0ZW5lciA9IHRjcF9saXN0ZW4oKTtcbiYjNDM7XHRlcnIgPSBzZXRzb2Nrb3B0KGxpc3RlbmVyLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLFxuJiM0MztcdFx0XHQgXHUwMDI2cmVmbGVjdF9vbiwgc2l6ZW9mKHJlZmxlY3Rfb24pKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBSRUZMRUNUIG9uIHRoZSBsaXN0ZW5lclwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHRjcF9jb25uZWN0KGxpc3RlbmVyLCA4LCBcdTAwMjZjZmQsIFx1MDAyNmFmZCk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLFxuJiM0MztcdFx0XHQgXHUwMDI2cmVmbGVjdF9xdWVyeSwgXHUwMDI2cmVmbGVjdF9xdWVyeV9sZW4pO1xuJiM0MztcdEVYUEVDVF9UUlVFKCFlcnIpXG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHF1ZXJ5IHRoZSBhY2NlcHRlZCBzb2NrZXQmIzM5O3Mgb3V0Z29pbmcgbGFiZWxcJiMzNDspO1xuJiM0MztcdEVYUEVDVF9FUSg4LCBudG9obChyZWZsZWN0X3F1ZXJ5LmZscl9sYWJlbCkpXG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7YWNjZXB0ZWQgc29ja2V0IGRpZCBub3QgcmVmbGVjdCBjbGllbnQmIzM5O3MgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBzZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUixcbiYjNDM7XHRcdFx0IFx1MDAyNnJlZmxlY3Rfb2ZmLCBzaXplb2YocmVmbGVjdF9vZmYpKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKVxuJiM0MztcdFx0VEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBkaXNhYmxlIFJFRkxFQ1Qgb24gdGhlIGFjY2VwdGVkIHNvY2tldFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IHNldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLFxuJiM0MztcdFx0XHQgXHUwMDI2cmVmbGVjdF9vZmYsIHNpemVvZihyZWZsZWN0X29mZikpO1xuJiM0MztcdEVYUEVDVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIGRpc2FibGluZyBSRUZMRUNUIHR3aWNlIHRvIGZhaWxcJiMzNDspO1xuJiM0MztcdEVYUEVDVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFU1JDSCwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUSgwLCBjbG9zZShhZmQpKTtcbiYjNDM7XHRFWFBFQ1RfRVEoMCwgY2xvc2UoY2ZkKSk7XG4mIzQzO1x0RVhQRUNUX0VRKDAsIGNsb3NlKGxpc3RlbmVyKSk7XG4gfVxuJiM0MztcbiYjNDM7VEVTVF9IQVJORVNTX01BSU5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMgYW5kIGlwdjZfZmxvd2xhYmVsLnNoKSBieSByZXdyaXRpbmcgdGhlIHRlc3QgdG8gdXNlIHRoZSBrc2VsZnRlc3QgaGFybmVzcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzE4NjY1NzFmYmJjY2ZiZGEwNmM5OTU0ZWE3YWM5MmQ3OTcwNDE3YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMjI6NTY6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWwuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWwuc2gKaW5kZXggY2VlOTVlMjUyYmVlNS4uMmVlZGEzOWJmNjRjYiAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaApAQCAtOCw3ICYjNDM7OCw3IEBACiBzZXQgLWUKIAogZWNobyAmIzM0O1RFU1QgbWFuYWdlbWVudCYjMzQ7Ci0uL2luX25ldG5zLnNoIC4vaXB2Nl9mbG93bGFiZWxfbWdyCiYjNDM7Li9pcHY2X2Zsb3dsYWJlbF9tZ3IKIAogZWNobyAmIzM0O1RFU1QgZGF0YXBhdGgmIzM0OwogLi9pbl9uZXRucy5zaCBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMKaW5kZXggYWY5NWI0OGFjZWE5MC4uMDcyZmIzYTliMTIxNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYwpAQCAtNiw0NSAmIzQzOzYsMzYgQEAKICNpbmNsdWRlICZsdDthcnBhL2luZXQuaCZndDsKICNpbmNsdWRlICZsdDtlcnJvci5oJmd0OwogI2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGltaXRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW42LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9pZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzY2hlZC5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGJvb2wuaCZndDsKICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwogI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvaW9jdGwuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvc29ja2V0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3N0YXQuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvdGltZS5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy90eXBlcy5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKIAogLyogdWFwaS9nbGliYyB3ZWlyZG5lc3MgbWF5IGxlYXZlIHRoaXMgdW5kZWZpbmVkICovCiAjaWZuZGVmIElQVjZfRkxPV0xBQkVMX01HUgogI2RlZmluZSBJUFY2X0ZMT1dMQUJFTF9NR1IJMzIKICNlbmRpZgomIzQzOyNpZm5kZWYgSVBWNl9GTE9XSU5GT19TRU5ECiYjNDM7I2RlZmluZSBJUFY2X0ZMT1dJTkZPX1NFTkQJMzMKJiM0MzsjZW5kaWYKIAogLyogZnJvbSBuZXQvaXB2Ni9pcDZfZmxvd2xhYmVsLmMgKi8KICNkZWZpbmUgRkxfTUlOX0xJTkdFUgkJNgogCi0jZGVmaW5lIGV4cGxhaW4oeCkJCQkJCQkJXAotCWRvIHsgaWYgKGNmZ192ZXJib3NlKSBmcHJpbnRmKHN0ZGVyciwgJiMzNDsgICAgICAgJiMzNDsgeCAmIzM0O1xuJiMzNDspOyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIF9fZXhwZWN0KHgpCQkJCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCWlmICghKHgpKQkJCQkJCVwKLQkJCWZwcmludGYoc3RkZXJyLCAmIzM0O1tPS10gICAmIzM0OyAjeCAmIzM0O1xuJiMzNDspOwkJXAotCQllbHNlCQkJCQkJCVwKLQkJCWVycm9yKDEsIDAsICYjMzQ7W0VSUl0gICYjMzQ7ICN4ICYjMzQ7IChsaW5lICVkKSYjMzQ7LCBfX0xJTkVfXyk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIGV4cGVjdF9wYXNzKHgpCV9fZXhwZWN0KHgpCi0jZGVmaW5lIGV4cGVjdF9mYWlsKHgpCV9fZXhwZWN0KCEoeCkpCi0KLXN0YXRpYyBib29sIGNmZ19sb25nX3J1bm5pbmc7Ci1zdGF0aWMgYm9vbCBjZmdfdmVyYm9zZTsKLQogc3RhdGljIGludCBmbG93bGFiZWxfZ2V0KGludCBmZCwgdWludDMyX3QgbGFiZWwsIHVpbnQ4X3Qgc2hhcmUsIHVpbnQxNl90IGZsYWdzKQogewogCXN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZXEgPSB7CkBAIC03MSwxMjkgJiM0Mzs2Miw0ODQgQEAgc3RhdGljIGludCBmbG93bGFiZWxfcHV0KGludCBmZCwgdWludDMyX3QgbGFiZWwpCiAJcmV0dXJuIHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsICZhbXA7cmVxLCBzaXplb2YocmVxKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ1bl90ZXN0cyhpbnQgZmQpCiYjNDM7c3RhdGljIGludCBmbG93bGFiZWxfcmVuZXcoaW50IGZkLCB1aW50MzJfdCBsYWJlbCwgdWludDhfdCBzaGFyZSwKJiM0MzsJCQkgICB1aW50MTZfdCBsaW5nZXIpCiB7Ci0JaW50IHdzdGF0dXM7Ci0JcGlkX3QgcGlkOwomIzQzOwlzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVxID0gewomIzQzOwkJLmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUkVORVcsCiYjNDM7CQkuZmxyX2xhYmVsID0gaHRvbmwobGFiZWwpLAomIzQzOwkJLmZscl9zaGFyZSA9IHNoYXJlLAomIzQzOwkJLmZscl9saW5nZXIgPSBsaW5nZXIsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBzZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCAmYW1wO3JlcSwgc2l6ZW9mKHJlcSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luNiBsb29wYmFja19hZGRyKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHIgPSB7CiYjNDM7CQkuc2luNl9mYW1pbHkJPSBBRl9JTkVUNiwKJiM0MzsJCS5zaW42X2FkZHIJPSBJTjZBRERSX0xPT1BCQUNLX0lOSVQsCiYjNDM7CQkuc2luNl9wb3J0CT0gaHRvbnMoODg4OCksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBhZGRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRjcF9saXN0ZW4odm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkciA9IGxvb3BiYWNrX2FkZHIoKTsKJiM0MzsJY29uc3QgaW50IG9uZSA9IDE7CiYjNDM7CWludCBmZDsKJiM0MzsKJiM0MzsJZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfU1RSRUFNLCAwKTsKJiM0MzsJaWYgKGZkID09IC0xKQomIzQzOwkJZXJyb3IoMSwgZXJybm8sICYjMzQ7c29ja2V0IGxpc3RlbmVyJiMzNDspOwomIzQzOwlpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAmYW1wO29uZSwgc2l6ZW9mKG9uZSkpKQomIzQzOwkJZXJyb3IoMSwgZXJybm8sICYjMzQ7c2V0c29ja29wdCBTT19SRVVTRUFERFImIzM0Oyk7CiYjNDM7CWlmIChiaW5kKGZkLCAodm9pZCAqKSZhbXA7YWRkciwgc2l6ZW9mKGFkZHIpKSkKJiM0MzsJCWVycm9yKDEsIGVycm5vLCAmIzM0O2JpbmQmIzM0Oyk7CiYjNDM7CWlmIChsaXN0ZW4oZmQsIDEpKQomIzQzOwkJZXJyb3IoMSwgZXJybm8sICYjMzQ7bGlzdGVuJiMzNDspOwomIzQzOwomIzQzOwlyZXR1cm4gZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRjcF9jb25uZWN0KGludCBsaXN0ZW5lciwgdWludDMyX3QgZmxvd2xhYmVsLAomIzQzOwkJCWludCAqY2xpZW50LCBpbnQgKmFjY2VwdGVkKQomIzQzO3sKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luNiBhZGRyID0gbG9vcGJhY2tfYWRkcigpOwomIzQzOwljb25zdCBpbnQgb25lID0gMTsKJiM0MzsJaW50IGNmZCwgYWZkOwomIzQzOwomIzQzOwljZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfU1RSRUFNLCAwKTsKJiM0MzsJaWYgKGNmZCA9PSAtMSkKJiM0MzsJCWVycm9yKDEsIGVycm5vLCAmIzM0O3NvY2tldCBjbGllbnQmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChmbG93bGFiZWxfZ2V0KGNmZCwgZmxvd2xhYmVsLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtmbG93bGFiZWxfZ2V0JiMzNDspOwomIzQzOwlpZiAoc2V0c29ja29wdChjZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dJTkZPX1NFTkQsICZhbXA7b25lLCBzaXplb2Yob25lKSkpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtzZXRzb2Nrb3B0IGZsb3dpbmZvX3NlbmQmIzM0Oyk7CiYjNDM7CWFkZHIuc2luNl9mbG93aW5mbyA9IGh0b25sKGZsb3dsYWJlbCk7CiYjNDM7CiYjNDM7CWlmIChjb25uZWN0KGNmZCwgKHZvaWQgKikmYW1wO2FkZHIsIHNpemVvZihhZGRyKSkpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtjb25uZWN0JiMzNDspOwomIzQzOwomIzQzOwlhZmQgPSBhY2NlcHQobGlzdGVuZXIsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoYWZkID09IC0xKQomIzQzOwkJZXJyb3IoMSwgZXJybm8sICYjMzQ7YWNjZXB0JiMzNDspOwomIzQzOwomIzQzOwlpZiAoZmxvd2xhYmVsX3B1dChjZmQsIGZsb3dsYWJlbCkpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtmbG93bGFiZWxfcHV0JiMzNDspOwomIzQzOwomIzQzOwkqY2xpZW50ID0gY2ZkOwomIzQzOwkqYWNjZXB0ZWQgPSBhZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnJpbmd1cF9sb29wYmFjayh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGlmcmVxIGlmciA9IHsKJiM0MzsJCS5pZnJfbmFtZSA9ICYjMzQ7bG8mIzM0OwomIzQzOwl9OwomIzQzOwlpbnQgZmQ7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KEFGX0xPQ0FMLCBTT0NLX1NUUkVBTSwgMCk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWlmIChpb2N0bChmZCwgU0lPQ0dJRkZMQUdTLCAmYW1wO2lmcikgJmx0OyAwKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWlmci5pZnJfZmxhZ3MgPSBpZnIuaWZyX2ZsYWdzIHwgSUZGX1VQOwomIzQzOwomIzQzOwlpZiAoaW9jdGwoZmQsIFNJT0NTSUZGTEFHUywgJmFtcDtpZnIpICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CXJldHVybiAwOwogCi0JZXhwbGFpbigmIzM0O2Nhbm5vdCBnZXQgbm9uLWV4aXN0ZW50IGxhYmVsJiMzNDspOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApKTsKLQotCWV4cGxhaW4oJiMzNDtjYW5ub3QgcHV0IG5vbi1leGlzdGVudCBsYWJlbCYjMzQ7KTsKLQlleHBlY3RfZmFpbChmbG93bGFiZWxfcHV0KGZkLCAxKSk7Ci0KLQlleHBsYWluKCYjMzQ7Y2Fubm90IGNyZWF0ZSBsYWJlbCBncmVhdGVyIHRoYW4gMjAgYml0cyYjMzQ7KTsKLQlleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAweDFGRkZGRiwgSVBWNl9GTF9TX0FOWSwKLQkJCQkgIElQVjZfRkxfRl9DUkVBVEUpKTsKLQotCWV4cGxhaW4oJiMzNDtjcmVhdGUgYSBuZXcgbGFiZWwgKEZMX0ZfQ1JFQVRFKSYjMzQ7KTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0JZXhwbGFpbigmIzM0O2NhbiBnZXQgdGhlIGxhYmVsICh3aXRob3V0IEZMX0ZfQ1JFQVRFKSYjMzQ7KTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKSk7Ci0JZXhwbGFpbigmIzM0O2NhbiBnZXQgaXQgYWdhaW4gd2l0aCBjcmVhdGUgZmxhZyBzZXQsIHRvbyYjMzQ7KTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0JZXhwbGFpbigmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gd2l0aCB0aGUgZXhjbHVzaXZlIChGTF9GTF9FWENMKSBmbGFnJiMzNDspOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksCi0JCQkJCSBJUFY2X0ZMX0ZfQ1JFQVRFIHwgSVBWNl9GTF9GX0VYQ0wpKTsKLQlleHBsYWluKCYjMzQ7Y2FuIG5vdyBwdXQgZXhhY3RseSB0aHJlZSByZWZlcmVuY2VzJiMzNDspOwotCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAxKSk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTsKLQotCWV4cGxhaW4oJiMzNDtjcmVhdGUgYSBuZXcgZXhjbHVzaXZlIGxhYmVsIChGTF9TX0VYQ0wpJiMzNDspOwotCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0JZXhwbGFpbigmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlJiMzNDspOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0JZXhwbGFpbigmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gZXhjbHVzaXZlIG1vZGUgZWl0aGVyJiMzNDspOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMikpOwotCi0JaWYgKGNmZ19sb25nX3J1bm5pbmcpIHsKLQkJZXhwbGFpbigmIzM0O2Nhbm5vdCByZXVzZSB0aGUgbGFiZWwsIGR1ZSB0byBsaW5nZXImIzM0Oyk7Ci0JCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksCi0JCQkJCSAgSVBWNl9GTF9GX0NSRUFURSkpOwotCQlleHBsYWluKCYjMzQ7YWZ0ZXIgc2xlZXAsIGNhbiByZXVzZSYjMzQ7KTsKLQkJc2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSk7Ci0JCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksCi0JCQkJCSAgSVBWNl9GTF9GX0NSRUFURSkpOwomIzQzO2VycjoKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlyZXR1cm4gLTE7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkUoZmxvd2xhYmVsKSB7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKGZsb3dsYWJlbCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHVuc2hhcmUoQ0xPTkVfTkVXTkVUKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgMCkgewomIzQzOwkJVEhfTE9HKCYjMzQ7dW5zaGFyZShDTE9ORV9ORVdORVQpIGZhaWxlZDogJXMmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKIAl9CiAKLQlleHBsYWluKCYjMzQ7Y3JlYXRlIGEgbmV3IHVzZXItcHJpdmF0ZSBsYWJlbCAoRkxfU19VU0VSKSYjMzQ7KTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgSVBWNl9GTF9GX0NSRUFURSkpOwotCWV4cGxhaW4oJiMzNDtjYW5ub3QgZ2V0IGl0IGFnYWluIGluIG5vbi1leGNsdXNpdmUgbW9kZSYjMzQ7KTsKLQlleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfQU5ZLCAwKSk7Ci0JZXhwbGFpbigmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gZXhjbHVzaXZlIG1vZGUmIzM0Oyk7Ci0JZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0VYQ0wsIDApKTsKLQlleHBsYWluKCYjMzQ7Y2FuIGdldCBpdCBhZ2FpbiBpbiB1c2VyIG1vZGUmIzM0Oyk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKTsKLQlleHBsYWluKCYjMzQ7Y2hpbGQgcHJvY2VzcyBjYW4gZ2V0IGl0IHRvbywgYnV0IG5vdCBhZnRlciBzZXR1aWQobm9ib2R5KSYjMzQ7KTsKJiM0MzsJcmV0ID0gYnJpbmd1cF9sb29wYmFjaygpOwomIzQzOwlBU1NFUlRfRVEocmV0LCAwKSBUSF9MT0coJiMzNDtGYWlsZWQgdG8gYnJpbmcgdXAgbG9vcGJhY2sgaW50ZXJmYWNlJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFX1RFQVJET1dOKGZsb3dsYWJlbCkKJiM0Mzt7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihmbG93bGFiZWwsIGNhbm5vdF9nZXRfbm9uX2V4aXN0ZW50X2xhYmVsKQomIzQzO3sKJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA5LCBJUFY2X0ZMX1NfQU5ZLCAwKTsKJiM0MzsJRVhQRUNUX1RSVUUoZXJyKSBUSF9MT0coJiMzNDtleHBlY3RlZCBnZXQgb2YgYSBub24tZXhpc3RlbnQgbGFiZWwgdG8gZmFpbCYjMzQ7KTsKJiM0MzsJRVhQRUNUX0VRKEVOT0VOVCwgZXJybm8pIFRIX0xPRygmIzM0O2V4cGVjdGVkIEVOT0VOVCwgZ290ICVkJiMzNDssIGVycm5vKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihmbG93bGFiZWwsIGNhbm5vdF9wdXRfbm9uX2V4aXN0ZW50X2xhYmVsKQomIzQzO3sKJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxMCk7CiYjNDM7CUVYUEVDVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgcHV0IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWwmIzM0Oyk7CiYjNDM7CUVYUEVDVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRygmIzM0O2V4cGVjdGVkIEVTUkNILCBnb3QgJWQmIzM0OywgZXJybm8pOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGZsb3dsYWJlbCwgY2Fubm90X2NyZWF0ZV9sYWJlbF9ncmVhdGVyX3RoYW5fMjBfYml0cykKJiM0Mzt7CiYjNDM7CWludCBmZCwgZXJyOwomIzQzOwomIzQzOwlmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CiYjNDM7CUFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKCYjMzQ7c29ja2V0IGZhaWxlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMHgxRkZGRkYsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIGxhYmVsICZndDsgMjAgYml0cyB0byBiZSByZWplY3RlZCYjMzQ7KTsKJiM0MzsJRVhQRUNUX0VRKEVJTlZBTCwgZXJybm8pIFRIX0xPRygmIzM0O2V4cGVjdGVkIEVJTlZBTCwgZ290ICVkJiMzNDssIGVycm5vKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihmbG93bGFiZWwsIGNhbl9jcmVhdGVfYW5kX2dldF9hbmRfcHV0X2xhYmVscykKJiM0Mzt7CiYjNDM7CWludCBmZCwgZXJyOwomIzQzOwomIzQzOwlmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CiYjNDM7CUFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKCYjMzQ7c29ja2V0IGZhaWxlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBjcmVhdGUgbGFiZWwgKEZMX0ZfQ1JFQVRFKSYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgMCk7CiYjNDM7CUVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBnZXQgdGhlIGxhYmVsIHdpdGhvdXQgRkxfRl9DUkVBVEUmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlFWFBFQ1RfVFJVRSghZXJyKQomIzQzOwkJVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLAomIzQzOwkJCSAgICBJUFY2X0ZMX0ZfQ1JFQVRFIHwgSVBWNl9GTF9GX0VYQ0wpOwomIzQzOwlFWFBFQ1RfVFJVRShlcnIpCiYjNDM7CQlUSF9MT0coJiMzNDtleHBlY3RlZCBGTF9GX0VYQ0wgdG8gcmVqZWN0IGV4aXN0aW5nIGxhYmVsJiMzNDspOwomIzQzOwlFWFBFQ1RfRVEoRUVYSVNULCBlcnJubykgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgRUVYSVNULCBnb3QgJWQmIzM0OywgZXJybm8pOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTsKJiM0MzsJRVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIHB1dCBmaXJzdCByZWZlcmVuY2UmIzM0Oyk7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpOwomIzQzOwlFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gcHV0IHNlY29uZCByZWZlcmVuY2UmIzM0Oyk7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpOwomIzQzOwlFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gcHV0IHRoaXJkIHJlZmVyZW5jZSYjMzQ7KTsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7CiYjNDM7CUVYUEVDVF9UUlVFKGVycikKJiM0MzsJCVRIX0xPRygmIzM0O2V4cGVjdGVkIGZvdXJ0aCBwdXQgdG8gZmFpbCwgbm8gcmVmZXJlbmNlcyBsZWZ0JiMzNDspOwomIzQzOwlFWFBFQ1RfRVEoRVNSQ0gsIGVycm5vKSBUSF9MT0coJiMzNDtleHBlY3RlZCBFU1JDSCwgZ290ICVkJiMzNDssIGVycm5vKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihmbG93bGFiZWwsIGV4Y2x1c2l2ZV9sYWJlbF9zaGFyZSkKJiM0Mzt7CiYjNDM7CWludCBmZCwgZXJyOwomIzQzOwomIzQzOwlmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CiYjNDM7CUFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKCYjMzQ7c29ja2V0IGZhaWxlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlFWFBFQ1RfVFJVRSghZXJyKQomIzQzOwkJVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBleGNsdXNpdmUgbGFiZWwgKEZMX1NfRVhDTCkmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIHJldXNlIGluIG5vbi1leGNsdXNpdmUgbW9kZSB0byBmYWlsJiMzNDspOwomIzQzOwlFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkJiMzNDssIGVycm5vKTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIHJldXNlIGluIGV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWwgdG9vJiMzNDspOwomIzQzOwlFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkJiMzNDssIGVycm5vKTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMik7CiYjNDM7CUVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBwdXQgdGhlIGV4Y2x1c2l2ZSBsYWJlbCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUVYUEVDVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgZHVlIHRvIGxpbmdlciYjMzQ7KTsKJiM0MzsJRVhQRUNUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZCYjMzQ7LCBlcnJubyk7CiYjNDM7CiYjNDM7CXNsZWVwKEZMX01JTl9MSU5HRVIgKiAyICYjNDM7IDEpOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTsKJiM0MzsJRVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgcmV1c2UgdG8gc3VjY2VlZCBhZnRlciBsaW5nZXImIzM0Oyk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUSgwLCBjbG9zZShmZCkpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoZmxvd2xhYmVsLCB1c2VyX3ByaXZhdGVfbGFiZWxfc2hhcmUpCiYjNDM7ewomIzQzOwlpbnQgZmQsIGVyciwgd3N0YXR1czsKJiM0MzsJcGlkX3QgcGlkOwomIzQzOwomIzQzOwlmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CiYjNDM7CUFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKCYjMzQ7c29ja2V0IGZhaWxlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlFWFBFQ1RfVFJVRSghZXJyKQomIzQzOwkJVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyB1c2VyLXByaXZhdGUgbGFiZWwgKEZMX1NfVVNFUikmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19BTlksIDApOwomIzQzOwlFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIGdldCBpbiBub24tZXhjbHVzaXZlIG1vZGUgdG8gZmFpbCYjMzQ7KTsKJiM0MzsJRVhQRUNUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZCYjMzQ7LCBlcnJubyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19FWENMLCAwKTsKJiM0MzsJRVhQRUNUX1RSVUUoZXJyKSBUSF9MT0coJiMzNDtleHBlY3RlZCBnZXQgaW4gZXhjbHVzaXZlIG1vZGUgdG8gZmFpbCYjMzQ7KTsKJiM0MzsJRVhQRUNUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZCYjMzQ7LCBlcnJubyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTsKJiM0MzsJRVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiBpbiB1c2VyIG1vZGUmIzM0Oyk7CiYjNDM7CiAJcGlkID0gZm9yaygpOwotCWlmIChwaWQgPT0gLTEpCi0JCWVycm9yKDEsIGVycm5vLCAmIzM0O2ZvcmsmIzM0Oyk7CiYjNDM7CUFTU0VSVF9ORSgtMSwgcGlkKSBUSF9MT0coJiMzNDtmb3JrIGZhaWxlZCYjMzQ7KTsKIAlpZiAoIXBpZCkgewotCQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpOwomIzQzOwkJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApOwomIzQzOwkJRVhQRUNUX1RSVUUoIWVycikKJiM0MzsJCQlUSF9MT0coJiMzNDtjaGlsZCBmYWlsZWQgdG8gZ2V0IHRoZSB1c2VyLXByaXZhdGUgbGFiZWwmIzM0Oyk7CiYjNDM7CiAJCWlmIChzZXR1aWQoVVNIUlRfTUFYKSkKLQkJCWZwcmludGYoc3RkZXJyLCAmIzM0O1tJTkZPXSBza2lwIHNldHVpZCBjaGlsZCB0ZXN0XG4mIzM0Oyk7Ci0JCWVsc2UKLQkJCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7CiYjNDM7CQkJZXhpdChLU0ZUX1NLSVApOwomIzQzOwomIzQzOwkJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApOwomIzQzOwkJRVhQRUNUX1RSVUUoZXJyKQomIzQzOwkJCVRIX0xPRygmIzM0O2NoaWxkIHVuZXhwZWN0ZWRseSBnb3QgbGFiZWwgYWZ0ZXIgc2V0dWlkJiMzNDspOwomIzQzOwkJRVhQRUNUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZCYjMzQ7LCBlcnJubyk7CiAJCWV4aXQoMCk7CiAJfQotCWlmICh3YWl0KCZhbXA7d3N0YXR1cykgPT0gLTEpCi0JCWVycm9yKDEsIGVycm5vLCAmIzM0O3dhaXQmIzM0Oyk7Ci0JaWYgKCFXSUZFWElURUQod3N0YXR1cykgfHwgV0VYSVRTVEFUVVMod3N0YXR1cykgIT0gMCkKLQkJZXJyb3IoMSwgZXJybm8sICYjMzQ7d2FpdDogdW5leHBlY3RlZCBjaGlsZCByZXN1bHQmIzM0Oyk7Ci0KLQlleHBsYWluKCYjMzQ7Y3JlYXRlIGEgbmV3IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbCAoRkxfU19QUk9DRVNTKSYjMzQ7KTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgSVBWNl9GTF9GX0NSRUFURSkpOwotCWV4cGxhaW4oJiMzNDtjYW4gZ2V0IGl0IGFnYWluJiMzNDspOwotCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7Ci0JZXhwbGFpbigmIzM0O2NoaWxkIHByb2Nlc3MgY2Fubm90IGNhbiBnZXQgaXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShwaWQsIHdhaXQoJmFtcDt3c3RhdHVzKSkgVEhfTE9HKCYjMzQ7d2FpdCBmYWlsZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9UUlVFKFdJRkVYSVRFRCh3c3RhdHVzKSkgVEhfTE9HKCYjMzQ7Y2hpbGQgZGlkIG5vdCBleGl0IG5vcm1hbGx5JiMzNDspOwomIzQzOwlpZiAoV0VYSVRTVEFUVVMod3N0YXR1cykgPT0gS1NGVF9TS0lQKQomIzQzOwkJU0tJUChyZXR1cm4sCiYjNDM7CQkgICAgICYjMzQ7c2V0dWlkKFVTSFJUX01BWCkgdW5hdmFpbGFibGUgKG5vIENBUF9TRVRVSUQgb3IgdWlkIHVubWFwcGVkKSYjMzQ7KTsKJiM0MzsJRVhQRUNUX0VRKDAsIFdFWElUU1RBVFVTKHdzdGF0dXMpKQomIzQzOwkJVEhfTE9HKCYjMzQ7Y2hpbGQgcmVwb3J0ZWQgdW5leHBlY3RlZCByZXN1bHQmIzM0Oyk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUSgwLCBjbG9zZShmZCkpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoZmxvd2xhYmVsLCBwcm9jZXNzX3ByaXZhdGVfbGFiZWxfc2hhcmUpCiYjNDM7ewomIzQzOwlpbnQgZmQsIGVyciwgd3N0YXR1czsKJiM0MzsJcGlkX3QgcGlkOwomIzQzOwomIzQzOwlmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CiYjNDM7CUFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKCYjMzQ7c29ja2V0IGZhaWxlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlFWFBFQ1RfVFJVRSghZXJyKQomIzQzOwkJVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBwcm9jZXNzLXByaXZhdGUgbGFiZWwmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKTsKJiM0MzsJRVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiYjMzQ7KTsKJiM0MzsKIAlwaWQgPSBmb3JrKCk7Ci0JaWYgKHBpZCA9PSAtMSkKLQkJZXJyb3IoMSwgZXJybm8sICYjMzQ7Zm9yayYjMzQ7KTsKJiM0MzsJQVNTRVJUX05FKC0xLCBwaWQpIFRIX0xPRygmIzM0O2ZvcmsgZmFpbGVkJiMzNDspOwogCWlmICghcGlkKSB7Ci0JCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7CiYjNDM7CQllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCk7CiYjNDM7CQlFWFBFQ1RfVFJVRShlcnIpCiYjNDM7CQkJVEhfTE9HKCYjMzQ7Y2hpbGQgdW5leHBlY3RlZGx5IGdvdCBwcm9jZXNzLXByaXZhdGUgbGFiZWwmIzM0Oyk7CiYjNDM7CQlFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkJiMzNDssIGVycm5vKTsKIAkJZXhpdCgwKTsKIAl9Ci0JaWYgKHdhaXQoJmFtcDt3c3RhdHVzKSA9PSAtMSkKLQkJZXJyb3IoMSwgZXJybm8sICYjMzQ7d2FpdCYjMzQ7KTsKLQlpZiAoIVdJRkVYSVRFRCh3c3RhdHVzKSB8fCBXRVhJVFNUQVRVUyh3c3RhdHVzKSAhPSAwKQotCQllcnJvcigxLCBlcnJubywgJiMzNDt3YWl0OiB1bmV4cGVjdGVkIGNoaWxkIHJlc3VsdCYjMzQ7KTsKLX0KLQotc3RhdGljIHZvaWQgcGFyc2Vfb3B0cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0JaW50IGM7Ci0KLQl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgJiMzNDtsdiYjMzQ7KSkgIT0gLTEpIHsKLQkJc3dpdGNoIChjKSB7Ci0JCWNhc2UgJiMzOTtsJiMzOTs6Ci0JCQljZmdfbG9uZ19ydW5uaW5nID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQljYXNlICYjMzk7diYjMzk7OgotCQkJY2ZnX3ZlcmJvc2UgPSB0cnVlOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQllcnJvcigxLCAwLCAmIzM0OyVzOiBwYXJzZSBlcnJvciYjMzQ7LCBhcmd2WzBdKTsKLQkJfQotCX0KJiM0MzsJQVNTRVJUX0VRKHBpZCwgd2FpdCgmYW1wO3dzdGF0dXMpKSBUSF9MT0coJiMzNDt3YWl0IGZhaWxlZCYjMzQ7KTsKJiM0MzsJQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHdzdGF0dXMpKSBUSF9MT0coJiMzNDtjaGlsZCBkaWQgbm90IGV4aXQgbm9ybWFsbHkmIzM0Oyk7CiYjNDM7CUVYUEVDVF9FUSgwLCBXRVhJVFNUQVRVUyh3c3RhdHVzKSkKJiM0MzsJCVRIX0xPRygmIzM0O2NoaWxkIHJlcG9ydGVkIHVuZXhwZWN0ZWQgcmVzdWx0JiMzNDspOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQomIzQzO1RFU1RfRihmbG93bGFiZWwsIGNhbm5vdF9yZW5ld19ub25fZXhpc3RlbnRfbGFiZWwpCiB7Ci0JaW50IGZkOwomIzQzOwlpbnQgZmQsIGVycjsKJiM0MzsKJiM0MzsJZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApIFRIX0xPRygmIzM0O3NvY2tldCBmYWlsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNSwgSVBWNl9GTF9TX0VYQ0wsCiYjNDM7CQkJICAgICAgMiAqIChGTF9NSU5fTElOR0VSICogMiAmIzQzOyAxKSk7CiYjNDM7CUVYUEVDVF9UUlVFKGVycikKJiM0MzsJCVRIX0xPRygmIzM0O2V4cGVjdGVkIHJlbmV3IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWwmIzM0Oyk7CiYjNDM7CUVYUEVDVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRygmIzM0O2V4cGVjdGVkIEVTUkNILCBnb3QgJWQmIzM0OywgZXJybm8pOwogCi0JcGFyc2Vfb3B0cyhhcmdjLCBhcmd2KTsKJiM0MzsJRVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihmbG93bGFiZWwsIGNhbl9yZW5ld19leGlzdGluZ19sYWJlbCkKJiM0Mzt7CiYjNDM7CWludCBmZCwgZXJyOwogCiAJZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApIFRIX0xPRygmIzM0O3NvY2tldCBmYWlsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDUsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKTsKJiM0MzsJRVhQRUNUX1RSVUUoIWVycikKJiM0MzsJCVRIX0xPRygmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgbGFiZWwgZm9yIHJlbmV3IHZhbGlkYXRpb24mIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNSwgSVBWNl9GTF9TX0VYQ0wsCiYjNDM7CQkJICAgICAgMiAqIChGTF9NSU5fTElOR0VSICogMiAmIzQzOyAxKSk7CiYjNDM7CUVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byByZW5ldyBhbiBleGlzdGluZyB2YWxpZCBsYWJlbCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgNSk7CiYjNDM7CUVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBwdXQgdGhlIGxhYmVsJiMzNDspOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGZsb3dsYWJlbCwgcmVuZXdfbGFiZWxfbGluZ2VyKQomIzQzO3sKJiM0MzsJLyogUkVORVcgbXVzdCBleHRlbmQgYSBsYWJlbCYjMzk7cyBsaW5nZXIgcGVyaW9kOiBwdXR0aW5nIGEgcmVuZXdlZAomIzQzOwkgKiBsYWJlbCBhbmQgd2FpdGluZyBvdXQgaXRzIG9yaWdpbmFsIGxpbmdlciB0aW1lIG11c3Qgbm90IGJlCiYjNDM7CSAqIGVub3VnaCB0byBhbGxvdyB0aGUgbGFiZWwgdG8gYmUgcmVjcmVhdGVkLgomIzQzOwkgKi8KJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA2LCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUVYUEVDVF9UUlVFKCFlcnIpCiYjNDM7CQlUSF9MT0coJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGxhYmVsIHdpdGggRkxfTUlOX0xJTkdFUiBsaW5nZXIgdGltZSYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX3JlbmV3KGZkLCA2LCBJUFY2X0ZMX1NfRVhDTCwKJiM0MzsJCQkgICAgICAyICogKEZMX01JTl9MSU5HRVIgKiAyICYjNDM7IDEpKTsKJiM0MzsJRVhQRUNUX1RSVUUoIWVycikKJiM0MzsJCVRIX0xPRygmIzM0O2ZhaWxlZCB0byByZW5ldyB0aGUgbGFiZWwgdG8gaW5jcmVhc2UgaXRzIGxpbmdlciB0aW1lJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcHV0KGZkLCA2KTsKJiM0MzsJRVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIHB1dCB0aGUgbGFiZWwmIzM0Oyk7CiYjNDM7CiYjNDM7CXNsZWVwKEZMX01JTl9MSU5HRVIgKiAyICYjNDM7IDEpOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA2LCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTsKJiM0MzsJRVhQRUNUX1RSVUUoZXJyKQomIzQzOwkJVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgbmV3IGxpbmdlciB0aW1lIG5vdCBvdmVyIHlldCYjMzQ7KTsKJiM0MzsJRVhQRUNUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZCYjMzQ7LCBlcnJubyk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUSgwLCBjbG9zZShmZCkpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoZmxvd2xhYmVsLCByZW1vdGVfZmxhZykKJiM0Mzt7CiYjNDM7CS8qIFRoZSBSRU1PVEUgZmxhZywgdXNlZCBmb3IgZ2V0c29ja29wdCwgaXMgZXhwZWN0ZWQgdG8gcmV0cmlldmUgdGhlCiYjNDM7CSAqIGxhYmVsIGZyb20gdGhlIGxhdGVzdCByZWNlaXZlZCBoZWFkZXIuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgZnJlcSA9IHsKJiM0MzsJCS5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCwKJiM0MzsJCS5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVNT1RFLAomIzQzOwl9OwomIzQzOwlzb2NrbGVuX3QgZnJlcV9sZW4gPSBzaXplb2YoZnJlcSk7CiYjNDM7CWludCBsaXN0ZW5lciwgY2ZkLCBhZmQsIGVycjsKJiM0MzsKJiM0MzsJbGlzdGVuZXIgPSB0Y3BfbGlzdGVuKCk7CiYjNDM7CXRjcF9jb25uZWN0KGxpc3RlbmVyLCA3LCAmYW1wO2NmZCwgJmFtcDthZmQpOwomIzQzOwomIzQzOwllcnIgPSBnZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgJmFtcDtmcmVxLCAmYW1wO2ZyZXFfbGVuKTsKJiM0MzsJRVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7Z2V0c29ja29wdCB3aXRoIElQVjZfRkxfRl9SRU1PVEUgZmFpbGVkJiMzNDspOwomIzQzOwlFWFBFQ1RfRVEoNywgbnRvaGwoZnJlcS5mbHJfbGFiZWwpKQomIzQzOwkJVEhfTE9HKCYjMzQ7dW5leHBlY3RlZCByZW1vdGUgZmxvdyBsYWJlbCYjMzQ7KTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKDAsIGNsb3NlKGFmZCkpOwomIzQzOwlFWFBFQ1RfRVEoMCwgY2xvc2UoY2ZkKSk7CiYjNDM7CUVYUEVDVF9FUSgwLCBjbG9zZShsaXN0ZW5lcikpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBkaXNhYmxlX2Zsb3dsYWJlbF9jb25zaXN0ZW5jeSh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjYvZmxvd2xhYmVsX2NvbnNpc3RlbmN5JiMzNDssIE9fV1JPTkxZKTsKIAlpZiAoZmQgPT0gLTEpCi0JCWVycm9yKDEsIGVycm5vLCAmIzM0O3NvY2tldCYjMzQ7KTsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAotCXJ1bl90ZXN0cyhmZCk7CiYjNDM7CWlmICh3cml0ZShmZCwgJiMzNDswJiMzNDssIDEpICE9IDEpIHsKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwljbG9zZShmZCk7CiAKLQlpZiAoY2xvc2UoZmQpKQotCQllcnJvcigxLCBlcnJubywgJiMzNDtjbG9zZSYjMzQ7KTsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQogCi0JcmV0dXJuIDA7CiYjNDM7VEVTVF9GKGZsb3dsYWJlbCwgcmVmbGVjdF9mbGFnKQomIzQzO3sKJiM0MzsJLyogVGhlIFJFRkxFQ1QgZmxhZyBhY3RzIGFzIGEgdHJpZ2dlciB0byB0aGUgUkVQRkxPVyBiaXQuIFdoZW4gUkVQRkxPVwomIzQzOwkgKiBpcyB0cmlnZ2VyZWQgZm9yIGEgc29ja2V0LCBpdCBhZG9wdHMgdGhlIGxhYmVsIHJlY2VpdmVkIGZyb20gdGhlCiYjNDM7CSAqIGNvbm5lY3RlZCBzb2NrZXQuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9vbiA9IHsKJiM0MzsJCS5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCwKJiM0MzsJCS5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVGTEVDVCwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlZmxlY3RfcXVlcnkgPSB7CiYjNDM7CQkuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZWZsZWN0X29mZiA9IHsKJiM0MzsJCS5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX1BVVCwKJiM0MzsJCS5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVGTEVDVCwKJiM0MzsJfTsKJiM0MzsJc29ja2xlbl90IHJlZmxlY3RfcXVlcnlfbGVuID0gc2l6ZW9mKHJlZmxlY3RfcXVlcnkpOwomIzQzOwlpbnQgbGlzdGVuZXIsIGNmZCwgYWZkLCBlcnI7CiYjNDM7CiYjNDM7CWlmICghZGlzYWJsZV9mbG93bGFiZWxfY29uc2lzdGVuY3koKSkKJiM0MzsJCVNLSVAocmV0dXJuLAomIzQzOwkJICAgICAmIzM0O2Nhbm5vdCBkaXNhYmxlIG5ldC5pcHY2LmZsb3dsYWJlbF9jb25zaXN0ZW5jeSYjMzQ7KTsKJiM0MzsKJiM0MzsJbGlzdGVuZXIgPSB0Y3BfbGlzdGVuKCk7CiYjNDM7CWVyciA9IHNldHNvY2tvcHQobGlzdGVuZXIsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsCiYjNDM7CQkJICZhbXA7cmVmbGVjdF9vbiwgc2l6ZW9mKHJlZmxlY3Rfb24pKTsKJiM0MzsJRVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBSRUZMRUNUIG9uIHRoZSBsaXN0ZW5lciYjMzQ7KTsKJiM0MzsKJiM0MzsJdGNwX2Nvbm5lY3QobGlzdGVuZXIsIDgsICZhbXA7Y2ZkLCAmYW1wO2FmZCk7CiYjNDM7CiYjNDM7CWVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLAomIzQzOwkJCSAmYW1wO3JlZmxlY3RfcXVlcnksICZhbXA7cmVmbGVjdF9xdWVyeV9sZW4pOwomIzQzOwlFWFBFQ1RfVFJVRSghZXJyKQomIzQzOwkJVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIHF1ZXJ5IHRoZSBhY2NlcHRlZCBzb2NrZXQmIzM5O3Mgb3V0Z29pbmcgbGFiZWwmIzM0Oyk7CiYjNDM7CUVYUEVDVF9FUSg4LCBudG9obChyZWZsZWN0X3F1ZXJ5LmZscl9sYWJlbCkpCiYjNDM7CQlUSF9MT0coJiMzNDthY2NlcHRlZCBzb2NrZXQgZGlkIG5vdCByZWZsZWN0IGNsaWVudCYjMzk7cyBsYWJlbCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gc2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsCiYjNDM7CQkJICZhbXA7cmVmbGVjdF9vZmYsIHNpemVvZihyZWZsZWN0X29mZikpOwomIzQzOwlFWFBFQ1RfVFJVRSghZXJyKQomIzQzOwkJVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGRpc2FibGUgUkVGTEVDVCBvbiB0aGUgYWNjZXB0ZWQgc29ja2V0JiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBzZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwKJiM0MzsJCQkgJmFtcDtyZWZsZWN0X29mZiwgc2l6ZW9mKHJlZmxlY3Rfb2ZmKSk7CiYjNDM7CUVYUEVDVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgZGlzYWJsaW5nIFJFRkxFQ1QgdHdpY2UgdG8gZmFpbCYjMzQ7KTsKJiM0MzsJRVhQRUNUX0VRKEVTUkNILCBlcnJubykgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgRVNSQ0gsIGdvdCAlZCYjMzQ7LCBlcnJubyk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUSgwLCBjbG9zZShhZmQpKTsKJiM0MzsJRVhQRUNUX0VRKDAsIGNsb3NlKGNmZCkpOwomIzQzOwlFWFBFQ1RfRVEoMCwgY2xvc2UobGlzdGVuZXIpKTsKIH0KJiM0MzsKJiM0MztURVNUX0hBUk5FU1NfTUFJTgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE4MQoJCQkJCQkJb3V0cHV0OiA5NAoJCQkJCQkJdGhvdWdodHM6IDY2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IElQdjYgRmxvdyBMYWJlbCBTZWxmdGVzdCBQYXRjaCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0htbSwgYGlwdjZfZmxvd2xhYmVsLnNoYCBhbmQgYGlwdjZfZmxvd2xhYmVsX21nci5jYCBhcmUgYmVpbmcgdG91Y2hlZC4mIzM0OyAgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBtZWFucyB3ZSBzaG91bGQgZnV6eiBiYXNlZCBvbiB0aGlzLCBvciBub3QuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSByZXdyaXRpbmcgdGhlIGBpcHY2X2Zsb3dsYWJlbF9tZ3IuY2AgdGVzdCB1c2luZyBga3NlbGZ0ZXN0X2hhcm5lc3MuaGAgYW5kIHJlbW92aW5nIHRoYXQgYGluX25ldG5zLnNoYCB3cmFwcGVyLCBzaW5jZSBpdCYjMzk7cyBub3cgaGFuZGxpbmcgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIHVuc2hhcmluZyBpdHNlbGYuCgpGaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBpZiBrZXJuZWwgY29kZSBpcyBjaGFuZ2VkLiBMZXQmIzM5O3Mgc2VlLi4uICBOb3BlLCB0aGUgZGlmZiBpcyBvbmx5IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWwuc2hgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jYC4gTm90aGluZyBpbiB0aGUgY29yZSBrZXJuZWwuCgpUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBUaGV5IGxpc3QgdGhpbmdzIGxpa2UgZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgdW5yZWFjaGFibGUgY29kZSwgZXRjLiAgSXQgZG9lc24mIzM5O3QgKmV4cGxpY2l0bHkqIG1lbnRpb24gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AsIGJ1dCBjb21tb24gc2Vuc2UgdGVsbHMgbWUgc2VsZnRlc3RzIGFyZSAqdXNlcnNwYWNlKiB0ZXN0cywgbm90IGtlcm5lbCBjb2RlLiBUaGV5IGRvbiYjMzk7dCBhZmZlY3QgdGhlIGtlcm5lbCYjMzk7cyBleGVjdXRpb24gZmxvdyBkaXJlY3RseS4gIEEgY2hhbmdlIHRvIGEgdGVzdCBkb2VzbiYjMzk7dCBtZWFuIHdlIG5lZWQgdG8gZnV6eiB0aGUga2VybmVsIGl0c2VsZi4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTttIHF1aWNrbHkgY29uZmlybWluZyB0aGVyZSBhcmUgKm5vKiBvdGhlciBmaWxlcyBjaGFuZ2VkLiBOb3BlLCBqdXN0IHRob3NlIHR3by4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpcyBhIG5vLWdvIGZvciBmdXp6aW5nLiBJdCYjMzk7cyBzdHJpY3RseSBhYm91dCBtb2RpZnlpbmcgdGhlIHNlbGZ0ZXN0cywgc3BlY2lmaWNhbGx5IHRvIHVzZSBhIGRpZmZlcmVudCB0ZXN0aW5nIGZyYW1ld29yay4gSXQgZG9lcyAqbm90KiBtb2RpZnkgYW55IGtlcm5lbCBjb2RlIG9yIGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLgoKTXkgY29uY2x1c2lvbiBpczogYFdvcnRoRnV6emluZz1mYWxzZWAuIFRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jIGFuZCBpcHY2X2Zsb3dsYWJlbC5zaCkgYnkgcmV3cml0aW5nIHRoZSB0ZXN0IHRvIHVzZSB0aGUga3NlbGZ0ZXN0IGhhcm5lc3MuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMgYW5kIGlwdjZfZmxvd2xhYmVsLnNoKSBieSByZXdyaXRpbmcgdGhlIHRlc3QgdG8gdXNlIHRoZSBrc2VsZnRlc3QgaGFybmVzcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjo1NjowMy4xOTIyMDM2MTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTcyOTk0MjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMgYW5kIGlwdjZfZmxvd2xhYmVsLnNoKSBieSByZXdyaXRpbmcgdGhlIHRlc3QgdG8gdXNlIHRoZSBrc2VsZnRlc3QgaGFybmVzcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjo1NjowMy4xOTIyMDkxMzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMDg3MzgzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMxODY2NTcxZmJiY2NmYmRhMDZjOTk1NGVhN2FjOTJkNzk3MDQxN2NcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAyMjo1NjowMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWwuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWwuc2hcXG5pbmRleCBjZWU5NWUyNTJiZWU1Li4yZWVkYTM5YmY2NGNiIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaFxcbkBAIC04LDcgKzgsNyBAQFxcbiBzZXQgLWVcXG4gXFxuIGVjaG8gXFxcIlRFU1QgbWFuYWdlbWVudFxcXCJcXG4tLi9pbl9uZXRucy5zaCAuL2lwdjZfZmxvd2xhYmVsX21nclxcbisuL2lwdjZfZmxvd2xhYmVsX21nclxcbiBcXG4gZWNobyBcXFwiVEVTVCBkYXRhcGF0aFxcXCJcXG4gLi9pbl9uZXRucy5zaCBcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuY1xcbmluZGV4IGFmOTViNDhhY2VhOTAuLjA3MmZiM2E5YjEyMTcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jXFxuQEAgLTYsNDUgKzYsMzYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FycGEvaW5ldC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjZXJyb3IuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGltaXRzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbjYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9pZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc2NoZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRpbnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvaW9jdGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9zb2NrZXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9zdGF0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdGltZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3R5cGVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvd2FpdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbiBcXG4gLyogdWFwaS9nbGliYyB3ZWlyZG5lc3MgbWF5IGxlYXZlIHRoaXMgdW5kZWZpbmVkICovXFxuICNpZm5kZWYgSVBWNl9GTE9XTEFCRUxfTUdSXFxuICNkZWZpbmUgSVBWNl9GTE9XTEFCRUxfTUdSXFx0MzJcXG4gI2VuZGlmXFxuKyNpZm5kZWYgSVBWNl9GTE9XSU5GT19TRU5EXFxuKyNkZWZpbmUgSVBWNl9GTE9XSU5GT19TRU5EXFx0MzNcXG4rI2VuZGlmXFxuIFxcbiAvKiBmcm9tIG5ldC9pcHY2L2lwNl9mbG93bGFiZWwuYyAqL1xcbiAjZGVmaW5lIEZMX01JTl9MSU5HRVJcXHRcXHQ2XFxuIFxcbi0jZGVmaW5lIGV4cGxhaW4oeClcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdGRvIHsgaWYgKGNmZ192ZXJib3NlKSBmcHJpbnRmKHN0ZGVyciwgXFxcIiAgICAgICBcXFwiIHggXFxcIlxcXFxuXFxcIik7IH0gd2hpbGUgKDApXFxuLVxcbi0jZGVmaW5lIF9fZXhwZWN0KHgpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHRpZiAoISh4KSlcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiW09LXSAgIFxcXCIgI3ggXFxcIlxcXFxuXFxcIik7XFx0XFx0XFxcXFxcbi1cXHRcXHRlbHNlXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHRcXHRlcnJvcigxLCAwLCBcXFwiW0VSUl0gIFxcXCIgI3ggXFxcIiAobGluZSAlZClcXFwiLCBfX0xJTkVfXyk7IFxcXFxcXG4tXFx0fSB3aGlsZSAoMClcXG4tXFxuLSNkZWZpbmUgZXhwZWN0X3Bhc3MoeClcXHRfX2V4cGVjdCh4KVxcbi0jZGVmaW5lIGV4cGVjdF9mYWlsKHgpXFx0X19leHBlY3QoISh4KSlcXG4tXFxuLXN0YXRpYyBib29sIGNmZ19sb25nX3J1bm5pbmc7XFxuLXN0YXRpYyBib29sIGNmZ192ZXJib3NlO1xcbi1cXG4gc3RhdGljIGludCBmbG93bGFiZWxfZ2V0KGludCBmZCwgdWludDMyX3QgbGFiZWwsIHVpbnQ4X3Qgc2hhcmUsIHVpbnQxNl90IGZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZXEgPSB7XFxuQEAgLTcxLDEyOSArNjIsNDg0IEBAIHN0YXRpYyBpbnQgZmxvd2xhYmVsX3B1dChpbnQgZmQsIHVpbnQzMl90IGxhYmVsKVxcbiBcXHRyZXR1cm4gc2V0c29ja29wdChmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSkpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBydW5fdGVzdHMoaW50IGZkKVxcbitzdGF0aWMgaW50IGZsb3dsYWJlbF9yZW5ldyhpbnQgZmQsIHVpbnQzMl90IGxhYmVsLCB1aW50OF90IHNoYXJlLFxcbitcXHRcXHRcXHQgICB1aW50MTZfdCBsaW5nZXIpXFxuIHtcXG4tXFx0aW50IHdzdGF0dXM7XFxuLVxcdHBpZF90IHBpZDtcXG4rXFx0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlcSA9IHtcXG4rXFx0XFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUkVORVcsXFxuK1xcdFxcdC5mbHJfbGFiZWwgPSBodG9ubChsYWJlbCksXFxuK1xcdFxcdC5mbHJfc2hhcmUgPSBzaGFyZSxcXG4rXFx0XFx0LmZscl9saW5nZXIgPSBsaW5nZXIsXFxuK1xcdH07XFxuK1xcbitcXHRyZXR1cm4gc2V0c29ja29wdChmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSkpO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luNiBsb29wYmFja19hZGRyKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHNvY2thZGRyX2luNiBhZGRyID0ge1xcbitcXHRcXHQuc2luNl9mYW1pbHlcXHQ9IEFGX0lORVQ2LFxcbitcXHRcXHQuc2luNl9hZGRyXFx0PSBJTjZBRERSX0xPT1BCQUNLX0lOSVQsXFxuK1xcdFxcdC5zaW42X3BvcnRcXHQ9IGh0b25zKDg4ODgpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIGFkZHI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGNwX2xpc3Rlbih2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkciA9IGxvb3BiYWNrX2FkZHIoKTtcXG4rXFx0Y29uc3QgaW50IG9uZSA9IDE7XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX1NUUkVBTSwgMCk7XFxuK1xcdGlmIChmZCA9PSAtMSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJzb2NrZXQgbGlzdGVuZXJcXFwiKTtcXG4rXFx0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgXFx1MDAyNm9uZSwgc2l6ZW9mKG9uZSkpKVxcbitcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcInNldHNvY2tvcHQgU09fUkVVU0VBRERSXFxcIik7XFxuK1xcdGlmIChiaW5kKGZkLCAodm9pZCAqKVxcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpKVxcbitcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcImJpbmRcXFwiKTtcXG4rXFx0aWYgKGxpc3RlbihmZCwgMSkpXFxuK1xcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwibGlzdGVuXFxcIik7XFxuK1xcbitcXHRyZXR1cm4gZmQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRjcF9jb25uZWN0KGludCBsaXN0ZW5lciwgdWludDMyX3QgZmxvd2xhYmVsLFxcbitcXHRcXHRcXHRpbnQgKmNsaWVudCwgaW50ICphY2NlcHRlZClcXG4re1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHIgPSBsb29wYmFja19hZGRyKCk7XFxuK1xcdGNvbnN0IGludCBvbmUgPSAxO1xcbitcXHRpbnQgY2ZkLCBhZmQ7XFxuK1xcbitcXHRjZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfU1RSRUFNLCAwKTtcXG4rXFx0aWYgKGNmZCA9PSAtMSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJzb2NrZXQgY2xpZW50XFxcIik7XFxuK1xcbitcXHRpZiAoZmxvd2xhYmVsX2dldChjZmQsIGZsb3dsYWJlbCwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpKVxcbitcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcImZsb3dsYWJlbF9nZXRcXFwiKTtcXG4rXFx0aWYgKHNldHNvY2tvcHQoY2ZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XSU5GT19TRU5ELCBcXHUwMDI2b25lLCBzaXplb2Yob25lKSkpXFxuK1xcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwic2V0c29ja29wdCBmbG93aW5mb19zZW5kXFxcIik7XFxuK1xcdGFkZHIuc2luNl9mbG93aW5mbyA9IGh0b25sKGZsb3dsYWJlbCk7XFxuK1xcbitcXHRpZiAoY29ubmVjdChjZmQsICh2b2lkICopXFx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSkpXFxuK1xcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwiY29ubmVjdFxcXCIpO1xcbitcXG4rXFx0YWZkID0gYWNjZXB0KGxpc3RlbmVyLCBOVUxMLCBOVUxMKTtcXG4rXFx0aWYgKGFmZCA9PSAtMSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJhY2NlcHRcXFwiKTtcXG4rXFxuK1xcdGlmIChmbG93bGFiZWxfcHV0KGNmZCwgZmxvd2xhYmVsKSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJmbG93bGFiZWxfcHV0XFxcIik7XFxuK1xcbitcXHQqY2xpZW50ID0gY2ZkO1xcbitcXHQqYWNjZXB0ZWQgPSBhZmQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnJpbmd1cF9sb29wYmFjayh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBpZnJlcSBpZnIgPSB7XFxuK1xcdFxcdC5pZnJfbmFtZSA9IFxcXCJsb1xcXCJcXG4rXFx0fTtcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoQUZfTE9DQUwsIFNPQ0tfU1RSRUFNLCAwKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0aWYgKGlvY3RsKGZkLCBTSU9DR0lGRkxBR1MsIFxcdTAwMjZpZnIpIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRpZnIuaWZyX2ZsYWdzID0gaWZyLmlmcl9mbGFncyB8IElGRl9VUDtcXG4rXFxuK1xcdGlmIChpb2N0bChmZCwgU0lPQ1NJRkZMQUdTLCBcXHUwMDI2aWZyKSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGV4cGxhaW4oXFxcImNhbm5vdCBnZXQgbm9uLWV4aXN0ZW50IGxhYmVsXFxcIik7XFxuLVxcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApKTtcXG4tXFxuLVxcdGV4cGxhaW4oXFxcImNhbm5vdCBwdXQgbm9uLWV4aXN0ZW50IGxhYmVsXFxcIik7XFxuLVxcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcXG4tXFxuLVxcdGV4cGxhaW4oXFxcImNhbm5vdCBjcmVhdGUgbGFiZWwgZ3JlYXRlciB0aGFuIDIwIGJpdHNcXFwiKTtcXG4tXFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMHgxRkZGRkYsIElQVjZfRkxfU19BTlksXFxuLVxcdFxcdFxcdFxcdCAgSVBWNl9GTF9GX0NSRUFURSkpO1xcbi1cXG4tXFx0ZXhwbGFpbihcXFwiY3JlYXRlIGEgbmV3IGxhYmVsIChGTF9GX0NSRUFURSlcXFwiKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSkpO1xcbi1cXHRleHBsYWluKFxcXCJjYW4gZ2V0IHRoZSBsYWJlbCAod2l0aG91dCBGTF9GX0NSRUFURSlcXFwiKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgMCkpO1xcbi1cXHRleHBsYWluKFxcXCJjYW4gZ2V0IGl0IGFnYWluIHdpdGggY3JlYXRlIGZsYWcgc2V0LCB0b29cXFwiKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSkpO1xcbi1cXHRleHBsYWluKFxcXCJjYW5ub3QgZ2V0IGl0IGFnYWluIHdpdGggdGhlIGV4Y2x1c2l2ZSAoRkxfRkxfRVhDTCkgZmxhZ1xcXCIpO1xcbi1cXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLFxcbi1cXHRcXHRcXHRcXHRcXHQgSVBWNl9GTF9GX0NSRUFURSB8IElQVjZfRkxfRl9FWENMKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNhbiBub3cgcHV0IGV4YWN0bHkgdGhyZWUgcmVmZXJlbmNlc1xcXCIpO1xcbi1cXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAxKSk7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xcbi1cXHRleHBlY3RfZmFpbChmbG93bGFiZWxfcHV0KGZkLCAxKSk7XFxuLVxcbi1cXHRleHBsYWluKFxcXCJjcmVhdGUgYSBuZXcgZXhjbHVzaXZlIGxhYmVsIChGTF9TX0VYQ0wpXFxcIik7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNhbm5vdCBnZXQgaXQgYWdhaW4gaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlXFxcIik7XFxuLVxcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNhbm5vdCBnZXQgaXQgYWdhaW4gaW4gZXhjbHVzaXZlIG1vZGUgZWl0aGVyXFxcIik7XFxuLVxcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDIpKTtcXG4tXFxuLVxcdGlmIChjZmdfbG9uZ19ydW5uaW5nKSB7XFxuLVxcdFxcdGV4cGxhaW4oXFxcImNhbm5vdCByZXVzZSB0aGUgbGFiZWwsIGR1ZSB0byBsaW5nZXJcXFwiKTtcXG4tXFx0XFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XFxuLVxcdFxcdGV4cGxhaW4oXFxcImFmdGVyIHNsZWVwLCBjYW4gcmV1c2VcXFwiKTtcXG4tXFx0XFx0c2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgKyAxKTtcXG4tXFx0XFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XFxuK2VycjpcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRyZXR1cm4gLTE7XFxuK31cXG4rXFxuK0ZJWFRVUkUoZmxvd2xhYmVsKSB7fTtcXG4rXFxuK0ZJWFRVUkVfU0VUVVAoZmxvd2xhYmVsKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSB1bnNoYXJlKENMT05FX05FV05FVCk7XFxuK1xcdEFTU0VSVF9FUShyZXQsIDApIHtcXG4rXFx0XFx0VEhfTE9HKFxcXCJ1bnNoYXJlKENMT05FX05FV05FVCkgZmFpbGVkOiAlc1xcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuIFxcdH1cXG4gXFxuLVxcdGV4cGxhaW4oXFxcImNyZWF0ZSBhIG5ldyB1c2VyLXByaXZhdGUgbGFiZWwgKEZMX1NfVVNFUilcXFwiKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIElQVjZfRkxfRl9DUkVBVEUpKTtcXG4tXFx0ZXhwbGFpbihcXFwiY2Fubm90IGdldCBpdCBhZ2FpbiBpbiBub24tZXhjbHVzaXZlIG1vZGVcXFwiKTtcXG4tXFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0FOWSwgMCkpO1xcbi1cXHRleHBsYWluKFxcXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIGV4Y2x1c2l2ZSBtb2RlXFxcIik7XFxuLVxcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19FWENMLCAwKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNhbiBnZXQgaXQgYWdhaW4gaW4gdXNlciBtb2RlXFxcIik7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNoaWxkIHByb2Nlc3MgY2FuIGdldCBpdCB0b28sIGJ1dCBub3QgYWZ0ZXIgc2V0dWlkKG5vYm9keSlcXFwiKTtcXG4rXFx0cmV0ID0gYnJpbmd1cF9sb29wYmFjaygpO1xcbitcXHRBU1NFUlRfRVEocmV0LCAwKSBUSF9MT0coXFxcIkZhaWxlZCB0byBicmluZyB1cCBsb29wYmFjayBpbnRlcmZhY2VcXFwiKTtcXG4rfVxcbitcXG4rRklYVFVSRV9URUFSRE9XTihmbG93bGFiZWwpXFxuK3tcXG4rfVxcbitcXG4rVEVTVF9GKGZsb3dsYWJlbCwgY2Fubm90X2dldF9ub25fZXhpc3RlbnRfbGFiZWwpXFxuK3tcXG4rXFx0aW50IGZkLCBlcnI7XFxuK1xcbitcXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFxcXCJzb2NrZXQgZmFpbGVkXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA5LCBJUFY2X0ZMX1NfQU5ZLCAwKTtcXG4rXFx0RVhQRUNUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIGdldCBvZiBhIG5vbi1leGlzdGVudCBsYWJlbCB0byBmYWlsXFxcIik7XFxuK1xcdEVYUEVDVF9FUShFTk9FTlQsIGVycm5vKSBUSF9MT0coXFxcImV4cGVjdGVkIEVOT0VOVCwgZ290ICVkXFxcIiwgZXJybm8pO1xcbitcXG4rXFx0RVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7XFxuK31cXG4rXFxuK1RFU1RfRihmbG93bGFiZWwsIGNhbm5vdF9wdXRfbm9uX2V4aXN0ZW50X2xhYmVsKVxcbit7XFxuK1xcdGludCBmZCwgZXJyO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMTApO1xcbitcXHRFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRyhcXFwiZXhwZWN0ZWQgcHV0IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWxcXFwiKTtcXG4rXFx0RVhQRUNUX0VRKEVTUkNILCBlcnJubykgVEhfTE9HKFxcXCJleHBlY3RlZCBFU1JDSCwgZ290ICVkXFxcIiwgZXJybm8pO1xcbitcXG4rXFx0RVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7XFxuK31cXG4rXFxuK1RFU1RfRihmbG93bGFiZWwsIGNhbm5vdF9jcmVhdGVfbGFiZWxfZ3JlYXRlcl90aGFuXzIwX2JpdHMpXFxuK3tcXG4rXFx0aW50IGZkLCBlcnI7XFxuK1xcbitcXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFxcXCJzb2NrZXQgZmFpbGVkXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAweDFGRkZGRiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XFxuK1xcdEVYUEVDVF9UUlVFKGVycikgVEhfTE9HKFxcXCJleHBlY3RlZCBsYWJlbCBcXHUwMDNlIDIwIGJpdHMgdG8gYmUgcmVqZWN0ZWRcXFwiKTtcXG4rXFx0RVhQRUNUX0VRKEVJTlZBTCwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRUlOVkFMLCBnb3QgJWRcXFwiLCBlcnJubyk7XFxuK1xcbitcXHRFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTtcXG4rfVxcbitcXG4rVEVTVF9GKGZsb3dsYWJlbCwgY2FuX2NyZWF0ZV9hbmRfZ2V0X2FuZF9wdXRfbGFiZWxzKVxcbit7XFxuK1xcdGludCBmZCwgZXJyO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XFxuK1xcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIGNyZWF0ZSBsYWJlbCAoRkxfRl9DUkVBVEUpXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKTtcXG4rXFx0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gZ2V0IHRoZSBsYWJlbCB3aXRob3V0IEZMX0ZfQ1JFQVRFXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0RVhQRUNUX1RSVUUoIWVycilcXG4rXFx0XFx0VEhfTE9HKFxcXCJmYWlsZWQgdG8gZ2V0IGl0IGFnYWluIHdpdGggY3JlYXRlIGZsYWcgc2V0LCB0b29cXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksXFxuK1xcdFxcdFxcdCAgICBJUFY2X0ZMX0ZfQ1JFQVRFIHwgSVBWNl9GTF9GX0VYQ0wpO1xcbitcXHRFWFBFQ1RfVFJVRShlcnIpXFxuK1xcdFxcdFRIX0xPRyhcXFwiZXhwZWN0ZWQgRkxfRl9FWENMIHRvIHJlamVjdCBleGlzdGluZyBsYWJlbFxcXCIpO1xcbitcXHRFWFBFQ1RfRVEoRUVYSVNULCBlcnJubykgVEhfTE9HKFxcXCJleHBlY3RlZCBFRVhJU1QsIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xcbitcXHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBwdXQgZmlyc3QgcmVmZXJlbmNlXFxcIik7XFxuK1xcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xcbitcXHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBwdXQgc2Vjb25kIHJlZmVyZW5jZVxcXCIpO1xcbitcXHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcXG4rXFx0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gcHV0IHRoaXJkIHJlZmVyZW5jZVxcXCIpO1xcbitcXHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcXG4rXFx0RVhQRUNUX1RSVUUoZXJyKVxcbitcXHRcXHRUSF9MT0coXFxcImV4cGVjdGVkIGZvdXJ0aCBwdXQgdG8gZmFpbCwgbm8gcmVmZXJlbmNlcyBsZWZ0XFxcIik7XFxuK1xcdEVYUEVDVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVNSQ0gsIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdEVYUEVDVF9FUSgwLCBjbG9zZShmZCkpO1xcbit9XFxuK1xcbitURVNUX0YoZmxvd2xhYmVsLCBleGNsdXNpdmVfbGFiZWxfc2hhcmUpXFxuK3tcXG4rXFx0aW50IGZkLCBlcnI7XFxuK1xcbitcXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFxcXCJzb2NrZXQgZmFpbGVkXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7XFxuK1xcdEVYUEVDVF9UUlVFKCFlcnIpXFxuK1xcdFxcdFRIX0xPRyhcXFwiZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBleGNsdXNpdmUgbGFiZWwgKEZMX1NfRVhDTClcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRyhcXFwiZXhwZWN0ZWQgcmV1c2UgaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWxcXFwiKTtcXG4rXFx0RVhQRUNUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKFxcXCJleHBlY3RlZCBFUEVSTSwgZ290ICVkXFxcIiwgZXJybm8pO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRyhcXFwiZXhwZWN0ZWQgcmV1c2UgaW4gZXhjbHVzaXZlIG1vZGUgdG8gZmFpbCB0b29cXFwiKTtcXG4rXFx0RVhQRUNUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKFxcXCJleHBlY3RlZCBFUEVSTSwgZ290ICVkXFxcIiwgZXJybm8pO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMik7XFxuK1xcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIHB1dCB0aGUgZXhjbHVzaXZlIGxhYmVsXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0RVhQRUNUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIHJldXNlIHRvIGZhaWwsIGR1ZSB0byBsaW5nZXJcXFwiKTtcXG4rXFx0RVhQRUNUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKFxcXCJleHBlY3RlZCBFUEVSTSwgZ290ICVkXFxcIiwgZXJybm8pO1xcbitcXG4rXFx0c2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgKyAxKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIHJldXNlIHRvIHN1Y2NlZWQgYWZ0ZXIgbGluZ2VyXFxcIik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTtcXG4rfVxcbitcXG4rVEVTVF9GKGZsb3dsYWJlbCwgdXNlcl9wcml2YXRlX2xhYmVsX3NoYXJlKVxcbit7XFxuK1xcdGludCBmZCwgZXJyLCB3c3RhdHVzO1xcbitcXHRwaWRfdCBwaWQ7XFxuK1xcbitcXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFxcXCJzb2NrZXQgZmFpbGVkXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgSVBWNl9GTF9GX0NSRUFURSk7XFxuK1xcdEVYUEVDVF9UUlVFKCFlcnIpXFxuK1xcdFxcdFRIX0xPRyhcXFwiZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyB1c2VyLXByaXZhdGUgbGFiZWwgKEZMX1NfVVNFUilcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19BTlksIDApO1xcbitcXHRFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRyhcXFwiZXhwZWN0ZWQgZ2V0IGluIG5vbi1leGNsdXNpdmUgbW9kZSB0byBmYWlsXFxcIik7XFxuK1xcdEVYUEVDVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19FWENMLCAwKTtcXG4rXFx0RVhQRUNUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIGdldCBpbiBleGNsdXNpdmUgbW9kZSB0byBmYWlsXFxcIik7XFxuK1xcdEVYUEVDVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcXG4rXFx0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gZ2V0IGl0IGFnYWluIGluIHVzZXIgbW9kZVxcXCIpO1xcbitcXG4gXFx0cGlkID0gZm9yaygpO1xcbi1cXHRpZiAocGlkID09IC0xKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcImZvcmtcXFwiKTtcXG4rXFx0QVNTRVJUX05FKC0xLCBwaWQpIFRIX0xPRyhcXFwiZm9yayBmYWlsZWRcXFwiKTtcXG4gXFx0aWYgKCFwaWQpIHtcXG4tXFx0XFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKTtcXG4rXFx0XFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApO1xcbitcXHRcXHRFWFBFQ1RfVFJVRSghZXJyKVxcbitcXHRcXHRcXHRUSF9MT0coXFxcImNoaWxkIGZhaWxlZCB0byBnZXQgdGhlIHVzZXItcHJpdmF0ZSBsYWJlbFxcXCIpO1xcbitcXG4gXFx0XFx0aWYgKHNldHVpZChVU0hSVF9NQVgpKVxcbi1cXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIltJTkZPXSBza2lwIHNldHVpZCBjaGlsZCB0ZXN0XFxcXG5cXFwiKTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpO1xcbitcXHRcXHRcXHRleGl0KEtTRlRfU0tJUCk7XFxuK1xcbitcXHRcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCk7XFxuK1xcdFxcdEVYUEVDVF9UUlVFKGVycilcXG4rXFx0XFx0XFx0VEhfTE9HKFxcXCJjaGlsZCB1bmV4cGVjdGVkbHkgZ290IGxhYmVsIGFmdGVyIHNldHVpZFxcXCIpO1xcbitcXHRcXHRFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXFxcImV4cGVjdGVkIEVQRVJNLCBnb3QgJWRcXFwiLCBlcnJubyk7XFxuIFxcdFxcdGV4aXQoMCk7XFxuIFxcdH1cXG4tXFx0aWYgKHdhaXQoXFx1MDAyNndzdGF0dXMpID09IC0xKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcIndhaXRcXFwiKTtcXG4tXFx0aWYgKCFXSUZFWElURUQod3N0YXR1cykgfHwgV0VYSVRTVEFUVVMod3N0YXR1cykgIT0gMClcXG4tXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJ3YWl0OiB1bmV4cGVjdGVkIGNoaWxkIHJlc3VsdFxcXCIpO1xcbi1cXG4tXFx0ZXhwbGFpbihcXFwiY3JlYXRlIGEgbmV3IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbCAoRkxfU19QUk9DRVNTKVxcXCIpO1xcbi1cXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgSVBWNl9GTF9GX0NSRUFURSkpO1xcbi1cXHRleHBsYWluKFxcXCJjYW4gZ2V0IGl0IGFnYWluXFxcIik7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNoaWxkIHByb2Nlc3MgY2Fubm90IGNhbiBnZXQgaXRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHBpZCwgd2FpdChcXHUwMDI2d3N0YXR1cykpIFRIX0xPRyhcXFwid2FpdCBmYWlsZWRcXFwiKTtcXG4rXFx0QVNTRVJUX1RSVUUoV0lGRVhJVEVEKHdzdGF0dXMpKSBUSF9MT0coXFxcImNoaWxkIGRpZCBub3QgZXhpdCBub3JtYWxseVxcXCIpO1xcbitcXHRpZiAoV0VYSVRTVEFUVVMod3N0YXR1cykgPT0gS1NGVF9TS0lQKVxcbitcXHRcXHRTS0lQKHJldHVybixcXG4rXFx0XFx0ICAgICBcXFwic2V0dWlkKFVTSFJUX01BWCkgdW5hdmFpbGFibGUgKG5vIENBUF9TRVRVSUQgb3IgdWlkIHVubWFwcGVkKVxcXCIpO1xcbitcXHRFWFBFQ1RfRVEoMCwgV0VYSVRTVEFUVVMod3N0YXR1cykpXFxuK1xcdFxcdFRIX0xPRyhcXFwiY2hpbGQgcmVwb3J0ZWQgdW5leHBlY3RlZCByZXN1bHRcXFwiKTtcXG4rXFxuK1xcdEVYUEVDVF9FUSgwLCBjbG9zZShmZCkpO1xcbit9XFxuK1xcbitURVNUX0YoZmxvd2xhYmVsLCBwcm9jZXNzX3ByaXZhdGVfbGFiZWxfc2hhcmUpXFxuK3tcXG4rXFx0aW50IGZkLCBlcnIsIHdzdGF0dXM7XFxuK1xcdHBpZF90IHBpZDtcXG4rXFxuK1xcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcXG4rXFx0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXFxcInNvY2tldCBmYWlsZWRcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0RVhQRUNUX1RSVUUoIWVycilcXG4rXFx0XFx0VEhfTE9HKFxcXCJmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApO1xcbitcXHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBnZXQgaXQgYWdhaW5cXFwiKTtcXG4rXFxuIFxcdHBpZCA9IGZvcmsoKTtcXG4tXFx0aWYgKHBpZCA9PSAtMSlcXG4tXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJmb3JrXFxcIik7XFxuK1xcdEFTU0VSVF9ORSgtMSwgcGlkKSBUSF9MT0coXFxcImZvcmsgZmFpbGVkXFxcIik7XFxuIFxcdGlmICghcGlkKSB7XFxuLVxcdFxcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7XFxuK1xcdFxcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKTtcXG4rXFx0XFx0RVhQRUNUX1RSVUUoZXJyKVxcbitcXHRcXHRcXHRUSF9MT0coXFxcImNoaWxkIHVuZXhwZWN0ZWRseSBnb3QgcHJvY2Vzcy1wcml2YXRlIGxhYmVsXFxcIik7XFxuK1xcdFxcdEVYUEVDVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4gXFx0XFx0ZXhpdCgwKTtcXG4gXFx0fVxcbi1cXHRpZiAod2FpdChcXHUwMDI2d3N0YXR1cykgPT0gLTEpXFxuLVxcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwid2FpdFxcXCIpO1xcbi1cXHRpZiAoIVdJRkVYSVRFRCh3c3RhdHVzKSB8fCBXRVhJVFNUQVRVUyh3c3RhdHVzKSAhPSAwKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcIndhaXQ6IHVuZXhwZWN0ZWQgY2hpbGQgcmVzdWx0XFxcIik7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbi17XFxuLVxcdGludCBjO1xcbi1cXG4tXFx0d2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFxcXCJsdlxcXCIpKSAhPSAtMSkge1xcbi1cXHRcXHRzd2l0Y2ggKGMpIHtcXG4tXFx0XFx0Y2FzZSAnbCc6XFxuLVxcdFxcdFxcdGNmZ19sb25nX3J1bm5pbmcgPSB0cnVlO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAndic6XFxuLVxcdFxcdFxcdGNmZ192ZXJib3NlID0gdHJ1ZTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdGVycm9yKDEsIDAsIFxcXCIlczogcGFyc2UgZXJyb3JcXFwiLCBhcmd2WzBdKTtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdEFTU0VSVF9FUShwaWQsIHdhaXQoXFx1MDAyNndzdGF0dXMpKSBUSF9MT0coXFxcIndhaXQgZmFpbGVkXFxcIik7XFxuK1xcdEFTU0VSVF9UUlVFKFdJRkVYSVRFRCh3c3RhdHVzKSkgVEhfTE9HKFxcXCJjaGlsZCBkaWQgbm90IGV4aXQgbm9ybWFsbHlcXFwiKTtcXG4rXFx0RVhQRUNUX0VRKDAsIFdFWElUU1RBVFVTKHdzdGF0dXMpKVxcbitcXHRcXHRUSF9MT0coXFxcImNoaWxkIHJlcG9ydGVkIHVuZXhwZWN0ZWQgcmVzdWx0XFxcIik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTtcXG4gfVxcbiBcXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbitURVNUX0YoZmxvd2xhYmVsLCBjYW5ub3RfcmVuZXdfbm9uX2V4aXN0ZW50X2xhYmVsKVxcbiB7XFxuLVxcdGludCBmZDtcXG4rXFx0aW50IGZkLCBlcnI7XFxuK1xcbitcXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFxcXCJzb2NrZXQgZmFpbGVkXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfcmVuZXcoZmQsIDUsIElQVjZfRkxfU19FWENMLFxcbitcXHRcXHRcXHQgICAgICAyICogKEZMX01JTl9MSU5HRVIgKiAyICsgMSkpO1xcbitcXHRFWFBFQ1RfVFJVRShlcnIpXFxuK1xcdFxcdFRIX0xPRyhcXFwiZXhwZWN0ZWQgcmVuZXcgb2YgYSBub24tZXhpc3RlbnQgbGFiZWwgdG8gZmFpbFxcXCIpO1xcbitcXHRFWFBFQ1RfRVEoRVNSQ0gsIGVycm5vKSBUSF9MT0coXFxcImV4cGVjdGVkIEVTUkNILCBnb3QgJWRcXFwiLCBlcnJubyk7XFxuIFxcbi1cXHRwYXJzZV9vcHRzKGFyZ2MsIGFyZ3YpO1xcbitcXHRFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTtcXG4rfVxcbitcXG4rVEVTVF9GKGZsb3dsYWJlbCwgY2FuX3JlbmV3X2V4aXN0aW5nX2xhYmVsKVxcbit7XFxuK1xcdGludCBmZCwgZXJyO1xcbiBcXG4gXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNSwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRFWFBFQ1RfVFJVRSghZXJyKVxcbitcXHRcXHRUSF9MT0coXFxcImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgbGFiZWwgZm9yIHJlbmV3IHZhbGlkYXRpb25cXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNSwgSVBWNl9GTF9TX0VYQ0wsXFxuK1xcdFxcdFxcdCAgICAgIDIgKiAoRkxfTUlOX0xJTkdFUiAqIDIgKyAxKSk7XFxuK1xcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIHJlbmV3IGFuIGV4aXN0aW5nIHZhbGlkIGxhYmVsXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCA1KTtcXG4rXFx0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gcHV0IHRoZSBsYWJlbFxcXCIpO1xcbitcXG4rXFx0RVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7XFxuK31cXG4rXFxuK1RFU1RfRihmbG93bGFiZWwsIHJlbmV3X2xhYmVsX2xpbmdlcilcXG4re1xcbitcXHQvKiBSRU5FVyBtdXN0IGV4dGVuZCBhIGxhYmVsJ3MgbGluZ2VyIHBlcmlvZDogcHV0dGluZyBhIHJlbmV3ZWRcXG4rXFx0ICogbGFiZWwgYW5kIHdhaXRpbmcgb3V0IGl0cyBvcmlnaW5hbCBsaW5nZXIgdGltZSBtdXN0IG5vdCBiZVxcbitcXHQgKiBlbm91Z2ggdG8gYWxsb3cgdGhlIGxhYmVsIHRvIGJlIHJlY3JlYXRlZC5cXG4rXFx0ICovXFxuK1xcdGludCBmZCwgZXJyO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRFWFBFQ1RfVFJVRSghZXJyKVxcbitcXHRcXHRUSF9MT0coXFxcImZhaWxlZCB0byBjcmVhdGUgbGFiZWwgd2l0aCBGTF9NSU5fTElOR0VSIGxpbmdlciB0aW1lXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfcmVuZXcoZmQsIDYsIElQVjZfRkxfU19FWENMLFxcbitcXHRcXHRcXHQgICAgICAyICogKEZMX01JTl9MSU5HRVIgKiAyICsgMSkpO1xcbitcXHRFWFBFQ1RfVFJVRSghZXJyKVxcbitcXHRcXHRUSF9MT0coXFxcImZhaWxlZCB0byByZW5ldyB0aGUgbGFiZWwgdG8gaW5jcmVhc2UgaXRzIGxpbmdlciB0aW1lXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCA2KTtcXG4rXFx0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gcHV0IHRoZSBsYWJlbFxcXCIpO1xcbitcXG4rXFx0c2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgKyAxKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDYsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRFWFBFQ1RfVFJVRShlcnIpXFxuK1xcdFxcdFRIX0xPRyhcXFwiZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgbmV3IGxpbmdlciB0aW1lIG5vdCBvdmVyIHlldFxcXCIpO1xcbitcXHRFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXFxcImV4cGVjdGVkIEVQRVJNLCBnb3QgJWRcXFwiLCBlcnJubyk7XFxuK1xcbitcXHRFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTtcXG4rfVxcbitcXG4rVEVTVF9GKGZsb3dsYWJlbCwgcmVtb3RlX2ZsYWcpXFxuK3tcXG4rXFx0LyogVGhlIFJFTU9URSBmbGFnLCB1c2VkIGZvciBnZXRzb2Nrb3B0LCBpcyBleHBlY3RlZCB0byByZXRyaWV2ZSB0aGVcXG4rXFx0ICogbGFiZWwgZnJvbSB0aGUgbGF0ZXN0IHJlY2VpdmVkIGhlYWRlci5cXG4rXFx0ICovXFxuK1xcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSBmcmVxID0ge1xcbitcXHRcXHQuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsXFxuK1xcdFxcdC5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVNT1RFLFxcbitcXHR9O1xcbitcXHRzb2NrbGVuX3QgZnJlcV9sZW4gPSBzaXplb2YoZnJlcSk7XFxuK1xcdGludCBsaXN0ZW5lciwgY2ZkLCBhZmQsIGVycjtcXG4rXFxuK1xcdGxpc3RlbmVyID0gdGNwX2xpc3RlbigpO1xcbitcXHR0Y3BfY29ubmVjdChsaXN0ZW5lciwgNywgXFx1MDAyNmNmZCwgXFx1MDAyNmFmZCk7XFxuK1xcbitcXHRlcnIgPSBnZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXFx1MDAyNmZyZXEsIFxcdTAwMjZmcmVxX2xlbik7XFxuK1xcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZ2V0c29ja29wdCB3aXRoIElQVjZfRkxfRl9SRU1PVEUgZmFpbGVkXFxcIik7XFxuK1xcdEVYUEVDVF9FUSg3LCBudG9obChmcmVxLmZscl9sYWJlbCkpXFxuK1xcdFxcdFRIX0xPRyhcXFwidW5leHBlY3RlZCByZW1vdGUgZmxvdyBsYWJlbFxcXCIpO1xcbitcXG4rXFx0RVhQRUNUX0VRKDAsIGNsb3NlKGFmZCkpO1xcbitcXHRFWFBFQ1RfRVEoMCwgY2xvc2UoY2ZkKSk7XFxuK1xcdEVYUEVDVF9FUSgwLCBjbG9zZShsaXN0ZW5lcikpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBkaXNhYmxlX2Zsb3dsYWJlbF9jb25zaXN0ZW5jeSh2b2lkKVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdGZkID0gb3BlbihcXFwiL3Byb2Mvc3lzL25ldC9pcHY2L2Zsb3dsYWJlbF9jb25zaXN0ZW5jeVxcXCIsIE9fV1JPTkxZKTtcXG4gXFx0aWYgKGZkID09IC0xKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcInNvY2tldFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRydW5fdGVzdHMoZmQpO1xcbitcXHRpZiAod3JpdGUoZmQsIFxcXCIwXFxcIiwgMSkgIT0gMSkge1xcbitcXHRcXHRjbG9zZShmZCk7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXHRjbG9zZShmZCk7XFxuIFxcbi1cXHRpZiAoY2xvc2UoZmQpKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcImNsb3NlXFxcIik7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rVEVTVF9GKGZsb3dsYWJlbCwgcmVmbGVjdF9mbGFnKVxcbit7XFxuK1xcdC8qIFRoZSBSRUZMRUNUIGZsYWcgYWN0cyBhcyBhIHRyaWdnZXIgdG8gdGhlIFJFUEZMT1cgYml0LiBXaGVuIFJFUEZMT1dcXG4rXFx0ICogaXMgdHJpZ2dlcmVkIGZvciBhIHNvY2tldCwgaXQgYWRvcHRzIHRoZSBsYWJlbCByZWNlaXZlZCBmcm9tIHRoZVxcbitcXHQgKiBjb25uZWN0ZWQgc29ja2V0LlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlZmxlY3Rfb24gPSB7XFxuK1xcdFxcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCxcXG4rXFx0XFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRUZMRUNULFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9xdWVyeSA9IHtcXG4rXFx0XFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfR0VULFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9vZmYgPSB7XFxuK1xcdFxcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX1BVVCxcXG4rXFx0XFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRUZMRUNULFxcbitcXHR9O1xcbitcXHRzb2NrbGVuX3QgcmVmbGVjdF9xdWVyeV9sZW4gPSBzaXplb2YocmVmbGVjdF9xdWVyeSk7XFxuK1xcdGludCBsaXN0ZW5lciwgY2ZkLCBhZmQsIGVycjtcXG4rXFxuK1xcdGlmICghZGlzYWJsZV9mbG93bGFiZWxfY29uc2lzdGVuY3koKSlcXG4rXFx0XFx0U0tJUChyZXR1cm4sXFxuK1xcdFxcdCAgICAgXFxcImNhbm5vdCBkaXNhYmxlIG5ldC5pcHY2LmZsb3dsYWJlbF9jb25zaXN0ZW5jeVxcXCIpO1xcbitcXG4rXFx0bGlzdGVuZXIgPSB0Y3BfbGlzdGVuKCk7XFxuK1xcdGVyciA9IHNldHNvY2tvcHQobGlzdGVuZXIsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsXFxuK1xcdFxcdFxcdCBcXHUwMDI2cmVmbGVjdF9vbiwgc2l6ZW9mKHJlZmxlY3Rfb24pKTtcXG4rXFx0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gZW5hYmxlIFJFRkxFQ1Qgb24gdGhlIGxpc3RlbmVyXFxcIik7XFxuK1xcbitcXHR0Y3BfY29ubmVjdChsaXN0ZW5lciwgOCwgXFx1MDAyNmNmZCwgXFx1MDAyNmFmZCk7XFxuK1xcbitcXHRlcnIgPSBnZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUixcXG4rXFx0XFx0XFx0IFxcdTAwMjZyZWZsZWN0X3F1ZXJ5LCBcXHUwMDI2cmVmbGVjdF9xdWVyeV9sZW4pO1xcbitcXHRFWFBFQ1RfVFJVRSghZXJyKVxcbitcXHRcXHRUSF9MT0coXFxcImZhaWxlZCB0byBxdWVyeSB0aGUgYWNjZXB0ZWQgc29ja2V0J3Mgb3V0Z29pbmcgbGFiZWxcXFwiKTtcXG4rXFx0RVhQRUNUX0VRKDgsIG50b2hsKHJlZmxlY3RfcXVlcnkuZmxyX2xhYmVsKSlcXG4rXFx0XFx0VEhfTE9HKFxcXCJhY2NlcHRlZCBzb2NrZXQgZGlkIG5vdCByZWZsZWN0IGNsaWVudCdzIGxhYmVsXFxcIik7XFxuK1xcbitcXHRlcnIgPSBzZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUixcXG4rXFx0XFx0XFx0IFxcdTAwMjZyZWZsZWN0X29mZiwgc2l6ZW9mKHJlZmxlY3Rfb2ZmKSk7XFxuK1xcdEVYUEVDVF9UUlVFKCFlcnIpXFxuK1xcdFxcdFRIX0xPRyhcXFwiZmFpbGVkIHRvIGRpc2FibGUgUkVGTEVDVCBvbiB0aGUgYWNjZXB0ZWQgc29ja2V0XFxcIik7XFxuK1xcbitcXHRlcnIgPSBzZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUixcXG4rXFx0XFx0XFx0IFxcdTAwMjZyZWZsZWN0X29mZiwgc2l6ZW9mKHJlZmxlY3Rfb2ZmKSk7XFxuK1xcdEVYUEVDVF9UUlVFKGVycikgVEhfTE9HKFxcXCJleHBlY3RlZCBkaXNhYmxpbmcgUkVGTEVDVCB0d2ljZSB0byBmYWlsXFxcIik7XFxuK1xcdEVYUEVDVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVNSQ0gsIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdEVYUEVDVF9FUSgwLCBjbG9zZShhZmQpKTtcXG4rXFx0RVhQRUNUX0VRKDAsIGNsb3NlKGNmZCkpO1xcbitcXHRFWFBFQ1RfRVEoMCwgY2xvc2UobGlzdGVuZXIpKTtcXG4gfVxcbitcXG4rVEVTVF9IQVJORVNTX01BSU5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6NTY6MDMuNjE0MTQ1NzM1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTE1MTAzOTQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMgYW5kIGlwdjZfZmxvd2xhYmVsLnNoKSBieSByZXdyaXRpbmcgdGhlIHRlc3QgdG8gdXNlIHRoZSBrc2VsZnRlc3QgaGFybmVzcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMTg2NjU3MWZiYmNjZmJkYTA2Yzk5NTRlYTdhYzkyZDc5NzA0MTdjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAyMjo1NjowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaFxuaW5kZXggY2VlOTVlMjUyYmVlNS4uMmVlZGEzOWJmNjRjYiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsLnNoXG5AQCAtOCw3ICs4LDcgQEBcbiBzZXQgLWVcbiBcbiBlY2hvIFwiVEVTVCBtYW5hZ2VtZW50XCJcbi0uL2luX25ldG5zLnNoIC4vaXB2Nl9mbG93bGFiZWxfbWdyXG4rLi9pcHY2X2Zsb3dsYWJlbF9tZ3JcbiBcbiBlY2hvIFwiVEVTVCBkYXRhcGF0aFwiXG4gLi9pbl9uZXRucy5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuY1xuaW5kZXggYWY5NWI0OGFjZWE5MC4uMDcyZmIzYTliMTIxNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jXG5AQCAtNiw0NSArNiwzNiBAQFxuICNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZXJyb3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9pZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvaW9jdGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zb2NrZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuIFxuIC8qIHVhcGkvZ2xpYmMgd2VpcmRuZXNzIG1heSBsZWF2ZSB0aGlzIHVuZGVmaW5lZCAqL1xuICNpZm5kZWYgSVBWNl9GTE9XTEFCRUxfTUdSXG4gI2RlZmluZSBJUFY2X0ZMT1dMQUJFTF9NR1JcdDMyXG4gI2VuZGlmXG4rI2lmbmRlZiBJUFY2X0ZMT1dJTkZPX1NFTkRcbisjZGVmaW5lIElQVjZfRkxPV0lORk9fU0VORFx0MzNcbisjZW5kaWZcbiBcbiAvKiBmcm9tIG5ldC9pcHY2L2lwNl9mbG93bGFiZWwuYyAqL1xuICNkZWZpbmUgRkxfTUlOX0xJTkdFUlx0XHQ2XG4gXG4tI2RlZmluZSBleHBsYWluKHgpXHRcdFx0XHRcdFx0XHRcXFxuLVx0ZG8geyBpZiAoY2ZnX3ZlcmJvc2UpIGZwcmludGYoc3RkZXJyLCBcIiAgICAgICBcIiB4IFwiXFxuXCIpOyB9IHdoaWxlICgwKVxuLVxuLSNkZWZpbmUgX19leHBlY3QoeClcdFx0XHRcdFx0XHRcdFxcXG4tXHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdGlmICghKHgpKVx0XHRcdFx0XHRcdFxcXG4tXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiW09LXSAgIFwiICN4IFwiXFxuXCIpO1x0XHRcXFxuLVx0XHRlbHNlXHRcdFx0XHRcdFx0XHRcXFxuLVx0XHRcdGVycm9yKDEsIDAsIFwiW0VSUl0gIFwiICN4IFwiIChsaW5lICVkKVwiLCBfX0xJTkVfXyk7IFxcXG4tXHR9IHdoaWxlICgwKVxuLVxuLSNkZWZpbmUgZXhwZWN0X3Bhc3MoeClcdF9fZXhwZWN0KHgpXG4tI2RlZmluZSBleHBlY3RfZmFpbCh4KVx0X19leHBlY3QoISh4KSlcbi1cbi1zdGF0aWMgYm9vbCBjZmdfbG9uZ19ydW5uaW5nO1xuLXN0YXRpYyBib29sIGNmZ192ZXJib3NlO1xuLVxuIHN0YXRpYyBpbnQgZmxvd2xhYmVsX2dldChpbnQgZmQsIHVpbnQzMl90IGxhYmVsLCB1aW50OF90IHNoYXJlLCB1aW50MTZfdCBmbGFncylcbiB7XG4gXHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVxID0ge1xuQEAgLTcxLDEyOSArNjIsNDg0IEBAIHN0YXRpYyBpbnQgZmxvd2xhYmVsX3B1dChpbnQgZmQsIHVpbnQzMl90IGxhYmVsKVxuIFx0cmV0dXJuIHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSkpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydW5fdGVzdHMoaW50IGZkKVxuK3N0YXRpYyBpbnQgZmxvd2xhYmVsX3JlbmV3KGludCBmZCwgdWludDMyX3QgbGFiZWwsIHVpbnQ4X3Qgc2hhcmUsXG4rXHRcdFx0ICAgdWludDE2X3QgbGluZ2VyKVxuIHtcbi1cdGludCB3c3RhdHVzO1xuLVx0cGlkX3QgcGlkO1xuK1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlcSA9IHtcbitcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUkVORVcsXG4rXHRcdC5mbHJfbGFiZWwgPSBodG9ubChsYWJlbCksXG4rXHRcdC5mbHJfc2hhcmUgPSBzaGFyZSxcbitcdFx0LmZscl9saW5nZXIgPSBsaW5nZXIsXG4rXHR9O1xuK1xuK1x0cmV0dXJuIHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSkpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luNiBsb29wYmFja19hZGRyKHZvaWQpXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX2luNiBhZGRyID0ge1xuK1x0XHQuc2luNl9mYW1pbHlcdD0gQUZfSU5FVDYsXG4rXHRcdC5zaW42X2FkZHJcdD0gSU42QUREUl9MT09QQkFDS19JTklULFxuK1x0XHQuc2luNl9wb3J0XHQ9IGh0b25zKDg4ODgpLFxuK1x0fTtcbitcbitcdHJldHVybiBhZGRyO1xuK31cbitcbitzdGF0aWMgaW50IHRjcF9saXN0ZW4odm9pZClcbit7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHIgPSBsb29wYmFja19hZGRyKCk7XG4rXHRjb25zdCBpbnQgb25lID0gMTtcbitcdGludCBmZDtcbitcbitcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX1NUUkVBTSwgMCk7XG4rXHRpZiAoZmQgPT0gLTEpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcInNvY2tldCBsaXN0ZW5lclwiKTtcbitcdGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFx1MDAyNm9uZSwgc2l6ZW9mKG9uZSkpKVxuK1x0XHRlcnJvcigxLCBlcnJubywgXCJzZXRzb2Nrb3B0IFNPX1JFVVNFQUREUlwiKTtcbitcdGlmIChiaW5kKGZkLCAodm9pZCAqKVx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSkpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcImJpbmRcIik7XG4rXHRpZiAobGlzdGVuKGZkLCAxKSlcbitcdFx0ZXJyb3IoMSwgZXJybm8sIFwibGlzdGVuXCIpO1xuK1xuK1x0cmV0dXJuIGZkO1xuK31cbitcbitzdGF0aWMgdm9pZCB0Y3BfY29ubmVjdChpbnQgbGlzdGVuZXIsIHVpbnQzMl90IGZsb3dsYWJlbCxcbitcdFx0XHRpbnQgKmNsaWVudCwgaW50ICphY2NlcHRlZClcbit7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHIgPSBsb29wYmFja19hZGRyKCk7XG4rXHRjb25zdCBpbnQgb25lID0gMTtcbitcdGludCBjZmQsIGFmZDtcbitcbitcdGNmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19TVFJFQU0sIDApO1xuK1x0aWYgKGNmZCA9PSAtMSlcbitcdFx0ZXJyb3IoMSwgZXJybm8sIFwic29ja2V0IGNsaWVudFwiKTtcbitcbitcdGlmIChmbG93bGFiZWxfZ2V0KGNmZCwgZmxvd2xhYmVsLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcImZsb3dsYWJlbF9nZXRcIik7XG4rXHRpZiAoc2V0c29ja29wdChjZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dJTkZPX1NFTkQsIFx1MDAyNm9uZSwgc2l6ZW9mKG9uZSkpKVxuK1x0XHRlcnJvcigxLCBlcnJubywgXCJzZXRzb2Nrb3B0IGZsb3dpbmZvX3NlbmRcIik7XG4rXHRhZGRyLnNpbjZfZmxvd2luZm8gPSBodG9ubChmbG93bGFiZWwpO1xuK1xuK1x0aWYgKGNvbm5lY3QoY2ZkLCAodm9pZCAqKVx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSkpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcImNvbm5lY3RcIik7XG4rXG4rXHRhZmQgPSBhY2NlcHQobGlzdGVuZXIsIE5VTEwsIE5VTEwpO1xuK1x0aWYgKGFmZCA9PSAtMSlcbitcdFx0ZXJyb3IoMSwgZXJybm8sIFwiYWNjZXB0XCIpO1xuK1xuK1x0aWYgKGZsb3dsYWJlbF9wdXQoY2ZkLCBmbG93bGFiZWwpKVxuK1x0XHRlcnJvcigxLCBlcnJubywgXCJmbG93bGFiZWxfcHV0XCIpO1xuK1xuK1x0KmNsaWVudCA9IGNmZDtcbitcdCphY2NlcHRlZCA9IGFmZDtcbit9XG4rXG4rc3RhdGljIGludCBicmluZ3VwX2xvb3BiYWNrKHZvaWQpXG4re1xuK1x0c3RydWN0IGlmcmVxIGlmciA9IHtcbitcdFx0Lmlmcl9uYW1lID0gXCJsb1wiXG4rXHR9O1xuK1x0aW50IGZkO1xuK1xuK1x0ZmQgPSBzb2NrZXQoQUZfTE9DQUwsIFNPQ0tfU1RSRUFNLCAwKTtcbitcdGlmIChmZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0aWYgKGlvY3RsKGZkLCBTSU9DR0lGRkxBR1MsIFx1MDAyNmlmcikgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0aWZyLmlmcl9mbGFncyA9IGlmci5pZnJfZmxhZ3MgfCBJRkZfVVA7XG4rXG4rXHRpZiAoaW9jdGwoZmQsIFNJT0NTSUZGTEFHUywgXHUwMDI2aWZyKSBcdTAwM2MgMClcbitcdFx0Z290byBlcnI7XG4rXG4rXHRjbG9zZShmZCk7XG4rXHRyZXR1cm4gMDtcbiBcbi1cdGV4cGxhaW4oXCJjYW5ub3QgZ2V0IG5vbi1leGlzdGVudCBsYWJlbFwiKTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApKTtcbi1cbi1cdGV4cGxhaW4oXCJjYW5ub3QgcHV0IG5vbi1leGlzdGVudCBsYWJlbFwiKTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcbi1cbi1cdGV4cGxhaW4oXCJjYW5ub3QgY3JlYXRlIGxhYmVsIGdyZWF0ZXIgdGhhbiAyMCBiaXRzXCIpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMHgxRkZGRkYsIElQVjZfRkxfU19BTlksXG4tXHRcdFx0XHQgIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cbi1cdGV4cGxhaW4oXCJjcmVhdGUgYSBuZXcgbGFiZWwgKEZMX0ZfQ1JFQVRFKVwiKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCJjYW4gZ2V0IHRoZSBsYWJlbCAod2l0aG91dCBGTF9GX0NSRUFURSlcIik7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKSk7XG4tXHRleHBsYWluKFwiY2FuIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vXCIpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwbGFpbihcImNhbm5vdCBnZXQgaXQgYWdhaW4gd2l0aCB0aGUgZXhjbHVzaXZlIChGTF9GTF9FWENMKSBmbGFnXCIpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSxcbi1cdFx0XHRcdFx0IElQVjZfRkxfRl9DUkVBVEUgfCBJUFY2X0ZMX0ZfRVhDTCkpO1xuLVx0ZXhwbGFpbihcImNhbiBub3cgcHV0IGV4YWN0bHkgdGhyZWUgcmVmZXJlbmNlc1wiKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcbi1cbi1cdGV4cGxhaW4oXCJjcmVhdGUgYSBuZXcgZXhjbHVzaXZlIGxhYmVsIChGTF9TX0VYQ0wpXCIpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIG5vbi1leGNsdXNpdmUgbW9kZVwiKTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwiY2Fubm90IGdldCBpdCBhZ2FpbiBpbiBleGNsdXNpdmUgbW9kZSBlaXRoZXJcIik7XG4tXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMikpO1xuLVxuLVx0aWYgKGNmZ19sb25nX3J1bm5pbmcpIHtcbi1cdFx0ZXhwbGFpbihcImNhbm5vdCByZXVzZSB0aGUgbGFiZWwsIGR1ZSB0byBsaW5nZXJcIik7XG4tXHRcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksXG4tXHRcdFx0XHRcdCAgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0XHRleHBsYWluKFwiYWZ0ZXIgc2xlZXAsIGNhbiByZXVzZVwiKTtcbi1cdFx0c2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgKyAxKTtcbi1cdFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSxcbi1cdFx0XHRcdFx0ICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4rZXJyOlxuK1x0Y2xvc2UoZmQpO1xuK1x0cmV0dXJuIC0xO1xuK31cbitcbitGSVhUVVJFKGZsb3dsYWJlbCkge307XG4rXG4rRklYVFVSRV9TRVRVUChmbG93bGFiZWwpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHVuc2hhcmUoQ0xPTkVfTkVXTkVUKTtcbitcdEFTU0VSVF9FUShyZXQsIDApIHtcbitcdFx0VEhfTE9HKFwidW5zaGFyZShDTE9ORV9ORVdORVQpIGZhaWxlZDogJXNcIiwgc3RyZXJyb3IoZXJybm8pKTtcbiBcdH1cbiBcbi1cdGV4cGxhaW4oXCJjcmVhdGUgYSBuZXcgdXNlci1wcml2YXRlIGxhYmVsIChGTF9TX1VTRVIpXCIpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIG5vbi1leGNsdXNpdmUgbW9kZVwiKTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19BTlksIDApKTtcbi1cdGV4cGxhaW4oXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIGV4Y2x1c2l2ZSBtb2RlXCIpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0VYQ0wsIDApKTtcbi1cdGV4cGxhaW4oXCJjYW4gZ2V0IGl0IGFnYWluIGluIHVzZXIgbW9kZVwiKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7XG4tXHRleHBsYWluKFwiY2hpbGQgcHJvY2VzcyBjYW4gZ2V0IGl0IHRvbywgYnV0IG5vdCBhZnRlciBzZXR1aWQobm9ib2R5KVwiKTtcbitcdHJldCA9IGJyaW5ndXBfbG9vcGJhY2soKTtcbitcdEFTU0VSVF9FUShyZXQsIDApIFRIX0xPRyhcIkZhaWxlZCB0byBicmluZyB1cCBsb29wYmFjayBpbnRlcmZhY2VcIik7XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04oZmxvd2xhYmVsKVxuK3tcbit9XG4rXG4rVEVTVF9GKGZsb3dsYWJlbCwgY2Fubm90X2dldF9ub25fZXhpc3RlbnRfbGFiZWwpXG4re1xuK1x0aW50IGZkLCBlcnI7XG4rXG4rXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4rXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcInNvY2tldCBmYWlsZWRcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA5LCBJUFY2X0ZMX1NfQU5ZLCAwKTtcbitcdEVYUEVDVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgZ2V0IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWxcIik7XG4rXHRFWFBFQ1RfRVEoRU5PRU5ULCBlcnJubykgVEhfTE9HKFwiZXhwZWN0ZWQgRU5PRU5ULCBnb3QgJWRcIiwgZXJybm8pO1xuK1xuK1x0RVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7XG4rfVxuK1xuK1RFU1RfRihmbG93bGFiZWwsIGNhbm5vdF9wdXRfbm9uX2V4aXN0ZW50X2xhYmVsKVxuK3tcbitcdGludCBmZCwgZXJyO1xuK1xuK1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuK1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCJzb2NrZXQgZmFpbGVkXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMTApO1xuK1x0RVhQRUNUX1RSVUUoZXJyKSBUSF9MT0coXCJleHBlY3RlZCBwdXQgb2YgYSBub24tZXhpc3RlbnQgbGFiZWwgdG8gZmFpbFwiKTtcbitcdEVYUEVDVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRyhcImV4cGVjdGVkIEVTUkNILCBnb3QgJWRcIiwgZXJybm8pO1xuK1xuK1x0RVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7XG4rfVxuK1xuK1RFU1RfRihmbG93bGFiZWwsIGNhbm5vdF9jcmVhdGVfbGFiZWxfZ3JlYXRlcl90aGFuXzIwX2JpdHMpXG4re1xuK1x0aW50IGZkLCBlcnI7XG4rXG4rXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4rXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcInNvY2tldCBmYWlsZWRcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAweDFGRkZGRiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4rXHRFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRyhcImV4cGVjdGVkIGxhYmVsIFx1MDAzZSAyMCBiaXRzIHRvIGJlIHJlamVjdGVkXCIpO1xuK1x0RVhQRUNUX0VRKEVJTlZBTCwgZXJybm8pIFRIX0xPRyhcImV4cGVjdGVkIEVJTlZBTCwgZ290ICVkXCIsIGVycm5vKTtcbitcbitcdEVYUEVDVF9FUSgwLCBjbG9zZShmZCkpO1xuK31cbitcbitURVNUX0YoZmxvd2xhYmVsLCBjYW5fY3JlYXRlX2FuZF9nZXRfYW5kX3B1dF9sYWJlbHMpXG4re1xuK1x0aW50IGZkLCBlcnI7XG4rXG4rXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4rXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcInNvY2tldCBmYWlsZWRcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBjcmVhdGUgbGFiZWwgKEZMX0ZfQ1JFQVRFKVwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApO1xuK1x0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIGdldCB0aGUgbGFiZWwgd2l0aG91dCBGTF9GX0NSRUFURVwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0RVhQRUNUX1RSVUUoIWVycilcbitcdFx0VEhfTE9HKFwiZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSxcbitcdFx0XHQgICAgSVBWNl9GTF9GX0NSRUFURSB8IElQVjZfRkxfRl9FWENMKTtcbitcdEVYUEVDVF9UUlVFKGVycilcbitcdFx0VEhfTE9HKFwiZXhwZWN0ZWQgRkxfRl9FWENMIHRvIHJlamVjdCBleGlzdGluZyBsYWJlbFwiKTtcbitcdEVYUEVDVF9FUShFRVhJU1QsIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFRVhJU1QsIGdvdCAlZFwiLCBlcnJubyk7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcbitcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBwdXQgZmlyc3QgcmVmZXJlbmNlXCIpO1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XG4rXHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gcHV0IHNlY29uZCByZWZlcmVuY2VcIik7XG4rXHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcbitcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBwdXQgdGhpcmQgcmVmZXJlbmNlXCIpO1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XG4rXHRFWFBFQ1RfVFJVRShlcnIpXG4rXHRcdFRIX0xPRyhcImV4cGVjdGVkIGZvdXJ0aCBwdXQgdG8gZmFpbCwgbm8gcmVmZXJlbmNlcyBsZWZ0XCIpO1xuK1x0RVhQRUNUX0VRKEVTUkNILCBlcnJubykgVEhfTE9HKFwiZXhwZWN0ZWQgRVNSQ0gsIGdvdCAlZFwiLCBlcnJubyk7XG4rXG4rXHRFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTtcbit9XG4rXG4rVEVTVF9GKGZsb3dsYWJlbCwgZXhjbHVzaXZlX2xhYmVsX3NoYXJlKVxuK3tcbitcdGludCBmZCwgZXJyO1xuK1xuK1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuK1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCJzb2NrZXQgZmFpbGVkXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0RVhQRUNUX1RSVUUoIWVycilcbitcdFx0VEhfTE9HKFwiZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBleGNsdXNpdmUgbGFiZWwgKEZMX1NfRVhDTClcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEVYUEVDVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgcmV1c2UgaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWxcIik7XG4rXHRFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFUEVSTSwgZ290ICVkXCIsIGVycm5vKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEVYUEVDVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgcmV1c2UgaW4gZXhjbHVzaXZlIG1vZGUgdG8gZmFpbCB0b29cIik7XG4rXHRFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFUEVSTSwgZ290ICVkXCIsIGVycm5vKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDIpO1xuK1x0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIHB1dCB0aGUgZXhjbHVzaXZlIGxhYmVsXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4rXHRFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRyhcImV4cGVjdGVkIHJldXNlIHRvIGZhaWwsIGR1ZSB0byBsaW5nZXJcIik7XG4rXHRFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFUEVSTSwgZ290ICVkXCIsIGVycm5vKTtcbitcbitcdHNsZWVwKEZMX01JTl9MSU5HRVIgKiAyICsgMSk7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcImV4cGVjdGVkIHJldXNlIHRvIHN1Y2NlZWQgYWZ0ZXIgbGluZ2VyXCIpO1xuK1xuK1x0RVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7XG4rfVxuK1xuK1RFU1RfRihmbG93bGFiZWwsIHVzZXJfcHJpdmF0ZV9sYWJlbF9zaGFyZSlcbit7XG4rXHRpbnQgZmQsIGVyciwgd3N0YXR1cztcbitcdHBpZF90IHBpZDtcbitcbitcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbitcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwic29ja2V0IGZhaWxlZFwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEVYUEVDVF9UUlVFKCFlcnIpXG4rXHRcdFRIX0xPRyhcImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgdXNlci1wcml2YXRlIGxhYmVsIChGTF9TX1VTRVIpXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0FOWSwgMCk7XG4rXHRFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRyhcImV4cGVjdGVkIGdldCBpbiBub24tZXhjbHVzaXZlIG1vZGUgdG8gZmFpbFwiKTtcbitcdEVYUEVDVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcImV4cGVjdGVkIEVQRVJNLCBnb3QgJWRcIiwgZXJybm8pO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0VYQ0wsIDApO1xuK1x0RVhQRUNUX1RSVUUoZXJyKSBUSF9MT0coXCJleHBlY3RlZCBnZXQgaW4gZXhjbHVzaXZlIG1vZGUgdG8gZmFpbFwiKTtcbitcdEVYUEVDVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcImV4cGVjdGVkIEVQRVJNLCBnb3QgJWRcIiwgZXJybm8pO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApO1xuK1x0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiBpbiB1c2VyIG1vZGVcIik7XG4rXG4gXHRwaWQgPSBmb3JrKCk7XG4tXHRpZiAocGlkID09IC0xKVxuLVx0XHRlcnJvcigxLCBlcnJubywgXCJmb3JrXCIpO1xuK1x0QVNTRVJUX05FKC0xLCBwaWQpIFRIX0xPRyhcImZvcmsgZmFpbGVkXCIpO1xuIFx0aWYgKCFwaWQpIHtcbi1cdFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKTtcbitcdFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApO1xuK1x0XHRFWFBFQ1RfVFJVRSghZXJyKVxuK1x0XHRcdFRIX0xPRyhcImNoaWxkIGZhaWxlZCB0byBnZXQgdGhlIHVzZXItcHJpdmF0ZSBsYWJlbFwiKTtcbitcbiBcdFx0aWYgKHNldHVpZChVU0hSVF9NQVgpKVxuLVx0XHRcdGZwcmludGYoc3RkZXJyLCBcIltJTkZPXSBza2lwIHNldHVpZCBjaGlsZCB0ZXN0XFxuXCIpO1xuLVx0XHRlbHNlXG4tXHRcdFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKTtcbitcdFx0XHRleGl0KEtTRlRfU0tJUCk7XG4rXG4rXHRcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcbitcdFx0RVhQRUNUX1RSVUUoZXJyKVxuK1x0XHRcdFRIX0xPRyhcImNoaWxkIHVuZXhwZWN0ZWRseSBnb3QgbGFiZWwgYWZ0ZXIgc2V0dWlkXCIpO1xuK1x0XHRFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFUEVSTSwgZ290ICVkXCIsIGVycm5vKTtcbiBcdFx0ZXhpdCgwKTtcbiBcdH1cbi1cdGlmICh3YWl0KFx1MDAyNndzdGF0dXMpID09IC0xKVxuLVx0XHRlcnJvcigxLCBlcnJubywgXCJ3YWl0XCIpO1xuLVx0aWYgKCFXSUZFWElURUQod3N0YXR1cykgfHwgV0VYSVRTVEFUVVMod3N0YXR1cykgIT0gMClcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwid2FpdDogdW5leHBlY3RlZCBjaGlsZCByZXN1bHRcIik7XG4tXG4tXHRleHBsYWluKFwiY3JlYXRlIGEgbmV3IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbCAoRkxfU19QUk9DRVNTKVwiKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwiY2FuIGdldCBpdCBhZ2FpblwiKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7XG4tXHRleHBsYWluKFwiY2hpbGQgcHJvY2VzcyBjYW5ub3QgY2FuIGdldCBpdFwiKTtcbitcdEFTU0VSVF9FUShwaWQsIHdhaXQoXHUwMDI2d3N0YXR1cykpIFRIX0xPRyhcIndhaXQgZmFpbGVkXCIpO1xuK1x0QVNTRVJUX1RSVUUoV0lGRVhJVEVEKHdzdGF0dXMpKSBUSF9MT0coXCJjaGlsZCBkaWQgbm90IGV4aXQgbm9ybWFsbHlcIik7XG4rXHRpZiAoV0VYSVRTVEFUVVMod3N0YXR1cykgPT0gS1NGVF9TS0lQKVxuK1x0XHRTS0lQKHJldHVybixcbitcdFx0ICAgICBcInNldHVpZChVU0hSVF9NQVgpIHVuYXZhaWxhYmxlIChubyBDQVBfU0VUVUlEIG9yIHVpZCB1bm1hcHBlZClcIik7XG4rXHRFWFBFQ1RfRVEoMCwgV0VYSVRTVEFUVVMod3N0YXR1cykpXG4rXHRcdFRIX0xPRyhcImNoaWxkIHJlcG9ydGVkIHVuZXhwZWN0ZWQgcmVzdWx0XCIpO1xuK1xuK1x0RVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7XG4rfVxuK1xuK1RFU1RfRihmbG93bGFiZWwsIHByb2Nlc3NfcHJpdmF0ZV9sYWJlbF9zaGFyZSlcbit7XG4rXHRpbnQgZmQsIGVyciwgd3N0YXR1cztcbitcdHBpZF90IHBpZDtcbitcbitcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbitcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwic29ja2V0IGZhaWxlZFwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEVYUEVDVF9UUlVFKCFlcnIpXG4rXHRcdFRIX0xPRyhcImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgcHJvY2Vzcy1wcml2YXRlIGxhYmVsXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApO1xuK1x0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIGdldCBpdCBhZ2FpblwiKTtcbitcbiBcdHBpZCA9IGZvcmsoKTtcbi1cdGlmIChwaWQgPT0gLTEpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcImZvcmtcIik7XG4rXHRBU1NFUlRfTkUoLTEsIHBpZCkgVEhfTE9HKFwiZm9yayBmYWlsZWRcIik7XG4gXHRpZiAoIXBpZCkge1xuLVx0XHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCkpO1xuK1x0XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCk7XG4rXHRcdEVYUEVDVF9UUlVFKGVycilcbitcdFx0XHRUSF9MT0coXCJjaGlsZCB1bmV4cGVjdGVkbHkgZ290IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbFwiKTtcbitcdFx0RVhQRUNUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKFwiZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFwiLCBlcnJubyk7XG4gXHRcdGV4aXQoMCk7XG4gXHR9XG4tXHRpZiAod2FpdChcdTAwMjZ3c3RhdHVzKSA9PSAtMSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwid2FpdFwiKTtcbi1cdGlmICghV0lGRVhJVEVEKHdzdGF0dXMpIHx8IFdFWElUU1RBVFVTKHdzdGF0dXMpICE9IDApXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcIndhaXQ6IHVuZXhwZWN0ZWQgY2hpbGQgcmVzdWx0XCIpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBwYXJzZV9vcHRzKGludCBhcmdjLCBjaGFyICoqYXJndilcbi17XG4tXHRpbnQgYztcbi1cbi1cdHdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCBcImx2XCIpKSAhPSAtMSkge1xuLVx0XHRzd2l0Y2ggKGMpIHtcbi1cdFx0Y2FzZSAnbCc6XG4tXHRcdFx0Y2ZnX2xvbmdfcnVubmluZyA9IHRydWU7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJ3YnOlxuLVx0XHRcdGNmZ192ZXJib3NlID0gdHJ1ZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRlcnJvcigxLCAwLCBcIiVzOiBwYXJzZSBlcnJvclwiLCBhcmd2WzBdKTtcbi1cdFx0fVxuLVx0fVxuK1x0QVNTRVJUX0VRKHBpZCwgd2FpdChcdTAwMjZ3c3RhdHVzKSkgVEhfTE9HKFwid2FpdCBmYWlsZWRcIik7XG4rXHRBU1NFUlRfVFJVRShXSUZFWElURUQod3N0YXR1cykpIFRIX0xPRyhcImNoaWxkIGRpZCBub3QgZXhpdCBub3JtYWxseVwiKTtcbitcdEVYUEVDVF9FUSgwLCBXRVhJVFNUQVRVUyh3c3RhdHVzKSlcbitcdFx0VEhfTE9HKFwiY2hpbGQgcmVwb3J0ZWQgdW5leHBlY3RlZCByZXN1bHRcIik7XG4rXG4rXHRFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTtcbiB9XG4gXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuK1RFU1RfRihmbG93bGFiZWwsIGNhbm5vdF9yZW5ld19ub25fZXhpc3RlbnRfbGFiZWwpXG4ge1xuLVx0aW50IGZkO1xuK1x0aW50IGZkLCBlcnI7XG4rXG4rXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4rXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcInNvY2tldCBmYWlsZWRcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfcmVuZXcoZmQsIDUsIElQVjZfRkxfU19FWENMLFxuK1x0XHRcdCAgICAgIDIgKiAoRkxfTUlOX0xJTkdFUiAqIDIgKyAxKSk7XG4rXHRFWFBFQ1RfVFJVRShlcnIpXG4rXHRcdFRIX0xPRyhcImV4cGVjdGVkIHJlbmV3IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWxcIik7XG4rXHRFWFBFQ1RfRVEoRVNSQ0gsIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFU1JDSCwgZ290ICVkXCIsIGVycm5vKTtcbiBcbi1cdHBhcnNlX29wdHMoYXJnYywgYXJndik7XG4rXHRFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTtcbit9XG4rXG4rVEVTVF9GKGZsb3dsYWJlbCwgY2FuX3JlbmV3X2V4aXN0aW5nX2xhYmVsKVxuK3tcbitcdGludCBmZCwgZXJyO1xuIFxuIFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuK1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCJzb2NrZXQgZmFpbGVkXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNSwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0RVhQRUNUX1RSVUUoIWVycilcbitcdFx0VEhfTE9HKFwiZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBsYWJlbCBmb3IgcmVuZXcgdmFsaWRhdGlvblwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNSwgSVBWNl9GTF9TX0VYQ0wsXG4rXHRcdFx0ICAgICAgMiAqIChGTF9NSU5fTElOR0VSICogMiArIDEpKTtcbitcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byByZW5ldyBhbiBleGlzdGluZyB2YWxpZCBsYWJlbFwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDUpO1xuK1x0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIHB1dCB0aGUgbGFiZWxcIik7XG4rXG4rXHRFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTtcbit9XG4rXG4rVEVTVF9GKGZsb3dsYWJlbCwgcmVuZXdfbGFiZWxfbGluZ2VyKVxuK3tcbitcdC8qIFJFTkVXIG11c3QgZXh0ZW5kIGEgbGFiZWwncyBsaW5nZXIgcGVyaW9kOiBwdXR0aW5nIGEgcmVuZXdlZFxuK1x0ICogbGFiZWwgYW5kIHdhaXRpbmcgb3V0IGl0cyBvcmlnaW5hbCBsaW5nZXIgdGltZSBtdXN0IG5vdCBiZVxuK1x0ICogZW5vdWdoIHRvIGFsbG93IHRoZSBsYWJlbCB0byBiZSByZWNyZWF0ZWQuXG4rXHQgKi9cbitcdGludCBmZCwgZXJyO1xuK1xuK1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuK1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCJzb2NrZXQgZmFpbGVkXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0RVhQRUNUX1RSVUUoIWVycilcbitcdFx0VEhfTE9HKFwiZmFpbGVkIHRvIGNyZWF0ZSBsYWJlbCB3aXRoIEZMX01JTl9MSU5HRVIgbGluZ2VyIHRpbWVcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfcmVuZXcoZmQsIDYsIElQVjZfRkxfU19FWENMLFxuK1x0XHRcdCAgICAgIDIgKiAoRkxfTUlOX0xJTkdFUiAqIDIgKyAxKSk7XG4rXHRFWFBFQ1RfVFJVRSghZXJyKVxuK1x0XHRUSF9MT0coXCJmYWlsZWQgdG8gcmVuZXcgdGhlIGxhYmVsIHRvIGluY3JlYXNlIGl0cyBsaW5nZXIgdGltZVwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDYpO1xuK1x0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIHB1dCB0aGUgbGFiZWxcIik7XG4rXG4rXHRzbGVlcChGTF9NSU5fTElOR0VSICogMiArIDEpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4rXHRFWFBFQ1RfVFJVRShlcnIpXG4rXHRcdFRIX0xPRyhcImV4cGVjdGVkIHJldXNlIHRvIGZhaWwsIG5ldyBsaW5nZXIgdGltZSBub3Qgb3ZlciB5ZXRcIik7XG4rXHRFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFUEVSTSwgZ290ICVkXCIsIGVycm5vKTtcbitcbitcdEVYUEVDVF9FUSgwLCBjbG9zZShmZCkpO1xuK31cbitcbitURVNUX0YoZmxvd2xhYmVsLCByZW1vdGVfZmxhZylcbit7XG4rXHQvKiBUaGUgUkVNT1RFIGZsYWcsIHVzZWQgZm9yIGdldHNvY2tvcHQsIGlzIGV4cGVjdGVkIHRvIHJldHJpZXZlIHRoZVxuK1x0ICogbGFiZWwgZnJvbSB0aGUgbGF0ZXN0IHJlY2VpdmVkIGhlYWRlci5cbitcdCAqL1xuK1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIGZyZXEgPSB7XG4rXHRcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCxcbitcdFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRU1PVEUsXG4rXHR9O1xuK1x0c29ja2xlbl90IGZyZXFfbGVuID0gc2l6ZW9mKGZyZXEpO1xuK1x0aW50IGxpc3RlbmVyLCBjZmQsIGFmZCwgZXJyO1xuK1xuK1x0bGlzdGVuZXIgPSB0Y3BfbGlzdGVuKCk7XG4rXHR0Y3BfY29ubmVjdChsaXN0ZW5lciwgNywgXHUwMDI2Y2ZkLCBcdTAwMjZhZmQpO1xuK1xuK1x0ZXJyID0gZ2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNmZyZXEsIFx1MDAyNmZyZXFfbGVuKTtcbitcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcImdldHNvY2tvcHQgd2l0aCBJUFY2X0ZMX0ZfUkVNT1RFIGZhaWxlZFwiKTtcbitcdEVYUEVDVF9FUSg3LCBudG9obChmcmVxLmZscl9sYWJlbCkpXG4rXHRcdFRIX0xPRyhcInVuZXhwZWN0ZWQgcmVtb3RlIGZsb3cgbGFiZWxcIik7XG4rXG4rXHRFWFBFQ1RfRVEoMCwgY2xvc2UoYWZkKSk7XG4rXHRFWFBFQ1RfRVEoMCwgY2xvc2UoY2ZkKSk7XG4rXHRFWFBFQ1RfRVEoMCwgY2xvc2UobGlzdGVuZXIpKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgZGlzYWJsZV9mbG93bGFiZWxfY29uc2lzdGVuY3kodm9pZClcbit7XG4rXHRpbnQgZmQ7XG4rXG4rXHRmZCA9IG9wZW4oXCIvcHJvYy9zeXMvbmV0L2lwdjYvZmxvd2xhYmVsX2NvbnNpc3RlbmN5XCIsIE9fV1JPTkxZKTtcbiBcdGlmIChmZCA9PSAtMSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwic29ja2V0XCIpO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRydW5fdGVzdHMoZmQpO1xuK1x0aWYgKHdyaXRlKGZkLCBcIjBcIiwgMSkgIT0gMSkge1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcdGNsb3NlKGZkKTtcbiBcbi1cdGlmIChjbG9zZShmZCkpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcImNsb3NlXCIpO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuIFxuLVx0cmV0dXJuIDA7XG4rVEVTVF9GKGZsb3dsYWJlbCwgcmVmbGVjdF9mbGFnKVxuK3tcbitcdC8qIFRoZSBSRUZMRUNUIGZsYWcgYWN0cyBhcyBhIHRyaWdnZXIgdG8gdGhlIFJFUEZMT1cgYml0LiBXaGVuIFJFUEZMT1dcbitcdCAqIGlzIHRyaWdnZXJlZCBmb3IgYSBzb2NrZXQsIGl0IGFkb3B0cyB0aGUgbGFiZWwgcmVjZWl2ZWQgZnJvbSB0aGVcbitcdCAqIGNvbm5lY3RlZCBzb2NrZXQuXG4rXHQgKi9cbitcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZWZsZWN0X29uID0ge1xuK1x0XHQuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsXG4rXHRcdC5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVGTEVDVCxcbitcdH07XG4rXHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9xdWVyeSA9IHtcbitcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfR0VULFxuK1x0fTtcbitcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZWZsZWN0X29mZiA9IHtcbitcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUFVULFxuK1x0XHQuZmxyX2ZsYWdzID0gSVBWNl9GTF9GX1JFRkxFQ1QsXG4rXHR9O1xuK1x0c29ja2xlbl90IHJlZmxlY3RfcXVlcnlfbGVuID0gc2l6ZW9mKHJlZmxlY3RfcXVlcnkpO1xuK1x0aW50IGxpc3RlbmVyLCBjZmQsIGFmZCwgZXJyO1xuK1xuK1x0aWYgKCFkaXNhYmxlX2Zsb3dsYWJlbF9jb25zaXN0ZW5jeSgpKVxuK1x0XHRTS0lQKHJldHVybixcbitcdFx0ICAgICBcImNhbm5vdCBkaXNhYmxlIG5ldC5pcHY2LmZsb3dsYWJlbF9jb25zaXN0ZW5jeVwiKTtcbitcbitcdGxpc3RlbmVyID0gdGNwX2xpc3RlbigpO1xuK1x0ZXJyID0gc2V0c29ja29wdChsaXN0ZW5lciwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUixcbitcdFx0XHQgXHUwMDI2cmVmbGVjdF9vbiwgc2l6ZW9mKHJlZmxlY3Rfb24pKTtcbitcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBlbmFibGUgUkVGTEVDVCBvbiB0aGUgbGlzdGVuZXJcIik7XG4rXG4rXHR0Y3BfY29ubmVjdChsaXN0ZW5lciwgOCwgXHUwMDI2Y2ZkLCBcdTAwMjZhZmQpO1xuK1xuK1x0ZXJyID0gZ2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsXG4rXHRcdFx0IFx1MDAyNnJlZmxlY3RfcXVlcnksIFx1MDAyNnJlZmxlY3RfcXVlcnlfbGVuKTtcbitcdEVYUEVDVF9UUlVFKCFlcnIpXG4rXHRcdFRIX0xPRyhcImZhaWxlZCB0byBxdWVyeSB0aGUgYWNjZXB0ZWQgc29ja2V0J3Mgb3V0Z29pbmcgbGFiZWxcIik7XG4rXHRFWFBFQ1RfRVEoOCwgbnRvaGwocmVmbGVjdF9xdWVyeS5mbHJfbGFiZWwpKVxuK1x0XHRUSF9MT0coXCJhY2NlcHRlZCBzb2NrZXQgZGlkIG5vdCByZWZsZWN0IGNsaWVudCdzIGxhYmVsXCIpO1xuK1xuK1x0ZXJyID0gc2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsXG4rXHRcdFx0IFx1MDAyNnJlZmxlY3Rfb2ZmLCBzaXplb2YocmVmbGVjdF9vZmYpKTtcbitcdEVYUEVDVF9UUlVFKCFlcnIpXG4rXHRcdFRIX0xPRyhcImZhaWxlZCB0byBkaXNhYmxlIFJFRkxFQ1Qgb24gdGhlIGFjY2VwdGVkIHNvY2tldFwiKTtcbitcbitcdGVyciA9IHNldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLFxuK1x0XHRcdCBcdTAwMjZyZWZsZWN0X29mZiwgc2l6ZW9mKHJlZmxlY3Rfb2ZmKSk7XG4rXHRFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRyhcImV4cGVjdGVkIGRpc2FibGluZyBSRUZMRUNUIHR3aWNlIHRvIGZhaWxcIik7XG4rXHRFWFBFQ1RfRVEoRVNSQ0gsIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFU1JDSCwgZ290ICVkXCIsIGVycm5vKTtcbitcbitcdEVYUEVDVF9FUSgwLCBjbG9zZShhZmQpKTtcbitcdEVYUEVDVF9FUSgwLCBjbG9zZShjZmQpKTtcbitcdEVYUEVDVF9FUSgwLCBjbG9zZShsaXN0ZW5lcikpO1xuIH1cbitcbitURVNUX0hBUk5FU1NfTUFJTlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6NTY6MDMuNjE0MTQ3ODc1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE1MTAxMzgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IElQdjYgRmxvdyBMYWJlbCBTZWxmdGVzdCBQYXRjaCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJIbW0sIGBpcHY2X2Zsb3dsYWJlbC5zaGAgYW5kIGBpcHY2X2Zsb3dsYWJlbF9tZ3IuY2AgYXJlIGJlaW5nIHRvdWNoZWQuXCIgIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgbWVhbnMgd2Ugc2hvdWxkIGZ1enogYmFzZWQgb24gdGhpcywgb3Igbm90LiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgcmV3cml0aW5nIHRoZSBgaXB2Nl9mbG93bGFiZWxfbWdyLmNgIHRlc3QgdXNpbmcgYGtzZWxmdGVzdF9oYXJuZXNzLmhgIGFuZCByZW1vdmluZyB0aGF0IGBpbl9uZXRucy5zaGAgd3JhcHBlciwgc2luY2UgaXQncyBub3cgaGFuZGxpbmcgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIHVuc2hhcmluZyBpdHNlbGYuXG5cbkZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGlmIGtlcm5lbCBjb2RlIGlzIGNoYW5nZWQuIExldCdzIHNlZS4uLiAgTm9wZSwgdGhlIGRpZmYgaXMgb25seSBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsLnNoYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuY2AuIE5vdGhpbmcgaW4gdGhlIGNvcmUga2VybmVsLlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBUaGV5IGxpc3QgdGhpbmdzIGxpa2UgZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgdW5yZWFjaGFibGUgY29kZSwgZXRjLiAgSXQgZG9lc24ndCAqZXhwbGljaXRseSogbWVudGlvbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCwgYnV0IGNvbW1vbiBzZW5zZSB0ZWxscyBtZSBzZWxmdGVzdHMgYXJlICp1c2Vyc3BhY2UqIHRlc3RzLCBub3Qga2VybmVsIGNvZGUuIFRoZXkgZG9uJ3QgYWZmZWN0IHRoZSBrZXJuZWwncyBleGVjdXRpb24gZmxvdyBkaXJlY3RseS4gIEEgY2hhbmdlIHRvIGEgdGVzdCBkb2Vzbid0IG1lYW4gd2UgbmVlZCB0byBmdXp6IHRoZSBrZXJuZWwgaXRzZWxmLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdtIHF1aWNrbHkgY29uZmlybWluZyB0aGVyZSBhcmUgKm5vKiBvdGhlciBmaWxlcyBjaGFuZ2VkLiBOb3BlLCBqdXN0IHRob3NlIHR3by5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGEgbm8tZ28gZm9yIGZ1enppbmcuIEl0J3Mgc3RyaWN0bHkgYWJvdXQgbW9kaWZ5aW5nIHRoZSBzZWxmdGVzdHMsIHNwZWNpZmljYWxseSB0byB1c2UgYSBkaWZmZXJlbnQgdGVzdGluZyBmcmFtZXdvcmsuIEl0IGRvZXMgKm5vdCogbW9kaWZ5IGFueSBrZXJuZWwgY29kZSBvciBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IHdhcnJhbnQgZnV6emluZy5cblxuTXkgY29uY2x1c2lvbiBpczogYFdvcnRoRnV6emluZz1mYWxzZWAuIFRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxODEsIk91dHB1dFRva2VucyI6OTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjo1NjoxMi43NjUxNjQ3NTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jIGFuZCBpcHY2X2Zsb3dsYWJlbC5zaCkgYnkgcmV3cml0aW5nIHRoZSB0ZXN0IHRvIHVzZSB0aGUga3NlbGZ0ZXN0IGhhcm5lc3MuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMgYW5kIGlwdjZfZmxvd2xhYmVsLnNoKSBieSByZXdyaXRpbmcgdGhlIHRlc3QgdG8gdXNlIHRoZSBrc2VsZnRlc3QgaGFybmVzcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjo1NjoxMi43NjUxODcxNDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhf9rp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 22:33:29 +0000 UTC FinishedAt: 2026-08-07 22:56:14 +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+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMgYW5kIGlwdjZfZmxvd2xhYmVsLnNoKSBieSByZXdyaXRpbmcgdGhlIHRlc3QgdG8gdXNlIHRoZSBrc2VsZnRlc3QgaGFybmVzcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzE4NjY1NzFmYmJjY2ZiZGEwNmM5OTU0ZWE3YWM5MmQ3OTcwNDE3Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMjI6NTY6MDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsLnNoXG5pbmRleCBjZWU5NWUyNTJiZWU1Li4yZWVkYTM5YmY2NGNiIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWwuc2hcbkBAIC04LDcgJiM0Mzs4LDcgQEBcbiBzZXQgLWVcbiBcbiBlY2hvIFwmIzM0O1RFU1QgbWFuYWdlbWVudFwmIzM0O1xuLS4vaW5fbmV0bnMuc2ggLi9pcHY2X2Zsb3dsYWJlbF9tZ3JcbiYjNDM7Li9pcHY2X2Zsb3dsYWJlbF9tZ3JcbiBcbiBlY2hvIFwmIzM0O1RFU1QgZGF0YXBhdGhcJiMzNDtcbiAuL2luX25ldG5zLnNoIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jXG5pbmRleCBhZjk1YjQ4YWNlYTkwLi4wNzJmYjNhOWIxMjE3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmNcbkBAIC02LDQ1ICYjNDM7NiwzNiBAQFxuICNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZXJyb3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2lmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL2lvY3RsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc29ja2V0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3RpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmhcJiMzNDtcbiBcbiAvKiB1YXBpL2dsaWJjIHdlaXJkbmVzcyBtYXkgbGVhdmUgdGhpcyB1bmRlZmluZWQgKi9cbiAjaWZuZGVmIElQVjZfRkxPV0xBQkVMX01HUlxuICNkZWZpbmUgSVBWNl9GTE9XTEFCRUxfTUdSXHQzMlxuICNlbmRpZlxuJiM0MzsjaWZuZGVmIElQVjZfRkxPV0lORk9fU0VORFxuJiM0MzsjZGVmaW5lIElQVjZfRkxPV0lORk9fU0VORFx0MzNcbiYjNDM7I2VuZGlmXG4gXG4gLyogZnJvbSBuZXQvaXB2Ni9pcDZfZmxvd2xhYmVsLmMgKi9cbiAjZGVmaW5lIEZMX01JTl9MSU5HRVJcdFx0NlxuIFxuLSNkZWZpbmUgZXhwbGFpbih4KVx0XHRcdFx0XHRcdFx0XFxcbi1cdGRvIHsgaWYgKGNmZ192ZXJib3NlKSBmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAgICAgIFwmIzM0OyB4IFwmIzM0O1xcblwmIzM0Oyk7IH0gd2hpbGUgKDApXG4tXG4tI2RlZmluZSBfX2V4cGVjdCh4KVx0XHRcdFx0XHRcdFx0XFxcbi1cdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdFx0aWYgKCEoeCkpXHRcdFx0XHRcdFx0XFxcbi1cdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7W09LXSAgIFwmIzM0OyAjeCBcJiMzNDtcXG5cJiMzNDspO1x0XHRcXFxuLVx0XHRlbHNlXHRcdFx0XHRcdFx0XHRcXFxuLVx0XHRcdGVycm9yKDEsIDAsIFwmIzM0O1tFUlJdICBcJiMzNDsgI3ggXCYjMzQ7IChsaW5lICVkKVwmIzM0OywgX19MSU5FX18pOyBcXFxuLVx0fSB3aGlsZSAoMClcbi1cbi0jZGVmaW5lIGV4cGVjdF9wYXNzKHgpXHRfX2V4cGVjdCh4KVxuLSNkZWZpbmUgZXhwZWN0X2ZhaWwoeClcdF9fZXhwZWN0KCEoeCkpXG4tXG4tc3RhdGljIGJvb2wgY2ZnX2xvbmdfcnVubmluZztcbi1zdGF0aWMgYm9vbCBjZmdfdmVyYm9zZTtcbi1cbiBzdGF0aWMgaW50IGZsb3dsYWJlbF9nZXQoaW50IGZkLCB1aW50MzJfdCBsYWJlbCwgdWludDhfdCBzaGFyZSwgdWludDE2X3QgZmxhZ3MpXG4ge1xuIFx0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlcSA9IHtcbkBAIC03MSwxMjkgJiM0Mzs2Miw0ODQgQEAgc3RhdGljIGludCBmbG93bGFiZWxfcHV0KGludCBmZCwgdWludDMyX3QgbGFiZWwpXG4gXHRyZXR1cm4gc2V0c29ja29wdChmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXHUwMDI2cmVxLCBzaXplb2YocmVxKSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ1bl90ZXN0cyhpbnQgZmQpXG4mIzQzO3N0YXRpYyBpbnQgZmxvd2xhYmVsX3JlbmV3KGludCBmZCwgdWludDMyX3QgbGFiZWwsIHVpbnQ4X3Qgc2hhcmUsXG4mIzQzO1x0XHRcdCAgIHVpbnQxNl90IGxpbmdlcilcbiB7XG4tXHRpbnQgd3N0YXR1cztcbi1cdHBpZF90IHBpZDtcbiYjNDM7XHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVxID0ge1xuJiM0MztcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUkVORVcsXG4mIzQzO1x0XHQuZmxyX2xhYmVsID0gaHRvbmwobGFiZWwpLFxuJiM0MztcdFx0LmZscl9zaGFyZSA9IHNoYXJlLFxuJiM0MztcdFx0LmZscl9saW5nZXIgPSBsaW5nZXIsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luNiBsb29wYmFja19hZGRyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHIgPSB7XG4mIzQzO1x0XHQuc2luNl9mYW1pbHlcdD0gQUZfSU5FVDYsXG4mIzQzO1x0XHQuc2luNl9hZGRyXHQ9IElONkFERFJfTE9PUEJBQ0tfSU5JVCxcbiYjNDM7XHRcdC5zaW42X3BvcnRcdD0gaHRvbnMoODg4OCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFkZHI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdGNwX2xpc3Rlbih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX2luNiBhZGRyID0gbG9vcGJhY2tfYWRkcigpO1xuJiM0MztcdGNvbnN0IGludCBvbmUgPSAxO1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfU1RSRUFNLCAwKTtcbiYjNDM7XHRpZiAoZmQgPT0gLTEpXG4mIzQzO1x0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7c29ja2V0IGxpc3RlbmVyXCYjMzQ7KTtcbiYjNDM7XHRpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBcdTAwMjZvbmUsIHNpemVvZihvbmUpKSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtzZXRzb2Nrb3B0IFNPX1JFVVNFQUREUlwmIzM0Oyk7XG4mIzQzO1x0aWYgKGJpbmQoZmQsICh2b2lkICopXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpKSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtiaW5kXCYjMzQ7KTtcbiYjNDM7XHRpZiAobGlzdGVuKGZkLCAxKSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtsaXN0ZW5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRjcF9jb25uZWN0KGludCBsaXN0ZW5lciwgdWludDMyX3QgZmxvd2xhYmVsLFxuJiM0MztcdFx0XHRpbnQgKmNsaWVudCwgaW50ICphY2NlcHRlZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkciA9IGxvb3BiYWNrX2FkZHIoKTtcbiYjNDM7XHRjb25zdCBpbnQgb25lID0gMTtcbiYjNDM7XHRpbnQgY2ZkLCBhZmQ7XG4mIzQzO1xuJiM0MztcdGNmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19TVFJFQU0sIDApO1xuJiM0MztcdGlmIChjZmQgPT0gLTEpXG4mIzQzO1x0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7c29ja2V0IGNsaWVudFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChmbG93bGFiZWxfZ2V0KGNmZCwgZmxvd2xhYmVsLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpXG4mIzQzO1x0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7Zmxvd2xhYmVsX2dldFwmIzM0Oyk7XG4mIzQzO1x0aWYgKHNldHNvY2tvcHQoY2ZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XSU5GT19TRU5ELCBcdTAwMjZvbmUsIHNpemVvZihvbmUpKSlcbiYjNDM7XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtzZXRzb2Nrb3B0IGZsb3dpbmZvX3NlbmRcJiMzNDspO1xuJiM0MztcdGFkZHIuc2luNl9mbG93aW5mbyA9IGh0b25sKGZsb3dsYWJlbCk7XG4mIzQzO1xuJiM0MztcdGlmIChjb25uZWN0KGNmZCwgKHZvaWQgKilcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpKVxuJiM0MztcdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O2Nvbm5lY3RcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRhZmQgPSBhY2NlcHQobGlzdGVuZXIsIE5VTEwsIE5VTEwpO1xuJiM0MztcdGlmIChhZmQgPT0gLTEpXG4mIzQzO1x0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7YWNjZXB0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZsb3dsYWJlbF9wdXQoY2ZkLCBmbG93bGFiZWwpKVxuJiM0MztcdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O2Zsb3dsYWJlbF9wdXRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQqY2xpZW50ID0gY2ZkO1xuJiM0MztcdCphY2NlcHRlZCA9IGFmZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBicmluZ3VwX2xvb3BiYWNrKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWZyZXEgaWZyID0ge1xuJiM0MztcdFx0Lmlmcl9uYW1lID0gXCYjMzQ7bG9cJiMzNDtcbiYjNDM7XHR9O1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBzb2NrZXQoQUZfTE9DQUwsIFNPQ0tfU1RSRUFNLCAwKTtcbiYjNDM7XHRpZiAoZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdGlmIChpb2N0bChmZCwgU0lPQ0dJRkZMQUdTLCBcdTAwMjZpZnIpIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdGlmci5pZnJfZmxhZ3MgPSBpZnIuaWZyX2ZsYWdzIHwgSUZGX1VQO1xuJiM0MztcbiYjNDM7XHRpZiAoaW9jdGwoZmQsIFNJT0NTSUZGTEFHUywgXHUwMDI2aWZyKSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4gXG4tXHRleHBsYWluKFwmIzM0O2Nhbm5vdCBnZXQgbm9uLWV4aXN0ZW50IGxhYmVsXCYjMzQ7KTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApKTtcbi1cbi1cdGV4cGxhaW4oXCYjMzQ7Y2Fubm90IHB1dCBub24tZXhpc3RlbnQgbGFiZWxcJiMzNDspO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVxuLVx0ZXhwbGFpbihcJiMzNDtjYW5ub3QgY3JlYXRlIGxhYmVsIGdyZWF0ZXIgdGhhbiAyMCBiaXRzXCYjMzQ7KTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDB4MUZGRkZGLCBJUFY2X0ZMX1NfQU5ZLFxuLVx0XHRcdFx0ICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXG4tXHRleHBsYWluKFwmIzM0O2NyZWF0ZSBhIG5ldyBsYWJlbCAoRkxfRl9DUkVBVEUpXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2FuIGdldCB0aGUgbGFiZWwgKHdpdGhvdXQgRkxfRl9DUkVBVEUpXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2FuIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2Fubm90IGdldCBpdCBhZ2FpbiB3aXRoIHRoZSBleGNsdXNpdmUgKEZMX0ZMX0VYQ0wpIGZsYWdcJiMzNDspO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSxcbi1cdFx0XHRcdFx0IElQVjZfRkxfRl9DUkVBVEUgfCBJUFY2X0ZMX0ZfRVhDTCkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjYW4gbm93IHB1dCBleGFjdGx5IHRocmVlIHJlZmVyZW5jZXNcJiMzNDspO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xuLVxuLVx0ZXhwbGFpbihcJiMzNDtjcmVhdGUgYSBuZXcgZXhjbHVzaXZlIGxhYmVsIChGTF9TX0VYQ0wpXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlXCYjMzQ7KTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gZXhjbHVzaXZlIG1vZGUgZWl0aGVyXCYjMzQ7KTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAyKSk7XG4tXG4tXHRpZiAoY2ZnX2xvbmdfcnVubmluZykge1xuLVx0XHRleHBsYWluKFwmIzM0O2Nhbm5vdCByZXVzZSB0aGUgbGFiZWwsIGR1ZSB0byBsaW5nZXJcJiMzNDspO1xuLVx0XHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLFxuLVx0XHRcdFx0XHQgIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdFx0ZXhwbGFpbihcJiMzNDthZnRlciBzbGVlcCwgY2FuIHJldXNlXCYjMzQ7KTtcbi1cdFx0c2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSk7XG4tXHRcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksXG4tXHRcdFx0XHRcdCAgSVBWNl9GTF9GX0NSRUFURSkpO1xuJiM0MztlcnI6XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcdHJldHVybiAtMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRShmbG93bGFiZWwpIHt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9TRVRVUChmbG93bGFiZWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB1bnNoYXJlKENMT05FX05FV05FVCk7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgMCkge1xuJiM0MztcdFx0VEhfTE9HKFwmIzM0O3Vuc2hhcmUoQ0xPTkVfTkVXTkVUKSBmYWlsZWQ6ICVzXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuIFx0fVxuIFxuLVx0ZXhwbGFpbihcJiMzNDtjcmVhdGUgYSBuZXcgdXNlci1wcml2YXRlIGxhYmVsIChGTF9TX1VTRVIpXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlXCYjMzQ7KTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19BTlksIDApKTtcbi1cdGV4cGxhaW4oXCYjMzQ7Y2Fubm90IGdldCBpdCBhZ2FpbiBpbiBleGNsdXNpdmUgbW9kZVwmIzM0Oyk7XG4tXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfRVhDTCwgMCkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjYW4gZ2V0IGl0IGFnYWluIGluIHVzZXIgbW9kZVwmIzM0Oyk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjaGlsZCBwcm9jZXNzIGNhbiBnZXQgaXQgdG9vLCBidXQgbm90IGFmdGVyIHNldHVpZChub2JvZHkpXCYjMzQ7KTtcbiYjNDM7XHRyZXQgPSBicmluZ3VwX2xvb3BiYWNrKCk7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgMCkgVEhfTE9HKFwmIzM0O0ZhaWxlZCB0byBicmluZyB1cCBsb29wYmFjayBpbnRlcmZhY2VcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFX1RFQVJET1dOKGZsb3dsYWJlbClcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZmxvd2xhYmVsLCBjYW5ub3RfZ2V0X25vbl9leGlzdGVudF9sYWJlbClcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgZXJyO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCYjMzQ7c29ja2V0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDksIElQVjZfRkxfU19BTlksIDApO1xuJiM0MztcdEVYUEVDVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIGdldCBvZiBhIG5vbi1leGlzdGVudCBsYWJlbCB0byBmYWlsXCYjMzQ7KTtcbiYjNDM7XHRFWFBFQ1RfRVEoRU5PRU5ULCBlcnJubykgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIEVOT0VOVCwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUSgwLCBjbG9zZShmZCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZmxvd2xhYmVsLCBjYW5ub3RfcHV0X25vbl9leGlzdGVudF9sYWJlbClcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgZXJyO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCYjMzQ7c29ja2V0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEwKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBwdXQgb2YgYSBub24tZXhpc3RlbnQgbGFiZWwgdG8gZmFpbFwmIzM0Oyk7XG4mIzQzO1x0RVhQRUNUX0VRKEVTUkNILCBlcnJubykgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIEVTUkNILCBnb3QgJWRcJiMzNDssIGVycm5vKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihmbG93bGFiZWwsIGNhbm5vdF9jcmVhdGVfbGFiZWxfZ3JlYXRlcl90aGFuXzIwX2JpdHMpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIGVycjtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwmIzM0O3NvY2tldCBmYWlsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAweDFGRkZGRiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgbGFiZWwgXHUwMDNlIDIwIGJpdHMgdG8gYmUgcmVqZWN0ZWRcJiMzNDspO1xuJiM0MztcdEVYUEVDVF9FUShFSU5WQUwsIGVycm5vKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgRUlOVkFMLCBnb3QgJWRcJiMzNDssIGVycm5vKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihmbG93bGFiZWwsIGNhbl9jcmVhdGVfYW5kX2dldF9hbmRfcHV0X2xhYmVscylcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgZXJyO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCYjMzQ7c29ja2V0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGxhYmVsIChGTF9GX0NSRUFURSlcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGdldCB0aGUgbGFiZWwgd2l0aG91dCBGTF9GX0NSRUFURVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEVYUEVDVF9UUlVFKCFlcnIpXG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSxcbiYjNDM7XHRcdFx0ICAgIElQVjZfRkxfRl9DUkVBVEUgfCBJUFY2X0ZMX0ZfRVhDTCk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoZXJyKVxuJiM0MztcdFx0VEhfTE9HKFwmIzM0O2V4cGVjdGVkIEZMX0ZfRVhDTCB0byByZWplY3QgZXhpc3RpbmcgbGFiZWxcJiMzNDspO1xuJiM0MztcdEVYUEVDVF9FUShFRVhJU1QsIGVycm5vKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgRUVYSVNULCBnb3QgJWRcJiMzNDssIGVycm5vKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBwdXQgZmlyc3QgcmVmZXJlbmNlXCYjMzQ7KTtcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHB1dCBzZWNvbmQgcmVmZXJlbmNlXCYjMzQ7KTtcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHB1dCB0aGlyZCByZWZlcmVuY2VcJiMzNDspO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xuJiM0MztcdEVYUEVDVF9UUlVFKGVycilcbiYjNDM7XHRcdFRIX0xPRyhcJiMzNDtleHBlY3RlZCBmb3VydGggcHV0IHRvIGZhaWwsIG5vIHJlZmVyZW5jZXMgbGVmdFwmIzM0Oyk7XG4mIzQzO1x0RVhQRUNUX0VRKEVTUkNILCBlcnJubykgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIEVTUkNILCBnb3QgJWRcJiMzNDssIGVycm5vKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihmbG93bGFiZWwsIGV4Y2x1c2l2ZV9sYWJlbF9zaGFyZSlcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgZXJyO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCYjMzQ7c29ja2V0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKVxuJiM0MztcdFx0VEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZXhjbHVzaXZlIGxhYmVsIChGTF9TX0VYQ0wpXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgcmV1c2UgaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWxcJiMzNDspO1xuJiM0MztcdEVYUEVDVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRyhcJiMzNDtleHBlY3RlZCByZXVzZSBpbiBleGNsdXNpdmUgbW9kZSB0byBmYWlsIHRvb1wmIzM0Oyk7XG4mIzQzO1x0RVhQRUNUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIEVQRVJNLCBnb3QgJWRcJiMzNDssIGVycm5vKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMik7XG4mIzQzO1x0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBwdXQgdGhlIGV4Y2x1c2l2ZSBsYWJlbFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEVYUEVDVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIHJldXNlIHRvIGZhaWwsIGR1ZSB0byBsaW5nZXJcJiMzNDspO1xuJiM0MztcdEVYUEVDVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4mIzQzO1xuJiM0MztcdHNsZWVwKEZMX01JTl9MSU5HRVIgKiAyICYjNDM7IDEpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgcmV1c2UgdG8gc3VjY2VlZCBhZnRlciBsaW5nZXJcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGZsb3dsYWJlbCwgdXNlcl9wcml2YXRlX2xhYmVsX3NoYXJlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkLCBlcnIsIHdzdGF0dXM7XG4mIzQzO1x0cGlkX3QgcGlkO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCYjMzQ7c29ja2V0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKVxuJiM0MztcdFx0VEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgdXNlci1wcml2YXRlIGxhYmVsIChGTF9TX1VTRVIpXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0FOWSwgMCk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgZ2V0IGluIG5vbi1leGNsdXNpdmUgbW9kZSB0byBmYWlsXCYjMzQ7KTtcbiYjNDM7XHRFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFwmIzM0OywgZXJybm8pO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfRVhDTCwgMCk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoZXJyKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgZ2V0IGluIGV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWxcJiMzNDspO1xuJiM0MztcdEVYUEVDVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiBpbiB1c2VyIG1vZGVcJiMzNDspO1xuJiM0MztcbiBcdHBpZCA9IGZvcmsoKTtcbi1cdGlmIChwaWQgPT0gLTEpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtmb3JrXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfTkUoLTEsIHBpZCkgVEhfTE9HKFwmIzM0O2ZvcmsgZmFpbGVkXCYjMzQ7KTtcbiBcdGlmICghcGlkKSB7XG4tXHRcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7XG4mIzQzO1x0XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCk7XG4mIzQzO1x0XHRFWFBFQ1RfVFJVRSghZXJyKVxuJiM0MztcdFx0XHRUSF9MT0coXCYjMzQ7Y2hpbGQgZmFpbGVkIHRvIGdldCB0aGUgdXNlci1wcml2YXRlIGxhYmVsXCYjMzQ7KTtcbiYjNDM7XG4gXHRcdGlmIChzZXR1aWQoVVNIUlRfTUFYKSlcbi1cdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7W0lORk9dIHNraXAgc2V0dWlkIGNoaWxkIHRlc3RcXG5cJiMzNDspO1xuLVx0XHRlbHNlXG4tXHRcdFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKTtcbiYjNDM7XHRcdFx0ZXhpdChLU0ZUX1NLSVApO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcbiYjNDM7XHRcdEVYUEVDVF9UUlVFKGVycilcbiYjNDM7XHRcdFx0VEhfTE9HKFwmIzM0O2NoaWxkIHVuZXhwZWN0ZWRseSBnb3QgbGFiZWwgYWZ0ZXIgc2V0dWlkXCYjMzQ7KTtcbiYjNDM7XHRcdEVYUEVDVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4gXHRcdGV4aXQoMCk7XG4gXHR9XG4tXHRpZiAod2FpdChcdTAwMjZ3c3RhdHVzKSA9PSAtMSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O3dhaXRcJiMzNDspO1xuLVx0aWYgKCFXSUZFWElURUQod3N0YXR1cykgfHwgV0VYSVRTVEFUVVMod3N0YXR1cykgIT0gMClcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O3dhaXQ6IHVuZXhwZWN0ZWQgY2hpbGQgcmVzdWx0XCYjMzQ7KTtcbi1cbi1cdGV4cGxhaW4oXCYjMzQ7Y3JlYXRlIGEgbmV3IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbCAoRkxfU19QUk9DRVNTKVwmIzM0Oyk7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwbGFpbihcJiMzNDtjYW4gZ2V0IGl0IGFnYWluXCYjMzQ7KTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7XG4tXHRleHBsYWluKFwmIzM0O2NoaWxkIHByb2Nlc3MgY2Fubm90IGNhbiBnZXQgaXRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShwaWQsIHdhaXQoXHUwMDI2d3N0YXR1cykpIFRIX0xPRyhcJiMzNDt3YWl0IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoV0lGRVhJVEVEKHdzdGF0dXMpKSBUSF9MT0coXCYjMzQ7Y2hpbGQgZGlkIG5vdCBleGl0IG5vcm1hbGx5XCYjMzQ7KTtcbiYjNDM7XHRpZiAoV0VYSVRTVEFUVVMod3N0YXR1cykgPT0gS1NGVF9TS0lQKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sXG4mIzQzO1x0XHQgICAgIFwmIzM0O3NldHVpZChVU0hSVF9NQVgpIHVuYXZhaWxhYmxlIChubyBDQVBfU0VUVUlEIG9yIHVpZCB1bm1hcHBlZClcJiMzNDspO1xuJiM0MztcdEVYUEVDVF9FUSgwLCBXRVhJVFNUQVRVUyh3c3RhdHVzKSlcbiYjNDM7XHRcdFRIX0xPRyhcJiMzNDtjaGlsZCByZXBvcnRlZCB1bmV4cGVjdGVkIHJlc3VsdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUSgwLCBjbG9zZShmZCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZmxvd2xhYmVsLCBwcm9jZXNzX3ByaXZhdGVfbGFiZWxfc2hhcmUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIGVyciwgd3N0YXR1cztcbiYjNDM7XHRwaWRfdCBwaWQ7XG4mIzQzO1xuJiM0MztcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcJiMzNDtzb2NrZXQgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEVYUEVDVF9UUlVFKCFlcnIpXG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBwcm9jZXNzLXByaXZhdGUgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBnZXQgaXQgYWdhaW5cJiMzNDspO1xuJiM0MztcbiBcdHBpZCA9IGZvcmsoKTtcbi1cdGlmIChwaWQgPT0gLTEpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtmb3JrXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfTkUoLTEsIHBpZCkgVEhfTE9HKFwmIzM0O2ZvcmsgZmFpbGVkXCYjMzQ7KTtcbiBcdGlmICghcGlkKSB7XG4tXHRcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7XG4mIzQzO1x0XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCk7XG4mIzQzO1x0XHRFWFBFQ1RfVFJVRShlcnIpXG4mIzQzO1x0XHRcdFRIX0xPRyhcJiMzNDtjaGlsZCB1bmV4cGVjdGVkbHkgZ290IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbFwmIzM0Oyk7XG4mIzQzO1x0XHRFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFwmIzM0OywgZXJybm8pO1xuIFx0XHRleGl0KDApO1xuIFx0fVxuLVx0aWYgKHdhaXQoXHUwMDI2d3N0YXR1cykgPT0gLTEpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDt3YWl0XCYjMzQ7KTtcbi1cdGlmICghV0lGRVhJVEVEKHdzdGF0dXMpIHx8IFdFWElUU1RBVFVTKHdzdGF0dXMpICE9IDApXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDt3YWl0OiB1bmV4cGVjdGVkIGNoaWxkIHJlc3VsdFwmIzM0Oyk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuLXtcbi1cdGludCBjO1xuLVxuLVx0d2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0O2x2XCYjMzQ7KSkgIT0gLTEpIHtcbi1cdFx0c3dpdGNoIChjKSB7XG4tXHRcdGNhc2UgJiMzOTtsJiMzOTs6XG4tXHRcdFx0Y2ZnX2xvbmdfcnVubmluZyA9IHRydWU7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJiMzOTt2JiMzOTs6XG4tXHRcdFx0Y2ZnX3ZlcmJvc2UgPSB0cnVlO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdGVycm9yKDEsIDAsIFwmIzM0OyVzOiBwYXJzZSBlcnJvclwmIzM0OywgYXJndlswXSk7XG4tXHRcdH1cbi1cdH1cbiYjNDM7XHRBU1NFUlRfRVEocGlkLCB3YWl0KFx1MDAyNndzdGF0dXMpKSBUSF9MT0coXCYjMzQ7d2FpdCBmYWlsZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9UUlVFKFdJRkVYSVRFRCh3c3RhdHVzKSkgVEhfTE9HKFwmIzM0O2NoaWxkIGRpZCBub3QgZXhpdCBub3JtYWxseVwmIzM0Oyk7XG4mIzQzO1x0RVhQRUNUX0VRKDAsIFdFWElUU1RBVFVTKHdzdGF0dXMpKVxuJiM0MztcdFx0VEhfTE9HKFwmIzM0O2NoaWxkIHJlcG9ydGVkIHVuZXhwZWN0ZWQgcmVzdWx0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7XG4gfVxuIFxuLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiYjNDM7VEVTVF9GKGZsb3dsYWJlbCwgY2Fubm90X3JlbmV3X25vbl9leGlzdGVudF9sYWJlbClcbiB7XG4tXHRpbnQgZmQ7XG4mIzQzO1x0aW50IGZkLCBlcnI7XG4mIzQzO1xuJiM0MztcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcJiMzNDtzb2NrZXQgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX3JlbmV3KGZkLCA1LCBJUFY2X0ZMX1NfRVhDTCxcbiYjNDM7XHRcdFx0ICAgICAgMiAqIChGTF9NSU5fTElOR0VSICogMiAmIzQzOyAxKSk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoZXJyKVxuJiM0MztcdFx0VEhfTE9HKFwmIzM0O2V4cGVjdGVkIHJlbmV3IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWxcJiMzNDspO1xuJiM0MztcdEVYUEVDVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFU1JDSCwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4gXG4tXHRwYXJzZV9vcHRzKGFyZ2MsIGFyZ3YpO1xuJiM0MztcdEVYUEVDVF9FUSgwLCBjbG9zZShmZCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZmxvd2xhYmVsLCBjYW5fcmVuZXdfZXhpc3RpbmdfbGFiZWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIGVycjtcbiBcbiBcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcJiMzNDtzb2NrZXQgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNSwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xuJiM0MztcdEVYUEVDVF9UUlVFKCFlcnIpXG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBsYWJlbCBmb3IgcmVuZXcgdmFsaWRhdGlvblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNSwgSVBWNl9GTF9TX0VYQ0wsXG4mIzQzO1x0XHRcdCAgICAgIDIgKiAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSkpO1xuJiM0MztcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gcmVuZXcgYW4gZXhpc3RpbmcgdmFsaWQgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCA1KTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHB1dCB0aGUgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGZsb3dsYWJlbCwgcmVuZXdfbGFiZWxfbGluZ2VyKVxuJiM0Mzt7XG4mIzQzO1x0LyogUkVORVcgbXVzdCBleHRlbmQgYSBsYWJlbCYjMzk7cyBsaW5nZXIgcGVyaW9kOiBwdXR0aW5nIGEgcmVuZXdlZFxuJiM0MztcdCAqIGxhYmVsIGFuZCB3YWl0aW5nIG91dCBpdHMgb3JpZ2luYWwgbGluZ2VyIHRpbWUgbXVzdCBub3QgYmVcbiYjNDM7XHQgKiBlbm91Z2ggdG8gYWxsb3cgdGhlIGxhYmVsIHRvIGJlIHJlY3JlYXRlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpbnQgZmQsIGVycjtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuJiM0MztcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwmIzM0O3NvY2tldCBmYWlsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA2LCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoIWVycilcbiYjNDM7XHRcdFRIX0xPRyhcJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGxhYmVsIHdpdGggRkxfTUlOX0xJTkdFUiBsaW5nZXIgdGltZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNiwgSVBWNl9GTF9TX0VYQ0wsXG4mIzQzO1x0XHRcdCAgICAgIDIgKiAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSkpO1xuJiM0MztcdEVYUEVDVF9UUlVFKCFlcnIpXG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHJlbmV3IHRoZSBsYWJlbCB0byBpbmNyZWFzZSBpdHMgbGluZ2VyIHRpbWVcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCA2KTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHB1dCB0aGUgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzbGVlcChGTF9NSU5fTElOR0VSICogMiAmIzQzOyAxKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoZXJyKVxuJiM0MztcdFx0VEhfTE9HKFwmIzM0O2V4cGVjdGVkIHJldXNlIHRvIGZhaWwsIG5ldyBsaW5nZXIgdGltZSBub3Qgb3ZlciB5ZXRcJiMzNDspO1xuJiM0MztcdEVYUEVDVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUSgwLCBjbG9zZShmZCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZmxvd2xhYmVsLCByZW1vdGVfZmxhZylcbiYjNDM7e1xuJiM0MztcdC8qIFRoZSBSRU1PVEUgZmxhZywgdXNlZCBmb3IgZ2V0c29ja29wdCwgaXMgZXhwZWN0ZWQgdG8gcmV0cmlldmUgdGhlXG4mIzQzO1x0ICogbGFiZWwgZnJvbSB0aGUgbGF0ZXN0IHJlY2VpdmVkIGhlYWRlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgZnJlcSA9IHtcbiYjNDM7XHRcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCxcbiYjNDM7XHRcdC5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVNT1RFLFxuJiM0MztcdH07XG4mIzQzO1x0c29ja2xlbl90IGZyZXFfbGVuID0gc2l6ZW9mKGZyZXEpO1xuJiM0MztcdGludCBsaXN0ZW5lciwgY2ZkLCBhZmQsIGVycjtcbiYjNDM7XG4mIzQzO1x0bGlzdGVuZXIgPSB0Y3BfbGlzdGVuKCk7XG4mIzQzO1x0dGNwX2Nvbm5lY3QobGlzdGVuZXIsIDcsIFx1MDAyNmNmZCwgXHUwMDI2YWZkKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZ2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNmZyZXEsIFx1MDAyNmZyZXFfbGVuKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7Z2V0c29ja29wdCB3aXRoIElQVjZfRkxfRl9SRU1PVEUgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRFWFBFQ1RfRVEoNywgbnRvaGwoZnJlcS5mbHJfbGFiZWwpKVxuJiM0MztcdFx0VEhfTE9HKFwmIzM0O3VuZXhwZWN0ZWQgcmVtb3RlIGZsb3cgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoMCwgY2xvc2UoYWZkKSk7XG4mIzQzO1x0RVhQRUNUX0VRKDAsIGNsb3NlKGNmZCkpO1xuJiM0MztcdEVYUEVDVF9FUSgwLCBjbG9zZShsaXN0ZW5lcikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBkaXNhYmxlX2Zsb3dsYWJlbF9jb25zaXN0ZW5jeSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4oXCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY2L2Zsb3dsYWJlbF9jb25zaXN0ZW5jeVwmIzM0OywgT19XUk9OTFkpO1xuIFx0aWYgKGZkID09IC0xKVxuLVx0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7c29ja2V0XCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJ1bl90ZXN0cyhmZCk7XG4mIzQzO1x0aWYgKHdyaXRlKGZkLCBcJiMzNDswXCYjMzQ7LCAxKSAhPSAxKSB7XG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcdGNsb3NlKGZkKTtcbiBcbi1cdGlmIChjbG9zZShmZCkpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtjbG9zZVwmIzM0Oyk7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiBcbi1cdHJldHVybiAwO1xuJiM0MztURVNUX0YoZmxvd2xhYmVsLCByZWZsZWN0X2ZsYWcpXG4mIzQzO3tcbiYjNDM7XHQvKiBUaGUgUkVGTEVDVCBmbGFnIGFjdHMgYXMgYSB0cmlnZ2VyIHRvIHRoZSBSRVBGTE9XIGJpdC4gV2hlbiBSRVBGTE9XXG4mIzQzO1x0ICogaXMgdHJpZ2dlcmVkIGZvciBhIHNvY2tldCwgaXQgYWRvcHRzIHRoZSBsYWJlbCByZWNlaXZlZCBmcm9tIHRoZVxuJiM0MztcdCAqIGNvbm5lY3RlZCBzb2NrZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlZmxlY3Rfb24gPSB7XG4mIzQzO1x0XHQuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsXG4mIzQzO1x0XHQuZmxyX2ZsYWdzID0gSVBWNl9GTF9GX1JFRkxFQ1QsXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9xdWVyeSA9IHtcbiYjNDM7XHRcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZWZsZWN0X29mZiA9IHtcbiYjNDM7XHRcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX1BVVCxcbiYjNDM7XHRcdC5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVGTEVDVCxcbiYjNDM7XHR9O1xuJiM0MztcdHNvY2tsZW5fdCByZWZsZWN0X3F1ZXJ5X2xlbiA9IHNpemVvZihyZWZsZWN0X3F1ZXJ5KTtcbiYjNDM7XHRpbnQgbGlzdGVuZXIsIGNmZCwgYWZkLCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghZGlzYWJsZV9mbG93bGFiZWxfY29uc2lzdGVuY3koKSlcbiYjNDM7XHRcdFNLSVAocmV0dXJuLFxuJiM0MztcdFx0ICAgICBcJiMzNDtjYW5ub3QgZGlzYWJsZSBuZXQuaXB2Ni5mbG93bGFiZWxfY29uc2lzdGVuY3lcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRsaXN0ZW5lciA9IHRjcF9saXN0ZW4oKTtcbiYjNDM7XHRlcnIgPSBzZXRzb2Nrb3B0KGxpc3RlbmVyLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLFxuJiM0MztcdFx0XHQgXHUwMDI2cmVmbGVjdF9vbiwgc2l6ZW9mKHJlZmxlY3Rfb24pKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBSRUZMRUNUIG9uIHRoZSBsaXN0ZW5lclwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHRjcF9jb25uZWN0KGxpc3RlbmVyLCA4LCBcdTAwMjZjZmQsIFx1MDAyNmFmZCk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLFxuJiM0MztcdFx0XHQgXHUwMDI2cmVmbGVjdF9xdWVyeSwgXHUwMDI2cmVmbGVjdF9xdWVyeV9sZW4pO1xuJiM0MztcdEVYUEVDVF9UUlVFKCFlcnIpXG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7ZmFpbGVkIHRvIHF1ZXJ5IHRoZSBhY2NlcHRlZCBzb2NrZXQmIzM5O3Mgb3V0Z29pbmcgbGFiZWxcJiMzNDspO1xuJiM0MztcdEVYUEVDVF9FUSg4LCBudG9obChyZWZsZWN0X3F1ZXJ5LmZscl9sYWJlbCkpXG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7YWNjZXB0ZWQgc29ja2V0IGRpZCBub3QgcmVmbGVjdCBjbGllbnQmIzM5O3MgbGFiZWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBzZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUixcbiYjNDM7XHRcdFx0IFx1MDAyNnJlZmxlY3Rfb2ZmLCBzaXplb2YocmVmbGVjdF9vZmYpKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRSghZXJyKVxuJiM0MztcdFx0VEhfTE9HKFwmIzM0O2ZhaWxlZCB0byBkaXNhYmxlIFJFRkxFQ1Qgb24gdGhlIGFjY2VwdGVkIHNvY2tldFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IHNldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLFxuJiM0MztcdFx0XHQgXHUwMDI2cmVmbGVjdF9vZmYsIHNpemVvZihyZWZsZWN0X29mZikpO1xuJiM0MztcdEVYUEVDVF9UUlVFKGVycikgVEhfTE9HKFwmIzM0O2V4cGVjdGVkIGRpc2FibGluZyBSRUZMRUNUIHR3aWNlIHRvIGZhaWxcJiMzNDspO1xuJiM0MztcdEVYUEVDVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRyhcJiMzNDtleHBlY3RlZCBFU1JDSCwgZ290ICVkXCYjMzQ7LCBlcnJubyk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUSgwLCBjbG9zZShhZmQpKTtcbiYjNDM7XHRFWFBFQ1RfRVEoMCwgY2xvc2UoY2ZkKSk7XG4mIzQzO1x0RVhQRUNUX0VRKDAsIGNsb3NlKGxpc3RlbmVyKSk7XG4gfVxuJiM0MztcbiYjNDM7VEVTVF9IQVJORVNTX01BSU5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMgYW5kIGlwdjZfZmxvd2xhYmVsLnNoKSBieSByZXdyaXRpbmcgdGhlIHRlc3QgdG8gdXNlIHRoZSBrc2VsZnRlc3QgaGFybmVzcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzE4NjY1NzFmYmJjY2ZiZGEwNmM5OTU0ZWE3YWM5MmQ3OTcwNDE3YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMjI6NTY6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWwuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWwuc2gKaW5kZXggY2VlOTVlMjUyYmVlNS4uMmVlZGEzOWJmNjRjYiAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaApAQCAtOCw3ICYjNDM7OCw3IEBACiBzZXQgLWUKIAogZWNobyAmIzM0O1RFU1QgbWFuYWdlbWVudCYjMzQ7Ci0uL2luX25ldG5zLnNoIC4vaXB2Nl9mbG93bGFiZWxfbWdyCiYjNDM7Li9pcHY2X2Zsb3dsYWJlbF9tZ3IKIAogZWNobyAmIzM0O1RFU1QgZGF0YXBhdGgmIzM0OwogLi9pbl9uZXRucy5zaCBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMKaW5kZXggYWY5NWI0OGFjZWE5MC4uMDcyZmIzYTliMTIxNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYwpAQCAtNiw0NSAmIzQzOzYsMzYgQEAKICNpbmNsdWRlICZsdDthcnBhL2luZXQuaCZndDsKICNpbmNsdWRlICZsdDtlcnJvci5oJmd0OwogI2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGltaXRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW42LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9pZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzY2hlZC5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGJvb2wuaCZndDsKICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwogI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvaW9jdGwuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvc29ja2V0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3N0YXQuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvdGltZS5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy90eXBlcy5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKIAogLyogdWFwaS9nbGliYyB3ZWlyZG5lc3MgbWF5IGxlYXZlIHRoaXMgdW5kZWZpbmVkICovCiAjaWZuZGVmIElQVjZfRkxPV0xBQkVMX01HUgogI2RlZmluZSBJUFY2X0ZMT1dMQUJFTF9NR1IJMzIKICNlbmRpZgomIzQzOyNpZm5kZWYgSVBWNl9GTE9XSU5GT19TRU5ECiYjNDM7I2RlZmluZSBJUFY2X0ZMT1dJTkZPX1NFTkQJMzMKJiM0MzsjZW5kaWYKIAogLyogZnJvbSBuZXQvaXB2Ni9pcDZfZmxvd2xhYmVsLmMgKi8KICNkZWZpbmUgRkxfTUlOX0xJTkdFUgkJNgogCi0jZGVmaW5lIGV4cGxhaW4oeCkJCQkJCQkJXAotCWRvIHsgaWYgKGNmZ192ZXJib3NlKSBmcHJpbnRmKHN0ZGVyciwgJiMzNDsgICAgICAgJiMzNDsgeCAmIzM0O1xuJiMzNDspOyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIF9fZXhwZWN0KHgpCQkJCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCWlmICghKHgpKQkJCQkJCVwKLQkJCWZwcmludGYoc3RkZXJyLCAmIzM0O1tPS10gICAmIzM0OyAjeCAmIzM0O1xuJiMzNDspOwkJXAotCQllbHNlCQkJCQkJCVwKLQkJCWVycm9yKDEsIDAsICYjMzQ7W0VSUl0gICYjMzQ7ICN4ICYjMzQ7IChsaW5lICVkKSYjMzQ7LCBfX0xJTkVfXyk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIGV4cGVjdF9wYXNzKHgpCV9fZXhwZWN0KHgpCi0jZGVmaW5lIGV4cGVjdF9mYWlsKHgpCV9fZXhwZWN0KCEoeCkpCi0KLXN0YXRpYyBib29sIGNmZ19sb25nX3J1bm5pbmc7Ci1zdGF0aWMgYm9vbCBjZmdfdmVyYm9zZTsKLQogc3RhdGljIGludCBmbG93bGFiZWxfZ2V0KGludCBmZCwgdWludDMyX3QgbGFiZWwsIHVpbnQ4X3Qgc2hhcmUsIHVpbnQxNl90IGZsYWdzKQogewogCXN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZXEgPSB7CkBAIC03MSwxMjkgJiM0Mzs2Miw0ODQgQEAgc3RhdGljIGludCBmbG93bGFiZWxfcHV0KGludCBmZCwgdWludDMyX3QgbGFiZWwpCiAJcmV0dXJuIHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsICZhbXA7cmVxLCBzaXplb2YocmVxKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ1bl90ZXN0cyhpbnQgZmQpCiYjNDM7c3RhdGljIGludCBmbG93bGFiZWxfcmVuZXcoaW50IGZkLCB1aW50MzJfdCBsYWJlbCwgdWludDhfdCBzaGFyZSwKJiM0MzsJCQkgICB1aW50MTZfdCBsaW5nZXIpCiB7Ci0JaW50IHdzdGF0dXM7Ci0JcGlkX3QgcGlkOwomIzQzOwlzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVxID0gewomIzQzOwkJLmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUkVORVcsCiYjNDM7CQkuZmxyX2xhYmVsID0gaHRvbmwobGFiZWwpLAomIzQzOwkJLmZscl9zaGFyZSA9IHNoYXJlLAomIzQzOwkJLmZscl9saW5nZXIgPSBsaW5nZXIsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBzZXRzb2Nrb3B0KGZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLCAmYW1wO3JlcSwgc2l6ZW9mKHJlcSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luNiBsb29wYmFja19hZGRyKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHIgPSB7CiYjNDM7CQkuc2luNl9mYW1pbHkJPSBBRl9JTkVUNiwKJiM0MzsJCS5zaW42X2FkZHIJPSBJTjZBRERSX0xPT1BCQUNLX0lOSVQsCiYjNDM7CQkuc2luNl9wb3J0CT0gaHRvbnMoODg4OCksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBhZGRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRjcF9saXN0ZW4odm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkciA9IGxvb3BiYWNrX2FkZHIoKTsKJiM0MzsJY29uc3QgaW50IG9uZSA9IDE7CiYjNDM7CWludCBmZDsKJiM0MzsKJiM0MzsJZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfU1RSRUFNLCAwKTsKJiM0MzsJaWYgKGZkID09IC0xKQomIzQzOwkJZXJyb3IoMSwgZXJybm8sICYjMzQ7c29ja2V0IGxpc3RlbmVyJiMzNDspOwomIzQzOwlpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAmYW1wO29uZSwgc2l6ZW9mKG9uZSkpKQomIzQzOwkJZXJyb3IoMSwgZXJybm8sICYjMzQ7c2V0c29ja29wdCBTT19SRVVTRUFERFImIzM0Oyk7CiYjNDM7CWlmIChiaW5kKGZkLCAodm9pZCAqKSZhbXA7YWRkciwgc2l6ZW9mKGFkZHIpKSkKJiM0MzsJCWVycm9yKDEsIGVycm5vLCAmIzM0O2JpbmQmIzM0Oyk7CiYjNDM7CWlmIChsaXN0ZW4oZmQsIDEpKQomIzQzOwkJZXJyb3IoMSwgZXJybm8sICYjMzQ7bGlzdGVuJiMzNDspOwomIzQzOwomIzQzOwlyZXR1cm4gZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRjcF9jb25uZWN0KGludCBsaXN0ZW5lciwgdWludDMyX3QgZmxvd2xhYmVsLAomIzQzOwkJCWludCAqY2xpZW50LCBpbnQgKmFjY2VwdGVkKQomIzQzO3sKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luNiBhZGRyID0gbG9vcGJhY2tfYWRkcigpOwomIzQzOwljb25zdCBpbnQgb25lID0gMTsKJiM0MzsJaW50IGNmZCwgYWZkOwomIzQzOwomIzQzOwljZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfU1RSRUFNLCAwKTsKJiM0MzsJaWYgKGNmZCA9PSAtMSkKJiM0MzsJCWVycm9yKDEsIGVycm5vLCAmIzM0O3NvY2tldCBjbGllbnQmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChmbG93bGFiZWxfZ2V0KGNmZCwgZmxvd2xhYmVsLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtmbG93bGFiZWxfZ2V0JiMzNDspOwomIzQzOwlpZiAoc2V0c29ja29wdChjZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dJTkZPX1NFTkQsICZhbXA7b25lLCBzaXplb2Yob25lKSkpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtzZXRzb2Nrb3B0IGZsb3dpbmZvX3NlbmQmIzM0Oyk7CiYjNDM7CWFkZHIuc2luNl9mbG93aW5mbyA9IGh0b25sKGZsb3dsYWJlbCk7CiYjNDM7CiYjNDM7CWlmIChjb25uZWN0KGNmZCwgKHZvaWQgKikmYW1wO2FkZHIsIHNpemVvZihhZGRyKSkpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtjb25uZWN0JiMzNDspOwomIzQzOwomIzQzOwlhZmQgPSBhY2NlcHQobGlzdGVuZXIsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoYWZkID09IC0xKQomIzQzOwkJZXJyb3IoMSwgZXJybm8sICYjMzQ7YWNjZXB0JiMzNDspOwomIzQzOwomIzQzOwlpZiAoZmxvd2xhYmVsX3B1dChjZmQsIGZsb3dsYWJlbCkpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtmbG93bGFiZWxfcHV0JiMzNDspOwomIzQzOwomIzQzOwkqY2xpZW50ID0gY2ZkOwomIzQzOwkqYWNjZXB0ZWQgPSBhZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnJpbmd1cF9sb29wYmFjayh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGlmcmVxIGlmciA9IHsKJiM0MzsJCS5pZnJfbmFtZSA9ICYjMzQ7bG8mIzM0OwomIzQzOwl9OwomIzQzOwlpbnQgZmQ7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KEFGX0xPQ0FMLCBTT0NLX1NUUkVBTSwgMCk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWlmIChpb2N0bChmZCwgU0lPQ0dJRkZMQUdTLCAmYW1wO2lmcikgJmx0OyAwKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWlmci5pZnJfZmxhZ3MgPSBpZnIuaWZyX2ZsYWdzIHwgSUZGX1VQOwomIzQzOwomIzQzOwlpZiAoaW9jdGwoZmQsIFNJT0NTSUZGTEFHUywgJmFtcDtpZnIpICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CXJldHVybiAwOwogCi0JZXhwbGFpbigmIzM0O2Nhbm5vdCBnZXQgbm9uLWV4aXN0ZW50IGxhYmVsJiMzNDspOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApKTsKLQotCWV4cGxhaW4oJiMzNDtjYW5ub3QgcHV0IG5vbi1leGlzdGVudCBsYWJlbCYjMzQ7KTsKLQlleHBlY3RfZmFpbChmbG93bGFiZWxfcHV0KGZkLCAxKSk7Ci0KLQlleHBsYWluKCYjMzQ7Y2Fubm90IGNyZWF0ZSBsYWJlbCBncmVhdGVyIHRoYW4gMjAgYml0cyYjMzQ7KTsKLQlleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAweDFGRkZGRiwgSVBWNl9GTF9TX0FOWSwKLQkJCQkgIElQVjZfRkxfRl9DUkVBVEUpKTsKLQotCWV4cGxhaW4oJiMzNDtjcmVhdGUgYSBuZXcgbGFiZWwgKEZMX0ZfQ1JFQVRFKSYjMzQ7KTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0JZXhwbGFpbigmIzM0O2NhbiBnZXQgdGhlIGxhYmVsICh3aXRob3V0IEZMX0ZfQ1JFQVRFKSYjMzQ7KTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKSk7Ci0JZXhwbGFpbigmIzM0O2NhbiBnZXQgaXQgYWdhaW4gd2l0aCBjcmVhdGUgZmxhZyBzZXQsIHRvbyYjMzQ7KTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0JZXhwbGFpbigmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gd2l0aCB0aGUgZXhjbHVzaXZlIChGTF9GTF9FWENMKSBmbGFnJiMzNDspOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksCi0JCQkJCSBJUFY2X0ZMX0ZfQ1JFQVRFIHwgSVBWNl9GTF9GX0VYQ0wpKTsKLQlleHBsYWluKCYjMzQ7Y2FuIG5vdyBwdXQgZXhhY3RseSB0aHJlZSByZWZlcmVuY2VzJiMzNDspOwotCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAxKSk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTsKLQotCWV4cGxhaW4oJiMzNDtjcmVhdGUgYSBuZXcgZXhjbHVzaXZlIGxhYmVsIChGTF9TX0VYQ0wpJiMzNDspOwotCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0JZXhwbGFpbigmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlJiMzNDspOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0JZXhwbGFpbigmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gZXhjbHVzaXZlIG1vZGUgZWl0aGVyJiMzNDspOwotCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMikpOwotCi0JaWYgKGNmZ19sb25nX3J1bm5pbmcpIHsKLQkJZXhwbGFpbigmIzM0O2Nhbm5vdCByZXVzZSB0aGUgbGFiZWwsIGR1ZSB0byBsaW5nZXImIzM0Oyk7Ci0JCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksCi0JCQkJCSAgSVBWNl9GTF9GX0NSRUFURSkpOwotCQlleHBsYWluKCYjMzQ7YWZ0ZXIgc2xlZXAsIGNhbiByZXVzZSYjMzQ7KTsKLQkJc2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgJiM0MzsgMSk7Ci0JCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksCi0JCQkJCSAgSVBWNl9GTF9GX0NSRUFURSkpOwomIzQzO2VycjoKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlyZXR1cm4gLTE7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkUoZmxvd2xhYmVsKSB7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKGZsb3dsYWJlbCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHVuc2hhcmUoQ0xPTkVfTkVXTkVUKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgMCkgewomIzQzOwkJVEhfTE9HKCYjMzQ7dW5zaGFyZShDTE9ORV9ORVdORVQpIGZhaWxlZDogJXMmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKIAl9CiAKLQlleHBsYWluKCYjMzQ7Y3JlYXRlIGEgbmV3IHVzZXItcHJpdmF0ZSBsYWJlbCAoRkxfU19VU0VSKSYjMzQ7KTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgSVBWNl9GTF9GX0NSRUFURSkpOwotCWV4cGxhaW4oJiMzNDtjYW5ub3QgZ2V0IGl0IGFnYWluIGluIG5vbi1leGNsdXNpdmUgbW9kZSYjMzQ7KTsKLQlleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfQU5ZLCAwKSk7Ci0JZXhwbGFpbigmIzM0O2Nhbm5vdCBnZXQgaXQgYWdhaW4gaW4gZXhjbHVzaXZlIG1vZGUmIzM0Oyk7Ci0JZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0VYQ0wsIDApKTsKLQlleHBsYWluKCYjMzQ7Y2FuIGdldCBpdCBhZ2FpbiBpbiB1c2VyIG1vZGUmIzM0Oyk7Ci0JZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKTsKLQlleHBsYWluKCYjMzQ7Y2hpbGQgcHJvY2VzcyBjYW4gZ2V0IGl0IHRvbywgYnV0IG5vdCBhZnRlciBzZXR1aWQobm9ib2R5KSYjMzQ7KTsKJiM0MzsJcmV0ID0gYnJpbmd1cF9sb29wYmFjaygpOwomIzQzOwlBU1NFUlRfRVEocmV0LCAwKSBUSF9MT0coJiMzNDtGYWlsZWQgdG8gYnJpbmcgdXAgbG9vcGJhY2sgaW50ZXJmYWNlJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFX1RFQVJET1dOKGZsb3dsYWJlbCkKJiM0Mzt7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihmbG93bGFiZWwsIGNhbm5vdF9nZXRfbm9uX2V4aXN0ZW50X2xhYmVsKQomIzQzO3sKJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA5LCBJUFY2X0ZMX1NfQU5ZLCAwKTsKJiM0MzsJRVhQRUNUX1RSVUUoZXJyKSBUSF9MT0coJiMzNDtleHBlY3RlZCBnZXQgb2YgYSBub24tZXhpc3RlbnQgbGFiZWwgdG8gZmFpbCYjMzQ7KTsKJiM0MzsJRVhQRUNUX0VRKEVOT0VOVCwgZXJybm8pIFRIX0xPRygmIzM0O2V4cGVjdGVkIEVOT0VOVCwgZ290ICVkJiMzNDssIGVycm5vKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihmbG93bGFiZWwsIGNhbm5vdF9wdXRfbm9uX2V4aXN0ZW50X2xhYmVsKQomIzQzO3sKJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxMCk7CiYjNDM7CUVYUEVDVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgcHV0IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWwmIzM0Oyk7CiYjNDM7CUVYUEVDVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRygmIzM0O2V4cGVjdGVkIEVTUkNILCBnb3QgJWQmIzM0OywgZXJybm8pOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGZsb3dsYWJlbCwgY2Fubm90X2NyZWF0ZV9sYWJlbF9ncmVhdGVyX3RoYW5fMjBfYml0cykKJiM0Mzt7CiYjNDM7CWludCBmZCwgZXJyOwomIzQzOwomIzQzOwlmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CiYjNDM7CUFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKCYjMzQ7c29ja2V0IGZhaWxlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMHgxRkZGRkYsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIGxhYmVsICZndDsgMjAgYml0cyB0byBiZSByZWplY3RlZCYjMzQ7KTsKJiM0MzsJRVhQRUNUX0VRKEVJTlZBTCwgZXJybm8pIFRIX0xPRygmIzM0O2V4cGVjdGVkIEVJTlZBTCwgZ290ICVkJiMzNDssIGVycm5vKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihmbG93bGFiZWwsIGNhbl9jcmVhdGVfYW5kX2dldF9hbmRfcHV0X2xhYmVscykKJiM0Mzt7CiYjNDM7CWludCBmZCwgZXJyOwomIzQzOwomIzQzOwlmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CiYjNDM7CUFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKCYjMzQ7c29ja2V0IGZhaWxlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBjcmVhdGUgbGFiZWwgKEZMX0ZfQ1JFQVRFKSYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgMCk7CiYjNDM7CUVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBnZXQgdGhlIGxhYmVsIHdpdGhvdXQgRkxfRl9DUkVBVEUmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlFWFBFQ1RfVFJVRSghZXJyKQomIzQzOwkJVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLAomIzQzOwkJCSAgICBJUFY2X0ZMX0ZfQ1JFQVRFIHwgSVBWNl9GTF9GX0VYQ0wpOwomIzQzOwlFWFBFQ1RfVFJVRShlcnIpCiYjNDM7CQlUSF9MT0coJiMzNDtleHBlY3RlZCBGTF9GX0VYQ0wgdG8gcmVqZWN0IGV4aXN0aW5nIGxhYmVsJiMzNDspOwomIzQzOwlFWFBFQ1RfRVEoRUVYSVNULCBlcnJubykgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgRUVYSVNULCBnb3QgJWQmIzM0OywgZXJybm8pOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTsKJiM0MzsJRVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIHB1dCBmaXJzdCByZWZlcmVuY2UmIzM0Oyk7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpOwomIzQzOwlFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gcHV0IHNlY29uZCByZWZlcmVuY2UmIzM0Oyk7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpOwomIzQzOwlFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coJiMzNDtmYWlsZWQgdG8gcHV0IHRoaXJkIHJlZmVyZW5jZSYjMzQ7KTsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7CiYjNDM7CUVYUEVDVF9UUlVFKGVycikKJiM0MzsJCVRIX0xPRygmIzM0O2V4cGVjdGVkIGZvdXJ0aCBwdXQgdG8gZmFpbCwgbm8gcmVmZXJlbmNlcyBsZWZ0JiMzNDspOwomIzQzOwlFWFBFQ1RfRVEoRVNSQ0gsIGVycm5vKSBUSF9MT0coJiMzNDtleHBlY3RlZCBFU1JDSCwgZ290ICVkJiMzNDssIGVycm5vKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihmbG93bGFiZWwsIGV4Y2x1c2l2ZV9sYWJlbF9zaGFyZSkKJiM0Mzt7CiYjNDM7CWludCBmZCwgZXJyOwomIzQzOwomIzQzOwlmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CiYjNDM7CUFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKCYjMzQ7c29ja2V0IGZhaWxlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlFWFBFQ1RfVFJVRSghZXJyKQomIzQzOwkJVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBleGNsdXNpdmUgbGFiZWwgKEZMX1NfRVhDTCkmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIHJldXNlIGluIG5vbi1leGNsdXNpdmUgbW9kZSB0byBmYWlsJiMzNDspOwomIzQzOwlFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkJiMzNDssIGVycm5vKTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIHJldXNlIGluIGV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWwgdG9vJiMzNDspOwomIzQzOwlFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkJiMzNDssIGVycm5vKTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMik7CiYjNDM7CUVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBwdXQgdGhlIGV4Y2x1c2l2ZSBsYWJlbCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUVYUEVDVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgZHVlIHRvIGxpbmdlciYjMzQ7KTsKJiM0MzsJRVhQRUNUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZCYjMzQ7LCBlcnJubyk7CiYjNDM7CiYjNDM7CXNsZWVwKEZMX01JTl9MSU5HRVIgKiAyICYjNDM7IDEpOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTsKJiM0MzsJRVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgcmV1c2UgdG8gc3VjY2VlZCBhZnRlciBsaW5nZXImIzM0Oyk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUSgwLCBjbG9zZShmZCkpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoZmxvd2xhYmVsLCB1c2VyX3ByaXZhdGVfbGFiZWxfc2hhcmUpCiYjNDM7ewomIzQzOwlpbnQgZmQsIGVyciwgd3N0YXR1czsKJiM0MzsJcGlkX3QgcGlkOwomIzQzOwomIzQzOwlmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CiYjNDM7CUFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKCYjMzQ7c29ja2V0IGZhaWxlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlFWFBFQ1RfVFJVRSghZXJyKQomIzQzOwkJVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyB1c2VyLXByaXZhdGUgbGFiZWwgKEZMX1NfVVNFUikmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19BTlksIDApOwomIzQzOwlFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRygmIzM0O2V4cGVjdGVkIGdldCBpbiBub24tZXhjbHVzaXZlIG1vZGUgdG8gZmFpbCYjMzQ7KTsKJiM0MzsJRVhQRUNUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZCYjMzQ7LCBlcnJubyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19FWENMLCAwKTsKJiM0MzsJRVhQRUNUX1RSVUUoZXJyKSBUSF9MT0coJiMzNDtleHBlY3RlZCBnZXQgaW4gZXhjbHVzaXZlIG1vZGUgdG8gZmFpbCYjMzQ7KTsKJiM0MzsJRVhQRUNUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZCYjMzQ7LCBlcnJubyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTsKJiM0MzsJRVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiBpbiB1c2VyIG1vZGUmIzM0Oyk7CiYjNDM7CiAJcGlkID0gZm9yaygpOwotCWlmIChwaWQgPT0gLTEpCi0JCWVycm9yKDEsIGVycm5vLCAmIzM0O2ZvcmsmIzM0Oyk7CiYjNDM7CUFTU0VSVF9ORSgtMSwgcGlkKSBUSF9MT0coJiMzNDtmb3JrIGZhaWxlZCYjMzQ7KTsKIAlpZiAoIXBpZCkgewotCQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpOwomIzQzOwkJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApOwomIzQzOwkJRVhQRUNUX1RSVUUoIWVycikKJiM0MzsJCQlUSF9MT0coJiMzNDtjaGlsZCBmYWlsZWQgdG8gZ2V0IHRoZSB1c2VyLXByaXZhdGUgbGFiZWwmIzM0Oyk7CiYjNDM7CiAJCWlmIChzZXR1aWQoVVNIUlRfTUFYKSkKLQkJCWZwcmludGYoc3RkZXJyLCAmIzM0O1tJTkZPXSBza2lwIHNldHVpZCBjaGlsZCB0ZXN0XG4mIzM0Oyk7Ci0JCWVsc2UKLQkJCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7CiYjNDM7CQkJZXhpdChLU0ZUX1NLSVApOwomIzQzOwomIzQzOwkJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApOwomIzQzOwkJRVhQRUNUX1RSVUUoZXJyKQomIzQzOwkJCVRIX0xPRygmIzM0O2NoaWxkIHVuZXhwZWN0ZWRseSBnb3QgbGFiZWwgYWZ0ZXIgc2V0dWlkJiMzNDspOwomIzQzOwkJRVhQRUNUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZCYjMzQ7LCBlcnJubyk7CiAJCWV4aXQoMCk7CiAJfQotCWlmICh3YWl0KCZhbXA7d3N0YXR1cykgPT0gLTEpCi0JCWVycm9yKDEsIGVycm5vLCAmIzM0O3dhaXQmIzM0Oyk7Ci0JaWYgKCFXSUZFWElURUQod3N0YXR1cykgfHwgV0VYSVRTVEFUVVMod3N0YXR1cykgIT0gMCkKLQkJZXJyb3IoMSwgZXJybm8sICYjMzQ7d2FpdDogdW5leHBlY3RlZCBjaGlsZCByZXN1bHQmIzM0Oyk7Ci0KLQlleHBsYWluKCYjMzQ7Y3JlYXRlIGEgbmV3IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbCAoRkxfU19QUk9DRVNTKSYjMzQ7KTsKLQlleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgSVBWNl9GTF9GX0NSRUFURSkpOwotCWV4cGxhaW4oJiMzNDtjYW4gZ2V0IGl0IGFnYWluJiMzNDspOwotCWV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7Ci0JZXhwbGFpbigmIzM0O2NoaWxkIHByb2Nlc3MgY2Fubm90IGNhbiBnZXQgaXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShwaWQsIHdhaXQoJmFtcDt3c3RhdHVzKSkgVEhfTE9HKCYjMzQ7d2FpdCBmYWlsZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9UUlVFKFdJRkVYSVRFRCh3c3RhdHVzKSkgVEhfTE9HKCYjMzQ7Y2hpbGQgZGlkIG5vdCBleGl0IG5vcm1hbGx5JiMzNDspOwomIzQzOwlpZiAoV0VYSVRTVEFUVVMod3N0YXR1cykgPT0gS1NGVF9TS0lQKQomIzQzOwkJU0tJUChyZXR1cm4sCiYjNDM7CQkgICAgICYjMzQ7c2V0dWlkKFVTSFJUX01BWCkgdW5hdmFpbGFibGUgKG5vIENBUF9TRVRVSUQgb3IgdWlkIHVubWFwcGVkKSYjMzQ7KTsKJiM0MzsJRVhQRUNUX0VRKDAsIFdFWElUU1RBVFVTKHdzdGF0dXMpKQomIzQzOwkJVEhfTE9HKCYjMzQ7Y2hpbGQgcmVwb3J0ZWQgdW5leHBlY3RlZCByZXN1bHQmIzM0Oyk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUSgwLCBjbG9zZShmZCkpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoZmxvd2xhYmVsLCBwcm9jZXNzX3ByaXZhdGVfbGFiZWxfc2hhcmUpCiYjNDM7ewomIzQzOwlpbnQgZmQsIGVyciwgd3N0YXR1czsKJiM0MzsJcGlkX3QgcGlkOwomIzQzOwomIzQzOwlmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CiYjNDM7CUFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKCYjMzQ7c29ja2V0IGZhaWxlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIElQVjZfRkxfRl9DUkVBVEUpOwomIzQzOwlFWFBFQ1RfVFJVRSghZXJyKQomIzQzOwkJVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBwcm9jZXNzLXByaXZhdGUgbGFiZWwmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKTsKJiM0MzsJRVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiYjMzQ7KTsKJiM0MzsKIAlwaWQgPSBmb3JrKCk7Ci0JaWYgKHBpZCA9PSAtMSkKLQkJZXJyb3IoMSwgZXJybm8sICYjMzQ7Zm9yayYjMzQ7KTsKJiM0MzsJQVNTRVJUX05FKC0xLCBwaWQpIFRIX0xPRygmIzM0O2ZvcmsgZmFpbGVkJiMzNDspOwogCWlmICghcGlkKSB7Ci0JCWV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7CiYjNDM7CQllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCk7CiYjNDM7CQlFWFBFQ1RfVFJVRShlcnIpCiYjNDM7CQkJVEhfTE9HKCYjMzQ7Y2hpbGQgdW5leHBlY3RlZGx5IGdvdCBwcm9jZXNzLXByaXZhdGUgbGFiZWwmIzM0Oyk7CiYjNDM7CQlFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coJiMzNDtleHBlY3RlZCBFUEVSTSwgZ290ICVkJiMzNDssIGVycm5vKTsKIAkJZXhpdCgwKTsKIAl9Ci0JaWYgKHdhaXQoJmFtcDt3c3RhdHVzKSA9PSAtMSkKLQkJZXJyb3IoMSwgZXJybm8sICYjMzQ7d2FpdCYjMzQ7KTsKLQlpZiAoIVdJRkVYSVRFRCh3c3RhdHVzKSB8fCBXRVhJVFNUQVRVUyh3c3RhdHVzKSAhPSAwKQotCQllcnJvcigxLCBlcnJubywgJiMzNDt3YWl0OiB1bmV4cGVjdGVkIGNoaWxkIHJlc3VsdCYjMzQ7KTsKLX0KLQotc3RhdGljIHZvaWQgcGFyc2Vfb3B0cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0JaW50IGM7Ci0KLQl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgJiMzNDtsdiYjMzQ7KSkgIT0gLTEpIHsKLQkJc3dpdGNoIChjKSB7Ci0JCWNhc2UgJiMzOTtsJiMzOTs6Ci0JCQljZmdfbG9uZ19ydW5uaW5nID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQljYXNlICYjMzk7diYjMzk7OgotCQkJY2ZnX3ZlcmJvc2UgPSB0cnVlOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQllcnJvcigxLCAwLCAmIzM0OyVzOiBwYXJzZSBlcnJvciYjMzQ7LCBhcmd2WzBdKTsKLQkJfQotCX0KJiM0MzsJQVNTRVJUX0VRKHBpZCwgd2FpdCgmYW1wO3dzdGF0dXMpKSBUSF9MT0coJiMzNDt3YWl0IGZhaWxlZCYjMzQ7KTsKJiM0MzsJQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHdzdGF0dXMpKSBUSF9MT0coJiMzNDtjaGlsZCBkaWQgbm90IGV4aXQgbm9ybWFsbHkmIzM0Oyk7CiYjNDM7CUVYUEVDVF9FUSgwLCBXRVhJVFNUQVRVUyh3c3RhdHVzKSkKJiM0MzsJCVRIX0xPRygmIzM0O2NoaWxkIHJlcG9ydGVkIHVuZXhwZWN0ZWQgcmVzdWx0JiMzNDspOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQomIzQzO1RFU1RfRihmbG93bGFiZWwsIGNhbm5vdF9yZW5ld19ub25fZXhpc3RlbnRfbGFiZWwpCiB7Ci0JaW50IGZkOwomIzQzOwlpbnQgZmQsIGVycjsKJiM0MzsKJiM0MzsJZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApIFRIX0xPRygmIzM0O3NvY2tldCBmYWlsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNSwgSVBWNl9GTF9TX0VYQ0wsCiYjNDM7CQkJICAgICAgMiAqIChGTF9NSU5fTElOR0VSICogMiAmIzQzOyAxKSk7CiYjNDM7CUVYUEVDVF9UUlVFKGVycikKJiM0MzsJCVRIX0xPRygmIzM0O2V4cGVjdGVkIHJlbmV3IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWwmIzM0Oyk7CiYjNDM7CUVYUEVDVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRygmIzM0O2V4cGVjdGVkIEVTUkNILCBnb3QgJWQmIzM0OywgZXJybm8pOwogCi0JcGFyc2Vfb3B0cyhhcmdjLCBhcmd2KTsKJiM0MzsJRVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihmbG93bGFiZWwsIGNhbl9yZW5ld19leGlzdGluZ19sYWJlbCkKJiM0Mzt7CiYjNDM7CWludCBmZCwgZXJyOwogCiAJZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApIFRIX0xPRygmIzM0O3NvY2tldCBmYWlsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDUsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKTsKJiM0MzsJRVhQRUNUX1RSVUUoIWVycikKJiM0MzsJCVRIX0xPRygmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgbGFiZWwgZm9yIHJlbmV3IHZhbGlkYXRpb24mIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNSwgSVBWNl9GTF9TX0VYQ0wsCiYjNDM7CQkJICAgICAgMiAqIChGTF9NSU5fTElOR0VSICogMiAmIzQzOyAxKSk7CiYjNDM7CUVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byByZW5ldyBhbiBleGlzdGluZyB2YWxpZCBsYWJlbCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgNSk7CiYjNDM7CUVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRygmIzM0O2ZhaWxlZCB0byBwdXQgdGhlIGxhYmVsJiMzNDspOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGZsb3dsYWJlbCwgcmVuZXdfbGFiZWxfbGluZ2VyKQomIzQzO3sKJiM0MzsJLyogUkVORVcgbXVzdCBleHRlbmQgYSBsYWJlbCYjMzk7cyBsaW5nZXIgcGVyaW9kOiBwdXR0aW5nIGEgcmVuZXdlZAomIzQzOwkgKiBsYWJlbCBhbmQgd2FpdGluZyBvdXQgaXRzIG9yaWdpbmFsIGxpbmdlciB0aW1lIG11c3Qgbm90IGJlCiYjNDM7CSAqIGVub3VnaCB0byBhbGxvdyB0aGUgbGFiZWwgdG8gYmUgcmVjcmVhdGVkLgomIzQzOwkgKi8KJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coJiMzNDtzb2NrZXQgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA2LCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7CiYjNDM7CUVYUEVDVF9UUlVFKCFlcnIpCiYjNDM7CQlUSF9MT0coJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGxhYmVsIHdpdGggRkxfTUlOX0xJTkdFUiBsaW5nZXIgdGltZSYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gZmxvd2xhYmVsX3JlbmV3KGZkLCA2LCBJUFY2X0ZMX1NfRVhDTCwKJiM0MzsJCQkgICAgICAyICogKEZMX01JTl9MSU5HRVIgKiAyICYjNDM7IDEpKTsKJiM0MzsJRVhQRUNUX1RSVUUoIWVycikKJiM0MzsJCVRIX0xPRygmIzM0O2ZhaWxlZCB0byByZW5ldyB0aGUgbGFiZWwgdG8gaW5jcmVhc2UgaXRzIGxpbmdlciB0aW1lJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfcHV0KGZkLCA2KTsKJiM0MzsJRVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIHB1dCB0aGUgbGFiZWwmIzM0Oyk7CiYjNDM7CiYjNDM7CXNsZWVwKEZMX01JTl9MSU5HRVIgKiAyICYjNDM7IDEpOwomIzQzOwomIzQzOwllcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA2LCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTsKJiM0MzsJRVhQRUNUX1RSVUUoZXJyKQomIzQzOwkJVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgbmV3IGxpbmdlciB0aW1lIG5vdCBvdmVyIHlldCYjMzQ7KTsKJiM0MzsJRVhQRUNUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZCYjMzQ7LCBlcnJubyk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUSgwLCBjbG9zZShmZCkpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoZmxvd2xhYmVsLCByZW1vdGVfZmxhZykKJiM0Mzt7CiYjNDM7CS8qIFRoZSBSRU1PVEUgZmxhZywgdXNlZCBmb3IgZ2V0c29ja29wdCwgaXMgZXhwZWN0ZWQgdG8gcmV0cmlldmUgdGhlCiYjNDM7CSAqIGxhYmVsIGZyb20gdGhlIGxhdGVzdCByZWNlaXZlZCBoZWFkZXIuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgZnJlcSA9IHsKJiM0MzsJCS5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCwKJiM0MzsJCS5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVNT1RFLAomIzQzOwl9OwomIzQzOwlzb2NrbGVuX3QgZnJlcV9sZW4gPSBzaXplb2YoZnJlcSk7CiYjNDM7CWludCBsaXN0ZW5lciwgY2ZkLCBhZmQsIGVycjsKJiM0MzsKJiM0MzsJbGlzdGVuZXIgPSB0Y3BfbGlzdGVuKCk7CiYjNDM7CXRjcF9jb25uZWN0KGxpc3RlbmVyLCA3LCAmYW1wO2NmZCwgJmFtcDthZmQpOwomIzQzOwomIzQzOwllcnIgPSBnZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgJmFtcDtmcmVxLCAmYW1wO2ZyZXFfbGVuKTsKJiM0MzsJRVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7Z2V0c29ja29wdCB3aXRoIElQVjZfRkxfRl9SRU1PVEUgZmFpbGVkJiMzNDspOwomIzQzOwlFWFBFQ1RfRVEoNywgbnRvaGwoZnJlcS5mbHJfbGFiZWwpKQomIzQzOwkJVEhfTE9HKCYjMzQ7dW5leHBlY3RlZCByZW1vdGUgZmxvdyBsYWJlbCYjMzQ7KTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKDAsIGNsb3NlKGFmZCkpOwomIzQzOwlFWFBFQ1RfRVEoMCwgY2xvc2UoY2ZkKSk7CiYjNDM7CUVYUEVDVF9FUSgwLCBjbG9zZShsaXN0ZW5lcikpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBkaXNhYmxlX2Zsb3dsYWJlbF9jb25zaXN0ZW5jeSh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjYvZmxvd2xhYmVsX2NvbnNpc3RlbmN5JiMzNDssIE9fV1JPTkxZKTsKIAlpZiAoZmQgPT0gLTEpCi0JCWVycm9yKDEsIGVycm5vLCAmIzM0O3NvY2tldCYjMzQ7KTsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAotCXJ1bl90ZXN0cyhmZCk7CiYjNDM7CWlmICh3cml0ZShmZCwgJiMzNDswJiMzNDssIDEpICE9IDEpIHsKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwljbG9zZShmZCk7CiAKLQlpZiAoY2xvc2UoZmQpKQotCQllcnJvcigxLCBlcnJubywgJiMzNDtjbG9zZSYjMzQ7KTsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQogCi0JcmV0dXJuIDA7CiYjNDM7VEVTVF9GKGZsb3dsYWJlbCwgcmVmbGVjdF9mbGFnKQomIzQzO3sKJiM0MzsJLyogVGhlIFJFRkxFQ1QgZmxhZyBhY3RzIGFzIGEgdHJpZ2dlciB0byB0aGUgUkVQRkxPVyBiaXQuIFdoZW4gUkVQRkxPVwomIzQzOwkgKiBpcyB0cmlnZ2VyZWQgZm9yIGEgc29ja2V0LCBpdCBhZG9wdHMgdGhlIGxhYmVsIHJlY2VpdmVkIGZyb20gdGhlCiYjNDM7CSAqIGNvbm5lY3RlZCBzb2NrZXQuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9vbiA9IHsKJiM0MzsJCS5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCwKJiM0MzsJCS5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVGTEVDVCwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlZmxlY3RfcXVlcnkgPSB7CiYjNDM7CQkuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZWZsZWN0X29mZiA9IHsKJiM0MzsJCS5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX1BVVCwKJiM0MzsJCS5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVGTEVDVCwKJiM0MzsJfTsKJiM0MzsJc29ja2xlbl90IHJlZmxlY3RfcXVlcnlfbGVuID0gc2l6ZW9mKHJlZmxlY3RfcXVlcnkpOwomIzQzOwlpbnQgbGlzdGVuZXIsIGNmZCwgYWZkLCBlcnI7CiYjNDM7CiYjNDM7CWlmICghZGlzYWJsZV9mbG93bGFiZWxfY29uc2lzdGVuY3koKSkKJiM0MzsJCVNLSVAocmV0dXJuLAomIzQzOwkJICAgICAmIzM0O2Nhbm5vdCBkaXNhYmxlIG5ldC5pcHY2LmZsb3dsYWJlbF9jb25zaXN0ZW5jeSYjMzQ7KTsKJiM0MzsKJiM0MzsJbGlzdGVuZXIgPSB0Y3BfbGlzdGVuKCk7CiYjNDM7CWVyciA9IHNldHNvY2tvcHQobGlzdGVuZXIsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsCiYjNDM7CQkJICZhbXA7cmVmbGVjdF9vbiwgc2l6ZW9mKHJlZmxlY3Rfb24pKTsKJiM0MzsJRVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBSRUZMRUNUIG9uIHRoZSBsaXN0ZW5lciYjMzQ7KTsKJiM0MzsKJiM0MzsJdGNwX2Nvbm5lY3QobGlzdGVuZXIsIDgsICZhbXA7Y2ZkLCAmYW1wO2FmZCk7CiYjNDM7CiYjNDM7CWVyciA9IGdldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLAomIzQzOwkJCSAmYW1wO3JlZmxlY3RfcXVlcnksICZhbXA7cmVmbGVjdF9xdWVyeV9sZW4pOwomIzQzOwlFWFBFQ1RfVFJVRSghZXJyKQomIzQzOwkJVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIHF1ZXJ5IHRoZSBhY2NlcHRlZCBzb2NrZXQmIzM5O3Mgb3V0Z29pbmcgbGFiZWwmIzM0Oyk7CiYjNDM7CUVYUEVDVF9FUSg4LCBudG9obChyZWZsZWN0X3F1ZXJ5LmZscl9sYWJlbCkpCiYjNDM7CQlUSF9MT0coJiMzNDthY2NlcHRlZCBzb2NrZXQgZGlkIG5vdCByZWZsZWN0IGNsaWVudCYjMzk7cyBsYWJlbCYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gc2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsCiYjNDM7CQkJICZhbXA7cmVmbGVjdF9vZmYsIHNpemVvZihyZWZsZWN0X29mZikpOwomIzQzOwlFWFBFQ1RfVFJVRSghZXJyKQomIzQzOwkJVEhfTE9HKCYjMzQ7ZmFpbGVkIHRvIGRpc2FibGUgUkVGTEVDVCBvbiB0aGUgYWNjZXB0ZWQgc29ja2V0JiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBzZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwKJiM0MzsJCQkgJmFtcDtyZWZsZWN0X29mZiwgc2l6ZW9mKHJlZmxlY3Rfb2ZmKSk7CiYjNDM7CUVYUEVDVF9UUlVFKGVycikgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgZGlzYWJsaW5nIFJFRkxFQ1QgdHdpY2UgdG8gZmFpbCYjMzQ7KTsKJiM0MzsJRVhQRUNUX0VRKEVTUkNILCBlcnJubykgVEhfTE9HKCYjMzQ7ZXhwZWN0ZWQgRVNSQ0gsIGdvdCAlZCYjMzQ7LCBlcnJubyk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUSgwLCBjbG9zZShhZmQpKTsKJiM0MzsJRVhQRUNUX0VRKDAsIGNsb3NlKGNmZCkpOwomIzQzOwlFWFBFQ1RfRVEoMCwgY2xvc2UobGlzdGVuZXIpKTsKIH0KJiM0MzsKJiM0MztURVNUX0hBUk5FU1NfTUFJTgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE4MQoJCQkJCQkJb3V0cHV0OiA5NAoJCQkJCQkJdGhvdWdodHM6IDY2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IElQdjYgRmxvdyBMYWJlbCBTZWxmdGVzdCBQYXRjaCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0htbSwgYGlwdjZfZmxvd2xhYmVsLnNoYCBhbmQgYGlwdjZfZmxvd2xhYmVsX21nci5jYCBhcmUgYmVpbmcgdG91Y2hlZC4mIzM0OyAgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBtZWFucyB3ZSBzaG91bGQgZnV6eiBiYXNlZCBvbiB0aGlzLCBvciBub3QuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSByZXdyaXRpbmcgdGhlIGBpcHY2X2Zsb3dsYWJlbF9tZ3IuY2AgdGVzdCB1c2luZyBga3NlbGZ0ZXN0X2hhcm5lc3MuaGAgYW5kIHJlbW92aW5nIHRoYXQgYGluX25ldG5zLnNoYCB3cmFwcGVyLCBzaW5jZSBpdCYjMzk7cyBub3cgaGFuZGxpbmcgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIHVuc2hhcmluZyBpdHNlbGYuCgpGaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBpZiBrZXJuZWwgY29kZSBpcyBjaGFuZ2VkLiBMZXQmIzM5O3Mgc2VlLi4uICBOb3BlLCB0aGUgZGlmZiBpcyBvbmx5IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWwuc2hgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jYC4gTm90aGluZyBpbiB0aGUgY29yZSBrZXJuZWwuCgpUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBUaGV5IGxpc3QgdGhpbmdzIGxpa2UgZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgdW5yZWFjaGFibGUgY29kZSwgZXRjLiAgSXQgZG9lc24mIzM5O3QgKmV4cGxpY2l0bHkqIG1lbnRpb24gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AsIGJ1dCBjb21tb24gc2Vuc2UgdGVsbHMgbWUgc2VsZnRlc3RzIGFyZSAqdXNlcnNwYWNlKiB0ZXN0cywgbm90IGtlcm5lbCBjb2RlLiBUaGV5IGRvbiYjMzk7dCBhZmZlY3QgdGhlIGtlcm5lbCYjMzk7cyBleGVjdXRpb24gZmxvdyBkaXJlY3RseS4gIEEgY2hhbmdlIHRvIGEgdGVzdCBkb2VzbiYjMzk7dCBtZWFuIHdlIG5lZWQgdG8gZnV6eiB0aGUga2VybmVsIGl0c2VsZi4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTttIHF1aWNrbHkgY29uZmlybWluZyB0aGVyZSBhcmUgKm5vKiBvdGhlciBmaWxlcyBjaGFuZ2VkLiBOb3BlLCBqdXN0IHRob3NlIHR3by4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpcyBhIG5vLWdvIGZvciBmdXp6aW5nLiBJdCYjMzk7cyBzdHJpY3RseSBhYm91dCBtb2RpZnlpbmcgdGhlIHNlbGZ0ZXN0cywgc3BlY2lmaWNhbGx5IHRvIHVzZSBhIGRpZmZlcmVudCB0ZXN0aW5nIGZyYW1ld29yay4gSXQgZG9lcyAqbm90KiBtb2RpZnkgYW55IGtlcm5lbCBjb2RlIG9yIGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLgoKTXkgY29uY2x1c2lvbiBpczogYFdvcnRoRnV6emluZz1mYWxzZWAuIFRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jIGFuZCBpcHY2X2Zsb3dsYWJlbC5zaCkgYnkgcmV3cml0aW5nIHRoZSB0ZXN0IHRvIHVzZSB0aGUga3NlbGZ0ZXN0IGhhcm5lc3MuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMgYW5kIGlwdjZfZmxvd2xhYmVsLnNoKSBieSByZXdyaXRpbmcgdGhlIHRlc3QgdG8gdXNlIHRoZSBrc2VsZnRlc3QgaGFybmVzcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjo1NjowMy4xOTIyMDM2MTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTcyOTk0MjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMgYW5kIGlwdjZfZmxvd2xhYmVsLnNoKSBieSByZXdyaXRpbmcgdGhlIHRlc3QgdG8gdXNlIHRoZSBrc2VsZnRlc3QgaGFybmVzcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjo1NjowMy4xOTIyMDkxMzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMDg3MzgzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMxODY2NTcxZmJiY2NmYmRhMDZjOTk1NGVhN2FjOTJkNzk3MDQxN2NcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAyMjo1NjowMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWwuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWwuc2hcXG5pbmRleCBjZWU5NWUyNTJiZWU1Li4yZWVkYTM5YmY2NGNiIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaFxcbkBAIC04LDcgKzgsNyBAQFxcbiBzZXQgLWVcXG4gXFxuIGVjaG8gXFxcIlRFU1QgbWFuYWdlbWVudFxcXCJcXG4tLi9pbl9uZXRucy5zaCAuL2lwdjZfZmxvd2xhYmVsX21nclxcbisuL2lwdjZfZmxvd2xhYmVsX21nclxcbiBcXG4gZWNobyBcXFwiVEVTVCBkYXRhcGF0aFxcXCJcXG4gLi9pbl9uZXRucy5zaCBcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuY1xcbmluZGV4IGFmOTViNDhhY2VhOTAuLjA3MmZiM2E5YjEyMTcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jXFxuQEAgLTYsNDUgKzYsMzYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FycGEvaW5ldC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjZXJyb3IuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGltaXRzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbjYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9pZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc2NoZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRpbnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvaW9jdGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9zb2NrZXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9zdGF0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdGltZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3R5cGVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvd2FpdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbiBcXG4gLyogdWFwaS9nbGliYyB3ZWlyZG5lc3MgbWF5IGxlYXZlIHRoaXMgdW5kZWZpbmVkICovXFxuICNpZm5kZWYgSVBWNl9GTE9XTEFCRUxfTUdSXFxuICNkZWZpbmUgSVBWNl9GTE9XTEFCRUxfTUdSXFx0MzJcXG4gI2VuZGlmXFxuKyNpZm5kZWYgSVBWNl9GTE9XSU5GT19TRU5EXFxuKyNkZWZpbmUgSVBWNl9GTE9XSU5GT19TRU5EXFx0MzNcXG4rI2VuZGlmXFxuIFxcbiAvKiBmcm9tIG5ldC9pcHY2L2lwNl9mbG93bGFiZWwuYyAqL1xcbiAjZGVmaW5lIEZMX01JTl9MSU5HRVJcXHRcXHQ2XFxuIFxcbi0jZGVmaW5lIGV4cGxhaW4oeClcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdGRvIHsgaWYgKGNmZ192ZXJib3NlKSBmcHJpbnRmKHN0ZGVyciwgXFxcIiAgICAgICBcXFwiIHggXFxcIlxcXFxuXFxcIik7IH0gd2hpbGUgKDApXFxuLVxcbi0jZGVmaW5lIF9fZXhwZWN0KHgpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHRpZiAoISh4KSlcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiW09LXSAgIFxcXCIgI3ggXFxcIlxcXFxuXFxcIik7XFx0XFx0XFxcXFxcbi1cXHRcXHRlbHNlXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHRcXHRlcnJvcigxLCAwLCBcXFwiW0VSUl0gIFxcXCIgI3ggXFxcIiAobGluZSAlZClcXFwiLCBfX0xJTkVfXyk7IFxcXFxcXG4tXFx0fSB3aGlsZSAoMClcXG4tXFxuLSNkZWZpbmUgZXhwZWN0X3Bhc3MoeClcXHRfX2V4cGVjdCh4KVxcbi0jZGVmaW5lIGV4cGVjdF9mYWlsKHgpXFx0X19leHBlY3QoISh4KSlcXG4tXFxuLXN0YXRpYyBib29sIGNmZ19sb25nX3J1bm5pbmc7XFxuLXN0YXRpYyBib29sIGNmZ192ZXJib3NlO1xcbi1cXG4gc3RhdGljIGludCBmbG93bGFiZWxfZ2V0KGludCBmZCwgdWludDMyX3QgbGFiZWwsIHVpbnQ4X3Qgc2hhcmUsIHVpbnQxNl90IGZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZXEgPSB7XFxuQEAgLTcxLDEyOSArNjIsNDg0IEBAIHN0YXRpYyBpbnQgZmxvd2xhYmVsX3B1dChpbnQgZmQsIHVpbnQzMl90IGxhYmVsKVxcbiBcXHRyZXR1cm4gc2V0c29ja29wdChmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSkpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBydW5fdGVzdHMoaW50IGZkKVxcbitzdGF0aWMgaW50IGZsb3dsYWJlbF9yZW5ldyhpbnQgZmQsIHVpbnQzMl90IGxhYmVsLCB1aW50OF90IHNoYXJlLFxcbitcXHRcXHRcXHQgICB1aW50MTZfdCBsaW5nZXIpXFxuIHtcXG4tXFx0aW50IHdzdGF0dXM7XFxuLVxcdHBpZF90IHBpZDtcXG4rXFx0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlcSA9IHtcXG4rXFx0XFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUkVORVcsXFxuK1xcdFxcdC5mbHJfbGFiZWwgPSBodG9ubChsYWJlbCksXFxuK1xcdFxcdC5mbHJfc2hhcmUgPSBzaGFyZSxcXG4rXFx0XFx0LmZscl9saW5nZXIgPSBsaW5nZXIsXFxuK1xcdH07XFxuK1xcbitcXHRyZXR1cm4gc2V0c29ja29wdChmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSkpO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luNiBsb29wYmFja19hZGRyKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHNvY2thZGRyX2luNiBhZGRyID0ge1xcbitcXHRcXHQuc2luNl9mYW1pbHlcXHQ9IEFGX0lORVQ2LFxcbitcXHRcXHQuc2luNl9hZGRyXFx0PSBJTjZBRERSX0xPT1BCQUNLX0lOSVQsXFxuK1xcdFxcdC5zaW42X3BvcnRcXHQ9IGh0b25zKDg4ODgpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIGFkZHI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGNwX2xpc3Rlbih2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkciA9IGxvb3BiYWNrX2FkZHIoKTtcXG4rXFx0Y29uc3QgaW50IG9uZSA9IDE7XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX1NUUkVBTSwgMCk7XFxuK1xcdGlmIChmZCA9PSAtMSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJzb2NrZXQgbGlzdGVuZXJcXFwiKTtcXG4rXFx0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgXFx1MDAyNm9uZSwgc2l6ZW9mKG9uZSkpKVxcbitcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcInNldHNvY2tvcHQgU09fUkVVU0VBRERSXFxcIik7XFxuK1xcdGlmIChiaW5kKGZkLCAodm9pZCAqKVxcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpKVxcbitcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcImJpbmRcXFwiKTtcXG4rXFx0aWYgKGxpc3RlbihmZCwgMSkpXFxuK1xcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwibGlzdGVuXFxcIik7XFxuK1xcbitcXHRyZXR1cm4gZmQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRjcF9jb25uZWN0KGludCBsaXN0ZW5lciwgdWludDMyX3QgZmxvd2xhYmVsLFxcbitcXHRcXHRcXHRpbnQgKmNsaWVudCwgaW50ICphY2NlcHRlZClcXG4re1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHIgPSBsb29wYmFja19hZGRyKCk7XFxuK1xcdGNvbnN0IGludCBvbmUgPSAxO1xcbitcXHRpbnQgY2ZkLCBhZmQ7XFxuK1xcbitcXHRjZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfU1RSRUFNLCAwKTtcXG4rXFx0aWYgKGNmZCA9PSAtMSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJzb2NrZXQgY2xpZW50XFxcIik7XFxuK1xcbitcXHRpZiAoZmxvd2xhYmVsX2dldChjZmQsIGZsb3dsYWJlbCwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpKVxcbitcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcImZsb3dsYWJlbF9nZXRcXFwiKTtcXG4rXFx0aWYgKHNldHNvY2tvcHQoY2ZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XSU5GT19TRU5ELCBcXHUwMDI2b25lLCBzaXplb2Yob25lKSkpXFxuK1xcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwic2V0c29ja29wdCBmbG93aW5mb19zZW5kXFxcIik7XFxuK1xcdGFkZHIuc2luNl9mbG93aW5mbyA9IGh0b25sKGZsb3dsYWJlbCk7XFxuK1xcbitcXHRpZiAoY29ubmVjdChjZmQsICh2b2lkICopXFx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSkpXFxuK1xcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwiY29ubmVjdFxcXCIpO1xcbitcXG4rXFx0YWZkID0gYWNjZXB0KGxpc3RlbmVyLCBOVUxMLCBOVUxMKTtcXG4rXFx0aWYgKGFmZCA9PSAtMSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJhY2NlcHRcXFwiKTtcXG4rXFxuK1xcdGlmIChmbG93bGFiZWxfcHV0KGNmZCwgZmxvd2xhYmVsKSlcXG4rXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJmbG93bGFiZWxfcHV0XFxcIik7XFxuK1xcbitcXHQqY2xpZW50ID0gY2ZkO1xcbitcXHQqYWNjZXB0ZWQgPSBhZmQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnJpbmd1cF9sb29wYmFjayh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBpZnJlcSBpZnIgPSB7XFxuK1xcdFxcdC5pZnJfbmFtZSA9IFxcXCJsb1xcXCJcXG4rXFx0fTtcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoQUZfTE9DQUwsIFNPQ0tfU1RSRUFNLCAwKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0aWYgKGlvY3RsKGZkLCBTSU9DR0lGRkxBR1MsIFxcdTAwMjZpZnIpIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRpZnIuaWZyX2ZsYWdzID0gaWZyLmlmcl9mbGFncyB8IElGRl9VUDtcXG4rXFxuK1xcdGlmIChpb2N0bChmZCwgU0lPQ1NJRkZMQUdTLCBcXHUwMDI2aWZyKSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGV4cGxhaW4oXFxcImNhbm5vdCBnZXQgbm9uLWV4aXN0ZW50IGxhYmVsXFxcIik7XFxuLVxcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApKTtcXG4tXFxuLVxcdGV4cGxhaW4oXFxcImNhbm5vdCBwdXQgbm9uLWV4aXN0ZW50IGxhYmVsXFxcIik7XFxuLVxcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcXG4tXFxuLVxcdGV4cGxhaW4oXFxcImNhbm5vdCBjcmVhdGUgbGFiZWwgZ3JlYXRlciB0aGFuIDIwIGJpdHNcXFwiKTtcXG4tXFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMHgxRkZGRkYsIElQVjZfRkxfU19BTlksXFxuLVxcdFxcdFxcdFxcdCAgSVBWNl9GTF9GX0NSRUFURSkpO1xcbi1cXG4tXFx0ZXhwbGFpbihcXFwiY3JlYXRlIGEgbmV3IGxhYmVsIChGTF9GX0NSRUFURSlcXFwiKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSkpO1xcbi1cXHRleHBsYWluKFxcXCJjYW4gZ2V0IHRoZSBsYWJlbCAod2l0aG91dCBGTF9GX0NSRUFURSlcXFwiKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgMCkpO1xcbi1cXHRleHBsYWluKFxcXCJjYW4gZ2V0IGl0IGFnYWluIHdpdGggY3JlYXRlIGZsYWcgc2V0LCB0b29cXFwiKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSkpO1xcbi1cXHRleHBsYWluKFxcXCJjYW5ub3QgZ2V0IGl0IGFnYWluIHdpdGggdGhlIGV4Y2x1c2l2ZSAoRkxfRkxfRVhDTCkgZmxhZ1xcXCIpO1xcbi1cXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLFxcbi1cXHRcXHRcXHRcXHRcXHQgSVBWNl9GTF9GX0NSRUFURSB8IElQVjZfRkxfRl9FWENMKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNhbiBub3cgcHV0IGV4YWN0bHkgdGhyZWUgcmVmZXJlbmNlc1xcXCIpO1xcbi1cXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfcHV0KGZkLCAxKSk7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMSkpO1xcbi1cXHRleHBlY3RfZmFpbChmbG93bGFiZWxfcHV0KGZkLCAxKSk7XFxuLVxcbi1cXHRleHBsYWluKFxcXCJjcmVhdGUgYSBuZXcgZXhjbHVzaXZlIGxhYmVsIChGTF9TX0VYQ0wpXFxcIik7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNhbm5vdCBnZXQgaXQgYWdhaW4gaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlXFxcIik7XFxuLVxcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNhbm5vdCBnZXQgaXQgYWdhaW4gaW4gZXhjbHVzaXZlIG1vZGUgZWl0aGVyXFxcIik7XFxuLVxcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDIpKTtcXG4tXFxuLVxcdGlmIChjZmdfbG9uZ19ydW5uaW5nKSB7XFxuLVxcdFxcdGV4cGxhaW4oXFxcImNhbm5vdCByZXVzZSB0aGUgbGFiZWwsIGR1ZSB0byBsaW5nZXJcXFwiKTtcXG4tXFx0XFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XFxuLVxcdFxcdGV4cGxhaW4oXFxcImFmdGVyIHNsZWVwLCBjYW4gcmV1c2VcXFwiKTtcXG4tXFx0XFx0c2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgKyAxKTtcXG4tXFx0XFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XFxuK2VycjpcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRyZXR1cm4gLTE7XFxuK31cXG4rXFxuK0ZJWFRVUkUoZmxvd2xhYmVsKSB7fTtcXG4rXFxuK0ZJWFRVUkVfU0VUVVAoZmxvd2xhYmVsKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSB1bnNoYXJlKENMT05FX05FV05FVCk7XFxuK1xcdEFTU0VSVF9FUShyZXQsIDApIHtcXG4rXFx0XFx0VEhfTE9HKFxcXCJ1bnNoYXJlKENMT05FX05FV05FVCkgZmFpbGVkOiAlc1xcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuIFxcdH1cXG4gXFxuLVxcdGV4cGxhaW4oXFxcImNyZWF0ZSBhIG5ldyB1c2VyLXByaXZhdGUgbGFiZWwgKEZMX1NfVVNFUilcXFwiKTtcXG4tXFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIElQVjZfRkxfRl9DUkVBVEUpKTtcXG4tXFx0ZXhwbGFpbihcXFwiY2Fubm90IGdldCBpdCBhZ2FpbiBpbiBub24tZXhjbHVzaXZlIG1vZGVcXFwiKTtcXG4tXFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0FOWSwgMCkpO1xcbi1cXHRleHBsYWluKFxcXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIGV4Y2x1c2l2ZSBtb2RlXFxcIik7XFxuLVxcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19FWENMLCAwKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNhbiBnZXQgaXQgYWdhaW4gaW4gdXNlciBtb2RlXFxcIik7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNoaWxkIHByb2Nlc3MgY2FuIGdldCBpdCB0b28sIGJ1dCBub3QgYWZ0ZXIgc2V0dWlkKG5vYm9keSlcXFwiKTtcXG4rXFx0cmV0ID0gYnJpbmd1cF9sb29wYmFjaygpO1xcbitcXHRBU1NFUlRfRVEocmV0LCAwKSBUSF9MT0coXFxcIkZhaWxlZCB0byBicmluZyB1cCBsb29wYmFjayBpbnRlcmZhY2VcXFwiKTtcXG4rfVxcbitcXG4rRklYVFVSRV9URUFSRE9XTihmbG93bGFiZWwpXFxuK3tcXG4rfVxcbitcXG4rVEVTVF9GKGZsb3dsYWJlbCwgY2Fubm90X2dldF9ub25fZXhpc3RlbnRfbGFiZWwpXFxuK3tcXG4rXFx0aW50IGZkLCBlcnI7XFxuK1xcbitcXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFxcXCJzb2NrZXQgZmFpbGVkXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA5LCBJUFY2X0ZMX1NfQU5ZLCAwKTtcXG4rXFx0RVhQRUNUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIGdldCBvZiBhIG5vbi1leGlzdGVudCBsYWJlbCB0byBmYWlsXFxcIik7XFxuK1xcdEVYUEVDVF9FUShFTk9FTlQsIGVycm5vKSBUSF9MT0coXFxcImV4cGVjdGVkIEVOT0VOVCwgZ290ICVkXFxcIiwgZXJybm8pO1xcbitcXG4rXFx0RVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7XFxuK31cXG4rXFxuK1RFU1RfRihmbG93bGFiZWwsIGNhbm5vdF9wdXRfbm9uX2V4aXN0ZW50X2xhYmVsKVxcbit7XFxuK1xcdGludCBmZCwgZXJyO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMTApO1xcbitcXHRFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRyhcXFwiZXhwZWN0ZWQgcHV0IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWxcXFwiKTtcXG4rXFx0RVhQRUNUX0VRKEVTUkNILCBlcnJubykgVEhfTE9HKFxcXCJleHBlY3RlZCBFU1JDSCwgZ290ICVkXFxcIiwgZXJybm8pO1xcbitcXG4rXFx0RVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7XFxuK31cXG4rXFxuK1RFU1RfRihmbG93bGFiZWwsIGNhbm5vdF9jcmVhdGVfbGFiZWxfZ3JlYXRlcl90aGFuXzIwX2JpdHMpXFxuK3tcXG4rXFx0aW50IGZkLCBlcnI7XFxuK1xcbitcXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFxcXCJzb2NrZXQgZmFpbGVkXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAweDFGRkZGRiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XFxuK1xcdEVYUEVDVF9UUlVFKGVycikgVEhfTE9HKFxcXCJleHBlY3RlZCBsYWJlbCBcXHUwMDNlIDIwIGJpdHMgdG8gYmUgcmVqZWN0ZWRcXFwiKTtcXG4rXFx0RVhQRUNUX0VRKEVJTlZBTCwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRUlOVkFMLCBnb3QgJWRcXFwiLCBlcnJubyk7XFxuK1xcbitcXHRFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTtcXG4rfVxcbitcXG4rVEVTVF9GKGZsb3dsYWJlbCwgY2FuX2NyZWF0ZV9hbmRfZ2V0X2FuZF9wdXRfbGFiZWxzKVxcbit7XFxuK1xcdGludCBmZCwgZXJyO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XFxuK1xcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIGNyZWF0ZSBsYWJlbCAoRkxfRl9DUkVBVEUpXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKTtcXG4rXFx0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gZ2V0IHRoZSBsYWJlbCB3aXRob3V0IEZMX0ZfQ1JFQVRFXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0RVhQRUNUX1RSVUUoIWVycilcXG4rXFx0XFx0VEhfTE9HKFxcXCJmYWlsZWQgdG8gZ2V0IGl0IGFnYWluIHdpdGggY3JlYXRlIGZsYWcgc2V0LCB0b29cXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksXFxuK1xcdFxcdFxcdCAgICBJUFY2X0ZMX0ZfQ1JFQVRFIHwgSVBWNl9GTF9GX0VYQ0wpO1xcbitcXHRFWFBFQ1RfVFJVRShlcnIpXFxuK1xcdFxcdFRIX0xPRyhcXFwiZXhwZWN0ZWQgRkxfRl9FWENMIHRvIHJlamVjdCBleGlzdGluZyBsYWJlbFxcXCIpO1xcbitcXHRFWFBFQ1RfRVEoRUVYSVNULCBlcnJubykgVEhfTE9HKFxcXCJleHBlY3RlZCBFRVhJU1QsIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xcbitcXHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBwdXQgZmlyc3QgcmVmZXJlbmNlXFxcIik7XFxuK1xcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDEpO1xcbitcXHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBwdXQgc2Vjb25kIHJlZmVyZW5jZVxcXCIpO1xcbitcXHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcXG4rXFx0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gcHV0IHRoaXJkIHJlZmVyZW5jZVxcXCIpO1xcbitcXHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcXG4rXFx0RVhQRUNUX1RSVUUoZXJyKVxcbitcXHRcXHRUSF9MT0coXFxcImV4cGVjdGVkIGZvdXJ0aCBwdXQgdG8gZmFpbCwgbm8gcmVmZXJlbmNlcyBsZWZ0XFxcIik7XFxuK1xcdEVYUEVDVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVNSQ0gsIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdEVYUEVDVF9FUSgwLCBjbG9zZShmZCkpO1xcbit9XFxuK1xcbitURVNUX0YoZmxvd2xhYmVsLCBleGNsdXNpdmVfbGFiZWxfc2hhcmUpXFxuK3tcXG4rXFx0aW50IGZkLCBlcnI7XFxuK1xcbitcXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFxcXCJzb2NrZXQgZmFpbGVkXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSk7XFxuK1xcdEVYUEVDVF9UUlVFKCFlcnIpXFxuK1xcdFxcdFRIX0xPRyhcXFwiZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBleGNsdXNpdmUgbGFiZWwgKEZMX1NfRVhDTClcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRyhcXFwiZXhwZWN0ZWQgcmV1c2UgaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWxcXFwiKTtcXG4rXFx0RVhQRUNUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKFxcXCJleHBlY3RlZCBFUEVSTSwgZ290ICVkXFxcIiwgZXJybm8pO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRyhcXFwiZXhwZWN0ZWQgcmV1c2UgaW4gZXhjbHVzaXZlIG1vZGUgdG8gZmFpbCB0b29cXFwiKTtcXG4rXFx0RVhQRUNUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKFxcXCJleHBlY3RlZCBFUEVSTSwgZ290ICVkXFxcIiwgZXJybm8pO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMik7XFxuK1xcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIHB1dCB0aGUgZXhjbHVzaXZlIGxhYmVsXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0RVhQRUNUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIHJldXNlIHRvIGZhaWwsIGR1ZSB0byBsaW5nZXJcXFwiKTtcXG4rXFx0RVhQRUNUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKFxcXCJleHBlY3RlZCBFUEVSTSwgZ290ICVkXFxcIiwgZXJybm8pO1xcbitcXG4rXFx0c2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgKyAxKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIHJldXNlIHRvIHN1Y2NlZWQgYWZ0ZXIgbGluZ2VyXFxcIik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTtcXG4rfVxcbitcXG4rVEVTVF9GKGZsb3dsYWJlbCwgdXNlcl9wcml2YXRlX2xhYmVsX3NoYXJlKVxcbit7XFxuK1xcdGludCBmZCwgZXJyLCB3c3RhdHVzO1xcbitcXHRwaWRfdCBwaWQ7XFxuK1xcbitcXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFxcXCJzb2NrZXQgZmFpbGVkXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgSVBWNl9GTF9GX0NSRUFURSk7XFxuK1xcdEVYUEVDVF9UUlVFKCFlcnIpXFxuK1xcdFxcdFRIX0xPRyhcXFwiZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyB1c2VyLXByaXZhdGUgbGFiZWwgKEZMX1NfVVNFUilcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19BTlksIDApO1xcbitcXHRFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRyhcXFwiZXhwZWN0ZWQgZ2V0IGluIG5vbi1leGNsdXNpdmUgbW9kZSB0byBmYWlsXFxcIik7XFxuK1xcdEVYUEVDVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19FWENMLCAwKTtcXG4rXFx0RVhQRUNUX1RSVUUoZXJyKSBUSF9MT0coXFxcImV4cGVjdGVkIGdldCBpbiBleGNsdXNpdmUgbW9kZSB0byBmYWlsXFxcIik7XFxuK1xcdEVYUEVDVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcXG4rXFx0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gZ2V0IGl0IGFnYWluIGluIHVzZXIgbW9kZVxcXCIpO1xcbitcXG4gXFx0cGlkID0gZm9yaygpO1xcbi1cXHRpZiAocGlkID09IC0xKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcImZvcmtcXFwiKTtcXG4rXFx0QVNTRVJUX05FKC0xLCBwaWQpIFRIX0xPRyhcXFwiZm9yayBmYWlsZWRcXFwiKTtcXG4gXFx0aWYgKCFwaWQpIHtcXG4tXFx0XFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKTtcXG4rXFx0XFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApO1xcbitcXHRcXHRFWFBFQ1RfVFJVRSghZXJyKVxcbitcXHRcXHRcXHRUSF9MT0coXFxcImNoaWxkIGZhaWxlZCB0byBnZXQgdGhlIHVzZXItcHJpdmF0ZSBsYWJlbFxcXCIpO1xcbitcXG4gXFx0XFx0aWYgKHNldHVpZChVU0hSVF9NQVgpKVxcbi1cXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIltJTkZPXSBza2lwIHNldHVpZCBjaGlsZCB0ZXN0XFxcXG5cXFwiKTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCkpO1xcbitcXHRcXHRcXHRleGl0KEtTRlRfU0tJUCk7XFxuK1xcbitcXHRcXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAzLCBJUFY2X0ZMX1NfVVNFUiwgMCk7XFxuK1xcdFxcdEVYUEVDVF9UUlVFKGVycilcXG4rXFx0XFx0XFx0VEhfTE9HKFxcXCJjaGlsZCB1bmV4cGVjdGVkbHkgZ290IGxhYmVsIGFmdGVyIHNldHVpZFxcXCIpO1xcbitcXHRcXHRFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXFxcImV4cGVjdGVkIEVQRVJNLCBnb3QgJWRcXFwiLCBlcnJubyk7XFxuIFxcdFxcdGV4aXQoMCk7XFxuIFxcdH1cXG4tXFx0aWYgKHdhaXQoXFx1MDAyNndzdGF0dXMpID09IC0xKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcIndhaXRcXFwiKTtcXG4tXFx0aWYgKCFXSUZFWElURUQod3N0YXR1cykgfHwgV0VYSVRTVEFUVVMod3N0YXR1cykgIT0gMClcXG4tXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJ3YWl0OiB1bmV4cGVjdGVkIGNoaWxkIHJlc3VsdFxcXCIpO1xcbi1cXG4tXFx0ZXhwbGFpbihcXFwiY3JlYXRlIGEgbmV3IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbCAoRkxfU19QUk9DRVNTKVxcXCIpO1xcbi1cXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgSVBWNl9GTF9GX0NSRUFURSkpO1xcbi1cXHRleHBsYWluKFxcXCJjYW4gZ2V0IGl0IGFnYWluXFxcIik7XFxuLVxcdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7XFxuLVxcdGV4cGxhaW4oXFxcImNoaWxkIHByb2Nlc3MgY2Fubm90IGNhbiBnZXQgaXRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHBpZCwgd2FpdChcXHUwMDI2d3N0YXR1cykpIFRIX0xPRyhcXFwid2FpdCBmYWlsZWRcXFwiKTtcXG4rXFx0QVNTRVJUX1RSVUUoV0lGRVhJVEVEKHdzdGF0dXMpKSBUSF9MT0coXFxcImNoaWxkIGRpZCBub3QgZXhpdCBub3JtYWxseVxcXCIpO1xcbitcXHRpZiAoV0VYSVRTVEFUVVMod3N0YXR1cykgPT0gS1NGVF9TS0lQKVxcbitcXHRcXHRTS0lQKHJldHVybixcXG4rXFx0XFx0ICAgICBcXFwic2V0dWlkKFVTSFJUX01BWCkgdW5hdmFpbGFibGUgKG5vIENBUF9TRVRVSUQgb3IgdWlkIHVubWFwcGVkKVxcXCIpO1xcbitcXHRFWFBFQ1RfRVEoMCwgV0VYSVRTVEFUVVMod3N0YXR1cykpXFxuK1xcdFxcdFRIX0xPRyhcXFwiY2hpbGQgcmVwb3J0ZWQgdW5leHBlY3RlZCByZXN1bHRcXFwiKTtcXG4rXFxuK1xcdEVYUEVDVF9FUSgwLCBjbG9zZShmZCkpO1xcbit9XFxuK1xcbitURVNUX0YoZmxvd2xhYmVsLCBwcm9jZXNzX3ByaXZhdGVfbGFiZWxfc2hhcmUpXFxuK3tcXG4rXFx0aW50IGZkLCBlcnIsIHdzdGF0dXM7XFxuK1xcdHBpZF90IHBpZDtcXG4rXFxuK1xcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcXG4rXFx0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXFxcInNvY2tldCBmYWlsZWRcXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcXG4rXFx0RVhQRUNUX1RSVUUoIWVycilcXG4rXFx0XFx0VEhfTE9HKFxcXCJmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApO1xcbitcXHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXFxcImZhaWxlZCB0byBnZXQgaXQgYWdhaW5cXFwiKTtcXG4rXFxuIFxcdHBpZCA9IGZvcmsoKTtcXG4tXFx0aWYgKHBpZCA9PSAtMSlcXG4tXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJmb3JrXFxcIik7XFxuK1xcdEFTU0VSVF9ORSgtMSwgcGlkKSBUSF9MT0coXFxcImZvcmsgZmFpbGVkXFxcIik7XFxuIFxcdGlmICghcGlkKSB7XFxuLVxcdFxcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7XFxuK1xcdFxcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKTtcXG4rXFx0XFx0RVhQRUNUX1RSVUUoZXJyKVxcbitcXHRcXHRcXHRUSF9MT0coXFxcImNoaWxkIHVuZXhwZWN0ZWRseSBnb3QgcHJvY2Vzcy1wcml2YXRlIGxhYmVsXFxcIik7XFxuK1xcdFxcdEVYUEVDVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4gXFx0XFx0ZXhpdCgwKTtcXG4gXFx0fVxcbi1cXHRpZiAod2FpdChcXHUwMDI2d3N0YXR1cykgPT0gLTEpXFxuLVxcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwid2FpdFxcXCIpO1xcbi1cXHRpZiAoIVdJRkVYSVRFRCh3c3RhdHVzKSB8fCBXRVhJVFNUQVRVUyh3c3RhdHVzKSAhPSAwKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcIndhaXQ6IHVuZXhwZWN0ZWQgY2hpbGQgcmVzdWx0XFxcIik7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbi17XFxuLVxcdGludCBjO1xcbi1cXG4tXFx0d2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFxcXCJsdlxcXCIpKSAhPSAtMSkge1xcbi1cXHRcXHRzd2l0Y2ggKGMpIHtcXG4tXFx0XFx0Y2FzZSAnbCc6XFxuLVxcdFxcdFxcdGNmZ19sb25nX3J1bm5pbmcgPSB0cnVlO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAndic6XFxuLVxcdFxcdFxcdGNmZ192ZXJib3NlID0gdHJ1ZTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdGVycm9yKDEsIDAsIFxcXCIlczogcGFyc2UgZXJyb3JcXFwiLCBhcmd2WzBdKTtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdEFTU0VSVF9FUShwaWQsIHdhaXQoXFx1MDAyNndzdGF0dXMpKSBUSF9MT0coXFxcIndhaXQgZmFpbGVkXFxcIik7XFxuK1xcdEFTU0VSVF9UUlVFKFdJRkVYSVRFRCh3c3RhdHVzKSkgVEhfTE9HKFxcXCJjaGlsZCBkaWQgbm90IGV4aXQgbm9ybWFsbHlcXFwiKTtcXG4rXFx0RVhQRUNUX0VRKDAsIFdFWElUU1RBVFVTKHdzdGF0dXMpKVxcbitcXHRcXHRUSF9MT0coXFxcImNoaWxkIHJlcG9ydGVkIHVuZXhwZWN0ZWQgcmVzdWx0XFxcIik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTtcXG4gfVxcbiBcXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbitURVNUX0YoZmxvd2xhYmVsLCBjYW5ub3RfcmVuZXdfbm9uX2V4aXN0ZW50X2xhYmVsKVxcbiB7XFxuLVxcdGludCBmZDtcXG4rXFx0aW50IGZkLCBlcnI7XFxuK1xcbitcXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFxcXCJzb2NrZXQgZmFpbGVkXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfcmVuZXcoZmQsIDUsIElQVjZfRkxfU19FWENMLFxcbitcXHRcXHRcXHQgICAgICAyICogKEZMX01JTl9MSU5HRVIgKiAyICsgMSkpO1xcbitcXHRFWFBFQ1RfVFJVRShlcnIpXFxuK1xcdFxcdFRIX0xPRyhcXFwiZXhwZWN0ZWQgcmVuZXcgb2YgYSBub24tZXhpc3RlbnQgbGFiZWwgdG8gZmFpbFxcXCIpO1xcbitcXHRFWFBFQ1RfRVEoRVNSQ0gsIGVycm5vKSBUSF9MT0coXFxcImV4cGVjdGVkIEVTUkNILCBnb3QgJWRcXFwiLCBlcnJubyk7XFxuIFxcbi1cXHRwYXJzZV9vcHRzKGFyZ2MsIGFyZ3YpO1xcbitcXHRFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTtcXG4rfVxcbitcXG4rVEVTVF9GKGZsb3dsYWJlbCwgY2FuX3JlbmV3X2V4aXN0aW5nX2xhYmVsKVxcbit7XFxuK1xcdGludCBmZCwgZXJyO1xcbiBcXG4gXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNSwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRFWFBFQ1RfVFJVRSghZXJyKVxcbitcXHRcXHRUSF9MT0coXFxcImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgbGFiZWwgZm9yIHJlbmV3IHZhbGlkYXRpb25cXFwiKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNSwgSVBWNl9GTF9TX0VYQ0wsXFxuK1xcdFxcdFxcdCAgICAgIDIgKiAoRkxfTUlOX0xJTkdFUiAqIDIgKyAxKSk7XFxuK1xcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZmFpbGVkIHRvIHJlbmV3IGFuIGV4aXN0aW5nIHZhbGlkIGxhYmVsXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCA1KTtcXG4rXFx0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gcHV0IHRoZSBsYWJlbFxcXCIpO1xcbitcXG4rXFx0RVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7XFxuK31cXG4rXFxuK1RFU1RfRihmbG93bGFiZWwsIHJlbmV3X2xhYmVsX2xpbmdlcilcXG4re1xcbitcXHQvKiBSRU5FVyBtdXN0IGV4dGVuZCBhIGxhYmVsJ3MgbGluZ2VyIHBlcmlvZDogcHV0dGluZyBhIHJlbmV3ZWRcXG4rXFx0ICogbGFiZWwgYW5kIHdhaXRpbmcgb3V0IGl0cyBvcmlnaW5hbCBsaW5nZXIgdGltZSBtdXN0IG5vdCBiZVxcbitcXHQgKiBlbm91Z2ggdG8gYWxsb3cgdGhlIGxhYmVsIHRvIGJlIHJlY3JlYXRlZC5cXG4rXFx0ICovXFxuK1xcdGludCBmZCwgZXJyO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcXFwic29ja2V0IGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRFWFBFQ1RfVFJVRSghZXJyKVxcbitcXHRcXHRUSF9MT0coXFxcImZhaWxlZCB0byBjcmVhdGUgbGFiZWwgd2l0aCBGTF9NSU5fTElOR0VSIGxpbmdlciB0aW1lXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfcmVuZXcoZmQsIDYsIElQVjZfRkxfU19FWENMLFxcbitcXHRcXHRcXHQgICAgICAyICogKEZMX01JTl9MSU5HRVIgKiAyICsgMSkpO1xcbitcXHRFWFBFQ1RfVFJVRSghZXJyKVxcbitcXHRcXHRUSF9MT0coXFxcImZhaWxlZCB0byByZW5ldyB0aGUgbGFiZWwgdG8gaW5jcmVhc2UgaXRzIGxpbmdlciB0aW1lXFxcIik7XFxuK1xcbitcXHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCA2KTtcXG4rXFx0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gcHV0IHRoZSBsYWJlbFxcXCIpO1xcbitcXG4rXFx0c2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgKyAxKTtcXG4rXFxuK1xcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDYsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xcbitcXHRFWFBFQ1RfVFJVRShlcnIpXFxuK1xcdFxcdFRIX0xPRyhcXFwiZXhwZWN0ZWQgcmV1c2UgdG8gZmFpbCwgbmV3IGxpbmdlciB0aW1lIG5vdCBvdmVyIHlldFxcXCIpO1xcbitcXHRFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXFxcImV4cGVjdGVkIEVQRVJNLCBnb3QgJWRcXFwiLCBlcnJubyk7XFxuK1xcbitcXHRFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTtcXG4rfVxcbitcXG4rVEVTVF9GKGZsb3dsYWJlbCwgcmVtb3RlX2ZsYWcpXFxuK3tcXG4rXFx0LyogVGhlIFJFTU9URSBmbGFnLCB1c2VkIGZvciBnZXRzb2Nrb3B0LCBpcyBleHBlY3RlZCB0byByZXRyaWV2ZSB0aGVcXG4rXFx0ICogbGFiZWwgZnJvbSB0aGUgbGF0ZXN0IHJlY2VpdmVkIGhlYWRlci5cXG4rXFx0ICovXFxuK1xcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSBmcmVxID0ge1xcbitcXHRcXHQuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsXFxuK1xcdFxcdC5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVNT1RFLFxcbitcXHR9O1xcbitcXHRzb2NrbGVuX3QgZnJlcV9sZW4gPSBzaXplb2YoZnJlcSk7XFxuK1xcdGludCBsaXN0ZW5lciwgY2ZkLCBhZmQsIGVycjtcXG4rXFxuK1xcdGxpc3RlbmVyID0gdGNwX2xpc3RlbigpO1xcbitcXHR0Y3BfY29ubmVjdChsaXN0ZW5lciwgNywgXFx1MDAyNmNmZCwgXFx1MDAyNmFmZCk7XFxuK1xcbitcXHRlcnIgPSBnZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUiwgXFx1MDAyNmZyZXEsIFxcdTAwMjZmcmVxX2xlbik7XFxuK1xcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcXFwiZ2V0c29ja29wdCB3aXRoIElQVjZfRkxfRl9SRU1PVEUgZmFpbGVkXFxcIik7XFxuK1xcdEVYUEVDVF9FUSg3LCBudG9obChmcmVxLmZscl9sYWJlbCkpXFxuK1xcdFxcdFRIX0xPRyhcXFwidW5leHBlY3RlZCByZW1vdGUgZmxvdyBsYWJlbFxcXCIpO1xcbitcXG4rXFx0RVhQRUNUX0VRKDAsIGNsb3NlKGFmZCkpO1xcbitcXHRFWFBFQ1RfRVEoMCwgY2xvc2UoY2ZkKSk7XFxuK1xcdEVYUEVDVF9FUSgwLCBjbG9zZShsaXN0ZW5lcikpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBkaXNhYmxlX2Zsb3dsYWJlbF9jb25zaXN0ZW5jeSh2b2lkKVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdGZkID0gb3BlbihcXFwiL3Byb2Mvc3lzL25ldC9pcHY2L2Zsb3dsYWJlbF9jb25zaXN0ZW5jeVxcXCIsIE9fV1JPTkxZKTtcXG4gXFx0aWYgKGZkID09IC0xKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcInNvY2tldFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRydW5fdGVzdHMoZmQpO1xcbitcXHRpZiAod3JpdGUoZmQsIFxcXCIwXFxcIiwgMSkgIT0gMSkge1xcbitcXHRcXHRjbG9zZShmZCk7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXHRjbG9zZShmZCk7XFxuIFxcbi1cXHRpZiAoY2xvc2UoZmQpKVxcbi1cXHRcXHRlcnJvcigxLCBlcnJubywgXFxcImNsb3NlXFxcIik7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rVEVTVF9GKGZsb3dsYWJlbCwgcmVmbGVjdF9mbGFnKVxcbit7XFxuK1xcdC8qIFRoZSBSRUZMRUNUIGZsYWcgYWN0cyBhcyBhIHRyaWdnZXIgdG8gdGhlIFJFUEZMT1cgYml0LiBXaGVuIFJFUEZMT1dcXG4rXFx0ICogaXMgdHJpZ2dlcmVkIGZvciBhIHNvY2tldCwgaXQgYWRvcHRzIHRoZSBsYWJlbCByZWNlaXZlZCBmcm9tIHRoZVxcbitcXHQgKiBjb25uZWN0ZWQgc29ja2V0LlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlZmxlY3Rfb24gPSB7XFxuK1xcdFxcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCxcXG4rXFx0XFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRUZMRUNULFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9xdWVyeSA9IHtcXG4rXFx0XFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfR0VULFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9vZmYgPSB7XFxuK1xcdFxcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX1BVVCxcXG4rXFx0XFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRUZMRUNULFxcbitcXHR9O1xcbitcXHRzb2NrbGVuX3QgcmVmbGVjdF9xdWVyeV9sZW4gPSBzaXplb2YocmVmbGVjdF9xdWVyeSk7XFxuK1xcdGludCBsaXN0ZW5lciwgY2ZkLCBhZmQsIGVycjtcXG4rXFxuK1xcdGlmICghZGlzYWJsZV9mbG93bGFiZWxfY29uc2lzdGVuY3koKSlcXG4rXFx0XFx0U0tJUChyZXR1cm4sXFxuK1xcdFxcdCAgICAgXFxcImNhbm5vdCBkaXNhYmxlIG5ldC5pcHY2LmZsb3dsYWJlbF9jb25zaXN0ZW5jeVxcXCIpO1xcbitcXG4rXFx0bGlzdGVuZXIgPSB0Y3BfbGlzdGVuKCk7XFxuK1xcdGVyciA9IHNldHNvY2tvcHQobGlzdGVuZXIsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsXFxuK1xcdFxcdFxcdCBcXHUwMDI2cmVmbGVjdF9vbiwgc2l6ZW9mKHJlZmxlY3Rfb24pKTtcXG4rXFx0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFxcXCJmYWlsZWQgdG8gZW5hYmxlIFJFRkxFQ1Qgb24gdGhlIGxpc3RlbmVyXFxcIik7XFxuK1xcbitcXHR0Y3BfY29ubmVjdChsaXN0ZW5lciwgOCwgXFx1MDAyNmNmZCwgXFx1MDAyNmFmZCk7XFxuK1xcbitcXHRlcnIgPSBnZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUixcXG4rXFx0XFx0XFx0IFxcdTAwMjZyZWZsZWN0X3F1ZXJ5LCBcXHUwMDI2cmVmbGVjdF9xdWVyeV9sZW4pO1xcbitcXHRFWFBFQ1RfVFJVRSghZXJyKVxcbitcXHRcXHRUSF9MT0coXFxcImZhaWxlZCB0byBxdWVyeSB0aGUgYWNjZXB0ZWQgc29ja2V0J3Mgb3V0Z29pbmcgbGFiZWxcXFwiKTtcXG4rXFx0RVhQRUNUX0VRKDgsIG50b2hsKHJlZmxlY3RfcXVlcnkuZmxyX2xhYmVsKSlcXG4rXFx0XFx0VEhfTE9HKFxcXCJhY2NlcHRlZCBzb2NrZXQgZGlkIG5vdCByZWZsZWN0IGNsaWVudCdzIGxhYmVsXFxcIik7XFxuK1xcbitcXHRlcnIgPSBzZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUixcXG4rXFx0XFx0XFx0IFxcdTAwMjZyZWZsZWN0X29mZiwgc2l6ZW9mKHJlZmxlY3Rfb2ZmKSk7XFxuK1xcdEVYUEVDVF9UUlVFKCFlcnIpXFxuK1xcdFxcdFRIX0xPRyhcXFwiZmFpbGVkIHRvIGRpc2FibGUgUkVGTEVDVCBvbiB0aGUgYWNjZXB0ZWQgc29ja2V0XFxcIik7XFxuK1xcbitcXHRlcnIgPSBzZXRzb2Nrb3B0KGFmZCwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUixcXG4rXFx0XFx0XFx0IFxcdTAwMjZyZWZsZWN0X29mZiwgc2l6ZW9mKHJlZmxlY3Rfb2ZmKSk7XFxuK1xcdEVYUEVDVF9UUlVFKGVycikgVEhfTE9HKFxcXCJleHBlY3RlZCBkaXNhYmxpbmcgUkVGTEVDVCB0d2ljZSB0byBmYWlsXFxcIik7XFxuK1xcdEVYUEVDVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRyhcXFwiZXhwZWN0ZWQgRVNSQ0gsIGdvdCAlZFxcXCIsIGVycm5vKTtcXG4rXFxuK1xcdEVYUEVDVF9FUSgwLCBjbG9zZShhZmQpKTtcXG4rXFx0RVhQRUNUX0VRKDAsIGNsb3NlKGNmZCkpO1xcbitcXHRFWFBFQ1RfRVEoMCwgY2xvc2UobGlzdGVuZXIpKTtcXG4gfVxcbitcXG4rVEVTVF9IQVJORVNTX01BSU5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6NTY6MDMuNjE0MTQ1NzM1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTE1MTAzOTQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMgYW5kIGlwdjZfZmxvd2xhYmVsLnNoKSBieSByZXdyaXRpbmcgdGhlIHRlc3QgdG8gdXNlIHRoZSBrc2VsZnRlc3QgaGFybmVzcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMTg2NjU3MWZiYmNjZmJkYTA2Yzk5NTRlYTdhYzkyZDc5NzA0MTdjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAyMjo1NjowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaFxuaW5kZXggY2VlOTVlMjUyYmVlNS4uMmVlZGEzOWJmNjRjYiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbC5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsLnNoXG5AQCAtOCw3ICs4LDcgQEBcbiBzZXQgLWVcbiBcbiBlY2hvIFwiVEVTVCBtYW5hZ2VtZW50XCJcbi0uL2luX25ldG5zLnNoIC4vaXB2Nl9mbG93bGFiZWxfbWdyXG4rLi9pcHY2X2Zsb3dsYWJlbF9tZ3JcbiBcbiBlY2hvIFwiVEVTVCBkYXRhcGF0aFwiXG4gLi9pbl9uZXRucy5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuY1xuaW5kZXggYWY5NWI0OGFjZWE5MC4uMDcyZmIzYTliMTIxNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jXG5AQCAtNiw0NSArNiwzNiBAQFxuICNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZXJyb3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9pZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvaW9jdGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zb2NrZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuIFxuIC8qIHVhcGkvZ2xpYmMgd2VpcmRuZXNzIG1heSBsZWF2ZSB0aGlzIHVuZGVmaW5lZCAqL1xuICNpZm5kZWYgSVBWNl9GTE9XTEFCRUxfTUdSXG4gI2RlZmluZSBJUFY2X0ZMT1dMQUJFTF9NR1JcdDMyXG4gI2VuZGlmXG4rI2lmbmRlZiBJUFY2X0ZMT1dJTkZPX1NFTkRcbisjZGVmaW5lIElQVjZfRkxPV0lORk9fU0VORFx0MzNcbisjZW5kaWZcbiBcbiAvKiBmcm9tIG5ldC9pcHY2L2lwNl9mbG93bGFiZWwuYyAqL1xuICNkZWZpbmUgRkxfTUlOX0xJTkdFUlx0XHQ2XG4gXG4tI2RlZmluZSBleHBsYWluKHgpXHRcdFx0XHRcdFx0XHRcXFxuLVx0ZG8geyBpZiAoY2ZnX3ZlcmJvc2UpIGZwcmludGYoc3RkZXJyLCBcIiAgICAgICBcIiB4IFwiXFxuXCIpOyB9IHdoaWxlICgwKVxuLVxuLSNkZWZpbmUgX19leHBlY3QoeClcdFx0XHRcdFx0XHRcdFxcXG4tXHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdGlmICghKHgpKVx0XHRcdFx0XHRcdFxcXG4tXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiW09LXSAgIFwiICN4IFwiXFxuXCIpO1x0XHRcXFxuLVx0XHRlbHNlXHRcdFx0XHRcdFx0XHRcXFxuLVx0XHRcdGVycm9yKDEsIDAsIFwiW0VSUl0gIFwiICN4IFwiIChsaW5lICVkKVwiLCBfX0xJTkVfXyk7IFxcXG4tXHR9IHdoaWxlICgwKVxuLVxuLSNkZWZpbmUgZXhwZWN0X3Bhc3MoeClcdF9fZXhwZWN0KHgpXG4tI2RlZmluZSBleHBlY3RfZmFpbCh4KVx0X19leHBlY3QoISh4KSlcbi1cbi1zdGF0aWMgYm9vbCBjZmdfbG9uZ19ydW5uaW5nO1xuLXN0YXRpYyBib29sIGNmZ192ZXJib3NlO1xuLVxuIHN0YXRpYyBpbnQgZmxvd2xhYmVsX2dldChpbnQgZmQsIHVpbnQzMl90IGxhYmVsLCB1aW50OF90IHNoYXJlLCB1aW50MTZfdCBmbGFncylcbiB7XG4gXHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVxID0ge1xuQEAgLTcxLDEyOSArNjIsNDg0IEBAIHN0YXRpYyBpbnQgZmxvd2xhYmVsX3B1dChpbnQgZmQsIHVpbnQzMl90IGxhYmVsKVxuIFx0cmV0dXJuIHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSkpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydW5fdGVzdHMoaW50IGZkKVxuK3N0YXRpYyBpbnQgZmxvd2xhYmVsX3JlbmV3KGludCBmZCwgdWludDMyX3QgbGFiZWwsIHVpbnQ4X3Qgc2hhcmUsXG4rXHRcdFx0ICAgdWludDE2X3QgbGluZ2VyKVxuIHtcbi1cdGludCB3c3RhdHVzO1xuLVx0cGlkX3QgcGlkO1xuK1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHJlcSA9IHtcbitcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUkVORVcsXG4rXHRcdC5mbHJfbGFiZWwgPSBodG9ubChsYWJlbCksXG4rXHRcdC5mbHJfc2hhcmUgPSBzaGFyZSxcbitcdFx0LmZscl9saW5nZXIgPSBsaW5nZXIsXG4rXHR9O1xuK1xuK1x0cmV0dXJuIHNldHNvY2tvcHQoZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSkpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luNiBsb29wYmFja19hZGRyKHZvaWQpXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX2luNiBhZGRyID0ge1xuK1x0XHQuc2luNl9mYW1pbHlcdD0gQUZfSU5FVDYsXG4rXHRcdC5zaW42X2FkZHJcdD0gSU42QUREUl9MT09QQkFDS19JTklULFxuK1x0XHQuc2luNl9wb3J0XHQ9IGh0b25zKDg4ODgpLFxuK1x0fTtcbitcbitcdHJldHVybiBhZGRyO1xuK31cbitcbitzdGF0aWMgaW50IHRjcF9saXN0ZW4odm9pZClcbit7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHIgPSBsb29wYmFja19hZGRyKCk7XG4rXHRjb25zdCBpbnQgb25lID0gMTtcbitcdGludCBmZDtcbitcbitcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX1NUUkVBTSwgMCk7XG4rXHRpZiAoZmQgPT0gLTEpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcInNvY2tldCBsaXN0ZW5lclwiKTtcbitcdGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFx1MDAyNm9uZSwgc2l6ZW9mKG9uZSkpKVxuK1x0XHRlcnJvcigxLCBlcnJubywgXCJzZXRzb2Nrb3B0IFNPX1JFVVNFQUREUlwiKTtcbitcdGlmIChiaW5kKGZkLCAodm9pZCAqKVx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSkpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcImJpbmRcIik7XG4rXHRpZiAobGlzdGVuKGZkLCAxKSlcbitcdFx0ZXJyb3IoMSwgZXJybm8sIFwibGlzdGVuXCIpO1xuK1xuK1x0cmV0dXJuIGZkO1xuK31cbitcbitzdGF0aWMgdm9pZCB0Y3BfY29ubmVjdChpbnQgbGlzdGVuZXIsIHVpbnQzMl90IGZsb3dsYWJlbCxcbitcdFx0XHRpbnQgKmNsaWVudCwgaW50ICphY2NlcHRlZClcbit7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHIgPSBsb29wYmFja19hZGRyKCk7XG4rXHRjb25zdCBpbnQgb25lID0gMTtcbitcdGludCBjZmQsIGFmZDtcbitcbitcdGNmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19TVFJFQU0sIDApO1xuK1x0aWYgKGNmZCA9PSAtMSlcbitcdFx0ZXJyb3IoMSwgZXJybm8sIFwic29ja2V0IGNsaWVudFwiKTtcbitcbitcdGlmIChmbG93bGFiZWxfZ2V0KGNmZCwgZmxvd2xhYmVsLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcImZsb3dsYWJlbF9nZXRcIik7XG4rXHRpZiAoc2V0c29ja29wdChjZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dJTkZPX1NFTkQsIFx1MDAyNm9uZSwgc2l6ZW9mKG9uZSkpKVxuK1x0XHRlcnJvcigxLCBlcnJubywgXCJzZXRzb2Nrb3B0IGZsb3dpbmZvX3NlbmRcIik7XG4rXHRhZGRyLnNpbjZfZmxvd2luZm8gPSBodG9ubChmbG93bGFiZWwpO1xuK1xuK1x0aWYgKGNvbm5lY3QoY2ZkLCAodm9pZCAqKVx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSkpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcImNvbm5lY3RcIik7XG4rXG4rXHRhZmQgPSBhY2NlcHQobGlzdGVuZXIsIE5VTEwsIE5VTEwpO1xuK1x0aWYgKGFmZCA9PSAtMSlcbitcdFx0ZXJyb3IoMSwgZXJybm8sIFwiYWNjZXB0XCIpO1xuK1xuK1x0aWYgKGZsb3dsYWJlbF9wdXQoY2ZkLCBmbG93bGFiZWwpKVxuK1x0XHRlcnJvcigxLCBlcnJubywgXCJmbG93bGFiZWxfcHV0XCIpO1xuK1xuK1x0KmNsaWVudCA9IGNmZDtcbitcdCphY2NlcHRlZCA9IGFmZDtcbit9XG4rXG4rc3RhdGljIGludCBicmluZ3VwX2xvb3BiYWNrKHZvaWQpXG4re1xuK1x0c3RydWN0IGlmcmVxIGlmciA9IHtcbitcdFx0Lmlmcl9uYW1lID0gXCJsb1wiXG4rXHR9O1xuK1x0aW50IGZkO1xuK1xuK1x0ZmQgPSBzb2NrZXQoQUZfTE9DQUwsIFNPQ0tfU1RSRUFNLCAwKTtcbitcdGlmIChmZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0aWYgKGlvY3RsKGZkLCBTSU9DR0lGRkxBR1MsIFx1MDAyNmlmcikgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0aWZyLmlmcl9mbGFncyA9IGlmci5pZnJfZmxhZ3MgfCBJRkZfVVA7XG4rXG4rXHRpZiAoaW9jdGwoZmQsIFNJT0NTSUZGTEFHUywgXHUwMDI2aWZyKSBcdTAwM2MgMClcbitcdFx0Z290byBlcnI7XG4rXG4rXHRjbG9zZShmZCk7XG4rXHRyZXR1cm4gMDtcbiBcbi1cdGV4cGxhaW4oXCJjYW5ub3QgZ2V0IG5vbi1leGlzdGVudCBsYWJlbFwiKTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApKTtcbi1cbi1cdGV4cGxhaW4oXCJjYW5ub3QgcHV0IG5vbi1leGlzdGVudCBsYWJlbFwiKTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcbi1cbi1cdGV4cGxhaW4oXCJjYW5ub3QgY3JlYXRlIGxhYmVsIGdyZWF0ZXIgdGhhbiAyMCBiaXRzXCIpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMHgxRkZGRkYsIElQVjZfRkxfU19BTlksXG4tXHRcdFx0XHQgIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cbi1cdGV4cGxhaW4oXCJjcmVhdGUgYSBuZXcgbGFiZWwgKEZMX0ZfQ1JFQVRFKVwiKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCJjYW4gZ2V0IHRoZSBsYWJlbCAod2l0aG91dCBGTF9GX0NSRUFURSlcIik7XG4tXHRleHBlY3RfcGFzcyhmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCAwKSk7XG4tXHRleHBsYWluKFwiY2FuIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vXCIpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwbGFpbihcImNhbm5vdCBnZXQgaXQgYWdhaW4gd2l0aCB0aGUgZXhjbHVzaXZlIChGTF9GTF9FWENMKSBmbGFnXCIpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSxcbi1cdFx0XHRcdFx0IElQVjZfRkxfRl9DUkVBVEUgfCBJUFY2X0ZMX0ZfRVhDTCkpO1xuLVx0ZXhwbGFpbihcImNhbiBub3cgcHV0IGV4YWN0bHkgdGhyZWUgcmVmZXJlbmNlc1wiKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9wdXQoZmQsIDEpKTtcbi1cbi1cdGV4cGxhaW4oXCJjcmVhdGUgYSBuZXcgZXhjbHVzaXZlIGxhYmVsIChGTF9TX0VYQ0wpXCIpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIG5vbi1leGNsdXNpdmUgbW9kZVwiKTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwiY2Fubm90IGdldCBpdCBhZ2FpbiBpbiBleGNsdXNpdmUgbW9kZSBlaXRoZXJcIik7XG4tXHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfRVhDTCwgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX3B1dChmZCwgMikpO1xuLVxuLVx0aWYgKGNmZ19sb25nX3J1bm5pbmcpIHtcbi1cdFx0ZXhwbGFpbihcImNhbm5vdCByZXVzZSB0aGUgbGFiZWwsIGR1ZSB0byBsaW5nZXJcIik7XG4tXHRcdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19BTlksXG4tXHRcdFx0XHRcdCAgSVBWNl9GTF9GX0NSRUFURSkpO1xuLVx0XHRleHBsYWluKFwiYWZ0ZXIgc2xlZXAsIGNhbiByZXVzZVwiKTtcbi1cdFx0c2xlZXAoRkxfTUlOX0xJTkdFUiAqIDIgKyAxKTtcbi1cdFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSxcbi1cdFx0XHRcdFx0ICBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4rZXJyOlxuK1x0Y2xvc2UoZmQpO1xuK1x0cmV0dXJuIC0xO1xuK31cbitcbitGSVhUVVJFKGZsb3dsYWJlbCkge307XG4rXG4rRklYVFVSRV9TRVRVUChmbG93bGFiZWwpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHVuc2hhcmUoQ0xPTkVfTkVXTkVUKTtcbitcdEFTU0VSVF9FUShyZXQsIDApIHtcbitcdFx0VEhfTE9HKFwidW5zaGFyZShDTE9ORV9ORVdORVQpIGZhaWxlZDogJXNcIiwgc3RyZXJyb3IoZXJybm8pKTtcbiBcdH1cbiBcbi1cdGV4cGxhaW4oXCJjcmVhdGUgYSBuZXcgdXNlci1wcml2YXRlIGxhYmVsIChGTF9TX1VTRVIpXCIpO1xuLVx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIElQVjZfRkxfRl9DUkVBVEUpKTtcbi1cdGV4cGxhaW4oXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIG5vbi1leGNsdXNpdmUgbW9kZVwiKTtcbi1cdGV4cGVjdF9mYWlsKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19BTlksIDApKTtcbi1cdGV4cGxhaW4oXCJjYW5ub3QgZ2V0IGl0IGFnYWluIGluIGV4Y2x1c2l2ZSBtb2RlXCIpO1xuLVx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0VYQ0wsIDApKTtcbi1cdGV4cGxhaW4oXCJjYW4gZ2V0IGl0IGFnYWluIGluIHVzZXIgbW9kZVwiKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKSk7XG4tXHRleHBsYWluKFwiY2hpbGQgcHJvY2VzcyBjYW4gZ2V0IGl0IHRvbywgYnV0IG5vdCBhZnRlciBzZXR1aWQobm9ib2R5KVwiKTtcbitcdHJldCA9IGJyaW5ndXBfbG9vcGJhY2soKTtcbitcdEFTU0VSVF9FUShyZXQsIDApIFRIX0xPRyhcIkZhaWxlZCB0byBicmluZyB1cCBsb29wYmFjayBpbnRlcmZhY2VcIik7XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04oZmxvd2xhYmVsKVxuK3tcbit9XG4rXG4rVEVTVF9GKGZsb3dsYWJlbCwgY2Fubm90X2dldF9ub25fZXhpc3RlbnRfbGFiZWwpXG4re1xuK1x0aW50IGZkLCBlcnI7XG4rXG4rXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4rXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcInNvY2tldCBmYWlsZWRcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA5LCBJUFY2X0ZMX1NfQU5ZLCAwKTtcbitcdEVYUEVDVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgZ2V0IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWxcIik7XG4rXHRFWFBFQ1RfRVEoRU5PRU5ULCBlcnJubykgVEhfTE9HKFwiZXhwZWN0ZWQgRU5PRU5ULCBnb3QgJWRcIiwgZXJybm8pO1xuK1xuK1x0RVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7XG4rfVxuK1xuK1RFU1RfRihmbG93bGFiZWwsIGNhbm5vdF9wdXRfbm9uX2V4aXN0ZW50X2xhYmVsKVxuK3tcbitcdGludCBmZCwgZXJyO1xuK1xuK1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuK1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCJzb2NrZXQgZmFpbGVkXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMTApO1xuK1x0RVhQRUNUX1RSVUUoZXJyKSBUSF9MT0coXCJleHBlY3RlZCBwdXQgb2YgYSBub24tZXhpc3RlbnQgbGFiZWwgdG8gZmFpbFwiKTtcbitcdEVYUEVDVF9FUShFU1JDSCwgZXJybm8pIFRIX0xPRyhcImV4cGVjdGVkIEVTUkNILCBnb3QgJWRcIiwgZXJybm8pO1xuK1xuK1x0RVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7XG4rfVxuK1xuK1RFU1RfRihmbG93bGFiZWwsIGNhbm5vdF9jcmVhdGVfbGFiZWxfZ3JlYXRlcl90aGFuXzIwX2JpdHMpXG4re1xuK1x0aW50IGZkLCBlcnI7XG4rXG4rXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4rXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcInNvY2tldCBmYWlsZWRcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAweDFGRkZGRiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4rXHRFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRyhcImV4cGVjdGVkIGxhYmVsIFx1MDAzZSAyMCBiaXRzIHRvIGJlIHJlamVjdGVkXCIpO1xuK1x0RVhQRUNUX0VRKEVJTlZBTCwgZXJybm8pIFRIX0xPRyhcImV4cGVjdGVkIEVJTlZBTCwgZ290ICVkXCIsIGVycm5vKTtcbitcbitcdEVYUEVDVF9FUSgwLCBjbG9zZShmZCkpO1xuK31cbitcbitURVNUX0YoZmxvd2xhYmVsLCBjYW5fY3JlYXRlX2FuZF9nZXRfYW5kX3B1dF9sYWJlbHMpXG4re1xuK1x0aW50IGZkLCBlcnI7XG4rXG4rXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4rXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcInNvY2tldCBmYWlsZWRcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAxLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBjcmVhdGUgbGFiZWwgKEZMX0ZfQ1JFQVRFKVwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIDApO1xuK1x0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIGdldCB0aGUgbGFiZWwgd2l0aG91dCBGTF9GX0NSRUFURVwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDEsIElQVjZfRkxfU19BTlksIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0RVhQRUNUX1RSVUUoIWVycilcbitcdFx0VEhfTE9HKFwiZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiB3aXRoIGNyZWF0ZSBmbGFnIHNldCwgdG9vXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMSwgSVBWNl9GTF9TX0FOWSxcbitcdFx0XHQgICAgSVBWNl9GTF9GX0NSRUFURSB8IElQVjZfRkxfRl9FWENMKTtcbitcdEVYUEVDVF9UUlVFKGVycilcbitcdFx0VEhfTE9HKFwiZXhwZWN0ZWQgRkxfRl9FWENMIHRvIHJlamVjdCBleGlzdGluZyBsYWJlbFwiKTtcbitcdEVYUEVDVF9FUShFRVhJU1QsIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFRVhJU1QsIGdvdCAlZFwiLCBlcnJubyk7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcbitcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBwdXQgZmlyc3QgcmVmZXJlbmNlXCIpO1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XG4rXHRFWFBFQ1RfVFJVRSghZXJyKSBUSF9MT0coXCJmYWlsZWQgdG8gcHV0IHNlY29uZCByZWZlcmVuY2VcIik7XG4rXHRlcnIgPSBmbG93bGFiZWxfcHV0KGZkLCAxKTtcbitcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBwdXQgdGhpcmQgcmVmZXJlbmNlXCIpO1xuK1x0ZXJyID0gZmxvd2xhYmVsX3B1dChmZCwgMSk7XG4rXHRFWFBFQ1RfVFJVRShlcnIpXG4rXHRcdFRIX0xPRyhcImV4cGVjdGVkIGZvdXJ0aCBwdXQgdG8gZmFpbCwgbm8gcmVmZXJlbmNlcyBsZWZ0XCIpO1xuK1x0RVhQRUNUX0VRKEVTUkNILCBlcnJubykgVEhfTE9HKFwiZXhwZWN0ZWQgRVNSQ0gsIGdvdCAlZFwiLCBlcnJubyk7XG4rXG4rXHRFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTtcbit9XG4rXG4rVEVTVF9GKGZsb3dsYWJlbCwgZXhjbHVzaXZlX2xhYmVsX3NoYXJlKVxuK3tcbitcdGludCBmZCwgZXJyO1xuK1xuK1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuK1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCJzb2NrZXQgZmFpbGVkXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0RVhQRUNUX1RSVUUoIWVycilcbitcdFx0VEhfTE9HKFwiZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBleGNsdXNpdmUgbGFiZWwgKEZMX1NfRVhDTClcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEVYUEVDVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgcmV1c2UgaW4gbm9uLWV4Y2x1c2l2ZSBtb2RlIHRvIGZhaWxcIik7XG4rXHRFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFUEVSTSwgZ290ICVkXCIsIGVycm5vKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDIsIElQVjZfRkxfU19FWENMLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEVYUEVDVF9UUlVFKGVycikgVEhfTE9HKFwiZXhwZWN0ZWQgcmV1c2UgaW4gZXhjbHVzaXZlIG1vZGUgdG8gZmFpbCB0b29cIik7XG4rXHRFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFUEVSTSwgZ290ICVkXCIsIGVycm5vKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDIpO1xuK1x0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIHB1dCB0aGUgZXhjbHVzaXZlIGxhYmVsXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4rXHRFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRyhcImV4cGVjdGVkIHJldXNlIHRvIGZhaWwsIGR1ZSB0byBsaW5nZXJcIik7XG4rXHRFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFUEVSTSwgZ290ICVkXCIsIGVycm5vKTtcbitcbitcdHNsZWVwKEZMX01JTl9MSU5HRVIgKiAyICsgMSk7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCAyLCBJUFY2X0ZMX1NfQU5ZLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcImV4cGVjdGVkIHJldXNlIHRvIHN1Y2NlZWQgYWZ0ZXIgbGluZ2VyXCIpO1xuK1xuK1x0RVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7XG4rfVxuK1xuK1RFU1RfRihmbG93bGFiZWwsIHVzZXJfcHJpdmF0ZV9sYWJlbF9zaGFyZSlcbit7XG4rXHRpbnQgZmQsIGVyciwgd3N0YXR1cztcbitcdHBpZF90IHBpZDtcbitcbitcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbitcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwic29ja2V0IGZhaWxlZFwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEVYUEVDVF9UUlVFKCFlcnIpXG4rXHRcdFRIX0xPRyhcImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgdXNlci1wcml2YXRlIGxhYmVsIChGTF9TX1VTRVIpXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0FOWSwgMCk7XG4rXHRFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRyhcImV4cGVjdGVkIGdldCBpbiBub24tZXhjbHVzaXZlIG1vZGUgdG8gZmFpbFwiKTtcbitcdEVYUEVDVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcImV4cGVjdGVkIEVQRVJNLCBnb3QgJWRcIiwgZXJybm8pO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX0VYQ0wsIDApO1xuK1x0RVhQRUNUX1RSVUUoZXJyKSBUSF9MT0coXCJleHBlY3RlZCBnZXQgaW4gZXhjbHVzaXZlIG1vZGUgdG8gZmFpbFwiKTtcbitcdEVYUEVDVF9FUShFUEVSTSwgZXJybm8pIFRIX0xPRyhcImV4cGVjdGVkIEVQRVJNLCBnb3QgJWRcIiwgZXJybm8pO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApO1xuK1x0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIGdldCBpdCBhZ2FpbiBpbiB1c2VyIG1vZGVcIik7XG4rXG4gXHRwaWQgPSBmb3JrKCk7XG4tXHRpZiAocGlkID09IC0xKVxuLVx0XHRlcnJvcigxLCBlcnJubywgXCJmb3JrXCIpO1xuK1x0QVNTRVJUX05FKC0xLCBwaWQpIFRIX0xPRyhcImZvcmsgZmFpbGVkXCIpO1xuIFx0aWYgKCFwaWQpIHtcbi1cdFx0ZXhwZWN0X3Bhc3MoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKTtcbitcdFx0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApO1xuK1x0XHRFWFBFQ1RfVFJVRSghZXJyKVxuK1x0XHRcdFRIX0xPRyhcImNoaWxkIGZhaWxlZCB0byBnZXQgdGhlIHVzZXItcHJpdmF0ZSBsYWJlbFwiKTtcbitcbiBcdFx0aWYgKHNldHVpZChVU0hSVF9NQVgpKVxuLVx0XHRcdGZwcmludGYoc3RkZXJyLCBcIltJTkZPXSBza2lwIHNldHVpZCBjaGlsZCB0ZXN0XFxuXCIpO1xuLVx0XHRlbHNlXG4tXHRcdFx0ZXhwZWN0X2ZhaWwoZmxvd2xhYmVsX2dldChmZCwgMywgSVBWNl9GTF9TX1VTRVIsIDApKTtcbitcdFx0XHRleGl0KEtTRlRfU0tJUCk7XG4rXG4rXHRcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDMsIElQVjZfRkxfU19VU0VSLCAwKTtcbitcdFx0RVhQRUNUX1RSVUUoZXJyKVxuK1x0XHRcdFRIX0xPRyhcImNoaWxkIHVuZXhwZWN0ZWRseSBnb3QgbGFiZWwgYWZ0ZXIgc2V0dWlkXCIpO1xuK1x0XHRFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFUEVSTSwgZ290ICVkXCIsIGVycm5vKTtcbiBcdFx0ZXhpdCgwKTtcbiBcdH1cbi1cdGlmICh3YWl0KFx1MDAyNndzdGF0dXMpID09IC0xKVxuLVx0XHRlcnJvcigxLCBlcnJubywgXCJ3YWl0XCIpO1xuLVx0aWYgKCFXSUZFWElURUQod3N0YXR1cykgfHwgV0VYSVRTVEFUVVMod3N0YXR1cykgIT0gMClcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwid2FpdDogdW5leHBlY3RlZCBjaGlsZCByZXN1bHRcIik7XG4tXG4tXHRleHBsYWluKFwiY3JlYXRlIGEgbmV3IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbCAoRkxfU19QUk9DRVNTKVwiKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCBJUFY2X0ZMX0ZfQ1JFQVRFKSk7XG4tXHRleHBsYWluKFwiY2FuIGdldCBpdCBhZ2FpblwiKTtcbi1cdGV4cGVjdF9wYXNzKGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCAwKSk7XG4tXHRleHBsYWluKFwiY2hpbGQgcHJvY2VzcyBjYW5ub3QgY2FuIGdldCBpdFwiKTtcbitcdEFTU0VSVF9FUShwaWQsIHdhaXQoXHUwMDI2d3N0YXR1cykpIFRIX0xPRyhcIndhaXQgZmFpbGVkXCIpO1xuK1x0QVNTRVJUX1RSVUUoV0lGRVhJVEVEKHdzdGF0dXMpKSBUSF9MT0coXCJjaGlsZCBkaWQgbm90IGV4aXQgbm9ybWFsbHlcIik7XG4rXHRpZiAoV0VYSVRTVEFUVVMod3N0YXR1cykgPT0gS1NGVF9TS0lQKVxuK1x0XHRTS0lQKHJldHVybixcbitcdFx0ICAgICBcInNldHVpZChVU0hSVF9NQVgpIHVuYXZhaWxhYmxlIChubyBDQVBfU0VUVUlEIG9yIHVpZCB1bm1hcHBlZClcIik7XG4rXHRFWFBFQ1RfRVEoMCwgV0VYSVRTVEFUVVMod3N0YXR1cykpXG4rXHRcdFRIX0xPRyhcImNoaWxkIHJlcG9ydGVkIHVuZXhwZWN0ZWQgcmVzdWx0XCIpO1xuK1xuK1x0RVhQRUNUX0VRKDAsIGNsb3NlKGZkKSk7XG4rfVxuK1xuK1RFU1RfRihmbG93bGFiZWwsIHByb2Nlc3NfcHJpdmF0ZV9sYWJlbF9zaGFyZSlcbit7XG4rXHRpbnQgZmQsIGVyciwgd3N0YXR1cztcbitcdHBpZF90IHBpZDtcbitcbitcdGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTtcbitcdEFTU0VSVF9HRShmZCwgMCkgVEhfTE9HKFwic29ja2V0IGZhaWxlZFwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9nZXQoZmQsIDQsIElQVjZfRkxfU19QUk9DRVNTLCBJUFY2X0ZMX0ZfQ1JFQVRFKTtcbitcdEVYUEVDVF9UUlVFKCFlcnIpXG4rXHRcdFRIX0xPRyhcImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgcHJvY2Vzcy1wcml2YXRlIGxhYmVsXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNCwgSVBWNl9GTF9TX1BST0NFU1MsIDApO1xuK1x0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIGdldCBpdCBhZ2FpblwiKTtcbitcbiBcdHBpZCA9IGZvcmsoKTtcbi1cdGlmIChwaWQgPT0gLTEpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcImZvcmtcIik7XG4rXHRBU1NFUlRfTkUoLTEsIHBpZCkgVEhfTE9HKFwiZm9yayBmYWlsZWRcIik7XG4gXHRpZiAoIXBpZCkge1xuLVx0XHRleHBlY3RfZmFpbChmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCkpO1xuK1x0XHRlcnIgPSBmbG93bGFiZWxfZ2V0KGZkLCA0LCBJUFY2X0ZMX1NfUFJPQ0VTUywgMCk7XG4rXHRcdEVYUEVDVF9UUlVFKGVycilcbitcdFx0XHRUSF9MT0coXCJjaGlsZCB1bmV4cGVjdGVkbHkgZ290IHByb2Nlc3MtcHJpdmF0ZSBsYWJlbFwiKTtcbitcdFx0RVhQRUNUX0VRKEVQRVJNLCBlcnJubykgVEhfTE9HKFwiZXhwZWN0ZWQgRVBFUk0sIGdvdCAlZFwiLCBlcnJubyk7XG4gXHRcdGV4aXQoMCk7XG4gXHR9XG4tXHRpZiAod2FpdChcdTAwMjZ3c3RhdHVzKSA9PSAtMSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwid2FpdFwiKTtcbi1cdGlmICghV0lGRVhJVEVEKHdzdGF0dXMpIHx8IFdFWElUU1RBVFVTKHdzdGF0dXMpICE9IDApXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcIndhaXQ6IHVuZXhwZWN0ZWQgY2hpbGQgcmVzdWx0XCIpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBwYXJzZV9vcHRzKGludCBhcmdjLCBjaGFyICoqYXJndilcbi17XG4tXHRpbnQgYztcbi1cbi1cdHdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCBcImx2XCIpKSAhPSAtMSkge1xuLVx0XHRzd2l0Y2ggKGMpIHtcbi1cdFx0Y2FzZSAnbCc6XG4tXHRcdFx0Y2ZnX2xvbmdfcnVubmluZyA9IHRydWU7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJ3YnOlxuLVx0XHRcdGNmZ192ZXJib3NlID0gdHJ1ZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRlcnJvcigxLCAwLCBcIiVzOiBwYXJzZSBlcnJvclwiLCBhcmd2WzBdKTtcbi1cdFx0fVxuLVx0fVxuK1x0QVNTRVJUX0VRKHBpZCwgd2FpdChcdTAwMjZ3c3RhdHVzKSkgVEhfTE9HKFwid2FpdCBmYWlsZWRcIik7XG4rXHRBU1NFUlRfVFJVRShXSUZFWElURUQod3N0YXR1cykpIFRIX0xPRyhcImNoaWxkIGRpZCBub3QgZXhpdCBub3JtYWxseVwiKTtcbitcdEVYUEVDVF9FUSgwLCBXRVhJVFNUQVRVUyh3c3RhdHVzKSlcbitcdFx0VEhfTE9HKFwiY2hpbGQgcmVwb3J0ZWQgdW5leHBlY3RlZCByZXN1bHRcIik7XG4rXG4rXHRFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTtcbiB9XG4gXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuK1RFU1RfRihmbG93bGFiZWwsIGNhbm5vdF9yZW5ld19ub25fZXhpc3RlbnRfbGFiZWwpXG4ge1xuLVx0aW50IGZkO1xuK1x0aW50IGZkLCBlcnI7XG4rXG4rXHRmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7XG4rXHRBU1NFUlRfR0UoZmQsIDApIFRIX0xPRyhcInNvY2tldCBmYWlsZWRcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfcmVuZXcoZmQsIDUsIElQVjZfRkxfU19FWENMLFxuK1x0XHRcdCAgICAgIDIgKiAoRkxfTUlOX0xJTkdFUiAqIDIgKyAxKSk7XG4rXHRFWFBFQ1RfVFJVRShlcnIpXG4rXHRcdFRIX0xPRyhcImV4cGVjdGVkIHJlbmV3IG9mIGEgbm9uLWV4aXN0ZW50IGxhYmVsIHRvIGZhaWxcIik7XG4rXHRFWFBFQ1RfRVEoRVNSQ0gsIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFU1JDSCwgZ290ICVkXCIsIGVycm5vKTtcbiBcbi1cdHBhcnNlX29wdHMoYXJnYywgYXJndik7XG4rXHRFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTtcbit9XG4rXG4rVEVTVF9GKGZsb3dsYWJlbCwgY2FuX3JlbmV3X2V4aXN0aW5nX2xhYmVsKVxuK3tcbitcdGludCBmZCwgZXJyO1xuIFxuIFx0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuK1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCJzb2NrZXQgZmFpbGVkXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNSwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0RVhQRUNUX1RSVUUoIWVycilcbitcdFx0VEhfTE9HKFwiZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBsYWJlbCBmb3IgcmVuZXcgdmFsaWRhdGlvblwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9yZW5ldyhmZCwgNSwgSVBWNl9GTF9TX0VYQ0wsXG4rXHRcdFx0ICAgICAgMiAqIChGTF9NSU5fTElOR0VSICogMiArIDEpKTtcbitcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byByZW5ldyBhbiBleGlzdGluZyB2YWxpZCBsYWJlbFwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDUpO1xuK1x0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIHB1dCB0aGUgbGFiZWxcIik7XG4rXG4rXHRFWFBFQ1RfRVEoMCwgY2xvc2UoZmQpKTtcbit9XG4rXG4rVEVTVF9GKGZsb3dsYWJlbCwgcmVuZXdfbGFiZWxfbGluZ2VyKVxuK3tcbitcdC8qIFJFTkVXIG11c3QgZXh0ZW5kIGEgbGFiZWwncyBsaW5nZXIgcGVyaW9kOiBwdXR0aW5nIGEgcmVuZXdlZFxuK1x0ICogbGFiZWwgYW5kIHdhaXRpbmcgb3V0IGl0cyBvcmlnaW5hbCBsaW5nZXIgdGltZSBtdXN0IG5vdCBiZVxuK1x0ICogZW5vdWdoIHRvIGFsbG93IHRoZSBsYWJlbCB0byBiZSByZWNyZWF0ZWQuXG4rXHQgKi9cbitcdGludCBmZCwgZXJyO1xuK1xuK1x0ZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApO1xuK1x0QVNTRVJUX0dFKGZkLCAwKSBUSF9MT0coXCJzb2NrZXQgZmFpbGVkXCIpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNiwgSVBWNl9GTF9TX0VYQ0wsIElQVjZfRkxfRl9DUkVBVEUpO1xuK1x0RVhQRUNUX1RSVUUoIWVycilcbitcdFx0VEhfTE9HKFwiZmFpbGVkIHRvIGNyZWF0ZSBsYWJlbCB3aXRoIEZMX01JTl9MSU5HRVIgbGluZ2VyIHRpbWVcIik7XG4rXG4rXHRlcnIgPSBmbG93bGFiZWxfcmVuZXcoZmQsIDYsIElQVjZfRkxfU19FWENMLFxuK1x0XHRcdCAgICAgIDIgKiAoRkxfTUlOX0xJTkdFUiAqIDIgKyAxKSk7XG4rXHRFWFBFQ1RfVFJVRSghZXJyKVxuK1x0XHRUSF9MT0coXCJmYWlsZWQgdG8gcmVuZXcgdGhlIGxhYmVsIHRvIGluY3JlYXNlIGl0cyBsaW5nZXIgdGltZVwiKTtcbitcbitcdGVyciA9IGZsb3dsYWJlbF9wdXQoZmQsIDYpO1xuK1x0RVhQRUNUX1RSVUUoIWVycikgVEhfTE9HKFwiZmFpbGVkIHRvIHB1dCB0aGUgbGFiZWxcIik7XG4rXG4rXHRzbGVlcChGTF9NSU5fTElOR0VSICogMiArIDEpO1xuK1xuK1x0ZXJyID0gZmxvd2xhYmVsX2dldChmZCwgNiwgSVBWNl9GTF9TX0FOWSwgSVBWNl9GTF9GX0NSRUFURSk7XG4rXHRFWFBFQ1RfVFJVRShlcnIpXG4rXHRcdFRIX0xPRyhcImV4cGVjdGVkIHJldXNlIHRvIGZhaWwsIG5ldyBsaW5nZXIgdGltZSBub3Qgb3ZlciB5ZXRcIik7XG4rXHRFWFBFQ1RfRVEoRVBFUk0sIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFUEVSTSwgZ290ICVkXCIsIGVycm5vKTtcbitcbitcdEVYUEVDVF9FUSgwLCBjbG9zZShmZCkpO1xuK31cbitcbitURVNUX0YoZmxvd2xhYmVsLCByZW1vdGVfZmxhZylcbit7XG4rXHQvKiBUaGUgUkVNT1RFIGZsYWcsIHVzZWQgZm9yIGdldHNvY2tvcHQsIGlzIGV4cGVjdGVkIHRvIHJldHJpZXZlIHRoZVxuK1x0ICogbGFiZWwgZnJvbSB0aGUgbGF0ZXN0IHJlY2VpdmVkIGhlYWRlci5cbitcdCAqL1xuK1x0c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIGZyZXEgPSB7XG4rXHRcdC5mbHJfYWN0aW9uID0gSVBWNl9GTF9BX0dFVCxcbitcdFx0LmZscl9mbGFncyA9IElQVjZfRkxfRl9SRU1PVEUsXG4rXHR9O1xuK1x0c29ja2xlbl90IGZyZXFfbGVuID0gc2l6ZW9mKGZyZXEpO1xuK1x0aW50IGxpc3RlbmVyLCBjZmQsIGFmZCwgZXJyO1xuK1xuK1x0bGlzdGVuZXIgPSB0Y3BfbGlzdGVuKCk7XG4rXHR0Y3BfY29ubmVjdChsaXN0ZW5lciwgNywgXHUwMDI2Y2ZkLCBcdTAwMjZhZmQpO1xuK1xuK1x0ZXJyID0gZ2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsIFx1MDAyNmZyZXEsIFx1MDAyNmZyZXFfbGVuKTtcbitcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcImdldHNvY2tvcHQgd2l0aCBJUFY2X0ZMX0ZfUkVNT1RFIGZhaWxlZFwiKTtcbitcdEVYUEVDVF9FUSg3LCBudG9obChmcmVxLmZscl9sYWJlbCkpXG4rXHRcdFRIX0xPRyhcInVuZXhwZWN0ZWQgcmVtb3RlIGZsb3cgbGFiZWxcIik7XG4rXG4rXHRFWFBFQ1RfRVEoMCwgY2xvc2UoYWZkKSk7XG4rXHRFWFBFQ1RfRVEoMCwgY2xvc2UoY2ZkKSk7XG4rXHRFWFBFQ1RfRVEoMCwgY2xvc2UobGlzdGVuZXIpKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgZGlzYWJsZV9mbG93bGFiZWxfY29uc2lzdGVuY3kodm9pZClcbit7XG4rXHRpbnQgZmQ7XG4rXG4rXHRmZCA9IG9wZW4oXCIvcHJvYy9zeXMvbmV0L2lwdjYvZmxvd2xhYmVsX2NvbnNpc3RlbmN5XCIsIE9fV1JPTkxZKTtcbiBcdGlmIChmZCA9PSAtMSlcbi1cdFx0ZXJyb3IoMSwgZXJybm8sIFwic29ja2V0XCIpO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRydW5fdGVzdHMoZmQpO1xuK1x0aWYgKHdyaXRlKGZkLCBcIjBcIiwgMSkgIT0gMSkge1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcdGNsb3NlKGZkKTtcbiBcbi1cdGlmIChjbG9zZShmZCkpXG4tXHRcdGVycm9yKDEsIGVycm5vLCBcImNsb3NlXCIpO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuIFxuLVx0cmV0dXJuIDA7XG4rVEVTVF9GKGZsb3dsYWJlbCwgcmVmbGVjdF9mbGFnKVxuK3tcbitcdC8qIFRoZSBSRUZMRUNUIGZsYWcgYWN0cyBhcyBhIHRyaWdnZXIgdG8gdGhlIFJFUEZMT1cgYml0LiBXaGVuIFJFUEZMT1dcbitcdCAqIGlzIHRyaWdnZXJlZCBmb3IgYSBzb2NrZXQsIGl0IGFkb3B0cyB0aGUgbGFiZWwgcmVjZWl2ZWQgZnJvbSB0aGVcbitcdCAqIGNvbm5lY3RlZCBzb2NrZXQuXG4rXHQgKi9cbitcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZWZsZWN0X29uID0ge1xuK1x0XHQuZmxyX2FjdGlvbiA9IElQVjZfRkxfQV9HRVQsXG4rXHRcdC5mbHJfZmxhZ3MgPSBJUFY2X0ZMX0ZfUkVGTEVDVCxcbitcdH07XG4rXHRzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgcmVmbGVjdF9xdWVyeSA9IHtcbitcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfR0VULFxuK1x0fTtcbitcdHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSByZWZsZWN0X29mZiA9IHtcbitcdFx0LmZscl9hY3Rpb24gPSBJUFY2X0ZMX0FfUFVULFxuK1x0XHQuZmxyX2ZsYWdzID0gSVBWNl9GTF9GX1JFRkxFQ1QsXG4rXHR9O1xuK1x0c29ja2xlbl90IHJlZmxlY3RfcXVlcnlfbGVuID0gc2l6ZW9mKHJlZmxlY3RfcXVlcnkpO1xuK1x0aW50IGxpc3RlbmVyLCBjZmQsIGFmZCwgZXJyO1xuK1xuK1x0aWYgKCFkaXNhYmxlX2Zsb3dsYWJlbF9jb25zaXN0ZW5jeSgpKVxuK1x0XHRTS0lQKHJldHVybixcbitcdFx0ICAgICBcImNhbm5vdCBkaXNhYmxlIG5ldC5pcHY2LmZsb3dsYWJlbF9jb25zaXN0ZW5jeVwiKTtcbitcbitcdGxpc3RlbmVyID0gdGNwX2xpc3RlbigpO1xuK1x0ZXJyID0gc2V0c29ja29wdChsaXN0ZW5lciwgU09MX0lQVjYsIElQVjZfRkxPV0xBQkVMX01HUixcbitcdFx0XHQgXHUwMDI2cmVmbGVjdF9vbiwgc2l6ZW9mKHJlZmxlY3Rfb24pKTtcbitcdEVYUEVDVF9UUlVFKCFlcnIpIFRIX0xPRyhcImZhaWxlZCB0byBlbmFibGUgUkVGTEVDVCBvbiB0aGUgbGlzdGVuZXJcIik7XG4rXG4rXHR0Y3BfY29ubmVjdChsaXN0ZW5lciwgOCwgXHUwMDI2Y2ZkLCBcdTAwMjZhZmQpO1xuK1xuK1x0ZXJyID0gZ2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsXG4rXHRcdFx0IFx1MDAyNnJlZmxlY3RfcXVlcnksIFx1MDAyNnJlZmxlY3RfcXVlcnlfbGVuKTtcbitcdEVYUEVDVF9UUlVFKCFlcnIpXG4rXHRcdFRIX0xPRyhcImZhaWxlZCB0byBxdWVyeSB0aGUgYWNjZXB0ZWQgc29ja2V0J3Mgb3V0Z29pbmcgbGFiZWxcIik7XG4rXHRFWFBFQ1RfRVEoOCwgbnRvaGwocmVmbGVjdF9xdWVyeS5mbHJfbGFiZWwpKVxuK1x0XHRUSF9MT0coXCJhY2NlcHRlZCBzb2NrZXQgZGlkIG5vdCByZWZsZWN0IGNsaWVudCdzIGxhYmVsXCIpO1xuK1xuK1x0ZXJyID0gc2V0c29ja29wdChhZmQsIFNPTF9JUFY2LCBJUFY2X0ZMT1dMQUJFTF9NR1IsXG4rXHRcdFx0IFx1MDAyNnJlZmxlY3Rfb2ZmLCBzaXplb2YocmVmbGVjdF9vZmYpKTtcbitcdEVYUEVDVF9UUlVFKCFlcnIpXG4rXHRcdFRIX0xPRyhcImZhaWxlZCB0byBkaXNhYmxlIFJFRkxFQ1Qgb24gdGhlIGFjY2VwdGVkIHNvY2tldFwiKTtcbitcbitcdGVyciA9IHNldHNvY2tvcHQoYWZkLCBTT0xfSVBWNiwgSVBWNl9GTE9XTEFCRUxfTUdSLFxuK1x0XHRcdCBcdTAwMjZyZWZsZWN0X29mZiwgc2l6ZW9mKHJlZmxlY3Rfb2ZmKSk7XG4rXHRFWFBFQ1RfVFJVRShlcnIpIFRIX0xPRyhcImV4cGVjdGVkIGRpc2FibGluZyBSRUZMRUNUIHR3aWNlIHRvIGZhaWxcIik7XG4rXHRFWFBFQ1RfRVEoRVNSQ0gsIGVycm5vKSBUSF9MT0coXCJleHBlY3RlZCBFU1JDSCwgZ290ICVkXCIsIGVycm5vKTtcbitcbitcdEVYUEVDVF9FUSgwLCBjbG9zZShhZmQpKTtcbitcdEVYUEVDVF9FUSgwLCBjbG9zZShjZmQpKTtcbitcdEVYUEVDVF9FUSgwLCBjbG9zZShsaXN0ZW5lcikpO1xuIH1cbitcbitURVNUX0hBUk5FU1NfTUFJTlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6NTY6MDMuNjE0MTQ3ODc1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE1MTAxMzgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IElQdjYgRmxvdyBMYWJlbCBTZWxmdGVzdCBQYXRjaCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJIbW0sIGBpcHY2X2Zsb3dsYWJlbC5zaGAgYW5kIGBpcHY2X2Zsb3dsYWJlbF9tZ3IuY2AgYXJlIGJlaW5nIHRvdWNoZWQuXCIgIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgbWVhbnMgd2Ugc2hvdWxkIGZ1enogYmFzZWQgb24gdGhpcywgb3Igbm90LiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgcmV3cml0aW5nIHRoZSBgaXB2Nl9mbG93bGFiZWxfbWdyLmNgIHRlc3QgdXNpbmcgYGtzZWxmdGVzdF9oYXJuZXNzLmhgIGFuZCByZW1vdmluZyB0aGF0IGBpbl9uZXRucy5zaGAgd3JhcHBlciwgc2luY2UgaXQncyBub3cgaGFuZGxpbmcgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIHVuc2hhcmluZyBpdHNlbGYuXG5cbkZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGlmIGtlcm5lbCBjb2RlIGlzIGNoYW5nZWQuIExldCdzIHNlZS4uLiAgTm9wZSwgdGhlIGRpZmYgaXMgb25seSBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsLnNoYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuY2AuIE5vdGhpbmcgaW4gdGhlIGNvcmUga2VybmVsLlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBUaGV5IGxpc3QgdGhpbmdzIGxpa2UgZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgdW5yZWFjaGFibGUgY29kZSwgZXRjLiAgSXQgZG9lc24ndCAqZXhwbGljaXRseSogbWVudGlvbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCwgYnV0IGNvbW1vbiBzZW5zZSB0ZWxscyBtZSBzZWxmdGVzdHMgYXJlICp1c2Vyc3BhY2UqIHRlc3RzLCBub3Qga2VybmVsIGNvZGUuIFRoZXkgZG9uJ3QgYWZmZWN0IHRoZSBrZXJuZWwncyBleGVjdXRpb24gZmxvdyBkaXJlY3RseS4gIEEgY2hhbmdlIHRvIGEgdGVzdCBkb2Vzbid0IG1lYW4gd2UgbmVlZCB0byBmdXp6IHRoZSBrZXJuZWwgaXRzZWxmLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdtIHF1aWNrbHkgY29uZmlybWluZyB0aGVyZSBhcmUgKm5vKiBvdGhlciBmaWxlcyBjaGFuZ2VkLiBOb3BlLCBqdXN0IHRob3NlIHR3by5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGEgbm8tZ28gZm9yIGZ1enppbmcuIEl0J3Mgc3RyaWN0bHkgYWJvdXQgbW9kaWZ5aW5nIHRoZSBzZWxmdGVzdHMsIHNwZWNpZmljYWxseSB0byB1c2UgYSBkaWZmZXJlbnQgdGVzdGluZyBmcmFtZXdvcmsuIEl0IGRvZXMgKm5vdCogbW9kaWZ5IGFueSBrZXJuZWwgY29kZSBvciBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IHdhcnJhbnQgZnV6emluZy5cblxuTXkgY29uY2x1c2lvbiBpczogYFdvcnRoRnV6emluZz1mYWxzZWAuIFRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxODEsIk91dHB1dFRva2VucyI6OTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjo1NjoxMi43NjUxNjQ3NTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jIGFuZCBpcHY2X2Zsb3dsYWJlbC5zaCkgYnkgcmV3cml0aW5nIHRoZSB0ZXN0IHRvIHVzZSB0aGUga3NlbGZ0ZXN0IGhhcm5lc3MuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMgYW5kIGlwdjZfZmxvd2xhYmVsLnNoKSBieSByZXdyaXRpbmcgdGhlIHRlc3QgdG8gdXNlIHRoZSBrc2VsZnRlc3QgaGFybmVzcy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjo1NjoxMi43NjUxODcxNDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhf9rp[1] Phase: Running StartedAt: 2026-08-07 22:56:24 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf9rp[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-07 22:56:24 +0000 UTC FinishedAt: 2026-08-07 22:56:29 +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,}