Name: series-workflowr4jn4 Phase: Failed StartedAt: 2026-07-06 17:09:36 +0000 UTC FinishedAt: 2026-07-06 17:51:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jn4[0] Phase: Succeeded StartedAt: 2026-07-06 17:09:36 +0000 UTC FinishedAt: 2026-07-06 17:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jn4[0].run-triage Phase: Succeeded StartedAt: 2026-07-06 17:09:36 +0000 UTC FinishedAt: 2026-07-06 17:51:28 +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+CgkJCTx0ZD4yMDI2LzA3LzA2IDE3OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSBCUEYgcHJvZ3JhbSB1c2VkIGludGVybmFsbHkgYnkgdGhlIHVzZXItc3BhY2UgYHBlcmZgIHRvb2wgKGB0b29scy9wZXJmL2ApLiBUaGlzIGNvZGUgaXMgbm90IHBhcnQgb2YgdGhlIGNvcmUga2VybmVsIGltYWdlIGFuZCBpcyBub3QgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBrZXJuZWwgZnV6emluZywgYXMgc3l6a2FsbGVyIGZ1enplcyB0aGUga2VybmVsIHZpYSBzeXNjYWxscyBhbmQgZG9lcyBub3QgZXhlY3V0ZSB1c2VyLXNwYWNlIHV0aWxpdGllcyBsaWtlIGBwZXJmYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTc6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2OTYwM2ZjYWE1MDk1NjQ3ODU5NTA4OTYzNzAwMDIxZTg1YTcwN2ZlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgNiAxNzo1MTowMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jXG5pbmRleCAyYTZlNjE4NjRlZTAxNS4uMjE1NTE2ZGY1ZDJhMzggMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNcbkBAIC00MjksMTUgJiM0Mzs0MjksODggQEAgc3RhdGljIGJvb2wgcGlkX2ZpbHRlcl9faGFzKHN0cnVjdCBwaWRzX2ZpbHRlcmVkICpwaWRzLCBwaWRfdCBwaWQpXG4gXHRyZXR1cm4gYnBmX21hcF9sb29rdXBfZWxlbShwaWRzLCBcdTAwMjZwaWQpICE9IE5VTEw7XG4gfVxuIFxuJiM0Mzt1NjQgWkVSTyA9IDA7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEZXRlcm1pbmUgd2hhdCB0eXBlIG9mIGFyZ3VtZW50IGFuZCBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gdXNlciBzcGFjZSwgdXNpbmcgdGhlXG4mIzQzOyAqIHZhbHVlIGluIHRoZSBiZWF1dHlfbWFwLiBUaGlzIGlzIHRoZSByZWxhdGlvbiBvZiBwYXJhbWV0ZXIgdHlwZSBhbmQgaXRzIGNvcnJlc3BvbmRpbmdcbiYjNDM7ICogdmFsdWUgaW4gdGhlIGJlYXV0eSBtYXAsIGFuZCBob3cgbWFueSBieXRlcyB3ZSByZWFkIGV2ZW50dWFsbHk6XG4mIzQzOyAqXG4mIzQzOyAqIHN0cmluZzogMVx0XHRcdCAgICAgIC1cdTAwM2Ugc2l6ZSBvZiBzdHJpbmdcbiYjNDM7ICogc3RydWN0OiBzaXplIG9mIHN0cnVjdFx0ICAgICAgLVx1MDAzZSBzaXplIG9mIHN0cnVjdFxuJiM0MzsgKiBidWZmZXI6IC0xICogKGluZGV4IG9mIHBhaXJlZCBsZW4pIC1cdTAwM2UgdmFsdWUgb2YgcGFpcmVkIGxlbiAobWF4aW11bTogVFJBQ0VfQVVHX01BWF9CVUYpXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBhdWdtZW50X2FyZyhzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzLCBpbnQgaSxcbiYjNDM7XHRcdFx0ICAgICAgdW5zaWduZWQgaW50ICpiZWF1dHlfbWFwLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgYmVhdXR5X3BheWxvYWRfZW50ZXIgKnBheWxvYWQsIHU2NCBvZmZzZXQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaW5kZXgsIHNpemUsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTtcbiYjNDM7XHRzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqcGF5bG9hZF9vZmZzZXQ7XG4mIzQzO1x0czY0IGF1Z19zaXplO1xuJiM0MztcdGJvb2wgYXVnbWVudGVkO1xuJiM0MztcdHZvaWQgKmFyZztcbiYjNDM7XG4mIzQzO1x0YXJnID0gKHZvaWQgKilhcmdzLVx1MDAzZWFyZ3NbaV07XG4mIzQzO1x0YXVnbWVudGVkID0gZmFsc2U7XG4mIzQzO1x0c2l6ZSA9IGJlYXV0eV9tYXBbaV07XG4mIzQzO1x0YXVnX3NpemUgPSBzaXplOyAvKiBzaXplIG9mIHRoZSBhdWdtZW50ZWQgZGF0YSByZWFkIGZyb20gdXNlciBzcGFjZSAqL1xuJiM0MztcbiYjNDM7XHRpZiAoc2l6ZSA9PSAwIHx8IGFyZyA9PSBOVUxMKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIGJvdW5kcyBjaGVjayBmb3IgdGhlIHZlcmlmaWVyICovXG4mIzQzO1x0aWYgKG9mZnNldCBcdTAwM2Ugc2l6ZW9mKHBheWxvYWQtXHUwMDNlYXVnX2FyZ3MpIC0gc2l6ZW9mKHBheWxvYWQtXHUwMDNlYXVnX2FyZ3NbMF0pKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdGJhcnJpZXJfdmFyKG9mZnNldCk7XG4mIzQzO1x0cGF5bG9hZF9vZmZzZXQgPSAoc3RydWN0IGF1Z21lbnRlZF9hcmcgKikoKHZvaWQgKilcdTAwMjZwYXlsb2FkLVx1MDAzZWF1Z19hcmdzICYjNDM7IG9mZnNldCk7XG4mIzQzO1xuJiM0MztcdGlmIChzaXplID09IDEpIHsgLyogc3RyaW5nICovXG4mIzQzO1x0XHRhdWdfc2l6ZSA9IGJwZl9wcm9iZV9yZWFkX3VzZXJfc3RyKHBheWxvYWRfb2Zmc2V0LVx1MDAzZXZhbHVlLCB2YWx1ZV9zaXplLCBhcmcpO1xuJiM0MztcdFx0LyogbWluaW11bSBvZiAwIHRvIHBhc3MgdGhlIHZlcmlmaWVyICovXG4mIzQzO1x0XHRpZiAoYXVnX3NpemUgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGF1Z19zaXplID0gMDtcbiYjNDM7XG4mIzQzO1x0XHRhdWdtZW50ZWQgPSB0cnVlO1xuJiM0MztcdH0gZWxzZSBpZiAoc2l6ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2M9IHZhbHVlX3NpemUpIHsgLyogc3RydWN0ICovXG4mIzQzO1x0XHRpZiAoIWJwZl9wcm9iZV9yZWFkX3VzZXIocGF5bG9hZF9vZmZzZXQtXHUwMDNldmFsdWUsIHNpemUsIGFyZykpXG4mIzQzO1x0XHRcdGF1Z21lbnRlZCA9IHRydWU7XG4mIzQzO1x0fSBlbHNlIGlmIChzaXplIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzZT0gLTYpIHsgLyogYnVmZmVyICovXG4mIzQzO1x0XHRpbmRleCA9IC0oc2l6ZSAmIzQzOyAxKTtcbiYjNDM7XHRcdGJhcnJpZXJfdmFyKGluZGV4KTsgLy8gUHJldmVudCBjbGFuZyAobm90aWNlZCB3aXRoIHYxOCkgZnJvbSByZW1vdmluZyB0aGUgXHUwMDI2PSA3IHRyaWNrLlxuJiM0MztcdFx0aW5kZXggXHUwMDI2PSA3O1x0ICAgIC8vIFNhdGlzZnkgdGhlIGJvdW5kcyBjaGVja2luZyB3aXRoIHRoZSB2ZXJpZmllciBpbiBzb21lIGtlcm5lbHMuXG4mIzQzO1x0XHRhdWdfc2l6ZSA9IGFyZ3MtXHUwMDNlYXJnc1tpbmRleF0gXHUwMDNlIFRSQUNFX0FVR19NQVhfQlVGID8gVFJBQ0VfQVVHX01BWF9CVUYgOiBhcmdzLVx1MDAzZWFyZ3NbaW5kZXhdO1xuJiM0MztcbiYjNDM7XHRcdGlmIChhdWdfc2l6ZSBcdTAwM2UgMCkge1xuJiM0MztcdFx0XHRpZiAoIWJwZl9wcm9iZV9yZWFkX3VzZXIocGF5bG9hZF9vZmZzZXQtXHUwMDNldmFsdWUsIGF1Z19zaXplLCBhcmcpKVxuJiM0MztcdFx0XHRcdGF1Z21lbnRlZCA9IHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBdWdtZW50ZWQgZGF0YSBzaXplIGlzIGxpbWl0ZWQgdG8gc2l6ZW9mKGF1Z21lbnRlZF9hcmctXHUwMDNldW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqL1xuJiM0MztcdGlmIChhdWdfc2l6ZSBcdTAwM2UgdmFsdWVfc2l6ZSlcbiYjNDM7XHRcdGF1Z19zaXplID0gdmFsdWVfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0Lyogd3JpdGUgZGF0YSB0byBwYXlsb2FkICovXG4mIzQzO1x0aWYgKGF1Z21lbnRlZCkge1xuJiM0MztcdFx0aW50IHdyaXR0ZW4gPSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpICYjNDM7IGF1Z19zaXplO1xuJiM0MztcbiYjNDM7XHRcdGlmICh3cml0dGVuIFx1MDAzYyAwIHx8IHdyaXR0ZW4gXHUwMDNlIHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykpXG4mIzQzO1x0XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0XHRwYXlsb2FkX29mZnNldC1cdTAwM2VzaXplID0gYXVnX3NpemU7XG4mIzQzO1x0XHRyZXR1cm4gd3JpdHRlbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKVxuIHtcbi1cdGJvb2wgYXVnbWVudGVkLCBkb19vdXRwdXQgPSBmYWxzZTtcbi1cdGludCB6ZXJvID0gMCwgaW5kZXgsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTtcbiYjNDM7XHRib29sIGRvX291dHB1dCA9IGZhbHNlO1xuJiM0MztcdGludCBpLCB6ZXJvID0gMCwgd3JpdHRlbjtcbiBcdHU2NCBvdXRwdXQgPSAwOyAvKiBoYXMgdG8gYmUgdTY0LCBvdGhlcndpc2UgaXQgd29uJiMzOTt0IHBhc3MgdGhlIHZlcmlmaWVyICovXG4tXHRzNjQgYXVnX3NpemUsIHNpemU7XG4gXHR1bnNpZ25lZCBpbnQgbnIsICpiZWF1dHlfbWFwO1xuIFx0c3RydWN0IGJlYXV0eV9wYXlsb2FkX2VudGVyICpwYXlsb2FkO1xuLVx0dm9pZCAqYXJnLCAqcGF5bG9hZF9vZmZzZXQ7XG4gXG4gXHQvKiBmYWxsIGJhY2sgdG8gZG8gcHJlZGVmaW5lZCB0YWlsIGNhbGwgKi9cbiBcdGlmIChhcmdzID09IE5VTEwpXG5AQCAtNDQ5LDcgJiM0Mzs1MjIsNiBAQCBzdGF0aWMgaW50IGF1Z21lbnRfc3lzX2VudGVyKHZvaWQgKmN0eCwgc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncylcbiBcbiBcdC8qIHNldCB1cCBwYXlsb2FkIGZvciBvdXRwdXQgKi9cbiBcdHBheWxvYWQgICAgICAgID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZiZWF1dHlfcGF5bG9hZF9lbnRlcl9tYXAsIFx1MDAyNnplcm8pO1xuLVx0cGF5bG9hZF9vZmZzZXQgPSAodm9pZCAqKVx1MDAyNnBheWxvYWQtXHUwMDNlYXVnX2FyZ3M7XG4gXG4gXHRpZiAoYmVhdXR5X21hcCA9PSBOVUxMIHx8IHBheWxvYWQgPT0gTlVMTClcbiBcdFx0cmV0dXJuIDE7XG5AQCAtNDU3LDYxICYjNDM7NTI5LDMwIEBAIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKVxuIFx0LyogY29weSB0aGUgc3lzX2VudGVyIGhlYWRlciwgd2hpY2ggaGFzIHRoZSBzeXNjYWxsX25yICovXG4gXHRfX2J1aWx0aW5fbWVtY3B5KFx1MDAyNnBheWxvYWQtXHUwMDNlYXJncywgYXJncywgc2l6ZW9mKHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MpKTtcbiBcbi1cdC8qXG4tXHQgKiBEZXRlcm1pbmUgd2hhdCB0eXBlIG9mIGFyZ3VtZW50IGFuZCBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gdXNlciBzcGFjZSwgdXNpbmcgdGhlXG4tXHQgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5X21hcC4gVGhpcyBpcyB0aGUgcmVsYXRpb24gb2YgcGFyYW1ldGVyIHR5cGUgYW5kIGl0cyBjb3JyZXNwb25kaW5nXG4tXHQgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5IG1hcCwgYW5kIGhvdyBtYW55IGJ5dGVzIHdlIHJlYWQgZXZlbnR1YWxseTpcbi1cdCAqXG4tXHQgKiBzdHJpbmc6IDFcdFx0XHQgICAgICAtXHUwMDNlIHNpemUgb2Ygc3RyaW5nXG4tXHQgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0XHQgICAgICAtXHUwMDNlIHNpemUgb2Ygc3RydWN0XG4tXHQgKiBidWZmZXI6IC0xICogKGluZGV4IG9mIHBhaXJlZCBsZW4pIC1cdTAwM2UgdmFsdWUgb2YgcGFpcmVkIGxlbiAobWF4aW11bTogVFJBQ0VfQVVHX01BWF9CVUYpXG4tXHQgKi9cbi1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyA2OyBpJiM0MzsmIzQzOykge1xuLVx0XHRhcmcgPSAodm9pZCAqKWFyZ3MtXHUwMDNlYXJnc1tpXTtcbi1cdFx0YXVnbWVudGVkID0gZmFsc2U7XG4tXHRcdHNpemUgPSBiZWF1dHlfbWFwW2ldO1xuLVx0XHRhdWdfc2l6ZSA9IHNpemU7IC8qIHNpemUgb2YgdGhlIGF1Z21lbnRlZCBkYXRhIHJlYWQgZnJvbSB1c2VyIHNwYWNlICovXG4tXG4tXHRcdGlmIChzaXplID09IDAgfHwgYXJnID09IE5VTEwpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGlmIChzaXplID09IDEpIHsgLyogc3RyaW5nICovXG4tXHRcdFx0YXVnX3NpemUgPSBicGZfcHJvYmVfcmVhZF91c2VyX3N0cigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVx1MDAzZXZhbHVlLCB2YWx1ZV9zaXplLCBhcmcpO1xuLVx0XHRcdC8qIG1pbmltdW0gb2YgMCB0byBwYXNzIHRoZSB2ZXJpZmllciAqL1xuLVx0XHRcdGlmIChhdWdfc2l6ZSBcdTAwM2MgMClcbi1cdFx0XHRcdGF1Z19zaXplID0gMDtcbi1cbi1cdFx0XHRhdWdtZW50ZWQgPSB0cnVlO1xuLVx0XHR9IGVsc2UgaWYgKHNpemUgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHNpemUgXHUwMDNjPSB2YWx1ZV9zaXplKSB7IC8qIHN0cnVjdCAqL1xuLVx0XHRcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVx1MDAzZXZhbHVlLCBzaXplLCBhcmcpKVxuLVx0XHRcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIGlmICgoaW50KXNpemUgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IHNpemUgXHUwMDNlPSAtNikgeyAvKiBidWZmZXIgKi9cbi1cdFx0XHRpbmRleCA9IC0oc2l6ZSAmIzQzOyAxKTtcbi1cdFx0XHRiYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlIFx1MDAyNj0gNyB0cmljay5cbi1cdFx0XHRpbmRleCBcdTAwMjY9IDc7XHQgICAgLy8gU2F0aXNmeSB0aGUgYm91bmRzIGNoZWNraW5nIHdpdGggdGhlIHZlcmlmaWVyIGluIHNvbWUga2VybmVscy5cbi1cdFx0XHRhdWdfc2l6ZSA9IGFyZ3MtXHUwMDNlYXJnc1tpbmRleF0gXHUwMDNlIFRSQUNFX0FVR19NQVhfQlVGID8gVFJBQ0VfQVVHX01BWF9CVUYgOiBhcmdzLVx1MDAzZWFyZ3NbaW5kZXhdO1xuLVxuLVx0XHRcdGlmIChhdWdfc2l6ZSBcdTAwM2UgMCkge1xuLVx0XHRcdFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNldmFsdWUsIGF1Z19zaXplLCBhcmcpKVxuLVx0XHRcdFx0XHRhdWdtZW50ZWQgPSB0cnVlO1xuJiM0MztcdGlmIChicGZfa3N5bV9leGlzdHMoYnBmX2l0ZXJfbnVtX25ldykpIHtcbiYjNDM7XHRcdGJwZl9mb3IoaSwgMCwgNikge1xuJiM0MztcdFx0XHR3cml0dGVuID0gYXVnbWVudF9hcmcoYXJncywgaSwgYmVhdXR5X21hcCwgcGF5bG9hZCwgb3V0cHV0KTtcbiYjNDM7XHRcdFx0aWYgKHdyaXR0ZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIDE7XG4mIzQzO1x0XHRcdGlmICh3cml0dGVuIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRcdFx0b3V0cHV0ICYjNDM7PSB3cml0dGVuO1xuJiM0MztcdFx0XHRcdC8qXG4mIzQzO1x0XHRcdFx0ICogZ3VpZGUgdGhlIHZlcmlmaWVyIHRvIGZvcmdldCByYW5nZSBvZiBgb3V0cHV0YCwgd2hpY2hcbiYjNDM7XHRcdFx0XHQgKiBoZWxwcyB0byBwcm92ZSBjb252ZXJnZW5jZSBvZiB0aGUgbG9vcFxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdG91dHB1dCAmIzQzOz0gWkVSTztcbiYjNDM7XHRcdFx0XHRkb19vdXRwdXQgPSB0cnVlO1xuIFx0XHRcdH1cbiBcdFx0fVxuLVxuLVx0XHQvKiBBdWdtZW50ZWQgZGF0YSBzaXplIGlzIGxpbWl0ZWQgdG8gc2l6ZW9mKGF1Z21lbnRlZF9hcmctXHUwMDNldW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqL1xuLVx0XHRpZiAoYXVnX3NpemUgXHUwMDNlIHZhbHVlX3NpemUpXG4tXHRcdFx0YXVnX3NpemUgPSB2YWx1ZV9zaXplO1xuLVxuLVx0XHQvKiB3cml0ZSBkYXRhIHRvIHBheWxvYWQgKi9cbi1cdFx0aWYgKGF1Z21lbnRlZCkge1xuLVx0XHRcdGludCB3cml0dGVuID0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKSAmIzQzOyBhdWdfc2l6ZTtcbi1cbi1cdFx0XHRpZiAod3JpdHRlbiBcdTAwM2MgMCB8fCB3cml0dGVuIFx1MDAzZSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpKVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA2OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHR3cml0dGVuID0gYXVnbWVudF9hcmcoYXJncywgaSwgYmVhdXR5X21hcCwgcGF5bG9hZCwgb3V0cHV0KTtcbiYjNDM7XHRcdFx0aWYgKHdyaXR0ZW4gXHUwMDNjIDApXG4gXHRcdFx0XHRyZXR1cm4gMTtcbi1cbi1cdFx0XHQoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVx1MDAzZXNpemUgPSBhdWdfc2l6ZTtcbi1cdFx0XHRvdXRwdXQgJiM0Mzs9IHdyaXR0ZW47XG4tXHRcdFx0cGF5bG9hZF9vZmZzZXQgJiM0Mzs9IHdyaXR0ZW47XG4tXHRcdFx0ZG9fb3V0cHV0ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0aWYgKHdyaXR0ZW4gXHUwMDNlIDApIHtcbiYjNDM7XHRcdFx0XHRvdXRwdXQgJiM0Mzs9IHdyaXR0ZW47XG4mIzQzO1x0XHRcdFx0ZG9fb3V0cHV0ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTc6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBhIEJQRiBwcm9ncmFtIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgdXNlci1zcGFjZSBgcGVyZmAgdG9vbCAoYHRvb2xzL3BlcmYvYCkuIFRoaXMgY29kZSBpcyBub3QgcGFydCBvZiB0aGUgY29yZSBrZXJuZWwgaW1hZ2UgYW5kIGlzIG5vdCByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGtlcm5lbCBmdXp6aW5nLCBhcyBzeXprYWxsZXIgZnV6emVzIHRoZSBrZXJuZWwgdmlhIHN5c2NhbGxzIGFuZCBkb2VzIG5vdCBleGVjdXRlIHVzZXItc3BhY2UgdXRpbGl0aWVzIGxpa2UgYHBlcmZgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjk2MDNmY2FhNTA5NTY0Nzg1OTUwODk2MzcwMDAyMWU4NWE3MDdmZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDYgMTc6NTE6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jCmluZGV4IDJhNmU2MTg2NGVlMDE1Li4yMTU1MTZkZjVkMmEzOCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmMKQEAgLTQyOSwxNSAmIzQzOzQyOSw4OCBAQCBzdGF0aWMgYm9vbCBwaWRfZmlsdGVyX19oYXMoc3RydWN0IHBpZHNfZmlsdGVyZWQgKnBpZHMsIHBpZF90IHBpZCkKIAlyZXR1cm4gYnBmX21hcF9sb29rdXBfZWxlbShwaWRzLCAmYW1wO3BpZCkgIT0gTlVMTDsKIH0KIAomIzQzO3U2NCBaRVJPID0gMDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIERldGVybWluZSB3aGF0IHR5cGUgb2YgYXJndW1lbnQgYW5kIGhvdyBtYW55IGJ5dGVzIHRvIHJlYWQgZnJvbSB1c2VyIHNwYWNlLCB1c2luZyB0aGUKJiM0MzsgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5X21hcC4gVGhpcyBpcyB0aGUgcmVsYXRpb24gb2YgcGFyYW1ldGVyIHR5cGUgYW5kIGl0cyBjb3JyZXNwb25kaW5nCiYjNDM7ICogdmFsdWUgaW4gdGhlIGJlYXV0eSBtYXAsIGFuZCBob3cgbWFueSBieXRlcyB3ZSByZWFkIGV2ZW50dWFsbHk6CiYjNDM7ICoKJiM0MzsgKiBzdHJpbmc6IDEJCQkgICAgICAtJmd0OyBzaXplIG9mIHN0cmluZwomIzQzOyAqIHN0cnVjdDogc2l6ZSBvZiBzdHJ1Y3QJICAgICAgLSZndDsgc2l6ZSBvZiBzdHJ1Y3QKJiM0MzsgKiBidWZmZXI6IC0xICogKGluZGV4IG9mIHBhaXJlZCBsZW4pIC0mZ3Q7IHZhbHVlIG9mIHBhaXJlZCBsZW4gKG1heGltdW06IFRSQUNFX0FVR19NQVhfQlVGKQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGF1Z21lbnRfYXJnKHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MsIGludCBpLAomIzQzOwkJCSAgICAgIHVuc2lnbmVkIGludCAqYmVhdXR5X21hcCwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgYmVhdXR5X3BheWxvYWRfZW50ZXIgKnBheWxvYWQsIHU2NCBvZmZzZXQpCiYjNDM7ewomIzQzOwlpbnQgaW5kZXgsIHNpemUsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTsKJiM0MzsJc3RydWN0IGF1Z21lbnRlZF9hcmcgKnBheWxvYWRfb2Zmc2V0OwomIzQzOwlzNjQgYXVnX3NpemU7CiYjNDM7CWJvb2wgYXVnbWVudGVkOwomIzQzOwl2b2lkICphcmc7CiYjNDM7CiYjNDM7CWFyZyA9ICh2b2lkICopYXJncy0mZ3Q7YXJnc1tpXTsKJiM0MzsJYXVnbWVudGVkID0gZmFsc2U7CiYjNDM7CXNpemUgPSBiZWF1dHlfbWFwW2ldOwomIzQzOwlhdWdfc2l6ZSA9IHNpemU7IC8qIHNpemUgb2YgdGhlIGF1Z21lbnRlZCBkYXRhIHJlYWQgZnJvbSB1c2VyIHNwYWNlICovCiYjNDM7CiYjNDM7CWlmIChzaXplID09IDAgfHwgYXJnID09IE5VTEwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogYm91bmRzIGNoZWNrIGZvciB0aGUgdmVyaWZpZXIgKi8KJiM0MzsJaWYgKG9mZnNldCAmZ3Q7IHNpemVvZihwYXlsb2FkLSZndDthdWdfYXJncykgLSBzaXplb2YocGF5bG9hZC0mZ3Q7YXVnX2FyZ3NbMF0pKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwliYXJyaWVyX3ZhcihvZmZzZXQpOwomIzQzOwlwYXlsb2FkX29mZnNldCA9IChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKSgodm9pZCAqKSZhbXA7cGF5bG9hZC0mZ3Q7YXVnX2FyZ3MgJiM0Mzsgb2Zmc2V0KTsKJiM0MzsKJiM0MzsJaWYgKHNpemUgPT0gMSkgeyAvKiBzdHJpbmcgKi8KJiM0MzsJCWF1Z19zaXplID0gYnBmX3Byb2JlX3JlYWRfdXNlcl9zdHIocGF5bG9hZF9vZmZzZXQtJmd0O3ZhbHVlLCB2YWx1ZV9zaXplLCBhcmcpOwomIzQzOwkJLyogbWluaW11bSBvZiAwIHRvIHBhc3MgdGhlIHZlcmlmaWVyICovCiYjNDM7CQlpZiAoYXVnX3NpemUgJmx0OyAwKQomIzQzOwkJCWF1Z19zaXplID0gMDsKJiM0MzsKJiM0MzsJCWF1Z21lbnRlZCA9IHRydWU7CiYjNDM7CX0gZWxzZSBpZiAoc2l6ZSAmZ3Q7IDAgJmFtcDsmYW1wOyBzaXplICZsdDs9IHZhbHVlX3NpemUpIHsgLyogc3RydWN0ICovCiYjNDM7CQlpZiAoIWJwZl9wcm9iZV9yZWFkX3VzZXIocGF5bG9hZF9vZmZzZXQtJmd0O3ZhbHVlLCBzaXplLCBhcmcpKQomIzQzOwkJCWF1Z21lbnRlZCA9IHRydWU7CiYjNDM7CX0gZWxzZSBpZiAoc2l6ZSAmbHQ7IDAgJmFtcDsmYW1wOyBzaXplICZndDs9IC02KSB7IC8qIGJ1ZmZlciAqLwomIzQzOwkJaW5kZXggPSAtKHNpemUgJiM0MzsgMSk7CiYjNDM7CQliYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlICZhbXA7PSA3IHRyaWNrLgomIzQzOwkJaW5kZXggJmFtcDs9IDc7CSAgICAvLyBTYXRpc2Z5IHRoZSBib3VuZHMgY2hlY2tpbmcgd2l0aCB0aGUgdmVyaWZpZXIgaW4gc29tZSBrZXJuZWxzLgomIzQzOwkJYXVnX3NpemUgPSBhcmdzLSZndDthcmdzW2luZGV4XSAmZ3Q7IFRSQUNFX0FVR19NQVhfQlVGID8gVFJBQ0VfQVVHX01BWF9CVUYgOiBhcmdzLSZndDthcmdzW2luZGV4XTsKJiM0MzsKJiM0MzsJCWlmIChhdWdfc2l6ZSAmZ3Q7IDApIHsKJiM0MzsJCQlpZiAoIWJwZl9wcm9iZV9yZWFkX3VzZXIocGF5bG9hZF9vZmZzZXQtJmd0O3ZhbHVlLCBhdWdfc2l6ZSwgYXJnKSkKJiM0MzsJCQkJYXVnbWVudGVkID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBdWdtZW50ZWQgZGF0YSBzaXplIGlzIGxpbWl0ZWQgdG8gc2l6ZW9mKGF1Z21lbnRlZF9hcmctJmd0O3VubmFtZWQgdW5pb24gd2l0aCB2YWx1ZSBmaWVsZCkgKi8KJiM0MzsJaWYgKGF1Z19zaXplICZndDsgdmFsdWVfc2l6ZSkKJiM0MzsJCWF1Z19zaXplID0gdmFsdWVfc2l6ZTsKJiM0MzsKJiM0MzsJLyogd3JpdGUgZGF0YSB0byBwYXlsb2FkICovCiYjNDM7CWlmIChhdWdtZW50ZWQpIHsKJiM0MzsJCWludCB3cml0dGVuID0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKSAmIzQzOyBhdWdfc2l6ZTsKJiM0MzsKJiM0MzsJCWlmICh3cml0dGVuICZsdDsgMCB8fCB3cml0dGVuICZndDsgc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSkKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CQlwYXlsb2FkX29mZnNldC0mZ3Q7c2l6ZSA9IGF1Z19zaXplOwomIzQzOwkJcmV0dXJuIHdyaXR0ZW47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpCiB7Ci0JYm9vbCBhdWdtZW50ZWQsIGRvX291dHB1dCA9IGZhbHNlOwotCWludCB6ZXJvID0gMCwgaW5kZXgsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTsKJiM0MzsJYm9vbCBkb19vdXRwdXQgPSBmYWxzZTsKJiM0MzsJaW50IGksIHplcm8gPSAwLCB3cml0dGVuOwogCXU2NCBvdXRwdXQgPSAwOyAvKiBoYXMgdG8gYmUgdTY0LCBvdGhlcndpc2UgaXQgd29uJiMzOTt0IHBhc3MgdGhlIHZlcmlmaWVyICovCi0JczY0IGF1Z19zaXplLCBzaXplOwogCXVuc2lnbmVkIGludCBuciwgKmJlYXV0eV9tYXA7CiAJc3RydWN0IGJlYXV0eV9wYXlsb2FkX2VudGVyICpwYXlsb2FkOwotCXZvaWQgKmFyZywgKnBheWxvYWRfb2Zmc2V0OwogCiAJLyogZmFsbCBiYWNrIHRvIGRvIHByZWRlZmluZWQgdGFpbCBjYWxsICovCiAJaWYgKGFyZ3MgPT0gTlVMTCkKQEAgLTQ0OSw3ICYjNDM7NTIyLDYgQEAgc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpCiAKIAkvKiBzZXQgdXAgcGF5bG9hZCBmb3Igb3V0cHV0ICovCiAJcGF5bG9hZCAgICAgICAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7YmVhdXR5X3BheWxvYWRfZW50ZXJfbWFwLCAmYW1wO3plcm8pOwotCXBheWxvYWRfb2Zmc2V0ID0gKHZvaWQgKikmYW1wO3BheWxvYWQtJmd0O2F1Z19hcmdzOwogCiAJaWYgKGJlYXV0eV9tYXAgPT0gTlVMTCB8fCBwYXlsb2FkID09IE5VTEwpCiAJCXJldHVybiAxOwpAQCAtNDU3LDYxICYjNDM7NTI5LDMwIEBAIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKQogCS8qIGNvcHkgdGhlIHN5c19lbnRlciBoZWFkZXIsIHdoaWNoIGhhcyB0aGUgc3lzY2FsbF9uciAqLwogCV9fYnVpbHRpbl9tZW1jcHkoJmFtcDtwYXlsb2FkLSZndDthcmdzLCBhcmdzLCBzaXplb2Yoc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncykpOwogCi0JLyoKLQkgKiBEZXRlcm1pbmUgd2hhdCB0eXBlIG9mIGFyZ3VtZW50IGFuZCBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gdXNlciBzcGFjZSwgdXNpbmcgdGhlCi0JICogdmFsdWUgaW4gdGhlIGJlYXV0eV9tYXAuIFRoaXMgaXMgdGhlIHJlbGF0aW9uIG9mIHBhcmFtZXRlciB0eXBlIGFuZCBpdHMgY29ycmVzcG9uZGluZwotCSAqIHZhbHVlIGluIHRoZSBiZWF1dHkgbWFwLCBhbmQgaG93IG1hbnkgYnl0ZXMgd2UgcmVhZCBldmVudHVhbGx5OgotCSAqCi0JICogc3RyaW5nOiAxCQkJICAgICAgLSZndDsgc2l6ZSBvZiBzdHJpbmcKLQkgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0CSAgICAgIC0mZ3Q7IHNpemUgb2Ygc3RydWN0Ci0JICogYnVmZmVyOiAtMSAqIChpbmRleCBvZiBwYWlyZWQgbGVuKSAtJmd0OyB2YWx1ZSBvZiBwYWlyZWQgbGVuIChtYXhpbXVtOiBUUkFDRV9BVUdfTUFYX0JVRikKLQkgKi8KLQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IDY7IGkmIzQzOyYjNDM7KSB7Ci0JCWFyZyA9ICh2b2lkICopYXJncy0mZ3Q7YXJnc1tpXTsKLQkJYXVnbWVudGVkID0gZmFsc2U7Ci0JCXNpemUgPSBiZWF1dHlfbWFwW2ldOwotCQlhdWdfc2l6ZSA9IHNpemU7IC8qIHNpemUgb2YgdGhlIGF1Z21lbnRlZCBkYXRhIHJlYWQgZnJvbSB1c2VyIHNwYWNlICovCi0KLQkJaWYgKHNpemUgPT0gMCB8fCBhcmcgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChzaXplID09IDEpIHsgLyogc3RyaW5nICovCi0JCQlhdWdfc2l6ZSA9IGJwZl9wcm9iZV9yZWFkX3VzZXJfc3RyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktJmd0O3ZhbHVlLCB2YWx1ZV9zaXplLCBhcmcpOwotCQkJLyogbWluaW11bSBvZiAwIHRvIHBhc3MgdGhlIHZlcmlmaWVyICovCi0JCQlpZiAoYXVnX3NpemUgJmx0OyAwKQotCQkJCWF1Z19zaXplID0gMDsKLQotCQkJYXVnbWVudGVkID0gdHJ1ZTsKLQkJfSBlbHNlIGlmIChzaXplICZndDsgMCAmYW1wOyZhbXA7IHNpemUgJmx0Oz0gdmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi8KLQkJCWlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLSZndDt2YWx1ZSwgc2l6ZSwgYXJnKSkKLQkJCQlhdWdtZW50ZWQgPSB0cnVlOwotCQl9IGVsc2UgaWYgKChpbnQpc2l6ZSAmbHQ7IDAgJmFtcDsmYW1wOyBzaXplICZndDs9IC02KSB7IC8qIGJ1ZmZlciAqLwotCQkJaW5kZXggPSAtKHNpemUgJiM0MzsgMSk7Ci0JCQliYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlICZhbXA7PSA3IHRyaWNrLgotCQkJaW5kZXggJmFtcDs9IDc7CSAgICAvLyBTYXRpc2Z5IHRoZSBib3VuZHMgY2hlY2tpbmcgd2l0aCB0aGUgdmVyaWZpZXIgaW4gc29tZSBrZXJuZWxzLgotCQkJYXVnX3NpemUgPSBhcmdzLSZndDthcmdzW2luZGV4XSAmZ3Q7IFRSQUNFX0FVR19NQVhfQlVGID8gVFJBQ0VfQVVHX01BWF9CVUYgOiBhcmdzLSZndDthcmdzW2luZGV4XTsKLQotCQkJaWYgKGF1Z19zaXplICZndDsgMCkgewotCQkJCWlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLSZndDt2YWx1ZSwgYXVnX3NpemUsIGFyZykpCi0JCQkJCWF1Z21lbnRlZCA9IHRydWU7CiYjNDM7CWlmIChicGZfa3N5bV9leGlzdHMoYnBmX2l0ZXJfbnVtX25ldykpIHsKJiM0MzsJCWJwZl9mb3IoaSwgMCwgNikgewomIzQzOwkJCXdyaXR0ZW4gPSBhdWdtZW50X2FyZyhhcmdzLCBpLCBiZWF1dHlfbWFwLCBwYXlsb2FkLCBvdXRwdXQpOwomIzQzOwkJCWlmICh3cml0dGVuICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuIDE7CiYjNDM7CQkJaWYgKHdyaXR0ZW4gJmd0OyAwKSB7CiYjNDM7CQkJCW91dHB1dCAmIzQzOz0gd3JpdHRlbjsKJiM0MzsJCQkJLyoKJiM0MzsJCQkJICogZ3VpZGUgdGhlIHZlcmlmaWVyIHRvIGZvcmdldCByYW5nZSBvZiBgb3V0cHV0YCwgd2hpY2gKJiM0MzsJCQkJICogaGVscHMgdG8gcHJvdmUgY29udmVyZ2VuY2Ugb2YgdGhlIGxvb3AKJiM0MzsJCQkJICovCiYjNDM7CQkJCW91dHB1dCAmIzQzOz0gWkVSTzsKJiM0MzsJCQkJZG9fb3V0cHV0ID0gdHJ1ZTsKIAkJCX0KIAkJfQotCi0JCS8qIEF1Z21lbnRlZCBkYXRhIHNpemUgaXMgbGltaXRlZCB0byBzaXplb2YoYXVnbWVudGVkX2FyZy0mZ3Q7dW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqLwotCQlpZiAoYXVnX3NpemUgJmd0OyB2YWx1ZV9zaXplKQotCQkJYXVnX3NpemUgPSB2YWx1ZV9zaXplOwotCi0JCS8qIHdyaXRlIGRhdGEgdG8gcGF5bG9hZCAqLwotCQlpZiAoYXVnbWVudGVkKSB7Ci0JCQlpbnQgd3JpdHRlbiA9IG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSkgJiM0MzsgYXVnX3NpemU7Ci0KLQkJCWlmICh3cml0dGVuICZsdDsgMCB8fCB3cml0dGVuICZndDsgc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSkKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyA2OyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXdyaXR0ZW4gPSBhdWdtZW50X2FyZyhhcmdzLCBpLCBiZWF1dHlfbWFwLCBwYXlsb2FkLCBvdXRwdXQpOwomIzQzOwkJCWlmICh3cml0dGVuICZsdDsgMCkKIAkJCQlyZXR1cm4gMTsKLQotCQkJKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS0mZ3Q7c2l6ZSA9IGF1Z19zaXplOwotCQkJb3V0cHV0ICYjNDM7PSB3cml0dGVuOwotCQkJcGF5bG9hZF9vZmZzZXQgJiM0Mzs9IHdyaXR0ZW47Ci0JCQlkb19vdXRwdXQgPSB0cnVlOwomIzQzOwkJCWlmICh3cml0dGVuICZndDsgMCkgewomIzQzOwkJCQlvdXRwdXQgJiM0Mzs9IHdyaXR0ZW47CiYjNDM7CQkJCWRvX291dHB1dCA9IHRydWU7CiYjNDM7CQkJfQogCQl9CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE3OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNzcKCQkJCQkJCW91dHB1dDogOTkKCQkJCQkJCXRob3VnaHRzOiA3NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIGB0b29scy9wZXJmYCBCUEYgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgaXQmIzM5O3MgbW9kaWZ5aW5nIGB0b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY2AuIFRoaXMgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmssICYjMzQ7QlBGIHByb2dyYW0hJiMzNDsgYW5kIHRoYXQgdGhpcyBpcyB1c2VkIGJ5IHRoZSBgcGVyZmAgdG9vbC4gTm93LCBgcGVyZmAgaXMgdXNlci1zcGFjZSwgYWx0aG91Z2ggaXQgZG9lcyB1c2UgQlBGIHNrZWxldG9ucyBhbmQgbG9hZHMgcHJvZ3JhbXMgaW50byB0aGUga2VybmVsLiBUaGUga2V5IGRpc3RpbmN0aW9uIGhlcmUgaXMgdGhhdCB0aGlzIHNwZWNpZmljIEJQRiBjb2RlLCB3aGlsZSBrZXJuZWwtYm91bmQgd2hlbiBydW5uaW5nIGBwZXJmYCwgKmlzbiYjMzk7dCogcGFydCBvZiB0aGUgY29yZSBrZXJuZWwgaW1hZ2UgaXRzZWxmLiBJdCYjMzk7cyBzb3VyY2UgY29kZSB3aXRoaW4gdGhlIGBwZXJmYCB0b29sLgoKTXkgaW50ZXJuYWwgY2hlY2tsaXN0IGltbWVkaWF0ZWx5IGtpY2tzIGluLiBJcyB0aGlzIHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nPyBUaGUgdXN1YWwgcnVsZXMgYXBwbHk6IERvY3VtZW50YXRpb24gY2hhbmdlcywgY29tbWVudHMsIGRlY29yYXRpdmUgbG9nZ2luZy4uLiB0aGF0JiMzOTtzIGEgbm8tZ28uIEJ1dCBJIGFsc28gbmVlZCB0byB0aGluayBzcGVjaWZpY2FsbHkgYWJvdXQgc3l6a2FsbGVyLiBEb2VzIHRoaXMgcGF0Y2ggY2hhbmdlIHNvbWV0aGluZyB0aGF0IGlzIHRvdWNoZWQgYnkgc3l6a2FsbGVyPwoKVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiAgU3l6a2FsbGVyIGZvY3VzZXMgb24gdGhlICprZXJuZWwqLiAgV2hpbGUgc3l6a2FsbGVyICpjYW4qIGZ1enogQlBGIHByb2dyYW1zLCBpdCBkb2VzbiYjMzk7dCBkbyBzbyBieSBydW5uaW5nIGBwZXJmYCBvciBieSB1c2luZyBCUEYgY29kZSBwcm92aWRlZCB3aXRoIGl0LiBTeXprYWxsZXImIzM5O3MgcHVycG9zZSBpcyB0byBmdXp6IHRoZSBrZXJuZWwgdmlhIHN5c2NhbGxzLiBTbywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGRvZXMgdGhpcyBwYXRjaCBtb2RpZnkgc29tZXRoaW5nIHRoYXQgY2FuIGJlIHJlYWNoZWQgYnkgYSBzeXprYWxsZXIgc3lzY2FsbD8KCkxldCBtZSBzdGVwIGJhY2sgYW5kIG1ha2Ugc3VyZS4gYHRvb2xzL3BlcmZgIGlzIGEgdXNlci1zcGFjZSB0b29sLiBTeXprYWxsZXIgZG9lc24mIzM5O3QgZGlyZWN0bHkgcnVuIHVzZXItc3BhY2UgdG9vbHMuIEl0IGdlbmVyYXRlcyBpdHMgb3duIEJQRiBwcm9ncmFtcy4gIEl0IGRvZXNuJiMzOTt0IHVzZSB0aGUgQlBGIGNvZGUgcHJvdmlkZWQgd2l0aCB0aGUgYHBlcmZgIHRvb2wuIFNvLCB0aGUgY29kZSB3aXRoaW4gdGhpcyBwYXRjaCB3b24mIzM5O3QgYmUgZXhlY3V0ZWQgZGlyZWN0bHkgYnkgc3l6a2FsbGVyLgoKQW5kIHdoYXQgZG9lcyB0aGlzIHBhcnRpY3VsYXIgcGF0Y2ggYWN0dWFsbHkgKmRvKj8gSXQmIzM5O3MgcmVmYWN0b3JpbmcgYGF1Z21lbnRfc3lzX2VudGVyYCB1c2luZyBgYnBmX2ZvcmAuIE9rYXksIEJQRiBpdGVyYXRvcnMsIGV4dHJhY3RpbmcgYGF1Z21lbnRfYXJnYC4gIEl0IGRvZXNuJiMzOTt0IHNlZW0gbGlrZSB0aGUgY29yZSBrZXJuZWwgY29kZSBjaGFuZ2VzLgoKU28sIEkgbmVlZCB0byBjaGVjayB0byBiZSBzdXJlLi4uIEkmIzM5O20gY29uZmlkZW50IHN5emthbGxlciBpcyBub3QgZ29pbmcgdG8gZnV6eiBgdG9vbHMvcGVyZmAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGlzIGlzbiYjMzk7dCB0b3VjaGluZyBhIGtlcm5lbCBpbnRlcmZhY2UgZGlyZWN0bHkuICBJIGNvbmZpcm0gdGhhdCB0aGUgZGlmZiBpcyAqb25seSogd2l0aGluIGB0b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY2AuIFRoaXMgY29uZmlybXMgaXQmIzM5O3MgYSBCUEYgcHJvZ3JhbSBmb3IgYHBlcmYgdHJhY2VgLiAgU2luY2UgaXQmIzM5O3MgcGFydCBvZiB0aGUgYHBlcmZgIHRvb2wsIGFuZCBpdCYjMzk7cyBub3QgcGFydCBvZiB0aGUga2VybmVsIGltYWdlIHRoYXQgc3l6a2FsbGVyIGZ1enplcy4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBpcyBub3QgZ29pbmcgdG8gYmUgZnV6emVkIGJ5IHN5emthbGxlci4KCk9rYXksIG15IGNvbmNsdXNpb246IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIGNoYW5nZSBpcyBsaW1pdGVkIHRvIGEgQlBGIHByb2dyYW0gdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSB1c2VyLXNwYWNlIGBwZXJmYCB0b29sLiBTeXprYWxsZXIgZm9jdXNlcyBvbiBmdXp6aW5nIHRoZSBrZXJuZWwsIGFuZCB0aGlzIGNoYW5nZSBpcyBub3QgcGFydCBvZiB0aGUga2VybmVsJiMzOTtzIGNvcmUgaW1hZ2UgYW5kIGlzbiYjMzk7dCBhY2Nlc3NpYmxlIHZpYSB0aGUgc3lzY2FsbHMgdGhhdCBzeXprYWxsZXIgdXRpbGl6ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSB1c2VyLXNwYWNlIGBwZXJmYCB0b29sIChgdG9vbHMvcGVyZi9gKS4gVGhpcyBjb2RlIGlzIG5vdCBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbCBpbWFnZSBhbmQgaXMgbm90IHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQga2VybmVsIGZ1enppbmcsIGFzIHN5emthbGxlciBmdXp6ZXMgdGhlIGtlcm5lbCB2aWEgc3lzY2FsbHMgYW5kIGRvZXMgbm90IGV4ZWN1dGUgdXNlci1zcGFjZSB1dGlsaXRpZXMgbGlrZSBgcGVyZmAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSB1c2VyLXNwYWNlIGBwZXJmYCB0b29sIChgdG9vbHMvcGVyZi9gKS4gVGhpcyBjb2RlIGlzIG5vdCBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbCBpbWFnZSBhbmQgaXMgbm90IHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQga2VybmVsIGZ1enppbmcsIGFzIHN5emthbGxlciBmdXp6ZXMgdGhlIGtlcm5lbCB2aWEgc3lzY2FsbHMgYW5kIGRvZXMgbm90IGV4ZWN1dGUgdXNlci1zcGFjZSB1dGlsaXRpZXMgbGlrZSBgcGVyZmAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDZUMTc6NTE6MDQuNTc5MDU5MTg4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NjQyODgzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSBCUEYgcHJvZ3JhbSB1c2VkIGludGVybmFsbHkgYnkgdGhlIHVzZXItc3BhY2UgYHBlcmZgIHRvb2wgKGB0b29scy9wZXJmL2ApLiBUaGlzIGNvZGUgaXMgbm90IHBhcnQgb2YgdGhlIGNvcmUga2VybmVsIGltYWdlIGFuZCBpcyBub3QgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBrZXJuZWwgZnV6emluZywgYXMgc3l6a2FsbGVyIGZ1enplcyB0aGUga2VybmVsIHZpYSBzeXNjYWxscyBhbmQgZG9lcyBub3QgZXhlY3V0ZSB1c2VyLXNwYWNlIHV0aWxpdGllcyBsaWtlIGBwZXJmYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE3OjUxOjA0LjU3OTA2NzIzOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNTczNDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjk2MDNmY2FhNTA5NTY0Nzg1OTUwODk2MzcwMDAyMWU4NWE3MDdmZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCA2IDE3OjUxOjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jIGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNcXG5pbmRleCAyYTZlNjE4NjRlZTAxNS4uMjE1NTE2ZGY1ZDJhMzggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNcXG4rKysgYi90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY1xcbkBAIC00MjksMTUgKzQyOSw4OCBAQCBzdGF0aWMgYm9vbCBwaWRfZmlsdGVyX19oYXMoc3RydWN0IHBpZHNfZmlsdGVyZWQgKnBpZHMsIHBpZF90IHBpZClcXG4gXFx0cmV0dXJuIGJwZl9tYXBfbG9va3VwX2VsZW0ocGlkcywgXFx1MDAyNnBpZCkgIT0gTlVMTDtcXG4gfVxcbiBcXG4rdTY0IFpFUk8gPSAwO1xcbitcXG4rLypcXG4rICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBhcmd1bWVudCBhbmQgaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHVzZXIgc3BhY2UsIHVzaW5nIHRoZVxcbisgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5X21hcC4gVGhpcyBpcyB0aGUgcmVsYXRpb24gb2YgcGFyYW1ldGVyIHR5cGUgYW5kIGl0cyBjb3JyZXNwb25kaW5nXFxuKyAqIHZhbHVlIGluIHRoZSBiZWF1dHkgbWFwLCBhbmQgaG93IG1hbnkgYnl0ZXMgd2UgcmVhZCBldmVudHVhbGx5OlxcbisgKlxcbisgKiBzdHJpbmc6IDFcXHRcXHRcXHQgICAgICAtXFx1MDAzZSBzaXplIG9mIHN0cmluZ1xcbisgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0XFx0ICAgICAgLVxcdTAwM2Ugc2l6ZSBvZiBzdHJ1Y3RcXG4rICogYnVmZmVyOiAtMSAqIChpbmRleCBvZiBwYWlyZWQgbGVuKSAtXFx1MDAzZSB2YWx1ZSBvZiBwYWlyZWQgbGVuIChtYXhpbXVtOiBUUkFDRV9BVUdfTUFYX0JVRilcXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgaW50IGF1Z21lbnRfYXJnKHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MsIGludCBpLFxcbitcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgKmJlYXV0eV9tYXAsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBiZWF1dHlfcGF5bG9hZF9lbnRlciAqcGF5bG9hZCwgdTY0IG9mZnNldClcXG4re1xcbitcXHRpbnQgaW5kZXgsIHNpemUsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTtcXG4rXFx0c3RydWN0IGF1Z21lbnRlZF9hcmcgKnBheWxvYWRfb2Zmc2V0O1xcbitcXHRzNjQgYXVnX3NpemU7XFxuK1xcdGJvb2wgYXVnbWVudGVkO1xcbitcXHR2b2lkICphcmc7XFxuK1xcbitcXHRhcmcgPSAodm9pZCAqKWFyZ3MtXFx1MDAzZWFyZ3NbaV07XFxuK1xcdGF1Z21lbnRlZCA9IGZhbHNlO1xcbitcXHRzaXplID0gYmVhdXR5X21hcFtpXTtcXG4rXFx0YXVnX3NpemUgPSBzaXplOyAvKiBzaXplIG9mIHRoZSBhdWdtZW50ZWQgZGF0YSByZWFkIGZyb20gdXNlciBzcGFjZSAqL1xcbitcXG4rXFx0aWYgKHNpemUgPT0gMCB8fCBhcmcgPT0gTlVMTClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBib3VuZHMgY2hlY2sgZm9yIHRoZSB2ZXJpZmllciAqL1xcbitcXHRpZiAob2Zmc2V0IFxcdTAwM2Ugc2l6ZW9mKHBheWxvYWQtXFx1MDAzZWF1Z19hcmdzKSAtIHNpemVvZihwYXlsb2FkLVxcdTAwM2VhdWdfYXJnc1swXSkpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0YmFycmllcl92YXIob2Zmc2V0KTtcXG4rXFx0cGF5bG9hZF9vZmZzZXQgPSAoc3RydWN0IGF1Z21lbnRlZF9hcmcgKikoKHZvaWQgKilcXHUwMDI2cGF5bG9hZC1cXHUwMDNlYXVnX2FyZ3MgKyBvZmZzZXQpO1xcbitcXG4rXFx0aWYgKHNpemUgPT0gMSkgeyAvKiBzdHJpbmcgKi9cXG4rXFx0XFx0YXVnX3NpemUgPSBicGZfcHJvYmVfcmVhZF91c2VyX3N0cihwYXlsb2FkX29mZnNldC1cXHUwMDNldmFsdWUsIHZhbHVlX3NpemUsIGFyZyk7XFxuK1xcdFxcdC8qIG1pbmltdW0gb2YgMCB0byBwYXNzIHRoZSB2ZXJpZmllciAqL1xcbitcXHRcXHRpZiAoYXVnX3NpemUgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRhdWdfc2l6ZSA9IDA7XFxuK1xcbitcXHRcXHRhdWdtZW50ZWQgPSB0cnVlO1xcbitcXHR9IGVsc2UgaWYgKHNpemUgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHNpemUgXFx1MDAzYz0gdmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi9cXG4rXFx0XFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKHBheWxvYWRfb2Zmc2V0LVxcdTAwM2V2YWx1ZSwgc2l6ZSwgYXJnKSlcXG4rXFx0XFx0XFx0YXVnbWVudGVkID0gdHJ1ZTtcXG4rXFx0fSBlbHNlIGlmIChzaXplIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBzaXplIFxcdTAwM2U9IC02KSB7IC8qIGJ1ZmZlciAqL1xcbitcXHRcXHRpbmRleCA9IC0oc2l6ZSArIDEpO1xcbitcXHRcXHRiYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlIFxcdTAwMjY9IDcgdHJpY2suXFxuK1xcdFxcdGluZGV4IFxcdTAwMjY9IDc7XFx0ICAgIC8vIFNhdGlzZnkgdGhlIGJvdW5kcyBjaGVja2luZyB3aXRoIHRoZSB2ZXJpZmllciBpbiBzb21lIGtlcm5lbHMuXFxuK1xcdFxcdGF1Z19zaXplID0gYXJncy1cXHUwMDNlYXJnc1tpbmRleF0gXFx1MDAzZSBUUkFDRV9BVUdfTUFYX0JVRiA/IFRSQUNFX0FVR19NQVhfQlVGIDogYXJncy1cXHUwMDNlYXJnc1tpbmRleF07XFxuK1xcbitcXHRcXHRpZiAoYXVnX3NpemUgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdFxcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcihwYXlsb2FkX29mZnNldC1cXHUwMDNldmFsdWUsIGF1Z19zaXplLCBhcmcpKVxcbitcXHRcXHRcXHRcXHRhdWdtZW50ZWQgPSB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEF1Z21lbnRlZCBkYXRhIHNpemUgaXMgbGltaXRlZCB0byBzaXplb2YoYXVnbWVudGVkX2FyZy1cXHUwMDNldW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqL1xcbitcXHRpZiAoYXVnX3NpemUgXFx1MDAzZSB2YWx1ZV9zaXplKVxcbitcXHRcXHRhdWdfc2l6ZSA9IHZhbHVlX3NpemU7XFxuK1xcbitcXHQvKiB3cml0ZSBkYXRhIHRvIHBheWxvYWQgKi9cXG4rXFx0aWYgKGF1Z21lbnRlZCkge1xcbitcXHRcXHRpbnQgd3JpdHRlbiA9IG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSkgKyBhdWdfc2l6ZTtcXG4rXFxuK1xcdFxcdGlmICh3cml0dGVuIFxcdTAwM2MgMCB8fCB3cml0dGVuIFxcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0XFx0cGF5bG9hZF9vZmZzZXQtXFx1MDAzZXNpemUgPSBhdWdfc2l6ZTtcXG4rXFx0XFx0cmV0dXJuIHdyaXR0ZW47XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGF1Z21lbnRfc3lzX2VudGVyKHZvaWQgKmN0eCwgc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncylcXG4ge1xcbi1cXHRib29sIGF1Z21lbnRlZCwgZG9fb3V0cHV0ID0gZmFsc2U7XFxuLVxcdGludCB6ZXJvID0gMCwgaW5kZXgsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTtcXG4rXFx0Ym9vbCBkb19vdXRwdXQgPSBmYWxzZTtcXG4rXFx0aW50IGksIHplcm8gPSAwLCB3cml0dGVuO1xcbiBcXHR1NjQgb3V0cHV0ID0gMDsgLyogaGFzIHRvIGJlIHU2NCwgb3RoZXJ3aXNlIGl0IHdvbid0IHBhc3MgdGhlIHZlcmlmaWVyICovXFxuLVxcdHM2NCBhdWdfc2l6ZSwgc2l6ZTtcXG4gXFx0dW5zaWduZWQgaW50IG5yLCAqYmVhdXR5X21hcDtcXG4gXFx0c3RydWN0IGJlYXV0eV9wYXlsb2FkX2VudGVyICpwYXlsb2FkO1xcbi1cXHR2b2lkICphcmcsICpwYXlsb2FkX29mZnNldDtcXG4gXFxuIFxcdC8qIGZhbGwgYmFjayB0byBkbyBwcmVkZWZpbmVkIHRhaWwgY2FsbCAqL1xcbiBcXHRpZiAoYXJncyA9PSBOVUxMKVxcbkBAIC00NDksNyArNTIyLDYgQEAgc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpXFxuIFxcbiBcXHQvKiBzZXQgdXAgcGF5bG9hZCBmb3Igb3V0cHV0ICovXFxuIFxcdHBheWxvYWQgICAgICAgID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2YmVhdXR5X3BheWxvYWRfZW50ZXJfbWFwLCBcXHUwMDI2emVybyk7XFxuLVxcdHBheWxvYWRfb2Zmc2V0ID0gKHZvaWQgKilcXHUwMDI2cGF5bG9hZC1cXHUwMDNlYXVnX2FyZ3M7XFxuIFxcbiBcXHRpZiAoYmVhdXR5X21hcCA9PSBOVUxMIHx8IHBheWxvYWQgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIDE7XFxuQEAgLTQ1Nyw2MSArNTI5LDMwIEBAIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKVxcbiBcXHQvKiBjb3B5IHRoZSBzeXNfZW50ZXIgaGVhZGVyLCB3aGljaCBoYXMgdGhlIHN5c2NhbGxfbnIgKi9cXG4gXFx0X19idWlsdGluX21lbWNweShcXHUwMDI2cGF5bG9hZC1cXHUwMDNlYXJncywgYXJncywgc2l6ZW9mKHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MpKTtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIERldGVybWluZSB3aGF0IHR5cGUgb2YgYXJndW1lbnQgYW5kIGhvdyBtYW55IGJ5dGVzIHRvIHJlYWQgZnJvbSB1c2VyIHNwYWNlLCB1c2luZyB0aGVcXG4tXFx0ICogdmFsdWUgaW4gdGhlIGJlYXV0eV9tYXAuIFRoaXMgaXMgdGhlIHJlbGF0aW9uIG9mIHBhcmFtZXRlciB0eXBlIGFuZCBpdHMgY29ycmVzcG9uZGluZ1xcbi1cXHQgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5IG1hcCwgYW5kIGhvdyBtYW55IGJ5dGVzIHdlIHJlYWQgZXZlbnR1YWxseTpcXG4tXFx0ICpcXG4tXFx0ICogc3RyaW5nOiAxXFx0XFx0XFx0ICAgICAgLVxcdTAwM2Ugc2l6ZSBvZiBzdHJpbmdcXG4tXFx0ICogc3RydWN0OiBzaXplIG9mIHN0cnVjdFxcdCAgICAgIC1cXHUwMDNlIHNpemUgb2Ygc3RydWN0XFxuLVxcdCAqIGJ1ZmZlcjogLTEgKiAoaW5kZXggb2YgcGFpcmVkIGxlbikgLVxcdTAwM2UgdmFsdWUgb2YgcGFpcmVkIGxlbiAobWF4aW11bTogVFJBQ0VfQVVHX01BWF9CVUYpXFxuLVxcdCAqL1xcbi1cXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIDY7IGkrKykge1xcbi1cXHRcXHRhcmcgPSAodm9pZCAqKWFyZ3MtXFx1MDAzZWFyZ3NbaV07XFxuLVxcdFxcdGF1Z21lbnRlZCA9IGZhbHNlO1xcbi1cXHRcXHRzaXplID0gYmVhdXR5X21hcFtpXTtcXG4tXFx0XFx0YXVnX3NpemUgPSBzaXplOyAvKiBzaXplIG9mIHRoZSBhdWdtZW50ZWQgZGF0YSByZWFkIGZyb20gdXNlciBzcGFjZSAqL1xcbi1cXG4tXFx0XFx0aWYgKHNpemUgPT0gMCB8fCBhcmcgPT0gTlVMTClcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcbi1cXHRcXHRpZiAoc2l6ZSA9PSAxKSB7IC8qIHN0cmluZyAqL1xcbi1cXHRcXHRcXHRhdWdfc2l6ZSA9IGJwZl9wcm9iZV9yZWFkX3VzZXJfc3RyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXFx1MDAzZXZhbHVlLCB2YWx1ZV9zaXplLCBhcmcpO1xcbi1cXHRcXHRcXHQvKiBtaW5pbXVtIG9mIDAgdG8gcGFzcyB0aGUgdmVyaWZpZXIgKi9cXG4tXFx0XFx0XFx0aWYgKGF1Z19zaXplIFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0XFx0YXVnX3NpemUgPSAwO1xcbi1cXG4tXFx0XFx0XFx0YXVnbWVudGVkID0gdHJ1ZTtcXG4tXFx0XFx0fSBlbHNlIGlmIChzaXplIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBzaXplIFxcdTAwM2M9IHZhbHVlX3NpemUpIHsgLyogc3RydWN0ICovXFxuLVxcdFxcdFxcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVxcdTAwM2V2YWx1ZSwgc2l6ZSwgYXJnKSlcXG4tXFx0XFx0XFx0XFx0YXVnbWVudGVkID0gdHJ1ZTtcXG4tXFx0XFx0fSBlbHNlIGlmICgoaW50KXNpemUgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IHNpemUgXFx1MDAzZT0gLTYpIHsgLyogYnVmZmVyICovXFxuLVxcdFxcdFxcdGluZGV4ID0gLShzaXplICsgMSk7XFxuLVxcdFxcdFxcdGJhcnJpZXJfdmFyKGluZGV4KTsgLy8gUHJldmVudCBjbGFuZyAobm90aWNlZCB3aXRoIHYxOCkgZnJvbSByZW1vdmluZyB0aGUgXFx1MDAyNj0gNyB0cmljay5cXG4tXFx0XFx0XFx0aW5kZXggXFx1MDAyNj0gNztcXHQgICAgLy8gU2F0aXNmeSB0aGUgYm91bmRzIGNoZWNraW5nIHdpdGggdGhlIHZlcmlmaWVyIGluIHNvbWUga2VybmVscy5cXG4tXFx0XFx0XFx0YXVnX3NpemUgPSBhcmdzLVxcdTAwM2VhcmdzW2luZGV4XSBcXHUwMDNlIFRSQUNFX0FVR19NQVhfQlVGID8gVFJBQ0VfQVVHX01BWF9CVUYgOiBhcmdzLVxcdTAwM2VhcmdzW2luZGV4XTtcXG4tXFxuLVxcdFxcdFxcdGlmIChhdWdfc2l6ZSBcXHUwMDNlIDApIHtcXG4tXFx0XFx0XFx0XFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXFx1MDAzZXZhbHVlLCBhdWdfc2l6ZSwgYXJnKSlcXG4tXFx0XFx0XFx0XFx0XFx0YXVnbWVudGVkID0gdHJ1ZTtcXG4rXFx0aWYgKGJwZl9rc3ltX2V4aXN0cyhicGZfaXRlcl9udW1fbmV3KSkge1xcbitcXHRcXHRicGZfZm9yKGksIDAsIDYpIHtcXG4rXFx0XFx0XFx0d3JpdHRlbiA9IGF1Z21lbnRfYXJnKGFyZ3MsIGksIGJlYXV0eV9tYXAsIHBheWxvYWQsIG91dHB1dCk7XFxuK1xcdFxcdFxcdGlmICh3cml0dGVuIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDE7XFxuK1xcdFxcdFxcdGlmICh3cml0dGVuIFxcdTAwM2UgMCkge1xcbitcXHRcXHRcXHRcXHRvdXRwdXQgKz0gd3JpdHRlbjtcXG4rXFx0XFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0XFx0ICogZ3VpZGUgdGhlIHZlcmlmaWVyIHRvIGZvcmdldCByYW5nZSBvZiBgb3V0cHV0YCwgd2hpY2hcXG4rXFx0XFx0XFx0XFx0ICogaGVscHMgdG8gcHJvdmUgY29udmVyZ2VuY2Ugb2YgdGhlIGxvb3BcXG4rXFx0XFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdFxcdG91dHB1dCArPSBaRVJPO1xcbitcXHRcXHRcXHRcXHRkb19vdXRwdXQgPSB0cnVlO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4tXFxuLVxcdFxcdC8qIEF1Z21lbnRlZCBkYXRhIHNpemUgaXMgbGltaXRlZCB0byBzaXplb2YoYXVnbWVudGVkX2FyZy1cXHUwMDNldW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqL1xcbi1cXHRcXHRpZiAoYXVnX3NpemUgXFx1MDAzZSB2YWx1ZV9zaXplKVxcbi1cXHRcXHRcXHRhdWdfc2l6ZSA9IHZhbHVlX3NpemU7XFxuLVxcbi1cXHRcXHQvKiB3cml0ZSBkYXRhIHRvIHBheWxvYWQgKi9cXG4tXFx0XFx0aWYgKGF1Z21lbnRlZCkge1xcbi1cXHRcXHRcXHRpbnQgd3JpdHRlbiA9IG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSkgKyBhdWdfc2l6ZTtcXG4tXFxuLVxcdFxcdFxcdGlmICh3cml0dGVuIFxcdTAwM2MgMCB8fCB3cml0dGVuIFxcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSlcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDY7IGkrKykge1xcbitcXHRcXHRcXHR3cml0dGVuID0gYXVnbWVudF9hcmcoYXJncywgaSwgYmVhdXR5X21hcCwgcGF5bG9hZCwgb3V0cHV0KTtcXG4rXFx0XFx0XFx0aWYgKHdyaXR0ZW4gXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG4tXFxuLVxcdFxcdFxcdCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXFx1MDAzZXNpemUgPSBhdWdfc2l6ZTtcXG4tXFx0XFx0XFx0b3V0cHV0ICs9IHdyaXR0ZW47XFxuLVxcdFxcdFxcdHBheWxvYWRfb2Zmc2V0ICs9IHdyaXR0ZW47XFxuLVxcdFxcdFxcdGRvX291dHB1dCA9IHRydWU7XFxuK1xcdFxcdFxcdGlmICh3cml0dGVuIFxcdTAwM2UgMCkge1xcbitcXHRcXHRcXHRcXHRvdXRwdXQgKz0gd3JpdHRlbjtcXG4rXFx0XFx0XFx0XFx0ZG9fb3V0cHV0ID0gdHJ1ZTtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE3OjUxOjA1LjA1MjYzMDU2MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzOTA3MTA3NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSBCUEYgcHJvZ3JhbSB1c2VkIGludGVybmFsbHkgYnkgdGhlIHVzZXItc3BhY2UgYHBlcmZgIHRvb2wgKGB0b29scy9wZXJmL2ApLiBUaGlzIGNvZGUgaXMgbm90IHBhcnQgb2YgdGhlIGNvcmUga2VybmVsIGltYWdlIGFuZCBpcyBub3QgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBrZXJuZWwgZnV6emluZywgYXMgc3l6a2FsbGVyIGZ1enplcyB0aGUga2VybmVsIHZpYSBzeXNjYWxscyBhbmQgZG9lcyBub3QgZXhlY3V0ZSB1c2VyLXNwYWNlIHV0aWxpdGllcyBsaWtlIGBwZXJmYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjk2MDNmY2FhNTA5NTY0Nzg1OTUwODk2MzcwMDAyMWU4NWE3MDdmZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTc6NTE6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jXG5pbmRleCAyYTZlNjE4NjRlZTAxNS4uMjE1NTE2ZGY1ZDJhMzggMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY1xuKysrIGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNcbkBAIC00MjksMTUgKzQyOSw4OCBAQCBzdGF0aWMgYm9vbCBwaWRfZmlsdGVyX19oYXMoc3RydWN0IHBpZHNfZmlsdGVyZWQgKnBpZHMsIHBpZF90IHBpZClcbiBcdHJldHVybiBicGZfbWFwX2xvb2t1cF9lbGVtKHBpZHMsIFx1MDAyNnBpZCkgIT0gTlVMTDtcbiB9XG4gXG4rdTY0IFpFUk8gPSAwO1xuK1xuKy8qXG4rICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBhcmd1bWVudCBhbmQgaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHVzZXIgc3BhY2UsIHVzaW5nIHRoZVxuKyAqIHZhbHVlIGluIHRoZSBiZWF1dHlfbWFwLiBUaGlzIGlzIHRoZSByZWxhdGlvbiBvZiBwYXJhbWV0ZXIgdHlwZSBhbmQgaXRzIGNvcnJlc3BvbmRpbmdcbisgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5IG1hcCwgYW5kIGhvdyBtYW55IGJ5dGVzIHdlIHJlYWQgZXZlbnR1YWxseTpcbisgKlxuKyAqIHN0cmluZzogMVx0XHRcdCAgICAgIC1cdTAwM2Ugc2l6ZSBvZiBzdHJpbmdcbisgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0XHQgICAgICAtXHUwMDNlIHNpemUgb2Ygc3RydWN0XG4rICogYnVmZmVyOiAtMSAqIChpbmRleCBvZiBwYWlyZWQgbGVuKSAtXHUwMDNlIHZhbHVlIG9mIHBhaXJlZCBsZW4gKG1heGltdW06IFRSQUNFX0FVR19NQVhfQlVGKVxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGF1Z21lbnRfYXJnKHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MsIGludCBpLFxuK1x0XHRcdCAgICAgIHVuc2lnbmVkIGludCAqYmVhdXR5X21hcCxcbitcdFx0XHQgICAgICBzdHJ1Y3QgYmVhdXR5X3BheWxvYWRfZW50ZXIgKnBheWxvYWQsIHU2NCBvZmZzZXQpXG4re1xuK1x0aW50IGluZGV4LCBzaXplLCB2YWx1ZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSAtIG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSk7XG4rXHRzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqcGF5bG9hZF9vZmZzZXQ7XG4rXHRzNjQgYXVnX3NpemU7XG4rXHRib29sIGF1Z21lbnRlZDtcbitcdHZvaWQgKmFyZztcbitcbitcdGFyZyA9ICh2b2lkICopYXJncy1cdTAwM2VhcmdzW2ldO1xuK1x0YXVnbWVudGVkID0gZmFsc2U7XG4rXHRzaXplID0gYmVhdXR5X21hcFtpXTtcbitcdGF1Z19zaXplID0gc2l6ZTsgLyogc2l6ZSBvZiB0aGUgYXVnbWVudGVkIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgKi9cbitcbitcdGlmIChzaXplID09IDAgfHwgYXJnID09IE5VTEwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogYm91bmRzIGNoZWNrIGZvciB0aGUgdmVyaWZpZXIgKi9cbitcdGlmIChvZmZzZXQgXHUwMDNlIHNpemVvZihwYXlsb2FkLVx1MDAzZWF1Z19hcmdzKSAtIHNpemVvZihwYXlsb2FkLVx1MDAzZWF1Z19hcmdzWzBdKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0YmFycmllcl92YXIob2Zmc2V0KTtcbitcdHBheWxvYWRfb2Zmc2V0ID0gKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopKCh2b2lkICopXHUwMDI2cGF5bG9hZC1cdTAwM2VhdWdfYXJncyArIG9mZnNldCk7XG4rXG4rXHRpZiAoc2l6ZSA9PSAxKSB7IC8qIHN0cmluZyAqL1xuK1x0XHRhdWdfc2l6ZSA9IGJwZl9wcm9iZV9yZWFkX3VzZXJfc3RyKHBheWxvYWRfb2Zmc2V0LVx1MDAzZXZhbHVlLCB2YWx1ZV9zaXplLCBhcmcpO1xuK1x0XHQvKiBtaW5pbXVtIG9mIDAgdG8gcGFzcyB0aGUgdmVyaWZpZXIgKi9cbitcdFx0aWYgKGF1Z19zaXplIFx1MDAzYyAwKVxuK1x0XHRcdGF1Z19zaXplID0gMDtcbitcbitcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbitcdH0gZWxzZSBpZiAoc2l6ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2M9IHZhbHVlX3NpemUpIHsgLyogc3RydWN0ICovXG4rXHRcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcihwYXlsb2FkX29mZnNldC1cdTAwM2V2YWx1ZSwgc2l6ZSwgYXJnKSlcbitcdFx0XHRhdWdtZW50ZWQgPSB0cnVlO1xuK1x0fSBlbHNlIGlmIChzaXplIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzZT0gLTYpIHsgLyogYnVmZmVyICovXG4rXHRcdGluZGV4ID0gLShzaXplICsgMSk7XG4rXHRcdGJhcnJpZXJfdmFyKGluZGV4KTsgLy8gUHJldmVudCBjbGFuZyAobm90aWNlZCB3aXRoIHYxOCkgZnJvbSByZW1vdmluZyB0aGUgXHUwMDI2PSA3IHRyaWNrLlxuK1x0XHRpbmRleCBcdTAwMjY9IDc7XHQgICAgLy8gU2F0aXNmeSB0aGUgYm91bmRzIGNoZWNraW5nIHdpdGggdGhlIHZlcmlmaWVyIGluIHNvbWUga2VybmVscy5cbitcdFx0YXVnX3NpemUgPSBhcmdzLVx1MDAzZWFyZ3NbaW5kZXhdIFx1MDAzZSBUUkFDRV9BVUdfTUFYX0JVRiA/IFRSQUNFX0FVR19NQVhfQlVGIDogYXJncy1cdTAwM2VhcmdzW2luZGV4XTtcbitcbitcdFx0aWYgKGF1Z19zaXplIFx1MDAzZSAwKSB7XG4rXHRcdFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKHBheWxvYWRfb2Zmc2V0LVx1MDAzZXZhbHVlLCBhdWdfc2l6ZSwgYXJnKSlcbitcdFx0XHRcdGF1Z21lbnRlZCA9IHRydWU7XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIEF1Z21lbnRlZCBkYXRhIHNpemUgaXMgbGltaXRlZCB0byBzaXplb2YoYXVnbWVudGVkX2FyZy1cdTAwM2V1bm5hbWVkIHVuaW9uIHdpdGggdmFsdWUgZmllbGQpICovXG4rXHRpZiAoYXVnX3NpemUgXHUwMDNlIHZhbHVlX3NpemUpXG4rXHRcdGF1Z19zaXplID0gdmFsdWVfc2l6ZTtcbitcbitcdC8qIHdyaXRlIGRhdGEgdG8gcGF5bG9hZCAqL1xuK1x0aWYgKGF1Z21lbnRlZCkge1xuK1x0XHRpbnQgd3JpdHRlbiA9IG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSkgKyBhdWdfc2l6ZTtcbitcbitcdFx0aWYgKHdyaXR0ZW4gXHUwMDNjIDAgfHwgd3JpdHRlbiBcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSlcbitcdFx0XHRyZXR1cm4gLTE7XG4rXG4rXHRcdHBheWxvYWRfb2Zmc2V0LVx1MDAzZXNpemUgPSBhdWdfc2l6ZTtcbitcdFx0cmV0dXJuIHdyaXR0ZW47XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpXG4ge1xuLVx0Ym9vbCBhdWdtZW50ZWQsIGRvX291dHB1dCA9IGZhbHNlO1xuLVx0aW50IHplcm8gPSAwLCBpbmRleCwgdmFsdWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykgLSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpO1xuK1x0Ym9vbCBkb19vdXRwdXQgPSBmYWxzZTtcbitcdGludCBpLCB6ZXJvID0gMCwgd3JpdHRlbjtcbiBcdHU2NCBvdXRwdXQgPSAwOyAvKiBoYXMgdG8gYmUgdTY0LCBvdGhlcndpc2UgaXQgd29uJ3QgcGFzcyB0aGUgdmVyaWZpZXIgKi9cbi1cdHM2NCBhdWdfc2l6ZSwgc2l6ZTtcbiBcdHVuc2lnbmVkIGludCBuciwgKmJlYXV0eV9tYXA7XG4gXHRzdHJ1Y3QgYmVhdXR5X3BheWxvYWRfZW50ZXIgKnBheWxvYWQ7XG4tXHR2b2lkICphcmcsICpwYXlsb2FkX29mZnNldDtcbiBcbiBcdC8qIGZhbGwgYmFjayB0byBkbyBwcmVkZWZpbmVkIHRhaWwgY2FsbCAqL1xuIFx0aWYgKGFyZ3MgPT0gTlVMTClcbkBAIC00NDksNyArNTIyLDYgQEAgc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpXG4gXG4gXHQvKiBzZXQgdXAgcGF5bG9hZCBmb3Igb3V0cHV0ICovXG4gXHRwYXlsb2FkICAgICAgICA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2YmVhdXR5X3BheWxvYWRfZW50ZXJfbWFwLCBcdTAwMjZ6ZXJvKTtcbi1cdHBheWxvYWRfb2Zmc2V0ID0gKHZvaWQgKilcdTAwMjZwYXlsb2FkLVx1MDAzZWF1Z19hcmdzO1xuIFxuIFx0aWYgKGJlYXV0eV9tYXAgPT0gTlVMTCB8fCBwYXlsb2FkID09IE5VTEwpXG4gXHRcdHJldHVybiAxO1xuQEAgLTQ1Nyw2MSArNTI5LDMwIEBAIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKVxuIFx0LyogY29weSB0aGUgc3lzX2VudGVyIGhlYWRlciwgd2hpY2ggaGFzIHRoZSBzeXNjYWxsX25yICovXG4gXHRfX2J1aWx0aW5fbWVtY3B5KFx1MDAyNnBheWxvYWQtXHUwMDNlYXJncywgYXJncywgc2l6ZW9mKHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MpKTtcbiBcbi1cdC8qXG4tXHQgKiBEZXRlcm1pbmUgd2hhdCB0eXBlIG9mIGFyZ3VtZW50IGFuZCBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gdXNlciBzcGFjZSwgdXNpbmcgdGhlXG4tXHQgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5X21hcC4gVGhpcyBpcyB0aGUgcmVsYXRpb24gb2YgcGFyYW1ldGVyIHR5cGUgYW5kIGl0cyBjb3JyZXNwb25kaW5nXG4tXHQgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5IG1hcCwgYW5kIGhvdyBtYW55IGJ5dGVzIHdlIHJlYWQgZXZlbnR1YWxseTpcbi1cdCAqXG4tXHQgKiBzdHJpbmc6IDFcdFx0XHQgICAgICAtXHUwMDNlIHNpemUgb2Ygc3RyaW5nXG4tXHQgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0XHQgICAgICAtXHUwMDNlIHNpemUgb2Ygc3RydWN0XG4tXHQgKiBidWZmZXI6IC0xICogKGluZGV4IG9mIHBhaXJlZCBsZW4pIC1cdTAwM2UgdmFsdWUgb2YgcGFpcmVkIGxlbiAobWF4aW11bTogVFJBQ0VfQVVHX01BWF9CVUYpXG4tXHQgKi9cbi1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyA2OyBpKyspIHtcbi1cdFx0YXJnID0gKHZvaWQgKilhcmdzLVx1MDAzZWFyZ3NbaV07XG4tXHRcdGF1Z21lbnRlZCA9IGZhbHNlO1xuLVx0XHRzaXplID0gYmVhdXR5X21hcFtpXTtcbi1cdFx0YXVnX3NpemUgPSBzaXplOyAvKiBzaXplIG9mIHRoZSBhdWdtZW50ZWQgZGF0YSByZWFkIGZyb20gdXNlciBzcGFjZSAqL1xuLVxuLVx0XHRpZiAoc2l6ZSA9PSAwIHx8IGFyZyA9PSBOVUxMKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRpZiAoc2l6ZSA9PSAxKSB7IC8qIHN0cmluZyAqL1xuLVx0XHRcdGF1Z19zaXplID0gYnBmX3Byb2JlX3JlYWRfdXNlcl9zdHIoKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cdTAwM2V2YWx1ZSwgdmFsdWVfc2l6ZSwgYXJnKTtcbi1cdFx0XHQvKiBtaW5pbXVtIG9mIDAgdG8gcGFzcyB0aGUgdmVyaWZpZXIgKi9cbi1cdFx0XHRpZiAoYXVnX3NpemUgXHUwMDNjIDApXG4tXHRcdFx0XHRhdWdfc2l6ZSA9IDA7XG4tXG4tXHRcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIGlmIChzaXplIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzYz0gdmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi9cbi1cdFx0XHRpZiAoIWJwZl9wcm9iZV9yZWFkX3VzZXIoKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cdTAwM2V2YWx1ZSwgc2l6ZSwgYXJnKSlcbi1cdFx0XHRcdGF1Z21lbnRlZCA9IHRydWU7XG4tXHRcdH0gZWxzZSBpZiAoKGludClzaXplIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzZT0gLTYpIHsgLyogYnVmZmVyICovXG4tXHRcdFx0aW5kZXggPSAtKHNpemUgKyAxKTtcbi1cdFx0XHRiYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlIFx1MDAyNj0gNyB0cmljay5cbi1cdFx0XHRpbmRleCBcdTAwMjY9IDc7XHQgICAgLy8gU2F0aXNmeSB0aGUgYm91bmRzIGNoZWNraW5nIHdpdGggdGhlIHZlcmlmaWVyIGluIHNvbWUga2VybmVscy5cbi1cdFx0XHRhdWdfc2l6ZSA9IGFyZ3MtXHUwMDNlYXJnc1tpbmRleF0gXHUwMDNlIFRSQUNFX0FVR19NQVhfQlVGID8gVFJBQ0VfQVVHX01BWF9CVUYgOiBhcmdzLVx1MDAzZWFyZ3NbaW5kZXhdO1xuLVxuLVx0XHRcdGlmIChhdWdfc2l6ZSBcdTAwM2UgMCkge1xuLVx0XHRcdFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNldmFsdWUsIGF1Z19zaXplLCBhcmcpKVxuLVx0XHRcdFx0XHRhdWdtZW50ZWQgPSB0cnVlO1xuK1x0aWYgKGJwZl9rc3ltX2V4aXN0cyhicGZfaXRlcl9udW1fbmV3KSkge1xuK1x0XHRicGZfZm9yKGksIDAsIDYpIHtcbitcdFx0XHR3cml0dGVuID0gYXVnbWVudF9hcmcoYXJncywgaSwgYmVhdXR5X21hcCwgcGF5bG9hZCwgb3V0cHV0KTtcbitcdFx0XHRpZiAod3JpdHRlbiBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiAxO1xuK1x0XHRcdGlmICh3cml0dGVuIFx1MDAzZSAwKSB7XG4rXHRcdFx0XHRvdXRwdXQgKz0gd3JpdHRlbjtcbitcdFx0XHRcdC8qXG4rXHRcdFx0XHQgKiBndWlkZSB0aGUgdmVyaWZpZXIgdG8gZm9yZ2V0IHJhbmdlIG9mIGBvdXRwdXRgLCB3aGljaFxuK1x0XHRcdFx0ICogaGVscHMgdG8gcHJvdmUgY29udmVyZ2VuY2Ugb2YgdGhlIGxvb3BcbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0b3V0cHV0ICs9IFpFUk87XG4rXHRcdFx0XHRkb19vdXRwdXQgPSB0cnVlO1xuIFx0XHRcdH1cbiBcdFx0fVxuLVxuLVx0XHQvKiBBdWdtZW50ZWQgZGF0YSBzaXplIGlzIGxpbWl0ZWQgdG8gc2l6ZW9mKGF1Z21lbnRlZF9hcmctXHUwMDNldW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqL1xuLVx0XHRpZiAoYXVnX3NpemUgXHUwMDNlIHZhbHVlX3NpemUpXG4tXHRcdFx0YXVnX3NpemUgPSB2YWx1ZV9zaXplO1xuLVxuLVx0XHQvKiB3cml0ZSBkYXRhIHRvIHBheWxvYWQgKi9cbi1cdFx0aWYgKGF1Z21lbnRlZCkge1xuLVx0XHRcdGludCB3cml0dGVuID0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKSArIGF1Z19zaXplO1xuLVxuLVx0XHRcdGlmICh3cml0dGVuIFx1MDAzYyAwIHx8IHdyaXR0ZW4gXHUwMDNlIHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykpXG4rXHR9IGVsc2Uge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA2OyBpKyspIHtcbitcdFx0XHR3cml0dGVuID0gYXVnbWVudF9hcmcoYXJncywgaSwgYmVhdXR5X21hcCwgcGF5bG9hZCwgb3V0cHV0KTtcbitcdFx0XHRpZiAod3JpdHRlbiBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiAxO1xuLVxuLVx0XHRcdCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNlc2l6ZSA9IGF1Z19zaXplO1xuLVx0XHRcdG91dHB1dCArPSB3cml0dGVuO1xuLVx0XHRcdHBheWxvYWRfb2Zmc2V0ICs9IHdyaXR0ZW47XG4tXHRcdFx0ZG9fb3V0cHV0ID0gdHJ1ZTtcbitcdFx0XHRpZiAod3JpdHRlbiBcdTAwM2UgMCkge1xuK1x0XHRcdFx0b3V0cHV0ICs9IHdyaXR0ZW47XG4rXHRcdFx0XHRkb19vdXRwdXQgPSB0cnVlO1xuK1x0XHRcdH1cbiBcdFx0fVxuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTc6NTE6MDUuMDUyNjMyOTUyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzOTA2NzY3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIGB0b29scy9wZXJmYCBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGl0J3MgbW9kaWZ5aW5nIGB0b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY2AuIFRoaXMgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmssIFwiQlBGIHByb2dyYW0hXCIgYW5kIHRoYXQgdGhpcyBpcyB1c2VkIGJ5IHRoZSBgcGVyZmAgdG9vbC4gTm93LCBgcGVyZmAgaXMgdXNlci1zcGFjZSwgYWx0aG91Z2ggaXQgZG9lcyB1c2UgQlBGIHNrZWxldG9ucyBhbmQgbG9hZHMgcHJvZ3JhbXMgaW50byB0aGUga2VybmVsLiBUaGUga2V5IGRpc3RpbmN0aW9uIGhlcmUgaXMgdGhhdCB0aGlzIHNwZWNpZmljIEJQRiBjb2RlLCB3aGlsZSBrZXJuZWwtYm91bmQgd2hlbiBydW5uaW5nIGBwZXJmYCwgKmlzbid0KiBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbCBpbWFnZSBpdHNlbGYuIEl0J3Mgc291cmNlIGNvZGUgd2l0aGluIHRoZSBgcGVyZmAgdG9vbC5cblxuTXkgaW50ZXJuYWwgY2hlY2tsaXN0IGltbWVkaWF0ZWx5IGtpY2tzIGluLiBJcyB0aGlzIHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nPyBUaGUgdXN1YWwgcnVsZXMgYXBwbHk6IERvY3VtZW50YXRpb24gY2hhbmdlcywgY29tbWVudHMsIGRlY29yYXRpdmUgbG9nZ2luZy4uLiB0aGF0J3MgYSBuby1nby4gQnV0IEkgYWxzbyBuZWVkIHRvIHRoaW5rIHNwZWNpZmljYWxseSBhYm91dCBzeXprYWxsZXIuIERvZXMgdGhpcyBwYXRjaCBjaGFuZ2Ugc29tZXRoaW5nIHRoYXQgaXMgdG91Y2hlZCBieSBzeXprYWxsZXI/XG5cblRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gIFN5emthbGxlciBmb2N1c2VzIG9uIHRoZSAqa2VybmVsKi4gIFdoaWxlIHN5emthbGxlciAqY2FuKiBmdXp6IEJQRiBwcm9ncmFtcywgaXQgZG9lc24ndCBkbyBzbyBieSBydW5uaW5nIGBwZXJmYCBvciBieSB1c2luZyBCUEYgY29kZSBwcm92aWRlZCB3aXRoIGl0LiBTeXprYWxsZXIncyBwdXJwb3NlIGlzIHRvIGZ1enogdGhlIGtlcm5lbCB2aWEgc3lzY2FsbHMuIFNvLCB0aGUgcXVlc3Rpb24gYmVjb21lcywgZG9lcyB0aGlzIHBhdGNoIG1vZGlmeSBzb21ldGhpbmcgdGhhdCBjYW4gYmUgcmVhY2hlZCBieSBhIHN5emthbGxlciBzeXNjYWxsP1xuXG5MZXQgbWUgc3RlcCBiYWNrIGFuZCBtYWtlIHN1cmUuIGB0b29scy9wZXJmYCBpcyBhIHVzZXItc3BhY2UgdG9vbC4gU3l6a2FsbGVyIGRvZXNuJ3QgZGlyZWN0bHkgcnVuIHVzZXItc3BhY2UgdG9vbHMuIEl0IGdlbmVyYXRlcyBpdHMgb3duIEJQRiBwcm9ncmFtcy4gIEl0IGRvZXNuJ3QgdXNlIHRoZSBCUEYgY29kZSBwcm92aWRlZCB3aXRoIHRoZSBgcGVyZmAgdG9vbC4gU28sIHRoZSBjb2RlIHdpdGhpbiB0aGlzIHBhdGNoIHdvbid0IGJlIGV4ZWN1dGVkIGRpcmVjdGx5IGJ5IHN5emthbGxlci5cblxuQW5kIHdoYXQgZG9lcyB0aGlzIHBhcnRpY3VsYXIgcGF0Y2ggYWN0dWFsbHkgKmRvKj8gSXQncyByZWZhY3RvcmluZyBgYXVnbWVudF9zeXNfZW50ZXJgIHVzaW5nIGBicGZfZm9yYC4gT2theSwgQlBGIGl0ZXJhdG9ycywgZXh0cmFjdGluZyBgYXVnbWVudF9hcmdgLiAgSXQgZG9lc24ndCBzZWVtIGxpa2UgdGhlIGNvcmUga2VybmVsIGNvZGUgY2hhbmdlcy5cblxuU28sIEkgbmVlZCB0byBjaGVjayB0byBiZSBzdXJlLi4uIEknbSBjb25maWRlbnQgc3l6a2FsbGVyIGlzIG5vdCBnb2luZyB0byBmdXp6IGB0b29scy9wZXJmYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoaXMgaXNuJ3QgdG91Y2hpbmcgYSBrZXJuZWwgaW50ZXJmYWNlIGRpcmVjdGx5LiAgSSBjb25maXJtIHRoYXQgdGhlIGRpZmYgaXMgKm9ubHkqIHdpdGhpbiBgdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNgLiBUaGlzIGNvbmZpcm1zIGl0J3MgYSBCUEYgcHJvZ3JhbSBmb3IgYHBlcmYgdHJhY2VgLiAgU2luY2UgaXQncyBwYXJ0IG9mIHRoZSBgcGVyZmAgdG9vbCwgYW5kIGl0J3Mgbm90IHBhcnQgb2YgdGhlIGtlcm5lbCBpbWFnZSB0aGF0IHN5emthbGxlciBmdXp6ZXMuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgaXMgbm90IGdvaW5nIHRvIGJlIGZ1enplZCBieSBzeXprYWxsZXIuXG5cbk9rYXksIG15IGNvbmNsdXNpb246IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIGNoYW5nZSBpcyBsaW1pdGVkIHRvIGEgQlBGIHByb2dyYW0gdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSB1c2VyLXNwYWNlIGBwZXJmYCB0b29sLiBTeXprYWxsZXIgZm9jdXNlcyBvbiBmdXp6aW5nIHRoZSBrZXJuZWwsIGFuZCB0aGlzIGNoYW5nZSBpcyBub3QgcGFydCBvZiB0aGUga2VybmVsJ3MgY29yZSBpbWFnZSBhbmQgaXNuJ3QgYWNjZXNzaWJsZSB2aWEgdGhlIHN5c2NhbGxzIHRoYXQgc3l6a2FsbGVyIHV0aWxpemVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDc3LCJPdXRwdXRUb2tlbnMiOjk5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTc6NTE6MTYuNDQzMzEzMTMzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSB1c2VyLXNwYWNlIGBwZXJmYCB0b29sIChgdG9vbHMvcGVyZi9gKS4gVGhpcyBjb2RlIGlzIG5vdCBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbCBpbWFnZSBhbmQgaXMgbm90IHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQga2VybmVsIGZ1enppbmcsIGFzIHN5emthbGxlciBmdXp6ZXMgdGhlIGtlcm5lbCB2aWEgc3lzY2FsbHMgYW5kIGRvZXMgbm90IGV4ZWN1dGUgdXNlci1zcGFjZSB1dGlsaXRpZXMgbGlrZSBgcGVyZmAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSB1c2VyLXNwYWNlIGBwZXJmYCB0b29sIChgdG9vbHMvcGVyZi9gKS4gVGhpcyBjb2RlIGlzIG5vdCBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbCBpbWFnZSBhbmQgaXMgbm90IHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQga2VybmVsIGZ1enppbmcsIGFzIHN5emthbGxlciBmdXp6ZXMgdGhlIGtlcm5lbCB2aWEgc3lzY2FsbHMgYW5kIGRvZXMgbm90IGV4ZWN1dGUgdXNlci1zcGFjZSB1dGlsaXRpZXMgbGlrZSBgcGVyZmAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4jn4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-06 17:09:36 +0000 UTC FinishedAt: 2026-07-06 17:51:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE3OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSBCUEYgcHJvZ3JhbSB1c2VkIGludGVybmFsbHkgYnkgdGhlIHVzZXItc3BhY2UgYHBlcmZgIHRvb2wgKGB0b29scy9wZXJmL2ApLiBUaGlzIGNvZGUgaXMgbm90IHBhcnQgb2YgdGhlIGNvcmUga2VybmVsIGltYWdlIGFuZCBpcyBub3QgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBrZXJuZWwgZnV6emluZywgYXMgc3l6a2FsbGVyIGZ1enplcyB0aGUga2VybmVsIHZpYSBzeXNjYWxscyBhbmQgZG9lcyBub3QgZXhlY3V0ZSB1c2VyLXNwYWNlIHV0aWxpdGllcyBsaWtlIGBwZXJmYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTc6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2OTYwM2ZjYWE1MDk1NjQ3ODU5NTA4OTYzNzAwMDIxZTg1YTcwN2ZlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgNiAxNzo1MTowMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jXG5pbmRleCAyYTZlNjE4NjRlZTAxNS4uMjE1NTE2ZGY1ZDJhMzggMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNcbkBAIC00MjksMTUgJiM0Mzs0MjksODggQEAgc3RhdGljIGJvb2wgcGlkX2ZpbHRlcl9faGFzKHN0cnVjdCBwaWRzX2ZpbHRlcmVkICpwaWRzLCBwaWRfdCBwaWQpXG4gXHRyZXR1cm4gYnBmX21hcF9sb29rdXBfZWxlbShwaWRzLCBcdTAwMjZwaWQpICE9IE5VTEw7XG4gfVxuIFxuJiM0Mzt1NjQgWkVSTyA9IDA7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEZXRlcm1pbmUgd2hhdCB0eXBlIG9mIGFyZ3VtZW50IGFuZCBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gdXNlciBzcGFjZSwgdXNpbmcgdGhlXG4mIzQzOyAqIHZhbHVlIGluIHRoZSBiZWF1dHlfbWFwLiBUaGlzIGlzIHRoZSByZWxhdGlvbiBvZiBwYXJhbWV0ZXIgdHlwZSBhbmQgaXRzIGNvcnJlc3BvbmRpbmdcbiYjNDM7ICogdmFsdWUgaW4gdGhlIGJlYXV0eSBtYXAsIGFuZCBob3cgbWFueSBieXRlcyB3ZSByZWFkIGV2ZW50dWFsbHk6XG4mIzQzOyAqXG4mIzQzOyAqIHN0cmluZzogMVx0XHRcdCAgICAgIC1cdTAwM2Ugc2l6ZSBvZiBzdHJpbmdcbiYjNDM7ICogc3RydWN0OiBzaXplIG9mIHN0cnVjdFx0ICAgICAgLVx1MDAzZSBzaXplIG9mIHN0cnVjdFxuJiM0MzsgKiBidWZmZXI6IC0xICogKGluZGV4IG9mIHBhaXJlZCBsZW4pIC1cdTAwM2UgdmFsdWUgb2YgcGFpcmVkIGxlbiAobWF4aW11bTogVFJBQ0VfQVVHX01BWF9CVUYpXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBhdWdtZW50X2FyZyhzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzLCBpbnQgaSxcbiYjNDM7XHRcdFx0ICAgICAgdW5zaWduZWQgaW50ICpiZWF1dHlfbWFwLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgYmVhdXR5X3BheWxvYWRfZW50ZXIgKnBheWxvYWQsIHU2NCBvZmZzZXQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaW5kZXgsIHNpemUsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTtcbiYjNDM7XHRzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqcGF5bG9hZF9vZmZzZXQ7XG4mIzQzO1x0czY0IGF1Z19zaXplO1xuJiM0MztcdGJvb2wgYXVnbWVudGVkO1xuJiM0MztcdHZvaWQgKmFyZztcbiYjNDM7XG4mIzQzO1x0YXJnID0gKHZvaWQgKilhcmdzLVx1MDAzZWFyZ3NbaV07XG4mIzQzO1x0YXVnbWVudGVkID0gZmFsc2U7XG4mIzQzO1x0c2l6ZSA9IGJlYXV0eV9tYXBbaV07XG4mIzQzO1x0YXVnX3NpemUgPSBzaXplOyAvKiBzaXplIG9mIHRoZSBhdWdtZW50ZWQgZGF0YSByZWFkIGZyb20gdXNlciBzcGFjZSAqL1xuJiM0MztcbiYjNDM7XHRpZiAoc2l6ZSA9PSAwIHx8IGFyZyA9PSBOVUxMKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIGJvdW5kcyBjaGVjayBmb3IgdGhlIHZlcmlmaWVyICovXG4mIzQzO1x0aWYgKG9mZnNldCBcdTAwM2Ugc2l6ZW9mKHBheWxvYWQtXHUwMDNlYXVnX2FyZ3MpIC0gc2l6ZW9mKHBheWxvYWQtXHUwMDNlYXVnX2FyZ3NbMF0pKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdGJhcnJpZXJfdmFyKG9mZnNldCk7XG4mIzQzO1x0cGF5bG9hZF9vZmZzZXQgPSAoc3RydWN0IGF1Z21lbnRlZF9hcmcgKikoKHZvaWQgKilcdTAwMjZwYXlsb2FkLVx1MDAzZWF1Z19hcmdzICYjNDM7IG9mZnNldCk7XG4mIzQzO1xuJiM0MztcdGlmIChzaXplID09IDEpIHsgLyogc3RyaW5nICovXG4mIzQzO1x0XHRhdWdfc2l6ZSA9IGJwZl9wcm9iZV9yZWFkX3VzZXJfc3RyKHBheWxvYWRfb2Zmc2V0LVx1MDAzZXZhbHVlLCB2YWx1ZV9zaXplLCBhcmcpO1xuJiM0MztcdFx0LyogbWluaW11bSBvZiAwIHRvIHBhc3MgdGhlIHZlcmlmaWVyICovXG4mIzQzO1x0XHRpZiAoYXVnX3NpemUgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGF1Z19zaXplID0gMDtcbiYjNDM7XG4mIzQzO1x0XHRhdWdtZW50ZWQgPSB0cnVlO1xuJiM0MztcdH0gZWxzZSBpZiAoc2l6ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2M9IHZhbHVlX3NpemUpIHsgLyogc3RydWN0ICovXG4mIzQzO1x0XHRpZiAoIWJwZl9wcm9iZV9yZWFkX3VzZXIocGF5bG9hZF9vZmZzZXQtXHUwMDNldmFsdWUsIHNpemUsIGFyZykpXG4mIzQzO1x0XHRcdGF1Z21lbnRlZCA9IHRydWU7XG4mIzQzO1x0fSBlbHNlIGlmIChzaXplIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzZT0gLTYpIHsgLyogYnVmZmVyICovXG4mIzQzO1x0XHRpbmRleCA9IC0oc2l6ZSAmIzQzOyAxKTtcbiYjNDM7XHRcdGJhcnJpZXJfdmFyKGluZGV4KTsgLy8gUHJldmVudCBjbGFuZyAobm90aWNlZCB3aXRoIHYxOCkgZnJvbSByZW1vdmluZyB0aGUgXHUwMDI2PSA3IHRyaWNrLlxuJiM0MztcdFx0aW5kZXggXHUwMDI2PSA3O1x0ICAgIC8vIFNhdGlzZnkgdGhlIGJvdW5kcyBjaGVja2luZyB3aXRoIHRoZSB2ZXJpZmllciBpbiBzb21lIGtlcm5lbHMuXG4mIzQzO1x0XHRhdWdfc2l6ZSA9IGFyZ3MtXHUwMDNlYXJnc1tpbmRleF0gXHUwMDNlIFRSQUNFX0FVR19NQVhfQlVGID8gVFJBQ0VfQVVHX01BWF9CVUYgOiBhcmdzLVx1MDAzZWFyZ3NbaW5kZXhdO1xuJiM0MztcbiYjNDM7XHRcdGlmIChhdWdfc2l6ZSBcdTAwM2UgMCkge1xuJiM0MztcdFx0XHRpZiAoIWJwZl9wcm9iZV9yZWFkX3VzZXIocGF5bG9hZF9vZmZzZXQtXHUwMDNldmFsdWUsIGF1Z19zaXplLCBhcmcpKVxuJiM0MztcdFx0XHRcdGF1Z21lbnRlZCA9IHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBdWdtZW50ZWQgZGF0YSBzaXplIGlzIGxpbWl0ZWQgdG8gc2l6ZW9mKGF1Z21lbnRlZF9hcmctXHUwMDNldW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqL1xuJiM0MztcdGlmIChhdWdfc2l6ZSBcdTAwM2UgdmFsdWVfc2l6ZSlcbiYjNDM7XHRcdGF1Z19zaXplID0gdmFsdWVfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0Lyogd3JpdGUgZGF0YSB0byBwYXlsb2FkICovXG4mIzQzO1x0aWYgKGF1Z21lbnRlZCkge1xuJiM0MztcdFx0aW50IHdyaXR0ZW4gPSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpICYjNDM7IGF1Z19zaXplO1xuJiM0MztcbiYjNDM7XHRcdGlmICh3cml0dGVuIFx1MDAzYyAwIHx8IHdyaXR0ZW4gXHUwMDNlIHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykpXG4mIzQzO1x0XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0XHRwYXlsb2FkX29mZnNldC1cdTAwM2VzaXplID0gYXVnX3NpemU7XG4mIzQzO1x0XHRyZXR1cm4gd3JpdHRlbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKVxuIHtcbi1cdGJvb2wgYXVnbWVudGVkLCBkb19vdXRwdXQgPSBmYWxzZTtcbi1cdGludCB6ZXJvID0gMCwgaW5kZXgsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTtcbiYjNDM7XHRib29sIGRvX291dHB1dCA9IGZhbHNlO1xuJiM0MztcdGludCBpLCB6ZXJvID0gMCwgd3JpdHRlbjtcbiBcdHU2NCBvdXRwdXQgPSAwOyAvKiBoYXMgdG8gYmUgdTY0LCBvdGhlcndpc2UgaXQgd29uJiMzOTt0IHBhc3MgdGhlIHZlcmlmaWVyICovXG4tXHRzNjQgYXVnX3NpemUsIHNpemU7XG4gXHR1bnNpZ25lZCBpbnQgbnIsICpiZWF1dHlfbWFwO1xuIFx0c3RydWN0IGJlYXV0eV9wYXlsb2FkX2VudGVyICpwYXlsb2FkO1xuLVx0dm9pZCAqYXJnLCAqcGF5bG9hZF9vZmZzZXQ7XG4gXG4gXHQvKiBmYWxsIGJhY2sgdG8gZG8gcHJlZGVmaW5lZCB0YWlsIGNhbGwgKi9cbiBcdGlmIChhcmdzID09IE5VTEwpXG5AQCAtNDQ5LDcgJiM0Mzs1MjIsNiBAQCBzdGF0aWMgaW50IGF1Z21lbnRfc3lzX2VudGVyKHZvaWQgKmN0eCwgc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncylcbiBcbiBcdC8qIHNldCB1cCBwYXlsb2FkIGZvciBvdXRwdXQgKi9cbiBcdHBheWxvYWQgICAgICAgID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZiZWF1dHlfcGF5bG9hZF9lbnRlcl9tYXAsIFx1MDAyNnplcm8pO1xuLVx0cGF5bG9hZF9vZmZzZXQgPSAodm9pZCAqKVx1MDAyNnBheWxvYWQtXHUwMDNlYXVnX2FyZ3M7XG4gXG4gXHRpZiAoYmVhdXR5X21hcCA9PSBOVUxMIHx8IHBheWxvYWQgPT0gTlVMTClcbiBcdFx0cmV0dXJuIDE7XG5AQCAtNDU3LDYxICYjNDM7NTI5LDMwIEBAIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKVxuIFx0LyogY29weSB0aGUgc3lzX2VudGVyIGhlYWRlciwgd2hpY2ggaGFzIHRoZSBzeXNjYWxsX25yICovXG4gXHRfX2J1aWx0aW5fbWVtY3B5KFx1MDAyNnBheWxvYWQtXHUwMDNlYXJncywgYXJncywgc2l6ZW9mKHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MpKTtcbiBcbi1cdC8qXG4tXHQgKiBEZXRlcm1pbmUgd2hhdCB0eXBlIG9mIGFyZ3VtZW50IGFuZCBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gdXNlciBzcGFjZSwgdXNpbmcgdGhlXG4tXHQgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5X21hcC4gVGhpcyBpcyB0aGUgcmVsYXRpb24gb2YgcGFyYW1ldGVyIHR5cGUgYW5kIGl0cyBjb3JyZXNwb25kaW5nXG4tXHQgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5IG1hcCwgYW5kIGhvdyBtYW55IGJ5dGVzIHdlIHJlYWQgZXZlbnR1YWxseTpcbi1cdCAqXG4tXHQgKiBzdHJpbmc6IDFcdFx0XHQgICAgICAtXHUwMDNlIHNpemUgb2Ygc3RyaW5nXG4tXHQgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0XHQgICAgICAtXHUwMDNlIHNpemUgb2Ygc3RydWN0XG4tXHQgKiBidWZmZXI6IC0xICogKGluZGV4IG9mIHBhaXJlZCBsZW4pIC1cdTAwM2UgdmFsdWUgb2YgcGFpcmVkIGxlbiAobWF4aW11bTogVFJBQ0VfQVVHX01BWF9CVUYpXG4tXHQgKi9cbi1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyA2OyBpJiM0MzsmIzQzOykge1xuLVx0XHRhcmcgPSAodm9pZCAqKWFyZ3MtXHUwMDNlYXJnc1tpXTtcbi1cdFx0YXVnbWVudGVkID0gZmFsc2U7XG4tXHRcdHNpemUgPSBiZWF1dHlfbWFwW2ldO1xuLVx0XHRhdWdfc2l6ZSA9IHNpemU7IC8qIHNpemUgb2YgdGhlIGF1Z21lbnRlZCBkYXRhIHJlYWQgZnJvbSB1c2VyIHNwYWNlICovXG4tXG4tXHRcdGlmIChzaXplID09IDAgfHwgYXJnID09IE5VTEwpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGlmIChzaXplID09IDEpIHsgLyogc3RyaW5nICovXG4tXHRcdFx0YXVnX3NpemUgPSBicGZfcHJvYmVfcmVhZF91c2VyX3N0cigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVx1MDAzZXZhbHVlLCB2YWx1ZV9zaXplLCBhcmcpO1xuLVx0XHRcdC8qIG1pbmltdW0gb2YgMCB0byBwYXNzIHRoZSB2ZXJpZmllciAqL1xuLVx0XHRcdGlmIChhdWdfc2l6ZSBcdTAwM2MgMClcbi1cdFx0XHRcdGF1Z19zaXplID0gMDtcbi1cbi1cdFx0XHRhdWdtZW50ZWQgPSB0cnVlO1xuLVx0XHR9IGVsc2UgaWYgKHNpemUgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHNpemUgXHUwMDNjPSB2YWx1ZV9zaXplKSB7IC8qIHN0cnVjdCAqL1xuLVx0XHRcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVx1MDAzZXZhbHVlLCBzaXplLCBhcmcpKVxuLVx0XHRcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIGlmICgoaW50KXNpemUgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IHNpemUgXHUwMDNlPSAtNikgeyAvKiBidWZmZXIgKi9cbi1cdFx0XHRpbmRleCA9IC0oc2l6ZSAmIzQzOyAxKTtcbi1cdFx0XHRiYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlIFx1MDAyNj0gNyB0cmljay5cbi1cdFx0XHRpbmRleCBcdTAwMjY9IDc7XHQgICAgLy8gU2F0aXNmeSB0aGUgYm91bmRzIGNoZWNraW5nIHdpdGggdGhlIHZlcmlmaWVyIGluIHNvbWUga2VybmVscy5cbi1cdFx0XHRhdWdfc2l6ZSA9IGFyZ3MtXHUwMDNlYXJnc1tpbmRleF0gXHUwMDNlIFRSQUNFX0FVR19NQVhfQlVGID8gVFJBQ0VfQVVHX01BWF9CVUYgOiBhcmdzLVx1MDAzZWFyZ3NbaW5kZXhdO1xuLVxuLVx0XHRcdGlmIChhdWdfc2l6ZSBcdTAwM2UgMCkge1xuLVx0XHRcdFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNldmFsdWUsIGF1Z19zaXplLCBhcmcpKVxuLVx0XHRcdFx0XHRhdWdtZW50ZWQgPSB0cnVlO1xuJiM0MztcdGlmIChicGZfa3N5bV9leGlzdHMoYnBmX2l0ZXJfbnVtX25ldykpIHtcbiYjNDM7XHRcdGJwZl9mb3IoaSwgMCwgNikge1xuJiM0MztcdFx0XHR3cml0dGVuID0gYXVnbWVudF9hcmcoYXJncywgaSwgYmVhdXR5X21hcCwgcGF5bG9hZCwgb3V0cHV0KTtcbiYjNDM7XHRcdFx0aWYgKHdyaXR0ZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIDE7XG4mIzQzO1x0XHRcdGlmICh3cml0dGVuIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRcdFx0b3V0cHV0ICYjNDM7PSB3cml0dGVuO1xuJiM0MztcdFx0XHRcdC8qXG4mIzQzO1x0XHRcdFx0ICogZ3VpZGUgdGhlIHZlcmlmaWVyIHRvIGZvcmdldCByYW5nZSBvZiBgb3V0cHV0YCwgd2hpY2hcbiYjNDM7XHRcdFx0XHQgKiBoZWxwcyB0byBwcm92ZSBjb252ZXJnZW5jZSBvZiB0aGUgbG9vcFxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdG91dHB1dCAmIzQzOz0gWkVSTztcbiYjNDM7XHRcdFx0XHRkb19vdXRwdXQgPSB0cnVlO1xuIFx0XHRcdH1cbiBcdFx0fVxuLVxuLVx0XHQvKiBBdWdtZW50ZWQgZGF0YSBzaXplIGlzIGxpbWl0ZWQgdG8gc2l6ZW9mKGF1Z21lbnRlZF9hcmctXHUwMDNldW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqL1xuLVx0XHRpZiAoYXVnX3NpemUgXHUwMDNlIHZhbHVlX3NpemUpXG4tXHRcdFx0YXVnX3NpemUgPSB2YWx1ZV9zaXplO1xuLVxuLVx0XHQvKiB3cml0ZSBkYXRhIHRvIHBheWxvYWQgKi9cbi1cdFx0aWYgKGF1Z21lbnRlZCkge1xuLVx0XHRcdGludCB3cml0dGVuID0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKSAmIzQzOyBhdWdfc2l6ZTtcbi1cbi1cdFx0XHRpZiAod3JpdHRlbiBcdTAwM2MgMCB8fCB3cml0dGVuIFx1MDAzZSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpKVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA2OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHR3cml0dGVuID0gYXVnbWVudF9hcmcoYXJncywgaSwgYmVhdXR5X21hcCwgcGF5bG9hZCwgb3V0cHV0KTtcbiYjNDM7XHRcdFx0aWYgKHdyaXR0ZW4gXHUwMDNjIDApXG4gXHRcdFx0XHRyZXR1cm4gMTtcbi1cbi1cdFx0XHQoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVx1MDAzZXNpemUgPSBhdWdfc2l6ZTtcbi1cdFx0XHRvdXRwdXQgJiM0Mzs9IHdyaXR0ZW47XG4tXHRcdFx0cGF5bG9hZF9vZmZzZXQgJiM0Mzs9IHdyaXR0ZW47XG4tXHRcdFx0ZG9fb3V0cHV0ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0aWYgKHdyaXR0ZW4gXHUwMDNlIDApIHtcbiYjNDM7XHRcdFx0XHRvdXRwdXQgJiM0Mzs9IHdyaXR0ZW47XG4mIzQzO1x0XHRcdFx0ZG9fb3V0cHV0ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTc6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBhIEJQRiBwcm9ncmFtIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgdXNlci1zcGFjZSBgcGVyZmAgdG9vbCAoYHRvb2xzL3BlcmYvYCkuIFRoaXMgY29kZSBpcyBub3QgcGFydCBvZiB0aGUgY29yZSBrZXJuZWwgaW1hZ2UgYW5kIGlzIG5vdCByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGtlcm5lbCBmdXp6aW5nLCBhcyBzeXprYWxsZXIgZnV6emVzIHRoZSBrZXJuZWwgdmlhIHN5c2NhbGxzIGFuZCBkb2VzIG5vdCBleGVjdXRlIHVzZXItc3BhY2UgdXRpbGl0aWVzIGxpa2UgYHBlcmZgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjk2MDNmY2FhNTA5NTY0Nzg1OTUwODk2MzcwMDAyMWU4NWE3MDdmZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDYgMTc6NTE6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jCmluZGV4IDJhNmU2MTg2NGVlMDE1Li4yMTU1MTZkZjVkMmEzOCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmMKQEAgLTQyOSwxNSAmIzQzOzQyOSw4OCBAQCBzdGF0aWMgYm9vbCBwaWRfZmlsdGVyX19oYXMoc3RydWN0IHBpZHNfZmlsdGVyZWQgKnBpZHMsIHBpZF90IHBpZCkKIAlyZXR1cm4gYnBmX21hcF9sb29rdXBfZWxlbShwaWRzLCAmYW1wO3BpZCkgIT0gTlVMTDsKIH0KIAomIzQzO3U2NCBaRVJPID0gMDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIERldGVybWluZSB3aGF0IHR5cGUgb2YgYXJndW1lbnQgYW5kIGhvdyBtYW55IGJ5dGVzIHRvIHJlYWQgZnJvbSB1c2VyIHNwYWNlLCB1c2luZyB0aGUKJiM0MzsgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5X21hcC4gVGhpcyBpcyB0aGUgcmVsYXRpb24gb2YgcGFyYW1ldGVyIHR5cGUgYW5kIGl0cyBjb3JyZXNwb25kaW5nCiYjNDM7ICogdmFsdWUgaW4gdGhlIGJlYXV0eSBtYXAsIGFuZCBob3cgbWFueSBieXRlcyB3ZSByZWFkIGV2ZW50dWFsbHk6CiYjNDM7ICoKJiM0MzsgKiBzdHJpbmc6IDEJCQkgICAgICAtJmd0OyBzaXplIG9mIHN0cmluZwomIzQzOyAqIHN0cnVjdDogc2l6ZSBvZiBzdHJ1Y3QJICAgICAgLSZndDsgc2l6ZSBvZiBzdHJ1Y3QKJiM0MzsgKiBidWZmZXI6IC0xICogKGluZGV4IG9mIHBhaXJlZCBsZW4pIC0mZ3Q7IHZhbHVlIG9mIHBhaXJlZCBsZW4gKG1heGltdW06IFRSQUNFX0FVR19NQVhfQlVGKQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGF1Z21lbnRfYXJnKHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MsIGludCBpLAomIzQzOwkJCSAgICAgIHVuc2lnbmVkIGludCAqYmVhdXR5X21hcCwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgYmVhdXR5X3BheWxvYWRfZW50ZXIgKnBheWxvYWQsIHU2NCBvZmZzZXQpCiYjNDM7ewomIzQzOwlpbnQgaW5kZXgsIHNpemUsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTsKJiM0MzsJc3RydWN0IGF1Z21lbnRlZF9hcmcgKnBheWxvYWRfb2Zmc2V0OwomIzQzOwlzNjQgYXVnX3NpemU7CiYjNDM7CWJvb2wgYXVnbWVudGVkOwomIzQzOwl2b2lkICphcmc7CiYjNDM7CiYjNDM7CWFyZyA9ICh2b2lkICopYXJncy0mZ3Q7YXJnc1tpXTsKJiM0MzsJYXVnbWVudGVkID0gZmFsc2U7CiYjNDM7CXNpemUgPSBiZWF1dHlfbWFwW2ldOwomIzQzOwlhdWdfc2l6ZSA9IHNpemU7IC8qIHNpemUgb2YgdGhlIGF1Z21lbnRlZCBkYXRhIHJlYWQgZnJvbSB1c2VyIHNwYWNlICovCiYjNDM7CiYjNDM7CWlmIChzaXplID09IDAgfHwgYXJnID09IE5VTEwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogYm91bmRzIGNoZWNrIGZvciB0aGUgdmVyaWZpZXIgKi8KJiM0MzsJaWYgKG9mZnNldCAmZ3Q7IHNpemVvZihwYXlsb2FkLSZndDthdWdfYXJncykgLSBzaXplb2YocGF5bG9hZC0mZ3Q7YXVnX2FyZ3NbMF0pKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwliYXJyaWVyX3ZhcihvZmZzZXQpOwomIzQzOwlwYXlsb2FkX29mZnNldCA9IChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKSgodm9pZCAqKSZhbXA7cGF5bG9hZC0mZ3Q7YXVnX2FyZ3MgJiM0Mzsgb2Zmc2V0KTsKJiM0MzsKJiM0MzsJaWYgKHNpemUgPT0gMSkgeyAvKiBzdHJpbmcgKi8KJiM0MzsJCWF1Z19zaXplID0gYnBmX3Byb2JlX3JlYWRfdXNlcl9zdHIocGF5bG9hZF9vZmZzZXQtJmd0O3ZhbHVlLCB2YWx1ZV9zaXplLCBhcmcpOwomIzQzOwkJLyogbWluaW11bSBvZiAwIHRvIHBhc3MgdGhlIHZlcmlmaWVyICovCiYjNDM7CQlpZiAoYXVnX3NpemUgJmx0OyAwKQomIzQzOwkJCWF1Z19zaXplID0gMDsKJiM0MzsKJiM0MzsJCWF1Z21lbnRlZCA9IHRydWU7CiYjNDM7CX0gZWxzZSBpZiAoc2l6ZSAmZ3Q7IDAgJmFtcDsmYW1wOyBzaXplICZsdDs9IHZhbHVlX3NpemUpIHsgLyogc3RydWN0ICovCiYjNDM7CQlpZiAoIWJwZl9wcm9iZV9yZWFkX3VzZXIocGF5bG9hZF9vZmZzZXQtJmd0O3ZhbHVlLCBzaXplLCBhcmcpKQomIzQzOwkJCWF1Z21lbnRlZCA9IHRydWU7CiYjNDM7CX0gZWxzZSBpZiAoc2l6ZSAmbHQ7IDAgJmFtcDsmYW1wOyBzaXplICZndDs9IC02KSB7IC8qIGJ1ZmZlciAqLwomIzQzOwkJaW5kZXggPSAtKHNpemUgJiM0MzsgMSk7CiYjNDM7CQliYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlICZhbXA7PSA3IHRyaWNrLgomIzQzOwkJaW5kZXggJmFtcDs9IDc7CSAgICAvLyBTYXRpc2Z5IHRoZSBib3VuZHMgY2hlY2tpbmcgd2l0aCB0aGUgdmVyaWZpZXIgaW4gc29tZSBrZXJuZWxzLgomIzQzOwkJYXVnX3NpemUgPSBhcmdzLSZndDthcmdzW2luZGV4XSAmZ3Q7IFRSQUNFX0FVR19NQVhfQlVGID8gVFJBQ0VfQVVHX01BWF9CVUYgOiBhcmdzLSZndDthcmdzW2luZGV4XTsKJiM0MzsKJiM0MzsJCWlmIChhdWdfc2l6ZSAmZ3Q7IDApIHsKJiM0MzsJCQlpZiAoIWJwZl9wcm9iZV9yZWFkX3VzZXIocGF5bG9hZF9vZmZzZXQtJmd0O3ZhbHVlLCBhdWdfc2l6ZSwgYXJnKSkKJiM0MzsJCQkJYXVnbWVudGVkID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBdWdtZW50ZWQgZGF0YSBzaXplIGlzIGxpbWl0ZWQgdG8gc2l6ZW9mKGF1Z21lbnRlZF9hcmctJmd0O3VubmFtZWQgdW5pb24gd2l0aCB2YWx1ZSBmaWVsZCkgKi8KJiM0MzsJaWYgKGF1Z19zaXplICZndDsgdmFsdWVfc2l6ZSkKJiM0MzsJCWF1Z19zaXplID0gdmFsdWVfc2l6ZTsKJiM0MzsKJiM0MzsJLyogd3JpdGUgZGF0YSB0byBwYXlsb2FkICovCiYjNDM7CWlmIChhdWdtZW50ZWQpIHsKJiM0MzsJCWludCB3cml0dGVuID0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKSAmIzQzOyBhdWdfc2l6ZTsKJiM0MzsKJiM0MzsJCWlmICh3cml0dGVuICZsdDsgMCB8fCB3cml0dGVuICZndDsgc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSkKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CQlwYXlsb2FkX29mZnNldC0mZ3Q7c2l6ZSA9IGF1Z19zaXplOwomIzQzOwkJcmV0dXJuIHdyaXR0ZW47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpCiB7Ci0JYm9vbCBhdWdtZW50ZWQsIGRvX291dHB1dCA9IGZhbHNlOwotCWludCB6ZXJvID0gMCwgaW5kZXgsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTsKJiM0MzsJYm9vbCBkb19vdXRwdXQgPSBmYWxzZTsKJiM0MzsJaW50IGksIHplcm8gPSAwLCB3cml0dGVuOwogCXU2NCBvdXRwdXQgPSAwOyAvKiBoYXMgdG8gYmUgdTY0LCBvdGhlcndpc2UgaXQgd29uJiMzOTt0IHBhc3MgdGhlIHZlcmlmaWVyICovCi0JczY0IGF1Z19zaXplLCBzaXplOwogCXVuc2lnbmVkIGludCBuciwgKmJlYXV0eV9tYXA7CiAJc3RydWN0IGJlYXV0eV9wYXlsb2FkX2VudGVyICpwYXlsb2FkOwotCXZvaWQgKmFyZywgKnBheWxvYWRfb2Zmc2V0OwogCiAJLyogZmFsbCBiYWNrIHRvIGRvIHByZWRlZmluZWQgdGFpbCBjYWxsICovCiAJaWYgKGFyZ3MgPT0gTlVMTCkKQEAgLTQ0OSw3ICYjNDM7NTIyLDYgQEAgc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpCiAKIAkvKiBzZXQgdXAgcGF5bG9hZCBmb3Igb3V0cHV0ICovCiAJcGF5bG9hZCAgICAgICAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7YmVhdXR5X3BheWxvYWRfZW50ZXJfbWFwLCAmYW1wO3plcm8pOwotCXBheWxvYWRfb2Zmc2V0ID0gKHZvaWQgKikmYW1wO3BheWxvYWQtJmd0O2F1Z19hcmdzOwogCiAJaWYgKGJlYXV0eV9tYXAgPT0gTlVMTCB8fCBwYXlsb2FkID09IE5VTEwpCiAJCXJldHVybiAxOwpAQCAtNDU3LDYxICYjNDM7NTI5LDMwIEBAIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKQogCS8qIGNvcHkgdGhlIHN5c19lbnRlciBoZWFkZXIsIHdoaWNoIGhhcyB0aGUgc3lzY2FsbF9uciAqLwogCV9fYnVpbHRpbl9tZW1jcHkoJmFtcDtwYXlsb2FkLSZndDthcmdzLCBhcmdzLCBzaXplb2Yoc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncykpOwogCi0JLyoKLQkgKiBEZXRlcm1pbmUgd2hhdCB0eXBlIG9mIGFyZ3VtZW50IGFuZCBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gdXNlciBzcGFjZSwgdXNpbmcgdGhlCi0JICogdmFsdWUgaW4gdGhlIGJlYXV0eV9tYXAuIFRoaXMgaXMgdGhlIHJlbGF0aW9uIG9mIHBhcmFtZXRlciB0eXBlIGFuZCBpdHMgY29ycmVzcG9uZGluZwotCSAqIHZhbHVlIGluIHRoZSBiZWF1dHkgbWFwLCBhbmQgaG93IG1hbnkgYnl0ZXMgd2UgcmVhZCBldmVudHVhbGx5OgotCSAqCi0JICogc3RyaW5nOiAxCQkJICAgICAgLSZndDsgc2l6ZSBvZiBzdHJpbmcKLQkgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0CSAgICAgIC0mZ3Q7IHNpemUgb2Ygc3RydWN0Ci0JICogYnVmZmVyOiAtMSAqIChpbmRleCBvZiBwYWlyZWQgbGVuKSAtJmd0OyB2YWx1ZSBvZiBwYWlyZWQgbGVuIChtYXhpbXVtOiBUUkFDRV9BVUdfTUFYX0JVRikKLQkgKi8KLQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IDY7IGkmIzQzOyYjNDM7KSB7Ci0JCWFyZyA9ICh2b2lkICopYXJncy0mZ3Q7YXJnc1tpXTsKLQkJYXVnbWVudGVkID0gZmFsc2U7Ci0JCXNpemUgPSBiZWF1dHlfbWFwW2ldOwotCQlhdWdfc2l6ZSA9IHNpemU7IC8qIHNpemUgb2YgdGhlIGF1Z21lbnRlZCBkYXRhIHJlYWQgZnJvbSB1c2VyIHNwYWNlICovCi0KLQkJaWYgKHNpemUgPT0gMCB8fCBhcmcgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChzaXplID09IDEpIHsgLyogc3RyaW5nICovCi0JCQlhdWdfc2l6ZSA9IGJwZl9wcm9iZV9yZWFkX3VzZXJfc3RyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktJmd0O3ZhbHVlLCB2YWx1ZV9zaXplLCBhcmcpOwotCQkJLyogbWluaW11bSBvZiAwIHRvIHBhc3MgdGhlIHZlcmlmaWVyICovCi0JCQlpZiAoYXVnX3NpemUgJmx0OyAwKQotCQkJCWF1Z19zaXplID0gMDsKLQotCQkJYXVnbWVudGVkID0gdHJ1ZTsKLQkJfSBlbHNlIGlmIChzaXplICZndDsgMCAmYW1wOyZhbXA7IHNpemUgJmx0Oz0gdmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi8KLQkJCWlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLSZndDt2YWx1ZSwgc2l6ZSwgYXJnKSkKLQkJCQlhdWdtZW50ZWQgPSB0cnVlOwotCQl9IGVsc2UgaWYgKChpbnQpc2l6ZSAmbHQ7IDAgJmFtcDsmYW1wOyBzaXplICZndDs9IC02KSB7IC8qIGJ1ZmZlciAqLwotCQkJaW5kZXggPSAtKHNpemUgJiM0MzsgMSk7Ci0JCQliYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlICZhbXA7PSA3IHRyaWNrLgotCQkJaW5kZXggJmFtcDs9IDc7CSAgICAvLyBTYXRpc2Z5IHRoZSBib3VuZHMgY2hlY2tpbmcgd2l0aCB0aGUgdmVyaWZpZXIgaW4gc29tZSBrZXJuZWxzLgotCQkJYXVnX3NpemUgPSBhcmdzLSZndDthcmdzW2luZGV4XSAmZ3Q7IFRSQUNFX0FVR19NQVhfQlVGID8gVFJBQ0VfQVVHX01BWF9CVUYgOiBhcmdzLSZndDthcmdzW2luZGV4XTsKLQotCQkJaWYgKGF1Z19zaXplICZndDsgMCkgewotCQkJCWlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLSZndDt2YWx1ZSwgYXVnX3NpemUsIGFyZykpCi0JCQkJCWF1Z21lbnRlZCA9IHRydWU7CiYjNDM7CWlmIChicGZfa3N5bV9leGlzdHMoYnBmX2l0ZXJfbnVtX25ldykpIHsKJiM0MzsJCWJwZl9mb3IoaSwgMCwgNikgewomIzQzOwkJCXdyaXR0ZW4gPSBhdWdtZW50X2FyZyhhcmdzLCBpLCBiZWF1dHlfbWFwLCBwYXlsb2FkLCBvdXRwdXQpOwomIzQzOwkJCWlmICh3cml0dGVuICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuIDE7CiYjNDM7CQkJaWYgKHdyaXR0ZW4gJmd0OyAwKSB7CiYjNDM7CQkJCW91dHB1dCAmIzQzOz0gd3JpdHRlbjsKJiM0MzsJCQkJLyoKJiM0MzsJCQkJICogZ3VpZGUgdGhlIHZlcmlmaWVyIHRvIGZvcmdldCByYW5nZSBvZiBgb3V0cHV0YCwgd2hpY2gKJiM0MzsJCQkJICogaGVscHMgdG8gcHJvdmUgY29udmVyZ2VuY2Ugb2YgdGhlIGxvb3AKJiM0MzsJCQkJICovCiYjNDM7CQkJCW91dHB1dCAmIzQzOz0gWkVSTzsKJiM0MzsJCQkJZG9fb3V0cHV0ID0gdHJ1ZTsKIAkJCX0KIAkJfQotCi0JCS8qIEF1Z21lbnRlZCBkYXRhIHNpemUgaXMgbGltaXRlZCB0byBzaXplb2YoYXVnbWVudGVkX2FyZy0mZ3Q7dW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqLwotCQlpZiAoYXVnX3NpemUgJmd0OyB2YWx1ZV9zaXplKQotCQkJYXVnX3NpemUgPSB2YWx1ZV9zaXplOwotCi0JCS8qIHdyaXRlIGRhdGEgdG8gcGF5bG9hZCAqLwotCQlpZiAoYXVnbWVudGVkKSB7Ci0JCQlpbnQgd3JpdHRlbiA9IG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSkgJiM0MzsgYXVnX3NpemU7Ci0KLQkJCWlmICh3cml0dGVuICZsdDsgMCB8fCB3cml0dGVuICZndDsgc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSkKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyA2OyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXdyaXR0ZW4gPSBhdWdtZW50X2FyZyhhcmdzLCBpLCBiZWF1dHlfbWFwLCBwYXlsb2FkLCBvdXRwdXQpOwomIzQzOwkJCWlmICh3cml0dGVuICZsdDsgMCkKIAkJCQlyZXR1cm4gMTsKLQotCQkJKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS0mZ3Q7c2l6ZSA9IGF1Z19zaXplOwotCQkJb3V0cHV0ICYjNDM7PSB3cml0dGVuOwotCQkJcGF5bG9hZF9vZmZzZXQgJiM0Mzs9IHdyaXR0ZW47Ci0JCQlkb19vdXRwdXQgPSB0cnVlOwomIzQzOwkJCWlmICh3cml0dGVuICZndDsgMCkgewomIzQzOwkJCQlvdXRwdXQgJiM0Mzs9IHdyaXR0ZW47CiYjNDM7CQkJCWRvX291dHB1dCA9IHRydWU7CiYjNDM7CQkJfQogCQl9CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE3OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNzcKCQkJCQkJCW91dHB1dDogOTkKCQkJCQkJCXRob3VnaHRzOiA3NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIGB0b29scy9wZXJmYCBCUEYgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgaXQmIzM5O3MgbW9kaWZ5aW5nIGB0b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY2AuIFRoaXMgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmssICYjMzQ7QlBGIHByb2dyYW0hJiMzNDsgYW5kIHRoYXQgdGhpcyBpcyB1c2VkIGJ5IHRoZSBgcGVyZmAgdG9vbC4gTm93LCBgcGVyZmAgaXMgdXNlci1zcGFjZSwgYWx0aG91Z2ggaXQgZG9lcyB1c2UgQlBGIHNrZWxldG9ucyBhbmQgbG9hZHMgcHJvZ3JhbXMgaW50byB0aGUga2VybmVsLiBUaGUga2V5IGRpc3RpbmN0aW9uIGhlcmUgaXMgdGhhdCB0aGlzIHNwZWNpZmljIEJQRiBjb2RlLCB3aGlsZSBrZXJuZWwtYm91bmQgd2hlbiBydW5uaW5nIGBwZXJmYCwgKmlzbiYjMzk7dCogcGFydCBvZiB0aGUgY29yZSBrZXJuZWwgaW1hZ2UgaXRzZWxmLiBJdCYjMzk7cyBzb3VyY2UgY29kZSB3aXRoaW4gdGhlIGBwZXJmYCB0b29sLgoKTXkgaW50ZXJuYWwgY2hlY2tsaXN0IGltbWVkaWF0ZWx5IGtpY2tzIGluLiBJcyB0aGlzIHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nPyBUaGUgdXN1YWwgcnVsZXMgYXBwbHk6IERvY3VtZW50YXRpb24gY2hhbmdlcywgY29tbWVudHMsIGRlY29yYXRpdmUgbG9nZ2luZy4uLiB0aGF0JiMzOTtzIGEgbm8tZ28uIEJ1dCBJIGFsc28gbmVlZCB0byB0aGluayBzcGVjaWZpY2FsbHkgYWJvdXQgc3l6a2FsbGVyLiBEb2VzIHRoaXMgcGF0Y2ggY2hhbmdlIHNvbWV0aGluZyB0aGF0IGlzIHRvdWNoZWQgYnkgc3l6a2FsbGVyPwoKVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiAgU3l6a2FsbGVyIGZvY3VzZXMgb24gdGhlICprZXJuZWwqLiAgV2hpbGUgc3l6a2FsbGVyICpjYW4qIGZ1enogQlBGIHByb2dyYW1zLCBpdCBkb2VzbiYjMzk7dCBkbyBzbyBieSBydW5uaW5nIGBwZXJmYCBvciBieSB1c2luZyBCUEYgY29kZSBwcm92aWRlZCB3aXRoIGl0LiBTeXprYWxsZXImIzM5O3MgcHVycG9zZSBpcyB0byBmdXp6IHRoZSBrZXJuZWwgdmlhIHN5c2NhbGxzLiBTbywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGRvZXMgdGhpcyBwYXRjaCBtb2RpZnkgc29tZXRoaW5nIHRoYXQgY2FuIGJlIHJlYWNoZWQgYnkgYSBzeXprYWxsZXIgc3lzY2FsbD8KCkxldCBtZSBzdGVwIGJhY2sgYW5kIG1ha2Ugc3VyZS4gYHRvb2xzL3BlcmZgIGlzIGEgdXNlci1zcGFjZSB0b29sLiBTeXprYWxsZXIgZG9lc24mIzM5O3QgZGlyZWN0bHkgcnVuIHVzZXItc3BhY2UgdG9vbHMuIEl0IGdlbmVyYXRlcyBpdHMgb3duIEJQRiBwcm9ncmFtcy4gIEl0IGRvZXNuJiMzOTt0IHVzZSB0aGUgQlBGIGNvZGUgcHJvdmlkZWQgd2l0aCB0aGUgYHBlcmZgIHRvb2wuIFNvLCB0aGUgY29kZSB3aXRoaW4gdGhpcyBwYXRjaCB3b24mIzM5O3QgYmUgZXhlY3V0ZWQgZGlyZWN0bHkgYnkgc3l6a2FsbGVyLgoKQW5kIHdoYXQgZG9lcyB0aGlzIHBhcnRpY3VsYXIgcGF0Y2ggYWN0dWFsbHkgKmRvKj8gSXQmIzM5O3MgcmVmYWN0b3JpbmcgYGF1Z21lbnRfc3lzX2VudGVyYCB1c2luZyBgYnBmX2ZvcmAuIE9rYXksIEJQRiBpdGVyYXRvcnMsIGV4dHJhY3RpbmcgYGF1Z21lbnRfYXJnYC4gIEl0IGRvZXNuJiMzOTt0IHNlZW0gbGlrZSB0aGUgY29yZSBrZXJuZWwgY29kZSBjaGFuZ2VzLgoKU28sIEkgbmVlZCB0byBjaGVjayB0byBiZSBzdXJlLi4uIEkmIzM5O20gY29uZmlkZW50IHN5emthbGxlciBpcyBub3QgZ29pbmcgdG8gZnV6eiBgdG9vbHMvcGVyZmAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGlzIGlzbiYjMzk7dCB0b3VjaGluZyBhIGtlcm5lbCBpbnRlcmZhY2UgZGlyZWN0bHkuICBJIGNvbmZpcm0gdGhhdCB0aGUgZGlmZiBpcyAqb25seSogd2l0aGluIGB0b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY2AuIFRoaXMgY29uZmlybXMgaXQmIzM5O3MgYSBCUEYgcHJvZ3JhbSBmb3IgYHBlcmYgdHJhY2VgLiAgU2luY2UgaXQmIzM5O3MgcGFydCBvZiB0aGUgYHBlcmZgIHRvb2wsIGFuZCBpdCYjMzk7cyBub3QgcGFydCBvZiB0aGUga2VybmVsIGltYWdlIHRoYXQgc3l6a2FsbGVyIGZ1enplcy4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBpcyBub3QgZ29pbmcgdG8gYmUgZnV6emVkIGJ5IHN5emthbGxlci4KCk9rYXksIG15IGNvbmNsdXNpb246IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIGNoYW5nZSBpcyBsaW1pdGVkIHRvIGEgQlBGIHByb2dyYW0gdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSB1c2VyLXNwYWNlIGBwZXJmYCB0b29sLiBTeXprYWxsZXIgZm9jdXNlcyBvbiBmdXp6aW5nIHRoZSBrZXJuZWwsIGFuZCB0aGlzIGNoYW5nZSBpcyBub3QgcGFydCBvZiB0aGUga2VybmVsJiMzOTtzIGNvcmUgaW1hZ2UgYW5kIGlzbiYjMzk7dCBhY2Nlc3NpYmxlIHZpYSB0aGUgc3lzY2FsbHMgdGhhdCBzeXprYWxsZXIgdXRpbGl6ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSB1c2VyLXNwYWNlIGBwZXJmYCB0b29sIChgdG9vbHMvcGVyZi9gKS4gVGhpcyBjb2RlIGlzIG5vdCBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbCBpbWFnZSBhbmQgaXMgbm90IHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQga2VybmVsIGZ1enppbmcsIGFzIHN5emthbGxlciBmdXp6ZXMgdGhlIGtlcm5lbCB2aWEgc3lzY2FsbHMgYW5kIGRvZXMgbm90IGV4ZWN1dGUgdXNlci1zcGFjZSB1dGlsaXRpZXMgbGlrZSBgcGVyZmAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSB1c2VyLXNwYWNlIGBwZXJmYCB0b29sIChgdG9vbHMvcGVyZi9gKS4gVGhpcyBjb2RlIGlzIG5vdCBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbCBpbWFnZSBhbmQgaXMgbm90IHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQga2VybmVsIGZ1enppbmcsIGFzIHN5emthbGxlciBmdXp6ZXMgdGhlIGtlcm5lbCB2aWEgc3lzY2FsbHMgYW5kIGRvZXMgbm90IGV4ZWN1dGUgdXNlci1zcGFjZSB1dGlsaXRpZXMgbGlrZSBgcGVyZmAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDZUMTc6NTE6MDQuNTc5MDU5MTg4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NjQyODgzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSBCUEYgcHJvZ3JhbSB1c2VkIGludGVybmFsbHkgYnkgdGhlIHVzZXItc3BhY2UgYHBlcmZgIHRvb2wgKGB0b29scy9wZXJmL2ApLiBUaGlzIGNvZGUgaXMgbm90IHBhcnQgb2YgdGhlIGNvcmUga2VybmVsIGltYWdlIGFuZCBpcyBub3QgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBrZXJuZWwgZnV6emluZywgYXMgc3l6a2FsbGVyIGZ1enplcyB0aGUga2VybmVsIHZpYSBzeXNjYWxscyBhbmQgZG9lcyBub3QgZXhlY3V0ZSB1c2VyLXNwYWNlIHV0aWxpdGllcyBsaWtlIGBwZXJmYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE3OjUxOjA0LjU3OTA2NzIzOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNTczNDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjk2MDNmY2FhNTA5NTY0Nzg1OTUwODk2MzcwMDAyMWU4NWE3MDdmZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCA2IDE3OjUxOjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jIGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNcXG5pbmRleCAyYTZlNjE4NjRlZTAxNS4uMjE1NTE2ZGY1ZDJhMzggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNcXG4rKysgYi90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY1xcbkBAIC00MjksMTUgKzQyOSw4OCBAQCBzdGF0aWMgYm9vbCBwaWRfZmlsdGVyX19oYXMoc3RydWN0IHBpZHNfZmlsdGVyZWQgKnBpZHMsIHBpZF90IHBpZClcXG4gXFx0cmV0dXJuIGJwZl9tYXBfbG9va3VwX2VsZW0ocGlkcywgXFx1MDAyNnBpZCkgIT0gTlVMTDtcXG4gfVxcbiBcXG4rdTY0IFpFUk8gPSAwO1xcbitcXG4rLypcXG4rICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBhcmd1bWVudCBhbmQgaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHVzZXIgc3BhY2UsIHVzaW5nIHRoZVxcbisgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5X21hcC4gVGhpcyBpcyB0aGUgcmVsYXRpb24gb2YgcGFyYW1ldGVyIHR5cGUgYW5kIGl0cyBjb3JyZXNwb25kaW5nXFxuKyAqIHZhbHVlIGluIHRoZSBiZWF1dHkgbWFwLCBhbmQgaG93IG1hbnkgYnl0ZXMgd2UgcmVhZCBldmVudHVhbGx5OlxcbisgKlxcbisgKiBzdHJpbmc6IDFcXHRcXHRcXHQgICAgICAtXFx1MDAzZSBzaXplIG9mIHN0cmluZ1xcbisgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0XFx0ICAgICAgLVxcdTAwM2Ugc2l6ZSBvZiBzdHJ1Y3RcXG4rICogYnVmZmVyOiAtMSAqIChpbmRleCBvZiBwYWlyZWQgbGVuKSAtXFx1MDAzZSB2YWx1ZSBvZiBwYWlyZWQgbGVuIChtYXhpbXVtOiBUUkFDRV9BVUdfTUFYX0JVRilcXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgaW50IGF1Z21lbnRfYXJnKHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MsIGludCBpLFxcbitcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgKmJlYXV0eV9tYXAsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBiZWF1dHlfcGF5bG9hZF9lbnRlciAqcGF5bG9hZCwgdTY0IG9mZnNldClcXG4re1xcbitcXHRpbnQgaW5kZXgsIHNpemUsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTtcXG4rXFx0c3RydWN0IGF1Z21lbnRlZF9hcmcgKnBheWxvYWRfb2Zmc2V0O1xcbitcXHRzNjQgYXVnX3NpemU7XFxuK1xcdGJvb2wgYXVnbWVudGVkO1xcbitcXHR2b2lkICphcmc7XFxuK1xcbitcXHRhcmcgPSAodm9pZCAqKWFyZ3MtXFx1MDAzZWFyZ3NbaV07XFxuK1xcdGF1Z21lbnRlZCA9IGZhbHNlO1xcbitcXHRzaXplID0gYmVhdXR5X21hcFtpXTtcXG4rXFx0YXVnX3NpemUgPSBzaXplOyAvKiBzaXplIG9mIHRoZSBhdWdtZW50ZWQgZGF0YSByZWFkIGZyb20gdXNlciBzcGFjZSAqL1xcbitcXG4rXFx0aWYgKHNpemUgPT0gMCB8fCBhcmcgPT0gTlVMTClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBib3VuZHMgY2hlY2sgZm9yIHRoZSB2ZXJpZmllciAqL1xcbitcXHRpZiAob2Zmc2V0IFxcdTAwM2Ugc2l6ZW9mKHBheWxvYWQtXFx1MDAzZWF1Z19hcmdzKSAtIHNpemVvZihwYXlsb2FkLVxcdTAwM2VhdWdfYXJnc1swXSkpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0YmFycmllcl92YXIob2Zmc2V0KTtcXG4rXFx0cGF5bG9hZF9vZmZzZXQgPSAoc3RydWN0IGF1Z21lbnRlZF9hcmcgKikoKHZvaWQgKilcXHUwMDI2cGF5bG9hZC1cXHUwMDNlYXVnX2FyZ3MgKyBvZmZzZXQpO1xcbitcXG4rXFx0aWYgKHNpemUgPT0gMSkgeyAvKiBzdHJpbmcgKi9cXG4rXFx0XFx0YXVnX3NpemUgPSBicGZfcHJvYmVfcmVhZF91c2VyX3N0cihwYXlsb2FkX29mZnNldC1cXHUwMDNldmFsdWUsIHZhbHVlX3NpemUsIGFyZyk7XFxuK1xcdFxcdC8qIG1pbmltdW0gb2YgMCB0byBwYXNzIHRoZSB2ZXJpZmllciAqL1xcbitcXHRcXHRpZiAoYXVnX3NpemUgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRhdWdfc2l6ZSA9IDA7XFxuK1xcbitcXHRcXHRhdWdtZW50ZWQgPSB0cnVlO1xcbitcXHR9IGVsc2UgaWYgKHNpemUgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHNpemUgXFx1MDAzYz0gdmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi9cXG4rXFx0XFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKHBheWxvYWRfb2Zmc2V0LVxcdTAwM2V2YWx1ZSwgc2l6ZSwgYXJnKSlcXG4rXFx0XFx0XFx0YXVnbWVudGVkID0gdHJ1ZTtcXG4rXFx0fSBlbHNlIGlmIChzaXplIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBzaXplIFxcdTAwM2U9IC02KSB7IC8qIGJ1ZmZlciAqL1xcbitcXHRcXHRpbmRleCA9IC0oc2l6ZSArIDEpO1xcbitcXHRcXHRiYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlIFxcdTAwMjY9IDcgdHJpY2suXFxuK1xcdFxcdGluZGV4IFxcdTAwMjY9IDc7XFx0ICAgIC8vIFNhdGlzZnkgdGhlIGJvdW5kcyBjaGVja2luZyB3aXRoIHRoZSB2ZXJpZmllciBpbiBzb21lIGtlcm5lbHMuXFxuK1xcdFxcdGF1Z19zaXplID0gYXJncy1cXHUwMDNlYXJnc1tpbmRleF0gXFx1MDAzZSBUUkFDRV9BVUdfTUFYX0JVRiA/IFRSQUNFX0FVR19NQVhfQlVGIDogYXJncy1cXHUwMDNlYXJnc1tpbmRleF07XFxuK1xcbitcXHRcXHRpZiAoYXVnX3NpemUgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdFxcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcihwYXlsb2FkX29mZnNldC1cXHUwMDNldmFsdWUsIGF1Z19zaXplLCBhcmcpKVxcbitcXHRcXHRcXHRcXHRhdWdtZW50ZWQgPSB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEF1Z21lbnRlZCBkYXRhIHNpemUgaXMgbGltaXRlZCB0byBzaXplb2YoYXVnbWVudGVkX2FyZy1cXHUwMDNldW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqL1xcbitcXHRpZiAoYXVnX3NpemUgXFx1MDAzZSB2YWx1ZV9zaXplKVxcbitcXHRcXHRhdWdfc2l6ZSA9IHZhbHVlX3NpemU7XFxuK1xcbitcXHQvKiB3cml0ZSBkYXRhIHRvIHBheWxvYWQgKi9cXG4rXFx0aWYgKGF1Z21lbnRlZCkge1xcbitcXHRcXHRpbnQgd3JpdHRlbiA9IG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSkgKyBhdWdfc2l6ZTtcXG4rXFxuK1xcdFxcdGlmICh3cml0dGVuIFxcdTAwM2MgMCB8fCB3cml0dGVuIFxcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0XFx0cGF5bG9hZF9vZmZzZXQtXFx1MDAzZXNpemUgPSBhdWdfc2l6ZTtcXG4rXFx0XFx0cmV0dXJuIHdyaXR0ZW47XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGF1Z21lbnRfc3lzX2VudGVyKHZvaWQgKmN0eCwgc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncylcXG4ge1xcbi1cXHRib29sIGF1Z21lbnRlZCwgZG9fb3V0cHV0ID0gZmFsc2U7XFxuLVxcdGludCB6ZXJvID0gMCwgaW5kZXgsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTtcXG4rXFx0Ym9vbCBkb19vdXRwdXQgPSBmYWxzZTtcXG4rXFx0aW50IGksIHplcm8gPSAwLCB3cml0dGVuO1xcbiBcXHR1NjQgb3V0cHV0ID0gMDsgLyogaGFzIHRvIGJlIHU2NCwgb3RoZXJ3aXNlIGl0IHdvbid0IHBhc3MgdGhlIHZlcmlmaWVyICovXFxuLVxcdHM2NCBhdWdfc2l6ZSwgc2l6ZTtcXG4gXFx0dW5zaWduZWQgaW50IG5yLCAqYmVhdXR5X21hcDtcXG4gXFx0c3RydWN0IGJlYXV0eV9wYXlsb2FkX2VudGVyICpwYXlsb2FkO1xcbi1cXHR2b2lkICphcmcsICpwYXlsb2FkX29mZnNldDtcXG4gXFxuIFxcdC8qIGZhbGwgYmFjayB0byBkbyBwcmVkZWZpbmVkIHRhaWwgY2FsbCAqL1xcbiBcXHRpZiAoYXJncyA9PSBOVUxMKVxcbkBAIC00NDksNyArNTIyLDYgQEAgc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpXFxuIFxcbiBcXHQvKiBzZXQgdXAgcGF5bG9hZCBmb3Igb3V0cHV0ICovXFxuIFxcdHBheWxvYWQgICAgICAgID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2YmVhdXR5X3BheWxvYWRfZW50ZXJfbWFwLCBcXHUwMDI2emVybyk7XFxuLVxcdHBheWxvYWRfb2Zmc2V0ID0gKHZvaWQgKilcXHUwMDI2cGF5bG9hZC1cXHUwMDNlYXVnX2FyZ3M7XFxuIFxcbiBcXHRpZiAoYmVhdXR5X21hcCA9PSBOVUxMIHx8IHBheWxvYWQgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIDE7XFxuQEAgLTQ1Nyw2MSArNTI5LDMwIEBAIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKVxcbiBcXHQvKiBjb3B5IHRoZSBzeXNfZW50ZXIgaGVhZGVyLCB3aGljaCBoYXMgdGhlIHN5c2NhbGxfbnIgKi9cXG4gXFx0X19idWlsdGluX21lbWNweShcXHUwMDI2cGF5bG9hZC1cXHUwMDNlYXJncywgYXJncywgc2l6ZW9mKHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MpKTtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIERldGVybWluZSB3aGF0IHR5cGUgb2YgYXJndW1lbnQgYW5kIGhvdyBtYW55IGJ5dGVzIHRvIHJlYWQgZnJvbSB1c2VyIHNwYWNlLCB1c2luZyB0aGVcXG4tXFx0ICogdmFsdWUgaW4gdGhlIGJlYXV0eV9tYXAuIFRoaXMgaXMgdGhlIHJlbGF0aW9uIG9mIHBhcmFtZXRlciB0eXBlIGFuZCBpdHMgY29ycmVzcG9uZGluZ1xcbi1cXHQgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5IG1hcCwgYW5kIGhvdyBtYW55IGJ5dGVzIHdlIHJlYWQgZXZlbnR1YWxseTpcXG4tXFx0ICpcXG4tXFx0ICogc3RyaW5nOiAxXFx0XFx0XFx0ICAgICAgLVxcdTAwM2Ugc2l6ZSBvZiBzdHJpbmdcXG4tXFx0ICogc3RydWN0OiBzaXplIG9mIHN0cnVjdFxcdCAgICAgIC1cXHUwMDNlIHNpemUgb2Ygc3RydWN0XFxuLVxcdCAqIGJ1ZmZlcjogLTEgKiAoaW5kZXggb2YgcGFpcmVkIGxlbikgLVxcdTAwM2UgdmFsdWUgb2YgcGFpcmVkIGxlbiAobWF4aW11bTogVFJBQ0VfQVVHX01BWF9CVUYpXFxuLVxcdCAqL1xcbi1cXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIDY7IGkrKykge1xcbi1cXHRcXHRhcmcgPSAodm9pZCAqKWFyZ3MtXFx1MDAzZWFyZ3NbaV07XFxuLVxcdFxcdGF1Z21lbnRlZCA9IGZhbHNlO1xcbi1cXHRcXHRzaXplID0gYmVhdXR5X21hcFtpXTtcXG4tXFx0XFx0YXVnX3NpemUgPSBzaXplOyAvKiBzaXplIG9mIHRoZSBhdWdtZW50ZWQgZGF0YSByZWFkIGZyb20gdXNlciBzcGFjZSAqL1xcbi1cXG4tXFx0XFx0aWYgKHNpemUgPT0gMCB8fCBhcmcgPT0gTlVMTClcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcbi1cXHRcXHRpZiAoc2l6ZSA9PSAxKSB7IC8qIHN0cmluZyAqL1xcbi1cXHRcXHRcXHRhdWdfc2l6ZSA9IGJwZl9wcm9iZV9yZWFkX3VzZXJfc3RyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXFx1MDAzZXZhbHVlLCB2YWx1ZV9zaXplLCBhcmcpO1xcbi1cXHRcXHRcXHQvKiBtaW5pbXVtIG9mIDAgdG8gcGFzcyB0aGUgdmVyaWZpZXIgKi9cXG4tXFx0XFx0XFx0aWYgKGF1Z19zaXplIFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0XFx0YXVnX3NpemUgPSAwO1xcbi1cXG4tXFx0XFx0XFx0YXVnbWVudGVkID0gdHJ1ZTtcXG4tXFx0XFx0fSBlbHNlIGlmIChzaXplIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBzaXplIFxcdTAwM2M9IHZhbHVlX3NpemUpIHsgLyogc3RydWN0ICovXFxuLVxcdFxcdFxcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVxcdTAwM2V2YWx1ZSwgc2l6ZSwgYXJnKSlcXG4tXFx0XFx0XFx0XFx0YXVnbWVudGVkID0gdHJ1ZTtcXG4tXFx0XFx0fSBlbHNlIGlmICgoaW50KXNpemUgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IHNpemUgXFx1MDAzZT0gLTYpIHsgLyogYnVmZmVyICovXFxuLVxcdFxcdFxcdGluZGV4ID0gLShzaXplICsgMSk7XFxuLVxcdFxcdFxcdGJhcnJpZXJfdmFyKGluZGV4KTsgLy8gUHJldmVudCBjbGFuZyAobm90aWNlZCB3aXRoIHYxOCkgZnJvbSByZW1vdmluZyB0aGUgXFx1MDAyNj0gNyB0cmljay5cXG4tXFx0XFx0XFx0aW5kZXggXFx1MDAyNj0gNztcXHQgICAgLy8gU2F0aXNmeSB0aGUgYm91bmRzIGNoZWNraW5nIHdpdGggdGhlIHZlcmlmaWVyIGluIHNvbWUga2VybmVscy5cXG4tXFx0XFx0XFx0YXVnX3NpemUgPSBhcmdzLVxcdTAwM2VhcmdzW2luZGV4XSBcXHUwMDNlIFRSQUNFX0FVR19NQVhfQlVGID8gVFJBQ0VfQVVHX01BWF9CVUYgOiBhcmdzLVxcdTAwM2VhcmdzW2luZGV4XTtcXG4tXFxuLVxcdFxcdFxcdGlmIChhdWdfc2l6ZSBcXHUwMDNlIDApIHtcXG4tXFx0XFx0XFx0XFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXFx1MDAzZXZhbHVlLCBhdWdfc2l6ZSwgYXJnKSlcXG4tXFx0XFx0XFx0XFx0XFx0YXVnbWVudGVkID0gdHJ1ZTtcXG4rXFx0aWYgKGJwZl9rc3ltX2V4aXN0cyhicGZfaXRlcl9udW1fbmV3KSkge1xcbitcXHRcXHRicGZfZm9yKGksIDAsIDYpIHtcXG4rXFx0XFx0XFx0d3JpdHRlbiA9IGF1Z21lbnRfYXJnKGFyZ3MsIGksIGJlYXV0eV9tYXAsIHBheWxvYWQsIG91dHB1dCk7XFxuK1xcdFxcdFxcdGlmICh3cml0dGVuIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDE7XFxuK1xcdFxcdFxcdGlmICh3cml0dGVuIFxcdTAwM2UgMCkge1xcbitcXHRcXHRcXHRcXHRvdXRwdXQgKz0gd3JpdHRlbjtcXG4rXFx0XFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0XFx0ICogZ3VpZGUgdGhlIHZlcmlmaWVyIHRvIGZvcmdldCByYW5nZSBvZiBgb3V0cHV0YCwgd2hpY2hcXG4rXFx0XFx0XFx0XFx0ICogaGVscHMgdG8gcHJvdmUgY29udmVyZ2VuY2Ugb2YgdGhlIGxvb3BcXG4rXFx0XFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdFxcdG91dHB1dCArPSBaRVJPO1xcbitcXHRcXHRcXHRcXHRkb19vdXRwdXQgPSB0cnVlO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4tXFxuLVxcdFxcdC8qIEF1Z21lbnRlZCBkYXRhIHNpemUgaXMgbGltaXRlZCB0byBzaXplb2YoYXVnbWVudGVkX2FyZy1cXHUwMDNldW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqL1xcbi1cXHRcXHRpZiAoYXVnX3NpemUgXFx1MDAzZSB2YWx1ZV9zaXplKVxcbi1cXHRcXHRcXHRhdWdfc2l6ZSA9IHZhbHVlX3NpemU7XFxuLVxcbi1cXHRcXHQvKiB3cml0ZSBkYXRhIHRvIHBheWxvYWQgKi9cXG4tXFx0XFx0aWYgKGF1Z21lbnRlZCkge1xcbi1cXHRcXHRcXHRpbnQgd3JpdHRlbiA9IG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSkgKyBhdWdfc2l6ZTtcXG4tXFxuLVxcdFxcdFxcdGlmICh3cml0dGVuIFxcdTAwM2MgMCB8fCB3cml0dGVuIFxcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSlcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDY7IGkrKykge1xcbitcXHRcXHRcXHR3cml0dGVuID0gYXVnbWVudF9hcmcoYXJncywgaSwgYmVhdXR5X21hcCwgcGF5bG9hZCwgb3V0cHV0KTtcXG4rXFx0XFx0XFx0aWYgKHdyaXR0ZW4gXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG4tXFxuLVxcdFxcdFxcdCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXFx1MDAzZXNpemUgPSBhdWdfc2l6ZTtcXG4tXFx0XFx0XFx0b3V0cHV0ICs9IHdyaXR0ZW47XFxuLVxcdFxcdFxcdHBheWxvYWRfb2Zmc2V0ICs9IHdyaXR0ZW47XFxuLVxcdFxcdFxcdGRvX291dHB1dCA9IHRydWU7XFxuK1xcdFxcdFxcdGlmICh3cml0dGVuIFxcdTAwM2UgMCkge1xcbitcXHRcXHRcXHRcXHRvdXRwdXQgKz0gd3JpdHRlbjtcXG4rXFx0XFx0XFx0XFx0ZG9fb3V0cHV0ID0gdHJ1ZTtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE3OjUxOjA1LjA1MjYzMDU2MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzOTA3MTA3NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSBCUEYgcHJvZ3JhbSB1c2VkIGludGVybmFsbHkgYnkgdGhlIHVzZXItc3BhY2UgYHBlcmZgIHRvb2wgKGB0b29scy9wZXJmL2ApLiBUaGlzIGNvZGUgaXMgbm90IHBhcnQgb2YgdGhlIGNvcmUga2VybmVsIGltYWdlIGFuZCBpcyBub3QgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBrZXJuZWwgZnV6emluZywgYXMgc3l6a2FsbGVyIGZ1enplcyB0aGUga2VybmVsIHZpYSBzeXNjYWxscyBhbmQgZG9lcyBub3QgZXhlY3V0ZSB1c2VyLXNwYWNlIHV0aWxpdGllcyBsaWtlIGBwZXJmYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjk2MDNmY2FhNTA5NTY0Nzg1OTUwODk2MzcwMDAyMWU4NWE3MDdmZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTc6NTE6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jXG5pbmRleCAyYTZlNjE4NjRlZTAxNS4uMjE1NTE2ZGY1ZDJhMzggMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY1xuKysrIGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNcbkBAIC00MjksMTUgKzQyOSw4OCBAQCBzdGF0aWMgYm9vbCBwaWRfZmlsdGVyX19oYXMoc3RydWN0IHBpZHNfZmlsdGVyZWQgKnBpZHMsIHBpZF90IHBpZClcbiBcdHJldHVybiBicGZfbWFwX2xvb2t1cF9lbGVtKHBpZHMsIFx1MDAyNnBpZCkgIT0gTlVMTDtcbiB9XG4gXG4rdTY0IFpFUk8gPSAwO1xuK1xuKy8qXG4rICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBhcmd1bWVudCBhbmQgaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHVzZXIgc3BhY2UsIHVzaW5nIHRoZVxuKyAqIHZhbHVlIGluIHRoZSBiZWF1dHlfbWFwLiBUaGlzIGlzIHRoZSByZWxhdGlvbiBvZiBwYXJhbWV0ZXIgdHlwZSBhbmQgaXRzIGNvcnJlc3BvbmRpbmdcbisgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5IG1hcCwgYW5kIGhvdyBtYW55IGJ5dGVzIHdlIHJlYWQgZXZlbnR1YWxseTpcbisgKlxuKyAqIHN0cmluZzogMVx0XHRcdCAgICAgIC1cdTAwM2Ugc2l6ZSBvZiBzdHJpbmdcbisgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0XHQgICAgICAtXHUwMDNlIHNpemUgb2Ygc3RydWN0XG4rICogYnVmZmVyOiAtMSAqIChpbmRleCBvZiBwYWlyZWQgbGVuKSAtXHUwMDNlIHZhbHVlIG9mIHBhaXJlZCBsZW4gKG1heGltdW06IFRSQUNFX0FVR19NQVhfQlVGKVxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGF1Z21lbnRfYXJnKHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MsIGludCBpLFxuK1x0XHRcdCAgICAgIHVuc2lnbmVkIGludCAqYmVhdXR5X21hcCxcbitcdFx0XHQgICAgICBzdHJ1Y3QgYmVhdXR5X3BheWxvYWRfZW50ZXIgKnBheWxvYWQsIHU2NCBvZmZzZXQpXG4re1xuK1x0aW50IGluZGV4LCBzaXplLCB2YWx1ZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSAtIG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSk7XG4rXHRzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqcGF5bG9hZF9vZmZzZXQ7XG4rXHRzNjQgYXVnX3NpemU7XG4rXHRib29sIGF1Z21lbnRlZDtcbitcdHZvaWQgKmFyZztcbitcbitcdGFyZyA9ICh2b2lkICopYXJncy1cdTAwM2VhcmdzW2ldO1xuK1x0YXVnbWVudGVkID0gZmFsc2U7XG4rXHRzaXplID0gYmVhdXR5X21hcFtpXTtcbitcdGF1Z19zaXplID0gc2l6ZTsgLyogc2l6ZSBvZiB0aGUgYXVnbWVudGVkIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgKi9cbitcbitcdGlmIChzaXplID09IDAgfHwgYXJnID09IE5VTEwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogYm91bmRzIGNoZWNrIGZvciB0aGUgdmVyaWZpZXIgKi9cbitcdGlmIChvZmZzZXQgXHUwMDNlIHNpemVvZihwYXlsb2FkLVx1MDAzZWF1Z19hcmdzKSAtIHNpemVvZihwYXlsb2FkLVx1MDAzZWF1Z19hcmdzWzBdKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0YmFycmllcl92YXIob2Zmc2V0KTtcbitcdHBheWxvYWRfb2Zmc2V0ID0gKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopKCh2b2lkICopXHUwMDI2cGF5bG9hZC1cdTAwM2VhdWdfYXJncyArIG9mZnNldCk7XG4rXG4rXHRpZiAoc2l6ZSA9PSAxKSB7IC8qIHN0cmluZyAqL1xuK1x0XHRhdWdfc2l6ZSA9IGJwZl9wcm9iZV9yZWFkX3VzZXJfc3RyKHBheWxvYWRfb2Zmc2V0LVx1MDAzZXZhbHVlLCB2YWx1ZV9zaXplLCBhcmcpO1xuK1x0XHQvKiBtaW5pbXVtIG9mIDAgdG8gcGFzcyB0aGUgdmVyaWZpZXIgKi9cbitcdFx0aWYgKGF1Z19zaXplIFx1MDAzYyAwKVxuK1x0XHRcdGF1Z19zaXplID0gMDtcbitcbitcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbitcdH0gZWxzZSBpZiAoc2l6ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2M9IHZhbHVlX3NpemUpIHsgLyogc3RydWN0ICovXG4rXHRcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcihwYXlsb2FkX29mZnNldC1cdTAwM2V2YWx1ZSwgc2l6ZSwgYXJnKSlcbitcdFx0XHRhdWdtZW50ZWQgPSB0cnVlO1xuK1x0fSBlbHNlIGlmIChzaXplIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzZT0gLTYpIHsgLyogYnVmZmVyICovXG4rXHRcdGluZGV4ID0gLShzaXplICsgMSk7XG4rXHRcdGJhcnJpZXJfdmFyKGluZGV4KTsgLy8gUHJldmVudCBjbGFuZyAobm90aWNlZCB3aXRoIHYxOCkgZnJvbSByZW1vdmluZyB0aGUgXHUwMDI2PSA3IHRyaWNrLlxuK1x0XHRpbmRleCBcdTAwMjY9IDc7XHQgICAgLy8gU2F0aXNmeSB0aGUgYm91bmRzIGNoZWNraW5nIHdpdGggdGhlIHZlcmlmaWVyIGluIHNvbWUga2VybmVscy5cbitcdFx0YXVnX3NpemUgPSBhcmdzLVx1MDAzZWFyZ3NbaW5kZXhdIFx1MDAzZSBUUkFDRV9BVUdfTUFYX0JVRiA/IFRSQUNFX0FVR19NQVhfQlVGIDogYXJncy1cdTAwM2VhcmdzW2luZGV4XTtcbitcbitcdFx0aWYgKGF1Z19zaXplIFx1MDAzZSAwKSB7XG4rXHRcdFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKHBheWxvYWRfb2Zmc2V0LVx1MDAzZXZhbHVlLCBhdWdfc2l6ZSwgYXJnKSlcbitcdFx0XHRcdGF1Z21lbnRlZCA9IHRydWU7XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIEF1Z21lbnRlZCBkYXRhIHNpemUgaXMgbGltaXRlZCB0byBzaXplb2YoYXVnbWVudGVkX2FyZy1cdTAwM2V1bm5hbWVkIHVuaW9uIHdpdGggdmFsdWUgZmllbGQpICovXG4rXHRpZiAoYXVnX3NpemUgXHUwMDNlIHZhbHVlX3NpemUpXG4rXHRcdGF1Z19zaXplID0gdmFsdWVfc2l6ZTtcbitcbitcdC8qIHdyaXRlIGRhdGEgdG8gcGF5bG9hZCAqL1xuK1x0aWYgKGF1Z21lbnRlZCkge1xuK1x0XHRpbnQgd3JpdHRlbiA9IG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSkgKyBhdWdfc2l6ZTtcbitcbitcdFx0aWYgKHdyaXR0ZW4gXHUwMDNjIDAgfHwgd3JpdHRlbiBcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSlcbitcdFx0XHRyZXR1cm4gLTE7XG4rXG4rXHRcdHBheWxvYWRfb2Zmc2V0LVx1MDAzZXNpemUgPSBhdWdfc2l6ZTtcbitcdFx0cmV0dXJuIHdyaXR0ZW47XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpXG4ge1xuLVx0Ym9vbCBhdWdtZW50ZWQsIGRvX291dHB1dCA9IGZhbHNlO1xuLVx0aW50IHplcm8gPSAwLCBpbmRleCwgdmFsdWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykgLSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpO1xuK1x0Ym9vbCBkb19vdXRwdXQgPSBmYWxzZTtcbitcdGludCBpLCB6ZXJvID0gMCwgd3JpdHRlbjtcbiBcdHU2NCBvdXRwdXQgPSAwOyAvKiBoYXMgdG8gYmUgdTY0LCBvdGhlcndpc2UgaXQgd29uJ3QgcGFzcyB0aGUgdmVyaWZpZXIgKi9cbi1cdHM2NCBhdWdfc2l6ZSwgc2l6ZTtcbiBcdHVuc2lnbmVkIGludCBuciwgKmJlYXV0eV9tYXA7XG4gXHRzdHJ1Y3QgYmVhdXR5X3BheWxvYWRfZW50ZXIgKnBheWxvYWQ7XG4tXHR2b2lkICphcmcsICpwYXlsb2FkX29mZnNldDtcbiBcbiBcdC8qIGZhbGwgYmFjayB0byBkbyBwcmVkZWZpbmVkIHRhaWwgY2FsbCAqL1xuIFx0aWYgKGFyZ3MgPT0gTlVMTClcbkBAIC00NDksNyArNTIyLDYgQEAgc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpXG4gXG4gXHQvKiBzZXQgdXAgcGF5bG9hZCBmb3Igb3V0cHV0ICovXG4gXHRwYXlsb2FkICAgICAgICA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2YmVhdXR5X3BheWxvYWRfZW50ZXJfbWFwLCBcdTAwMjZ6ZXJvKTtcbi1cdHBheWxvYWRfb2Zmc2V0ID0gKHZvaWQgKilcdTAwMjZwYXlsb2FkLVx1MDAzZWF1Z19hcmdzO1xuIFxuIFx0aWYgKGJlYXV0eV9tYXAgPT0gTlVMTCB8fCBwYXlsb2FkID09IE5VTEwpXG4gXHRcdHJldHVybiAxO1xuQEAgLTQ1Nyw2MSArNTI5LDMwIEBAIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKVxuIFx0LyogY29weSB0aGUgc3lzX2VudGVyIGhlYWRlciwgd2hpY2ggaGFzIHRoZSBzeXNjYWxsX25yICovXG4gXHRfX2J1aWx0aW5fbWVtY3B5KFx1MDAyNnBheWxvYWQtXHUwMDNlYXJncywgYXJncywgc2l6ZW9mKHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MpKTtcbiBcbi1cdC8qXG4tXHQgKiBEZXRlcm1pbmUgd2hhdCB0eXBlIG9mIGFyZ3VtZW50IGFuZCBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gdXNlciBzcGFjZSwgdXNpbmcgdGhlXG4tXHQgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5X21hcC4gVGhpcyBpcyB0aGUgcmVsYXRpb24gb2YgcGFyYW1ldGVyIHR5cGUgYW5kIGl0cyBjb3JyZXNwb25kaW5nXG4tXHQgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5IG1hcCwgYW5kIGhvdyBtYW55IGJ5dGVzIHdlIHJlYWQgZXZlbnR1YWxseTpcbi1cdCAqXG4tXHQgKiBzdHJpbmc6IDFcdFx0XHQgICAgICAtXHUwMDNlIHNpemUgb2Ygc3RyaW5nXG4tXHQgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0XHQgICAgICAtXHUwMDNlIHNpemUgb2Ygc3RydWN0XG4tXHQgKiBidWZmZXI6IC0xICogKGluZGV4IG9mIHBhaXJlZCBsZW4pIC1cdTAwM2UgdmFsdWUgb2YgcGFpcmVkIGxlbiAobWF4aW11bTogVFJBQ0VfQVVHX01BWF9CVUYpXG4tXHQgKi9cbi1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyA2OyBpKyspIHtcbi1cdFx0YXJnID0gKHZvaWQgKilhcmdzLVx1MDAzZWFyZ3NbaV07XG4tXHRcdGF1Z21lbnRlZCA9IGZhbHNlO1xuLVx0XHRzaXplID0gYmVhdXR5X21hcFtpXTtcbi1cdFx0YXVnX3NpemUgPSBzaXplOyAvKiBzaXplIG9mIHRoZSBhdWdtZW50ZWQgZGF0YSByZWFkIGZyb20gdXNlciBzcGFjZSAqL1xuLVxuLVx0XHRpZiAoc2l6ZSA9PSAwIHx8IGFyZyA9PSBOVUxMKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRpZiAoc2l6ZSA9PSAxKSB7IC8qIHN0cmluZyAqL1xuLVx0XHRcdGF1Z19zaXplID0gYnBmX3Byb2JlX3JlYWRfdXNlcl9zdHIoKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cdTAwM2V2YWx1ZSwgdmFsdWVfc2l6ZSwgYXJnKTtcbi1cdFx0XHQvKiBtaW5pbXVtIG9mIDAgdG8gcGFzcyB0aGUgdmVyaWZpZXIgKi9cbi1cdFx0XHRpZiAoYXVnX3NpemUgXHUwMDNjIDApXG4tXHRcdFx0XHRhdWdfc2l6ZSA9IDA7XG4tXG4tXHRcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIGlmIChzaXplIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzYz0gdmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi9cbi1cdFx0XHRpZiAoIWJwZl9wcm9iZV9yZWFkX3VzZXIoKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cdTAwM2V2YWx1ZSwgc2l6ZSwgYXJnKSlcbi1cdFx0XHRcdGF1Z21lbnRlZCA9IHRydWU7XG4tXHRcdH0gZWxzZSBpZiAoKGludClzaXplIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzZT0gLTYpIHsgLyogYnVmZmVyICovXG4tXHRcdFx0aW5kZXggPSAtKHNpemUgKyAxKTtcbi1cdFx0XHRiYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlIFx1MDAyNj0gNyB0cmljay5cbi1cdFx0XHRpbmRleCBcdTAwMjY9IDc7XHQgICAgLy8gU2F0aXNmeSB0aGUgYm91bmRzIGNoZWNraW5nIHdpdGggdGhlIHZlcmlmaWVyIGluIHNvbWUga2VybmVscy5cbi1cdFx0XHRhdWdfc2l6ZSA9IGFyZ3MtXHUwMDNlYXJnc1tpbmRleF0gXHUwMDNlIFRSQUNFX0FVR19NQVhfQlVGID8gVFJBQ0VfQVVHX01BWF9CVUYgOiBhcmdzLVx1MDAzZWFyZ3NbaW5kZXhdO1xuLVxuLVx0XHRcdGlmIChhdWdfc2l6ZSBcdTAwM2UgMCkge1xuLVx0XHRcdFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNldmFsdWUsIGF1Z19zaXplLCBhcmcpKVxuLVx0XHRcdFx0XHRhdWdtZW50ZWQgPSB0cnVlO1xuK1x0aWYgKGJwZl9rc3ltX2V4aXN0cyhicGZfaXRlcl9udW1fbmV3KSkge1xuK1x0XHRicGZfZm9yKGksIDAsIDYpIHtcbitcdFx0XHR3cml0dGVuID0gYXVnbWVudF9hcmcoYXJncywgaSwgYmVhdXR5X21hcCwgcGF5bG9hZCwgb3V0cHV0KTtcbitcdFx0XHRpZiAod3JpdHRlbiBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiAxO1xuK1x0XHRcdGlmICh3cml0dGVuIFx1MDAzZSAwKSB7XG4rXHRcdFx0XHRvdXRwdXQgKz0gd3JpdHRlbjtcbitcdFx0XHRcdC8qXG4rXHRcdFx0XHQgKiBndWlkZSB0aGUgdmVyaWZpZXIgdG8gZm9yZ2V0IHJhbmdlIG9mIGBvdXRwdXRgLCB3aGljaFxuK1x0XHRcdFx0ICogaGVscHMgdG8gcHJvdmUgY29udmVyZ2VuY2Ugb2YgdGhlIGxvb3BcbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0b3V0cHV0ICs9IFpFUk87XG4rXHRcdFx0XHRkb19vdXRwdXQgPSB0cnVlO1xuIFx0XHRcdH1cbiBcdFx0fVxuLVxuLVx0XHQvKiBBdWdtZW50ZWQgZGF0YSBzaXplIGlzIGxpbWl0ZWQgdG8gc2l6ZW9mKGF1Z21lbnRlZF9hcmctXHUwMDNldW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqL1xuLVx0XHRpZiAoYXVnX3NpemUgXHUwMDNlIHZhbHVlX3NpemUpXG4tXHRcdFx0YXVnX3NpemUgPSB2YWx1ZV9zaXplO1xuLVxuLVx0XHQvKiB3cml0ZSBkYXRhIHRvIHBheWxvYWQgKi9cbi1cdFx0aWYgKGF1Z21lbnRlZCkge1xuLVx0XHRcdGludCB3cml0dGVuID0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKSArIGF1Z19zaXplO1xuLVxuLVx0XHRcdGlmICh3cml0dGVuIFx1MDAzYyAwIHx8IHdyaXR0ZW4gXHUwMDNlIHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykpXG4rXHR9IGVsc2Uge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA2OyBpKyspIHtcbitcdFx0XHR3cml0dGVuID0gYXVnbWVudF9hcmcoYXJncywgaSwgYmVhdXR5X21hcCwgcGF5bG9hZCwgb3V0cHV0KTtcbitcdFx0XHRpZiAod3JpdHRlbiBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiAxO1xuLVxuLVx0XHRcdCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNlc2l6ZSA9IGF1Z19zaXplO1xuLVx0XHRcdG91dHB1dCArPSB3cml0dGVuO1xuLVx0XHRcdHBheWxvYWRfb2Zmc2V0ICs9IHdyaXR0ZW47XG4tXHRcdFx0ZG9fb3V0cHV0ID0gdHJ1ZTtcbitcdFx0XHRpZiAod3JpdHRlbiBcdTAwM2UgMCkge1xuK1x0XHRcdFx0b3V0cHV0ICs9IHdyaXR0ZW47XG4rXHRcdFx0XHRkb19vdXRwdXQgPSB0cnVlO1xuK1x0XHRcdH1cbiBcdFx0fVxuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTc6NTE6MDUuMDUyNjMyOTUyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzOTA2NzY3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIGB0b29scy9wZXJmYCBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGl0J3MgbW9kaWZ5aW5nIGB0b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY2AuIFRoaXMgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmssIFwiQlBGIHByb2dyYW0hXCIgYW5kIHRoYXQgdGhpcyBpcyB1c2VkIGJ5IHRoZSBgcGVyZmAgdG9vbC4gTm93LCBgcGVyZmAgaXMgdXNlci1zcGFjZSwgYWx0aG91Z2ggaXQgZG9lcyB1c2UgQlBGIHNrZWxldG9ucyBhbmQgbG9hZHMgcHJvZ3JhbXMgaW50byB0aGUga2VybmVsLiBUaGUga2V5IGRpc3RpbmN0aW9uIGhlcmUgaXMgdGhhdCB0aGlzIHNwZWNpZmljIEJQRiBjb2RlLCB3aGlsZSBrZXJuZWwtYm91bmQgd2hlbiBydW5uaW5nIGBwZXJmYCwgKmlzbid0KiBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbCBpbWFnZSBpdHNlbGYuIEl0J3Mgc291cmNlIGNvZGUgd2l0aGluIHRoZSBgcGVyZmAgdG9vbC5cblxuTXkgaW50ZXJuYWwgY2hlY2tsaXN0IGltbWVkaWF0ZWx5IGtpY2tzIGluLiBJcyB0aGlzIHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nPyBUaGUgdXN1YWwgcnVsZXMgYXBwbHk6IERvY3VtZW50YXRpb24gY2hhbmdlcywgY29tbWVudHMsIGRlY29yYXRpdmUgbG9nZ2luZy4uLiB0aGF0J3MgYSBuby1nby4gQnV0IEkgYWxzbyBuZWVkIHRvIHRoaW5rIHNwZWNpZmljYWxseSBhYm91dCBzeXprYWxsZXIuIERvZXMgdGhpcyBwYXRjaCBjaGFuZ2Ugc29tZXRoaW5nIHRoYXQgaXMgdG91Y2hlZCBieSBzeXprYWxsZXI/XG5cblRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gIFN5emthbGxlciBmb2N1c2VzIG9uIHRoZSAqa2VybmVsKi4gIFdoaWxlIHN5emthbGxlciAqY2FuKiBmdXp6IEJQRiBwcm9ncmFtcywgaXQgZG9lc24ndCBkbyBzbyBieSBydW5uaW5nIGBwZXJmYCBvciBieSB1c2luZyBCUEYgY29kZSBwcm92aWRlZCB3aXRoIGl0LiBTeXprYWxsZXIncyBwdXJwb3NlIGlzIHRvIGZ1enogdGhlIGtlcm5lbCB2aWEgc3lzY2FsbHMuIFNvLCB0aGUgcXVlc3Rpb24gYmVjb21lcywgZG9lcyB0aGlzIHBhdGNoIG1vZGlmeSBzb21ldGhpbmcgdGhhdCBjYW4gYmUgcmVhY2hlZCBieSBhIHN5emthbGxlciBzeXNjYWxsP1xuXG5MZXQgbWUgc3RlcCBiYWNrIGFuZCBtYWtlIHN1cmUuIGB0b29scy9wZXJmYCBpcyBhIHVzZXItc3BhY2UgdG9vbC4gU3l6a2FsbGVyIGRvZXNuJ3QgZGlyZWN0bHkgcnVuIHVzZXItc3BhY2UgdG9vbHMuIEl0IGdlbmVyYXRlcyBpdHMgb3duIEJQRiBwcm9ncmFtcy4gIEl0IGRvZXNuJ3QgdXNlIHRoZSBCUEYgY29kZSBwcm92aWRlZCB3aXRoIHRoZSBgcGVyZmAgdG9vbC4gU28sIHRoZSBjb2RlIHdpdGhpbiB0aGlzIHBhdGNoIHdvbid0IGJlIGV4ZWN1dGVkIGRpcmVjdGx5IGJ5IHN5emthbGxlci5cblxuQW5kIHdoYXQgZG9lcyB0aGlzIHBhcnRpY3VsYXIgcGF0Y2ggYWN0dWFsbHkgKmRvKj8gSXQncyByZWZhY3RvcmluZyBgYXVnbWVudF9zeXNfZW50ZXJgIHVzaW5nIGBicGZfZm9yYC4gT2theSwgQlBGIGl0ZXJhdG9ycywgZXh0cmFjdGluZyBgYXVnbWVudF9hcmdgLiAgSXQgZG9lc24ndCBzZWVtIGxpa2UgdGhlIGNvcmUga2VybmVsIGNvZGUgY2hhbmdlcy5cblxuU28sIEkgbmVlZCB0byBjaGVjayB0byBiZSBzdXJlLi4uIEknbSBjb25maWRlbnQgc3l6a2FsbGVyIGlzIG5vdCBnb2luZyB0byBmdXp6IGB0b29scy9wZXJmYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoaXMgaXNuJ3QgdG91Y2hpbmcgYSBrZXJuZWwgaW50ZXJmYWNlIGRpcmVjdGx5LiAgSSBjb25maXJtIHRoYXQgdGhlIGRpZmYgaXMgKm9ubHkqIHdpdGhpbiBgdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNgLiBUaGlzIGNvbmZpcm1zIGl0J3MgYSBCUEYgcHJvZ3JhbSBmb3IgYHBlcmYgdHJhY2VgLiAgU2luY2UgaXQncyBwYXJ0IG9mIHRoZSBgcGVyZmAgdG9vbCwgYW5kIGl0J3Mgbm90IHBhcnQgb2YgdGhlIGtlcm5lbCBpbWFnZSB0aGF0IHN5emthbGxlciBmdXp6ZXMuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgaXMgbm90IGdvaW5nIHRvIGJlIGZ1enplZCBieSBzeXprYWxsZXIuXG5cbk9rYXksIG15IGNvbmNsdXNpb246IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIGNoYW5nZSBpcyBsaW1pdGVkIHRvIGEgQlBGIHByb2dyYW0gdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSB1c2VyLXNwYWNlIGBwZXJmYCB0b29sLiBTeXprYWxsZXIgZm9jdXNlcyBvbiBmdXp6aW5nIHRoZSBrZXJuZWwsIGFuZCB0aGlzIGNoYW5nZSBpcyBub3QgcGFydCBvZiB0aGUga2VybmVsJ3MgY29yZSBpbWFnZSBhbmQgaXNuJ3QgYWNjZXNzaWJsZSB2aWEgdGhlIHN5c2NhbGxzIHRoYXQgc3l6a2FsbGVyIHV0aWxpemVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDc3LCJPdXRwdXRUb2tlbnMiOjk5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTc6NTE6MTYuNDQzMzEzMTMzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSB1c2VyLXNwYWNlIGBwZXJmYCB0b29sIChgdG9vbHMvcGVyZi9gKS4gVGhpcyBjb2RlIGlzIG5vdCBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbCBpbWFnZSBhbmQgaXMgbm90IHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQga2VybmVsIGZ1enppbmcsIGFzIHN5emthbGxlciBmdXp6ZXMgdGhlIGtlcm5lbCB2aWEgc3lzY2FsbHMgYW5kIGRvZXMgbm90IGV4ZWN1dGUgdXNlci1zcGFjZSB1dGlsaXRpZXMgbGlrZSBgcGVyZmAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSB1c2VyLXNwYWNlIGBwZXJmYCB0b29sIChgdG9vbHMvcGVyZi9gKS4gVGhpcyBjb2RlIGlzIG5vdCBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbCBpbWFnZSBhbmQgaXMgbm90IHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQga2VybmVsIGZ1enppbmcsIGFzIHN5emthbGxlciBmdXp6ZXMgdGhlIGtlcm5lbCB2aWEgc3lzY2FsbHMgYW5kIGRvZXMgbm90IGV4ZWN1dGUgdXNlci1zcGFjZSB1dGlsaXRpZXMgbGlrZSBgcGVyZmAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4jn4[1] Phase: Running StartedAt: 2026-07-06 17:51:28 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jn4[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-06 17:51:28 +0000 UTC FinishedAt: 2026-07-06 17:51:36 +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,}