Name: series-workflowkw62j Phase: Failed StartedAt: 2026-09-08 11:08:52 +0000 UTC FinishedAt: 2026-09-08 11:45:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw62j[0] Phase: Succeeded StartedAt: 2026-09-08 11:08:52 +0000 UTC FinishedAt: 2026-09-08 11:45:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw62j[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 11:08:52 +0000 UTC FinishedAt: 2026-09-08 11:45:12 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHVuaXQgdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy92bWEvLCB3aGljaCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTIxNDBhZjFmMzI0N2RhYzJmODhlNmUwMTNkOTk3NjE4YWVkNTU3YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTE6NDQ6NTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jIGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jXG5pbmRleCBmYTczZmFmZjIyNjI2Li41M2U0YWJlNmE2M2U2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmNcbkBAIC00NSw2ICYjNDM7NDUsNzIgQEAgc3RhdGljIGJvb2wgdGVzdF9tbWFwX3JlZ2lvbl9iYXNpYyh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBtbWFwX3JlZ2lvbl9maWxsX2hvbGUoYm9vbCBtZXJnZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHZtYV9mbGFnc190IHZtYV9mbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfUkVBRF9CSVQsIFZNQV9XUklURV9CSVQsXG4mIzQzO1x0XHRcdFZNQV9NQVlSRUFEX0JJVCwgVk1BX01BWVdSSVRFX0JJVCwgVk1BX01BWUVYRUNfQklUKTtcbiYjNDM7XHR2bWFfZmxhZ3NfdCBtaWRkbGVfZmxhZ3MgPSB2bWFfZmxhZ3M7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCBtbSA9IHt9O1xuJiM0MztcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbiYjNDM7XHRpbnQgY291bnQgPSAwO1xuJiM0MztcdFZNQV9JVEVSQVRPUih2bWksIFx1MDAyNm1tLCAwKTtcbiYjNDM7XG4mIzQzO1x0Y3VycmVudC1cdTAwM2VtbSA9IFx1MDAyNm1tO1xuJiM0MztcdGlmICghbWVyZ2UpXG4mIzQzO1x0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNm1pZGRsZV9mbGFncywgVk1BX0VYRUNfQklUKTtcbiYjNDM7XG4mIzQzO1x0LyogTWFwIGF0IDB4MzAwMDAwLCBsZW5ndGggMHgzMDAwLiAqL1xuJiM0MztcdGFkZHIgPSBfX21tYXBfcmVnaW9uKE5VTEwsIDB4MzAwMDAwLCAweDMwMDAsIHZtYV9mbGFncywgMHgzMDAsIE5VTEwpO1xuJiM0MztcdEFTU0VSVF9FUShhZGRyLCAweDMwMDAwMCk7XG4mIzQzO1xuJiM0MztcdC8qIE1hcCBhdCAweDMwNjAwMCwgbGVuZ3RoIDB4MzAwMCwgbGVhdmluZyBhIGhvbGUuICovXG4mIzQzO1x0YWRkciA9IF9fbW1hcF9yZWdpb24oTlVMTCwgMHgzMDYwMDAsIDB4MzAwMCwgdm1hX2ZsYWdzLCAweDMwNiwgTlVMTCk7XG4mIzQzO1x0QVNTRVJUX0VRKGFkZHIsIDB4MzA2MDAwKTtcbiYjNDM7XHRBU1NFUlRfRVEobW0ubWFwX2NvdW50LCAyKTtcbiYjNDM7XG4mIzQzO1x0LyogTWFwIGF0IDB4MzAzMDAwLCBsZW5ndGggMHgzMDAwLCBmaWxsaW5nIHRoZSBob2xlLiAqL1xuJiM0MztcdGFkZHIgPSBfX21tYXBfcmVnaW9uKE5VTEwsIDB4MzAzMDAwLCAweDMwMDAsIG1pZGRsZV9mbGFncywgMHgzMDMsIE5VTEwpO1xuJiM0MztcdEFTU0VSVF9FUShhZGRyLCAweDMwMzAwMCk7XG4mIzQzO1x0QVNTRVJUX0VRKG1tLm1hcF9jb3VudCwgbWVyZ2UgPyAxIDogMyk7XG4mIzQzO1xuJiM0MztcdHZtYV9pdGVyX3NldChcdTAwMjZ2bWksIDApO1xuJiM0MztcdGZvcl9lYWNoX3ZtYSh2bWksIHZtYSkge1xuJiM0MztcdFx0Y29uc3QgdW5zaWduZWQgbG9uZyBzdGFydCA9IDB4MzAwMDAwICYjNDM7IGNvdW50ICogMHgzMDAwO1xuJiM0MztcdFx0Y29uc3QgdW5zaWduZWQgbG9uZyBlbmQgPSBtZXJnZSA/IDB4MzA5MDAwIDogc3RhcnQgJiM0MzsgMHgzMDAwO1xuJiM0MztcdFx0LyogT25seSB0aGUgbWlkZGxlIFZNQSBpbiB0aGUgbm9uLW1lcmdlIGNhc2UgaGFzIFZNQV9FWEVDLiAqL1xuJiM0MztcdFx0Y29uc3QgYm9vbCBpc19taWRkbGVfdm1hID0gY291bnQgPT0gMTtcbiYjNDM7XHRcdGNvbnN0IGJvb2wgZXhwZWN0X2V4ZWNfdm1hID0gaXNfbWlkZGxlX3ZtYSBcdTAwMjZcdTAwMjYgIW1lcmdlO1xuJiM0MztcbiYjNDM7XHRcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fc3RhcnQsIHN0YXJ0KTtcbiYjNDM7XHRcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fZW5kLCBlbmQpO1xuJiM0MztcdFx0QVNTRVJUX0VRKHZtYV9zdGFydF9wZ29mZih2bWEpLCBzdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4mIzQzO1x0XHRBU1NFUlRfRVEodm1hX3N0YXJ0X2Fub25fcGdvZmYodm1hKSwgc3RhcnQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuJiM0MztcbiYjNDM7XHRcdEFTU0VSVF9UUlVFKHZtYV90ZXN0X2FsbCh2bWEsIFZNQV9SRUFEX0JJVCwgVk1BX1dSSVRFX0JJVCxcbiYjNDM7XHRcdFx0XHRcdCBWTUFfTUFZUkVBRF9CSVQsIFZNQV9NQVlXUklURV9CSVQsXG4mIzQzO1x0XHRcdFx0XHQgVk1BX01BWUVYRUNfQklUKSk7XG4mIzQzO1x0XHRBU1NFUlRfRVEodm1hX3Rlc3Qodm1hLCBWTUFfRVhFQ19CSVQpLCBleHBlY3RfZXhlY192bWEpO1xuJiM0MztcbiYjNDM7XHRcdGNvdW50JiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShjb3VudCwgbW0ubWFwX2NvdW50KTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGNsZWFudXBfbW0oXHUwMDI2bW0sIFx1MDAyNnZtaSksIGNvdW50KTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgdGVzdF9tbWFwX3JlZ2lvbl9maWxsX2hvbGVfbWVyZ2Uodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBtbWFwX3JlZ2lvbl9maWxsX2hvbGUodHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHRlc3RfbW1hcF9yZWdpb25fZmlsbF9ob2xlX2ZsYWdzX21pc21hdGNoKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbW1hcF9yZWdpb25fZmlsbF9ob2xlKGZhbHNlKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgYm9vbCB0ZXN0X3B1cmVfYW5vbl9kZXZfemVybyh2b2lkKVxuIHtcbiBcdGNvbnN0IHZtYV9mbGFnc190IHZtYV9mbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfUkVBRF9CSVQsIFZNQV9XUklURV9CSVQsXG5AQCAtODQsNSAmIzQzOzE1MCw3IEBAIHN0YXRpYyBib29sIHRlc3RfcHVyZV9hbm9uX2Rldl96ZXJvKHZvaWQpXG4gc3RhdGljIHZvaWQgcnVuX21tYXBfdGVzdHMoaW50ICpudW1fdGVzdHMsIGludCAqbnVtX2ZhaWwpXG4ge1xuIFx0VEVTVChtbWFwX3JlZ2lvbl9iYXNpYyk7XG4mIzQzO1x0VEVTVChtbWFwX3JlZ2lvbl9maWxsX2hvbGVfbWVyZ2UpO1xuJiM0MztcdFRFU1QobW1hcF9yZWdpb25fZmlsbF9ob2xlX2ZsYWdzX21pc21hdGNoKTtcbiBcdFRFU1QocHVyZV9hbm9uX2Rldl96ZXJvKTtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTE6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHVuaXQgdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy92bWEvLCB3aGljaCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTIxNDBhZjFmMzI0N2RhYzJmODhlNmUwMTNkOTk3NjE4YWVkNTU3YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTE6NDQ6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmMgYi90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmMKaW5kZXggZmE3M2ZhZmYyMjYyNi4uNTNlNGFiZTZhNjNlNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuYwpAQCAtNDUsNiAmIzQzOzQ1LDcyIEBAIHN0YXRpYyBib29sIHRlc3RfbW1hcF9yZWdpb25fYmFzaWModm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBib29sIG1tYXBfcmVnaW9uX2ZpbGxfaG9sZShib29sIG1lcmdlKQomIzQzO3sKJiM0MzsJY29uc3Qgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gbWtfdm1hX2ZsYWdzKFZNQV9SRUFEX0JJVCwgVk1BX1dSSVRFX0JJVCwKJiM0MzsJCQlWTUFfTUFZUkVBRF9CSVQsIFZNQV9NQVlXUklURV9CSVQsIFZNQV9NQVlFWEVDX0JJVCk7CiYjNDM7CXZtYV9mbGFnc190IG1pZGRsZV9mbGFncyA9IHZtYV9mbGFnczsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCBtbSA9IHt9OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKJiM0MzsJdW5zaWduZWQgbG9uZyBhZGRyOwomIzQzOwlpbnQgY291bnQgPSAwOwomIzQzOwlWTUFfSVRFUkFUT1Iodm1pLCAmYW1wO21tLCAwKTsKJiM0MzsKJiM0MzsJY3VycmVudC0mZ3Q7bW0gPSAmYW1wO21tOwomIzQzOwlpZiAoIW1lcmdlKQomIzQzOwkJdm1hX2ZsYWdzX3NldCgmYW1wO21pZGRsZV9mbGFncywgVk1BX0VYRUNfQklUKTsKJiM0MzsKJiM0MzsJLyogTWFwIGF0IDB4MzAwMDAwLCBsZW5ndGggMHgzMDAwLiAqLwomIzQzOwlhZGRyID0gX19tbWFwX3JlZ2lvbihOVUxMLCAweDMwMDAwMCwgMHgzMDAwLCB2bWFfZmxhZ3MsIDB4MzAwLCBOVUxMKTsKJiM0MzsJQVNTRVJUX0VRKGFkZHIsIDB4MzAwMDAwKTsKJiM0MzsKJiM0MzsJLyogTWFwIGF0IDB4MzA2MDAwLCBsZW5ndGggMHgzMDAwLCBsZWF2aW5nIGEgaG9sZS4gKi8KJiM0MzsJYWRkciA9IF9fbW1hcF9yZWdpb24oTlVMTCwgMHgzMDYwMDAsIDB4MzAwMCwgdm1hX2ZsYWdzLCAweDMwNiwgTlVMTCk7CiYjNDM7CUFTU0VSVF9FUShhZGRyLCAweDMwNjAwMCk7CiYjNDM7CUFTU0VSVF9FUShtbS5tYXBfY291bnQsIDIpOwomIzQzOwomIzQzOwkvKiBNYXAgYXQgMHgzMDMwMDAsIGxlbmd0aCAweDMwMDAsIGZpbGxpbmcgdGhlIGhvbGUuICovCiYjNDM7CWFkZHIgPSBfX21tYXBfcmVnaW9uKE5VTEwsIDB4MzAzMDAwLCAweDMwMDAsIG1pZGRsZV9mbGFncywgMHgzMDMsIE5VTEwpOwomIzQzOwlBU1NFUlRfRVEoYWRkciwgMHgzMDMwMDApOwomIzQzOwlBU1NFUlRfRVEobW0ubWFwX2NvdW50LCBtZXJnZSA/IDEgOiAzKTsKJiM0MzsKJiM0MzsJdm1hX2l0ZXJfc2V0KCZhbXA7dm1pLCAwKTsKJiM0MzsJZm9yX2VhY2hfdm1hKHZtaSwgdm1hKSB7CiYjNDM7CQljb25zdCB1bnNpZ25lZCBsb25nIHN0YXJ0ID0gMHgzMDAwMDAgJiM0MzsgY291bnQgKiAweDMwMDA7CiYjNDM7CQljb25zdCB1bnNpZ25lZCBsb25nIGVuZCA9IG1lcmdlID8gMHgzMDkwMDAgOiBzdGFydCAmIzQzOyAweDMwMDA7CiYjNDM7CQkvKiBPbmx5IHRoZSBtaWRkbGUgVk1BIGluIHRoZSBub24tbWVyZ2UgY2FzZSBoYXMgVk1BX0VYRUMuICovCiYjNDM7CQljb25zdCBib29sIGlzX21pZGRsZV92bWEgPSBjb3VudCA9PSAxOwomIzQzOwkJY29uc3QgYm9vbCBleHBlY3RfZXhlY192bWEgPSBpc19taWRkbGVfdm1hICZhbXA7JmFtcDsgIW1lcmdlOwomIzQzOwomIzQzOwkJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fc3RhcnQsIHN0YXJ0KTsKJiM0MzsJCUFTU0VSVF9FUSh2bWEtJmd0O3ZtX2VuZCwgZW5kKTsKJiM0MzsJCUFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgc3RhcnQgJmd0OyZndDsgUEFHRV9TSElGVCk7CiYjNDM7CQlBU1NFUlRfRVEodm1hX3N0YXJ0X2Fub25fcGdvZmYodm1hKSwgc3RhcnQgJmd0OyZndDsgUEFHRV9TSElGVCk7CiYjNDM7CiYjNDM7CQlBU1NFUlRfVFJVRSh2bWFfdGVzdF9hbGwodm1hLCBWTUFfUkVBRF9CSVQsIFZNQV9XUklURV9CSVQsCiYjNDM7CQkJCQkgVk1BX01BWVJFQURfQklULCBWTUFfTUFZV1JJVEVfQklULAomIzQzOwkJCQkJIFZNQV9NQVlFWEVDX0JJVCkpOwomIzQzOwkJQVNTRVJUX0VRKHZtYV90ZXN0KHZtYSwgVk1BX0VYRUNfQklUKSwgZXhwZWN0X2V4ZWNfdm1hKTsKJiM0MzsKJiM0MzsJCWNvdW50JiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwlBU1NFUlRfRVEoY291bnQsIG1tLm1hcF9jb3VudCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShjbGVhbnVwX21tKCZhbXA7bW0sICZhbXA7dm1pKSwgY291bnQpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgdGVzdF9tbWFwX3JlZ2lvbl9maWxsX2hvbGVfbWVyZ2Uodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBtbWFwX3JlZ2lvbl9maWxsX2hvbGUodHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHRlc3RfbW1hcF9yZWdpb25fZmlsbF9ob2xlX2ZsYWdzX21pc21hdGNoKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gbW1hcF9yZWdpb25fZmlsbF9ob2xlKGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCB0ZXN0X3B1cmVfYW5vbl9kZXZfemVybyh2b2lkKQogewogCWNvbnN0IHZtYV9mbGFnc190IHZtYV9mbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfUkVBRF9CSVQsIFZNQV9XUklURV9CSVQsCkBAIC04NCw1ICYjNDM7MTUwLDcgQEAgc3RhdGljIGJvb2wgdGVzdF9wdXJlX2Fub25fZGV2X3plcm8odm9pZCkKIHN0YXRpYyB2b2lkIHJ1bl9tbWFwX3Rlc3RzKGludCAqbnVtX3Rlc3RzLCBpbnQgKm51bV9mYWlsKQogewogCVRFU1QobW1hcF9yZWdpb25fYmFzaWMpOwomIzQzOwlURVNUKG1tYXBfcmVnaW9uX2ZpbGxfaG9sZV9tZXJnZSk7CiYjNDM7CVRFU1QobW1hcF9yZWdpb25fZmlsbF9ob2xlX2ZsYWdzX21pc21hdGNoKTsKIAlURVNUKHB1cmVfYW5vbl9kZXZfemVybyk7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NTQKCQkJCQkJCW91dHB1dDogNjUKCQkJCQkJCXRob3VnaHRzOiAzNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIG9ubHkgdG91Y2hlcyBgdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jYC4gVGhhdCYjMzk7cyBpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvdm1hL2AgZGlyZWN0b3J5LCB3aGljaCwgYXMgSSBrbm93LCBpcyBhIHVzZXItc3BhY2Ugc2VsZnRlc3QgZnJhbWV3b3JrIGZvciBWTUEgb3BlcmF0aW9ucy4gSXQmIzM5O3Mgbm90IGtlcm5lbCBjb2RlLCBpdCYjMzk7cyB1c2VyLXNwYWNlIHRlc3Rpbmcgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuCgpOb3csIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBmb3IgYFdvcnRoRnV6emluZ2AuIFNlY3Rpb24gMiBpcyBwcmV0dHkgY2xlYXI6IHdlIG9ubHkgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjaGFuZ2VzIGZhbGwgc3RyaWN0bHkgaW50byBzcGVjaWZpYyBjYXRlZ29yaWVzLiBMZXQmIzM5O3Mgc2VlLi4uIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXMsIHJpZ2h0PyBXaGljaCBpbmNsdWRlcyB0aGluZ3MgbGlrZSB1c2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIHRoYXQgKmRvbiYjMzk7dCogYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgoKTG9va2luZyBhdCB0aGUgbW9kaWZpZWQgZmlsZSwgYHRvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuY2AsIGFuZCBjaGVja2luZyB0aGUgZGlmZiwgSSBjYW4gY29uZmlybSB0aGF0IHRoaXMgaXMgdGhlICpvbmx5KiBmaWxlIHRvdWNoZWQsIGFuZCBpdCYjMzk7cyB3aXRoaW4gdGhlIHRvb2xzIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGluIHRoZSB1c2VyLXNwYWNlIHRlc3RpbmcgZnJhbWV3b3JrLiBJIGRvbiYjMzk7dCBuZWVkIHRvIGRvIGFueSBkZWVwIGRpdmluZyB3aXRoIGBnaXQgZ3JlcGAgb3IgYHJlYWQtZmlsZWAgaGVyZTsgdGhlIGRpZmYgaXMgc2VsZi1jb250YWluZWQgYW5kIG9idmlvdXMuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXM6IGBXb3J0aEZ1enppbmc6IGZhbHNlYC4gTm8ga2VybmVsIGNvZGUgaXMgYmVpbmcgbW9kaWZpZWQsIG9ubHkgdXNlci1zcGFjZSB0ZXN0cy4gYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmUgYW4gZW1wdHkgbGlzdCwgYW5kIGxpa2V3aXNlIGBGb2N1c1N5bWJvbHNgIGlzIGVtcHR5IHRvby4gVGhlIHJhdGlvbmFsZSBpcyBzdHJhaWdodGZvcndhcmQ6IHRoaXMgcGF0Y2ggaXMgc29sZWx5IGZvY3VzZWQgb24gdXNlci1zcGFjZSB1bml0IHRlc3RzIGxvY2F0ZWQgaW4gYHRvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuY2AuIFRoaXMgbW9kaWZpY2F0aW9uIGRvZXNuJiMzOTt0IGludGVyYWN0IHdpdGggdGhlIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHVuaXQgdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy92bWEvLCB3aGljaCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdW5pdCB0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3ZtYS8sIHdoaWNoIGRvZXMgbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTE6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjQ0OjU0LjU4NDcxNzU3NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxOTc4OTc1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdW5pdCB0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3ZtYS8sIHdoaWNoIGRvZXMgbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjQ0OjU0LjU4NDczMTk2NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzMDQ0NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTIxNDBhZjFmMzI0N2RhYzJmODhlNmUwMTNkOTk3NjE4YWVkNTU3YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDExOjQ0OjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuY1xcbmluZGV4IGZhNzNmYWZmMjI2MjYuLjUzZTRhYmU2YTYzZTYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jXFxuQEAgLTQ1LDYgKzQ1LDcyIEBAIHN0YXRpYyBib29sIHRlc3RfbW1hcF9yZWdpb25fYmFzaWModm9pZClcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIG1tYXBfcmVnaW9uX2ZpbGxfaG9sZShib29sIG1lcmdlKVxcbit7XFxuK1xcdGNvbnN0IHZtYV9mbGFnc190IHZtYV9mbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfUkVBRF9CSVQsIFZNQV9XUklURV9CSVQsXFxuK1xcdFxcdFxcdFZNQV9NQVlSRUFEX0JJVCwgVk1BX01BWVdSSVRFX0JJVCwgVk1BX01BWUVYRUNfQklUKTtcXG4rXFx0dm1hX2ZsYWdzX3QgbWlkZGxlX2ZsYWdzID0gdm1hX2ZsYWdzO1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0IG1tID0ge307XFxuK1xcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbitcXHR1bnNpZ25lZCBsb25nIGFkZHI7XFxuK1xcdGludCBjb3VudCA9IDA7XFxuK1xcdFZNQV9JVEVSQVRPUih2bWksIFxcdTAwMjZtbSwgMCk7XFxuK1xcbitcXHRjdXJyZW50LVxcdTAwM2VtbSA9IFxcdTAwMjZtbTtcXG4rXFx0aWYgKCFtZXJnZSlcXG4rXFx0XFx0dm1hX2ZsYWdzX3NldChcXHUwMDI2bWlkZGxlX2ZsYWdzLCBWTUFfRVhFQ19CSVQpO1xcbitcXG4rXFx0LyogTWFwIGF0IDB4MzAwMDAwLCBsZW5ndGggMHgzMDAwLiAqL1xcbitcXHRhZGRyID0gX19tbWFwX3JlZ2lvbihOVUxMLCAweDMwMDAwMCwgMHgzMDAwLCB2bWFfZmxhZ3MsIDB4MzAwLCBOVUxMKTtcXG4rXFx0QVNTRVJUX0VRKGFkZHIsIDB4MzAwMDAwKTtcXG4rXFxuK1xcdC8qIE1hcCBhdCAweDMwNjAwMCwgbGVuZ3RoIDB4MzAwMCwgbGVhdmluZyBhIGhvbGUuICovXFxuK1xcdGFkZHIgPSBfX21tYXBfcmVnaW9uKE5VTEwsIDB4MzA2MDAwLCAweDMwMDAsIHZtYV9mbGFncywgMHgzMDYsIE5VTEwpO1xcbitcXHRBU1NFUlRfRVEoYWRkciwgMHgzMDYwMDApO1xcbitcXHRBU1NFUlRfRVEobW0ubWFwX2NvdW50LCAyKTtcXG4rXFxuK1xcdC8qIE1hcCBhdCAweDMwMzAwMCwgbGVuZ3RoIDB4MzAwMCwgZmlsbGluZyB0aGUgaG9sZS4gKi9cXG4rXFx0YWRkciA9IF9fbW1hcF9yZWdpb24oTlVMTCwgMHgzMDMwMDAsIDB4MzAwMCwgbWlkZGxlX2ZsYWdzLCAweDMwMywgTlVMTCk7XFxuK1xcdEFTU0VSVF9FUShhZGRyLCAweDMwMzAwMCk7XFxuK1xcdEFTU0VSVF9FUShtbS5tYXBfY291bnQsIG1lcmdlID8gMSA6IDMpO1xcbitcXG4rXFx0dm1hX2l0ZXJfc2V0KFxcdTAwMjZ2bWksIDApO1xcbitcXHRmb3JfZWFjaF92bWEodm1pLCB2bWEpIHtcXG4rXFx0XFx0Y29uc3QgdW5zaWduZWQgbG9uZyBzdGFydCA9IDB4MzAwMDAwICsgY291bnQgKiAweDMwMDA7XFxuK1xcdFxcdGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5kID0gbWVyZ2UgPyAweDMwOTAwMCA6IHN0YXJ0ICsgMHgzMDAwO1xcbitcXHRcXHQvKiBPbmx5IHRoZSBtaWRkbGUgVk1BIGluIHRoZSBub24tbWVyZ2UgY2FzZSBoYXMgVk1BX0VYRUMuICovXFxuK1xcdFxcdGNvbnN0IGJvb2wgaXNfbWlkZGxlX3ZtYSA9IGNvdW50ID09IDE7XFxuK1xcdFxcdGNvbnN0IGJvb2wgZXhwZWN0X2V4ZWNfdm1hID0gaXNfbWlkZGxlX3ZtYSBcXHUwMDI2XFx1MDAyNiAhbWVyZ2U7XFxuK1xcbitcXHRcXHRBU1NFUlRfRVEodm1hLVxcdTAwM2V2bV9zdGFydCwgc3RhcnQpO1xcbitcXHRcXHRBU1NFUlRfRVEodm1hLVxcdTAwM2V2bV9lbmQsIGVuZCk7XFxuK1xcdFxcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgc3RhcnQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuK1xcdFxcdEFTU0VSVF9FUSh2bWFfc3RhcnRfYW5vbl9wZ29mZih2bWEpLCBzdGFydCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4rXFxuK1xcdFxcdEFTU0VSVF9UUlVFKHZtYV90ZXN0X2FsbCh2bWEsIFZNQV9SRUFEX0JJVCwgVk1BX1dSSVRFX0JJVCxcXG4rXFx0XFx0XFx0XFx0XFx0IFZNQV9NQVlSRUFEX0JJVCwgVk1BX01BWVdSSVRFX0JJVCxcXG4rXFx0XFx0XFx0XFx0XFx0IFZNQV9NQVlFWEVDX0JJVCkpO1xcbitcXHRcXHRBU1NFUlRfRVEodm1hX3Rlc3Qodm1hLCBWTUFfRVhFQ19CSVQpLCBleHBlY3RfZXhlY192bWEpO1xcbitcXG4rXFx0XFx0Y291bnQrKztcXG4rXFx0fVxcbitcXG4rXFx0QVNTRVJUX0VRKGNvdW50LCBtbS5tYXBfY291bnQpO1xcbitcXG4rXFx0QVNTRVJUX0VRKGNsZWFudXBfbW0oXFx1MDAyNm1tLCBcXHUwMDI2dm1pKSwgY291bnQpO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgdGVzdF9tbWFwX3JlZ2lvbl9maWxsX2hvbGVfbWVyZ2Uodm9pZClcXG4re1xcbitcXHRyZXR1cm4gbW1hcF9yZWdpb25fZmlsbF9ob2xlKHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCB0ZXN0X21tYXBfcmVnaW9uX2ZpbGxfaG9sZV9mbGFnc19taXNtYXRjaCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBtbWFwX3JlZ2lvbl9maWxsX2hvbGUoZmFsc2UpO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCB0ZXN0X3B1cmVfYW5vbl9kZXZfemVybyh2b2lkKVxcbiB7XFxuIFxcdGNvbnN0IHZtYV9mbGFnc190IHZtYV9mbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfUkVBRF9CSVQsIFZNQV9XUklURV9CSVQsXFxuQEAgLTg0LDUgKzE1MCw3IEBAIHN0YXRpYyBib29sIHRlc3RfcHVyZV9hbm9uX2Rldl96ZXJvKHZvaWQpXFxuIHN0YXRpYyB2b2lkIHJ1bl9tbWFwX3Rlc3RzKGludCAqbnVtX3Rlc3RzLCBpbnQgKm51bV9mYWlsKVxcbiB7XFxuIFxcdFRFU1QobW1hcF9yZWdpb25fYmFzaWMpO1xcbitcXHRURVNUKG1tYXBfcmVnaW9uX2ZpbGxfaG9sZV9tZXJnZSk7XFxuK1xcdFRFU1QobW1hcF9yZWdpb25fZmlsbF9ob2xlX2ZsYWdzX21pc21hdGNoKTtcXG4gXFx0VEVTVChwdXJlX2Fub25fZGV2X3plcm8pO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjQ0OjU1LjEyODQ2ODc1N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjY1NDEzMDI0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHVuaXQgdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy92bWEvLCB3aGljaCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDEyMTQwYWYxZjMyNDdkYWMyZjg4ZTZlMDEzZDk5NzYxOGFlZDU1N2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDExOjQ0OjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jIGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jXG5pbmRleCBmYTczZmFmZjIyNjI2Li41M2U0YWJlNmE2M2U2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmNcbkBAIC00NSw2ICs0NSw3MiBAQCBzdGF0aWMgYm9vbCB0ZXN0X21tYXBfcmVnaW9uX2Jhc2ljKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgbW1hcF9yZWdpb25fZmlsbF9ob2xlKGJvb2wgbWVyZ2UpXG4re1xuK1x0Y29uc3Qgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gbWtfdm1hX2ZsYWdzKFZNQV9SRUFEX0JJVCwgVk1BX1dSSVRFX0JJVCxcbitcdFx0XHRWTUFfTUFZUkVBRF9CSVQsIFZNQV9NQVlXUklURV9CSVQsIFZNQV9NQVlFWEVDX0JJVCk7XG4rXHR2bWFfZmxhZ3NfdCBtaWRkbGVfZmxhZ3MgPSB2bWFfZmxhZ3M7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0IG1tID0ge307XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbitcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbitcdGludCBjb3VudCA9IDA7XG4rXHRWTUFfSVRFUkFUT1Iodm1pLCBcdTAwMjZtbSwgMCk7XG4rXG4rXHRjdXJyZW50LVx1MDAzZW1tID0gXHUwMDI2bW07XG4rXHRpZiAoIW1lcmdlKVxuK1x0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNm1pZGRsZV9mbGFncywgVk1BX0VYRUNfQklUKTtcbitcbitcdC8qIE1hcCBhdCAweDMwMDAwMCwgbGVuZ3RoIDB4MzAwMC4gKi9cbitcdGFkZHIgPSBfX21tYXBfcmVnaW9uKE5VTEwsIDB4MzAwMDAwLCAweDMwMDAsIHZtYV9mbGFncywgMHgzMDAsIE5VTEwpO1xuK1x0QVNTRVJUX0VRKGFkZHIsIDB4MzAwMDAwKTtcbitcbitcdC8qIE1hcCBhdCAweDMwNjAwMCwgbGVuZ3RoIDB4MzAwMCwgbGVhdmluZyBhIGhvbGUuICovXG4rXHRhZGRyID0gX19tbWFwX3JlZ2lvbihOVUxMLCAweDMwNjAwMCwgMHgzMDAwLCB2bWFfZmxhZ3MsIDB4MzA2LCBOVUxMKTtcbitcdEFTU0VSVF9FUShhZGRyLCAweDMwNjAwMCk7XG4rXHRBU1NFUlRfRVEobW0ubWFwX2NvdW50LCAyKTtcbitcbitcdC8qIE1hcCBhdCAweDMwMzAwMCwgbGVuZ3RoIDB4MzAwMCwgZmlsbGluZyB0aGUgaG9sZS4gKi9cbitcdGFkZHIgPSBfX21tYXBfcmVnaW9uKE5VTEwsIDB4MzAzMDAwLCAweDMwMDAsIG1pZGRsZV9mbGFncywgMHgzMDMsIE5VTEwpO1xuK1x0QVNTRVJUX0VRKGFkZHIsIDB4MzAzMDAwKTtcbitcdEFTU0VSVF9FUShtbS5tYXBfY291bnQsIG1lcmdlID8gMSA6IDMpO1xuK1xuK1x0dm1hX2l0ZXJfc2V0KFx1MDAyNnZtaSwgMCk7XG4rXHRmb3JfZWFjaF92bWEodm1pLCB2bWEpIHtcbitcdFx0Y29uc3QgdW5zaWduZWQgbG9uZyBzdGFydCA9IDB4MzAwMDAwICsgY291bnQgKiAweDMwMDA7XG4rXHRcdGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5kID0gbWVyZ2UgPyAweDMwOTAwMCA6IHN0YXJ0ICsgMHgzMDAwO1xuK1x0XHQvKiBPbmx5IHRoZSBtaWRkbGUgVk1BIGluIHRoZSBub24tbWVyZ2UgY2FzZSBoYXMgVk1BX0VYRUMuICovXG4rXHRcdGNvbnN0IGJvb2wgaXNfbWlkZGxlX3ZtYSA9IGNvdW50ID09IDE7XG4rXHRcdGNvbnN0IGJvb2wgZXhwZWN0X2V4ZWNfdm1hID0gaXNfbWlkZGxlX3ZtYSBcdTAwMjZcdTAwMjYgIW1lcmdlO1xuK1xuK1x0XHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX3N0YXJ0LCBzdGFydCk7XG4rXHRcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fZW5kLCBlbmQpO1xuK1x0XHRBU1NFUlRfRVEodm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbitcdFx0QVNTRVJUX0VRKHZtYV9zdGFydF9hbm9uX3Bnb2ZmKHZtYSksIHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbitcbitcdFx0QVNTRVJUX1RSVUUodm1hX3Rlc3RfYWxsKHZtYSwgVk1BX1JFQURfQklULCBWTUFfV1JJVEVfQklULFxuK1x0XHRcdFx0XHQgVk1BX01BWVJFQURfQklULCBWTUFfTUFZV1JJVEVfQklULFxuK1x0XHRcdFx0XHQgVk1BX01BWUVYRUNfQklUKSk7XG4rXHRcdEFTU0VSVF9FUSh2bWFfdGVzdCh2bWEsIFZNQV9FWEVDX0JJVCksIGV4cGVjdF9leGVjX3ZtYSk7XG4rXG4rXHRcdGNvdW50Kys7XG4rXHR9XG4rXG4rXHRBU1NFUlRfRVEoY291bnQsIG1tLm1hcF9jb3VudCk7XG4rXG4rXHRBU1NFUlRfRVEoY2xlYW51cF9tbShcdTAwMjZtbSwgXHUwMDI2dm1pKSwgY291bnQpO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyBib29sIHRlc3RfbW1hcF9yZWdpb25fZmlsbF9ob2xlX21lcmdlKHZvaWQpXG4re1xuK1x0cmV0dXJuIG1tYXBfcmVnaW9uX2ZpbGxfaG9sZSh0cnVlKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgdGVzdF9tbWFwX3JlZ2lvbl9maWxsX2hvbGVfZmxhZ3NfbWlzbWF0Y2godm9pZClcbit7XG4rXHRyZXR1cm4gbW1hcF9yZWdpb25fZmlsbF9ob2xlKGZhbHNlKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgdGVzdF9wdXJlX2Fub25fZGV2X3plcm8odm9pZClcbiB7XG4gXHRjb25zdCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MgPSBta192bWFfZmxhZ3MoVk1BX1JFQURfQklULCBWTUFfV1JJVEVfQklULFxuQEAgLTg0LDUgKzE1MCw3IEBAIHN0YXRpYyBib29sIHRlc3RfcHVyZV9hbm9uX2Rldl96ZXJvKHZvaWQpXG4gc3RhdGljIHZvaWQgcnVuX21tYXBfdGVzdHMoaW50ICpudW1fdGVzdHMsIGludCAqbnVtX2ZhaWwpXG4ge1xuIFx0VEVTVChtbWFwX3JlZ2lvbl9iYXNpYyk7XG4rXHRURVNUKG1tYXBfcmVnaW9uX2ZpbGxfaG9sZV9tZXJnZSk7XG4rXHRURVNUKG1tYXBfcmVnaW9uX2ZpbGxfaG9sZV9mbGFnc19taXNtYXRjaCk7XG4gXHRURVNUKHB1cmVfYW5vbl9kZXZfemVybyk7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6NDQ6NTUuMTI4NDcxMzM3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY1NDA5ODc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIG9ubHkgdG91Y2hlcyBgdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jYC4gVGhhdCdzIGluIHRoZSBgdG9vbHMvdGVzdGluZy92bWEvYCBkaXJlY3RvcnksIHdoaWNoLCBhcyBJIGtub3csIGlzIGEgdXNlci1zcGFjZSBzZWxmdGVzdCBmcmFtZXdvcmsgZm9yIFZNQSBvcGVyYXRpb25zLiBJdCdzIG5vdCBrZXJuZWwgY29kZSwgaXQncyB1c2VyLXNwYWNlIHRlc3Rpbmcgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuXG5cbk5vdywgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGZvciBgV29ydGhGdXp6aW5nYC4gU2VjdGlvbiAyIGlzIHByZXR0eSBjbGVhcjogd2Ugb25seSBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgZmFsbCBzdHJpY3RseSBpbnRvIHNwZWNpZmljIGNhdGVnb3JpZXMuIExldCdzIHNlZS4uLiBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzLCByaWdodD8gV2hpY2ggaW5jbHVkZXMgdGhpbmdzIGxpa2UgdXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyB0aGF0ICpkb24ndCogYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuXG5Mb29raW5nIGF0IHRoZSBtb2RpZmllZCBmaWxlLCBgdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jYCwgYW5kIGNoZWNraW5nIHRoZSBkaWZmLCBJIGNhbiBjb25maXJtIHRoYXQgdGhpcyBpcyB0aGUgKm9ubHkqIGZpbGUgdG91Y2hlZCwgYW5kIGl0J3Mgd2l0aGluIHRoZSB0b29scyBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBpbiB0aGUgdXNlci1zcGFjZSB0ZXN0aW5nIGZyYW1ld29yay4gSSBkb24ndCBuZWVkIHRvIGRvIGFueSBkZWVwIGRpdmluZyB3aXRoIGBnaXQgZ3JlcGAgb3IgYHJlYWQtZmlsZWAgaGVyZTsgdGhlIGRpZmYgaXMgc2VsZi1jb250YWluZWQgYW5kIG9idmlvdXMuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpczogYFdvcnRoRnV6emluZzogZmFsc2VgLiBObyBrZXJuZWwgY29kZSBpcyBiZWluZyBtb2RpZmllZCwgb25seSB1c2VyLXNwYWNlIHRlc3RzLiBgRW5hYmxlQ29uZmlnc2Agd2lsbCBiZSBhbiBlbXB0eSBsaXN0LCBhbmQgbGlrZXdpc2UgYEZvY3VzU3ltYm9sc2AgaXMgZW1wdHkgdG9vLiBUaGUgcmF0aW9uYWxlIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBpcyBzb2xlbHkgZm9jdXNlZCBvbiB1c2VyLXNwYWNlIHVuaXQgdGVzdHMgbG9jYXRlZCBpbiBgdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jYC4gVGhpcyBtb2RpZmljYXRpb24gZG9lc24ndCBpbnRlcmFjdCB3aXRoIHRoZSBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGFueSBrZXJuZWwgbW9kdWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk1NCwiT3V0cHV0VG9rZW5zIjo2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjQ1OjAxLjc4MjU3MzMwNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHVuaXQgdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy92bWEvLCB3aGljaCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdW5pdCB0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3ZtYS8sIHdoaWNoIGRvZXMgbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjQ1OjAxLjc4MjYwMTA0NVoiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkw62j[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 11:08:52 +0000 UTC FinishedAt: 2026-09-08 11:45:02 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHVuaXQgdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy92bWEvLCB3aGljaCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTIxNDBhZjFmMzI0N2RhYzJmODhlNmUwMTNkOTk3NjE4YWVkNTU3YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTE6NDQ6NTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jIGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jXG5pbmRleCBmYTczZmFmZjIyNjI2Li41M2U0YWJlNmE2M2U2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmNcbkBAIC00NSw2ICYjNDM7NDUsNzIgQEAgc3RhdGljIGJvb2wgdGVzdF9tbWFwX3JlZ2lvbl9iYXNpYyh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBtbWFwX3JlZ2lvbl9maWxsX2hvbGUoYm9vbCBtZXJnZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHZtYV9mbGFnc190IHZtYV9mbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfUkVBRF9CSVQsIFZNQV9XUklURV9CSVQsXG4mIzQzO1x0XHRcdFZNQV9NQVlSRUFEX0JJVCwgVk1BX01BWVdSSVRFX0JJVCwgVk1BX01BWUVYRUNfQklUKTtcbiYjNDM7XHR2bWFfZmxhZ3NfdCBtaWRkbGVfZmxhZ3MgPSB2bWFfZmxhZ3M7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCBtbSA9IHt9O1xuJiM0MztcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbiYjNDM7XHRpbnQgY291bnQgPSAwO1xuJiM0MztcdFZNQV9JVEVSQVRPUih2bWksIFx1MDAyNm1tLCAwKTtcbiYjNDM7XG4mIzQzO1x0Y3VycmVudC1cdTAwM2VtbSA9IFx1MDAyNm1tO1xuJiM0MztcdGlmICghbWVyZ2UpXG4mIzQzO1x0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNm1pZGRsZV9mbGFncywgVk1BX0VYRUNfQklUKTtcbiYjNDM7XG4mIzQzO1x0LyogTWFwIGF0IDB4MzAwMDAwLCBsZW5ndGggMHgzMDAwLiAqL1xuJiM0MztcdGFkZHIgPSBfX21tYXBfcmVnaW9uKE5VTEwsIDB4MzAwMDAwLCAweDMwMDAsIHZtYV9mbGFncywgMHgzMDAsIE5VTEwpO1xuJiM0MztcdEFTU0VSVF9FUShhZGRyLCAweDMwMDAwMCk7XG4mIzQzO1xuJiM0MztcdC8qIE1hcCBhdCAweDMwNjAwMCwgbGVuZ3RoIDB4MzAwMCwgbGVhdmluZyBhIGhvbGUuICovXG4mIzQzO1x0YWRkciA9IF9fbW1hcF9yZWdpb24oTlVMTCwgMHgzMDYwMDAsIDB4MzAwMCwgdm1hX2ZsYWdzLCAweDMwNiwgTlVMTCk7XG4mIzQzO1x0QVNTRVJUX0VRKGFkZHIsIDB4MzA2MDAwKTtcbiYjNDM7XHRBU1NFUlRfRVEobW0ubWFwX2NvdW50LCAyKTtcbiYjNDM7XG4mIzQzO1x0LyogTWFwIGF0IDB4MzAzMDAwLCBsZW5ndGggMHgzMDAwLCBmaWxsaW5nIHRoZSBob2xlLiAqL1xuJiM0MztcdGFkZHIgPSBfX21tYXBfcmVnaW9uKE5VTEwsIDB4MzAzMDAwLCAweDMwMDAsIG1pZGRsZV9mbGFncywgMHgzMDMsIE5VTEwpO1xuJiM0MztcdEFTU0VSVF9FUShhZGRyLCAweDMwMzAwMCk7XG4mIzQzO1x0QVNTRVJUX0VRKG1tLm1hcF9jb3VudCwgbWVyZ2UgPyAxIDogMyk7XG4mIzQzO1xuJiM0MztcdHZtYV9pdGVyX3NldChcdTAwMjZ2bWksIDApO1xuJiM0MztcdGZvcl9lYWNoX3ZtYSh2bWksIHZtYSkge1xuJiM0MztcdFx0Y29uc3QgdW5zaWduZWQgbG9uZyBzdGFydCA9IDB4MzAwMDAwICYjNDM7IGNvdW50ICogMHgzMDAwO1xuJiM0MztcdFx0Y29uc3QgdW5zaWduZWQgbG9uZyBlbmQgPSBtZXJnZSA/IDB4MzA5MDAwIDogc3RhcnQgJiM0MzsgMHgzMDAwO1xuJiM0MztcdFx0LyogT25seSB0aGUgbWlkZGxlIFZNQSBpbiB0aGUgbm9uLW1lcmdlIGNhc2UgaGFzIFZNQV9FWEVDLiAqL1xuJiM0MztcdFx0Y29uc3QgYm9vbCBpc19taWRkbGVfdm1hID0gY291bnQgPT0gMTtcbiYjNDM7XHRcdGNvbnN0IGJvb2wgZXhwZWN0X2V4ZWNfdm1hID0gaXNfbWlkZGxlX3ZtYSBcdTAwMjZcdTAwMjYgIW1lcmdlO1xuJiM0MztcbiYjNDM7XHRcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fc3RhcnQsIHN0YXJ0KTtcbiYjNDM7XHRcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fZW5kLCBlbmQpO1xuJiM0MztcdFx0QVNTRVJUX0VRKHZtYV9zdGFydF9wZ29mZih2bWEpLCBzdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4mIzQzO1x0XHRBU1NFUlRfRVEodm1hX3N0YXJ0X2Fub25fcGdvZmYodm1hKSwgc3RhcnQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuJiM0MztcbiYjNDM7XHRcdEFTU0VSVF9UUlVFKHZtYV90ZXN0X2FsbCh2bWEsIFZNQV9SRUFEX0JJVCwgVk1BX1dSSVRFX0JJVCxcbiYjNDM7XHRcdFx0XHRcdCBWTUFfTUFZUkVBRF9CSVQsIFZNQV9NQVlXUklURV9CSVQsXG4mIzQzO1x0XHRcdFx0XHQgVk1BX01BWUVYRUNfQklUKSk7XG4mIzQzO1x0XHRBU1NFUlRfRVEodm1hX3Rlc3Qodm1hLCBWTUFfRVhFQ19CSVQpLCBleHBlY3RfZXhlY192bWEpO1xuJiM0MztcbiYjNDM7XHRcdGNvdW50JiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShjb3VudCwgbW0ubWFwX2NvdW50KTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGNsZWFudXBfbW0oXHUwMDI2bW0sIFx1MDAyNnZtaSksIGNvdW50KTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgdGVzdF9tbWFwX3JlZ2lvbl9maWxsX2hvbGVfbWVyZ2Uodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBtbWFwX3JlZ2lvbl9maWxsX2hvbGUodHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHRlc3RfbW1hcF9yZWdpb25fZmlsbF9ob2xlX2ZsYWdzX21pc21hdGNoKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbW1hcF9yZWdpb25fZmlsbF9ob2xlKGZhbHNlKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgYm9vbCB0ZXN0X3B1cmVfYW5vbl9kZXZfemVybyh2b2lkKVxuIHtcbiBcdGNvbnN0IHZtYV9mbGFnc190IHZtYV9mbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfUkVBRF9CSVQsIFZNQV9XUklURV9CSVQsXG5AQCAtODQsNSAmIzQzOzE1MCw3IEBAIHN0YXRpYyBib29sIHRlc3RfcHVyZV9hbm9uX2Rldl96ZXJvKHZvaWQpXG4gc3RhdGljIHZvaWQgcnVuX21tYXBfdGVzdHMoaW50ICpudW1fdGVzdHMsIGludCAqbnVtX2ZhaWwpXG4ge1xuIFx0VEVTVChtbWFwX3JlZ2lvbl9iYXNpYyk7XG4mIzQzO1x0VEVTVChtbWFwX3JlZ2lvbl9maWxsX2hvbGVfbWVyZ2UpO1xuJiM0MztcdFRFU1QobW1hcF9yZWdpb25fZmlsbF9ob2xlX2ZsYWdzX21pc21hdGNoKTtcbiBcdFRFU1QocHVyZV9hbm9uX2Rldl96ZXJvKTtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTE6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHVuaXQgdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy92bWEvLCB3aGljaCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTIxNDBhZjFmMzI0N2RhYzJmODhlNmUwMTNkOTk3NjE4YWVkNTU3YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTE6NDQ6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmMgYi90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmMKaW5kZXggZmE3M2ZhZmYyMjYyNi4uNTNlNGFiZTZhNjNlNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuYwpAQCAtNDUsNiAmIzQzOzQ1LDcyIEBAIHN0YXRpYyBib29sIHRlc3RfbW1hcF9yZWdpb25fYmFzaWModm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBib29sIG1tYXBfcmVnaW9uX2ZpbGxfaG9sZShib29sIG1lcmdlKQomIzQzO3sKJiM0MzsJY29uc3Qgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gbWtfdm1hX2ZsYWdzKFZNQV9SRUFEX0JJVCwgVk1BX1dSSVRFX0JJVCwKJiM0MzsJCQlWTUFfTUFZUkVBRF9CSVQsIFZNQV9NQVlXUklURV9CSVQsIFZNQV9NQVlFWEVDX0JJVCk7CiYjNDM7CXZtYV9mbGFnc190IG1pZGRsZV9mbGFncyA9IHZtYV9mbGFnczsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCBtbSA9IHt9OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKJiM0MzsJdW5zaWduZWQgbG9uZyBhZGRyOwomIzQzOwlpbnQgY291bnQgPSAwOwomIzQzOwlWTUFfSVRFUkFUT1Iodm1pLCAmYW1wO21tLCAwKTsKJiM0MzsKJiM0MzsJY3VycmVudC0mZ3Q7bW0gPSAmYW1wO21tOwomIzQzOwlpZiAoIW1lcmdlKQomIzQzOwkJdm1hX2ZsYWdzX3NldCgmYW1wO21pZGRsZV9mbGFncywgVk1BX0VYRUNfQklUKTsKJiM0MzsKJiM0MzsJLyogTWFwIGF0IDB4MzAwMDAwLCBsZW5ndGggMHgzMDAwLiAqLwomIzQzOwlhZGRyID0gX19tbWFwX3JlZ2lvbihOVUxMLCAweDMwMDAwMCwgMHgzMDAwLCB2bWFfZmxhZ3MsIDB4MzAwLCBOVUxMKTsKJiM0MzsJQVNTRVJUX0VRKGFkZHIsIDB4MzAwMDAwKTsKJiM0MzsKJiM0MzsJLyogTWFwIGF0IDB4MzA2MDAwLCBsZW5ndGggMHgzMDAwLCBsZWF2aW5nIGEgaG9sZS4gKi8KJiM0MzsJYWRkciA9IF9fbW1hcF9yZWdpb24oTlVMTCwgMHgzMDYwMDAsIDB4MzAwMCwgdm1hX2ZsYWdzLCAweDMwNiwgTlVMTCk7CiYjNDM7CUFTU0VSVF9FUShhZGRyLCAweDMwNjAwMCk7CiYjNDM7CUFTU0VSVF9FUShtbS5tYXBfY291bnQsIDIpOwomIzQzOwomIzQzOwkvKiBNYXAgYXQgMHgzMDMwMDAsIGxlbmd0aCAweDMwMDAsIGZpbGxpbmcgdGhlIGhvbGUuICovCiYjNDM7CWFkZHIgPSBfX21tYXBfcmVnaW9uKE5VTEwsIDB4MzAzMDAwLCAweDMwMDAsIG1pZGRsZV9mbGFncywgMHgzMDMsIE5VTEwpOwomIzQzOwlBU1NFUlRfRVEoYWRkciwgMHgzMDMwMDApOwomIzQzOwlBU1NFUlRfRVEobW0ubWFwX2NvdW50LCBtZXJnZSA/IDEgOiAzKTsKJiM0MzsKJiM0MzsJdm1hX2l0ZXJfc2V0KCZhbXA7dm1pLCAwKTsKJiM0MzsJZm9yX2VhY2hfdm1hKHZtaSwgdm1hKSB7CiYjNDM7CQljb25zdCB1bnNpZ25lZCBsb25nIHN0YXJ0ID0gMHgzMDAwMDAgJiM0MzsgY291bnQgKiAweDMwMDA7CiYjNDM7CQljb25zdCB1bnNpZ25lZCBsb25nIGVuZCA9IG1lcmdlID8gMHgzMDkwMDAgOiBzdGFydCAmIzQzOyAweDMwMDA7CiYjNDM7CQkvKiBPbmx5IHRoZSBtaWRkbGUgVk1BIGluIHRoZSBub24tbWVyZ2UgY2FzZSBoYXMgVk1BX0VYRUMuICovCiYjNDM7CQljb25zdCBib29sIGlzX21pZGRsZV92bWEgPSBjb3VudCA9PSAxOwomIzQzOwkJY29uc3QgYm9vbCBleHBlY3RfZXhlY192bWEgPSBpc19taWRkbGVfdm1hICZhbXA7JmFtcDsgIW1lcmdlOwomIzQzOwomIzQzOwkJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fc3RhcnQsIHN0YXJ0KTsKJiM0MzsJCUFTU0VSVF9FUSh2bWEtJmd0O3ZtX2VuZCwgZW5kKTsKJiM0MzsJCUFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgc3RhcnQgJmd0OyZndDsgUEFHRV9TSElGVCk7CiYjNDM7CQlBU1NFUlRfRVEodm1hX3N0YXJ0X2Fub25fcGdvZmYodm1hKSwgc3RhcnQgJmd0OyZndDsgUEFHRV9TSElGVCk7CiYjNDM7CiYjNDM7CQlBU1NFUlRfVFJVRSh2bWFfdGVzdF9hbGwodm1hLCBWTUFfUkVBRF9CSVQsIFZNQV9XUklURV9CSVQsCiYjNDM7CQkJCQkgVk1BX01BWVJFQURfQklULCBWTUFfTUFZV1JJVEVfQklULAomIzQzOwkJCQkJIFZNQV9NQVlFWEVDX0JJVCkpOwomIzQzOwkJQVNTRVJUX0VRKHZtYV90ZXN0KHZtYSwgVk1BX0VYRUNfQklUKSwgZXhwZWN0X2V4ZWNfdm1hKTsKJiM0MzsKJiM0MzsJCWNvdW50JiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwlBU1NFUlRfRVEoY291bnQsIG1tLm1hcF9jb3VudCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShjbGVhbnVwX21tKCZhbXA7bW0sICZhbXA7dm1pKSwgY291bnQpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgdGVzdF9tbWFwX3JlZ2lvbl9maWxsX2hvbGVfbWVyZ2Uodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBtbWFwX3JlZ2lvbl9maWxsX2hvbGUodHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHRlc3RfbW1hcF9yZWdpb25fZmlsbF9ob2xlX2ZsYWdzX21pc21hdGNoKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gbW1hcF9yZWdpb25fZmlsbF9ob2xlKGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCB0ZXN0X3B1cmVfYW5vbl9kZXZfemVybyh2b2lkKQogewogCWNvbnN0IHZtYV9mbGFnc190IHZtYV9mbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfUkVBRF9CSVQsIFZNQV9XUklURV9CSVQsCkBAIC04NCw1ICYjNDM7MTUwLDcgQEAgc3RhdGljIGJvb2wgdGVzdF9wdXJlX2Fub25fZGV2X3plcm8odm9pZCkKIHN0YXRpYyB2b2lkIHJ1bl9tbWFwX3Rlc3RzKGludCAqbnVtX3Rlc3RzLCBpbnQgKm51bV9mYWlsKQogewogCVRFU1QobW1hcF9yZWdpb25fYmFzaWMpOwomIzQzOwlURVNUKG1tYXBfcmVnaW9uX2ZpbGxfaG9sZV9tZXJnZSk7CiYjNDM7CVRFU1QobW1hcF9yZWdpb25fZmlsbF9ob2xlX2ZsYWdzX21pc21hdGNoKTsKIAlURVNUKHB1cmVfYW5vbl9kZXZfemVybyk7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NTQKCQkJCQkJCW91dHB1dDogNjUKCQkJCQkJCXRob3VnaHRzOiAzNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIG9ubHkgdG91Y2hlcyBgdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jYC4gVGhhdCYjMzk7cyBpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvdm1hL2AgZGlyZWN0b3J5LCB3aGljaCwgYXMgSSBrbm93LCBpcyBhIHVzZXItc3BhY2Ugc2VsZnRlc3QgZnJhbWV3b3JrIGZvciBWTUEgb3BlcmF0aW9ucy4gSXQmIzM5O3Mgbm90IGtlcm5lbCBjb2RlLCBpdCYjMzk7cyB1c2VyLXNwYWNlIHRlc3Rpbmcgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuCgpOb3csIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBmb3IgYFdvcnRoRnV6emluZ2AuIFNlY3Rpb24gMiBpcyBwcmV0dHkgY2xlYXI6IHdlIG9ubHkgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjaGFuZ2VzIGZhbGwgc3RyaWN0bHkgaW50byBzcGVjaWZpYyBjYXRlZ29yaWVzLiBMZXQmIzM5O3Mgc2VlLi4uIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXMsIHJpZ2h0PyBXaGljaCBpbmNsdWRlcyB0aGluZ3MgbGlrZSB1c2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIHRoYXQgKmRvbiYjMzk7dCogYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgoKTG9va2luZyBhdCB0aGUgbW9kaWZpZWQgZmlsZSwgYHRvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuY2AsIGFuZCBjaGVja2luZyB0aGUgZGlmZiwgSSBjYW4gY29uZmlybSB0aGF0IHRoaXMgaXMgdGhlICpvbmx5KiBmaWxlIHRvdWNoZWQsIGFuZCBpdCYjMzk7cyB3aXRoaW4gdGhlIHRvb2xzIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGluIHRoZSB1c2VyLXNwYWNlIHRlc3RpbmcgZnJhbWV3b3JrLiBJIGRvbiYjMzk7dCBuZWVkIHRvIGRvIGFueSBkZWVwIGRpdmluZyB3aXRoIGBnaXQgZ3JlcGAgb3IgYHJlYWQtZmlsZWAgaGVyZTsgdGhlIGRpZmYgaXMgc2VsZi1jb250YWluZWQgYW5kIG9idmlvdXMuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXM6IGBXb3J0aEZ1enppbmc6IGZhbHNlYC4gTm8ga2VybmVsIGNvZGUgaXMgYmVpbmcgbW9kaWZpZWQsIG9ubHkgdXNlci1zcGFjZSB0ZXN0cy4gYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmUgYW4gZW1wdHkgbGlzdCwgYW5kIGxpa2V3aXNlIGBGb2N1c1N5bWJvbHNgIGlzIGVtcHR5IHRvby4gVGhlIHJhdGlvbmFsZSBpcyBzdHJhaWdodGZvcndhcmQ6IHRoaXMgcGF0Y2ggaXMgc29sZWx5IGZvY3VzZWQgb24gdXNlci1zcGFjZSB1bml0IHRlc3RzIGxvY2F0ZWQgaW4gYHRvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuY2AuIFRoaXMgbW9kaWZpY2F0aW9uIGRvZXNuJiMzOTt0IGludGVyYWN0IHdpdGggdGhlIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDExOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHVuaXQgdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy92bWEvLCB3aGljaCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdW5pdCB0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3ZtYS8sIHdoaWNoIGRvZXMgbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTE6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjQ0OjU0LjU4NDcxNzU3NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxOTc4OTc1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdW5pdCB0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3ZtYS8sIHdoaWNoIGRvZXMgbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjQ0OjU0LjU4NDczMTk2NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzMDQ0NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTIxNDBhZjFmMzI0N2RhYzJmODhlNmUwMTNkOTk3NjE4YWVkNTU3YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDExOjQ0OjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuY1xcbmluZGV4IGZhNzNmYWZmMjI2MjYuLjUzZTRhYmU2YTYzZTYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jXFxuQEAgLTQ1LDYgKzQ1LDcyIEBAIHN0YXRpYyBib29sIHRlc3RfbW1hcF9yZWdpb25fYmFzaWModm9pZClcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIG1tYXBfcmVnaW9uX2ZpbGxfaG9sZShib29sIG1lcmdlKVxcbit7XFxuK1xcdGNvbnN0IHZtYV9mbGFnc190IHZtYV9mbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfUkVBRF9CSVQsIFZNQV9XUklURV9CSVQsXFxuK1xcdFxcdFxcdFZNQV9NQVlSRUFEX0JJVCwgVk1BX01BWVdSSVRFX0JJVCwgVk1BX01BWUVYRUNfQklUKTtcXG4rXFx0dm1hX2ZsYWdzX3QgbWlkZGxlX2ZsYWdzID0gdm1hX2ZsYWdzO1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0IG1tID0ge307XFxuK1xcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbitcXHR1bnNpZ25lZCBsb25nIGFkZHI7XFxuK1xcdGludCBjb3VudCA9IDA7XFxuK1xcdFZNQV9JVEVSQVRPUih2bWksIFxcdTAwMjZtbSwgMCk7XFxuK1xcbitcXHRjdXJyZW50LVxcdTAwM2VtbSA9IFxcdTAwMjZtbTtcXG4rXFx0aWYgKCFtZXJnZSlcXG4rXFx0XFx0dm1hX2ZsYWdzX3NldChcXHUwMDI2bWlkZGxlX2ZsYWdzLCBWTUFfRVhFQ19CSVQpO1xcbitcXG4rXFx0LyogTWFwIGF0IDB4MzAwMDAwLCBsZW5ndGggMHgzMDAwLiAqL1xcbitcXHRhZGRyID0gX19tbWFwX3JlZ2lvbihOVUxMLCAweDMwMDAwMCwgMHgzMDAwLCB2bWFfZmxhZ3MsIDB4MzAwLCBOVUxMKTtcXG4rXFx0QVNTRVJUX0VRKGFkZHIsIDB4MzAwMDAwKTtcXG4rXFxuK1xcdC8qIE1hcCBhdCAweDMwNjAwMCwgbGVuZ3RoIDB4MzAwMCwgbGVhdmluZyBhIGhvbGUuICovXFxuK1xcdGFkZHIgPSBfX21tYXBfcmVnaW9uKE5VTEwsIDB4MzA2MDAwLCAweDMwMDAsIHZtYV9mbGFncywgMHgzMDYsIE5VTEwpO1xcbitcXHRBU1NFUlRfRVEoYWRkciwgMHgzMDYwMDApO1xcbitcXHRBU1NFUlRfRVEobW0ubWFwX2NvdW50LCAyKTtcXG4rXFxuK1xcdC8qIE1hcCBhdCAweDMwMzAwMCwgbGVuZ3RoIDB4MzAwMCwgZmlsbGluZyB0aGUgaG9sZS4gKi9cXG4rXFx0YWRkciA9IF9fbW1hcF9yZWdpb24oTlVMTCwgMHgzMDMwMDAsIDB4MzAwMCwgbWlkZGxlX2ZsYWdzLCAweDMwMywgTlVMTCk7XFxuK1xcdEFTU0VSVF9FUShhZGRyLCAweDMwMzAwMCk7XFxuK1xcdEFTU0VSVF9FUShtbS5tYXBfY291bnQsIG1lcmdlID8gMSA6IDMpO1xcbitcXG4rXFx0dm1hX2l0ZXJfc2V0KFxcdTAwMjZ2bWksIDApO1xcbitcXHRmb3JfZWFjaF92bWEodm1pLCB2bWEpIHtcXG4rXFx0XFx0Y29uc3QgdW5zaWduZWQgbG9uZyBzdGFydCA9IDB4MzAwMDAwICsgY291bnQgKiAweDMwMDA7XFxuK1xcdFxcdGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5kID0gbWVyZ2UgPyAweDMwOTAwMCA6IHN0YXJ0ICsgMHgzMDAwO1xcbitcXHRcXHQvKiBPbmx5IHRoZSBtaWRkbGUgVk1BIGluIHRoZSBub24tbWVyZ2UgY2FzZSBoYXMgVk1BX0VYRUMuICovXFxuK1xcdFxcdGNvbnN0IGJvb2wgaXNfbWlkZGxlX3ZtYSA9IGNvdW50ID09IDE7XFxuK1xcdFxcdGNvbnN0IGJvb2wgZXhwZWN0X2V4ZWNfdm1hID0gaXNfbWlkZGxlX3ZtYSBcXHUwMDI2XFx1MDAyNiAhbWVyZ2U7XFxuK1xcbitcXHRcXHRBU1NFUlRfRVEodm1hLVxcdTAwM2V2bV9zdGFydCwgc3RhcnQpO1xcbitcXHRcXHRBU1NFUlRfRVEodm1hLVxcdTAwM2V2bV9lbmQsIGVuZCk7XFxuK1xcdFxcdEFTU0VSVF9FUSh2bWFfc3RhcnRfcGdvZmYodm1hKSwgc3RhcnQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuK1xcdFxcdEFTU0VSVF9FUSh2bWFfc3RhcnRfYW5vbl9wZ29mZih2bWEpLCBzdGFydCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4rXFxuK1xcdFxcdEFTU0VSVF9UUlVFKHZtYV90ZXN0X2FsbCh2bWEsIFZNQV9SRUFEX0JJVCwgVk1BX1dSSVRFX0JJVCxcXG4rXFx0XFx0XFx0XFx0XFx0IFZNQV9NQVlSRUFEX0JJVCwgVk1BX01BWVdSSVRFX0JJVCxcXG4rXFx0XFx0XFx0XFx0XFx0IFZNQV9NQVlFWEVDX0JJVCkpO1xcbitcXHRcXHRBU1NFUlRfRVEodm1hX3Rlc3Qodm1hLCBWTUFfRVhFQ19CSVQpLCBleHBlY3RfZXhlY192bWEpO1xcbitcXG4rXFx0XFx0Y291bnQrKztcXG4rXFx0fVxcbitcXG4rXFx0QVNTRVJUX0VRKGNvdW50LCBtbS5tYXBfY291bnQpO1xcbitcXG4rXFx0QVNTRVJUX0VRKGNsZWFudXBfbW0oXFx1MDAyNm1tLCBcXHUwMDI2dm1pKSwgY291bnQpO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgdGVzdF9tbWFwX3JlZ2lvbl9maWxsX2hvbGVfbWVyZ2Uodm9pZClcXG4re1xcbitcXHRyZXR1cm4gbW1hcF9yZWdpb25fZmlsbF9ob2xlKHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCB0ZXN0X21tYXBfcmVnaW9uX2ZpbGxfaG9sZV9mbGFnc19taXNtYXRjaCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBtbWFwX3JlZ2lvbl9maWxsX2hvbGUoZmFsc2UpO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCB0ZXN0X3B1cmVfYW5vbl9kZXZfemVybyh2b2lkKVxcbiB7XFxuIFxcdGNvbnN0IHZtYV9mbGFnc190IHZtYV9mbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfUkVBRF9CSVQsIFZNQV9XUklURV9CSVQsXFxuQEAgLTg0LDUgKzE1MCw3IEBAIHN0YXRpYyBib29sIHRlc3RfcHVyZV9hbm9uX2Rldl96ZXJvKHZvaWQpXFxuIHN0YXRpYyB2b2lkIHJ1bl9tbWFwX3Rlc3RzKGludCAqbnVtX3Rlc3RzLCBpbnQgKm51bV9mYWlsKVxcbiB7XFxuIFxcdFRFU1QobW1hcF9yZWdpb25fYmFzaWMpO1xcbitcXHRURVNUKG1tYXBfcmVnaW9uX2ZpbGxfaG9sZV9tZXJnZSk7XFxuK1xcdFRFU1QobW1hcF9yZWdpb25fZmlsbF9ob2xlX2ZsYWdzX21pc21hdGNoKTtcXG4gXFx0VEVTVChwdXJlX2Fub25fZGV2X3plcm8pO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjQ0OjU1LjEyODQ2ODc1N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjY1NDEzMDI0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHVuaXQgdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy92bWEvLCB3aGljaCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDEyMTQwYWYxZjMyNDdkYWMyZjg4ZTZlMDEzZDk5NzYxOGFlZDU1N2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDExOjQ0OjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jIGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jXG5pbmRleCBmYTczZmFmZjIyNjI2Li41M2U0YWJlNmE2M2U2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmNcbkBAIC00NSw2ICs0NSw3MiBAQCBzdGF0aWMgYm9vbCB0ZXN0X21tYXBfcmVnaW9uX2Jhc2ljKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgbW1hcF9yZWdpb25fZmlsbF9ob2xlKGJvb2wgbWVyZ2UpXG4re1xuK1x0Y29uc3Qgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gbWtfdm1hX2ZsYWdzKFZNQV9SRUFEX0JJVCwgVk1BX1dSSVRFX0JJVCxcbitcdFx0XHRWTUFfTUFZUkVBRF9CSVQsIFZNQV9NQVlXUklURV9CSVQsIFZNQV9NQVlFWEVDX0JJVCk7XG4rXHR2bWFfZmxhZ3NfdCBtaWRkbGVfZmxhZ3MgPSB2bWFfZmxhZ3M7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0IG1tID0ge307XG4rXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbitcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbitcdGludCBjb3VudCA9IDA7XG4rXHRWTUFfSVRFUkFUT1Iodm1pLCBcdTAwMjZtbSwgMCk7XG4rXG4rXHRjdXJyZW50LVx1MDAzZW1tID0gXHUwMDI2bW07XG4rXHRpZiAoIW1lcmdlKVxuK1x0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNm1pZGRsZV9mbGFncywgVk1BX0VYRUNfQklUKTtcbitcbitcdC8qIE1hcCBhdCAweDMwMDAwMCwgbGVuZ3RoIDB4MzAwMC4gKi9cbitcdGFkZHIgPSBfX21tYXBfcmVnaW9uKE5VTEwsIDB4MzAwMDAwLCAweDMwMDAsIHZtYV9mbGFncywgMHgzMDAsIE5VTEwpO1xuK1x0QVNTRVJUX0VRKGFkZHIsIDB4MzAwMDAwKTtcbitcbitcdC8qIE1hcCBhdCAweDMwNjAwMCwgbGVuZ3RoIDB4MzAwMCwgbGVhdmluZyBhIGhvbGUuICovXG4rXHRhZGRyID0gX19tbWFwX3JlZ2lvbihOVUxMLCAweDMwNjAwMCwgMHgzMDAwLCB2bWFfZmxhZ3MsIDB4MzA2LCBOVUxMKTtcbitcdEFTU0VSVF9FUShhZGRyLCAweDMwNjAwMCk7XG4rXHRBU1NFUlRfRVEobW0ubWFwX2NvdW50LCAyKTtcbitcbitcdC8qIE1hcCBhdCAweDMwMzAwMCwgbGVuZ3RoIDB4MzAwMCwgZmlsbGluZyB0aGUgaG9sZS4gKi9cbitcdGFkZHIgPSBfX21tYXBfcmVnaW9uKE5VTEwsIDB4MzAzMDAwLCAweDMwMDAsIG1pZGRsZV9mbGFncywgMHgzMDMsIE5VTEwpO1xuK1x0QVNTRVJUX0VRKGFkZHIsIDB4MzAzMDAwKTtcbitcdEFTU0VSVF9FUShtbS5tYXBfY291bnQsIG1lcmdlID8gMSA6IDMpO1xuK1xuK1x0dm1hX2l0ZXJfc2V0KFx1MDAyNnZtaSwgMCk7XG4rXHRmb3JfZWFjaF92bWEodm1pLCB2bWEpIHtcbitcdFx0Y29uc3QgdW5zaWduZWQgbG9uZyBzdGFydCA9IDB4MzAwMDAwICsgY291bnQgKiAweDMwMDA7XG4rXHRcdGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5kID0gbWVyZ2UgPyAweDMwOTAwMCA6IHN0YXJ0ICsgMHgzMDAwO1xuK1x0XHQvKiBPbmx5IHRoZSBtaWRkbGUgVk1BIGluIHRoZSBub24tbWVyZ2UgY2FzZSBoYXMgVk1BX0VYRUMuICovXG4rXHRcdGNvbnN0IGJvb2wgaXNfbWlkZGxlX3ZtYSA9IGNvdW50ID09IDE7XG4rXHRcdGNvbnN0IGJvb2wgZXhwZWN0X2V4ZWNfdm1hID0gaXNfbWlkZGxlX3ZtYSBcdTAwMjZcdTAwMjYgIW1lcmdlO1xuK1xuK1x0XHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX3N0YXJ0LCBzdGFydCk7XG4rXHRcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fZW5kLCBlbmQpO1xuK1x0XHRBU1NFUlRfRVEodm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbitcdFx0QVNTRVJUX0VRKHZtYV9zdGFydF9hbm9uX3Bnb2ZmKHZtYSksIHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbitcbitcdFx0QVNTRVJUX1RSVUUodm1hX3Rlc3RfYWxsKHZtYSwgVk1BX1JFQURfQklULCBWTUFfV1JJVEVfQklULFxuK1x0XHRcdFx0XHQgVk1BX01BWVJFQURfQklULCBWTUFfTUFZV1JJVEVfQklULFxuK1x0XHRcdFx0XHQgVk1BX01BWUVYRUNfQklUKSk7XG4rXHRcdEFTU0VSVF9FUSh2bWFfdGVzdCh2bWEsIFZNQV9FWEVDX0JJVCksIGV4cGVjdF9leGVjX3ZtYSk7XG4rXG4rXHRcdGNvdW50Kys7XG4rXHR9XG4rXG4rXHRBU1NFUlRfRVEoY291bnQsIG1tLm1hcF9jb3VudCk7XG4rXG4rXHRBU1NFUlRfRVEoY2xlYW51cF9tbShcdTAwMjZtbSwgXHUwMDI2dm1pKSwgY291bnQpO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyBib29sIHRlc3RfbW1hcF9yZWdpb25fZmlsbF9ob2xlX21lcmdlKHZvaWQpXG4re1xuK1x0cmV0dXJuIG1tYXBfcmVnaW9uX2ZpbGxfaG9sZSh0cnVlKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgdGVzdF9tbWFwX3JlZ2lvbl9maWxsX2hvbGVfZmxhZ3NfbWlzbWF0Y2godm9pZClcbit7XG4rXHRyZXR1cm4gbW1hcF9yZWdpb25fZmlsbF9ob2xlKGZhbHNlKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgdGVzdF9wdXJlX2Fub25fZGV2X3plcm8odm9pZClcbiB7XG4gXHRjb25zdCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MgPSBta192bWFfZmxhZ3MoVk1BX1JFQURfQklULCBWTUFfV1JJVEVfQklULFxuQEAgLTg0LDUgKzE1MCw3IEBAIHN0YXRpYyBib29sIHRlc3RfcHVyZV9hbm9uX2Rldl96ZXJvKHZvaWQpXG4gc3RhdGljIHZvaWQgcnVuX21tYXBfdGVzdHMoaW50ICpudW1fdGVzdHMsIGludCAqbnVtX2ZhaWwpXG4ge1xuIFx0VEVTVChtbWFwX3JlZ2lvbl9iYXNpYyk7XG4rXHRURVNUKG1tYXBfcmVnaW9uX2ZpbGxfaG9sZV9tZXJnZSk7XG4rXHRURVNUKG1tYXBfcmVnaW9uX2ZpbGxfaG9sZV9mbGFnc19taXNtYXRjaCk7XG4gXHRURVNUKHB1cmVfYW5vbl9kZXZfemVybyk7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTE6NDQ6NTUuMTI4NDcxMzM3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY1NDA5ODc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIG9ubHkgdG91Y2hlcyBgdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jYC4gVGhhdCdzIGluIHRoZSBgdG9vbHMvdGVzdGluZy92bWEvYCBkaXJlY3RvcnksIHdoaWNoLCBhcyBJIGtub3csIGlzIGEgdXNlci1zcGFjZSBzZWxmdGVzdCBmcmFtZXdvcmsgZm9yIFZNQSBvcGVyYXRpb25zLiBJdCdzIG5vdCBrZXJuZWwgY29kZSwgaXQncyB1c2VyLXNwYWNlIHRlc3Rpbmcgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuXG5cbk5vdywgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGZvciBgV29ydGhGdXp6aW5nYC4gU2VjdGlvbiAyIGlzIHByZXR0eSBjbGVhcjogd2Ugb25seSBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgZmFsbCBzdHJpY3RseSBpbnRvIHNwZWNpZmljIGNhdGVnb3JpZXMuIExldCdzIHNlZS4uLiBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzLCByaWdodD8gV2hpY2ggaW5jbHVkZXMgdGhpbmdzIGxpa2UgdXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyB0aGF0ICpkb24ndCogYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuXG5Mb29raW5nIGF0IHRoZSBtb2RpZmllZCBmaWxlLCBgdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jYCwgYW5kIGNoZWNraW5nIHRoZSBkaWZmLCBJIGNhbiBjb25maXJtIHRoYXQgdGhpcyBpcyB0aGUgKm9ubHkqIGZpbGUgdG91Y2hlZCwgYW5kIGl0J3Mgd2l0aGluIHRoZSB0b29scyBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBpbiB0aGUgdXNlci1zcGFjZSB0ZXN0aW5nIGZyYW1ld29yay4gSSBkb24ndCBuZWVkIHRvIGRvIGFueSBkZWVwIGRpdmluZyB3aXRoIGBnaXQgZ3JlcGAgb3IgYHJlYWQtZmlsZWAgaGVyZTsgdGhlIGRpZmYgaXMgc2VsZi1jb250YWluZWQgYW5kIG9idmlvdXMuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpczogYFdvcnRoRnV6emluZzogZmFsc2VgLiBObyBrZXJuZWwgY29kZSBpcyBiZWluZyBtb2RpZmllZCwgb25seSB1c2VyLXNwYWNlIHRlc3RzLiBgRW5hYmxlQ29uZmlnc2Agd2lsbCBiZSBhbiBlbXB0eSBsaXN0LCBhbmQgbGlrZXdpc2UgYEZvY3VzU3ltYm9sc2AgaXMgZW1wdHkgdG9vLiBUaGUgcmF0aW9uYWxlIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBpcyBzb2xlbHkgZm9jdXNlZCBvbiB1c2VyLXNwYWNlIHVuaXQgdGVzdHMgbG9jYXRlZCBpbiBgdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jYC4gVGhpcyBtb2RpZmljYXRpb24gZG9lc24ndCBpbnRlcmFjdCB3aXRoIHRoZSBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGFueSBrZXJuZWwgbW9kdWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk1NCwiT3V0cHV0VG9rZW5zIjo2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjQ1OjAxLjc4MjU3MzMwNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHVuaXQgdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy92bWEvLCB3aGljaCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdW5pdCB0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3ZtYS8sIHdoaWNoIGRvZXMgbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDExOjQ1OjAxLjc4MjYwMTA0NVoiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkw62j[1] Phase: Running StartedAt: 2026-09-08 11:45:12 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkw62j[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-08 11:45:12 +0000 UTC FinishedAt: 2026-09-08 11:45:17 +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,}