Name: series-workflow6shxn Phase: Failed StartedAt: 2026-08-24 15:45:06 +0000 UTC FinishedAt: 2026-08-24 16:28:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6shxn[0] Phase: Succeeded StartedAt: 2026-08-24 15:45:06 +0000 UTC FinishedAt: 2026-08-24 16:27:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6shxn[0].run-triage Phase: Succeeded StartedAt: 2026-08-24 15:45:06 +0000 UTC FinishedAt: 2026-08-24 16:27:58 +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+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdXNlci1zcGFjZSBsaWJicGYgbGlicmFyeSBhbmQgYWRkcyBhIHNlbGZ0ZXN0LiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0YmJmMjI3ZmNmNmJkYzgxYmEzYWFlNTEzMzBmOTNhMDYyM2E1Mjk4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTY6Mjc6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbmluZGV4IDUxNGU0ZTlkYWE4MjUuLjZmNWQzMjEzYjNlNWIgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5AQCAtNzc5LDYgJiM0Mzs3NzksOSBAQCBzdHJ1Y3QgYnBmX29iamVjdCB7XG4gXHRjaGFyICp0b2tlbl9wYXRoO1xuIFx0aW50IHRva2VuX2ZkO1xuIFxuJiM0MztcdGNoYXIgKipidGZfbW9kdWxlX25hbWVzO1xuJiM0MztcdHNpemVfdCBucl9idGZfbW9kdWxlX25hbWVzO1xuJiM0MztcbiBcdGNoYXIgcGF0aFtdO1xuIH07XG4gXG5AQCAtNTgwMyw2ICYjNDM7NTgwNiw5NCBAQCBpbnQgYnBmX2NvcmVfYWRkX2NhbmRzKHN0cnVjdCBicGZfY29yZV9jYW5kICpsb2NhbF9jYW5kLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBicGZfb2JqZWN0X2ZyZWVfYnRmX21vZHVsZV9uYW1lcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IGk7XG4mIzQzO1xuJiM0MztcdGlmICghb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9iai1cdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzW2ldKTtcbiYjNDM7XHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcyk7XG4mIzQzO1x0b2JqLVx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJwZl9vYmplY3RfaW5pdF9idGZfbW9kdWxlX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosXG4mIzQzO1x0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzICpvcHRzKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqKm5hbWVzO1xuJiM0MztcdHNpemVfdCBpLCBqLCBjbnQ7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0bmFtZXMgPSBPUFRTX0dFVChvcHRzLCBidGZfbW9kdWxlX25hbWVzLCBOVUxMKTtcbiYjNDM7XHRpZiAoIW5hbWVzKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGNudCA9IE9QVFNfR0VUKG9wdHMsIG5yX2J0Zl9tb2R1bGVfbmFtZXMsIDApO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEtlZXAgYnRmX21vZHVsZV9uYW1lcyBub24tTlVMTCB0byBkaXN0aW5ndWlzaCBhbiBlbXB0eSBmaWx0ZXIgZnJvbVxuJiM0MztcdCAqIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIGxvYWRpbmcgYWxsIG1vZHVsZSBCVEZzLlxuJiM0MztcdCAqL1xuJiM0MztcdG9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzID0gY2FsbG9jKGNudCA/OiAxLFxuJiM0MztcdFx0XHRcdCAgICAgICBzaXplb2YoKm9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzKSk7XG4mIzQzO1x0aWYgKCFvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoIW5hbWVzW2ldIHx8ICFuYW1lc1tpXVswXSkge1xuJiM0MztcdFx0XHRwcl93YXJuKFwmIzM0O2ludmFsaWQga2VybmVsIG1vZHVsZSBCVEYgbmFtZSBhdCBpbmRleCAlenVcXG5cJiMzNDssIGkpO1xuJiM0MztcdFx0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaTsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKHN0cmNtcChvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tqXSwgbmFtZXNbaV0pID09IDApIHtcbiYjNDM7XHRcdFx0XHRwcl93YXJuKFwmIzM0O2R1cGxpY2F0ZSBrZXJuZWwgbW9kdWxlIEJURiBuYW1lICYjMzk7JXMmIzM5O1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdG5hbWVzW2ldKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzW2ldID0gc3RyZHVwKG5hbWVzW2ldKTtcbiYjNDM7XHRcdGlmICghb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0pIHtcbiYjNDM7XHRcdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG9iai1cdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfb3V0OlxuJiM0MztcdGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKG9iaik7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgaXNfbW9kdWxlX2J0Zl9uZWVkZWQoY29uc3Qgc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIW9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9iai1cdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHN0cmNtcChvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSwgbmFtZSkgPT0gMClcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwcl9kZWJ1ZyhcJiMzNDtza2lwcGluZyBtb2R1bGUgQlRGICYjMzk7JXMmIzM5Oywgbm90IGluIGJ0Zl9tb2R1bGVfbmFtZXNcXG5cJiMzNDssIG5hbWUpO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgYWxsX25lZWRlZF9tb2R1bGVfYnRmc19sb2FkZWQoY29uc3Qgc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiYjNDM7e1xuJiM0MztcdHJldHVybiBvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgb2JqLVx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXMgPT0gb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfY250O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIHtcbiBcdHN0cnVjdCBicGZfYnRmX2luZm8gaW5mbztcbkBAIC01ODY3LDYgJiM0Mzs1OTU4LDExIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRpZiAoIWlzX21vZHVsZV9idGZfbmVlZGVkKG9iaiwgbmFtZSkpIHtcbiYjNDM7XHRcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLVx1MDAzZWJ0Zl92bWxpbnV4KTtcbiBcdFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xuIFx0XHRpZiAoZXJyKSB7XG5AQCAtNTg5MSw2ICYjNDM7NTk4Nyw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHRcdG9iai1cdTAwM2VidGZfbW9kdWxlX2NudCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGFsbF9uZWVkZWRfbW9kdWxlX2J0ZnNfbG9hZGVkKG9iaikpXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0aWYgKGVycikge1xuQEAgLTg1MDgsNiAmIzQzOzg2MDcsMTAgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZixcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdGVyciA9IGJwZl9vYmplY3RfaW5pdF9idGZfbW9kdWxlX25hbWVzKG9iaiwgb3B0cyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiBcdGVyciA9IGJwZl9vYmplY3RfX2VsZl9pbml0KG9iaik7XG4gXHRlcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2VsZl9jb2xsZWN0KG9iaik7XG4gXHRlcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2NvbGxlY3RfZXh0ZXJucyhvYmopO1xuQEAgLTk2MjksNiAmIzQzOzk3MzIsOCBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGNsb3NlKG9iai1cdTAwM2VqdW1wdGFibGVfbWFwc1tpXS5mZCk7XG4gXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlanVtcHRhYmxlX21hcHMpO1xuIFxuJiM0MztcdGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKG9iaik7XG4mIzQzO1xuIFx0ZnJlZShvYmopO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuaW5kZXggYjk2NWFkNTcxNTQwMy4uODM4NjAyMzE5ZGE4YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbkBAIC0yMjQsMTAgJiM0MzsyMjQsMzIgQEAgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzIHtcbiBcdCAqIHBvaW50ICgvc3lzL2ZzL2JwZiksIGluIGNhc2UgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIHVuZGVzaXJhYmxlLlxuIFx0ICovXG4gXHRjb25zdCBjaGFyICpicGZfdG9rZW5fcGF0aDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9wdGlvbmFsIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyB3aG9zZSBCVEZzIHNob3VsZCBiZSBsb2FkZWQuXG4mIzQzO1x0ICogbnJfYnRmX21vZHVsZV9uYW1lcyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluXG4mIzQzO1x0ICogYnRmX21vZHVsZV9uYW1lcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIElmIGJ0Zl9tb2R1bGVfbmFtZXMgaXMgTlVMTCwgYWxsIG1vZHVsZSBCVEZzIGFyZSBsb2FkZWQsXG4mIzQzO1x0ICogcHJlc2VydmluZyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gT3RoZXJ3aXNlLCBvbmx5IHRoZSBCVEZzIG9mXG4mIzQzO1x0ICogdGhlIGxpc3RlZCBtb2R1bGVzIGFyZSBsb2FkZWQuIEEgbm9uLU5VTEwgYnRmX21vZHVsZV9uYW1lc1xuJiM0MztcdCAqIHdpdGggbnJfYnRmX21vZHVsZV9uYW1lcyBlcXVhbCB0byB6ZXJvIG1lYW5zIHRoYXQgbm8gbW9kdWxlXG4mIzQzO1x0ICogQlRGcyBhcmUgbG9hZGVkLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlIGxpc3QgbXVzdCBub3QgY29udGFpbiBkdXBsaWNhdGUgZW50cmllczsgb3RoZXJ3aXNlXG4mIzQzO1x0ICogLUVJTlZBTCBpcyByZXR1cm5lZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoaXMgYWZmZWN0czpcbiYjNDM7XHQgKiAtIEJQRiBDTy1SRSByZWxvY2F0aW9ucyBhZ2FpbnN0IHR5cGVzIGRlZmluZWQgaW4gbW9kdWxlcztcbiYjNDM7XHQgKiAtIEJURi1iYXNlZCByZXNvbHV0aW9uIG9mIGZ1bmN0aW9uIGF0dGFjaCB0YXJnZXRzIGZvclxuJiM0MztcdCAqICAgZmVudHJ5L2ZleGl0L2Ztb2RfcmV0L2ZyZXBsYWNlL0xTTSBwcm9ncmFtcztcbiYjNDM7XHQgKiAtIGV4dGVybiAoa3N5bSkgcmVzb2x1dGlvbiBmb3Iga2VybmVsIHN5bWJvbHMgZGVmaW5lZCBpbiBtb2R1bGVzLlxuJiM0MztcdCAqL1xuJiM0MztcdGNvbnN0IGNoYXIgKipidGZfbW9kdWxlX25hbWVzO1xuJiM0MztcdHNpemVfdCBucl9idGZfbW9kdWxlX25hbWVzO1xuIFxuIFx0c2l6ZV90IDowO1xuIH07XG4tI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBicGZfdG9rZW5fcGF0aFxuJiM0MzsjZGVmaW5lIGJwZl9vYmplY3Rfb3Blbl9vcHRzX19sYXN0X2ZpZWxkIG5yX2J0Zl9tb2R1bGVfbmFtZXNcbiBcbiAvKipcbiAgKiBAYnJpZWYgKipicGZfb2JqZWN0X19vcGVuKCkqKiBjcmVhdGVzIGEgYnBmX29iamVjdCBieSBvcGVuaW5nXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDU2NzRjYWQwMDE3ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jXG5AQCAtMCwwICYjNDM7MSw5MyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnRmX21vZHVsZV9uYW1lcy5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfbG9hZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0c3RhdGljIGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcJiMzNDticGZfdGVzdG1vZFwmIzM0OyB9O1xuJiM0MztcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbiYjNDM7XHRcdC5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLFxuJiM0MztcdFx0Lm5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAxLFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0c1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTtcbiYjNDM7XHRBU1NFUlRfT0socmV0LCBcJiMzNDtidGZfbW9kdWxlX25hbWVzX19sb2FkXCYjMzQ7KTtcbiYjNDM7b3V0OlxuJiM0MztcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFZlcmlmeSB0aGF0IGFuIHVucmVxdWVzdGVkIG1vZHVsZSBCVEYgaXMgc2tpcHBlZC4gVGhlIEJQRiBwcm9ncmFtXG4mIzQzOyAqIHJlcXVpcmVzIHRoZSBCVEYgb2YgYnBmX3Rlc3Rtb2QsIGJ1dCBicGZfdGVzdG1vZCBpcyBub3Qgc3BlY2lmaWVkIGluXG4mIzQzOyAqIGJ0Zl9tb2R1bGVfbmFtZXMsIHNvIGl0cyBCVEYgaXMgc2tpcHBlZCBhbmQgdGhlIEJQRiBwcm9ncmFtIGZhaWxzIHRvIGxvYWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX3NraXAodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHN0YXRpYyBjb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgXCYjMzQ7bW9kdWxlX25vbmV4aXN0XCYjMzQ7IH07XG4mIzQzO1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxuJiM0MztcdFx0LmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsXG4mIzQzO1x0XHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsXG4mIzQzO1x0KTtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xuJiM0MztcdEFTU0VSVF9FUlIocmV0LCBcJiMzNDtidGZfbW9kdWxlX25hbWVzX19sb2FkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBWZXJpZnkgdGhhdCBhbiBlbXB0eSBmaWx0ZXIgc2tpcHMgbG9hZGluZyBhbGwgbW9kdWxlIEJURnMuIFRoZSBCUEZcbiYjNDM7ICogcHJvZ3JhbSByZXF1aXJlcyBicGZfdGVzdG1vZCBCVEYsIHNvIGl0IGZhaWxzIHRvIGxvYWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX2VtcHR5KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRzdGF0aWMgY29uc3QgY2hhciAqbW9kX25hbWVzW10gPSB7IFwmIzM0O2Zvb1wmIzM0OyB9O1xuJiM0MztcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbiYjNDM7XHRcdC5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBlbXB0eVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTtcbiYjNDM7XHRBU1NFUlRfRVJSKHJldCwgXCYjMzQ7YnRmX21vZHVsZV9uYW1lc19fbG9hZCBlbXB0eVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2J0Zl9tb2R1bGVfbmFtZXModm9pZClcbiYjNDM7e1xuJiM0MztcdGlmICghZW52Lmhhc190ZXN0bW9kKSB7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtidGZfbW9kdWxlX25hbWVzX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0YnRmX21vZHVsZV9uYW1lc19sb2FkKCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfc2tpcFwmIzM0OykpXG4mIzQzO1x0XHRidGZfbW9kdWxlX25hbWVzX3NraXAoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7YnRmX21vZHVsZV9uYW1lc19lbXB0eVwmIzM0OykpXG4mIzQzO1x0XHRidGZfbW9kdWxlX25hbWVzX2VtcHR5KCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9uYW1lcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjIzMmFkYzBmMzNmNmVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmNcbkBAIC0wLDAgJiM0MzsxLDEzIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtmZW50cnkvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0XCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0codGVzdF9idGZfbW9kdWxlX25hbWVzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHVzZXItc3BhY2UgbGliYnBmIGxpYnJhcnkgYW5kIGFkZHMgYSBzZWxmdGVzdC4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGJiZjIyN2ZjZjZiZGM4MWJhM2FhZTUxMzMwZjkzYTA2MjNhNTI5OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDE2OjI3OjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKaW5kZXggNTE0ZTRlOWRhYTgyNS4uNmY1ZDMyMTNiM2U1YiAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5jCkBAIC03NzksNiAmIzQzOzc3OSw5IEBAIHN0cnVjdCBicGZfb2JqZWN0IHsKIAljaGFyICp0b2tlbl9wYXRoOwogCWludCB0b2tlbl9mZDsKIAomIzQzOwljaGFyICoqYnRmX21vZHVsZV9uYW1lczsKJiM0MzsJc2l6ZV90IG5yX2J0Zl9tb2R1bGVfbmFtZXM7CiYjNDM7CiAJY2hhciBwYXRoW107CiB9OwogCkBAIC01ODAzLDYgJiM0Mzs1ODA2LDk0IEBAIGludCBicGZfY29yZV9hZGRfY2FuZHMoc3RydWN0IGJwZl9jb3JlX2NhbmQgKmxvY2FsX2NhbmQsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBicGZfb2JqZWN0X2ZyZWVfYnRmX21vZHVsZV9uYW1lcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQomIzQzO3sKJiM0MzsJc2l6ZV90IGk7CiYjNDM7CiYjNDM7CWlmICghb2JqLSZndDtidGZfbW9kdWxlX25hbWVzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgb2JqLSZndDtucl9idGZfbW9kdWxlX25hbWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXpmcmVlKCZhbXA7b2JqLSZndDtidGZfbW9kdWxlX25hbWVzW2ldKTsKJiM0MzsJemZyZWUoJmFtcDtvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXMpOwomIzQzOwlvYmotJmd0O25yX2J0Zl9tb2R1bGVfbmFtZXMgPSAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJwZl9vYmplY3RfaW5pdF9idGZfbW9kdWxlX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosCiYjNDM7CQkJCQkgICAgY29uc3Qgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzICpvcHRzKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqKm5hbWVzOwomIzQzOwlzaXplX3QgaSwgaiwgY250OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwluYW1lcyA9IE9QVFNfR0VUKG9wdHMsIGJ0Zl9tb2R1bGVfbmFtZXMsIE5VTEwpOwomIzQzOwlpZiAoIW5hbWVzKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWNudCA9IE9QVFNfR0VUKG9wdHMsIG5yX2J0Zl9tb2R1bGVfbmFtZXMsIDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBLZWVwIGJ0Zl9tb2R1bGVfbmFtZXMgbm9uLU5VTEwgdG8gZGlzdGluZ3Vpc2ggYW4gZW1wdHkgZmlsdGVyIGZyb20KJiM0MzsJICogdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgbG9hZGluZyBhbGwgbW9kdWxlIEJURnMuCiYjNDM7CSAqLwomIzQzOwlvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXMgPSBjYWxsb2MoY250ID86IDEsCiYjNDM7CQkJCSAgICAgICBzaXplb2YoKm9iai0mZ3Q7YnRmX21vZHVsZV9uYW1lcykpOwomIzQzOwlpZiAoIW9iai0mZ3Q7YnRmX21vZHVsZV9uYW1lcykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCFuYW1lc1tpXSB8fCAhbmFtZXNbaV1bMF0pIHsKJiM0MzsJCQlwcl93YXJuKCYjMzQ7aW52YWxpZCBrZXJuZWwgbW9kdWxlIEJURiBuYW1lIGF0IGluZGV4ICV6dVxuJiMzNDssIGkpOwomIzQzOwkJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQkJZ290byBlcnJfb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IGk7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKHN0cmNtcChvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXNbal0sIG5hbWVzW2ldKSA9PSAwKSB7CiYjNDM7CQkJCXByX3dhcm4oJiMzNDtkdXBsaWNhdGUga2VybmVsIG1vZHVsZSBCVEYgbmFtZSAmIzM5OyVzJiMzOTtcbiYjMzQ7LAomIzQzOwkJCQkJbmFtZXNbaV0pOwomIzQzOwkJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCQlnb3RvIGVycl9vdXQ7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwomIzQzOwkJb2JqLSZndDtidGZfbW9kdWxlX25hbWVzW2ldID0gc3RyZHVwKG5hbWVzW2ldKTsKJiM0MzsJCWlmICghb2JqLSZndDtidGZfbW9kdWxlX25hbWVzW2ldKSB7CiYjNDM7CQkJZXJyID0gLUVOT01FTTsKJiM0MzsJCQlnb3RvIGVycl9vdXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlvYmotJmd0O25yX2J0Zl9tb2R1bGVfbmFtZXMmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9vdXQ6CiYjNDM7CWJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKG9iaik7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGlzX21vZHVsZV9idGZfbmVlZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlzaXplX3QgaTsKJiM0MzsKJiM0MzsJaWYgKCFvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXMpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG9iai0mZ3Q7bnJfYnRmX21vZHVsZV9uYW1lczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChzdHJjbXAob2JqLSZndDtidGZfbW9kdWxlX25hbWVzW2ldLCBuYW1lKSA9PSAwKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXByX2RlYnVnKCYjMzQ7c2tpcHBpbmcgbW9kdWxlIEJURiAmIzM5OyVzJiMzOTssIG5vdCBpbiBidGZfbW9kdWxlX25hbWVzXG4mIzM0OywgbmFtZSk7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgYWxsX25lZWRlZF9tb2R1bGVfYnRmc19sb2FkZWQoY29uc3Qgc3RydWN0IGJwZl9vYmplY3QgKm9iaikKJiM0Mzt7CiYjNDM7CXJldHVybiBvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXMgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgb2JqLSZndDtucl9idGZfbW9kdWxlX25hbWVzID09IG9iai0mZ3Q7YnRmX21vZHVsZV9jbnQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiB7CiAJc3RydWN0IGJwZl9idGZfaW5mbyBpbmZvOwpAQCAtNTg2Nyw2ICYjNDM7NTk1OCwxMSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIAkJCWNvbnRpbnVlOwogCQl9CiAKJiM0MzsJCWlmICghaXNfbW9kdWxlX2J0Zl9uZWVkZWQob2JqLCBuYW1lKSkgewomIzQzOwkJCWNsb3NlKGZkKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJYnRmID0gYnRmX2dldF9mcm9tX2ZkKGZkLCBvYmotJmd0O2J0Zl92bWxpbnV4KTsKIAkJZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpOwogCQlpZiAoZXJyKSB7CkBAIC01ODkxLDYgJiM0Mzs1OTg3LDkgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCQlicmVhazsKIAkJfQogCQlvYmotJmd0O2J0Zl9tb2R1bGVfY250JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWlmIChhbGxfbmVlZGVkX21vZHVsZV9idGZzX2xvYWRlZChvYmopKQomIzQzOwkJCWJyZWFrOwogCX0KIAogCWlmIChlcnIpIHsKQEAgLTg1MDgsNiAmIzQzOzg2MDcsMTAgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZiwKIAkJfQogCX0KIAomIzQzOwllcnIgPSBicGZfb2JqZWN0X2luaXRfYnRmX21vZHVsZV9uYW1lcyhvYmosIG9wdHMpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJZXJyID0gYnBmX29iamVjdF9fZWxmX2luaXQob2JqKTsKIAllcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2VsZl9jb2xsZWN0KG9iaik7CiAJZXJyID0gZXJyID8gOiBicGZfb2JqZWN0X19jb2xsZWN0X2V4dGVybnMob2JqKTsKQEAgLTk2MjksNiAmIzQzOzk3MzIsOCBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCWNsb3NlKG9iai0mZ3Q7anVtcHRhYmxlX21hcHNbaV0uZmQpOwogCXpmcmVlKCZhbXA7b2JqLSZndDtqdW1wdGFibGVfbWFwcyk7CiAKJiM0MzsJYnBmX29iamVjdF9mcmVlX2J0Zl9tb2R1bGVfbmFtZXMob2JqKTsKJiM0MzsKIAlmcmVlKG9iaik7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmggYi90b29scy9saWIvYnBmL2xpYmJwZi5oCmluZGV4IGI5NjVhZDU3MTU0MDMuLjgzODYwMjMxOWRhOGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuaApAQCAtMjI0LDEwICYjNDM7MjI0LDMyIEBAIHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyB7CiAJICogcG9pbnQgKC9zeXMvZnMvYnBmKSwgaW4gY2FzZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdW5kZXNpcmFibGUuCiAJICovCiAJY29uc3QgY2hhciAqYnBmX3Rva2VuX3BhdGg7CiYjNDM7CS8qCiYjNDM7CSAqIE9wdGlvbmFsIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyB3aG9zZSBCVEZzIHNob3VsZCBiZSBsb2FkZWQuCiYjNDM7CSAqIG5yX2J0Zl9tb2R1bGVfbmFtZXMgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbgomIzQzOwkgKiBidGZfbW9kdWxlX25hbWVzLgomIzQzOwkgKgomIzQzOwkgKiBJZiBidGZfbW9kdWxlX25hbWVzIGlzIE5VTEwsIGFsbCBtb2R1bGUgQlRGcyBhcmUgbG9hZGVkLAomIzQzOwkgKiBwcmVzZXJ2aW5nIHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBPdGhlcndpc2UsIG9ubHkgdGhlIEJURnMgb2YKJiM0MzsJICogdGhlIGxpc3RlZCBtb2R1bGVzIGFyZSBsb2FkZWQuIEEgbm9uLU5VTEwgYnRmX21vZHVsZV9uYW1lcwomIzQzOwkgKiB3aXRoIG5yX2J0Zl9tb2R1bGVfbmFtZXMgZXF1YWwgdG8gemVybyBtZWFucyB0aGF0IG5vIG1vZHVsZQomIzQzOwkgKiBCVEZzIGFyZSBsb2FkZWQuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBsaXN0IG11c3Qgbm90IGNvbnRhaW4gZHVwbGljYXRlIGVudHJpZXM7IG90aGVyd2lzZQomIzQzOwkgKiAtRUlOVkFMIGlzIHJldHVybmVkLgomIzQzOwkgKgomIzQzOwkgKiBUaGlzIGFmZmVjdHM6CiYjNDM7CSAqIC0gQlBGIENPLVJFIHJlbG9jYXRpb25zIGFnYWluc3QgdHlwZXMgZGVmaW5lZCBpbiBtb2R1bGVzOwomIzQzOwkgKiAtIEJURi1iYXNlZCByZXNvbHV0aW9uIG9mIGZ1bmN0aW9uIGF0dGFjaCB0YXJnZXRzIGZvcgomIzQzOwkgKiAgIGZlbnRyeS9mZXhpdC9mbW9kX3JldC9mcmVwbGFjZS9MU00gcHJvZ3JhbXM7CiYjNDM7CSAqIC0gZXh0ZXJuIChrc3ltKSByZXNvbHV0aW9uIGZvciBrZXJuZWwgc3ltYm9scyBkZWZpbmVkIGluIG1vZHVsZXMuCiYjNDM7CSAqLwomIzQzOwljb25zdCBjaGFyICoqYnRmX21vZHVsZV9uYW1lczsKJiM0MzsJc2l6ZV90IG5yX2J0Zl9tb2R1bGVfbmFtZXM7CiAKIAlzaXplX3QgOjA7CiB9OwotI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBicGZfdG9rZW5fcGF0aAomIzQzOyNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgbnJfYnRmX21vZHVsZV9uYW1lcwogCiAvKioKICAqIEBicmllZiAqKmJwZl9vYmplY3RfX29wZW4oKSoqIGNyZWF0ZXMgYSBicGZfb2JqZWN0IGJ5IG9wZW5pbmcKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5kNTY3NGNhZDAwMTdlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jCkBAIC0wLDAgJiM0MzsxLDkzIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnRmX21vZHVsZV9uYW1lcy5za2VsLmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfbG9hZCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMOwomIzQzOwlpbnQgcmV0OwomIzQzOwlzdGF0aWMgY29uc3QgY2hhciAqbW9kX25hbWVzW10gPSB7ICYjMzQ7YnBmX3Rlc3Rtb2QmIzM0OyB9OwomIzQzOwomIzQzOwlMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cywKJiM0MzsJCS5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLAomIzQzOwkJLm5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAxLAomIzQzOwkpOwomIzQzOwomIzQzOwlza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKCZhbXA7b3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpOwomIzQzOwlBU1NFUlRfT0socmV0LCAmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX2xvYWQmIzM0Oyk7CiYjNDM7b3V0OgomIzQzOwlidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFZlcmlmeSB0aGF0IGFuIHVucmVxdWVzdGVkIG1vZHVsZSBCVEYgaXMgc2tpcHBlZC4gVGhlIEJQRiBwcm9ncmFtCiYjNDM7ICogcmVxdWlyZXMgdGhlIEJURiBvZiBicGZfdGVzdG1vZCwgYnV0IGJwZl90ZXN0bW9kIGlzIG5vdCBzcGVjaWZpZWQgaW4KJiM0MzsgKiBidGZfbW9kdWxlX25hbWVzLCBzbyBpdHMgQlRGIGlzIHNraXBwZWQgYW5kIHRoZSBCUEYgcHJvZ3JhbSBmYWlscyB0byBsb2FkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfc2tpcCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMOwomIzQzOwlpbnQgcmV0OwomIzQzOwlzdGF0aWMgY29uc3QgY2hhciAqbW9kX25hbWVzW10gPSB7ICYjMzQ7bW9kdWxlX25vbmV4aXN0JiMzNDsgfTsKJiM0MzsKJiM0MzsJTElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsCiYjNDM7CQkuYnRmX21vZHVsZV9uYW1lcyA9IG1vZF9uYW1lcywKJiM0MzsJCS5ucl9idGZfbW9kdWxlX25hbWVzID0gMSwKJiM0MzsJKTsKJiM0MzsKJiM0MzsJc2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cygmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTsKJiM0MzsJQVNTRVJUX0VSUihyZXQsICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fbG9hZCYjMzQ7KTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVmVyaWZ5IHRoYXQgYW4gZW1wdHkgZmlsdGVyIHNraXBzIGxvYWRpbmcgYWxsIG1vZHVsZSBCVEZzLiBUaGUgQlBGCiYjNDM7ICogcHJvZ3JhbSByZXF1aXJlcyBicGZfdGVzdG1vZCBCVEYsIHNvIGl0IGZhaWxzIHRvIGxvYWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19lbXB0eSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMOwomIzQzOwlpbnQgcmV0OwomIzQzOwlzdGF0aWMgY29uc3QgY2hhciAqbW9kX25hbWVzW10gPSB7ICYjMzQ7Zm9vJiMzNDsgfTsKJiM0MzsKJiM0MzsJTElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsCiYjNDM7CQkuYnRmX21vZHVsZV9uYW1lcyA9IG1vZF9uYW1lcywKJiM0MzsJKTsKJiM0MzsKJiM0MzsJc2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cygmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZW1wdHkmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTsKJiM0MzsJQVNTRVJUX0VSUihyZXQsICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fbG9hZCBlbXB0eSYjMzQ7KTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9idGZfbW9kdWxlX25hbWVzKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoIWVudi5oYXNfdGVzdG1vZCkgewomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YnRmX21vZHVsZV9uYW1lc19sb2FkJiMzNDspKQomIzQzOwkJYnRmX21vZHVsZV9uYW1lc19sb2FkKCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YnRmX21vZHVsZV9uYW1lc19za2lwJiMzNDspKQomIzQzOwkJYnRmX21vZHVsZV9uYW1lc19za2lwKCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YnRmX21vZHVsZV9uYW1lc19lbXB0eSYjMzQ7KSkKJiM0MzsJCWJ0Zl9tb2R1bGVfbmFtZXNfZW1wdHkoKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9uYW1lcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4yMzJhZGMwZjMzZjZlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuYwpAQCAtMCwwICYjNDM7MSwxMyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOwomIzQzO1NFQygmIzM0O2ZlbnRyeS9icGZfdGVzdG1vZF9sb29wX3Rlc3QmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9idGZfbW9kdWxlX25hbWVzKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMzMAoJCQkJCQkJb3V0cHV0OiA2MgoJCQkJCQkJdGhvdWdodHM6IDMzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBObyBLZXJuZWwgQ2hhbmdlcywgTm8gRnV6emluZyBOZWVkZWQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGFkZGluZyBmdW5jdGlvbmFsaXR5IHdpdGhpbiBgbGliYnBmYCBhbmQgYXNzb2NpYXRlZCBzZWxmLXRlc3RzLiBTcGVjaWZpY2FsbHksIGl0IGFsbG93cyBmb3Igc3BlY2lmeWluZyBhIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyBmb3IgQlRGIGxvYWRpbmcuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW4gYHRvb2xzL2xpYi9icGYvbGliYnBmLmNgLCBgdG9vbHMvbGliL2JwZi9saWJicGYuaGAsIGFuZCB0aGUgY29ycmVzcG9uZGluZyBzZWxmLXRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gVGhpcyBpcyBhbGwgdXNlci1zcGFjZSBzdHVmZi4KCkNydWNpYWxseSwgZnJvbSBteSBpbml0aWFsIGFzc2Vzc21lbnQsIEkgZG9uJiMzOTt0IHNlZSBhbnkgbW9kaWZpY2F0aW9uIG9mICprZXJuZWwqIGNvZGUuIE5vdGhpbmcgaW4gdGhlIGNvcmUga2VybmVsIGRpcmVjdG9yaWVzIGxpa2UgYGtlcm5lbC9icGYvYCwgYG5ldC9jb3JlL2AsIG9yIGFueXdoZXJlIGVsc2UgdGhhdCB3b3VsZCBzdWdnZXN0IGEga2VybmVsLWxldmVsIGNoYW5nZSByZXF1aXJpbmcgZnV6emluZy4gV2UmIzM5O3JlIHRhbGtpbmcgdXNlci1zcGFjZSBsaWJyYXJ5IGFuZCB0ZXN0IGFkZGl0aW9ucyAqb25seSouCgpUbyBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgZGlkIGEgcXVpY2sgZGlmZiBjaGVjaywganVzdCB0byBjb25maXJtLiBEb3VibGUtY2hlY2tpbmcsIG15IGluaXRpYWwgcmVhZCBob2xkcyB0cnVlLiBUaGUgcGF0Y2ggdG91Y2hlczoKCiogICBgdG9vbHMvbGliL2JwZi9saWJicGYuY2AKKiAgIGB0b29scy9saWIvYnBmL2xpYmJwZi5oYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9uYW1lcy5jYAoKQWxsIGxvY2F0ZWQgc3F1YXJlbHkgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuCgpUaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBpcyBhbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgdXNlci1zcGFjZSB0b29saW5nLCBJJiMzOTttIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBkb2VzbiYjMzk7dCBuZWNlc3NpdGF0ZSBrZXJuZWwgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHVzZXItc3BhY2UgbGliYnBmIGxpYnJhcnkgYW5kIGFkZHMgYSBzZWxmdGVzdC4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2VyLXNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCBhZGRzIGEgc2VsZnRlc3QuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6Mjc6MzYuMjQ3MDI2NjkzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNjY3MDQ3OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2VyLXNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCBhZGRzIGEgc2VsZnRlc3QuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6Mjc6MzYuMjQ3MDMxMjQyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMwNjg3OTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGJiZjIyN2ZjZjZiZGM4MWJhM2FhZTUxMzMwZjkzYTA2MjNhNTI5OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxNjoyNzozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbmluZGV4IDUxNGU0ZTlkYWE4MjUuLjZmNWQzMjEzYjNlNWIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcXG5AQCAtNzc5LDYgKzc3OSw5IEBAIHN0cnVjdCBicGZfb2JqZWN0IHtcXG4gXFx0Y2hhciAqdG9rZW5fcGF0aDtcXG4gXFx0aW50IHRva2VuX2ZkO1xcbiBcXG4rXFx0Y2hhciAqKmJ0Zl9tb2R1bGVfbmFtZXM7XFxuK1xcdHNpemVfdCBucl9idGZfbW9kdWxlX25hbWVzO1xcbitcXG4gXFx0Y2hhciBwYXRoW107XFxuIH07XFxuIFxcbkBAIC01ODAzLDYgKzU4MDYsOTQgQEAgaW50IGJwZl9jb3JlX2FkZF9jYW5kcyhzdHJ1Y3QgYnBmX2NvcmVfY2FuZCAqbG9jYWxfY2FuZCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuK3tcXG4rXFx0c2l6ZV90IGk7XFxuK1xcbitcXHRpZiAoIW9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG9iai1cXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lczsgaSsrKVxcbitcXHRcXHR6ZnJlZShcXHUwMDI2b2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzW2ldKTtcXG4rXFx0emZyZWUoXFx1MDAyNm9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lcyk7XFxuK1xcdG9iai1cXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lcyA9IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnBmX29iamVjdF9pbml0X2J0Zl9tb2R1bGVfbmFtZXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyAqb3B0cylcXG4re1xcbitcXHRjb25zdCBjaGFyICoqbmFtZXM7XFxuK1xcdHNpemVfdCBpLCBqLCBjbnQ7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRuYW1lcyA9IE9QVFNfR0VUKG9wdHMsIGJ0Zl9tb2R1bGVfbmFtZXMsIE5VTEwpO1xcbitcXHRpZiAoIW5hbWVzKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGNudCA9IE9QVFNfR0VUKG9wdHMsIG5yX2J0Zl9tb2R1bGVfbmFtZXMsIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogS2VlcCBidGZfbW9kdWxlX25hbWVzIG5vbi1OVUxMIHRvIGRpc3Rpbmd1aXNoIGFuIGVtcHR5IGZpbHRlciBmcm9tXFxuK1xcdCAqIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIGxvYWRpbmcgYWxsIG1vZHVsZSBCVEZzLlxcbitcXHQgKi9cXG4rXFx0b2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzID0gY2FsbG9jKGNudCA/OiAxLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKCpvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMpKTtcXG4rXFx0aWYgKCFvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuK1xcdFxcdGlmICghbmFtZXNbaV0gfHwgIW5hbWVzW2ldWzBdKSB7XFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcImludmFsaWQga2VybmVsIG1vZHVsZSBCVEYgbmFtZSBhdCBpbmRleCAlenVcXFxcblxcXCIsIGkpO1xcbitcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBpOyBqKyspIHtcXG4rXFx0XFx0XFx0aWYgKHN0cmNtcChvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbal0sIG5hbWVzW2ldKSA9PSAwKSB7XFxuK1xcdFxcdFxcdFxcdHByX3dhcm4oXFxcImR1cGxpY2F0ZSBrZXJuZWwgbW9kdWxlIEJURiBuYW1lICclcydcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdG5hbWVzW2ldKTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSA9IHN0cmR1cChuYW1lc1tpXSk7XFxuK1xcdFxcdGlmICghb2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzW2ldKSB7XFxuK1xcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0b2JqLVxcdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzKys7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfb3V0OlxcbitcXHRicGZfb2JqZWN0X2ZyZWVfYnRmX21vZHVsZV9uYW1lcyhvYmopO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBpc19tb2R1bGVfYnRmX25lZWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdHNpemVfdCBpO1xcbitcXG4rXFx0aWYgKCFvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG9iai1cXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lczsgaSsrKSB7XFxuK1xcdFxcdGlmIChzdHJjbXAob2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzW2ldLCBuYW1lKSA9PSAwKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cHJfZGVidWcoXFxcInNraXBwaW5nIG1vZHVsZSBCVEYgJyVzJywgbm90IGluIGJ0Zl9tb2R1bGVfbmFtZXNcXFxcblxcXCIsIG5hbWUpO1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGFsbF9uZWVkZWRfbW9kdWxlX2J0ZnNfbG9hZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuK3tcXG4rXFx0cmV0dXJuIG9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lcyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgb2JqLVxcdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzID09IG9iai1cXHUwMDNlYnRmX21vZHVsZV9jbnQ7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfYnRmX2luZm8gaW5mbztcXG5AQCAtNTg2Nyw2ICs1OTU4LDExIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0aWYgKCFpc19tb2R1bGVfYnRmX25lZWRlZChvYmosIG5hbWUpKSB7XFxuK1xcdFxcdFxcdGNsb3NlKGZkKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLVxcdTAwM2VidGZfdm1saW51eCk7XFxuIFxcdFxcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3IoYnRmKTtcXG4gXFx0XFx0aWYgKGVycikge1xcbkBAIC01ODkxLDYgKzU5ODcsOSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFx0XFx0b2JqLVxcdTAwM2VidGZfbW9kdWxlX2NudCsrO1xcbitcXG4rXFx0XFx0aWYgKGFsbF9uZWVkZWRfbW9kdWxlX2J0ZnNfbG9hZGVkKG9iaikpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoZXJyKSB7XFxuQEAgLTg1MDgsNiArODYwNywxMCBAQCBzdGF0aWMgc3RydWN0IGJwZl9vYmplY3QgKmJwZl9vYmplY3Rfb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCB2b2lkICpvYmpfYnVmLFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdGVyciA9IGJwZl9vYmplY3RfaW5pdF9idGZfbW9kdWxlX25hbWVzKG9iaiwgb3B0cyk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0ZXJyID0gYnBmX29iamVjdF9fZWxmX2luaXQob2JqKTtcXG4gXFx0ZXJyID0gZXJyID8gOiBicGZfb2JqZWN0X19lbGZfY29sbGVjdChvYmopO1xcbiBcXHRlcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2NvbGxlY3RfZXh0ZXJucyhvYmopO1xcbkBAIC05NjI5LDYgKzk3MzIsOCBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuIFxcdFxcdGNsb3NlKG9iai1cXHUwMDNlanVtcHRhYmxlX21hcHNbaV0uZmQpO1xcbiBcXHR6ZnJlZShcXHUwMDI2b2JqLVxcdTAwM2VqdW1wdGFibGVfbWFwcyk7XFxuIFxcbitcXHRicGZfb2JqZWN0X2ZyZWVfYnRmX21vZHVsZV9uYW1lcyhvYmopO1xcbitcXG4gXFx0ZnJlZShvYmopO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxcbmluZGV4IGI5NjVhZDU3MTU0MDMuLjgzODYwMjMxOWRhOGMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuaFxcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcXG5AQCAtMjI0LDEwICsyMjQsMzIgQEAgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzIHtcXG4gXFx0ICogcG9pbnQgKC9zeXMvZnMvYnBmKSwgaW4gY2FzZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdW5kZXNpcmFibGUuXFxuIFxcdCAqL1xcbiBcXHRjb25zdCBjaGFyICpicGZfdG9rZW5fcGF0aDtcXG4rXFx0LypcXG4rXFx0ICogT3B0aW9uYWwgbGlzdCBvZiBrZXJuZWwgbW9kdWxlIG5hbWVzIHdob3NlIEJURnMgc2hvdWxkIGJlIGxvYWRlZC5cXG4rXFx0ICogbnJfYnRmX21vZHVsZV9uYW1lcyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluXFxuK1xcdCAqIGJ0Zl9tb2R1bGVfbmFtZXMuXFxuK1xcdCAqXFxuK1xcdCAqIElmIGJ0Zl9tb2R1bGVfbmFtZXMgaXMgTlVMTCwgYWxsIG1vZHVsZSBCVEZzIGFyZSBsb2FkZWQsXFxuK1xcdCAqIHByZXNlcnZpbmcgdGhlIGRlZmF1bHQgYmVoYXZpb3IuIE90aGVyd2lzZSwgb25seSB0aGUgQlRGcyBvZlxcbitcXHQgKiB0aGUgbGlzdGVkIG1vZHVsZXMgYXJlIGxvYWRlZC4gQSBub24tTlVMTCBidGZfbW9kdWxlX25hbWVzXFxuK1xcdCAqIHdpdGggbnJfYnRmX21vZHVsZV9uYW1lcyBlcXVhbCB0byB6ZXJvIG1lYW5zIHRoYXQgbm8gbW9kdWxlXFxuK1xcdCAqIEJURnMgYXJlIGxvYWRlZC5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIGxpc3QgbXVzdCBub3QgY29udGFpbiBkdXBsaWNhdGUgZW50cmllczsgb3RoZXJ3aXNlXFxuK1xcdCAqIC1FSU5WQUwgaXMgcmV0dXJuZWQuXFxuK1xcdCAqXFxuK1xcdCAqIFRoaXMgYWZmZWN0czpcXG4rXFx0ICogLSBCUEYgQ08tUkUgcmVsb2NhdGlvbnMgYWdhaW5zdCB0eXBlcyBkZWZpbmVkIGluIG1vZHVsZXM7XFxuK1xcdCAqIC0gQlRGLWJhc2VkIHJlc29sdXRpb24gb2YgZnVuY3Rpb24gYXR0YWNoIHRhcmdldHMgZm9yXFxuK1xcdCAqICAgZmVudHJ5L2ZleGl0L2Ztb2RfcmV0L2ZyZXBsYWNlL0xTTSBwcm9ncmFtcztcXG4rXFx0ICogLSBleHRlcm4gKGtzeW0pIHJlc29sdXRpb24gZm9yIGtlcm5lbCBzeW1ib2xzIGRlZmluZWQgaW4gbW9kdWxlcy5cXG4rXFx0ICovXFxuK1xcdGNvbnN0IGNoYXIgKipidGZfbW9kdWxlX25hbWVzO1xcbitcXHRzaXplX3QgbnJfYnRmX21vZHVsZV9uYW1lcztcXG4gXFxuIFxcdHNpemVfdCA6MDtcXG4gfTtcXG4tI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBicGZfdG9rZW5fcGF0aFxcbisjZGVmaW5lIGJwZl9vYmplY3Rfb3Blbl9vcHRzX19sYXN0X2ZpZWxkIG5yX2J0Zl9tb2R1bGVfbmFtZXNcXG4gXFxuIC8qKlxcbiAgKiBAYnJpZWYgKipicGZfb2JqZWN0X19vcGVuKCkqKiBjcmVhdGVzIGEgYnBmX29iamVjdCBieSBvcGVuaW5nXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDU2NzRjYWQwMDE3ZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmNcXG5AQCAtMCwwICsxLDkzIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJidGZfbW9kdWxlX25hbWVzLnNrZWwuaFxcXCJcXG4rXFxuK3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfbG9hZCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDtcXG4rXFx0aW50IHJldDtcXG4rXFx0c3RhdGljIGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcXFwiYnBmX3Rlc3Rtb2RcXFwiIH07XFxuK1xcbitcXHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcXG4rXFx0XFx0LmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsXFxuK1xcdFxcdC5ucl9idGZfbW9kdWxlX25hbWVzID0gMSxcXG4rXFx0KTtcXG4rXFxuK1xcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoXFx1MDAyNm9wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0c1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHJldCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQoc2tlbCk7XFxuK1xcdEFTU0VSVF9PSyhyZXQsIFxcXCJidGZfbW9kdWxlX25hbWVzX19sb2FkXFxcIik7XFxuK291dDpcXG4rXFx0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4rLypcXG4rICogVmVyaWZ5IHRoYXQgYW4gdW5yZXF1ZXN0ZWQgbW9kdWxlIEJURiBpcyBza2lwcGVkLiBUaGUgQlBGIHByb2dyYW1cXG4rICogcmVxdWlyZXMgdGhlIEJURiBvZiBicGZfdGVzdG1vZCwgYnV0IGJwZl90ZXN0bW9kIGlzIG5vdCBzcGVjaWZpZWQgaW5cXG4rICogYnRmX21vZHVsZV9uYW1lcywgc28gaXRzIEJURiBpcyBza2lwcGVkIGFuZCB0aGUgQlBGIHByb2dyYW0gZmFpbHMgdG8gbG9hZC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfc2tpcCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDtcXG4rXFx0aW50IHJldDtcXG4rXFx0c3RhdGljIGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcXFwibW9kdWxlX25vbmV4aXN0XFxcIiB9O1xcbitcXG4rXFx0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXFxuK1xcdFxcdC5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLFxcbitcXHRcXHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsXFxuK1xcdCk7XFxuK1xcbitcXHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFxcdTAwMjZvcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHNcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xcbitcXHRBU1NFUlRfRVJSKHJldCwgXFxcImJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWRcXFwiKTtcXG4rXFxuK291dDpcXG4rXFx0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4rLypcXG4rICogVmVyaWZ5IHRoYXQgYW4gZW1wdHkgZmlsdGVyIHNraXBzIGxvYWRpbmcgYWxsIG1vZHVsZSBCVEZzLiBUaGUgQlBGXFxuKyAqIHByb2dyYW0gcmVxdWlyZXMgYnBmX3Rlc3Rtb2QgQlRGLCBzbyBpdCBmYWlscyB0byBsb2FkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19lbXB0eSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDtcXG4rXFx0aW50IHJldDtcXG4rXFx0c3RhdGljIGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcXFwiZm9vXFxcIiB9O1xcbitcXG4rXFx0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXFxuK1xcdFxcdC5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLFxcbitcXHQpO1xcbitcXG4rXFx0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwiYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIGVtcHR5XFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTtcXG4rXFx0QVNTRVJUX0VSUihyZXQsIFxcXCJidGZfbW9kdWxlX25hbWVzX19sb2FkIGVtcHR5XFxcIik7XFxuK1xcbitvdXQ6XFxuK1xcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rXFxuK3ZvaWQgdGVzdF9idGZfbW9kdWxlX25hbWVzKHZvaWQpXFxuK3tcXG4rXFx0aWYgKCFlbnYuaGFzX3Rlc3Rtb2QpIHtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJidGZfbW9kdWxlX25hbWVzX2xvYWRcXFwiKSlcXG4rXFx0XFx0YnRmX21vZHVsZV9uYW1lc19sb2FkKCk7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYnRmX21vZHVsZV9uYW1lc19za2lwXFxcIikpXFxuK1xcdFxcdGJ0Zl9tb2R1bGVfbmFtZXNfc2tpcCgpO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImJ0Zl9tb2R1bGVfbmFtZXNfZW1wdHlcXFwiKSlcXG4rXFx0XFx0YnRmX21vZHVsZV9uYW1lc19lbXB0eSgpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9uYW1lcy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yMzJhZGMwZjMzZjZlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmNcXG5AQCAtMCwwICsxLDEzIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rXFxuK1NFQyhcXFwiZmVudHJ5L2JwZl90ZXN0bW9kX2xvb3BfdGVzdFxcXCIpXFxuK2ludCBCUEZfUFJPRyh0ZXN0X2J0Zl9tb2R1bGVfbmFtZXMpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjoyNzozNy40NzgzMjMzMDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4ODM1Mzk1NTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2VyLXNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCBhZGRzIGEgc2VsZnRlc3QuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGJiZjIyN2ZjZjZiZGM4MWJhM2FhZTUxMzMwZjkzYTA2MjNhNTI5OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDE2OjI3OjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbmluZGV4IDUxNGU0ZTlkYWE4MjUuLjZmNWQzMjEzYjNlNWIgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jXG4rKysgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5AQCAtNzc5LDYgKzc3OSw5IEBAIHN0cnVjdCBicGZfb2JqZWN0IHtcbiBcdGNoYXIgKnRva2VuX3BhdGg7XG4gXHRpbnQgdG9rZW5fZmQ7XG4gXG4rXHRjaGFyICoqYnRmX21vZHVsZV9uYW1lcztcbitcdHNpemVfdCBucl9idGZfbW9kdWxlX25hbWVzO1xuK1xuIFx0Y2hhciBwYXRoW107XG4gfTtcbiBcbkBAIC01ODAzLDYgKzU4MDYsOTQgQEAgaW50IGJwZl9jb3JlX2FkZF9jYW5kcyhzdHJ1Y3QgYnBmX2NvcmVfY2FuZCAqbG9jYWxfY2FuZCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBicGZfb2JqZWN0X2ZyZWVfYnRmX21vZHVsZV9uYW1lcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuK3tcbitcdHNpemVfdCBpO1xuK1xuK1x0aWYgKCFvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb2JqLVx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXM7IGkrKylcbitcdFx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0pO1xuK1x0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMpO1xuK1x0b2JqLVx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAwO1xuK31cbitcbitzdGF0aWMgaW50IGJwZl9vYmplY3RfaW5pdF9idGZfbW9kdWxlX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosXG4rXHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX29iamVjdF9vcGVuX29wdHMgKm9wdHMpXG4re1xuK1x0Y29uc3QgY2hhciAqKm5hbWVzO1xuK1x0c2l6ZV90IGksIGosIGNudDtcbitcdGludCBlcnI7XG4rXG4rXHRuYW1lcyA9IE9QVFNfR0VUKG9wdHMsIGJ0Zl9tb2R1bGVfbmFtZXMsIE5VTEwpO1xuK1x0aWYgKCFuYW1lcylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRjbnQgPSBPUFRTX0dFVChvcHRzLCBucl9idGZfbW9kdWxlX25hbWVzLCAwKTtcbitcbitcdC8qXG4rXHQgKiBLZWVwIGJ0Zl9tb2R1bGVfbmFtZXMgbm9uLU5VTEwgdG8gZGlzdGluZ3Vpc2ggYW4gZW1wdHkgZmlsdGVyIGZyb21cbitcdCAqIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIGxvYWRpbmcgYWxsIG1vZHVsZSBCVEZzLlxuK1x0ICovXG4rXHRvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcyA9IGNhbGxvYyhjbnQgPzogMSxcbitcdFx0XHRcdCAgICAgICBzaXplb2YoKm9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzKSk7XG4rXHRpZiAoIW9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSsrKSB7XG4rXHRcdGlmICghbmFtZXNbaV0gfHwgIW5hbWVzW2ldWzBdKSB7XG4rXHRcdFx0cHJfd2FybihcImludmFsaWQga2VybmVsIG1vZHVsZSBCVEYgbmFtZSBhdCBpbmRleCAlenVcXG5cIiwgaSk7XG4rXHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIGVycl9vdXQ7XG4rXHRcdH1cbitcbitcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaTsgaisrKSB7XG4rXHRcdFx0aWYgKHN0cmNtcChvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tqXSwgbmFtZXNbaV0pID09IDApIHtcbitcdFx0XHRcdHByX3dhcm4oXCJkdXBsaWNhdGUga2VybmVsIG1vZHVsZSBCVEYgbmFtZSAnJXMnXFxuXCIsXG4rXHRcdFx0XHRcdG5hbWVzW2ldKTtcbitcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXG4rXHRcdG9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzW2ldID0gc3RyZHVwKG5hbWVzW2ldKTtcbitcdFx0aWYgKCFvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSkge1xuK1x0XHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdFx0Z290byBlcnJfb3V0O1xuK1x0XHR9XG4rXG4rXHRcdG9iai1cdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzKys7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbitcbitlcnJfb3V0OlxuK1x0YnBmX29iamVjdF9mcmVlX2J0Zl9tb2R1bGVfbmFtZXMob2JqKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBib29sIGlzX21vZHVsZV9idGZfbmVlZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0c2l6ZV90IGk7XG4rXG4rXHRpZiAoIW9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9iai1cdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzOyBpKyspIHtcbitcdFx0aWYgKHN0cmNtcChvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSwgbmFtZSkgPT0gMClcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbitcdHByX2RlYnVnKFwic2tpcHBpbmcgbW9kdWxlIEJURiAnJXMnLCBub3QgaW4gYnRmX21vZHVsZV9uYW1lc1xcblwiLCBuYW1lKTtcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGJvb2wgYWxsX25lZWRlZF9tb2R1bGVfYnRmc19sb2FkZWQoY29uc3Qgc3RydWN0IGJwZl9vYmplY3QgKm9iailcbit7XG4rXHRyZXR1cm4gb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgb2JqLVx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXMgPT0gb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfY250O1xuK31cbitcbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiB7XG4gXHRzdHJ1Y3QgYnBmX2J0Zl9pbmZvIGluZm87XG5AQCAtNTg2Nyw2ICs1OTU4LDExIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4rXHRcdGlmICghaXNfbW9kdWxlX2J0Zl9uZWVkZWQob2JqLCBuYW1lKSkge1xuK1x0XHRcdGNsb3NlKGZkKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuIFx0XHRidGYgPSBidGZfZ2V0X2Zyb21fZmQoZmQsIG9iai1cdTAwM2VidGZfdm1saW51eCk7XG4gXHRcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3IoYnRmKTtcbiBcdFx0aWYgKGVycikge1xuQEAgLTU4OTEsNiArNTk4Nyw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHRcdG9iai1cdTAwM2VidGZfbW9kdWxlX2NudCsrO1xuK1xuK1x0XHRpZiAoYWxsX25lZWRlZF9tb2R1bGVfYnRmc19sb2FkZWQob2JqKSlcbitcdFx0XHRicmVhaztcbiBcdH1cbiBcbiBcdGlmIChlcnIpIHtcbkBAIC04NTA4LDYgKzg2MDcsMTAgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZixcbiBcdFx0fVxuIFx0fVxuIFxuK1x0ZXJyID0gYnBmX29iamVjdF9pbml0X2J0Zl9tb2R1bGVfbmFtZXMob2JqLCBvcHRzKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0ZXJyID0gYnBmX29iamVjdF9fZWxmX2luaXQob2JqKTtcbiBcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fZWxmX2NvbGxlY3Qob2JqKTtcbiBcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fY29sbGVjdF9leHRlcm5zKG9iaik7XG5AQCAtOTYyOSw2ICs5NzMyLDggQEAgdm9pZCBicGZfb2JqZWN0X19jbG9zZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRjbG9zZShvYmotXHUwMDNlanVtcHRhYmxlX21hcHNbaV0uZmQpO1xuIFx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWp1bXB0YWJsZV9tYXBzKTtcbiBcbitcdGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKG9iaik7XG4rXG4gXHRmcmVlKG9iaik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmggYi90b29scy9saWIvYnBmL2xpYmJwZi5oXG5pbmRleCBiOTY1YWQ1NzE1NDAzLi44Mzg2MDIzMTlkYThjIDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuQEAgLTIyNCwxMCArMjI0LDMyIEBAIHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyB7XG4gXHQgKiBwb2ludCAoL3N5cy9mcy9icGYpLCBpbiBjYXNlIHRoaXMgZGVmYXVsdCBiZWhhdmlvciBpcyB1bmRlc2lyYWJsZS5cbiBcdCAqL1xuIFx0Y29uc3QgY2hhciAqYnBmX3Rva2VuX3BhdGg7XG4rXHQvKlxuK1x0ICogT3B0aW9uYWwgbGlzdCBvZiBrZXJuZWwgbW9kdWxlIG5hbWVzIHdob3NlIEJURnMgc2hvdWxkIGJlIGxvYWRlZC5cbitcdCAqIG5yX2J0Zl9tb2R1bGVfbmFtZXMgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpblxuK1x0ICogYnRmX21vZHVsZV9uYW1lcy5cbitcdCAqXG4rXHQgKiBJZiBidGZfbW9kdWxlX25hbWVzIGlzIE5VTEwsIGFsbCBtb2R1bGUgQlRGcyBhcmUgbG9hZGVkLFxuK1x0ICogcHJlc2VydmluZyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gT3RoZXJ3aXNlLCBvbmx5IHRoZSBCVEZzIG9mXG4rXHQgKiB0aGUgbGlzdGVkIG1vZHVsZXMgYXJlIGxvYWRlZC4gQSBub24tTlVMTCBidGZfbW9kdWxlX25hbWVzXG4rXHQgKiB3aXRoIG5yX2J0Zl9tb2R1bGVfbmFtZXMgZXF1YWwgdG8gemVybyBtZWFucyB0aGF0IG5vIG1vZHVsZVxuK1x0ICogQlRGcyBhcmUgbG9hZGVkLlxuK1x0ICpcbitcdCAqIFRoZSBsaXN0IG11c3Qgbm90IGNvbnRhaW4gZHVwbGljYXRlIGVudHJpZXM7IG90aGVyd2lzZVxuK1x0ICogLUVJTlZBTCBpcyByZXR1cm5lZC5cbitcdCAqXG4rXHQgKiBUaGlzIGFmZmVjdHM6XG4rXHQgKiAtIEJQRiBDTy1SRSByZWxvY2F0aW9ucyBhZ2FpbnN0IHR5cGVzIGRlZmluZWQgaW4gbW9kdWxlcztcbitcdCAqIC0gQlRGLWJhc2VkIHJlc29sdXRpb24gb2YgZnVuY3Rpb24gYXR0YWNoIHRhcmdldHMgZm9yXG4rXHQgKiAgIGZlbnRyeS9mZXhpdC9mbW9kX3JldC9mcmVwbGFjZS9MU00gcHJvZ3JhbXM7XG4rXHQgKiAtIGV4dGVybiAoa3N5bSkgcmVzb2x1dGlvbiBmb3Iga2VybmVsIHN5bWJvbHMgZGVmaW5lZCBpbiBtb2R1bGVzLlxuK1x0ICovXG4rXHRjb25zdCBjaGFyICoqYnRmX21vZHVsZV9uYW1lcztcbitcdHNpemVfdCBucl9idGZfbW9kdWxlX25hbWVzO1xuIFxuIFx0c2l6ZV90IDowO1xuIH07XG4tI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBicGZfdG9rZW5fcGF0aFxuKyNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgbnJfYnRmX21vZHVsZV9uYW1lc1xuIFxuIC8qKlxuICAqIEBicmllZiAqKmJwZl9vYmplY3RfX29wZW4oKSoqIGNyZWF0ZXMgYSBicGZfb2JqZWN0IGJ5IG9wZW5pbmdcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kNTY3NGNhZDAwMTdlXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmNcbkBAIC0wLDAgKzEsOTMgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnRmX21vZHVsZV9uYW1lcy5za2VsLmhcIlxuK1xuK3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfbG9hZCh2b2lkKVxuK3tcbitcdHN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDtcbitcdGludCByZXQ7XG4rXHRzdGF0aWMgY29uc3QgY2hhciAqbW9kX25hbWVzW10gPSB7IFwiYnBmX3Rlc3Rtb2RcIiB9O1xuK1xuK1x0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4rXHRcdC5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLFxuK1x0XHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsXG4rXHQpO1xuK1xuK1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0c1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xuK1x0QVNTRVJUX09LKHJldCwgXCJidGZfbW9kdWxlX25hbWVzX19sb2FkXCIpO1xuK291dDpcbitcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuKy8qXG4rICogVmVyaWZ5IHRoYXQgYW4gdW5yZXF1ZXN0ZWQgbW9kdWxlIEJURiBpcyBza2lwcGVkLiBUaGUgQlBGIHByb2dyYW1cbisgKiByZXF1aXJlcyB0aGUgQlRGIG9mIGJwZl90ZXN0bW9kLCBidXQgYnBmX3Rlc3Rtb2QgaXMgbm90IHNwZWNpZmllZCBpblxuKyAqIGJ0Zl9tb2R1bGVfbmFtZXMsIHNvIGl0cyBCVEYgaXMgc2tpcHBlZCBhbmQgdGhlIEJQRiBwcm9ncmFtIGZhaWxzIHRvIGxvYWQuXG4rICovXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19za2lwKHZvaWQpXG4re1xuK1x0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xuK1x0aW50IHJldDtcbitcdHN0YXRpYyBjb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgXCJtb2R1bGVfbm9uZXhpc3RcIiB9O1xuK1xuK1x0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4rXHRcdC5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLFxuK1x0XHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsXG4rXHQpO1xuK1xuK1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0c1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xuK1x0QVNTRVJUX0VSUihyZXQsIFwiYnRmX21vZHVsZV9uYW1lc19fbG9hZFwiKTtcbitcbitvdXQ6XG4rXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuK31cbitcbisvKlxuKyAqIFZlcmlmeSB0aGF0IGFuIGVtcHR5IGZpbHRlciBza2lwcyBsb2FkaW5nIGFsbCBtb2R1bGUgQlRGcy4gVGhlIEJQRlxuKyAqIHByb2dyYW0gcmVxdWlyZXMgYnBmX3Rlc3Rtb2QgQlRGLCBzbyBpdCBmYWlscyB0byBsb2FkLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfZW1wdHkodm9pZClcbit7XG4rXHRzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7XG4rXHRpbnQgcmV0O1xuK1x0c3RhdGljIGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcImZvb1wiIH07XG4rXG4rXHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbitcdFx0LmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsXG4rXHQpO1xuK1xuK1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBlbXB0eVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xuK1x0QVNTRVJUX0VSUihyZXQsIFwiYnRmX21vZHVsZV9uYW1lc19fbG9hZCBlbXB0eVwiKTtcbitcbitvdXQ6XG4rXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuK31cbitcbit2b2lkIHRlc3RfYnRmX21vZHVsZV9uYW1lcyh2b2lkKVxuK3tcbitcdGlmICghZW52Lmhhc190ZXN0bW9kKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJidGZfbW9kdWxlX25hbWVzX2xvYWRcIikpXG4rXHRcdGJ0Zl9tb2R1bGVfbmFtZXNfbG9hZCgpO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJidGZfbW9kdWxlX25hbWVzX3NraXBcIikpXG4rXHRcdGJ0Zl9tb2R1bGVfbmFtZXNfc2tpcCgpO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJidGZfbW9kdWxlX25hbWVzX2VtcHR5XCIpKVxuK1x0XHRidGZfbW9kdWxlX25hbWVzX2VtcHR5KCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9uYW1lcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjMyYWRjMGYzM2Y2ZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuY1xuQEAgLTAsMCArMSwxMyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuK1xuK1NFQyhcImZlbnRyeS9icGZfdGVzdG1vZF9sb29wX3Rlc3RcIilcbitpbnQgQlBGX1BST0codGVzdF9idGZfbW9kdWxlX25hbWVzKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjoyNzozNy40NzgzMjQ2MDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODM1MzcwOTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IE5vIEtlcm5lbCBDaGFuZ2VzLCBObyBGdXp6aW5nIE5lZWRlZCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGFkZGluZyBmdW5jdGlvbmFsaXR5IHdpdGhpbiBgbGliYnBmYCBhbmQgYXNzb2NpYXRlZCBzZWxmLXRlc3RzLiBTcGVjaWZpY2FsbHksIGl0IGFsbG93cyBmb3Igc3BlY2lmeWluZyBhIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyBmb3IgQlRGIGxvYWRpbmcuIEknbSBzZWVpbmcgY2hhbmdlcyBpbiBgdG9vbHMvbGliL2JwZi9saWJicGYuY2AsIGB0b29scy9saWIvYnBmL2xpYmJwZi5oYCwgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHNlbGYtdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBUaGlzIGlzIGFsbCB1c2VyLXNwYWNlIHN0dWZmLlxuXG5DcnVjaWFsbHksIGZyb20gbXkgaW5pdGlhbCBhc3Nlc3NtZW50LCBJIGRvbid0IHNlZSBhbnkgbW9kaWZpY2F0aW9uIG9mICprZXJuZWwqIGNvZGUuIE5vdGhpbmcgaW4gdGhlIGNvcmUga2VybmVsIGRpcmVjdG9yaWVzIGxpa2UgYGtlcm5lbC9icGYvYCwgYG5ldC9jb3JlL2AsIG9yIGFueXdoZXJlIGVsc2UgdGhhdCB3b3VsZCBzdWdnZXN0IGEga2VybmVsLWxldmVsIGNoYW5nZSByZXF1aXJpbmcgZnV6emluZy4gV2UncmUgdGFsa2luZyB1c2VyLXNwYWNlIGxpYnJhcnkgYW5kIHRlc3QgYWRkaXRpb25zICpvbmx5Ki5cblxuVG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIGRpZCBhIHF1aWNrIGRpZmYgY2hlY2ssIGp1c3QgdG8gY29uZmlybS4gRG91YmxlLWNoZWNraW5nLCBteSBpbml0aWFsIHJlYWQgaG9sZHMgdHJ1ZS4gVGhlIHBhdGNoIHRvdWNoZXM6XG5cbiogICBgdG9vbHMvbGliL2JwZi9saWJicGYuY2BcbiogICBgdG9vbHMvbGliL2JwZi9saWJicGYuaGBcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9uYW1lcy5jYFxuXG5BbGwgbG9jYXRlZCBzcXVhcmVseSB3aXRoaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeS5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgaXMgYWxsIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHVzZXItc3BhY2UgdG9vbGluZywgSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBkb2Vzbid0IG5lY2Vzc2l0YXRlIGtlcm5lbCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzMwLCJPdXRwdXRUb2tlbnMiOjYyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6Mjc6NDYuMzEzNjk4MDk3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2VyLXNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCBhZGRzIGEgc2VsZnRlc3QuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdXNlci1zcGFjZSBsaWJicGYgbGlicmFyeSBhbmQgYWRkcyBhIHNlbGZ0ZXN0LiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjI3OjQ2LjMxMzcyMDc1N1oiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6shxn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-24 15:45:06 +0000 UTC FinishedAt: 2026-08-24 16:27:48 +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+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdXNlci1zcGFjZSBsaWJicGYgbGlicmFyeSBhbmQgYWRkcyBhIHNlbGZ0ZXN0LiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0YmJmMjI3ZmNmNmJkYzgxYmEzYWFlNTEzMzBmOTNhMDYyM2E1Mjk4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTY6Mjc6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbmluZGV4IDUxNGU0ZTlkYWE4MjUuLjZmNWQzMjEzYjNlNWIgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5AQCAtNzc5LDYgJiM0Mzs3NzksOSBAQCBzdHJ1Y3QgYnBmX29iamVjdCB7XG4gXHRjaGFyICp0b2tlbl9wYXRoO1xuIFx0aW50IHRva2VuX2ZkO1xuIFxuJiM0MztcdGNoYXIgKipidGZfbW9kdWxlX25hbWVzO1xuJiM0MztcdHNpemVfdCBucl9idGZfbW9kdWxlX25hbWVzO1xuJiM0MztcbiBcdGNoYXIgcGF0aFtdO1xuIH07XG4gXG5AQCAtNTgwMyw2ICYjNDM7NTgwNiw5NCBAQCBpbnQgYnBmX2NvcmVfYWRkX2NhbmRzKHN0cnVjdCBicGZfY29yZV9jYW5kICpsb2NhbF9jYW5kLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBicGZfb2JqZWN0X2ZyZWVfYnRmX21vZHVsZV9uYW1lcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IGk7XG4mIzQzO1xuJiM0MztcdGlmICghb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9iai1cdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzW2ldKTtcbiYjNDM7XHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcyk7XG4mIzQzO1x0b2JqLVx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJwZl9vYmplY3RfaW5pdF9idGZfbW9kdWxlX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosXG4mIzQzO1x0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzICpvcHRzKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqKm5hbWVzO1xuJiM0MztcdHNpemVfdCBpLCBqLCBjbnQ7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0bmFtZXMgPSBPUFRTX0dFVChvcHRzLCBidGZfbW9kdWxlX25hbWVzLCBOVUxMKTtcbiYjNDM7XHRpZiAoIW5hbWVzKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGNudCA9IE9QVFNfR0VUKG9wdHMsIG5yX2J0Zl9tb2R1bGVfbmFtZXMsIDApO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEtlZXAgYnRmX21vZHVsZV9uYW1lcyBub24tTlVMTCB0byBkaXN0aW5ndWlzaCBhbiBlbXB0eSBmaWx0ZXIgZnJvbVxuJiM0MztcdCAqIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIGxvYWRpbmcgYWxsIG1vZHVsZSBCVEZzLlxuJiM0MztcdCAqL1xuJiM0MztcdG9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzID0gY2FsbG9jKGNudCA/OiAxLFxuJiM0MztcdFx0XHRcdCAgICAgICBzaXplb2YoKm9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzKSk7XG4mIzQzO1x0aWYgKCFvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoIW5hbWVzW2ldIHx8ICFuYW1lc1tpXVswXSkge1xuJiM0MztcdFx0XHRwcl93YXJuKFwmIzM0O2ludmFsaWQga2VybmVsIG1vZHVsZSBCVEYgbmFtZSBhdCBpbmRleCAlenVcXG5cJiMzNDssIGkpO1xuJiM0MztcdFx0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaTsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKHN0cmNtcChvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tqXSwgbmFtZXNbaV0pID09IDApIHtcbiYjNDM7XHRcdFx0XHRwcl93YXJuKFwmIzM0O2R1cGxpY2F0ZSBrZXJuZWwgbW9kdWxlIEJURiBuYW1lICYjMzk7JXMmIzM5O1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdG5hbWVzW2ldKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzW2ldID0gc3RyZHVwKG5hbWVzW2ldKTtcbiYjNDM7XHRcdGlmICghb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0pIHtcbiYjNDM7XHRcdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG9iai1cdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfb3V0OlxuJiM0MztcdGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKG9iaik7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgaXNfbW9kdWxlX2J0Zl9uZWVkZWQoY29uc3Qgc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIW9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9iai1cdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHN0cmNtcChvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSwgbmFtZSkgPT0gMClcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwcl9kZWJ1ZyhcJiMzNDtza2lwcGluZyBtb2R1bGUgQlRGICYjMzk7JXMmIzM5Oywgbm90IGluIGJ0Zl9tb2R1bGVfbmFtZXNcXG5cJiMzNDssIG5hbWUpO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgYWxsX25lZWRlZF9tb2R1bGVfYnRmc19sb2FkZWQoY29uc3Qgc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiYjNDM7e1xuJiM0MztcdHJldHVybiBvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgb2JqLVx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXMgPT0gb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfY250O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIHtcbiBcdHN0cnVjdCBicGZfYnRmX2luZm8gaW5mbztcbkBAIC01ODY3LDYgJiM0Mzs1OTU4LDExIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRpZiAoIWlzX21vZHVsZV9idGZfbmVlZGVkKG9iaiwgbmFtZSkpIHtcbiYjNDM7XHRcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLVx1MDAzZWJ0Zl92bWxpbnV4KTtcbiBcdFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xuIFx0XHRpZiAoZXJyKSB7XG5AQCAtNTg5MSw2ICYjNDM7NTk4Nyw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHRcdG9iai1cdTAwM2VidGZfbW9kdWxlX2NudCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGFsbF9uZWVkZWRfbW9kdWxlX2J0ZnNfbG9hZGVkKG9iaikpXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0aWYgKGVycikge1xuQEAgLTg1MDgsNiAmIzQzOzg2MDcsMTAgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZixcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdGVyciA9IGJwZl9vYmplY3RfaW5pdF9idGZfbW9kdWxlX25hbWVzKG9iaiwgb3B0cyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiBcdGVyciA9IGJwZl9vYmplY3RfX2VsZl9pbml0KG9iaik7XG4gXHRlcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2VsZl9jb2xsZWN0KG9iaik7XG4gXHRlcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2NvbGxlY3RfZXh0ZXJucyhvYmopO1xuQEAgLTk2MjksNiAmIzQzOzk3MzIsOCBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGNsb3NlKG9iai1cdTAwM2VqdW1wdGFibGVfbWFwc1tpXS5mZCk7XG4gXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlanVtcHRhYmxlX21hcHMpO1xuIFxuJiM0MztcdGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKG9iaik7XG4mIzQzO1xuIFx0ZnJlZShvYmopO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuaW5kZXggYjk2NWFkNTcxNTQwMy4uODM4NjAyMzE5ZGE4YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbkBAIC0yMjQsMTAgJiM0MzsyMjQsMzIgQEAgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzIHtcbiBcdCAqIHBvaW50ICgvc3lzL2ZzL2JwZiksIGluIGNhc2UgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIHVuZGVzaXJhYmxlLlxuIFx0ICovXG4gXHRjb25zdCBjaGFyICpicGZfdG9rZW5fcGF0aDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9wdGlvbmFsIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyB3aG9zZSBCVEZzIHNob3VsZCBiZSBsb2FkZWQuXG4mIzQzO1x0ICogbnJfYnRmX21vZHVsZV9uYW1lcyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluXG4mIzQzO1x0ICogYnRmX21vZHVsZV9uYW1lcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIElmIGJ0Zl9tb2R1bGVfbmFtZXMgaXMgTlVMTCwgYWxsIG1vZHVsZSBCVEZzIGFyZSBsb2FkZWQsXG4mIzQzO1x0ICogcHJlc2VydmluZyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gT3RoZXJ3aXNlLCBvbmx5IHRoZSBCVEZzIG9mXG4mIzQzO1x0ICogdGhlIGxpc3RlZCBtb2R1bGVzIGFyZSBsb2FkZWQuIEEgbm9uLU5VTEwgYnRmX21vZHVsZV9uYW1lc1xuJiM0MztcdCAqIHdpdGggbnJfYnRmX21vZHVsZV9uYW1lcyBlcXVhbCB0byB6ZXJvIG1lYW5zIHRoYXQgbm8gbW9kdWxlXG4mIzQzO1x0ICogQlRGcyBhcmUgbG9hZGVkLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlIGxpc3QgbXVzdCBub3QgY29udGFpbiBkdXBsaWNhdGUgZW50cmllczsgb3RoZXJ3aXNlXG4mIzQzO1x0ICogLUVJTlZBTCBpcyByZXR1cm5lZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoaXMgYWZmZWN0czpcbiYjNDM7XHQgKiAtIEJQRiBDTy1SRSByZWxvY2F0aW9ucyBhZ2FpbnN0IHR5cGVzIGRlZmluZWQgaW4gbW9kdWxlcztcbiYjNDM7XHQgKiAtIEJURi1iYXNlZCByZXNvbHV0aW9uIG9mIGZ1bmN0aW9uIGF0dGFjaCB0YXJnZXRzIGZvclxuJiM0MztcdCAqICAgZmVudHJ5L2ZleGl0L2Ztb2RfcmV0L2ZyZXBsYWNlL0xTTSBwcm9ncmFtcztcbiYjNDM7XHQgKiAtIGV4dGVybiAoa3N5bSkgcmVzb2x1dGlvbiBmb3Iga2VybmVsIHN5bWJvbHMgZGVmaW5lZCBpbiBtb2R1bGVzLlxuJiM0MztcdCAqL1xuJiM0MztcdGNvbnN0IGNoYXIgKipidGZfbW9kdWxlX25hbWVzO1xuJiM0MztcdHNpemVfdCBucl9idGZfbW9kdWxlX25hbWVzO1xuIFxuIFx0c2l6ZV90IDowO1xuIH07XG4tI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBicGZfdG9rZW5fcGF0aFxuJiM0MzsjZGVmaW5lIGJwZl9vYmplY3Rfb3Blbl9vcHRzX19sYXN0X2ZpZWxkIG5yX2J0Zl9tb2R1bGVfbmFtZXNcbiBcbiAvKipcbiAgKiBAYnJpZWYgKipicGZfb2JqZWN0X19vcGVuKCkqKiBjcmVhdGVzIGEgYnBmX29iamVjdCBieSBvcGVuaW5nXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDU2NzRjYWQwMDE3ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jXG5AQCAtMCwwICYjNDM7MSw5MyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnRmX21vZHVsZV9uYW1lcy5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfbG9hZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0c3RhdGljIGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcJiMzNDticGZfdGVzdG1vZFwmIzM0OyB9O1xuJiM0MztcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbiYjNDM7XHRcdC5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLFxuJiM0MztcdFx0Lm5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAxLFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0c1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTtcbiYjNDM7XHRBU1NFUlRfT0socmV0LCBcJiMzNDtidGZfbW9kdWxlX25hbWVzX19sb2FkXCYjMzQ7KTtcbiYjNDM7b3V0OlxuJiM0MztcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFZlcmlmeSB0aGF0IGFuIHVucmVxdWVzdGVkIG1vZHVsZSBCVEYgaXMgc2tpcHBlZC4gVGhlIEJQRiBwcm9ncmFtXG4mIzQzOyAqIHJlcXVpcmVzIHRoZSBCVEYgb2YgYnBmX3Rlc3Rtb2QsIGJ1dCBicGZfdGVzdG1vZCBpcyBub3Qgc3BlY2lmaWVkIGluXG4mIzQzOyAqIGJ0Zl9tb2R1bGVfbmFtZXMsIHNvIGl0cyBCVEYgaXMgc2tpcHBlZCBhbmQgdGhlIEJQRiBwcm9ncmFtIGZhaWxzIHRvIGxvYWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX3NraXAodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHN0YXRpYyBjb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgXCYjMzQ7bW9kdWxlX25vbmV4aXN0XCYjMzQ7IH07XG4mIzQzO1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxuJiM0MztcdFx0LmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsXG4mIzQzO1x0XHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsXG4mIzQzO1x0KTtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xuJiM0MztcdEFTU0VSVF9FUlIocmV0LCBcJiMzNDtidGZfbW9kdWxlX25hbWVzX19sb2FkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBWZXJpZnkgdGhhdCBhbiBlbXB0eSBmaWx0ZXIgc2tpcHMgbG9hZGluZyBhbGwgbW9kdWxlIEJURnMuIFRoZSBCUEZcbiYjNDM7ICogcHJvZ3JhbSByZXF1aXJlcyBicGZfdGVzdG1vZCBCVEYsIHNvIGl0IGZhaWxzIHRvIGxvYWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX2VtcHR5KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRzdGF0aWMgY29uc3QgY2hhciAqbW9kX25hbWVzW10gPSB7IFwmIzM0O2Zvb1wmIzM0OyB9O1xuJiM0MztcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbiYjNDM7XHRcdC5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBlbXB0eVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTtcbiYjNDM7XHRBU1NFUlRfRVJSKHJldCwgXCYjMzQ7YnRmX21vZHVsZV9uYW1lc19fbG9hZCBlbXB0eVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2J0Zl9tb2R1bGVfbmFtZXModm9pZClcbiYjNDM7e1xuJiM0MztcdGlmICghZW52Lmhhc190ZXN0bW9kKSB7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtidGZfbW9kdWxlX25hbWVzX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0YnRmX21vZHVsZV9uYW1lc19sb2FkKCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfc2tpcFwmIzM0OykpXG4mIzQzO1x0XHRidGZfbW9kdWxlX25hbWVzX3NraXAoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7YnRmX21vZHVsZV9uYW1lc19lbXB0eVwmIzM0OykpXG4mIzQzO1x0XHRidGZfbW9kdWxlX25hbWVzX2VtcHR5KCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9uYW1lcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjIzMmFkYzBmMzNmNmVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmNcbkBAIC0wLDAgJiM0MzsxLDEzIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtmZW50cnkvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0XCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0codGVzdF9idGZfbW9kdWxlX25hbWVzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHVzZXItc3BhY2UgbGliYnBmIGxpYnJhcnkgYW5kIGFkZHMgYSBzZWxmdGVzdC4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGJiZjIyN2ZjZjZiZGM4MWJhM2FhZTUxMzMwZjkzYTA2MjNhNTI5OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDE2OjI3OjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKaW5kZXggNTE0ZTRlOWRhYTgyNS4uNmY1ZDMyMTNiM2U1YiAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5jCkBAIC03NzksNiAmIzQzOzc3OSw5IEBAIHN0cnVjdCBicGZfb2JqZWN0IHsKIAljaGFyICp0b2tlbl9wYXRoOwogCWludCB0b2tlbl9mZDsKIAomIzQzOwljaGFyICoqYnRmX21vZHVsZV9uYW1lczsKJiM0MzsJc2l6ZV90IG5yX2J0Zl9tb2R1bGVfbmFtZXM7CiYjNDM7CiAJY2hhciBwYXRoW107CiB9OwogCkBAIC01ODAzLDYgJiM0Mzs1ODA2LDk0IEBAIGludCBicGZfY29yZV9hZGRfY2FuZHMoc3RydWN0IGJwZl9jb3JlX2NhbmQgKmxvY2FsX2NhbmQsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBicGZfb2JqZWN0X2ZyZWVfYnRmX21vZHVsZV9uYW1lcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQomIzQzO3sKJiM0MzsJc2l6ZV90IGk7CiYjNDM7CiYjNDM7CWlmICghb2JqLSZndDtidGZfbW9kdWxlX25hbWVzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgb2JqLSZndDtucl9idGZfbW9kdWxlX25hbWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXpmcmVlKCZhbXA7b2JqLSZndDtidGZfbW9kdWxlX25hbWVzW2ldKTsKJiM0MzsJemZyZWUoJmFtcDtvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXMpOwomIzQzOwlvYmotJmd0O25yX2J0Zl9tb2R1bGVfbmFtZXMgPSAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJwZl9vYmplY3RfaW5pdF9idGZfbW9kdWxlX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosCiYjNDM7CQkJCQkgICAgY29uc3Qgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzICpvcHRzKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqKm5hbWVzOwomIzQzOwlzaXplX3QgaSwgaiwgY250OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwluYW1lcyA9IE9QVFNfR0VUKG9wdHMsIGJ0Zl9tb2R1bGVfbmFtZXMsIE5VTEwpOwomIzQzOwlpZiAoIW5hbWVzKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWNudCA9IE9QVFNfR0VUKG9wdHMsIG5yX2J0Zl9tb2R1bGVfbmFtZXMsIDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBLZWVwIGJ0Zl9tb2R1bGVfbmFtZXMgbm9uLU5VTEwgdG8gZGlzdGluZ3Vpc2ggYW4gZW1wdHkgZmlsdGVyIGZyb20KJiM0MzsJICogdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgbG9hZGluZyBhbGwgbW9kdWxlIEJURnMuCiYjNDM7CSAqLwomIzQzOwlvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXMgPSBjYWxsb2MoY250ID86IDEsCiYjNDM7CQkJCSAgICAgICBzaXplb2YoKm9iai0mZ3Q7YnRmX21vZHVsZV9uYW1lcykpOwomIzQzOwlpZiAoIW9iai0mZ3Q7YnRmX21vZHVsZV9uYW1lcykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCFuYW1lc1tpXSB8fCAhbmFtZXNbaV1bMF0pIHsKJiM0MzsJCQlwcl93YXJuKCYjMzQ7aW52YWxpZCBrZXJuZWwgbW9kdWxlIEJURiBuYW1lIGF0IGluZGV4ICV6dVxuJiMzNDssIGkpOwomIzQzOwkJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQkJZ290byBlcnJfb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IGk7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKHN0cmNtcChvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXNbal0sIG5hbWVzW2ldKSA9PSAwKSB7CiYjNDM7CQkJCXByX3dhcm4oJiMzNDtkdXBsaWNhdGUga2VybmVsIG1vZHVsZSBCVEYgbmFtZSAmIzM5OyVzJiMzOTtcbiYjMzQ7LAomIzQzOwkJCQkJbmFtZXNbaV0pOwomIzQzOwkJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCQlnb3RvIGVycl9vdXQ7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwomIzQzOwkJb2JqLSZndDtidGZfbW9kdWxlX25hbWVzW2ldID0gc3RyZHVwKG5hbWVzW2ldKTsKJiM0MzsJCWlmICghb2JqLSZndDtidGZfbW9kdWxlX25hbWVzW2ldKSB7CiYjNDM7CQkJZXJyID0gLUVOT01FTTsKJiM0MzsJCQlnb3RvIGVycl9vdXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlvYmotJmd0O25yX2J0Zl9tb2R1bGVfbmFtZXMmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9vdXQ6CiYjNDM7CWJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKG9iaik7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGlzX21vZHVsZV9idGZfbmVlZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlzaXplX3QgaTsKJiM0MzsKJiM0MzsJaWYgKCFvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXMpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG9iai0mZ3Q7bnJfYnRmX21vZHVsZV9uYW1lczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChzdHJjbXAob2JqLSZndDtidGZfbW9kdWxlX25hbWVzW2ldLCBuYW1lKSA9PSAwKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXByX2RlYnVnKCYjMzQ7c2tpcHBpbmcgbW9kdWxlIEJURiAmIzM5OyVzJiMzOTssIG5vdCBpbiBidGZfbW9kdWxlX25hbWVzXG4mIzM0OywgbmFtZSk7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgYWxsX25lZWRlZF9tb2R1bGVfYnRmc19sb2FkZWQoY29uc3Qgc3RydWN0IGJwZl9vYmplY3QgKm9iaikKJiM0Mzt7CiYjNDM7CXJldHVybiBvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXMgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgb2JqLSZndDtucl9idGZfbW9kdWxlX25hbWVzID09IG9iai0mZ3Q7YnRmX21vZHVsZV9jbnQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiB7CiAJc3RydWN0IGJwZl9idGZfaW5mbyBpbmZvOwpAQCAtNTg2Nyw2ICYjNDM7NTk1OCwxMSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIAkJCWNvbnRpbnVlOwogCQl9CiAKJiM0MzsJCWlmICghaXNfbW9kdWxlX2J0Zl9uZWVkZWQob2JqLCBuYW1lKSkgewomIzQzOwkJCWNsb3NlKGZkKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJYnRmID0gYnRmX2dldF9mcm9tX2ZkKGZkLCBvYmotJmd0O2J0Zl92bWxpbnV4KTsKIAkJZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpOwogCQlpZiAoZXJyKSB7CkBAIC01ODkxLDYgJiM0Mzs1OTg3LDkgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCQlicmVhazsKIAkJfQogCQlvYmotJmd0O2J0Zl9tb2R1bGVfY250JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWlmIChhbGxfbmVlZGVkX21vZHVsZV9idGZzX2xvYWRlZChvYmopKQomIzQzOwkJCWJyZWFrOwogCX0KIAogCWlmIChlcnIpIHsKQEAgLTg1MDgsNiAmIzQzOzg2MDcsMTAgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZiwKIAkJfQogCX0KIAomIzQzOwllcnIgPSBicGZfb2JqZWN0X2luaXRfYnRmX21vZHVsZV9uYW1lcyhvYmosIG9wdHMpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJZXJyID0gYnBmX29iamVjdF9fZWxmX2luaXQob2JqKTsKIAllcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2VsZl9jb2xsZWN0KG9iaik7CiAJZXJyID0gZXJyID8gOiBicGZfb2JqZWN0X19jb2xsZWN0X2V4dGVybnMob2JqKTsKQEAgLTk2MjksNiAmIzQzOzk3MzIsOCBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCWNsb3NlKG9iai0mZ3Q7anVtcHRhYmxlX21hcHNbaV0uZmQpOwogCXpmcmVlKCZhbXA7b2JqLSZndDtqdW1wdGFibGVfbWFwcyk7CiAKJiM0MzsJYnBmX29iamVjdF9mcmVlX2J0Zl9tb2R1bGVfbmFtZXMob2JqKTsKJiM0MzsKIAlmcmVlKG9iaik7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmggYi90b29scy9saWIvYnBmL2xpYmJwZi5oCmluZGV4IGI5NjVhZDU3MTU0MDMuLjgzODYwMjMxOWRhOGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuaApAQCAtMjI0LDEwICYjNDM7MjI0LDMyIEBAIHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyB7CiAJICogcG9pbnQgKC9zeXMvZnMvYnBmKSwgaW4gY2FzZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdW5kZXNpcmFibGUuCiAJICovCiAJY29uc3QgY2hhciAqYnBmX3Rva2VuX3BhdGg7CiYjNDM7CS8qCiYjNDM7CSAqIE9wdGlvbmFsIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyB3aG9zZSBCVEZzIHNob3VsZCBiZSBsb2FkZWQuCiYjNDM7CSAqIG5yX2J0Zl9tb2R1bGVfbmFtZXMgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbgomIzQzOwkgKiBidGZfbW9kdWxlX25hbWVzLgomIzQzOwkgKgomIzQzOwkgKiBJZiBidGZfbW9kdWxlX25hbWVzIGlzIE5VTEwsIGFsbCBtb2R1bGUgQlRGcyBhcmUgbG9hZGVkLAomIzQzOwkgKiBwcmVzZXJ2aW5nIHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBPdGhlcndpc2UsIG9ubHkgdGhlIEJURnMgb2YKJiM0MzsJICogdGhlIGxpc3RlZCBtb2R1bGVzIGFyZSBsb2FkZWQuIEEgbm9uLU5VTEwgYnRmX21vZHVsZV9uYW1lcwomIzQzOwkgKiB3aXRoIG5yX2J0Zl9tb2R1bGVfbmFtZXMgZXF1YWwgdG8gemVybyBtZWFucyB0aGF0IG5vIG1vZHVsZQomIzQzOwkgKiBCVEZzIGFyZSBsb2FkZWQuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBsaXN0IG11c3Qgbm90IGNvbnRhaW4gZHVwbGljYXRlIGVudHJpZXM7IG90aGVyd2lzZQomIzQzOwkgKiAtRUlOVkFMIGlzIHJldHVybmVkLgomIzQzOwkgKgomIzQzOwkgKiBUaGlzIGFmZmVjdHM6CiYjNDM7CSAqIC0gQlBGIENPLVJFIHJlbG9jYXRpb25zIGFnYWluc3QgdHlwZXMgZGVmaW5lZCBpbiBtb2R1bGVzOwomIzQzOwkgKiAtIEJURi1iYXNlZCByZXNvbHV0aW9uIG9mIGZ1bmN0aW9uIGF0dGFjaCB0YXJnZXRzIGZvcgomIzQzOwkgKiAgIGZlbnRyeS9mZXhpdC9mbW9kX3JldC9mcmVwbGFjZS9MU00gcHJvZ3JhbXM7CiYjNDM7CSAqIC0gZXh0ZXJuIChrc3ltKSByZXNvbHV0aW9uIGZvciBrZXJuZWwgc3ltYm9scyBkZWZpbmVkIGluIG1vZHVsZXMuCiYjNDM7CSAqLwomIzQzOwljb25zdCBjaGFyICoqYnRmX21vZHVsZV9uYW1lczsKJiM0MzsJc2l6ZV90IG5yX2J0Zl9tb2R1bGVfbmFtZXM7CiAKIAlzaXplX3QgOjA7CiB9OwotI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBicGZfdG9rZW5fcGF0aAomIzQzOyNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgbnJfYnRmX21vZHVsZV9uYW1lcwogCiAvKioKICAqIEBicmllZiAqKmJwZl9vYmplY3RfX29wZW4oKSoqIGNyZWF0ZXMgYSBicGZfb2JqZWN0IGJ5IG9wZW5pbmcKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5kNTY3NGNhZDAwMTdlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jCkBAIC0wLDAgJiM0MzsxLDkzIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnRmX21vZHVsZV9uYW1lcy5za2VsLmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfbG9hZCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMOwomIzQzOwlpbnQgcmV0OwomIzQzOwlzdGF0aWMgY29uc3QgY2hhciAqbW9kX25hbWVzW10gPSB7ICYjMzQ7YnBmX3Rlc3Rtb2QmIzM0OyB9OwomIzQzOwomIzQzOwlMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cywKJiM0MzsJCS5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLAomIzQzOwkJLm5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAxLAomIzQzOwkpOwomIzQzOwomIzQzOwlza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKCZhbXA7b3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpOwomIzQzOwlBU1NFUlRfT0socmV0LCAmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX2xvYWQmIzM0Oyk7CiYjNDM7b3V0OgomIzQzOwlidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFZlcmlmeSB0aGF0IGFuIHVucmVxdWVzdGVkIG1vZHVsZSBCVEYgaXMgc2tpcHBlZC4gVGhlIEJQRiBwcm9ncmFtCiYjNDM7ICogcmVxdWlyZXMgdGhlIEJURiBvZiBicGZfdGVzdG1vZCwgYnV0IGJwZl90ZXN0bW9kIGlzIG5vdCBzcGVjaWZpZWQgaW4KJiM0MzsgKiBidGZfbW9kdWxlX25hbWVzLCBzbyBpdHMgQlRGIGlzIHNraXBwZWQgYW5kIHRoZSBCUEYgcHJvZ3JhbSBmYWlscyB0byBsb2FkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfc2tpcCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMOwomIzQzOwlpbnQgcmV0OwomIzQzOwlzdGF0aWMgY29uc3QgY2hhciAqbW9kX25hbWVzW10gPSB7ICYjMzQ7bW9kdWxlX25vbmV4aXN0JiMzNDsgfTsKJiM0MzsKJiM0MzsJTElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsCiYjNDM7CQkuYnRmX21vZHVsZV9uYW1lcyA9IG1vZF9uYW1lcywKJiM0MzsJCS5ucl9idGZfbW9kdWxlX25hbWVzID0gMSwKJiM0MzsJKTsKJiM0MzsKJiM0MzsJc2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cygmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTsKJiM0MzsJQVNTRVJUX0VSUihyZXQsICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fbG9hZCYjMzQ7KTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVmVyaWZ5IHRoYXQgYW4gZW1wdHkgZmlsdGVyIHNraXBzIGxvYWRpbmcgYWxsIG1vZHVsZSBCVEZzLiBUaGUgQlBGCiYjNDM7ICogcHJvZ3JhbSByZXF1aXJlcyBicGZfdGVzdG1vZCBCVEYsIHNvIGl0IGZhaWxzIHRvIGxvYWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19lbXB0eSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMOwomIzQzOwlpbnQgcmV0OwomIzQzOwlzdGF0aWMgY29uc3QgY2hhciAqbW9kX25hbWVzW10gPSB7ICYjMzQ7Zm9vJiMzNDsgfTsKJiM0MzsKJiM0MzsJTElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsCiYjNDM7CQkuYnRmX21vZHVsZV9uYW1lcyA9IG1vZF9uYW1lcywKJiM0MzsJKTsKJiM0MzsKJiM0MzsJc2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cygmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZW1wdHkmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTsKJiM0MzsJQVNTRVJUX0VSUihyZXQsICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fbG9hZCBlbXB0eSYjMzQ7KTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9idGZfbW9kdWxlX25hbWVzKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoIWVudi5oYXNfdGVzdG1vZCkgewomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YnRmX21vZHVsZV9uYW1lc19sb2FkJiMzNDspKQomIzQzOwkJYnRmX21vZHVsZV9uYW1lc19sb2FkKCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YnRmX21vZHVsZV9uYW1lc19za2lwJiMzNDspKQomIzQzOwkJYnRmX21vZHVsZV9uYW1lc19za2lwKCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YnRmX21vZHVsZV9uYW1lc19lbXB0eSYjMzQ7KSkKJiM0MzsJCWJ0Zl9tb2R1bGVfbmFtZXNfZW1wdHkoKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9uYW1lcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4yMzJhZGMwZjMzZjZlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuYwpAQCAtMCwwICYjNDM7MSwxMyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOwomIzQzO1NFQygmIzM0O2ZlbnRyeS9icGZfdGVzdG1vZF9sb29wX3Rlc3QmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9idGZfbW9kdWxlX25hbWVzKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMzMAoJCQkJCQkJb3V0cHV0OiA2MgoJCQkJCQkJdGhvdWdodHM6IDMzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBObyBLZXJuZWwgQ2hhbmdlcywgTm8gRnV6emluZyBOZWVkZWQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGFkZGluZyBmdW5jdGlvbmFsaXR5IHdpdGhpbiBgbGliYnBmYCBhbmQgYXNzb2NpYXRlZCBzZWxmLXRlc3RzLiBTcGVjaWZpY2FsbHksIGl0IGFsbG93cyBmb3Igc3BlY2lmeWluZyBhIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyBmb3IgQlRGIGxvYWRpbmcuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW4gYHRvb2xzL2xpYi9icGYvbGliYnBmLmNgLCBgdG9vbHMvbGliL2JwZi9saWJicGYuaGAsIGFuZCB0aGUgY29ycmVzcG9uZGluZyBzZWxmLXRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gVGhpcyBpcyBhbGwgdXNlci1zcGFjZSBzdHVmZi4KCkNydWNpYWxseSwgZnJvbSBteSBpbml0aWFsIGFzc2Vzc21lbnQsIEkgZG9uJiMzOTt0IHNlZSBhbnkgbW9kaWZpY2F0aW9uIG9mICprZXJuZWwqIGNvZGUuIE5vdGhpbmcgaW4gdGhlIGNvcmUga2VybmVsIGRpcmVjdG9yaWVzIGxpa2UgYGtlcm5lbC9icGYvYCwgYG5ldC9jb3JlL2AsIG9yIGFueXdoZXJlIGVsc2UgdGhhdCB3b3VsZCBzdWdnZXN0IGEga2VybmVsLWxldmVsIGNoYW5nZSByZXF1aXJpbmcgZnV6emluZy4gV2UmIzM5O3JlIHRhbGtpbmcgdXNlci1zcGFjZSBsaWJyYXJ5IGFuZCB0ZXN0IGFkZGl0aW9ucyAqb25seSouCgpUbyBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgZGlkIGEgcXVpY2sgZGlmZiBjaGVjaywganVzdCB0byBjb25maXJtLiBEb3VibGUtY2hlY2tpbmcsIG15IGluaXRpYWwgcmVhZCBob2xkcyB0cnVlLiBUaGUgcGF0Y2ggdG91Y2hlczoKCiogICBgdG9vbHMvbGliL2JwZi9saWJicGYuY2AKKiAgIGB0b29scy9saWIvYnBmL2xpYmJwZi5oYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuY2AKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9uYW1lcy5jYAoKQWxsIGxvY2F0ZWQgc3F1YXJlbHkgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuCgpUaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBpcyBhbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgdXNlci1zcGFjZSB0b29saW5nLCBJJiMzOTttIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBkb2VzbiYjMzk7dCBuZWNlc3NpdGF0ZSBrZXJuZWwgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHVzZXItc3BhY2UgbGliYnBmIGxpYnJhcnkgYW5kIGFkZHMgYSBzZWxmdGVzdC4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2VyLXNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCBhZGRzIGEgc2VsZnRlc3QuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6Mjc6MzYuMjQ3MDI2NjkzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNjY3MDQ3OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2VyLXNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCBhZGRzIGEgc2VsZnRlc3QuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6Mjc6MzYuMjQ3MDMxMjQyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMwNjg3OTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGJiZjIyN2ZjZjZiZGM4MWJhM2FhZTUxMzMwZjkzYTA2MjNhNTI5OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxNjoyNzozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbmluZGV4IDUxNGU0ZTlkYWE4MjUuLjZmNWQzMjEzYjNlNWIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcXG5AQCAtNzc5LDYgKzc3OSw5IEBAIHN0cnVjdCBicGZfb2JqZWN0IHtcXG4gXFx0Y2hhciAqdG9rZW5fcGF0aDtcXG4gXFx0aW50IHRva2VuX2ZkO1xcbiBcXG4rXFx0Y2hhciAqKmJ0Zl9tb2R1bGVfbmFtZXM7XFxuK1xcdHNpemVfdCBucl9idGZfbW9kdWxlX25hbWVzO1xcbitcXG4gXFx0Y2hhciBwYXRoW107XFxuIH07XFxuIFxcbkBAIC01ODAzLDYgKzU4MDYsOTQgQEAgaW50IGJwZl9jb3JlX2FkZF9jYW5kcyhzdHJ1Y3QgYnBmX2NvcmVfY2FuZCAqbG9jYWxfY2FuZCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuK3tcXG4rXFx0c2l6ZV90IGk7XFxuK1xcbitcXHRpZiAoIW9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG9iai1cXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lczsgaSsrKVxcbitcXHRcXHR6ZnJlZShcXHUwMDI2b2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzW2ldKTtcXG4rXFx0emZyZWUoXFx1MDAyNm9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lcyk7XFxuK1xcdG9iai1cXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lcyA9IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnBmX29iamVjdF9pbml0X2J0Zl9tb2R1bGVfbmFtZXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyAqb3B0cylcXG4re1xcbitcXHRjb25zdCBjaGFyICoqbmFtZXM7XFxuK1xcdHNpemVfdCBpLCBqLCBjbnQ7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRuYW1lcyA9IE9QVFNfR0VUKG9wdHMsIGJ0Zl9tb2R1bGVfbmFtZXMsIE5VTEwpO1xcbitcXHRpZiAoIW5hbWVzKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGNudCA9IE9QVFNfR0VUKG9wdHMsIG5yX2J0Zl9tb2R1bGVfbmFtZXMsIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogS2VlcCBidGZfbW9kdWxlX25hbWVzIG5vbi1OVUxMIHRvIGRpc3Rpbmd1aXNoIGFuIGVtcHR5IGZpbHRlciBmcm9tXFxuK1xcdCAqIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIGxvYWRpbmcgYWxsIG1vZHVsZSBCVEZzLlxcbitcXHQgKi9cXG4rXFx0b2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzID0gY2FsbG9jKGNudCA/OiAxLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKCpvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMpKTtcXG4rXFx0aWYgKCFvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuK1xcdFxcdGlmICghbmFtZXNbaV0gfHwgIW5hbWVzW2ldWzBdKSB7XFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcImludmFsaWQga2VybmVsIG1vZHVsZSBCVEYgbmFtZSBhdCBpbmRleCAlenVcXFxcblxcXCIsIGkpO1xcbitcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBpOyBqKyspIHtcXG4rXFx0XFx0XFx0aWYgKHN0cmNtcChvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbal0sIG5hbWVzW2ldKSA9PSAwKSB7XFxuK1xcdFxcdFxcdFxcdHByX3dhcm4oXFxcImR1cGxpY2F0ZSBrZXJuZWwgbW9kdWxlIEJURiBuYW1lICclcydcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdG5hbWVzW2ldKTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSA9IHN0cmR1cChuYW1lc1tpXSk7XFxuK1xcdFxcdGlmICghb2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzW2ldKSB7XFxuK1xcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0b2JqLVxcdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzKys7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfb3V0OlxcbitcXHRicGZfb2JqZWN0X2ZyZWVfYnRmX21vZHVsZV9uYW1lcyhvYmopO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBpc19tb2R1bGVfYnRmX25lZWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdHNpemVfdCBpO1xcbitcXG4rXFx0aWYgKCFvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG9iai1cXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lczsgaSsrKSB7XFxuK1xcdFxcdGlmIChzdHJjbXAob2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzW2ldLCBuYW1lKSA9PSAwKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cHJfZGVidWcoXFxcInNraXBwaW5nIG1vZHVsZSBCVEYgJyVzJywgbm90IGluIGJ0Zl9tb2R1bGVfbmFtZXNcXFxcblxcXCIsIG5hbWUpO1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGFsbF9uZWVkZWRfbW9kdWxlX2J0ZnNfbG9hZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuK3tcXG4rXFx0cmV0dXJuIG9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lcyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgb2JqLVxcdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzID09IG9iai1cXHUwMDNlYnRmX21vZHVsZV9jbnQ7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfYnRmX2luZm8gaW5mbztcXG5AQCAtNTg2Nyw2ICs1OTU4LDExIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0aWYgKCFpc19tb2R1bGVfYnRmX25lZWRlZChvYmosIG5hbWUpKSB7XFxuK1xcdFxcdFxcdGNsb3NlKGZkKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLVxcdTAwM2VidGZfdm1saW51eCk7XFxuIFxcdFxcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3IoYnRmKTtcXG4gXFx0XFx0aWYgKGVycikge1xcbkBAIC01ODkxLDYgKzU5ODcsOSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFx0XFx0b2JqLVxcdTAwM2VidGZfbW9kdWxlX2NudCsrO1xcbitcXG4rXFx0XFx0aWYgKGFsbF9uZWVkZWRfbW9kdWxlX2J0ZnNfbG9hZGVkKG9iaikpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoZXJyKSB7XFxuQEAgLTg1MDgsNiArODYwNywxMCBAQCBzdGF0aWMgc3RydWN0IGJwZl9vYmplY3QgKmJwZl9vYmplY3Rfb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCB2b2lkICpvYmpfYnVmLFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdGVyciA9IGJwZl9vYmplY3RfaW5pdF9idGZfbW9kdWxlX25hbWVzKG9iaiwgb3B0cyk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0ZXJyID0gYnBmX29iamVjdF9fZWxmX2luaXQob2JqKTtcXG4gXFx0ZXJyID0gZXJyID8gOiBicGZfb2JqZWN0X19lbGZfY29sbGVjdChvYmopO1xcbiBcXHRlcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2NvbGxlY3RfZXh0ZXJucyhvYmopO1xcbkBAIC05NjI5LDYgKzk3MzIsOCBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuIFxcdFxcdGNsb3NlKG9iai1cXHUwMDNlanVtcHRhYmxlX21hcHNbaV0uZmQpO1xcbiBcXHR6ZnJlZShcXHUwMDI2b2JqLVxcdTAwM2VqdW1wdGFibGVfbWFwcyk7XFxuIFxcbitcXHRicGZfb2JqZWN0X2ZyZWVfYnRmX21vZHVsZV9uYW1lcyhvYmopO1xcbitcXG4gXFx0ZnJlZShvYmopO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxcbmluZGV4IGI5NjVhZDU3MTU0MDMuLjgzODYwMjMxOWRhOGMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuaFxcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcXG5AQCAtMjI0LDEwICsyMjQsMzIgQEAgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzIHtcXG4gXFx0ICogcG9pbnQgKC9zeXMvZnMvYnBmKSwgaW4gY2FzZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdW5kZXNpcmFibGUuXFxuIFxcdCAqL1xcbiBcXHRjb25zdCBjaGFyICpicGZfdG9rZW5fcGF0aDtcXG4rXFx0LypcXG4rXFx0ICogT3B0aW9uYWwgbGlzdCBvZiBrZXJuZWwgbW9kdWxlIG5hbWVzIHdob3NlIEJURnMgc2hvdWxkIGJlIGxvYWRlZC5cXG4rXFx0ICogbnJfYnRmX21vZHVsZV9uYW1lcyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluXFxuK1xcdCAqIGJ0Zl9tb2R1bGVfbmFtZXMuXFxuK1xcdCAqXFxuK1xcdCAqIElmIGJ0Zl9tb2R1bGVfbmFtZXMgaXMgTlVMTCwgYWxsIG1vZHVsZSBCVEZzIGFyZSBsb2FkZWQsXFxuK1xcdCAqIHByZXNlcnZpbmcgdGhlIGRlZmF1bHQgYmVoYXZpb3IuIE90aGVyd2lzZSwgb25seSB0aGUgQlRGcyBvZlxcbitcXHQgKiB0aGUgbGlzdGVkIG1vZHVsZXMgYXJlIGxvYWRlZC4gQSBub24tTlVMTCBidGZfbW9kdWxlX25hbWVzXFxuK1xcdCAqIHdpdGggbnJfYnRmX21vZHVsZV9uYW1lcyBlcXVhbCB0byB6ZXJvIG1lYW5zIHRoYXQgbm8gbW9kdWxlXFxuK1xcdCAqIEJURnMgYXJlIGxvYWRlZC5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIGxpc3QgbXVzdCBub3QgY29udGFpbiBkdXBsaWNhdGUgZW50cmllczsgb3RoZXJ3aXNlXFxuK1xcdCAqIC1FSU5WQUwgaXMgcmV0dXJuZWQuXFxuK1xcdCAqXFxuK1xcdCAqIFRoaXMgYWZmZWN0czpcXG4rXFx0ICogLSBCUEYgQ08tUkUgcmVsb2NhdGlvbnMgYWdhaW5zdCB0eXBlcyBkZWZpbmVkIGluIG1vZHVsZXM7XFxuK1xcdCAqIC0gQlRGLWJhc2VkIHJlc29sdXRpb24gb2YgZnVuY3Rpb24gYXR0YWNoIHRhcmdldHMgZm9yXFxuK1xcdCAqICAgZmVudHJ5L2ZleGl0L2Ztb2RfcmV0L2ZyZXBsYWNlL0xTTSBwcm9ncmFtcztcXG4rXFx0ICogLSBleHRlcm4gKGtzeW0pIHJlc29sdXRpb24gZm9yIGtlcm5lbCBzeW1ib2xzIGRlZmluZWQgaW4gbW9kdWxlcy5cXG4rXFx0ICovXFxuK1xcdGNvbnN0IGNoYXIgKipidGZfbW9kdWxlX25hbWVzO1xcbitcXHRzaXplX3QgbnJfYnRmX21vZHVsZV9uYW1lcztcXG4gXFxuIFxcdHNpemVfdCA6MDtcXG4gfTtcXG4tI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBicGZfdG9rZW5fcGF0aFxcbisjZGVmaW5lIGJwZl9vYmplY3Rfb3Blbl9vcHRzX19sYXN0X2ZpZWxkIG5yX2J0Zl9tb2R1bGVfbmFtZXNcXG4gXFxuIC8qKlxcbiAgKiBAYnJpZWYgKipicGZfb2JqZWN0X19vcGVuKCkqKiBjcmVhdGVzIGEgYnBmX29iamVjdCBieSBvcGVuaW5nXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDU2NzRjYWQwMDE3ZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmNcXG5AQCAtMCwwICsxLDkzIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJidGZfbW9kdWxlX25hbWVzLnNrZWwuaFxcXCJcXG4rXFxuK3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfbG9hZCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDtcXG4rXFx0aW50IHJldDtcXG4rXFx0c3RhdGljIGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcXFwiYnBmX3Rlc3Rtb2RcXFwiIH07XFxuK1xcbitcXHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcXG4rXFx0XFx0LmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsXFxuK1xcdFxcdC5ucl9idGZfbW9kdWxlX25hbWVzID0gMSxcXG4rXFx0KTtcXG4rXFxuK1xcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoXFx1MDAyNm9wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0c1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHJldCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQoc2tlbCk7XFxuK1xcdEFTU0VSVF9PSyhyZXQsIFxcXCJidGZfbW9kdWxlX25hbWVzX19sb2FkXFxcIik7XFxuK291dDpcXG4rXFx0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4rLypcXG4rICogVmVyaWZ5IHRoYXQgYW4gdW5yZXF1ZXN0ZWQgbW9kdWxlIEJURiBpcyBza2lwcGVkLiBUaGUgQlBGIHByb2dyYW1cXG4rICogcmVxdWlyZXMgdGhlIEJURiBvZiBicGZfdGVzdG1vZCwgYnV0IGJwZl90ZXN0bW9kIGlzIG5vdCBzcGVjaWZpZWQgaW5cXG4rICogYnRmX21vZHVsZV9uYW1lcywgc28gaXRzIEJURiBpcyBza2lwcGVkIGFuZCB0aGUgQlBGIHByb2dyYW0gZmFpbHMgdG8gbG9hZC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfc2tpcCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDtcXG4rXFx0aW50IHJldDtcXG4rXFx0c3RhdGljIGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcXFwibW9kdWxlX25vbmV4aXN0XFxcIiB9O1xcbitcXG4rXFx0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXFxuK1xcdFxcdC5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLFxcbitcXHRcXHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsXFxuK1xcdCk7XFxuK1xcbitcXHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFxcdTAwMjZvcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHNcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xcbitcXHRBU1NFUlRfRVJSKHJldCwgXFxcImJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWRcXFwiKTtcXG4rXFxuK291dDpcXG4rXFx0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4rLypcXG4rICogVmVyaWZ5IHRoYXQgYW4gZW1wdHkgZmlsdGVyIHNraXBzIGxvYWRpbmcgYWxsIG1vZHVsZSBCVEZzLiBUaGUgQlBGXFxuKyAqIHByb2dyYW0gcmVxdWlyZXMgYnBmX3Rlc3Rtb2QgQlRGLCBzbyBpdCBmYWlscyB0byBsb2FkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19lbXB0eSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDtcXG4rXFx0aW50IHJldDtcXG4rXFx0c3RhdGljIGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcXFwiZm9vXFxcIiB9O1xcbitcXG4rXFx0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXFxuK1xcdFxcdC5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLFxcbitcXHQpO1xcbitcXG4rXFx0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwiYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIGVtcHR5XFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTtcXG4rXFx0QVNTRVJUX0VSUihyZXQsIFxcXCJidGZfbW9kdWxlX25hbWVzX19sb2FkIGVtcHR5XFxcIik7XFxuK1xcbitvdXQ6XFxuK1xcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rXFxuK3ZvaWQgdGVzdF9idGZfbW9kdWxlX25hbWVzKHZvaWQpXFxuK3tcXG4rXFx0aWYgKCFlbnYuaGFzX3Rlc3Rtb2QpIHtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJidGZfbW9kdWxlX25hbWVzX2xvYWRcXFwiKSlcXG4rXFx0XFx0YnRmX21vZHVsZV9uYW1lc19sb2FkKCk7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYnRmX21vZHVsZV9uYW1lc19za2lwXFxcIikpXFxuK1xcdFxcdGJ0Zl9tb2R1bGVfbmFtZXNfc2tpcCgpO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImJ0Zl9tb2R1bGVfbmFtZXNfZW1wdHlcXFwiKSlcXG4rXFx0XFx0YnRmX21vZHVsZV9uYW1lc19lbXB0eSgpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9uYW1lcy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yMzJhZGMwZjMzZjZlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmNcXG5AQCAtMCwwICsxLDEzIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rXFxuK1NFQyhcXFwiZmVudHJ5L2JwZl90ZXN0bW9kX2xvb3BfdGVzdFxcXCIpXFxuK2ludCBCUEZfUFJPRyh0ZXN0X2J0Zl9tb2R1bGVfbmFtZXMpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjoyNzozNy40NzgzMjMzMDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4ODM1Mzk1NTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2VyLXNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCBhZGRzIGEgc2VsZnRlc3QuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGJiZjIyN2ZjZjZiZGM4MWJhM2FhZTUxMzMwZjkzYTA2MjNhNTI5OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDE2OjI3OjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbmluZGV4IDUxNGU0ZTlkYWE4MjUuLjZmNWQzMjEzYjNlNWIgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jXG4rKysgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5AQCAtNzc5LDYgKzc3OSw5IEBAIHN0cnVjdCBicGZfb2JqZWN0IHtcbiBcdGNoYXIgKnRva2VuX3BhdGg7XG4gXHRpbnQgdG9rZW5fZmQ7XG4gXG4rXHRjaGFyICoqYnRmX21vZHVsZV9uYW1lcztcbitcdHNpemVfdCBucl9idGZfbW9kdWxlX25hbWVzO1xuK1xuIFx0Y2hhciBwYXRoW107XG4gfTtcbiBcbkBAIC01ODAzLDYgKzU4MDYsOTQgQEAgaW50IGJwZl9jb3JlX2FkZF9jYW5kcyhzdHJ1Y3QgYnBmX2NvcmVfY2FuZCAqbG9jYWxfY2FuZCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBicGZfb2JqZWN0X2ZyZWVfYnRmX21vZHVsZV9uYW1lcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuK3tcbitcdHNpemVfdCBpO1xuK1xuK1x0aWYgKCFvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb2JqLVx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXM7IGkrKylcbitcdFx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0pO1xuK1x0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMpO1xuK1x0b2JqLVx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAwO1xuK31cbitcbitzdGF0aWMgaW50IGJwZl9vYmplY3RfaW5pdF9idGZfbW9kdWxlX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosXG4rXHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX29iamVjdF9vcGVuX29wdHMgKm9wdHMpXG4re1xuK1x0Y29uc3QgY2hhciAqKm5hbWVzO1xuK1x0c2l6ZV90IGksIGosIGNudDtcbitcdGludCBlcnI7XG4rXG4rXHRuYW1lcyA9IE9QVFNfR0VUKG9wdHMsIGJ0Zl9tb2R1bGVfbmFtZXMsIE5VTEwpO1xuK1x0aWYgKCFuYW1lcylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRjbnQgPSBPUFRTX0dFVChvcHRzLCBucl9idGZfbW9kdWxlX25hbWVzLCAwKTtcbitcbitcdC8qXG4rXHQgKiBLZWVwIGJ0Zl9tb2R1bGVfbmFtZXMgbm9uLU5VTEwgdG8gZGlzdGluZ3Vpc2ggYW4gZW1wdHkgZmlsdGVyIGZyb21cbitcdCAqIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIGxvYWRpbmcgYWxsIG1vZHVsZSBCVEZzLlxuK1x0ICovXG4rXHRvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcyA9IGNhbGxvYyhjbnQgPzogMSxcbitcdFx0XHRcdCAgICAgICBzaXplb2YoKm9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzKSk7XG4rXHRpZiAoIW9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSsrKSB7XG4rXHRcdGlmICghbmFtZXNbaV0gfHwgIW5hbWVzW2ldWzBdKSB7XG4rXHRcdFx0cHJfd2FybihcImludmFsaWQga2VybmVsIG1vZHVsZSBCVEYgbmFtZSBhdCBpbmRleCAlenVcXG5cIiwgaSk7XG4rXHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIGVycl9vdXQ7XG4rXHRcdH1cbitcbitcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaTsgaisrKSB7XG4rXHRcdFx0aWYgKHN0cmNtcChvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tqXSwgbmFtZXNbaV0pID09IDApIHtcbitcdFx0XHRcdHByX3dhcm4oXCJkdXBsaWNhdGUga2VybmVsIG1vZHVsZSBCVEYgbmFtZSAnJXMnXFxuXCIsXG4rXHRcdFx0XHRcdG5hbWVzW2ldKTtcbitcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXG4rXHRcdG9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzW2ldID0gc3RyZHVwKG5hbWVzW2ldKTtcbitcdFx0aWYgKCFvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSkge1xuK1x0XHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdFx0Z290byBlcnJfb3V0O1xuK1x0XHR9XG4rXG4rXHRcdG9iai1cdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzKys7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbitcbitlcnJfb3V0OlxuK1x0YnBmX29iamVjdF9mcmVlX2J0Zl9tb2R1bGVfbmFtZXMob2JqKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBib29sIGlzX21vZHVsZV9idGZfbmVlZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0c2l6ZV90IGk7XG4rXG4rXHRpZiAoIW9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9iai1cdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzOyBpKyspIHtcbitcdFx0aWYgKHN0cmNtcChvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSwgbmFtZSkgPT0gMClcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbitcdHByX2RlYnVnKFwic2tpcHBpbmcgbW9kdWxlIEJURiAnJXMnLCBub3QgaW4gYnRmX21vZHVsZV9uYW1lc1xcblwiLCBuYW1lKTtcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGJvb2wgYWxsX25lZWRlZF9tb2R1bGVfYnRmc19sb2FkZWQoY29uc3Qgc3RydWN0IGJwZl9vYmplY3QgKm9iailcbit7XG4rXHRyZXR1cm4gb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgb2JqLVx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXMgPT0gb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfY250O1xuK31cbitcbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiB7XG4gXHRzdHJ1Y3QgYnBmX2J0Zl9pbmZvIGluZm87XG5AQCAtNTg2Nyw2ICs1OTU4LDExIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4rXHRcdGlmICghaXNfbW9kdWxlX2J0Zl9uZWVkZWQob2JqLCBuYW1lKSkge1xuK1x0XHRcdGNsb3NlKGZkKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuIFx0XHRidGYgPSBidGZfZ2V0X2Zyb21fZmQoZmQsIG9iai1cdTAwM2VidGZfdm1saW51eCk7XG4gXHRcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3IoYnRmKTtcbiBcdFx0aWYgKGVycikge1xuQEAgLTU4OTEsNiArNTk4Nyw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHRcdG9iai1cdTAwM2VidGZfbW9kdWxlX2NudCsrO1xuK1xuK1x0XHRpZiAoYWxsX25lZWRlZF9tb2R1bGVfYnRmc19sb2FkZWQob2JqKSlcbitcdFx0XHRicmVhaztcbiBcdH1cbiBcbiBcdGlmIChlcnIpIHtcbkBAIC04NTA4LDYgKzg2MDcsMTAgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZixcbiBcdFx0fVxuIFx0fVxuIFxuK1x0ZXJyID0gYnBmX29iamVjdF9pbml0X2J0Zl9tb2R1bGVfbmFtZXMob2JqLCBvcHRzKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0ZXJyID0gYnBmX29iamVjdF9fZWxmX2luaXQob2JqKTtcbiBcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fZWxmX2NvbGxlY3Qob2JqKTtcbiBcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fY29sbGVjdF9leHRlcm5zKG9iaik7XG5AQCAtOTYyOSw2ICs5NzMyLDggQEAgdm9pZCBicGZfb2JqZWN0X19jbG9zZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRjbG9zZShvYmotXHUwMDNlanVtcHRhYmxlX21hcHNbaV0uZmQpO1xuIFx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWp1bXB0YWJsZV9tYXBzKTtcbiBcbitcdGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKG9iaik7XG4rXG4gXHRmcmVlKG9iaik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmggYi90b29scy9saWIvYnBmL2xpYmJwZi5oXG5pbmRleCBiOTY1YWQ1NzE1NDAzLi44Mzg2MDIzMTlkYThjIDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuQEAgLTIyNCwxMCArMjI0LDMyIEBAIHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyB7XG4gXHQgKiBwb2ludCAoL3N5cy9mcy9icGYpLCBpbiBjYXNlIHRoaXMgZGVmYXVsdCBiZWhhdmlvciBpcyB1bmRlc2lyYWJsZS5cbiBcdCAqL1xuIFx0Y29uc3QgY2hhciAqYnBmX3Rva2VuX3BhdGg7XG4rXHQvKlxuK1x0ICogT3B0aW9uYWwgbGlzdCBvZiBrZXJuZWwgbW9kdWxlIG5hbWVzIHdob3NlIEJURnMgc2hvdWxkIGJlIGxvYWRlZC5cbitcdCAqIG5yX2J0Zl9tb2R1bGVfbmFtZXMgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpblxuK1x0ICogYnRmX21vZHVsZV9uYW1lcy5cbitcdCAqXG4rXHQgKiBJZiBidGZfbW9kdWxlX25hbWVzIGlzIE5VTEwsIGFsbCBtb2R1bGUgQlRGcyBhcmUgbG9hZGVkLFxuK1x0ICogcHJlc2VydmluZyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gT3RoZXJ3aXNlLCBvbmx5IHRoZSBCVEZzIG9mXG4rXHQgKiB0aGUgbGlzdGVkIG1vZHVsZXMgYXJlIGxvYWRlZC4gQSBub24tTlVMTCBidGZfbW9kdWxlX25hbWVzXG4rXHQgKiB3aXRoIG5yX2J0Zl9tb2R1bGVfbmFtZXMgZXF1YWwgdG8gemVybyBtZWFucyB0aGF0IG5vIG1vZHVsZVxuK1x0ICogQlRGcyBhcmUgbG9hZGVkLlxuK1x0ICpcbitcdCAqIFRoZSBsaXN0IG11c3Qgbm90IGNvbnRhaW4gZHVwbGljYXRlIGVudHJpZXM7IG90aGVyd2lzZVxuK1x0ICogLUVJTlZBTCBpcyByZXR1cm5lZC5cbitcdCAqXG4rXHQgKiBUaGlzIGFmZmVjdHM6XG4rXHQgKiAtIEJQRiBDTy1SRSByZWxvY2F0aW9ucyBhZ2FpbnN0IHR5cGVzIGRlZmluZWQgaW4gbW9kdWxlcztcbitcdCAqIC0gQlRGLWJhc2VkIHJlc29sdXRpb24gb2YgZnVuY3Rpb24gYXR0YWNoIHRhcmdldHMgZm9yXG4rXHQgKiAgIGZlbnRyeS9mZXhpdC9mbW9kX3JldC9mcmVwbGFjZS9MU00gcHJvZ3JhbXM7XG4rXHQgKiAtIGV4dGVybiAoa3N5bSkgcmVzb2x1dGlvbiBmb3Iga2VybmVsIHN5bWJvbHMgZGVmaW5lZCBpbiBtb2R1bGVzLlxuK1x0ICovXG4rXHRjb25zdCBjaGFyICoqYnRmX21vZHVsZV9uYW1lcztcbitcdHNpemVfdCBucl9idGZfbW9kdWxlX25hbWVzO1xuIFxuIFx0c2l6ZV90IDowO1xuIH07XG4tI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBicGZfdG9rZW5fcGF0aFxuKyNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgbnJfYnRmX21vZHVsZV9uYW1lc1xuIFxuIC8qKlxuICAqIEBicmllZiAqKmJwZl9vYmplY3RfX29wZW4oKSoqIGNyZWF0ZXMgYSBicGZfb2JqZWN0IGJ5IG9wZW5pbmdcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kNTY3NGNhZDAwMTdlXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmNcbkBAIC0wLDAgKzEsOTMgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnRmX21vZHVsZV9uYW1lcy5za2VsLmhcIlxuK1xuK3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfbG9hZCh2b2lkKVxuK3tcbitcdHN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDtcbitcdGludCByZXQ7XG4rXHRzdGF0aWMgY29uc3QgY2hhciAqbW9kX25hbWVzW10gPSB7IFwiYnBmX3Rlc3Rtb2RcIiB9O1xuK1xuK1x0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4rXHRcdC5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLFxuK1x0XHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsXG4rXHQpO1xuK1xuK1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0c1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xuK1x0QVNTRVJUX09LKHJldCwgXCJidGZfbW9kdWxlX25hbWVzX19sb2FkXCIpO1xuK291dDpcbitcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuKy8qXG4rICogVmVyaWZ5IHRoYXQgYW4gdW5yZXF1ZXN0ZWQgbW9kdWxlIEJURiBpcyBza2lwcGVkLiBUaGUgQlBGIHByb2dyYW1cbisgKiByZXF1aXJlcyB0aGUgQlRGIG9mIGJwZl90ZXN0bW9kLCBidXQgYnBmX3Rlc3Rtb2QgaXMgbm90IHNwZWNpZmllZCBpblxuKyAqIGJ0Zl9tb2R1bGVfbmFtZXMsIHNvIGl0cyBCVEYgaXMgc2tpcHBlZCBhbmQgdGhlIEJQRiBwcm9ncmFtIGZhaWxzIHRvIGxvYWQuXG4rICovXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19za2lwKHZvaWQpXG4re1xuK1x0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xuK1x0aW50IHJldDtcbitcdHN0YXRpYyBjb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgXCJtb2R1bGVfbm9uZXhpc3RcIiB9O1xuK1xuK1x0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4rXHRcdC5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLFxuK1x0XHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsXG4rXHQpO1xuK1xuK1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0c1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xuK1x0QVNTRVJUX0VSUihyZXQsIFwiYnRmX21vZHVsZV9uYW1lc19fbG9hZFwiKTtcbitcbitvdXQ6XG4rXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuK31cbitcbisvKlxuKyAqIFZlcmlmeSB0aGF0IGFuIGVtcHR5IGZpbHRlciBza2lwcyBsb2FkaW5nIGFsbCBtb2R1bGUgQlRGcy4gVGhlIEJQRlxuKyAqIHByb2dyYW0gcmVxdWlyZXMgYnBmX3Rlc3Rtb2QgQlRGLCBzbyBpdCBmYWlscyB0byBsb2FkLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfZW1wdHkodm9pZClcbit7XG4rXHRzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7XG4rXHRpbnQgcmV0O1xuK1x0c3RhdGljIGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcImZvb1wiIH07XG4rXG4rXHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbitcdFx0LmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsXG4rXHQpO1xuK1xuK1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBlbXB0eVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xuK1x0QVNTRVJUX0VSUihyZXQsIFwiYnRmX21vZHVsZV9uYW1lc19fbG9hZCBlbXB0eVwiKTtcbitcbitvdXQ6XG4rXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuK31cbitcbit2b2lkIHRlc3RfYnRmX21vZHVsZV9uYW1lcyh2b2lkKVxuK3tcbitcdGlmICghZW52Lmhhc190ZXN0bW9kKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJidGZfbW9kdWxlX25hbWVzX2xvYWRcIikpXG4rXHRcdGJ0Zl9tb2R1bGVfbmFtZXNfbG9hZCgpO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJidGZfbW9kdWxlX25hbWVzX3NraXBcIikpXG4rXHRcdGJ0Zl9tb2R1bGVfbmFtZXNfc2tpcCgpO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJidGZfbW9kdWxlX25hbWVzX2VtcHR5XCIpKVxuK1x0XHRidGZfbW9kdWxlX25hbWVzX2VtcHR5KCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9uYW1lcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjMyYWRjMGYzM2Y2ZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuY1xuQEAgLTAsMCArMSwxMyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuK1xuK1NFQyhcImZlbnRyeS9icGZfdGVzdG1vZF9sb29wX3Rlc3RcIilcbitpbnQgQlBGX1BST0codGVzdF9idGZfbW9kdWxlX25hbWVzKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjoyNzozNy40NzgzMjQ2MDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODM1MzcwOTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IE5vIEtlcm5lbCBDaGFuZ2VzLCBObyBGdXp6aW5nIE5lZWRlZCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGFkZGluZyBmdW5jdGlvbmFsaXR5IHdpdGhpbiBgbGliYnBmYCBhbmQgYXNzb2NpYXRlZCBzZWxmLXRlc3RzLiBTcGVjaWZpY2FsbHksIGl0IGFsbG93cyBmb3Igc3BlY2lmeWluZyBhIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyBmb3IgQlRGIGxvYWRpbmcuIEknbSBzZWVpbmcgY2hhbmdlcyBpbiBgdG9vbHMvbGliL2JwZi9saWJicGYuY2AsIGB0b29scy9saWIvYnBmL2xpYmJwZi5oYCwgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHNlbGYtdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBUaGlzIGlzIGFsbCB1c2VyLXNwYWNlIHN0dWZmLlxuXG5DcnVjaWFsbHksIGZyb20gbXkgaW5pdGlhbCBhc3Nlc3NtZW50LCBJIGRvbid0IHNlZSBhbnkgbW9kaWZpY2F0aW9uIG9mICprZXJuZWwqIGNvZGUuIE5vdGhpbmcgaW4gdGhlIGNvcmUga2VybmVsIGRpcmVjdG9yaWVzIGxpa2UgYGtlcm5lbC9icGYvYCwgYG5ldC9jb3JlL2AsIG9yIGFueXdoZXJlIGVsc2UgdGhhdCB3b3VsZCBzdWdnZXN0IGEga2VybmVsLWxldmVsIGNoYW5nZSByZXF1aXJpbmcgZnV6emluZy4gV2UncmUgdGFsa2luZyB1c2VyLXNwYWNlIGxpYnJhcnkgYW5kIHRlc3QgYWRkaXRpb25zICpvbmx5Ki5cblxuVG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIGRpZCBhIHF1aWNrIGRpZmYgY2hlY2ssIGp1c3QgdG8gY29uZmlybS4gRG91YmxlLWNoZWNraW5nLCBteSBpbml0aWFsIHJlYWQgaG9sZHMgdHJ1ZS4gVGhlIHBhdGNoIHRvdWNoZXM6XG5cbiogICBgdG9vbHMvbGliL2JwZi9saWJicGYuY2BcbiogICBgdG9vbHMvbGliL2JwZi9saWJicGYuaGBcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9uYW1lcy5jYFxuXG5BbGwgbG9jYXRlZCBzcXVhcmVseSB3aXRoaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeS5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgaXMgYWxsIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHVzZXItc3BhY2UgdG9vbGluZywgSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBkb2Vzbid0IG5lY2Vzc2l0YXRlIGtlcm5lbCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzMwLCJPdXRwdXRUb2tlbnMiOjYyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6Mjc6NDYuMzEzNjk4MDk3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2VyLXNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCBhZGRzIGEgc2VsZnRlc3QuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdXNlci1zcGFjZSBsaWJicGYgbGlicmFyeSBhbmQgYWRkcyBhIHNlbGZ0ZXN0LiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjI3OjQ2LjMxMzcyMDc1N1oiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6shxn[1] Phase: Running StartedAt: 2026-08-24 16:27:58 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6shxn[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-24 16:27:58 +0000 UTC FinishedAt: 2026-08-24 16:28:03 +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,}